32
\$\begingroup\$

This is a question that I've asked myself numerous times, but I've never gotten a really satisfying result.

The issue is this: let's assume we only have one or multiple d6 dice (arguably the most common type of dice outside of pen & paper), but we still want to play D&D 5e or another RPG game. The game doesn't really matter here, we just need to be able to emulate different kinds of dice, such as d4, d8, d10, d12 or d20. I presume that if calculating these dices from rolls of a d6 is possible, any other potentially required dice rolls can be calculated as well in a similar fashion.

Therefore: How can the probability results of a d4, d6, d8, d10, d12 and d20 be emulated by rolling only with a d6?

\$\endgroup\$
11

11 Answers 11

67
\$\begingroup\$

It's pretty trivial if you allow occasional discarding of rolls/rerolls.

d2 (gonna need this later): if result is odd, read as a 1. If result is even, read as a 0.

d4: discard any results of 5 or 6.*

d5 (gonna need this, too): discard any result of 6.

d6: done.

d8: roll d2 and d4. Result is d2×4 + d4.

d10: roll d2 and d5. Result is d2×5 + d5.

d12: roll d2 and d6. Result is d2×6 + d6.

d20: roll d4 and d5. Result is (d4-1)×5 + d5. Or result is (d5-1)×4 + d4. It doesn't matter which, but just decide before seeing the results to avoid unconscious bias slipping in.

My kids have spelling tests every Friday, and every Friday at breakfast I take their list of 20 words and the 2d6 that are always in my pocket and quiz them in random order, using the 2d6 to simulate d20, d15, d12, d10, d8, d6, d5, d4, d3, and finally d2.

Once you get a little practice with it, it's second nature.


* — Okay, here's how I actually roll a d4, without having to discard any results. 1-4 stay the same. On a roll of five or six I look at the orientation of the die. If the numeral is closer to right-side up than upside-down, read the 5 as a 1 and the 6 as a 2. If it's more upside-down than right-side up, read the 5 as a 3 and the six as a 4. If it's pips (which mine actually are, little 8mm suckers) your read the 5 as a 1 if it looks more like a + than an x, and as a 3 if it looks more like a x than a +. The six you read as a 2 if the "lines" of three pips are closer to vertical than horizontal, as a 4 if the lines are closer to horizontal than vertical. In other words, || → 2, = → 4.

\$\endgroup\$
12
  • 17
    \$\begingroup\$ I was really confused by this at first when you said "d8: roll d2 and d4. Result is d2*4 + d4." because I think of a d2 as 1 or 2 not 0 or 1. Had to go back and read a couple of times to get it \$\endgroup\$ Apr 1, 2020 at 23:12
  • 1
    \$\begingroup\$ @Himitsu_no_Yami well, a d2 technically rolls either "1" or "2", you're correct there - there's no zero rolled. You'd have to subtract 4 at the end if you wanted exactly the results of a d8, but that's trivial - my issue was getting the probabilities right. See this anydice calculation for comparison: anydice.com/program/1ab95 \$\endgroup\$ Apr 1, 2020 at 23:22
  • 17
    \$\begingroup\$ There's this (very weak) convention of prefixing zero-based dice with z instead of d. So maybe z2*4+d4 ? \$\endgroup\$
    – edgerunner
    Apr 2, 2020 at 7:19
  • 3
    \$\begingroup\$ Its worth pointing out that many of these only work with non-identical die. Meaning that either you have to roll them in an order (e.g. d2 first and then d4 second) or you have to get visually distinct die. \$\endgroup\$ Apr 2, 2020 at 13:50
  • 2
    \$\begingroup\$ @WheatWizard I just read left-to-right. \$\endgroup\$
    – nitsua60
    Apr 2, 2020 at 15:05
27
\$\begingroup\$

An alternative solution that may or may not involve fewer steps:

Two rolls of d6 give you a d36 the same way as two d10 give you a d100: 6×(d6-1) + d6.

Now, fill in as many multiples of the range you're interested in as you can fit, and discard the rest.

For instance:

  • d20: Roll d36. If the result is between 1 and 20 - keep it. Otherwise - roll again.
  • d12: Roll d36. If the result is between 1 and 12 - keep it. If the result is between 13 and 24 - subtract 12. If the result is between 25 and 36 - subtract 24.
  • d10: Roll d36. If the result is between 1 and 10 - keep it. If the result is between 11 and 21 - subtract 10. If the result is between 21 and 30 - subtract 20. If the result is between 31 and 36 - roll again.

Note that by the same method you can roll dX for any X less than 36. If you need a value greater than 36, you can roll 3 d6 for d216 and apply the same reasoning (e.g. for d100).

\$\endgroup\$
6
  • 1
    \$\begingroup\$ Welcome to RPG.SE! Take the tour if you haven't already and see the help center or ask us here in the comments (use @ to ping someone) if you need more guidance. Good Luck and Happy Gaming! \$\endgroup\$
    – Someone_Evil
    Apr 2, 2020 at 13:49
  • 3
    \$\begingroup\$ @aschepler - Sure, by the same token there are simpler descriptions for dX for all X that divide 36. I went for the simpler description of the general method at the cost of sacrificing some complexity in special cases. \$\endgroup\$ Apr 2, 2020 at 17:10
  • 1
    \$\begingroup\$ In my experience, it's more common for games to refer to this roll as a “d66”. \$\endgroup\$
    – okeefe
    Apr 2, 2020 at 17:36
  • 2
    \$\begingroup\$ The d12 approach could be easier readable if you just say d36 mod 12. At least that is how I explained it to myself after reading the sentence twice. \$\endgroup\$
    – findusl
    Apr 2, 2020 at 18:20
  • 7
    \$\begingroup\$ @findusl: Thanks for the comment! I wanted to avoid using language like "modulo" to avoid scaring people away, but maybe needlessly so. By the way, a pedantic remark: d36 mod 12 takes values in 0,1,...,11 (at least with the usual definition of modulo) so to be techinically correct I'd have to say something like (d36 - 1 mod 12) + 1. \$\endgroup\$ Apr 2, 2020 at 18:23
9
\$\begingroup\$

Use this chart

enter image description here

I made this fairly quickly in Excel, and it builds off of Jakub Konieczny's answer. Roll a d6 twice (or if you have different d6, designate one as the "tens" and the other as the "ones". I tried to organize the conversions so that figuring out your roll is as easy as possible, and eventually you might not even need the chart. Looking at the chart now, I can see a few things I'd do differently were I going to rework it, such as making 11-20 start at 41 and go to 54.

Assuming you have 2 different d6, I might suggest making a d4 chart rather than just rolling a d6 and rerolling on 5-6.

\$\endgroup\$
2
  • 1
    \$\begingroup\$ It looks like you've got a small error in the d10 column: the result 6 shows up four times instead of three. I assume you meant to put an "x" in row 46. \$\endgroup\$ Apr 3, 2020 at 17:37
  • \$\begingroup\$ It's true! I did put this together fairly quickly. I'll get an updated version up at some point (might also switch the d20 chart around to be more memory friendly) \$\endgroup\$
    – aslum
    Apr 3, 2020 at 17:38
5
\$\begingroup\$

Let's sacrifice some speed for generality

or, How to simulate any die using any die. To do this we need two results:

  1. The first result is that if we have a die we can simulate a smaller die. The simplest general method is to reroll any value to high for our simulated until we get a valid value.

  2. The second result is how use a d\$N\$ to simulate a d\$N^k\$ where \$k\$ is a positive integer. To do this we roll \$k\$ rolls of d\$N-1\$ in sequence which forms the digits of our result \$-1\$ in base \$N\$. In another form we are using:

    $$ \text{d}N^k = 1 + \sum_{i=0}^{k-1} N^i(\text{d}N - 1) $$

    This is just the method you are already familiar with from simulating a d100 using two d10's, and your d10's probably go from 0-9 which is a (\$\text{d}10-1\$) and one of them is probably marked do to be the 10th place.

Then, to simulate any \$\text{d}T\$ using a \$\text{d}N\$, find a \$k\$ such that \$N^k>T\$ and reroll \$\text{d}N^k\$ until you get a result less than or equal to \$T\$.

\$\endgroup\$
4
\$\begingroup\$

You can achieve a uniform probability distribution, if you have dice where the union of the prime prime factors the number of sides on the dice is divisible by matches with the die you're trying to simulate as follows:

  1. Choose dice \$d_0, ..., d_n\$ such that the product of the number of sides on each die \$P =\prod\limits_{i=0}^n d_i\$ is divisible by \$D\$, the number of sides on the die you're trying to simulate
  2. Roll those dice producing numbers \$x_0, ..., x_n\$
  3. Get a number \$X\$ between 0 and \$P\$ (exclusive) by reducing all those numbers by 1 and multiplying with the product of number of sides dice with smaller index, i.e.

$$ X = \sum\limits_{i=0}^n \left((x_i-1) \cdot \prod\limits_{j=0}^{i-1} d_j\right) $$

  1. Divide by \$\frac{P}{D}\$ rounding down to get a number \$K\$ between 0 and D (exclusive), i.e. \$K = \left\lfloor\frac{X \cdot D}{P}\right\rfloor\$
  2. Add 1

Now this won't allow you to use d6s to simulate d10s and d20s but to achieve this you can simply roll a d6 and keep rerolling until you get some value other than a 6, effectively getting a d5.

Now since this is probably a bit confusing, let's demonstrate how you could use 2d6s and 1d4 to simulate a d72.

$$ 72 = 2^3 \cdot 3^2\\ 6^2 \cdot 4 = 144\\ 72\cdot 2 = 144 $$


$$ \begin{array}{r|r|r|r} i&0&1&2\\\hline d_i&6&6&4\\\hline \prod\limits_{j=0}^{i-1}d_i&1&6&36\\\hline \text{sample rolls } x_i&3&2&4\\\hline (x_i-1) \cdot \prod\limits_{j=0}^{i-1} d_j&2&6&108\\\hline \end{array} $$

The result in this case would be \$1+\left\lfloor\frac{(2+6+108)72}{144}\right\rfloor = 59\$

Using this approach and the approach "turning a d6 to a d5" you can use the following combination of d6/d5 to simulate other dice

  • d4: 2d6
  • d8: 3d6
  • d10: d6 + d5
  • d12: 2d6
  • d20: 2d6+d5
\$\endgroup\$
3
\$\begingroup\$

I just published an article about this very thing and then wondered if anyone else was talking about it. You can read the full article for explanation of the thought process: Dicebending: One Weird Trick to Use D6 for Other Dice Results

For a quick list of the formulas to use to arrive at standard polyhedral dice, use the list below. Please note that "1d6-1" means roll a 6-sided dice and subtract 1 from the result. The "x 2" or whatever number after that should be applied to that result. Simulating a 1d4 or a 1d5 is done by just rolling a 1d6, then rerolling any invalid values—so for a 1d5, roll 1d6, then reroll if it rolls 6.

  • Anything LOWER than 6: 1d6, reroll if the value is larger than the highest allowed value.

  • Eight-Sided Die (1d8): (1d4-1 x 2) + (1d2)

  • Ten-Sided Die (1d10): (1d5-1 x 2) + (1d2)

  • Twelve-Sided Die (1d12): (1d6-1 x 2) + (1d2)

  • Twenty-Sided Die (1d20): (1d5-1 x 4) + (1d4)

  • One Hundred-Sided Die (1d100): (1d5-1 x 20) + (1d5-1 x 4) + (1d4)

You can check these anydice results to verify that these results introduce an even chance of any given value, and don't have a bell curve or missing values.

\$\endgroup\$
1
\$\begingroup\$

