diff --git a/server/src/cryp.rs b/server/src/cryp.rs index 7ccb4531..4fcc6323 100644 --- a/server/src/cryp.rs +++ b/server/src/cryp.rs @@ -433,6 +433,7 @@ impl Cryp { if immune { return ResolutionResult::Damage { amount: 0, + mitigation: 0, category: Category::PhysDmg, immunity, }; @@ -474,6 +475,7 @@ impl Cryp { if immune { return ResolutionResult::Damage { amount: 0, + mitigation: 0, category: Category::SpellDmg, immunity, }; @@ -488,17 +490,21 @@ impl Cryp { let modified_spell_dmg = spell_dmg_mods.iter().fold(amount, |acc, m| m.apply(acc)); - // reduce spell_shield by damage amount - self.spell_shield.reduce(modified_spell_dmg); + // calculate amount of damage armour will not absorb + // eg 50 armour 25 dmg -> 25 remainder + // 50 armour 100 dmg -> 0 remainder + let remainder = self.spell_shield.base.saturating_sub(modified_spell_dmg); + let mitigation = modified_spell_dmg.saturating_sub(remainder); - // reduce amount by the amount absorbed by spell_shield - let remainder = amount.saturating_sub(modified_spell_dmg); + // reduce armour by damage amount + self.armour.reduce(modified_spell_dmg); // deal remainder to hp self.hp.reduce(remainder); return ResolutionResult::Damage { amount: modified_spell_dmg, + mitigation, category: Category::SpellDmg, immunity, };