omod file format version 3 entries marked with vx+ only exist in version x or later, and vx- only exist in versions x or earlier The only difference between version 2 and 3 is that esps are allowed to be in subdirectories in v3+ .omod is a standard zip file, containing the following other files: readme : RTF or plain text format script : Contains the script to be executed when a mod is installed config : Contains the mod information. (See below) image : Contains a single screenshot for the mod. Can be bmp/jpeg/png/gif/tiff format. plugins : LZMA or deflate packed stream containing esm and esp files plugins.crc : Contains the folder structure, crc and file sizes of files contained in 'plugins' data : LZMA or deflate packed stream containing anything not in 'plugins' data.crc : Contains the folder structure, crc and file sizes of files contained in 'data' The config file is the only one which must be present. Any other file may be missing, the only exception being that if 'data' exists then 'data.crc' must also exist. The same rule applied the other way round, and also for 'plugins' and 'plugins.crc' ******************************** ** other files in more detail ** ******************************** data.crc/plugins.crc { repeat for however many files are contained in the file { string - File name and path relative to 'Oblivion\data\' Int32 - CRC (computed with SharpZipLibs Crc32 class) Int64 - File length } } config { byte version : omod file version string Name : Name of mod (file name should be 'Name(MajorVersion.MinorVersion).omod') Int32 MajorVersion : Major version number of mod Int32 MinorVersion : Minor version number of mod string Author : Author name string email : Email address to use for send email option string website : Website to open from the view website option string Description : Description of mod v2+ Int64 CreationTime : Time the omod file was created. ( Format is the binary serialization from DateTime.ToBinary() ) v1- string CreationTime : Time the omod file was created (format is 'dd/MM/yyyy HH:mm') byte compression type : type of compression used for 'plugins' and 'data' (0 - 7-zip, 1 - Zip) v1+ Int32 BuildVersion : The third decimal point of the version number } data/plugins { Depending on the compression type, contains either a LZMA stream or a Deflated one LZMA { First 5 bytes should be fed to Decoder.SetDecoderProperties() Remaining bytes should be fed to Decoder.Code() } Deflate { Feed the whole thing to a standard zlib inflator } }