I'm making a fork of D&D 5e (based on the SRD but then customized) and one of the changes I'm making is removing the whole score/modifier distinction and just going with a simple "score == modifier" model. That is, ability scores are all in the range [-5,10], with player characters being restricted to the range [-5,5].

Now I'm getting to character creation and want to provide similar ability score generation mechanisms as in the stock game. The "standard array" is simple enough: the set of scores is {2, 2, 1, 1, 0, -1}. But I know the players most likely to play this also like rolled scores. Which means producing a similar generation mechanism to "roll 4d6, keep best 3, 6 times". Which results in a range of [-4, 4] (since you're limited to results between 3 and 18).

Things I've thought of:

  • Keep with 4d6k3, but then immediately do the "subtract 10, then cut it in half and round down" procedure. This produces the same result, but adds complexity I'd like to avoid if possible.
  • Roll 1d10 and subtract 6. This does mean you can never end up with a +5 (which fits), but also means you can end up with a -5, which doesn't fit. And is a flat distribution, rather than a bell curve.
  • Other dice mechanisms that end up isomorphic to the above.

So what I'm looking for is advice on a distribution with the following properties:

  1. Asymmetric bell curve similar to 4d6k3. If it's slightly different, I don't care. But the asymmetry and "curved" shape are important.
  2. That outputs numbers in the range [-4, 4] directly or with only very simple operations (a single addition, subtraction, multiplication, or division at most).
  3. Ideally with a minimum of "reroll this, hold that".
  • \$\begingroup\$ Just out of curiosity, are you planning to still have half feats? \$\endgroup\$
    – biziclop
    Commented Aug 4, 2023 at 20:35
  • 1
    \$\begingroup\$ @biziclop I'm actually removing feats entirely in favor of "skill tricks", which are kinda like smaller "micro-feats" that depend on a skill or ability score and come in tiers. ASIs will be "+1 to one ability score and pick a skill trick you qualify for". \$\endgroup\$ Commented Aug 4, 2023 at 20:41

4 Answers 4


You could use Fudge dice

Fudge dice have two "-" symbols, two "+" symbols, and two blanks on each die. If you do 5d6k4 with these (perhaps better written "5dFk4"?), it will give you a result from -4 to 4.

The disadvantage is now you have to ask your players to buy Fudge dice. (Probably many of them will simulate the result by rolling d6es, which sort of brings you full circle.)

Consider doing point buy

There are good reasons to prefer point-buy systems, especially for longer games. Being stuck with a less-capable character because of a single bad roll at the start is no fun.

Or just do the obvious thing

Keep with 4d6k3, but then immediately do the "subtract 10, then cut it in half and round down" procedure. This produces the same result, but adds complexity I'd like to avoid if possible.

This gives you exactly the right distribution and it's an operation that 5e players are already very used to performing. The complexity it adds is not that bad.

  • \$\begingroup\$ While adding a little more mental gymnastics, fudge dice can be emulated with a normal d6. You can do this a number of ways, but the most common I've seen is 1-2 maps to <minus>, 3-4 maps to <blank>, and 5-6 maps to <plus>. \$\endgroup\$
    – posita
    Commented Aug 5, 2023 at 14:13
  • \$\begingroup\$ FWIW, your intuitions around 5dfk4 are good. It has a very similar distribution to 4d6k3 / 2 - 5: i.sstatic.net/OdZpY.png \$\endgroup\$
    – posita
    Commented Aug 5, 2023 at 14:34
  • \$\begingroup\$ Thanks for doing the math! \$\endgroup\$
    – Dan B
    Commented Aug 5, 2023 at 15:52

Use a d100

Removing Subtraction

Since the range includes negative numbers, at face value that means there must be at least one subtraction and the -10 used in (4d6k3 - 10) / 2 is as simple as subtractions get. You could try to 'hide' the subtraction by using specialty die which have negative numbers printed on them, but every die that rolls a negative number is a subtraction, so all you've done is trade a simple -10 for more and slightly harder subtractions.

In the worst case scenario, the players simulate the specialty die with more common ones and so each die they roll needs to be translated. For our purposes such translations are also a kind of operation that we want to avoid if possible.

Removing Division

If we can't get rid of subtraction, we can get rid of division. 4d3k3 - 6 cuts the d6 in half, and its distribution is very close to (4d6k3 - 10) / 2, but the range is only [-3,3]. However, the real problem is that d3 are also specialty dice, so again the players will just end up rolling d6s and translating each dice.

We could try to use d2, but it would be weird to flip a handful of coins in the same way as we roll a handful of dice.

We could try to use d4, and indeed we get quite close with 3d4k2 - 5, but the range is only [-3,3]. In my opinion, you should use 3d4k2 - 5 because the range is [-3,3]: the -4 outcome of (4d6k3 - 10) / 2 is so unlikely that in practice it has a [-3,4] range; at least in D&D, the 4 outcome is a vastly different experience compared to the 2 you can get from a standard array and this discrepancy can be problematic for balance, hence the range of [-3,3] is arguably better design than [-3,4].

But aside from my opinion, the practical problem is that to widen the range to [-4,4] we would either add more die or increase the die size. Adding more dice flattens the distribution and it no longer resembles (4d6k3 - 10) / 2. Increasing the die size just brings us back where we started, d6, so that isn't particularly helpful either.


It's possible to match the distribution of (4d6k3 - 10) / 2 almost exactly with a single operation, if that operation is translation: the player rolls a d100 and then translates the result to a number in the [-3,4] range according to a table such as this:

d100 1 2-6 7-18 19-38 39-65 66-87 88-98 99-100
Mod -3 -2 -1 0 1 2 3 4

As stated previously, -4 is unlikely, so much so that a d100 can't capture it. Still, this distribution is extremely close to the original. The d100 is still somewhat of a specialty die compared to d4-d12 and d20, but at least simulating a d100 with two d10 should be somewhat familiar to players in the D&D ecosystem.

A d20 would be even simpler, but less exact:

d20 1 2-3 4-8 9-13 14-17 18-20
Mod -2 -1 0 1 2 3

I produced these two tables by rounding to the nearest hundredth and nearest twentieth the at most chance (as on Anydice.com). Other methods will yield slightly different tables; other methods such as always rounding up or down instead of to the nearest, or referencing the at least or normal chances instead of the at most chances.

All the distributions in this answer can be viewed here.

  • \$\begingroup\$ @KorvinStarmast thank for the tip, I had no idea. \$\endgroup\$
    – Ruse
    Commented May 21 at 10:14

One close approximation that uses standard D&D dice and meets your criteria of only using a single mathematical operation is 4(min(d4, 3)) - 8, or in anydice terms 4d{1,2,3,3} - 8 (or equivalently 4d{-1,0,1,1})

This is pretty fast and easy to explain, you just roll 4 d4s (treating any 4s as 3s instead) and add up the results, then subtract 8 to get to the desired range.

Treating 4s as 3s instead is what gives this distribution its asymmetry and bias towards higher modifiers (so is unfortunately unavoidable), but the math that needs to be done afterwards is just a single subtraction so it is one division simpler than using 4d6k3. I'd argue "treat 4s as 3s instead" is roughly as simple as "determine the highest 3 of these 4 dice" in terms of mental effort, so those steps offset and leave the overall effort of this method lower than 4d6k3.

In the linked AnyDice program, I also included the Fudge dice method proposed by @Dan B in as a comparison point which is 5d{-1,0,1}k4 or equivalently 5d3k4 - 8. They are very similar to each other (more similar in fact than they are to 4d6k3) so should be interchangable depending on which dice you have on hand. View the "Graph" tab to be able to compare the distributions most easily.

  • \$\begingroup\$ Nice answer, but in the future please don't use code blocks. They mess up a lot of screen readers. I replaced yours with italics. \$\endgroup\$ Commented May 20 at 12:36
  • \$\begingroup\$ @KorvinStarmast can you either describe the problem in more detail or link to somewhere that does? I just googled and couldn't find anything supporting that since ~2016. I understand not using code blocks as a replacement for block quotes or other non-code elements (because that's confusing), but this is literal anydice code, shouldn't it be formatted as such? \$\endgroup\$ Commented May 20 at 22:45
  • \$\begingroup\$ I'll dig up the link to the meta. Here at RPGSE. Give ma a moment or two. ( \$\endgroup\$ Commented May 20 at 22:46
  • \$\begingroup\$ OK, as KRyan has pointed out: Abusing code formatting to create “tables” of preformatted text is really bad, too—screen-readers will just read the words sequentially, and give no indication of the spacing or how they line up with one another There is another meta where he explained it in more detail, but I am using the wrong search term. See also 1 and 2 \$\endgroup\$ Commented May 20 at 22:53
  • 1
    \$\begingroup\$ I wrote up a question on Meta about this. \$\endgroup\$ Commented May 20 at 23:59

One easy way to get a bell curved distribution of [-4,4] is to take 1d5 - 1d5 (i.e. roll 1d10 and divide by 2 rounding up, and then do so again subtracting from the total):

enter image description here

However, this method loses the skew toward higher values and is less centrally biased. Let's fix these issues individually.

The Skew

If we want the results to be skewed towards the higher results, we simply want the positive die to have a greater mean than the lower die. This can be done in a number of ways, but I like reducing the negative die to 1d4.

This gives us 1d5 - 1d4:

enter image description here

While it isn't quite as skewed to the positive numbers as 4d6k3, it is better.

The Deviation

The other aspect we want to fix is biasing the results more to the center. To do this, we can replace the 1d5 with 1d6 but 6 = 3. This has the same distribution as 1d5, but twice as many 3s.

Here is 1d6 (6 = 3) - 1d4:

enter image description here


Our method is therefore, "roll 1d6 and 1d4. Subtract the result of the d4 from the result of the d6 treating a 6 as a 3." While is not a very good representation of the distribution of 4d6k3:

enter image description here

...it is a bell curve of an appropriate range that is simple to construct.

  • \$\begingroup\$ A d5 is simply a d10 divided by two, round up; 1,2 = 1; 3, 4=2; 5, 6=3; 7,8=4; 9, 10{0}=5. In practice you roll a d10 and a d4 and your method works. I've been doing that with d10s since I first got my hands on one over 40 years ago. Recommend adding that to your answer, since "at the table usability" is a part of the question. \$\endgroup\$ Commented May 20 at 12:39
  • \$\begingroup\$ @KorvinStarmast That's much more efficient; I feel silly for missing that. \$\endgroup\$ Commented May 20 at 12:50
  • \$\begingroup\$ Glad to be of assistance, my friend. 😁 \$\endgroup\$ Commented May 20 at 12:51

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .