ゲームロジック(変数と条件)
これまでのバージョンで「フラグ」と呼ばれていた機能は、より強力で柔軟な「変数(Points)」と「条件判定(Conditions)」のシステムに進化しました。
このページでは、ゲームの進行度やプレイヤーの状態をどのように管理し、複雑なシナリオ分岐を作るかについて解説します。
1. 状態管理の基本
Section titled “1. 状態管理の基本”ゲームの状態を表す方法は、大きく分けて「自動記録」と「任意変数」の2種類があります。
A. 自動記録(Implicit State)
Section titled “A. 自動記録(Implicit State)”プレイヤーの行動に基づいて、システムが自動的に記録するデータです。これらを自分で設定する必要はありません。単純に「チェック」するだけで使えます。
- 既読状態 (
hasSeen): あるシーンをプレイヤーが表示したかどうか。 - 選択状態 (
hasChosen): 選択肢シーンで、どの選択肢を選んだか。
B. 任意変数(Points / Variables)
Section titled “B. 任意変数(Points / Variables)”制作者が自由に定義できる数値の入れ物です。従来の「フラグ」も、この変数を使って表現します。
- 名前:
score,love_meter,has_keyなど自由に命名可能。 - 値: 数値(整数)。
0や1を代入することで、ON/OFFのスイッチ(フラグ)としても使えます。
2. 変数(Points)の操作
Section titled “2. 変数(Points)の操作”変数の値を変えるには、シーン完了時の「アクション (actions)」を使用します。
値の変更 (point_modify)
Section titled “値の変更 (point_modify)”シーン終了時(StoryScene)や、選択肢を選んだ時(ChoiceScene)に実行できます。
- 加算:
amount: 1(ポイントゲット、フラグON) - 減算:
amount: -1(ダメージ、アイテム消費) - 代入: ※現在は増減のみのサポートが基本ですが、初期値0から
+1することで代入のように使えます。
例:アイテム「鍵」を入手する
on_complete: actions: - type: point_modify point: { name: "has_key", amount: 1 }3. 条件判定(Condition)
Section titled “3. 条件判定(Condition)”「あるシーンを表示するかどうか」や、「特定のアクションを実行するかどうか」を決めるルールです。
判定できる要素
Section titled “判定できる要素”- シーンを見たか? (
hasSeen/hasNotSeen)- 「オープニング (
scene_intro) を見た」ならシーンBへ。 - 「まだエンディング (
scene_end) を見ていない」ならヒントを表示。
- 「オープニング (
- 選択肢を選んだか? (
hasChosen)- 「『右に行く』を選んだ」場合のみ発生するイベント。
- 変数の値は? (
points)has_keyが 1 以上(鍵を持っている)。scoreが 100 以上(高得点)。
条件の組み合わせ
Section titled “条件の組み合わせ”デフォルトでは、リストアップした条件はすべて AND(かつ) で結びつきます。「A かつ B かつ C」をすべて満たした時だけ有効になります。
4. 活用事例集(レシピ)
Section titled “4. 活用事例集(レシピ)”古い「フラグ」のパターンを、新しいシステムでどう実現するかを紹介します。
パターン1:鍵と扉(アイテム所持判定)
Section titled “パターン1:鍵と扉(アイテム所持判定)”変数を「持っている=1」「持っていない=0」として扱います。
- 鍵入手シーン:
- アクション: ポイント
has_keyに+1する。
- アクション: ポイント
- 扉シーン:
- 出現条件 (
condition): ポイントhas_key >= 1 - ※もし
has_key == 0の場合に「鍵がかかっている」と言わせたい場合は、rules(IF-DO) アクションを使います。
- 出現条件 (
パターン2:ストーリー進行(章立て)
Section titled “パターン2:ストーリー進行(章立て)”これまでは「1章クリアのフラグ」を作っていましたが、今は「1章の最後のシーンを見たか」で判定できます。
- 1章ラスト (
scene_chap1_end):- 特別な操作は不要です。プレイヤーが見れば自動で記録されます。
- 2章冒頭 (
scene_chap2_start):- 出現条件 (
condition):hasSeen: ["scene_chap1_end"]
- 出現条件 (
わざわざフラグ変数を管理する必要がなくなり、シンプルになりました。
パターン3:一度きりのイベント
Section titled “パターン3:一度きりのイベント”「宝箱を一度開けたら、もう中身は復活しない」というパターンです。
- 宝箱シーン (
scene_treasure):- 出現条件 (
condition):hasNotSeen: ["scene_treasure"] - (自分自身を見たことがない場合のみ表示)
- 出現条件 (
これだけで、一度再生した後は条件を満たさなくなり、リストから消える(またはアクセスできなくなる)ようになります。
パターン4:会話の分岐(IF-DO)
Section titled “パターン4:会話の分岐(IF-DO)”同じシーンの中で、状態によってセリフや展開を変えたい場合です。
YAML例:
actions: # 条件付きジャンプ - type: jump_to sceneId: scene_secret_route condition: # 知力(intelligence)が10以上の時だけ points: [{ name: "intelligence", operator: ">=", value: 10 }]
# デフォルトのジャンプ(条件なし) - type: jump_to sceneId: scene_normal_routeこのように、アクションリストの上から順に評価し、条件に合ったものを実行させることができます。
主な変更点まとめ
Section titled “主な変更点まとめ”| 旧機能 | 新機能 | 備考 |
|---|---|---|
require_flags | condition | 名前が変わりましたが役割は同じで、機能が増えました。 |
set_flags | point_modify | 変数への加算で代用します (amount: 1)。 |
unset_flags | point_modify | 変数への減算で代用します (amount: -1)。 |
| 既読フラグの手動管理 | hasSeen | 自動管理されるため、手動設定は不要です。 |