Each level has usually 3 files : MAP, BLK and BSP (eg: KCITY.MAP, KCITY.BLK and KCITY.BSP)
MAP : levels are made of big square blocks (eg: a crossroad, a T section, a building, ...).
That file is simply a 2D array containing blocks indexes .
Code: Select all
+00 map width (2 bytes)
+02 map height (2 bytes)
+04 block indexes (2 bytes * map width * map height)
Second byte value is either a flag or some sort of sub-index inside a given block entry. It's often 0.
If I dump all blocks indexes to a color for the first level, here is what I got :

Here is a quick hack where I replaced all blocks by 0x3502 ("Weapon King" block) :

BLK : it probably means block.
Code: Select all
+00 seems to be always 01 00 80 00
+04 block table header with 128 entries, each entry is 8 bytes. it probably contains an offset to the block data.
+404 block data, format is unknown
BSP : that file is created when level is loaded. If you delete it, the game will recreate it automatically.
What is weird is that this file seems to be never read by the game, even during gameplay. It's just written once during load.
I don't know what BSP stand for. It might be "binary space partition" or "block sprite".