From d2b8a51426fdbc05887219d76d6cd5b1ecea8769 Mon Sep 17 00:00:00 2001 From: Erik Date: Sun, 14 Jun 2026 21:08:40 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20wrap-up=20=E2=80=94=20file=20#137=20(du?= =?UTF-8?q?ngeon=20collision)=20+=20#138=20(teleport-out=20world=20loading?= =?UTF-8?q?);=20close=20#135/#136?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - #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) --- CLAUDE.md | 27 +++++++++----------- docs/ISSUES.md | 68 +++++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 79 insertions(+), 16 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index d4c43ff5..508e28d5 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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 diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 96bd2d56..b0f629ae 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -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 ~1–2 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