Table of Contents

Object Data

The object lookup table is at 0x000A1C90 in ROM as an array of 1582 ObjectEntry structs.

ObjectEntry struct

struct ObjectEntry
{
    /*00*/ u16 objectId;  // unique identifier
    /*02*/ u16 unk02;     // probably padding
    /*04*/ u32 boObjectDefA; // bank-offset of ObjectDefA struct
    /*08*/ u32 boObjectDefB; // bank-offset of ObjectDefB struct
};

Object IDs

ObjectDefA_00 struct

This structure defines the properties of an object.

struct ObjectDefA_00
{
    /*00*/ u16     type;                 // structure type (0x0001)
           u8      _pad02[2];
    /*04*/ CodeInfo codeInfo;
    /*18*/ u16   objectId;             // unique identifier
    /*1A*/ u16   unk1A;
    /*1C*/ u32   tileDimensionsSize;   // sizeof(TileDimensions)
    /*20*/ u32   boTileDimensions;     // bank-offset of TileDimensions struct
    /*24*/ u32   tileDataInfoSize;     // sizeof(BlockInfo)
    /*28*/ u32   boTileDataInfo;       // bank-offset of BlockInfo struct for the tiles' 8bit color-index data
    /*2C*/ u32   tilePaletteInfoSize;  // sizeof(BlockInfo)
    /*30*/ u32   boTilePaletteInfo;    /* bank-offset of BlockInfo struct for the tiles' palette data
                                          palette data is a 0x200 byte array of rgba5551 (u16) colors */
    /*34*/ u32   tileMapInfoSize;      // sizeof(BlockInfo)
    /*38*/ u32   boTileMapInfo;        /* bank-offset of BlockInfo struct for the tile map
                                          the tile map is a u16 array tile indeces */
    /*3C*/ u32   unkData1InfoSize;     // sizeof(BlockInfo)
    /*40*/ u32   boUnkData1;           // bank-offset of BlockInfo struct for ??
    /*44*/ u32   unkData2InfoSize;     // sizeof(BlockInfo)
    /*48*/ u32   boUnkData2;           // bank-offset of BlockInfo struct for ??
    /*4C*/ u32   collisionMapInfoSize; // sizeof(BlockInfo)
    /*50*/ u32   boCollisionMapInfo;   /* bank-offset of BlockInfo struct for collision data
                                          the collision map is a u16 array, parallel to the tile map array */
    /*54*/ u8    unk54[16];            // unknown data
};

ObjectDefA_01 struct

This structure defines the properties of the Yoshi player object.

struct ObjectDefA_01   // only used for yoshi
{
    /*0x00*/ u16 type;   // structure type (0x0001)
    /*0x04*/ u8  unk04;
    /*0x08*/ u32 unk08;
    /*0x18*/ u16 unk18;
    /*0x1C*/ u8  unk1C;
    /*0x1D*/ u8  unk1D;
    /*0x20*/ u32 boUnk20;
    /*0x24*/ u32 boUnk24;
    /*0x28*/ u32 boUnk28;
    /*0x2C*/ u32 unk2C;
    /*0x30*/ u32 boUnk30;
    /*0x34*/ u32 unk34;
    /*0x38*/ u32 unk38;
    /*0x3C*/ u32 unk3C;
    /*0x40*/ u32 boUnk40;
};

ObjectDefA_02 struct

struct ObjectDefA_02
{
    /*00*/ u16 type;      // structure type (0x0002)
           u8 _pad02[2];
           CodeInfo codeInfo;
};

ObjectDefB struct

struct ObjectDefB
{
    // todo
};

TileDimensions struct

struct TileDimensions
{
    /*0x00*/ u16 unk00;      // ?? related to width
    /*0x02*/ u16 unk02;      // ?? related to height
    /*0x04*/ u16 tileWidth;  // width of an individual tile
    /*0x06*/ u16 tileHeight; // height of an individual tile
    /*0x08*/ u16 mapWidth;   // width of the whole map (num tiles X * tileWidth)
    /*0x0A*/ u16 mapHeight   // height of the whole map (num tiles Y * tileHeight)
};

BlockInfo struct

This structure references a block of data in ROM. The block of data may either be raw or SMSR00 compressed depending on the srcSize and dstSize fields.

struct BlockInfo
{
    /*0x00*/ u32 dstSize; // decoded block size
    /*0x04*/ u32 srcSize; // encoded block size
    /*0x08*/ u32 boData;  /* bank-offset of the data (may be a CMPR or raw)
                             if the data is raw, both size and sizeEnc will be the same value */
};

CodeInfo struct

This struct references code that an object should use. It can either reference an overlay file or a single function already in memory.

struct CodeInfo
{
    u8 useOverlay;          // 1 = use overlay, 0 = use nativeFunc
    u8 _pad[3];             // padding
    union {
        void *nativeFunc;   // pointer to native function
        struct
        {
            u32 romStart;       // overlay rom start address
            u32 romEnd;         // overlay rom end address
            void *fakeMemStart; // fake ram start address 
            void *fakeMemEnd;   // fake ram end address
        } overlay;
    };
};