tmc/include/definitions.h

443 lines
9.6 KiB
C

#ifndef DEFINITIONS_H
#define DEFINITIONS_H
#include "gba/types.h"
#include "entity.h"
// Definition for enemies and projectiles
typedef struct EnemyDefinition {
u16 gfx;
u16 paletteIndex;
union {
const Hitbox* hitbox;
const struct EnemyDefinition* definition;
} ptr;
u16 spriteIndex;
struct {
u8 spritePriority : 3;
u8 collision : 1;
u8 draw : 2;
u8 shadow : 2;
} PACKED spriteFlags;
u8 health;
s16 speed;
u8 damageType;
u8 collisionMask;
} EnemyDefinition;
typedef struct ProjectileDefinition {
u16 gfx;
u16 paletteIndex;
union {
const Hitbox* hitbox;
const struct ProjectileDefinition* definition;
} ptr;
u16 spriteIndex : 12;
u16 field0x3c : 4;
struct {
u8 spritePriority : 3;
u8 collision : 1;
u8 draw : 2;
u8 shadow : 2;
} PACKED spriteFlags;
u8 field0x40;
s16 speed;
u8 damageType;
u8 collisionMask;
} ProjectileDefinition;
// Sprite data definition for objects and npcs
typedef struct ObjectDefinition {
struct {
u8 type : 2;
u8 flags : 2;
u8 unk : 4;
u8 hitbox;
u16 gfx : 10;
u16 gfx_type : 2;
u16 unk2 : 4;
} PACKED bitfield;
union {
struct {
u16 paletteIndex : 10;
u16 unk : 2;
u16 shadow : 2;
u16 unk2 : 2;
u16 spriteIndex : 10;
u16 spritePriority : 3;
u16 draw : 3;
} PACKED sprite;
const struct ObjectDefinition* definition;
} data;
} ObjectDefinition;
typedef struct NPCDefinition {
struct {
u8 type : 2;
u8 flags : 2;
u8 unk : 4;
u8 hitbox;
u16 gfx : 10;
u16 gfx_type : 2;
u16 unk2 : 4;
} PACKED bitfield;
union {
struct {
u16 paletteIndex : 10;
u16 unk : 2;
u16 shadow : 2;
u16 unk2 : 2;
u16 spriteIndex : 10;
u16 spritePriority : 3;
u16 draw : 3;
} PACKED sprite;
const struct NPCDefinition* definition;
} data;
} NPCDefinition;
// Sprite data definition for player items
typedef struct SpriteDataC {
u8 bitfield;
u8 index;
u16 unk;
u8 unk2;
u8 spriteIndex;
u16 gfxLoadBitfield;
} SpriteDataC;
typedef enum {
SPRITE_0,
SPRITE_1,
SPRITE_2,
SPRITE_3,
SPRITE_4,
SPRITE_5,
SPRITE_6,
SPRITE_7,
SPRITE_8,
SPRITE_9,
SPRITE_MINISHEMOTICON,
SPRITE_EZLOCAP,
SPRITE_12,
SPRITE_13,
SPRITE_14,
SPRITE_15,
SPRITE_16,
SPRITE_17,
SPRITE_18,
SPRITE_19,
SPRITE_20,
SPRITE_21,
SPRITE_22,
SPRITE_ITEMGUSTJAR,
SPRITE_GENTARI,
SPRITE_FESTARI,
SPRITE_MELARI,
SPRITE_MOUNTAINMINISH,
SPRITE_28,
SPRITE_TOWNMINISH,
SPRITE_LIBRARI,
SPRITE_FORESTMINISH,
SPRITE_VAATI,
SPRITE_OBJECT6A_9,
SPRITE_OBJECT6A_0,
SPRITE_OBJECT6A_1,
SPRITE_OBJECT6A_2,
SPRITE_MINISHEZLO,
SPRITE_OBJECT6A_3,
SPRITE_DIN,
SPRITE_NAYRU,
SPRITE_FARORE,
SPRITE_NPC5,
SPRITE_GUARDWITHSPEAR,
SPRITE_KINGDALTUS,
SPRITE_MINISTERPOTHO,
SPRITE_NPC26,
SPRITE_MAID,
SPRITE_TINGLESIBLINGS,
SPRITE_BEEDLE,
SPRITE_BROCCO,
SPRITE_PINA,
SPRITE_POSTMAN,
SPRITE_MALON,
SPRITE_EPONA,
SPRITE_MILKCART,
SPRITE_SMITH,
SPRITE_TOWNSPERSON,
SPRITE_58,
SPRITE_KID,
SPRITE_MAILBOX,
SPRITE_SITTINGPERSON,
SPRITE_MUTOH,
SPRITE_CARPENTER,
SPRITE_GORMAN,
SPRITE_CAT,
SPRITE_CAT_1,
SPRITE_DOG,
SPRITE_DOG_1,
SPRITE_DOG_2,
SPRITE_SYRUP,
SPRITE_PERCY,
SPRITE_FARMERS_0,
SPRITE_FARMERS_1,
SPRITE_DAMPE,
SPRITE_KINGGUSTAF,
SPRITE_GINA,
SPRITE_SIMON,
SPRITE_MAMA,
SPRITE_TEACHERS,
SPRITE_TEACHERS_1,
SPRITE_WINDTRIBESPEOPLE_0,
SPRITE_WINDTRIBESPEOPLE_1,
SPRITE_WINDTRIBESPEOPLE_2,
SPRITE_WINDTRIBESPEOPLE_3,
SPRITE_WINDTRIBESPEOPLE_4,
SPRITE_WINDTRIBESPEOPLE_5,
SPRITE_MAYORHAGEN,
SPRITE_GHOSTBROTHERS,
SPRITE_HURDYGURDYMAN,
SPRITE_COW,
SPRITE_GORONMERCHANT,
SPRITE_GORONMERCHANT_1,
SPRITE_GORON,
SPRITE_CASTORWILDSSTATUE,
SPRITE_NPC4F,
SPRITE_OBJECT6A_4,
SPRITE_97,
SPRITE_DARKNUT_0,
SPRITE_DARKNUT_1,
SPRITE_CHUCHUBOSS_0,
SPRITE_DEATHFX_0,
SPRITE_MADDERPILLAR_0,
SPRITE_GLEEROK_0,
SPRITE_KEATON,
SPRITE_MAZAALHAND,
SPRITE_SCISSORSBEETLE,
SPRITE_MANDIBLESPROJECTILE,
SPRITE_STALFOS,
SPRITE_GIBDO,
SPRITE_LAKITU,
SPRITE_LAKITUCLOUDPROJECTILE,
SPRITE_VAATIREBORNENEMY_0,
SPRITE_VAATIREBORNENEMY_1,
SPRITE_VAATIREBORNENEMY_2,
SPRITE_VAATIREBORNENEMY_3,
SPRITE_VAATIBALL,
SPRITE_VAATITRANSFIGURED_0,
SPRITE_VAATITRANSFIGURED_1,
SPRITE_VAATITRANSFIGURED_2,
SPRITE_VAATITRANSFIGURED_3,
SPRITE_VAATIARM,
SPRITE_VAATIWRATH,
SPRITE_VAATIREBORN,
SPRITE_MOBLINLADY_1,
SPRITE_BALLCHAINSOLDIER,
SPRITE_GYORGMALE,
SPRITE_JARPORTAL,
SPRITE_BEANSTALK_0,
SPRITE_MINECART,
SPRITE_LAVAPLATFORM_1,
SPRITE_WHIRLWIND,
SPRITE_BIGVORTEX,
SPRITE_MACROBOOK,
SPRITE_GENTARICURTAINS,
SPRITE_SPIDERWEB,
SPRITE_OBJECT79,
SPRITE_OCTOROKBOSS_0,
SPRITE_BELL,
SPRITE_TALON,
SPRITE_STURGEON,
SPRITE_LIBRARIANS_0,
SPRITE_LIBRARIANS_1,
SPRITE_STAMP,
SPRITE_MARCY,
SPRITE_STOCKWELL,
SPRITE_WHEATON,
SPRITE_PITA,
SPRITE_CUCCOAGGR,
SPRITE_BLADEBROTHERS_0,
SPRITE_BLADEBROTHERS_1,
SPRITE_REM,
SPRITE_CARLOV_0,
SPRITE_CARLOV_1,
SPRITE_DRLEFT,
SPRITE_155,
SPRITE_ANJU,
SPRITE_EMMA,
SPRITE_GREGAL,
SPRITE_159,
SPRITE_CASTORWILDSSTATUE_1,
SPRITE_CHUCHU,
SPRITE_SPECIALFX,
SPRITE_SPECIALFX_1,
SPRITE_OBJECT64,
SPRITE_BEETLE,
SPRITE_166,
SPRITE_POT,
SPRITE_DEATHFX_1,
SPRITE_PEAHAT,
SPRITE_RAILTRACK,
SPRITE_ROLLOBITE,
SPRITE_OBJECTD,
SPRITE_OBJECT2A,
SPRITE_OCTOROK,
SPRITE_OBJECT43,
SPRITE_ROCKPROJECTILE,
SPRITE_KEESE,
SPRITE_DOORMIMIC,
SPRITE_DOORMIMIC_1,
SPRITE_ROCKCHUCHU,
SPRITE_SPINYCHUCHU,
SPRITE_PRESSUREPLATE,
SPRITE_OBJECT1E,
SPRITE_CHESTSPAWNER,
SPRITE_BIGBARREL,
SPRITE_PUSHABLESTATUE,
SPRITE_MOLDWORM,
SPRITE_SLUGGULA,
SPRITE_SLUGGULA_1,
SPRITE_SLUGGULA_2,
SPRITE_PESTO,
SPRITE_PUFFSTOOL,
SPRITE_PUSHABLEROCK,
SPRITE_BEANSTALK_1,
SPRITE_OBJECTB3,
SPRITE_PULLABLEMUSHROOM,
SPRITE_BOLLARD,
SPRITE_WARPPOINT,
SPRITE_AMBIENTCLOUDS,
SPRITE_CHUCHUBOSS_1,
SPRITE_CHUCHUBOSS_2,
SPRITE_OBJECT9,
SPRITE_BOSSDOOR,
SPRITE_OBJECT45,
SPRITE_LIKELIKE,
SPRITE_SPEARMOBLIN,
SPRITE_BOWMOBLIN,
SPRITE_BUSINESSSCRUB,
SPRITE_RUPEELIKE,
SPRITE_MINISHSIZEDENTRANCE,
SPRITE_PULLABLELEVER,
SPRITE_THOUGHTBUBBLE,
SPRITE_MADDERPILLAR_1,
SPRITE_LAVAPLATFORM,
SPRITE_WATERDROP,
SPRITE_WALLMASTER,
SPRITE_DIRTBALLPROJECTILE,
SPRITE_CRENELBEANSPROUT,
SPRITE_BOMBPEAHAT,
SPRITE_SPARK,
SPRITE_CHASER,
SPRITE_SPIKEDBEETLE,
SPRITE_HELMASAUR,
SPRITE_FALLINGBOULDER,
SPRITE_BOBOMB,
SPRITE_GLEEROK_1,
SPRITE_GREATFAIRY,
SPRITE_TEKTITE,
SPRITE_WIZZROBEWIND,
SPRITE_WIZZROBEFIRE,
SPRITE_WIZZROBEICE,
SPRITE_WINDPROJECTILE,
SPRITE_FIREPROJECTILE,
SPRITE_ICEPROJECTILE,
SPRITE_ARMOS,
SPRITE_LEEVER,
SPRITE_ROPE,
SPRITE_EYEGORE,
SPRITE_PESTO_1,
SPRITE_ACROBANDITS,
SPRITE_CROW,
SPRITE_MULLDOZER,
SPRITE_PUSHABLELEVER,
SPRITE_BIGPUSHABLELEVER,
SPRITE_BOMBAROSSA,
SPRITE_WISP,
SPRITE_SPINYBEETLE,
SPRITE_MAZAALHEAD,
SPRITE_MAZAALBRACELET,
SPRITE_MAZAALENERGYBEAM,
SPRITE_MAZAALENERGYBEAM_1,
SPRITE_MAZAALMACRO,
SPRITE_EYESWITCH,
SPRITE_OCTOROKBOSS_1,
SPRITE_PICOBLOOM,
SPRITE_OBJECT35,
SPRITE_BIGICEBLOCK,
SPRITE_BIGICEBLOCK_1,
SPRITE_SMALLICEBLOCK,
SPRITE_OBJECT86,
SPRITE_EVILSPIRIT,
SPRITE_CLOUDPIRANHA,
SPRITE_FLYINGSKULL,
SPRITE_BONEPROJECTILE,
SPRITE_BAKEROVEN,
SPRITE_LAMP_0,
SPRITE_LAKITULIGHTNING,
SPRITE_OBJECT6A_5,
SPRITE_BIRD_1,
SPRITE_BIRD,
SPRITE_TORCHTRAPPROJECTILE_0,
SPRITE_TORCHTRAPPROJECTILE_1,
SPRITE_OBJECT98,
SPRITE_LAMP_1,
SPRITE_FIGURINEDEVICE,
SPRITE_PULLABLELEVER_1,
SPRITE_VAATIPROJECTILE,
SPRITE_OBJECT44,
SPRITE_GHINI,
SPRITE_VAATIARM_1,
SPRITE_VAATIWRATH_1,
SPRITE_OBJECTBF,
SPRITE_WRATHEYE,
SPRITE_V3HANDPROJECTILE,
SPRITE_VAATIWRATH_2,
SPRITE_VAATIEYESMACRO,
SPRITE_OBJECTB4,
#if !defined(EU)
SPRITE_OBJECTB4_1,
#endif
SPRITE_FAN,
SPRITE_ANGRYSTATUE,
SPRITE_CANNONBALLPROJECTILE,
SPRITE_V1EYELASER,
SPRITE_V1DARKMAGICPROJECTILE,
SPRITE_SLIME,
SPRITE_CURTAIN,
SPRITE_OBJECT9B,
SPRITE_ENEMY5A,
SPRITE_VAATITRANSFIGURED_4,
SPRITE_VAATITRANSFIGURED_5,
SPRITE_OBJECTA6,
SPRITE_FIREBALLGUY,
SPRITE_SPIKEDROLLERS,
SPRITE_OBJECT6A_6,
SPRITE_MOBLINLADY,
SPRITE_OBJECTAB,
SPRITE_GYORGMALEENERGYPROJECTILE,
SPRITE_CLOTHESRACK,
SPRITE_OBJECT6A_7,
SPRITE_JAILBARS,
SPRITE_OBJECTB2,
SPRITE_ENEMY62,
SPRITE_GYORGFEMALEEYE,
SPRITE_GYORGCHILD,
SPRITE_SMALLTOWNMINISH,
SPRITE_GYORGFEMALEMOUTH,
SPRITE_V2PROJECTILE,
SPRITE_OBJECT6A_8,
SPRITE_PINWHEEL,
SPRITE_SPEARMOBLIN_1,
SPRITE_BOWMOBLIN_1,
SPRITE_ARROWPROJECTILE,
SPRITE_322,
SPRITE_323,
SPRITE_324,
SPRITE_FILESCREENOBJECTS,
SPRITE_OBJECTA2,
SPRITE_OBJECT6A_10,
SPRITE_VAATI_1
} Sprites;
#endif // DEFINITIONS_H