tmc/include/enemy/octorokBoss.h

78 lines
2.7 KiB
C

#ifndef OCTOROKBOSS_H
#define OCTOROKBOSS_H
#include "enemy.h"
typedef struct OctorokBossEntity OctorokBossEntity;
typedef struct {
/*0x00*/ u8 unk_0; // [0,1,2,4] is later stored in super->subtimer
/*0x01*/ u8 tailCount;
/*0x02*/ u8 field_0x2; // [0,1]
/*0x03*/ u8 targetAngle; // relates to this->field_0x7a.HALF.HI
/*0x04*/ u8 rotation; // [0,1,0xff]
/*0x05*/ u8 phase4PrevAttackPattern; // [0-4], sets this->phase4AttackPattern
/*0x06*/ u8 fallingStonesTimer;
/*0x07*/ u8 field_0x7; // some sort of counter that is only set when hit for the first time?
/*0x08*/ OctorokBossEntity* mouthObject;
/*0x0c*/ OctorokBossEntity* tailObjects[5];
/*0x20*/ OctorokBossEntity* legObjects[4];
} OctorokBossHeap;
static_assert(sizeof(OctorokBossHeap) == 0x30);
struct OctorokBossEntity {
/*0x00*/ Entity base;
/*0x68*/ union SplitHWord field_0x68;
/*0x6a*/ union SplitHWord field_0x6a;
/*0x6c*/ union SplitHWord field_0x6c;
/*0x6e*/ union SplitHWord field_0x6e;
/*0x70*/ union SplitWord field_0x70;
/*0x74*/ u16 unk_74;
/*0x76*/ u16 unk_76;
/*0x78*/ u8 attackWaitTurns; /**< Turns until the next attack */
/*0x79*/ u8 timer; /**< Reused timer */
/*0x7a*/ union SplitHWord angle; /**< Angle of legs */
/*0x7c*/ u8 bossPhase; /**< Boss Phase
0: unfrozen
1: frozen 1
2: unfrozen
3: frozen 2
4: unfrozen -> death */
/*0x7d*/ u8 currentAttack;
/*0x7e*/ u8 nextAttackIndex;
/*0x7f*/ u8 unk_7f;
/*0x80*/ u8 unk_80;
/*0x81*/ u8 phase4AttackPattern; /**< Which attack pattern is currently used in phase 4 */
/*0x82*/ union SplitHWord angularSpeed;
/*0x84*/ OctorokBossHeap* heap; /**< Heap data allocated with #zMalloc. */
};
enum OctorokRotation { ROTATION_CW, ROTATION_CCW, NO_ROTATION = 0xff };
enum OctorokBossPart { WHOLE, LEG_BR, LEG_FR, LEG_FL, LEG_BL, MOUTH, TAIL_END, TAIL };
enum OctorokBossAction {
INIT, // 0
ACTION1, // 1
HIT, // 2
INTRO, // 3
BURNING, // 4
};
enum OctorokBossAttack {
ATTACK_SPITROCK, // 0
ATTACK_VACUUM, // 1
ATTACK_SMOKE, // 2
ATTACK_FREEZE, // 3
NO_ATTACK, // 4
END_OF_ATTACK_PATTERN // 5
};
enum OctorokBossAction1SubAction {
ACTION1_AIMTOWARDSPLAYER, // Moving around with step sounds
ACTION1_WAITFORTURN, // Also step sounds
ACTION1_SUBACTION2, // Step sounds, some kind of attack that is started in OctorokBoss_StartRegularAttack?
ACTION1_WAITFORATTACK, // Wait for GET_TIMER(), then OctorokBoss_SetWaitTurnsForNextAttack
ACTION1_ATTACK, // Attack
};
#endif // OCTOROKBOSS_H