台詞とナレーション link

テキストはビジュアルノベルの基本であり、物語を中心としたゲームにとってとても大切なものです。テキストには、それを話しているキャラクターで分類される台詞と、話し手のいないナレーションがあります。(簡単のため、特に分ける必要がない限り、台詞もナレーションも台詞で統一します。) また、台詞の外観はゲームに合わせてユーザーがカスタマイズできます。

Ren'Py では、ほとんどの台詞は say ステートメントで書かれます。台詞の見た目は Character オブジェクトを使ってキャラクター毎にカスタマイズできます。

say ステートメント link

say ステートメントは、台詞やナレーションに使われます。これは Ren'Py スクリプトで最も多く使われるステートメントですから、say ステートメントの構文は最小限の負荷で書けます。say ステートメントの例です。


    "This is narration."

    "Eileen" "This is dialogue, with an explicit character name."

    e "This is dialogue, using a character object instead."

    "Bam!!" with vpunch

say ステートメントの最初の形式は、1 つの文字列だけ構成されています。この形式はナレーションに使われ、この文字列がナレーションの内容です

第二の形式は、2 つの文字列で構成されます。最初の文字列は話者の名前で、二番目が話される台詞です。

第三の形式は、単純式とその後の文字列で構成されます。ここでの単純式は、キャラクター名の文字列または Character オブジェクトであるべきです。後者では、その Character オブジェクトが台詞の見た目の制御に使われます。

最後の形式は文字列とトランジション付きの with 節で構成され、文字列の表示とスクリーンの揺れが同時に起こります。

say ステートメントの詳細な動作は使われる Character オブジェクトによって制御されますが、say ステートメントは通常、台詞をスクリーンに表示し、ユーザーがクリックしたら台詞をスクリーンから取り除きます。

文字の中には Ren'Py で特別な意味を持ち、それゆえ台詞の文字列で使えないものがあります。 { 文字はテキストタグを開始し、 [ 文字は置換を開始します。これらを台詞中で使うには、2 つ重ねてください。また、クオートが文字列を閉じてしまうのを防ぐには、バックスラッシュを前置しなければなりません。例


    "I walked past a sign saying, \"Let's give it 100%!\""

Character オブジェクトの定義 link

Character オブジェクトを作成し、これを say ステートメントで使うと、会話文の見た目 (ある程度の動作も) を変更できます。キャラクターは、define ステートメントを使って変数に Character を代入して作成できます。例

define e = Character("Eileen",
                     who_color="#c8ffc8")

これでそのキャラクターを say ステートメントで使えます:


    e "Hello, world."

Character は Python 関数で、多くのキーワード引数を取ります。これらのキーワード引数は、キャラクターの動作を制御します。

define ステートメントはその単純式を評価し、与えられた名前に代入します。 init ブロック内でなければ、 define ステートメントは自動的に優先度 0 の init で実行されます。

画像属性を伴う say link

キャラクターが画像タグを伴って定義されたとき、そのキャラクターを含む say ステートメントのキャラクター名と2番目の文字列の間に画像属性を入れられます。

この形式では、与えられたタグの画像が表示されていれば、Ren'Py はそのキャラクターのタグと属性を含む show コマンドを発します。その画像が表示されていなければ、Ren'Py はその画像属性をサイドイメージで使うためにプールしますが、画像の表示はしません。

define e = Character("Eileen", image="eileen")

label start:

    show eileen mad
    e "I'm a little upset at you."

    e happy "But it's just a passing thing."

これは以下と等価です。

define e = Character("Eileen")

label start:

    show eileen mad
    e "I'm a little upset at you."

    show eileen happy
    e "But it's just a passing thing."

画像がこのように変更される度にトランジションを起こすには、config.say_attribute_transition にトランジションを設定してください。

キャラクターの例 link

キャラクターの例をいくつか挙げます:

# A character that has its dialogue enclosed in parenthesis.
define e = Character("Eileen", what_prefix='"', what_suffix='"')

# A character that pulls its name from a variable.
define p = Character("player_name", dynamic=True)

特殊なキャラクター link

デフォルトでいくつかのキャラクター名が定義されていて、特定の状況で自動的に使われます。これらのキャラクターを意図的に再定義すれば Ren'Py の振る舞いを変えられますが、間違えて使ってしまうと問題になりえます。

adv

Character によって使われるデフォルトのキャラクターの kind です。これは、画面に一度に一行ずつ表示されるようなキャラクターを設定します。

nvl

台詞が NVL モード で表示されるキャラクターの kind です。画面に一度に複数行表示されます。

narrator

キャラクター名の無い say ステートメントにより、ナレーションを表示するのに使われるキャラクターです。

