mirror of https://github.com/zeldaret/tmc.git
292 lines
6.5 KiB
C
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
|