Quake III for old Macs
ioquake3 running on the same six-Mac fleet from one fat binary, down to a 449 MHz G3. Early days — the build is up and benchmarked, but no optimisation yet.
![]()
A port of ioquake3 for the same six old Macs as my Quake and Quake II builds. One fat binary holds a G3, a G4 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.
This one is early, warts and all. So far it's about getting a clean fat binary that builds, launches and renders across the fleet, plus a first benchmark baseline. There's no per-machine optimisation or visual tuning yet, so on the G3 it looks plain next to the Quake and Quake II ports, which have had rounds of work. Four of the six machines are benched so far.
# Framerate (v0 baseline)
The four timedemo, fullscreen, default settings with no per-machine tuning, median of runs 2 and 3.
| Machine | CPU | GPU | macOS | 640×480 | 1024×768 |
|---|---|---|---|---|---|
| yosemite | G3 449 MHz | Rage 128, 16 MB | 10.3.9 Panther | 45 | 27 |
| quicksilver | G4 733 MHz | Radeon 9000, 64 MB | 10.4.11 Tiger | 61 | 60 |
| imac-g5 | G5 2.0 GHz | Radeon 9600, 128 MB | 10.5.8 Leopard | — | 133 |
| mini-intel | Core 2 Duo 2.33 GHz | GMA 950 | 10.7.5 Lion | 238 | 105 |
The G3 clears the 20 fps floor and the G4 clears 60 at stock settings. In actual gameplay with a bit of tuning the G3 holds around 35 fps and the G4 around 96. The G4's flat 60 in the table is its screen's refresh rate, not a ceiling, and the G5 runs about 87 fps at its native 1440×900. The G4 sawtooth, the Mac mini G4 and the 2019 iMac aren't benched yet.
# Get the build
The first release is v0.1.0.
| Bundle | Size | Runs on |
|---|---|---|
| ioquake3-OldMac-v0.1.0.dmg | 3.2 MB | Panther 10.3.9 → modern macOS (PowerPC and Intel) |
One bundle runs across the fleet: 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 from the fleet
# 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 and Tiger 10.4.11, 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".