During my first 7DRL the only dungeon generation algorithm I had was a variation of this roguebasin article. For the next two 7DRLs I kept the same algorithm, but only because I ran out of time to make a new one. For GnomeSquad, this wasn’t as much of an issue, since caves fit the theme of a bunch of Gnomes adventuring deep underneath a mountain.

For RoboCaptain, this was more of a problem. I knew I wanted the player to control a murderous robot, but what the hell would one be doing in a cave? (Secret rebel human lair under a mountain of course)

Not that these things matter very much, but I want to be sure I am not unprepared for my next game (whatever that is…), so I have been working on dungeon generation. I have read and re-read Andrew Doull’s series of articles on dungeon generation in Unangband, and want to put some of those ideas to work.

This is what it looks like so far:

The blue rooms represent a ‘region’, which correspond roughly to Andrew’s room types construct. These could be a special area of the level, or an area that a certain monster hangs out in, or nothing (or anything!). I’m trying to build a system that can handle this kind of thing from the ground up, without getting bogged down too deep in trying to build the “perfect” dungeon.

I also put some decent effort into the display code (seen above). This is only for my own personal testing. This added a slight overhead to the actual dungeon generation code, but I am trying to take a page from Bret Victor’s book and invest in some great and easy visualization features, to make my life easier. I’m not saying I will end up with anything nearly as slick as his tools, but so far they are a nice step up from the usual crude text file dumps.

The actual code is in python but serves output as JSON, since my next game will run in JavaScript, I think this will vastly increase my flexibility. Maybe if it ends up being good enough I can share it as a web service, or at least as a cool visualization tool online. (Although the “market” for a) JavaScript roguelikes that b) don’t want to use their own dungeon algorithms is probably zero)