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#

CampoTipoPadrãoDescrição
idYesstringInternal addon ID.
nameYesstringFriendly name (e.g., Combat Skills).
entriesYesSkillEntry[]List of skills.

SkillEntry#

CampoTipoPadrãoDescrição
idYesstringInternal ID.
nameYesstringFriendly name (e.g., Fireball).
descriptionstringSkill description (UI tooltip).
kindYes"active" | "passive"active: must be triggered (Fireball). passive: permanent effect (Iron Skin).
cooldownSecondsnumberMinimum time between uses. Sub-second OK (0.5s). Empty = no limit (autofire).
costsSkillCost[]Costs paid on each use. Empty = free.
effectsSkillEffectRef[]Refs to entries in the attributeModifiers on the same page.
unlockSkillUnlockConditions to unlock (level + currency + item). Reuses the CraftTableUnlock type.
tagsstring[]Free-form tags (fire, single-target, magical).

SkillCost#

Each entry in the cost list:

CampoTipoPadrãoDescrição
idYesstringInternal ID.
typeYes"currency" | "attribute" | "charges"currency: pays a project currency. attribute: pays a stat (e.g., mana). charges: local charges (no external ref).
amountYesnumberAmount to pay.
currencyRefstring (sectionId)When type=currency. Points to the currency page.
definitionsRefstring (sectionId)When type=attribute. Attributes page that defines the key. Each cost can use a different page.
attributeKeystringWhen type=attribute. Existing key in definitionsRef.

SkillEffectRef#

Each entry in the effects list:

CampoTipoPadrãoDescrição
idYesstringInternal ID.
attributeModifiersSectionIdYesstring (sectionId)Section that has the modifiers addon. Usually the same page as the skill.
attributeModifiersAddonIdYesstringID of the modifiers addon in that section.
modifierEntryIdYesstringID 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:

  1. This skills addon (empty)
  2. An attributeModifiers (empty, with definitionsRef filled 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.5 shows "≈ 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 addon
  • source: "skillCosts" (inside skills) — iterates the costs of the current skill
  • source: "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.

See also#