Combat formulas

Game mechanics guide

Beta 0.7.2

Fights are simulated hit by hit: every swing, dodge, block and crit is rolled. This guide follows a single hit in the order the game handles it, with the formulas the closed-beta client uses.

A hit, step by step

Every basic attack and skill hit goes through the same steps, in this order:

  1. 1
    Automatic missThe target is untouchable, or a melee attacker swings at a flying target.
  2. 2
  3. 3
    Fury chargeA hero that is hit gains one.
  4. 4
  5. 5
  6. 6
    Armor and resistances Armor on the physical part, resistances on each elemental part.
  7. 7
    Block rollSeparately for the physical and the elemental part.
  8. 8
    AbsorptionOn the whole hit. A hit that connects deals at least 1.
  9. 9
    Bonuses Fury, Shock, Curse and Expose, then Weaken, then an act boss's phase multiplier.
part = raw damage × crit × level factor × (1 − armor or resist reduction) × block
hit = max(1, Absorption(physical part + elemental parts)) × (1 + amplifiers) ÷ (1 + Weaken) × boss phase

Percentages are the ones the game shows (it stores them in basis points, 100 = 1%). Dodge, Block and Elemental Block are ratings, and Health, Regen and Absorption are the scaled values from the hero sheet.

Critical hits

Crit Chance can go above 100%: every full 100% is a guaranteed crit "layer", and what is left over is the chance of one more.

crit multiplier M = 2 + Crit Damage
layers n = whole part of Crit Chance, +1 with a chance equal to the rest
damage × 1 with no layer, × M with one, × (1 + n × (M − 1)) with n layers
average = 1 + Crit Chance × (M − 1)

Crits apply to the physical and elemental parts of a hit, but not to damage over time, thorns or heals. Monsters never crit.

Example: Crit Chance 150%

Crit Chance 150% and Crit Damage +50% give M = 2.5. Every hit crits at least once (×2.5), and half of them crit twice (1 + 2 × 1.5 = ×4). On average that is ×3.25.

Level difference

Heroes never gain from out-levelling a monster; they only lose when they are below it, and the monster then hits harder. Stage and act bosses punish the gap far more:

gap = how many levels the monster is above the hero (0 if it is not)
factor = 1.15 ^ gap for the first 5 levels, then × 1.6 for every level after that
boss factor = 1.15 ^ gap for the first 3 levels, then × 40 for every level after that
Hero's damage ÷ factor · Monster's damage × factor
Monster above heroHero dealsHero takesBoss factorHero's dodge chance kept
1 level×0.87×1.15×1.1590%
2 levels×0.756×1.32×1.3280%
3 levels×0.658×1.52×1.5270%
4 levels×0.572×1.75×60.8360%
5 levels×0.497×2.01×2,43350%
6 levels×0.311×3.22×97,33640%
7 levels×0.194×5.15×3.89M30%
8 levels×0.121×8.24×155.74M20%
10 levels×0.047×21.09×249.18B0%

The boss factor takes over whenever a stage or act boss is on either side of the hit; the dodge column is the same against bosses. Both factors also apply to damage-over-time ticks and thorns. Hero against hero (the arena) is always even.

Examples: boss levels

Act bosses fight ⅔ of a level above their stage, so even a party at the stage's level deals ×0.911 and takes ×1.098. A stage boss fights at most ⅓ of a level above or below its stage.

A hero 4 levels below a boss takes ×60.83 its damage and deals ×0.016; against a regular monster 4 levels up it would take ×1.75.

Damage reduction

Armor and resistances cut each part of a hit, dodge avoids it, block halves a part and Absorption trims what is left.

Armor and penetration

Defense cuts the physical part of a hit. It is measured against the attacker's level, so the same Defense stops less against stronger monsters:

physical reduction = 0.9 × class weight × Defense ÷ (Defense + 60 + 7.2 × attacker level) × (1 − Penetration)
ArmorClassesWeightCeiling
HeavyWarrior, Barbarian, Paladin190%
MediumArcher, Assassin, Engineer, Monk0.872%
LightMage, Healer, Witch0.654%

The armor class sets how close Defense can get to the 90% ceiling, which it never reaches. Monsters have no Penetration, so the last term only matters in the arena.

