TSCB: Difference between revisions
imported>Leoetlino mNo edit summary |
imported>Zephenryus m (→Header: Updated header specification to match current research.) |
||
Line 14: | Line 14: | ||
|4 | |4 | ||
|String | |String | ||
|TSCB file signature (magic) | |TSCB file signature (magic) <code>54 53 43 42</code> or "TSCB" | ||
|- | |- | ||
|0x04 | |0x04 | ||
|4 | |4 | ||
|Unsigned Int | |Unsigned Int | ||
|TSCB version? | |TSCB version? <code>0A 00 00 00</code> or "10.0.0.0"<ref>U-King.elf:0x024D2F8C-0x024D300A holds two error messages: "【データロード】メジャーバージョンの不一致" ("[Data load] Major version mismatch") and "【データロード】マイナーバージョンの不一致" ("[Data Load] Minor version mismatch")</ref> | ||
|- | |- | ||
|0x08 | |0x08 | ||
|4 | |4 | ||
|Unsigned Int | |Unsigned Int | ||
|Unknown. | |Unknown. Always <code>00 00 00 01</code>. Game crashes on load screen if not equal to <code>00 00 00 01</code>. | ||
|- | |- | ||
|0x0c | |0x0c | ||
Line 34: | Line 34: | ||
|4 | |4 | ||
|Float | |Float | ||
| | |<code>world_scale</code> <code>500.0</code>. Scales the terrain along the x- and z-axis. | ||
|- | |- | ||
|0x14 | |0x14 | ||
|4 | |4 | ||
|Float | |Float | ||
| | |Terrain mesh altitude <code>800.0</code>. Moves the terrain along the y-axis (vertically). | ||
|- | |- | ||
|0x18 | |0x18 | ||
Line 64: | Line 64: | ||
|4 | |4 | ||
|Float | |Float | ||
| | |Tile size. Used by the area array. | ||
|- | |- | ||
|0x2c | |0x2c | ||
|4 | |4 | ||
|Unsigned Int | |Unsigned Int | ||
|Unknown | |Unknown <code>00 00 00 08</code>. <ref>Values <code>1</code>, <code>2</code>, <code>4</code>, <code>5</code>, <code>6</code>, <code>8</code> affects textures. <code>0</code>, <code>3</code>, <code>7</code>, <code>15</code>, <code>16</code> will crash the game.</ref> | ||
|} | |} | ||
== Material Information Array == | == Material Information Array == |
Revision as of 04:22, 28 September 2018
Terrain scene binary (TSCB) files describe terrain areas layout and terrain materials.
TSCB File Specification
Header
Offset (h) | Size | Data Type | Description |
---|---|---|---|
0x00 | 4 | String | TSCB file signature (magic) 54 53 43 42 or "TSCB"
|
0x04 | 4 | Unsigned Int | TSCB version? 0A 00 00 00 or "10.0.0.0"[1]
|
0x08 | 4 | Unsigned Int | Unknown. Always 00 00 00 01 . Game crashes on load screen if not equal to 00 00 00 01 .
|
0x0c | 4 | Unsigned Int | file_base table relative offset |
0x10 | 4 | Float | world_scale 500.0 . Scales the terrain along the x- and z-axis.
|
0x14 | 4 | Float | Terrain mesh altitude 800.0 . Moves the terrain along the y-axis (vertically).
|
0x18 | 4 | Unsigned Int | material_info_array length (number of elements in the array) |
0x1c | 4 | Unsigned Int | area_array length (number of elements in the array) |
0x20 | 4 | Unsigned Int | Probably padding |
0x24 | 4 | Unsigned Int | Probably padding |
0x28 | 4 | Float | Tile size. Used by the area array. |
0x2c | 4 | Unsigned Int | Unknown 00 00 00 08 . [2]
|
Material Information Array
Header
The material information header is one value, the section size. This includes the index table and the value table.
Offset (h) | Size | Data Type | Description |
---|---|---|---|
0x00 | 4 | Unsigned Int | Material info section size in bytes |
Material Information Array Lookup Table
Following the header is a table of relative offsets to each entry in material_info_array
Offset (h) | Size | Data Type | Description |
---|---|---|---|
0x00 | 4 | Unsigned Int | Relative offset to array entry |
Material Information Value Table
Each entry in the array contains an index and four attributes
Offset (h) | Size | Data Type | Description |
---|---|---|---|
0x00 | 4 | Unsigned Int | Array index (mat_index) |
0x04 | 4 | Float | Unknown. values range from 0.03-0.59. |
0x08 | 4 | Float | Unknown. values range from 0.03-0.59. |
0x0c | 4 | Float | Unknown. values range from 0-1. |
0x10 | 4 | Float | Unknown. values range from 0.2-1.63 |
Area Array
Area Array Lookup Table
Following the material information section is a table of relative offsets to each entry in area_array
Offset (h) | Size | Data Type | Description |
---|---|---|---|
0x00 | 4 | Unsigned Int | Relative offset to array entry |
Area Array Value Table
Each entry contains meta data for one tile in the terrain scene. There are multiple levels of detail (LOD) for the terrain.
Entries range from 0x30 to 0x54 depending on the size of extra_info_array
Offset (h) | Size | Data Type | Description |
---|---|---|---|
0x00 | 4 | Float | X Position |
0x04 | 4 | Float | Z Position |
0x08 | 4 | Float | Scale? |
0x0c | 4 | Float | area_min_height_ground |
0x10 | 4 | Float | area_max_height_ground |
0x14 | 4 | Float | area_min_height_water |
0x18 | 4 | Float | area_max_height_water |
0x1c | 4 | Unsigned Int | Unknown. Usually 0, 1 or 2 |
0x20 | 4 | Unsigned Int | file_base. Relative offset to file base name string |
0x24 | 4 | Unsigned Int | Unknown. Usually 0. |
0x28 | 4 | Unsigned Int | Unknown. Usually 0. |
0x2c | 4 | Unsigned Int | ref_extra. It seems to be a flag to indicate if there is an attached extra_info_array |
Extra Information Array
if ref_extra does not equal 0 there is an extra_info_array attached to this area. The array is 4 or 8 values long.
Every area includes a .hght and .mate file. The extra_info_array indicates if there is an additional .water.extm and / or .grass.extm file
Offset (h) | Size | Data Type | Description |
---|---|---|---|
0x30 | 4 | Unsigned Int | extra_info_array length. Number of elements in array. |
0x34 | 4 | Unsigned Int | Unknown. Usually 20 or 3. |
0x38 | 4 | Unsigned Int | Unknown. Usually 0, 1 or 3. |
0x3c | 4 | Unsigned Int | Unknown. Usually 0 or 1. |
0x40 | 4 | Unsigned Int | Unknown. Usually 0 or 1. |
0x44 | 4 | Unsigned Int | Unknown. Always 0. |
0x48 | 4 | Unsigned Int | Unknown. Always 3 |
0x4c | 4 | Unsigned Int | Unknown. Usually 0 or 1. |
0x50 | 4 | Unsigned Int | Unknown. Always 1. |
[20, 3, 0, 1, 0, 3, 1, 1] = water, grass [20, 3, 1, 1, 0, 3, 0, 1] = water, grass [ 3, 1, 1, 0] = water [ 3, 0, 1, 0] = grass