From e6913ac2f9e7b0d5944c6f93fb6f1000487c314b Mon Sep 17 00:00:00 2001 From: Erik Date: Wed, 10 Jun 2026 06:30:40 +0200 Subject: [PATCH] =?UTF-8?q?fix(app):=20#106=20gate-3=20=E2=80=94=20unblock?= =?UTF-8?q?=20in-world=20streaming=20before=20chase=20entry=20(entry-hold?= =?UTF-8?q?=20deadlock)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Gate-3 never entered player mode: the new spawn-ground entry hold (6dbbf95) waits for terrain under the spawn, but the K-fix1 streaming gate skipped streaming entirely until the chase camera first engaged — which requires player-mode entry. Circular wait; the user sat in the fly camera with an empty world (the probe log has zero [cell-transit] lines and no "auto-entered player mode"). K-fix1's intent was narrower than its implementation: suppress the hardcoded-Holtburg center flash BEFORE LOGIN. The streaming tick even has a dedicated in-world fly-camera branch (observer from _lastLivePlayerLandblockId) that the outer gate made unreachable. The fix gates streaming on pre-login only: once the live session reaches InWorld, streaming runs (centered on the server-known player landblock or the fly camera), terrain hydrates, the spawn-ground predicate flips, and auto-entry fires. The world-geometry RENDER gate is untouched — the pre-entry screen still shows sky only, exactly K-fix1's visual. Co-Authored-By: Claude Fable 5 --- src/AcDream.App/Rendering/GameWindow.cs | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/AcDream.App/Rendering/GameWindow.cs b/src/AcDream.App/Rendering/GameWindow.cs index 468abab3..fc9483cb 100644 --- a/src/AcDream.App/Rendering/GameWindow.cs +++ b/src/AcDream.App/Rendering/GameWindow.cs @@ -6563,8 +6563,22 @@ public sealed class GameWindow : IDisposable // the orbit camera at startup centers on the hardcoded // 0xA9B4 (Holtburg) and Holtburg landblocks render briefly // until the player spawn arrives + auto-entry switches to chase. + // + // #106 gate-3 (2026-06-09): narrowed to PRE-LOGIN only. The original + // form also blocked the in-world window between EnterWorld and + // auto-entry, which deadlocked the spawn-ground entry hold: + // auto-entry waits for terrain under the spawn, terrain streaming + // waited for chase mode. Once the session is InWorld the player's + // landblock is known (the fly-camera else-if below was written for + // exactly this window) — stream it. Pre-login, streaming stays + // blocked, which is the hardcoded-Holtburg flash K-fix1 targeted. + // The world-geometry RENDER gate (IsLiveModeWaitingForLogin at the + // draw site) is unchanged — the pre-entry screen still shows sky + // only. + bool liveInWorld = _liveSession is not null + && _liveSession.CurrentState == AcDream.Core.Net.WorldSession.State.InWorld; if (_streamingController is not null && _cameraController is not null - && !IsLiveModeWaitingForLogin) + && (!IsLiveModeWaitingForLogin || liveInWorld)) { int observerCx = _liveCenterX; int observerCy = _liveCenterY;