docs: wrap-up — file #137 (dungeon collision) + #138 (teleport-out world loading); close #135/#136

- #137: dungeon collision wrong at doors / wall openings (EnvCell collision; needs repro).
- #138: teleport OUT of a dungeon loads the outdoor world incompletely (missing trees/
  scenery, broken collision) + a position desync (avatar moves but player position doesn't)
  — hypothesised as the dungeon-streaming collapse→EXPAND gap (same machinery as #135).
- #135 marked DONE (user-verified FPS-steady dungeon login); #136 closed (editor-marker hide).
- CLAUDE.md current-state refreshed: #135/#136 shipped, A7 lighting + #137/#138 remaining.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Erik 2026-06-14 21:08:40 +02:00
parent fd0ecfcf2e
commit d2b8a51426
2 changed files with 79 additions and 16 deletions

View file

@ -108,21 +108,18 @@ movement queries.
## Current state
**Currently working toward: M1.5 — Indoor world feels right.** Building/cellar
demo DONE; **dungeons now RENDER** (2026-06-13, autonomous /loop): G.3a teleport
hold+place + **Bug A** (validated-claim keeps the dungeon landblock prefix, `2ce5e5c`)
+ **login-into-dungeon recenter** (`47ae237`) → live `0x0007` dungeon renders, navigable,
correct membership, WB-DIAG instances **9.1M→39K**. **#95 was a Bug-A symptom, NOT an
unbounded flood — DO NOT port `grab_visible_cells` stab_list bounding** (the flood is
already bounded; the "terrain-less landblock" framing was refuted — dungeons are
flat-terrain + EnvCells). REMAINING for M1.5: **A7 dungeon torch/point-lighting** (dungeon
gets retail's flat 0.2 indoor ambient but `Setup.Lights` torches aren't registered → dim,
"lighting off"); needs visual iteration. M2 (CombatMath) deferred. Detail in **#133/#95**
(ISSUES) + the render digest's top banner.
Recent closes (2026-06-12/13): #119/#128, #112, #113, #124,
#129/#130/#131/#132, UN-2, #108-residual, #127, #125; #116 partial (Ghidra
threshold fix). Keep this paragraph ≤5 lines + pointers — detail in the
docs below, NOT here.
**Currently working toward: M1.5 — Indoor world feels right.** Dungeons RENDER +
are navigable; **login into a dungeon** now loads + places the player and is
**FPS-steady from the start** (#135 pre-collapse + indoor cell-floor spawn gate,
`712f17f`+`2c92375`). The dungeon **"red cone"** was an editor-only placement marker
acdream inherited from WB (retail hides it via distance degrade) — FIXED (#136 `6f81e2c`).
REMAINING for M1.5: **A7 dungeon lighting** (LightBake Core landed `3b93f91`; per-vertex
bake integration + the per-pixel torch OVER-blow still open — #79/#93); **#137 dungeon
collision** (doors / wall openings); **#138 teleport-OUT of a dungeon** loads the outdoor
world incompletely + position desync (the collapse→EXPAND gap — same machinery as #135).
M2 (CombatMath) deferred. Detail in ISSUES (#135#138) + the render/physics digests.
Recent closes (2026-06-14): #135, #136. Keep this paragraph ≤6 lines + pointers — detail
in the docs below, NOT here.
For canonical state, read in this order:
- [`docs/plans/2026-05-12-milestones.md`](docs/plans/2026-05-12-milestones.md) — milestone targets + freeze list per milestone

View file

@ -46,6 +46,72 @@ Copy this block when adding a new issue:
---
## #138 — Teleport OUT of a dungeon loads the outdoor world incompletely + position desync
**Status:** OPEN
**Severity:** MEDIUM (breaks the dungeon→outdoor transition; collision + visuals wrong after exit)
**Filed:** 2026-06-14
**Component:** streaming — dungeon collapse↔expand (the #133/#135 collapse) + teleport-arrival
**Description (user):** taking a portal OUT of a dungeon to the outdoor world often loads
the world incompletely — **fewer objects than expected (e.g. missing trees/scenery)**, and
**collision doesn't work properly**. There's also a **position desync**: "it's like I'm not
moving while my character is moving" (the avatar animates/advances but the player's
actual position / camera doesn't track, or vice-versa).
**Root cause / status (hypothesis — needs investigation):** very likely a gap in the
dungeon-streaming **collapse→expand** introduced for #133/#135. Inside a dungeon, streaming
is COLLAPSED to the single dungeon landblock (radius-0). On teleport OUT,
`StreamingController.ExitDungeonExpand` must rebuild the full 25×25 outdoor window at the new
center. Suspects: (a) the expand doesn't fully re-enqueue / re-hydrate the outdoor landblocks
(→ missing trees/scenery + no collision because shadow-object registration never ran for the
un-hydrated blocks); (b) the teleport-arrival recenter (`OnLivePositionUpdated`) +
`PreCollapseToDungeon`/observer interaction leaves the streaming observer pinned wrong after
exit; (c) the position desync = the player controller / streaming observer disagree on the
post-exit world position (the avatar moves in one frame, the streaming/camera in another).
Pairs with #135 (`712f17f`/`2c92375`) — same collapse machinery; the EXIT path is the gap.
**Files:** `src/AcDream.App/Streaming/StreamingController.cs` (`ExitDungeonExpand`, the
collapse/expand hysteresis), `src/AcDream.App/Rendering/GameWindow.cs` (`OnLivePositionUpdated`
teleport recenter ~4912, the streaming Tick gate ~6890, the PortalSpace observer branch),
`TeleportArrivalController`. Cross-check the post-exit shadow-object/collision registration.
**Acceptance:** portal out of the 0x0007 dungeon → full outdoor world streams (trees/scenery
present), collision works, and the player position tracks correctly (no avatar-vs-camera desync).
---
## #137 — Dungeon collision incorrect at doors and wall openings
**Status:** OPEN
**Severity:** MEDIUM (movement/collision correctness in dungeons)
**Filed:** 2026-06-14
**Component:** physics — EnvCell collision (doors, portal openings, cell geometry)
**Description (user):** collision is still wrong in dungeons — **doors** and **openings in
walls** in particular. (Symptoms not fully characterized yet: likely walking through
openings that should block / blocking at openings that should pass, and door collision not
matching the door's open/closed state.)
**Root cause / status (to investigate):** dungeon collision is EnvCell-based — the cell's
collision BSP + portal openings + per-cell static objects (doors). Candidates: door
apparatus collision in EnvCells (open/closed BSP swap) not fully ported; portal-opening
(wall gap) collision geometry handled differently from buildings; the per-cell
shadow-object registration (A6.P4, see the physics digest) for dungeon EnvCell statics.
Related families: #32 (edge-slide), #116 (slide-response), the door-collision saga
(see `feedback_dedup_keys_after_cardinality_change`, `feedback_retail_per_cell_shadow_list`).
Needs a targeted repro (which door / which opening, expected vs actual) before fixing —
oracle-first per the physics digest.
**Files:** `src/AcDream.Core/Physics/` (EnvCell collision, CellTransit, the door apparatus),
`src/AcDream.Core/Physics/ShadowObjectRegistry.cs` (per-cell registration). See
`claude-memory/project_physics_collision_digest.md` (the collision SSOT + DO-NOT-RETRY table).
**Acceptance:** doors block/pass per their open/closed state; wall openings pass; solid walls
block — matching retail, in the 0x0007 dungeon.
---
## #136 — DONE — "red cone" in the 0x0007 dungeon was an editor-only placement marker acdream drew (retail hides it)
**Status:** FIXED `6f81e2c` (2026-06-14) — verified live via frame dump: the red cone +
@ -92,7 +158,7 @@ under the #79/#93 A7 lighting umbrella.
## #135 — ~30 s low-FPS ramp at login (≈10 fps → high) before streaming settles
**Status:** FIX LANDED — pending visual gate (login into the 0x0007 dungeon → FPS steady in ~12 s, no neighbour load/unload churn)
**Status:** DONE `712f17f`+`2c92375` (2026-06-14) — user-verified: login into the 0x0007 dungeon is FPS-steady from the start; dungeon loads + places the player. (NOTE: the teleport-OUT path has a separate streaming gap — see #138.)
**Severity:** LOW (startup-only; self-corrects)
**Filed:** 2026-06-14
**Component:** streaming — first-frame bootstrap vs the dungeon collapse