#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 <noreply@anthropic.com>
This commit is contained in:
parent
584ad0a8f6
commit
5ebe2be38e
4 changed files with 47 additions and 55 deletions
|
|
@ -85,28 +85,15 @@ R5/R6 touches the action list. **Where:**
|
||||||
`MotionInterpreter.MoveToInterpretedState` action loop /
|
`MotionInterpreter.MoveToInterpretedState` action loop /
|
||||||
`DispatchInterpretedMotion` (doc comment marks the gap).
|
`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
|
## #163 — Strip the R4-V5 stall-investigation diagnostics
|
||||||
|
|
||||||
**Status:** OPEN (2026-07-03) — remove `[autowalk-gate]` (
|
**Status:** IN-PROGRESS (2026-07-03) — `[autowalk-gate]` (+
|
||||||
PlayerMovementController, + `_lastAutowalkGateLogTime`) and
|
`_lastAutowalkGateLogTime`), `[autowalk-feed]`, and the short-lived
|
||||||
`[autowalk-feed]` (GameWindow player tracker feed) once #160-#162 close;
|
`[MOVETO-CANCEL]` #162 probe all stripped from source; build+commit
|
||||||
they're TEMPORARY-tagged in-code.
|
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
|
## #159 — CombatAnimationPlanner uses 2013-decomp command numbering, not ACE/DRW
|
||||||
|
|
||||||
|
|
@ -5745,6 +5732,34 @@ outdoors at the angle that previously erased it.
|
||||||
|
|
||||||
# Recently closed
|
# 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)
|
## #161 — Remote jump landing holds the falling pose (no landing anim)
|
||||||
|
|
||||||
**Status:** DONE (2026-07-03, `b1cf0102`) — user live-verified ("Yes works!").
|
**Status:** DONE (2026-07-03, `b1cf0102`) — user live-verified ("Yes works!").
|
||||||
|
|
|
||||||
|
|
@ -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
|
NOTE: "HitGround raw @305949" below was a mislabel (that line is inside
|
||||||
`move_to_interpreted_state`; real HitGround = 0x00528ac0 →
|
`move_to_interpreted_state`; real HitGround = 0x00528ac0 →
|
||||||
`apply_current_movement(0,0)`). Full trail: ISSUES Recently-closed #161.
|
`apply_current_movement(0,0)`). Full trail: ISSUES Recently-closed #161.
|
||||||
2. **#162 — glide-class adjudication (PENDING USER)**: ACE re-broadcasts
|
2. ~~**#162 — glide-class adjudication**~~ **CLOSED 2026-07-03, no
|
||||||
every mover MoveToState to observers as autonomous mt-0
|
adaptation.** User A/B: retail does NOT glide (new-fact branch) — and
|
||||||
(MovementData.cs:162 — ACE's own "this is a hack" comment;
|
post-#161 acdream doesn't either (user-verified walk/run-by-distance +
|
||||||
GameActionMoveToState.cs:36 unconditional; chain sends ONE mt-6, no
|
clean mid-chain key takeover). Mechanism re-audit: head-interrupt +
|
||||||
re-emit, nothing on arrival — all ACE-source-verified, see the issue).
|
CancelMoveTo ports are retail-verbatim (retail's observer ALSO loses
|
||||||
Retail-verbatim head-interrupt cancels the observer moveto on each.
|
the armed moveto on the first reflection); ACE's mt-0 reflections carry
|
||||||
The user's retail-observing-retail A/B decides: parity (accept or a
|
the mover's real locomotion, so the legs stay correct after any cancel.
|
||||||
NARROW registered adaptation — **explicit user approval required**) vs
|
The old glide was killed by the R4-V5 stack + #161's apply-pass params
|
||||||
new fact.
|
fix. Full evidence: ISSUES Recently-closed #162.
|
||||||
3. **#163 — strip the TEMPORARY diagnostics** once #161/#162 close:
|
3. ~~**#163 — strip the TEMPORARY diagnostics**~~ **DONE 2026-07-03**
|
||||||
`[autowalk-gate]` + `_lastAutowalkGateLogTime` (PlayerMovementController)
|
(`[autowalk-gate]` + clock, `[autowalk-feed]`, and the short-lived
|
||||||
and `[autowalk-feed]` (GameWindow player tracker feed).
|
`[MOVETO-CANCEL]` probe; the durable ProbeAutoWalk family stays).
|
||||||
4. Then the **combined R2+R3+R4 visual-pass remainder** (jump/ledge
|
4. Then the **combined R2+R3+R4 visual-pass remainder** (jump/ledge
|
||||||
momentum, run-in-circles blend, stop settle, retail-observer view of
|
momentum, run-in-circles blend, stop settle, retail-observer view of
|
||||||
+Acdream) and **R5** (MovementManager facade + StickyManager +
|
+Acdream) and **R5** (MovementManager facade + StickyManager +
|
||||||
|
|
|
||||||
|
|
@ -198,8 +198,6 @@ public sealed class PlayerMovementController
|
||||||
private bool _prevTurnLeftHeld;
|
private bool _prevTurnLeftHeld;
|
||||||
private bool _prevTurnRightHeld;
|
private bool _prevTurnRightHeld;
|
||||||
private bool _prevRunHeld;
|
private bool _prevRunHeld;
|
||||||
// TEMPORARY diagnostic clock (2026-07-03 moveto-stall investigation).
|
|
||||||
private float _lastAutowalkGateLogTime = float.MinValue;
|
|
||||||
|
|
||||||
// Heartbeat timer.
|
// Heartbeat timer.
|
||||||
// Cadence is 1.0 sec to match holtburger's
|
// Cadence is 1.0 sec to match holtburger's
|
||||||
|
|
@ -528,22 +526,6 @@ public sealed class PlayerMovementController
|
||||||
// slot drains.
|
// slot drains.
|
||||||
_motion.CheckForCompletedMotions?.Invoke();
|
_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<string>();
|
|
||||||
foreach (var n in _motion.PendingMotions) pmParts.Add($"0x{n.Motion:X8}");
|
|
||||||
var nodeParts = new System.Collections.Generic.List<string>();
|
|
||||||
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
|
// Portal-space guard: while teleporting, no input is processed and
|
||||||
// no physics is resolved. Return a zero-movement result so the caller
|
// no physics is resolved. Return a zero-movement result so the caller
|
||||||
// can detect the frozen state (MotionStateChanged = false, no commands).
|
// can detect the frozen state (MotionStateChanged = false, no commands).
|
||||||
|
|
|
||||||
|
|
@ -8009,11 +8009,6 @@ public sealed class GameWindow : IDisposable
|
||||||
_playerMoveToTargetGuid,
|
_playerMoveToTargetGuid,
|
||||||
AcDream.Core.Physics.Motion.TargetStatus.Ok,
|
AcDream.Core.Physics.Motion.TargetStatus.Ok,
|
||||||
tp, tp));
|
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
|
else
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue