CLYT format: Difference between revisions

Hiccup (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)
 
(9 intermediate revisions by 4 users not shown)
Line 18: Line 18:
|0x0C||0x4||UInt32||File Size
|0x0C||0x4||UInt32||File Size
|-
|-
|0x10||0x4||UInt32||Nr Sections
|0x10||0x2||UInt16||Nr Sections
|-
|0x12||0x2||UInt16||Padding
|}
|}


Line 132: Line 134:
|-
|-
|11||Use Texture Only
|11||Use Texture Only
|-
|12||Separate Blend Mode
|-
|14||Has Indirect Parameter
|-
|15-16||Nr projectionTexGenParameter
|-
|17||Has Font Shadow Parameter
|}
|}
|}
|}
Line 163: Line 157:
|}
|}
|-
|-
|0x02||0x1||Byte||Bitfield
|0x03||0x1||Byte||Bitfield
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 190: Line 184:
|}
|}


TODO: texCoordGen, tevStage, alphaCompare, blendMode, etc...
=== 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
|}
|-
|0x01||0x1||UInt8||Source (N = Tex N, max 2)
|-
|0x02||0x2||UInt8[]||Padding
|}


== pan1 (Pane 1) ==
TODO: tevStage, alphaCompare, blendMode, etc...
 
== 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 217: Line 234:
|}
|}
|-
|-
|0x09||0x1||UInt8||Origin
|0x09||0x1||UInt8||Origin (1 = centered, 2 = right, 3 = left, )
|-
|-
|0x0A||0x1||UInt8||Alpha
|0x0A||0x1||UInt8||Alpha
|-
|-
|0x0B||0x1||UInt8||Pane magnification flags
|0x0B||0x1||UInt8||Padding
{| class="wikitable" border="1"
|-
|-
!  Bit
|0x0C||0x10||String||Pane name
!  Flag
|-
|-
|0||IgnorePartsMagnify
|0x1C||0x8||String||Data
|-
|1||AdjustToPartsBounds
|}
|-
|0x0C||0x18||String||Pane name
|-
|-
|0x24||0xC||Vector3||Translation
|0x24||0xC||Vector3||Translation
Line 240: Line 250:
|0x3C||0x8||Vector2||Scale
|0x3C||0x8||Vector2||Scale
|-
|-
|0x48||0x8||Vector2||Size
|0x44||0x8||Vector2||Size
|}
|}


== pic1 (Picture 1) ==
== pic1(Picture 1) ==
'''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 253: Line 265:
|0x00||0x4||String||Signature (pic1)
|0x00||0x4||String||Signature (pic1)
|-
|-
|0x04||0x4||UInt32||Section Size
|0x04||0x4||UInt32||Section size (including the texture coordinates)
|-
! colspan="4"| Same as pan1 from 0x8 to 0x4c
|-
|-
|0x08||0x4||RGBA8||Top left vertex color
|0x4C||0x4||RGBA8||Top left vertex color
|-
|-
|0x0C||0x4||RGBA8||Top right vertex color
|0x50||0x4||RGBA8||Top right vertex color
|-
|-
|0x10||0x4||RGBA8||Bottom left vertex color
|0x54||0x4||RGBA8||Bottom left vertex color
|-
|-
|0x14||0x4||RGBA8||Bottom right vertex color
|0x58||0x4||RGBA8||Bottom right vertex color
|-
|-
|0x18||0x2||UInt16||Material ID
|0x5C||0x2||UInt16||Material ID
|-
|-
|0x1A||0x2||UInt16||Nr texture coordinates = N
|0x5E||0x2||UInt16||Nr texture coordinates = N
|-
|-
! colspan="4"|Texture coordinates entry
! colspan="4"|Texture coordinates entry
|-
|-
|0x1C + N*0x20||0x8||Vector2||Top left vertex texture coordinate
|0x60 + (N-1) * 0x20||0x8||Vector2||Top left vertex texture coordinate
|-
|-
|0x24 + N*0x20||0x8||Vector2||Top right vertex texture coordinate
|0x64 + (N-1) * 0x20||0x8||Vector2||Top right vertex texture coordinate
|-
|-
|0x2C + N*0x20||0x8||Vector2||Bottom left vertex texture coordinate
|0x68 + (N-1) * 0x20||0x8||Vector2||Bottom left vertex texture coordinate
|-
|-
|0x34 + N*0x20||0x8||Vector2||Bottom right vertex texture coordinate
|0x6C + (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"
|-
!  Offset
!  Size
!  Type
!  Description
|-
|0x00||0x4||String||Signature (txt1)
|-
|0x04||0x4||UInt32||Section size (including the textbox string)
|-
! colspan="4"| 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) ==
== 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.
== bnd1 (Bounding 1) ==
{| 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"
{| class="wikitable" border="1"
|-
|-
Line 289: Line 401:
!  Description
!  Description
|-
|-
|0x00||0x4||String||Signature (bnd1)
|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"
|-
|-
|0x04||0x4||UInt32||Section Size
! Type !! Description
|-
|-
|0x08||0x2||UInt16?||?
| 0 || None
|-
|-
|0x0A||0x2||UInt16?||?
| 1 || Flip (Horizontal)
|-
|-
|0x0C||? (0x10 up to 0x30)||String||Bounding name
| 2 || Flip (Vertical)
|-
|-
|0x3C||0x8||Vector2||?
| 3 || Rotate 90 Degrees
|-
|-
|0x44||0x4||Vector2||?
| 4 || Rotate 180 Degrees
|-
|-
|||||||
| 5 || Rotate 270 Degrees
|}
 
== bnd1 (Bounding 1) ==
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
|}
|}


== pts1 (Parts 1) ==
== pas1 (Pane Start 1) ==
== pas1 (Pane Start 1) ==
Starts a pane.
Marks the start of a pane hierarchy, with the parent being the previous pane.
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 321: Line 459:
|}
|}
== pae1 (Pane End 1) ==
== pae1 (Pane End 1) ==
Ends a pane.
Marks the end of a pane hierarchy.
{| class="wikitable" border="1"
{| class="wikitable" border="1"
|-
|-
Line 334: 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 352: 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 365: 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 377: Line 516:
|0x04||0x4||UInt32||Section Size
|0x04||0x4||UInt32||Section Size
|}
|}
== usd1 (User Data 1) ==
Contains a dictionary 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)
|-
| 0xC || 0xC * N // Variable || Entries[] || Entries
|}
=== User 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 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
{| class="wikitable" border="1"
|-
! Value
! Type
|-
| 0x0 || String
|-
| 0x1 || Int
|-
| 0x2 || Float
|}
|}


==Tools==
==Tools==
* Every File Explorer has limited support for viewing these
* [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]]