Difference between revisions of "Opening.bnr"

From WiiBrew
Jump to navigation Jump to search
Line 145: Line 145:
| C  
| C  
| icefire  
| icefire  
| Adds IMET/IMD5 headers to U8 files.  
| Adds IMET/IMD5 headers to U8 files. IMET is partially broken.  

Revision as of 06:59, 21 March 2009

Opening.bnr is a file related to Wii homebrew development. The file is one of the first read by the Wii when a new DVD is inserted, and it is used to display the banner (the channel animation). Even though it shares the name with the file on the GameCube, the content of the file has no resemblance to the GC Opening.bnr file.


Opening.bnr consists of two parts, an IMET header which is (almost) identical to the latter of part A (starting from Zeroes_1) in Content.bin (see Content.bin file structure). However, the last 16 bytes contain some randomly-looking bytes, most likely an MD5 sum.

Opening.bnr is also stored in the console specific encrypted area of content.bin (a copy of icon.bin is in the SD encrypted area). For some of the channels a generic opening.bnr (which doesn't resemble the actual banner) is stored in the NAND under the \META tree as TITLE.MET. Their purpose is unknown. The proper ones can be found in the unencrypted NAND as one of the .app files, however currently there doesn't appear to be any logic to which one is which. Also some of those the offset to the IMET header is at 0x80 instead of 0x40.

After the header follows an U8 archive. This is an archive consisting of the following contents:

Full Path Description
/meta/ Directory
/meta/banner.bin Contains the images and animation displayed when the channel is selected.
/meta/icon.bin Contains the images and animation displayed when the channel is in the menu.
/meta/sound.bin Contains the audio that is played when the channel is selected.

banner.bin and icon.bin

The banner.bin and icon.bin files are LZ77 compressed U8 archives themselves, each with an IMD5 header, containing the MD5 of the file.

More information on LZ77 compression can be found on Wikipedia. Example C# source is available in the Tools and Example Source section.

The banner.bin and icon.bin U8 archives have a file format like this:


TPL Files

The TPL files are textures. They can be read by the tplx program from the gcube library.

The format is also described in YAGCD at http://pabut.homeip.net:8000/yagcd/chap14.html#sec14.4.

brlan Files

brlan files are described in the Wii Animations section.

brlyt Files (Layout)

brlyt files are described in the Wii Animations section.


sound.bin has an IMD5 header, currently 3 formats have been discovered.

Format Hex Identifier Description
BNS 0x42 0x4E 0x53 0x20 (BNS ) Similar to the brstm format, always in the NGC-DSP ADPCM format, supports having an intro sound and a loop point.
WAV 0x52 0x49 0x46 0x46 (RIFF) Standard wav/pcm format, only plays once. Can be LZ77 compressed.
AIFF 0x46 0x4F 0x52 0x4D (FORM) Standard AIFF/pcm format, only plays once. Can be LZ77 compressed.

Header Formats


typedef struct {
	u32 imd5; // 'IMD5'
	u32 filesize; //size of rest of file
	u8 zeroes[8]; //padding
	u8 crypto[16]; //MD5 of rest of file
} IMD5;


typedef struct {
    u8 zeroes[128]; // padding
    u32 imet; // "IMET"
    u8 unk[8];  // 0x0000060000000003 fixed, unknown purpose
    u32 sizes[3]; // icon.bin, banner.bin, sound.bin
    u32 flag1; // unknown
	u8 names[7][84]; // JP, EN, DE, FR, ES, IT, NL
    u8 zeroes_2[0x348]; // padding
    u8 crypto[16]; // MD5 of 0x40 to 0x640 in header. crypto should be all 0's when calculating final MD5

Tools and Example Source

Name Language Author Description
parse-opening.c C magicus Extracts the contents of the opening.bnr file to a file structure.
LZ77 Python Marcan Decompresses LZ77 files.
LZ77Stream.cs C# Atacama C# Stream object for decompressing LZ77 Files.
BNRSound.cs C# Atacama C# Class which processes sound.bin so it can be read as PCM data.
tplx C monk Command line tool included with gcube that extracts the textures in tpl files to seperate tga files.
bnrstruct.c C dasda dasda's structures for the brlan and brlyt files
bannersigner.c C icefire Adds IMET/IMD5 headers to U8 files. IMET is partially broken.