thedivergentai/gd-agentic-skills
godot-quest-system
Expert blueprint for quest tracking systems (objectives, progress, rewards, branching chains) using Resource-based quests, signal-driven updates, and AutoLoad managers. Use when implementing RPG quests or mission systems. Keywords quest, objectives, Quest Resource, QuestObjective, signal-driven, branching, rewards, AutoLoad.
Agent workflows
Use judgment
Installs
242
Stars
678
Security
No audit
Freshness
Unknown
Updated
—
First seen Feb 10, 2026
Installation
Project
Global
Entire repo
Entire repo (global)
$
npx skills add thedivergentai/gd-agentic-skills --skill godot-quest-system
Copy
SKILL.md
MANDATORY loads
[questresource.gd](scripts/quest resource.gd) — StringName ids, status, objectives/rewards
[questmanager singleton.gd](scripts/questmanager singleton.gd) — accept / progress / complete / chain
Supporting: [killobjective trigger.gd](scripts/killobjective trigger.gd), [questui tracker.gd](scripts/questui tracker.gd), [branchingquest data.gd](scripts/branchingquest data.gd), [questgiver dialoguehook.gd](scripts/quest giverdialogue hook.gd), [questpersistence loader.gd](scripts/questpersistence loader.gd), [timedquest challenge.gd](scripts/timedquest challenge.gd), [hiddenobjective logic.gd](scripts/hiddenobjective logic.gd), [localizedquest description.gd](scripts/localizedquest description.gd), [questgraph manager.gd](scripts/questgraph manager.gd), [questwaypoint helper.gd](scripts/questwaypoint helper.gd), [questconflict resolver.gd](scripts/questconflict resolver.gd), [questmanager.gd](scripts/quest manager.gd) (alt helper — prefer singleton).
Golden path
accept → event trigger → progress → complete → persist
Checkpoint
Action
Accept
QuestManager.acceptquest(quest) — duplicate Resource if runtime mutation; connect questcompleted once
Event trigger
Kill/collect/talk via trigger nodes / bus — not hardcoded in enemy scripts ([killobjective trigger.gd](scripts/killobjective trigger.gd))
Progress
updateobjective(quest id: StringName, …) — interned ids only
Complete
Manager erases active, emits quest_completed, grants via inventory/economy signals
Disconnect
Disconnect completion Callables when quest leaves active set — prevent double rewards
Persist
Save active/completed id maps + counts ([questpersistence loader.gd](scripts/questpersistence loader.gd)) — not live Resource graphs
NEVER Do in Quest Systems
NEVER store active quests only on the Player node — Autoload / persistent data.
NEVER use unverified plain string ids — StringName / registry (&"kill_slimes").
NEVER forget to disconnect completion signals — double rewards.
NEVER poll objectives in _process — signal-driven.
NEVER skip save/load for quest state .
NEVER hardcode quest logic inside enemy/item scripts — triggers/bus.
NEVER award loot inside the Quest Resource — emit; inventory/economy grant.
NEVER allow duplicate active instances of the same quest id .
Field alignment (StringName)
Across body + scripts use:
quest.id: StringName
objective_id: StringName
Manager dictionaries keyed by StringName
Dialogue/quest-giver hooks compare StringName, not free strings
Expert WHY (critical)
CAUTION: objectives.all(...) on arrays with null entries crashes — null-check in iscomplete() (see [questresource.gd](scripts/quest_resource.gd)).
NavMesh waypoints — update NavigationAgent3D.targetposition on objective change only ([questwaypointhelper.gd](scripts/quest waypoint_helper.gd)).
Concurrent progress — Mutex + deferred signals for network/parallel combat ([questconflict resolver.gd](scripts/questconflict resolver.gd)).
Prerequisites — Resource-linked quest chains in Inspector ([branchingquest data.gd](scripts/branchingquest data.gd)).
Deep dive (load on demand)
Quest/Objective/Manager/UI walkthroughs and elite patterns — [references/quest-patterns-deep.md](references/quest-patterns-deep.md).
Reference
Progressive disclosure: open Official Documentation links only when researching a specific API; load Related Skills when routing to a peer domain — do not preload the whole lattice.
Official Documentation
Resources — Why quest definitions, objectives, and reward tables belong in reusable Resource assets instead of scene-local scripts.
Resource — @export, nested Resources, and duplication rules for Inspector-authored quest data and branching chains.
Singletons (Autoload) — How to register a typed QuestManager that survives scene changes without living on the Player node.
Autoloads versus regular nodes — When global quest state is justified vs keeping progress on a scene-owned data Resource.
Using signals — Emit/connect model for questaccepted / objectiveupdated without polling in process().
Instancing with signals — Wire kill/collect/talk triggers from spawned actors into the manager without hardcoded node paths.
Saving games — Persist quest IDs and progress counts as dictionaries — never serialize live Quest Resource instances.
Internationalizing games — Store tr() keys on quest Resources so titles/descriptions localize without forked .tres files.
Timer — Time-limited challenge fail paths via Timer / SceneTree.createtimer timeout signals.
Using Containers — Reactive VBoxContainer quest trackers that rebuild Labels from manager signals only.
StringName — Prefer interned IDs for objectives/quests to avoid silent typo failures from plain strings.
Scene organization — Signal-up / call-down ownership so NPCs and enemies never own quest completion math.
Related Skills
Prerequisites
godot-resource-data-patterns — Custom Resources, duplication, and Inspector authoring patterns that quest definitions and objective graphs depend on.
godot-signal-architecture — Typed emit/connect, disconnect hygiene, and EventBus routing for kill/collect triggers without ghost listeners.
godot-autoload-architecture — Boot order and ownership rules for a singleton QuestManager that outlives scene swaps.
Complements
godot-dialogue-system — Quest-giver offer/reminder/thanks branches should query quest status and emit accept/complete through dialogue choices.
godot-inventory-system — Collect objectives and reward grants should delegate item mutations to inventory, not embed stacks in quest scripts.
godot-save-load-systems — Slot/versioned save pipelines that serialize active/completed quest dictionaries beside player state.
godot-ui-containers — Layout and rebuild patterns for objective trackers and journal panels driven only by manager signals.
godot-economy-system — Currency/XP reward sinks after quest completion; keep grant logic out of the Quest Resource itself.
godot-monte-carlo-balancer — Simulate reward curves, timed-fail rates, and objective difficulty before locking quest economy numbers.
Downstream / consumers
godot-rpg-stats — Level gates, XP rewards, and stat prerequisites that unlock or complete quest acceptance checks.
godot-combat-system — Death/defeat events feed kill objectives through a bus instead of enemy scripts calling QuestManager directly.
godot-genre-action-rpg — Genre composition that consumes quest tracking, dialogue hooks, and reward distribution as one RPG loop.
godot-navigation-pathfinding — Objective waypoints and compass helpers update NavigationAgent targets when objectives change.
Master
godot-master — Library router and mirrored module entry; open when discovering which Domain Skill owns quests vs dialogue, inventory, or save.