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)
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)
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
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
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)
|
|
0x02 |
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
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
Value
|
Meaning
|
0 |
2x4 matrix
|
|
0x08 |
0x1 |
UInt8 |
Source (N = Tex N, max 2)
|
0x0C |
0x2 |
UInt8[] |
Padding
|
TODO: tevStage, alphaCompare, blendMode, etc...
pan1 (Pane 1)
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
|
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 previous 0x4C bytes are all defined the same as pan1.
Offset
|
Size
|
Type
|
Description
|
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
|
0x60 + (N-1) * 0x20 |
0x8 |
Vector2 |
Top right vertex texture coordinate
|
0x60 + (N-1) * 0x20 |
0x8 |
Vector2 |
Bottom left vertex texture coordinate
|
0x60 + (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)
|
Duplicate of pan1 from 0x8 to 0x4c
|
0x4C |
0x2 |
Unknown |
Flags
|
0x4E |
0x2 |
Unknown |
Flags
|
0x50 |
0x4 |
UInt32 |
Material ID
|
0x54 |
0x2 |
Unknown |
Flags
|
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)
bnd1 (Bounding 1)
Same data structure as Panes.
pas1 (Pane Start 1)
Starts a pane.
Offset
|
Size
|
Type
|
Description
|
0x00 |
0x4 |
String |
Signature (pas1)
|
0x04 |
0x4 |
UInt32 |
Section Size
|
pae1 (Pane End 1)
Ends a pane.
Offset
|
Size
|
Type
|
Description
|
0x00 |
0x4 |
String |
Signature (pae1)
|
0x04 |
0x4 |
UInt32 |
Section Size
|
grp1 (Group 1)
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.
Offset
|
Size
|
Type
|
Description
|
0x00 |
0x4 |
String |
Signature (grs1)
|
0x04 |
0x4 |
UInt32 |
Section Size
|
gre1 (Group End 1)
Ends a group.
Offset
|
Size
|
Type
|
Description
|
0x00 |
0x4 |
String |
Signature (gre1)
|
0x04 |
0x4 |
UInt32 |
Section Size
|
usd1 (User Data 1)
Contains a map 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)
|
0x12 |
0x12 * N |
Entries[] |
Entries
|
0x12 + 0x12 * N |
? |
Variable |
Values referred to by the 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
|
0x4 |
0x4 |
UInt32 |
Value: offset (from start of this entry) to a value (type decided by last field)
|
0x8 |
0x2 |
UInt16 |
Amount or, if a string, the length of the value(s)
|
0xA |
0x2 |
UInt16 |
Value type
Value
|
Type
|
0x0 |
String
|
0x1 |
Int
|
0x2 |
Float
|
|
Tools
- Every File Explorer has 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
http://florian.nouwt.com/wiki/index.php/CLYT_%28File_Format%29
https://github.com/Gericom/EveryFileExplorer/tree/master/3DS/NintendoWare/LYT1