diff --git a/src/AcDream.App/Rendering/GameWindow.cs b/src/AcDream.App/Rendering/GameWindow.cs index 985119f6..324c7fe6 100644 --- a/src/AcDream.App/Rendering/GameWindow.cs +++ b/src/AcDream.App/Rendering/GameWindow.cs @@ -11496,6 +11496,14 @@ public sealed class GameWindow : IDisposable playerEntity.Position, pinitCellId, System.Numerics.Vector3.Zero, 100f); _playerController.SetPosition(initResult.Position, initResult.CellId); + // #111 (2026-06-10): snap the ENTITY too — parity with the + // teleport-arrival path (entity.SetPosition + ParentCellId at + // GameWindow.cs:4914). Without this, the renderer keeps drawing the + // character at the server-restored position (ACE restored z=99.475; + // physics grounded to the 94.0 floor; the user saw the char floating + // 2 m up against the window while physics stood on the floor). + playerEntity.SetPosition(initResult.Position); + playerEntity.ParentCellId = initResult.CellId; if (_animatedEntities.TryGetValue(playerEntity.Id, out var playerAE) && playerAE.Sequencer is { } playerSeq)