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.
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)
#
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.
0x00 | 0x14 | String | Material Name |
0x14 | 0x4 | RGBA8 | Tev Color (Buffer Color?) |
0x18 | 0x18 | RGBA8[6] | Tev Constant Colors |
0x30 | 0x4 | UInt32 | Flags / bitfield0-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
#
0x00 | 0x2 | UInt16 | Texture Index |
0x02 | 0x1 | Byte | Bitfield0-1 | Wrap S (Clamp = 0, Repeat = 1, Mirror = 2) | 2-3 | Min Filter (0 = Near, 1 = Linear) |
|
0x03 | 0x1 | Byte | Bitfield0-1 | Wrap T (Clamp = 0, Repeat = 1, Mirror = 2) | 2-3 | Mag Filter (0 = Near, 1 = Linear) |
|
Texture Matrix Entry
#
Offset | Size | Type | Description |
---|
0x00 | 0x8 | Vector2 | Translation |
0x08 | 0x4 | Single | Rotation |
0x0C | 0x8 | Vector2 | Scale |
Texture Coordinate Generation Entry
#
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.
0x00 | 0x4 | String | Signature (pan1) |
0x04 | 0x4 | UInt32 | Section Size |
0x08 | 0x1 | UInt8 | Flags0 | 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)
#
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.
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 | 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)
#
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:
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 |
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
Category:File formats