Commit Graph
45 Commits
Author SHA1 Message Date
Hails 11ff8cd9c2 Setup: extract and decode the disc's game audio (new audio group)
- audio_formats.py: EA SNR (EA-XMA) stream scanner with block-chain
  validation, SPLC bank streams and patch tree (records, layers,
  containers; verified on all 20 banks), .grain files (speed-sweep
  recordings), loopable speed bands, gain-free 5->2 downmix.
- audio_export.py: decodes only what the engine plays (22 ambience
  beds, 14 grains x 6 speed bands, wheel spins, 23 sample banks) to
  PCM16 WAV in assets/private/audio with audio_manifest.json (v3,
  incl. SPLC patch trees). Decoder: pinned vgmstream r2117
  (SHA-256 checked) via the existing dependency() helper.
- Registered as optional asset group `audio` (versions, receipts,
  asset_exports, install); a failure records audio-availability.json
  and the game runs silent. Other groups' fingerprints unchanged.
- .gitignore: retail audio extensions and *.wav (Skyline mod WAVs
  excepted). Tests updated for the new group.
2026-10-01 17:37:30 -06:00
Hails 55776dc373 Water: shallow solid / deep floats, camera, splash, water look
- Water is solid only where geometry lies within 0.5 m under it; deep
  water makes no contacts and is detected from position (physics/water.rs).
  Body buoyancy only over deep water; the board floats with water drag.
  On-foot support follows the same rule.
- Water camera (high, behind, looking down) with an edge vignette through
  retail_exposure -> retail_tone, driven by the water bail state.
- Entry splash from the game's water particle sprite; setup extracts the
  particle sprites from miscboot.big (environment group, particles.py).
- Family 33 look matched to RPCS3 footage: 4x ripple scale, blurred and
  tinted reflection, anti-tiling with swells, calmer small bodies
  (water_bodies.rs areas), waves at 0.75x (FrameStateData.pca_slow).
- Ignored water_drop trace test; SKATE_VERIFY_AT for timed --verify
  captures.
2026-10-01 12:27:23 -06:00
Hails 01674566b6 Setup: fix ocean animation extraction during refresh
- --extract-ocean-pca runs before the crash supervisor, whose report
  window would block setup on a failed (non-zero) extraction
- ocean_pca.convert: install.spawn() pipes are text mode; reading them as
  bytes aborted the environment refresh
- test_ocean_pca runs convert through the real spawn() for success and
  failure

Verified: refresh rebuilt only the environment group (90 s) and wrote
assets/private/ocean-pca.json.
2026-10-01 02:39:47 -06:00
Hails b1d26230a8 Water rendering: extract the ocean animation table from default.xex
Water and ocean shaders need assets/private/ocean-pca.json, which setup
never created, so 52 water/ocean materials rendered static (or black).

- skate_data::xex: XEX2 unpacker (retail AES file key + CBC payload, LZX
  or basic decompression), no new dependencies
- skate_data::ocean_pca: locates cPCAWaterAnimationData's table in any
  build by its code addressing (disc build: 0x82FC3978; TU3: 0x830118D8)
- skate3rust --extract-ocean-pca <default.xex> <out.json>
- Setup environment group runs it (optional content); refreshes that group

In-play check of the rendered water still pending.
See docs/hails-additions/09-water.md.
2026-10-01 01:55:40 -06:00
Hails 8327e94090 Setup performance: skip duplicate stream copies, parallel customiser
- Skip decoding identical streamed asset copies (DownTown streams 107.8 -> 24.8 s)
- Run the character customiser beside the map stage (memory-gated)
- Build.ps1 builds the native RefPack DLL for dev checkouts
- Clothing library texture warm-up and pro roster run in worker processes
  (library 126.5 -> 51.2 s, roster 89.6 -> 15.9 s); shared caches are
  published first-writer-wins to avoid Windows rename races
- pipeline-equivalence.json: combined pairs (committed -> PR F+G)

Outputs proven identical (8,288 customiser files; all maps/spawns).
One-time customiser rebuild. See docs/hails-additions/08-setup-performance.md (PR G).
2026-10-01 00:13:55 -06:00
Hails 18f41a33c5 Tooling: streaming map validator (--validate-maps) wired into setup
One skate3rust process validates TEST_WORLD and every converted map over
stdin/stdout (SKATE_MAP_CHECK lines). Existing checks still fail a map;
new spawn-support / neutral-startup / invisible-collision checks report
warnings. Setup falls back to per-map --check-assets with an older exe.
See docs/hails-additions/06-map-validator.md (PR F).

Note: install.py also carries PR G's customiser-overlap hunks
(available_memory, overlap_customiser, Background); they are interleaved
with the validator wiring in _install and are documented in doc 08.
2026-10-01 00:13:53 -06:00
Hails b495ed696f Asset pipeline: bake authored map spawns and headings
Every map's startup position and default landing zone is its baked
spawn. The old rule (upward triangle nearest the origin) put the skater
over the void on MegaPark and on the roof of Industrial Skate Park and
StartPark, because park origins sit at a corner and retail floors are
sometimes wound downward.

New map_starts.py resolves each district's start from retail data: the
world row's start locator (parks), a chosen fe_locations row for
districts with several (University career start, Industrial Haystings
Park, DownTown Rosalita Skate Park, Maloof street), or the district's
only fe_locations row. Position and heading come from the district's
global_locators records; the heading is now written into the .skate
header. Districts without an authored start fall back to geometry:
compact parks use the new ground_spawn search, city-sized districts keep
the original rule (ground_spawn put Industrial under the streets).

