#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 /
|
||||
`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!").
|
||||
|
|
|
|||
|
|
@ -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 +
|
||||
|
|
|
|||
|
|
@ -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<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
|
||||
// no physics is resolved. Return a zero-movement result so the caller
|
||||
// can detect the frozen state (MotionStateChanged = false, no commands).
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue