代码规范
本节介绍项目的代码规范,主要对对话脚本进行规范
请注意本项目的一些写法可能并不符合 Ren’Py 文档中的代码规范,但是却能实实在在解决本项目中遇到的问题,当你发现本文档的一些写法与官方文档出入的地方时,请自行尝试,选用更好的、更适合你的项目的方法
# 对话代码规范
# 示例
以下是一个完整的对话示例
Markdown 无法正确渲染 Ren’Py 语言,这里使用 python 进行渲染,请注意,建议复制到 IDE 中,更加直观,后面将不再提示
注意:前面需要留一个 TAB 的位置(或者四个空格),如果没有特别说明,你都需要这么做
# 这个语句是针对心爱设计的参数,能够调整心爱在对话框里面的位置
$ sideimagesize.SideImageXalign = 0.10
$ sideimagesize.SideImageYalign = 15.72
$ sideimagesize.SideImageZoom = 0.96
# 心爱 「完全に立ち上がる前にマイコンピューターをダブルクリックして、リムーバブルディスクのアイコンを連打する私」
show 心愛_制服_基本_真顔 at love69_xinai_center with dissolve
voice "voice/心愛/cca_a1_0875.ogg"
ai 心愛_制服_基本_真顔 "在电脑完全启动之前双击我的电脑,连击可移动磁盘图标的我!"
hide 心愛_制服_基本_嬉しい
2
3
4
5
6
7
8
9
10
这段代码会得到这样的效果:
(图片等待日后上传)
# 解析
解析注释用 #&
表示,位于要解释的下一行,后面也不再提示
# 这个语句是针对心爱设计的参数,能够调整心爱在对话框里面的位置
$ sideimagesize.SideImageXalign = 0.10
$ sideimagesize.SideImageYalign = 15.72
$ sideimagesize.SideImageZoom = 0.96
#& 上面这个是项目组提供的一个方法,调用这个方法可以调整对话框头像到合适位置
# 心爱 「完全に立ち上がる前にマイコンピューターをダブルクリックして、リムーバブルディスクのアイコンを連打する私」
#& # 当前说话人物(心爱) 「日语原文」 ;主要是为了日后校对、纠错用
#& 当没有说话人物时用 nil
#& 示例: # nil 「ちなみに、心愛、そいつはダミーだ。残念だったな。」
show 心愛_制服_基本_真顔 at love69_xinai_center with dissolve
#& show 人物表情 at 位置 with 效果;用来在背景图片中展示人物的位置
voice "voice/心愛/cca_a1_0875.ogg"
#& voice "音声文件的相对位置" 在 voice 通道播放人物语音
ai 心愛_制服_基本_真顔 "在电脑完全启动之前双击我的电脑,连击可移动磁盘图标的我!"
#& 人物绑定名称 小对话框表情 "文本内容"
hide 心愛_制服_基本_嬉しい
#& hide 上一次的表情
#& 隐藏多余的表情方便下次的渐变特效
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 省略
以上示例中的一些内容可以省略
# 省略对话框人物头像调整参数的情况
# 这个语句是针对心爱设计的参数,能够调整心爱在对话框里面的位置
$ sideimagesize.SideImageXalign = 0.10
$ sideimagesize.SideImageYalign = 15.72
$ sideimagesize.SideImageZoom = 0.96
2
3
4
这个语句在同一人物连续出现时可以省略,如下:
在该例中,我们的主人公“莲”是没有对话框头像的,和 nil
可视为一种情况
请注意本例第 13 行,没有引入对话框人物头像调整参数
# 这个语句是针对心爱设计的参数,能够调整心爱在对话框里面的位置
$ sideimagesize.SideImageXalign = 0.10
$ sideimagesize.SideImageYalign = 15.72
$ sideimagesize.SideImageZoom = 0.96
# 心爱 「ふい~…まさか、シャンプーの入れ物にリンスが入ってるとは…」
show 心愛_制服_基本_不機嫌 at love69_xinai_center with dissolve
voice "voice/心愛/cca_a1_0865.ogg"
ai 心愛_制服_基本_不機嫌 "呜欸欸~……怎么说呢,没想到洗发水的瓶子里面竟然装了护发素……"
# 莲 「だから言ったじゃねぇか…」
lian "所以我不是说了嘛…"
# 心爱 「お? ジャストタイミング?」
show 心愛_制服_基本_嬉しい at love69_xinai_center with dissolve
voice "voice/心愛/cca_a1_0866.ogg"
ai 心愛_制服_基本_嬉しい "哦?Just Timing吗?"
hide 心愛_制服_基本_不機嫌
# nil 「俺が真冬の部屋から出ると、ちょうど、俺の部屋に入るために階段を登る心愛に鉢合わせした。」
"我从真冬的房间出来的时候,正好撞见了为了进入我的房间而正在爬楼梯的心爱"
# 莲 「しーっ…お姫様はぐっすりの様子でしたよ」
lian "嘘…公主看起来睡得很香甜捏"
# 心爱 「あ、じゃぁ、こで立ち話もあれだね…」
show 心愛_制服_基本_泣き at love69_xinai_center with dissolve
voice "voice/心愛/cca_a1_0867.ogg"
ai 心愛_制服_基本_泣き "啊,那,在这里站着说话也是有点那个…"
hide 心愛_制服_基本_嬉しい
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 省略 show 的情况
show 心愛_制服_基本_不機嫌 at love69_xinai_center with dissolve
在背景表情不变的情况下可以省略
请看下面的例子
# 这个语句是针对心爱设计的参数,能够调整心爱在对话框里面的位置
$ sideimagesize.SideImageXalign = 0.10
$ sideimagesize.SideImageYalign = 15.72
$ sideimagesize.SideImageZoom = 0.96
# 心爱 「そうか…私はEDFの惑星探査員で地質学者の『エレナ・ユン・グラード』…!」
show 心愛_制服_基本_真顔 at love69_xinai_left with dissolve
voice "voice/心愛/cca_a1_0160.ogg"
ai 心愛_制服_基本_真顔 "是吗…我是EDF行星探查员,地质学家的『艾莉娜・尤恩・格拉德』…!"
hide 心愛_制服_基本_驚き
# 莲 「洗脳するのはおやめなすって。この子そういうの信じちゃうから」
lian "别给她洗脑了,她会相信的"
# 心爱 「くっ…私が眠ってから何年経ったというのだ…。他の探検隊のメンバーは一体…私は…何かされたのか…だめだ、何も思い出せん…」
voice "voice/心愛/cca_a1_0161.ogg"
ai 心愛_制服_基本_真顔 "啊...我已经沉睡了几年了...其他探险队的成员...我...是不是被人做了什么...不行,我什么都想不起来了...(L:小仓朝阳既视感233)"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
这里展示的两次对话,心爱的表情均是 心愛_制服_基本_真顔
,所以第 15 行这里可以在后面省略 show 语句
# 省略 voice 的情况
非常简单,没有音声所以省略
# 莲 「洗脳するのはおやめなすって。この子そういうの信じちゃうから」
lian "别给她洗脑了,她会相信的"
2
# 省略小对话框表情的情况
在表情不变的情况下,你也可以省略小对话框表情,注意观察第 19 行的用法
# 这个语句是针对心爱设计的参数,能够调整心爱在对话框里面的位置
$ sideimagesize.SideImageXalign = 0.10
$ sideimagesize.SideImageYalign = 15.72
$ sideimagesize.SideImageZoom = 0.96
# 心爱 「ダメだ。そんな事をしたら法則が乱れて大変なことになる。それに、明確なベネフィットをもたらすソリューションとは思えない」
# 下面动作一样,省略
# hide 心愛_制服_基本_ぶわー
show 心愛_制服_基本_不機嫌 at love69_right with dissolve
voice "voice/心愛/cca_a1_0043.ogg"
ai 心愛_制服_基本_不機嫌 "不行。这样做会打乱规律,造成非常严重的后果。而且,我不认为这是一个明确有效的好方案"
hide 心愛_制服_基本_ぶわー
# 莲 「もう一度言ってみろ」
lian "再说一遍"
# 心爱 「ダメだ。そんな事をしたら法則が乱れて大変なことになる。それに、明確なベネフィットをもたらすソリューションとは思えない」
voice "voice/心愛/cca_a1_0044.ogg" ### &&需要去听一下是新的还是重用<--并不是重用,44是对的
ai "不行。这样做会打乱规律,造成非常严重的后果。而且,我不认为这是一个明确有效的好方案"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 省略说话人物的情况
当说话人物是旁白时,即没有人说话时,你需要省略人物,这叫“无角色旁白”
# nil 「……」
"……"
2
# 省略 hide 的情况
在人物第一次出现的时候和 scene 刷新时,不需要 hide 之前的表情,请注意观察第 16 行
# 画面切换回葛城家二楼走廊
# BGM起:Slide the Way
scene 自宅二階廊下_夜 at love69_bg1440 with ImageDissolve("images/tr/trans01.png", 1.5, ramplen=8, reverse=True, alpha=True, time_warp=None)
play music bgmthirtysix fadein 4.0
# 这个语句是针对心爱设计的参数,能够调整心爱在对话框里面的位置
$ sideimagesize.SideImageXalign = 0.10
$ sideimagesize.SideImageYalign = 15.72
$ sideimagesize.SideImageZoom = 0.96
# 心爱 「ふい~…まさか、シャンプーの入れ物にリンスが入ってるとは…」
#(原作少了右半括号捏)
show 心愛_制服_基本_不機嫌 at love69_xinai_center with dissolve
voice "voice/心愛/cca_a1_0865.ogg"
ai 心愛_制服_基本_不機嫌 "呜欸欸~……怎么说呢,没想到洗发水的瓶子里面竟然装了护发素……"
# 莲 「だから言ったじゃねぇか…」
lian "所以我不是说过了嘛…"
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 场景切换代码规范
# 示例
场景切换总的来说有两种情况
# ① Scene 内的切换
请看下面的示例
# 原地tp
scene black with ImageDissolve("images/tr/ysr006.png", 0.8, ramplen=64, reverse=False, alpha=True, time_warp=None)
scene 教室_昼 at love69_bg1220 with ImageDissolve("images/tr/ysr006.png", 0.8, ramplen=64, reverse=False, alpha=True, time_warp=None)
2
3
4
# ② Scene 之间的切换
请看下面的示例
# 隐藏 quick_menu
$ quick_menu = False
play sound "voice/effect/moosehead honk (stinger).ogg"
play music bgmtwentyeight fadeout 4.0 fadein 4.0 # 针对这里BGM的特点需要把 Scene04 的BGM提前到 Scene03 脚本的尾巴这里写,并增大 fadeout/in 的间隔
scene black with ImageDissolve("images/tr/縦ブラインド.png", 1.5, ramplen=128, reverse=True, alpha=True, time_warp=None)
scene アイキャッチ心愛 with ImageDissolve("images/tr/縦ブラインド.png", 1.5, ramplen=128, reverse=True, alpha=True, time_warp=None)
$ renpy.pause(1.5, hard=True)
jump scene04
label scene04:
# scene04 开始
# 地点:Q版
# 人物:心爱 真冬
# BGM:bgm28
image bg sdcg01a = "images/bg/sdcg01a.png"
scene sdcg01a at love69_bg1440 with ImageDissolve("images/tr/縦ブラインド.png", 1.5, ramplen=128, reverse=True, alpha=True, time_warp=None)
# 显示 quick_menu
$ quick_menu = True
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 解析
# ① Scene 内的切换
# 原地tp
scene black with ImageDissolve("images/tr/ysr006.png", 0.8, ramplen=64, reverse=False, alpha=True, time_warp=None)
#& 和 show 类似,可以用 at 和 with 方法
scene 教室_昼 at love69_bg1220 with ImageDissolve("images/tr/ysr006.png", 0.8, ramplen=64, reverse=False, alpha=True, time_warp=None)
2
3
4
# ② Scene 之间的切换
# 隐藏 quick_menu
$ quick_menu = False
#& 这个方法隐藏了 quick_menu
play sound "voice/effect/moosehead honk (stinger).ogg"
#& 在 sound (音效)通道播放过场音效
play music bgmtwentyeight fadeout 4.0 fadein 4.0 # 针对这里BGM的特点需要把 Scene04 的BGM提前到 Scene03 脚本的尾巴这里写,并增大 fadeout/in 的间隔
#& 提前播放下一幕的 BGM 渐出之前的 BGM 渐入后面的 BGM
scene black with ImageDissolve("images/tr/縦ブラインド.png", 1.5, ramplen=128, reverse=True, alpha=True, time_warp=None)
scene アイキャッチ心愛 with ImageDissolve("images/tr/縦ブラインド.png", 1.5, ramplen=128, reverse=True, alpha=True, time_warp=None)
#& 切换背景,清除图层
$ renpy.pause(1.5, hard=True)
#& 暂停鼠标点击,防止快速跳过(不影响 Skip 功能)
jump scene04
#& 切换到下一幕(scene04)
label scene04:
#& 注意要顶格写,scene04 的标签
# scene04 开始
# 地点:Q版
# 人物:心爱 真冬
# BGM:bgm28
#& 相关信息
image bg sdcg01a = "images/bg/sdcg01a.png"
#& 这里演示了定义一个新背景图像的方法,虽然不定义也可以找到,但是我们还是定义一下
#& 如果不是第一次引用可以省略
scene sdcg01a at love69_bg1440 with ImageDissolve("images/tr/縦ブラインド.png", 1.5, ramplen=128, reverse=True, alpha=True, time_warp=None)
# 显示 quick_menu
$ quick_menu = True
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 人物定义代码规范
# 示例
非常简单,请看下面的例子
# 一条心爱 ai
define ai = Character("心爱",color="#ffc9be",image="心愛")
# 常服_普通系列
image side 心愛 心愛_制服_基本_にっこり = "images/face/心愛/心愛_制服_基本_にっこり.png" # 闭眼,微笑
2
3
4
5
# 解析
# 一条心爱 ai
#& 人物的注释信息
define ai = Character("心爱",color="#ffc9be",image="心愛")
#& define 缩略名 = Character("显示名",color="对话框显示 RGB 颜色",image="立绘所在文件夹")
# 常服_普通系列
#& 立绘归属系列
image side 心愛 心愛_制服_基本_にっこり = "images/face/心愛/心愛_制服_基本_にっこり.png" # 闭眼,微笑
#& image side tag(心愛,与文件夹绑定) 调用名(心愛_制服_基本_にっこり) = "素材相对位置" # 中文注释,方便查找表情
2
3
4
5
6
7
8
9
10
11
# GUI (用户图形界面) 代码规范
和前面的其它代码不同,这里没有什么具体的规范,只是规范了不同文件的内容
GUI 相关的参数请按照分类分别写入以下三个文件:
scripts/gui.rpy
: .gui 存储空间的参数
scripts/options.rpy
: 打包选项和关于信息
scripts/screens.rpy
: 高级用户图形界面定制参数,具体的一些命令