I previously wrote about devising some experimental procedures for generating a dwarven undercity. As I explained, I have a friend who plans to write an undercity generator, and I'm helping him a little by thinking about the procedures. I wanted to test my suggestions to see how well they did at generating a usable map. My initial ideas worked pretty well, although I developed some modifications while using them, and realized at least one more after I finished.
I started with a blank hexmap with the same layout as the Brimstone Mines from Black Powder Black Magic, volume 4, including a central borehole as the primary entrance. Since the procedures are intended to generate paths as you explore, I didn't want to just start in a corner, fill in a row, hit the carriage return, and repeat. Instead, I started at the entrance and followed a path. Actually I followed two paths, because I did this twice to see how different the layouts might look. The first time, I always went to the left-most unexplored hex; the second time, I went to the right-most unexplored hex.
I realized after doing this that I probably included too many "passageway" hexes, and that if this is supposed to be an under-city, then it ought to have some neighborhoods. I think I rolled more 2s on the left-hand path and more 3s on the right-hand, so if you wanted to use these maps, I would flip coins for each of the passages, and whichever comes up more (heads or tails), I would give the left-hand map more "neighborhoods" and the right-hand map more "passages".
The "passageway" hexes are the ones with small squares and little tunnels branching off them. The things that look like amoebas are "caverns". The larger squares with terrible maze-diagrams are "maze" hexes. "Special" hexes would involve rolling on a sub-table. I imagine these will be unusual, but not unique, terrain like parks, gardens, lakes, perhaps particular districts within the city. I drew them as mushroom forests because, (a) c'mon, of course a dwarven undercity is going to include mushroom forests as one of the possible special terrain types, and (b) they look better than a hex full of question marks. "Unique" hexes would also involve rolling on a sub-table, and I'm thinking these would be known locations, palaces, landmarks, and the like. I drew these as fortresses because again, (a) c'mon, and (b) the question mark aesthetics thingy.
As you enter a hex, roll on the following table to determine terrain type:
Regardless of the terrain type, roll 1d4 to determine the number of exits. If the hex has no blocked sides, it gets 1d4 exits in addition to the entrance you just drew. If it has any blocked sides, it gets 1d4 exits in total. Hexes on the edge of the map all have at least one blocked side by default. Place the exits at random from among the available sides, and consider any side that doesn't have an exit to be blocked. I found it helpful to draw in the blocked sides to remind myself not to draw a new connection there in the future. (When randomly placing the exits, you should never need to roll more than twice - either roll once or twice to determine which sides get exits, or roll once or twice to determine which sides don't get them.)
Earlier I wrote (what turned out to be) some complicated and unwieldy ideas about comparing the number of exits you just rolled to the available sides and using that to determine secret passageways and temporary blockages and etc ... ignore all that. If the number you just rolled is higher than the number of unblocked sides, then all remaining sides get exits. If the number you rolled is lower than the number of pre-existing routes into the hex, then just block the remaining sides off. Trying to use the normal path generator to make special passages was a mistake; those should be features that get determined by a separate table.
I also had some ideas about generating significant sites within each hex. Determining if those procedures are correct or not would take a different kind of playtesting and/or philosophical introspection about what the nature of the undercity-crawl should be like. I will say that I think it will probably be easiest to roll a d20 on a menu showing possible site locations within the hex. Rolling d4 to determine the number of sites, and then rolling d-something several times to randomly place them gets a little tedious.
The question of whether or not this is the correct size map would also require introspection to answer. A larger map lends itself to more horizontal exploration; a smaller map means that players are going to start descending to deeper levels sooner. But it's a question of preference, not true right and wrong. What do you want your city to look like and feel like? How quickly do you want your players to descend? The city probably does need edges though, unless you want it to possibly go on forever. With d4 exits per hex, you will never procedurally generate a map edge unless you start out with one drawn on the map already.
Anyway, the two maps I drew are below. I think the terrain-and-path generating procedure I've come up with leads to a decent variety of areas that are fairly interconnected without allowing total freedom of movement. You would need some actual playtesting to be sure, but I think this should feel more like being inside a large structure or network of caves rather than being in an open under-wilderness. d4 exits might even be too many, although I'd have to try this again with d3 to confirm that. The left-hand map was totally filled in. After the initial pathcrawl filled in most of the hexes, I just went back and rolled for the remainders. The right-hand path actually led to every hex on the map, and cut eight hexes out of the map by blocking off all their available sides.
Here is the map I drew by following the left-hand path:
And here's the map that came from the right-hand path:
I kept track of the two paths I followed while drawing, and you can see them here: