When I first started Kepler: Darkest Hour, it was written in Java. A simple 2.5d shooter with location-based damage that I had big ambitions for. Eventually I gave up on my janky 2.5d engine, and started hunting around for different engines to use to build Kepler. I made prototypes in Unity, Unreal, and Godot, but I wasn't satisfied with any of these engines. I then searched around for open source game engines, and decided to use the Quake 2 engine. The main thing that convinced me was the "Citizen Abel" series of Q2 mods by Brendon Chung. You probably know about Gravity Bone and Thirty Flights of Loving, but the early entries in the series are more traditional Quake 2 mods with proper combat sections. They beautifully show how action and storytelling can be done well in the Quake 2 engine. By late September of that year I had a small prototype and was pleased with the look and feel of the engine.

A screenshot of the oldest alpha version I have of Kepler.

An alpha version of Kepler from September 2017. Yeah I've been working on this for a while.

What I didn't know was how much of a pain old game engines can be to work with. Don't get me wrong, I enjoyed the process of learning how the Q2 engine works. Reverse-engineering someone else's code and figuring out how to work new features into it and bend it to your will is something I love doing. It just scratches an itch like nothing else. It's like the ultimate puzzle. But battling this engine's quirks and limitations have been a long and grueling multi-year process. Only recently have I been certain that I could pull off everything and maybe actually finish this crazy game.

Big Kepler Map.

Sorry for the spots, the lightingmap's kinda fucked here. This showcases the massive maps now possible in this ancient engine. The tiny spec of pixels in the middle, below the dropship, is an NPC the size of the player character.

Two screenshots of Kepler.

The same game, nearly 7 years apart.

One of the little things I like about developing games is making your own tools to assist development. I don't know, it's super nerdy, but making software that helps make other bigger software is just cool to me. However, making tools to circumvent weird archaic shit is a little less fun. Recently I've been adding custom animated character models to the game, and the way they handle animation in the Q2 engine is nuts. Each frame of animation must be listed in a C header file in the source code, along with what animation the frame belongs to, and which frane in that animation sequence that current frame is. Typing this all out manually was not an option, so I wrote a custom python script to generate all that data for me, letting me just type a few parameters and animation names before it pops out my animation header file.

A 3d model of a space roman in a skin editing tool.

This cool space roman model was made by my friend Micah. The tool it's featured in (which saved my game's ass) was not made by me, but by NPherno.

There exist tools to do this for Quake 2 models, but this game uses Quake 3 models with the Quake 2 animation format. Some weird shit I know, but it allows me to have higher poly models with full color TGA textures without having to write a whole new animation system or try and adapt the Quake 3 system. Oh, and to make matters worse, the blender exporter I use for 3d models doesn't properly write the path to the model's texture, so I have to open each model up in an old Quake 3 skin editing tool and fix them each time I export anything.

A real life picture of me

Okay I'm sorry, I'll stop. I know this was kind of ranty, but I just wanted to share a little of my frustration when working with old game engines. I could go on, but I shant.

I will post again soon, and I'm sure there will be much less seething.