tmc/include/enemy.h

292 lines
6.5 KiB
C

#ifndef ENEMY_H
#define ENEMY_H
#include "global.h"
#include "asm.h"
#include "sound.h"
#include "effects.h"
#include "flags.h"
#include "common.h"
#include "entity.h"
#include "projectile.h"
#define EM_FLAG_BOSS (1 << 0)
#define EM_FLAG_BOSS_KILLED (1 << 1)
#define EM_FLAG_HAS_HOME (1 << 2)
#define EM_FLAG_NO_DEATH_FX (1 << 3)
#define EM_FLAG_SUPPORT (1 << 4)
#define EM_FLAG_CAPTAIN (1 << 5)
#define EM_FLAG_MONITORED (1 << 6)
typedef struct {
Entity base;
Entity* child;
u8 idx;
u8 enemyFlags;
u8 rangeX;
u8 rangeY;
s16 homeX;
s16 homeY;
/*0x74*/ union SplitHWord field_0x74;
/*0x76*/ union SplitHWord field_0x76;
/*0x78*/ union SplitHWord field_0x78;
/*0x7a*/ union SplitHWord field_0x7a;
/*0x7c*/ union SplitWord field_0x7c;
/*0x80*/ union SplitHWord field_0x80;
/*0x82*/ union SplitHWord field_0x82;
/*0x84*/ union SplitHWord cutsceneBeh;
/*0x86*/ union SplitHWord field_0x86;
} Enemy;
bool32 EnemyInit(Enemy* this);
/**
* 0: _OnTick
* 1: _OnCollision
* 2: _OnKnockback
* 3: _OnDeath
* 4: _OnConfused
* 5: _OnGrabbed
*/
u32 GetNextFunction(Entity*);
void EnemyFunctionHandler(Entity*, EntityActionArray);
void EnemyFunctionHandlerAfterCollision(Entity*, void (*const[])());
void GenericKnockback(Entity*);
void EnemyCreateDeathFX(Enemy*, u32, u32);
void sub_0804A720(Entity*);
bool32 sub_08049FDC(Entity*, u32);
Entity* EnemyCreateFX(Entity*, u32);
void EnemySetFXOffset(Entity*, s32, s32, s32);
Entity* EnemyCreateProjectile(Entity*, u32, u32);
void GenericDeath(Entity*);
void sub_080026C4(u8*, u8*, u8*, u32);
void sub_080026F2(u8*, void*, u8*, u32);
bool32 sub_08049FA0(Entity*);
u32 sub_08049EE4(Entity*);
bool32 sub_08049F84(Entity*, s32);
Entity* sub_08049DF4(u32);
u32 sub_0804A044(Entity*, Entity*, u32);
s32 sub_080012DC(Entity*);
void EnemyDetachFX(Entity*);
bool32 sub_08049F1C(Entity*, Entity*, s32);
bool32 PlayerInRange(Entity*, u32, s32);
void EnemyCopyParams(Entity*, Entity*);
void GenericKnockback2(Entity*);
enum {
/*0x00*/ OCTOROK,
/*0x01*/ CHUCHU,
/*0x02*/ LEEVER,
/*0x03*/ PEAHAT,
/*0x04*/ ROLLOBITE,
/*0x05*/ DARK_NUT,
/*0x06*/ HANGING_SEED,
/*0x07*/ BEETLE,
/*0x08*/ KEESE,
/*0x09*/ DOOR_MIMIC,
/*0x0a*/ ROCK_CHUCHU,
/*0x0b*/ SPINY_CHUCHU,
/*0x0c*/ CUCCO_CHICK_AGGR,
/*0x0d*/ MOLDORM,
/*0x0e*/ ENEMY_E,
/*0x0f*/ MOLDWORM,
/*0x10*/ SLUGGULA,
/*0x11*/ PESTO,
/*0x12*/ PUFFSTOOL,
/*0x13*/ CHUCHU_BOSS,
/*0x14*/ LIKE_LIKE,
/*0x15*/ SPEAR_MOBLIN,
/*0x16*/ BUSINESS_SCRUB,
/*0x17*/ RUPEE_LIKE,
/*0x18*/ MADDERPILLAR,
/*0x19*/ WATER_DROP,
/*0x1a*/ WALL_MASTER,
/*0x1b*/ BOMB_PEAHAT,
/*0x1c*/ SPARK,
/*0x1d*/ CHASER,
/*0x1e*/ SPIKED_BEETLE,
/*0x1f*/ SENSOR_BLADE_TRAP,
/*0x20*/ HELMASAUR,
/*0x21*/ FALLING_BOULDER,
/*0x22*/ BOBOMB,
/*0x23*/ WALL_MASTER_2,
/*0x24*/ GLEEROK,
/*0x25*/ VAATI_EYES_MACRO,
/*0x26*/ TEKTITE,
/*0x27*/ WIZZROBE_WIND,
/*0x28*/ WIZZROBE_FIRE,
/*0x29*/ WIZZROBE_ICE,
/*0x2a*/ ARMOS,
/*0x2b*/ EYEGORE,
/*0x2c*/ ROPE,
/*0x2d*/ SMALL_PESTO,
/*0x2e*/ ACRO_BANDIT,
/*0x2f*/ BLADE_TRAP,
/*0x30*/ KEATON,
/*0x31*/ CROW,
/*0x32*/ MULLDOZER,
/*0x33*/ BOMBAROSSA,
/*0x34*/ WISP,
/*0x35*/ SPINY_BEETLE,
/*0x36*/ MAZAAL_HEAD,
/*0x37*/ MAZAAL_MACRO,
/*0x38*/ MAZAAL_HAND,
/*0x39*/ OCTOROK_BOSS,
/*0x3a*/ FLYING_POT,
/*0x3b*/ GOBDO,
/*0x3c*/ OCTOROK_GOLDEN,
/*0x3d*/ TEKTITE_GOLDEN,
/*0x3e*/ ROPE_GOLDEN,
/*0x3f*/ CLOUD_PIRANHA,
/*0x40*/ SCISSORS_BEETLE,
/*0x41*/ CUCCO_AGGR,
/*0x42*/ STALFOS,
/*0x43*/ FLYING_SKULL,
/*0x44*/ MAZAAL_BRACELET,
/*0x45*/ TAKKURI,
/*0x46*/ BOW_MOBLIN,
/*0x47*/ LAKITU,
/*0x48*/ LAKITU_CLOUD,
/*0x49*/ TORCH_TRAP,
/*0x4a*/ VAATI_REBORN_ENEMY,
/*0x4b*/ VAATI_PROJECTILE,
/*0x4c*/ BALL_CHAIN_SOLIDER,
/*0x4d*/ ENEMY_4D,
/*0x4e*/ GHINI,
/*0x4f*/ VAATI_TRANSFIGURED,
/*0x50*/ ENEMY_50,
/*0x51*/ VAATI_WRATH,
/*0x52*/ VAATI_ARM,
/*0x53*/ DUST,
/*0x54*/ VAATI_BALL,
/*0x55*/ OCTOROK2,
/*0x56*/ SLIME,
/*0x57*/ MINI_SLIME,
/*0x58*/ FIREBALL_GUY,
/*0x59*/ MINI_FIREBALL_GUY,
/*0x5a*/ VAATI_TRANSFIGURED_EYE,
/*0x5b*/ BUSINESS_SCRUB_PROLOGUE,
/*0x5c*/ GYORG_FEMALE,
/*0x5d*/ GYORG_MALE,
/*0x5e*/ CURTAIN,
/*0x5f*/ VAATI_WRATH_EYE,
/*0x60*/ GYORG_CHILD,
/*0x61*/ GYORG_FEMALE_EYE,
/*0x62*/ GYORG_MALE_EYE,
/*0x63*/ GYORG_FEMALE_MOUTH,
/*0x64*/ ENEMY_64,
/*0x65*/ TREE_ITEM,
/*0x66*/ ENEMY_66
};
void Octorok();
void Chuchu();
void Leever();
void Peahat();
void Rollobite();
void DarkNut();
void HangingSeed();
void Beetle();
void Keese();
void DoorMimic();
void RockChuchu();
void SpinyChuchu();
void CuccoChickAggr();
void Moldorm();
void EnemyE();
void Moldworm();
void Sluggula();
void Pesto();
void Puffstool();
void ChuchuBoss();
void LikeLike();
void SpearMoblin();
void BusinessScrub();
void RupeeLike();
void Madderpillar();
void WaterDrop();
void WallMaster();
void BombPeahat();
void Spark();
void Chaser();
void SpikedBeetle();
void SensorBladeTrap();
void Helmasaur();
void FallingBoulder();
void Bobomb();
void WallMaster2();
void Gleerok();
void VaatiEyesMacro();
void Tektite();
void WizzrobeWind();
void WizzrobeFire();
void WizzrobeIce();
void Armos();
void Eyegore();
void Rope();
void SmallPesto();
void AcroBandit();
void BladeTrap();
void Keaton();
void Crow();
void Mulldozer();
void Bombarossa();
void Wisp();
void SpinyBeetle();
void MazaalHead();
void MazaalMacro();
void MazaalHand();
void OctorokBoss();
void FlyingPot();
void Gibdo();
void OctorokGolden();
void TektiteGolden();
void RopeGolden();
void CloudPiranha();
void ScissorsBeetle();
void CuccoAggr();
void Stalfos();
void FlyingSkull();
void MazaalBracelet();
void Takkuri();
void BowMoblin();
void Lakitu();
void LakituCloud();
void TorchTrap();
void VaatiRebornEnemy();
void VaatiProjectile();
void BallChainSoldier();
void Enemy4D();
void Ghini();
void VaatiTransfigured();
void Enemy50();
void VaatiWrath();
void VaatiArm();
void Dust();
void VaatiBall();
void Slime();
void MiniSlime();
void FireballGuy();
void MiniFireballGuy();
void VaatiTransfiguredEye();
void BusinessScrubPrologue();
void GyorgFemale();
void GyorgMale();
void Curtain();
void VaatiWrathEye();
void GyorgChild();
void GyorgFemaleEye();
void GyorgMaleEye();
void GyorgFemaleMouth();
void Enemy64();
void TreeItem();
void Enemy66();
extern void (*const gUnk_080012C8[])(Entity*);
#endif // ENEMY_H