Home Menu/Themes
This page describes the formats/structure of the data stored in RomFS for Home Menu DLC, for themes.
Control Content
The control content has content-index 0. It's unknown what if any of this is Home Menu specific.
RomFS structure:
- "MetaDataContentHeader.bin": Unknown, size is 0x44-bytes.
- "ContentInfoArchive_<region>_<lang>.bin" Contains the list of all DLC content available under this DLC title(which can include DLC that's not yet accessible via the shop). <region> can be "USA", etc. <lang>, for the US title: "en", "es", "fr", and "pt".
- "icons/<decimal_id>.icn" Contains the raw DLC icon image data, without any header. 48x48 tiled RGB565.
ContentInfoArchive entry format, size 0xC8(this file contains the following entry for each of the DLC content):
Relative offset | Size | Description |
---|---|---|
0x0 | 0x4 | Content index - 1 |
0x4 | 0x4 | 0x0 = disabled, 0x1 = enabled. |
0x8 | 0x40 | char string for the title text. |
0x48 | 0x88 | char string for the description text. |
The first entry is a "header": contentindex val=1, second word = <total DLC content excluding DLC control content>. The two strings are set to dummy text.
Theme Content
RomFS structure:
Decompressed body_LZ.bin structure
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Version (Must be 1) |
0x4 | 0x1 | Unknown |
0x5 | 0x1 | 0 = disable usage of bgm.bcstm, non-zero = enable usage of bgm.bcstm. |
0x8 | 0x4 | Normally zero(not used?). |
0xC | 0x4 | Must be <4. Top screen draw type: 0 = none, 1 = solid color(see below), 2 = extension of val1(see below), 3 = texture. |
0x10 | 0x4 | Top screen frame type, when draw-type is 3: 0 = texture1, 1 = texture0, 3 = texture1. |
0x14 | 0x4 | Offset for the top screen solid color data. |
0x18 | 0x4 | Top screen texture offset, see below. |
0x1C | 0x4 | Additional top-screen texture offset, used with draw-type val2. This is optional when using draw-type val2. |
0x20 | 0x4 | Must be <4. Bottom screen draw type: 0 = none, 1 = solid color(see below), 2 = invalid, 3 = texture. |
0x24 | 0x4 | Bottom screen frame type, when draw-type is 3: 0 = texture4, 1 = texture2, 2 = texture3, 3 = texture4, 4 = texture3. |
0x28 | 0x4 | Bottom Screen Solid Color/Texture offset, see below. |
0x2C | 0x4 | Must be <2. 1 = enables usage of the following field. |
0x30 | 0x4 | Offset to a 0xC-byte block. |
0x34 | 0x4 | Must be <2. 1 = enables usage of the following field. |
0x38 | 0x4 | Offset to a 0xC-byte block. |
0x3C | 0x4 | Must be <2. 1 = enables usage of the following two fields. |
0x40 | 0x4 | Offset to the data for texture6. |
0x44 | 0x4 | Offset to the data for texture7. |
0x48 | 0x4 | Must be <2. 1 = enables usage of the following field. |
0x4C | 0x4 | Offset to a 0xD-byte block. |
0x50 | 0x4 | Must be <2. 1 = enables usage of the following two fields. |
0x54 | 0x4 | Offset to the data for texture8. |
0x58 | 0x4 | Offset to the data for texture9. |
0x5C | 0x4 | Must be <2. 1 = enables usage of the following field. |
0x60 | 0x4 | Offset to a 0xD-byte block. |
0x64 | 0x4 | Must be <2. 1 = enables usage of the following field. |
0x68 | 0x4 | Offset to a 0x9-byte block. (RGB colors for bottom screen arrows) |
0x6C | 0x4 | Must be <2. 1 = enables usage of the following two fields. |
0x70 | 0x4 | Offset to a 0x20-byte block. |
0x74 | 0x4 | Offset to a 0x20-byte block. |
0x78 | 0x4 | Must be <3. 1 = enables usage of the following field. |
0x7C | 0x4 | Offset to a 0xD-byte block. |
0x80 | 0x4 | Must be <2. 1 = enables usage of the following field. |
0x84 | 0x4 | Offset to a 0xD-byte block. |
0x88 | 0x4 | Must be <2. 1 = enables usage of the following field. |
0x8C | 0x4 | Offset to a 0x9-byte block. |
0x90 | 0x4 | Must be <2. 1 = enables usage of the following field. |
0x94 | 0x4 | Offset to a 0xD-byte block. |
0x98 | 0x4 | Must be <2. 1 = enables usage of the following field. |
0x9C | 0x4 | Offset to a 0x20-byte block. |
0xA0 | 0x4 | Must be <2. 1 = enables usage of the following field. |
0xA4 | 0x4 | Offset to a 0x15-byte block. The block contains seven RGB888 colours that affect the bottom bottom screen icon-resize and settings buttons. In order: unknown, background colour, border colour, unknown, button colour, pressed-down highlight colour, unknown. |
0xA8 | 0x4 | Must be <2. 1 = enables usage of the following field. |
0xAC | 0x4 | Offset to a 0xC-byte block. The block contains four RGB888 values, of which the first is the background colour for the "press to activate camera" overlay, and the fourth is the text colour of the same overlay. The middle two are unknown. |
0xB0 | 0x4 | Must be <2. 1 = enables usage of the following field. |
0xB4 | 0x4 | Offset to a 0x6-byte block. The block contains two RGB888 values: the background colour and text colour for the message that tells you how many demo uses you have remaining. |
0xB8 | 0x4 | Must be <2. 1 = below audio data section is used, otherwise it's not used. |
0xBC | 0x4 | Audio data section size, this must be <=0x2DC00. |
0xC0 | 0x4 | Offset for the audio data section. |
The filesize is aligned to 0x10-bytes. The filesize must be at least 0xC4-bytes, due to padding/alignment the first block of data after the header is normally located at 0xD0.
With the solid-color data, there's 5-bytes located at the solid-color data offset. With draw-type val2, there's 7-bytes located here. The first 4-bytes located here is RGBA8888 pixel data, the rest is unknown.
With draw-type val2, texture5 is also used(this likely isn't used for the entire top-screen). With draw-type val2, an extra texture with the same format/dimensions as texture5 can be used, when the additional texture offset field is set.
Frame Types
FrameType | Description |
---|---|
2 | Animated when pointer moved, split into 3 sections of 320*240 and displayed in the order 0 > 1 > 2 |
4 | Animated when pointer moved, split into 3 sections of 320*240 and displayed in the order 0 > 1 > 2 > 1 |
Textures
ID | Color format | Texture display dimensions | Texture data dimensions | Description |
---|---|---|---|---|
0 | Tiled RGB565 | 412x240 | 512x256 | This is the texture used for the top-screen background, when the frame-type is set for this one. |
1 | Tiled RGB565 | 1008x240 | 1024x256 | This is the texture used for the top-screen background, when the frame-type is set for this one. |
2 | Tiled RGB565 | 320x240 | 512x256 | This is the texture used for the bottom-screen background, when the frame-type is set for this one. |
3 | Tiled RGB565 | 960x240 | 1024x256 | This is the texture used for the bottom-screen background, when the frame-type is set for this one. |
4 | Tiled RGB565 | 1008x240 | 1024x256 | This is the texture used for the bottom-screen background, when the frame-type is set for this one. |
5 | Tiled A8 | 64x64 | 64x64 | This is used with the top-screen when top-screen draw-type is val2, see above. |
6 | Tiled BGR888 | 74x64 | 128x64 | This is used for folder's on the main menu. |
7 | Tiled BGR888 | 82x64 | 128x64 | This is used for open folder's on the main menu. |
8 | Tiled BGR888 | 36x72 | 64x128 | This is used for 48x48 icon borders on the main menu. |
9 | Tiled BGR888 | 25x50 | 32x64 | This is used for 24x24 icon borders on the main menu. |
Audio data section
Offset | Size | Description |
---|---|---|
0x0 | 0x4 | Unknown |
0x4 | 0x4 | Unknown |
0x8 | Beginning of the audio data entries. |
The audio data section contains the sound effects for this theme.
Audio data entry structure:
Offset | Size | Description |
---|---|---|
0x0 | Y (see below) | Additional data for CWAV 6, see below. |
Y + 0x0 | 0x4 | CWAV size. |
Y + 0x4 | 0x4 | Unknown |
Y + 0x8 | X (see below) | Additional data for CWAV 4, see below. |
Y + 0x8 + X | CWAV |
Structure of the data starting at offset 0x0, from the above entry, for the additional data with CWAV 7:
Relative offset | Size | Description |
---|---|---|
0x0 | 0x10 | ? |
Y / the size of this block, is 0x10-bytes.
Structure of the data starting at offset 0x8, from the above entry, for the additional data with CWAV 4:
Relative offset | Size | Description |
---|---|---|
0x0 | 0x2C | ? |
X / the size of this block, is 0x2C-bytes.
It's unknown how exactly the number of CWAVs is controlled. The CWAVs are used for the following:
- 0: Cursor movement
- 1: Application launch
- 2: Certain buttons
- 3: Cancel buttons
- 4: When cursor would be moved off the screen, left/right
- 5: When cursor is moved a screen-worth of icons across
- 6: Folder buttons
Built-in themes
The built-in themes are stored at Home Menu RomFS:/theme/<Color>_LZ.bin, the format appears to be the same as body_LZ.bin in the theme DLC content.