コンテンツにスキップ

ゲームロジック(変数と条件)

これまでのバージョンで「フラグ」と呼ばれていた機能は、より強力で柔軟な「変数(Points)」と「条件判定(Conditions)」のシステムに進化しました。

このページでは、ゲームの進行度やプレイヤーの状態をどのように管理し、複雑なシナリオ分岐を作るかについて解説します。

ゲームの状態を表す方法は、大きく分けて「自動記録」と「任意変数」の2種類があります。

プレイヤーの行動に基づいて、システムが自動的に記録するデータです。これらを自分で設定する必要はありません。単純に「チェック」するだけで使えます。

  • 既読状態 (hasSeen): あるシーンをプレイヤーが表示したかどうか。
  • 選択状態 (hasChosen): 選択肢シーンで、どの選択肢を選んだか。

制作者が自由に定義できる数値の入れ物です。従来の「フラグ」も、この変数を使って表現します。

  • 名前: score, love_meter, has_key など自由に命名可能。
  • : 数値(整数)。01 を代入することで、ON/OFFのスイッチ(フラグ)としても使えます。

変数の値を変えるには、シーン完了時の「アクション (actions)」を使用します。

シーン終了時(StoryScene)や、選択肢を選んだ時(ChoiceScene)に実行できます。

  • 加算: amount: 1 (ポイントゲット、フラグON)
  • 減算: amount: -1 (ダメージ、アイテム消費)
  • 代入: ※現在は増減のみのサポートが基本ですが、初期値0から +1 することで代入のように使えます。

例:アイテム「鍵」を入手する

on_complete:
actions:
- type: point_modify
point: { name: "has_key", amount: 1 }

「あるシーンを表示するかどうか」や、「特定のアクションを実行するかどうか」を決めるルールです。

  1. シーンを見たか? (hasSeen / hasNotSeen)
    • 「オープニング (scene_intro) を見た」ならシーンBへ。
    • 「まだエンディング (scene_end) を見ていない」ならヒントを表示。
  2. 選択肢を選んだか? (hasChosen)
    • 「『右に行く』を選んだ」場合のみ発生するイベント。
  3. 変数の値は? (points)
    • has_key が 1 以上(鍵を持っている)。
    • score が 100 以上(高得点)。

デフォルトでは、リストアップした条件はすべて AND(かつ) で結びつきます。「A かつ B かつ C」をすべて満たした時だけ有効になります。


古い「フラグ」のパターンを、新しいシステムでどう実現するかを紹介します。

パターン1:鍵と扉(アイテム所持判定)

Section titled “パターン1:鍵と扉(アイテム所持判定)”

変数を「持っている=1」「持っていない=0」として扱います。

  1. 鍵入手シーン:
    • アクション: ポイント has_key+1 する。
  2. 扉シーン:
    • 出現条件 (condition): ポイント has_key >= 1
    • ※もし has_key == 0 の場合に「鍵がかかっている」と言わせたい場合は、rules (IF-DO) アクションを使います。

パターン2:ストーリー進行(章立て)

Section titled “パターン2:ストーリー進行(章立て)”

これまでは「1章クリアのフラグ」を作っていましたが、今は「1章の最後のシーンを見たか」で判定できます。

  1. 1章ラスト (scene_chap1_end):
    • 特別な操作は不要です。プレイヤーが見れば自動で記録されます。
  2. 2章冒頭 (scene_chap2_start):
    • 出現条件 (condition): hasSeen: ["scene_chap1_end"]

わざわざフラグ変数を管理する必要がなくなり、シンプルになりました。

パターン3:一度きりのイベント

Section titled “パターン3:一度きりのイベント”

「宝箱を一度開けたら、もう中身は復活しない」というパターンです。

  1. 宝箱シーン (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

このように、アクションリストの上から順に評価し、条件に合ったものを実行させることができます。


旧機能新機能備考
require_flagscondition名前が変わりましたが役割は同じで、機能が増えました。
set_flagspoint_modify変数への加算で代用します (amount: 1)。
unset_flagspoint_modify変数への減算で代用します (amount: -1)。
既読フラグの手動管理hasSeen自動管理されるため、手動設定は不要です。