Difference between revisions of "BFRES (File Format)"
Jump to navigation
Jump to search
Shibboleet (talk | contribs) (FVTX stuff) |
KillzXGaming (talk | contribs) |
||
Line 56: | Line 56: | ||
| 0x80 || UInt64 || Scene animation dictionary offset. | | 0x80 || UInt64 || Scene animation dictionary offset. | ||
|- | |- | ||
− | | 0x88 || UInt64 || | + | | 0x88 || UInt64 || Memory Pool. |
|- | |- | ||
− | | 0x90 || UInt64 || | + | | 0x90 || UInt64 || Buffer Section. |
|- | |- | ||
| 0x98 || UInt64 || External files offset. | | 0x98 || UInt64 || External files offset. | ||
Line 68: | Line 68: | ||
| 0xB0 || UInt64 || String table offset. | | 0xB0 || UInt64 || String table offset. | ||
|- | |- | ||
− | | 0xB8 || UInt32 || | + | | 0xB8 || UInt32 || String table size. |
|- | |- | ||
| 0xBC || UInt16 || Model count. | | 0xBC || UInt16 || Model count. | ||
Line 76: | Line 76: | ||
| 0xC0 || UInt16 || Material animation count. | | 0xC0 || UInt16 || Material animation count. | ||
|- | |- | ||
− | | 0xC2 || | + | | 0xC2 || UInt16 || Bone visual animation count. |
+ | |- | ||
+ | | 0xC4 || UInt16 || Shape animation count. | ||
+ | |- | ||
+ | | 0xC6 || UInt16 || Scene animation count. | ||
|- | |- | ||
| 0xC8 || UInt16 || External file count. | | 0xC8 || UInt16 || External file count. | ||
Line 94: | Line 98: | ||
| 0x00 || String || '''Section magic'''. Always "FMDL" in ASCII. | | 0x00 || String || '''Section magic'''. Always "FMDL" in ASCII. | ||
|- | |- | ||
− | | 0x04 || UInt32 || | + | | 0x04 || UInt32 || Block size. |
|- | |- | ||
− | | 0x08 || UInt64 || | + | | 0x08 || UInt64 || Block offset. |
|- | |- | ||
| 0x10 || UInt64 || Model name offset. | | 0x10 || UInt64 || Model name offset. | ||
Line 203: | Line 207: | ||
! Offset !! Type !! Description | ! Offset !! Type !! Description | ||
|- | |- | ||
− | | 0x00 || UInt32 || | + | | 0x00 || UInt32 || Magic. Always blank for BFRES. |
|- | |- | ||
| 0x04 || UInt32 || Number of nodes in this dictionary. This does NOT include the root node. | | 0x04 || UInt32 || Number of nodes in this dictionary. This does NOT include the root node. |
Revision as of 19:37, 31 October 2018
BFRES, known as Binary CaFe RESource, stores information relating to any 3D model data.
Header
The header contains all of the information needed to parse the entire file, include counts and offsets to data.
Offset | Type | Description |
---|---|---|
0x00 | String | File magic. Always "FRES" in ASCII. |
0x04 | UInt32 | Signature. |
0x08 | UInt32 | Version. |
0x0C | UInt16 | Byte Order Mark (BOM): 0xFEFF for big endian and 0xFFFE for little endian. |
0x0E | Byte | Byte alignment. |
0x0F | Byte | Target address size. Usually 0. |
0x10 | UInt32 | File name offset. |
0x14 | Uint16 | Flags. |
0x16 | UInt16 | Block offset. |
0x18 | UInt32 | Relocation table offset. |
0x1C | UInt32 | BFRES Size. |
0x20 | UInt64 | Offset to the file name length. |
0x28 | UInt64 | FMDL offset. |
0x30 | UInt64 | FMDL dictionary offset. |
0x38 | UInt64 | Skeletal animations offset. |
0x40 | UInt64 | Skeletal animations dictionary. |
0x48 | UInt64 | Material animations offset. |
0x50 | UInt64 | Material animations dictionary. |
0x58 | UInt64 | Bone visibility animation array offset. |
0x60 | UInt64 | Bone visibility animation array dictionary. |
0x68 | UInt64 | Shape animation array offset. |
0x70 | UInt64 | Shape animation dictionary offset. |
0x78 | UInt64 | Scene animation array offset. |
0x80 | UInt64 | Scene animation dictionary offset. |
0x88 | UInt64 | Memory Pool. |
0x90 | UInt64 | Buffer Section. |
0x98 | UInt64 | External files offset. |
0xA0 | UInt64 | Embedded file dictionary offset. |
0xA8 | Byte[8] | Padding. |
0xB0 | UInt64 | String table offset. |
0xB8 | UInt32 | String table size. |
0xBC | UInt16 | Model count. |
0xBE | UInt16 | Skeletal animation count. |
0xC0 | UInt16 | Material animation count. |
0xC2 | UInt16 | Bone visual animation count. |
0xC4 | UInt16 | Shape animation count. |
0xC6 | UInt16 | Scene animation count. |
0xC8 | UInt16 | External file count. |
0xCA | Byte[6] | Padding. |
0xD0 | End of file header. |
FMDL
The FMDL section handles the actual model information, where it stores skeleton structures, shapes, and more.
Offset | Type | Description |
---|---|---|
0x00 | String | Section magic. Always "FMDL" in ASCII. |
0x04 | UInt32 | Block size. |
0x08 | UInt64 | Block offset. |
0x10 | UInt64 | Model name offset. |
0x18 | UInt64 | String table end offset. |
0x20 | UInt64 | FSKL offset. |
0x28 | UInt64 | FVTX offset. |
0x30 | Uint64 | FSHP offset. |
0x38 | UInt64 | FSHP dictionary offset. |
0x40 | UInt64 | FMAT offset. |
0x48 | UInt64 | FMAT dictionary offset. |
0x50 | UInt64 | User data offset. |
0x58 | Byte[16] | Padding. |
0x68 | UInt16 | Vertex array count. |
0x6A | UInt16 | Shape count. |
0x6C | UInt16 | Material count. |
0x6E | UInt16 | User data count. |
0x70 | UInt32 | Total vertex count. |
0x74 | Byte[4] | Padding. |
0x78 | End of FMDL header. |
Directly after the FMDL header, there is a structure that defines a buffer for resources.
Offset | Type | Description |
---|---|---|
0x00 | UInt32 | Unknown. |
0x04 | UInt32 | Size. |
0x08 | UInt64 | Buffer offset. |
0x10 | Byte[16] | Padding. |
0x20 | End of buffer structure. |
Then after this structure, a model dictionary is present.
FVTX
The FVTX section stores data related to vertices.
Offset | Type | Description |
---|---|---|
0x00 | String | Section magic. Always "FVTX" in ASCII. |
0x04 | Byte[12] | Padding. |
0x10 | UInt64 | Vertex attribute array offset. |
0x18 | UInt64 | Vertex attribute array dictionary. |
0x20 | UInt64 | Unknown. |
0x28 | UInt64 | Unknown. |
0x30 | UInt64 | Unknown. |
0x38 | UInt64 | Vertex buffer size. |
0x40 | UInt64 | Vertex stride size. |
0x48 | UInt64 | Vertex buffer array offset. |
0x50 | UInt32 | Buffer offset. |
0x54 | Byte | Vertex attribute count. |
0x55 | Byte | Vertex buffer count. |
0x56 | UInt16 | Vertex index. |
0x58 | UInt32 | Vertex count. |
0x5C | UInt32 | Skin weight influence. |
0x60 | End of vertex header. |
Dictionary
A dictionary is a structure that can store nodes that reference each other, to create a tree for storing data.
Header
The header defines the structure of the dictionary.
Offset | Type | Description |
---|---|---|
0x00 | UInt32 | Magic. Always blank for BFRES. |
0x04 | UInt32 | Number of nodes in this dictionary. This does NOT include the root node. |
0x08 | Dictionary Nodes | Node definitions. |
0x08 + (numNodes * 0x10) | End of dictionary. |
Dictionary Node
Offset | Type | Description |
---|---|---|
0x00 | UInt32 | Reference node. -1 for root node. |
0x04 | UInt16 | ID of the node to the left of this node. |
0x06 | UInt16 | ID of the node to the right of this node. |
0x08 | UInt64 | Offset to the string in the string table that is associated with this node. |
0x10 | End of dictionary node. |