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, …).

This is an outline of my idea for a campaign based on some ideas I got from Matthew Colville. The basic idea is that you want to allow the players to play the fantasy they want, and since you are putting in a lot of the work as a DM, you want to put in your ideas as well. To do that, you let the player’s help build the world by building their characters.

You start with a port city on an inland sea, like the Mediterranean. This allows for a lot of different cultures to be interacting with each other. This is called Shareport, or something similar. This will be the PCs home base to start with.

Session Zero

Session Zero is very important in this sort of campaign, because this is where the birth of the world happens. It is very important to go into this without any thought as to characters. Having a general idea of what fantasy is to you is fine. The beginning of Session Zero is about general structure for the world. General ideas about what fantasy is are perfect for that. Specific ideas about characters are too narrow for that, and can constrain the world too much.

Ground Rules

First, the DM lays out some ground rules. It may be good to communicate these rules to people before session zero. As an example, the ground rules to be used in the first Shareport campaign would be:

  • No dragonborn or tieflings, but lizardfolk, kenku, and tabaxi are allowed.
  • No artificers.
  • No psionics.
  • No guns.
  • Gods oversee the world.
  • Much of the world is untamed.
  • The world is ancient.
  • Conflict shapes the world’s history.
  • The world is magical.

You will note that the last five are the core assumptions of D&D 5th Edition. And note that the rest of  D&D 5E is assumed as well: all of the other classes, races, spells, and so on.

The DM then asks the players if any of this really rubs them wrong. In each player’s general idea of fantasy, does any of this really grind hard against other assumptions? If it does, of if a player strongly feels something else needs to be said, then that is hashed out first. The DM should be ready to compromise on some of these points, and the players should try to work with the DM.

This is also a good time to bring up any limits on themes in the game and player behavior that anyone in the group desires.

Party Background

Before getting into the characters themselves, it is good to figure out how they got together. That way, it can be more easily built into the characters’ backgrounds. Traditionally this is something that the DM comes up with, to help funnel the characters into the first adventure. Here there is no first adventure, so it should be more driven by the players. They are going to be the ones who are going to have to fit this into their character.

Ability Generation

To enhance the creativity, character abilities should be rolled down the line. This means that the players have no control over which number goes into which ability. This keeps players from bringing a character idea to the table. Note that the DM needs to take the final result into account. If party roles are missing because of the way abilities were generated, the DM needs to keep that in mind when fleshing out the world.

There are two ways to do this. One is to roll six numbers and place them in order in strength, dexterity, constitution, intelligence, wisdom, and charisma. Whatever rolling mechanic you want works. Another way to do it allows for arrays, or even point buy, to be used. Once the six numbers are determined, roll a d6: 1 = strength, 2 = dexterity, and so on. That’s the ability that gets the lowest number. Then roll again, rerolling any duplicates, to place the next lowest number. Continue until all numbers are placed.

The initial Shareport campaign will used a group rolled array. Each player rolls 4d6 drop lowest, and the DM rolls enough times that there are six total numbers. If there are not two numbers of 14 or higher, reroll. If any number is less than 8, reroll if the majority of players vote for it, DM breaks ties. The six rolls are the array everyone uses, and roll to determine which ability each number goes to.

Character Creation

Now you create your characters. The race and class don’t really matter much in terms of the world. But as each person builds their background, that background helps build the world. For example, one player might want to be the son of a man who was a member of the King’s guard. That means there needs to be a King somewhere in the world, and that king has a special guard.

Players should try to keep things on the general side rather than on the specific side. That makes it easier for the DM to fit everything together. For example, saying you want to be a Fedaykin from Arrakis is a problem. It brings along a whole host of assumptions and baggage. Saying you want to be an elite fighter from a desert region run by a religious messiah is much better. It slices out a core piece that can be fit together with other parts of the world.

Characters should also be designed with plot hooks, like wanting revenge for your mother’s death, or looking for a lost comrade in arms. These should be long term plot hooks, not things that need to be resolved in the next week. Every character will have some, and the DM can’t work them all into the first adventure.

All of this should be done in consultation with the DM. The DM is going to have to piece it all together, and grow a campaign out of it. Preferably, this should be done with the other players as well. This allows the players to work together, building pieces of the world together with the DM. There does need to be a back channel of communication with the DM. A back channel allows for players to have secrets from each other, and the DM can constrain the world building being done openly to account for those secrets. Just keep in mind that the more secrets you have, the more complicated things get for the DM.

Not everything needs to be related to a specific character. In the beginning of Session Zero, the goal was to be general. With character creation we start to get to the specifics of the world. It’s okay to as the group things like “Can we have a forest full of dinosaurs?” or “Can there be flying ships in this world?” But work as a group to define these things, and be sure to leave space in the world for things the DM is going to need to create to flesh things out.

The Map

While the world building is going on it may be handy to have a rough map available. To start out with, it will just have the borders of the inland sea, and the location of the port. As landmarks and nations are created, they can be added to the map. Keep in mind any assumptions about the world set out in the Ground Rules. For example, if much of the world is untamed, you need to make sure there is space on the map for the wild areas.

The First Adventure

The DM may come up with some ideas about the first adventure during session zero. Indeed, if they are an improvisational type of DM, they could just start the adventure right there. Other DMs may want to wait until Session One to start the adventure. This will give them time to bring all of the elements together, and prepare the adventure for play.

Another possibility is for the DM to have a general prepared adventure for the players. It should be something short with a clue at the end. That clue would be based on the plot hooks from character creation, and would then lead into the full campaign.

Start, Don’t Finish

The DM is going to have to take all of the bits and pieces from the players and flesh them out so that they work with each other. This may involve building things beyond what the player’s talked about in order to make those connections. What the DM should be careful about is going to much beyond linking things together. Try to build only what is needed, so that there is room for growth. You may need this room for growth as new players come into the campaign. Another good use of it is to turn wildly inaccurate theories that the players create into actual things they have to deal with.

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.