Physical reduction of a heavy-armor hero; multiply by 0.8 for medium armor and 0.6 for light:

Monster levelDefense 200Defense 400Defense 1,000Defense 3,000
Level 1054.2%67.7%79.5%86.2%
Level 3037.8%53.3%70.5%82.4%
Level 6026%40.4%60.3%77.3%
Level 10018.4%30.5%50.6%71.4%

Monster armor rises with the stage's power and is capped at 75%. A hero's Penetration removes that share of it, and Penetration debuffs on a monster (armor break) add to the Penetration of every hero hitting it.

Examples: Defense 400, and 20% Penetration

Defense 400 against a level-30 monster: 0.9 × 400 ÷ (400 + 60 + 216) = 53.3% for a heavy class, 42.6% for medium, 32% for light.

A monster that cuts 58.8% of physical damage cuts 47% against a hero with 20% Penetration.

Resistances

Each resistance cuts its element's part of a hit, weighed by the armor class like Defense and lowered on the harder maps. Below zero, it makes that element hit harder:

map penalty: every hero resistance −30% on the Breach, −60% on the Abyss (0% on the Veil)
cap = 75% + Max Resistance, never above 85%
resist 0 or more: damage × (1 − resist × class weight × (1 − Elemental Penetration))
resist below 0: damage × (1 − resist), up to ×2 at −100%

Max Resistance comes from the passive tree. Monsters use weight 1, cannot go below 0 and are capped at 75%: a monster listed with 100% resistance to its own element counts as 75%.

Examples, and resistance above 75%

A Mage (light, weight 0.6) with 75% fire resistance takes 1 − 0.75 × 0.6 = 55% of fire damage on the Veil. On the Abyss its resistance drops to 15% and it takes 1 − 0.15 × 0.6 = 91%. A heavy hero with 30% lightning resistance sits at −30% on the Abyss and takes 130% of lightning damage.

As we read the code, the map penalty comes off before the cap is checked, so resistance above 75% is not wasted on the Breach and the Abyss, even if the stat screen calls it waste. The act boss also counts the resistance with the penalty.

Dodge, evasion and blind

Heroes avoid hits with Dodge, measured against the attacker's level and the level gap:

dodge chance = Dodge ÷ (Dodge + 5 × (100 + 12 × attacker level)) × level factor
level factor = 1 − 0.1 per level the monster is above the hero (0 at 10 levels)
Ratingvs level 10vs level 30vs level 60vs level 100
25018.5%9.8%5.7%3.7%
50031.3%17.9%10.9%7.1%
1,00047.6%30.3%19.6%13.3%
2,30067.6%50%35.9%26.1%
5,00082%68.5%54.9%43.5%

The same table gives the Block chance for a Block rating, without the level factor. Monsters have no Dodge and heroes have no Evasion.

Monsters avoid hits with Evasion, and only basic attacks: skill hits never miss.

monster evasion chance = Evasion ÷ (Evasion + 5 × hero Accuracy)
monster Evasion = 0.556 × (100 + 12 × monster level) × agility
MonsterAgilityMisses vs Accuracy factor 1vs factor 1.5
Agile×218.2%12.9%
Normal×110%6.9%
Heavy, and every boss×0.44.3%2.9%

For a hero with exactly the base Accuracy of the monster's level (see base Accuracy); more Accuracy lowers it.

Blind on a monster helps the heroes it attacks, even heroes with no Dodge:

dodge chance D becomes 1 − (1 − D) ÷ (1 + Blind)

Bosses are immune to Blind. The Assassin's Smoke applies it.

Examples: Dodge 500, Blind 25%

Dodge 500 against a level-30 monster: 500 ÷ (500 + 5 × 460) = 17.9%. If that monster is 3 levels above the hero, 70% of it is left: 12.5%.

Blind 25% makes 20% of the monster's attacks miss a hero with 0 Dodge.

Block

Block covers the physical part of a hit and Elemental Block the elemental part, each rolled only if the hit has that part, with no level-gap factor:

block chance = Block ÷ (Block + 5 × (100 + 12 × attacker level))
blocked part × 0.5

Block 500 against a level-30 monster blocks the physical part 17.9% of the time. Monsters never block. Monsters in elemental biomes deal almost all their damage as their element, so against them Elemental Block matters far more than Block.