name_only

キャラクター名が文字列で与えられた台詞を表示するのに使われるキャラクターです。このキャラクターは与えられた名前の新しいキャラクターにコピーされ、台詞を表示するのにその新しいキャラクターが使われます。

centered

台詞をウィンドウの外、画面の中央に表示するキャラクターです。

vcentered

台詞を画面の中央、ウィンドウの外に縦書きで表示するキャラクターです。

extend

最後に台詞を話したキャラクターにその台詞の後に「 {fast} 」タグと extend に与えられた台詞をつなげて構築された台詞を話させます。これは台詞中にスクリーンを変化させるために使用出来ます。

extend は NVL モードを検知し、正常に動作します。

# Show the first line of dialogue, wait for a click, change expression, and show
# the rest.

show eileen concerned
e "Sometimes, I feel sad."
show eileen happy
extend " But I usually quickly get over it!"

# Similar, but automatically changes the expression when the first line is finished
# showing. This only makes sense when the user doesn't have text speed set all the
# way up.

show eileen concerned
e "Sometimes, I feel sad.{nw}"
show eileen happy
extend " But I usually quickly get over it!"

テキストウィンドウの管理 link

Ren'Py にはテキストウィンドウを管理するためのステートメントが含まれています。台詞の間、ウィンドウは常に表示されますが、台詞がない間のウィンドウの表示・非表示はこれらのステートメントによって制御できます。

window show

window show ステートメントは、ウィンドウが表示されるようにします。このステートメントはオプションとして表示時のトランジションを引数に取ります。トランジションが省略された場合は、 config.window_show_transition が使われます。

window hide

window hide ステートメントは、ウィンドウが非表示になるようにします。このステートメントはオプションとして非表示時のトランジションを引数に取ります。トランジションが省略された場合は、 config.window_hide_transition が使われます。

window auto

これはウィンドウの自動管理を有効化させます。ウィンドウは config.window_auto_show にリストアップされたステートメント (デフォルトでは say ステートメント) の前で表示され、 config.window_auto_hide にリストアップされたステートメント (デフォルトでは scene, call screen ステートメント) の前で非表示となります。(ステートメントのみが認識され、ステートメントと等価な関数はそうではありません。)

window auto ステートメントは、ウィンドウの表示・非表示にそれぞれ config.window_show_transitionconfig.window_hide_transition を使います。 window autowindow showwindow hide によって中断されます。

window show # shows the window with the default transition, if any.
pause       # the window is shown during this pause.
window hide # hides the window.
pause       # the window is hidden during this pause.

window show dissolve # shows the window with dissolve.
pause                # the window is shown during this pause.
window hide dissolve # hides the window with dissolve.
pause                # the window is hidden during this pause.


window auto

"The window is automatically shown before this line of dialogue."
pause                # the window is shown during this pause.

scene bg washington  # the window is hidden before the scene change.
with dissolve

台詞ウィンドウの管理は Preference() の "show empty window" に影響されます。この設定が無効化されている時、上記のステートメントでは何も起こりません。

引数つきの say link

say ステートメント後に括弧で囲んで、追加の引数を say ステートメントに渡せます。

e "Hello, world." (what_color="#8c8")

None が指定されなければ、 say ステートメントへの引数は最初に var:config.say_arguments_callback によって処理されます。残りがあれば character に渡され、そのキャラクターが定義されたときに渡されたかのように扱います。 例えば、上記の例は台詞を緑に表示します。

等価な Python link

注釈

これは Python ステートメント の章を読んでいる場合のみ有意でしょう。

say ステートメントへの最初の引数が存在し、式であるとき、 say ステートメントはその台詞と True の interact 引数で呼び出されることと等価です。 例

e "Hello, world."

これは以下と等価です。

$ e("Hello, world.", interact=True)

say ステートメントはデフォルト store の前に character と名付けられた store を探します。デフォルト store で変数名と同じキャラクターを使用したければ以下のように定義できます。

define character.e = Character("Eileen")

このキャラクターはデフォルト store の変数と平行して使用可能です。:

label start:

    # This is a terrible variable name.
    e = 100

    e "Our starting energy is [e] units."

引数つきの say ステートメントは関数に渡された引数を見ます。例

e "Hello, world." (what_size=32)

これは以下と等価です。

e("Hello, world.", interact=True, what_size=32)

e がキャラクターであるとき、これはさらに以下と等価です。

Character(kind=e, what_size=32)("Hello, world.", interact=True)

しかし、 var:config.say_arguments_callback の使用や e に様々なことをするキャラクターをラップさせることが可能です。

ウィンドウマネージャーは the _window_window_auto 変数の設定と以下の2つの関数によって処理されます。 :