Intro
I’d talked to my cousin about AI and wanting to learn more about it. He had suggested I get AI to write my Freeze Tag mod I wrote for Quake many years ago. I thought it funny that I wrote that to learn C, and now I’ll do the same to learn AI? Why not.
First I had to install Quake 2 on my machine and get it running again. I spent a bit of time trying to get the older Quake 2 to run on my machine, using Yamagi Quake II. I dug up my old Quake 2 CD and copied over the pak0.pak file. Running the game though was difficult. There was no mouse look and no one could be seen on multiplayer. That’s when I found out they’d done a Quake 2 Remaster in 2023, so I decided to check that out. After a quick Steam download, I tried it out and it ran great. There were even people still playing online! (UPDATE: I’ve since learned the Remaster doesn’t have Dedicated servers, which is a really bad thing and so we won’t be working with it.)
But now I need to get my Freeze Tag mod working with this version. I found out they’d re-written the original mod source. According to the readme, this was to use a new API and networking code as well as add a thin “client game” module. They were inviting mod authors to re-write with the new source.
Asking About Diff
I quickly began formulating: we’re living in the magical world of AI, perhaps I could tell AI to analyze what I had changed in the original mod source to make Freeze Tag and then ask it to make those changes to this new codebase? I wasn’t sure how to do that so I started simply by uploading a Beyond Compare diff of the original source and my Freeze Tag code to ChatGPT:
"Summarize the key structural and functional differences in this Beyond Compare diff report" (Diff file attached)
It came back with lots of details as well as:
Overall Impact
Original Quake II: Deathmatch/CTF core mechanics with standard frag-based play.
Freeze Tag Mod:
Players are frozen instead of dying outright.
Victory is team-based (freezing all opponents).
Strong focus on teamwork (thawing is as important as fragging).
Adds custom HUD elements, sound effects, grappling hook, flashlight, and new scoring/win conditions.
In short: the freeze-tag codebase is a total conversion gameplay mode layered on top of Quake II, introducing new states (frozen/thawed), cooperative mechanics (rescuing teammates), new UI/menus, and extended team logic.
Looked good so far. Now I uploaded the diff between the original source and the new remaster source and asked ChatGPT about that. It said more details as well as:
Overall Functional Shift
The rerelease modularizes client vs. server/game logic.
Introduces modern C++ constructs (e.g., std::function, std::optional, std::array, constexpr).
Adds quality-of-life features for coop play, HUD flexibility, and player feedback (hit markers, respawn info).
Lays groundwork for cross-platform physics (PC vs. N64).
In short:
The rerelease restructures the Quake II game DLL into a more modular, modernized architecture. It introduces configurable physics, compressed stat systems for ammo/powerups, extended player/HUD tracking, and robust client-side rendering/notification systems—substantially enhancing coop, accessibility, and overall maintainability.
That all sounded about right as well, but now how do I move forward? Here’s where I got stuck. I decided to show a friend a Beyond Compare of the original mod source with the new codebase. That’s when it finally hit me that they’d changed a lot. They even went from C to C++.
Next Step
I believe what I need to do is remember what I did to make Freeze Tag in the first place, to break it down. I wrote these changes many decades ago though. I think I’ll get the AI to explain to me what particular changes were made. Then I’ll see if I can ask AI to make each individual change to the new codebase. But that’s for another day.
Notes For Getting Quake 2 Remaster Building
Grab Visual Studio 2022 Community Edition
You only need “Desktop development with C++” but must install/run “vcpkg integrate install”
When you first build, a vcpkg.json is created. Change this file to be: (newer fmt causes the error “Unicode support requires compiling with /utf-8” so use older ver)
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
"name": "q2-game-dll",
"version": "2022",
"builtin-baseline": "3426db05b996481ca31e95fff3734cf23e0f51bc",
"dependencies": [
"fmt",
"jsoncpp"
],
"overrides": [
{ "name": "fmt", "version": "10.2.1" }
]
}