Long Over Due Status Update

It’s been awhile since I’ve posted anything about the projects I’m working on, due to life happenings and well, working on the projects.


ioq3ztm, the engine project I started by porting Turtle Arena features to a new ioquake3 source, has been renamed to Spearmint. It easier to say and makes it clearer that the project isn’t limited to ioquake3 or my contributions.

The license for Spearmint has been changed to GPLv3+ (with additional terms from the Return to Castle Wolfenstein, Wolfenstein: Enemy Territory, and Doom 3 source releases). The reason is to allow code to be included from the previously mentioned games. I dislike the fact that there are additional terms (as I had mentioned before), but the terms themselves don’t bother me. Now that Doom 3 has been released with the same license, it’s less of a concern to me. (I wouldn’t avoid using the Doom 3 engine because of it’s license.)

I’ve added various new system calls to the moding APIs in Spearmint from Return to Castle Wolfenstein and Wolfenstein: Enemy Territory, from various miscellaneous file access (rename, delete) to global fog and water fog support. (I’ve spent to much time with the fog code, but still have some things left…)

In the process of porting features I’ve been look at how things are done, not just porting everything over line for line. Global fog and water fog are programmed quite different in Spearmint, though the actual fog rendering is basically the same. In RTCW and WolfET there is a system call to set the fog, trap_R_SetGlobalFog. It has an option to restore to default global fog and set a linear fade duration. In Spearmint there is four player splitscreen. I want each player to have separate global fog, so doing it the RTCW/WolfET way wasn’t appealing. Instead I added a trap_R_GetGlobalFog to get the default global fog and pass the fog values in the refdef_t (a data structure that holds info for rendering the viewport).

To make things more confusing, RTCW and WolfET have completely separate global fog methods. I’ve tried to combine them in Spearmint, though the RTCW GL_FOG method is currently broken. WolfET requires the map to be compiled with global fog, Spearmint works around this adding global fog at run time allowing global fog / water fog on any map.

I fixed a TODO from Return to Castle Wolfenstein, yay! Now “waterfog R G B 0” (where R, G, B are numbers in range 0.0 to 1.0) in a shader uses global fog density / depth for opaque as intended (noted in both the RTCW code and shader files). Spearmint doesn’t just merge the code bases, it aims to provide the same (or improved and/or expanded) features. /end-marketing-campain

I’m planning to have a released version / long term support at some point.

Turtle Arena

The license for Turtle Arena (development version) source code has been changed to match Spearmint. The Wolf:ET weather effects (present in Turtle Arena 0.4, removed in 0.6) can be readded now without worrying about licensing.

Development has slowed down in the Turtle Arena code repository as I’ve been working on Spearmint lately. I’m thinking about doing a Turtle Arena 0.7 release after I merge all (or just about all) of the Turtle Arena engine changes into Spearmint.


Progress has been made on the game design for Extraordinary Beat X (the successor to Turtle Arena). The four main playable character designs are almost considered done. Though I haven’t thought much about the design in the last few months.

Untitled FPS

I’ve been thinking about putting together data for a Q3A-like game using Spearmint. Not much to say about it currently.


I fixed various bugs, including player model field of view distortion in widescreen UI and “follow <name>” command not finding clients whose name begins with a number.


Q3Rally is a racing game based on ioquake3. I fixed loading custom license plates (so names on license plates work again) and made the mini map always be top down view (some times the car goes spinning through the air, mini map rolling so you can’t see the map is not cool). Updated it to the latest version of ioquake3 and did some other stuff as well.