Software

About me:

  • 15+ years experience working with C and C++ (older standards).
  • Experience with providing support to users, fixing reported issues, and reviewing code.
  • A focus on real-time 3D graphics and game engines.
  • Released software for Windows, Linux, and macOS with thousands of downloads.
  • I like to help and make software work correctly.

The main software I’m currently developing is Clover’s Toy Box.

[Read time: About 10 minutes]

Private Projects

Clover’s Toy Box is a project I started in 2017 to develop a game engine from scratch. It supports 3D rendering, collision, networking, audio mixing, and mouse/keyboard/gamepad input. (None of these are complete.) It also contains a model viewer using Qt 5 and the same renderer as the game engine.

It can run in a web browser and connect to game servers. I implemented WebSocket support in the server based on the specification and validated it using the Autobahn testsuite.

There is development in many areas but the main focus is lower-level systems. From a player perspective, it’s very incomplete. It’s a slow burn project that requires a lot of patience to build it up from nothing.

Platforms: Windows, Linux, macOS, Android, Web Browser, Wii (homebrew), FreeBSD.
Technologies: C programming language, Simple DirectMedia Layer (SDL), OpenGL (desktop, OpenGL ES, and WebGL), Qt 5 (for model viewer), GNU Make, Git.


TMNT Fangame (2006-2008) is a modified version of Sonic Robo Blast 2 1.09.4 (Doom engine) that I developed. It could be built as 3 different projects; a melee combat game inspired by a certain franchise, enhancements for a remake of Sonic R, and misc changes for regular SRB2.

There was a lot of random experimenting, remaking features from games, porting features from other Doom engines, and various bug fixes. I remade some of the software renderer effects in the OpenGL (fixed-function) renderer. I wanted to use it as the main renderer with 3D models. I created some sparse test levels, sprites, and models for a game but it ultimately didn’t result in a complete game or mod I wanted to release. It was a wild year and a half.

I wanted true 3D and 32-bit color opposed to the flat ground and sprite filled 8-bit palette world of Doom so I moved on.

I programmed things for a few public Sonic Robo Blast 2 mods around 2007/2008. For a Super Smash Bros-like mod I added various features (I don’t really remember the specifics); the core gameplay was by other people. For SRB2 Riders I created reverse item throwing in Mario Kart mode.

Platforms: Windows.
Technologies: C programming language, OpenGL (fixed-function).

CluePad (2007-2009) is a small Nintendo DS homebrew application to make it easier to take notes while playing Clue. It tracks your cards in Clue and tracks all guesses made by players. This allows it to automatically determine cards that players have, may have, or that no one has. Though by “tracks” I mean you have to manually input your cards and all the guesses. The menus for selecting cards have the card graphics but it was too slow in practice to keep up with the game. (This was never a successful way to win Clue.)

Platforms: Nintendo DS (compiled on Windows).
Technologies: C++ programming language, PALib, GNU Make.

Shell Engine (2008) was an attempt to create a 3D game engine because I couldn’t find a 3D engine I liked / worked. It included code from various tutorials for text rendering, Quake 2 and 3 data formats, etc. I added splitscreen and an original menu system. I eventually merged in Cake engine which is a full reimplementation of the Quake 3 renderer and collision. There was no network multiplayer or real game logic aside from player movement. Eventually I broke the collision and decided to move to ioquake3—which I was now able to compile months later. I wanted to make a game, not an engine. I was in over my head.

Platforms: Windows.
Technologies: C++ programming language, OpenGL (fixed-function), Code::Blocks build project.

OpenEmpire (2010) features isometric rendering in the style of old RTS/tycoon levels and cel-shading on MD2 models. It was based on Shell Engine but reorganized and removed Cake engine. It lacks game logic, collision, networking, and menu. There is only a small level with a single texture with shading on slopes.

Platforms: Windows, Linux.
Technologies: C++ programming language, OpenGL (fixed-function), Code::Blocks build project, Mercurial (HG).

Angel Communication (2013-2014) is a chat bot that supports interactive terminal input and running as an IRC client. I got sidetracked in Natural Language Processing rather than making an interesting chat bot. It’s all just manual text handling. This was mainly learning computer networking and English sentence structure. While writing I still often think “how do you parse this” and rewrite sentences to be less convoluted.

Platforms: Windows, Linux, macOS.
Technologies: C++ programming language, BSD sockets, CMake, Git.

Quake 3 Projects

Quake III Arena is a first-person shooter that was released in 1999. The source code was released under the Free and Open Source GPLv2+ license in 2005. It seemed like the best option in 2008 when I was looking for a game engine to use.

The development was initially driven by Turtle Arena. It was a continuation of ideas that I tried to make in SRB2 but very focused on actually making complete game data with minimal game play changes. (Opposed to remaking features or game modes from other games.) Ultimately it has some general engine/game improvements and just-okay assets but it’s not very interesting. It’s a different coat of paint on Quake 3 with poorly made melee attacking and uninteresting levels.

My primary project based on Quake 3 is the Spearmint engine. Spearmint is a heavily modified version of the ioquake3 engine that has new features and improvements; including splitscreen local multiplayer, aspect correct widescreen, and high resolution text.

I reviewed the types of changes made in many games based on Quake 3 and tried to make it possible to create complete standalone games (at the scale of commercial games based on Quake 3) by only changing the platform independent game logic. This included things such as moving a lot of code from the engine into the game logic, adding the ability to change networked fields in objects, and loading the game window title and icon from a file.

Spearmint started within the Turtle Arena code base in 2009 but split off as a separate project in 2011. It replaced Turtle Arena as my primary focus. I moved to focusing on general engine/game improvements with Quake 3 at the forefront instead of Turtle Arena.

In 2018 I moved my main focus to developing a new engine in Clover’s Toy Box. This was largely a result of limitations with the Quake 3 renderer. I wanted dynamic bone joints (which needs GPU bone skinning for better performance), the ability to add GLSL effects, and OpenGL ES 2 support to target Android and other platforms. I also had a general desire to overhaul most of the engine and game logic. Unlike Shell Engine in 2008, I now had the knowledge, patience, and ability to learn to actually develop an original engine.

I’ve made significant contributions to ioquake3; an engine compatible with Quake 3 (final release, v1.32).

My projects;

All of the projects are based on ioquake3. Lilium Voyager and Lilium Arena Classic are also based on ioEF.

I’ve had direct involvement programming for or submitting patches to various Quake 3 related projects; Q3Rally, iortcw, ET: Legacy, XQF (server browser), Reaction, Unvanquished, Navy SEALs (ET port), and World of Padman.

Indirectly (via ioquake3) my work is also in OpenJK, OpenArena, Smokin’ GunsMonkeys of Doom, and probably others. Indirectly (via iortcw) my work is also in RTCW Coop and RealRTCW.

Platforms: Windows, Linux, macOS.
Technologies: C programming language, Simple DirectMedia Layer (SDL), OpenGL (fixed-function and shaders), GNU Make, Git.

Quake 3 Utilities

Maverick Model 3D is a 3D model editor based on Misfit Model 3D. It started as patches for Misfit Model 3D in 2009 for supporting features for Turtle Arena. Maverick has better support for Quake 3’s model format (.MD3) and exporting Quake 3 player models but it’s also usable for other games and model formats.

Platforms: Windows, Linux, macOS.
Technologies: C++ programming language, Qt 5, OpenGL (fixed-function), Autotools, Git.