Oblivion Mod:Mod File Format/Vs Morrowind

The UESPWiki – Your source for The Elder Scrolls since 1995
Jump to: navigation, search

While the Oblivion file format is closely related to the Morrowind file format, the two formats also differ substantially both in structural elements and in details for most (all) record types. The introduction of groups, data compression and outsize field data handling all vastly complicate reading and writing of the file, while the introduction of formids greatly complicates the logic of integrating and relating changes to files.

File Parsing Pseudocode[edit]

Oblivion[edit]

Basic pseudocode for parsing Oblivion's ESM/ESP files. Successfully tested on Oblivion.esm. Note that Header refers to the 20 byte record/group and the 6 byte field headers.

Read Header   //Required TES4 record
Read Record

While Bytes Left in File
   Read Header
   Read Group
EndWhile

Read Group

   While Bytes Left in Group
      Read Header

      if Name = GRUP
         Read Group
      else
         Read Record
   EndWhile

End Group

Read Record
   Read Header

   if IsCompressed
      Read Compressed Record Data
   else
      Read Fields

End Record


Read Compressed Record Data
   Read Deflated Data Size (dword)
   Read Compressed Data (given by record size in header)
   Deflate Data (zLib)
   Read Fields (from the deflated data)
End Read Raw Data


Read Fields

   While Bytes Left in Record
      Read Field Header
      
      if Name = XXXX
         Read Field Data
         Field data is the size of the next field
         Read Next Field Header, ignoring size

     Read Field Data
      
   EndWhile

End Read Fields

Morrowind[edit]

For comparison only, the pseudocode for parsing Morrowind's ESM/ESP/ESS files is trivial:

While Bytes Left in File
   Read Record Header

   While Bytes Left in Record
      Read Field Header
      Read Field Data
   EndWhile
EndWhile

Simple is good...