acdream/tests/AcDream.Core.Tests/Physics
Erik c27fded61e test(phys): A6.P4 door — directional + geometric pin tests reframe inside-out bug
Built three new tests to investigate the inside-out asymmetric collision
that persists after the AddAllOutsideCells coord fix:

1. Directional_OutsideIn_SouthApproach_BlocksAtSlabSouthFace — sphere
   south of door moving NORTH; expects block with cn.Y less than -0.5
2. Directional_InsideOut_NorthApproach_BlocksAtSlabNorthFace — sphere
   north of door moving SOUTH; expects block with cn.Y greater than +0.5
3. Geometric_DoorSlabZRange_AbovePlayerSphereTop — pins the slab Z
   range vs sphere top math

BOTH directional tests PASS — collision is symmetric at unit-test level.
The asymmetric production bug therefore comes from something the unit
tests do not capture (multi-tick state, cell-tracking flicker, walkable
polygon edge interactions).

The geometric pin test reveals the real story: Setup 0x020019FF places
the part-0 BSP slab 1.275 m ABOVE the entity origin via
PlacementFrames[Default][0].Origin. With the cottage door entity at
world Z=94.1, the slab world Z range is [95.375, 97.865]. Player sphere
top reaches Z=95.20. The slab BOTTOM is 0.175 m ABOVE the sphere top —
the slab NEVER collides with the player.

The slab is a LINTEL (door frame above the doorway), not a leaf. The
door's only effective collider at sphere height is the 0.10 m radius
foot cylinder. The directional tests pass because the cylinder blocks,
not the BSP.

User-reported inside-out off-center walkthrough is the sphere walking
AROUND the foot cylinder (sphere reach 0.48 + cyl 0.10 = 0.58 m; any
sphere center over 0.58 m from cylinder center passes freely). The
visual "body partially intersects door" is the character model
occupying the visual door volume while the collision sphere passes
beside the cylinder.

