Categories
Eldritch 2

Dev’s Journal – 5 Sep 2025

Eldritch 2 is coming to Steam! Please wishlist it here.

Work continues on building Innsmouth dungeon rooms. I don’t have much interesting work to write about today; it’s a bit of a grind right now to get all the rooms finished. Having finished the temple set last month, I’ve moved on to docks and caves.

These rooms take a bit longer to build than the rooms in the original Eldritch did, because they’re composed of static meshes and AI navmesh instead of Minecraft-esque voxels. But it’s still pretty fast thanks to my custom tools. I mentioned this briefly when writing about my Rosa engine a couple of years ago, but I don’t think I’ve ever explained it in detail.

Back in 2015, when I rewrote my engine for Slayer Shock and switched from a voxel-based world to a static mesh-based world, I was aiming for a slightly higher-fidelity visual target than I’d attempted before, and was inspired by the modular approach of Skyrim‘s art and level design. But I found myself stretched thin on that game, and I’m not much of an artist. And a few years later, as I started working on some game jams, I ended up just making a set of basic building block meshes: boxes and prisms of various fixed sizes, to quickly build out simple blocky worlds. And it worked fine, but I still missed the simplicity of building voxel worlds in Eldritch and NEON STRUCT.

So about 3 years ago, I decided to revise my level editor and world generator to automatically create static meshes of any size, in a variety of convex shapes. I first utilized this in the simple world of Li’l Taffer and continued to improve it, eventually adding support for more complex non-convex shapes like staircases in Schloss der Wölfe. Since then, I’ve also implemented a slew of texture alignment tools for Eldritch 2, because I want it to be a little more polished than my jam games. But it’s still fundamentally the same idea from 3 years ago: I just draw a box in 3D space (defined by 2 endpoints) and pick a shape to fill it, and the code does the rest to generate the visual mesh and collision hull(s). And because the geometry is programmatically generated, these primitives can be freely resized, which makes it quick and easy to revise levels as needed.

If I were starting my engine from scratch, I’d probably use a tool like TrenchBroom instead of writing my own level editor. But I’ve been using my own tools for over 12 years, and the workflow is second nature to me now. My custom tools have been able to evolve with the needs of each game I’ve made, and I enjoy the work.