Skip to content

Name strings ​

Inside the block containers (container.md), section names, texture names and difficulty words are stored as encoded strings. The reader is FUN_00468958 (pod_read_name) in WINPOD.EXE.

Reader: decoders/podstring.py. State: decoded and round-trip on the 144 entry names of the 18 .BL4 tracks and BELTANE.BL3 (measured, 2026-10-23).

Layout ​

OffsetSizeContent
01Length L (0 to 255)
1LText: byte i (from 0) is stored XORed with (0xFF - i) & 0xFF

Observed in FUN_00468958: it reads the length byte, reads L bytes, puts a zero after them, takes the length of the result up to the first zero, and XORs each byte with a key that starts at 0xFF and goes down by one per byte.

Example: the bytes 06 b2 bb b9 b5 ae b7 hold MEDIUM (b2 ^ ff = 'M', bb ^ fe = 'E', …).

Pitfalls ​

  • The game measures the text up to the first zero byte before decoding. A stored byte of 0x00 cuts the name short in memory (inferred from the code; not yet seen in a file).
  • The word NEANT (French: "nothing") marks an absent section: the track loader compares each section name with it (strings at 0x4f198f, 0x4f1995, 0x4f199b, 0x4f19a1, 0x4f19b5).

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