Files
skate-3-rust-engine/docs/hails-additions/13-recomp-research-hooks.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

3.6 KiB

13. Research hooks for the Skate 3 recompilation

What it is

Much of the audio work in this fork, and the NPC, traffic and world research, was measured with trace hooks in a fork of skate3recomp, the static recompilation of the Xbox 360 game. The hooks wrap the recompiled game's functions, call straight through, and only read memory. They log what the game does to a tab-separated trace: sounds posted and played with their levels and DSP values, the rolling bed, board contacts, seams, skids, emitters, pedestrians, traffic, trigger volumes and teleports. They can also capture the mixed audio output.

They are published on the research-hooks branch of Hailey-Ross/skate3recomp. The hooks are in src/research/, and the SDK side ships as src/research/sdk/rexglue-sdk-research.patch. No game code, executable image or game data is included.

Warning: reference and information gathering only

The recompilation is not a perfect copy of the console game, and its traces are not ground truth.

  • Frame rate: it runs uncapped (several hundred fps on a PC, against about 30 on the 360). Anything the game does once per rendered frame happens at a different rate. Examples: the seams process, the MixMap tick and one-frame trigger pulses.
  • Timing and threading: these differ from the console. The audio thread can stall for up to about a second, and the game hitches when streaming at speed.
  • What to trust:
    • logged values, data and program logic are strong evidence;
    • timings, per-frame rates and gaps are specific to the recompilation until checked against the code or the console.
  • Our rule: retail parity comes from the mechanism (the code and data). Traces only validate it. Behaviour that runs per rendered frame targets the 360's ~30 fps cadence, made independent of the frame rate.

Using it

  1. Build skate3recomp from the research-hooks branch as its README describes. You need your own legally owned copy of the game; the code generation step creates the recompiled sources locally.

  2. From third_party/rexglue-sdk, run git apply ../../src/research/sdk/rexglue-sdk-research.patch, then build.

  3. Set SKATE3_AUDIO_TRACE_FILE (the output file) and, optionally:

    • SKATE3_TRACE: the categories, e.g. audio,dsp,npc,world,traffic,aiskater; audiox for heavy per-frame detail;
    • SKATE3_AUDIO_CAPTURE: mixed output, float32 stereo at 48 kHz;
    • the input script and record variables;
    • SKATE3_BACKGROUND.

    The branch's src/research/README.md lists every variable and line kind, and src/research/USAGE.md is a step-by-step guide: a first trace, choosing categories, reading and checking a trace, watch lists, input scripts and the audio capture.

  4. Check every trace for malformed lines before using it; there should be none.

The analysis scripts we used are published in tools/recomp-trace/ (trace readers, per-bank level and voice tools, rolling-bed and send analysis) and tools/recomp-code-search/ (searching the recompiled sources and the memory image); see 14. They are reference only: anyone who wants to use them needs to build the recomp and set up the paths themselves.

Credits

skate3recomp by @mchughalex, the rexglue SDK, and Xenia's Xbox 360 research.