2
edits
imported>Leoetlino (→Nodes) |
(Updated file format to version 7 for TotK) |
||
Line 18: | Line 18: | ||
| align="center" | 0x02 | | align="center" | 0x02 | ||
| align="center" | 2 | | align="center" | 2 | ||
| Version | | Version 2 in ''Breath of the Wild'', Versions 4 to 7 in ''Tears of the Kingdom''. 1 and 3 are also valid version numbers. | ||
|- | |- | ||
| align="center" | 0x04 | | align="center" | 0x04 | ||
Line 30: | Line 30: | ||
| align="center" | 0x0c | | align="center" | 0x0c | ||
| align="center" | 4 | | align="center" | 4 | ||
| Offset to the root node, relative to start. May be 0 if the document is totally empty. Must be either an array node (0xc0) or | | Offset to the root node, relative to start. May be 0 if the document is totally empty. Must be either an array node (0xc0) or one of the hash nodes (0x20, 0x21 or 0xc1). | ||
|} | |} | ||
Line 42: | Line 42: | ||
! width="63%" | Description | ! width="63%" | Description | ||
! width="10%" | Version | ! width="10%" | Version | ||
|- | |||
| align="center" | 0x20 | |||
| align="center" | Container | |||
| Plain hash. Node is a mapping from 32-bit hashes to other nodes. | |||
| 7+ | |||
|- | |||
| align="center" | 0x21 | |||
| align="center" | Container | |||
| Value hash. Node is a mapping from 32-bit hashes to other nodes and a second 4 byte value. | |||
| 7+ | |||
|- | |- | ||
| align="center" | 0xA0 | | align="center" | 0xA0 | ||
Line 52: | Line 62: | ||
| Binary data. | | Binary data. | ||
| 4+ | | 4+ | ||
|- | |||
| align="center" | 0xA2 | |||
| align="center" | Value (Special) | |||
| File data. Node contains the binary data of another file. | |||
| 5+ | |||
|- | |- | ||
| align="center" | 0xC0 | | align="center" | 0xC0 | ||
Line 60: | Line 75: | ||
| align="center" | 0xC1 | | align="center" | 0xC1 | ||
| align="center" | Container | | align="center" | Container | ||
| | | String hash. Node is a mapping from strings in the hash key table to other nodes. | ||
| 2+ | | 2+ | ||
|- | |- | ||
Line 116: | Line 131: | ||
For special value nodes, the value is an offset relative to the start of the file. | For special value nodes, the value is an offset relative to the start of the file. | ||
==== 0x20 - Hash Node ==== | |||
Hash / dictionary nodes are used to encode name value collections. Entries must sorted by their hash value. | |||
{| class="wikitable" | |||
! align="center" | Offset | |||
! align="center" | Size | |||
! Description | |||
|- | |||
| align="center" | 0x00 | |||
| align="center" | 1 | |||
| 0x20 node type. | |||
|- | |||
| align="center" | 0x01 | |||
| align="center" | 3 | |||
| Number of entries in dictionary. | |||
|- | |||
| align="center" | 0x04 | |||
| align="center" | 8*N | |||
| Dictionary entries. | |||
|- | |||
| align="center" | 0x04+8*N | |||
| align="center" | 1*N | |||
| Array of N types, on for each entry in the dictionary. This is padded to 4 bytes. | |||
|} | |||
Each entry in the dictionary has the following structure. | |||
{| class="wikitable" | |||
! align="center" width="5%" | Offset | |||
! align="center" width="3%" | Size | |||
! width="90%" | Description | |||
|- | |||
| align="center" | 0x00 | |||
| align="center" | 4 | |||
| Hash. A 32-bit hash of the key. | |||
|- | |||
| align="center" | 0x04 | |||
| align="center" | 4 | |||
| Value. For regular value nodes, this is the 4 byte node value. For other nodes, this is a 4 byte offset to the node relative to the start of the file. | |||
|} | |||
==== 0x21 - Value Hash Node ==== | |||
This type is the similar to the hash node with the addition of a 4-byte value in each dictionary entry. | |||
{| class="wikitable" | |||
! align="center" width="5%" | Offset | |||
! align="center" width="3%" | Size | |||
! width="90%" | Description | |||
|- | |||
| align="center" | 0x00 | |||
| align="center" | 4 | |||
| Value. For regular value nodes, this is the 4 byte node value. For other nodes, this is a 4 byte offset to the node relative to the start of the file. | |||
|- | |||
| align="center" | 0x04 | |||
| align="center" | 4 | |||
| Hash. A 32-bit hash of the key. | |||
|- | |||
| align="center" | 0x08 | |||
| align="center" | 4 | |||
| Unknown. Always 0 in ''Tears of the Kingdom''. | |||
|} | |||
==== 0xA1 - Binary Data Node ==== | ==== 0xA1 - Binary Data Node ==== | ||
Line 130: | Line 209: | ||
| align="center" | variable | | align="center" | variable | ||
| Data | | Data | ||
|} | |||
==== 0xA2 - File Node ==== | |||
{| class="wikitable" | |||
! align="center" | Offset | |||
! align="center" | Size | |||
! Description | |||
|- | |||
| align="center" | 0x00 | |||
| align="center" | 4 | |||
| File length | |||
|- | |||
| align="center" | 0x04 | |||
| align="center" | 4 | |||
| Unknown. Always 0x1000. | |||
|- | |||
| align="center" | 0x08 | |||
| align="center" | variable | |||
| File data | |||
|} | |} | ||
Line 158: | Line 256: | ||
N’ is N rounded up to the nearest multiple of 4. | N’ is N rounded up to the nearest multiple of 4. | ||
==== 0xC1 - Hash Node ==== | ==== 0xC1 - String Hash Node ==== | ||
Hash / dictionary nodes are used to encode name value collections. Entries must be lexicographically sorted<ref>Nintendo's BYML library performs a binary search when looking up items by key in a hash node.</ref>. | Hash / dictionary nodes are used to encode name value collections. Entries must be lexicographically sorted<ref>Nintendo's BYML library performs a binary search when looking up items by key in a hash node.</ref>. | ||
Line 247: | Line 345: | ||
* [[Bquestpack|.bquestpack]] | * [[Bquestpack|.bquestpack]] | ||
* [[BYML|.byml]] | * [[BYML|.byml]] | ||
* [[BYML|.byaml]] | |||
* [[Mubin|.mubin]] | * [[Mubin|.mubin]] | ||
TotK has added the following extensions: | |||
* .bgyml | |||
== Tools == | == Tools == |
edits