Models (.model)
A .model asset (8,780 in the install) is a DAT1 container with the type magic 0x6AE15C79.
All 8,780 are LZ4-compressed with a zero wrapper tail. Observed Five have no geometry sections (portal, cine_traincrash_rearrooffire_spawner,
tb_testbldg_globe_fountain, test_trash_can_breakable_stump, empty_weapon); the other 8,775 all have the vertex, index, mesh, look, UV and
material sections below. Observed The geometry is +Y up. Observed
Numbers on this page are from a recorded census of the PC build 3373500; the install is no longer available. Observed
Sections
Section titled “Sections”| Tag | Name | Size | Content | Confidence |
|---|---|---|---|---|
283D0383 |
Model Built | 72 B | bounds and the vertex quantisation | Observed |
A98BE69B |
vertices | 16 B each | packed position, normal and tangent | Observed |
0859863D |
indices | u16 |
plain 16-bit indices, no delta coding | Observed |
78D9CBDE |
meshes | 64 B each | one record per submesh | Observed |
06EB7EFC |
look | 16 B | four LODs, each (first mesh, mesh count) | Observed |
16F3BA18 |
UV0 | 4 B per vertex | half-float u, v | Observed |
3250BB80 |
materials | 32 B each | material path and name offsets | Observed |
5CBA9DE9 |
vertex colour | in 1,425 models | Observed | |
DCA379A2 |
skin data | in 3,470 models | Observed |
Model Built (283D0383, 72 bytes)
Section titled “Model Built (283D0383, 72 bytes)”Little-endian; floats are indexed from 0 in the census.
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 12 | f32[3] | bounds centre | Observed | |
| 0xC | 4 | f32 | bounding sphere radius | Observed | |
| 0x10 | 12 | f32[3] | box half-extents | Observed | the box is centre ± half-extents |
| 0x1C | 4 | u32 | quantisation word | Observed | the low nibble N gives the position scale 2^−N; bits 4 to 15 take only the values 0, 16, 32, 48 and are unexplained |
| 0x20 | 4 | f32 | unknown | Unknown | |
| 0x24 | 12 | f32[3] | LOD switch distances | Inferred | 15, 30, 110 in 6,335 models |
| 0x30 | 12 | f32[3] | unknown | Unknown | |
| 0x3C | 4 | f32 | unknown | Unknown | 2 in almost every model |
| 0x40 | 4 | f32 | unknown | Unknown | 8 in almost every model |
| 0x44 | 4 | u32 | unknown | Unknown |
The position scale is 2^−(word & 0xF) with no offset. Observed Evidence: the decoded minimum and maximum equal the stored box within two
quanta in all 5,305 static models (and in 1,078 of 3,470 skinned ones; the other 2,392 skinned models exceed their box); 1x1_plane (nibble 12)
decodes to ±0.5 and its y of 41 to 0.01001 equal to the built centre; seafloor_8x8 (nibble 12) to ±4.005 and seafloor_96x96 (nibble 9) to ±48.01
equal their half-extents (a fixed 1/4096 would give 6.0 for the latter). Observed Nibble distribution: 12 → 7,603 models, 8 → 516, 11 → 366, 10 → 193,
9 → 62, 7 → 22, 5 → 13, 6 → 5. Observed
Vertices (A98BE69B, 16 bytes)
Section titled “Vertices (A98BE69B, 16 bytes)”| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 6 | i16[3] | position | Observed | × 2^−N, no offset |
| 0x6 | 2 | i16 | w | Observed | ±32767 in most models; possibly a bitangent sign |
| 0x8 | 4 | u32 | packed normal | Observed | the plane's word 0x200FFE00 decodes to (0, 1, 0) with the ALERT decoder |
| 0xC | 4 | u32 | tangent | Unknown | probably a packed tangent |
The layout is the same as ALERT’s Sunset Overdrive branch. Sourced · ALERT Whether the normals are unit length over all vertices, and the vertex-colour
format (probably a u32 per vertex), are not checked. Unknown
Meshes (78D9CBDE, 64 bytes)
Section titled “Meshes (78D9CBDE, 64 bytes)”| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 16 | f32[4] | bounding sphere | Observed | centre xyz and radius |
| 0x10 | 4 | u32 | vertex start | Observed | |
| 0x14 | 4 | u32 | index start | Observed | |
| 0x18 | 4 | u32 | index count | Observed | a multiple of 3 |
| 0x1C | 4 | u32 | vertex count | Observed | upper 16 bits always 0 |
| 0x20 | 2 | u16 | flags | Observed | bit 0x10: indices are relative to the vertex start |
| 0x22 | 2 | u16 | material index | Inferred | 0 to 49; from ALERT's layout |
| 0x24 | 28 | u8[28] | unknown | Unknown |
Over 37,148 meshes: vertex start + vertex count never exceeds the vertex count, index start + index count never exceeds the index count. Observed
Flag 0x10 means the indices are relative to the vertex start. All 17,152 meshes with the flag have indices below their vertex count; of the 13,418
meshes without it and with a vertex start above 0, all have absolute indices within [vertex start, vertex start + vertex count); no mesh fits neither.
Observed ALERT’s OBJ writer tests (flags & 0x10) == 0 for “relative”, the opposite. Observed
In 3,365 models the per-mesh vertex counts do not sum to the vertex total (the sum equals it in 5,410 of 8,775); the cause (LODs or meshes sharing vertex ranges, overlap versus gaps) is not established. Unknown
Look (06EB7EFC) and LODs
Section titled “Look (06EB7EFC) and LODs”Four (u16 first mesh, u16 mesh count) pairs, one per LOD. Over the 8,775 models with geometry the distinct ranges are contiguous and together
cover every mesh exactly. A model with fewer LODs repeats the last range: 4,225 models have 1 distinct LOD, 698 have 2, 3,759 have 3 and 93 have 4. Observed
UV0 (16F3BA18)
Section titled “UV0 (16F3BA18)”Half-float u, v at 4 bytes per vertex. On the 1 × 1 plane it gives (0,0), (0,1), (1,1), (1,0) with u = x + 0.5 and v = z + 0.5. Some models use 8 bytes per
vertex (the ALERT get_uv variant); the second pair is probably a second UV set. Their count is not established. Observed
Materials (3250BB80, 32 bytes)
Section titled “Materials (3250BB80, 32 bytes)”Per entry a u32 string offset for the .material path, a u32 for the material name, then six u32 (zero in the fixtures). The layout is taken from ALERT and
the sampled strings match. Sourced · ALERT
Handedness
Section titled “Handedness”The 1 × 1 plane is symmetric and cannot show a mirror. Triangle (0, 1, 2) of the plane winds counter-clockwise about +Y in a right-handed frame, but whether the engine’s frame is left- or right-handed has not been decided. Unknown
It needs an asymmetric reference: text geometry, a decal carrying text, or the minimap overlaid with zone placements (the hex placements are in world coordinates, Zones).
Bits 4 to 15 of the word at +28 of Model Built take only 0, 16, 32, 48; vertex w is ±32767 in most models; some models carry a second UV pair. Skinned models (3,470) exceed their box, so skinning is needed to place them, which was not decoded.