Damage per combat round in d20 almost looks simple, until you know the rules. Which I don’t, thankfully. However, I know some of the rules of the Neverwinter Nights games, which while simpler than the pen and paper version of D&D, are still pretty arcane. But in a nutshell, what we need to know to calculate DPR(ound) is that you get one attack per round, plus one for every 5 points of BAB above 1. So you get 2 attacks for BAB on [6,10], 3 if BABε[11,15], and so on. Each additional attack has an additional -5 penalty to the to-hit roll, i.e. -5 on the second hit, -10 on third hit, -15 on 4th hit and so on. So if you like, you get to keep attacking at -5 more per attack until your remaining BAB is 0, at which point you can’t attack any more. You may also get off-hand weapon attacks, which are penalized in a complicated way depending on various feats you’ve earned and the size of the weapon you’re wielding in the off-hand. It can go from -6 main hand, -10 off hand to -2 each hand in; getting from the worst case to the best takes one more feat in NWN than in NWN2. Additional off-hand attacks will cost more feats.
Once we know all that, we can describe the chance to hit a target as:
P(hit|on the sth swing) = min[19/20, max(1/20, 20 + (∑ to hit bonuses and penalties) - AC - 5s)]
for main hand attacks. Then add those up over the S = int[BAB-1/5]+1 swings, and you’re set! Putting that together with the expected damage calculation from last post, it looks like:
DPR = d ∑BAB-5s>0 {min[19/20, max(1/20, 20 + (bonuses and penalties) - AC - 5s)]×[1 + (n-1)×min(w/20, P(hit|sth swing)]}
not accounting for feats like power critical (+4 to confirm critical) and so on. Adding in additional damage from extra attacks is straightforward.
Of course, we probably don’t care in particular how we’ll do against opponents with a specific value of armor class, and would like a measure of our effectiveness overall. Well, if you want, you can average that beast above over all armor classes, 1-∞…or up to some reasonable number, say 1-your character level, or character level +20, or something, depending on your environment. Of course, that’s overkill…there is a built in cut-off point, any AC > 19 more than your BAB+bonuses you’ll only hit on on a roll of 20, so you don’t need to give extra consideration to AC > 20 more than BAB+bonuses. Similarly, but more complicatedly, any AC < BAB – 5S will be hit on all but a roll of 20 (on every attack in a round), although you might allow some slack for those awful occasions when you’re debuffed by an enemy spell. Ideally, if you can assign a reasonable estimate, you could weight each AC by the likelihood of encountering that AC, like so:
<DPR> = ∑AC P(AC) DPRAC
and even better, would be to weight it not just by probability of encountering that particular AC but also by the threat that an opponent with that AC represents. That is, an opponent with an AC of 8 is likely a level 1 pauper who can’t afford any armor, and probably can’t afford anything deadlier than a stout cudgel (i. e. broken table leg), and will barely be able to touch your level 18 weapon master in enchanted plate armor let, so do you really need to worry about taking him out as fast as mathematically possible? So the best calculation we can do is probably something like:
<ΘDPR> = ∑AC <Θ>ACP(AC) DPRAC
where Θ is the measure of the threat that the target represents, which I will talk about in a future post.
Anyway, short of being able to put all that information together, I recommend plotting your expected damage out in a spreadsheet. Maybe I just suck with spreadsheets, but the use of the min and max functions seems to me to make it a pretty cumbersome thing to enter into the spreadsheet…the contents of the cells won’t vary in an orderly way.