Changes

5,190 bytes added ,  3 April
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)
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 243: Line 253:  
|}
 
|}
   −
== pic1 (Picture 1) ==
+
== pic1(Picture 1) ==
'''pic1''' represents a picture that can be displayed in a layout. The previous 0x4C bytes are all defined by '''pan1'''.
+
'''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 252: 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 267: 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
 
|-
 
|-
|0x60 + N*0x20||0x8||Vector2||Top right vertex texture coordinate
+
|0x64 + (N-1) * 0x20||0x8||Vector2||Top right vertex texture coordinate
 
|-
 
|-
|0x60 + N*0x20||0x8||Vector2||Bottom left vertex texture coordinate
+
|0x68 + (N-1) * 0x20||0x8||Vector2||Bottom left vertex texture coordinate
 
|-
 
|-
|0x60 + 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 287: 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 319: 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 332: 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 350: 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 363: 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 375: 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]]
7

edits