Have you ever wondered how Spelunky's level generation works? This tool is a complete, working copy of Spelunky that has been
modded to just show you the first part of the level generation algorithm: generating the level's solution path,
before the spikes, arrow traps, enemies, and treasures are added to the map. (Probably only works in Chrome, for now, sorry.)
PRESS 'R' TO GENERATE ANOTHER LEVEL
SCROLL BELOW THE GAME FOR A DETAILED DESCRIPTION OF WHAT'S HAPPENING
The level is made of 16 rooms in a 4x4 grid. There are 4 different basic room types:
- 0: a side room that is not on the solution path
- 1: a room that is guaranteed to have a left exit and a right exit
- 2: a room that is guaranteed to have exits on the left, right, and bottom. If there's another "2" room above it, then it also is guaranteed a top exit
- 3: a room that is guaranteed to have exists on the left, right, and top
The first thing it does is place a start room in the top row. Room type doesn't really affect the start rooms, as it's a special case, but generally speaking
a start room is type 1 or 2.
Every time a room is placed, at first it is always a type 1 room (left/right).
Then it decides where to go next. It picks a (uniform distribution) random number from 1 to 5. On a 1 or 2, the solution path moves left. On a
3 or 4, the solution path moves right. On a 5, the path goes down. (If the solution path hits the edge of the screen,
then it immediately drops down and switches its left/right direction.)
Now here's the thing: if we move left or right, that's all fine and dandy because we've placed down a room with guaranteed left/right exits. But
if we've decided to move down, we need to change the room we're in! So the generator overrides the current room to be type 2 (which always has a bottom drop)
and we're all good to move down now.
Once it's moved onto the next room, it asks whether the last room we placed was type 2 (bottom drop). If this is true, then this room HAS to be
another type 2 bottom drop, or a type 3 upside-down T shape. Since types 2 and 3 have left/right exits, we can start the algorithm all over again.
If we are on the bottom row of room, and we try to drop, instead of dropping down, we place the exit room.
Now we have the entire solution path generated (what's in red above). The last thing we do is we add some random type 0 rooms to
every grid space that is not on the solution path. These rooms don't have any guarantees of exits on ANY side, which is why you sometimes see them
walled off.
If there are 3 or 4 type 0 rooms making a vertical line, then there is a chance that those rooms will become a snake pit. If we decide to make a snake pit,
we put down, from top to bottom, a sequence of room type 7 8 9, or 7 8 8 9, depending on the depth of the snake pit we want. (You'll notice that
snakes and jewels get placed manually at this point, since they're really part of the landscape and aren't randomly placed like most other enemies.)
That's it! In part 2 I show you how individual rooms get laid out (spikes, ladder/pit formations, etc).