Quake III for old Macs
ioquake3 on the same seven old Macs from one fat binary, down to a 449 MHz G3. The youngest of the three ports, with per-machine settings still being tuned.
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
# 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".