← 1.20 ReplayEntropic Dev

REPLAY 1.20 · RESEARCH NOTES

The asset brain

A linked map of loading, rendering, and collision evidence.

34 notes · Latest source update
SOURCE NOTE · Updated 2026-09-28 06:10:21 UTC
On this page

Transient Zones

Asset brain · Engine Integration · GfxWorld and Brush Models · Lighting, Light Grids, and Shadows · CModels and Clipmaps

Status

The Replay GfxWorld transient-zone Load and Postload roots/pointer wrappers have current unprefixed names, supported by source/Replay call routes; the Load/register/pool route uses source type 0x1C and Replay type 0x20 (gfx_map_trzone). The paired Postload_XAssetHeader case 0x1C is dispatch evidence within both builds and is not a transferred type value. Replay type 0x1C belongs to a separate TacGraph route. Serialized layout, activation policy, complete caller coverage, and live runtime behavior remain separate questions.

Game-Test source evidence

Exact source PDB Load_GfxWorldTransientZone starts at RVA 0x4B7970, PDB/.pdata extent 546 bytes. Load_GfxWorldTransientZonePtr starts at 0x4B7F30, extent 246 bytes. The source Load_GfxWorld → Load_GfxWorldDraw chain walks 0x600 pointers at an 8-byte stride through the pointer wrapper, which reaches the root and registers source type 0x1C.

Replay 1.20 evidence

The live canonical Replay SQLite rows are:

  • ID 18190 Load_GfxWorldTransientZone, RVA 0xD96E90, size 539; .pdata covers 539 bytes, while source PDB/.pdata is 546 bytes. Its child call order is recorded in the root report.
  • ID 18191 Load_GfxWorldTransientZonePtr, RVA 0xD970B0, size 239; target .pdata and source/Replay call flow are recorded in the pointer-wrapper report.
  • ID 18186 Load_GfxWorldDraw loops through 0x600 eight-byte pointers and calls ID 18191. The nested root call is ID 18190. Parent/child instructions and type-context references are documented in the type-20 consumer audit.
  • ID 18190 allocates a 0x148-byte Replay root. Pool metadata independently identifies Replay type 0x20 as gfx_map_trzone, element size 0x148; release dispatch for type 0x20 reaches ID 24649 and a deferred-zone queue. Pool element size is not a stream record size.
  • ID 18189 Load_GfxWorldPtr and ID 24711 Load_GfxWorldAsset are also current unprefixed Replay names. The GfxWorld asset callback type immediate is 0x1F in Replay versus 0x1B in Game-Test; see the GfxWorld pointer report and asset callback report.

The Replay type index is a registry identity, not a serialized layout declaration. Replay type 0x1C is tacgraph with a 0x18-byte pool item. A separate branch at IDs 19575/19576 has the stored child-helper label Load_GfxWorldTransientZoneAsset, but that same-name label does not override the type table: that branch registers type 0x1C, while the independently evidenced GfxWorld transient-zone pool is type 0x20. Keep ID 24770's stored label and type-0x1C route distinct from the type-0x20 GfxWorld transient-zone family.

The root was first named with q_ and later promoted in a guarded rename report after exact source-body, parent, child-order, and boundary review. The pointer wrapper was also promoted. Preserve the historical q-prefix reports as evidence of the review path; the current database names were rechecked read-only.

Postload and other phases

Replay IDs 19645 Postload_GfxWorldTransientZone (RVA 0xDF8BC0, size 253) and 19646 Postload_GfxWorldTransientZonePtr (RVA 0xDF8CC0, size 234) now have exact source PDB identities: source IDs 8831/8833 at RVAs 0x540040/0x540390, with extents 577/264 bytes. Replay prototypes remain void __fastcall sub_140DF8BC0(int a1) and __int64 __fastcall sub_140DF8CC0(int a1); sizes and prototypes were preserved. In both builds the Postload_XAssetHeader dispatcher reaches the pointer wrapper at case 0x1C; the wrapper calls the root with stream-start zero, then the named Load_GfxWorldTransientZoneAsset helper. This case value is observed dispatch evidence, not an enum/type transfer. Replay factors per-element processing through ID 19644; its root reads a count at +0x10 and advances count * 0x38, but these offsets/strides remain build-local. The source has Array/PtrStream/Draw caller paths that are not direct Replay callers in the indexed target census, so complete phase-call coverage is still unresolved. See the Postload reassessment and applied-name report and manifest.

