• 7 Day Roguelike 2017: Shopping

    The main feature I implemented today was a set of menus that are displayed between levels. These include a shop for buying items (currently just guns), equipping guns to weapon slots (which can't be done in the field), and inventory management (just removing items from the inventory to make room for more items).


    An interesting consideration was integrating this in-between-level logic with the entity component system that the game is built on. Each level has a database of entities, but where is the player when they are between levels? It would make sense for items in the shop to be represented as entities, but which database do they belong in?

    I ended up adding an additional entity database for use between levels. When the player gets to the end of a level, all their associated components are moved into this database. The shop is set up in this database too, and entities in the shop can be moved between the shop's inventory and the player's inventory.

    The most interesting bug I encountered was the logic for switching the player between levels not understanding that some components (namely the inventory and weapon slots) depend on the existence of other entities. Both of these components store a collection of entity ids, which are references into the current entity database (ie. they can't span multiple entity databases). Thus, when moving the player between levels, any entities referred to by these components must also be moved.


    I added a shotgun, a machine gun and a railgun. The image above shows a zombie about to get toasted by the railgun. Also visible in the screenshot above is the current and maximum speed displayed on the heads up display.

  • 7 Day Roguelike 2017: Day 1

    After a day of development, I've implemented some of the basic functionality and created some of the artwork. You can control the speed of the van, and steer it provided that its speed is above zero. Zombies can be run over which insta-kills them, or they can be shot if they are directly in front of the van.


    The most interesting bug I encountered was the engine not dealing with entities moving out of bounds. The previous game I developed with this engine had impassible tiles around the edge of the map, but the map I'm testing with does not. Originally, you could fire a bullet off the right side of the screen and see it appear on the far left of the screen, one row below.

    Tomorrow I'm going to implement the in-between-level logic, consisting of buying upgrades/repairs/items, and switching the weapons currently equipped. I'm also going to start implementing a terrain generator.

  • 7 Day Roguelike 2017: Plan

    For this year's 7DRL I'm making a game called "Apocalypse Post". It will be a coffeebreak roguelike where the player delivers mail in a post-apocalyptic world.

    I'm writing the game in rust, using Howl as a starting point. My recent focus for Howl has been adding basic (but non-trivial) functionality to the engine (menus, saving, configuring controls) so I can take advantage of it for the 7DRL and focus on the high-level parts of game development this week.

    Features I plan to implement:

    • on each turn the player automatically moves forward
    • gun-based combat
    • various weapons with interesting tactical significance (e.g. rail gun shoots through everything in a certain direction, costing you a finite resource)
    • a shop for buying upgrades and equipment
    • procedural terrain generator suitable for automatic side-scrolling

    I'll try to post daily updates to this site.

    Follow development more closely on github.

  • Howl

    Howl is a turn-based tactical game, where everything has an alternate form that is revealed under moonlight. I started this project to teach myself the rust programming language, and to experiment with entity component systems.

    The game is still in active development. Check out the source code on github.

    Download latest builds:

    Note that the linux version of the game depends on sdl2, sdl2_image, and sdl2_ttf.


    • movement: arrow keys
    • fire: f, f again to fire, arrow keys move cursor, n/m switch targets
    • close door: c followed by arrow key