テンション(感情値)の上下†

AYAYA Wiki より転載

旧版(文 Ver.4 向け)の記事を、現行の関数名(SETDELIM TOINT CHR)に書き換えたものです。

会話の内容によって、テンション(感情値)を上下させて
キャラクターの反応を変える方法として、下記のやり方があります。
変数 tention が感情値を表す場合の例。

#define :tention+  %(CHR(1))
#define :tention-  %(CHR(1))-

TalkScript
{
    if tention > 10
    {
        "ハイテンション!"
        "舞い上がってお茶こぼした…\e:tention-5"
    }
    elseif tention > 5
    {
        "普通テンション"
        "阪神勝ったー!\e:tention+5"
    }
    else
    {
        "鬱"
    }
}

OnTalk
{
    _script = TalkScript
    SETDELIM(_script, CHR(1))
    _lastindex = ARRAYSIZE(_script) - 1
    if _lastindex > 0 {
        tention += TOINT(_script[_lastindex])
        _lastlen = STRLEN(_script[_lastindex])
        _eraseindex = STRLEN(_script) - _lastlen - 1
        _erasesize = _lastlen + 1
        _script = ERASE(_script, _eraseindex, _erasesize)
    }
    _script
}

トークの際に OnTalk を呼ぶようにしてください。
(et cetera. の雑記内より)

仕組み†

#define は辞書の生テキストを置換するので、\e:tention-5 は読み込み時に、\e の後ろに制御文字 CHR(1) と -5 が続く文字列になります。OnTalk はこの文字列を CHR(1) で区切り、最後の要素(-5)を数値にして tention に足し、区切りごと取り除いてから出力します。