How a Silencer map works: First byte: 0x20 Header: 90 bytes byte 0: Header version (150) byte 1: Maximum players byte 2: Maximum teams word 3: level width word 5: level height byte 7: padding byte 8: Map parallax (background) byte 9: The ambience level (ranges from -27ish to 0) byte A: padding byte B: padding dwrd C: flags (unused, always 0) next 0x80 bytes: null terminated string, map description. Fixed buffer. Radar: dwrd: RadarSize next 'RadarSize' bytes: radar. The radar is compressed with DEFLATE--use zlib to inflate. Uncompressed radar: 172x62 (that's 10664) bytes: A bitmap. Each byte is a palette index. Dimensions: 172x62. Level: dwrd: LevelSize Next 'LevelSize' bytes: The level, compressed with DEFLATE. Uncompressed level: Comprised of three distinct sections--TILES, ACTORS, PLATFORMS. TILES: next 'sizeof(tile) (which is 36 bytes BTW) * width * height': The entire map, in tile form. Array dimensions depend on X and Y in the header. Individual tile: Each tile has four background layers, one track layer, and four foreground layers. Layers (all layers are identical): byte Tile Number byte Repository Number byte Flipped (bool) byte Luminosity (bool) For the mathematically challenged, 9*4 = 36 bytes per tile. ACTOR HEADER: dword Number of actors dword unused (0?) ACTORS: next 'sizeof(actor) (which is also 36 bytes) * Number of actors': The entire map's actor list. Individual Actor: dword ActorID; //civilians have one ID, soldiers another, etc dword coord_X; //positon in the map dword coord_Y; dword Direction; //left and right. Doesn't matter for most actors. dword Type; //Distinguishes actors which have the same ID. Terminals have the same ID, but there's a small terminal and a large one for instance. dword MatchID; //It's important. Ask a mapper why though. dword SubPlane; //Ask a mapper about this too. dword unknown; //Believed to be a junk value. dword SecurityID; //Enumerated. Refers to what security level actors appear on. The designer can clue you in to most of the vaues. PLATFORM HEADER: dword Number of platforms dword unused (0?) PLATFORMS: next 'sizeof(platform) (which is 24 bytes) * Number of platforms': The entire map's platform list. Individual Platform: dword X1; //rectangle coords dword Y1; dword X2; dword Y2; dword type1; //type1 and type2 are linked together to create what we NORMALLY think of as the platform type. dword type2; The platform IDs we're used to seeing, and the coresponding TYPE1,2: 0,0 == PLATFORM 1,0 == LADDER 0,1 == STAIRS UP 0,2 == STAIRS DOWN 2,0 == TRACK 3,0 == OUTSIDE ROOM 3,2 == SPECIFIC ROOM I think that describes the Silencer map format pretty well, though older map formats might not work. To see it in action, view the code.