Realms of Chaos Level Format
The basic layout of a level file is as follows:
|BYTE[0x300] palette||6-bit VGA Palette|
|UINT8 mapHeight||Height of map, in tiles|
|UINT8 mapWidth1||Width of map, in tiles|
|UINT16LE[mapHeight*mapWidth1] backLayer||Tile codes for the background tiles, one per tile|
|UINT16LE mapWidth2||Width of map, in tiles (might also be two UINT8 values)|
|UINT8[mapHeight*mapWidth1] maskLayer||Tile codes for the masked and foreground tiles, one per tile|
|BYTE unknown||unknown data (could also be one UINT8 followed by five UINT16LE values)|
|UINT16LE spriteCount||Number of sprite entries in this file|
|SPRITE[spriteCount] sprites||Sprite entries|
|BYTE[0xC00] unknown||these might be tile properties|
Sprite entries use the following data structure:
|BYTE unknown||(might also be a UINT32LE value)|
|UINT16LE hashValue||Hash value for spriteName?|
|Char spriteName||Name of the sprite file (without extension)|
|UINT16LE posX||X coordinate of this sprite, in pixels|
|UINT16LE posY||Y coordinate of this sprite, in pixels|
Note: A 52 character long name field seems a bit wasteful, as spriteName can only be up to eight characters long. Maybe some of those bytes are actually in-game for a different pourpose. They are always set to zero in the level files.
The game uses three tilesets for each level: BackGround tiles (.BG), Masked BackGround tiles (.MBG) and Masked ForeGround Tiles (.MFG). The background tileset can contain up to 512 tiles, while each masked tileset can only contain up to 128 tiles.
The names of the tileset files are not stored in the level file, but the game usually uses the same name for the level file and it's tilesets. So FOREST1.LED would use FOREST1.BG, FOREST1.MBG and FOREST1.MFG.
The format of the backLayer and maskLayer arrays is basically identical to the Monster Bash Level Format. The lower nine bits in the backLayer are the tile index for the background tileset, the upper seven bits are used for tile properties. The high bit in the maskLayer indicates a foreground tile, the seven low bits are the tile index.
The upper seven bits in the backLayer indicate the following properties:
|Bit||Binary (Decimal)||Mask||Purpose when bit is 1|
|1||0000001 (1)||0x0200||Can't walk right into tile|
|2||0000010 (2)||0x0400||Can't walk left into tile|
|3||0000100 (4)||0x0800||Can't fall down through tile (i.e. ground tiles you stand on)|
|4||0001000 (8)||0x1000||Can't jump up through tile|
|5||0010000 (16)||0x2000||Foreground tile contains an interactive item (gems, spikes, etc.)|
|6||0100000 (32)||0x4000||Blocks platforms?|
This file format was reverse engineered by K1n9_Duk3. If you find this information helpful in a project you're working on, please give credit where credit is due. (A link back to this wiki would be nice too!)