NVL模式教程 link
视觉小说中总共有两种表现形式。ADV模式下使用界面底部的一个窗口显示对话和旁白,每次显示一行。NVL模式下使用几乎占据整个界面的一个窗口,每次能在界面上显示多行对话和旁白。
在这篇教程中,我们会解释如何使用Ren’Py制作NVL模式的游戏。教程假设你已经熟悉Ren’Py的基本功能,至少看过 快速入门 内容。
入门 link
NVL模式可以通过两步操作添加到Ren’Py脚本中。第一步是定义使用NVL模式的角色,第二步是在每页结尾添加 nvl clear
语句。
在每个角色定义阶段,加入一个 kind=nvl
参数就定义了一个使用NVL模式的角色。例如,如果我们在快速入门手册定义的角色:
define s = Character('希尔维亚', color="#c8ffc8")
define m = Character('我', color="#c8c8ff")
改为使用NVL模式,定义方法变成:
define s = Character('希尔维亚', kind=nvl, color="#c8ffc8")
define m = Character('我', kind=nvl, color="#c8c8ff")
NVL模式的旁白可以使用如下定义:
define narrator = nvl_narrator
需要注意,我们也可以添加一个 narrator
的NVL模式定义。 narrator
角色用于不由任何其一个角色发言的内容。
如果我们一直这样运行,开头的几行文本可以正常显示。一会之后,文本会显示到界面底部下面,就看不到了。要将脚本分割为多页,可以在分页的地方使用一个 nvl clear
语句。
下面是一个使用分页的样例脚本:
label start:
"我得问问她!"
m "嗯呣……你是否可以……"
m "你是否可以做我的视觉小说画师?"
nvl clear
"沉默。"
"她有些吃惊,然后……"
s "当然,不过,什么是\"视觉小说\"?"
nvl clear
NVL模式的游戏一般在每段都有更多文本,这个样例只是个最基础的NVL模式脚本。(适合用于不需要转场效果的电子小说(kinetic novel)。)
NVL的独白模式 link
在NVL模式下也可以实现 独白模式 。
某行包含文本标签(tag) {clear}
的脚本,在功能上等效于 nvl clear
语句,并且会维持独白模式。
举例:
s """
这是独白模式的一段文本。
这是第二段文本,与第一段显示于同一页内。
{clear}
页面清空了!
"""
显示和隐藏NVL窗口 link
使用标准的 window show
和 window hide
语句就可以控制NVL模式窗口。
如果需要在显示和隐藏窗口是选用默认转场,可以在脚本中使用如下配置:
init python:
config.window_hide_transition = dissolve
config.window_show_transition = dissolve
将 config.empty_window
配置为 nvl_show_core
后,就能让NVL模式窗口使用转场(transition)显示。后面两行语句,配置了窗口显示和隐藏时使用的默认转场效果。
一个显示和隐藏窗口的样例如下:
label meadow:
nvl clear
window hide
scene bg meadow
with fade
window show
"我们抵达了城镇外的牧场。这里的秋天格外秀美。"
"童年时,我们经常在牧场里玩耍。"
m "嗨……唔……"
window hide
show sylvie smile
with dissolve
window show
"她把脸转向我,上面挂着微笑。"
"我得问问她!"
m "嗯呣……你是否可以……"
m "你是否可以做我的视觉小说画师?"
这里显示使用了 nvl show
和 nvl hide
语句控制NVL模式窗口的显示和隐藏。窗口可选使用转场,并且可以在游戏中混合使用NVL模式和ADV模式窗口。
定制角色 link
NVL模式角色可以使用定制,具有几种不同的外观。希望创作者可以选取其中满足自己需求的。
默认外观是角色名字在左侧。名字后边开始为对话内容。角色名字的颜色由参数“color”控制。
define s = Character('希尔维亚', kind=nvl, color="#c8ffc8")
第二种外观是角色名字内嵌在文本中。角色发言内容包含在引号中。这里需要注意,角色名字放在参数“what_prefix”中,使用开放的引号。(闭合的引号放的是“what_suffix”参数。)
define s = Character(None, kind=nvl, what_prefix="希尔维亚: \"", what_suffix="\"")
第三种外观不直接分配角色名,把对话内容放在引号中。
define s = Character(None, kind=nvl, what_prefix="\"", what_suffix="\"")
由于第三种外观可能会让人难以区分谁在发言,我们可以使用“what_color”参数把对话染色。
define s = Character(None, kind=nvl, what_prefix="\"", what_suffix="\"",
what_color="#c8ffc8")
当然,一个完全没有定制化的NVL模式角色也可以直接使用,前提是你想要把握整体显示效果。(常用于旁白。)
define s = Character(None, kind=nvl)
配置项 link
下列配置项控制NVL相关的功能。
- define config.nvl_layer = "screens" link
NVL界面使用的图层(layer)。
- define config.nvl_list_length = None link
若非None,这项表示NVL对话列表的最大长度。配置这项值(通常用于将对话强制限制在一个固定高度内),可以模仿一个无限的可滚动NVL窗口。
- define config.nvl_page_ctc = None link
若非None,这是用于NVL模式角色的“点击继续”提示,当到底页面底部时出现。(也就是后面跟一个“nvl clear”语句)。这项代替了
Character()
的ctc参数。
- define config.nvl_page_ctc_position = "nestled" link
若非None,这是用于NVL模式角色的“点击继续”提示坐标,当到底页面底部时出现。(也就是后面跟一个“nvl clear”语句)。这项代替了
Character()
的ctc_position参数。
- define config.nvl_paged_rollback = False link
若为True,NVL模式回滚时一次处理一整个页面。
Python 函数 link
- nvl_clear() link
等效于
nvl clear
语句。
- nvl_hide(with_) link
等效于
nvl hide
语句。- with_
隐藏NVL模式窗口使用的转场(transition)。
使用NVL样式显示窗口的Python函数。很少直接使用。通常用于声明菜单变量,像这样:
define menu = nvl_menu
- nvl_show(with_) link
等效于
nvl show
语句。- with_
显示NVL模式窗口使用的转场(transition)。
Paged Rollback link
页面回滚操作会让Ren’Py一次回滚NVL模式的一个页面,而不是一次一个文本段落。在脚本中如下配置就能启用。
init python:
config.nvl_paged_rollback = True
“The Question”的脚本(NVL模式版本) link
你可以在:doc:这里 <thequestion_nvl> 查看MVL模式版本的“The Question”。