DungeonMaker

Dungeon Design HowTo
(practical tricks of the trade)

The design process I favor is to
  1. Make some layout sketches on paper until something looks cool.
  2. Create a rooms-file from this by editing an existing file.
  3. Use an existing stats-file and see what kind of dungeons are created.
  4. Keep improving the rooms-file and the stats-file until expectations are met.
The last step takes the most time. You have to look at a lot of dungeons in order to find the flaws in your design. After you get the basic layout right, you should look whether wall tiles of a specific generation are over-represented. This unbalances the dungeon, giving it a uniform and boring character. If in several consecutive runs the same generation dominates, you should reduce the maxAge of its Crawlers or their number (by reducing spawning probabilities in the previous generation, or increasing lateSpawnProb).

Another thing to look for is whether there is a tendency to form straight corridors along the outside wall of the dungeon, a design flaw that can easily creep into DungeonMaker files. There are several possible remedies: Introduce protuberances into your rooms file - raise openAtStartProb in the relevant generations, if it is not already at 50% - reduce straightSpawnProb in the previous generation, so that fewer Crawlers run in the space near the walls, which gives them more room to change direction - or introduce new design Crawlers (with delay 9) coming out from the walls where you want to disrupt wall following behavior. The last option is clearly the most potent, and will work under all circumstances.

Once you manage to avoid outer-wall-following, and have a sequence of Crawler-generations with differing behaviors, none of which dominates the dungeon, you will generally produce dungeons with a pleasing character. In order to introduce variety and challenge into the designs, here are some design patterns I have found useful:

Regular spacing of stepLength and corridorWidth : When the corridorWidths of succeeding generations come in sequences such as (11 , 5 , 2), then the Crawlers of later generations are able to build walls down the center of the corridors of their predecessors. When this happens a lot, this gives rise to very intricate dungeons. When in addition to this the stepLengths are chosen as in (6 , 3 , 3), the babies of the first two generations will be spaced so that their distance from each other is the corridorWidth of the next generation. This has been used a lot in the example files.

Crawler Pairs:
<b>P</b>air of Crawlers Imagine this is a dungeon where you start at the left top and have to find your way to the right bottom. In generation 0, a pair of Crawlers is placed in your way - one will join up with another wall (and probably block your way), the other will leave an opening, but which one does which is determined randomly. Even if you go through dungeons created with this rooms file many times, you will not know whether to turn left or right.

Random Timing:

random-timed Crawlers
Again, imagine this is a dungeon where you start at the left top and have to find your way to the (pictured) right bottom. Near the exit, two open-ended Crawlers with random delay values are posted. For both of them, the Forward and Direction values are identical (and pictured). In all likelihood, one of them will start out earlier and block the other's path. Assuming the Crawler starting off on the right wall wins the race, this is what will happen: The one starting off at the bottom will be blocked by a wall running towards the left, and will at most times follow it with a distance of corridorWidth - but when the first Crawler makes a turn to the left, the other one cannot do that and will terminate. This will leave a narrow opening somewhere far from the exit of the dungeon that one has to find in order to get to the exit... and whether this opening will be near the left bottom of the dungeon (as in our example) or near the right top (as would happen if the bottom Crawler were to start first) is determined by chance.

Combining rooms with hand-placed wall tiles:
Example files rooms4 and rooms5 contain elaborate rooms that have been created by placing several rooms , then combining them into one large and complex edifice with hand-placed wall tiles. rooms5 also makes use of the door-decoration feature of the DungeonMaker, which can be used to create fancy effects with little effort.

Using predetermined random seeds: Many dungeon designs (combinations of rooms- and stats-files) result in dungeons of varying quality, particularly on small maps or when many design Crawlers are used. In this situation it is possible (and probably advisable) to try out a large number of random dungeons first, and to take note of the random seeds that produce the best examples. The program that makes use of the dungeons can then be written so that it starts off with a number of dungeons based on such hand-selected seeds.

Design Crawlers with changeDirProb == 0 : Such Crawlers will only change direction when their forward path is blocked. Three situations can arise: They can be blocked altogether and die, they can have open paths to both sides, or only to one side. By placing wall tiles or columns in just the right places, we can choose which of these situations arises where, and thus send Crawlers on predetermined tours, which can include any number of corners and T's where the Crawlers can go two ways. The X-files roomsX and statsX (which you can use with the command line option dungeonmaker -rX) make use of this design principle: The Crawlers that start out on the North and South walls opposite each other will encounter 3 hand-placed columns that allow them to go left or right, and after that will bounce off several obstacles in a predetermined fashion. Thus with the X-files, one of four different types of basic dungeon structure is chosen randomly each time the DungeonMaker is run.

Use generational walls in your program: If you play around with the program some, and try to find the path from the dungeon entrance at the left top to the exit at the right bottom, and switch the generational walls feature on and off while doing that, you will find that it becomes much harder to find the way in a dungeon where all walls look the same. I suggest you use different wall graphics to display older, structural walls, and walls built later... if your players initially do not know the significance of this, it is a subtle clue that they will pick up slowly, and that will allow them to acquire dungeon traversal skills that are dramatically better then those of newbies - always a rewarding experience. In order to make things not too easy, I would suggest using fewer wall types than generations, and representing generations 0 and 1 with the same graphics.

More design ideas and patterns: I have not really spent a lot of time designing dungeons, and though I wrote the DungeonMaker I keep getting new ideas about how to use the parameters in the rooms- and stats-files as I write this. If you come up with you own cool ideas and patterns, please share them with me, and I will include them in a future version of this manual.

previous page            contents            next page