台詞とナレーション 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 で実行されます。

Character(name=..., kind=adv, **args) link

台詞やナレーションの外観を制御する、Character オブジェクトを作成して返します。

name

文字列なら、台詞を話すキャラクターの名前となります。 name が None なら、ナレーションのように名前の表示は省略されます。 名前が指定されないと kind から名前が取られ、さもなければ None となります。

kind

このキャラクターの元になるキャラクターです。使われると、このキャラクターに与えられなかった全ての引数のデフォルト値は、 kind に与えられた引数の値になります。これはテンプレートキャラクターを定義してそのキャラクターをコピーして変更するのに使われます。

関連づけられた画像 キャラクターに画像タグを関連付けられます。これにより、そのキャラクターに関わる say ステートメントでこのタグの画像を表示したり、そのキャラクターがしゃべるときに現れるサイドイメージを自動的に選んだりできます。

image

このキャラクターに関連付けられた画像タグの文字列です。

ボイスタグ ボイスタグが Character に与えられると、そのキャラクターに関連連れられたボイスファイルが設定画面でミュートまたは再生可能にできます。

voice_tag

キャラクターに関連付けられたボイスファイルを voice チャンネルでミュートにしたり再生可能にする文字列です。

接頭辞と接尾辞 これを使うと、キャラクター名と表示されるテキストには、接頭辞や接尾辞を適用できます。これは例えば会話文のそれぞれの行をクオートで囲むのに使えます。

what_prefix

会話文が表示される前に前置される文字列です。

what_suffix

会話文が表示される前に後置される文字列です。

who_prefix

キャラクター名が表示される前に前置される文字列です。

who_suffix

キャラクター名が表示される前に後置される文字列です。

名前表示の変更 このオプションは、名前の表示を制御するのに役立ちます。

dynamic

True なら、 name は Python 式を含む文字列または関数、呼び出し可能なオブジェクトでなければなりません。文字列なら台詞のそれぞれの行の前にその文字列が評価され、その結果がキャラクター名として使われます。そうでなければ関数または呼び出し可能なオブジェクトが台詞のそれぞれの行前に引数なしで呼び出され、返り値がキャラクター名として使用されます。

インタラクションの制御 これらのオプションは、台詞が表示されるか、インタラクションが行われるか、そして入ったモードが表示されるかを制御します。

condition

指定するなら Python 式を含む文字列でなければなりません。この式が False なら、say ステートメントがなかったかのように、台詞は現れません。

interact

デフォルトでは True で、台詞が表示される度にインタラクションが行われます。 False の場合は、インタラクションを行わずにスクリーンに要素を追加できます。

advance

デフォルトは True で、クリックしてのステートメントの読み進めや、 (スキップやオートモードのような)他の進行も同様にできます。 False なら(ハイパーリンクへのジャンプやスクリーンのような)代替方法を除いて say ステートメントを通過できません。

mode

このキャラクターがしゃべるときに入るモードの文字列です。詳しくは modes をご覧ください。

callback

キャラクターが話している時に発生するイベントによって呼び出される関数です。詳細は キャラクターコールバック のセクションを参照してください。

Click-to-continue ctc は、全てのテキストが表示された後、ユーザーに進行を促すために表示される標識です。

ctc

特殊な標識が使われないときに ctc に使う Displayable です

ctc_pause

テキストの表示が {p} や {w} テキストタグで停止されているときに ctc に使う Displayable です。

ctc_timedpause

テキストの表示が {p=} や {w=} テキストタグで停止されたときに ctc に使う Displayable です。None であれば、ctc_pause をデフォルトとするので、 ctc_pause だけ使って ctc_timedpause は使わないときは、 Null() を使ってください。

ctc_position

ctc の位置を制御します。「nestled」 の時、ctcは表示されるテキストの一部として、最後の文字の直後に表示されます。「nestled-close」 も同じですが、最後の文字とctcとの間で改行を許可しません。 「fixed」 の場合は、標識はスクリーンに追加され、その位置は position スタイルプロパティーで制御されます。

スクリーン 台詞の表示には スクリーン を使います。以下の引数により、スクリーンの選択、及びスクリーンへの引数の受け渡しができます。

screen

台詞を表示するのに使われるスクリーンの名前です。

show_ で始まるキーワード引数は、接頭辞を取り除かれ、スクリーンに引数として渡されます。例えば、 show_myflag の値はスクリーンの myflag 変数の値になります (myflag 変数はデフォルトでは使われませんが、カスタマイズされた say スクリーンで使用可能です)。

一つの show 変数が、歴史的な理由のため、 Ren'Py 自身によって扱われます。 :

show_layer

必要に応じて say スクリーンを表示するレイヤーの名前の文字列を指定します。

テキストとウィンドウのスタイル who_, what_, および window_ で始まるキーワード引数は、接頭辞を剥ぎ取られ、それぞれキャラクター名、会話テキスト、その両方を含むウィンドウの スタイル になります。

例えば、キャラクターがキーワード引数 who_color="#c8ffc8" を与えられると、キャラクター名の色が変わり、この場合は緑になります。 window_background="frame.png" で、キャラクターの台詞を含むウィンドウの背景を設定します。

who_style, what_style , および window_style 引数を使う方法でも、それぞれキャラクター名、台詞、ウィンドウに適用されるスタイルを設定できます。

config.character_id_prefixes の設定により他の displayable もまとめてスタイルを設定できます。例えば、デフォルト GUI が使用されると、スタイル接頭辞 namebox_ を使用して話者の名前欄のスタイルが設定できます。

画像属性を伴う 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."

画像属性が@で始まるときは、変更は一時的で、台詞の最後の行で以前表示していた画像に戻ります。

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

label start:

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

    e @ happy "That's funny."

    e "But don't think it gets you out of hot water."

これは以下と等価です。

define e = Character("Eileen")

label start:

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

    show eileen happy
    e "That's funny."

    show eileen mad
    e "But don't think it gets you out of hot water."

2つのシンタックスは組み合わせられ、@の前に永続的な変更を、次に一時的な変更を続けます。

e happy @ vhappy "Really! That changes everything."

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

キャラクターの例 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, キャプションのない menu ステートメント) の前で非表示となります(ステートメントのみが認識され、ステートメントと等価な関数はそうではありません)。

window auto hide, window auto show

これらのステートメントは window showwindow hide がするように任意のトランジションでウィンドウを表示、非表示しますが、それらのステートメントと違いこれらは自動的な管理は有効なままにします。

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

window auto show     # Shows the window before it normally would be shown.

show eileen
with dissolve

"Without window auto show, the window would have been shown here."

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

引数つきの say link

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

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

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

モノローグモード link

ビジュアルノベルでは、ナレーションや同じキャラクターの台詞が続くときがあります。これらの場合、キャラクター名とクオートを何度も入力するのは煩雑です。

これらのケースのため、 Ren'Py はモノローグモードをサポートします。台詞がトリプルクオートで囲まれると、 Ren'Py は空白表で台詞をブロックに分け、各ブロックで say ステートメントを使用します。例として、三ブロックのナレーションに続いて、三行の台詞が続きます。

"""
This is the first line of narration. It's longer than the other two
lines, so it has to wrap.

This is the second line of narration.

This is the third line of narration.
"""

e """
This is the first line of dialogue. It's longer than the other two
lines, so it has to wrap.

This is the second line of dialogue.

This is the third line of dialogue.
"""

引数や属性のような追加の節も可能ですが、モノローグの各ブロックに渡されてしまうので、あまり有用ではありません。

ブロック間のスペースを省略したいなら、モノローグ行の前のファイルの先頭に rpy monologue single と記述してください。

等価な 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)

しかし、 config.say_arguments_callback の使用や e に様々なことをするキャラクターをラップさせられます。

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

_window_hide(trans=False, auto=False) link

"window hide" ステートメントの Python 式です。

trans

False なら、デフォルトのウィンドウ非表示のトランジションが使用されます。 None ならトランジションは使用されません。 それ以外なら指定したトランジションが使用されます。

auto

True なら、 "window auto hide" ステートメントの Python 式です。

_window_show(trans=False, auto=False) link

"window show" ステートメントの Python 式です。

trans

False なら、デフォルトのウィンドウ表示のトランジションが使用されます。 None ならトランジションは使用されません。 それ以外なら指定したトランジションが使用されます。

auto

True なら、 "window auto show" ステートメントの Python 式です。