Preload and Mark have their own dispatch/global context. The type-20 audit records matching Load/Preload/Postload type-context paths and a separate Mark case, but also warns that dispatcher ordinal equality and prior imported wrapper labels are not independent name evidence. Keep each phase separate.

StreamingInfo and TransientInfo path

StreamingInfo is a neighboring asset/parser route that reaches a TransientInfo child. It belongs in the zone-loading picture, but the current cross-reference does not prove that this object is the GfxWorld gfx_map_trzone asset described above.

Game-Test Load_XAssetHeader case 0x3F
  -> Load_StreamingInfoPtr (source PDB ID 25966)
       -> Load_StreamingInfo (source PDB ID 25964)
            -> Load_AlwaysloadedFlagSet
            -> Load_TransientInfo (source PDB ID 25988)
       -> Load_StreamingInfoAsset (source registration helper)

Replay Load_XAssetHeader case 0x43
  -> q_Load_StreamingInfoPtr (ID 20402, RVA 0xE30A80)
       -> q_Load_StreamingInfo (ID 20401, RVA 0xE30980)
            -> q_Load_AlwaysloadedFlagSet (ID 20385)
            -> q_Load_TransientInfo (ID 20404, RVA 0xE30CA0)
       -> target asset-finalization helper (identity not resolved here)

Replay Preload_XAssetHeader case 0x43
  -> q_Preload_StreamingInfoPtr (ID 20431, RVA 0xE32520)
       -> shared q_Load_StreamingInfo parser (ID 20401)

The exact Replay row names and sizes were rechecked read-only: ID 20402 q_Load_StreamingInfoPtr size 239; ID 20401 q_Load_StreamingInfo size 243; ID 20404 q_Load_TransientInfo size 1028; and ID 20431 q_Preload_StreamingInfoPtr size 236. Their source PDB candidates are exact rows: Load_StreamingInfoPtr ID 25966/RVA 0x8EDBA0, Load_StreamingInfo ID 25964/RVA 0x8ED840, Load_TransientInfo ID 25988/RVA 0x8EF080, and Preload_StreamingInfoPtr ID 26455/RVA 0x904A60.

The nested TransientSets parser is now paired separately within that StreamingInfo route: source exact PDB ID 25997 Load_TransientSets (RVA 0x8EFAC0, 190 bytes) maps to Replay ID 20405 at RVA 0xE31160 (183 bytes). q_Load_TransientInfo ID 20404 calls it at parent +0x40, matching the source Load_TransientInfo callsite at the same relative offset. The child routes through AllocLoad_XString then Load_XStringArray in the same order. Replay keeps its existing prototype __int64 __fastcall sub_140E31160(__int64 a1); source and Replay argument typing differs. This parser identity does not establish shared field offsets, serialized layout, or ABI, and it does not make TransientSets the GfxWorld type-0x20 asset. Evidence: TransientSets loader report and name/readback manifest.

What is supported

  • Game-Test Load_XAssetHeader case 0x3F calls source Load_StreamingInfoPtr; Replay Load_XAssetHeader ID 18573 calls target ID 20402 at 0xDBE764 under case 0x43.
  • Game-Test Preload_XAssetHeader case 0x3F calls source Preload_StreamingInfoPtr; Replay Preload_XAssetHeader ID 18730 calls target ID 20431 under case 0x43.
  • The source Load parser calls Load_AlwaysloadedFlagSet and Load_TransientInfo. Replay ID 20401 calls q-labeled ID 20385 and q-labeled ID 20404 in the same broad child order.
  • Replay ID 20401 has both Load-wrapper ID 20402 and Preload-wrapper ID 20431 as direct callers. Game-Test has distinct Load and Preload parser methods, so Replay's shared parser remains a phase-sharing/folding uncertainty. The q prefix is retained for that reason and the case-number conflict.
  • ID 20404's source/Replay mnemonic sequence favors Load_TransientInfo over its nearby Preload alternative, but its SQLite scalar size 1028 undercounts its 1214-byte chained Replay .pdata extent; source PDB and chained .pdata total 1226 bytes.

