model (Xbox)

This page needs help! Please submit any missing information via GitHub issues or pull requests.

The model tag contains the render model and shader_model references for objects such as vehicles, scenery, and weapons among others. It is not collideable nor animated on its own, and objects may reference additional model_collision_geometry and model_animations tags.

This tag is specific to Halo 1 for Xbox, while the gbxmodel tag is the equivalent for the PC port and its derivatives like MCC. Unlike a Gearbox model, this tag's compressed vertices are copied into the map rather than uncompressed vertices. Note that compressed vertices can only address up to 42 nodes.

Structure and fields

Field Type Comments
flags bitfield
Flag Mask Comments
blend shared normals 0x1

On map compilation, vertices with the same positions have their normals linearly averaged.

parts have local nodes 0x2
ignore skinning 0x4
node list checksum int32
super high detail cutoff float
  • Unit: pixels
high detail cutoff float
  • Unit: pixels
medium detail cutoff float
  • Unit: pixels
low detail cutoff float
  • Unit: pixels
super low detail cutoff float
  • Unit: pixels
super low detail node count uint16
  • Cache only
  • Unit: nodes
low detail node count uint16
  • Cache only
  • Unit: nodes
medium detail node count uint16
  • Cache only
  • Unit: nodes
high detail node count uint16
  • Cache only
  • Unit: nodes
super high detail node count uint16
  • Cache only
  • Unit: nodes
base map u scale float
  • Default: 1
base map v scale float
  • Default: 1
markers Block
  • HEK max count: 256
  • Hidden
  • Max: 0
  • Read-only
Field Type Comments
name TagString
Field Type Comments
buffer char[32]

Null-terminated string in 32-char buffer.

magic identifier int16
instances Block
  • HEK max count: 32
  • Read-only
Field Type Comments
region index uint8
permutation index uint8
node index uint8
translation Point3D
Field Type Comments
x float
y float
z float
rotation Quaternion
Field Type Comments
i float
j float
k float
w float
nodes Block
  • HEK max count: 64
  • Max: 255
  • Read-only
Field Type Comments
name TagString?
next sibling node index uint16
first child node index uint16
parent node index uint16
default translation Point3D?
default rotation Quaternion?
node distance from parent float
scale float
  • Cache only
rotation Matrix
  • Cache only
Field Type Comments
elements float[9]
translation Point3D?
  • Cache only
regions Block
  • HEK max count: 32
  • Max: 255
  • Read-only
Field Type Comments
name TagString?
permutations Block
  • HEK max count: 32
  • Max: 255
  • Read-only
  • Processed during compile
Field Type Comments
name TagString?
flags bitfield
Flag Mask Comments
cannot be chosen randomly 0x1
permutation number uint16
  • Cache only
super low uint16
low uint16
medium uint16
high uint16
super high uint16
markers Block
  • HEK max count: 64
  • Read-only
Field Type Comments
name TagString?
node index uint16
rotation Quaternion?
translation Point3D?
geometries Block
  • HEK max count: 256
  • Max: 65535
  • Read-only
Field Type Comments
flags bitfield
Flag Mask Comments
unused 0x1
parts Block
  • HEK max count: 32
  • Read-only
  • Processed during compile
Field Type Comments
flags bitfield
Flag Mask Comments
stripped internal 0x1
zoner 0x2
shader index uint16
prev filthy part index uint8
  • Default: 255
next filthy part index uint8
  • Default: 255
centroid primary node uint16
  • Cache only
centroid secondary node uint16
  • Cache only
centroid primary weight float
  • Cache only
centroid secondary weight float
  • Cache only
centroid Point3D?
uncompressed vertices Block
  • HEK max count: 65535
  • Non-cached
  • Read-only
Field Type Comments
position Point3D?
normal Vector3D
Field Type Comments
i float
j float
k float
binormal Vector3D?
tangent Vector3D?
texture coords Point2D
Field Type Comments
x float
y float
node0 index uint16
node1 index uint16
node0 weight float
node1 weight float
compressed vertices Block
  • HEK max count: 65535
  • Non-cached
  • Read-only
Field Type Comments
position Point3D?
normal uint32
binormal uint32
tangent uint32
texture coordinate u int16
texture coordinate v int16
node0 index int8
node1 index int8
node0 weight uint16
triangles Block
  • HEK max count: 65535
  • Non-cached
  • Read-only
Field Type Comments
vertex0 index uint16
vertex1 index uint16
vertex2 index uint16
do not crash the game uint32
  • Cache only
triangle count uint32
  • Cache only
triangle offset uint32
  • Cache only

On Xbox: pointer to the triangle indices. On PC: offset to triangles relative to the end of the map's vertex data.

triangle offset 2 uint32
  • Cache only

On Xbox: pointer to the entry in the second parts list which points to the triangle indices. On PC: same value as the first triangle offset

do not screw up the model uint32
  • Cache only
vertex count uint32
  • Cache only
bullshit uint32
  • Cache only
vertex offset uint32
  • Cache only

On Xbox: pointer to the entry in the second parts list which points to the triangle indices. On PC: offset to first vertex relative to the map's vertex data.

shaders Block
  • HEK max count: 32
Field Type Comments
shader

TagDependency: shader

  • Non-null
permutation uint16

Acknowledgements

Thanks to the following individuals for their research or contributions to this topic:

  • Kavawuvi (Invader tag definitions; Differences from gbxmodel)
  • MosesOfEgypt (Tag structure research)