アクター辞書
キャラクターごとに表情の引き出しを用意する――それがアクター辞書ですわ。 「ぱすたの通常顔」「ラザニアの刮目」を名前で呼び出せる、なんとも優雅な仕組み。 文法リファレンスの締めくくり、しっかり仕上げて差し上げますわよ。
アクター辞書(ActorScope)は、キャラクター(アクター)ごとに単語辞書を定義し、会話行で参照可能にする機能である。アクターごとの表情や表現のバリエーションを、アクター名を伴った単語参照として記述できる。%(または %)マーカーで定義する。
グローバルアクター辞書定義
ファイルレベル(インデントなし)で %actor_name を記述し、その直下にインデントした @word_name:values 行を並べると、そのアクターに属する単語定義になる。
#アクター辞書
%ぱすた
@通常 :\s[0]、\s[100]
@照れ :\s[1]
@驚き :\s[2]
@ぐんにょり:\s[3]
@怒り :\s[4]
%ラザニア
@通常 :\s[10]
@刮目 :\s[11]
構文上の注意:
- アクター名には日本語・英語の識別子が使える。
- 単語定義は必ずインデント(全角空白
または半角空白)で開始する。 - 値はカンマ(
、/,/,)で区切り、複数のさくらスクリプト値を指定できる。
シーンスコープ内でのアクター指定
グローバルシーン内で %actor1、actor2 の形式でアクターを指定すると、そのシーン内の会話行でアクター名付き単語参照が有効になる。
*メイン
%ぱすた、ラザニア
ぱすた:@通常 こんにちは
ラザニア:@刮目 目を見開くラザニア
actor_name: で始まる会話行では、そのアクターの単語辞書を優先的に参照する。
アクタースコープと単語参照の統合
actor_name:@word_name の形式で参照する場合、まず %actor_name で定義された単語辞書から word_name を検索する。
- アクター辞書に該当する単語がなければ、グローバル単語辞書・ローカル単語辞書にフォールバックする。
- アクター辞書による単語参照も、グローバル・ローカル単語と同じ前方一致検索ルールに従う。
シャッフル&順次消費
アクター単語は、グローバル・ローカル単語と同一のシャッフル&順次消費アルゴリズムに従う(共通仕様は Call / Jump を参照)。
- 複数値が定義された単語(例:
@通常:\s[0]、\s[100]、\s[200])は、ランダムにシャッフルされた後、呼び出しごとに順次消費される。 - 全候補が消費されると再シャッフルされ、再び順次消費が始まる。
- 単一値の単語(例:
@照れ:\s[1])は常に同じ値を返す。
コードブロック(将来変更あり)
アクタースコープ内に Lua コードブロックを配置する構文は定義されているが、現時点では使用例がなく、将来の拡張として予約されている。
%actor_name
@word_name:value
```lua
function SCENE.on_actor_event(act)
local save, var = act:init_scene(SCENE)
-- アクター固有のイベント処理
end
```
将来変更あり: アクタースコープ内のコードブロックは文法定義のみが存在し、未実装である。アクター固有のイベントハンドラや状態管理関数を置く用途が予定されている。仕様は将来変更され得る。
これで Pasta DSL の文法リファレンスは完結ですわ。よくぞここまでついてきましたわね。 ……フンッ、別に褒めているわけではありませんわよ。でも、もうあなたは立派なゴースト作者ですの。 さあ、辞書を書きに参りましょう。困ったらいつでもこの章に戻ってくればよろしくてよ。熱く!
権威的仕様: アクター辞書の厳密な定義は doc/spec/11-actor-dictionary.md を参照。単語参照の基本は doc/spec/10-words.md も参照。