← 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 12:07:40 UTC
On this page

Asset System Overview

Asset brain · Engine Integration · Map Asset Integration · GfxWorld and Brush Models · XModels and Surfaces · SModels · CModels and Clipmaps · Materials, Techsets, and Glass · Lighting, Light Grids, and Shadows · Umbra and Culling · Animations · Transient Zones

Purpose and confidence boundary

This page is a broad index to the map-related asset families and their reviewed integration evidence. It identifies which function/type/pool links are supported, which links remain candidates, and where the current vault has no mapping. It is not a complete ZoneTool schema or a runtime trace.

  • Game-Test source: E:\1-game-test\1-game_test.exe, SHA-256 269D6137A465DA9D5F5DF68961000D683B9A868FDE5E7800743177C05D059E99.
  • Replay 1.20 executable: E:\IW8\Builds\1.20-replay\game_dx12_ship_replay.exe, SHA-256 68FB1CBCB2924182724004039DE55A4C50152BB6561803C4898B7930B38132F0.
  • Replay SQLite: E:\IW8\Builds\1.20-replay\game_dx12_ship_replay.exe.sqlite; its recorded program MD5 is 1C238FE327F2ECC3B0DB924C5B425439, not the executable hash.

An exact name can identify a function while its type meaning is unsettled; a type/pool table can identify an asset class while its stream layout is unknown; and parser code can establish reads without proving a live renderer/physics consumer. Keep those evidence layers distinct.

System route

For the evidence-backed cross-family graph, see Map Asset Integration.

XAssetHeader phase dispatch (Load / Preload / Postload / Mark)
  -> build-specific type case and pointer wrapper
  -> root loader/postloader and nested pointer/stream work
  -> registration callback / DB_AddXAsset / asset pool metadata
  -> zone-name and transient-zone selection/lifetime code
  -> native render, animation, or collision consumers

The full arrow chain is not verified for every asset. The GfxWorld transient-zone path is the best joined static example: Load_XAssetHeader → GfxWorld pointer/root → GfxWorldDraw pointer array → transient-zone pointer/root → Replay type-0x20 registration/pool and deferred-release callback. Even there, the chain combines callsites, type tables, and lifetime code; it does not prove a game ran the path. The central evidence and caveats are in Engine Integration and Transient Zones.

Cross-build type-index anchors

Asset family Game-Test source type/case Replay type/case Evidence and limitation
GfxWorld 0x1B 0x1F Load pointer/root and Load_GfxWorldAsset routes; do not copy numeric enum values or source layout.
GfxWorld transient zone 0x1C 0x20 (gfx_map_trzone) GfxWorld child consumer, pool name/size, registration argument, and deferred release align. Replay type 0x1C is TacGraph.
XModel 0x09 0x09 Matching phase dispatch and exact root routes; equal case is local to these two verified dispatchers, not a universal rule.
XModelSurfs 0x08 0x08 Pointer/helper route is mapped; Replay Postload pointer helper remains generic and pointee layout is open.
GlassWorld 0x15 0x19 Asset callback body and AddXAsset/PostAddXAsset flow align; Mark type mapping is held.
MaterialTechniqueSet 0x0E 0x12 (techset) Exact 46-byte handler and pool identity; adjacent Replay 0x0E is vertexshader, whose source/owner mapping remains q/held.
SModel placement, CModel/clipMap, Umbra Not assigned here Not assigned here Do not derive type IDs from neighboring cases, family names, DPVS, or collision child calls.

These are function/registration identity observations, not serialized structure layouts. Evidence includes the XAssetHeader phase crosswalk, GfxWorld type-index evidence, GfxWorld transient-zone type/pool analysis, GlassWorld handler review, and techset/vertex-shader owner resolution.

Family map

