Diablo – +% life vs +% resistance

diablo-3

This is regarding the invigorate and Impunity runes of Barbarian's warcry. In short, impunity gives +50% to resistance, while invigorate gives +10% life (+ some regeneration).

Many people come to rely on this EHP (Effective Health Pool) calculator to compare the effect of these two runes. According to this calculator, impunity is the clear winner.

However, I started doing some calculations myself from the information and links taken from [this question], specifically the Diablo III formula list.

Here is the effective health fomula:

Effective Health = Health Pool * Total Damage Reduction,
i.e. Health * (1 - ((1 - DR from Armor) × (1 - DR from Resistance) × (1 - other DR)))

DR means "damage reduction"

Let's simplify the formula:

A = DR from Armor (for example 75%, but we are not using numbers)
R = DR from Resistance (for example 66%, but we are not using numbers)
O = DR from Other

For the sake of this example, let's say "DR from Other" is zero. This means that only health, armor and resistance is being taken into account.

So the effective health becomes:

x = Effective Health = Health * (1 - ((1 - A) × (1 - R)))
                     = Health * (A + R - AR)

Also, this is how damage reduction from resistance is calculated:

Elemental damage reduction = Resistance / (5 × Monster Level + Resistance)

Due to the hyperbolic shape of the resistance formula, +50% in the Resistance when converted to damage reduction doesn't increase as the resistance goes up, but actually the increase in damage reduction decreases. For example with monster level 63 (taken from this answer):

Resistance = 600 --> Reduction = 65.6%
+ 50% = 900 --> Reduction = 74.1% (which is 65.6% + 8.5%)
Resistance = 1200 --> Reduction = 79.2%
+ 50% = 1800 --> Reduction = 85.1% (which is 79.2% + 5.9% (less increase))

This means that while invigorate adds 10% to health, impunity adds a smaller value to the damage reduction. This means that in the formula for effective health, invigorate replaces Health by 1.1 * Health while impunity replaces R by (R + y) where y is the increase in damage reduction (in the two examples above, 8.5% 5.9% respectively).

  1. Adding 10% to Health:

    Invigorate Health = (1.1 * Health) * (A + R - AR)
                      = 1.1 * (Health * (A + R - AR))
                      = 110% x
    

    which means 10% increase in health is equal to 10% increase in effective health.

  2. Adding y to the value of reduction from resistance:

    Impunity Health = Health * (1 - (1 - A) × (1 - (R + y)))
                    = Health * (1 - (1 - A) * (1 - R - y))
                    = Health * (1 - (1 - R - y - A + AR + yA))
                    = Health * (A + R - AR + y (1 - A))
                    = x + y * Health * (1 - A)
    

So with invigorate, you get 10% * x bonus, while with impunity you get y * Health * (1 - A).

To get an idea which one is better, let's put numbers from my build in to see which is worth what. My base life is 50k. Resistances are at 56% reduction. Armor is at 78% reduction. 50% increase in my resistance gives about 65% reduction. This means y is 9%.

Bonus from invigorate:

10% x = 10% * Health * (A + R - AR)
      = 0.1 * 50k * (0.75 + 0.56 - 0.75 * 0.56)
      = 0.089 * 50k

Bonus from impunity:

y * Health * (1 - A)
      = 0.09 * 50k * (1 - 0.75)
      = 0.0225 * 50k

As you can see, the bonus from impunity is about one fourth of that of invigorate.

My question is then, in what way is impunity superior to invigorate? How does the other calculator calculate effective health that the numbers are different?

Best Answer

I am afraid to say the EHP formula you quoted is very wrong. EHP should be HP divided by combined damage taken rate, not multiplied by damage reduction rate. For example if you have 10k HP and 60% combined DR, which means you're only taking 40% damage, it is equivalent to having 25k HP without any damage reduction, so your EHP is 10k / (1 - 60%) = 25k.

Using your simplified model and numbers, base EHP is 50k / ((1 - 56%)(1 - 78%)) = 516529.

With Invigorate, total EHP is 1.1 * 50k / ((1 - 56%)(1 - 78%))= 568182, or a 10% increase.

With Impunity, total EHP is 50k / ((1 - 65%)(1 - 78%)) = 649351, or a 26% increase.

As @yx pointed out, every 300 resistance equals to 100% EHP*, so the only case Invigorate will beat Impunity in terms of EHP increase is when 50% of your resistance is less than 30. Invigorate unlocks at lv41 and usually a character don't have much resistance (or HP) at that time, and the 310 regen could be something. However when a character reaches lv60 and enters Inferno, Impunity is the clear winner.

*Based on assumption of mLvl=60, while your DR numbers were calculated based on mLvl=63, so there might be a small gap but doesn't change the big picture.