diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 68ddcf65..b015bbca 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -3709,6 +3709,45 @@ stable now; this is a draw-order/depth oscillation localized to the door surface --- +## #112 — A9B3 hill cottage: containment gap inside the house demotes to outdoor with no re-promotion (transparent interior while walking) + +**Status:** OPEN +**Severity:** MEDIUM-HIGH (any house with interior containment gaps; user-observed +"sometimes transparent" while walking around inside) +**Filed:** 2026-06-10 (late — user exploration after #111 closed) +**Component:** physics / membership (outdoor→indoor promotion) + cell containment + +**Symptom (user, A9B3 hill cottage — interior cells 0xA9B30100/0x103/0x104, z=116):** +walking around INSIDE the house, the interior intermittently goes transparent; +membership ping-pongs indoor↔outdoor `0xA9B3003C` across a ~4 m band (x≈181–185 +world frame; log `issue111-verify7.log` lines 8444-68375). Separately: some objects +inside lack collision — that part is the known #99 stopgap shape (outdoor object +sweep gated while indoor-classified; A6.P4 debt), filed here as a data point only. + +**Mechanism (dat-scan evidenced, scan in this entry):** +1. The cottage's containment volumes have a REAL GAP inside the visible house: + (184.9, −109.5, z 116.5) [A9B3-local (184.9, 82.5)] is contained by NO interior + cell, while 1 m away (184.2, −109.2) is inside 0x100 and (180.5, −109.0) is + inside 0x103. Walking through the gap demotes the player to outdoor 0x3C + (correct per containment — the sphere-overlap stickiness releases once the + center leaves the volume by more than the foot radius). +2. **Once outdoor-classified, nothing re-promotes from INSIDE a room**: the pick + with seed 0x3C returns 0x3C even at points the scan proves are inside 0x103 — + our outdoor→indoor promotion (`CheckBuildingTransit`) fires only on PORTAL + crossings, so the player stays outdoor (→ outdoor flood → transparent interior) + until they happen to re-cross the doorway portal. + +**Fix direction:** read the retail oracle for the outdoor pick's building handling — +`CLandCell::find_transit_cells` / `CBuildingObj` building-cell checks +(`acclient_2013_pseudo_c.txt`; the CheckBuildingTransit port covered the portal +path #85, but retail likely also tests interior-cell containment for an outdoor +object standing inside a building's footprint). A containment-based promotion in +`ResolveCellId`'s outdoor branch (test the landcell's building's interior cells for +foot-sphere containment) would both heal the gap exit and harden every house. +Scan data: standing-now → [0x103], pick(seed 0x100)=0x103 / pick(seed 0x3C)=0x3C; +flip-a → []; flip-b → [0x100]. Cross-check #90 (sphere-overlap stickiness, +`4ca3596`) and the A6.P4 per-cell shadow architecture — same family. + --- # Recently closed