This page is incomplete! You can contribute information using 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

FieldTypeComments
flagsbitfield
FlagMaskComments
blend shared normals0x1

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

parts have local nodes0x2
ignore skinning0x4
node list checksumint32
super high detail cutofffloat
  • Unit: pixels
high detail cutofffloat
  • Unit: pixels
medium detail cutofffloat
  • Unit: pixels
low detail cutofffloat
  • Unit: pixels
super low detail cutofffloat
  • Unit: pixels
super low detail node countuint16
  • Cache only
  • Unit: nodes
low detail node countuint16
  • Cache only
  • Unit: nodes
medium detail node countuint16
  • Cache only
  • Unit: nodes
high detail node countuint16
  • Cache only
  • Unit: nodes
super high detail node countuint16
  • Cache only
  • Unit: nodes
base map u scalefloat
  • Default: 1
base map v scalefloat
  • Default: 1
markersBlock
  • HEK max count: 256
  • Hidden
  • Max: 0
  • Read-only
FieldTypeComments
nameTagString
magic identifierint16
instancesBlock
  • HEK max count: 32
  • Read-only
FieldTypeComments
region indexuint8
permutation indexuint8
node indexuint8
translationPoint3D
FieldTypeComments
xfloat
yfloat
zfloat
rotationQuaternion
FieldTypeComments
ifloat
jfloat
kfloat
wfloat
nodesBlock
  • HEK max count: 64
  • Max: 255
  • Read-only
FieldTypeComments
nameTagString
next sibling node indexuint16
first child node indexuint16
parent node indexuint16
default translationPoint3D?
default rotationQuaternion?
node distance from parentfloat
scalefloat
  • Cache only
rotationMatrix
  • Cache only
FieldTypeComments
elementsfloat[9]
translationPoint3D?
  • Cache only
regionsBlock
  • HEK max count: 32
  • Max: 255
  • Read-only
FieldTypeComments
nameTagString
permutationsBlock
  • HEK max count: 32
  • Max: 255
  • Read-only
  • Processed during compile
FieldTypeComments
nameTagString
flagsbitfield
FlagMaskComments
cannot be chosen randomly0x1
permutation numberuint16
  • Cache only
super lowuint16
lowuint16
mediumuint16
highuint16
super highuint16
markersBlock
  • HEK max count: 64
  • Read-only
FieldTypeComments
nameTagString
node indexuint16
rotationQuaternion?
translationPoint3D?
geometriesBlock
  • HEK max count: 256
  • Max: 65535
  • Read-only
FieldTypeComments
flagsbitfield
FlagMaskComments
unused0x1
partsBlock
  • HEK max count: 32
  • Read-only
  • Processed during compile
FieldTypeComments
flagsbitfield
FlagMaskComments
stripped internal0x1
zoner0x2
shader indexuint16
prev filthy part indexuint8
  • Default: 255

Allows the rendering order of parts to be manually specified for correct transparency sorting. In HEK Tool, this defaults to -1 (unused) if set to 0. In H1A Tool, this defaulting only occurs when both filthy part indices are 0, since 0 should be a useable index.

next filthy part indexuint8
  • Default: 255

Sets the next part to render.

centroid primary nodeuint16
  • Cache only
centroid secondary nodeuint16
  • Cache only
centroid primary weightfloat
  • Cache only
centroid secondary weightfloat
  • Cache only
centroidPoint3D?
uncompressed verticesBlock
  • HEK max count: 65535
  • Non-cached
  • Read-only
FieldTypeComments
positionPoint3D?
normalVector3D
FieldTypeComments
ifloat
jfloat
kfloat
binormalVector3D?
tangentVector3D?
texture coordsPoint2D
FieldTypeComments
xfloat
yfloat
node0 indexuint16
node1 indexuint16
node0 weightfloat
node1 weightfloat
compressed verticesBlock
  • HEK max count: 65535
  • Non-cached
  • Read-only
FieldTypeComments
positionPoint3D?
normaluint32
binormaluint32
tangentuint32
texture coordinate uint16
texture coordinate vint16
node0 indexint8
node1 indexint8
node0 weightuint16
trianglesBlock
  • HEK max count: 65535
  • Non-cached
  • Read-only
FieldTypeComments
vertex0 indexuint16
vertex1 indexuint16
vertex2 indexuint16
do not crash the gameuint32
  • Cache only
triangle countuint32
  • Cache only
triangle offsetuint32
  • 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 2uint32
  • 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 modeluint32
  • Cache only
vertex countuint32
  • Cache only
bullshituint32
  • Cache only
vertex offsetuint32
  • 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.

shadersBlock
  • HEK max count: 32
FieldTypeComments
shaderTagDependency: shader
  • Non-null
permutationuint16

Acknowledgements

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

  • Kavawuvi (Invader tag definitions)
  • MosesOfEgypt (Tag structure research)