Difference between revisions of "CLYT format"
Shibboleet (talk | contribs) (Edit the picture documentation to properly show inheritance from PAN1.) |
(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)) |
||
(7 intermediate revisions by 3 users not shown) | |||
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 243: | Line 253: | ||
|} | |} | ||
− | == pic1 (Picture 1) == | + | == pic1(Picture 1) == |
− | '''pic1''' represents a picture that can be displayed in a layout. The | + | '''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 252: | Line 262: | ||
! Type | ! Type | ||
! Description | ! Description | ||
+ | |- | ||
+ | |0x00||0x4||String||Signature (pic1) | ||
+ | |- | ||
+ | |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 | |0x4C||0x4||RGBA8||Top left vertex color | ||
Line 267: | Line 283: | ||
! colspan="4"|Texture coordinates entry | ! colspan="4"|Texture coordinates entry | ||
|- | |- | ||
− | |0x60 + N*0x20||0x8||Vector2||Top left vertex texture coordinate | + | |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 287: | 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 319: | 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 332: | 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 350: | 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 363: | 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 375: | 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== | ==Tools== | ||
− | * Every File Explorer | + | * [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 formats]] | [[Category:File formats]] |
Latest revision as of 20: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.
HeaderEdit
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 EntryEdit
Offset | Size | Type | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
0x00 | 0x2 | UInt16 | Texture Index | ||||||
0x02 | 0x1 | Byte | Bitfield
| ||||||
0x03 | 0x1 | Byte | Bitfield
|
Texture Matrix EntryEdit
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x8 | Vector2 | Translation |
0x08 | 0x4 | Single | Rotation |
0x0C | 0x8 | Vector2 | Scale |
Texture Coordinate Generation EntryEdit
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 EntriesEdit
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
|
ToolsEdit
- 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 alsoEdit
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