• Zelda Screen Transitions are Undefined Behaviour

    The vertical scrolling effect in the original “The Legend of Zelda” relies on manipulating the NES graphics hardware in a manor likely that was unintended by its designers.


    Since I don’t have access to any official documentation for the NES Picture Processing Unit (PPU - the graphics chip), my claim of “undefined behaviour” is somewhat speculative. I’ve been relying on the NesDev Wiki for a specification of how the graphics hardware behaves. The PPU is controlled by writing to memory-mapped registers. Using these registers for their (seemingly!) intended purposes, the following effect should not be possible:

  • NES Emulator Debugging

    Making an emulator for a 1980s game console is an exercise in reading and comprehension. The work is mostly translating documentation into code. It’s oddly satisfying, building a model of an ancient machine, instruction by instruction, device by device, especially once it can start running real programs. You end up with an appreciation for the capabilities (or lack thereof) of hardware at the time, and out of necessity, end up intimately familiar with the inner workings of a piece of computing history.

    This post is not about making an emulator.

    It is about the nightmarish, overwhelmingly complex, and at times seemingly hopeless task of hunting down the parts of your emulator that don’t behave exactly like the real hardware.

  • Get Well Soon

    Get Well Soon is a turn-based tactical dungeon crawler where all abilities are cards. Maintain your deck as you fight through 6 procedurally-generated levels to reach the bottom of the dungeon and reclaim what you have lost.

    It is my entry in the 7 Day Roguelike game jam for 2019.


    Download links are below. The “Linux” and “MacOS (binaries)” packages contain the graphical version of the game, and a version which runs in a unix terminal.

    The “Windows” and “MacOS (app)” packages just include the graphical version.

  • 7 Day Roguelike 2019: Content, Plot, Polish, Publish

    I spent all of Saturday adding content, fixing bugs, play-testing, and balancing gameplay.

    There are now roughly 20 different cards and 3 different level generators. I added a win condition, a little flavour text, and organised the game into a sequence of 6 procedurally-generated levels, each configured to be more difficult than the last.

    Then I spent about 4 hours play-testing and tweaking.