D&D Combat Roll Simulator
One attack roll, laid out as a table: a d20 to hit against Armor Class, then a damage die. Change the numbers and every outcome updates. Further down, the page answers a design question: is a bonus worth more on the attack roll or on the damage roll?
Outcome table
How these numbers are worked out
- Hit chance
- = d20 faces that hit / 20
- = (21 − (AC − attack bonus)) / 20, kept between 1 and 19 faces
- A natural 1 always misses and a natural 20 always hits, so it is always 1 to 19 faces: 5% to 95%.
- Expected per round
- = P(normal hit) × (avg die + D) + P(crit) × (2 × avg die + D)
Value of the next +1
+1 to hit:
+1 to damage:
- +1 to hit
- = (avg die + D) / 20 per round: one more d20 face becomes a normal hit. 0 once capped.
- +1 to damage
- = P(hit) per round: every hit deals 1 more.
- Which wins
- +1 to hit wins only while avg die + D > 20 × P(hit).
Compare +N to hit vs +N to damage
The same attack three ways: as set above, with +N added to the attack roll, and with +N added to the damage roll. All tables share the color scale in the legend above, so the same damage is the same color everywhere.
Bonus sweep, +0 to +20
Expected damage over 20 rounds for every extra bonus from +0 to +20, at the settings above. Point at or drag across the chart to read any N; the slider sets the marker.
Expected damage over 20 rounds
The dashed line (+N to damage).
The solid line (+N to hit).
What moves the crossover.
20 rounds, rolled for real
The numbers above are exact averages. This rolls a real d20 and real damage dice for 20 rounds at the settings above (two damage dice on a crit), so you can see how far one fight lands from the average. Nothing rolls until you click, and changing a setting never re-rolls. The Enemy HP column tracks the enemy from the top of the page: rounds after a kill still roll and count toward the total, and changing Enemy HP re-scores the same rolls.
Settings changed. Roll again to compare.
± is one standard deviation, worked out exactly from the one-round spread.
| Round | d20 | Result | Damage dice | Damage | Enemy HP left |
|---|
Try this
Each button sets the controls at the top of the page, and every table, chart and figure follows. Read what to look for, then use the links below to go and see it.
-
A crossover
At AC 25 only a natural 20 hits, so +1 to hit buys nothing until +6. After that, each +1 to hit adds a whole extra d12 hit (6.5 over 20 rounds), while +1 to damage adds just 1.0. Look for the ring at +6, where +N to hit takes over.
Sets: AC 25, d12, +0 to hit, +0 damage, compare at +6
-
Damage always wins
At AC 15 with +0 to hit you expect 6 hits in 20 rounds, so each +1 to damage adds 6.0. Each +1 to hit adds one more hit, worth only 4.5. The dashed line stays on top at every N, and there is no ring.
Sets: AC 15, d8, +0 to hit, +0 damage, compare at +5
-
The cap flips it
With a d12, one more hit is worth 6.5 and +1 to damage adds 6.0, so +N to hit leads at first. At +13 it reaches the 95% cap and goes flat, and +N to damage passes it at +15.
Sets: AC 15, d12, +0 to hit, +0 damage, compare at +15