fix(motion): L.3 M4 jump-CellId + file #42 airborne XY drift
CellId fix: L.3 M2 introduced OnLivePositionUpdated player-remote routing that returned without setting `rmState.CellId = p.LandblockId`. The legacy path always set this (formerly at line 3601). Airborne player remotes fall through to the legacy TickAnimations path which gates ResolveWithTransition on `rm.CellId != 0`; without the cell-id update the sphere sweep was skipped, K-fix15 landing detection never fired, and the body fell through the floor on jumps. Fix: set `rmState.CellId = p.LandblockId` early in the M2 player-remote branch (after orientation snap, before any return). User-verified 2026-05-05: jumps now land cleanly with sequencer leaving Falling on landing. #42 filed: Visual verification of M4 also exposed a ~1 m horizontal drift on stationary jumps (body arcs through the air offset from actor's actual position; lands at offset; snaps back on next UM). User confirms this is pre-existing, masked by the legacy path's hard-snap-on-every-UP behavior that M2 explicitly removed per retail spec (03-up-routing.md § 3 "AIRBORNE NO-OP"). Filed as #42 with three candidate fix paths (pragmatic legacy-restore, root-cause investigation, or hybrid soft-correction). M5 NPCs verified clean (legacy path unchanged). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
d57ace0177
commit
c26bbbb84e
2 changed files with 115 additions and 0 deletions
|
|
@ -3432,6 +3432,16 @@ public sealed class GameWindow : IDisposable
|
|||
// position only; heading would otherwise lag the queue.
|
||||
rmState.Body.Orientation = rot;
|
||||
|
||||
// Adopt server's cell ID on every UP (airborne or grounded).
|
||||
// Required by the legacy airborne path's per-tick
|
||||
// ResolveWithTransition gate (rm.CellId != 0) — without this,
|
||||
// an airborne player remote falls through the floor because
|
||||
// the sphere sweep is skipped, K-fix15 landing detection never
|
||||
// fires, and the body only re-grounds when the next UM forces
|
||||
// ACE to broadcast a fresh IsGrounded=true UP that hits our
|
||||
// landing transition branch below.
|
||||
rmState.CellId = p.LandblockId;
|
||||
|
||||
// Diagnostic (ACDREAM_REMOTE_VEL_DIAG=1): roll the previous
|
||||
// server-pos snapshot forward AND print the per-UP comparison
|
||||
// between the max sequencer speed observed since last UP and
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue