CLYT format: Difference between revisions
|  Section added about USD1 panes |  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) | ||
| (6 intermediate revisions by 2 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: | ||
| |} | |} | ||
| TODO:  | === 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 | |||
| |} | |||
| TODO: tevStage, alphaCompare, blendMode, etc... | |||
| == pan1 (Pane 1) == | == 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 377: | Line 518: | ||
| == usd1 (User Data 1) == | == usd1 (User Data 1) == | ||
| Contains a  | Contains a dictionary with strings as keys and variable values | ||
| {| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| |- | |- | ||
| Line 391: | Line 532: | ||
| | 0x08 || 0x4 || UInt32 || Number of entries (= N) | | 0x08 || 0x4 || UInt32 || Number of entries (= N) | ||
| |- | |- | ||
| |  | | 0xC || 0xC * N // Variable || Entries[] || Entries | ||
| |} | |} | ||
| === User Entries === | |||
| Where an entry is as follows: | Where an entry is as follows: | ||
| Line 405: | Line 546: | ||
| ! Description | ! Description | ||
| |- | |- | ||
| | 0x0 || 0x4 || UInt32 || Key | | 0x0 || 0x4 || UInt32 || Key offset (from start of this entry) to null-terminated ascii string that serves as key. | ||
| |- | |- | ||
| | 0x4 || 0x4 || UInt32 || Value | | 0x4 || 0x4 || UInt32 || Value offset (from start of this entry). | ||
| |- | |- | ||
| | 0x8 ||  | | 0x8 || 0x2 || UInt16 || Number of entries or string length.  | ||
| |- | |- | ||
| |  | | 0xA || 0x2 || UInt16 || Value type | ||
| {| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
| |- | |- | ||
| ! Value | ! Value | ||
| ! Type | |||
| |- | |- | ||
| |  | | 0x0 || String | ||
| |- | |- | ||
| | Int ||  | | 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 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
| 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)
| 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)
| 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)
| 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)
| 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
| Offset | Size | Type | Description | ||||||
|---|---|---|---|---|---|---|---|---|---|
| 0x00 | 0x2 | UInt16 | Texture Index | ||||||
| 0x02 | 0x1 | Byte | Bitfield 
 | ||||||
| 0x03 | 0x1 | Byte | Bitfield 
 | 
Texture Matrix Entry
| Offset | Size | Type | Description | 
|---|---|---|---|
| 0x00 | 0x8 | Vector2 | Translation | 
| 0x08 | 0x4 | Single | Rotation | 
| 0x0C | 0x8 | Vector2 | Scale | 
Texture Coordinate Generation Entry
| 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)
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)
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)
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)
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)
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)
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)
Marks the end of a pane hierarchy.
| Offset | Size | Type | Description | 
|---|---|---|---|
| 0x00 | 0x4 | String | Signature (pae1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
grp1 (Group 1)
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)
Starts a group hierarchy.
| Offset | Size | Type | Description | 
|---|---|---|---|
| 0x00 | 0x4 | String | Signature (grs1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
gre1 (Group End 1)
Ends a group hierarchy.
| Offset | Size | Type | Description | 
|---|---|---|---|
| 0x00 | 0x4 | String | Signature (gre1) | 
| 0x04 | 0x4 | UInt32 | Section Size | 
usd1 (User Data 1)
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
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
- 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
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