diff --git a/crates/skate-game/src/physics/player_state/transition.rs b/crates/skate-game/src/physics/player_state/transition.rs index aa6339c6..f908ad50 100644 --- a/crates/skate-game/src/physics/player_state/transition.rs +++ b/crates/skate-game/src/physics/player_state/transition.rs @@ -59,12 +59,8 @@ pub(super) fn set( skater: &mut SkaterRuntime, requested: PhysicalStateId, ) -> Result<(), String> { - // 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, - }; + // RevertGround owns a real native Enter/Update/Fill lifecycle. Preserve + // the selector request so its turning controller can run. skater.player_state.requested_state = requested; let current = skater.player_state.current(); if current == requested { @@ -157,7 +153,10 @@ pub(super) fn set( //Native82DB8540 publishes Processed state/history BEFORE old Exit. The //same retained objects then receive Exit followed by the new Enter. match current { - PhysicalStateId::RevertGround => {}, //Exit82B61BB8 + PhysicalStateId::RevertGround => { + // Native Exit is empty; this is diagnostic-only host reporting. + info!(tick = physics.ticks, requested = ?requested, "REVERT_EXIT"); + }, PhysicalStateId::HandPlant => skater.handplant.reset(), PhysicalStateId::FootPlant => skater.footplant.reset(), //Exit82D4C5A8 PhysicalStateId::Boneless => {}, //empty82D4C9B4 diff --git a/crates/skate-game/src/physics/revert_state.rs b/crates/skate-game/src/physics/revert_state.rs index ac945dc9..57a12275 100644 --- a/crates/skate-game/src/physics/revert_state.rs +++ b/crates/skate-game/src/physics/revert_state.rs @@ -107,6 +107,9 @@ pub(super) fn enter(physics: &mut GamePhysics, skater: &mut SkaterRuntime) -> Re r.elapsed = 0.0; r.captured = false; r.active = true; + bevy::log::info!(tick = physics.ticks, direction = r.direction, + speed = skater.player_input.processed.scalar_2656, + "REVERT_ENTER"); skater.wipeout.state.enter_ground(); Ok(()) } diff --git a/docs/archive-crates-5-integration.md b/docs/archive-crates-5-integration.md index 0bca4ad3..25c0f104 100644 --- a/docs/archive-crates-5-integration.md +++ b/docs/archive-crates-5-integration.md @@ -14,7 +14,7 @@ the archive was not applied as a replacement source tree. | 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 | +| Reverts | Dedicated controller enabled after reported non-working reverts | | 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 | @@ -22,10 +22,13 @@ the archive was not applied as a replacement source tree. | 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. +The archive redirects `RevertGround` requests to ordinary ground physics and +does not supply a dedicated revert solver. After the user reported non-working +reverts, this redirect was removed so the existing revert Enter/Update/Fill +lifecycle can execute. Entry and exit now emit `REVERT_ENTER` / `REVERT_EXIT` +diagnostics. The local native reference has a dedicated revert Update at +`0x82D43518` (vtable `0x82327330`); enabling the owner does not establish runtime +parity. Powerslide runtime, update and settings files still match the archive. ## Integration details @@ -76,7 +79,9 @@ push, merge into the main branch, or release is performed by this task. 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. + Try reverts in both directions while rolling, including switch stance. Watch + for missing turns, continuous spinning or failure to return to normal riding. + If they fail, include the launch log and whether `REVERT_ENTER` appears. 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.