Both root-caused live + fixed this session (315af02f,9b06a9b8). NOT R5 — pre-existing streaming bugs surfaced while visual-gating R5-V2. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
parent
9b06a9b831
commit
7c5bc97c74
1 changed files with 38 additions and 0 deletions
|
|
@ -46,6 +46,44 @@ Copy this block when adding a new issue:
|
|||
|
||||
---
|
||||
|
||||
## #169 — Cold-spawn "hole": world doesn't load / invisible player when spawning far from Holtburg
|
||||
|
||||
**Status:** DONE (`9b06a9b8`, 2026-07-03) — root confirmed live via a landblock-load
|
||||
probe. **Cause:** the two-tier streamer marks every window landblock "resident"
|
||||
at bootstrap (`StreamingRegion.MarkResidentFromBootstrap`) BEFORE their async
|
||||
loads land. A character saved FAR from the startup center (0xA9B4 Holtburg)
|
||||
triggers a login-spawn `RecenterTo` against that stale, half-loaded window;
|
||||
`RecenterTo` trusts `_tierResidence`, so the old/new window overlap is never
|
||||
re-enqueued — a permanent HOLE of resident-but-never-loaded landblocks (zero
|
||||
`BUILD-NULL`; they're simply skipped). The player spawns in the hole → its
|
||||
landblock never loads → terrain/NPCs/player never draw ("world loads behind me,
|
||||
character invisible"). Probe: spawn at 0xADAF, column 0xAD loaded Y=0xA3-0xAA +
|
||||
0xB0-0xC0 but MISSING Y=0xAB-0xAF; player at 0xADAF (Y=0xAF) dead in the gap.
|
||||
**Fix:** a far login-spawn moves the render origin like an outdoor teleport
|
||||
(which already calls `StreamingController.ForceReloadWindow` — drop stale window
|
||||
+ re-bootstrap fresh at the new origin); the login-spawn recenter now flags that
|
||||
rebuild (network thread → set flag → render thread consumes it before the Tick).
|
||||
Verified: 0xADAF now loads (216 entities), full world draws, player recovers.
|
||||
No-op for a normal Holtburg login. NOT R5 (pre-existing streaming bug).
|
||||
|
||||
## #168 — Invisible player / character disappears (pending-bucket trap)
|
||||
|
||||
**Status:** DONE (`315af02f`, 2026-07-03) — root confirmed live via
|
||||
`ACDREAM_PROBE_ENT`. **Cause:** a persistent server-spawned entity that spawns
|
||||
into a not-yet-loaded landblock is parked in `GpuWorldState._pendingByLandblock`.
|
||||
`RelocateEntity` (per-frame, keeps the player homed to its current landblock so
|
||||
it draws) scanned ONLY `_loaded`, so it silently no-op'd on a pending entity —
|
||||
and the player fell through all recovery paths (the AddLandblock drain already
|
||||
ran empty; the server-object re-hydrate excludes the player; RelocateEntity
|
||||
couldn't reach pending) → stranded invisible. This is the mechanism behind BOTH
|
||||
"cold-spawn invisible" AND "character disappears running out of Holtburg far
|
||||
enough" (both = player parked in pending, never recovered). **Fix:**
|
||||
`RelocateEntity` now removes the entity from whichever bucket it occupies
|
||||
(`_loaded` OR `_pendingByLandblock`) then re-appends to its current landblock —
|
||||
promoting a stranded pending entity to drawn as soon as its landblock loads.
|
||||
Test: `GpuWorldStateTests.RelocateEntity_StrandedInPending_MovesToLoadedTarget`
|
||||
(red→green). Composes with #169. NOT R5-V2 (verified read-only re: pos/streaming).
|
||||
|
||||
## #167 — ConstraintManager leash unported (arming + two unknown x87 constants)
|
||||
|
||||
**Status:** OPEN (deferred, filed 2026-07-03 during R5-V1)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue