- --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.
The shared FrameStateData buffer (clock, ocean PCA frame, shadow floor) was
updated by replacing the ShaderStorageBuffer asset's data every frame. Bevy
0.18 then creates a new GPU buffer, while every world material's bind group
keeps the first one, so all world shaders saw clock 0 and no PCA frame:
water never animated, family 14 UV scrolling and the shadow floor froze.
- Create the buffer once (COPY_DST), extract FrameStateData to the render
world and write it with RenderQueue::write_buffer (PrepareResources)
- Water families 30/33 use clock.z: retail water time runs at half
real-time speed and loops every 10 s (behaviour of the disc build's
water update; re-implemented, reference only)
- The unsupported-family warning lists the shaders it falls back for
Confirmed in play: water animates on University and DownTown.
See docs/hails-additions/09-water.md.
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.
Water is retail collision surface type 12 (ID 1591); only DownTown and
University have it. The skater's water flag and height (Collision+3481/+28
-> Processed2488 bit30 / 2924) were never written, so the wipeout state's
water path (special surface, buoyancy, IsInWater) could never start.
- publish_water: body contact (SkeletonCollision material 12) or board
contact (collision flag bit 25) sets the flag and water height
- No recovered retail check bails on water: touching it now requests an
ordinary bail (request slot 33, logged WATER_BAIL); project choice
- water_surfaces example lists collision surface types and water per map
Confirmed in play: bails on University fountain/reservoir and DownTown.
See docs/hails-additions/09-water.md.
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.
Collections are looked up through a lazily built OnceLock<HashMap> index
with first-match semantics, identical to the linear scan on 145,807 real
lookups. See docs/hails-additions/07-collections-index.md (PR E).
Retail collision includes clustered meshes in which no unit carries a
surface ID (unit flag 0x80 unset). Across every shipped district these
are only 12-triangle boxes: zone, trigger and level-bounds volumes. The
loader made them solid, creating invisible walls (SkateSchool spawn
area, DownTown's Kube Tower plaza, MegaPark's stadium entrance, Maloof).
Authored player positions lie inside some of them, so they are not solid
in the original game.
visit_clusters now decodes and validates each mesh fully and skips it
when no unit has a surface ID. Meshes mixing surfaced and surfaceless
units are ordinary geometry and stay whole. RetailTriangle records
has_surface.
Collision triangles loaded: SkateSchool -84, DownTown -24, Maloof -24,
MegaPark -12, all other maps unchanged. Confirmed in play.
See docs/hails-additions/05-collision-volumes.md.
Implements issue #14. A dedicated thread owns SDL3 (3.4.16, statically
linked via sdl3 =0.20.0) and publishes per-slot snapshots re-expressed as
the XInput-shaped XboxState, so the TU3 conversion in skate-core is
unchanged. Conversions are exact for XInput-backed pads (stick Y via
bitwise NOT, trigger round-to-nearest). SKATE3_INPUT=xinput selects the
original transport, which is also the fallback if SDL fails to start.
Optional settings/controller.json maps paddles to XInput buttons.
Build: scripts/Ensure-CMake.ps1 locates CMake (PATH or Visual Studio's
copy) for the SDL source build. sdl3-sys is vendored with a build.rs
patch setting CMAKE_MSVC_RUNTIME_LIBRARY from crt-static, because SDL's
CMake (policy CMP0091) ignores cmake-rs' -MT and the static-CRT release
build failed with unresolved __imp_* symbols.
See docs/hails-additions/03-sdl3-gamepad-input.md and vendor/README.md.
Add generalized engine access and challenge mods, repair SKATE turn handling, and improve collision prediction and physics transitions. Reduce mod snapshot and material update overhead, preserve authored GLB materials with lighting and shadows, and improve CPU profiling.
Reset biped controller on checkpoint teleport and fall back to identity when skeleton root orthonormalization sees a degenerate axis, preventing poisoned COM frames and deck torque before the shared solve.
Co-authored-by: Cursor <[email protected]>
Apply probe SH to online customiser characters after remote bind, restore received sun shadows, and ship Skyline driving, fullscreen, and renderer improvements on the branch.
Co-authored-by: Cursor <[email protected]>
Respawn the chassis when a session starts so solid-bridge replication publishes a fresh body, and show local publish counts in replication status.
Co-authored-by: Cursor <[email protected]>
Expose append-only mesh buffers for mod skid/smoke rendering, sync rear-wheel VFX over multiplayer, rebuild Skyline audio assets, and let the updater install from any CI branch.
Co-authored-by: Cursor <[email protected]>
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]>