キャラクターコールバック link

Ren'Py は台詞中の様々なイベント発生時にコールバックを実行する機能があります。これは Character()callback を指定するか、 config.character_callback または config.all_character_callbacks を設定して行なわれます。

キャラクターコールバックは一つの位置引数である発生したイベントで呼び出されます。起こりうるイベントは以下のものです。 :

"begin"

say ステートメントの開始時に呼び出されます。

"show"

台詞の各セグメント表示前に呼ばれます。台詞は {w} や {p} テキストタグで複数のセグメントに区切られている場合がありますが、少なくとも 1 つのセグメントがあります。

"slow_done"

低速テキストの表示が完了すると呼び出されます。このイベントは "end" の後に発生するかもしれませんが、その場合台詞はインタラクションを起こさないことに注意してください。

"end"

say ステートメントの終りに呼び出されます。

キーワード引数つきで呼び出されます。 :

interact

台詞がインタラクションを起こすなら True です。

type

キャラクターの種類 (例: "nvl", "adv", "balloon")。

what

what displayable に提供されるテキスト。

"show" と "slow_done" コールバックにも追加のキーワード引数が指定されます :

start

what 文字列の台詞中の現在のセグメントの開始位置です。

end

what 文字列の台詞中の現在のセグメントの終了位置です。

delay

台詞中のの現在のセグメントが表示された後に Ren'Py が一時停止する時間です。プレイヤーがクリックするまで Ren'Py が停止する場合は None です。

last_segment

これが say ステートメントでの台詞の最後のセグメントである場合は true、そうでない場合は False です。

他の値の位置引数や追加のキーワード引数の値が将来渡されるかもしれません。コールバックは未知のキーワード引数は無視するようにするべきです。

link

この例では低速テキストが有効だとキャラクターボイスの代わりにビープ音をならします。 :

init python:
    def beepy_voice(event, interact=True, **kwargs):
        if not interact:
            return

        if event == "show_done":
            renpy.sound.play("beeps.ogg")
        elif event == "slow_done":
            renpy.sound.stop()

define pike = Character("Christopher Pike", callback=beepy_voice)

label start:

    pike "So, hanging out on Talos IV, minding my own business, when..."

これは特定のキャラクターに対して一般的なコールバックをどう指定するかの例です。

init python:
    import functools
    def boopy_voice(event, interact=True, boopfile="normal_boop.ogg", **kwargs):
        if not interact:
            return

        if event == "show_done":
            renpy.sound.play(boopfile)
        elif event == "slow_done":
            renpy.sound.stop()

define nagata = Character("Naomi", callback=functools.partial(boopy_voice, boopfile="belter_boop.ogg"))
define chrisjen = Character("Chrisjen", callback=boopy_voice)