See docs/hails-additions/04-map-spawns.md.
2026-09-30 19:26:57 -06:00
Hails ea549ab042 Setup: pass extract-xiso options before the image path
extract-xiso stops parsing options at the first image path, so
`-x <iso> -d <dir>` extracted into the working directory and then failed
on "-d" as a second image (exit 1 -> "Conversion failed"). Use
`-x -d <dir> <iso>` in both call sites.

See docs/hails-additions/01-iso-extraction.md.
2026-09-30 19:26:12 -06:00
Ethanw05andCursor 821f523bb8 Fix MP air launch NaNs, solid modding, and Windows release packaging.
Sanitize non-finite SIMD lanes in offboard air selection, add solid dynamics and mod replication APIs, improve setup refresh without re-extracting assets, and harden Build-Release.ps1 for older PowerShell hosts.

Co-authored-by: Cursor <[email protected]>
2026-09-11 12:24:42 -06:00
chazmm cb7968930f Rebuild raw asset caches cleanly during installation refresh 2026-09-10 03:42:03 +01:00
chazmm e23f7ba562 Normalize Windows path aliases when recording setup outputs 2026-09-10 02:45:27 +01:00
chazmm ea7b9a8218 Keep setup playable when optional disc content is missing 2026-09-10 02:36:05 +01:00
chazmm 5ac038df5d Handle missing optional character assets and shorten HUD extraction paths 2026-09-10 02:18:49 +01:00
chazmm 128b40d1e8 Fix default.xex refresh flow and cache verified character preparation stages 2026-09-10 01:24:11 +01:00
chazmm f55c17dc4b Remove checkout dependency from packaged gesture menu preparation 2026-09-09 04:25:35 +01:00
chazmm 8d34dca161 Track shared character preparation dependencies in setup identity 2026-09-09 04:23:24 +01:00
chazmm 8bd052c4cc Prepare complete character content on first run and restore stock and clothing lighting 2026-09-09 04:19:07 +01:00
chazmm a4a82f5705 Give each portable copy its own setup and refresh changed asset groups 2026-09-09 03:00:59 +01:00
chazmm 6aa4762285 Speed up owned-disc setup while preserving runtime asset content 2026-09-09 01:52:25 +01:00
chazmm 3427261467 Keep original installer and add only automatic native HUD export 2026-09-09 01:23:31 +01:00
chazmm a05c8c06b3 Extract complete owned game content and prepare HUDs and customisation during setup 2026-09-09 00:18:07 +01:00
chazmm fb6f6eddfb Merge retail scenery, lighting and travel with current map lifecycle 2026-09-08 20:54:00 +01:00
chazmm 38d4f30ef0 Extract original travel destinations and add teleport menu with still-water rendering 2026-09-08 20:31:57 +01:00
chazmm ab538ea732 Add scrolling custom character library and native skater roster 2026-09-08 19:55:19 +01:00
chazmm 45c11a447d Restore authored DMO placements and correct grime UV scaling; revert hair changes 2026-09-08 18:52:44 +01:00
chazmm 96adff5d96 Extend retail environment shading and refresh texture workflow 2026-09-08 18:30:31 +01:00
chazmm 61dbdfce8e Fix native hair coverage and verify customiser gameplay effects 2026-09-08 17:31:30 +01:00
chazmm 6e686edb77 Simplify character menus and add resident live customisation 2026-09-08 17:08:34 +01:00
chazmm ad992f2001 Fix padded Xbox texture rows and BC2/BC3 colour decoding 2026-09-08 16:56:20 +01:00
chazmm 7d44d84f19 Add spatial irradiance and character lighting adapter 2026-09-08 16:41:42 +01:00
chazmm 616be77a28 Restore global tree-wall backdrops omitted from district streams 2026-09-08 16:07:30 +01:00
chazmm a2ead83471 Add playable customiser test build with transactional retail character swaps 2026-09-08 15:51:15 +01:00
chazmm 9ca5ee076f Recover owned CAC catalog and native morph metadata with explicit runtime gates 2026-09-08 15:26:00 +01:00
chazmm 21844a3a37 Resolve authored world skies, sun gradients and location directions 2026-09-08 15:25:59 +01:00
chazmm b3743789ee Resolve VLT text array values before discarding the binary bank 2026-09-08 15:17:47 +01:00
chazmm 9292f69c08 Preserve complete aligned VLT arrays alongside legacy field data 2026-09-08 15:17:47 +01:00
chazmm 051a73ed6a Resolve VLT text array values before discarding the binary bank 2026-09-08 15:15:20 +01:00
chazmm 1888e48a99 Preserve complete aligned VLT arrays alongside legacy field data 2026-09-08 15:14:45 +01:00
chazmm da364c924f Render retail world materials with baked lighting and native tone curve 2026-09-08 06:23:31 +01:00
chazmm 316b0d8b49 Accelerate asset setup with native decoding and parallel map conversion 2026-09-08 05:29:29 +01:00
chazmm 1a9ba50c29 Accept extracted Xbox game folders and default.xex in setup 2026-09-08 05:08:18 +01:00
chazmm a7090f9ef3 Handle retail park streams and spline headers across all disc maps 2026-09-08 04:44:05 +01:00
chazmm ae107e2876 Convert retail skaters and maps directly without Blender 2026-09-08 04:27:56 +01:00
chazmm 64d321763c Disable Blender-based release setup pending direct conversion 2026-09-08 04:08:15 +01:00
chazmm 7aa4f13353 Add owned-disc setup, map selection and Windows release packaging 2026-09-08 04:00:53 +01:00