C++ code, char(1 byte), short(2 bytes), int(4 bytes), float(4 bytes).
Code:
char cHeader[12];
char cVersion[8]; // file version
short iSquaresX; // number of squares X
short iSquaresY; // number of squares Y
int iGroups; // total number of groups
int iOffsets[32]; // level data start offsets ("number of levels" times)
lev Level[32]; // level data ("number of levels" times)
typedef struct sqr {
short iTEast; // textures
short iTWest;
short iTNorth;
short iTSouth;
short iTFloor;
short iTCeiling;
short iMapped; // 0 = not mapped, 3 = fully mapped
short iGroup; // group associated with the square
bool bRock; // is square rock?
} sqr;
typedef struct lev {
char cUnknown[8];
short iSquaresX; // number of squares X
short iSquaresY; // number of squares Y
short iLevel; // level number
short iGroups; // total number of groups on level
char cUnknown2[170];
sqr Square[2025]; // change to dynamic!
} lev;
typedef struct grp {
int iTypes; // types of monsters that can spawn in group
short iGID; // GID (unknown, is set to 0)
short iLairFreq; // always, usually, rarely, never
short iLairMonster; // laired monster ID
short iGroupFreq; // ?? always, usually, rarely, never
short iSpecMod; // id = extinguish, water, quicksand, rotator...
short iModValue; // if SpecMod needs a value, it's entered here
short iToughness; // toughness = level
short iRegen; // is set to 0
short iSound; // group ambient sound ID
char cUnknown[13];
short iSquares; // total number of squares in group
} grp;
CPtrArray pGrpData; // iGroups times the grp structure