v1.5 — Q2-borrow round + bench methodology fix
Cross-pollinated features from the Q2 sister port, plus a bench-methodology fix that produces more honest fps numbers (turns out v11.1's cells were artificially high — see "Bench methodology fix" below).
What's new
-
gl_fogcvar family (CVAR_ARCHIVE; default off) — cvar-driven fallback fog for maps that don't ship_fogin worldspawn, so vanilla id1 maps pick up an atmospheric tint when set in per-machine autoexec. New cvars:gl_fog/gl_fog_density/gl_fog_red/gl_fog_green/gl_fog_blue. Map-shipped fog and thefogconsole command always win when present;fog 0from console truly disables (tracked via internalfog_explicitflag, reset on map load). Adapted from yquake2-ppc commitc3d1de3. -
r_waterwarpis now a magnitude scale (CVAR_NONE → CVAR_ARCHIVE). The cvar used to be a boolean; now it doubles as a 0..1 dial —r_waterwarp 0.5halves the underwater wobble,0disables,1is the historical full-magnitude effect (default unchanged). The CVAR_ARCHIVE flip lets per-machine autoexec persist a non-default value. -
gl_texture_anisotropy 2added to yosemite autoexec as a silent no-op on the current Panther R128 driver, defensive in case a future driver build exposes ARB_filter_anisotropic. -
README "Sister project" section + icon bumped 120→200 px for visual consistency with the Q2 README.
Bench methodology fix
bench.sh previously passed -noarchautoexec, which correctly skipped the CFBundle per-machine autoexec layer. But it also meant the per-machine visual stack (shadows, dlights, translucent water, dynamic light distance, etc.) didn't apply during bench. So historical README "after" cells like yosemite demo1 1024 = 17.35 fps reflected vanilla engine defaults — not what the deployed .app actually renders for a real user.
The fix stages the per-arch + per-machine autoexec as a temp id1/autoexec.cfg on the target before each run; quake.rc's exec autoexec.cfg loads it before stuffcmds, so bench's +vid_width N +vid_height M cmdline still wins for resolution control. EXIT trap removes the staged file so normal launches fall back to the bundle path cleanly.
v1.5 real-conditions baseline
demo1, 3 runs each, median of runs 2 & 3:
| Machine | 1024×768 | 640×480 |
|---|---|---|
| Yosemite (G3 / Rage 128) | 17.55 | 36.50 |
| Sawtooth (G4 / GeForce2 MX) | 40.45 | 55.80 |
| Quicksilver (G4 / Radeon 9000) | 65.75 | 71.35 |
| Mac mini G4 (G4 / Radeon 9200) | 51.40 | 89.65 |
| Mac mini Intel (Lion / GMA 950) | 76.25 | 172.45 |
All four G4 / Lion machines are slightly faster than the v11.1 numbers because the per-machine autoexec ships more performance optimizations than visual costs.
Yosemite at its ship resolution (800×600) with full visual stack — translucent water, alias drop-shadows, emissive-fullbright dlights, classic warp, trilinear:
| Demo | fps |
|---|---|
| demo1 (water-heavy e1m3 Necropolis) | 27.15 |
| demo2 | 25.40 |
| demo3 (dlight-heavy) | 30.05 |
All cells comfortably above the 20-fps playability floor. The 17.55 fps at 1024×768 is a stress test, not the play target.
Install
Drop Quakespasm.app next to your own id1/pak0.pak (shareware) or id1/pak0.pak + id1/pak1.pak (registered). Anywhere on disk — Desktop, Applications, a project folder — works. The .app finds its game folder by walking up from its own image path, not by cwd.
$HOME/Desktop/quake/
Quakespasm.app/
quakespasm.pak ← from this zip
id1/
pak0.pak ← bring your own
pak1.pak ← bring your own (registered)
Modern macOS quarantines unsigned bundles — right-click → Open, or xattr -dr com.apple.quarantine $HOME/Desktop/quake/Quakespasm.app.
Compatibility
Same fat binary as v1.4 — ppc750 + ppc7400 + x86_64. Runs on:
- B&W G3 PowerMac (10.3.9 Panther)
- G4 PowerMacs (10.4.11 Tiger)
- Lion Intel (10.7+)
- Modern macOS (10.13+ via x86_64 slice; 11.0+ runs under Rosetta on Apple Silicon)
Pre-Lion Intel Macs (32-bit kernel) are not supported.
🤖 Generated with Claude Code