BYML: Difference between revisions

339 bytes added ,  4 years ago
add ACNH and v4 info
imported>NiceneNerd
imported>Leoetlino
(add ACNH and v4 info)
Line 1: Line 1:
<onlyinclude>'''BYML''' is a simplified, binary form of [[wikipedia:YAML|YAML]].</onlyinclude>
<onlyinclude>'''BYML''' is a simplified, binary form of [[wikipedia:YAML|YAML]].</onlyinclude>


Only the version 2 and 3 formats are documented in this article.
Only the version 2+ format is documented in this article.


== Structure ==
== Structure ==
Line 14: Line 14:
| align="center" | 0x00
| align="center" | 0x00
| align="center" | 2
| align="center" | 2
| String “BY” (big endian) or “YB” (little endian) in ASCII (file identifier).
| “BY” (big endian) or “YB” (little endian).
|-
|-
| align="center" | 0x02
| align="center" | 0x02
| align="center" | 2
| align="center" | 2
| Version 0x0002 in Breath of the Wild. Values of 1 and 3 are accepted as well.
| Version 0x0002 in ''Breath of the Wild''. 1, 3 and 4 are also valid version numbers.
|-
|-
| align="center" | 0x04
| align="center" | 0x04
Line 40: Line 40:
! align="center" width="8%" | Identifier
! align="center" width="8%" | Identifier
! align="center" width="17%" | Type
! align="center" width="17%" | Type
! width="73%" | Description
! width="63%" | Description
! width="10%" | Version
|-
|-
| align="center" | 0xA0
| align="center" | 0xA0
| align="center" | Value (Index)
| align="center" | Value (Index)
| String. Value is an index into the string table.
| String. Value is an index into the string table.
| 2+
|-
| align="center" | 0xA1
| align="center" | Container
| Binary data.
| 4+
|-
|-
| align="center" | 0xC0
| align="center" | 0xC0
| align="center" | Container
| align="center" | Container
| Array. Node is an array of nodes, typically, though not necessarily, all of the same format.
| Array. Node is an array of nodes, typically, though not necessarily, all of the same format.
| 2+
|-
|-
| align="center" | 0xC1
| align="center" | 0xC1
| align="center" | Container
| align="center" | Container
| Hash. Node is a mapping from strings in the hash key table to other nodes.
| Hash. Node is a mapping from strings in the hash key table to other nodes.
| 2+
|-
|-
| align="center" | 0xC2
| align="center" | 0xC2
| align="center" | Container (Special)
| align="center" | Container (Special)
| String table. Special purpose node type only seen in the hash key table and the string table.
| String table. Special purpose node type only seen in the hash key table and the string table.
| 2+
|-
|-
| align="center" | 0xD0
| align="center" | 0xD0
| align="center" | Value
| align="center" | Value
| Bool. Node is 1 or 0 representing true or false respectively.
| Bool. Node is 1 or 0 representing true or false respectively.
| 2+
|-
|-
| align="center" | 0xD1
| align="center" | 0xD1
| align="center" | Value
| align="center" | Value
| Int. Node is a signed 32 bit integer value.
| Int. Node is a signed 32 bit integer value.
| 2+
|-
|-
| align="center" | 0xD2
| align="center" | 0xD2
| align="center" | Value
| align="center" | Value
| Float. Node is a binary32 floating-point number.
| Float. Node is a binary32 floating-point number.
| 2+
|-
|-
| align="center" | 0xD3
| align="center" | 0xD3
| align="center" | Value
| align="center" | Value
| UInt. Node is an unsigned 32 bit integer value. The game uses this for some CRC32 hashes and for masks.
| UInt. Node is an unsigned 32 bit integer value. The game uses this for some CRC32 hashes and for masks.
| 2+
|-
|-
| align="center" | 0xD4
| align="center" | 0xD4
| align="center" | Value (Special)
| align="center" | Value (Special)
| Int64. Node is a 64 bit integer value. Not seen in Breath of the Wild.
| Int64. Node is a 64 bit integer value.
| 3+
|-
|-
| align="center" | 0xD5
| align="center" | 0xD5
| align="center" | Value (Special)
| align="center" | Value (Special)
| UInt64. Node is an unsigned 64 bit integer value. Not seen in Breath of the Wild.
| UInt64. Node is an unsigned 64 bit integer value.
| 3+
|-
|-
| align="center" | 0xD6
| align="center" | 0xD6
| align="center" | Value (Special)
| align="center" | Value (Special)
| Double. Node is a binary64 floating-point number. Not seen in Breath of the Wild.
| Double. Node is a binary64 floating-point number.
| 3+
|-
|-
| align="center" | 0xFF
| align="center" | 0xFF
| align="center" | Value
| align="center" | Value
| Null. Value is always 0. Not seen in Breath of the Wild.
| Null. Value is always 0.
| 3+
|}
|}


Line 98: Line 116:


For special value nodes, the value is an offset to a 64 bit integer / floating-point number relative to the start of the file.
For special value nodes, the value is an offset to a 64 bit integer / floating-point number relative to the start of the file.
==== 0xA1 - Binary Data Node ====
{| class="wikitable"
! align="center" | Offset
! align="center" | Size
! Description
|-
| align="center" | 0x00
| align="center" | 4
| Data length
|-
| align="center" | 0x04
| align="center" | variable
| Data
|}


==== 0xC0 - Array Node ====
==== 0xC0 - Array Node ====
Line 197: Line 230:
| ''Breath of the Wild'' (Switch) || Little endian || 2 || Uses SMO's library (in al::), but with unused code and support for big endian eliminated
| ''Breath of the Wild'' (Switch) || Little endian || 2 || Uses SMO's library (in al::), but with unused code and support for big endian eliminated
|-
|-
| ''Super Mario Odyssey'' (Switch) || Little endian (supports big endian as well) || 2 or 3 ||
| ''Super Mario Odyssey'' (Switch) || Little endian (supports big endian as well) || 3 ||
|-
| ''Splatoon 2'' (Switch) || Little endian (supports big endian as well) || 3? || Uses SMO's library, but in the Lp::Utl:: namespace
|-
|-
| ''Splatoon 2'' (Switch) || Little endian (supports big endian as well) || 2 or 3 || Uses SMO's library, but in the Lp::Utl:: namespace
| ''Animal Crossing: New Horizons'' (Switch) || Little endian (supports big endian as well) || 4 ||
|}
|}


Anonymous user