Format of Morrowind's ESM Plug-In File
Basic Overall Format:
The ESM/ESP/ESS files are composed entirely of Records with this format.
The multi-bytes variables are in little-endian order. Strings are null-terminated.
4 bytes, char. Name. -- 4-byte record name string. all CAPS, not null-terminated. 4 bytes, integer. Record size. -- Size of the record not including the 16 bytes of header data. 4 bytes, integer. Unknown. -- Unknown value, usually 0 (deleted/ignored flag?). 4 bytes, integer. Record flags. -- 0x00002000 = Blocked -- 0x00000400 = Persistant Record size bytes, SubRecords. -- All records are composed of a variable number of sub-records. There -- is no sub-record count, just use the record Size value to determine -- when to stop reading a record.
The sub-record is the tail of the record and it contains data specific to the record type.
4 bytes, char. Name. -- 4-byte sub-record name string, all CAPS, not null-terminated 4 bytes, long. Size of sub-record. -- Size of the sub-record not including the 8 bytes of header data. Size of sub-record bytes, various format. Sub-Record data. -- Format depends on the sub-record type.
Each page links to the sub-record list description and format. The sub-record order is meaningful.
BODY, Body part.
BSGN, Birth Sign.
CELL, Cell definition.
CLAS, Character class definition.
CONT, Container definition.
CREA, Creature description.
DOOR, Door definition.
ENCH, Enchanting effects.
FACT, Faction definition.
GLOB, Global variable.
GMST, Game setting.
LIGH, Light definition.
MGEF, Magic effect description.
MISC, Misc item definition.
RACE, Race definition.
REGN, Region information. Sound, weather...
SKIL, Skill increase pace definition.
SOUN, Sound reference.
SPEL, Spell description.
TES3, Main header.
WEAP, Weapon definition.
Original ESx description from Dave Humphrey.
Older, but more readable version from Jim Adam.