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

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

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

"begin"

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

"show"

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

"show_done"

各セグメント表示後に呼び出されます。

"slow_done"

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

"end"

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

コールバックは少なくとも 1 つのキーワード引数を持って呼び出されます。 :

interact

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

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

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)