7DRL - Post-mortem
Well the 2020 7DRL challenge is over for me. House of Limen is incomplete as far as the challenge is concerned, but I’ll keep working on it.
I started the game from scratch using Python and bearlibterminal. I spent a little time before the competition boning up on bearlibterminal and making sure I could it working. I also spent time figuring out how to package my game as an executable so I wouldn’t be distracted by that. Overall bearlibterminal and Python were good to me during the challenge. FPS tanked later in the week, but I was attempting to do complicated things without optimizing it, so no worries.
I also played around making some pixel art tiles, but they weren’t great and I tried to avoid doing too much graphical stuff during the week.
House of Limen was intended to be a chaotic neutral exploration roguelike where you sought novelty rather than endless combat. It was based on a tabletop campaign I ran a few years ago. The primary feature of that campaign was the use of magic doors. Sometimes it was a normal door that - when opened - would open up to somewhere completely different. You could walk from a beer garden to the Plane of Fire and then onto a pirate ship in a storm. Roguelikes tend to be very samey and I liked the idea of shifting between spaces.
Thus the big draw for me was to figure out how to do portal rendering. I mean, I could just do ye olde stairs to shift between areas, but I like the visual style from Monsters Inc or Doctor Strange where you could see through to different areas. Surely it wouldn’t be too hard?
I managed to get it working on Thursday after three half-days of work on it. I’m mostly happy with it. There are some artifacts left: a portal in a portal doesn’t work even though it should. I had to make a decision on what to do at the edges of a portal frustrum when it’s technically part of two worlds to some degree. Luckily I just shadowed it out and it looks good. But you can approach portals at weird angles and see through geometry, which is weird.
I avoided creating an ECS system this roguelike, which helped me focus. I borrowed some general code from Bob Nystrom’s Hauberk code, but I had to convert it from Dart to Python. His blog posts on game loops and field of view calculation were both super-useful for me. I ended up using his shadowcaster for FOV as well as portals (sorta). Adam Milazzo’s extensive post on FOV and one on flood filling were also useful.
I’m proud of the little systems I made:
- Windowing system, so anything graphical was a laid-out bunch of hierarchical windows.
- Commands to actions system that was real easy to add new commands and actions to (a command being the connection between a key press and an action, and an action being an effect on the game world)
- Registration for world generation, commands, actions, tiles and colour palettes… This makes code cleaner and gives you the ability to config and create these things from JSON.
- Colour palettes, a simple way to specify a set of colours so the game had a consistent feel, but make it easy for other parts of the code to use it.
- Tile manager, a quick way to establish sensible tiles for the game. So you can refer to
wall-nerather than remember to use ┐ all the time.
- Map chunking. A very efficient way to record and access all the useful map information for a world. Good for serialization and implementing endlessly generated worlds.
Some of these took very little time, but felt like they were adding lots of power to the game development.
What did I learn?
You can’t make a game from scratch in a week, especially if some fundamental things are new to you. In particular, having a theoretically sound understanding of a game engine component isn’t enough. You need to have implemented it already.
Really, the 7DRL is not to write a roguelike in seven days but to assemble one. Use code, techniques and art you already have. And the fewer things you need to assemble your game, the better. People with games with very tight, small scope tend to do well.
I learned that in attempting to do a standard roguelike with a topological twist that this is actually a lot of things to assemble together. Not only that, but I had to write everything I needed to assemble, so it was two times lots of work.
I put in a monstrous amount of work into this challenge and it was still incomplete. I took time off work and put in a few 14 hour work days. Other days I worked whenever I could, but had to look after my family. I may have burned too much of my energy into the game, so by Thursday I decided to not strive for a finish but keep my health.
I had also thought about streaming my coding sessions, which ended up not happening. I don’t have an audience and I don’t have skills there, so it was just one more requirement of me. I did practice problem-solving skills when my portals weren’t working — I cracked out the graph paper!
I’m pretty grateful for the opportunity to try this. My family were very accommodating. The roguelike community have been very supportive of all the projects, so I’m keen to see what comes out of this year’s challenge.
I’m going to continue developing House of Limen because it’s neat having all my code work together and doing things.
Log in with itch.io to leave a comment.
This sounds very intriguing. *follows account for updates*
Thanks! I’m continuing to work on it. I will keep posting when I have useful updates.
I'd love to play at some point! Thanks for this post-mortem. My friend and I had a very similar experience this past week. We sacrificed a lot of time away from our families, stayed up way too late many nights, and took a little time away from work.
This is great insight into what it takes to succeed at 7drl: "the 7DRL is not to write a roguelike in seven days but to assemble one.".
We did a fair amount of prep work before the jam but it seems we could've done more. Like gathering art assets and music. We even considering building a physical prototype of the core game loop to test if it'd be fun. Maybe next year! That being said, we considered ours a success since it had the core loop and all of our major mechanics.
On to next year!
Thanks! I’m keen to play Flume! Best of luck with judging!