QuakeSpasm for old Macs
QuakeSpasm tuned for six Macs spanning 1999 to 2019 — PowerPC and Intel, one fat binary.
![]()
A fork of QuakeSpasm tuned for six old Macs spanning 1999 to 2019. It's one app that runs on all of them — three builds, one for each kind of chip, bundled together — 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.
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 rows in the full earliest-to-current grid 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.2-round-v8.
| Bundle | Size | Runs on |
|---|---|---|
| quakespasm-fat-app-v0.97.0.zip | 4.8 MB | All six 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 |
| 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 |
# Architecture
An Ubuntu workstation drives all six 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.
Three compilers build three versions of the program, one per chip, 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.
# Frames per second across the rack
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 |