# NIF File Format Documentation

NIF Objects | Compound Types | Enum Types | Basic Types | File Versions

## Basic Data Types

Name | Description
--- | ---
BlockTypeIndex | A 16-bit (signed?) integer, which is used in the header to refer to a particular object type in a object type string array. The upper bit appears to be a flag used for PhysX block types.
FileVersion | A 32-bit integer that stores the version in hexadecimal format with each byte representing a number in the version string. Some widely-used versions and their hex representation: 4.0.0.2: 0x04000002 4.1.0.12: 0x0401000C 4.2.0.2: 0x04020002 4.2.1.0: 0x04020100 4.2.2.0: 0x04020200 10.0.1.0: 0x0A000100 10.1.0.0: 0x0A010000 10.2.0.0: 0x0A020000 20.0.0.4: 0x14000004 20.0.0.5: 0x14000005
Flags | A 16-bit integer, used for bit flags. Function varies by object type.
HeaderString | A variable length string that ends with a newline character (0x0A). The string starts as follows depending on the version: Version <= 10.0.1.0: 'NetImmerse File Format' Version >= 10.1.0.0: 'Gamebryo File Format'
LineString | A variable length string that ends with a newline character (0x0A).
Ptr | A signed 32-bit integer, referring to a object before this one in the hierarchy. Examples: Bones, gravity objects.
Ref | A signed 32-bit integer, used to refer to another object; -1 means no reference. These should always point down the hierarchy. Other types are used for indexes that point to objects higher up.
StringIndex | A 32-bit unsigned integer, used to refer to strings in the header.
StringOffset | A 32-bit unsigned integer, used to refer to strings in a NiStringPalette.
bool | A boolean; 32-bit from 4.0.0.2, and 8-bit from 4.1.0.1 on.
byte | An unsigned 8-bit integer.
char | An 8-bit character.
float | A standard 32-bit floating point number.
int | A signed 32-bit integer.
short | A signed 16-bit integer.
uint | An unsigned 32-bit integer.
ulittle32 | A litte-endian unsigned 32-bit integer.
ushort | An unsigned 16-bit integer.