Role-playing design notes

Random notes on the design of Gods & Monsters, and maybe even Men & Supermen if I can remember what I was drinking when I wrote it.

Gods & Monsters Fantasy Role-Playing

Beyond here lie dragons

Combining damage dice into attack roll

Jerry Stratton, April 18, 2018

In Gods & Monsters, as in many role-playing games, the damage roll is completely separate from the attack roll. Dungeons and Dragons, historically, has had the same behavior: rolling a 20 is the same as rolling a 10, as long as both hit, with the caveat that a 1 always misses. The current edition, fifth edition, mixes things up a little by offering critical hits on a roll of 20, but a roll of 19 is still the same as any other roll.

This clearly goes against the grain for some players. You can see it in their eyes when they make a great attack roll and then roll a one or two for damage.

Because of this, I have occasionally considered making the damage roll somehow part of the attack roll, so that high attack rolls do more damage than low ones. The sticking point has always been that I’ve always thought about it in terms of the quality of the success, which would make such a rule more complex than it’s worth. It would also make it very difficult to damage opponents that were very difficult to hit, since the quality of success against an opponent that requires a 20 to hit, for example, will always be the minimum.

It occurred to me, though, that just using the raw attack roll wouldn’t be a big deal. While it’s true that, if you have to roll a 20 to hit and you’re doing, say, d8 damage, this would mean that you always do 8 points instead of 4.5, the real increase is from an average of .225 points per attack to .4 points per attack, since you’re almost never hitting anyway. Sure, it’s a big increase percentage-wise, but it really isn’t that big of an increase.

Using the raw attack roll makes the calculations much easier. There’s no adjustment for “how much did you make it by”. It removes agility, strength, and any situational modifiers from affecting damage unless you want them to, in which case just add it to the final damage.

Here’s how the common damage rolls in Gods & Monsters turn out in such a system:

d2d3d4d6d8d10d122d62d83d64d6
123468101212161824
223468101110131418
32346791110131418
4234579109121317
5234578109111316
623356898111216
722346788101215
822345788101115
92234567791114
102233567791014
111223456791014
121223455681013
13122334568913
14112234467912
15112233457812
16111223356811
17111122245710
18111112245710
1911111113468
2011111112234

Converting damage to a 1-20 table reduces the number of possibilities for damage rolls that have a lot of possibilities, especially those that have more than 20 discrete possibilities, such as 4d6. But it does ensure that a great attack roll means great damage, a mediocre attack roll means mediocre damage, and a crappy attack roll means crappy damage.

I specifically designed the table to round damage down, since the average damage will of course go up—the low damages are likely to be hidden in misses. If you’re using a lance, for example, you’re probably never going to do one or two points of damage, because most of the time if you roll a 17, 18, 19, or 20, you’re going to miss. But they are still there if you use mojo or just have great situational modifiers.

The main problem is that it requires looking up damage on a table, which I’m not a big fan of. I might present it as an option for players (making sure they understand it will apply to monsters as well) if they start complaining about high attack rolls and low damage rolls. There’s also the issue of mojo: if damage for low raw attack rolls is also low, it will be less worthwhile to spend mojo to make those low rolls successful attacks. One solution would be to allow players to roll when they use mojo, much as one might allow players in Dungeons & Dragons who make a critical hit to roll if they wish.

If you want to try this out for Dungeons & Dragons, here’s the table for it:

d2d3d4d6d8d10d122d62d83d64d6
211111113468
3111112245710
4111122245710
5111223356811
6112233457812
7112234467912
8122334568913
91223455681013
101223456791014
112233567791014
122234567791114
1322345788101115
1422346788101215
1523356898111216
16234578109111316
17234579109121317
182346791110131418
1923468101110131418
2023468101212161824

It removes 1 from the table, since a 1 always misses in D&D. You’ll also have to decide how to handle critical hits if you’re playing an edition that has them. As mentioned, you might just give the player the option of, on a critical hit, using the attack-roll damage or rolling as normal. Or you could just do away with critical hits, since this system automatically means more damage for higher rolls.

I wrote a script to create these tables; I’ve included the script as a download. It also handles d100 rolls, which you may find useful for seeing the percentage of time the various damage results come up.

d2d3d4d6d8d10d122d62d83d64d6
111111112234
211111112246
311111112357
4-511111113358
611111113468
7-911111113469
1011111124469
11-13111112245710
14-16111122245710
17111122246711
18-20111222356811
21-24111223356811
25111223357812
26112233457812
27-28112233457912
29-30112233467912
31-33112234467912
34112234468912
35-38122334568913
39-401223445681013
41-421223455681013
43-441223456781013
451223456791013
46-501223456791014
512233567791014
52-562234567791114
572234567791115
58-5922345677101115
6022345688101115
61-6322345788101115
64-6722346788101215
6823356798101216
69-7023356798111216
71-7323356898111216
74-7523356899111216
76-77234578109111316
78-80234578109121317
81-84234579109121317
852346791110121417
86-882346791110131418
89-902346891110131418
9123468101110131418
9223468101110141519
93-9523468101211141519
9623468101211141520
97-9823468101211151620
9923468101212151621
10023468101212161824

You can use it on individual dice as well as the list of all most-used damage dice. Using “python3 attackdice --game d100 d6” will provide, with the d20 ranges manually added:

d20d100d6
1-41-171
5-718-342
8-1135-513
12-1452-674
15-1768-845
18-2085-1006

You can also specify with --game the values “dungeons”, “runequest”, “d20”, and “d100”, the latter two for a raw list of percentiles from 1 to 20 or 1 to 100. The former two remove the rolls that, under those rules, are never a successful attack.

For other options, you can use “python3 attackdice --help”.

The script requires python3, although python3 may be called just python on your system. If so, you’ll need to call it as “python” instead of “python3”, and, if you turn this into a command by setting its execution bit, modify the top line of the script.

  1. <- Yes or the dice