BRRES (File Format)

From Custom Mario Kart
Jump to navigation Jump to search

Overview

The BRRES (Binary Revolution RESource) are archive-like files containing object data, models, textures, and animations.

Format

BRRES files are similar to U8 files. They contain multiple sections, sometimes known as files. The format has been used in many games by Nintendo. This article describes Mario Kart Wii BRRES files.

Header

The file begins with the header. It is a 0x10 structure as follows:

Offset Type Description
0x00 String File magic. bres in ASCII.
0x04 UInt16 Byte order mark (BOM): The value is always 0xFEFF. If value 0xFFFE is read, then the false endian is used. Mario Kart Wii uses nearly always big endian (bytes 0xFE,0xFF).
0x06 UInt16 Padding (usually 0x0000). Some other formats with similar file header like BREFT/BREFT use the field as version number.
0x08 UInt32 Length of the file in bytes.
0x0C UInt16 Offset to root section relative to start (usually 0x0010).
0x0E UInt16 Number of sections (including root).
0x10 End of file header

Sections

Root

The root section of the brres file contains all pointers to files and file names. The header of the root is 0x8 in length.

Offset Type Description
0x00 String Section magic. root in ASCII.
0x04 UInt32 Length of section in bytes.

This header is then followed by a BRRES Index Group. The entries in this group are the folders of this brres file, and point to more BRRES Index Groups within the root section. These then point to the actual sections of the BRRES file.

Others

Other BRRES sections tend to be within specific folders, as set out by the root section. The identifiers of these sections, as well as the normal folder and a description are listed below. BRRES Files contain only a few file formats, they are:

Identifier Folder Subfolder Description
MDL0 3DModels(NW4R) Model files.
TEX0 Textures(NW4R) Texture files.
SRT0 AnmTexSrt(NW4R) Texture movement animations.
CHR0 AnmChr(NW4R) Model movement animations.
PAT0 AnmTexPat(NW4R) Texture swapping animations.
CLR0 AnmClr(NW4R) Color changing animations.
SHP0 AnmShp(NW4R) Polygon morphing (used in flags).
SCN0 AnmScn(NW4R) LightSet(NW4R) Scene file for games with live rendered videos.
AmbLights(NW4R)
Lights(NW4R)
Fogs(NW4R)
Cameras(NW4R)
PLT0 Palettes(NW4R) Color Palettes for CI4 and CI8 textures.
VIS0 AnmVis(NW4R) Bone visibility. Not seen in Mario Kart Wii.

String Table

At the end of the BRRES file is a string table. This is a series of 4-byte length prefixed strings, padded to start at four byte offsets. Various sections point to this table, which is how all text in BRRES files is stored.

GNU C Header Example


typedef struct brres_header_t
{
    char  magic[4];            // = string "bres"
    u16   bom;                 // byte order mark
                               // the data is 'bom' dependent big or little endian
    u16   bom_padding;         // usally 0
    u32   size;                // file size
    u16   root_off;            // offset of root section
    u16   n_sections;          // number of sections
}
__attribute__ ((packed)) brres_header_t;


typedef struct brres_entry_t
{
    u16   id;                  // entry id
    u16   unknown;             // always 0?
    u16   left_idx;            // index to left element in virtual tree
    u16   right_idx;           // index to right element in virtual tree
    u32   name_off;            // offset into string table
    u32   data_off;            // offset to data
}
__attribute__ ((packed)) brres_entry_t;


typedef struct brres_group_t
{
    u32            size;       // size of complete group
    u32            n_entries;  // number of entires
    brres_entry_t  entry[0];   // list of entries, N := 1 + n_entries
                               // entry with index #0 is a special
                               // root node not counting in 'n_entries'
}
__attribute__ ((packed)) brres_group_t;


typedef struct brres_root_t
{
    char           magic[4];   // = string "root"
    u32            size;       // size of complete header
    brres_group_t  group[0];   // first group
}
__attribute__ ((packed)) brres_root_t;

Tools

The following tools can handle BRRES files:

Notes

  • Wiimms SZS Tools are able to extract all files of a BRRES file. They are also able to create a complete new BRRES file from scratch by copying the content of a local directory structure.
  • BrawlBox is able to add materials and shaders to models, as well as import new animations and textures into a BRRES. However, it was designed for Super Smash Bros. Brawl, but has support for Mario Kart Wii's files (as of version 0.65b).


All about BRRES files

BRRES fileIndex GroupSub Files

CHR0CLR0MDL0PAT0SCN0SHP0SRT0TEX0