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;
156 SEAD_RTTI_OVERRIDE(
Enemy, ActorMultiState)
187
188
189
190
191
192
198
199
200
201
202
203
204
205
206
207
208
247 Enemy(
const ActorCreateParameter& param);
296 void bound(f32 eps_y, f32 scale_x, f32 scale_y);
307
308
309
310
311
401 setDeathInfo_Fumi(player, speed, StateID_DieFumi);
406 setDeathInfo_Fumi(player, speed, StateID_DieFall);
411 setDeathInfo_Fumi(player, speed, StateID_DieOther);
455
456
457
478 GameAudio::getAudioObjMap()->startSound(
"SE_OBJ_FIREBALL_DISAPP", cc_other->getOwner()->getPos());
485
486
487
488
560 void setFumiSound(s32 combo_cnt,
const GameAudio::SoundID combo_se[], u32 combo_max);
562 void setFumiSound(Actor* player,
const GameAudio::SoundID combo_se[], u32 combo_max);
569 hitdamageEffect(sead::Vector3f(pos, 0.0f));
579
580
581
599 DECLARE_STATE_VIRTUAL_ID_BASE(
Enemy, DieFumi)
632
633
634
649 DECLARE_STATE_VIRTUAL_ID_BASE(
Enemy, EatIn)
705static_assert(
sizeof(
Enemy) == 0x1880);
707#define _ENEMY_MAKE_DEATH_INFO_ARG_COMMON(arg_name, state_id, score_type, player_no)
708 EnemyDeathInfo::Arg arg_name = {
720#define _ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_COMMON(arg_name, score_type, player_no)
723#define ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM(arg_name)
726#define ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_NO_PLAYER(arg_name)
729#define ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_ALL_PLAYER(arg_name)
732#define ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_NO_SCORE(arg_name)
735#define ENEMY_MAKE_DEATH_INFO_ARG_CUSTOM_NO_SCORE_NO_PLAYER(arg_name)
740#define _ENEMY_MAKE_DEATH_INFO_ARG_FALL_COMMON(arg_name, score_type, player_no)
743#define ENEMY_MAKE_DEATH_INFO_ARG_FALL(arg_name)
746#define ENEMY_MAKE_DEATH_INFO_ARG_FALL_NO_PLAYER(arg_name)
749#define ENEMY_MAKE_DEATH_INFO_ARG_FALL_ALL_PLAYER(arg_name)
752#define ENEMY_MAKE_DEATH_INFO_ARG_FALL_NO_SCORE(arg_name)
755#define ENEMY_MAKE_DEATH_INFO_ARG_FALL_NO_SCORE_NO_PLAYER(arg_name)
760#define _ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_COMMON(arg_name, score_type, player_no)
763#define ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI(arg_name)
766#define ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_NO_PLAYER(arg_name)
769#define ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_ALL_PLAYER(arg_name)
772#define ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_NO_SCORE(arg_name)
775#define ENEMY_MAKE_DEATH_INFO_ARG_YOSHI_FUMI_NO_SCORE_NO_PLAYER(arg_name)
780#define _ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_COMMON(arg_name, score_type, player_no)
783#define ENEMY_MAKE_DEATH_INFO_ARG_SMOKE(arg_name)
786#define ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_NO_PLAYER(arg_name)
789#define ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_ALL_PLAYER(arg_name)
792#define ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_NO_SCORE(arg_name)
795#define ENEMY_MAKE_DEATH_INFO_ARG_SMOKE_NO_SCORE_NO_PLAYER(arg_name)
800#define _ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_COMMON(arg_name, score_type, player_no)
803#define ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH(arg_name)
806#define ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_NO_PLAYER(arg_name)
809#define ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_ALL_PLAYER(arg_name)
812#define ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_NO_SCORE(arg_name)
815#define ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_NO_SCORE_NO_PLAYER(arg_name)
820#define _ENEMY_MAKE_DEATH_INFO_ARG_OTHER_COMMON(arg_name, score_type, player_no)
823#define ENEMY_MAKE_DEATH_INFO_ARG_OTHER(arg_name)
826#define ENEMY_MAKE_DEATH_INFO_ARG_OTHER_NO_PLAYER(arg_name)
829#define ENEMY_MAKE_DEATH_INFO_ARG_OTHER_ALL_PLAYER(arg_name)
832#define ENEMY_MAKE_DEATH_INFO_ARG_OTHER_NO_SCORE(arg_name)
835#define ENEMY_MAKE_DEATH_INFO_ARG_OTHER_NO_SCORE_NO_PLAYER(arg_name)
840#define _ENEMY_MAKE_DEATH_INFO_ARG_AWA_COMMON(arg_name, score_type, player_no)
843#define ENEMY_MAKE_DEATH_INFO_ARG_AWA(arg_name)
846#define ENEMY_MAKE_DEATH_INFO_ARG_AWA_NO_PLAYER(arg_name)
849#define ENEMY_MAKE_DEATH_INFO_ARG_AWA_ALL_PLAYER(arg_name)
852#define ENEMY_MAKE_DEATH_INFO_ARG_AWA_NO_SCORE(arg_name)
855#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:840
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:720
#define _ENEMY_MAKE_DEATH_INFO_ARG_COMMON(arg_name, state_id, score_type, player_no)
Definition Enemy.h:707
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:760
#define _ENEMY_MAKE_DEATH_INFO_ARG_ICE_VANISH_COMMON(arg_name, score_type, player_no)
Definition Enemy.h:800
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:780
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:740
#define _ENEMY_MAKE_DEATH_INFO_ARG_OTHER_COMMON(arg_name, score_type, player_no)
Definition Enemy.h:820
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:24
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:699
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:548
FumiSeType
Definition Enemy.h:222
@ cFumiSeType_Step
Definition Enemy.h:224
@ cFumiSeType_NoEffect
Definition Enemy.h:225
@ cFumiSeType_Normal
Definition Enemy.h:223
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:700
virtual void returnState_Ice()
void setDeathInfo_FumiFall(Actor *player, const sead::Vector2f &speed)
Definition Enemy.h:404
void setDeathSound_Slip(Actor *player)
virtual void setAwaCatchEnd(Actor *awa)
virtual bool vf18C()
Definition Enemy.h:272
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:180
Enemy(const ActorCreateParameter ¶m)
void hitdamageEffect(const sead::Vector3f &pos)
virtual void fumiJumpSet(Actor *player)
void spinFumiJumpSet(Actor *player)
Definition Enemy.h:491
sead::BitFlag32 mEnFlag
Definition Enemy.h:689
void spinfumiEffect(Actor *player)
bool mIsSpinFumiFrame
Definition Enemy.h:702
void mamefumistepSE()
Definition Enemy.h:538
void setSmokeDamage_(Actor *actor) override
IceMgr mIceMgr
Definition Enemy.h:690
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:476
virtual bool checkDispIn()
virtual void hipatkEffect(const sead::Vector3f &effect_pos)
u16 mStateSubTimer
Definition Enemy.h:696
void spinfumistepSE()
Definition Enemy.h:528
void killIce()
Definition Enemy.h:320
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:178
virtual bool enemyPreDamageCheck(bool *dead, ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
u16 mStateTimer
Definition Enemy.h:695
static const f32 cDefaultGravity
Definition Enemy.h:167
static const f32 cDieFallBoundSpeedY
Definition Enemy.h:169
virtual void yoshifumiSE(Actor *player)
static const f32 cDieFallInitSpeedX[cDirType_NumX]
Definition Enemy.h:162
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:637
EnemyFumiProc mFumiProc
Definition Enemy.h:693
static const f32 cDeadNetSpeedX[cDirType_NumX]
Definition Enemy.h:212
Angle applyWaterRollDec(Angle ang)
static const f32 cWaterMaxFallSpeed
Definition Enemy.h:182
QuakeDeathType
Definition Enemy.h:238
@ cQuakeDeathType_NormalQuake
Definition Enemy.h:239
@ cQuakeDeathType_Num
Definition Enemy.h:241
@ cQuakeDeathType_BigQuake
Definition Enemy.h:240
EnemyChibiYoshiAwaData mChibiYoshiAwaData
Definition Enemy.h:691
virtual void setDeathInfo_IceBreak()
static const s32 cDieFallSpinSpeed
Definition Enemy.h:641
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:209
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:184
virtual bool hitCallback_Fire(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
u32 _1870
Definition Enemy.h:697
virtual void setDeathSound_HipAttk()
static const Angle cBaseAngleYAdd[cDirType_NumX]
Definition Enemy.h:195
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:165
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:409
EnFlag
Definition Enemy.h:229
@ cEnFlag_9
Definition Enemy.h:232
@ cEnFlag_16
Definition Enemy.h:233
@ cEnFlag_Shell
Definition Enemy.h:230
@ cEnFlag_NoCeilCheckPlayer
Definition Enemy.h:234
@ cEnFlag_Carry
Definition Enemy.h:231
s8 _187e
Definition Enemy.h:703
EnemyCounter mPlayerNoHitTimer
Definition Enemy.h:688
virtual void setAwaHit(Actor *awa)
void fumistepSE()
Definition Enemy.h:518
virtual void mamefumiSE()
virtual bool isQuakeDamage()
static const f32 cDieFallMaxFallSpeed
Definition Enemy.h:639
virtual void yoshiFumiJumpSet(Actor *player)
static f32 getDeadNetSpeedX()
Definition Enemy.h:215
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:698
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:193
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:399
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:171
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:257
bool mIsDamageFrame
Definition Enemy.h:701
virtual bool hitCallback_WireNet(ActorCollisionCheck *cc_self, ActorCollisionCheck *cc_other)
static const f32 cDefaultMaxSpeedF
Definition Enemy.h:173
static const f32 cDefaultMaxSpeedY
Definition Enemy.h:175
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