台詞とナレーション 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

文字列なら、台詞で使われるこのキャラクターの名前です。 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 の場合は、インタラクションを行わずにスクリーンに要素を追加できます。

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」 の時、標識は表示されるテキストの一部として、最後の文字の直後に表示されます。「fixed」 の場合は、標識はスクリーンに追加され、その位置は position スタイルプロパティーで制御されます。

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

screen

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

show_ で始まるキーワード引数は、接頭辞を取り除かれ、スクリーンに引数として渡されます。例えば、 show_side_image の値はスクリーンの side_image 変数の値になります。

便利な show_ 変数がデフォルトのスクリーンによって定義されています:

show_side_image

Displayable が与えられると、台詞が表示されるときにその displayable が表示されます。displayable の位置は、位置プロパティーで制御されます。これは主に、しゃべっているキャラクターを台詞の横に表示するのに使われます。

show_two_window

True なら、レイアウトの構成を変更し、キャラクター名が一つのウィンドウに、台詞がもう一つのウィンドウに表示されるようにします。

show_layer

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

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

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

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

画像属性を伴う say link

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

この形式では、与えられたタグの画像が表示されていれば、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" に影響されます。この設定が無効化されている時、上記のステートメントでは何も起こりません。

等価な Python link

注釈

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

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

e "Hello, world."

これは以下と等価です。

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

ffsay ステートメントはデフォルト 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."

Window management is performed by setting the _window and _window_auto variables, and by using the following two functions:

_window_hide(trans=False) link

The python equivalent of the "window hide" statement.

trans
If False, the default window hide transition is used. If None, no transition is used. Otherwise, the specified transition is used.
_window_show(trans=False) link

The python equivalent of the "window show" statement.

trans
If False, the default window show transition is used. If None, no transition is used. Otherwise, the specified transition is used.