← 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 13:27:08 UTC
On this page

SModels

Asset brain · Engine Integration · CModels and Clipmaps

Status

Static model collision subfamily: q-prefixed loader candidates. Render-side evidence now includes the registered SunShadow callback root q_R_AddAllStaticModelSurfacesSunShadow (ID 50616) and child q_R_EmitSingleSModelSurf (ID 50625); IDs 50617 and 50614 remain held. Full SModel placement/render representation remains an evidence gap. Do not treat collision-record candidates as proof of the renderer's SModel surface layout.

Game-Test source evidence

The source PDB-backed reports identify Load_StaticModelCollisionModelList and Load_StaticModelCollisionModel beneath a named Load_clipMap_t route. Source starts are RVA 0x7FBC30 and 0x7FB950; reported source extents are 187 and 252 bytes. The list loop processes 40-byte records and reaches the child loader. See list report and child report.

Replay 1.20 evidence

The corresponding proposals point to Replay RVAs 0xE0E3C0 (list) and 0xE0E2C0 (child). Replay SQLite sizes are 180 and 245 bytes; the child report records a matching 245-byte .pdata extent. The child reads a 0x28-byte record, follows a string and collision/model pointer helpers, and conditionally handles 0x1C-byte instances. The two candidate names retain q_: the evidence is a single root chain and parent/child independence is limited.

Integration and safe use

This evidence places static-model collision records under clipMap loading. It does not identify the complete render-side SModel placement table or prove that observed record widths match the serialized fastfile ABI. Keep collision and rendering structures separate until independently joined.

Collision-tile runtime lifecycle and the SModel render boundary

Separate Replay rows now map to the StaticModels collision-tile create/shape and cleanup routines: ID 39071 q_StaticModels_AddCollisionTile, ID 39074 q_StaticModels_CreateCollisionTileShapes, ID 39075 q_StaticModels_DestroyClipmapShapes, and ID 39097 q_StaticModels_TransientZoneUnloadingMain. The exact Game-Test PDB anchors and paired parent routes are summarized on CModels and Clipmaps. This is collision/runtime lifecycle evidence; it does not identify the renderer's SModel placement records, visibility data, or serialized CollisionTile layout. All four Replay labels retain q_ because body extents, helper structure, ABI/prototype, or source/Replay similarity differ as detailed in the linked reports.

Render-side single-surface emission candidate

Replay ID 50625 at RVA 0x18D66E0 is now q_R_EmitSingleSModelSurf, paired provisionally with exact Game-Test PDB symbol ID 87382 R_EmitSingleSModelSurf at RVA 0x2204090. The source signature is static void R_EmitSingleSModelSurf(GfxSModelSurfBuildList *, GfxSModelSurfHeader, GfxSModelSurfVisDataRef); Replay retains unsigned __int64 __fastcall sub_1418D66E0(__int64 a1, __int64 a2, int a3). Source PDB/.pdata extent is 209 bytes; Replay SQLite size and exact .pdata extent are 185 bytes. The matched parent R_EmitDelayedSModelSurfsRemaining calls the paired child second inside a repeated surf-item loop in both builds. At those callsites, both prepare three register arguments from a list pointer and per-record data. These are callsite similarities only; source and Replay argument types/widths differ and the observed +4/+8 inputs do not define a shared record layout.

The parent bodies have high normalized instruction similarity, but the child body comparison is weaker (64 source versus 56 Replay instructions; reported unigram Jaccard 0.714, trigram 0.222). Source has six direct callsites across five named rendering parents; Replay ID 50625 has three indexed callers, only one paired in this pass. The source helper directly calls finish-emission and warning helpers, while the exported Replay callgraph shows no direct child calls. Replay may consolidate/in-line work, but that is unproven. The exact descriptive name therefore remains q-prefixed; the separate first-child sort candidate ID 50640 is not renamed by this evidence.

This is a render-side surface-emission helper candidate, distinct from the StaticModels collision-tile lifecycle above. It does not locate the full SModel placement table, establish a serialized fastfile record, or transfer source struct layout to Replay.

Evidence: single-surface emission cross-reference, proposal rows, argument/callsite observation, and apply manifest/readback.

Open questions

  • Find the Replay consumer and registration/root for the actual SModel placement or draw list.
  • Resolve held render children ID 50617 and ID 50614 against the complete Replay SunShadow/camera caller routes and chained PDATA ownership.
  • Establish serialized stride from stream reads, not only structure-looking accesses.

Evidence

  • Static model collision list
  • Static model collision child

DPVS SModel visibility is adjacent evidence, not placement data