Family Source ↔ Replay anchors What is linked to registration or consumers Confidence / open boundary
GfxWorld Game-Test exact Load/Preload/Postload roots; Replay Load_GfxWorld ID 18182, Load_GfxWorldPtr ID 18189, Load_GfxWorldAsset ID 24711; Mark chain: ID 18268 Mark_GfxWorldPtr → root ID 18266 Mark_GfxWorld with child ID 18265 Mark_GfxPrecomputedSkyIllumination → asset leaf ID 24825 Mark_GfxWorldAsset. q_Postload_GfxWorld ID 18328 and pointer ID 18335. Replay ID 18181 q_Load_GfxVoxelTreeArray ↔ source array ID 7302; false imported Load_GfxVoxelTree label on ID 10689 was cleared to sub_1405425E0. Replay type 0x1F; root reaches mapped draw, DPVS, static-model, brush, lighting, transient, voxel-array and related render children. The pointer/root/asset-helper order is paired; root child identity is partly unresolved, and source PtrArray has no established Replay counterpart. Root PDATA is 691 bytes versus stored size 688. Strong static dispatch/root route; incomplete root schema and caller coverage. ID 18181 SQLite size 70 remains distinct from its 599-byte IDA/PDATA extent; source/Replay element strides differ. Mark immediates are build-local. See GfxWorld and Brush Models.
XModels / XModelSurfs Replay q roots: ID 20329 q_Load_XModel, 20368 q_Preload_XModel, 20357 q_Postload_XModel; Load_XModelSurfsPtr ID 20337 → Load_XModelSurfs ID 20336 → q_Load_XSurface ID 20339. Subdivision child ID 20342 q_Load_XSurfaceSubdivLevelArray ↔ source array PDB ID 24866. Mark phase: Replay ID 20351 Mark_XModelPtrArray ↔ source ID 25025, anchored by paired Mark_ScriptableDef (+0xAE) and Mark_WeaponAttachment (+0xC4/+0xF2) callers; Replay PDATA 176 B vs SQLite 172 B. XAssetHeader cases 9 (XModel) and 8 (surfaces); the XModelSurfs loop calls scalar XSurface; subdivision source parent calls a scalar child while Replay parent calls a counted array child. Replay subdivision count loop advances by target-local 0x238; source array wrapper uses 0x128. Names/roles remain q-qualified; source/Replay stride and child granularity differ. Replay ID20342 has 810-byte size across three PDATA fragments; body score is weak. XSurface caller coverage remains unresolved (source five direct callers; Replay export one while indegree says 81). No layout transfer; DObj/render chain remains open. See XModels and Surfaces and XModel Fastfile to DObj Flow.
SModels ClipMap static-collision source PDB list/model IDs 21538/21536 → Replay q IDs 20052/20051 under Load_clipMap_t ID 20057; collision-tile lifecycle q IDs 39071/39074/39075/39097. Render: Replay ID 50616 q_R_AddAllStaticModelSurfacesSunShadow ↔ source PDB ID 87368, anchored by callback string/pointer registration; child ID 50625 q_R_EmitSingleSModelSurf. ID 50616 has transformed helper flow; its chained PDATA totals 288 bytes vs SQLite size 285. IDs 50617 (camera-only source candidate conflicts with SunShadow parent) and 50614 remain held. GfxWorld DPVS visibility metadata remains separate. Do not merge collision, visibility, and placement/draw data. q retained for body/prototype/helper-decomposition differences; the full placement/render representation remains open. See SModels and CModels and Clipmaps.
CModels / clipMaps Source Load_clipMap_t ID 21575 and Replay Load_clipMap_t ID 20057; child list/model candidates above. StaticModels collision-tile source PDB anchors map provisionally to Replay q IDs 39071/39074/39075/39097. Source Postload list PDB ID 22263 has no resolved separate Replay child. Replay DB_ReleaseClipMap ID 24635 calls stored WorldCollision_RemoveClipMap ID 40587; separate StaticModels child routes cover shape creation/destruction and zone-index cleanup. Load parser chain supported; collision-tile names are qualified, not layout or ABI proof; postload and runtime field semantics held. No direct path yet joins serialized PhysicsAsset references to a runtime consumer. See CModels and Clipmaps.
Materials / techsets Replay Load chain IDs 20036 Load_MaterialTechniqueSetPtr → 20035 Load_MaterialTechniqueSet → 20034 Load_MaterialTechniquePtr → 20033 Load_MaterialTechnique, plus asset ID 24731. Mark leaves: 20092 Mark_MaterialTechniqueSetPtr, 24844 Mark_MaterialTechniqueSetAsset, 24824 Mark_GfxImageAsset, 24822 Mark_GfxDecalVolumeMask. Source/Replay parent-child routes support these function roles; source/Replay helper immediates are build-local (0x0E/0x12, 0x0F/0x13, 0x6C/0x70 as applicable). Names are reviewed/applied; caller coverage, payload, and dependency traversal remain open. Type values, ABI, and layout do not transfer. Replay q_Mark_Material remains separate; ID 20094 stays generic. See Materials, Techsets, and Glass.
GlassWorld Source/Replay Load_GlassWorldAsset; Replay ID 24713 at 0xF61410, 46 bytes. Handler body and AddXAsset/PostAddXAsset flow match; source type 0x15, Replay 0x19. Strong static handler correspondence; Mark mapping held; payload layout not established.
Lighting / light grids / shadows Replay ID 18172 Load_GfxLightAABB at 0xD92480 ↔ exact source PDB; q loader ID 18170 q_Load_GfxGpuLightGridTransientData; q lightmap/light-grid atlas pointer routes. DPVS static/dynamic/planes IDs 18185/18183/18184. Load_GfxWorld calls the light-AABB child between shadow geometry and DPVS static in both builds; sizes are 185 Replay / 192 source bytes. One child loader identity is confirmed; array children, full payload, field offsets, and layout remain build-specific or unresolved. See GfxWorld and Brush Models and Lighting, Light Grids, and Shadows.
Brush models Replay Load_GfxBrushModelArray ID 18923 at 0xDD1750; source and Replay reports identify two parent routes. GfxWorld and AddonMapEnts parent paths reach the array loader; observed stride is 96 bytes. Strong static loader role; stride does not alone prove serialized ABI. See GfxWorld and Brush Models.
Umbra / culling Replay ID 563 q_s_workerCmdUmbraCullGlass_Init ↔ source static initializer ID 57427 for s_workerCmdUmbraCullGlass; Replay task string and named ShouldWait callback support a provisional task/role match. ID 36143 is a shared registration helper; second callback sub_14180E3C0 remains unresolved. DPVS visibility data under GfxWorld is adjacent, not an Umbra mapping. No Umbra asset root or culling implementation is resolved. The initializer name does not establish callback identity, ABI, enum, layout, or serialized asset schema. R_Umbra_SetAllVisible remains held. See Umbra and Culling.
Animations Source PDB Load_XAnimDynamicBoneNoiseProperties RVA 0x62F6F0 → Replay q ID 18947 at 0xDD2B20. Reached within XAnim dynamic-bone property loading; does not establish the runtime suit animation helpers as loader/schema functions. Strong body/parent role with extent caveat (Replay .pdata 197 bytes vs SQLite/source size 190); serialized child schema and runtime consumers remain open. See Animations.
Transient zones Load roots/ptr: Replay IDs 18190/18191. Postload roots/ptr: IDs 19645 Postload_GfxWorldTransientZone and 19646 Postload_GfxWorldTransientZonePtr; paired source PDB identities. Neighbor parser child: ID 20405 Load_TransientSets under q_Load_TransientInfo, XAssetHeader case source 0x3F / Replay 0x43. Replay type 0x20 pool gfx_map_trzone, size 0x148; type-0x20 release slot reaches deferred-zone callback ID 24649. Postload case 0x1C is paired dispatch evidence; TransientSets is a separate parser path. Postload names and TransientSets name are statically supported; caller coverage and layouts remain build-specific. Do not merge case/type values or identify TransientSets with the GfxWorld type-0x20 asset. No live activation trace. See Transient Zones.

