fix(movement): jump works locally (airborne velocity preserved)
Two fixes for jump physics: - Skip ground-snap when velocity Z > 0 (prevents immediate re-landing at high framerates where per-frame Z delta < 0.05 snap threshold) - Guard apply_current_movement velocity write behind OnWalkable check (prevents MotionInterpreter.DoMotion from zeroing jump velocity on every frame while airborne) - Guard PlayerMovementController velocity replacement behind OnWalkable (preserves momentum during airborne flight) Jump works locally but server packet not yet sent (BUG-002). Facing direction mismatch logged as BUG-003. RunRate not verified as BUG-004. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
e08a06ac5b
commit
157ed9d974
4 changed files with 68 additions and 31 deletions
|
|
@ -539,8 +539,17 @@ public sealed class MotionInterpreter
|
|||
if (InterpretedState.ForwardCommand == MotionCommand.RunForward)
|
||||
MyRunRate = InterpretedState.ForwardSpeed;
|
||||
|
||||
var localVelocity = get_state_velocity();
|
||||
PhysicsObj.set_local_velocity(localVelocity);
|
||||
// Only replace velocity when grounded. While airborne, the physics
|
||||
// body's integrated velocity (from LeaveGround) should persist —
|
||||
// gravity pulls Z down, horizontal momentum is preserved.
|
||||
// The retail client's apply_current_movement also gates on Contact+OnWalkable
|
||||
// before writing velocity (the full decompiled flow routes through
|
||||
// update_object which checks transient state).
|
||||
if (PhysicsObj.OnWalkable)
|
||||
{
|
||||
var localVelocity = get_state_velocity();
|
||||
PhysicsObj.set_local_velocity(localVelocity);
|
||||
}
|
||||
}
|
||||
|
||||
// ── FUN_00529390 — jump ───────────────────────────────────────────────────
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue