Active/passive abilities with cooldowns, multiple costs, and effects linked to Modifiers.
skills#
Models game abilities: spells, special attacks, passives, ultimates. Each skill knows its own cooldown, costs (currency/attribute/charges), effects (references to Modifiers on the same page), and unlock conditions.
Why it matters#
Skills are one of the densest structures in any GDD — they touch economy (cost), attributes (effect), progression (unlock), time (cooldown, DoT duration), and sometimes items (consumable cost). Without a dedicated schema you end up duplicating this information in loose prose and the engine implements each one by hand.
Where it usually lives#
- Page of type
⚡ Skills(comes with Skills + linked AttributeModifiers). - Blank pages when you want to group skills differently.
Singleton — 1 addon per page. Multiple skills live in the entries[] of the same addon.
Schema#
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
idYes | string | Internal addon ID. | |
nameYes | string | Friendly name (e.g., Combat Skills). | |
entriesYes | SkillEntry[] | List of skills. |
SkillEntry#
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
idYes | string | Internal ID. | |
nameYes | string | Friendly name (e.g., Fireball). | |
description | string | Skill description (UI tooltip). | |
kindYes | "active" | "passive" | active: must be triggered (Fireball). passive: permanent effect (Iron Skin). | |
cooldownSeconds | number | Minimum time between uses. Sub-second OK (0.5s). Empty = no limit (autofire). | |
costs | SkillCost[] | Costs paid on each use. Empty = free. | |
effects | SkillEffectRef[] | Refs to entries in the attributeModifiers on the same page. | |
unlock | SkillUnlock | Conditions to unlock (level + currency + item). Reuses the CraftTableUnlock type. | |
tags | string[] | Free-form tags (fire, single-target, magical). |
SkillCost#
Each entry in the cost list:
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
idYes | string | Internal ID. | |
typeYes | "currency" | "attribute" | "charges" | currency: pays a project currency. attribute: pays a stat (e.g., mana). charges: local charges (no external ref). | |
amountYes | number | Amount to pay. | |
currencyRef | string (sectionId) | When type=currency. Points to the currency page. | |
definitionsRef | string (sectionId) | When type=attribute. Attributes page that defines the key. Each cost can use a different page. | |
attributeKey | string | When type=attribute. Existing key in definitionsRef. |
SkillEffectRef#
Each entry in the effects list:
| Campo | Tipo | Padrão | Descrição |
|---|---|---|---|
idYes | string | Internal ID. | |
attributeModifiersSectionIdYes | string (sectionId) | Section that has the modifiers addon. Usually the same page as the skill. | |
attributeModifiersAddonIdYes | string | ID of the modifiers addon in that section. | |
modifierEntryIdYes | string | ID of the specific entry inside the modifiers. |
Example: complete Fireball#
{
"id": "skill-fireball",
"name": "Fireball",
"description": "Fire ball that causes impact + burn.",
"kind": "active",
"cooldownSeconds": 5,
"costs": [
{
"id": "c1",
"type": "attribute",
"amount": 30,
"definitionsRef": "section-attrs",
"attributeKey": "mana"
}
],
"effects": [
{
"id": "e1",
"attributeModifiersSectionId": "section-fireball",
"attributeModifiersAddonId": "mods-fireball",
"modifierEntryId": "mod-impact"
},
{
"id": "e2",
"attributeModifiersSectionId": "section-fireball",
"attributeModifiersAddonId": "mods-fireball",
"modifierEntryId": "mod-burn"
}
],
"unlock": {
"level": { "enabled": true, "level": 5 }
},
"tags": ["fire", "magical", "aoe"]
}
Read as: active skill, 5s cooldown, costs 30 mana, triggers 2 modifiers (impact + burn), unlocks at level 5, tagged as fire/magic/area.
Wizard#
The ⚡ Skills page type automatically creates:
- This
skillsaddon (empty) - An
attributeModifiers(empty, withdefinitionsReffilled in)
The AttributeDefinitions used comes from the requires dialog that opens when you create the page. You can pick an existing one or create a new one in the same flow.
UX highlight: rich cooldown panel#
The cooldown panel for each skill shows:
- Live-derived label: typing
1.5shows "≈ 0.67 uses per second (limited autofire)" - Presets: clickable chips (No limit / Attack 1s / Skill 5s / Ultimate 60s)
- Timeline: caster bar (recharge) and target bar (effect), proportional. Shows tick dividers when the effect is a DoT.
- Stacking hint: warns if the stacking rule of linked modifiers may cause unexpected behavior (e.g., stack with short cooldown = potentially broken).
Export to Remote Config#
Skills has 3 dedicated sources in Remote Config:
source: "skills"— iterates all skills in the addonsource: "skillCosts"(inside skills) — iterates the costs of the current skillsource: "skillEffects"(inside skills) — iterates the effects of the current skill
And 3 corresponding binding sources (skillField, skillCostField, skillEffectField) with dozens of resolved fields (resolvedName, resolvedAttributeKey, resolvedDefinitionsRef, resolvedDurationSeconds, resolvedStacking, etc.) that follow refs and return data ready for the engine.
See Remote Config for complete examples.