Official PL2 format version 4 PL2_HASPALETTE = 1 PL2_HASMATERIALS = 2 PL2_HASLEVELSETTINGS = 4 PL2_HASBACKTEX = 8 STRUCT COLORRANGE BYTE startcolor BYTE endcolor END STRUCT RECT DWORD left DWORD top DWORD right DWORD bottom END Start: CONST BYTE signature[4] = "PL2 " //The upper word of 'version' is the important part. The lower word is not used yet. //If the loader supports PL2s version 4, the upper word of 'version' should be <= 4. DWORD version IF version >= 0x00010000 DWORD flags //The channels in the palette are stored as 0..63, interleaved. IF flags & HAS_PALETTE BYTE palette[256*3] ELSE BYTE palette[256*3] = originalpalette END //Materials are stored in this order: Dirt, Dirt2, Rock, Background, Recv. shadow. //256 bits (32 bytes) for each material setting which specifies if the setting is active in //each color in the palette. The bits within the bytes are stored in big endian order (76543210). IF flags & HAS_MATERIALS BYTE materials[32*5] ELSE BYTE materials[32*5] = originalmaterials END IF flags & HAS_LEVELSETTINGS RECT respawnrect IF version >= 0x00030000 COLORRANGE coloranim1 COLORRANGE coloranim2 COLORRANGE coloranim3 COLORRANGE coloranim4 BYTE upperborderfatal BYTE lowerborderfatal BYTE leftborderfatal BYTE rightborderfatal ELSE COLORRANGE coloranim1 = {129, 131} COLORRANGE coloranim2 = {133, 136} COLORRANGE coloranim3 = {152, 159} COLORRANGE coloranim4 = {168, 171} BYTE upperborderfatal = 0 BYTE lowerborderfatal = 0 BYTE leftborderfatal = 0 BYTE rightborderfatal = 0 END IF version == 0x00040000 DWORD respawndistance RECT bonusrespawnrect BYTE respawninmidair ELSE DWORD respawndistance = 160 RECT bonusrespawnrect = {0, 0, 504, 350} BYTE respawninmidair = 0 END ELSE RECT respawnrect = {5, 5, 499, 345} COLORRANGE coloranim1 = {129, 131} COLORRANGE coloranim2 = {133, 136} COLORRANGE coloranim3 = {152, 159} COLORRANGE coloranim4 = {168, 171} BYTE upperborderfatal = 0 BYTE lowerborderfatal = 0 BYTE leftborderfatal = 0 BYTE rightborderfatal = 0 DWORD respawndistance = 160 RECT bonusrespawnrect = {0, 0, 504, 350} BYTE respawninmidair = 0 END IF flags & PL2_HASBACKTEX BYTE backtextures[16*16*2] usebacktex = 1 ELSE BYTE backtextures[16*16*2] = {random(160..163)...} usebacktex = 0 END BYTE leveldata[504*350] END Inofficial PowerLevel2 format: Start: BYTE leveldata[504*350] CONST BYTE signature[10] = "POWERLEVL2" BYTE palette[256*3] BYTE materials[32*5] PowerLevel format: Start: BYTE leveldata[504*350] CONST BYTE signature[10] = "POWERLEVEL" BYTE palette[256*3] Level format: Start: BYTE leveldata[504*350]