Our best current understanding of how SpiritVale's combat math works — pieced together by the community from the game client. We aim to keep it accurate, but the game changes and mistakes happen, so treat these as a helpful reference rather than gospel. Spot something off? Let us know on Discord and we'll fix it.
How each stat is calculated from your attributes and gear.
Base Attack Delay (BAD) drives attack speed — higher is slower. Below are the dual-wield, two-hand, and ranged weapon groups, and each weapon type's BAD.
How often you can repeat one skill. Two separate clocks run per cast, and only one of them adds to your cast time — which is why a skill listing no cooldown is not the same as a skill with no delay.
Each monster keeps a running threat total for every hostile unit and attacks whoever has the highest total. Threat is accumulated event by event; there is no forced-target lock or automatic reset.
| Event | Base threat | Where it is recorded |
|---|---|---|
| Damage is taken | 1000 | On the hit enemy’s table, credited to the attacker |
| A cast completes | max(10, 2 × MP cost), capped at 1000 | On every enemy within 10 m, credited to the caster; 0-MP casts add none |
| A monster detects a cast | 1000 | On that monster’s table, credited to the caster; separate from cast-completion threat |
| Proximity / hostility ticks | 1000 | On the nearby enemy selected by the hostility check |
| A skill applies authored threat | 1000 | On each enemy the skill lands on; currently Taunt is the only skill with its own nonzero value |
These are base values before your Threat Generation stat and distance falloff. Events stack: a 40-MP heal adds 80 threat to every enemy within 10 m, and a monster that detects the cast can add its own separate 1000-point event.
+100% Threat Generation doubles every event; +500% makes it ×6, while −25% makes it ×0.75. It does not change damage or healing. Distance then scales the result: 100% at point-blank, about 92% at 5 m, 70% at 10 m, and 24% at 20 m.
| Current source | Threat Generation | Scaling |
|---|---|---|
| Taunt buff | +100% per skill rank | +100% at rank 1 to +500% at rank 5 |
| Breakjaw passive | +150% | Always on |
| Gaze Gem | +10% per gem refine | 0% at +0 to +100% at +10 |
| Echo Knight, Bull Shark, Sharkling, Shark Buccaneer Cards | +10% per gear refine | Uses the refine of the gear holding the card: 0% at +0 to +100% at +10 |
| Bluefin Card | −25% | Flat; refine does not change it |
Taunt lands one maximum authored-threat event on every enemy it hits and buffs the Knight’s Threat Generation for follow-up actions. Its displayed “Applies threat: 200%” does not mean twice the normal spike: authored threat uses a cap of 1, so any nonzero coefficient already reaches the 1000-point base ceiling.
It does not lock a monster onto the Knight, clear another player’s threat, or move the Knight directly to the top. The target changes as soon as someone else’s accumulated total becomes higher.
The running totals are not shown in-game and are not simulated by the site’s calculators. These rules come from the current live client’s threat and targeting code.
Each class's HP multiplier (how much Max HP scales as you level), starting attributes, and max job level. Advanced classes inherit their base class's HP multiplier and start their attributes at 1.
How much damage each attacking element (row) deals against each defending element (column). Blank means normal damage (×1.0).
Two things put a hard ceiling on how much you can shrug off, and both are locked into the game’s own combat code — no amount of gear lets you push past them.
Your elemental resistance is capped at 75%. Resistance to a specific element and the catch-all “all elements” resistance get added together, and the total can never soften an elemental hit by more than three-quarters. Once you’re at 75%, any extra resistance is simply wasted.
Your chance to shake off a status effect can reach 100%, which is full immunity. It is your StatusImmune for that specific status (from gear, gems like the Tenacity Gem, and 15 monster cards at +50% each) plus about two-thirds of one attribute, capped at 100%. It cuts both the chance and the duration.
A boss cannot be stunned, frozen, slowed or silenced. Ever. Boss-rank monsters spawn with a hardcoded 100% resistance to exactly those four, plus no knockback and no flinch. At 100% the roll is zero, so nothing lands: no duration, no partial effect. It is a rank rule, not a stat, so mini-bosses (elites) are still stunnable.
Every other debuff lands on a boss at full chance: poison, bleeding, burning, curse, blind, decay, marks. The immunity is keyed to those four names and nothing else, and no monster carries status resistance of its own.
Block negates a physical hit outright — it does not scale the damage down, it zeroes it. A block is rolled after Perfect Dodge and before crit, and a blocked hit takes 0 HP damage. It still counts as a landed hit: the defender’s OnTakePhysicalHit and OnBlock triggers run, while the attacker’s on-hit status/autocast processing and leech continue. Reflect Damage also fires before the hit is zeroed, but it does not copy the incoming damage — it calculates its own value from the defender’s level, DEF, flat DEF, ATK, and Reflect %. Because the packet is zeroed before barrier processing, your barrier is not spent. Block never applies to magic: magic’s only avoid roll is Spell Dodge. Block chance is not a smooth curve either — any stun, stagger or freeze sets it to 0%, a Block stat of 100 or more is a flat 100% (Counter’s guaranteed-block window), and everything else is capped at 75%, with a shield’s Shield Block bonus counting only while a shield is actually equipped.
These are the only two resistance ceilings. Your DEF, MDEF, Block, and Final Damage Reduction cut incoming damage through other means and stack on top of them.
Elemental affinity — the fixed ×0.75 to ×1.25 multiplier from an attack’s element against its target’s — is a separate mechanic; it lives in Elements above. It is applied as its own multiplier, so it is NOT part of the 75% resistance cap and stacks past it. Both caps here come straight from the game’s damage math (Formula.GetDamage and Formula.StatusResist), and the boss rule from the monster spawn stats (Formula.GetMonsterBaseStats), read out of the current build.
EXP needed for each level and the running total, up to level 150.
Every stat in the game's StatType list, with its ID, name, and whether it's a percentage stat.
Essences re-roll an equip’s substats. Every item drops with a finite Potential budget; each essence spends some Potential plus coins to change its substats, and once Potential runs out the item can’t be re-rolled again.
→ Try it hands-on in the Crafting Simulator — craft a real item, roll its substats, then spend essence against its Potential.
Chaos is a gamble: it spends all remaining Potential on one of four equally-likely rolls.
Every buff, debuff, and damage-over-time status in the game, with its element and stacking behavior.
Loading status effects…