Directly supported static links in the reviewed corpus:

  • XAssetHeader phase dispatch → specific pointer wrapper where the case and call target were verified by bytes.
  • GfxWorld pointer → asset callback/root; GfxWorld root → mapped children; GfxWorldDraw → the 0x600 transient-zone pointer array → transient-zone root.
  • DB_ReleaseXAsset Replay type 0x20 → deferred-zone release callback.
  • DB_ReleaseClipMap → stored Replay world-collision cleanup row; the source-name identity for that cleanup row remains uncertain.
  • XModel pointer/surface loader calls and selected Map/World parent routes documented in XModel Fastfile to DObj Flow.

Still hypotheses or gaps:

  • Converting source PDB UDT members, source pointer sentinels, or source numeric type IDs into Replay ABI or serialized file offsets.
  • Assuming a handler with a matching name is the corresponding registration slot when pool/type metadata conflicts.
  • Joining CModel static-collision child parsing directly to runtime WorldCollision/PhysicsAsset consumption.
  • Identifying actual SModel placement data from collision records or DPVS visibility arrays.
  • Joining XModelSurfs loader output to a specific Replay DObj/render submission function.
  • Treating a static function/table route as proof of live loading, zone activation, rendering, animation, or collision.

Start with Engine Integration for system ordering and evidence rules. The asset-family pages above link the exact source/Replay reports and target rows for each domain. For current symbol methodology and review history, see the mapping guide, symbol register, and handler conflict review.

StaticModels collision-tile proposals and their q-prefixed status are documented in CModels and Clipmaps and Transient Zones; see the linked reports/manifests there for exact paired routes and extent caveats.