Quake III old-Mac port app icon

A port of ioquake3 for the same seven old Macs as my Quake and Quake II builds. One fat binary holds a G3, a G4, a G5 and an Intel slice, and macOS picks the right one when it launches. The headline is Quake III rendering on a 449 MHz iMac G3 with a 16 MB Rage 128, the machine that sat right on the minimum spec when Q3 shipped in 1999.

It's a personal project: I love Quake and I collect and tinker with old Macs. My part is the setup and testing; the engine and config changes were made mostly with AI (Claude), which I directed and checked against real benchmarks on the machines.

This is the youngest of the three ports. It builds, launches and renders across the machines, each Mac gets its own settings and native resolution, and the game modules now ship as native code. It's had fewer rounds of tuning than the Quake and Quake II ports, so it looks plainer, especially on the G3. Five of the seven machines are benched so far; sawtooth and the 2019 iMac aren't yet.

# Framerate

The four timedemo, fullscreen at each machine's native resolution, median of runs 2 and 3. These are the machines benched so far.

Machine CPU GPU macOS Resolution fps
yosemite G3 449 MHz Rage 128, 16 MB 10.3.9 Panther 800×600 ~22
mini-g4 G4 1.25 GHz Radeon 9200, 32 MB 10.4.11 Tiger 1680×1050 ~28
quicksilver G4 733 MHz Radeon 9000, 64 MB 10.4.11 Tiger 1680×1050 ~41
mini-intel Core 2 Duo 2.33 GHz GMA 950 10.7.5 Lion 1920×1080 ~57
imac-g5 G5 2.0 GHz Radeon 9600, 128 MB 10.5.8 Leopard 1440×900 ~60

So Quake III runs from about 22 fps on the 449 MHz G3 up to about 60 on the G5, each at its own screen's native resolution. The G3 clears its 20 fps floor, and in actual gameplay, which is lighter than the timedemo, it holds around 35 fps. The G4 sawtooth and the 2019 iMac aren't benched yet. Live numbers are in benchmarks/results.csv.

# Get the build

The current release is v0.4.0, which builds the game modules as native code.

Bundle Runs on
ioquake3-OldMac-v0.4.0.dmg Panther 10.3.9 → modern macOS (PowerPC and Intel)

One bundle runs on every machine: macOS picks the right slice for the chip when it launches. It doesn't include the game data, so you bring the baseq3 pak files from your own copy of Quake III Arena.

# Screenshots

Quake III on yosemite, a 1999 PowerMac G3 with a 16 MB ATI Rage 128: a red pentagram floor with an enemy across the room, running at 35 fps
yosemite: 1999 PowerMac G3 / Rage 128, the minimum-spec machine
Quake III on quicksilver, a 2001 PowerMac G4 with a Radeon 9000: a plasma explosion mid-frag
quicksilver: 2001 PowerMac G4 / Radeon 9000
Quake III on an iMac G5 with a Radeon 9600: a lava-floored arena with hanging cages
imac-g5: iMac G5 / Radeon 9600
Quake III on an iMac G5: a blood-splattered corridor with a rocket launcher pickup and a dropped weapon
imac-g5: rocket launcher in a corridor
Quake III on mini-intel, a 2007 Mac mini with a GMA 950 on Lion: a teleporter arena at 86 fps
mini-intel: 2007 Mac mini / GMA 950 / Lion
Quake III on mini-intel: a fast strafe past two teleporters with motion blur, at 142 fps
mini-intel: strafing past the teleporters

# Why a special port

Modern ioquake3 is CMake and SDL2, and SDL2 has never supported Mac OS X 10.3 or 10.4. The PowerPC machines here run Panther 10.3.9, Tiger 10.4.11 and Leopard 10.5.8, so a current ioquake3 binary won't launch on a single one of them. This port is pinned to the last SDL 1.2 release of ioquake3, the same SDL 1.2 that still talks to a Rage 128 under Panther. Two bundled libraries (libSDLmain.a and the SDL 1.2 dylib) were 10.4+ builds that crashed instantly on 10.3.9 in the Cocoa startup; both are rebuilt from source so the G3 slice launches. The full story is in the repo's MISTAKES.md.

# Apple Watch companion

Quake III drives the same Apple Watch tactical computer as the Quake 1 and Quake II ports. A cvar-gated patch, cl_watchlink.c, streams the player's live health, armour, ammo, weapon and score to an iPhone and Apple Watch over Bonjour. It's off by default; turn it on with seta watch_host "auto".

# Tech stack

C OpenGL 1.x PowerPC AltiVec x86_64 SDL 1.2 Apple gcc 4.0.1 Apple clang Bash ssh + rsync