diff --git a/tests/AcDream.App.Tests/Rendering/RetailChaseCameraTests.cs b/tests/AcDream.App.Tests/Rendering/RetailChaseCameraTests.cs index 84283765..9cba7c08 100644 --- a/tests/AcDream.App.Tests/Rendering/RetailChaseCameraTests.cs +++ b/tests/AcDream.App.Tests/Rendering/RetailChaseCameraTests.cs @@ -876,9 +876,15 @@ public class RetailChaseCameraTests isOnGround: true, contactPlaneNormal: Vector3.UnitZ, dt: 1f / 60f, cellId: 0x100, selfEntityId: 0x5); - Step(); // frame 1: total fallback — viewer snaps to the player, cell 0 + Step(); // frame 1: total fallback — viewer snaps to the player Assert.Equal(Vector3.Zero, cam.Position); - Assert.Equal(0u, cam.ViewerCellId); + // FW3 visual-gate correction: retail's set_viewer(&player-> + // m_position, 1) copies the WHOLE Position — objcell_id included + // — so the fallback viewer inherits the PLAYER'S cell (0x100 + // here), never 0. Rooting those frames on 0 made the walk treat + // a doorway-graze frame as outdoor (grass over the stairwell — + // the #119 family's transition arm). + Assert.Equal(0x100u, cam.ViewerCellId); Step(); // frame 2: the sweep target re-extends FROM the player float reach = Vector3.Distance(probe.Requests[1], Vector3.Zero);