A BFSAR file is an archive containing sound effects. In NSMBU, it also contains all music streams, but I don't think this is the case for MK8.
Format
I found this information by reverse engineering NSMBU and analyzing the bfsar files of NSMBU, SM3DW and Splatoon. I think the same applies to MK8, but since I don't have MK8's files, I can't assure this.
Offset
|
Size
|
Description
|
0x00
|
4
|
Magic ("FSAR")
|
0x04
|
2
|
Endianness. 0xFEFF is big endian, 0xFFFE is little endian
|
0x06
|
2
|
Header size? Always 0x0040
|
0x08
|
4
|
Version number
|
0x0C
|
4
|
File size of the entire file.
|
0x10
|
2
|
Section count? Always 0x03.
|
0x12
|
2
|
Unknown. Always 0.
|
0x14
|
3 × 12
|
Section info. 3 structures describing the offsets to and sizes of the bfsar sections.
|
0x38
|
8
|
Unknown. Always 0.
|
Section information
Offset
|
Size
|
Description
|
0
|
2
|
Identifier. Specifies which section it describes. 0x2000 is the STRG section, 0x2001 is INFO and 0x2002 is FILE.
|
2
|
2
|
Unknown. Always 0.
|
4
|
4
|
Offset
|
8
|
4
|
Size
|
STRG Section
This section contains a string table and maybe more.
Offset
|
Size
|
Description
|
0x00
|
4
|
ASCII identifier ("STRG")
|
0x04
|
4
|
Section size
|
0x08
|
4
|
Unknown. Always 0x24000000
|
0x0C
|
4
|
String table offset, relative to field 0x08 of the STRG section.
|
0x10
|
4
|
Unknown. Always 0x24010000
|
0x14
|
4
|
Offset to lookup table.
|
String table
The string table contains structures that point to null terminated strings. All offsets are relative to the start of the string table. It starts with a string count and then contains:
Offset
|
Size
|
Description
|
0
|
4
|
Unknown. Always 0x1F010000.
|
4
|
4
|
Offset to null terminated string.
|
8
|
4
|
Unknown.
|
Lookup table
This table is used to get the string table index and other data for a string. It starts with 8 bytes of data:
Offset
|
Size
|
Description
|
0
|
4
|
Index of the table entry where it starts.
|
4
|
4
|
Unknown. Seems to be some kind of index too. Must be higher than the other index.
|
And is then followed by 0x14 byte structures:
Offset
|
Size
|
Description
|
0x00
|
2
|
Endpoint. 0 if this is an entry that links to another list entry. 1 if the string has been found and the entry contains data about it.
|
0x02
|
2
|
String bit. This bit in the string that's being searched for decides with which entry the search should continue.
|
0x04
|
4
|
This is the table index of the next entry if the string bit is 0.
|
0x08
|
4
|
This is the index of the next entry if the string bit is 1.
|
0x0C
|
4
|
String table index if this structure is an endpoint.
|
0x10
|
1
|
Data about the file. 1 if it's an audio file (SE/WSD/STRM), 2 if it's a WSDSET or SEQSET, 3 is a BANK, 4=PLAYER and 6=GROUP.
|
0x11
|
3
|
File id
|