Combat¶
How to play¶
- Target — cycle targets with
combat_target_cycle(Tab). TheCombatTargetFrameshows the focused entity's HP. - Attack —
combat_attack(R) triggers the selected action. - Action bar (
AttackPanel) — draggable slots for attacks and spells, each with its own cooldown and resource cost. A spell the player's class hasn't unlocked yet at their current level stays visible but greyed out with a lock badge. - Global cooldown — every attack and spell cast also shares a short fixed
cooldown (
GcdBar,globalCooldownMsbelow), on top of that ability's own. - Aggro indicators — angular markers show nearby hostile NPCs.
- Downed / respawn —
PlayerDownedOverlay;/resurect [playerName]revives. /god:on//god:off(admin) — damage immunity./rest— restore rage and tokens to max./buff <hp|mana|hpregen|manaregen>— apply a temporary self buff.
Processors: SpellProcessor (alongside the attack processor),
StatusEffectProcessor (timed buffs/debuffs), RegenProcessor (HP/mana regen).
Configuration¶
Global combat — data/config/combat.yaml:
maxCombatRange: 10.0
npcMaxAttackRange: 3.0
downingRollIntervalMs: 3000
maxRage: 100
globalCooldownMs: 1500
Attacks — resources/config/skills/attacks/<id>.yaml (schema
skill-attack.schema.json):
damageType: PHYSICAL
enabled: true
ranks:
1: { power: 5, weaponDice: 1d8, cooldownMs: 800 }
Spells — resources/config/skills/spells/<id>.yaml (schema
skill-spell.schema.json). Like attacks, multiple ranks of the same spell
live in one file under ranks: rather than separate <id>_2, <id>_3 files:
type: NECROTIC_AOE
enabled: true
ranks:
1: { manaCost: 20, cooldownMs: 6000, aoeRadius: 3.0, maxRange: 20.0 }
2: { manaCost: 30, cooldownMs: 5000, aoeRadius: 4.0, maxRange: 20.0 }
Spell types: TOKEN_RAGE_CONSUME (resource conversion, no damage),
NECROTIC_AOE (area status effect), and DIRECT_DAMAGE (single-target,
guaranteed hit against the caster's locked combat target — no to-hit roll, no
armor mitigation):
type: DIRECT_DAMAGE
enabled: true
ranks:
1: { power: 4, cooldownMs: 0, maxRange: 15.0 }
Every class has one level-1 DIRECT_DAMAGE filler spell with cooldownMs: 0
(only the global cooldown applies): quickStrike (WARRIOR), sparkBolt
(MAGE), huntersShot (RANGER), swiftStab (ROGUE), smite (CLERIC).
Which class gets which attack/spell at which level is in
classes.yaml. Served at GET /api/attacks, GET /api/spells.
Reload with /reload.