Skip to content

v1.5 — Q2-borrow round + bench methodology fix

Choose a tag to compare

@matthewdeaves matthewdeaves released this 24 May 09:40
· 49 commits to master since this release

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_fog cvar family (CVAR_ARCHIVE; default off) — cvar-driven fallback fog for maps that don't ship _fog in 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 the fog console command always win when present; fog 0 from console truly disables (tracked via internal fog_explicit flag, reset on map load). Adapted from yquake2-ppc commit c3d1de3.

  • r_waterwarp is 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.5 halves the underwater wobble, 0 disables, 1 is the historical full-magnitude effect (default unchanged). The CVAR_ARCHIVE flip lets per-machine autoexec persist a non-default value.

  • gl_texture_anisotropy 2 added 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