From 4dea66b6334c37fd8759e1c370633b128cebfe6f Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 8 Jul 2026 15:07:46 +0200 Subject: [PATCH] =?UTF-8?q?docs(#186):=20close=20=E2=80=94=20render=20Insi?= =?UTF-8?q?deSide=20from=20dat=20PortalSide=20bit=20(fix=208257b9ba);=20re?= =?UTF-8?q?tail=20trace=20overturned=20PICK=20+=20FLOOD-epsilon=20hypothes?= =?UTF-8?q?es?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The live retail cdb trace decided it: retail roots at the connector 0118 at the grey pose (NOT the PICK fork) AND still draws the player room 0116 from that root, because retail's InitCell side test reads the dat PortalSide bit where acdream's render path reconstructed the interior side from the cell AABB centroid (mis-sides a thin connector). ISSUES #186 -> CLOSED; handoff gets a RESOLVED banner. Co-Authored-By: Claude Opus 4.8 --- docs/ISSUES.md | 52 +++++++++---------- ...6-07-08-186-connector-grey-flap-handoff.md | 15 +++++- 2 files changed, 40 insertions(+), 27 deletions(-) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 71a3d0cb..9da21c58 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -46,37 +46,37 @@ Copy this block when adding a new issue: --- -## #186 — Indoor→indoor GREY flap at a connecting room (top floor, new house type) +## #186 — [DONE 2026-07-08 · `8257b9ba`] Indoor→indoor GREY flap at a connecting room (top floor, new house type) -**Status:** OPEN (diagnosed by class only — NOT captured for this instance; investigation report-only) -**Severity:** MEDIUM · **Filed:** 2026-07-08 · **Component:** render / indoor visibility (viewer-cell root) +**Status:** CLOSED 2026-07-08 — live gate PASSED (no grey at any camera angle) + probe +(216 `root=0118` frames, 0 still grey; `0118->0116` now `TRV`, `vis=4`). +**Severity:** MEDIUM · **Filed:** 2026-07-08 · **Component:** render / indoor visibility (portal side-cull) -**Description:** Top floor of a house type not tried before; a connecting opening/room between two -parts of the house. Passing through → a brief **GREY** flap (world background). Stopping at the precise -spot → the WHOLE screen is grey and stays; **turning the camera clears it, turning back → grey again** -(camera-direction dependent, player stationary). +**Description:** Top floor of a new house type; a thin connecting cell between two rooms. Passing +through → brief GREY flap; stopping at the spot → whole screen grey and stays; turning the camera +clears it, turning back → grey again (camera-direction dependent, player stationary). -**Root cause — NARROWED (report-only; retail SEAMLESS at the same spot → real acdream bug). FULL HANDOFF: -`docs/research/2026-07-08-186-connector-grey-flap-handoff.md`.** The eye seats in a sparse 5-render-poly -CONNECTOR cell `0xF6820118` (between player room `0116` and room `0117`), in the doorway threshold looking -BACK toward `0116`; acdream's render DROPS `0116` (its back-portal is side-culled) so the doorway aperture -shows the fog clear color = grey. Retail keeps `0116` drawn. **RULED OUT (do not revisit):** null-root/AD-21 -(root valid indoor 88248/88249 frames); viewer-cell root-lag/AD-20 (`eyeInRoot=Y` — eye genuinely inside -`0118`'s BSP); the color-clear gating (retail's gated `Clear` @ DrawCells `0x005a48a9` is depth/stencil, -fires AFTER `LScape::draw` — the tempting "3-line fix" is DEAD). Confirmed via workflow `wf_362bbeda-933` -(4 tracers + synthesis) + live `ACDREAM_PROBE_FLAP` capture + offline cell dump. It's the doorway-FLAP -FLOOD/PICK family (frozen render, DO-NOT-RETRY-heavy — the deleted `EyeInsidePortalOpening` rescue, the -`PortalSideEpsilon` root-lag). +**Root cause (CONFIRMED via live retail cdb trace + dat diagnostic — the report-only "narrowed" note +was the right FAMILY but the WRONG mechanism):** the render portal side-cull reconstructed each +doorway's interior side (`PortalClipPlane.InsideSide`) from the cell's **AABB centroid**. For the thin +connector `0xF6820118` (5 render polys) the bounding-box center falls on the WRONG side of the +`0118->0116` doorway → the eye read as a back-portal → the forward room `0116` was culled → the +aperture showed the fog clear color = grey. Retail's `PView::InitCell` (0x005a4b70) AND acdream's own +PHYSICS path (`CellTransit.cs:190`) read the explicit dat **`PortalSide` bit** (`(Flags&2)==0`); the +render path was the only one guessing from geometry. -**Next step (retail cdb, do FIRST — binary MATCHES `refs/acclient.pdb`):** at the grey pose, `bp -SmartBox::update_viewer 0x00453ce0` (dump `viewer_cell` id) and/or `bp PView::DrawCells 0x005a4840` (dump -`cell_draw_list`). retail `viewer_cell==0116` → PICK fix (acdream over-switches to the connector / -boom coasts the eye in at `pulledIn=-0.00`); retail roots `0118` but draws `0116` too → FLOOD fix -(retail admits the back-portal; acdream's side-CULL is the site). Apparatus + code sites + DO-NOT-RETRY -in the handoff. +**Fix (`8257b9ba`):** `GameWindow.BuildLoadedCell` derives `InsideSide` from the dat `PortalSide` bit, +matching retail + physics. Surgical — the dat diagnostic +(`Issue186…PortalSide_CentroidVsDatBit_AtGreyEye`) shows the bit agrees with the old centroid on every +portal of these cells EXCEPT the one #186 breaks; the `CornerFlood`/`Issue113` dat helpers updated to the +same bit keep every real Holtburg/tower/hall flood identical (App 741 / Core 2631 green). Touches neither +`PortalSideEpsilon` nor the deleted `EyeInsidePortalOpening` rescue. -**Acceptance:** no grey flap passing through OR stopping in the connecting room at any camera angle; -regression pass on the outside→inside doorway + other multi-room houses. +**The retail trace OVERTURNED both prior hypotheses:** NOT PICK (both clients root at `0118` at the pose, +eye ≈ identical) and NOT the handoff's FLOOD-epsilon framing — retail draws `0116` from the `0118` root +because its dat side bit admits the portal; acdream's centroid guess culled it. Apparatus (kept): +`tools/cdb/issue186-connector-decider.cdb` (viewer_cell + cell_draw_list decider) + the offline geometry +test. Handoff (now historical): `docs/research/2026-07-08-186-connector-grey-flap-handoff.md`. --- diff --git a/docs/research/2026-07-08-186-connector-grey-flap-handoff.md b/docs/research/2026-07-08-186-connector-grey-flap-handoff.md index 66db80ea..e48edf59 100644 --- a/docs/research/2026-07-08-186-connector-grey-flap-handoff.md +++ b/docs/research/2026-07-08-186-connector-grey-flap-handoff.md @@ -1,6 +1,19 @@ # Handoff: #186 — indoor GREY flap at a top-floor connecting room (new house type) -**Date:** 2026-07-08 · **Status:** ROOT CAUSE NARROWED (report-only) — fix NOT started. It lives in +> **✅ RESOLVED 2026-07-08 · fix `8257b9ba` · live gate PASSED.** The retail cdb trace (§3, run via +> `tools/cdb/issue186-connector-decider.cdb`) OVERTURNED both hypotheses below. Retail roots at the +> connector `0118` at the grey pose (same as acdream — so NOT the PICK fork) AND still DRAWS the player +> room `0116` from that root — because retail's `PView::InitCell` side test reads the dat **`PortalSide` +> bit**, while acdream's render path reconstructed the portal's interior side from the cell **AABB +> centroid**, which mis-sides a THIN connector cell (`0118`, 5 render polys → centroid on the wrong side +> of the `0118→0116` doorway → back-portal cull → grey). Fix = derive `InsideSide` from the dat bit in +> `GameWindow.BuildLoadedCell`, matching retail + acdream's own physics (`CellTransit.cs:190`). Surgical +> (dat diagnostic: agrees with the old centroid on every portal but the one #186 broke). **The §2/§3 +> "acdream drops the room" read was right; the "acdream over-switches the root / flood-epsilon" mechanism +> was WRONG — it was the InsideSide *source*, not the pick or the epsilon.** Everything below is the +> pre-fix investigation, kept for the trail. + +**Date:** 2026-07-08 · **Status:** ~~ROOT CAUSE NARROWED (report-only) — fix NOT started.~~ RESOLVED (see banner). It lives in the FROZEN portal-flood / viewer-cell render code (the doorway-FLAP family that cost weeks), so it needs a **retail cdb trace** to pin the last fork BEFORE any code, then a careful change. Milestone: M1.5.