Modding the Quake II Remastered source code

In 2021, a remastered version of the original Quake was released on the PC and consoles, a co-production of id Software, Night Dive Studios and MachineGames. 2021 was the 25th anniversary of the original Quake game so it seemed fitting to spruce it up a bit. It was announced during QuakeCon 2021, one of the three instances of the convention where it was virtual due to the pandemic and it was nice seeing them figure out a way to get people playing Quake at QuakeCon again.

It seemed logical that during QuakeCon 2022 they would announce a remastered version of Quake II, seeing as how 2022 was the 25th anniversary of that one, but they didn’t. With some of the clues leading into the event, such as Sonic Mayhem the composer of the soundtrack talking about going back and finding the original files for the soundtrack, and the theme in the shirts and merchandise being green (same as the Quake II logo) I theorized that the plan was to release a remaster but it got pushed back for some reason.

QuakeCon 2023 was the first in-person version of the event since 2019. I went to it and brought my PC, same as every year until the pandemic happened. During the event, they announced the Quake II remaster. Same basic deal as the other one – coproduction of id/NDS/MG, released for consoles, etc.

Something wholly unexpected, however, was the release of the game source code.

In certain corners of the gaming Internet, Quake II is a contentious game. A number of people didn’t like it as much as the original game, and more than a few people viewed it as an online-only game, enjoying the multiplayer games and the mods (which likely factored into why id Software made Quake III: Arena eschew the traditional campaign in favor of a multiplayer focus). Mods worked a bit differently in Quake II however.

The original Quake game compiled mods into a platform-agnostic file called PROGS.DAT. This is sort of like what a DLL is in that it’s dynamic code loaded in at runtime, but the original game was developed on a NeXT machine and shipped for DOS, they needed something generic. It did have the nice side effect of making mods be cross-platform by default so when the game got ported to things like Classic Mac OS or even the Amiga, everything came along for the ride. And at least for single player mods, they even worked most of the time with the remastered Quake.

However Quake II switched to using Windows for development and did not ship for DOS, or any other platforms for a while (the Mac version, for instance, didn’t come out until 1999). They switched to using DLL files which were not cross platform. Even today modern source ports use the platform-specific dynamic library files (so, .dylib for macOS, .so for Linux, etc.) It seemed logical that mods made for Quake II would not work with the remaster.

Which is where this source release comes into play. This is the equivalent of the mod source code for the original game. My guess is that they’re cognizant of how important mods were to the original game so they’re putting this out there, which like I said is still wholly unexpected but I’m absolutely applauding the maneuver. Sure it’s a game from 1997 but any modern game source release in 2023 I’m in support of.

One of the features of the modern re-released versions of id games like DOOM and Quake is that they have this curated section of mods and so forth that they allow you to run in the game. The PC versions of the games can, mostly, load whatever they want but on consoles it’s only what’s allowed by the game developers. By and large, game console development, or at the very least any sort of customization, is inaccessible to the end user. Quake shipped with the ability to play through the Nintendo 64 version of the game, which was basically the same as the PC version except the levels were scaled back for performance reasons (sections missing, geometry changed, etc.). Quake II shipped with the same thing, the N64 version of the game, except that game was essentially a different engine entirely with mods and graphics created for it to resemble the PC version. My hunch is that they’d like to do something similar with the Quake II re-release, giving it more mods and so forth, but it means people have to do the work to port them, it’s not an automatic thing like it is with Quake‘s mods. So if, say, the Rocket Arena 2 guys decide to make the RA2 code fit into the new code, perhaps they work with id/NDS to get that on things like the Switch, the Xbox, etc.

And it’s interesting how the situation has changed in the last quarter century since the original game. In 1997, to compile a mod for Quake II you either needed Visual C++, which wasn’t cheap or free, or you could use one of the free options like LCCWin32, except they tended to produce hit or miss results. Today, you can get Visual Studio 2022 Community Edition, which is the same as the Professional edition just with limits on who can use it (if you’re a company making money you have to pay for the pro version, etc.).

So what did I do during QuakeCon 2023? Of course I wanted to see how hard it would be to get a mod going. It’s weird, I’m behind on some stuff for Mac Source Ports but since I brought my PC, I figured I should mess with this instead.

First thing I figured out was how much development software I don’t have on my machine. I don’t remember how long ago but at some point the SSD on my machine took a shit and I had to reinstall Windows on a new drive to get back up and going. Whereas it used to be a ritual to periodically reinstall Windows all the time and then reinstall all your software, more or less since the advent of Windows 7 this hasn’t been a thing for me, and I’ve taken the attitude that with some exceptions, I don’t install software until I need it.

Looks like I did at least have Visual Studio 2019 installed but I went through and installed Visual Studio 2022 and uninstalled 2019 since why not. Then I figured out I didn’t have git or GitHub installed. There’s probably some way to get VS to handle this for you but I just did it manually.

Then came package management. The code release for this needs a couple of packages and they recommend vcpkg for it. I’ve never used vcpkg before but it wasn’t hard to figure out. At some point I had it building, so I made a copy of the deal and installed the GOG version of the Quake II remaster just to get any sort of DRM stuff out of the way (though it does look like the GOG version does tie into GOG Galaxy if you have it running).

I ran it and verified, it did run as a mod properly

So then, I figured let’s see if we can get some mod happening.

A guy on one of my gaming forums, a week or so ago when it was being rumored that Quake II was being remastered, went to go find his CD-ROMs with code and mods and maps on them and in the process discovered that his old site where he put stuff like this up was still online at quake2.com. I’m not sure what’s more amazing, that someone is still paying the server and domain renewal bills to keep quake2.com online or that id never secured that domain name (or perhaps they did and then gave it to someone? dunno).

So when I go online to search for tutorials on how to do Quake II mods, naturally that’s where I find this positively ancient tutorial on how to add a bot to the game.

First thing you have to do is contend with the code being in C++ now versus the C of the original. C++ is almost a superset of C, though there’s valid C code which isn’t valid C++ code but most of it you can copy and paste. And then you have to contend with the changes. The README of the code release details a lot of them.

Some things have been renamed, and other things are just handled differently now. For example in the original game a lot of functions existed for vector math. However, now instead of having to pass things to these functions you can just do the math directly. I’m not sure if that’s overloaded operators or if that just comes with the latest C++ standards or what.

What I wound up doing a lot of was, when I found something that didn’t compile, I searched the original code (which they also include for comparison’s sake) and then looked for where that code was in the new code and did the same thing, whatever their changes were. One thing is that the refresh rate of the game’s logic changed so the handling in the frame time functions uses different syntax now.

In any event I got the thing to build.

The way this one is set up, you have to spin up a Deathmatch game and then in the console type “cmd oak” (so running the command “oak”) and it spawns a bot.

I did that and… it crashed. And the way the crashes work, odds are whatever did crash you don’t have code access to (like the GOG Galaxy DLL or whatever). But you can connect VS2022 to the game and set breakpoints, which I didn’t think would work but it does. I figured out the quirks like how binding methods to events in C++ has different syntax, so and worked through them.

At which point I was able to get into the game and spawn a bot finally… except other than the code running and giving me the on-screen message, nothing happened. No bots ever show up in-game.

But hey it doesn’t crash.

In any event that’s where I’m at with this. Not sure how much farther I’ll go but it’s a start, and it’s more or less the situation everyone is going to have to go through to get their old mods going.