Boundary from GfxWorld transient zones

The StreamingInfo / TransientInfo chain above is a source/Replay parser candidate tied to XAssetHeader cases 0x3F/0x43. The separate GfxWorld transient-zone route is source type 0x1C → Replay type 0x20 (gfx_map_trzone) and flows through GfxWorld's 0x600 pointer array to IDs 18191/18190. Do not identify StreamingInfo or TransientInfo with the GfxWorld transient-zone asset, transfer either route's numeric type, or assume the parser directly activates the type-0x20 pool. A direct data/call edge joining these families has not been established by these reports.

Function-name confidence is qualified static identity for IDs 20402 and 20431 as pointer-wrapper candidates, q-candidate for the shared ID 20401 Load parser role and ID 20404 TransientInfo role, and confirmed static identity for ID 20405 Load_TransientSets. The connection from the StreamingInfo/TransientInfo parser family to the GfxWorld type-0x20 runtime lifecycle remains unresolved. No struct layout, serialized format, ABI equivalence, or live zone activation claim is made.

Evidence: Load StreamingInfo pointer report, TransientInfo parser report, Load/Preload phase-route report, their Load pointer manifest, TransientInfo manifest, and phase-route manifest.

StaticModels collision-shape unload is a separate route

Replay ID 39097 q_StaticModels_TransientZoneUnloadingMain reaches ID 39075 q_StaticModels_DestroyClipmapShapes during a zone-index-shaped collision cleanup path. The source PDB anchors are StaticModels_TransientZoneUnloadingMain and StaticModels_DestroyClipmapShapes; the latter also sits on the paired DB_ReleaseClipMap → StaticModels_RemoveClipMap route. These mappings describe a separate StaticModels/clipMap collision teardown family. The current evidence does not connect it to the GfxWorld type-0x20 deferred-release callback or prove that both systems share a zone object or lifetime policy. See the detailed StaticModels route report, destroy route report, and their apply manifests / destroy manifest.

Integration and safe use

The evidence supports a source-to-Replay role for the GfxWorld transient-zone pointer family and a Replay-specific type-0x20 pool/lifetime route. It does not show runtime activation from a named zone, nor prove the contents of GfxWorldTransientZone serialize identically. The source root accesses +0xF0 where Replay accesses +0x138; globals and helpers relocate. These are per-build code observations, not transferable field offsets.

Treat these as separate validation layers:

  1. Function-name identity: PDB/body/callsite and .pdata evidence for the loader rows.
  2. Type identity: Replay type tables, pool name/size, registration argument, and GfxWorld pointer-array consumer.
  3. Serialized stream: root field/child sequence, alignment and pointer-fixup operations in this build.
  4. Runtime lifecycle: type-indexed release callback and deferred-zone queue.
  5. Live behavior: not established by these static artifacts.

Open questions

  • Which Replay root fields correspond to source fields after the +0xF0 versus +0x138 access difference?
  • What runtime request or activation path selects a gfx_map_trzone by zone name?
  • Can Replay Array/PtrStream/Draw Postload call routes be mapped separately, given the source has additional callers absent from the current direct-target census?
  • How do type-0x20 deferred releases interact with clipMap collision transient mode? The separate collision/transient evidence is not yet a joined route.

Evidence

  • GfxWorld transient-zone root report
  • GfxWorld transient-zone root rename report
  • GfxWorld transient-zone pointer report
  • Paired root child-route manifest
  • Type-0x20 pool-name and release-consumer audit
  • Type-0x1C/type-0x20 registration comparison
  • Postload GfxWorld transient-zone root
  • Transient GPU light-grid loader