Sound banks and glyphs
2026-10-23.
Two formats were left from the last session: the .MEG sound banks and the .BP3 font files. Both now read to the last byte, and both write back byte for byte.
The sound-bank loader
Earlier sessions could not find the game's reader for the banks. The way in was the SMMH magic: it sits in the code as a constant, in FUN_004c19c0. That function's caller, FUN_004c1e48, is the bank loader. It adds .MEG to a name, reads the five section pairs, and hands sections 0, 1 and 2 to their own readers. With those readers the whole file has a fixed shape:
- Section 0 holds a 0x164-byte tool header, the counts, one sample format (16-bit, 22,050 Hz), then one record per sound. Each record is 0x11C bytes plus 0x30 per format, which explains the 0x14C-byte record measured before.
- Section 1 holds
SMMHgroups, used only byFIX.MEG. - Section 2 holds the tool's 13 parameter definitions, which the game skips, then one 0x88-byte event per sound.
- Section 3 is the play list. Section 4 is the samples.
One surprise: FIX.MEG has a record that names Script1.txt. It is a "sequence CD" entry with no samples, which ties the bank to the CD music script of the last session. The loader also explains the last unknown field of the circuit list: +0x88 holds the slot of the circuit's sound bank.
Fonts
The .BP3 files end with glyph tables: a font name, a texture name, and per character its page and box. The race-display fonts in HABILAGE (typo020 to typo040) are the names HABI.BIN uses. FNT_MENU holds the three menu fonts. J_GAME and J_MENU hold one table each, with no count, and nothing in WINPOD.EXE names them.
FNT_MENU has its palette twice: once before the texture block and once inside it. The readers had assumed it was only before, so they started the pages 0x300 bytes too early. Page 0 showed three rows of palette bytes at the top. With that fixed, the viewer draws each glyph's box on its page.

After the data, every font file ends with the writer's leftover buffer, the same rule found in the effect files. All four files fit it byte for byte.
Where the catalogue stands
230 of 289 files now decode to the last byte, 81% of the bytes. The 59 files left are all track and car data, which the track and car sessions are working on.
Next
- The fields that are still raw inside the banks: the events, the
SMMHentries, the 12 bytes afterUSSB. - Load a changed
.BRTin the game, with a writable copy ofDATA/RECORDSunder Wine.