3#include <actor/ActorState.h>
4#include <audio/GameAudio.h>
5#include <enemy/Combo.h>
6#include <enemy/EnemyChibiYoshiAwaData.h>
7#include <enemy/EnemyDeathInfo.h>
8#include <enemy/IceMgr.h>
9#include <player/PlayerEnum.h>
10#include <state/FStateVirtualID.h>
24 FumiCcInfo(ActorCollisionCheck* cc_self, ActorCollisionCheck* cc_other)
68
69
70
89 mFumiCheck.setFumiRevType(type);
129 void reset(s32 player_no, u16 initial_time)
131 mTime[player_no] = initial_time;
136 return mTime[player_no];
141 return getTime(player_no) == 0;
155 SEAD_RTTI_OVERRIDE(
Enemy, ActorMultiState)
186
187
188
189
190
191
192
193
199
200
201
202
203
204
205
206
207
208
209
210
211
250 Enemy(
const ActorCreateParam& param);
299 void bound(f32 eps_y, f32 scale_x, f32 scale_y);
310
311
312
313
314
315
316
406 setDeathInfo_Fumi(player, speed, StateID_DieFumi);
411 setDeathInfo_Fumi(player, speed, StateID_DieFall);
416 setDeathInfo_Fumi(player, speed, StateID_DieOther);
460
461
462
463
464
485 GameAudio::getAudioObjMap()->startSound(
"SE_OBJ_FIREBALL_DISAPP", cc_other->getOwner()->getPos());
492
493
494
495
496
497
569 void setFumiSound(s32 combo_cnt,
const GameAudio::SoundID combo_se[], u32 combo_max);
571 void setFumiSound(Actor* player,
const GameAudio::SoundID combo_se[], u32 combo_max);
578 hitdamageEffect(sead::Vector3f(pos, 0.0f));
588
589
590
591
592
610 DECLARE_STATE_VIRTUAL_ID_BASE(
Enemy, DieFumi)
657 DECLARE_STATE_VIRTUAL_ID_BASE(
Enemy, EatIn)
713static_assert(
sizeof(
Enemy) == 0x1880);
715#define _ENEMY_MAKE_DEATH_INFO_ARG_COMMON(arg_name, state_id, score_type, player_no)
716 EnemyDeathInfo::Arg arg_name = {
728#define _ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_COMMON(arg_name, score_type, player_no)
731#define ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM(arg_name)
734#define ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_NO_PLAYER(arg_name)
737#define ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_ALL_PLAYER(arg_name)
740#define ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_NO_SCORE(arg_name)
743#define ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_NO_SCORE_NO_PLAYER(arg_name)
748#define _ENEMY_MAKE_DEATH_INFO_ARG_FALL_COMMON(arg_name, score_type, player_no)
751#define ENEMY_MAKE_DEATH_INFO_ARG_FALL(arg_name)
754#define ENEMY_MAKE_DEATH_INFO_ARG_FALL_NO_PLAYER(arg_name)
757#define ENEMY_MAKE_DEATH_INFO_ARG_FALL_ALL_PLAYER(arg_name)
760#define ENEMY_MAKE_DEATH_INFO_ARG_FALL_NO_SCORE(arg_name)
763#define ENEMY_MAKE_DEATH_INFO_ARG_FALL_NO_SCORE_NO_PLAYER(arg_name)
768#define _ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_COMMON(arg_name, score_type, player_no)
771#define ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI(arg_name)
774#define ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_NO_PLAYER(arg_name)
777#define ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_ALL_PLAYER(arg_name)
780#define ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_NO_SCORE(arg_name)
783#define ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_NO_SCORE_NO_PLAYER(arg_name)
788#define _ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_COMMON(arg_name, score_type, player_no)
791#define ENEMY_MAKE_DEATH_INFO_ARG_SMOKE(arg_name)
794#define ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_NO_PLAYER(arg_name)
797#define ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_ALL_PLAYER(arg_name)
800#define ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_NO_SCORE(arg_name)
803#define ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_NO_SCORE_NO_PLAYER(arg_name)
808#define _ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_COMMON(arg_name, score_type, player_no)
811#define ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH(arg_name)
814#define ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_NO_PLAYER(arg_name)
817#define ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_ALL_PLAYER(arg_name)
820#define ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_NO_SCORE(arg_name)
823#define ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_NO_SCORE_NO_PLAYER(arg_name)
828#define _ENEMY_MAKE_DEATH_INFO_ARG_OTHER_COMMON(arg_name, score_type, player_no)
831#define ENEMY_MAKE_DEATH_INFO_ARG_OTHER(arg_name)
834#define ENEMY_MAKE_DEATH_INFO_ARG_OTHER_NO_PLAYER(arg_name)
837#define ENEMY_MAKE_DEATH_INFO_ARG_OTHER_ALL_PLAYER(arg_name)
840#define ENEMY_MAKE_DEATH_INFO_ARG_OTHER_NO_SCORE(arg_name)
843#define ENEMY_MAKE_DEATH_INFO_ARG_OTHER_NO_SCORE_NO_PLAYER(arg_name)
848#define _ENEMY_MAKE_DEATH_INFO_ARG_AWA_COMMON(arg_name, score_type, player_no)
851#define ENEMY_MAKE_DEATH_INFO_ARG_AWA(arg_name)
854#define ENEMY_MAKE_DEATH_INFO_ARG_AWA_NO_PLAYER(arg_name)
857#define ENEMY_MAKE_DEATH_INFO_ARG_AWA_ALL_PLAYER(arg_name)
860#define ENEMY_MAKE_DEATH_INFO_ARG_AWA_NO_SCORE(arg_name)
863#define ENEMY_MAKE_DEATH_INFO_ARG_AWA_NO_SCORE_NO_PLAYER(arg_name)
#define _ENEMY_MAKE_DEATH_INFO_ARG_AWA_COMMON(arg_name, score_type, player_no)
Definition Enemy.h:848
constexpr f32 ENEMY_DIE_FALL_BOUND_SPEED_Y
Definition Enemy.h:14
#define _ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_COMMON(arg_name, score_type, player_no)
Definition Enemy.h:728
#define _ENEMY_MAKE_DEATH_INFO_ARG_COMMON(arg_name, state_id, score_type, player_no)
Definition Enemy.h:715
constexpr f32 ENEMY_DIE_FALL_INIT_SPEED_Y
Definition Enemy.h:13
#define _ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_COMMON(arg_name, score_type, player_no)
Definition Enemy.h:768
#define _ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_COMMON(arg_name, score_type, player_no)
Definition Enemy.h:808
constexpr f32 ENEMY_DIE_FALL_INIT_SPEED_X
Definition Enemy.h:12
#define _ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_COMMON(arg_name, score_type, player_no)
Definition Enemy.h:788
constexpr f32 ENEMY_FUMI_JUMP_SPEED
Definition Enemy.h:16
#define _ENEMY_MAKE_DEATH_INFO_ARG_FALL_COMMON(arg_name, score_type, player_no)
Definition Enemy.h:748
#define _ENEMY_MAKE_DEATH_INFO_ARG_OTHER_COMMON(arg_name, score_type, player_no)
Definition Enemy.h:828
FumiType
Defines the classification of player-enemy stomp and collision interactions.
Definition Enemy.h:72
@ cFumiType_Fumi
Standard Stomp: Jumping onto the enemy (e.g. normal jumps, ground pounds).
Definition Enemy.h:74
@ cFumiType_MameFumi
Mini Stomp: Jumping onto the enemy as Mini ("Mame") Mario. Also includes Mini Mario's spin-jump.
Definition Enemy.h:75
@ cFumiType_SpinFumi
Spin Stomp: Spin-jumping onto the enemy. Also includes Propeller Mario drills.
Definition Enemy.h:76
@ cFumiType_Hit
Lateral Impact: Moving into the enemy (also includes penguin slides & slope slides).
Definition Enemy.h:73
Definition ActorCollisionCheck.h:23
EnemyCounter()
Definition Enemy.h:121
sead::SafeArray< u16, cPlayerNum > mTime
Definition Enemy.h:145
void reset(s32 player_no, u16 initial_time)
Definition Enemy.h:129
u16 getTime(s32 player_no) const
Definition Enemy.h:134
bool isOver(s32 player_no) const
Definition Enemy.h:139
void setFumiRevType(u8 type)
Definition Enemy.h:55
Enemy * mEnemy
Definition Enemy.h:61
UniqueFumiCheckInf * mFumiCheckInf
Definition Enemy.h:62
EnemyFumiCheck(Enemy *enemy, UniqueFumiCheckInf *fumi_check_inf)
Definition Enemy.h:48
u8 mFumiRevType
Definition Enemy.h:63
EnemyFumiCheck mFumiCheck
Definition Enemy.h:102
FumiType operate(FumiCcInfo &info)
FumiType operate(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
Definition Enemy.h:95
EnemyFumiProc(Enemy *enemy, UniqueFumiCheckInf *fumi_check_inf)
Definition Enemy.h:82
void setFumiRevType(u8 type)
Definition Enemy.h:87
void setDeathInfo_Other(Actor *actor)
u8 mPreIceDirection
Definition Enemy.h:707
void setDeathInfo_Awa(Actor *awa)
void setFumiSound(const char *label)
static void playerFumiJump(Actor *player, f32 speed_y)
virtual bool hitCallback_Slip(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual void setQuakeJump()
void yoshifumistepSE()
Definition Enemy.h:557
FumiSeType
Definition Enemy.h:225
@ cFumiSeType_Step
Definition Enemy.h:227
@ cFumiSeType_NoEffect
Definition Enemy.h:228
@ cFumiSeType_Normal
Definition Enemy.h:226
virtual bool hitCallback_Shell(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual bool hitCallback_Spin(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual bool hitCallback_ChibiYoshiUnk(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
void spinFumiScoreSet(Actor *player)
Combo mCombo
Definition Enemy.h:708
virtual void returnState_Ice()
void setDeathInfo_FumiFall(Actor *player, const sead::Vector2f &speed)
Definition Enemy.h:409
void setDeathSound_Slip(Actor *player)
virtual void setAwaCatchEnd(Actor *awa)
virtual bool vf18C()
Definition Enemy.h:275
virtual void returnAnm_Ice()
virtual bool hitCallback_ChibiYoshiStar(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual bool hitCallback_ChibiYoshiLight(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual bool playerDamageCheck(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
static const f32 cWaterBoundSpeedY
Definition Enemy.h:179
void hitdamageEffect(const sead::Vector3f &pos)
virtual void fumiJumpSet(Actor *player)
void spinFumiJumpSet(Actor *player)
Definition Enemy.h:500
sead::BitFlag32 mEnFlag
Definition Enemy.h:697
void spinfumiEffect(Actor *player)
bool mIsSpinFumiFrame
Definition Enemy.h:710
void mamefumistepSE()
Definition Enemy.h:547
void setSmokeDamage_(Actor *actor) override
IceMgr mIceMgr
Definition Enemy.h:698
void bound(f32 eps_y, f32 scale_x, f32 scale_y)
virtual bool hitCallback_AttackUnk27(bool *dead, ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
FumiType fumiCheck(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other, FumiSeType se_type)
Process a collision with a player and return which type occurred.
virtual void vsPlayerHitCheck_Normal(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual void vsChibiYoshiHitCheck_Normal(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
void setFumiComboScore(Actor *player)
static void fireballInvalid(ActorCollisionCheck *cc_other)
Definition Enemy.h:483
virtual bool checkDispIn()
virtual void hipatkEffect(const sead::Vector3f &effect_pos)
u16 mStateSubTimer
Definition Enemy.h:704
void spinfumistepSE()
Definition Enemy.h:537
void killIce()
Definition Enemy.h:325
virtual bool yoshiDamageCheck(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
void setFumiSound(s32 combo_cnt, const GameAudio::SoundID combo_se[], u32 combo_max)
s32 calcComboPlFumiCnt(Actor *player)
virtual void vsYoshiHitCheck_Normal(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
static const f32 cWaterGravity
Definition Enemy.h:177
virtual bool enemyPreDamageCheck(bool *dead, ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
u16 mStateTimer
Definition Enemy.h:703
static const f32 cDefaultGravity
Definition Enemy.h:166
static const f32 cDieFallBoundSpeedY
Definition Enemy.h:168
virtual void yoshifumiSE(Actor *player)
static const f32 cDieFallInitSpeedX[cDirType_NumX]
Definition Enemy.h:161
virtual bool setDeathInfo_Star(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
void setDeathInfo_YoshiFumi(Actor *player)
void setNicePoint_Death()
virtual void setDeathInfo_Quake(QuakeDeathType type)
static const f32 cDieFallInitSpeedY
Definition Enemy.h:645
EnemyFumiProc mFumiProc
Definition Enemy.h:701
static const f32 cDeadNetSpeedX[cDirType_NumX]
Definition Enemy.h:215
Angle applyWaterRollDec(Angle ang)
static const f32 cWaterMaxFallSpeed
Definition Enemy.h:181
QuakeDeathType
Definition Enemy.h:241
@ cQuakeDeathType_NormalQuake
Definition Enemy.h:242
@ cQuakeDeathType_Num
Definition Enemy.h:244
@ cQuakeDeathType_BigQuake
Definition Enemy.h:243
EnemyChibiYoshiAwaData mChibiYoshiAwaData
Definition Enemy.h:699
virtual void setDeathInfo_IceBreak()
static const s32 cDieFallSpinSpeed
Definition Enemy.h:649
virtual void setAwaInvalid(Actor *awa)
virtual bool enemyDamageCheck(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
void setDeathInfo_Fall(DirType direction, s32 player_no=-1, ScoreMgr::ScoreType score_type=ScoreMgr::cScoreType_Invalid)
static bool ceilCheck(f32 pos_y, ActorCollisionCheck *cc)
virtual void mameFumiJumpSet(Actor *player)
void setDeathInfo_SpinFumi(Actor *player)
static void normal_collcheck(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
bool preExecute() override
Callback invoked before the execute operation.
virtual bool hitCallback_YoshiFire(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
static const s8 cEnMuki[cDirType_NumX]
Maps a 2D direction to a sign multiplier (1 or -1).
Definition Enemy.h:212
virtual bool hitCallback_HipAttk(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual bool hitCallback_Ice(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
static const f32 cWaterRollDecRate
Definition Enemy.h:183
virtual bool hitCallback_Fire(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
Enemy(const ActorCreateParam ¶m)
u32 _1870
Definition Enemy.h:705
virtual void setDeathSound_HipAttk()
static const Angle cBaseAngleYAdd[cDirType_NumX]
Definition Enemy.h:196
void createUpCoin(DirType dir)
virtual bool hitCallback_AttackUnk25(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual void spinfumiSE(Actor *player)
static const f32 cFumiJumpSpeed
Definition Enemy.h:164
void changeState(const StateID &state_id) override
virtual void hitYoshiEat(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
void setDeathInfo_FumiOther(Actor *player, const sead::Vector2f &speed)
Definition Enemy.h:414
EnFlag
Definition Enemy.h:232
@ cEnFlag_9
Definition Enemy.h:235
@ cEnFlag_16
Definition Enemy.h:236
@ cEnFlag_Shell
Definition Enemy.h:233
@ cEnFlag_NoCeilCheckPlayer
Definition Enemy.h:237
@ cEnFlag_Carry
Definition Enemy.h:234
s8 _187e
Definition Enemy.h:711
EnemyCounter mPlayerNoHitTimer
Definition Enemy.h:696
virtual void setAwaHit(Actor *awa)
void fumistepSE()
Definition Enemy.h:527
virtual void mamefumiSE()
virtual bool isQuakeDamage()
static const f32 cDieFallMaxFallSpeed
Definition Enemy.h:647
virtual void yoshiFumiJumpSet(Actor *player)
static f32 getDeadNetSpeedX()
Definition Enemy.h:218
virtual void fumiSE(Actor *player)
virtual void fumiEffect(Actor *player)
virtual bool hitCallback_PenguinSlide(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
void setDeathInfo_IceVanish()
bool area_XY_check(f32 x, f32 y)
u8 mDieDirection
Definition Enemy.h:706
virtual bool checkComboClap(s32 combo_cnt)
virtual void awaCatchMove(Actor *awa)
virtual bool chibiYoshiDamageCheck(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
static void iceballInvalid(ActorCollisionCheck *cc_other)
virtual bool hitCallback_YoshiBullet(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
void setDeadMode(Actor *actor)
static const Angle cBaseAngleY[cDirType_NumX]
Maps a 2D direction to a "facing" Y-angle.
Definition Enemy.h:194
virtual void vsEnemyHitCheck_Normal(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual bool hitCallback_YoshiHipAttk(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual void calcMdl_Base()
virtual bool hitCallback_Cannon(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
void setDeathInfo_Fumi(Actor *player, const sead::Vector2f &speed, const StateID &state_id)
void setDeathInfo_Fumi(Actor *player, const sead::Vector2f &speed)
Definition Enemy.h:404
virtual void yoshiFumiScoreSet(Actor *player)
virtual bool hitCallback_Star(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual bool createIceActor()
Callback for spawning ice blocks when frozen by an ice flower.
bool setTouchDrcDamage_(const sead::Vector3f &pos) override
void blockHitInit_() override
virtual bool etcDamageCheck(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
virtual void fumiScoreSet(Actor *player)
void setDeathInfo_Fall(const sead::Vector2f *speeds, DirType direction, s32 player_no=-1, ScoreMgr::ScoreType score_type=ScoreMgr::cScoreType_Invalid)
static const f32 cDefaultMaxFallSpeed
Definition Enemy.h:170
virtual void mamefumiEffect(Actor *player)
void setFumiSound(Actor *player, const GameAudio::SoundID combo_se[], u32 combo_max)
virtual bool setDamage(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
const EnemyDeathInfo & getDeathInfo() const
Definition Enemy.h:260
bool mIsDamageFrame
Definition Enemy.h:709
virtual bool hitCallback_WireNet(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
static const f32 cDefaultMaxSpeedF
Definition Enemy.h:172
static const f32 cDefaultMaxSpeedY
Definition Enemy.h:174
virtual void setDeathSound_Fire()
void setDeathInfo_Hasami()
ActorCollisionCheck * mCcSelf
Definition Enemy.h:34
FumiCcInfo(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
Definition Enemy.h:24
ActorCollisionCheck * mCcOther
Definition Enemy.h:35
bool operate(bool &, Enemy *, FumiCcInfo &) override
static UniqueFumiCheckInf * instance()
Definition Enemy.h:111
static NonUniqueFumiCheck sInstance
Definition Enemy.h:108
virtual bool operate(bool &, Enemy *, FumiCcInfo &)=0