視覺小說中總共有兩種表現形式。ADV模式下使用界面底部的一個窗口顯示對話和旁白,每次顯示一行。NVL模式下使用幾乎占據整個界面的一個窗口,每次能在界面上顯示多行對話和旁白。
在這篇教學中,我們會解釋如何使用Ren’Py製作NVL模式的遊戲。教學假設你已經熟悉Ren’Py的基本功能,至少看過 快速入門 內容。
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模式下也可以實現 獨白模式 。
某行包含文本標籤(tag) {clear}
的腳本,在功能上等效於 nvl clear
語句,並且會維持獨白模式。
舉例:
s """
這是獨白模式的一段文本。
這是第二段文本,與第一段顯示於同一頁內。
{clear}
頁面清空了!
"""
使用標準的 window show
和 window hide
語句就可以控制NVL模式窗口。需要啟用這項功能的話,可以在腳本中使用如下配置:
init python:
config.empty_window = nvl_show_core
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模式窗口。
NVL模式角色可以使用訂製,具有幾種不同的外觀。希望創作者可以選取其中滿足自己需求的。
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")
define s = Character(None, kind=nvl)
下列配置項控制NVL相關的功能。
config.nvl_layer
= “screens” linkNVL界面使用的圖層(layer)。
config.nvl_list_length
= None link若非None,這項表示NVL對話列表的最大長度。配置這項值(通常用於將對話強制限制在一個固定高度內),可以模仿一個無限的可滾動NVL窗口。
config.nvl_page_ctc
= None link若非None,這是用於NVL模式角色的“點擊繼續”提示,當到底頁面底部時出現。(也就是後面跟一個“nvl clear”語句)。這項代替了 Character()
的ctc參數。
config.nvl_page_ctc_position
= “nestled” link若非None,這是用於NVL模式角色的“點擊繼續”提示坐標,當到底頁面底部時出現。(也就是後面跟一個“nvl clear”語句)。這項代替了 Character()
的ctc_position參數。
config.nvl_paged_rollback
= False link若為True,NVL模式回滾時一次處理一整個頁面。
nvl_clear
() link等效於 nvl clear
語句。
nvl_hide
(with_) link等效於 nvl hide
語句。
使用NVL樣式顯示窗口的Python函數。很少直接使用。通常用於聲明菜單變數,像這樣:
define menu = nvl_menu
nvl_show
(with_) link等效於 nvl show
語句。
頁面回滾操作會讓Ren’Py一次回滾NVL模式的一個頁面,而不是一次一個文本段落。在腳本中如下配置就能啟用。
init python:
config.nvl_paged_rollback = True