Comparing weapons in Anydice with different hit chances and damage

Broadly speaking I'd like to be able to compare 2 weapons where one weapon does more damage but I hit more often with the other.

I am in 1st edition AD&D and am about to go up against some skeletons. I'd like to compare a halberd +3 and a battle axe +3, which do half damage against skeletons, to blunt weapons which do full damage, but I only have nonmagical blunt weapons. I am proficient in flail but my companion isn't proficient in any blunt weapon and will be using the battle axe

Is there some kind of code I can put in Anydice that lets me make this comparison?

2 Answers

To build on John Dallman's answer, I'd like to note one thing that his otherwise excellent math ignores: skeletons only have 1 HD, i.e. 1d8 HP. This means that, regardless of which weapon you're using, you've got a pretty good chance of slaying them in one hit.

And that means that a simple average DPR calculation doesn't tell the full story — weapons that consistently deal a small amount of damage tend to do better against weak opponents than weapons that occasionally deal a large amount of damage, because that skeleton will be just as dead if you reduce it to 0 HP as if you smash it down to -7 HP.

A more useful measure, in this case, would be the average number of hits needed to reduce a skeleton down to 0 HP or less. This isn't too hard to calculate by pencil and paper,* but if we're lazy, we can just write a simple AnyDice script to do it for us:

function: DIE:d hits to kill HP:n {
if HP <= 0 { result: 0 }
result: 1 + [DIE hits to kill HP - DIE]
}

output [(1d8+6)/2 hits to kill 1d8] named "+3 battle-axe hits to kill 1HD skeleton"
output [(1d10+6)/2 hits to kill 1d8] named "+3 halberd hits to kill 1HD skeleton"
output [1d6+4 hits to kill 1d8] named "flail hits to kill 1HD skeleton"


(Note that this simple recursive script may get slow if the target can have lots of HP. For a 1 HD skeleton, it works just fine, though.)

As in John's answer, I'm assuming a +3 strength bonus to damage here. Looking at the summary output, we can see that the battle-axe takes on average about 1.387 successful hits to kill a single skeleton, while the halberd takes 1.32 successful hits and the flail only 1.125 successful hits on average.

But, of course, we also need to account for the different probabilities of actually hitting the target with each of those weapons. We can do that simply by dividing the average number of successful hits needed to kill the enemy with the probability of landing a hit.

Thus the battle-axe, with a 70% chance of hitting the target (with +1 to hit, as assumed by John), need on average 1.387 / 0.7 ≈ 1.981 attacks to kill a 1 HD skeleton, while the halberd needs on average 1.32 / 0.7 ≈ 1.886 attacks and the flail, with only a 55% chance of hitting, needs 1.125 / 0.55 ≈ 2.045 attacks.

So it turns out that the flail, despite dealing the most average damage per attack, actually takes the longest to kill the skeletons on average. Basically that's because the flail's extra damage-dealing potential is wasted when the target only has a few HP left anyway, whereas the +3 to-hit bonus of the battle-axe and the halberd remain just as useful as ever.

Of course, if you really wanted to optimize things, you could consider more complex strategies like starting with the flail and switching weapons after landing the first hit. Honestly, though, I wouldn't bother. In practice, the difference between 1.886 and 2.045 will be lost in statistical noise anyway, and the proper conclusion to draw from all this math is that, no matter which weapon you pick, those skeletons will be dead after you take about two swings at them, on average.

And, of course, that's still just the statistical average. In a real fight, no matter which weapon you choose, you could always get unlucky and just keep rolling ones on all your attack rolls.

*) Ps. To calculate the average number of hits needed by hand, you can make a table like this:

   | avg. hits to kill with:
| (1d8+6)/2  | (1d10+6)/2 | 1d6+4
HP | battle-axe | halberd    | flail
---+------------+------------+-------
1 | 1          | 1          | 1
2 | 1          | 1          | 1
3 | 1          | 1          | 1
4 | 1.125      | 1.1        | 1
5 | 1.375      | 1.3        | 1
6 | 1.625      | 1.5        | 1.166667
7 | 1.890625   | 1.71       | 1.333333
8 | 2.078125   | 1.95       | 1.5


Each of the columns (except, of course, the one labeled "HP") gives the average number of hits needed to kill the enemy with a particular weapon, depending on the number of HP it has left. The different columns are completely independent of each other; they're only given in a single table for the sake of compactness.

To get the values for each row, you need to use the previous rows to determine the average number of hits needed to kill the enemy after hitting it once, and add one. For example, let's say the enemy has 4 HP left, and we're using the battle-axe that deals (1d8+6)/2 damage, rounded down (left column in table above). That means the enemy will be dead after one successful hit if we roll anything except a one on the damage roll (in which case it will survive with 1 HP and, as the first row indicates, will take on average 1 more hit to kill). Since the odds of rolling a one on 1d8 is 1/8, the average number of battle-axe hits to kill a 4 HP skeleton will be 1 + (0 × 7/8 + 1 × 1/8) = 1 + 1/8 = 1.125.

Once you've finished compiling the table, you can then take the average of the rows to determine the number of hits needed to kill an average enemy. For a skeleton with 1 HD (and thus 1d8 HP), that just means taking the average of the rows from 1 to 8. (For enemies with more than one HD, you'd need to take a weighted average instead, with the weight of each row given by the probability of the enemy having that many HP.)

OK, there are two parts to this. First we need to work out the average damage per hit for each weapon. That's the average roll on its damage die or dice, plus the strength bonus for the character using it, plus its magical bonus.

So if you had 18/07 strength, to pull a number out of the air, which gives you +1 to his and +3 damage, your average damage with the various weapons against man-sized skeletons would be:

• +3 battle-axe: 4.5 (average of 1d8) + 3 (strength) +3 (magic), halved, = 5.25
• +3 halberd: 5.5 (average of 1d10) + 3 (strength) +3 (magic), halved, = 5.75
• Non-magical footman's flail: 4.5 (average of 2-7) +3 (strength) not halved, = 7.5

Now, you need to work out your chance of hitting. Skeletons are AC7, and if you're a third level fighter, for example, you hit AC7 on a total of 11 or better. With the +3 weapons and your strength bonus, you hit on a roll of 7+; with the non-magical flail, you hit on a roll of 10+. Converting those into percentages, you have a 70% chance of hitting with either of the +3 weapons, or a 55% chance of hitting with the flail.

So, per attack roll with a given weapon, the amount of damage you expect to do is your hitting percentage of the average damage for that weapon.

• +3 battle-axe: 70% of 5.25 = 3.675
• +3 halberd: 70% of 5.75 = 4.025
• Flail: 55% of 7.5 = 4.125

Now, that says the flail is the best choice, followed by the halberd, but those numbers are only right for the strength and fighter level I made up. You need to do these calculations again, for the correct strengths and levels for your party members.

• So, technically, since this is 1st edition, the weapon-type armor class adjustment table comes into play (admittedly, many, maybe most, groups ignore do not use this rule). For AC 7, the battle-axe to-hit is unchanged, the halberd gets a +2 and the flail gets a +1, so the halberd pulls ahead. On the other hand, although the OP didn't mention this, the flail or battle axe would allow the use of a shield, which might make more of a difference than a slight damage advantage to the halberd. Dec 21 '17 at 22:56