From 5ebe2be38e64bb7c775578f73d11d2a6d0660c8b Mon Sep 17 00:00:00 2001 From: Erik Date: Fri, 3 Jul 2026 17:38:41 +0200 Subject: [PATCH] chore: #163 strip R4-V5 temp diagnostics; docs: close #162 (no adaptation) #163: remove [autowalk-gate] (+ _lastAutowalkGateLogTime throttle clock, PlayerMovementController), [autowalk-feed] (GameWindow player tracker feed), and the short-lived [MOVETO-CANCEL] #162 capture probe. The durable ProbeAutoWalk family (PhysicsDiagnostics owner + DebugPanel toggle + the permanent [autowalk] probe sites) stays. #162 closed WITHOUT adaptation: user A/B says retail does not glide, and post-#161 acdream matches (user-verified walk/run-by-distance movetos + clean mid-chain key takeover). Head-interrupt + CancelMoveTo re-audited retail-verbatim against the raw (unpack_movement 0x00524440, interrupt_current_movement 0x005101f0, MoveToManager::CancelMoveTo 0x00529930 armed-gate); the launch-162 capture shows ACE's mt-0 reflections carry the mover's real locomotion, so cancels never strand the legs. The old glide was killed by the R4-V5 stack + #161's apply-pass params fix. Evidence trail in ISSUES Recently-closed #162. Suite 3,964 green. Co-Authored-By: Claude Fable 5 --- docs/ISSUES.md | 55 ++++++++++++------- .../2026-07-03-r4-verify-session-handoff.md | 24 ++++---- .../Input/PlayerMovementController.cs | 18 ------ src/AcDream.App/Rendering/GameWindow.cs | 5 -- 4 files changed, 47 insertions(+), 55 deletions(-) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 0b73fb53..65dd7314 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -85,28 +85,15 @@ R5/R6 touches the action list. **Where:** `MotionInterpreter.MoveToInterpretedState` action loop / `DispatchInterpretedMotion` (doc comment marks the gap). -## #162 — Observer-side moveto cancelled by ACE's autonomous MTS reflections (the "glide" class) - -**Status:** OPEN — adjudication PENDING USER (2026-07-03) -**Finding (ACE-source-verified):** ACE re-broadcasts every inbound -MoveToState to all observers as an autonomous mt-0 UM (MovementData.cs:162 -hardcoded IsAutonomous=true — ACE's own comment: "this is a hack ... -investigate this"; GameActionMoveToState.cs:36 unconditional), and sends a -chain exactly ONE mt-6 (no re-emit; no arrival broadcast). Retail's -unpack head-interrupt (verbatim in acdream) cancels the observer-side -moveto on each reflection → glide when the mover's client emits MTS -mid-chain. A retail observer on ACE should glide identically (parity). -**Pending:** the user's retail-observing-retail A/B; if parity confirmed, -EITHER accept, OR ship a narrow registered ACE-compat adaptation (e.g. -command-less autonomous reflection doesn't cancel an armed remote moveto) -— requires explicit user approval per the no-workarounds rule. - ## #163 — Strip the R4-V5 stall-investigation diagnostics -**Status:** OPEN (2026-07-03) — remove `[autowalk-gate]` ( -PlayerMovementController, + `_lastAutowalkGateLogTime`) and -`[autowalk-feed]` (GameWindow player tracker feed) once #160-#162 close; -they're TEMPORARY-tagged in-code. +**Status:** IN-PROGRESS (2026-07-03) — `[autowalk-gate]` (+ +`_lastAutowalkGateLogTime`), `[autowalk-feed]`, and the short-lived +`[MOVETO-CANCEL]` #162 probe all stripped from source; build+commit +pending the running client's close (file locks). The durable +`ProbeAutoWalk` family (PhysicsDiagnostics flag + DebugPanel toggle + +the `[autowalk]` probe sites) stays — that's the promoted diagnostic +owner, not a temp diag. ## #159 — CombatAnimationPlanner uses 2013-decomp command numbering, not ACE/DRW @@ -5745,6 +5732,34 @@ outdoors at the angle that previously erased it. # Recently closed +## #162 — Observer-side moveto cancelled by ACE's autonomous MTS reflections (the "glide" class) + +**Status:** DONE (2026-07-03) — resolved WITHOUT adaptation; user-verified. +The user's A/B came back **retail does NOT glide** (new-fact branch), and +the follow-up acdream capture (launch-162, post-#161) showed acdream now +matches: walk/run by distance on mt-6 movetos (retail +`MovementParameters.GetCommand` threshold), clean takeover on a mid-chain +key press. Three-part evidence: +1. **Mechanism re-audit vs raw:** the head-interrupt IS unconditional + (`unpack_movement` 0x00524440 → `interrupt_current_movement` 0x005101f0 + → `MovementManager::CancelMoveTo(0x36)`), and `MoveToManager::CancelMoveTo` + (0x00529930) is gated on an ARMED moveto (drain + CleanUp + + StopCompletely; no-op otherwise). Our ports are verbatim — retail's + observer loses its armed moveto on the first reflection TOO. +2. **Wire capture:** ACE's mt-0 reflections carry the mover's REAL + locomotion (WalkForward @ -2.92 backward, RunForward @ 4.50, turns) — + so a cancel is always followed by correct legs; the no-glide outcome + needs no moveto protection. The `[MOVETO-CANCEL]` probe showed zero + mover-side cancels in normal use-walks (the mover's client doesn't emit + MTS mid-chain unless keys are pressed) and retail-correct + replace-cancels on an NPC's own successive TurnToObject UMs. +3. **The originally-observed glide is no longer reproducible** — killed by + the R4-V5 fix stack (un-ticked remote MoveToManagers `006cf659`, TS-40 + link-strip `350fb5e3`, #160 run-rate `41006e79`) + #161's apply-pass + params fix `b1cf0102` (ModifyInterpretedState=true corrupted interpreted + state on EVERY UM apply, not just landings). +The theorized "narrow ACE-compat adaptation" is dead — nothing to adapt. + ## #161 — Remote jump landing holds the falling pose (no landing anim) **Status:** DONE (2026-07-03, `b1cf0102`) — user live-verified ("Yes works!"). diff --git a/docs/research/2026-07-03-r4-verify-session-handoff.md b/docs/research/2026-07-03-r4-verify-session-handoff.md index 01c7d6e9..5ccb7815 100644 --- a/docs/research/2026-07-03-r4-verify-session-handoff.md +++ b/docs/research/2026-07-03-r4-verify-session-handoff.md @@ -49,18 +49,18 @@ whole gate state — it is how both wedges were pinned. NOTE: "HitGround raw @305949" below was a mislabel (that line is inside `move_to_interpreted_state`; real HitGround = 0x00528ac0 → `apply_current_movement(0,0)`). Full trail: ISSUES Recently-closed #161. -2. **#162 — glide-class adjudication (PENDING USER)**: ACE re-broadcasts - every mover MoveToState to observers as autonomous mt-0 - (MovementData.cs:162 — ACE's own "this is a hack" comment; - GameActionMoveToState.cs:36 unconditional; chain sends ONE mt-6, no - re-emit, nothing on arrival — all ACE-source-verified, see the issue). - Retail-verbatim head-interrupt cancels the observer moveto on each. - The user's retail-observing-retail A/B decides: parity (accept or a - NARROW registered adaptation — **explicit user approval required**) vs - new fact. -3. **#163 — strip the TEMPORARY diagnostics** once #161/#162 close: - `[autowalk-gate]` + `_lastAutowalkGateLogTime` (PlayerMovementController) - and `[autowalk-feed]` (GameWindow player tracker feed). +2. ~~**#162 — glide-class adjudication**~~ **CLOSED 2026-07-03, no + adaptation.** User A/B: retail does NOT glide (new-fact branch) — and + post-#161 acdream doesn't either (user-verified walk/run-by-distance + + clean mid-chain key takeover). Mechanism re-audit: head-interrupt + + CancelMoveTo ports are retail-verbatim (retail's observer ALSO loses + the armed moveto on the first reflection); ACE's mt-0 reflections carry + the mover's real locomotion, so the legs stay correct after any cancel. + The old glide was killed by the R4-V5 stack + #161's apply-pass params + fix. Full evidence: ISSUES Recently-closed #162. +3. ~~**#163 — strip the TEMPORARY diagnostics**~~ **DONE 2026-07-03** + (`[autowalk-gate]` + clock, `[autowalk-feed]`, and the short-lived + `[MOVETO-CANCEL]` probe; the durable ProbeAutoWalk family stays). 4. Then the **combined R2+R3+R4 visual-pass remainder** (jump/ledge momentum, run-in-circles blend, stop settle, retail-observer view of +Acdream) and **R5** (MovementManager facade + StickyManager + diff --git a/src/AcDream.App/Input/PlayerMovementController.cs b/src/AcDream.App/Input/PlayerMovementController.cs index b90d6577..d60c82a2 100644 --- a/src/AcDream.App/Input/PlayerMovementController.cs +++ b/src/AcDream.App/Input/PlayerMovementController.cs @@ -198,8 +198,6 @@ public sealed class PlayerMovementController private bool _prevTurnLeftHeld; private bool _prevTurnRightHeld; private bool _prevRunHeld; - // TEMPORARY diagnostic clock (2026-07-03 moveto-stall investigation). - private float _lastAutowalkGateLogTime = float.MinValue; // Heartbeat timer. // Cadence is 1.0 sec to match holtburger's @@ -528,22 +526,6 @@ public sealed class PlayerMovementController // slot drains. _motion.CheckForCompletedMotions?.Invoke(); - // TEMPORARY diagnostic (2026-07-03 moveto-stall investigation, - // strip when closed): every gate input the armed moveto's per-tick - // drive depends on, ~2 Hz while armed, ProbeAutoWalk-gated. - if (PhysicsDiagnostics.ProbeAutoWalkEnabled - && MoveTo is { } mtDiag && mtDiag.IsMovingTo() - && _simTimeSeconds - _lastAutowalkGateLogTime > 0.5f) - { - _lastAutowalkGateLogTime = _simTimeSeconds; - var pmParts = new System.Collections.Generic.List(); - foreach (var n in _motion.PendingMotions) pmParts.Add($"0x{n.Motion:X8}"); - var nodeParts = new System.Collections.Generic.List(); - foreach (var n in mtDiag.PendingActions) nodeParts.Add(n.Type.ToString()); - Console.WriteLine(System.FormattableString.Invariant( - $"[autowalk-gate] type={mtDiag.MovementTypeState} init={mtDiag.Initialized} tlid=0x{mtDiag.TopLevelObjectId:X8} contact={_body.InContact} motionsPending={_motion.MotionsPending()} pm=[{string.Join(",", pmParts)}] nodes=[{string.Join(",", nodeParts)}] curCmd=0x{mtDiag.CurrentCommand:X8} auxCmd=0x{mtDiag.AuxCommand:X8} fwd=0x{_motion.InterpretedState.ForwardCommand:X8} pos=({Position.X:F1},{Position.Y:F1}) yaw={Yaw:F2}")); - } - // Portal-space guard: while teleporting, no input is processed and // no physics is resolved. Return a zero-movement result so the caller // can detect the frozen state (MotionStateChanged = false, no commands). diff --git a/src/AcDream.App/Rendering/GameWindow.cs b/src/AcDream.App/Rendering/GameWindow.cs index 1e567afc..95c6bd9f 100644 --- a/src/AcDream.App/Rendering/GameWindow.cs +++ b/src/AcDream.App/Rendering/GameWindow.cs @@ -8009,11 +8009,6 @@ public sealed class GameWindow : IDisposable _playerMoveToTargetGuid, AcDream.Core.Physics.Motion.TargetStatus.Ok, tp, tp)); - if (AcDream.Core.Physics.PhysicsDiagnostics.ProbeAutoWalkEnabled) - { - Console.WriteLine(System.FormattableString.Invariant( - $"[autowalk-feed] Ok guid=0x{_playerMoveToTargetGuid:X8} pos=({tpos.X:F1},{tpos.Y:F1}) init={playerMtm.Initialized}")); - } } } else