- 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).
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
-
Build skate3recomp from the
research-hooksbranch as its README describes. You need your own legally owned copy of the game; the code generation step creates the recompiled sources locally. -
From
third_party/rexglue-sdk, rungit apply ../../src/research/sdk/rexglue-sdk-research.patch, then build. -
Set
SKATE3_AUDIO_TRACE_FILE(the output file) and, optionally:SKATE3_TRACE: the categories, e.g.audio,dsp,npc,world,traffic,aiskater;audioxfor 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.mdlists every variable and line kind, andsrc/research/USAGE.mdis a step-by-step guide: a first trace, choosing categories, reading and checking a trace, watch lists, input scripts and the audio capture. -
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.