Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/mattms/esm_reader
Extract data from Fallout 3 ESM files.
https://github.com/mattms/esm_reader
Last synced: about 1 month ago
JSON representation
Extract data from Fallout 3 ESM files.
- Host: GitHub
- URL: https://github.com/mattms/esm_reader
- Owner: MattMS
- License: isc
- Created: 2015-12-22T09:18:17.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2017-01-23T09:44:18.000Z (almost 8 years ago)
- Last Synced: 2024-10-03T12:10:33.589Z (3 months ago)
- Homepage:
- Size: 127 KB
- Stars: 3
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Read Fallout 3 ESM files
**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.
## Usage
Add this as a dependency to your project:
npm install esm_reader --save
## File structure and parsers
Values are stored in [little endian](https://en.wikipedia.org/wiki/Endianness) 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](./parser/main.coffee.md) switches to the appropriate parser based on the current state.
### Groups
[read_group_header.coffee.md](./read_group_header.coffee.md) parses the start of each group.
The rest of the group is made up of records, described next.
### Records
[read_record_header.coffee.md](./read_record_header.coffee.md) parses the start of each record.
The rest of the record is made up of fields, described next.
### Fields
[read_field.coffee.md](./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.