Files
skate-3-rust-engine/docs/native-scoring-hud.md
T

5.1 KiB

Native scoring and HUD port

Work branch: lol/native-scoring-hud. This document distinguishes implemented components from remaining integration; it is not a claim of gameplay parity.

Evidence

The source executable is the locally owned TU3 image loaded at 0x82000000, size 0x011B0000, SHA-256 f4aa113eb541bfba03dbc108cf5ab43f58c965b20fa3b82f9c40938a0ad841c4. Static analysis uses a disposable IDA database and the existing generated PPC translation. Original binaries, analysis databases and extracted assets are not part of this repository. IDA incorrectly decodes some VMX instructions; PPC instructions and the generated translation must corroborate those paths.

Implemented source components:

  • skate-core::scoring: ScoreHolder accounting at 82DA6198, 82DA6260, 82DA6408, 82DA6468, 82DA6538; point timers at 82DA4C28; carrier announcement/completion at 82DA45C8, 82DA46D0, 82DA5DE0, 82DA5F98. Session publication at 82DA37B0 captures the multiplier before crediting this reward to the combo timer. Settlement at 82DA3B38 preserves repetition on an empty line timer while a collector is active.
  • skate-data::scoring: resolves authored VLT points, labels, delay, repetition, announcement curves, combo thresholds and timer settings. Missing data is an error. The executable's 332-entry identifier metadata includes unused entries; the owned installed database resolves 300 records.
  • The scoring display/timer defaults belong to class 349215E2E817703C. They are global tuning, not user difficulty settings. Physical collector tuning is a separate class 546C36B656038E04.
  • tools/prepare_hud.py: decodes the original hud2/trickdisplay2 APT, geometry, font metadata, textures and compact action stream into a private cache. Source asset hashes are retained in the compiled manifest.
  • apt_vm: partial bounded interpreter for the original compact instructions. The data-only audit initializes the original class, builds the authored initial child hierarchy and checks the constructor's four trick-name visibility writes. Native method calls still use a dummy host, so this does not validate a functioning display.
  • apt_display: retained depth-list placement flags and transforms. The data-only audit validates all controls across 38 original movie timelines. Unsupported clip actions and filters fail explicitly.

Extractor provenance

tools/vendor/skate3_ui reuses the Python extractor from the local Custom Engine Layer preview.18 source distribution. Its accompanying project MIT license is preserved. actions.py is the new compact instruction decoder, based on TU3 _parseStream at 82E67868 and dispatch table 82FC9BF0. Extracted game assets are not covered by that source license and must stay in the ignored private output directory.

Example preparation (data extraction only):

python tools/prepare_hud.py --game <owned-game-directory> --output assets/private/hud --collections <owned-assets>/private/stock/skater-collections.json

The original movie is authored at 1280 by 720. Its score, line, stance, multiplier and trick-name timelines must control presentation; replacing them with a new overlay would not meet this port's requirements.

Remaining implementation

Collectors are not wired into the production tick yet. Recognition still requires conditioner gates, descriptor conversion, air/ground/grind collector transitions, spin/flip bonuses, gaps, landing and sequence publication ordering. Announcement delay conversion uses the verified binary32 60 at 8303745C. The carrier's start/current tick source still needs to be connected at the matching production phase.

The HUD still needs a complete movie object hierarchy, native bindings, timeline execution and rendering with multiplicative and additive colors. Superclass preloads and supported action coverage also remain incomplete. The audit's dummy host intentionally does not establish native binding parity.

Font resolution is recovered from FontManager initialization 82808AE8, APT-name lookup 82809208 and loading 82809308. VLT class FECFBCAF356518C4 maps the APT name (field 340832CCFD9FDEB4, layout +8) to FileName (layout +4). In particular, FuturaOuterGlow maps to futurashadow, not the prior extractor's inferred Futura Glow. The prepared movie has no unresolved font references. The manifest retains VLT record provenance and native scale/offset fields. The community symbol calling 82809168 GetFontByAptName is misleading: that function searches the filename column; 82809208 searches the APT-name column.

Pause, map-change generation reset, resource reuse and the final task-specific release build/launcher remain to be integrated and checked. No game/recomp, controller harness, gameplay automation, --check-assets, or screenshot capture has been run for this work.

Validation so far: nine scoring unit tests pass (including unsigned clock rollover, early completion, conversion, timer thresholds, one-time banking and cancelled rewards); the owned-data loader audit resolves 300 definitions; the APT data-only audit passes placement validation and constructor checks.