From 8f8b0b9c57a3be197a64026995899cb0b7d562e1 Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 30 Aug 2026 17:46:17 +0200 Subject: [PATCH] test(render) FW3 gate: the fallback camera test pins the corrected retail cell The total-fallback assertion pinned ViewerCellId == 0 - the pre-fix adaptation. Retail set_viewer copies the whole player Position, objcell_id included, so the fallback inherits the player cell; the re-extend-from-the-player property the test exists for is unchanged. Co-Authored-By: Claude Fable 5 --- .../Rendering/RetailChaseCameraTests.cs | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) 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);