uint32[8] - Attributes (in order of Attribute ID, as found on Morrowind:Attributes)
uint32 - Health
uint32 - SpellPts
uint32 - Fatigue
uint32 - Soul
uint32 - Combat
uint32 - Magic
uint32 - Stealth
uint32 - AttackMin1
uint32 - AttackMax1
uint32 - AttackMin2
uint32 - AttackMax2
uint32 - AttackMin3
uint32 - AttackMax3
uint32 - Gold
+
FLAG
uint32
Creature flags
0x0001 = Biped
0x0002 = Respawn
0x0004 = Weapon and shield
0x0008 = None
0x0010 = Swims
0x0020 = Flies
0x0040 = Walks
0x0048 = Default flags
0x0080 = Essential
0x0400 = Blood Type 1 (Dust)
0x0800 = Blood Type 2 (Sparks)
0x0C00 = Blood Type 3
0x1000 = Blood Type 4
0x1400 = Blood Type 5
0x1800 = Blood Type 6
0x1C00 = Blood Type 7
Blood is stored as a value from 0-7, shifted 10 bits in. The actual names, textures, and models for the blood are not hardcoded and are stored in Morrowind.ini. By default the game uses values of Red (0), Dust (1) and Sparks (2).
-
XSCL
float32
Scale (1.0 if missing)
*
NPCO
struct (36 bytes)
Carried object
uint32 - Object count (negative counts are restocking)
char[32] - Object name
*
NPCS
char[32]
Spells
+
AIDT
struct (12 bytes)
AI data
uint8 Hello
uint8 Unknown
uint8 Fight
uint8 Flee
uint8 Alarm
[3]uint8 alignment padding (junk)
uint32 Flags
0x00001 = Weapon
0x00002 = Armor
0x00004 = Clothing
0x00008 = Books
0x00010 = Ingredient
0x00020 = Picks
0x00040 = Probes
0x00080 = Lights
0x00100 = Apparatus
0x00200 = Repair Items
0x00400 = Misc
0x00800 = Spells
0x01000 = Magic Items
0x02000 = Potions
0x04000 = Training
0x08000 = Spellmaking
0x10000 = Enchanting
0x20000 = Repair
Remaining bits appear to be filled with junk data
*
DODT
struct (24 bytes)
Cell Travel Destination
float32 - Position X
float32 - Position Y
float32 - Position Z
float32 - Rotation X
float32 - Rotation Y
float32 - Rotation Z
DNAM
zstring
Cell name for previous DODT, if interior
AI Packages - the following fields can appear in any order, one per AI package, with the order defining the package priority.
Note: duration parameters in all packages are in hours. Any value greater than 24 should be divided by 100, and set to 24 if still greater than 24. The unknown value for each package seems to be an end-of-data marker; it is always a byte value set to 1 with any remaining data in the structure undefined and ignored.