QuakeSpasm for old Macs
QuakeSpasm tuned for seven Macs spanning 1999 to 2019: PowerPC and Intel, one fat binary.
A fork of QuakeSpasm tuned for seven old Macs spanning 1999 to 2019. It's one app that runs on all of them (four builds bundled into a single file, one per chip: G3, G4, G5 and Intel) and on each Mac it loads its own settings and switches on as many of the visual effects as that machine's graphics can handle.
It's a personal project: I love Quake and I collect and tinker with old Macs. My part is the setup and testing: the build, deploy and benchmark scripts, and the per-machine settings. The engine and config changes were made mostly with AI (Claude), which I directed and checked against real benchmarks on the machines.
There's also an Apple Watch companion: a cvar-gated patch streams the player's live health, ammo and weapon off the Mac so the watch can render a tactical computer on your wrist. The same app drives the Quake II port too. It's off by default and adds nothing to the normal build.
# Before and after
Frame-rate gains on the 1999 G3, same machine before and after. Quake's built-in timedemo replays a recorded demo as fast as the machine can manage and reports the frame rate; each number here is the middle of three runs, with the first thrown away as a warm-up. The "after" column is the Round v11.1 build with see-through water, shadows under the monsters and glowing lights all switched on.
| Machine | Demo / resolution | Before | After | Δ |
|---|---|---|---|---|
| yosemite: 1999 PowerMac G3, Rage 128 | demo3 / 1024×768 | 5.10 | 20.95 | +311% (4.1×) |
| yosemite: 1999 PowerMac G3, Rage 128 | demo1 / 1024×768 | 7.70 | 17.35 | +125% (2.3×) |
| yosemite: 1999 PowerMac G3, Rage 128 | demo3 / 640×480 | 15.60 | 36.85 | +136% (2.4×) |
| yosemite: 1999 PowerMac G3, Rage 128 | demo1 / 640×480 | 23.90 | 34.45 | +44% |
Only the G3 row goes up in every cell, because on the G3 I chased frame rate and nothing else. The other machines' before-and-after figures are mixed, and that's on purpose. Each machine's first build was plain QuakeSpasm with its default settings, and since then I've piled visual upgrades on top: crisper textures on angled surfaces, smoother texture filtering, shadows under the monsters, see-through water, lava, slime and teleporters, and glowing lights. Where a number went down, it's because one of those effects got switched on, not because something broke. Every effect landed in a change that measured its cost across all the machines first and weighed it against how much better the game looked.
# Get the build
The current release is v1.13, which added online multiplayer and weapon damage decals.
| Bundle | Runs on |
|---|---|
| QuakeSpasm-OldMac-v1.13.dmg | All seven benched Macs (Panther 10.3.9 → Sequoia 15.7) |
The one universal binary runs unchanged on everything from Panther 10.3.9 to Sequoia 15.7. When it launches, macOS picks the right build for that Mac's chip, then the game checks which model of Mac it's on and loads that machine's own settings file.
# The bench
| Machine | Year | CPU | GPU | macOS |
|---|---|---|---|---|
| yosemite | 1999 | PowerMac G3 B&W, 449 MHz | ATI Rage 128, 16 MB | 10.3.9 Panther |
| sawtooth | 1999 | PowerMac G4 AGP, 500 MHz 7400 | NVIDIA GeForce2 MX, 32 MB | 10.4.11 Tiger |
| quicksilver | 2001 | PowerMac G4, 733 MHz 7450 | Radeon 9000 Pro, 64 MB | 10.4.11 Tiger |
| mini-g4 | 2005 | Mac mini G4, 1.25 GHz 7447A | Radeon 9200, 32 MB | 10.4.11 Tiger |
| imac-g5 | 2005 | iMac G5, 2.0 GHz 970FX | Radeon 9600, 128 MB | 10.5.8 Leopard |
| mini-intel | 2007 | Mac mini, 2.33 GHz Core 2 Duo | Intel GMA 950, 64 MB shared | 10.7.5 Lion |
| imac-2019 | 2019 | iMac 27", 3.7 GHz i5-9600K | Radeon Pro 580X, 8 GB | 15.7.5 Sequoia |
The iMac G5 runs at its native 1440×900 only: its Leopard graphics driver hangs if the game tries to switch resolution, so it stays in same-mode fullscreen.
# Architecture
An Ubuntu workstation drives all seven Macs over the network (ssh). The Lion mini does double duty: it's one of the test machines and it's also where the builds are made, because it's the last Mac that still ships with the old compiler able to target the PowerPC chips.
Four toolchain passes build four versions of the program, one per chip (G3, G4, G5 and Intel), and Apple's lipo tool glues them into a single universal file. No fancy build servers or containers, just rsync, ssh and scp on top of make.
The test loop is the same on every machine: copy the new build over, launch it with that machine's settings, read the timedemo result out of the log, and add a row to a running spreadsheet. Three runs each, with the first thrown away as a warm-up.
# Framerate
Full grid at commit d64427db. Three runs per cell, the first dropped as a warm-up, reported figure is the middle of the other two. This round added a small drawing optimisation that gives the G4, Intel and iMac machines a 19–46% lift on the demo3 1024 test. The G3 leaves it switched off, because testing it back-to-back on that machine actually made it slower.
| Machine | demo1 1024×768 | demo1 640×480 | demo2 1024×768 | demo2 640×480 | demo3 1024×768 | demo3 640×480 |
|---|---|---|---|---|---|---|
| yosemite (G3) | 17.35 | 34.45 | 15.25 | 33.40 | 20.95 | 36.85 |
| sawtooth (G4) | 40.25 | 55.65 | 32.70 | 50.15 | 46.90 | 57.55 |
| quicksilver (G4) | 62.75 | 70.30 | 60.10 | 68.00 | 84.05 | 95.35 |
| mini-g4 (G4) | 48.45 | 86.30 | 37.40 | 73.85 | 65.60 | 113.20 |
| mini-intel (Lion) | 72.85 | 163.95 | 54.50 | 130.70 | 44.60 | 185.90 |
| imac-2019 | 1610.95 | 1894.45 | 1490.20 | 1876.20 | 1575.15 | 1907.25 |
The iMac G5 isn't in the grid because it only runs its native 1440×900. There it turns in demo1/2/3 at roughly 100.8 / 74.4 / 86.1 fps. Full history and all seven machines are in benchmarks/results.csv.