ロジック設定パターン集 (Tips)
import { Tabs, TabItem } from ‘@astrojs/starlight/components’;
シナリオ制作でよくある「やりたいこと」別に、条件判定 (Condition) と アクション を使った実装例を紹介します。
1. シーンの出し分け・制限
Section titled “1. シーンの出し分け・制限”シーンの出現条件を工夫するパターンです。
一度きりのイベント (Once-only)
Section titled “一度きりのイベント (Once-only)”「宝箱を開ける」など、二度目は表示したくないイベントです。
* 「条件を追加」→「**既読/未読**」* 「**未読 (Not Seen)**」を選択* 対象シーン: **自分自身のシーンID** を選択既読スキップ (Read Skip)
Section titled “既読スキップ (Read Skip)”「初回は詳しい説明をするが、2回目は省略する」パターンです。
**シーンA (詳細版)*** 開始条件: 「**シーンAをまだ見ていない**」 (hasNotSeen: scene_A)* 完了アクション: 次のシーンへ
**シーンB (簡易版)*** 開始条件: 「**シーンAを見たことがある**」 (hasSeen: scene_A)* 完了アクション: 次のシーンへ# 詳細版- id: scene_long title: "詳しい説明" dialogue: - text: "これは長い説明です..." on_complete: actions: - type: jump_to scene_id: scene_next
# 省略版- id: scene_short title: "省略版" dialogue: - text: "はい、例の件ですね。" on_complete: actions: - type: jump_to scene_id: scene_next2. 進行管理・フラグ応用
Section titled “2. 進行管理・フラグ応用”「変数」や「複数条件」を使ったパターンです。
複数条件での解放 (Multi-condition)
Section titled “複数条件での解放 (Multi-condition)”「3人の村人全員と話すと、村長が出てくる」パターンです。
1. 条件追加 → 既読 → 「村人A」2. 条件追加 → 既読 → 「村人B」3. 条件追加 → 既読 → 「村人C」
※デフォルトで「すべての条件を満たす (AND)」として扱われます。スタンプラリー (Stamp Rally)
Section titled “スタンプラリー (Stamp Rally)”「特定のスポットを3箇所以上回る」パターンです。 変数をカウンターとして使います。
2. **景品交換所のシーン**: * 開始条件: 「ポイント」 * 変数 `stamp_count` が `3` `以上`# ゴール- id: scene_goal condition: points: [{ name: "stamp_count", operator: ">=", value: 3 }]3. 高度なギミック
Section titled “3. 高度なギミック”GPSや時間を活用した、少し特殊なパターンです。
場所の解放 (Location Unlock)
Section titled “場所の解放 (Location Unlock)”「古地図を手に入れたら、地図上に隠しダンジョンが表示される」パターンです。
場所データ (locations) 側の設定を使用します。
1. 隠し場所にしたいロケーションを選ぶ。2. 「**公開条件 (Reveal Condition)**」を設定する。3. 条件で「**既読**」→「古地図入手シーン」を指定する。
これ設定すると、条件を満たすまでは地図上にマーカー自体が表示されなくなります。(※「隠しスポット(Secret)」機能とは異なり、マーカーそのものを隠します) # この条件を満たすまで地図に表示されない reveal_condition: has_seen: ["scene_get_map"]
# ※注意: 手動で記述する場合、空の項目は省略可能です(例: actions: [] は不要)。時限タイマー (Timer)
Section titled “時限タイマー (Timer)”「時限爆弾のスイッチを入れてから、3分後に爆発する」パターンです。 タイマー開始 (start_timer) アクションを使用します。
1. 「**タイマー開始 (Timer)**」を選択2. **制限時間**: `3` 分3. **時間切れ時のアクション**: 「シーン移動」→「爆発シーン」
これで、スイッチ起動シーンを完了した時点から3分のカウントダウンが開始されます。時間切れになると、自動的に爆発シーンへ強制移動します。# 時間切れ時に表示されるシーン- id: scene_explosion title: "爆発!" # ...```タイマー停止 (Cancel Timer)
Section titled “タイマー停止 (Cancel Timer)”「爆弾を解除したら、カウントダウンを止める」パターンです。 タイマー停止 (cancel_timer) アクションを使用します。
1. 「**タイマー停止 (Cancel)**」を選択2. 続けて「**シーン移動 (Jump)**」でクリア画面へ移動
これで、解除シーンを完了した時点でカウントダウンが停止します。# クリア画面- id: scene_ending_success title: "脱出成功" on_complete: actions: - type: game_clear game_clear: label: "生還者" next_action: back_to_top```4. エンディング分岐
Section titled “4. エンディング分岐”称号・マルチエンディング
Section titled “称号・マルチエンディング”クリア実績を分けたり、エンディング後に飛ばすURLを変えたりする方法です。
1. **アクション1 (完全クリア)** * 条件: 変数 `score` >= 100 * 実行: 「**ゲームクリア**」 * 称号: 「伝説の探偵」 * 完了後: 「URLを開く」 (特典サイトへ)
2. **アクション2 (通常クリア)** * 条件: なし (その他すべて) * 実行: 「**ゲームクリア**」 * 称号: 「見習い探偵」 * 完了後: 「トップに戻る」 # 通常クリア - type: game_clear game_clear: label: "見習い探偵" next_action: back_to_top