制作剧情回想

2022/5/19

本节文档介绍如何制作制作剧情回想(也叫 Replay )

官方文档:https://www.renpy.cn/doc/rooms.html#replay

# 前置知识

textbutton、imagebutton,见“QuickMenu(快捷菜单)的制作”一节

相对坐标表示法、绝对坐标表示法,见“添加不同大小的小头像”一节

持久化变量,见“设置和持久化变量”一节

# 需求描述

Replay 是一般 Galgame 中非常常见的功能,在本节我们实现一个能够根据周目情况,判断是否开放 Replay 及开放多少回想的 Replay

# Replay 的实现

这个做起来比之前的 Gallery 和音乐回放简单一些

按照官方文档里面的说法,和 Gallery 以及音乐回放一样,我们的代码需要分两个部分写,一部分是 screen ,也就是前面制作主菜单那里提到的给玩家看的 GUI ,而还有一部分是 Replay 的具体内容(也就是回放的起止点),这部分需要放到剧情脚本里面,我们来看代码

# screen 部分

也就是给玩家看的 GUI

下面的 grid 类似 HTML 的 <table> ,能够生成一个表格(网格),需要注意的是 grid 生成的格子不能空着,一定要往里面放上东西,关于 grid 的参考文档,见:https://www.renpy.cn/doc/screens.html?highlight=grid#grid

同时,依然是通过持久化变量的方式来判断哪些剧情向玩家开放

# 参考 Ver1.0 screens.rpy 2588-2652行
# ______________________________________________________________________________________________
# Replay
# 问:HS都没有,Replay 放个毛啊!
# 所以这里就提供给大伙 jump scene 的功能吧
screen replay:
    tag menu
    add "gui/replay/back.png"
    vbox:
        xalign 0.1
        yalign 0.1
        text "Scene Replay"
    hbox:
        xalign 0.5
        yalign 0.5

        grid 3 8:
            textbutton _("Scene01 序幕 我们的故事从这里开始") action Replay("scene01")
            textbutton _("Scene02 真冬&心爱线 和心爱酱约会") action Replay("scene02")
            textbutton _("Scene03 真冬&心爱线 心爱酱的夜访") action Replay("scene03")
            textbutton _("Scene04 真冬&心爱线 真冬酱的心意") action Replay("scene04")
            textbutton _("Scene05 真冬&心爱线 兄妹间的爱恋") action Replay("scene05")
            textbutton _("Scene06 真冬&心爱线 寄的莲和二人") action Replay("scene06")
            textbutton _("Scene07 真冬&心爱线 心爱酱的烦恼") action Replay("scene07")
            textbutton _("Scene08 真冬&心爱线 心爱酱再夜访") action Replay("scene08")
            textbutton _("Scene09 真冬&心爱线 从隔阂到幸终") action Replay("scene09")
            textbutton _("Scene10 真冬&心爱线 三人新的开始") action Replay("scene10")
            textbutton _("Scene11 真冬&心爱线 现在是女子会") action Replay("scene11")
            textbutton _("Scene12 真冬&心爱线 二人奇妙体验") action Replay("scene12")
            textbutton _("Scene13 真冬&心爱线 夏威夷我来啦") action Replay("scene13")
            textbutton _("Scene14 真冬&心爱线 三人心跳时刻") action Replay("scene14")
            textbutton _("Scene15 真冬&心爱线 故事还将继续") action Replay("scene15")
            if persistent.two:
                textbutton _("Scene16       里昂线       意料外的选择") action Replay("scene16")
                textbutton _("Scene17       里昂线       初合演纸芝居") action Replay("scene17")
                textbutton _("Scene18       里昂线       班主任的考验") action Replay("scene18")
                textbutton _("Scene19       里昂线       和里昂初约会") action Replay("scene19")
                textbutton _("Scene20       里昂线       考验后的幸福") action Replay("scene20")
                textbutton _("Scene21       里昂线       梦想的第一战") action Replay("scene21")
                textbutton _("Scene22       里昂线       忙碌快乐日常") action Replay("scene22")
                textbutton _("Scene Replay By Luckykeeper")
                textbutton _("Enjoy The Game!")
            else:
                textbutton _("Locked!")
                textbutton _("Locked!")
                textbutton _("Locked!")
                textbutton _("Locked!")
                textbutton _("Locked!")
                textbutton _("Locked!")
                textbutton _("Locked!")
                textbutton _("Scene Replay By Luckykeeper")
                textbutton _("Enjoy The Game!")

    imagebutton:
        xalign 0.99
        yalign 0.99
        idle "gui/saveload/btn_back_base.png"
        hover "gui/saveload/btn_back_onMouse.png"
        selected_hover "gui/saveload/btn_back_onClick.png"
        action ShowMenu("main_menu_2")

    # 页面下方的提示
    vbox:
        xalign 0
        yalign 1.0
        text "By Luckykeeper: 因为移植版莫得 HScene ,所以给带伙做了一个回顾大场景的功能, Scene 以过场人物动画为界"
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66

# 剧情脚本部分

剧情脚本部分标明 Replay 的起止点

参考代码如下:

# 参考 Ver1.0 scene01.rpy,此处有所删改
label scene01: # label 后面的名字表示这个 scene 的名字,screen 里面 action Replay("scene01") 就用这个名字寻找要回放的场景,所以如果你需要 Replay 小的场景的话(比如 HScene ),你需要从大的 Scene 中把小场景切分出来,单独标一个 label ,而不是像我在本次汉化一样,以过场动画作为 Scene 的切分
    …… # 省略号表示中间的代码
    …… # 省略号表示中间的代码
    …… # 省略号表示中间的代码
    $ renpy.end_replay() # 这句表示回放结束,不一定放在 scene 的结尾,可以放在 Scene 的中间
1
2
3
4
5
6