Skip to content

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 SMMH groups, used only by FIX.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.

The menu font's three pages in the viewer, each glyph outlined

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 SMMH entries, the 12 bytes after USSB.
  • Load a changed .BRT in the game, with a writable copy of DATA/RECORDS under Wine.

Prose CC0 1.0, code Apache 2.0. POD: Planet of Death is © Ubi Soft; none of its files are on this site.