So I've been slowly hacking on my roguelike, and it was time to write a map generator. At first, I wanted to just copy something from Angband or Sil, but, upon closer examination, it occured to me that they use an overly complicated method.
They first place all rooms and then try to connect them with tunnels. The tunneling phase is difficult and it can fail. So people hacked in some matrixes that check connections, floodfill algorithms doing the same and what not. It still can fail and then Angband aborts the generation and tries again, starting from scratch.
I used a simpler way instead, as follows:
Doing it like that (room-tunnel-room-tunnel...) is a whole lot easier than dumping all rooms and then trying to connect them (room-room-room... tunnel-tunnel-tunnel...) and guarantees a fully connected dungeon.
Then, of course, you can do some postprocessing, for example, building more tunnels (the algorithm has a tendency to create some far-flung rooms with only one tunnel leading to them). But that's an easy step.
So I figured maybe some of you would want to know that, in case you decide to write more dungeon profiles for Angband or something (hi wobbly ) Also, if someone has more thoughts about generating maps for roguelikes, let me know, while I'm at it
They first place all rooms and then try to connect them with tunnels. The tunneling phase is difficult and it can fail. So people hacked in some matrixes that check connections, floodfill algorithms doing the same and what not. It still can fail and then Angband aborts the generation and tries again, starting from scratch.
I used a simpler way instead, as follows:
Code:
1. Place the frist room. 2. Choose a place for (another) room. 3. See if it can be connected with tunnel to one of previous rooms. 4. If it can, place the room and the tunnel (and if not, then don't) 5. If not enough rooms yet, goto 2.
Then, of course, you can do some postprocessing, for example, building more tunnels (the algorithm has a tendency to create some far-flung rooms with only one tunnel leading to them). But that's an easy step.
So I figured maybe some of you would want to know that, in case you decide to write more dungeon profiles for Angband or something (hi wobbly ) Also, if someone has more thoughts about generating maps for roguelikes, let me know, while I'm at it