diff --git a/src/AcDream.App/Rendering/GameWindow.cs b/src/AcDream.App/Rendering/GameWindow.cs index 4d5f26c..18f1beb 100644 --- a/src/AcDream.App/Rendering/GameWindow.cs +++ b/src/AcDream.App/Rendering/GameWindow.cs @@ -5921,7 +5921,17 @@ public sealed class GameWindow : IDisposable // clobber entries via Deregister. { var setup = _physicsDataCache.GetSetup(entity.SourceGfxObjOrSetupId); - if (setup is not null) + // ISSUES #83 / Phase A1.6 (2026-05-21): landblock stabs use BSP + // collision exclusively (retail CBuildingObj). Skip Setup-derived + // CylSphere/Sphere/Radius shadow registrations for stabs to + // prevent the same doubled-collision bug A1 fixed for the + // mesh-AABB-fallback — but on the Setup path instead. Without + // this gate, a stab whose source is 0x02xxxxxx (Setup) with + // defined CylSpheres registers BOTH per-part BSP shadows AND a + // CylSphere shadow with id = entity.Id, producing an invisible + // collision cylinder at the stab origin alongside the correct + // BSP walls. + if (setup is not null && !_isLandblockStab) { float entScale = entity.Scale > 0f ? entity.Scale : 1f; uint shapeIndex = 0;