Difference between revisions of "Home Menu/Themes"

From 3dbrew
Jump to navigation Jump to search
(Undo revision 11360 by Rei (talk))
Line 157: Line 157:
 
| 0x68
 
| 0x68
 
| 0x4
 
| 0x4
| Offset to a 0x9-byte block. (3 RGB colors for the GUI)
+
| Offset to a 0x9-byte block.
 
|-
 
|-
 
| 0x6C
 
| 0x6C

Revision as of 07:02, 4 January 2015

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:

  • "bgm.bcstm": Background music, see here.
  • "body_LZ.bin": LZ11 compressed blob containing the rest of the theme data(graphics + optional CWAVs).

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.
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.