From e08accf7c2086653b5c5c9a53b5868246fa51ce3 Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 2 May 2026 19:34:19 +0200 Subject: [PATCH] fix(motion): apply VectorUpdate.Omega to remote body (L.3.1 Task 6) VectorUpdate.Omega was parsed by WorldSession but never written to the remote body's Omega field, leaving remote jumping/turning arcs flat. Apply it alongside the existing Velocity assignment. Mirrors retail SmartBox::DoVectorUpdate (acclient @ 0x004521C0) which calls both CPhysicsObj::set_velocity AND CPhysicsObj::set_omega. Same 4 pre-existing test failures, no regression. Co-Authored-By: Claude Opus 4.7 --- src/AcDream.App/Rendering/GameWindow.cs | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/AcDream.App/Rendering/GameWindow.cs b/src/AcDream.App/Rendering/GameWindow.cs index 0d4210a..0866e84 100644 --- a/src/AcDream.App/Rendering/GameWindow.cs +++ b/src/AcDream.App/Rendering/GameWindow.cs @@ -3081,6 +3081,12 @@ public sealed class GameWindow : IDisposable // remote update will integrate Position += Velocity × dt + 0.5 × Accel × dt². rm.Body.Velocity = update.Velocity; + // L.3.1 Task 6: apply Omega too. Was parsed but ignored, leaving + // remote jumping/turning arcs flat. Mirrors retail SmartBox:: + // DoVectorUpdate (acclient @ 0x004521C0) which calls both + // CPhysicsObj::set_velocity AND CPhysicsObj::set_omega. + rm.Body.Omega = update.Omega; + // Mark airborne when the launch has meaningful +Z. Threshold // 0.5 m/s rejects noise / horizontal-only updates (server might // also use VectorUpdate for non-jump events). The per-tick