I'm making a simple, slightly comedic home-brew RPG where a lot of the characters' base stats are randomized for comedic effect. This includes the characters' age. (So you can have a ridiculously strong 90 year old woman or a very intelligent 5 year old).

I want the game to be able to be played using only D6s because thats the easiest dice to get a hold of anywhere and it can be salvaged from various board games. I just can't come up with a good system for generating the age of a character (about 0-90).

I want a system for generating the age of a PC using only D6es. I would like the probability curve to be as even as possible. I.e it should be about as likely to get an 80 year old or 4 year old as a 30 year old or a 50 year old.


7 Answers 7


Okay, so...

You want to measure values from ~0 - ~90. You want even distribution, and high granularity (i.e. as many distinct values as possible).

Well, that's easy.

(Ceiling(1d6 / 2) - 1) * 36 + (1d6 - 1) * 6 + (1d6 - 1) AnyDice

Provides values of 0 to 107, with even probability, and each value represented exactly once.


  • Ceiling(1d6 / 2) is effectively 1d3. I.e. 1,2 is one, 3,4 is two, 5,6 is three.

    • The AnyDice plot uses d3, because it doesn't understand the Ceiling function (as far as I know). Rest assured, it works using entirely d6s and math.

    • We can also use d3 notation to simplify the formula:
      (1d3 * 36) + (1d6 * 6) + (1d6) - 43

  • Instead of subtracting one from each die roll, you can treat the highest value as zero. I.e. 1d6 gives values of 1, 2, 3, 4, 5, 0.

  • You can compress or expand the results with multiplication to get the exact range you want. I.e. multiply the result by 0.841121495 to get a 0-90 range. However, this will cause some values (distributed evenly across the range) to become more probable.

  • If your RPG is printed in any form, you can simplify matters with a lookup table. For each age value, record what the dice show to produce it. Then just have the player roll three distinct six siders, and look up the result in the table.

    • You can reduce the overall size of the lookup table by doubling up on the most significant die, or by using d3 notation. This will result in a table with 108 entries.

      |  1  | 2 | 3 | Age |
      | 1,2 | 1 | 1 |  0  |
      | 1,2 | 1 | 2 |  1  |
      | 1,2 | 1 | 3 |  2  |
             . . .
      | 3,4 | 1 | 1 |  36 |
      | 3,4 | 1 | 2 |  37 |
      | 3,4 | 1 | 2 |  38 |

Accentuating the Extremes

dpatchery raised the question of how to create a curve that skews the results toward the extremes to make silly results pop up more often.

BlueRaja - Danny Pflughoeft provides an answer:

Take a bell curve (ex. sum n d6 and subtract n), add max/2, mod max. This essentially chops the bell-curve in half, and moves the left-half to the right of the other half.

If I understand him rightly, this leads to something like:

((18d6 - 18) + 45) mod 90

Simplifying gives us:

(18d6 + 27) mod 90

  • 1
    \$\begingroup\$ This is the usual method to do similar calculations in software-development, and exactly the answer I was going to give. +1 \$\endgroup\$ Commented Apr 9, 2012 at 21:32
  • 7
    \$\begingroup\$ I saw the question, said "easy, just use base 6!" And saw that you beat me to it. \$\endgroup\$
    – Yandros
    Commented Apr 10, 2012 at 1:19
  • 1
    \$\begingroup\$ @Beska With a lookup table it's no more complex than rolling up random loot with percentile dice. But yeah, this is a case where you have to pick two of three options: Granularity, simplicity, even distribution. \$\endgroup\$
    – AceCalhoon
    Commented Apr 10, 2012 at 12:53
  • 4
    \$\begingroup\$ @msalters You can simplify it without losing uniformity if you use d3 notation (which most people use a d6 for anyway): (1d3 * 36) + (1d6 * 6) + (1d6) - 43 . You could also express the Ceiling function mathematically and simplify from there, but I'm not sure what the results would look like. \$\endgroup\$
    – AceCalhoon
    Commented Apr 10, 2012 at 15:18
  • 4
    \$\begingroup\$ "The reverse bell curve is what you want, but I'm not sure how to produce it with d6s." - Take a bell curve (ex. sum n d6 and subtract n), add max/2, mod max. This essentially chops the bell-curve in half, and moves the left-half to the right of the other half. \$\endgroup\$ Commented Apr 10, 2012 at 19:17

For simplicity's sake, you could always do 1d6 * 3d6 - four dice rolls, minimum age of 3, maximum age of 108. The probabilities are wacky, though: 1d6 * 3d6 probabilities

EDIT: Secondarily, 6*1d6-1d6 (two dice rolls) can get you absolutely flat probability from 0-35. You can then leverage this to either roll and multiply:

Personally, I'd recommend 2*(6*1d6-*1d6)+(4d6-4) - it's a little bit of math, but it's only six dice rolls, and it's very close to exactly what you're after: better curve


I was thinking the best way to do this is to roll in two stages. The first roll determines how many die you will roll for your age.

So roll 2d6 which determines how many d6's you roll on the next step.

Then roll that many d6's to get your desired age.

I'm not very good at average die rolls but you can get ages from 2-72, with probably an average of around 18. rolling 6 3's on the second roll.

You could increase the number of dies to roll initially to 3d6 which could get you higher numbers but it also increases the minimum age as well.


First Roll (2d6): 2 + 5 = 7
Second Roll (7d6): 1 + 4 + 6 + 2 + 5 + 3 + 1 = 21
  • \$\begingroup\$ I'd say the average is more like 24.5 (d6 have an average value of 3.5 ((1+6)/2)). This should give a probability distribution of several peaks, and note that there will probably be more "clumpiness" in the upper ranges since more dice are rolled there in the second stage, though I doubt you would notice this without a lot of rolls. \$\endgroup\$
    – ballesta25
    Commented Jun 7, 2014 at 6:16
  • \$\begingroup\$ This is brilliant. It's easy to understand, easy to remember and simple to execute. \$\endgroup\$
    – Easy Tiger
    Commented Jan 11, 2023 at 1:17

This gives you a range from 0-90 with an average age of 45. Its skewed a bit old for adventurers and it requires several fist fulls of d6s but it gives you the right range.


The simplest way I can think of would be (2d6-2)*10+(2d6-1), giving you a range of 1 (4 rolls of 1) through 111 (4 rolls of 6).


If this is just random, i would assume you dont need that precise. Each 1-6 value represents a certain % of total maximum age based on normal demographic spread as it relates to significant cultural benchmarks. Unfortunately, different species may vary in the spread of these age categories, but for simplicity sake, you can make it even. You dont want long lived creatures ending up "45 years old" when that would clearly be barely an adolescent given their age process. 1: around 10% of max - the really young 2: around 20% of max - those reaching physical peak 3: around 30% of max - those still at peak physical and mental conditions 4: around 50% of max - those in decline but with a lot of experience/wisdom 5: around 70% of max - etc. 6: around 90% of max

This is very easy, you can say for 30% "oh, they look about [the equivalent of] 25-30" (its hard to tell precise age).


If you want an age range between 0 and 100 use this system. First determine your base age by rolling a d6: (D6 result of 1: Base age is 10, D6 result of 2: Base age is 20, D6 result of 3: Base age is 30, D6 result of 4: Base age is 50, D6 result of 5: Base age is 70, D6 result of 6: Base age is 90)

Then, roll 2d6-2 and write that number down somewhere as the age modifier.

Then, roll another d6 (or flip a coin). On a result of 1-3 (heads) add the age modifier to your base age and on a result of 4-6 (tails) subtract it. The final result is your character's age.


You must log in to answer this question.

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