note: the first version of this had an error in the formula; now fixed. I also forgot to count critical hits in the damage evaluations.
A mathematical question: Exactly how effective is Crushing Blow on items in Diablo 2? To be precise, exactly how much extra damage do certain Crushing Blow items give for certain conditions of player's damage and monster HP?
To review, Crushing Blow is a percentage chance that a character, after hitting a monster and dealing damage, has to outright halve the monster's current life.
Let X = the player's damage per hit, Y = the player's crushing blow chance (from 0 to 1.00; Goblin Toe would be 0.25), and Z = the monster's starting hit points.
We will begin with this equation. (Apologies to those using a non-images browser.)
This in an expression of how much life a monster has remaining after N hits. The first term is the monster's starting life, simply enough. The second term is the life removed by the halving done by the Crushing Blows, ignoring the linear damage for now. The third term is the cumulative life removed by the linear damage.
The second term is an overestimation of the Crushing Blow damage,
as that term halves the monster's life without regard to the linear
damage being subtracted. But, the third term is an underestimation
of the linear damage by exactly the same amount. What this term is
doing is this: Every hit i
can
have the damage that it did halved by each of the N - i + 1
hits that follow it, and so will on average have
(N - i + 1) * Y
halvings applied to it.
Here's an example. Suppose Z is 1000 and X is 200, and the character lands a blow that Crushes. The proper way to calculate is to subtract 200 and then halve the 800 to 400. But it is just as correct to go the other way: first halve the 1000 to 500, and then subtract half the damage, and you still get the correct 400.
And then if you have another hit and crush, the proper method is 400-200=200, 200/2=100. But it is also totally correct to view the entire sequence as 1000 (the first term Z) halved twice to 250 (the second term subtracts 750), and then subtract 200 halved twice (the first hit, which is i=1 in the summation), and then subtract 200 halved once (the second hit, i=2 in the summation), and you get your same 100 result. The idea is that to get Crushing Blow into one equation, we must get rid of the interlacing that the Crushing and regular hits have in the game, which we do by writing the equation like this.
If we set the left side of that equation equal to zero, what this equation is doing is asking "How many hits does it take until we have had enough Crushing Blow halvings that the monster's remaining HP is low enough that the linear damage has killed it?"
We can simplify the series slightly, by taking advantage of
the fact that N - i + 1
will progress from N to 1,
and will work out the same way when processed in reverse order,
so we can simply substitute i
.
I couldn't, however, figure out how to evaluate that series into a single expression. So I used the copy of Mathcad 8 that I had lying around from freshman year physics. It simplified it to:
Next step is to set the left side of the equation equal to zero, and solve for N. Again I couldn't do this myself, but Mathcad did, and spit out this spectacular formula:
with exp(x) meaning e to the power of x. (All along these equations do match up if tested by plugging in sample values, so I'm sure they're correct.) A final algebraic simplification gives us this:
So there's our formula for number of hits required for a character dealing X damage with Y% Crushing Blow chance to kill a monster with Z hit points.
Now we can finally answer our burning questions! How good is Bonesnap? How important are exceptional javelins to a Javazon? Let's run some typical numbers. 8000 HP is an average value for Hell Act IV in an eight-player game - corpulent-type monsters have more, most other monsters have a bit less.
Typical Case | Weapon | Str | Skill/Aura | Weapon | Elemental | Critical | Final | Crushing | Monster | Hits To | Effective Damage |
Average | Increase | Mastery | Damage | Chance | Damage | Chance | HP | Kill | From Crushing Blow | ||
Punching Paladin | 1.5 | 75 | 345% | 8 | 15.80 | 25% | 8000 | 26.39 | 287.37 | ||
Javazon | 10 | 100 | -15% | 8 | 42% | 37.63 | 25% | 8000 | 21.46 | 335.13 | |
Javazon 2 | 25.5 | 100 | 42% | 8 | 42% | 98.99 | 25% | 8000 | 16.10 | 397.78 | |
Smite Paladin | 48 | 80 | 753% | 447.84 | 25% | 8000 | 8.52 | 490.73 | |||
Bonesnap Barb | 108 | 170 | 102% | 123% | 40% | 1254.29 | 40% | 8000 | 4.01 | 741.90 | |
Martel Barb | 172 | 170 | 102% | 123% | 40% | 1997.58 | 0% | 8000 | 4.00 | 0.00 | |
Bonesnap/Charge | 108 | 170 | 575% | 912.60 | 40% | 8000 | 4.82 | 748.59 | |||
Martel/Charge | 197 | 170 | 575% | 1664.65 | 0% | 8000 | 4.81 | 0.00 |
The last column is the effective average damage that your Crushing
Blow items are adding to your weapon. This is calculated with
(HP/Hits)-FinalDamage
. Yes, the average is higher if
your base weapon does more damage. Take the Javazons as an example -
Javazon 1 has a throwing spear and level 1 Jab; Javazon 2 has a
spiculum and level 20 Jab. Javazon 2 will not waste her time applying
Crushing Blows to monsters with less than 38 HP (a mere 19 damage
from a successful Crush), so on average her Crushes do more damage.
Some of the Hits to Kill values look low - a typical ranger Javazon takes more than 7 Jabs (21 attacks) to kill a Hell Act IV monster. Remember that this calculates hits; most characters hover around 80-85% to-hit, with Javazons going as low as 60% or so; and this hit chance is further modified by level difference. Also note that you'll want to round up most of these numbers, as monsters only die after an integral number of hits. I also ignore monster regeneration which does become an issue for low damage characters.
Interesting results for Bonesnap vs Martel. A mace-mastery Whirlwind Barbarian needs a Martel of 172 or better average damage to match Bonesnap, and a Charge Paladin using a non-damage aura (Vigor, Holy Freeze, Conviction, etc) will break even between Bonesnap and a rare Martel whose average damage is 197.
(The break-even point for Martel damage will be lower for monsters with less HP, in smaller games or earlier acts. Also, this doesn't count the 150% to Undead property if you typically fight in Chaos Sanctuary; counting that, the break-even point will be lower. The reader can run the numbers for himself/herself if desired. There are of course other factors: Bonesnap has much lower requirements than a Martel, gives less life and mana leeching, but gets much less damage returned by Iron Maiden, but that's beyond a mathematical analysis and up to you to balance. And remember that Crushing Blow doesn't work on bosses. And finally, the break-even points are different if you also add Goblin Toe to the character; the reader can run those numbers too.)
You can download this in Excel format
complete with all the formulae for you to run your own numbers. Note
that the formula for Hits to Kill degenerates into a 0/0 form when
Crushing Blow percentage = 0, but if you put in a very low number
(say 10^-9), it works okay and returns Hits=Z/X
as it
should.
Note that this assumes the character always does his average damage, which is not true. In fact, the hits required will typically be slightly higher than these formulae calculate, and will be larger if the damage spread of your weapon is larger, because the character has a small chance of needing more hits to knock out the last part of a monster's HP. (Reducto ad absurdium: a character with 0 minimum damage could take an infinite number of hits to kill a monster.)
A related factor to that is this formula gives the median numbers of hits to kill things. The mean will almost always be slightly higher, because there's a greater range of possibilities above the mean than below.
Please send comments to erik @ dos486.com.
This page was generated mostly by hand coding, with the assistance of Allaire Homesite 4.0 .