docs(render): Phase W §1a — Stage-1 gate finding (deeper root: FindEnvCollisions:1947)
Stage 1 (return swept sp.CurCellId, 3e1d502) was gated and the doorway strobe
PERSISTS: [cell-transit] still flips 0170<->0031. Airtight root from code analysis:
Transition.FindEnvCollisions re-derives the cell from the STATIC origin via
engine.ResolveCellId at TransitionTypes.cs:1947 and clobbers sp.CheckCellId (:1949)
at the start of every sweep pass — a second, earlier static re-derive the four
studies missed (they targeted the late return-site). It is the sole path that can
set an indoor swept cell outdoor (the containment pick at :2075 skips outdoor cells).
:1947 is dual-purpose (jitter source AND the only indoor->outdoor exit), so Stage 2
must replace it with a directed exit-portal crossing + do_not_load prune + exitOutside
re-gate — a careful #98-area rework, not a one-line delete. Render residuals at the
gate (no interior outside-looking-in, blue-through-door, particle/NPC bleed) are all
expected Stages 3-5, not Stage-1 regressions. Stage 1 is kept (correct + necessary).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
d23d1f40dc
commit
ed00719cf4
1 changed files with 33 additions and 0 deletions
|
|
@ -47,6 +47,39 @@ membership-return fix alone is expected to stop the flicker; the prune is correc
|
|||
after. (This makes the shipped W2b doubly wrong — wrong location *and* wrong mechanism — and it
|
||||
is reverted.)
|
||||
|
||||
## 1a. Stage-1 gate finding (2026-06-02) — the deeper root is `FindEnvCollisions:1947`
|
||||
|
||||
Stage 1 (return `sp.CurCellId`) shipped (`3e1d502`) and was visually gated. **The doorway strobe
|
||||
PERSISTS:** `[cell-transit]` (now fed by `sp.CurCellId`) still flips `0170↔0031` at a ~0.2 m
|
||||
jitter. So the swept cell is itself tainted — Codex's "verify before delete" caution was correct.
|
||||
|
||||
**Airtight root (code analysis):** `Transition.FindEnvCollisions` re-derives the cell from the
|
||||
**static** sphere origin via `engine.ResolveCellId(sp.GlobalSphere[0].Origin, …)` at
|
||||
`TransitionTypes.cs:1947` at the *start* of every sweep pass and overwrites `sp.CheckCellId`
|
||||
(`:1949`). `ValidateTransition` then latches that into `sp.CurCellId`. This is a **second, earlier
|
||||
static re-derive** the four studies under-analyzed (they all targeted the late return-site). It is
|
||||
the **only** path that can set an indoor swept cell to outdoor: the containment pick
|
||||
(`FindCellSet`/`BuildCellSetAndPickContaining` at `:2075`) skips outdoor landcells (no `CellBSP`),
|
||||
so `:1947→:1949` is the sole outdoor-taint source. Stage 1's return fix was necessary but
|
||||
insufficient; `:1947` is the load-bearing taint.
|
||||
|
||||
**Why it's not a one-line delete:** `:1947` is dual-purpose — it is *both* the jitter source *and*
|
||||
the only indoor→outdoor exit mechanism acdream has (naive removal fixes the strobe but strands the
|
||||
player indoors, unable to walk out). Stage 2 must **replace** it with a retail-faithful directed
|
||||
exit-portal crossing (`CEnvCell::find_transit_cells` exit-portal path — become outdoor by crossing
|
||||
the doorway polygon, not by a static re-resolve) plus the `do_not_load_cells` prune for indoor
|
||||
candidate stability, and re-gate `CellTransit.FindTransitCellsSphere`'s unconditional
|
||||
`exitOutside=true` (`CellTransit.cs:95-123`). This is the genuine transition-cell-tracking rework;
|
||||
it is `#98`-area (FindEnvCollisions/CheckOtherCells) and must be approached carefully, not guessed.
|
||||
|
||||
**Render residuals seen at the Stage-1 gate (all expected; Stages 3-5):** outside-looking-in shows
|
||||
no interior (walls/floor missing, cellar mouth shows ground) = no PView exterior→interior portal
|
||||
(U.5); bluish background + all particles/NPCs at the threshold/stairs = ungated entities + the
|
||||
strobe-induced render-root flip (Stage 2 stabilizes the flip; Stage 4 seals); sky-through-door is
|
||||
blue/no-clouds and down/up portals show blue = `OutsideView`/portal not drawn (Stage 4); cellar
|
||||
renders best (walls+roof) with a blue flicker over the exit = closest to sealed, residual portal.
|
||||
None of these are Stage-1 regressions.
|
||||
|
||||
## 2. Target architecture (retail-faithful)
|
||||
|
||||
**One cell graph, one membership authority, render obeys it.**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue