So I’ve always wanted to make a 20 level random dungeon, ever since I was in middle school with the random dungeon tables in the AD&D DMG. Well, now that I’m retired I have some time on my hands, so I did just that. This is exactly the sort of silly, stupid shit I intended to do in my retirement. However, I used the tables in the 5E DMG.

The Plan

The plan was to do a breadth first search. So the first room has three doors in it. I rolled to see what was behind each of those three doors in turn, and that created several new doors and passageways. Then I checked each one of those doors in passage ways to see what was next. To do this, I would take any level of the dungeon that had unresolved doors or passages, start at a certain point on the page, and scan clockwise around the page looking for unresolved doors or passages. When I found one, I would roll on the appropriate table and draw in whatever was called for (as best I could).

I made a decision early on to make all passages at least as long as they are wide. With the tables as written (TAW), it’s entirely possible to have a 40 foot wide passage that is 10 feet long. I generally tried to shrink rooms to fit the available space. I also tried to be generous with passages that were about to go off the edge of the page. I wanted to be consistent about this, but I wasn’t really. If I was in a bad mood, I’d just dead end the passage. If I was in a good mood, I’d turn it right instead of left to make more dungeon.

I tried to place exits within the room randomly, which also meant placing the rooms as randomly as possible. If I got a 20 x 30 room, and there was only one way to fit a 20 x 30, that’s where it would go. But if there was room I’d roll to see if you entered the room on the short side or the long side, and then I’d randomly determine which square you entered on.

I tried to make different areas connect to each other. So if I had a passage that ran into where the wall of a room was already drawn, I’d make a roll and give it a good chance of connecting into the room. This might be as a passage into the room, dead ending into a door into the room, or a secret door into the room. The one exception to this was areas that could only be reached by a secret door. I tried to keep those secret, because there’s enough useless secret doors in a random dungeon anyway.

Counting Days and Rolls

It took me 23 days to draw the initial map. Then I went back and added cross hatching around the edges. That took another month because I was spending much less time on it. The crosshatching was useful, though, as I found a handful of unresolved doors and passages doing it.

I estimate that it took about 9,250 rolls to generate the dungeon. I started rolling manually, and I was not keeping track of my rolls. This got tedious quickly, so I wrote a Python program with all of the tables. That way I could just type in “door” and it would tell me what was on the other side of the door, and automatically roll how wide a passage was or how big a room was and how many exits it had. After a while I realized this was a chance to break out my abacus, so I started keeping track of my rolls on level 10. That was fun for a while, but by the time I got to level 15 I realized it was pretty silly to use an abacus when I could just modify the Python program to keep track of the rolls for me. I kept track of rolls for 10 levels (levels 10, 11, and 13-20). I then did a regression on number of rooms per level to number of rolls. I was amazed at how tight the regression was (r-squared was 95.2%). That’s how I estimated 9,250 rolls.


A common phrase is ‘Continue straight 20 ft., door way on the right, continue 10 ft.’ But does that mean 30 total feet of passage, or 40 feet, with the door getting it’s own 10 feet? I went with the latter. I think it makes more sense when you get side passages. Now, early on I was allowing for 20 foot wide or wider side passages, but later on I realized the tables do not allow for this.

Another problem is too many room exits. Check out level 1, room XIX; or level 2, room XXIV. I eventually started to tone this down to a more reasonable amount when I could. It would be nice if the number of exits from a room depended on the perimeter of the room, but I realize that would make things more complicated. Also, you can get a reasonable number of exits for a room, and then have them all show up on the same wall. You could reroll duplicate walls, but it’s not always a problem. I just started fudging it when it became a problem.

Stairs give you the opposite problem. Let’s define a node as a passage or door where you could roll to see what is next. If you have a passage node, and you roll to see what’s beyond, you can expect to end up with 1.4023 nodes after the roll. You might have none, or one, or more, but on average you will have 1.4023. Door nodes are a bit better: they give you 1.433 nodes on average. Stairs, on the other hand, give you 1.2341 nodes on average. So going to another level strangles growth a bit. Level 3 ran into problems with this, and at one point I had to add a secret door to keep things going and get to 20 levels. So after level 5 I started making the first roll on each new level be on the starting rooms table. That gives an average of 3.15 new nodes, assuming 50% of the wells go somewhere.

I started getting a lot of loops, which seemed rather silly. But then I realized I was getting loops because I was allowing things to connect. But if you don’t allow things to connect you get a lot of dead ends. It’s not so much of a complaint about the 5E tables as it is an observation about random dungeons. Be aware of the consequences of your decisions when making one.

You used to be able to get four way intersections when rolling for passages. You can’t do that any more. I am very disappointed.

As a player, if you know how the tables work, you know where to search for secret doors in passage ways. This could be fixed if instead of ‘Continue straight 20 ft.’ you had ‘Continue straight 1d4 x 10 ft.’


I think if you applied the decisions symmetrically, it would look more human. That is, start with a room with doors on three sides. When you roll for the door on the left, whatever you get there also put it on the door to the right. I’d like to try that, but I’m a bit random dungeoned out at this point.

