CLYT format

Revision as of 00:15, 24 October 2021 by LuigisDum (talk | contribs) (Added another tool (Clypo) and links to both tools' Github pages)

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
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*0x20 0x8 Vector2 Top left vertex texture coordinate
0x60 + N*0x20 0x8 Vector2 Top right vertex texture coordinate
0x60 + N*0x20 0x8 Vector2 Bottom left vertex texture coordinate
0x60 + N*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