From 14b48cf553b363ba479a2f988c0e3065257aa5c1 Mon Sep 17 00:00:00 2001 From: Erik Date: Sat, 25 Jul 2026 10:34:48 +0200 Subject: [PATCH] docs(portal): record arrival visual gate Close the retained-projection regression after the user confirmed both /ls and spell recall show the retail purple materialization silhouette without a character pop or leftover animation/effect tail. Co-authored-by: OpenAI Codex --- docs/ISSUES.md | 5 ++++- docs/plans/2026-04-11-roadmap.md | 2 +- docs/plans/2026-05-12-milestones.md | 11 +++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/docs/ISSUES.md b/docs/ISSUES.md index 5048514c..a8777f46 100644 --- a/docs/ISSUES.md +++ b/docs/ISSUES.md @@ -1211,7 +1211,7 @@ Passed 2026-07-17: “Yes works.” ## #218 — Portal silhouette pose, destination reveal, and indoor observer snap -**Status:** REGRESSION FIX IMPLEMENTED 2026-07-25 — visual re-gate pending +**Status:** DONE — 2026-07-25, `/ls` and spell-recall visual re-gate passed **Severity:** HIGH **Filed:** 2026-07-16 **Component:** portal VFX / streaming / physics / outbound movement @@ -1296,6 +1296,9 @@ snap back to the entrance. **Gate:** Passed 2026-07-21. The user confirmed the final two-client portal-out/materialization and indoor observer comparison on the R6 baseline. +The 2026-07-25 retained-runtime regression re-gate also passed: both `/ls` and +spell recall briefly show the purple materialization silhouette without an +opaque character pop, late purple effect, or source-action animation tail. --- diff --git a/docs/plans/2026-04-11-roadmap.md b/docs/plans/2026-04-11-roadmap.md index 93973289..6b5485cd 100644 --- a/docs/plans/2026-04-11-roadmap.md +++ b/docs/plans/2026-04-11-roadmap.md @@ -806,7 +806,7 @@ Research: R9 + R12 + R13. - **✓ SHIPPED — G.1 — Sky + weather + day-night.** Deterministic client-side from Portal Year time. Sky dome geometry + keyframe gradients + rain/snow particles. See `r12-weather-daynight.md`. Full data + visual stack shipped: Region dat loader, keyframe interp, WeatherSystem with 5-kind PDF + transitions + storm flashes, WorldSession→WorldTimeService sync via ConnectRequest+TimeSync, SkyRenderer with sky-object arcs + UV scroll, rain/snow billboard renderer, F7/F10 debug cycle keys. - **✓ SHIPPED — G.2 — Dynamic lighting.** 8-light D3D-style fixed pipeline. Hard-cutoff at Range, no attenuation inside. Cell ambient. Shader UBO per frame. See `r13-dynamic-lighting.md`. SceneLightingUbo std140 at binding=1 feeds terrain + mesh + mesh_instanced + sky shaders. LightingHookSink auto-registers Setup.Lights at entity stream-in, flips IsLit on SetLightHook, unregisters on landblock unload. - **Indoor portal-based cell tracking (follow-up to Indoor walking Phase 1 / issue #87).** Replace `PhysicsDataCache.TryFindContainingCell` AABB containment with retail's `CObjMaint::HandleObjectEnterCell` portal traversal. When the player crosses a cell portal boundary, `CellId` propagates through the `CEnvCell` portal connectivity graph. Prerequisite for wall collision from outside (#85) and the remaining #84 threshold symptom. PDB symbols and `acclient.h` `CCellStructure` refs are in place (see #87). **Unblocks G.3.** -- **✓ SHIPPED — G.3 — Dungeon streaming + portal space.** `EnvCellStreamer`, portal-visibility BFS, `PlayerTeleport (0xF751)` handling with post-transition `LoginComplete`, and the retail DAT-authored portal-space CreatureMode viewport (Setup `0x02000306`, animation `0x030005AC`, exact camera/light/timing/view-plane transitions, forward-axis roll, direct portal→world viewport switch, projection warp, destination viewer reset, object/physics-before-network frame barrier, pre-network input movement/jump output, post-inbound AutonomousPosition, non-advancing spatial reconciliation, and retail `set_hidden` PartArray timeline teardown on both Hidden and UnHide; `/ls` and spell-recall corrective visual gates passed 2026-07-16, with non-blocking visual polish deferred). Dungeons render, stream, teleport, collide, light, and their doors work; the final end-to-end dungeon round-trip gate passed 2026-07-10. See the shipped-table rows (G.3, G.3a, #137 collision, A7.L1 lighting) and the M1.5 section of `docs/plans/2026-05-12-milestones.md`. The far-town unstreamed-edge arrival residual is tracked separately as #153. See `r09-dungeon-portal-space.md` and `docs/research/2026-07-15-retail-portal-space-pseudocode.md`. +- **✓ SHIPPED — G.3 — Dungeon streaming + portal space.** `EnvCellStreamer`, portal-visibility BFS, `PlayerTeleport (0xF751)` handling with post-transition `LoginComplete`, and the retail DAT-authored portal-space CreatureMode viewport (Setup `0x02000306`, animation `0x030005AC`, exact camera/light/timing/view-plane transitions, forward-axis roll, direct portal→world viewport switch, projection warp, destination viewer reset, object/physics-before-network frame barrier, pre-network input movement/jump output, post-inbound AutonomousPosition, non-advancing spatial reconciliation, and retail `set_hidden` PartArray timeline teardown on both Hidden and UnHide; `/ls` and spell-recall corrective visual gates passed 2026-07-16, and the retained-projection arrival regression re-gate passed 2026-07-25, with non-blocking visual polish deferred). Dungeons render, stream, teleport, collide, light, and their doors work; the final end-to-end dungeon round-trip gate passed 2026-07-10. See the shipped-table rows (G.3, G.3a, #137 collision, A7.L1 lighting) and the M1.5 section of `docs/plans/2026-05-12-milestones.md`. The far-town unstreamed-edge arrival residual is tracked separately as #153. See `r09-dungeon-portal-space.md` and `docs/research/2026-07-15-retail-portal-space-pseudocode.md`. **Acceptance:** walk outside at dusk, see the sky gradient + sun moving; enter a torch-lit dungeon via portal; leave back to daylight. diff --git a/docs/plans/2026-05-12-milestones.md b/docs/plans/2026-05-12-milestones.md index f2daa1eb..04f58c60 100644 --- a/docs/plans/2026-05-12-milestones.md +++ b/docs/plans/2026-05-12-milestones.md @@ -496,6 +496,17 @@ the Lifestone recall boundary and a MagicPortal casting timeline. The user confirmed `/ls` and spell-recall arrivals no longer replay their animation tails; additional portal visual polish is explicitly deferred. +**2026-07-25 portal arrival regression closeout.** A connected PES trace found +that destination Place updated the controller, mesh root, and authoritative +full cell without rebucketing the retained local-player projection. The queued +Hidden PES therefore remained cell-paused until after the world viewport +returned, causing the opaque character pop and late purple/action tail. +`LocalPlayerTeleportPlacement` now commits the resolved destination bucket +before spatial reconciliation and before destination simulation resumes, +matching retail `CPhysicsObj::enter_world`/`update_object`. The user confirmed +both `/ls` and spell recall now briefly show the purple materialization +silhouette without a pop or leftover tail. + **2026-07-16 corrective portal gate (#218).** A side-by-side retail observer check found three distinct state-publication defects after the arrival-tail fix. Hidden now recomposes the post-`HandleEnterWorld` cyclic pose without