Instead of a breadth first traversal of the nodes in a dungeon, I think it would be best to do a random traversal of the nodes. However, I think it would be an incredible pain in the ass to keep track of all the nodes in a dungeon.

I didn’t get around to stocking the dungeon yet. My idea was to have a different type of stocking for each tier of play. Levels 1 to 4 would be a temple (probably abandoned and inhabited by orcs or bandits). Levels 5 to 10 would be tombs for worshipers (now full of undead). Levels 11 to 16 would be the headquarters for a secret cult within the temple (maybe still active, maybe not). Levels 17 to 20 would be the lair of whatever BBEG was secretly controlling the court (with lots of his minions). I was going to call it the Forgotten Temple of Modnar. Of course, that’s backwards, not random, so I wrote a Python function to randomize it and got the Forgotten Temple of Nomrad (or Donram, or Radnom, or Nodram, …).

I saw some Reddit posts recently about rolling ability scores, or not rolling ability scores. I thought up a couple ideas, and started thinking about possibilities, and then went down the al-miraj hole of internet research. Listed below are the ability generating variants that I found. I broke them apart into individual pieces that can be mixed an matched. I tried to identify numbers that you could vary to fit your tastes, which I typically called N, with values people stated they were using in parentheses.

Individual Rolls

  • 3d6
  • 3d6 N times, keep the highest (N = 2 or 6)
  • 3d6, replace one die with a four
  • 3d6+4 drop lowest
  • 4d6 drop lowest
  • 5d6 drop two lowest
  • 1d6+N (N = 8, 9)
  • 1d6-1d4+N (N = 13)
  • 1d8+N (N = 7, 8)
  • 1d10+N (N = 7, 8)
  • 1d20
  • 2d20 drop lowest
  • 1d20 with a table, for complete control of the distribution
  • 2d4+1d6+1d8 drop lowest
  • 2d4+N (N = 7 or 8)
  • 2d6+N (N = 4, 5, or 6)
  • 2d8+N (N = 3 or 4)
  • 3d4+2d3+1d6+3 keep three
  • 4d4+N (N = 3 or 4)
  • 5d2+N (N = 2 or 5)
  • 5d4+N (N = 0)
  • Ndf+M (N = 4 or 5, M = 12 or 13)

Point Buy

  • Standard from 5E.
  • 1 for 1.
  • 1 for 1 with a minimum of N. (N = 8)
  • 1 for 1, start with all at N, when one goes up another goes down. (N = 10 or 12)
  • Pathfinder point buy.
  • DM chosen point buy (infinite possibilities, not going there).

Point buy variants.

  • Point buy with random points. (random = 8d6)
  • Randomly generate a legal point buy.


  • Use a 12 card deck, draw two cards for each ability.
    • Suggested deck #1: 3, 3, 4, 4, 5, 6, 6, 7, 7, 8, 8, 10.
    • Suggested deck #2: 4, 5, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9.
    • Suggested deck #3: 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9.
  • Use a 14 card deck, drop the lowest score.
    • Either deck suggested above, plus a 4 and a 5.
  • Make a deck of 18 cards from 1-6 that add up to N. Three cards per stat.
    • Optionally, three cards of the same color gives + 1
    • Optionally, three cards of the same suit gives + 2

Card Variants

  • Play face up, one row at a time, with choice of which stack to place each card in.
  • Play face up, one card at a time, with choice of which stack to place each card in.
  • Add some extra cards that don’t get dealt.


  • Standard 5E array.
  • Standard 5E array, +1 for each ability.
  • Average of 4d6 drop lowest six times (16, 14, 13, 12, 10, 8).
  • Non-standard array as chosen by DM (54,264 possibilites, not going there)
  • Each player rolls once, with DM rolling until there are six rolls.
    • Do this three times, and each player can choose which of the three arrays to use.
  • Each player rolls once, with DM choosing numbers until there are six numbers.
  • Each player rolls once, with DM rolling a secret number that the players can swap out for any one roll.
  • Each player rolls once until you have N rolls. The DM decides which two to drop. (N = 7, 8)
    • Alternately, let each play choose what to drop.
  • Each player rolls once until you have 12 rolls. The DM pairs off highest and lowest until you have 6 pairs. Each player can choose any three pairs.
  • Each player rolls all six abilities. Whichever set of six has the highest total becomes the array.
  • Each player rolls all six abilities. The players choose which set everyone uses.
    • Optionally, throw out highest and lowest arrays.
  • Each player rolls all six abilities. Any player can use any other player’s rolls.
    • The DM can roll a set as well to give an extra choice.
  • Each player rolls two sets of six abilities. Roll for order of choice, each player picks one of the sets (that no one else has picked yet).
  • Each player rolls six abilities. Determine order of choice and split the individual rolls among the players.
  • Each player rolls one die, keep top three, repeat six time. (best with four players, you can rotate a player who doesn’t roll)
  • Roll two halves of the array from two different tables. (infinite, not going there)

Finishing Sets of Rolls

  • Roll five abilities, the sixth number is N minus the total. (N = 70 or 75)
  • Roll five abilities, last ability is the top three dropped dice.
  • Roll five abilities, reroll four of the dropped dice for the sixth, max 18. (for mixed sets of dice)
  • Roll four abilities, DM gives a high and low (high = 18, low = 8).
  • Roll N times, choose the best six. (N = 7, 8, or 12, higher N for lower average rolls)

Rolling as Sets

  • 1d20 with a different table for each ability.
  • Roll two low rolls, two medium rolls, and two high rolls. (rolls = 3d6, 4d6, 5d6)
  • Roll N sets and choose which one to use. (N = 2 or 3)
    • Have the DM roll the N sets, all players choose from them.
  • Roll abilities in a 6×6 grid. Each player chooses a unique line in order (either direction).
    • DM can remove lines.
    • Player conflict removes a line.
  • Roll Nd6k3 for your least needed ability, (N+1)d6k3 for the next least, and so on up to (N+5)d6k3. (N = 3 or 4)
    • Class based or player’s choice.
  • Roll Nd6, keep the N-6 best dice, split them how you want into two abilities. Do that three times. (N = 6 or 8)
  • Roll Nd6, keep the N-9 best dice, split them how you want into three abilities. Do that twice. (N = 11)

Distributing the Dice

  • Each player gets N dice to spread among their abilities. Then they roll, keep three highest. (N = 18, 21, or 24)
    • Optional minimum of two or three dice.
      • Optionally roll 2d6 as 2d6+1.
  • Each player rolls N dice, and spreads them among their abilities. (N = 20, or 36)
  • Each player rolls N dice, keeps the best 18, and splits into six sets of three. (N = 24)
  • Every score starts at 8. Roll 7d6. Add to abilities as desired.
  • Roll 72d6. Count each number from 1 to 6. Those counts are your six abilities.
    • Redistribute points over 20 to the lowest abilities.

Ordering the Abilities

  • Player chooses which number goes to which ability.
  • Rolls are done in order for each ability: The first roll is Str, the second Dex, …
  • For arrays, roll 1d6 for each number to determine which ability it goes in, rerolling duplicates.
  • For arrays, roll 1d6 for lowest four, player choses last two.
  • After random ordering, you can swap any two abilities.


  • Reroll any number below N (N = 6, 7, or 8).
  • Reroll any number above N (N = 16).
  • Reroll any N or less on a single die. (N = 1 or 2)
  • Reroll any N or less on a single die once. (N = 1 or 2)
  • Reroll the lowest number until the total is at least N.

Change to a Specific Number

  • Any roll below N becomes N.
  • Any roll below N becomes N, and the extra points are subtracted from the highest ability.
  • Any roll over N becomes N.
  • Any roll over N becomes N, and the removed points are added to the lowest ability.
  • Lower a roll by 2 to increase another by 1. Can’t go below N. (N = 8)
  • Three of a kind under 4 count as 17, three of a kind over 3 count as 18
  • Four of a kind are 1 = 16, 2 or 3 = 17, 4+ = 18

Rerolling Sets

  • Reroll any set without one N+. (N = 16)
  • Reroll any set without two N+s. (N = 15)
  • Reroll any set with a total less than N. (N = 80 or 75)
  • Reroll any set with a total more than N. (N = 100)
  • Reroll any set with a total bonus less than N. (N = 2, 4)
  • Reroll any set with any roll <= N. (N = 8)


  • Roll a d6, a d8, and a d10. Abilities are 10+d6, 15-d6, 10+d8, 15-d8, 8+d10, 17-d10.
  • Roll six dN, label them A-F. Abilities are M+A-B, M+B-C, …, M+F-A. (N = 6 or 8, M = 13)
  • Roll 3d6 three times, min N – 18. Subtract them from N for the other three abilities. (N = 23)
  • Dice points: 3 = 18, 2 = 1d4+14, 1 = 8+1d4+1d6, 0 = 1d4+1d6+1d8 (infinite possibilites, not going there)
  • Draft: Each rolls six abilities, roll initiative, choose one in order, choose one in reverse order, repeat 3 times.
  • Roll 3d6 drop lowest. Get an array like 1, 2, 3, 4, 5, 6. Add array to rolls as desired.
  • Roll three stats, min 7, subtract each one from 25 to get the other three stats.
  • Start with low array, assign to abilities, roll abilities n times, adding 2 each time.
    • 13, 11, 11, 9, 9, 7, plus 5 +2s
    • 13, 13, 11, 11, 9, 7, plus 7 +2s
  • Choose two or more systems, and give players the choice of system to use.


Me, I like rolling dice. But I value simplicity and balance. I would probably go with everyone rolling one number, DM rolling until there are six numbers, and rerolling if there aren’t two scores of at least 15, and that being the array. I like the idea of randomly assigning those numbers to abilities, but I wouldn’t do that unless the players were into it. YMMV.