CHANS

From WiiBrew
Jump to navigation Jump to search

CHANS is the system used by the Wii's system menu to display "dynamic" banners. It seems to be some form of bytecode. This page shall describe said bytecode and the header for CHANS files. You may find a CHANS file in the News Channel as content index 5.

Here is what is known of the structure for the header:

typedef struct {
        //START: Main Header
        u32     head; // 0x00000000
        u32     version; // 0x00000004
        u32     file_size; // 0x00000008
        u8      unk[0x14]; // 0x0000000C
        //END: Main Header


        // All offsets are from 0x20
        u32     unk10; // 0x00000020
        u32     unk20; // 0x00000024
        u32     unk30; // 0x00000028
        // First data section (this is the bytecode)
        u32     fds_size;  // 0x0000002C
        u32     fds_offset; // 0x00000030

        u32     table4_count;
        u32     unk5;
        u32     unk6;
        // Table 1 is made up of 8 byte chunks
        u32     table1_count;
        u32     table1_offset;
        // Table 2 is the method name list
        u32     table2_count;
        u32     table2_offset;
        // Table 3 is a string literal table.
        // Each string is in utf-16 and ends with 0x00240020 (.$. )
        u32     table3_count;
        u32     table3_offset;
        // Possibly unused table
        u32     unk7;
        u32     unk8;
        
        u32     table4_offset;
        u32     unk9_offset;
} chans_header;

typedef struct {
        u8      length;
        u8      padding;
        u16     offset;
} table2_entry;

This data is in no way 100% complete, so far it works but table 1 and 2, but in future this could break with further files tested.

TODO: A lot! Keep adding data, people!