第一个简单的脚本
# 第一个简单的脚本
警告!
本文编辑时的 DDLC 中文 Mod 模板可能与教程有极大出入,您应该在文档和模板完善后再来查看本文档。
在 Ren'Py 和 DDLC 的世界里,剧本与视觉内容都围绕着代码展开 —— 但不必慌张! Ren'Py 的语法已经做到了极致的简约,不用太多理解成本,上手即可。
# 从 script.rpy 开始
开始之前,你应该先来看一下 script.rpy
,里面包含了串联起整个游戏的逻辑代码。它带有注释,可以看看。
# script.rpy
# 这里支撑着游戏的整体运行逻辑。
label start:
# 用于防作弊(读取之前存档)的 ID。
# 不要在这里修改相应 ID。
$ anticheat = persistent.anticheat
# 这里控制游戏的章节,对于 poemgame 有用。
$ chapter = 0
# 控制是否允许玩家快速展示所有文字,默认基于开发者选项
# (在 definitions.rpy 里)
$ _dismiss_pause = config.developer
# 各种角色的名称。
# 如需添加新角色 -> $ mi_name = "Mike"
# 再去 definitions.rpy 定义一次角色。
$ s_name = "纱世里" # 原:Sayori
$ m_name = "莫妮卡" # 原:Monika
$ n_name = "夏树" # 原:Natsuki
$ y_name = "优里" # 原:Yuri
# 控制是否显示底部文字菜单和是否允许使用 Esc 显示菜单。
$ quick_menu = True
# 控制对话文字风格。
# 对于“修改”风格的文本,请使用 'style.edited',否则请保持 'style.normal'
$ style.say_dialogue = style.normal
# 控制 Sayori 此时是否 GG,属于 DDLC v1.1.0 及以前版本的残留。
$ in_sayori_kill = None
# 控制是否允许玩家跳过 / 快进对话。
$ allow_skipping = True
$ config.allow_skipping = True
# 跳转到脚本。
call ch0_start
return
# 游戏的 END 标志。(不是 Credits)
label endgame(pause_length=4.0):
$ quick_menu = False
stop music fadeout 2.0
scene black
show end
with dissolve_scene_full
pause pause_length
$ quick_menu = True
return
# 着手创建你的第一个 Label
# Next 分支
如果你使用 Next 分支,那么现在您不必再理会 script.rpy
文件,直接打开 script-ch1.rpy
,然后保留文件第一行的 label ch1_start:
,删除其他内容即可。
# 旧分支
如果你使用旧分支,那么准备工作会复杂一点点。将 script.rpy
中被注释包围的几行改成:
call ch1_start
提示
此处是为了与 Next 分支模板保持一致。
然后再创建文件 script-ch1.rpy
(包含后缀)。在新文件中输入:
label ch1_start:
这样,您就创建了您的第一个 Label。
# 开始让角色说话
没有文字的视觉小说可能连小说都算不上,它总得有角色说话。而对于 DDLC,总得有角色出演吧。
现在,我们要来添加旁白和 Monika 的对话。另起一行,按 4 个空格(一些编辑器可以直接按 Tab 键),输入:
"今天是学园祭的第一天。"
m "好了,各位!我们开始准备吧!"
注意!
包住文字的引号必须使用英文符号 ""
。
接下来,运行工程,你应该可以看到两句对话,一句是旁白,一句来自 Monika。这就是一段最基础的对话。
理解了这些基础内容后,我们可以添加更多对话与角色,让 Mod 更加热闹一点。在这里,我先来教你 Ren'Py 的对话基础语法:
<角色> "内容"
在 DDLC 的演出里,<角色>
的地方可以填以下几个:
<角色> | 代表的角色 |
---|---|
m | Monika |
s | Sayori |
n | Natsuki |
y | Yuri |
mc | 主角(你) |
空白 | 旁白 |
现在,尝试理解下面的代码,并运行一下:
"今天是学园祭的第一天。"
m "好了,各位!我们开始准备吧!"
s "耶!小饼干!"
n "要不也来尝下我的纸杯蛋糕?"
y "...其实都可以了。"
mc "总之,以后也要多多关照!"
# 添加 BGM
现在,Mod 已经拥有了对话,但还缺了很多东西,比如 BGM 与背景。这里我们先从 BGM 开始。
本节将以 t1
(Main Theme)为例,为你刚刚写的剧本增加 BGM。
在 label 行与对话之间先空一行,然后输入:
play music t1
现在运行 Mod 并进入游戏,你应该会发现在对话前游戏(非常生硬地)播放了背景音乐。
如果您需要播放更多 BGM,您可以参阅 BGM 列表(相应文档暂未制作)。
# 加个背景
这一步,我们来向剧本加入视觉内容。首先,让我们从展示背景图片开始。假设我想使用部室作为背景,那么在 label 行与刚刚增加的背景音乐行间空一行,输入:
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 "...其实都可以了。"
mc "总之,以后也要多多关照!"
再次运行 Mod,你可能会发现角色立绘会有部分角色的立绘不太靠近或过于靠近屏幕。
这时候,就可以用 zorder
:
"今天是学园祭的第一天。"
show monika 2 at t42 zorder 2
m "好了,各位!我们开始准备吧!"
show sayori 4r at t43 zorder 2
s "耶!小饼干!"
show natsuki 2l at t41 zorder 2
n "要不也来尝下我的纸杯蛋糕?"
show yuri 3m at t44 zorder 2
y "...其实都可以了。"
mc "总之,以后也要多多关照!"
运行 Mod。你会发现这时候角色立绘不会过于的靠近屏幕。
zorder
的作用就是控制图像在图层 Z 轴上的位置。
提示:
zorder
后面的数值越大,图像越远,反之数值越小则越近。
与 show
相反,hide
的作用就是隐藏。用法如下:
hide <之前在屏幕上显示的任何图像的名称>
如果在说话时,我们需要改变角色的表情,是不是需要一直重复执行 show
与 hide
呢?其实不用,我们只需要在句子前加上对应的表情代码就可以了。
如下例:
"今天是学园祭的第一天。"
show monika 2 at t42 zorder 2
m "好了,各位!我们开始准备吧!"
show sayori 4r at t43 zorder 2
s 1r "耶!小饼干!"
show sayori 4r at t43 zorder 2
show natsuki 2l at t41 zorder 2
n "要不也来尝下我的纸杯蛋糕?"
show yuri 3m at t44 zorder 2
y "...其实都可以了。"
mc "总之,以后也要多多关照!"
运行 Mod,我们会发现纱世里在说“耶!小饼干!”时立绘有所变化。
提示
definitions.rpy
为各个角色定义了许多个表情。
如果你需要使用自带的其他表情,它可以作为参考。这方面以后会展开来讲。