Difference between revisions of "CLYT format"

From 3dbrew
Jump to navigation Jump to search
(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||0x4||UInt32||Nr Sections
+
|0x10||0x2||UInt16||Nr Sections
 +
|-
 +
|0x12||0x2||UInt16||Padding
 
|}
 
|}
  
Line 132: Line 134:
 
|-
 
|-
 
|11||Use Texture Only
 
|11||Use Texture Only
|-
 
|12||Separate Blend Mode
 
|-
 
|14||Has Indirect Parameter
 
|-
 
|15-16||Nr projectionTexGenParameter
 
|-
 
|17||Has Font Shadow Parameter
 
 
|}
 
|}
 
|}
 
|}
Line 163: Line 157:
 
|}
 
|}
 
|-
 
|-
|0x02||0x1||Byte||Bitfield
+
|0x03||0x1||Byte||Bitfield
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
Line 190: Line 184:
 
|}
 
|}
  
TODO: texCoordGen, tevStage, alphaCompare, blendMode, etc...
+
=== 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||Pane magnification flags
+
|0x0B||0x1||UInt8||Padding
{| class="wikitable" border="1"
 
 
|-
 
|-
!  Bit
+
|0x0C||0x10||String||Pane name
!  Flag
 
|-
 
|0||IgnorePartsMagnify
 
 
|-
 
|-
|1||AdjustToPartsBounds
+
|0x1C||0x8||String||Data
|}
 
|-
 
|0x0C||0x18||String||Pane name
 
 
|-
 
|-
 
|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 previous 0x4C bytes are all defined by '''pan1'''.
+
'''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
 
|-
 
|-
|0x60 + N*0x20||0x8||Vector2||Top right vertex texture coordinate
+
|0x64 + (N-1) * 0x20||0x8||Vector2||Top right vertex texture coordinate
 
|-
 
|-
|0x60 + N*0x20||0x8||Vector2||Bottom left vertex texture coordinate
+
|0x68 + (N-1) * 0x20||0x8||Vector2||Bottom left vertex texture coordinate
 
|-
 
|-
|0x60 + N*0x20||0x8||Vector2||Bottom right 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.
== bnd1 (Bounding 1) ==
+
 +
{| 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
 
|-
 
|-
|0x00||0x4||String||Signature (bnd1)
+
|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)
 
|-
 
|-
|0x04||0x4||UInt32||Section Size
+
| 3 || Rotate 90 Degrees
 
|-
 
|-
|0x08||0x2||UInt16?||?
+
| 4 || Rotate 180 Degrees
 
|-
 
|-
|0x0A||0x2||UInt16?||?
+
| 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"
 
|-
 
|-
|0x0C||? (0x10 up to 0x30)||String||Bounding name
+
!  Offset
 +
!  Size
 +
!  Type
 +
!  Description
 
|-
 
|-
|0x3C||0x8||Vector2||?
+
|0x00||0x4||String||Signature (bnd1)
 
|-
 
|-
|0x44||0x4||Vector2||?
+
|0x04||0x4||UInt32||Section size (including the texture coordinates)
 
|-
 
|-
|⋮||⋮||⋮||⋮
+
! colspan="4"| Same as pan1 from 0x8 to 0x4c
 
|}
 
|}
  
== pts1 (Parts 1) ==
 
 
== pas1 (Pane Start 1) ==
 
== pas1 (Pane Start 1) ==
Starts a pane.
+
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) ==
Ends a pane.
+
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 map with strings as keys and variable values
+
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)
 
|-
 
|-
| 0x12 || 0x12 * N || Entries[] || Entries
+
| 0xC || 0xC * N // Variable || Entries[] || Entries
|-
 
| 0x12 + 0x12 * N || ? || Variable || Values referred to by the 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: offset (from start of this entry) to null-terminated ascii string
+
| 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) to a value (type decided by last field)
+
| 0x4 || 0x4 || UInt32 || Value offset (from start of this entry).
 
|-
 
|-
| 0x8 || 0x4 || UInt16 || Amount or, if a string, the length of the value(s)
+
| 0x8 || 0x2 || UInt16 || Number of entries or string length.
 
|-
 
|-
| 0x10 || 0x2 || UInt16 || Value type
+
| 0xA || 0x2 || UInt16 || Value type
|}
 
 
 
Where the value type can be one of the following:
 
 
{| class="wikitable" border="1"
 
{| class="wikitable" border="1"
 
|-
 
|-
! Name
 
 
! Value
 
! Value
 +
! Type
 
|-
 
|-
| String || 0x0
+
| 0x0 || String
 
|-
 
|-
| Int || 0x1
+
| 0x1 || Int
 +
|-
 +
| 0x2 || Float
 +
|}
 
|}
 
|}
Note: this table likely is incomplete.
+
 
  
 
==Tools==
 
==Tools==
* Every File Explorer has limited support for viewing these
+
* [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[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
Value Meaning
0 Classic
1 Normal
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
Bit Flag / data
0-1 Nr texMap
2-3 Nr texMatrix
4-5 Nr texCoordGen
6-8 Nr tevStage
9 Has alphaCompare
10 Has blendMode
11 Use Texture Only

Texture Map Entry[edit]

Offset Size Type Description
0x00 0x2 UInt16 Texture Index
0x02 0x1 Byte Bitfield
Bit Data
0-1 Wrap S (Clamp = 0, Repeat = 1, Mirror = 2)
2-3 Min Filter (0 = Near, 1 = Linear)
0x03 0x1 Byte Bitfield
Bit Data
0-1 Wrap T (Clamp = 0, Repeat = 1, Mirror = 2)
2-3 Mag Filter (0 = Near, 1 = Linear)

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
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)[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
Bit Flag
0 Visible
1 InfluencedAlpha
2 LocationAdjust
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
Offset Size Type 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. (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
Value Type
0x0 String
0x1 Int
0x2 Float


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