Table of Contents

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
};