NVL モード link

ビジュアルノベルには、主に2つの表示方法があります。ADV スタイルのゲームでは、一般に画面の下部にあるウィンドウに台詞とナレーションを一度に一行だけ表示します。NVL スタイルのゲームでは、画面全体に広げられたウィンドウに一度に複数の行を表示します。

このチュートリアルでは、Ren'Py を使った NVL モードのゲームをどのように作るかを説明します。このチュートリアルでは、 クイックスタートマニュアル で説明した Ren'Py の基本事項を熟知していることを前提とします。

はじめに link

NVL モードは、以下の手順で Ren'Py のスクリプトに追加できます。まず、キャラクターを NVL モードで宣言し、次にそれぞれのページの最後に nvl clear ステートメントを追加するだけです。

キャラクターを NVL モードで使うように宣言するには、 kind=nvl パラメーターをそれぞれのキャラクター宣言に追加します。例えば、クイックスタートマニュアルのキャラクター宣言を引用すると:

define s = Character('Sylvie', color="#c8ffc8")
define m = Character('Me', color="#c8c8ff")

NVL モードに変更するには、これらの宣言を以下のようにします:

define s = Character('Sylvie', kind=nvl, color="#c8ffc8")
define m = Character('Me', kind=nvl, color="#c8c8ff")

NVL モードのナレーターは以下の定義によっても使用可能です。

define narrator = nvl_narrator

ここで、 narrator という NVL モードのキャラクターも追加したことに注意してください。 narrator キャラクターは、関連付けられた名前を持たない、ナレーション行に使用されます。

このようなゲームを実行すると、はじめの数行は普通に表示されますが、しばらくすると、行が画面下部よりも下に表示されてしまいます。スクリプトの途中で改ページをするには、それぞれのページの最後に nvl clear を含めます。

次は、改ページを行うスクリプトの例です:

label start:
    "I'll ask her..."

    m "Um... will you..."
    m "Will you be my artist for a visual novel?"

    nvl clear

    "Silence."
    "She is shocked, and then..."

    s "Sure, but what is a \"visual novel?\""

    nvl clear

NVL モードのゲームでは一般的に段落ごとのテキスト量が多くなりますが、この例では基本的な NVL モードのスクリプトの例を示しています。(トランジションの無いキネティックノベルでの使用に適しています。)

NVL モード・ウィンドウの表示/非表示 link

NVL モード・ウィンドウは、標準の window show 及び window hide ステートメントによって制御できます。この制御方法を有効にするには、以下のコードをゲームに追加します

init python:
    config.empty_window = nvl_show_core
    config.window_hide_transition = dissolve
    config.window_show_transition = dissolve

config.empty_windownvl_show_core に設定すると、NVL モード・ウィンドウはトランジションを伴って表示されます。(最後の2行では、ウィンドウの表示/非表示の切り替えに使われる既定のトランジションを設定しています。)

window コマンドを用いてウィンドウの表示/非表示を行う例を次に示します:

label meadow:

    nvl clear

    window hide
    scene bg meadow
    with fade
    window show

    "We reached the meadows just outside our hometown. Autumn was so
     beautiful here."
    "When we were children, we often played here."

    m "Hey... ummm..."

    window hide
    show sylvie smile
    with dissolve
    window show

    "She turned to me and smiled."
    "I'll ask her..."
    m "Ummm... will you..."
    m "Will you be my artist for a visual novel?"

nvl shownvl hide コマンドは NVL モードのウィンドウを表示、非表示します。これらは任意でトランジションを取り、また、 NVL と ADV 両方のモードのウィンドウが混在するコードで使用出来ます。

キャラクターのカスタマイズ link

NVL モード・キャラクターの外観はカスタマイズできるため、うまく設定することで、作成中のゲームに最も適切な外観を選ぶことができます。

  1. 既定の状態ではキャラクター名が左側で、台詞がキャラクター名の右側にインデントされて配置されています。名前の色は「color」パラメーターで設定できます。

    define s = Character('Sylvie', kind=nvl, color="#c8ffc8")
    
  2. 2つ目は、キャラクター名がテキストに含まれています。キャラクターが話した台詞はクォーテーション(")で囲まれています。ここで注意することは、キャラクター名が what_prefix パラメーターの中に開きクォーテーション(括弧開き)とともにあることです。(閉じクォーテーションは what_suffix パラメーターの中にあります。)

    define s = Character(None, kind=nvl, what_prefix="Sylvie: \"",
                         what_suffix="\"")
    
  3. 3つ目はキャラクター名を完全に省くとともに、台詞をクォーテーションの中に入れています。

    define s = Character(None, kind=nvl, what_prefix="\"", what_suffix="\"")
    
  4. 3つ目の表示は、誰が話した言葉なのかを見分けるのが難しくなる可能性があります。その場合は、「what_color」パラメーターを用いて台詞に色を付けられます。

    define s = Character(None, kind=nvl, what_prefix="\"", what_suffix="\"",
                         what_color="#c8ffc8")
    
  5. もちろん、全くカスタマイズされていない NVL モードのキャラクターを使うこともできます。(これはナレーターに使われることが多いです。)

    define s = Character(None, kind=nvl)
    

設定変数 link

以下の設定変数は nvl に関連する機能を制御します。

define config.nvl_layer = "screens" link

NVLスクリーンを表示するレイヤーです。

define config.nvl_list_length = None link

None か、NVLダイアログリストの最大長さです。これを設定して無限にスクロールするNVL ウィンドウを再現出来ます(しばしばダイアログを固定長に強制して問題になります)。

define config.nvl_page_ctc = None link

None を指定するか、ページの最後 ( 直後に nvl clear ステートメントが続くもの ) で NVL キャラクターに使用する ctc を指定します。これは Character() の ctc 引数を置き換えます。

define config.nvl_page_ctc_position = "nestled" link

None を指定するか、ページの最後 ( 直後に nvl clear ステートメントが続くもの ) で NVL キャラクターに使用する ctc の座標を指定します。これは Character() の ctc_position 引数を置き換えます。

define config.nvl_paged_rollback = False link

True の場合、一度にページ全体に対して発生するNVLモード・ロールバックとなります。

ページ毎のロールバック link

ページ毎のロールバックにより、Ren'Py は NVL モードのページ1つを1回でロールバックするようになります。この機能は、以下のコードをスクリプトに入れることで有効化できます。

init python:
    config.nvl_paged_rollback = True

The Question のスクリプト (NVLモード版) link

NVL モード版の「The Question」の完全なスクリプトは、 ここ で入手できます。