diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 8668ce4d..0b73fb53 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -71,49 +71,6 @@ actually steps at (Player_Move.cs / Creature GetRunRate usage). **Where:** GameWindow `TickRemoteMoveTo` + the L.3 M2 queue chase vs `MotionTableDispatchSink` dispatch speed. Related: TS-33 cadence rows. -## #161 — Remote jump landing holds the falling pose (no landing anim) - -**Status:** FIX LANDED (2026-07-03) — awaiting user live verify. -**Root cause (three legs, all retail-decode):** -1. **Apply-pass params (the big one):** retail's `apply_interpreted_movement` - runs ALL its dispatches with `ModifyInterpretedState=false` — the ctor - default 0x1EE0F is REWRITTEN by a bitfield store the BN decomp smears - into the mush expression at raw 305778 (`(word & 0x37ff) | - cancelMoveTo<<15 | disableJump<<17`; 0x37ff clears SetHoldKey/ - ModifyInterpretedState/CancelMoveTo). ACE MotionInterp.cs:444-449 - confirms. Our pass dispatched with ctor defaults (modify=true), so the - airborne Falling substitution CLOBBERED `InterpretedState.ForwardCommand` - → HitGround's re-apply re-dispatched Falling instead of the preserved - pre-fall wire command. (The handoff's "HitGround raw @305949" was a - mislabel — 305949 is inside `move_to_interpreted_state`; the real - HitGround is 0x00528ac0 → `apply_current_movement(0,0)`.) Bonus decode: - raw arg3 = DisableJumpDuringLink, so every `(N, 0)` caller means - allowJump=TRUE — all caller polarities fixed. The W6 entry-cache (whose - "retail self-heals via hoisted registers" theory was this same - misreading) is deleted; live field reads are retail semantics now that - the pass cannot write state. -2. **Landing-order:** both GameWindow landing blocks cleared the Gravity - state bit BEFORE `rm.Motion.HitGround()`, whose verbatim `state & 0x400` - gate then no-opped the entire retail re-apply (retail never clears - GRAVITY on landing). The UP-driven landing block never called HitGround - at all. Both now: transients → `Motion.HitGround()` → `MoveTo.HitGround()` - → THEN the DR bookkeeping gravity-clear. -3. **K-fix17 answered (user Q3):** its SetCycle DID execute — and re-set - the Falling cycle, because it read the leg-1-clobbered ForwardCommand - (0x40000015 ≠ 0, so the Ready fallback never fired). Both SetCycle - adaptation blocks deleted — superseded by the retail HitGround path, - which also plays the proper Falling→X landing LINK animation SetCycle - never did. Also fixed en route: `copy_movement_from` omitted - `current_style` (raw 0051e757 copies it first) — the landing re-apply's - style dispatch read a stale style. -**Tests:** `MotionInterpreterFunnelTests.HitGround_AfterFall_ -RedispatchesPreservedForward_ExitsFalling` (full lifecycle) + the flipped -`AirborneBody_NoCycleDispatches_OnlyTurnStop` state assertion (it had -PINNED the bug value 0x40000015 — noted in-file). Suite 3,964 green. -**Verify:** retail mover jumps in place near acdream observer → lands → -legs exit falling pose into idle WITHOUT pressing any key; jump while -running → lands into run cycle. - ## #164 — UM action-replay dispatches drop the per-action Autonomous bit **Status:** OPEN (2026-07-03, filed during #161) @@ -5788,6 +5745,44 @@ outdoors at the angle that previously erased it. # Recently closed +## #161 — Remote jump landing holds the falling pose (no landing anim) + +**Status:** DONE (2026-07-03, `b1cf0102`) — user live-verified ("Yes works!"). +Three legs, all retail-decode, zero adaptations added: +1. **Apply-pass params:** retail's `apply_interpreted_movement` runs ALL its + dispatches with `ModifyInterpretedState=false` — the ctor default 0x1EE0F + is REWRITTEN by a bitfield store the BN decomp smears into the mush + expression at raw 305778 (`(word & 0x37ff) | cancelMoveTo<<15 | + disableJump<<17`; 0x37ff clears SetHoldKey/ModifyInterpretedState/ + CancelMoveTo). ACE MotionInterp.cs:444-449 confirms. Our pass dispatched + with ctor defaults → the airborne Falling substitution clobbered + `InterpretedState.ForwardCommand` → HitGround's re-apply re-dispatched + Falling instead of the preserved pre-fall wire command. (The retail exit: + fwd is PRESERVED through the fall; HitGround re-dispatches it; the motion + table plays the Falling→X landing link — no wire input needed.) Bonus + decode: raw arg3 = DisableJumpDuringLink, so `(N, 0)` callers mean + allowJump=TRUE — all 9 caller polarities fixed; the W6 entry-cache + (built on the wrong "retail self-heals via hoisted registers" theory) + deleted; `copy_movement_from`'s `current_style` copy (raw 0051e757) + added to the UM flat-copy. NOTE: the handoff's "HitGround raw @305949" + was a mislabel — 305949 is inside `move_to_interpreted_state`; real + HitGround is 0x00528ac0 → `apply_current_movement(0,0)`. +2. **Landing order:** both GameWindow landing blocks cleared the Gravity + state bit BEFORE `Motion.HitGround()`, whose verbatim `state & 0x400` + gate no-opped the whole retail re-apply (retail never clears GRAVITY on + landing); the UP-driven block never called HitGround at all. Both now: + transients → `Motion.HitGround()` → `MoveTo.HitGround()` → THEN the DR + gravity-clear (register row AP-81; retire in R6). +3. **K-fix17 (the handoff's Q3):** its SetCycle DID execute — and re-set + the Falling cycle, because it read the leg-1-clobbered ForwardCommand + (0x40000015 ≠ 0 defeated the Ready fallback). Both SetCycle blocks + deleted — superseded by the retail path, which also plays the landing + LINK animation SetCycle never did. +Tests: `HitGround_AfterFall_RedispatchesPreservedForward_ExitsFalling` +lifecycle pin; `AirborneBody_NoCycleDispatches_OnlyTurnStop` assertion +flipped (it had PINNED the bug value). Suite 3,964 green. Spawned #164 +(action-replay Autonomous bit). + ## #150 — Open doors still blocked at the threshold (ethereal target not skipped in the step-down pass) **Status:** DONE (2026-06-25) — after the retail collision sweep, an OPEN door diff --git a/docs/research/2026-07-03-r4-verify-session-handoff.md b/docs/research/2026-07-03-r4-verify-session-handoff.md index 63e18776..01c7d6e9 100644 --- a/docs/research/2026-07-03-r4-verify-session-handoff.md +++ b/docs/research/2026-07-03-r4-verify-session-handoff.md @@ -36,19 +36,19 @@ whole gate state — it is how both wedges were pinned. ## OPEN — next session picks up here (full trails in docs/ISSUES.md) -1. **#161 — remote jump landing stuck in the falling pose** (retested - post-TS-40: still broken). Evidence in the issue: `VU.land` fires but - the first post-landing UM still sees `seq now motion=0x40000015`; the - char recovers only via subsequent wire UMs; window-focus change also - unsticks it (a frame-advance/big-dt hint). PRIME SUSPECT: the funnel's - airborne branch dispatches Falling via `DoInterpretedMotion` with - ctor-default `ModifyInterpretedState=true` → interpreted fwd BECOMES - 0x40000015 → `HitGround`'s `apply_current_movement` (interpreted branch - for remotes) re-dispatches FALLING instead of the pre-fall wire command. - CHECK RETAIL FIRST: does raw ~305730's falling dispatch really write - interpreted fwd; what exits Falling on a retail REMOTE landing - (HitGround raw @305949, the `apply_current_movement(this, 1, ...)` - arg semantics); does K-fix17's landing SetCycle even execute (probe it). +1. ~~**#161 — remote jump landing stuck in the falling pose**~~ **CLOSED + 2026-07-03 `b1cf0102`, user live-verified.** The prime suspect was + right; the mechanism was a BN decomp artifact: retail REWRITES the + apply pass's params word (raw 305778 smeared store, mask 0x37ff → + `ModifyInterpretedState=false`; ACE MotionInterp.cs:444-449 confirms), + so retail PRESERVES interpreted fwd through the fall and HitGround + re-dispatches it (the landing-link exit). Also: both landing blocks + cleared Gravity BEFORE `Motion.HitGround()` (whose verbatim state&0x400 + gate then no-opped — fixed order, AP-81); K-fix17's SetCycle DID + execute but re-set the clobbered Falling command — both copies deleted. + 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;