diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 784f2d7e..11400283 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -44,78 +44,6 @@ Copy this block when adding a new issue: --- -## #106 — Outdoor player-cell membership FREEZES at landblock boundaries (whole interiors unenterable) - -**Status:** FIX LANDED 2026-06-09 — pending live boundary-walk gate (acceptance below) -**Severity:** HIGH -**Filed:** 2026-06-09 -**Component:** physics, membership - -**Fix (2026-06-09):** retail `LandDefs` global-lcoord math ported as -`AcDream.Core.Physics.LandDefs` (`blockid_to_lcoord` / `gid_to_lcoord` / -`lcoord_to_gid` / `get_outside_lcoord` / `adjust_to_outside`, decomp-cited); -`CellTransit.AddAllOutsideCells` rewritten as the faithful sphere-variant -(pc:317499) — candidates and the `find_cell_list` pick now run in the GLOBAL -landcell grid, so landblock crossings are inherent (the pre-fix port clamped -both to the current block's 8×8 grid → zero candidates one step over the line → -frozen). World→block-local conversion via the landblock origin registered in -`CellGraph` (`TryGetTerrainOrigin`). The `b3ce505` gate was investigated FIRST -and definitively exonerated (collision-only, fires only for indoor primaries — -no membership path touches it). 31 new conformance tests incl. the capture -geometry goldens (0xA9B40031 → 0xA9B30038/0xA9B30034) and a non-anchor-frame -northbound return. Pseudocode + decomp-artifact notes: -`docs/research/2026-06-09-landdefs-outside-cells-pseudocode.md`. - -**Gate attempt 1 (2026-06-09):** outside-looking-in correct + running distortion gone, -but the walk was sabotaged by a PRE-EXISTING bug the corrective ACE teleport exposed: -the teleport-arrival snap (`GameWindow.cs:4869`) committed a BARE indoor cell id -(`0x0000013F`) from the legacy `PhysicsEngine.Resolve`, which returned low-word-only -cell ids on every computed exit (the L.2e bare-low-byte finding from 2026-05-12). -A bare indoor id wedges the chain: no wall BSP (`GetCellStruct` miss), the #98 -`b3ce505` gate reads "indoor primary" and skips the outdoor object sweep (NO object -collision anywhere), and the pick can never re-resolve a malformed id (probe log: -2 `[cell-transit]` lines all session, both teleports). Follow-up fix: `Resolve` now -returns the matched landblock's full prefixed id on every computed exit; the -unmasked `CellId < 0x100` test assertion that codified the bare behavior fixed. -Prefix survival before this was a race artifact — `Resolve` only preserved the full -id when the landblock wasn't streamed in yet (passthrough exit). - -**Description:** Walking outdoors across a landblock boundary does NOT update the player's -outdoor cell: `playerCell` stays pinned to the last cell of the previous landblock, -indefinitely. Every downstream consumer degrades: entering any building in the new landblock -never fires the outdoor→indoor membership transition (the interior never renders — "I'm inside -but it looks like I'm standing outside"), and the render root stays anchored at the stale -outdoor cell, producing the "screen distorted with world background" artifacts while running. - -**Root cause / status:** PINNED by live capture 2026-06-09 (`flap-105-capture.log`, 53 MB, -analyzed in `docs/research/2026-06-09-105-capture-analysis-membership-landblock-pin.md`): -playerCell froze at `0xA9B40031` at log line 93363 and never changed for 10,449 frames — -spanning ~130 m of outdoor walking into landblock `0xA9B3` (player y reaching −109 in -A9B4-local coords) and an 8,929-frame stand inside an A9B3 cottage. Within-landblock outdoor -transitions are clean (96/96); all 10 successful indoor entries were same-landblock buildings; -the single failure was the only cross-landblock building entered. The render flood -independently SAW the A9B3 interior cells (`0xA9B301xx` in `[render-sig]`) — rendering is -downstream and healthy; membership is the broken layer. Suspects for the fix session: the -outdoor candidate-cell proposal in `PhysicsEngine.ResolveCellId` / `CellTransit.AddAllOutsideCells` -(a coord-convention bug there was fixed 2026-05-25; cross-landblock proposals may still be -missing or gated), and the `b3ce505` #98 stopgap which GATED the outdoor sweep (the physics -digest carries this workaround debt — this may be its fallout). Retail oracle: -`CObjCell::find_cell_list` Position-variant (`acclient_2013_pseudo_c.txt:308742-308783`) + -`LandDefs` outside-cell coordinate handling. - -**Files:** `src/AcDream.Core/Physics/PhysicsEngine.cs` (ResolveCellId), -`src/AcDream.Core/Physics/CellTransit.cs` (AddAllOutsideCells), -`src/AcDream.Core/Physics/` membership chokepoint (UpdateCellId). - -**Research:** `docs/research/2026-06-09-105-capture-analysis-membership-landblock-pin.md`. - -**Acceptance:** walk outdoors from Holtburg across each neighboring landblock boundary — -`[cell-transit]` (ACDREAM_PROBE_CELL=1) shows the outdoor cell updating to the new landblock's -cells; enter a cross-landblock building — membership transitions indoor and the interior -renders; the running-distortion artifacts stop accumulating with distance. - ---- - ## #105 — Intermittent silent dat-load failure: white/missing cottage walls until relaunch **Status:** OPEN @@ -3790,6 +3718,49 @@ Unverified. The likely culprits, ranked by suspected probability: # Recently closed +## #106 — Outdoor membership freezes at landblock boundaries — [DONE 2026-06-09 · 7078264 + 23adc9c + 6dbbf95 + e6913ac] + +**Status:** DONE (user-verified: collision + solid walls everywhere; probe-verified crossings) +**Closed:** 2026-06-09 +**Commits:** `7078264` (LandDefs global-lcoord port) + `23adc9c` (legacy Resolve full +prefixed ids) + `6dbbf95` (bogus-indoor-claim recovery + spawn-ground entry hold) + +`e6913ac` (in-world streaming before chase entry) +**Component:** physics, membership + +**Resolution:** the outdoor candidate proposal (`CellTransit.AddAllOutsideCells`) AND the +`find_cell_list` containing-cell pick were clamped to the current landblock's 8×8 grid — +one step over a boundary → zero candidates → membership frozen forever. Retail runs both +in a GLOBAL landcell grid (lcoord 0..2039); ported as `AcDream.Core.Physics.LandDefs` +(decomp-cited; BN int8_t + dropped-192f artifacts and ACE's `add_cell_block` "FIXME!" +same-block guard documented and avoided — +`docs/research/2026-06-09-landdefs-outside-cells-pseudocode.md`). The `b3ce505` #98 gate +was investigated first and definitively exonerated (collision-only, indoor-primary-only). + +**The gate runs surfaced and fixed three adjacent pre-existing bugs** (each wedged the +verification walk a different way): legacy `PhysicsEngine.Resolve` returned BARE low-word +cell ids on every computed exit (the 2026-05-12 L.2e finding — a bare indoor id kills wall +BSP + the #98 gate misfires + the pick can't recover; prefix survival had been a streaming +race artifact); the membership pick had no recovery from a hydrated-but-not-containing +indoor claim (ACE's save was poisoned by the wedged session — restored the #83/A1.7 + #90 +sphere-overlap demotion as the pick's escape hatch); and player-mode entry raced terrain +hydration (free-fall into void — added the spawn-ground auto-entry hold, which exposed and +fixed the K-fix1 streaming-vs-chase circular gate). + +**Verification (gate 4, `probe-cell-106-gate4.log`):** 49 clean `[cell-transit]` +transitions — south crossing `0xA9B40039→0xA9B30040` at y=−0.19 (the originally frozen +boundary), east crossing `0xA9B3003D→0xAAB30005` at x=192.2 (a third landblock), clean +single flips at the block corner, and the originally-failing A9B3 cottage tracked +room-by-room (`0x0104→…→0x0110`, stairs climbing z 116→119). User confirms collision and +solid walls work everywhere. + +**Residual NOT this issue:** transient parts-of-screen-turn-background-color artifacts +while running and at cottage/room enter–exit persist WITH a correctly-following membership +anchor — gate 4 disproves the capture doc's full attribution of the running distortion to +the stale anchor. That residual is the render §4 flap family (edge-on doorway grey + +corner camera-seal) tracked in `claude-memory/project_render_pipeline_digest.md`. + +--- + ## Cottage doorway "flap" — [DONE 2026-06-03 · 22a184c + e5457f9 + 79fb6e7] membership pick + render-root clobbering (the TWO causes) **Status:** DONE (user-verified inside-looking-out) diff --git a/docs/research/2026-06-09-105-capture-analysis-membership-landblock-pin.md b/docs/research/2026-06-09-105-capture-analysis-membership-landblock-pin.md index fc046a5c..f1d754a4 100644 --- a/docs/research/2026-06-09-105-capture-analysis-membership-landblock-pin.md +++ b/docs/research/2026-06-09-105-capture-analysis-membership-landblock-pin.md @@ -32,6 +32,11 @@ capture: entered a cottage and "EVERYTHING disappears, like I'm standing outside `0x0031`), so the whole view is built from a wrong anchor. The capture REFUTES flood-level causes outdoors: in all 26,960 outdoor-root frames, `outPolys=1` and `vis=1` with zero exceptions. + > ⚠️ **Attribution PARTIALLY corrected post-fix (2026-06-09, #106 gate 4):** with #106 + > fixed and the anchor following correctly (49 clean transitions incl. cross-block), + > the user still reports transient parts-of-screen-turn-background-color artifacts while + > running and at cottage/room enter–exit. The stale anchor amplified the artifact but was + > not its only cause — the residual is the §4 flap family (render digest), not membership. 5. **The §4 indoor flap is unchanged and separate:** vis oscillation exists only under indoor roots (520 changes, longest 9 consecutive flips, cells 0x013F/0x0143/0x0150/0x0171) plus ~11 one-to-three-frame OUT↔IN root blips at doorways (e.g. lines 31704..31713) — the known