These are the possibilities I came up with:

  • addition: doesn't work, once you roll 2 dice you can't get a 1 anymore
  • multiplication: doesn't work, some numbers close to the highest number will be skipped, while lower numbers will occur multiple times (e.g. 1d2*1d4 = 1,2,2,3,4,4,6,8)
  • subtraction: only works for dice smaller than 1d6, if you discard and reroll any zeroes or negative values. For example, 1d4 would be 1d6-2, reroll on 0 or 1 (= 1 or 2 on the d6)
  • division: like subtraction, only works for smaller dice. For example, 1d2 would be 1d6 divided by 3, round up.
  • binary counting: view d6 roll as binary, roll multiple times, then assign the different possible values (e.g. 00, 01, 10, 11) to decimal numbers (e.g. 1, 2, 3, 4). Only works great for d4 and d8 which have as many possible results as 2- or 3-digit binary numbers, unless you discard and reroll if you roll outside the needed range. (AnyDice for d8: https://anydice.com/program/1ab81)

The only method of those above that works for both smaller and larger dice than a d6 is binary counting, with rerolling if your result is outside the needed range. Obviously that's not a perfect solution, but it's the only one I could come up with (although the same concept also works for other base-X numeral systems, with the only restriction that the die size has to be divisible by the system's base - leaving only base 3 and 6 for a d6, neither of which are very common or convenient compared to base 2)

\$\endgroup\$
1
  • 4
    \$\begingroup\$ "addition: doesn't work, once you roll 2 dice you can't get a 1 anymore" you can shift the range back, though. XdY - (X - 1) produces values in the range [1, X*Y-X). However, there is a different situation - you get a different probability distribution. It's a bell curve focused on the middle. This is not necessarily a problem, it can work, but you have to take it into account .3d6 is much more likely to produce 7 or 8 than either of the extremes. That's different than the flat 5% chance of getting any number on 1d20. \$\endgroup\$
    – VLAZ
    Apr 2, 2020 at 13:24
1
\$\begingroup\$

There are shortcuts, but from a logical perspective you can create any number by rolling a base 6 number and discarding numbers outside the range you are looking for. You have to re-roll every die though if your number is outside the range to keep the even distribution. Convert back to decimal and add 1 to get a number from 1..n.

Think in base 6. Roll one die for each decimal place and subtract 1 to get the digit, so your digits are 0-5. Re-roll all digits if it is out of the acceptable range. As a shortcut if the highest-order digit can be 0-1 (roll 1 or 2), you can treat even numbers as 0 and odd numbers as 1 (or 1-3 as 0 and 4-6 as 1). If the digits can be between 0 and 2 you can treat 1-2 as 0, 3-4 as 1, 5-6 as 2.

For an example with a d20 we are looking for a base 6 number between 00 and 31 (decimal 0 and 19). In base 6 that is 00 to 31.

  1. Roll a d6 and get 5, subtract 1 to get 4. That's outside the range for the first digit so restart.
  2. Roll a d6 and get 4, subtract 1 to get 3. Roll another d6 and get 4, subtract 1 to get 3. 33 is > 31 so restart.
  3. Roll a d6 and get 2, subtract 1 to get 1. Roll another d6 and get 5, subtract 1 to get 4.
    • Now you have 14 in base 6 notation.
    • That's 1*6+4, or 10.
    • Add 1 to get 11. That's your roll.

For d2 you are looking for 0-1. Since that's the highest digit you can treat 1-3 as 0 and 4-6 as 1. Roll a d6 and get 5, use 1 as the digit, add 1 to get a 2 for your roll.

For d4 you are looking for 0-3. Roll a d6 and subtract 1. If the number is 0-3, add 1 to get your result, if not then re-roll.

For d8 you are looking for 00 - 11. Since the first digit can be 0-1, roll a d6 and treat even numbers as 0 and odd numbers as 1. Roll another d6 for the second digit. If your total is greater than 11, re-roll. If your number is between 00 and 11 (inclusive), multiply the first digit by 6 and add the second digit to convert to decimal 0-7, then add 1 to get your d8.

For d10 you are looking for base 6 numbers between 00 and 13.

For d12 you are looking for base 6 numbers between 00 and 15. Note that you will never have to re-roll because you'll use the shortcut to get 0-1 for the first digit and the second digit will always be 0-5.

For d20 you are looking for base 6 numbers between 00 and 31.

You can use this to get the number for any theoretical sided die. For d43 you are looking for base 6 numbers between 000 and 110. This is a bit complicated. The first digit will be 0 if you roll even and 1 if you roll odd. If you roll even, you will always count the next two die because your results will be 0XX and that's less than 110. If the first digit is 1 and you roll 3-6 on the second die, restart because your result would be > 110. If you roll 1 on the second die, that gives 10X, so your third die will always count. If you roll 2 on the second die, that gives 11X. The only valid number is 110, so you still have to roll the third die. If it isn't 1 to give you 110, you have to restart.

\$\endgroup\$
1
\$\begingroup\$

The same way that you emulate a d100 using 2d10s.

Roll the digits in base 6, then use a chart to convert to base 10.

Example, to emulate a d20:

d20 => base 6
01      01
02      02
03      03
04      04
05      05
06      10
07      11
08      12
09      13
10      14
11      15
12      20
13      21
14      22
15      23
16      24
17      25
18      30
19      31
20      32

Example, if I want to roll a d20:

  • I roll 2d6. I roll a 3 and a 6.
  • I want it to range 0-5, not 1-6, so I decrement each, making it 2 and 5
  • 2 and 5 makes 25-base-6
  • I check the chart, 25-base-6 is 17-base-10. So I've rolled 17.
  • Without the chart: 2*6+5 = 17.

This will give you a uniform distribution. Discard any rolls out of range.

\$\endgroup\$
-1
\$\begingroup\$

The simplest way to do this is to use magic marker to color the d6. Then, write down all combinations of those d6, like "red 1 + blue 1, red 1 + blue 2" etc. For each combination, assign one number from your polyhedral. When you reach the last polyhedral number, the rest are "void" and you have to roll again, until you get a valid combination.

In other words, you just need a map from d6 dice rolls to outcomes on the polyhedral faces, where each outcome is equally likely. Making the d6 distinct somehow, by coloring them or making scratches, or from different manufacturers, makes it easy to make such a map. As long as you don't mind re-rolls for invalid combinations, it will become pretty easy to see the outcome quickly.

Polyhedral dice always have an even number of faces, so you will always use at least 2 faces of the last d6 in the sequence. As a result, the worst case is that you'll need to re-roll 4 out of 6 times on average. To save time, you can safely roll the last die by itself until it comes up with one of the valid faces, then roll the rest.

The cool thing is that you can roll the d6 one at a time, each roll narrows down the remaining possibilities. Which seems odd, but the outcomes remain fairly and evenly distributed :-) IE, it builds tension, as each one comes out :-)

\$\endgroup\$
-2
\$\begingroup\$

All of these will give you the same numbers as the single five equivalents, but the spread for multiple dice will be a bell curve, and it sacrifices simplicity for accuracy.

D2 = d6/3
D3 = d6/2
D4 = d6 reroll 5/6 or d2+d3-1
D6 = d6
D8 = d6+d3-1
D10 = 2d6 - 1 reroll double 6
D12 = 2d6 + D2 - 2
D20 = 4d6 - 3 reroll all sixes. 
D100 - this is very hard to do unless you use 2 D10 rolls, as the more dice you add the closer the result comes to the average of 3.5/die so if you rolled 17d6-2 (15-100) most of your results will be around 60. 

Rethinking my answer based on Jason's answer.

y(dx-1) + dy will give you a result from 1 to yx so while we can't reproduce certain dice because they don't fit in any multiple of y, we can do any number of base y digits we want just by adding another dx to signify the next digit. On a d6 we can easily make d2 and d3 without needing to reroll. So we can easily make 1-2, 1-3, 1-4 (y=2), 1-6, 1-9 (y=3), 1-12, 1-18, and 1-36. These will also be done with an even probability in the same way a traditional d100 does with 2d10. This might be enough to do dnd.

So in summary we either have to sacrifice probability for numbers or we have to sacrifice dice types for probability.

\$\endgroup\$
4
  • 3
    \$\begingroup\$ The question specifically asks about emulating the probability results, not just the range of numbers. Most of these have a different distribution than a single die roll does. \$\endgroup\$ Apr 2, 2020 at 19:34
  • \$\begingroup\$ Aye which is something that I noted in my answer. \$\endgroup\$ Apr 2, 2020 at 19:36
  • \$\begingroup\$ John, does that change make a difference to your comment? \$\endgroup\$ Apr 2, 2020 at 20:06
  • \$\begingroup\$ Relevant meta: Don't signal your edits in text. Instead, you should edit your answer to read as if it were always the best version of itself; anyone interested in older versions can view the revision history. \$\endgroup\$
    – V2Blast
    Apr 4, 2020 at 5:04

You must log in to answer this question.

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