Difference between revisions of "CLYT format"
(Created page with "CLYT (.bclyt) is the layout format used on the 3DS. It stands for ('''B'''inary) '''C'''TR '''L'''a'''y'''ou'''t''', and is similar to the RLYT format used on the Wii. == Head...") |
(Updated description and information of multiple sections and added info on wnd1 and bnd1, while also fixing an error in usd1. Added links to more sources (Mario Kart Wii Wiki & Switch Toolbox) and updated old links (EFE and florian.nouwt)) |
||
(11 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | CLYT (.bclyt) is the layout format used on the 3DS. It stands for ('''B'''inary) '''C'''TR '''L'''a'''y'''ou'''t''', and is similar to the RLYT format used on the Wii. | + | '''CLYT''' (.bclyt) is the layout format used on the 3DS. It stands for ('''B'''inary) '''C'''TR '''L'''a'''y'''ou'''t''', and is similar to the RLYT format used on the Wii. |
== Header == | == Header == | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 18: | Line 18: | ||
|0x0C||0x4||UInt32||File Size | |0x0C||0x4||UInt32||File Size | ||
|- | |- | ||
− | |0x10|| | + | |0x10||0x2||UInt16||Nr Sections |
+ | |- | ||
+ | |0x12||0x2||UInt16||Padding | ||
|} | |} | ||
Line 132: | Line 134: | ||
|- | |- | ||
|11||Use Texture Only | |11||Use Texture Only | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
|} | |} | ||
Line 163: | Line 157: | ||
|} | |} | ||
|- | |- | ||
− | | | + | |0x03||0x1||Byte||Bitfield |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 190: | Line 184: | ||
|} | |} | ||
− | + | === Texture Coordinate Generation Entry === | |
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | |0x00||0x1||UInt8||Type | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Value | ||
+ | ! Meaning | ||
+ | |- | ||
+ | |0||2x4 matrix | ||
+ | |} | ||
+ | |- | ||
+ | |0x01||0x1||UInt8||Source (N = Tex N, max 2) | ||
+ | |- | ||
+ | |0x02||0x2||UInt8[]||Padding | ||
+ | |} | ||
− | == pan1 (Pane 1) == | + | TODO: tevStage, alphaCompare, blendMode, etc... |
+ | |||
+ | == pan1(Pane 1) == | ||
+ | Defines a Null pane, used mostly to keep panes grouped in hierarchies or to control the children of a given pan1 without having to do so individually. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 217: | Line 234: | ||
|} | |} | ||
|- | |- | ||
− | |0x09||0x1||UInt8||Origin | + | |0x09||0x1||UInt8||Origin (1 = centered, 2 = right, 3 = left, ) |
|- | |- | ||
|0x0A||0x1||UInt8||Alpha | |0x0A||0x1||UInt8||Alpha | ||
|- | |- | ||
− | |0x0B||0x1||UInt8|| | + | |0x0B||0x1||UInt8||Padding |
− | |||
|- | |- | ||
− | + | |0x0C||0x10||String||Pane name | |
− | |||
|- | |- | ||
− | | | + | |0x1C||0x8||String||Data |
− | |||
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
|0x24||0xC||Vector3||Translation | |0x24||0xC||Vector3||Translation | ||
Line 240: | Line 250: | ||
|0x3C||0x8||Vector2||Scale | |0x3C||0x8||Vector2||Scale | ||
|- | |- | ||
− | | | + | |0x44||0x8||Vector2||Size |
|} | |} | ||
− | == pic1 (Picture 1) == | + | == pic1(Picture 1) == |
+ | '''pic1''' represents a picture that can be displayed in a layout. The first 0x4C bytes are defined the same as [[CLYT_format#pan1_(Pane_1)|pan1]] with minor differences. | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 253: | Line 265: | ||
|0x00||0x4||String||Signature (pic1) | |0x00||0x4||String||Signature (pic1) | ||
|- | |- | ||
− | |0x04||0x4||UInt32||Section | + | |0x04||0x4||UInt32||Section size (including the texture coordinates) |
+ | |- | ||
+ | ! colspan="4"| Same as pan1 from 0x8 to 0x4c | ||
|- | |- | ||
− | | | + | |0x4C||0x4||RGBA8||Top left vertex color |
|- | |- | ||
− | | | + | |0x50||0x4||RGBA8||Top right vertex color |
|- | |- | ||
− | | | + | |0x54||0x4||RGBA8||Bottom left vertex color |
|- | |- | ||
− | | | + | |0x58||0x4||RGBA8||Bottom right vertex color |
|- | |- | ||
− | | | + | |0x5C||0x2||UInt16||Material ID |
|- | |- | ||
− | | | + | |0x5E||0x2||UInt16||Nr texture coordinates = N |
|- | |- | ||
! colspan="4"|Texture coordinates entry | ! colspan="4"|Texture coordinates entry | ||
|- | |- | ||
− | | | + | |0x60 + (N-1) * 0x20||0x8||Vector2||Top left vertex texture coordinate |
|- | |- | ||
− | | | + | |0x64 + (N-1) * 0x20||0x8||Vector2||Top right vertex texture coordinate |
|- | |- | ||
− | | | + | |0x68 + (N-1) * 0x20||0x8||Vector2||Bottom left vertex texture coordinate |
|- | |- | ||
− | | | + | |0x6C + (N-1) * 0x20||0x8||Vector2||Bottom right vertex texture coordinate |
|} | |} | ||
== txt1 (Text 1) == | == txt1 (Text 1) == | ||
+ | A textbox used in layouts. | ||
+ | The first 0x4C bytes are defined the same as [[CLYT_format#pan1_(Pane_1)|pan1]] with minor differences. | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | |0x00||0x4||String||Signature (txt1) | ||
+ | |- | ||
+ | |0x04||0x4||UInt32||Section size (including the textbox string) | ||
+ | |- | ||
+ | ! colspan="4"| Same as pan1 from 0x8 to 0x4c | ||
+ | |- | ||
+ | |0x4C||0x2||Unknown||Flags (H Direction?) | ||
+ | |- | ||
+ | |0x4E||0x2||Unknown||Flags (V Direction?) | ||
+ | |- | ||
+ | |0x50||0x4||UInt32||Material ID | ||
+ | |- | ||
+ | |0x54||0x2||Unknown||Flags (Line alignment?) | ||
+ | |- | ||
+ | |0x56||0x2||Unknown||Padding | ||
+ | |- | ||
+ | |0x58||0x4||UInt32||Offset from signature to beginning of the string | ||
+ | |- | ||
+ | |0x5C||0x4||RGBA8||Font top color | ||
+ | |- | ||
+ | |0x60||0x4||RGBA8||Font bottom color | ||
+ | |- | ||
+ | |0x64||0x8||Vector2||Font scale | ||
+ | |- | ||
+ | |0x6C||0x4||Float||Horizontal font spacing | ||
+ | |- | ||
+ | |0x70||0x4||Float||Vertical font spacing | ||
+ | |- | ||
+ | |0x74||User defined||String||Textbox text (must be multiple of 4), can be usd1 | ||
+ | |} | ||
+ | |||
== wnd1 (Window 1) == | == wnd1 (Window 1) == | ||
− | + | A more complex type of [[#pic1|image pane]], where the user can define the content, the corners and the sides of it, depending on what mode it's set to. | |
− | == | + | |
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | |0x00||0x4||String||Signature (wnd1) | ||
+ | |- | ||
+ | |0x04||0x4||UInt32||Section size (including the texture coordinates) | ||
+ | |- | ||
+ | ! colspan="4"| Same as pan1 from 0x8 to 0x4c | ||
+ | |- | ||
+ | |0x4C||0x4||float||Coordinate 1 | ||
+ | |- | ||
+ | |0x50||0x4||float||Coordinate 2 | ||
+ | |- | ||
+ | |0x54||0x4||float||Coordinate 3 | ||
+ | |- | ||
+ | |0x58||0x4||float||Coordinate 4 | ||
+ | |- | ||
+ | |0x5C||0x1||Byte|| Number of frames (n) | ||
+ | |- | ||
+ | |0x5D||0x1||Byte||Flag | ||
+ | |- | ||
+ | |0x5E||0x2||UInt16||Padding | ||
+ | |- | ||
+ | |0x60||0x4||UInt32||Window content offset (Points to 0x68) | ||
+ | |- | ||
+ | |0x64||0x4||UInt32||Window frame offsets, offset to offsets of the materials for the frames. (W) | ||
+ | |- | ||
+ | |0x68||0x4||RGBA8||Content box top left vertex color | ||
+ | |- | ||
+ | |0x6C||0x4||RGBA8||Content box top right vertex color | ||
+ | |- | ||
+ | |0x70||0x4||RGBA8||Content box bottom left vertex color | ||
+ | |- | ||
+ | |0x74||0x4||RGBA8||Content box bottom right vertex color | ||
+ | |- | ||
+ | |0x78||0x2||UInt16||Content box Material ID | ||
+ | |- | ||
+ | |0x7A||0x2||UInt16||Number of Texture coordinates (N) | ||
+ | |- | ||
+ | ! colspan="4"|Texture coordinates entry | ||
+ | |- | ||
+ | |0x7C + (N-1) * 0x20||0x8||Vector2||Top left vertex texture coordinate | ||
+ | |- | ||
+ | |0x84 + (N-1) * 0x20||0x8||Vector2||Top right vertex texture coordinate | ||
+ | |- | ||
+ | |0x8C + (N-1) * 0x20||0x8||Vector2||Bottom left vertex texture coordinate | ||
+ | |- | ||
+ | |0x94 + (N-1) * 0x20||0x8||Vector2||Bottom right vertex texture coordinate | ||
+ | |- | ||
+ | ! colspan="4"|Window frames | ||
+ | |- | ||
+ | |0x(W)||0x4 * n ||UInt32|| Offsets to frame materials | ||
+ | |- | ||
+ | |0x(W)||0x4 * n ||Window frame|| | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 289: | Line 401: | ||
! Description | ! Description | ||
|- | |- | ||
− | | | + | |0x0||UInt16||0x2||Frame Material ID |
+ | |- | ||
+ | |0x2||Byte||0x1||Flip Type | ||
+ | |- | ||
+ | |0x3||Byte||0x1||Padding | ||
+ | |} | ||
+ | |} | ||
+ | |||
+ | Below is a table of possible material flip types. <sup><small>(From Mario Kart Wii Wiki)</small></sup> | ||
+ | |||
+ | {|class="wikitable" | ||
|- | |- | ||
− | + | ! Type !! Description | |
|- | |- | ||
− | | | + | | 0 || None |
|- | |- | ||
− | | | + | | 1 || Flip (Horizontal) |
|- | |- | ||
− | | | + | | 2 || Flip (Vertical) |
|- | |- | ||
− | | | + | | 3 || Rotate 90 Degrees |
|- | |- | ||
− | | | + | | 4 || Rotate 180 Degrees |
|- | |- | ||
− | | | + | | 5 || Rotate 270 Degrees |
+ | |} | ||
+ | |||
+ | == bnd1 (Bounding 1) == | ||
+ | Same data structure as [[#pan1 (Pane 1)|Panes]], but used to limit interaction with buttons. | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | |0x00||0x4||String||Signature (bnd1) | ||
+ | |- | ||
+ | |0x04||0x4||UInt32||Section size (including the texture coordinates) | ||
+ | |- | ||
+ | ! colspan="4"| Same as pan1 from 0x8 to 0x4c | ||
|} | |} | ||
− | |||
== pas1 (Pane Start 1) == | == pas1 (Pane Start 1) == | ||
− | + | Marks the start of a pane hierarchy, with the parent being the previous pane. | |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 321: | Line 459: | ||
|} | |} | ||
== pae1 (Pane End 1) == | == pae1 (Pane End 1) == | ||
− | + | Marks the end of a pane hierarchy. | |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 334: | Line 472: | ||
|} | |} | ||
== grp1 (Group 1) == | == grp1 (Group 1) == | ||
+ | Starts a pane group, which can be inside other pane groups. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 352: | Line 491: | ||
|} | |} | ||
== grs1 (Group Start 1) == | == grs1 (Group Start 1) == | ||
− | Starts a group. | + | Starts a group hierarchy. |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 365: | Line 504: | ||
|} | |} | ||
== gre1 (Group End 1) == | == gre1 (Group End 1) == | ||
− | Ends a group. | + | Ends a group hierarchy. |
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 377: | Line 516: | ||
|0x04||0x4||UInt32||Section Size | |0x04||0x4||UInt32||Section Size | ||
|} | |} | ||
+ | |||
+ | == usd1 (User Data 1) == | ||
+ | Contains a dictionary with strings as keys and variable values | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x00 || 0x4 || String || Signature (usd1) | ||
+ | |- | ||
+ | | 0x04 || 0x4 || UInt32 || Section Size | ||
+ | |- | ||
+ | | 0x08 || 0x4 || UInt32 || Number of entries (= N) | ||
+ | |- | ||
+ | | 0xC || 0xC * N // Variable || Entries[] || Entries | ||
+ | |} | ||
+ | |||
+ | === User Entries === | ||
+ | |||
+ | Where an entry is as follows: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Offset | ||
+ | ! Size | ||
+ | ! Type | ||
+ | ! Description | ||
+ | |- | ||
+ | | 0x0 || 0x4 || UInt32 || Key offset (from start of this entry) to null-terminated ascii string that serves as key. | ||
+ | |- | ||
+ | | 0x4 || 0x4 || UInt32 || Value offset (from start of this entry). | ||
+ | |- | ||
+ | | 0x8 || 0x2 || UInt16 || Number of entries or string length. | ||
+ | |- | ||
+ | | 0xA || 0x2 || UInt16 || Value type | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Value | ||
+ | ! Type | ||
+ | |- | ||
+ | | 0x0 || String | ||
+ | |- | ||
+ | | 0x1 || Int | ||
+ | |- | ||
+ | | 0x2 || Float | ||
+ | |} | ||
+ | |} | ||
+ | |||
+ | |||
+ | ==Tools== | ||
+ | * [https://github.com/PabloMK7/EveryFileExplorer/releases/latest Every File Explorer] and [https://github.com/KillzXGaming/Switch-Toolbox Switch Toolbox] both have limited support for viewing these. | ||
+ | * [https://github.com/pleonex/Clypo/releases Clypo] allows exporting these files to yml and importing back to bclyt but it only supports scale, size, translation and rotation of panes. | ||
= See also = | = See also = | ||
− | http://florian.nouwt.com/wiki/index.php/CLYT_%28File_Format%29 | + | https://wiki.tockdom.com/wiki/BRLYT_(File_Format) <br> |
− | https://github.com/Gericom/EveryFileExplorer/tree/master/3DS/NintendoWare/LYT1 | + | http://florian.nouwt.com/wiki/index.php/CLYT_%28File_Format%29 ([https://web.archive.org/web/20150511192058/http://florian.nouwt.com/wiki/index.php/CLYT_(File_Format) Archived]) <br> |
+ | https://github.com/Gericom/EveryFileExplorer/tree/master/3DS/NintendoWare/LYT1 <br> | ||
+ | https://github.com/KillzXGaming/Switch-Toolbox/tree/master/File_Format_Library/FileFormats/Layout/CTR/Panes <br> | ||
+ | |||
− | [[Category:File | + | [[Category:File formats]] |
Latest revision as of 19:50, 3 April 2024
CLYT (.bclyt) is the layout format used on the 3DS. It stands for (Binary) CTR Layout, and is similar to the RLYT format used on the Wii.
Header[edit]
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (CLYT) |
0x04 | 0x2 | UInt16 | Byte Order Mark |
0x06 | 0x2 | UInt16 | Header Length |
0x08 | 0x4 | UInt32 | Revision |
0x0C | 0x4 | UInt32 | File Size |
0x10 | 0x2 | UInt16 | Nr Sections |
0x12 | 0x2 | UInt16 | Padding |
lyt1 (Layout 1)[edit]
Offset | Size | Type | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
0x00 | 0x4 | String | Signature (lyt1) | ||||||
0x04 | 0x4 | UInt32 | Section Size | ||||||
0x08 | 0x4 | UInt32 | Origin type
| ||||||
0x0C | 0x8 | Vector2 | Canvas Size |
txl1 (Texture List 1)[edit]
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (txl1) |
0x04 | 0x4 | UInt32 | Section Size |
0x08 | 0x4 | UInt32 | Nr Textures = N |
0x0C | N * 4 | UInt32[] | Texture Name Offsets (relative to the start of this array) |
After this, the null terminated names follow.
fnl1 (Font List 1)[edit]
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (fnl1) |
0x04 | 0x4 | UInt32 | Section Size |
0x08 | 0x4 | UInt32 | Nr Fonts = N |
0x0C | N * 4 | UInt32[] | Font Name Offsets (relative to the start of this array) |
After this, the null terminated names follow.
mat1 (Materials 1)[edit]
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (mat1) |
0x04 | 0x4 | UInt32 | Section Size |
0x08 | 0x4 | UInt32 | Nr Materials = N |
0x0C | N * 4 | UInt32[] | Material Entry Offsets (relative to the start of this section) |
After this, the material entries follow.
Offset | Size | Type | Description | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00 | 0x14 | String | Material Name | ||||||||||||||||
0x14 | 0x4 | RGBA8 | Tev Color (Buffer Color?) | ||||||||||||||||
0x18 | 0x18 | RGBA8[6] | Tev Constant Colors | ||||||||||||||||
0x30 | 0x4 | UInt32 | Flags / bitfield
|
Texture Map Entry[edit]
Offset | Size | Type | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
0x00 | 0x2 | UInt16 | Texture Index | ||||||
0x02 | 0x1 | Byte | Bitfield
| ||||||
0x03 | 0x1 | Byte | Bitfield
|
Texture Matrix Entry[edit]
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x8 | Vector2 | Translation |
0x08 | 0x4 | Single | Rotation |
0x0C | 0x8 | Vector2 | Scale |
Texture Coordinate Generation Entry[edit]
Offset | Size | Type | Description | ||||
---|---|---|---|---|---|---|---|
0x00 | 0x1 | UInt8 | Type
| ||||
0x01 | 0x1 | UInt8 | Source (N = Tex N, max 2) | ||||
0x02 | 0x2 | UInt8[] | Padding |
TODO: tevStage, alphaCompare, blendMode, etc...
pan1(Pane 1)[edit]
Defines a Null pane, used mostly to keep panes grouped in hierarchies or to control the children of a given pan1 without having to do so individually.
Offset | Size | Type | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0x00 | 0x4 | String | Signature (pan1) | ||||||||
0x04 | 0x4 | UInt32 | Section Size | ||||||||
0x08 | 0x1 | UInt8 | Flags
| ||||||||
0x09 | 0x1 | UInt8 | Origin (1 = centered, 2 = right, 3 = left, ) | ||||||||
0x0A | 0x1 | UInt8 | Alpha | ||||||||
0x0B | 0x1 | UInt8 | Padding | ||||||||
0x0C | 0x10 | String | Pane name | ||||||||
0x1C | 0x8 | String | Data | ||||||||
0x24 | 0xC | Vector3 | Translation | ||||||||
0x30 | 0xC | Vector3 | Rotation | ||||||||
0x3C | 0x8 | Vector2 | Scale | ||||||||
0x44 | 0x8 | Vector2 | Size |
pic1(Picture 1)[edit]
pic1 represents a picture that can be displayed in a layout. The first 0x4C bytes are defined the same as pan1 with minor differences.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (pic1) |
0x04 | 0x4 | UInt32 | Section size (including the texture coordinates) |
Same as pan1 from 0x8 to 0x4c | |||
0x4C | 0x4 | RGBA8 | Top left vertex color |
0x50 | 0x4 | RGBA8 | Top right vertex color |
0x54 | 0x4 | RGBA8 | Bottom left vertex color |
0x58 | 0x4 | RGBA8 | Bottom right vertex color |
0x5C | 0x2 | UInt16 | Material ID |
0x5E | 0x2 | UInt16 | Nr texture coordinates = N |
Texture coordinates entry | |||
0x60 + (N-1) * 0x20 | 0x8 | Vector2 | Top left vertex texture coordinate |
0x64 + (N-1) * 0x20 | 0x8 | Vector2 | Top right vertex texture coordinate |
0x68 + (N-1) * 0x20 | 0x8 | Vector2 | Bottom left vertex texture coordinate |
0x6C + (N-1) * 0x20 | 0x8 | Vector2 | Bottom right vertex texture coordinate |
txt1 (Text 1)[edit]
A textbox used in layouts. The first 0x4C bytes are defined the same as pan1 with minor differences.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (txt1) |
0x04 | 0x4 | UInt32 | Section size (including the textbox string) |
Same as pan1 from 0x8 to 0x4c | |||
0x4C | 0x2 | Unknown | Flags (H Direction?) |
0x4E | 0x2 | Unknown | Flags (V Direction?) |
0x50 | 0x4 | UInt32 | Material ID |
0x54 | 0x2 | Unknown | Flags (Line alignment?) |
0x56 | 0x2 | Unknown | Padding |
0x58 | 0x4 | UInt32 | Offset from signature to beginning of the string |
0x5C | 0x4 | RGBA8 | Font top color |
0x60 | 0x4 | RGBA8 | Font bottom color |
0x64 | 0x8 | Vector2 | Font scale |
0x6C | 0x4 | Float | Horizontal font spacing |
0x70 | 0x4 | Float | Vertical font spacing |
0x74 | User defined | String | Textbox text (must be multiple of 4), can be usd1 |
wnd1 (Window 1)[edit]
A more complex type of image pane, where the user can define the content, the corners and the sides of it, depending on what mode it's set to.
Offset | Size | Type | Description | ||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x00 | 0x4 | String | Signature (wnd1) | ||||||||||||||||
0x04 | 0x4 | UInt32 | Section size (including the texture coordinates) | ||||||||||||||||
Same as pan1 from 0x8 to 0x4c | |||||||||||||||||||
0x4C | 0x4 | float | Coordinate 1 | ||||||||||||||||
0x50 | 0x4 | float | Coordinate 2 | ||||||||||||||||
0x54 | 0x4 | float | Coordinate 3 | ||||||||||||||||
0x58 | 0x4 | float | Coordinate 4 | ||||||||||||||||
0x5C | 0x1 | Byte | Number of frames (n) | ||||||||||||||||
0x5D | 0x1 | Byte | Flag | ||||||||||||||||
0x5E | 0x2 | UInt16 | Padding | ||||||||||||||||
0x60 | 0x4 | UInt32 | Window content offset (Points to 0x68) | ||||||||||||||||
0x64 | 0x4 | UInt32 | Window frame offsets, offset to offsets of the materials for the frames. (W) | ||||||||||||||||
0x68 | 0x4 | RGBA8 | Content box top left vertex color | ||||||||||||||||
0x6C | 0x4 | RGBA8 | Content box top right vertex color | ||||||||||||||||
0x70 | 0x4 | RGBA8 | Content box bottom left vertex color | ||||||||||||||||
0x74 | 0x4 | RGBA8 | Content box bottom right vertex color | ||||||||||||||||
0x78 | 0x2 | UInt16 | Content box Material ID | ||||||||||||||||
0x7A | 0x2 | UInt16 | Number of Texture coordinates (N) | ||||||||||||||||
Texture coordinates entry | |||||||||||||||||||
0x7C + (N-1) * 0x20 | 0x8 | Vector2 | Top left vertex texture coordinate | ||||||||||||||||
0x84 + (N-1) * 0x20 | 0x8 | Vector2 | Top right vertex texture coordinate | ||||||||||||||||
0x8C + (N-1) * 0x20 | 0x8 | Vector2 | Bottom left vertex texture coordinate | ||||||||||||||||
0x94 + (N-1) * 0x20 | 0x8 | Vector2 | Bottom right vertex texture coordinate | ||||||||||||||||
Window frames | |||||||||||||||||||
0x(W) | 0x4 * n | UInt32 | Offsets to frame materials | ||||||||||||||||
0x(W) | 0x4 * n | Window frame |
|
Below is a table of possible material flip types. (From Mario Kart Wii Wiki)
Type | Description |
---|---|
0 | None |
1 | Flip (Horizontal) |
2 | Flip (Vertical) |
3 | Rotate 90 Degrees |
4 | Rotate 180 Degrees |
5 | Rotate 270 Degrees |
bnd1 (Bounding 1)[edit]
Same data structure as Panes, but used to limit interaction with buttons.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (bnd1) |
0x04 | 0x4 | UInt32 | Section size (including the texture coordinates) |
Same as pan1 from 0x8 to 0x4c |
pas1 (Pane Start 1)[edit]
Marks the start of a pane hierarchy, with the parent being the previous pane.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (pas1) |
0x04 | 0x4 | UInt32 | Section Size |
pae1 (Pane End 1)[edit]
Marks the end of a pane hierarchy.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (pae1) |
0x04 | 0x4 | UInt32 | Section Size |
grp1 (Group 1)[edit]
Starts a pane group, which can be inside other pane groups.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (grp1) |
0x04 | 0x4 | UInt32 | Section Size |
0x08 | 0x10 | String | Group Name |
0x18 | 0x4 | UInt32 | Nr Pane References (=N) |
0x1C | 0x10 * N | String[N] | Pane References |
grs1 (Group Start 1)[edit]
Starts a group hierarchy.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (grs1) |
0x04 | 0x4 | UInt32 | Section Size |
gre1 (Group End 1)[edit]
Ends a group hierarchy.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (gre1) |
0x04 | 0x4 | UInt32 | Section Size |
usd1 (User Data 1)[edit]
Contains a dictionary with strings as keys and variable values
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (usd1) |
0x04 | 0x4 | UInt32 | Section Size |
0x08 | 0x4 | UInt32 | Number of entries (= N) |
0xC | 0xC * N // Variable | Entries[] | Entries |
User Entries[edit]
Where an entry is as follows:
Offset | Size | Type | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0x0 | 0x4 | UInt32 | Key offset (from start of this entry) to null-terminated ascii string that serves as key. | ||||||||
0x4 | 0x4 | UInt32 | Value offset (from start of this entry). | ||||||||
0x8 | 0x2 | UInt16 | Number of entries or string length. | ||||||||
0xA | 0x2 | UInt16 | Value type
|
Tools[edit]
- Every File Explorer and Switch Toolbox both have limited support for viewing these.
- Clypo allows exporting these files to yml and importing back to bclyt but it only supports scale, size, translation and rotation of panes.
See also[edit]
https://wiki.tockdom.com/wiki/BRLYT_(File_Format)
http://florian.nouwt.com/wiki/index.php/CLYT_%28File_Format%29 (Archived)
https://github.com/Gericom/EveryFileExplorer/tree/master/3DS/NintendoWare/LYT1
https://github.com/KillzXGaming/Switch-Toolbox/tree/master/File_Format_Library/FileFormats/Layout/CTR/Panes