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.
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.
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
finalizeto revive the object just so it can have its native resources deleted on the main thread before letting the GC actually take it:
By just pressing one button, you too can turn your Quest 2 into an unusable laggy mess:
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