#include "standard-types.hsl"
#pragma byteorder(big_endian)
#pragma maxarray(65536) // max that hw 5.1 will allow
#pragma maxstring(512)
typedef struct Coord3D
{
float X;
float Y;
float Z;
} Coord3D;
typedef struct LGFFloraInstance
{
Coord3D Coord;
float Unknown1; // these two floats seem to always be very small, very close to 0
float Unknown2; // they could be used for rotation maybe? though that's usually done with quaternions
} LGFCoordEntry;
typedef struct LGFUnknownBBEntry // looks like it might be bounding box, but not sure
{
DWORD Start;
DWORD End;
Coord3D StartCoord;
Coord3D EndCoord;
} LGFUnknownBBEntry;
typedef struct LGFFileEntry
{
DWORD Type;
zstring FileName;
switch (Type)
{
case 0x4:
DWORD Unknown1;
DWORD Unknown2;
break;
case 0x5: break;
case 0x15:
char Unknowns1[11];
DWORD CoordCount;
float Unknowns2[11];
char Unknowns3Null[24];
LGFFloraInstance Coords[CoordCount];
DWORD UnknownBBCount; // I think these might be bounding boxes, but not sure
LGFUnknownBBEntry UnknwonBBs[UnknownBBCount];
break;
case 0x20: break;
default: break;
}
} LGFFileEntry;
typedef struct LevelGraphicsFile
{
char LevelGraphicsFileTag[17]; // = "LevelGraphicsFile"
DWORD Unknown1;
DWORD FileCount;
LGFFileEntry Files[FileCount];
} LevelGraphicsFile;