各単純トリガーには次のような項目を指定する。
1) 発動間隔。どのくらいの頻度で このトリガーがチェックされるか。
2) 命令ブロック。正しい「命令」の羅列をリストで指定。
M&B のゲーム・エンジンには、「(通常)トリガー」と「単純トリガー」があります。ここでは後者、module_simple_triggers.py のほうを扱います。単純トリガーのほうが一般に小規模で理解し易いです [1]。
そもそも、トリガーとは何でしょうか? トリガーは、ゲームが進行するにつれて(何度か)実行されるコードの塊です。そのコードに書かれた仕事を行うべき時期が来たとき発動(発火)するので、トリガーと呼ばれます。
単純トリガーは、旧式のトリガーに代わるものです。状態が保存されないので、保守が容易です。単純トリガーは、普通は module_simple_triggers.py に書きます。単純とは言え、過小評価しては いけません。一例を見てみましょう。
(24, [
(troop_add_gold, "trp_player", 100),
]),
かなりシンプルですよね。24 時間ごと、つまりワールド・マップ上での毎日、このトリガーはプレイヤーに 100 ゴールドを与えます。そう、特に意味はありませんが、そのように機能します。基本的に、あらゆる単純トリガーがこのように働きます。「(発動間隔, [命令ブロック]),」という構造です (訳注: 命令ブロックには複数命令を書けます。上の例では、1 命令です。)。
上のゴールドを与えるトリガーを含めて、どの単純トリガーでも形は同じです。各部を見てみましょう。発動間隔 は、このトリガーがチェックされる頻度であり、単位はゲーム内の「1 時間」です。24 を指定すれば 24 時間毎なので日に 1 回発動し、1 を指定すれば 1 時間なので日に 24 回発動します。発動間隔に 0 を指定すると、トリガーがフレームごとに発動します。ユーザが設定するフレーム・レートによっては 1 秒間に何度も実行される可能性もあります。そのようなトリガーは実行速度を圧迫し得るので、注意して下さい。
命令ブロックは、トリガー発動時に何をするか、そのコードを書きます。前のコードを少し拡張してみましょう。
(24, [
# (try_begin), # この例では try ブロックは不要なのでコメント化。
(lt, "$player_honor", 0),
(troop_add_gold, "trp_player", 100),
# (try_end),
]),
この場合、主人公が不名誉(名誉が負値)なら、毎日 100 ゴールドが与えられます。さらに意味不明になりましたが、それは さておき、です。ご覧のように、トリガーは何の問題が無い場合でも失敗し得ます。try_ ブロックでくくらない場合は慎重に確認して下さい。当然ながら、もしもに備えて try ブロックを使うほうが常に安全です。
(24, [
(try_begin), # 備えあれば憂いなし
(lt, "$player_honor", 0), # 字下げが妥当か、常に要確認!
(troop_add_gold, "trp_player", 100),
(try_end),
]),
(訳注: 字下げについて、上記はリストの中なので、Python 公式サイトの推奨する字下げ規則に従う必要は全くありません。上のコメントの意味は、読み易く書け、ということでしょう。)
さぁ、以上で基本的なことは理解できました。ただ、知っておくべきことが他にもあります。単純トリガーは、物品やシーン小道具など、他でも使われますが、ti_on_weapon_attack や ti_on_init_scene_prop など、相応のタイミングでエンジンから渡されるハード・コーディングされた条件、という形の特別な条件で使われます。このような全ての特別な発動間隔の一覧が、header_triggers.py にあります。それぞれ どこで使えるかについての説明もあります。
これで単純トリガーに関するほぼ全てを要約しました。「(通常)トリガー」のページも読んで下さい。
セーブ・ゲームの互換性
セーブ・ゲームの互換性。 cmpxchg8b, Modding Q&A
廃止されたハード・コーディングのトリガー
ti_on_party_encounter と ti_simulate_battle は完全に非推奨になったのか? それとも(使う意義があるとして)まだ使えるのか? ともかく、トリガー発動の瞬間に 2 つのゲーム・スクリプトがアクティブになる。 (訳注: 出典見当たらず。下行がこの質問の答ではなさそうに見える。)
ワールド・マップへ切り替え時のトリガー。たぶん単純トリガー用。 kalarhan, Modding Q&A (訳注: 「For reference:」という行。)
- 脚注と出典:
- [1] 主に次のトピックから採録。 Lumos, Modding Q&A.