Reframed handoff in docs/research/2026-05-25-door-bug-partial-fix-shipped.md
points to three candidate next-step investigations:
- Retail-faithfulness audit on setup.Radius / setup.Height interpretation
- Re-inspect door parts 1+2 (GfxObj 0x010044B6) for missed physics shapes
- Test the cottage cell BSP (cell 0x0150 walls) + door together — the
  COMBINED collision may be what retail relies on

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-25 08:08:42 +02:00
..
AnimationCommandRouterTests.cs fix(anim): Phase L.1b route motion commands 2026-04-28 10:46:22 +02:00
AnimationHookRouterTests.cs feat(anim): Phase E.1 hook router + GameWindow wiring 2026-04-18 16:30:23 +02:00
AnimationSequencerTests.cs fix(animation): close #61 + smooth stop from backward/sidestep-left/turn-left 2026-05-18 15:16:20 +02:00
BSPQueryTests.cs test(physics): BSPQuery.FindCollisions writes world-space plane with translated origin 2026-05-20 07:58:37 +02:00
BSPStepUpFixtures.cs feat(physics): Phase L.2.1+L.2.2 — BSP step-up and rooftop landing 2026-04-29 16:16:39 +02:00
BSPStepUpTests.cs fix(physics): L.4 — steep airborne hits slide-tangent (interim, deviates from retail) 2026-04-30 13:22:07 +02:00
CellarUpTrajectoryReplayTests.cs fix(phys): A6.P3 #98 — gate outdoor shadow radial sweep on indoor primary cell 2026-05-24 06:49:46 +02:00
CellDumpRoundTripTests.cs feat(phys): A6.P3 #98 Step 2 — cell-dump probe + roundtrip test 2026-05-23 15:16:56 +02:00
CellPhysicsPortalWiringTests.cs feat(physics): Phase 2 — wire CellBSP + Portals into CellPhysics 2026-05-19 16:52:20 +02:00
CellSurfaceTests.cs feat(core): Phase B.3 — CellSurface (indoor floor polygon projection) 2026-04-12 09:51:22 +02:00
CellTransitAddAllOutsideCellsTests.cs fix(phys): A6.P4 door bug — AddAllOutsideCells coord convention + replay apparatus 2026-05-25 07:53:34 +02:00
CellTransitCheckBuildingTransitTests.cs refactor(physics): Phase 2 — code-review polish on BuildingPhysics commit 2026-05-19 18:01:44 +02:00
CellTransitFindCellListTests.cs feat(physics): Phase 2 — BuildingPhysics + CheckBuildingTransit 2026-05-19 17:34:38 +02:00
CellTransitFindCellSetTests.cs fix(phys): A6.P4 door bug — AddAllOutsideCells coord convention + replay apparatus 2026-05-25 07:53:34 +02:00
CellTransitFindTransitCellsSphereTests.cs chore(phys): A6.P3 #98 triage — revert neg-poly + bldg-check experiments 2026-05-23 15:11:49 +02:00
CollisionExemptionTests.cs fix(phys L.2g slice 1b): widen CollisionExemption to ETHEREAL alone 2026-05-13 18:27:06 +02:00
CollisionPrimitivesTests.cs feat(physics): port 9 collision primitives from acclient.exe (chunk_00530000.c) 2026-04-12 23:53:47 +02:00
DoorBugTrajectoryReplayTests.cs test(phys): A6.P4 door — directional + geometric pin tests reframe inside-out bug 2026-05-25 08:08:42 +02:00
DoorCollisionApparatusTests.cs diag(phys): [bsp-test] probe + grounded apparatus test + handoff 2026-05-24 19:22:45 +02:00
DoorSetupGfxObjInspectionTests.cs fix(phys): A6.P4 door bug — AddAllOutsideCells coord convention + replay apparatus 2026-05-25 07:53:34 +02:00
EntityCollisionFlagsTests.cs feat(physics): live-entity collision plumbing (Commit A) 2026-04-29 13:12:56 +02:00
FindEnvCollisionsMultiCellTests.cs Reapply "feat(physics): A4 — wire CheckOtherCells into FindEnvCollisions" 2026-05-20 20:06:14 +02:00
GfxObjDumpRoundTripTests.cs feat(phys): A6.P3 #98 — GfxObj dump infrastructure (ACDREAM_DUMP_GFXOBJS) 2026-05-23 20:24:26 +02:00
IndoorContactPlaneRetentionTests.cs docs(test): A6.P3 slice 1 T5 — update stale call-chain reference in test doc 2026-05-22 09:37:52 +02:00
IndoorWalkablePlaneTests.cs Revert "fix(physics): remove per-frame indoor walkable-plane synthesis" 2026-05-20 09:17:24 +02:00
InterpolationManagerTests.cs feat(motion): L.3 M1 — fresh InterpolationManager port + retail spec 2026-05-05 14:56:42 +02:00
Issue98CellarUpReplayTests.cs test(phys): A6.P3 #98 Step 3 — deterministic replay harness 2026-05-23 15:25:40 +02:00
MotionCommandResolverTests.cs fix(anim): Phase L.1b route motion commands 2026-04-28 10:46:22 +02:00
MotionInterpreterTests.cs test(physics): MyRunRate fallback test for GetMaxSpeed (L.3.1 Task 2 polish) 2026-05-02 19:20:39 +02:00
PhysicsBodyTests.cs feat(core): port decompiled AC client physics — CollisionPrimitives + PhysicsBody 2026-04-12 23:54:51 +02:00
PhysicsDiagnosticsTests.cs feat(phys): A6.P3 #98 — GfxObj dump infrastructure (ACDREAM_DUMP_GFXOBJS) 2026-05-23 20:24:26 +02:00
PhysicsEngineTests.cs fix(physics): Cluster A #84 + #85 — indoor cell tracking 2026-05-19 15:20:36 +02:00
PlayerWeenieTests.cs feat(physics): PlayerWeenie with retail Run/Jump formulas 2026-04-13 23:15:25 +02:00
PortalInfoTests.cs feat(physics): Phase 2 — wire CellBSP + Portals into CellPhysics 2026-05-19 16:52:20 +02:00
PortalPlaneTests.cs feat(core): Phase B.3 — PortalPlane (plane math + crossing detection) 2026-04-12 18:17:48 +02:00
PositionManagerTests.cs fix(motion): project anim root motion onto terrain plane (slope staircase) 2026-05-05 21:37:42 +02:00
RemoteMoveToDriverTests.cs fix(retail): rotation rate, useability gate, retail toast strings 2026-05-16 12:17:54 +02:00
ResolveCellIdTests.cs feat(physics): Phase 2 — BuildingPhysics + CheckBuildingTransit 2026-05-19 17:34:38 +02:00
ServerControlledLocomotionTests.cs fix(anim): Phase L.1c match MoveTo run speed 2026-04-28 20:58:22 +02:00
ShadowObjectRegistryMultiPartTests.cs test(phys): Task 6 regression — Deregister clears _entityShapes cache 2026-05-24 15:22:30 +02:00
ShadowObjectRegistryTests.cs feat(phys): A6.P4 slice 1 — portal-reachable cellSet includes outdoor cells 2026-05-24 08:10:32 +02:00
ShadowShapeBuilderTests.cs feat(phys): ShadowShapeBuilder.FromSetup 2026-05-24 15:12:56 +02:00
SphereIntersectsCellBspTests.cs fix(physics): #90 — sphere-overlap cell stickiness at doorway threshold 2026-05-20 20:30:36 +02:00
TerrainSurfaceTests.cs fix(scenery): #49 9×9 loop, per-spawn building check, triangle slope 2026-05-07 21:15:11 +02:00
TransitionCheckOtherCellsTests.cs chore(phys): A6.P3 #98 triage — revert neg-poly + bldg-check experiments 2026-05-23 15:11:49 +02:00
TransitionTests.cs feat(physics): Transition.FindTransitionalPosition core algorithm 2026-04-13 23:52:45 +02:00
TransitionTypesTests.cs Revert "fix(physics): remove per-frame indoor walkable-plane synthesis" 2026-05-20 09:17:24 +02:00
WalkMissDiagnosticTests.cs feat(physics): WalkMissDiagnostic aggregator for ISSUES #83 probe spike 2026-05-20 10:31:39 +02:00