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, RVA0xD96E90, size 539;.pdatacovers 539 bytes, while source PDB/.pdatais 546 bytes. Its child call order is recorded in the root report. - ID 18191
Load_GfxWorldTransientZonePtr, RVA0xD970B0, size 239; target.pdataand source/Replay call flow are recorded in the pointer-wrapper report. - ID 18186
Load_GfxWorldDrawloops through0x600eight-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 type0x20asgfx_map_trzone, element size0x148; release dispatch for type0x20reaches ID 24649 and a deferred-zone queue. Pool element size is not a stream record size. - ID 18189
Load_GfxWorldPtrand ID 24711Load_GfxWorldAssetare also current unprefixed Replay names. The GfxWorld asset callback type immediate is0x1Fin Replay versus0x1Bin 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
0x3Fcalls sourceLoad_StreamingInfoPtr; Replay Load_XAssetHeader ID 18573 calls target ID 20402 at0xDBE764under case0x43. - Game-Test Preload_XAssetHeader case
0x3Fcalls sourcePreload_StreamingInfoPtr; Replay Preload_XAssetHeader ID 18730 calls target ID 20431 under case0x43. - The source Load parser calls
Load_AlwaysloadedFlagSetandLoad_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_TransientInfoover its nearby Preload alternative, but its SQLite scalar size 1028 undercounts its 1214-byte chained Replay.pdataextent; source PDB and chained.pdatatotal 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:
- Function-name identity: PDB/body/callsite and
.pdataevidence for the loader rows. - Type identity: Replay type tables, pool name/size, registration argument, and GfxWorld pointer-array consumer.
- Serialized stream: root field/child sequence, alignment and pointer-fixup operations in this build.
- Runtime lifecycle: type-indexed release callback and deferred-zone queue.
- Live behavior: not established by these static artifacts.
Open questions
- Which Replay root fields correspond to source fields after the
+0xF0versus+0x138access difference? - What runtime request or activation path selects a
gfx_map_trzoneby 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