mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-08-01 18:29:24 -04:00
guard against corrupt-position disembark
Three separate fixes from this round's live testing:
1. Falling animation during a smooth ride ("kept like playing the
falling animation the whole time"). The M2 ride-lock code
overwrites render position directly every frame, so the camera
controller's own gravity/collision correctly finds no real ground
under a moving platform over open track and reports not-grounded -
right for physics, but that fed straight into the animation FSM as
"falling" for the whole ride. Added AnimationController::
setM2TransportRiding() to override just the animation-facing
grounded signal while actively riding, without touching the camera
controller's real physics/collision (needed for walk-while-riding
to keep working).
2. Reverted tram orientation from a clamped partial pitch back to a
full flatten. The clamp was added to address an earlier "clipping
into the ground" report, but a live comparison against the real
game client confirmed real Deeprun Tram cars stay level through
elevation changes - any visible tilt is wrong regardless of
clipping trade-offs.
3. Live data caught a transient position corruption: after riding
smoothly for ~70s, one frame produced player=(-44.9,2309.03,..) vs
tram=(2309.83,-45.4,..) - the player's X and Y are each within ~1
unit of the tram's Y and X respectively, an axis swap rather than a
real position, yielding horizDist~3330 and an instant disembark
right as the tram approached the destination platform ("kicked me
off when I almost got to the other station"). Root cause not yet
found (suspected: a raw server-coordinate movement update landing
without the usual serverToCanonical swap - that conversion has the
same X/Y-swap shape as the corruption, and a "MSG_MOVE_TELEPORT_ACK:
not enough data for movement info" was logged moments later in the
same session). Added a sanity guard: skip the disembark check
entirely on a physically-impossible single-frame jump rather than
trusting it, so a future occurrence can't eject the player over
open track on bad data while the real source gets tracked down.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
13 KiB
13 KiB