====== Level Data ======
The main level list is at 0x000A84A0 in ROM as an array of 177 "LevelEntry" structs.
===== LevelEntry struct =====
This struct simply points to a LevelInfo struct.
struct LevelEntry
{
/*00*/ u32 unk00;
/*04*/ u32 boLevelInfo; // bank-offset of LevelInfo struct
};
===== LevelInfo struct =====
This struct contains a pointer to an ObjectPlacementListInfo struct. The rest of the data hasn't been studied yet.
struct LevelInfo
{
/*00*/ u8 unk00[8];
/*08*/ f32 unk08;
/*0C*/ u8 unk0C[24];
/*24*/ void *unk24;
/*28*/ u8 unk28[4];
/*2C*/ f32 unk2C;
/*30*/ f32 unk30;
/*34*/ u8 unk34[4];
/*38*/ f32 unk38;
/*3C*/ f32 unk3C;
/*40*/ u8 unk40[4];
/*44*/ f32 unk44;
/*48*/ f32 unk48;
/*4C*/ f32 unk4C;
/*50*/ u8 unk50[4];
/*54*/ f32 unk54;
/*58*/ u8 unk58[4];
/*5C*/ u32 boObjectPlacementListInfoPtr; // bank-offset of bank-offset of ObjectPlacementListInfo
/*60*/ u16 unk60[0x98]; // seems to be a list of objectId's to preload? terminated by 0xFFFF? unknown size
/*F8*/ u8 unkF8[28];
};
===== ObjectPlacementListInfo struct =====
This struct simply references an array of ObjectPlacement structs.
struct ObjectPlacementListInfo
{
/*00*/ u16 numObjects; // number of ObjectPlacement structs in the array
/*02*/ u16 unk02; // probably padding
/*04*/ u32 boObjectPlacements; // bank-offset of ObjectPlacement array
};
===== ObjectPlacement struct =====
This struct contains the object ID, tag(?), and position of an object to be placed in a level.
struct ObjectPlacement
{
u16 objectId; // object ID
u16 tag; // purpose seems to depend on the type of object
f32 x; // x coordinate in level
f32 y; // y coordinate in level
};