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. |
| 0xA8 | 0x4 | Must be <2. 1 = enables usage of the following field. |
| 0xAC | 0x4 | Offset to a 0xC-byte block. |
| 0xB0 | 0x4 | Must be <2. 1 = enables usage of the following field. |
| 0xB4 | 0x4 | Offset to a 0x6-byte block. |
| 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.