Giter Site home page Giter Site logo

fopdoc's Introduction

FOPDoc

Documentation for the Fallout 3, Fallout: New Vegas and Fallout 4 plugin file formats.

The Oblivion, Skyrim, Fallout 3, Fallout: New Vegas and Fallout 4 plugin file formats are all very similar, but while there exists good documentation for Oblivion and Skyrim, there is no equivalent for the Fallout games. The aim is for this repository to become that equivalent.

See CONTRIBUTING.md for information on how to contribute.

Contents

The conventions used by this documentation are given in Conventions.md. Data structure definitions are found in one of the following subfolders:

  • Fallout3 contains definitions specific to Fallout 3.
  • FalloutNV contains definitions specific to Fallout: New Vegas.
  • Fallout4 contains definitions specific to Fallout 4.

Each record type is documented in a separate file. Subrecords that share the same structure across multiple record types are documented in separate files, while those unique to a particular record are documented in that record's file.

Format

This documentation is written in GitHub Flavored Markdown and stored in a Git repository on GitHub because:

  • Revision control is good.
  • You can download the documentation for offline reading.
  • Markdown gives readable plain text and can also be readily converted to HTML.
  • GitHub offers in-browser editing and HTML preview for Markdown.
  • GitHub makes it easier to make, share and integrate edits with others.

File Format Data Source

The most complete open-source implementation of plugin parsers for these games is TES5Edit, written in Delphi. The information on the file formats contained within its parsing code has been adapted into a reasonably generic format that programmers should be able to interpret regardless of their preferred language, similar to how it is presented by UESP.net.

This documentation was originally written to reflect the TES5Edit source code on 2 June 2014.

fopdoc's People

Contributors

cgarrison89 avatar clampi avatar galaxyman2015 avatar ktori avatar ortham avatar sharlikran avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

fopdoc's Issues

On group order

The GECK/Runtime will load the groups in any order. The only limitation I know of is that groups of BaseForm that can be referenced should be loaded before groups containing references.
Internally the runtime has provision not only to load the same group multiple times, but also to append a group and some forms to the current plugin.

Count column values may be incorrect

As @Sharlikran has stated here, TES5Edit treats everything as optional unless it's always absolutely required.

As such, its source code isn't a reliable indicator of whether fields are required or not. Instead, the data found here can be used to determine that. (@Sharlikran, is there any link to the utility that generated that file?)

Also, I'm not sure if there's a field that needs to exist but can be repeated, so maybe it would be better to change * to mean "zero or more repeats". Looking through the stats file, there are 101 mentions of required fields that appear more than once.

Some subrecord arrays should be subrecords with array fields.

This came up in #18, when I wrote the docs I misread wbArray(ATTR, 'Attributes', wbInteger('Attribute', itU8), ...) as meaning an array of ATTR subrecords, that get put under the UI heading "Attributes", each containing a byte-length attribute field, whereas it should be a single ATTR subrecord containing an array of byte-length attribute fields.

I will have made the same mistake in other places too, so they should be corrected.

Split off Model Data, Destruction Data field collections

These are defined as collections of fields in the TES5Edit code that keep coming up in different records, but I'd like to check if they always have the same required / optional state in all records before I split them off.

CTDA Definition Incomplete

The CDTA field definition currently sits inside the ALCH record definition file (though it almost certainly needs moving). The function parameters are lacking details. These should get filled in.

FNV Documentation

I diff'ed TES5Edit's FO3 and FNV definitions files, and am working my way through the diff. All new records have now been documented.

For records / fields / values with changes from FO3, I'll be copying their files into the FNV subfolders and editing them to match the diff.

The new records have yet to be added to the record list in Records.md, and most page links are currently broken. A reorganisation will probably be needed, but I'll leave that until everything is documented.

ACBS subrecord for Fallout 4 missing

The ACBS subrecord is different for fallout 4.
Is the following

uint32 flags
uint16 xp
uint16 level
uint16 minLevel
uint16 maxLevel
uint16 disposition
uint16 templates flags
uint16 bleedout override
uint16 unknown

flags and templates flags seems to be the same

Nomenclature clarification

There's a bit of confusion in the text ATM where fields refer to the data structures inside records with 4-character codes, and the individual data within them.

Similarly there's a bit of confusion over things like the codes being called IDs (which should probably be limited to the 32-bit hex values used as FormIDs).

So we have records, record types, subrecords, subrecord codes (because they're not unique types), fields and field values. Where a subrecord consists of only one field, the subrecord's value is the field value. Records, subrecords and fields are also given descriptive names. Subrecord collections are subrecords that always appear together.

Flag field values

The TES5Edit source lists string values for flag fields sequentially (0x00000001, 0x00000002, ...), so I should go back and fill in any missing flag data.

SubBlock MODT F3 and FNV

This block contains texture hashes, its primary use is to map DDS files to their equivilent DDX files for XBOX360. The format consists of 24 byte blocks.

  • 8 Bytes is hashed DDS filename
  • 8 Bytes is hashed DDX filename
  • 8 Bytes is hashed directory of texture

Size of the block should match 24 * Number of unique textures referenced in the NIF

CTDA

0x0001 Combine conditions using OR (default is to use AND)
I would say combine NEXT condition using OR (def...

There is an extra "i" in Indices

Unknown functions starting at 1100 are from FOSE. Those greater than 1200 are from FOSE plugins.

No ENIT in ENCH (Object Effect)

Size of ENIT 16 bytes (Fallout 3)
struct ENIT
{
uint32_t type;
uint8_t unused[8];
uint8_t Flag;
uint8_t unused[3];
};

enum TYPE
{
Unknown0 = 0x00,
Unknown1 = 0x01,
Weapon = 0x02,
Apparel = 0x03
};

enum FLAGS
{
NoAutoCalculate = 0x01,
HideEffect = 0x04
};

CPTH error

There is only one ANAM holding 2 FormIDs, not two ANAMs each holding 1 FormID.

FO3 TERM Record

Menu Item Subrecord Collection
the Sub Menu label must be TNAM

Subrecord DSTD in Fallout3

Wrong type of the Health Percentage, must be uint8_t.
This can be checked through the size subrecord DSTD (in original game 20 bytes).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.