Blog

  • Procedural generation in Catacombs 51, my Ludum Dare 51 game

    Back in September I participated in the 51st Ludum Dare Compo, a 48-hour game jam. The theme for that event was “every ten seconds” - and I ended up creating Catacombs 51, a 2D roguelikeish shooter thing with procedurally generated maps. And now, ten months later, here is a write-up on how that procedural generation works. Partially as it’s a decently cool aspect of the game that I think it’s worth sharing, and partially because I’m doing other 2D procedural level generation stuff right now and wanted to give myself a refresher.

  • Patching between every possible combination of IWAD versions as fast as possible

    Not too long ago I added an automatic test suite to Omniscient, my graphical Doom IWAD patching utility. This test suite performs every single permutation of patches, and outputs the results in a JUnit XML file. Wired up to my Jenkins instance this allows me to spot when I break stuff pretty quickly, and is especially useful in determining when specific patches break.

  • Back from the dead

    Here’s one of my favourite Java tricks when working with native libraries with manual memory management. To free native resources in tandem with the garbage collector you can use finalize(), but finalizers run on a separate thread owned by the GC, which is problematic for some libraries like OpenGL where a context can be used by one thread at a time and it’s annoying. So this trick uses finalize to revive the object just so it can have its native resources deleted on the main thread before letting the GC actually take it:

  • Meta Quest Move Overlay

    By just pressing one button, you too can turn your Quest 2 into an unusable laggy mess:

  • Some Linux woes

    I’ve been playing with Linux on my main machine again, because Windows as a development environment annoys me and my MacBook Pro, while I love it, won’t be replacing my big machine any time soon for a number of reasons. I discovered recently that Ubuntu 22.10’s latest kernel breaks my sound card. This is my /proc/asound/cards on 5.19.0-31-generic: