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