The design process I favor is to
Dungeon Design HowTo
(practical tricks of the trade)
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
- Make some layout sketches on paper until something looks cool.
- Create a rooms-file from this by editing an existing file.
- Use an existing stats-file and see what kind of dungeons are created.
- Keep improving the rooms-file and the stats-file until expectations are met.
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
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.
||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.
|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.