Damage calculation, critical hits, armor, and stat derivations — verified from Stolen Realm game source code.
Damage = BaseDamage * ElementalMods * Multiplier1 * Multiplier2 * Multiplier3 * Multiplier4 * DamageModifier * CritMultiplier
Derived from the action's damage expression (e.g., Source.AttackPower * 1.2f) split by damage type (Physical, Fire, Cold, Lightning, Shadow, Holy, Healing).
Added per-element: source["DamageFlatPhysical"], source["DamageFlatCold"], etc.
Each damage component is multiplied by (1 + DamageMod{Type}/100). E.g. fire damage gets (1 + DamageModFire/100).
Sum of all generic modifiers (additive within this pass, then /100):
DamageMod — Generic damage/healing bonusDamageModBasic — Bonus for basic attacks, opportunity attacks, counter attacksManaPowerMod — Bonus from spending manaOpportunityAttackDamageMod — From Reflex statCounterAttackDamageMod — From Reflex statAmbush — Bonus when target has no allies within 3 hexesCallOfTheGrave — +20% when target Health < 50%PerHexRangeDamageBonus — Per hex distance bonus (Crystal Ball fortune)PerHexRangeDamageInverseBonus — Per hex under max range (Point Blank fortune)MarkedPrey — +20% per stack of Marked PreyOpportunityAttackDamageModFromReflex / CounterAttackDamageModFromReflexRandom -50% to +50% multiplier (from Fickle Flame passive).
Strength of the Ymir fortune reduces weapon damage: -YmirReduction% / 100.
A flat multiplier from the action itself (e.g., Basic attacks = 1.0).
AbilityPwrPerMight = 2% per point of Might (from GlobalSettings)AttackPowerWithMight = WeaponDamage * (1 + AbilityPower / 100)
Roll(0-100) < CritChance + target.CritChanceTarget
CritMultiplier = 1 + (CritDamage + CritDamage{Type} + CritDamageTree{Tree} + target.CritDamageTarget + AdditionalCritDamage) / 100
BaseCritDamage = 50% (from GlobalSettings)CritDamagePerDex = 4% per Dexterity (Monk Speed +33%)CritRatingPerDex = 1 per DexterityBaseCritChance = 2%CritChanceByCritRating.GetMultipler(CritRating) + CritChanceByLevel.GetMultipler(Level)Order: General Reduction → Resists → Armor (configurable)
Reduction = 1 - (DamageReduction + Resilience + (TakeCover ? 35 : 0)) / 100
TakeCover: +35% when distance > 2 hexes from attacker.
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
Physical: Max(damage * (1 - 0.80), damage - Armor / 10)
Magic (Fire/Cold/Lightning): Max(damage * (1 - 0.80), damage - MagicArmor / 10)
ArmorPerDamagePointReduction = 10 (10 armor = 1 damage absorbed)maxArmorReductionPercent = 80% (armor can't block more than 80%)| Stat | Effect | Value | Notes |
|---|---|---|---|
| Might | AbilityPower | +2% per point | Monk Strength: +33% |
| Might | Armor | globalSetting.ArmorPercPerMight | |
| Might | Summon Damage | +1% per point | Monk Strength: +33% |
| Dexterity | CritDamage | +4% per point | Monk Speed: +33% |
| Dexterity | CritRating | +1 per point | Monk Speed: +33% |
| Dexterity | MovementPoints | per interval | |
| Vitality | MaxHealth | +5 flat | + MaxHealthPercPerVit% |
| Intelligence | MaxMana | +5 per point | |
| Reflex | DodgeRating | +0.5 per point | |
| Reflex | DodgeCounterChance | per setting | |
| Reflex | OpportunityAttackDamage | per setting | |
| Reflex | ExtraCounterAttacks | per Reflex interval |
| Wiki Claim | Game Code | Status |
|---|---|---|
| Might modifier = 1 + ((might-8)/100) | AbilityPower = stats * 2%, modifier = 1 + AbilityPower/100 | Wiki oversimplified — it's not (might-8)/100, it's AbilityPower%/100 which includes item/skill bonuses |
| Base CritDamage = 50% | BaseCritDamage = 50f | Confirmed |
| 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% cap | ArmorPerDamagePointReduction = 10, maxArmorReductionPercent = 80 | Confirmed |
| Shadow damage ignores armor | Only Physical damage reduced by Armor, Fire/Cold/Lightning by MagicArmor | Confirmed |
| Resist cap at 75% | MaxValue = 75 on resist attributes | Confirmed (attribute has MaxValue set) |
| Damage range ±15% | damageRangePercent = 15f | Confirmed |
| Pass 1-5 model | Code uses: Base → Elemental → Multiplier1 (all-in-one) → Multiplier2 → Multiplier3 → Multiplier4 → Crit | Wiki 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 * Might | Code: BaseDamage is already computed by the action expression (includes AttackPower) | Wiki correct conceptually but terminology differs |
| Dodge counter separate pass | OpportunityAttackDamageMod and CounterAttackDamageMod are in Multiplier 1, not a separate pass | Wiki incorrect — dodge counter uses same modifier chain |
| Bonus Damage (Damage To Type) | Code uses DamageFlat{Type} added before multipliers | Wiki incorrect — flat damage is added BEFORE multiplication, not after |