Files
skate-3-rust-engine/docs/hails-additions
Hails 5e9e4dd784 Audio: retail world emitters from the maps' .ems files
Replaces our own water placement (water.rs: water collision grouped into
bodies, a random 1-2.5 s piece every 0.7-1.3 s that piled up 2-3 deep, which
the user heard as overlapping water at the University plaza).

Setup (audio manifest v4):
- audio_formats: .ems reader (72-byte records) and name_id, Bob Jenkins'
  lookup8 64-bit hash with the seed the sound ids use;
- audio_export: every .ems file with each sound's attributes from the disc's
  skatercollections emitter class 0xF0CEF367088EFFF8 (volume, bank, patch
  selector, volume type, falloff), resolved through parents; decodes every
  bank the sfx_*/skateschool emitters place (100 banks; all 486 sound
  emitters resolve to a bank on the disc).

Game (game_audio/emitters.rs, behaviour taken from TU3):
- sphere or ellipsoid (semi-axes = extents along forward/up/side), inner core
  at full level, level = volume x falloff ((1-d)^2, 1-d or flat);
- at most 5 emitters, in discovery order, released when the listener leaves;
- each water bank plays its program's measured pattern (two-voice relay of
  shuffled one-shots or one loop, with its level/pitch movement) until the
  AEMS evaluator is ported.

Verified muted in game: University plaza starts water_fountain and the
channel fountains_waterlaps_left; Aletown canal fountains_waterlaps_left.
2026-10-02 09:11:28 -06:00
..

Hails' additions

Changes made in the Hailey-Ross fork of SK8-ENGINE/skate-3-rust-engine, documented so upstream maintainers have the full context when reviewing a pull request: what broke, why, what changed, how it was verified, and what is still open.

Each document stands alone. File paths are relative to the repository root.

# Change Area Status
1 ISO extraction argument order Setup (Python) Superseded: upstream fixed it the same way (713fe70, 7ae67f2, 2026-10-02); dropped from PR A
2 Windows long paths during setup Setup (Python) Done; UAC path not exercised end to end
3 SDL3 gamepad input Game (Rust), build scripts, vendored sdl3-sys Done, verified in play with an Xbox Elite Series 2
4 Authored map spawns Asset pipeline (Python) Done, all 10 maps confirmed in play
5 Invisible collision volumes Game data loader (Rust) Done, all four affected maps confirmed in play
9 Water Game physics, camera and rendering (Rust), setup, diagnostics Matched to retail footage (RPCS3): shallow water solid, deep water floats, board floats, water camera + vignette, entry splash, canal water look matched, small bodies calmer
10 Sky shader validation test Game tests (Rust) Done; all six shader validation tests pass
11 Game audio Setup (Python, vgmstream), game audio (Rust) Tuned by ear over ~15 play sessions: rolling, pop/landing, board-down, footsteps, foot drag, splash, grab whoosh confirmed; bail impact, metal grinds, landing weight, fountains and some other cues not yet confirmed; regression pass pending
12 Board solver: 50 constraint iterations Game physics (Rust) Done; maps identical, water traces as expected; one asset-gated customiser test fails (open question)

Environment used for verification

  • Windows 11, Intel i7-14700KF, NVIDIA RTX 4080 SUPER (Vulkan).
  • Rust 1.98.1 (MSVC), Visual Studio 2026 C++ tools, Windows SDK 10.0.26100, LLVM 23.1.2, Python 3.13.15.
  • Skate 3 Xbox 360 disc image (103 files, 6,404,940,920 bytes).
  • Xbox Elite Series 2 controller over Bluetooth LE.

Conventions

  • Upstream behaviour is preserved unless a document says otherwise; where a behaviour changes on purpose (for example, a map's default spawn), the document lists the old and new values.
  • Project choices that are not dictated by retail data are called out as such, so maintainers can overrule them.