CLYT format: Difference between revisions
Added properties to the txt1 section and a quick summary |
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) |
||
(4 intermediate revisions by the same user not shown) | |||
Line 157: | Line 157: | ||
|} | |} | ||
|- | |- | ||
| | |0x03||0x1||Byte||Bitfield | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 201: | Line 201: | ||
|} | |} | ||
|- | |- | ||
| | |0x01||0x1||UInt8||Source (N = Tex N, max 2) | ||
|- | |- | ||
| | |0x02||0x2||UInt8[]||Padding | ||
|} | |} | ||
TODO: tevStage, alphaCompare, blendMode, etc... | TODO: tevStage, alphaCompare, blendMode, etc... | ||
== pan1 (Pane 1) == | == 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. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 233: | Line 234: | ||
|} | |} | ||
|- | |- | ||
|0x09||0x1||UInt8||Origin | |0x09||0x1||UInt8||Origin (1 = centered, 2 = right, 3 = left, ) | ||
|- | |- | ||
|0x0A||0x1||UInt8||Alpha | |0x0A||0x1||UInt8||Alpha | ||
Line 252: | Line 253: | ||
|} | |} | ||
== pic1 (Picture 1) == | == pic1(Picture 1) == | ||
'''pic1''' represents a picture that can be displayed in a layout. The | '''pic1''' represents a picture that can be displayed in a layout. 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 261: | Line 262: | ||
! Type | ! Type | ||
! Description | ! Description | ||
|- | |||
|0x00||0x4||String||Signature (pic1) | |||
|- | |||
|0x04||0x4||UInt32||Section size (including the texture coordinates) | |||
|- | |||
! colspan="4"| Same as pan1 from 0x8 to 0x4c | |||
|- | |- | ||
|0x4C||0x4||RGBA8||Top left vertex color | |0x4C||0x4||RGBA8||Top left vertex color | ||
Line 276: | Line 283: | ||
! colspan="4"|Texture coordinates entry | ! colspan="4"|Texture coordinates entry | ||
|- | |- | ||
|0x60 + N*0x20||0x8||Vector2||Top left vertex texture coordinate | |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 | ||
|} | |} | ||
Line 299: | Line 306: | ||
|0x04||0x4||UInt32||Section size (including the textbox string) | |0x04||0x4||UInt32||Section size (including the textbox string) | ||
|- | |- | ||
! colspan="4"| | ! colspan="4"| Same as pan1 from 0x8 to 0x4c | ||
|- | |- | ||
|0x4C||0x2||Unknown||Flags | |0x4C||0x2||Unknown||Flags (H Direction?) | ||
|- | |- | ||
|0x4E||0x2||Unknown||Flags | |0x4E||0x2||Unknown||Flags (V Direction?) | ||
|- | |- | ||
|0x50||0x4||UInt32||Material ID | |0x50||0x4||UInt32||Material ID | ||
|- | |- | ||
|0x54||0x2||Unknown||Flags | |0x54||0x2||Unknown||Flags (Line alignment?) | ||
|- | |- | ||
|0x56||0x2||Unknown||Padding | |0x56||0x2||Unknown||Padding | ||
Line 324: | Line 331: | ||
|- | |- | ||
|0x74||User defined||String||Textbox text (must be multiple of 4), can be usd1 | |0x74||User defined||String||Textbox text (must be multiple of 4), can be usd1 | ||
|} | |||
== wnd1 (Window 1) == | |||
A more complex type of [[#pic1|image pane]], where the user can define the content, the corners and the sides of it, depending on what mode it's set to. | |||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Type | |||
! Description | |||
|- | |||
|0x00||0x4||String||Signature (wnd1) | |||
|- | |||
|0x04||0x4||UInt32||Section size (including the texture coordinates) | |||
|- | |||
! colspan="4"| 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) | |||
|- | |||
! colspan="4"|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 | |||
|- | |||
! colspan="4"|Window frames | |||
|- | |||
|0x(W)||0x4 * n ||UInt32|| Offsets to frame materials | |||
|- | |||
|0x(W)||0x4 * n ||Window frame|| | |||
{| class="wikitable" border="1" | |||
|- | |||
! 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. <sup><small>(From Mario Kart Wii Wiki)</small></sup> | ||
{|class="wikitable" | |||
|- | |||
! 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) == | == bnd1 (Bounding 1) == | ||
Same data structure as [[#pan1 (Pane 1)|Panes]]. | Same data structure as [[#pan1 (Pane 1)|Panes]], but used to limit interaction with buttons. | ||
{| class="wikitable" border="1" | |||
|- | |||
! Offset | |||
! Size | |||
! Type | |||
! Description | |||
|- | |||
|0x00||0x4||String||Signature (bnd1) | |||
|- | |||
|0x04||0x4||UInt32||Section size (including the texture coordinates) | |||
|- | |||
! colspan="4"| Same as pan1 from 0x8 to 0x4c | |||
|} | |||
== pas1 (Pane Start 1) == | == pas1 (Pane Start 1) == | ||
Marks the start of a pane hierarchy, with the parent being the previous pane. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 346: | Line 459: | ||
|} | |} | ||
== pae1 (Pane End 1) == | == pae1 (Pane End 1) == | ||
Marks the end of a pane hierarchy. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 359: | Line 472: | ||
|} | |} | ||
== grp1 (Group 1) == | == grp1 (Group 1) == | ||
Starts a pane group, which can be inside other pane groups. | |||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 377: | Line 491: | ||
|} | |} | ||
== grs1 (Group Start 1) == | == grs1 (Group Start 1) == | ||
Starts a group. | Starts a group hierarchy. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 390: | Line 504: | ||
|} | |} | ||
== gre1 (Group End 1) == | == gre1 (Group End 1) == | ||
Ends a group. | Ends a group hierarchy. | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 404: | Line 518: | ||
== usd1 (User Data 1) == | == usd1 (User Data 1) == | ||
Contains a | Contains a dictionary with strings as keys and variable values | ||
{| class="wikitable" border="1" | {| class="wikitable" border="1" | ||
|- | |- | ||
Line 418: | Line 532: | ||
| 0x08 || 0x4 || UInt32 || Number of entries (= N) | | 0x08 || 0x4 || UInt32 || Number of entries (= N) | ||
|- | |- | ||
| | | 0xC || 0xC * N // Variable || Entries[] || Entries | ||
|} | |} | ||
=== User Entries === | |||
Where an entry is as follows: | Where an entry is as follows: | ||
Line 432: | Line 546: | ||
! Description | ! Description | ||
|- | |- | ||
| 0x0 || 0x4 || UInt32 || Key | | 0x0 || 0x4 || UInt32 || Key offset (from start of this entry) to null-terminated ascii string that serves as key. | ||
|- | |- | ||
| 0x4 || 0x4 || UInt32 || Value | | 0x4 || 0x4 || UInt32 || Value offset (from start of this entry). | ||
|- | |- | ||
| 0x8 || 0x2 || UInt16 || | | 0x8 || 0x2 || UInt16 || Number of entries or string length. | ||
|- | |- | ||
| 0xA || 0x2 || UInt16 || Value type | | 0xA || 0x2 || UInt16 || Value type | ||
Line 454: | Line 568: | ||
==Tools== | ==Tools== | ||
* Every File Explorer | * [https://github.com/PabloMK7/EveryFileExplorer/releases/latest Every File Explorer] and [https://github.com/KillzXGaming/Switch-Toolbox Switch Toolbox] both have 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 = | ||
http://florian.nouwt.com/wiki/index.php/CLYT_%28File_Format%29 | https://wiki.tockdom.com/wiki/BRLYT_(File_Format) <br> | ||
https://github.com/Gericom/EveryFileExplorer/tree/master/3DS/NintendoWare/LYT1 | http://florian.nouwt.com/wiki/index.php/CLYT_%28File_Format%29 ([https://web.archive.org/web/20150511192058/http://florian.nouwt.com/wiki/index.php/CLYT_(File_Format) Archived]) <br> | ||
https://github.com/Gericom/EveryFileExplorer/tree/master/3DS/NintendoWare/LYT1 <br> | |||
https://github.com/KillzXGaming/Switch-Toolbox/tree/master/File_Format_Library/FileFormats/Layout/CTR/Panes <br> | |||
[[Category:File formats]] | [[Category:File formats]] |