fix #174: RemoveLinkAnimations seam is HandleEnterWorld (strip + drain)
Retail CPhysicsObj::RemoveLinkAnimations (0x0050fe20) is a tailcall to CPartArray::HandleEnterWorld (0x00517d70) -> MotionTableManager:: HandleEnterWorld (0x0051bdd0): remove_all_link_animations PLUS a full pending_animations drain (while (head) AnimationDone(0)), each pop relaying MotionDone so CMotionInterp pops its pending_motions node in lockstep. acdream bound the seam to the bare sequence strip, so every jump's LeaveGround removed the animations that queued manager nodes were counting down on — orphaning them (NumAnims>0, anims gone) and permanently damming BOTH queues. MotionsPending() then never drained (probe round: last player pending=False at the first MovementJump press; old jump motions still completing at rest minutes later) and BeginTurnToHeading/BeginMoveForward's verbatim motions_pending gates starved every armed moveto: ACE's mt-6 walk-to-door armed but the body never walked (wire-proven, seqs 98-101); the close-range use turn never completed so the deferred action was silently eaten. Doors only worked on a fresh session (shallow queue). Rebind both production sites (remote EnsureRemoteMotionBindings + the player's EnterPlayerModeNow block) to Manager.HandleEnterWorld(); the sequencer wrapper was a pure passthrough so the manager call is a strict superset. All six interp seam sites (LeaveGround, HitGround, Dead, and the detached-object guards) are the same retail chain. Harness mirrors updated; pins: Issue174LinkStripDrainTests (the seam drains both queues; fresh motions queue and complete after). Suites: Core 2535 / App 713 / UI 425 / Net 385 green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
62b6fa52e8
commit
b54555da62
6 changed files with 146 additions and 7 deletions
|
|
@ -46,9 +46,24 @@ Copy this block when adding a new issue:
|
|||
|
||||
---
|
||||
|
||||
## #174 — Door Use dies after the first attempt: close-range deferred uses silently swallowed (player MoveToManager never completes)
|
||||
## #174 — Door Use dies after the first jump: the RemoveLinkAnimations seam stripped animations without retail's queue drain
|
||||
|
||||
**Status:** OPEN — root under investigation (wire + log evidence in hand; needs one `ACDREAM_PROBE_AUTOWALK=1` round to pick between the two candidate mechanisms)
|
||||
**Status:** 🟡 FIX SHIPPED 2026-07-05 (same session) — pending user gate (jump around, then use the Facility Hub door from close AND from ~3 m).
|
||||
**FIX:** the `MotionInterpreter.RemoveLinkAnimations` seam is retail
|
||||
`CPhysicsObj::RemoveLinkAnimations` 0x0050fe20 — a tailcall to
|
||||
`CPartArray::HandleEnterWorld` 0x00517d70 → `MotionTableManager::
|
||||
HandleEnterWorld` 0x0051bdd0: strip the sequence's link animations AND drain
|
||||
`pending_animations` completely (each pop relays MotionDone → the interp pops
|
||||
its `pending_motions` node in lockstep). acdream bound the seam to the BARE
|
||||
sequence strip (`RemoveAllLinkAnimations`), so every jump's LeaveGround
|
||||
removed the animations that queued manager nodes were counting down on —
|
||||
orphaning them and permanently damming BOTH queues; `MotionsPending()` then
|
||||
starved every armed moveto (the far-range walk-to-door and the close-range
|
||||
use turn — both door faces below). Rebound at both production sites
|
||||
(GameWindow remote bindings + the player's EnterPlayerModeNow block) to
|
||||
`Manager.HandleEnterWorld()`; harness mirrors updated; pins
|
||||
`Issue174LinkStripDrainTests` (seam drains both queues; new motions queue +
|
||||
complete after). The `UseDone` (0x01C7) display gap stays open below.
|
||||
**Severity:** HIGH (can't open doors reliably → blocks the #137 door acceptance + normal play)
|
||||
**Filed:** 2026-07-05
|
||||
**Component:** interaction — B.4b Use pipeline / AP-23 speculative moveto deferral (R5-V5 facade)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue