代码规范

2022/2/21

本节介绍项目的代码规范,主要对对话脚本进行规范

请注意本项目的一些写法可能并不符合 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 心愛_制服_基本_嬉しい
1
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 上一次的表情
    #& 隐藏多余的表情方便下次的渐变特效
1
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
1
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 心愛_制服_基本_嬉しい
1
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
1

在背景表情不变的情况下可以省略

请看下面的例子

    # 这个语句是针对心爱设计的参数,能够调整心爱在对话框里面的位置
    $ 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)"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

这里展示的两次对话,心爱的表情均是 心愛_制服_基本_真顔 ,所以第 15 行这里可以在后面省略 show 语句

# 省略 voice 的情况

非常简单,没有音声所以省略

	# 莲 「洗脳するのはおやめなすって。この子そういうの信じちゃうから」
	lian "别给她洗脑了,她会相信的"
1
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 "不行。这样做会打乱规律,造成非常严重的后果。而且,我不认为这是一个明确有效的好方案"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

# 省略说话人物的情况

当说话人物是旁白时,即没有人说话时,你需要省略人物,这叫“无角色旁白”

	# nil 「……」
    "……"
1
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 "所以我不是说过了嘛…"

1
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)

1
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
1
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)
1
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
1
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" # 闭眼,微笑
1
2
3
4
5

# 解析

# 一条心爱 ai
#& 人物的注释信息

define ai = Character("心爱",color="#ffc9be",image="心愛")
#& define 缩略名 = Character("显示名",color="对话框显示 RGB 颜色",image="立绘所在文件夹")

# 常服_普通系列
#& 立绘归属系列

image side 心愛 心愛_制服_基本_にっこり = "images/face/心愛/心愛_制服_基本_にっこり.png" # 闭眼,微笑
#& image side tag(心愛,与文件夹绑定) 调用名(心愛_制服_基本_にっこり) = "素材相对位置" # 中文注释,方便查找表情
1
2
3
4
5
6
7
8
9
10
11

# GUI (用户图形界面) 代码规范

和前面的其它代码不同,这里没有什么具体的规范,只是规范了不同文件的内容

GUI 相关的参数请按照分类分别写入以下三个文件:

scripts/gui.rpy : .gui 存储空间的参数

scripts/options.rpy : 打包选项和关于信息

scripts/screens.rpy : 高级用户图形界面定制参数,具体的一些命令