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

ADV模式下,預設的菜單顯示方式會占據整個界面。NVL模式下的菜單展現也有一個對應的變種,就是在當前NVL模式文本頁面後面立刻顯示菜單。

要使用這個變種菜單,可以這樣寫:

define menu = nvl_menu

在選項菜單的某項被選擇之後,菜單會消失,所以通常會在菜單之後使用一條“nvl clear”語句或者某些提示語。

菜單入參 也可以用於接入NVL模式菜單。只要把入參 nvl 的值設置為True。 在一個遊戲中混用NVL模式與ADV模式時,這個功能非常有用。

menu (nvl=True):
    "我偏好NVL模式。":
        pass

    "我更喜歡ADV模式。":
        pass

顯示和隱藏NVL窗口 link

使用標準的 window showwindow 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 shownvl hide 語句控制NVL模式窗口的顯示和隱藏。窗口可選使用轉場,並且可以在遊戲中混合使用NVL模式和ADV模式窗口。

訂製角色 link

NVL模式角色可以使用訂製,具有幾種不同的外觀。希望創作者可以選取其中滿足自己需求的。

  1. 默認外觀是角色名字在左側。名字後面開始為對話內容。角色名字的顏色由參數“color”控制。

define s = Character('希爾維亞', kind=nvl, color="#c8ffc8")
  1. 第二種外觀是角色名字內嵌在文本中。角色發言內容包含在引號中。這裡需要注意,角色名字放在參數“what_prefix”中,使用開放的引號。(閉合的引號放的是“what_suffix”參數。)

    define s = Character(None, kind=nvl, what_prefix="希爾維亞: \"",
                         what_suffix="\"")
    
  2. 第三種外觀不直接分配角色名,把對話內容放在引號中。

    define s = Character(None, kind=nvl, what_prefix="\"", what_suffix="\"")
    
  3. 由於第三種外觀可能會讓人難以區分誰在發言,我們可以使用“what_color”參數把對話染色。

define s = Character(None, kind=nvl, what_prefix="\"", what_suffix="\"",
                     what_color="#c8ffc8")
  1. 當然,一個完全沒有訂製化的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_menu(items) link

使用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”。