Posted April 16, 2022 by dcsw
Here’s a quick summary of my experience programming “Strange Slime Sewers” for the 2022 dungeoncrawlers.org jam.
Tools Used
Process
I started weeks ago by gathering screenshots, making a timeline, and outlining the manuals of the greats. Wizardry 6 (1990), EOTB 1 and 2 (1991), Might and Magiv IV (1992), Ultima Underworld (1992), Wizardry 8 (2001). I also explored some of the newer entries, just looking at screenshots to jog the memory on Legend of Grimrock, and discovering some games I didn’t know existed like the crawlers on Nintendo 3DS.
I then just took the gif on the jam homepage, the first level in Eye of the Beholder, and traced the perspective lines. I then generated a flat wall texture and built up a large gimp file with a different layer for each wall section. I should point out that zooperdan has “AtlasMaker” that will generate a lot of files for you: https://github.com/zooperdan/AtlasMaker-for-2D-Dungeon-Crawlers
I hope to use his tool next time, or to write my own tool!
Outlining a map
SSS loads a map.txt file into memory and then rotates it like a sheet of paper when you hit Q or E so that your field of view is always ‘up’.
I had originally designed a bigger map with treasures and different monsters, but had to remove those to make the deadline.
I was having trouble implementing a counter-clockwise “Q” rotation, so to save time I just re-used my clockwise function.
def rotate_map_counter_clockwise(m) return rotate_map_clockwise(rotate_map_clockwise(rotate_map_clockwise(m))) end
Each frame, at DragonRuby’s set 60 FPS, I grab the potentially visible chunk of the map. The potentially visible section of the map is then used to render walls and monsters.
I found this description and diagram very helpful – and I didn’t find it until about halfway through the Jam.
https://web.archive.org/web/20180313235716/https://eob.wikispaces.com/eob.vmp
A|B|C|D|E|F|G ¯ ¯ ¯ ¯ ¯ H|I|J|K|L ¯ ¯ ¯ M|N|O ¯ ¯ ¯ P|^|Q ^ in the picture is the party position, facing north. | and - in the above picture resembled walls. There are a total of 25 different wall positions. To render all the walls correctly 17 maze positions must be read (A-Q).
UI and Gameplay
After I had the dungeon walls and monsters rendering, I would take a screenshot of the current game state, scour the internet for game art, and then try laying it out in GIMP before loading it into the game.
I wasn’t set on turn-based, real-time, or something else going into the jam. I just iterated over what I thought I could do quickly, and what art I could find that would work.
I think the jam’s guidelines, that it has to have grid-based movement, that it had to have ways to affect player(s) stats, that it had to have a win and lose state, really helped guide me and create something that met these minimums.
Future Work
I think it would be great to:
Other thoughts
I’ve been wanting to create a game like Eye of the Beholder for a while. I am really grateful that this jam exists; the deadline and constraints are what helped me actually make something.
During the jam, I realized that the first-person-view dungeon crawlers are an evolution of the rogue-like game genre. Maybe this was obvious if you think about it, but creating a map and having an avatar “a” like the traditional “@” made the connection for me.
Assets used