NSMBW-Decomp
A decompilation of New Super Mario Bros. Wii
Loading...
Searching...
No Matches
d_enemy_boss.hpp
1#pragma once
2
3#include <game/bases/d_enemy.hpp>
4#include <game/bases/d_boss_life.hpp>
6#include <game/bases/d_heap_allocator.hpp>
8
9/// @brief The base class for boss enemies.
10class dEnBoss_c : public dEn_c {
11public:
12 struct GlobalData_t {
13 bool mInstantKill;
14 };
15
16 dEnBoss_c();
17 virtual ~dEnBoss_c();
18
19 // fBase_c overrides
20
21 virtual int create();
22 virtual int preExecute();
23 virtual void postExecute(MAIN_STATE_e state);
24
25 // dEn_c overrides
26
27 virtual void FumiScoreSet(dActor_c *actor) {}
28 virtual void Normal_VsPlHitCheck(dCc_c *self, dCc_c *other);
29 virtual void Normal_VsYoshiHitCheck(dCc_c *self, dCc_c *other);
30 virtual bool hitCallback_Fire(dCc_c *self, dCc_c *other);
31 virtual bool hitCallback_Shell(dCc_c *self, dCc_c *other);
32 virtual bool hitCallback_HipAttk(dCc_c *self, dCc_c *other);
33 virtual bool hitCallback_Spin(dCc_c *self, dCc_c *other);
34 virtual bool hitCallback_Star(dCc_c *self, dCc_c *other);
35 virtual bool hitCallback_Ice(dCc_c *self, dCc_c *other) { iceballInvalid(self, other); return false; }
36 virtual bool hitCallback_Slip(dCc_c *self, dCc_c *other) { return false; }
37 virtual bool hitCallback_WireNet(dCc_c *self, dCc_c *other) { return false; }
38 virtual bool hitCallback_PenguinSlide(dCc_c *self, dCc_c *other);
39 virtual void setDeathInfo_Quake(int);
40 virtual bool isQuakeDamage();
41
42 // New virtual functions
43
44 STATE_VIRTUAL_FUNC_DECLARE(dEnBoss_c, DemoWait);
45 STATE_VIRTUAL_FUNC_DECLARE(dEnBoss_c, DieFumi);
46 STATE_VIRTUAL_FUNC_DECLARE(dEnBoss_c, DieFire);
47 STATE_VIRTUAL_FUNC_DECLARE(dEnBoss_c, DieSlide);
48 STATE_VIRTUAL_FUNC_DECLARE(dEnBoss_c, DieShell);
49 STATE_VIRTUAL_FUNC_DECLARE(dEnBoss_c, DieStar);
50 STATE_VIRTUAL_FUNC_DECLARE(dEnBoss_c, DieQuake);
51
52 virtual void setBattleReady() {}
53 virtual void createModel() {}
54 virtual void createBossLife();
55 virtual int createInit();
56
57 virtual void tenmetsuReady() {} ///< Prepares the flashing effect after the boss takes damage.
58 virtual void tenmetsuProc() {} ///< Handles the flashing effect after the boss takes damage.
59 virtual void tenmetsuFin() {} ///< Ends the flashing effect after the boss takes damage.
60 virtual int getTenmetsuTime_Fire() { return 40; }
61 virtual int getTenmetsuTime_Shell() { return 40; }
62 virtual int getTenmetsuTime_Press() { return 40; }
63
64 virtual void deadAllKill();
65
66 virtual void setFumiDamage(dActor_c *) {}
67 virtual void setFumiDead(dActor_c *) {}
68
69 virtual void setFireDamage(dActor_c *) {}
70 virtual void setFireDead(dActor_c *) {}
71
72 virtual void setHipatkDamage(dActor_c *actor) { setFumiDamage(actor); }
73 virtual void setHipatkDead(dActor_c *actor) { setFumiDead(actor); }
74
75 virtual void setSlideDamage(dActor_c *) {}
76 virtual void setSlideDead(dActor_c *) {}
77
78 virtual void setStarDamage(dActor_c *) {}
79 virtual void setStarDead(dActor_c *) {}
80
81 virtual void setQuakeDamage() {}
82 virtual void setQuakeDead() {}
83
84 virtual void setShellDamage(dActor_c *) {}
85 virtual void setShellDead(dActor_c *) {}
86
87 virtual void damageProc() {}
88 virtual void deadProc() {}
89
90 virtual bool isFumiInvalid() const { return false; }
91 virtual bool isFumiDmgInvalid() const { return false; }
92 virtual bool isFireInvalid() const { return false; }
93 virtual bool isSlideInvalid() const { return true; }
94 virtual bool isShellInvalid() const { return false; }
95 virtual bool isStarInvalid() const { return false; }
96
97 virtual void fumideadEffect() {}
98 virtual void fumidmgEffect() {}
99 virtual void hitFireEffect() {}
100 virtual void hitShellEffect() {}
101
102 virtual void fumidmgSE() { playSE(SE_BOSS_CMN_STOMPED); }
103 virtual void fumideadSE() { playSE(SE_BOSS_CMN_STOMPED_LAST1); }
104 virtual void stardmgSE() { playSE(SE_BOSS_CMN_DAMAGE_STAR_DEF); }
105 virtual void stardeadSE() { playSE(SE_BOSS_CMN_DAMAGE_STAR_LAST); }
106 virtual void shelldmgSE() { playSE(SE_BOSS_CMN_DAMAGE_DEF);}
107 virtual void shelldeadSE() { playSE(SE_BOSS_CMN_DAMAGE_LAST);}
108 virtual void firedmgSE() { mpBossLife->isDmgSection() ? playSE(SE_BOSS_CMN_DAMAGE_FIRE_DEF) : playSE(SE_BOSS_CMN_DAMAGE_FIRE); }
109 virtual void firedeadSE() { playSE(SE_BOSS_CMN_DAMAGE_FIRE_LAST); }
110 virtual void quakedmgSE() { playSE(SE_BOSS_CMN_DAMAGE_STAR_DEF); }
111 virtual void quakedeadSE() { playSE(SE_BOSS_CMN_DAMAGE_STAR_LAST);}
112
113 virtual void fumiDeadVo() {}
114 virtual void damageSVo() {}
115 virtual void damageLVo() {}
116
117 void getTenmetsuTimePress(bool a) {
118 /// [Get weak function placement to work out]
119 if (a) {
121 }
122 mTenmetsuTime = getTenmetsuTime_Press();
124 }
125
126 void playSE(ulong soundID) { mSndObject.startSound(soundID, m_d0, 0); }
127 int getLife() const { return mpBossLife->mLife; }
128 bool isDead() const { return mpBossLife->mLife <= 0; }
129
130 void allocate();
131 void fumiProc(dActor_c *actor);
132
133 dHeapAllocator_c mAllocator;
134 int mTenmetsuTime; ///< Timer for the flashing effect when the boss takes damage.
135 dAudio::SndObjctEmy_c mSndObject;
136 u16 m_d0;
137 u32 mQuakeDamage;
138 dBossLifeInf_c *mpBossLife;
139};
dActor_c()
Constructs a new actor.
Definition d_actor.cpp:46
Interface for managing a boss's hit points, damage values, and damage state.
Collider ("Collision Check") class - handles collisions between actors.
Definition d_cc.hpp:133
int mTenmetsuTime
Timer for the flashing effect when the boss takes damage.
virtual void tenmetsuFin()
Ends the flashing effect after the boss takes damage.
virtual void tenmetsuProc()
Handles the flashing effect after the boss takes damage.
virtual int create()
do method for the create operation.
void getTenmetsuTimePress(bool a)
virtual int preExecute()
pre method for the execute operation.
virtual void postExecute(MAIN_STATE_e state)
post method for the execute operation.
virtual void tenmetsuReady()
Prepares the flashing effect after the boss takes damage.
dEn_c()
Constructs a new enemy actor.
Definition d_enemy.cpp:28
MAIN_STATE_e
The possible operation results.
Definition f_base.hpp:36
#define STATE_VIRTUAL_FUNC_DECLARE(class, name)
Declares a virtual state.
Definition s_State.hpp:22