diff --git a/crates/skate-game/src/physics.rs b/crates/skate-game/src/physics.rs index 981d059d..07d78a22 100644 --- a/crates/skate-game/src/physics.rs +++ b/crates/skate-game/src/physics.rs @@ -1,5 +1,6 @@ //! Host game physics ownership and schedule. Physical calculations stay in core. /// Shared stock physics_mode key for loaded settings and per-frame mode packets. +#[cfg(test)] pub(crate) const PHYSICS_MODE: &str = "easy"; mod air_phase; @@ -270,8 +271,8 @@ impl GamePhysics { let settings = PhysicsSettings::load(&data)?; let animation_profile = animation_phase::AnimationProfile::load(&data, difficulty.key())?; eprintln!( - "SKATE_PHYSICS_MODE {PHYSICS_MODE} index={}", - animation_profile.physics_mode + "SKATE_PHYSICS_MODE {} index={}", + difficulty.key(), animation_profile.physics_mode ); let mut spawn = RetailAffineTransform { translation: Vector3::new( diff --git a/crates/skate-game/src/physics/player_state/transition.rs b/crates/skate-game/src/physics/player_state/transition.rs index 6ae06c58..aa6339c6 100644 --- a/crates/skate-game/src/physics/player_state/transition.rs +++ b/crates/skate-game/src/physics/player_state/transition.rs @@ -59,10 +59,8 @@ pub(super) fn set( skater: &mut SkaterRuntime, requested: PhysicalStateId, ) -> Result<(), String> { - // RevertGround is a transient selector owner in TU3. Its Enter/Exit - // production methods are the empty adapter and it must not replace the - // live ground solver. Keep the selected solver on PhysicsGround while - // preserving the selector's next-frame flags. + // Selected archive behavior: revert requests continue through the ordinary + // ground solver. The user's previous dedicated revert owner is not entered. let requested = match requested { PhysicalStateId::RevertGround => PhysicalStateId::PhysicsGround, state => state, diff --git a/docs/archive-crates-5-integration.md b/docs/archive-crates-5-integration.md new file mode 100644 index 00000000..0bca4ad3 --- /dev/null +++ b/docs/archive-crates-5-integration.md @@ -0,0 +1,90 @@ +# Archive 5 re-merge + +Baseline: the user's build at `ba92948`. Source archive: `crates (5).zip`, +SHA256 `ca57392b5625f228a46d32cb10b3455f9946f6bfefefb08cfd649ac3706569d5`. +The first attempt is retained on `lol/archive-crates-5-integration` for reference. +The replacement is on `lol/archive-crates-5-selective`, rebuilt from the baseline. +Previously reviewed adapter code was reused where it fits the agreed ownership; +the archive was not applied as a replacement source tree. + +## Agreed ownership + +| Area | Decision | +| --- | --- | +| Off-board movement, board possession, mounting/landing | Archive systems | +| Grinds, spline queries, material/family handling | Archive systems | +| Powerslides | Archive runtime and settings | +| Reverts | Archive fallback, explicitly selected by the user | +| Manuals and FPS display | Add archive support | +| Session markers and automatic bail recovery | Keep user's features | +| Plants, boneless and handplants | Keep user's behavior; adapt query interfaces | +| Scoring/HUD, crash reporting, outfits/custom models | Keep user's features | +| Map management, multiplayer, menus, replay | Keep user's features | +| Pose sampling, authored clip overrides, blend-space evaluator | Keep current implementation | + +The archive redirects `RevertGround` requests to ordinary ground physics; it +does not supply a dedicated revert solver. That fallback is intentional in this +merge. The previous revert owner is not entered through normal state selection. +Powerslide runtime, update and settings files match the archive. + +## Integration details + +The new off-board/grind owners use the current marker and respawn services. +Manual marker returns retain the saved on/off-board state and clear pending +physics work. Manual markers and automatic bail checkpoints remain separate. +Plants query the new spline/trajectory interfaces. Multiplayer collision +publication reads the new per-part board-volume state. Optional climbing resumes +through the new off-board contact owners. + +The preservation audit found 46 feature files unchanged from `ba92948`, and +eight adapter files changed: boneless launch, climbing approach/test queries, +footplant ground/edge queries, handplant queries, network collision publication, +and automatic-respawn observations. Shared frame/state coordination also adapts +these retained features to the archive owners; unchanged feature files alone do +not prove runtime compatibility. + +The user's interpolated animation/replay presentation function is unchanged. +Only the archive's independent skater-culling fix was added around it. Existing +native bump Begin dispatch/arithmetic, decoded-key sampling, authored clip +replacements and weighted blend arithmetic remain. Unsupported stock predicates +are not replaced with guesses, and optional unsupported branches retain explicit +lazy diagnostics. The silent archive deck-angle no-op remains an explicit error +if reached. + +Collection lookup accepts both readable and numeric AttribSys names. This fixes +the first build's `Missing stock collection anim_motion/manual` initialization +failure without changing or regenerating assets. Two data-only regression tests +passed in the investigation; a static audit resolved 157 literal lookups against +the prepared 6,849-collection export, including payload sizes. + +## Validation and private build + +`cargo check --workspace --tests --release --no-default-features --offline` +passed for the reconciled owners. Gameplay tests were compiled, not executed. +The final Windows executable is linked directly to an ignored private filename +with explicit `/OUT` and `/PDB`, using the shared target cache and static CRT. +The launcher is updated only after successful linking and PE/PDB provenance +inspection. The ignored build manifest records the exact source revision/hash. + +The existing prepared customiser assets, ten maps, scoring HUD and marker overlay +are reused. No ISO extraction, Blender, clean build, game launch, Steam session, +push, merge into the main branch, or release is performed by this task. + +## Manual checks + +1. Start University and resume; check that initialization completes, the avatar + remains visible and the HUD/FPS display appears. +2. Push, steer, brake, ollie, flip and manual. Try powerslides in both directions + and at low/high speeds; watch for sudden spins, loss of control or stuck poses. + Try revert input too, remembering this build uses the archive's fallback. +3. Dismount, run, jump, fall, throw/retrieve and remount. Watch for floating feet, + immediate landing poses, board separation and unexpected bails. +4. Enter/exit grinds from both sides; exercise plants, handplants and boneless. + Check for missed contact, abrupt launches and states that fail to end. +5. Set a marker with LB + D-pad Down and return with LB + hold D-pad Up, on and + off the board. Bail separately; confirm the manual marker is not overwritten. +6. Change maps, difficulty and outfits, then repeat recovery checks. Check replay + interpolation and multiplayer appearances/contacts in a prepared session. + +Report failures with the diagnostic report, map/difficulty and last controller +action. Compile and source-preservation checks do not establish gameplay parity.