Datasheet: Difference between revisions
clarifications
imported>Leoetlino (→Value: Nullable strings) |
imported>Leoetlino (clarifications) |
||
Line 2: | Line 2: | ||
'''GSHT''' (G?sheet) is a custom Grezzo binary serialization file format that is used to store structured, strongly typed data. GSHT documents are called '''datasheets'''. | '''GSHT''' (G?sheet) is a custom Grezzo binary serialization file format that is used to store structured, strongly typed data. GSHT documents are called '''datasheets'''. | ||
A datasheet contains structure type information followed by arrays of structures. Optionally, one of the structure fields may be declared as a key field, in which case the contents are a dictionary rather than a array. | A datasheet contains structure type information followed by arrays of structures. Optionally, one of the structure fields may be declared as a key field, in which case the contents are treated as a dictionary/mapping rather than a array. | ||
== Format == | == Format == | ||
Documents are little endian and their sizes are always 0x10 | Documents are little endian and their sizes are always rounded up to be a multiple of 0x10. | ||
Pointers are encoded as absolute offsets and relocated when the document is loaded by the game. | Pointers are encoded as absolute offsets and relocated when the document is loaded by the game. | ||
Line 57: | Line 57: | ||
|0x2C | |0x2C | ||
|u32 | |u32 | ||
| | |Size of each value | ||
|} | |} | ||
Line 76: | Line 76: | ||
IsArray = 1 << 1, | IsArray = 1 << 1, | ||
IsKey = 1 << 2, | IsKey = 1 << 2, | ||
b3 = 1 << 3, | b3 = 1 << 3, // unknown | ||
IsEnum = 1 << 4, | IsEnum = 1 << 4, | ||
b5 = 1 << 5, | b5 = 1 << 5, // unknown | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 108: | Line 108: | ||
|0x14 | |0x14 | ||
|u16 | |u16 | ||
| | |Offset of this field in the value structure | ||
|- | |- | ||
|0x16 | |0x16 | ||
|u16 | |u16 | ||
| | |Size of this field in the value structure | ||
For strings and arrays, this is always 0x10. | |||
|- | |- | ||
|0x18 | |0x18 | ||
|u16 | |u16 | ||
| | |Size of the data | ||
For strings and inline types (inline structs, ints, floats, bools), this is the same as the size in the value structure. | |||
|- | |- | ||
|0x1A | |0x1A | ||
|u16 | |u16 | ||
| | |[For structs] Number of fields | ||
|- | |- | ||
|0x20 | |0x20 | ||
|Field* | |Field* | ||
| | |[For structs] Fields | ||
|- | |- | ||
|0x28 | |0x28 | ||
Line 137: | Line 141: | ||
=== Value === | === Value === | ||
Combining all the root fields gives a structure (in the sense of a C or C++ structure). That structure is called a Value in this documentation. | |||
{| class="wikitable" | {| class="wikitable" |