Expert patterns for RPG/action ability systems including cooldown strategies, combo systems, ability chaining, skill trees with prerequisites, upgrade paths, and resource management.
Expert patterns for RPG/action ability systems including cooldown strategies, combo systems, ability chaining, skill trees with prerequisites, upgrade paths, and resource management.
Use when implementing unlockable abilities, character progression, or complex skill systems.
Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.
Claude CodeNot declared
CursorNot declared
CodexNot declared
GitHub CopilotNot declared
WindsurfNot declared
Gemini CLINot declared
ClineNot declared
OpenCodeNot declared
Repository health
Stars678
LicenseLICENSE
Default branchmain
Open issues0
Status
Active
Package contents
Files included with this skill beyond the listing page.
skill mdSKILL.md13,666 B
docsSUMMARY.md4,015 B
History
First seen on skills.sh
First recorded snapshot · 307 installs
SKILL.md
Architecture Decision: Where Does the Manager Live?
Scope
Policy
Script
Per character / enemy / turret
Scene-scoped manager as child (default)
[abilitymanager.gd](scripts/abilitymanager.gd) or composition [abilitycontainer.gd](scripts/abilitycontainer.gd) on the entity
Shared unlock / loadout catalog across scenes
Autoload catalog / progression only (ranks, unlock flags) — not live cast state
Thin Autoload data; casts still go through the entity manager
Global "cast any ability anywhere" Autoload
Avoid
Breaks encapsulation and multiplayer authority
Resolved policy: Live cooldowns, GCD, and execute() run on a scene-scoped AbilityManager / AbilityContainer under the caster. Autoloads may store unlock ranks; they must not be the combat cast oracle. Skill-tree UI reads/writes progression data, then calls into the caster’s manager — never /root/AbilityManager.use_* for combat.
NEVER Do
NEVER tick cooldowns / status durations in process() — Use physics_process(delta) or one-shot Timers so cooldowns stay deterministic under frame spikes.
NEVER forget global cooldown (GCD) when design needs anti-spam — Small shared lock (0.5–1.5s) between casts when required.
NEVER hardcode ability effects in the manager — Strategy: each ability is a Resource / node with execute() ([abilityresource.gd](scripts/abilityresource.gd)).
NEVER allow casts during animation lock — Gate on is_casting / anim signals.
NEVER save remaining cooldown floats without time normalization — Persist absolute end timestamps (Time.getunixtimefromsystem() + remaining).
NEVER put live combat cast state in a global Autoload — Scene-scoped manager (see decision table). Progression Autoloads are fine.
NEVER blindly ban or blindly require object pools — GDScript refcounting makes pool-optional for light VFX; do pool when spawn/despawn of projectiles/AoE is high-frequency or allocation shows up in the profiler. Prefer instantiate/queue_free until measured otherwise.
NEVER grow deep ability inheritance trees — Compose Resources + containers (godot-composition).
Golden Path (MANDATORY)
[abilityresource.gd](scripts/abilityresource.gd) — data + virtual execute()
[abilitymanager.gd](scripts/abilitymanager.gd) or [abilitycontainer.gd](scripts/abilitycontainer.gd) — scene-scoped cast/cooldown
[buffstat.gd](scripts/buffstat.gd) — when buffs/modifiers exist
Do NOT paste inline AbilityManager / ComboSystem / SkillTreeManager novels into scenes. Skill trees are progression UI + prerequisite graphs that grant Resources to the caster’s container.
Available Scripts
[abilityresource.gd](scripts/abilityresource.gd) — MANDATORY before new abilities
Skill-tree visualizer:@tool GraphEdit for design-time graphs; runtime still grants Resources to scene managers.
Status Effects & Combos (critical WHY)
CAUTION: Status/buff templates applied at runtime must use duplicate(true). One poisoned .tres mutates every character sharing that asset — see [statuseffectmanager.gd](scripts/statuseffectmanager.gd).
Charges: [chargeability.gd](scripts/chargeability.gd) — recharge ticks belong on physicsprocess, not UI _process.
Skill trees: [skilltreemanager.gd](scripts/skilltreemanager.gd) grants abilities to the caster's scene manager — progression Autoloads hold ranks only.
Save cooldowns: persist absolute end timestamps (Time.getunixtimefromsystem() + remaining), not raw remaining floats — prevents clock/load exploits.
MANDATORY for combos/charges/skill-tree/status/network depth beyond bullets above: [elite-ability-patterns.md](references/elite-ability-patterns.md). Do NOT Load for a first AbilityResource + AbilityManager pass.
Reference
Progressive disclosure: Skim Official Documentation only for the APIs you are implementing (Resources, timers, signals, save, multiplayer). Open Related Skills when wiring adjacent systems—do not preload the whole lattice.
Official Documentation
Resources — Ability definitions, buffs, and status effects should be Resource data (not hardcoded manager switches) so designers can author and share assets.
Resource — Use duplicate(true) when applying a status/buff template at runtime so one character’s ticking state cannot mutate the shared .tres for everyone.
GDScript exports — @export / @exportgroup power Inspector-tuned costs, cooldowns, prerequisites, and effect arrays on ability Resources.
Using signals — Emit abilitycast, ability_ready, and cooldown lifecycle signals so UI and VFX subscribe without coupling to AbilityManager internals.
Scene organization — Keep “signals up, calls down”: parents/UI listen; managers call into ability Resources/nodes rather than reaching globally for combat state.
Idle and Physics Processing — Tick cooldowns and GCD in physicsprocess (fixed delta); avoid process for cooldown math that desyncs under frame spikes.
Timer — One-shot Timer children are a clean composition pattern for per-ability cooldowns in container-style managers.
SceneTreeTimer — createtimer() / await patterns fit cast times and short buff durations without adding persistent Timer nodes for every cast.
Groups — AoE abilities should call_group (or query groups) instead of hand-rolled scene scans for every hit target.
Time — Persist cooldown end timestamps (getunixtimefrom_system() + remaining), not raw remaining floats, across save/load.
Saving games — Serialize ability unlock ranks and absolute cooldown end times with the rest of player progression data.
High-level multiplayer — Authoritative cast validation + @rpc confirmation/cancel is the engine baseline for predicted ability casts.
Related Skills
Prerequisites
godot-resource-data-patterns — Abilities, buffs, and skill-tree nodes are Resource-first; load this before inventing custom serialization or inheritance trees for ability data.
godot-signal-architecture — Cast/ready/cooldown signals and UI hooks depend on disciplined signal ownership so AbilityManager stays decoupled from characters and HUD.
godot-composition — Prefer AbilityContainer / component nodes over deep BaseAbility → MagicAbility → FireAbility inheritance for runtime behavior.
godot-combat-system — Damage, hit reactions, and targeting pipelines consume ability execute() results; keep DamageData separate from ability metadata.
godot-rpg-stats — Mana/stamina costs, stat bonuses from skill ranks, and buff multipliers need a consistent stats/modifier layer.
godot-input-handling — Hotbar / action-map input should call canuse / useability rather than embedding cooldown logic in input callbacks.
godot-animation-player — Animation lock and cast telegraphs gate ability spam; wire AnimationPlayer start/finish into is_casting.
godot-state-machine-advanced — Cast, channel, and interrupt states belong in a character state machine that asks the ability manager, not the other way around.
godot-save-load-systems — Skill ranks, unlock flags, and absolute cooldown end times must round-trip through the project save schema.
Downstream / consumers
godot-monte-carlo-balancer — After cooldowns, costs, and damage/effect Resources are tunable, Monte Carlo loadout sims prove ability DPS/uptime bands before shipping curves.
godot-multiplayer-networking — Predicted casts, authority checks, and rollback of failed RPCs build on the ability manager’s can_use / execute split.
godot-genre-action-rpg — Action-RPG skill bars, skill trees, and ability chaining assemble this skill with combat, stats, and progression genre glue.
godot-inventory-system — Consumable scrolls, skill books, and equipment that grants abilities bridge inventory grants into AbilityManager registration.
Master
godot-master — Library router and mirrored module entry; use when discovering peer skills or syncing shared script mirrors after Domain Skill edits.