Video stills (VIDEO/*.BBM, CREDITS.BVB)
Full-screen pictures shown around the videos: the Ubi Soft logo, hardware notices ("requires MMX", "Indeo not installed", the 3dfx plaque) and the credits pages.
Reader: decoders/bbm.py. State: decoded completely on all 6 files (measured, 2026-10-23). The game's readers: FUN_00469d88, FUN_00469f2c, FUN_0046a2c8 (key 0x0F3A at their calls to pod_file_open); the field order below is measured from the files.
Writer: crates/pod-formats/src/still.rs (decode, File::encode). Round-trip on all 6 files (measured): each DIB and the unused tail are kept as stored.
Layout
In the block container, key 0x0F3A, block 0x2000, one entry at 0xC.
| File | After the container header |
|---|---|
.BBM | u32 value (3000; 0 in PLAK3DFX: inferred a display time in ms), u8 flag, u32 size, a Windows DIB of size bytes |
.BVB | u32 pages; per page: name (strings.md, page1.bmp), u32 size, DIB, u32 value (100,000,000 after page1.bmp; meaning unknown) |
The DIBs are ordinary Windows bitmaps: a 40-byte BITMAPINFOHEADER, a palette of RGBQUADs for 8-bit pictures, rows bottom-up padded to 4 bytes. Both 8-bit and 24-bit occur.
After the last picture the rest of the file is unused. Most of it is raw 00 or FF (it decodes to the key or its inverse); the last words of the final block hold leftover bytes.