← 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 16:58:41 UTC
On this page

CModel and clipMap collision records

Asset format index · Detailed clipMap evidence · Map integration

Replay 1.20 layout scope

Layout and serialization statements on this page refer only to Replay 1.20 unless explicitly labeled as Game-Test cross-reference provenance. Source names help identify analogous functions; source UDT sizes, offsets, strides, and dispatch values are not Replay layout evidence.

Evidence status

Replay static-model collision parsing is partially observed. It does not establish the full Replay CModel/clipMap layout or a complete parser-to-physics runtime path. Game-Test function identities remain cross-reference provenance; its format notes are kept under Game-Test Assets.

Observed format facts

Replay Load_clipMap_t reaches the static-model collision list parser. The Replay list path processes a 24-byte record; a nested model array is traversed with an observed 40-byte per-model loop step. The child route reads a script-string name and pointer-like values handled as PhysicsAssetPtr and XModelDetailCollisionPtr, with an optional 0x1C-byte collision-instance path. Replay function extents are 180 bytes for the list and 245 bytes for the child; these are code extents, not record sizes. Source names in linked reports are cross-reference provenance only.

Replay has separate StaticModels collision-tile add/create-shapes/destroy/unload routines, and DB_ReleaseClipMap calls the stored WorldCollision_RemoveClipMap row. These are distinct runtime/lifetime observations. Existing evidence does not join the parsed collision records to those runtime objects. The cleanup source label remains overload-ambiguous.

Replay ID 35229 CM_BrushModelIsValid at RVA 0x12959E0 is a 17-byte leaf that compares its input index against a 32-bit brush-model count at Replay global-relative offset +0x158; paired Replay CM_GetBrushModelCount reads that same per-build value. SQLite records the argument role as brushModelIndex; the source signature gives an unnamed unsigned int, so this is a role label rather than a transferred source parameter name. These functions support a bound-check role, not a portable struct field or CModel layout. The Game-Test exact-name leaf is cross-reference provenance only; the two builds have distinct global RVAs.

Replay Scriptable callers

Three Replay 1.20 Scriptable handlers call the validity leaf. Client ID 37106 q_ScriptableCl_RunStateEventCollision at RVA 0x12FAB90 calls it at 0x12FAC5E and 0x12FADE4, passing the event model index read from [rbx+0x14]. Server ID 37162 q_ScriptableSv_RunStateEventCollision at RVA 0x1303660 calls it at 0x1303762 and 0x130378E using the event model index at [rbx+0x14]. Source has a third validity/getter route that Replay does not expose, so the server handler keeps q_. ID 37322 q_ScriptableSv_PrecacheAssetEventDef at RVA 0x13106A0 calls the leaf at 0x13108F8 with the collmap event index read from [rdx+0x2C]. These call routes describe Replay behavior and do not define CModel or Scriptable serialized records.

SQLite also records source-backed argument role candidates for ID 37162: eventParams at entry RCX and collision at entry RDX, plus scriptableIndex for the Replay local at [rbp-0x8C]. The Replay prototype is unchanged; these names do not establish a shared field offset or structure layout. See the argument/local annotation manifest.

For ID 37162, Replay .pdata chains the collision handler to [0x1303660,0x1303DF4) (1,940 bytes), while SQLite stores a 634-byte function size. For ID 37322, .pdata chains the event-dispatch code to [0x13106A0,0x13109AB) (779 bytes), while SQLite stores a 393-byte function size. Keep these measurements separate; do not adjust stored sizes from .pdata alone. The observed 0xB0 event-array traversal stride in ID 37322 is a Replay-local code observation, not a confirmed fastfile record size.

Format boundary

Do not treat the 0x18/24-byte list operation, 0x28/40-byte model step, or optional 0x1C instance operation as a complete Replay record definition. No PhysicsAsset field layout, CollisionTile layout, serialized CModel ABI, or complete world-collision lifecycle has been verified. Do not import source type sizes or offsets into Replay.

Local evidence

  • Static-model collision list report
  • Static-model collision child report
  • Collision-tile shape builder
  • ClipMap cleanup evidence
  • Brush-model validity leaf review, applied manifest, and applied CSV
  • Scriptable brush-validity caller review, Replay unwind-boundary review, client RunState manifest, and precache manifest
  • Server RunState adjudication and guarded SQLite application manifest
  • Argument/local annotation report and manifest
  • Brush-index argument observation manifest