godot-quest-system について
クエストシステムを設計するGodot開発者向けのスキルです。受注、目標の進行、完了、報酬シグナル、保存を扱い、StringNameによる識別とイベント駆動の更新、状態の一元管理を重視します。
主な機能
- 01クエストの受注・進行・完了を管理
- 02イベントで目標を更新
- 03クエストの連鎖と分岐に対応
- 04状態と進行状況を保存
- 05トラッカーとウェイポイントを支援
活用シーン
- 01討伐・収集・会話の目標を実装
- 02前提条件付きのクエスト連鎖を構築
- 03UIで進行中の目標を追跡
- 04クエスト進行を保存して復元
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ thedivergentai/ game-dev-agentic-skills --skill godot-quest-systemインストール後、Claude Code で/godot-quest-systemを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
references/migration-notes.mdquest-patterns-deep.mdscripts/branching_quest_data.gdhidden_objective_logic.gdkill_objective_trigger.gdlocalized_quest_description.gdquest_conflict_resolver.gdquest_giver_dialogue_hook.gdquest_graph_manager.gdquest_manager_singleton.gdquest_manager.gdquest_persistence_loader.gdquest_resource.gdquest_ui_tracker.gdquest_waypoint_helper.gdtimed_quest_challenge.gd詳細
必須の読み込み
- quest_resource.gd —
StringNameの ID、ステータス、目標/報酬 - quest_manager_singleton.gd — 受注/進行/完了/連鎖
補助: kill_objective_trigger.gd、quest_ui_tracker.gd、branching_quest_data.gd、quest_giver_dialogue_hook.gd、quest_persistence_loader.gd、timed_quest_challenge.gd、hidden_objective_logic.gd、localized_quest_description.gd、quest_graph_manager.gd、quest_waypoint_helper.gd、quest_conflict_resolver.gd、quest_manager.gd(代替ヘルパー — シングルトンを優先)。
基本フロー
accept → event trigger → progress → complete → persist
| チェックポイント | アクション |
|---|---|
| 受注 | QuestManager.accept_quest(quest) — 実行時に変更する場合は Resource を複製し、quest_completed を一度だけ接続します |
| イベントトリガー | トリガーノード/バスを介して討伐/収集/会話を処理します — 敵スクリプトにハードコードしません(kill_objective_trigger.gd) |
| 進行 | update_objective(quest_id: StringName, …) — インターン済み ID のみを使用します |
| 完了 | マネージャーがアクティブなクエストを削除し、quest_completed を発行して、インベントリ/経済システムのシグナルを介して報酬を付与します |
| 接続解除 | クエストがアクティブセットから外れたら、完了時の Callable の接続を解除します — 報酬の二重付与を防ぎます |
| 永続化 | アクティブ/完了 ID マップとカウントを保存します(quest_persistence_loader.gd) — 実行中の Resource グラフは保存しません |
クエストシステムで絶対にしてはいけないこと
- アクティブなクエストを Player ノードだけに保存してはいけません — Autoload/永続データを使用します。
- 検証されていない通常の文字列 ID を使ってはいけません —
StringName/レジストリ(&"kill_slimes")を使用します。 - 完了シグナルの接続解除を忘れてはいけません — 報酬が二重に付与されます。
_processで目標をポーリングしてはいけません — シグナル駆動にします。- クエスト状態のセーブ/ロードを省略してはいけません。
- クエストのロジックを敵/アイテムのスクリプトにハードコードしてはいけません — トリガー/バスを使用します。
- Quest Resource 内で戦利品を付与してはいけません — 発行し、インベントリ/経済システムから付与します。
- 同じクエスト ID のアクティブなインスタンスを重複して許可してはいけません。
フィールドの統一(StringName)
本体とスクリプトでは、次の形式を使用します。
quest.id: StringNameobjective_id: StringName- マネージャーの辞書キーには
StringNameを使用します - 会話/クエスト提供者のフックでは、自由形式の文字列ではなく
StringNameを比較します
専門知識:その理由(重要)
CAUTION: null エントリーを含む配列に対して
objectives.all(...)を実行するとクラッシュします —is_complete()で null をチェックしてください(quest_resource.gd を参照)。
- NavMesh のウェイポイント — 目標が変更された場合にのみ
NavigationAgent3D.target_positionを更新します(quest_waypoint_helper.gd)。 - 並行進行 — ネットワーク/並列戦闘では Mutex と遅延シグナルを使用します(quest_conflict_resolver.gd)。
- 前提条件 — Inspector で Resource にリンクされたクエストチェーンを設定します(branching_quest_data.gd)。
詳細(必要に応じて読み込み)
クエスト/目標/マネージャー/UI の解説と高度なパターン — references/quest-patterns-deep.md。
参考資料
段階的な開示:特定の API を調べる場合にのみ公式ドキュメントのリンクを開き、関連分野に移る場合にのみ関連スキルを読み込みます — 全体を事前に読み込まないでください。
公式ドキュメント
- リソース — クエストの定義、目標、報酬テーブルをシーン固有のスクリプトではなく、再利用可能な
Resourceアセットにする理由を説明します。 - Resource — Inspector で作成するクエストデータや分岐チェーンで使用する
@export、ネストされた Resource、複製のルールについて説明します。 - シングルトン(Autoload) — Player ノードに属さず、シーンの切り替え後も存続する、型付きの QuestManager を登録する方法を説明します。
- Autoload と通常のノードの比較 — グローバルなクエスト状態が適切な場合と、シーンが所有するデータ Resource に進行状況を保持する場合について説明します。
- シグナルの使用 —
_process()でポーリングせずに、quest_accepted/objective_updatedを使って送信・接続するモデルについて説明します。 - シグナルを使ったインスタンス化 — ハードコードされたノードパスを使わずに、スポーンしたアクターの撃破/収集/会話トリガーをマネージャーに接続する方法を説明します。
- ゲームの保存 — クエスト ID と進行状況の数値を辞書として保存する方法を説明します。実行中の Quest Resource インスタンスをシリアライズしてはいけません。
- ゲームの国際化 — クエスト Resource に
tr()キーを保存し、派生した.tresファイルを作成せずにタイトルや説明をローカライズする方法を説明します。 - Timer —
Timer/SceneTree.create_timerのタイムアウトシグナルを使った、制限時間付きチャレンジの失敗処理について説明します。 - コンテナの使用 — マネージャーのシグナルのみを使って Label を再構築する、リアクティブな
VBoxContainerのクエストトラッカーについて説明します。 - StringName — 通常の文字列による入力ミスが気付かれないまま失敗するのを防ぐため、目標やクエストにはインターン済み ID を使用する方法を説明します。
- シーンの構成 — NPC や敵がクエスト完了の計算を所有しないようにする、シグナルを上に送り呼び出しを下に送る所有関係について説明します。
関連スキル
前提条件
- godot-resource-data-patterns — クエストの定義や目標グラフの基盤となる、カスタム Resource、複製、Inspector での作成パターンについて説明します。
- godot-signal-architecture — 幽霊リスナーを発生させずに撃破/収集トリガーを処理するための、型付きシグナルの送信・接続、適切な切断、EventBus によるルーティングについて説明します。
- godot-autoload-architecture — シーンの切り替え後も存続するシングルトン QuestManager の起動順序と所有ルールについて説明します。
補完
- godot-dialogue-system — クエスト依頼者の依頼・リマインダー・感謝の分岐では、クエストの状態を確認し、会話の選択肢を通じて受諾・完了を通知する必要があります。
- godot-inventory-system — 収集目標と報酬の付与では、アイテムの変更をインベントリに委譲し、クエストスクリプトにスタックを埋め込まないようにします。
- godot-save-load-systems — プレイヤー状態とともに、進行中および完了済みクエストの辞書をシリアライズする、スロット/バージョン対応のセーブパイプラインです。
- godot-ui-containers — マネージャーのシグナルのみを使って駆動する目標トラッカーとジャーナルパネルのレイアウトおよび再構築パターンです。
- godot-economy-system — クエスト完了後の通貨/XP報酬の消費先です。付与ロジックはQuest Resource自体に含めないようにします。
- godot-monte-carlo-balancer — クエスト経済の数値を確定する前に、報酬曲線、時間切れ失敗率、目標の難易度をシミュレーションします。
下流/利用側
- godot-rpg-stats — クエストの受諾チェックを解放または完了させるレベル条件、XP報酬、ステータスの前提条件です。
- godot-combat-system — 死亡/敗北イベントはバスを通じて討伐目標に伝えます。敵のスクリプトからQuestManagerを直接呼び出すことはありません。
- godot-genre-action-rpg — クエストの追跡、会話フック、報酬の分配を1つのRPGループとして組み合わせるジャンル構成です。
- godot-navigation-pathfinding — 目標の変更に応じて、目標のウェイポイントとコンパスのヘルパーが
NavigationAgentのターゲットを更新します。
マスター
- godot-master — ライブラリのルーター兼ミラー化されたモジュールのエントリです。クエスト、会話、インベントリ、セーブのどのドメインスキルが担当するかを確認する際に開いてください。