Skill Issue logo

Skill Issue

Subscribe
Archives
March 14, 2025

Post Mortem

Last week I was (mostly) participating in the 7-Day Roguelike Challenge. You may be able to guess from the subject of this email that I wasn’t especially successful.

I did make something. That something could be loosely called a "game", but only if you don't require that something be fun or have a goal to be called a game.

Basically all you could do in the game is walk around the map. A goat would wander around the map as well. There were walls, too.

I joined the challenge to have fun and try my hand at some different kinds of problems, and in that sense it was a success, so I want to focus on what I learned.

In the lead-up to the challenge I learned a lot about Entity Component Systems, an architecture that many games and engines use. The ECS pattern helps with two distinct problems.

  1. Game engines have a lot of different kinds of dynamic entities and those different entities share logic in ways that makes traditional inheritance tricky. ECS systems allow you to attach/detach "components" to/from entities, using composition to build up their behaviour.
  2. Game engines have a lot of different systems (graphics, physics, damage/health, score) that need to act on different sets of those entities. ECS architectures keeps the sets of entities that a system depends on up-to-date and colocated in memory for efficient access.

I ended up writing my own shitty ECS in Lua for the competition. I call it "shitty" because it's not especially efficient and lacks a bunch of features that a more robust ECS would have, but it actually served me fairly well. I got to experiment with different ways of splitting up my components and how to extract functionality into isolated systems.

I also got more familiar with various game dev stuff. I'd not used LOVE in ages and I was pretty rusty. This definitely held me back. I spent a solid chunk of my time reading the LOVE forums and documentation, trying to figure out the right way to do certain things.

Finally, I was exposed to the sheer complexity of roguelike games. A lot of people do the challenge using a more robust roguelike skeleton or an existing game engine. I had neither, which meant I was coding everything from my map structure to collision detection (and FOV and pathfinding and other things, if I'd got that far) myself.

It's probably worth either spending some time making sure I have that stuff ready to go if I want to do this challenge again. Alternatively, I could just use one of the many engines already out there.

Alternatively, maybe I'll spend some time with the terminal-based roguelike I started writing many years ago. That might quench my creative programming thirst.

In the meantime, I've got lots of open source and client work to catch up on now. Time to get my brain back into Rails-mode.


I'm super behind on listening to new releases. My RSS reader tells me I have 70+ albums that warrant my consideration. My recommendation for this week is easy, though. I haven't slept on Spiritbox's new release, Tsunami Sea.

Spiritbox is from Victoria, so it's cool to see them seeing continued success. Check out Fata Morgana from the new record.

Don't miss what's next. Subscribe to Skill Issue:
GitHub Bluesky X LinkedIn
Powered by Buttondown, the easiest way to start and grow your newsletter.