Damage Output


Damage = BaseDamage * ElementalMods * Multiplier1 * Multiplier2 * Multiplier3 * Multiplier4 * DamageModifier * CritMultiplier

Base Damage (num13)

Derived from the action's damage expression (e.g., Source.AttackPower * 1.2f) split by damage type (Physical, Fire, Cold, Lightning, Shadow, Holy, Healing).

Flat Damage Bonus (num14-20)

Added per-element: source["DamageFlatPhysical"], source["DamageFlatCold"], etc.

Elemental Modifier (num29, lines 8890-8903)

Each damage component is multiplied by (1 + DamageMod{Type}/100). E.g. fire damage gets (1 + DamageModFire/100).

Multiplier 1 — Generic Damage Mods (num31, lines 8904-8934)

Sum of all generic modifiers (additive within this pass, then /100):

Multiplier 2 — Reflex Modifiers (num42, lines 8976-8992)

Multiplier 3 — Fickle Flame (num45, lines 8993-9008)

Random -50% to +50% multiplier (from Fickle Flame passive).

Multiplier 4 — Ymir Weapon Reduction (num47, lines 9009-9020)

Strength of the Ymir fortune reduces weapon damage: -YmirReduction% / 100.

Damage Modifier (lines 9047-9059)

A flat multiplier from the action itself (e.g., Basic attacks = 1.0).

Might / Ability Power


Critical Hits

Crit Chance (line 9061)


Roll(0-100) < CritChance + target.CritChanceTarget

Crit Damage (lines 9082-9094)


CritMultiplier = 1 + (CritDamage + CritDamage{Type} + CritDamageTree{Tree} + target.CritDamageTarget + AdditionalCritDamage) / 100

Damage Reduction

Order: General Reduction → Resists → Armor (configurable)

General Reduction (lines 9490-9504)


Reduction = 1 - (DamageReduction + Resilience + (TakeCover ? 35 : 0)) / 100

TakeCover: +35% when distance > 2 hexes from attacker.

Resistances (lines 9506-9523)


Fire damage *= 1 - ResistFire/100
Cold damage *= 1 - ResistCold/100
Lightning damage *= 1 - ResistLightning/100
Physical damage *= 1 - ResistPhysical/100
Shadow/Holy damage *= 1 - ResistDivine/100

Armor (lines 9474-9488)


Physical: Max(damage * (1 - 0.80), damage - Armor / 10)
Magic (Fire/Cold/Lightning): Max(damage * (1 - 0.80), damage - MagicArmor / 10)

Stats → Derived Attributes

StatEffectValueNotes
MightAbilityPower+2% per pointMonk Strength: +33%
MightArmorglobalSetting.ArmorPercPerMight
MightSummon Damage+1% per pointMonk Strength: +33%
DexterityCritDamage+4% per pointMonk Speed: +33%
DexterityCritRating+1 per pointMonk Speed: +33%
DexterityMovementPointsper interval
VitalityMaxHealth+5 flat+ MaxHealthPercPerVit%
IntelligenceMaxMana+5 per point
ReflexDodgeRating+0.5 per point
ReflexDodgeCounterChanceper setting
ReflexOpportunityAttackDamageper setting
ReflexExtraCounterAttacksper Reflex interval

Wiki vs Game Code — Verified/Corrected

Wiki ClaimGame CodeStatus
Might modifier = 1 + ((might-8)/100)AbilityPower = stats * 2%, modifier = 1 + AbilityPower/100Wiki oversimplified — it's not (might-8)/100, it's AbilityPower%/100 which includes item/skill bonuses
Base CritDamage = 50%BaseCritDamage = 50fConfirmed
Crit at 8 Dexterity = 50%CritDamagePerDex = 4% — at 8 base Dex, CritDamage = 50% (2 base + 8*4 = 50? no)Wiki correct — 2% base + (Dex * 4%) — but CritDamagePerDex starts from Stat values, not raw stat
Armor = 1 damage per 10 armor, 80% capArmorPerDamagePointReduction = 10, maxArmorReductionPercent = 80Confirmed
Shadow damage ignores armorOnly Physical damage reduced by Armor, Fire/Cold/Lightning by MagicArmorConfirmed
Resist cap at 75%MaxValue = 75 on resist attributesConfirmed (attribute has MaxValue set)
Damage range ±15%damageRangePercent = 15fConfirmed
Pass 1-5 modelCode uses: Base → Elemental → Multiplier1 (all-in-one) → Multiplier2 → Multiplier3 → Multiplier4 → CritWiki model simplified — code combines what wiki calls Pass 2-5 into a single Multiplier1, then separate reflex/fickle flame/ymir steps
Pass 1: Base + AddWeapon dmg * MightCode: BaseDamage is already computed by the action expression (includes AttackPower)Wiki correct conceptually but terminology differs
Dodge counter separate passOpportunityAttackDamageMod and CounterAttackDamageMod are in Multiplier 1, not a separate passWiki incorrect — dodge counter uses same modifier chain
Bonus Damage (Damage To Type)Code uses DamageFlat{Type} added before multipliersWiki incorrect — flat damage is added BEFORE multiplication, not after