Please note: This is a work in progress. It is only partially implemented and barely tested. Come back later.
This package parses the *.esm
data files used by Fallout 3 and exposes the data as Objects via a Node.js Stream.
Another aim of this project is to provide documentation of the file format.
Add this as a dependency to your project:
npm install esm_reader --save
Values are stored in little endian format. This controls the Node Buffer methods to use.
Files always start with a TES4 record.
The rest of the file is divided into groups, described next.
parser/main.coffee.md switches to the appropriate parser based on the current state.
read_group_header.coffee.md parses the start of each group.
The rest of the group is made up of records, described next.
read_record_header.coffee.md parses the start of each record.
The rest of the record is made up of fields, described next.
read_field.coffee.md parses field data from a Buffer.
A field contains a 4 byte label and then 2 bytes indicating the size of the field data. The remaining bytes store the value of the field.
Fields can contain different types of values: text, numbers, bit flags, or lists of those. The type of the value are not described by the field, but rather determined by the labels of the group+record+field.