Absorption

Absorption comes last, after block, and works on the whole hit. It takes a bigger share of small hits than of big ones:

damage after Absorption = max(1, T × 5T ÷ (A + 5T))
T = the hit after block · A = Absorption from the hero sheet

Absorption equal to five times the hit halves it. Monsters have no Absorption.

Example: Absorption 500

Absorption 500 halves a 100-damage hit (100 × 500 ÷ 1,000 = 50) but takes only 9.1% off a 1,000-damage hit (1,000 × 5,000 ÷ 5,500 = 909).

Bonuses and debuffs

Fury, Shock, Curse and Expose

These four share one "more damage" bonus, soft-capped above +300%. On a hero they raise the hero's own hits and damage-over-time ticks, but not thorns; as skill debuffs on a monster they raise everyone's damage to it:

bonus = Fury × fury factor + Shock + Curse + Expose + matching debuffs on the target
above 300%: effective = 300% + 300% × ln(1 + (bonus − 300%) ÷ 300%)
damage × (1 + effective bonus)
Shock on a hero counts as Shock × lightning damage ÷ (Attack + all elemental damage)
Total bonus+300%+400%+600%+1,000%+2,000%
Effective bonus+300%+386%+508%+661%+869%

Every debuff counts in full, except that the Paladin's Condemn applies Expose that adds nothing and the Witch's Curse counts at half. Monsters have none of the four.

Fury charges. Every hit that lands on a hero gives it 1 charge, up to 10; dodged hits and the hero's own attacks give none. 4 seconds after the last hit the charges start to fade, one every 2 seconds.

fury factor = charges ÷ 10 × (1 + share of Health missing)

The factor runs from 0 to 2: double at 10 charges with almost no Health left. Blocked hits still give a charge.

Example: the Barbarian

The Barbarian starts with Fury +6%. At 10 charges and half Health the factor is 1 × 1.5 = 1.5, so it adds +9%.

Weaken, Chill and crowd control

Weaken, Chill and Blind are defensive stats: on a hero they act on whoever attacks that hero, and as skill debuffs on the monster that carries them.

EffectWhat it doesBosses
WeakenThe weakened fighter's damage ÷ (1 + Weaken)Not immune
ChillThe chilled fighter's attack interval and cast time × (1 + Chill). A slow, not a freeze.Immune
BlindHelps the heroes it attacks avoid its hits (see Blind)Immune
Stuns, freezes, roots, holds, grabsCome from specific skills and push the target's next action back by their durationImmune

Weaken 25% cuts the monster's damage to 80%; Chill 50% makes it swing every 1.5 s instead of every second. The Witch's Jinx applies Weaken as a debuff.

Damage over time and healing

Damage over time

A hero's Bleed, Decay, Burn and Poison stats add up into one flat damage per second, dealt once a second to the hero's current target. The element does not matter:

tick = (Bleed + Decay + Burn + Poison) × level factor × (1 + amplifiers) ÷ (1 + Weaken)

No armor, resistance, crit, dodge or block applies, and Lifesteal heals from it.

Damage-over-time skills work like this:

  1. 1
    Basic hitThe skill first lands the hero's basic hit.
  2. 2
    TicksAt once and every second after that, so a 5-second effect ticks 5 times. Ticks ignore armor and resistances too.
  3. 3
    RecastsCasting the same skill again refreshes it; the same effect from different heroes stacks.

The Healer's Sacred Flame grows on hurt targets: each tick × (0.25 + 1.5 × the target's missing Health share).

Thorns

Thorns are dealt once a second to the hero's current target, like a damage-over-time stat. Growing Thorns make them grow faster than linearly:

thorns per second = Thorns × (1 + Thorns ÷ 1,000 × Growing Thorns)

The level factor and Weaken apply; the amplifier bonus does not; nothing mitigates them. Lifesteal heals from them.

Examples: Growing Thorns 100% and 50%

Thorns 1,000 with Growing Thorns 100% deal 1,000 × (1 + 1 × 1) = 2,000 per second. Thorns 500 with Growing Thorns 50% deal 500 × (1 + 0.5 × 0.5) = 625. Without Growing Thorns, Thorns deal their own value.

Healing and regen

Healing Done and Healing Received change heal skills, but not Regen or Lifesteal:

heal skill = amount × (1 + caster's Healing Done) × (1 + target's Healing Received)
lifesteal = damage dealt × Lifesteal
SourceHow it heals
RegenOnce a second every living fighter heals its Regen (the hero-sheet value). There is no cap, and negative Regen deals damage.
LifestealA share of the damage dealt: hits, damage-over-time ticks and thorns.
Heal skillsEvery injured party member (or only the caster), lowest Health first, each for the full amount.
Heal over timeTicks once a second, only while the member is hurt.
ShieldsAdd Absorption while they last.
Health buffsRaise maximum and current Health by the same amount.

In the arena all healing is halved.

Example: a boosted heal

A 1,000-Health heal from a hero with Healing Done 20% on a hero with Healing Received 10% restores 1,000 × 1.2 × 1.1 = 1,320.

The boss sustain cap. While a stage or act boss is standing, a hero who has taken damage from it can be healed by at most 90% of that damage, minus the healing it has already received in that fight. This covers all healing, Regen and Lifesteal included.

Stats, speed and cooldowns

How stats are finalized

A hero's sheet is built in a fixed order, so the passive tree's percentage bonuses multiply everything added before them:

  1. 1
    Gear Every affix and enchant on equipped items (each +1 of enhancement adds 5% to them) and socketed gems. Offhand "amplify" enchants then raise all item stats by a percentage.
  2. 2
    Class growth × level Most classes grow Attack, Defense and Health; the Mage grows Elemental Damage and the Witch Chaos Damage instead of Attack. Each class page lists its growth.
  3. 3
    Class base stats
  4. 4
    Base AccuracyFormula below.
  5. 5
    Passive tree Flat values, item "multiply" enchants, damage conversions, % increases, then "more" multipliers. Every stat is then rounded down.
  6. 6
    Enhancement tiersThe tier effects of enhanced (+1 to +10) gear (see the Workbench).
  7. 7
    Final scalingHealth ×10, Regen ×1.5, Absorption ×5. Combat uses these scaled values.

The Healer also gains Regen equal to 15% of its Attack, just before the final scaling. Elemental Damage is added to whichever of the hero's elements is already highest (ties go fire, ice, lightning, chaos in that order; a hero with no elemental damage gets it as fire).

With an infused weapon, Penetration also counts as Elemental Penetration, and in combat part of the hero's Attack becomes the weapon's element: it keeps the Attack bonuses and gains the element's % and "more" bonuses from the passive tree. Damage skills that scale with Attack split their bonus the same way.

Base Accuracy (step 4) depends on the level and the class:

Base Accuracy = round((100 + 12 × level) × class factor)
class factor = 1 for Mage, Healer, and Witch; 1.5 for every other class
Example: base Accuracy at level 30

A level-30 Warrior has (100 + 360) × 1.5 = 690 base Accuracy; a level-30 Mage has 460.

Attacks and casts

Every fighter swings a basic attack at a steady rhythm. Haste speeds it up in a straight line, with no cap:

Attacks per second = 1 × (1 + Haste)
Cast time = 0.8 s ÷ (1 + Cast Speed)

Monsters have no Haste, so they swing once per second.

When a slotted skill is ready, the hero casts it instead of the next basic attack:

  1. 1
    Pick Skills are tried in turn, starting after the last one used. Heals wait until someone is hurt. Other skills hold back when only one enemy is left and the party's basic attacks would finish it within about two seconds.
  2. 2
    Cast The action lasts as long as the longer of the attack interval and the cast time. The cooldown starts when the cast starts.
  3. 3
    Hit Every cast also lands the hero's basic hit. Damage skills add their own bonus on top of it, and buffs, heals and debuffs still hit the current target with it. Skill hits cannot be evaded.
Example: Haste 25%, Cast Speed 60%

Haste 25% gives 1.25 attacks per second, one every 0.8 s. Cast Speed 60% cuts the cast to 0.5 s.

Cooldown reduction

The Cooldown stat has diminishing returns: the real reduction creeps toward 80% but never reaches it.

