Skip to content

Meta Models

_nebula edited this page Oct 24, 2024 · 7 revisions

Meta Models

File Format

(Header)
Constant - 0x4D4D646C "MMdl" magic.
int - File format version. 0xA for TSG and GF1, 0xE for GF2
int - File size.
int - Flags. (Unknown purpose)
16 bytes - GUID
4 bytes - Hashed Name
4 bytes - Hashed Path
4 bytes - Hashed Source Path
int - Asset Offset
int - State Offset
int - Variable Offset
int - Attribute Offset
int - Predicate Offset
int - Object Offset
int - Attribute data
int - User data
short - Number of Assets
short - Number of States
short - Number of Variables
short - Number of Attributes
short - Number of Predicates
short - Number of Parts

(Assets)
For each asset:
   4 bytes - Name hash
   4 bytes - Path hash
   4 bytes - Type ID (hash?)
   16 bytes - GUID
   int - User data

(States)
For each state:
   4 bytes - Class ID hash.
   int - Pointer to Class Name (from start of file)
   int - Pointer to State Name
   int - Attributes pointer
   short - Number of attributes.
   short - Object Type.
   int - Part pointer.
   int - Predicate pointer.
   short - Number of parts.
   short - Number of predicates.

(Variables)
For each variable:
   int - Pointer to Variable Name.
   4 bytes - Variable ID (Hash?)
   short - Value Type

(Attributes)

(Predicates)

(Objects)
   

Enums

ValueType

MM_VALUE_TYPE_BOGUS  = 0x0
MM_VALUE_TYPE_BOOL   = 0x1
MM_VALUE_TYPE_UINT32 = 0x2
MM_VALUE_TYPE_FLOAT  = 0x4
MM_VALUE_TYPE_STRING = 0x8
MM_VALUE_TYPE_ASSET  = 0x10
MM_VALUE_TYPE_MATRIX = 0x20

ObjectType

MM_OBJECT_TYPE_BOGUS     = 0x0
MM_STATE_OBJECT          = 0x1
MM_SIMPLE_PART_OBJECT    = 0x2
MM_METAMODEL_PART_OBJECT = 0x4
MM_ENTITY_PART_OBJECT    = 0x8

CompareOp

PRED_BOGUS     = -1
PRED_GT        = 0x0
PRED_LT        = 0x1
PRED_GE        = 0x2
PRED_LE        = 0x3
PRED_EQ        = 0x4
PRED_NEQ       = 0x5
PRED_AND_OR_EQ = 0x6

Comparison PRED_AND_OR_EQ is defined as:

((a & b) != 0 || a == b) & 0xFF

Clone this wiki locally