The paired Load_GfxWorldDpvsStatic crosswalk links the source PDB's smodelVisDataCount at +0x00 and 33-pointer smodelVisData array at +0x18 to Replay accesses at those offsets. It also observes sortedSmodelIndices at +0x258, whose source PDB type is unsigned int * while the Replay schema record says unsigned __int16 *. See GfxWorld and Brush Models. This describes visibility metadata only; it does not identify SModel placement records, draw surfaces, or their serialized stride.

GfxWorld static-model Postload route

The paired source/Replay Postload_GfxWorld roots call Postload_GfxWorldStaticModels between the world-surfaces parser and GfxWorldDraw. Replay ID 20354/RVA 0xE2BE20 is named q_Postload_GfxWorldStaticModels; the source exact PDB function is at RVA 0x8BDEA0. Its Replay body reaches Postload_XModelPtr and wrapped-buffer/material helpers, which is useful evidence for the static-world model integration path. Source current-object displacement +0x170 differs from Replay +0x150; do not use that offset as a cross-build SModel layout. The q name remains because Replay Array/Stream wrapper routes are unresolved. See GfxWorld and Brush Models for boundaries and linked report/manifests.

Registered SunShadow callback root and held children

Replay ID 50616 at RVA 0x18D4F10 is now q_R_AddAllStaticModelSurfacesSunShadow, paired to exact Game-Test source PDB/Atlas ID 87368, R_AddAllStaticModelSurfacesSunShadow at RVA 0x22006B0 (434 bytes; source signature void __cdecl R_AddAllStaticModelSurfacesSunShadow(void const *)). The Replay callback-registration wrapper ID 442 at RVA 0x343570 loads the string AddStaticModelSunShadow, places ID 50616's exact function pointer in R9, then calls the registration helper. This registration pointer/string plus the source callback's one-context-argument role anchors the cross-reference.

The target's helper order is transformed: ID 50616 calls ID 50636, then ID 50617 within a per-model loop, then ID 50614 for loop values 0, 1, and 2; ID 50614 calls the named R_EmitDelayedSModelSurfsRemaining ID 50620. Source ID 87368 initializes SModel draw data and calls the cached-SunShadow and range-SunShadow helpers. The callback role is supported, but these bodies/helper routes do not match one-to-one; retain q_. Replay SQLite size 285 is preserved. Its five chained PDATA ranges total 288 bytes ([0x18D4F10,0x18D4F5A), [0x18D4F5A,0x18D4F7E), [0x18D4F7E,0x18D4FED), [0x18D4FED,0x18D5000), [0x18D5000,0x18D5030)). The prototype _BOOL8 __fastcall sub_1418D4F10(__int64 *a1) is preserved; it differs from the source void signature.

Replay ID 50617 remains generic/held. Its sort-then-single-emitter children resemble source R_EmitDelayedSModelSurfsUpToMaterial, but that source helper's indexed callers are camera-only. Its immediate Replay parent is instead the registered SunShadow callback ID 50616, so the ownership evidence contradicts the earlier candidate. ID 50614 also remains held: it is called three times by ID 50616 and reaches ID 50620, but the source range/cached/spot-shadow paths all use R_EmitDelayedSModelSurfsRemaining, leaving no unique source identity. Do not promote either child from call order alone.

Evidence: source/Replay parent-chain review, coordinator cross-reference report, and applied-name manifest.

GfxWorld StaticModels byte-array helper

The paired Load_GfxWorldStaticModels parent reaches Replay ID 18989 Load_uint8_tArray in its first byte-array route; the distinct later Load_byteArray call is a separate helper/global. The source/Replay parents pass a count loaded from their own current-object +0x10, but that equal offset is not a cross-build field identity. The helper body itself only forwards the byte count and stream selector to build-local Load_Stream. This is adjacent GfxWorld static-model parser evidence, not proof of SModel record schema or render placement. See GfxWorld and Brush Models and the cross-reference report with its applied manifest.

Replay ID 18924 Load_GfxIndexBuffer participates in paired Load_StMesh and Load_StDiskTerrainSurface routes; a third paired parent is q_Load_GfxWorldDrawVerts. Each calls the 18-byte stream wrapper before a distinct index-buffer resource operation (source PDB Load_IndexBuffer; Replay target ID 50660). Source passes 8 stream bytes and Replay passes 0x20; these are build-local consumed byte counts. This is adjacent mesh/render-path evidence only: the reports do not identify this as the serialized SModel placement array or prove how it maps to SModel draw records. Source Array/Stream wrapper callers lack corresponding Replay coverage. See GfxWorld and Brush Models and the cross-reference plus size/caller follow-up.