perf(streaming): reserve destination reveal capacity

Join destination scheduling to the canonical reveal generation, protect its share across every typed frame-budget dimension, and prevent stale work from clearing a replacement reservation. Remove forced incomplete materialization and project retail's centered portal wait cue while the authored tunnel remains active.

Tests: Release build clean; 91 focused reservation/reveal tests; full solution 8,158 passed, 5 skipped.

Co-authored-by: Codex <noreply@openai.com>
This commit is contained in:
Erik 2026-07-24 19:39:23 +02:00
parent 98f1ac8934
commit 2ff8f844b0
33 changed files with 870 additions and 230 deletions

View file

@ -109,7 +109,7 @@ Required asynchronous equivalent:
```text
WorldRevealReady(destination):
if destination claim cannot be hydrated:
return true so the existing loud forced-placement path diagnoses it
return true so the loud unhydratable-placement path diagnoses it
if destination is indoor:
return render center landblock Near-tier and ready

View file

@ -9,6 +9,7 @@
- `CObjectMaint::DestroyObjects @ 0x00508C30`
- `CObjectMaint::AddObjectToBeDestroyed @ 0x00508F70`
- `SmartBox::UseTime @ 0x00455410`
- `gmSmartBoxUI::UseTime @ 0x004D6E30`
The Sept 2013 named pseudo-C is the behavioral oracle. WorldBuilder has no
equivalent live-client teardown scheduler; its extracted mesh/cache owners are
@ -125,6 +126,37 @@ object maintenance, physics, landscape, game time, or ambient sound. UI/event
dispatch and the portal presentation continue. This is the retail basis for
Slice E's immediate old-generation quiesce.
## `gmSmartBoxUI::UseTime` portal wait presentation
The portal `CreatureMode` remains live while `SmartBox` is blocked. Its camera
continues one random roll segment at a time:
```text
if now >= rotationStart + rotationDuration:
currentAngle = rotationEndAngle
rotationStart = now
rotationDuration = RandomUniform(0.6, 1.8) seconds
rotationStartAngle = currentAngle
rotationEndAngle = RandomUniform(0, 360) degrees
ECM_UI.SendNotice_DisplayStringInfo(
channel = 0x1A,
text = "In Portal Space - Please Wait...")
else:
level = UIGlobals.GetAnimLevel(
(now - rotationStart) / rotationDuration)
currentAngle = Lerp(
rotationStartAngle,
rotationEndAngle,
level / 1024)
CreatureMode.SetCameraDirection_Degrees((0, currentAngle, 0))
```
The notice is a centered UI display string, not chat. Slice E's asynchronous
adaptation delays its first projection until the recorded five-second reveal
stall threshold, then repeats it on the same rotation-segment boundary while
the authored tunnel keeps animating.
## Acdream asynchronous adaptation
Retail performs each teardown synchronously and can synchronously block cell
@ -156,6 +188,12 @@ reveal only when the one destination-generation readiness state proves:
required Near scene ready
required composite textures ready
camera/player identity belongs to destination generation
if the portal reveal is still incomplete after five seconds:
keep the DAT-authored portal scene animating
display the centered retail wait notice
emit one generation-scoped diagnostic
do not materialize early
```
Release-later never means run-later: an old owner may retain memory until its