CLYT format

Revision as of 19:50, 3 April 2024 by LuigisDum (talk | contribs) (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))
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

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
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 EntryEdit

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 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
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 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
Value Type
0x0 String
0x1 Int
0x2 Float


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