Some posts about random and semi-random map generation caught my eye recently. I almost never go by random generation alone in anything, but I certainly use it as inspiration. This post, while about computer methods for an as-yet unpublished video game, got me to thinking about how to create random maps in a way that doesn't generate strangely incongrous results.
I took the method described above, and developed my own manual procedure, as outlined below. It requires a little aesthetic judgment, but is still pretty fast:
- Start at the center of the map. Roll 3d8+1 to determine the size of the room, in squares. Do not worry about doors at this point. Immediately, we have two considerations:
a) Rectangles are the easiest shape to draw on graph paper, but can get boring fast. So you either need to round up or down to the nearest factorable number ( 4, 6, 8, 9, 12, 15, 16, 18, 20, 21, 24, 25 ), or you need to add alcoves and projections to get the exact number you rolled.
b) If the room is not square, determine which way the long axis runs with a simple d6 roll: 1-3 = the long axis runs north-south, 4-6 = it runs east-west.
There's an upper limit of 25 squares with this method. Borrowing a concept from Tunnels and Trolls, however, whenever you roll triples, note what size that would be and roll again. Stick these two smaller rooms together to make one larger one.
- Starting at the 12:00 position, roll another room in the same fashion. Place it somewhere above the first, spacing it out by rolling 1d4+1. This number is the number of squares between the top edge of the lower room and the bottom edge of the higher one. Place the room somewhere at this point; it probably looks better if the centers aren't perfectly aligned, but that's a matter of taste.
- Continue in a similar manner at the 3:00, 6:00, and 9:00 positions.
At this point, they're just a series of boxes with no relationship.
- Now, starting with the second room you created, repeat this process for every direction that doesn't already have a room filled. In this case, it means that the 6:00 position will already be filled.
- Iterate this process in order of room creation, if possible. Some rooms will have to be skipped because all of the adjacent spaces will be filled. Continue until your map is filled, or the number of rooms is otherwise to your liking.
- Start connecting the rooms with a Minimum Spanning Tree. Don't worry about the math. Basically, all it means for our purposes is, start drawing corridors connecting rooms that are two squares away, then three squares, etc., until you have a path that connects every room.
- At this point, there should be no looping paths, so add a few corridors to create them.
The room just north of the center was the one I started with.
The spaces enclosed by looping paths have been darkened; these
are important because they give multiple routes through your map.
- Add entrances and exits as you will.
Of course, populating the area is another matter altogether. When in a pinch, I'd recommend some of the stuff you can find at hackslashmaster. But I often find myself needing a layout for a scenario I've already anticipated, so this step isn't usually a big concern.