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 モードでも同様に動作します。 {clear} テキストタグをその行に含むことはモノローグモードのままである他は nvl clear ステートメントと等しいです。 例

label start:
    s """
    This is one block of text in monologue mode.

    This is a second block, on the same page as the first.

    {clear}

    The page just cleared!
    """

NVL-mode Menus link

デフォルトではメニューは ADV モードのもので表示され、画面全体を占めます。一方 NVL モードでは、NVL モード向けのメニューも表示できます。その場合、メニューは NVL モードの現在のページのテキストの直後に表示されます。

NVL モードのメニュー表示を行うには、以下のように書きます:

define menu = nvl_menu

メニューは選択が行われた後に消去されるため、メニューを nvl clear に続けて表示したり、選択したものが何であるか分かるような表示をするようにすると良いでしょう。

引数付き選択肢 を使用しても NVL-mode 選択肢にアクセスできます。これは nvl 引数に True を入れて実行できます。 NVL-mode と ADV-mode の選択肢を1つのゲーム内で併用するときに便利です。

menu (nvl=True):
    "I prefer NVL-mode.":
        pass

    "ADV-mode is more for me.":
        pass

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

NVL モード・ウィンドウは、標準の window show 及び window hide ステートメントによって制御できます。ウィンドウの表示、非表示時のデフォルトトランジションを指定するには次のコードをゲームに追加します

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

デフォルトの config.empty_window は適切なウィンドウを自動的に選択するはずですが、 config.empty_windownvl_show_core に設定するとNVL モードウィンドウがトランジション中に強制的に表示されてしまいます(訳注: 以前はこの設定が必要な場合がありましたが現在のバージョンでは不要です。)。.:

init python:
    config.empty_window = nvl_show_core

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モード・ロールバックとなります。

Python 関数 link

nvl_clear() link

nvl clear ステートメントと Python 等価な Python 式です。

nvl_hide(with_) link

nvl hide ステートメントと Python 等価な Python 式です。

with_

NVLモードウィンドウを非表示するトランジションです。

nvl_menu(items) link

NVL スタイルで選択肢を表示する Python 関数です。直接は滅多に使われず、代わりに menu 変数に以下のように代入されます。

define menu = nvl_menu
nvl_show(with_) link

nvl show ステートメントに相当する Python 式です。

with_

NVLモードウィンドウを表示するトランジションです。

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

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

init python:
    config.nvl_paged_rollback = True

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

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