Difference between revisions of "CLYT format"
(Created page with "CLYT (.bclyt) is the layout format used on the 3DS. It stands for ('''B'''inary) '''C'''TR '''L'''a'''y'''ou'''t''', and is similar to the RLYT format used on the Wii. == Head...") |
m (→txt1 (Text 1): changed flags) |
||
(10 intermediate revisions by 6 users not shown) | |||
Line 1: | Line 1: | ||
− | CLYT (.bclyt) is the layout format used on the 3DS. It stands for ('''B'''inary) '''C'''TR '''L'''a'''y'''ou'''t''', and is similar to the RLYT format used on the Wii. | + | '''CLYT''' (.bclyt) is the layout format used on the 3DS. It stands for ('''B'''inary) '''C'''TR '''L'''a'''y'''ou'''t''', and is similar to the RLYT format used on the Wii. |
== Header == | == Header == | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
Line 18: | Line 18: | ||
|0x0C||0x4||UInt32||File Size | |0x0C||0x4||UInt32||File Size | ||
|- | |- | ||
− | |0x10|| | + | |0x10||0x2||UInt16||Nr Sections |
+ | |- | ||
+ | |0x12||0x2||UInt16||Padding | ||
|} | |} | ||
Line 132: | Line 134: | ||
|- | |- | ||
|11||Use Texture Only | |11||Use Texture Only | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
|} | |} | ||
|} | |} | ||
Line 190: | Line 184: | ||
|} | |} | ||
− | TODO: | + | === 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 | ||
+ | |} | ||
+ | |- | ||
+ | |0x08||0x1||UInt8||Source (N = Tex N, max 2) | ||
+ | |- | ||
+ | |0x0C||0x2||UInt8[]||Padding | ||
+ | |} | ||
+ | |||
+ | TODO: tevStage, alphaCompare, blendMode, etc... | ||
== pan1 (Pane 1) == | == pan1 (Pane 1) == | ||
Line 221: | Line 237: | ||
|0x0A||0x1||UInt8||Alpha | |0x0A||0x1||UInt8||Alpha | ||
|- | |- | ||
− | |0x0B||0x1||UInt8|| | + | |0x0B||0x1||UInt8||Padding |
− | |||
|- | |- | ||
− | + | |0x0C||0x10||String||Pane name | |
− | |||
− | | | ||
− | | | ||
− | | | ||
− | | | ||
− | |||
|- | |- | ||
− | | | + | |0x1C||0x8||String||Data |
|- | |- | ||
|0x24||0xC||Vector3||Translation | |0x24||0xC||Vector3||Translation | ||
Line 240: | Line 249: | ||
|0x3C||0x8||Vector2||Scale | |0x3C||0x8||Vector2||Scale | ||
|- | |- | ||
− | | | + | |0x44||0x8||Vector2||Size |
|} | |} | ||
== pic1 (Picture 1) == | == pic1 (Picture 1) == | ||
+ | '''pic1''' represents a picture that can be displayed in a layout. The previous 0x4C bytes are all defined the same as [[CLYT_format#pan1_.28Pane_1.29|pan1]]. | ||
+ | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 251: | Line 262: | ||
! Description | ! 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 |
− | |||
− | |||
− | |||
− | |||
|- | |- | ||
! colspan="4"|Texture coordinates entry | ! colspan="4"|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) == | == 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" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 289: | Line 295: | ||
! Description | ! Description | ||
|- | |- | ||
− | |0x00||0x4||String||Signature ( | + | |0x00||0x4||String||Signature (txt1) |
+ | |- | ||
+ | |0x04||0x4||UInt32||Section size (including the textbox string) | ||
+ | |- | ||
+ | ! colspan="4"|Duplicate of 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) == |
+ | |||
+ | == bnd1 (Bounding 1) == | ||
+ | Same data structure as [[#pan1 (Pane 1)|Panes]]. | ||
+ | |||
== pas1 (Pane Start 1) == | == pas1 (Pane Start 1) == | ||
Starts a pane. | Starts a pane. | ||
Line 377: | Line 402: | ||
|0x04||0x4||UInt32||Section Size | |0x04||0x4||UInt32||Section Size | ||
|} | |} | ||
+ | |||
+ | == usd1 (User Data 1) == | ||
+ | Contains a map with strings as keys and variable values | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 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: | ||
+ | |||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! 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 | ||
+ | {| class="wikitable" border="1" | ||
+ | |- | ||
+ | ! Value | ||
+ | ! Type | ||
+ | |- | ||
+ | | 0x0 || String | ||
+ | |- | ||
+ | | 0x1 || Int | ||
+ | |- | ||
+ | | 0x2 || Float | ||
+ | |} | ||
+ | |} | ||
+ | |||
+ | |||
+ | ==Tools== | ||
+ | * [https://github.com/mariohackandglitch/EveryFileExplorer/releases/latest Every File Explorer] has 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 = | ||
Line 382: | Line 461: | ||
https://github.com/Gericom/EveryFileExplorer/tree/master/3DS/NintendoWare/LYT1 | https://github.com/Gericom/EveryFileExplorer/tree/master/3DS/NintendoWare/LYT1 | ||
− | [[Category:File | + | [[Category:File formats]] |
Latest revision as of 11:30, 26 February 2022
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
| ||||||
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
|
Texture Map Entry[edit]
Offset | Size | Type | Description | ||||||
---|---|---|---|---|---|---|---|---|---|
0x00 | 0x2 | UInt16 | Texture Index | ||||||
0x02 | 0x1 | Byte | Bitfield
| ||||||
0x02 | 0x1 | Byte | Bitfield
|
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
| ||||
0x08 | 0x1 | UInt8 | Source (N = Tex N, max 2) | ||||
0x0C | 0x2 | UInt8[] | Padding |
TODO: tevStage, alphaCompare, blendMode, etc...
pan1 (Pane 1)[edit]
Offset | Size | Type | Description | ||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
0x00 | 0x4 | String | Signature (pan1) | ||||||||
0x04 | 0x4 | UInt32 | Section Size | ||||||||
0x08 | 0x1 | UInt8 | Flags
| ||||||||
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)[edit]
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)[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) |
Duplicate of 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]
bnd1 (Bounding 1)[edit]
Same data structure as Panes.
pas1 (Pane Start 1)[edit]
Starts a pane.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (pas1) |
0x04 | 0x4 | UInt32 | Section Size |
pae1 (Pane End 1)[edit]
Ends a pane.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (pae1) |
0x04 | 0x4 | UInt32 | Section Size |
grp1 (Group 1)[edit]
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.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (grs1) |
0x04 | 0x4 | UInt32 | Section Size |
gre1 (Group End 1)[edit]
Ends a group.
Offset | Size | Type | Description |
---|---|---|---|
0x00 | 0x4 | String | Signature (gre1) |
0x04 | 0x4 | UInt32 | Section Size |
usd1 (User Data 1)[edit]
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
|
Tools[edit]
- 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[edit]
http://florian.nouwt.com/wiki/index.php/CLYT_%28File_Format%29 https://github.com/Gericom/EveryFileExplorer/tree/master/3DS/NintendoWare/LYT1