Files
skate-3-rust-engine/tools/regression-checks/README.md
T
Hails 418dcecd41 Audio: interim cue tables retired, native water splash, published tools
- The interim cue tables and their opt-outs are gone; the native runtime is the only audio path. Old
  settings/audio.json files still load ("interim" / "native" ignored). Missing native data logs an error
  instead of falling back.
- Water splash from retail's mechanism (SFXObj_OffBoard start / update): Skate_Collisions 1187 / 1197 once
  per water stay, 1198 when the board is in water.
- The random interim riding bed is removed; riding collision and cloth sounds compared with the recomp
  (doc 11). Native output otherwise byte-identical (13 scenarios + 5 sessions).
- Published tools under tools/ (one folder per tool with a README; the recomp ones labelled for use with the
  research hooks), doc 14 and PR plan bucket L.
- Docs: doc 11 (retirement, bail density measured against the recomp, collision posts), doc 13 (usage guide).
2026-10-03 10:20:08 -06:00

2.9 KiB

Regression checks

Checks to run after changing the asset pipeline, the converter, input, native dependencies, build scripts or game code, before calling a change done. Each one compares the current install or build against a baseline you record yourself on a known-good state.

Script What it checks
check_maps.py Loads every installed map in one game process (skate3rust --validate-maps) and compares each map's loaded collision triangle count with the baseline. Fails on any map error or warning (spawn support, startup, invisible floor). Falls back to one --check-assets launch per map on builds without --validate-maps.
check_spawns.py Reads the spawn baked into every installed .skate map and compares it with the baseline (0.01 m tolerance).
check_customiser.py Snapshots the character customiser outputs (every stage receipt: path, size, SHA-256 of each file) and compares a later install with it. Ignores differences that are only the random set id embedded in JSON paths.
smoke_maps.sh Muted crash smoke test: launches the game on each map for N seconds (windowed, --mute) and counts panics, ERROR lines, non-finite physics and render-ready lines in the log.

Inputs

  • An installation set up by tools/setup.py (data/installation.json, data/installations/<id>/).
  • bin/skate3rust.exe for check_maps.py (--exe for another build) and smoke_maps.sh (SKATE_EXE).
  • Baselines live in .local/regression/ (gitignored) unless you pass --baseline; the customiser snapshot in .local/customiser-baseline/ (--snapshot).

Usage

From the repository root:

# once, on a known-good build / install
py -3.13 tools/regression-checks/check_maps.py --update
py -3.13 tools/regression-checks/check_spawns.py --update
py -3.13 tools/regression-checks/check_customiser.py --save

# after a change
py -3.13 tools/regression-checks/check_maps.py
py -3.13 tools/regression-checks/check_spawns.py
py -3.13 tools/regression-checks/check_customiser.py

# smoke test (Git Bash): 25 s per map, default maps StartPark University DownTown MegaPark
bash tools/regression-checks/smoke_maps.sh 25 StartPark Industrial

Every check exits 1 on a difference. The smoke test opens a game window per map; don't run it while someone is playing on the same machine.

Example output

check_maps.py (made-up numbers):

TEST_WORLD           ...
MapA                 12345  ok  (0.41s)
MapB                 67890  CHANGED (baseline 67880, delta 10)

smoke_maps.sh (from a real run; exit 124 = stopped by the timeout, as intended):

StartPark exit=124 panics=0 errors=0 nonfinite=0 render_ready=1 native_lines=7
University exit=124 panics=0 errors=0 nonfinite=0 render_ready=1 native_lines=7
logs: <repo>/.local/smoke/20261003_090413

Requirements

  • Windows, Python 3.13 (standard library only).
  • smoke_maps.sh: Git Bash (timeout, taskkill).