META, XML and identifier hashes
META resources describe their own structures, enums and data blocks. A structure description gives its hashed name,
byte size and fields; each field gives a hashed name, offset, kind and referenced type. Maps (ymap) and archetype
dictionaries (ytyp) use this representation. Proven
The structural census covers every YMAP and YTYP copy in every archive: 19,941 maps and 2,869 archetype files. Every root, array and pointer decodes through the stored descriptions with no refused files or unreached data-block bytes. The proven header, field and kind descriptions below have that scope; the separate RBF examples do not. Proven · all YMAP and YTYP entries
META’s block references pack a 1-based block ID in the low 12 bits and a byte offset in the next 20 bits. An array of structures can continue at the beginning of the next block when it outgrows one block. Proven
Hash domains
Section titled “Hash domains”Schema identifiers are case-sensitive Jenkins hashes: CMapData hashes to 0xD3593FA6. Asset names normally use
lowercase joaat instead. Applying case folding to a schema identifier changes the lookup. Proven
The Jenkins one-at-a-time mix starts with h = 0. For each byte: add the byte, add h << 10, then XOR h >> 6.
After the final byte: add h << 3, XOR h >> 11, then add h << 15; additions wrap at 32 bits.
Sourced · CodeWalker
The NG cipher has a separate lookup-table-based name hash; it does not share the plain filename-hash procedure. Sourced · CodeWalker
Container descriptions
Section titled “Container descriptions”The following offsets are in the decoded resource’s system root, not in the compressed file. Proven
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 16 | bytes | resource base | Sourced | |
| 0x10 | 4 | u32 = 0x50524430 | identifier | Proven | |
| 0x14 | 2 | u16 = 0x79 | header version | Proven | |
| 0x16 | 1 | u8 | encrypted strings flag | Sourced | 0 or 1; CodeWalker's HasEncryptedStrings |
| 0x17 | 5 | bytes | unknown bytes | Unknown | zero in accepted resources |
| 0x1C | 4 | u32 | root block ID | Proven | |
| 0x20 | 8 | pointer | structure descriptions | Proven | |
| 0x28 | 8 | pointer | enum descriptions | Proven | |
| 0x30 | 8 | pointer | data block table | Proven | |
| 0x38 | 8 | pointer | name string | Proven | |
| 0x40 | 8 | pointer | encrypted strings | Sourced | CodeWalker's pointer to the encrypted strings |
| 0x48 | 2 | u16 | structure count | Proven | |
| 0x4A | 2 | u16 | enum count | Proven | |
| 0x4C | 2 | u16 | block count | Proven | |
| 0x4E | 34 | bytes | unknown tail | Unknown | zero in accepted resources |
A structure description’s word at offset 8 is an alignment code, n << 8 with n from 0 to 4 (0, 256, 512, 768,
1024), n being the base-2 logarithm of the alignment. In ragekit’s count over Legacy files it equals the alignment
of the widest field in 38,377 of 39,225 descriptions. Sourced · ragekit
| Offset | Size | Type | Field | Confidence | Notes |
|---|---|---|---|---|---|
| 0x0 | 4 | u32 | field name hash | Proven | |
| 0x4 | 4 | u32 | byte offset | Proven | |
| 0x8 | 1 | u8 | kind | Proven | |
| 0x9 | 1 | u8 | unknown | Unknown | |
| 0xA | 2 | i16 | reference index | Proven | |
| 0xC | 4 | u32 | reference key | Proven |
| Kind code | Representation | Confidence |
|---|---|---|
0x01 |
Boolean | Proven |
0x10–0x15 |
Signed/unsigned 8-, 16- and 32-bit integers, in pairs | Proven |
0x21, 0x33, 0x34 |
Float, vec3, vec4 | Proven |
0x4A |
Hash | Proven |
0x05, 0x07 |
Inline structure, structure pointer | Proven |
0x52 |
Array | Proven |
0x40, 0x44, 0x50, 0x59 |
Fixed characters, character pointer, inline data, data block | Proven |
0x60, 0x62–0x65 |
Enum/flag variants | Proven |
XML and RBF
Section titled “XML and RBF”Mount and water configuration includes text XML. Other configuration, including gtxd.ymt, uses RBF, a binary
element tree beginning with RBF0. The extension .ymt alone therefore does not identify META. Observed
RBF records use a descriptor-index byte and type byte. A previously unseen descriptor introduces a 16-bit name length and name. Element-open records carry three 16-bit words, the third counting attributes. Observed
| RBF type/marker | Value | Confidence |
|---|---|---|
0x00 |
Open element | Observed |
0x10 |
u32 | Observed |
0x20, 0x30 |
True, false | Observed |
0x40, 0x50 |
Float, three floats | Observed |
0x60 |
String with 16-bit length | Observed |
FF FF |
Close element | Observed |
FD FF |
Text, with 32-bit byte length | Observed |
Their locations are known, but zero values or a limited value range do not establish their meaning. Unknown