docs: #170 — record code-grounded root cause (MovementManager coexistence, R5-V4)

Traced the live remote path: the mt-6 chase runs through the verbatim
MoveToManager, but every inbound mt-0 attack UM fires the unpack_movement head
interrupt (bound to MoveTo.CancelMoveTo) AND installs the UM's ForwardCommand
(Ready/idle for an attack-only UM), so the chase MoveTo is cancelled and the run
legs are replaced by idle while the body keeps dead-reckoning -> glide + repeated
idle/attack. The 15-bit ServerActionStamp gate is faithful (uniform-anim is not a
stamp bug). This chase+attack coexistence is R5/MovementManager scope, so #170
sub-bugs 2/3 are downstream of the incomplete MovementManager port (R5-V4), not
#159. Recorded as a hypothesis pending a live ACDREAM_DUMP_MOTION capture + retail
side-by-side (no guessing a fix in this revert-prone path).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Erik 2026-07-04 09:17:24 +02:00
parent 5eb902ffe7
commit eb423fb749

View file

@ -94,6 +94,35 @@ MOTIONDONE loop between `0x8000003C` (stance) and the dispatched motion.
**Acceptance:** side-by-side with retail — a chasing+attacking Mite Scamp shows
correct attack-animation variety, correct frequency, and steps/runs (no glide).
**Investigation 2026-07-04 (code-grounded mechanism, HYPOTHESIS — pending live
confirmation):** traced the live remote path end-to-end. The chase (`mt-6`
MoveToObject) is owned by the entity's verbatim `MoveToManager`
(`GameWindow.RouteServerMoveTo`, ~4899) — this is what moves the legs. The
attacks arrive as SEPARATE `mt-0` InterpretedMotionState UMs and flow through
`MotionInterpreter.MoveToInterpretedState` (~4985). Two seams make the creature
glide + over-play:
1. **Every inbound UM fires the `unpack_movement` head interrupt**
(`remoteMot.Motion.InterruptCurrentMovement`, GameWindow ~4893) which is bound
to `MoveTo.CancelMoveTo(ActionCancelled)` (GameWindow ~4319). So each `mt-0`
attack UM **cancels the active chase MoveTo.**
2. `MoveToInterpretedState``ApplyInterpretedMovement(cancelMoveTo:true)`
installs the UM's `ForwardCommand`, which for an attack-only UM defaults to
**Ready/idle** (`ims.ForwardCommand = fullMotion`, null/0 → Ready, ~4933) →
the run cycle is replaced by idle while the body keeps its dead-reckon
translation → **glide**; the creature is repeatedly knocked idle+attack
rather than running (over-play / "stuck").
The `ServerActionStamp` 15-bit gate (`MoveToInterpretedState` ~2845) IS faithfully
ported, so identical-stamp replays are already suppressed — the "uniform anim" is
NOT a stamp bug. This coexistence of MoveTo (chase) + interpreted-state (attack)
is **explicitly R5/MovementManager scope** (GameWindow ~4816 "LoseControlToServer
autonomy handoff is R5/MovementManager scope"). So #170 sub-bugs 2/3 are
**downstream of the incomplete MovementManager port (R5-V4), not #159 and not a
localized bug.** NEXT: (a) confirm with a labelled `ACDREAM_DUMP_MOTION=1` capture
of the Mite Scamp (exact mt-6/mt-0 interleave + what ForwardCommand + stamps the
attack UMs carry), (b) retail side-by-side — does retail keep the legs running
during attacks and re-establish the chase between swings? — then port the retail
MovementManager coexistence (R5-V4). Do NOT guess a fix in this revert-prone path.
## #169 — Cold-spawn "hole": world doesn't load / invisible player when spawning far from Holtburg
**Status:** DONE (`9b06a9b8`, 2026-07-03) — root confirmed live via a landblock-load