real reduction = 80% × (1 − e ^ (−Cooldown ÷ 80%))
cooldown = max(1.5 s, base cooldown × (1 − real reduction))
Cooldown stat10%20%30%50%80%100%200%400%
Real reduction9.4%17.7%25%37.2%50.6%57.1%73.4%79.5%

No skill comes back faster than every 1.5 seconds, and buffs, shields and health buffs never come back faster than they last, so they cannot overlap.

Example: an 8-second skill

An 8-second skill comes back every 5.03 s with Cooldown 50%, and every 2.13 s with Cooldown 200%. A 3-second skill with Cooldown 200% hits the 1.5 s floor.

How monsters fight

Monsters swing once per second and have no crit, dodge, block, absorption, regen, lifesteal or amplifiers. Their stats per stage are on the maps and bestiary pages.

Early hordes hit softer

Below stage level 17 each normal monster's damage (not its Health) is scaled down, so a whole horde hits about as hard as a few monsters would:

Stage level1–35810131517 and up
Monster damage×0.027×0.166×0.375×0.514×0.722×0.861×1

The damage listed per stage does not include this.

Who gets hit

Guardians (the Warrior, Barbarian and Paladin) hold the front line:

AttackerTargets
Normal monsters, while any guardian is aliveOnly guardians. A guardian that hits a monster pulls it at once. When another hero damages a normal monster there is a 10% chance the monster switches to that hero, until a guardian takes it back or that hero falls.
Normal monsters, with no guardianSpread evenly over the party.
Bosses, stage and actAlways the first living guardian in party order. They ignore aggro.

Melee monsters cannot target flying heroes. Bosses are immune to stuns and other crowd control, Chill and Blind, and have low evasion.

When a hero falls

A hero fallsThe buffs, shields and auras it gave the party end with it. It stays down until the stage boss is beaten, the party is wiped or the stage changes.
The party is wipedThe stage restarts, or the party drops one stage back if the "drop down on death" option is on.
Wiped at an act bossThe party goes back to stage 9.

Worked example

A level-30 heavy-armor hero fights a normal stage-10 monster in Floating Isles on the Veil:

The hero

Level
30, heavy armor
Attack
500
Crit Chance
10%
Crit Damage
+50%
Defense
400
Resistances
30%
Accuracy (base)
690
Dodge
800
Block
500
Absorption
500

The monster

Level
30
Biome
Lightning
Agility
Agile
Physical damage cut
58.8%
Raw hit
1 physical + 180 lightning

Hero hits monster

StepWorkingResult
Crit and armor, on average500 × (1 + 0.1 × 1.5) × (1 − 0.588)236.8 per landed basic attack
Evasion of the agile monster511.5 ÷ (511.5 + 5 × 690)12.9% of basic attacks miss

Skill hits always land.

Monster hits hero

StepWorkingResult
Physical reduction0.9 × 400 ÷ (400 + 60 + 216)53.3%
Lightning after resistance180 × (1 − 0.30)126.0
Block, physical part only17.9% chance to halve the physical part126.4 on average
Absorption 500126.4 × 632 ÷ (500 + 632)70.6
Dodge 800800 ÷ (800 + 2,300) = 25.8% of swings miss52.4 per swing, on average

What we could not confirm

Read from the code, not yet checked in the live game:

  • Hit-by-hit fights. The shipped settings turn on the hit-by-hit engine. If the launch build switches it off, stage progress falls back to an averaged model that uses the same formulas in expectation.
  • Class weight on resistances. Light classes keep only 60% of their resistance, medium classes 80%. The armor tooltip does not mention it.
  • Damage over time and thorns ignore all mitigation. This should be tested against high-armor bosses.
  • Cooldown counts twice for instant damage skills. It shortens their cooldown and also raises their damage per cast. That is what the code does; whether it is intended is unknown.
  • About 40 skills have scripted extras (multi-hits, chains, marks, turrets) that this guide does not cover.
  • Which monster is agile. The game picks agility from an older three-monster list per act, which may not match the monster on screen.
  • Arena, Rift colossi and clan beast hunts reuse the engine with their own rules, not covered here.
  • Display caps. The stat screen marks resistance above 75% (85% with Max Resistance) and Penetration above 100% as waste. Haste, Crit Chance, Dodge and Block have no cap in combat.

Source: closed-beta game client 0.7.2. Data from the closed beta, so values may change at launch.