Subject: LOCO File Format
Here's a basic layout of the data structure of the locomotion.loco file.
#include "standard-types.hsl"
#pragma byteorder(big_endian)
#pragma maxarray(65536) // max that hw 5.1 will allow
#pragma maxstring(512)
typedef struct LocoEntry1Coords
{
DWORD Unknown;
float X;
float Y;
float Z;
} LocoEntry1Coords;
typedef struct LocoEntry1
{
DWORD Unknown0;
char Name[16];
DWORD Unknown1; // always == 0x0820 ?
DWORD Unknowns2[94];
LocoEntry1Coords Coords[16];
} LocoEntry1;
typedef struct LocoEntry2
{
DWORD Unknowns1[6];
float Unknowns2[94];
} LocoEntry2;
typedef struct LOCO // environment map
{
DWORD Unknown1;
DWORD Unknown2;
DWORD LocoEntry1Size;
DWORD LocoEntry2Size;
DWORD Unknown3;
DWORD Entry1Count;
DWORD Entry2Count;
DWORD Entry3Count;
DWORD StringsSectionSize;
DWORD Unknown7;
LocoEntry1 Entries1[Entry1Count];
LocoEntry2 Entries2[Entry2Count];
DWORD Entries3[Entry3Count];
char StringsSection[StringsSectionSize];
} LOCO;
#include "standard-types.hsl"
#pragma byteorder(big_endian)
#pragma maxarray(65536) // max that hw 5.1 will allow
#pragma maxstring(512)
typedef struct LocoEntry1Coords
{
DWORD Unknown;
float X;
float Y;
float Z;
} LocoEntry1Coords;
typedef struct LocoEntry1
{
DWORD Unknown0;
char Name[16];
DWORD Unknown1; // always == 0x0820 ?
DWORD Unknowns2[94];
LocoEntry1Coords Coords[16];
} LocoEntry1;
typedef struct LocoEntry2
{
DWORD Unknowns1[6];
float Unknowns2[94];
} LocoEntry2;
typedef struct LOCO // environment map
{
DWORD Unknown1;
DWORD Unknown2;
DWORD LocoEntry1Size;
DWORD LocoEntry2Size;
DWORD Unknown3;
DWORD Entry1Count;
DWORD Entry2Count;
DWORD Entry3Count;
DWORD StringsSectionSize;
DWORD Unknown7;
LocoEntry1 Entries1[Entry1Count];
LocoEntry2 Entries2[Entry2Count];
DWORD Entries3[Entry3Count];
char StringsSection[StringsSectionSize];
} LOCO;