docs: #106 CLOSED — gate-4 verification + running-artifact attribution correction
Move #106 to Recently closed (user-verified collision + solid walls; probe-verified 49 clean transitions incl. south A9B4->A9B3 at y=-0.19, east A9B3->AAB3 at x=192.2, and room-by-room tracking through the originally-failing A9B3 cottage). Records the three adjacent pre-existing bugs the gate runs surfaced and fixed (legacy Resolve bare ids, bogus-indoor-claim recovery, entry-hold streaming deadlock). Correct the capture doc's attribution: the outdoor running distortion was NOT fully the stale anchor — gate 4 shows residual background-color screen artifacts persist with a correctly-following anchor. The residual is the render §4 flap family (render digest), not membership. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
e6913ac2f9
commit
41fa3cbbc4
2 changed files with 48 additions and 72 deletions
115
docs/ISSUES.md
115
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)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue