Jarulf’s Damage Calculations
This is the current system used to determine the various damage calculations in Diablo II – the information was compiled by Jarulf years ago.
These rules become critically important when determining how to prioritize equipment for an end game or player v.s. player character. Using too much damage absorption is wasted gear utility, while not enough may lead to… unpleasant things. (Like getting one-rounded in a bad-manner Duel Game).
Jarulf is considered one of the leading experts on the Diablo franchise, and his insights are always useful, valuable, and interesting to read.
First, the game calculates all damages (I won’t go into details about it here).Then it applies all the various damage modifying (reducing really) things in the following order:
1. If you are a player and have can’t be frozen, set freeze, and chill time to 0.
2. If you have any item with "half freeze time," cut chill duration in half (regardless of how many such items you have).
3. If you have the Poison Resist shrine, set poison duration to 0.
4. Apply resistance to each damage type.
- 4a. Add up all resistance the target has.
- 4b. Apply cold mastery to cold resistance.
- 4c. Apply difficulty penalty for players but not their minions, summonables and such (monsters have specific resistance for each difficulty instead). Note that physical resistance is NOT modified by the difficulty penalty. All other penalties are though, including poison duration.
- 4d. Apply resistance cap, possibly modified by added max resistance modifiers.
Some notes on resistances:
Cold resistance: Modifies cold damage as well as freeze and chill time. Note that the specific difficulty reductions for monsters are applied later when the monster is actually set to be frozen or chilled. Capped at 75% but can be increased to 95%.
Fire resistance: Modifies fire damage. Capped at 75% but can be increased to 95%.
Lightning resistance: Modifies lighting damage. Capped at 75% but can be increased to 95%.
Magic resistance: Modifies magic damage. Capped at 75% but can be increased to 95%. Note that characters normally have 0% magic resistance since there are no items that give magic resistance. Some curses or other skills may affect it though. Example of attacks that do magic damage are the bone spells of the Necromancer.
Physical resistance: Modifies physical damage. Capped at 95%. Note that monsters of the Itches type has a cap at 99% instead. This typically only comes into effect for the bosses with Stone Skin. Note that characters normally have 0% physical resistance since there are no items that give physical resistance. Some curses or other skills may affect it though. Skills like Amplify Damage work by lowering the physical resistance of the target, by the way. Physical resistance is not modified by difficulty.
Poison resistance: Modifies poison damage (the damage per frame value). Capped at 75% but can be increased to 95%.
Poison length reduction: Modifies the poison length. Capped at 95%. This modifier only comes as 25%, 50% and 75% modifiers. It IS reduced by the difficulty penalty.
Life, Mana and Stamina drain/steal can not be resisted in any way.
5. Apply -X damage to physical damage and -X magical damage to Cold, Fire, Lighting and Magic. Also apply -X magical damage to life, mana and stamina drain/steal. Note that the monster’s drain value is the actual value of life, mana and stamina to remove, while the player’s steal value is the percentage value.
6. Apply absorption to Cold, Fire, Lightning and Magic damage.
- 6a. First apply the X% absorption, basically reducing the damage by that amount.
- 6b. Then apply the X absorption, basically subtracting the damage by that amount.
- 6c. Add up all the amount of damage that was absorbed from both the steps above for all the damage types. This will be the total absorbed amount of damage.
7. Apply Bone Armor. This basically removes a certain amount of physical damage from the attack equal to the amount of Bone Armor you have. In the process, the Bone Armor is reduced by the same amount. If you had more Bone Armor than the physical damage, the physical damage is reduced to 0. Otherwise, the Bone Armor is terminated and the physical damage is reduced with whatever amount of Bone Armor there was left.
8. Add together all types of damages. Up until now, each damage has existed separately. From this step on, in addition, the game has a value that is the sum of all the different types of damages. Usually it is this sum that the game uses from now on when it modifies damage. Some things will be based on specific damage types though, normally the physical one, for example Thorns and Iron Maiden or the life and mana stealing of characters. The values added together in this step are for the sake of completeness; physical, cold, fire, lightning, magic and poison damage (the damage per frame, thus one frame of damage). If the attacker is a monster its life drain amount is also added. When in the future, there is a reference to the total damage, it is this sum that is meant. The individual damage types are from now on not modified any more unless specifically stated.
9. If the attack is PvP (player vs player), the total damage and the poison damage (per frame value) are cut in half. Note that the individual damage values for each type are NOT cut in half. Thus, for example, life and mana stealing will still be based on the full value. As basically all attacks in the game go through this damage modification routine, all attacks that are PvP will suffer the halving.
10. If the attack is either Andariel, Duriel, Mephisto or Diablo attacking a player’s minion (including hireling, summoned, revived and so on) the total damage and poison damage (per frame) is multiplied by 10. This is the reason they die so fast against those end of act bosses.
11. Apply the Energy Shield reduction. This will reduce the total damage by the listed percentage and instead remove twice as much mana.
1. All the absorbed damage is added to your life. Note, that if you had full life, this would not do anything and since you haven’t taken damage yet, it is not as useful as if it had added the absorbed damage after doing the damage. This may be a reason why one thinks it is not working.
2. If the target is Blood Golem, 10% of the total damage is removed from the Necromancer and the total damage is reduced by that amount.
3. Remove total damage from target’s life.
4. Remove any mana and/or stamina if the attack has any drain mana or drain stamina damage. Only monsters can have such draining. It is best explained as a special damage that is removed from mana and stamina instead of from the life (as noted above, the drain life was added to the total damage and thus can also affect anything that is affected by total damage). Note from above that this amount was lowered by any -X magical damage. Mana can never be lowered below 1 this way but stamina can be lowered to 0.
5. Handle stun mode, in case the attack had special stun length.
6. Handle chill mode if the attack had chill duration. Chill duration is what cold duration from items typically ends up as. Freeze duration is separate but is also typically handled separately. An item that freezes its target, for example, will (after the normal attack is resolved) initiate a special attack that only has a freeze duration that sets the target into freeze mode. There is a 20% chance that a chilled monster will scatter into a pool of water. The reduction in chill time for monsters in higher difficulties is applied at this time.
7. Handle freeze mode if the attack had freeze time. If the target can’t be frozen, the game will try to chill instead, and thus it will basically do step 6. The reduction in freeze time for monsters in higher difficulties is applied at this time.
8. Handle poison mode if the attack had both poison time and poison damage.
9. If the attacker is a Blood Golem, handle the special Blood Golem Stealing. Note that it is no longer based on the life of the target but on the damage of the attack. The amount of life stolen is based on the diminishing return formula with min and max equaling 30% and 40% (that is the min and max values for the formula, not necessarily the real min or max). Of the life stolen, 30% is given to the owning Necromancer, the rest to the Blood Golem itself.
10. If the attacker is a monster, add any drained life, mana, and stamina to the life. Note that the drain can never be higher than the target’s current life, mana, and stamina. Thus, versus another monster that has no mana or stamina, it can’t gain any life. It can gain life based on the life drain though. Also note that for life, it is the amount of life PRIOR to step 1 above. Of course, life drain in this way can never increase beyond the max life of the monster.
11. If the attacker is a player, handle stealing of both mana and life (do not confuse this with monster’s drain, see above). The amount is based on the physical damage of the attack (see above for the distinction of physical and total damage) and can never supersede the amount of life the target had PRIOR to step 1 above. The amount stolen is added to the life and/or mana of the player.
12. If the attacker had a freeze target modifier, launch an attack with just freeze duration versus the target to freeze it. Thus it will be affected by normal resistances according to above and also the reduction in time versus monsters in higher difficulties.
13. If the attacker had a Crushing Blow modifier, it has ONE random chance equal to the sum of the chances from all such items to cause a crushing blow. If so, the targets’ life is cut in half. Note that this is not done by a separate attack and thus no modifiers apply; it won’t trigger other effects, nor will it cause stealing and such.