fix(motion): restore retail object manager order
Process animation completion at the retail process_hooks boundary, then run targeting, movement, PartArray completion, and PositionManager in the named UpdateObjectInternal order for local, remote, hidden, and position-less animated objects. Retire TS-42 with deterministic conformance coverage.\n\nCo-authored-by: OpenAI Codex <codex@openai.com>
This commit is contained in:
parent
0f996db747
commit
c5ab99081c
17 changed files with 493 additions and 98 deletions
|
|
@ -263,11 +263,11 @@ What R2 ships and where R3 plugs in:
|
|||
CSequence.UpdateInternal [R1, shipped]
|
||||
└─ G5 gate (head != first_cyclic) → IAnimHookQueue.AddAnimDoneHook
|
||||
└─ AdapterHookQueue → AnimationDoneSentinel into _pendingHooks [R1-P5]
|
||||
GameWindow anim tick (:9876-9890) [R2-Q4 wiring]
|
||||
├─ per drained AnimationDoneSentinel → manager.AnimationDone(success: true)
|
||||
GameWindow anim tick (:9876-9890) [R2-Q4 wiring; superseded by R6]
|
||||
├─ per captured AnimationDoneSentinel → manager.AnimationDone(success: true)
|
||||
│ [retail: AnimDoneHook::Execute 0x00526c20 → Hook_AnimDone 0x0050fda0
|
||||
│ → CPartArray::AnimationDone(1) — one call per queued hook]
|
||||
└─ once per tick → manager.UseTime() ≡ CheckForCompletedMotions()
|
||||
└─ later per-object manager tail → manager.UseTime() ≡ CheckForCompletedMotions()
|
||||
[retail call sites 0x00517d57/0x00517d67; drains zero-tick entries:
|
||||
stops-without-links, fast-path re-speeds (outTicks=0), truncated nodes]
|
||||
MotionTableManager.AnimationDone / CheckForCompletedMotions [R2-Q3]
|
||||
|
|
@ -288,10 +288,11 @@ completion chain, never a peer** — retail keeps TWO pending trackers
|
|||
(`MotionTableManager.pending_animations` under CPartArray vs
|
||||
`CMotionInterp.pending_motions` under MovementManager) and `CPhysicsObj::MotionDone`
|
||||
feeds only the interp side; do not merge the queues. And the per-tick PLACEMENT of
|
||||
both the sentinel drain and UseTime is provisional until **R6** installs retail's
|
||||
`UpdateObjectInternal` order (process_hooks LAST; MovementManager.UseTime/
|
||||
CPartArray.HandleMovement mid-tick) — R2 documents the current GameWindow drain point
|
||||
as the G6 seam, unchanged.
|
||||
both the sentinel drain and UseTime was provisional until **R6** installed retail's
|
||||
`UpdateObjectInternal` order. Named-retail correction (2026-07-19): `process_hooks`
|
||||
runs inside `UpdatePositionInternal`, before the transition and the manager tail;
|
||||
`MovementManager.UseTime` then precedes `CPartArray.HandleMovement`. See
|
||||
`docs/research/2026-07-19-r6-update-object-order-pseudocode.md`.
|
||||
|
||||
Success-flag semantics to preserve: AnimationDone passes the CALLER's flag (true from
|
||||
Hook_AnimDone; false from enter/exit-world drains); CheckForCompletedMotions hardcodes
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue