DokiMod 开发文档 DokiMod 开发文档
主页
DDLC 中文 Mod 模板
返回主站 (opens new window)
  • Mod 模板 2.0 (opens new window)
  • 新版文档 (opens new window)
  • 新版开发文档 (opens new window)
主页
DDLC 中文 Mod 模板
返回主站 (opens new window)
  • Mod 模板 2.0 (opens new window)
  • 新版文档 (opens new window)
  • 新版开发文档 (opens new window)
  • 序

  • 入门

    • 开始准备环境
    • 第一个简单的脚本
    • 选择菜单与多 Label
    • 存档文件和判断
    • 角色立绘那些事
    • 变量与定义角色
      • 变量
      • 定义角色
    • 额外脚本介绍
  • 进阶

  • 分发

  • 杂项

  • DDLC 中文 Mod 模板
  • 入门
PartyParrot359
2021-08-24

变量与定义角色

# 变量与定义角色

这次,我们学习的内容非常的简单,你不用担心过于复杂。

# 变量

在编程中,变量是一个重要的因素。而 Python 里的变量可以存储各种值,如布尔值、整数值、字符串...(这些在之前存档文件那一章也有稍微提到过。)

这是上次的脚本:

label ch1_start:
    $ persistent.playthrough = 0
    $ persistent.anticheat = renpy.random.randint(1000, 0)
    $ delete_all_saves()
    stop music fadeout 2.0
    scene bg club_day with dissolve_scene_full
    "今天是学园祭的第一天。"
    show monika 2 at t42
    m "好了,各位!我们开始准备吧!"
    show sayori 4r at t43
    s "耶!小饼干!"
    show natsuki 2l at t41
    n "要不也来尝下我的纸杯蛋糕?"
    show yuri 3m at t44
    y "...其实都可以了。"
    $ n_aff = 0
    $ s_aff = 0
    menu:
        "那么,我该先吃些什么呢?"
        "纸杯蛋糕":
            n "怎么样,是不是很好吃啊?"
            $ n_aff += 1
            $ s_aff = s_aff - 1
        "小饼干":
            s "怎么样,是不是很好吃?"
            $ s_aff += 1
            $ n_aff = n_aff - 1
    menu:
        "我该先和谁交流?"
        "纱世里":
            s "你好啊!在文学部感觉怎么样?"
        "莫妮卡":
            m "嗨,有什么事吗?"
        "夏树":
            n "哼,看我干什么?"
        "优里":
            y "你好..."
    if s_aff >= 1:
        s "诶嘿嘿~"
    mc "总之,以后也要多多关照!"

让我们来增加一些新东西:

label ch1_start:
    $ persistent.playthrough = 0
    $ persistent.anticheat = renpy.random.randint(1000, 0)
    $ delete_all_saves()
    stop music fadeout 2.0
    scene bg club_day with dissolve_scene_full
    "今天是学园祭的第一天。"
    show monika 2 at t42
    m "好了,各位!我们开始准备吧!"
    show sayori 4r at t43
    s "耶!小饼干!"
    show natsuki 2l at t41
    n "要不也来尝下我的纸杯蛋糕?"
    show yuri 3m at t44
    y "...其实都可以了。"
    $ n_aff = 0
    $ s_aff = 0
    menu:
        "那么,我该先吃些什么呢?"
        "纸杯蛋糕":
            n "怎么样,是不是很好吃啊?"
            $ n_aff += 1
            $ s_aff = s_aff - 1
        "小饼干":
            s "怎么样,是不是很好吃?"
            $ s_aff += 1
            $ n_aff = n_aff - 1
    menu:
        "我该先和谁交流?"
        "纱世里":
            s "你好啊!在文学部感觉怎么样?"
        "莫妮卡":
            m "嗨,有什么事吗?"
        "夏树":
            n "哼,看我干什么?"
        "优里":
            y "你好..."
    if s_aff >= 1:
        s "诶嘿嘿~"
    mc "总之,以后也要多多关照!"
    if s_aff >= 1:
        call ch1_exc_sayori
    elseif n_aff >= 1: # 这本来可以不用加,但是保险起见...
        call ch1_exc_natsuki
    return

label ch1_exc_sayori:
    stop music fadeout 2.0
    scene bg club_day with dissolve_scene_full
    show sayori 1a at t11 zorder 2
    s "[player]?"
    mc "怎么了?"
    $ sleep_time = renpy.random.randint(0, 4)
    while sleep_time == 0:
        $ sleep_time = renpy.random.randint(0, 4)
    s "你已经睡了[sleep_time]个小时了!"
    s "这里又不是午睡部!"
    mc "好啦好啦,就让我睡一会。"
    return
    
label ch1_exc_natsuki:
    stop music fadeout 2.0
    scene bg club_day with dissolve_scene_full
    show natsuki 2c at t11 zorder 2
    n "对了,[player]。"
    n "你说过你喜欢漫画对吧?"
    mc "是啊,怎么了?"
    n 2l "我想你一定会喜欢这个!"
    "夏树把我带到了橱柜旁。"
    hide natsuki
    play sound closet_open
    scene bg closet
    "橱柜里放满了漫画。"
    mc "哇!"
    show natsuki 4z at t11 zorder 2
    n "怎么样?喜欢吧?"
    return

运行脚本,如果 s_aff 大于或等于 1,就会触发 Sayori 支线; 否则如果 n_aff 大于或等于 1,就会触发 Natsuki 线。 你可能也会发现,在这两条线路中,Sayori 和 Natsuki 都会说出 MC 的名字。

扩展知识

这里的 [player] 会被引擎自动替换成 MC 的名字。

while 是 Python 中的一种循环,用法如下:

while <条件>:     # 如果条件符合:
    # 执行代码...

而在这里,Sayori 支线中的以下代码就利用了 while:

    $ sleep_time = renpy.random.randint(0, 4)
    while sleep_time == 0:
        $ sleep_time = renpy.random.randint(0, 4)
    s "你已经睡了[sleep_time]个小时了!"

代表着如果 sleep_time 这个变量等于 0 就重新随机生成整数并赋值到 sleep_time,如果它还是等于 0 就会继续循环,否则会继续运行下面的代码。 下面的对话就会调用刚刚定义的变量,使 Sayori 说出“你已经睡了2个小时了!”之类的话。

(Ren'Py 的官方文档有对 renpy.random.randint 这个函数的介绍,如果你有所了解,会知道刚刚其实不用这么麻烦,但毕竟刚好可以演示 while。)

可见,如果想要在对话中说出变量值,只需要加上一个 [] 并在里面写上变量名(当然也可以是任何有效的 Python 表达式)就可以了。

# 定义角色

有时候,我们可能需要增加一些其他的角色来丰富剧情。所以,我们现在就来动手添加一个角色吧。

Next 分支:

  • 打开 definitions.rpy 文件,然后 Ctrl+F 查找 # 角色变量,找到下面的代码:
# 角色变量

# This configure the character variables for writing dialog for each character
## To define a new character with assets, do so like this
# define e = DynamicCharacter('e_name', image='eileen', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
## To define a new character without assets, do so like this
# define en = Character('Eileen & Nat', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define narrator = Character(ctc="ctc", ctc_position="fixed")
define mc = DynamicCharacter('player', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define s = DynamicCharacter('s_name', image='sayori', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define m = DynamicCharacter('m_name', image='monika', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define n = DynamicCharacter('n_name', image='natsuki', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define y = DynamicCharacter('y_name', image='yuri', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define ny = Character('夏树 & 优里', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
  • 复制这一行:define mc = DynamicCharacter('player', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
  • 然后换行并粘贴,把 mc 改成任意字符,如 a;括号后的 'player' 改成之后要用的变量名,如 'a_name';
  • Ctrl+F 查找 default s_name = "纱世里",复制换行并粘贴,把 s_name 改成你前面输入的变量名。 比如,前面我们把括号后的变量名改成了 a_name,那么这一步这里的 s_name 就要改成 a_name。
  • 把"纱世里"改成你想要的名字,比如这里改成"Allen"。

到这里,一个角色就定义完成了!最后的代码应该长这样:

# 角色变量

# This configure the character variables for writing dialog for each character
## To define a new character with assets, do so like this
# define e = DynamicCharacter('e_name', image='eileen', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
## To define a new character without assets, do so like this
# define en = Character('Eileen & Nat', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define narrator = Character(ctc="ctc", ctc_position="fixed")
define mc = DynamicCharacter('player', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define s = DynamicCharacter('s_name', image='sayori', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define m = DynamicCharacter('m_name', image='monika', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define n = DynamicCharacter('n_name', image='natsuki', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define y = DynamicCharacter('y_name', image='yuri', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define ny = Character('夏树 & 优里', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")
define a = DynamicCharacter('a_name', what_prefix='"', what_suffix='"', ctc="ctc", ctc_position="fixed")

# ...

# Default Name Variables
## To define a default name do so like this
# default e_name = "Eileen"
default s_name = "纱世里"
default m_name = "莫妮卡"
default n_name = "夏树"
default y_name = "优里"
default a_name = "Allen"

在之后的章节里,本文档会详细讲解如何为 Mod 增加资源(包含增加立绘),而以后会继续教您怎么扩展这个角色。

上次更新于: 1/22/2022, 3:45:15 AM
角色立绘那些事
额外脚本介绍

← 角色立绘那些事 额外脚本介绍→

Theme by Vdoing | Copyright © 2021-2022 DokiMod Team | 本网站是粉丝作品,与 Team Salvato 无关 | hosted by ▲ Vercel | powered by VuePress
访问统计信息
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式