1#include <game/bases/d_enemy.hpp>
2#include <game/bases/d_a_en_carry.hpp>
3#include <game/bases/d_ef.hpp>
4#include <game/bases/d_en_fumi_check.hpp>
5#include <game/bases/d_heap_allocator.hpp>
6#include <game/mLib/m_effect.hpp>
18 float mSlideSpeedPowerup;
19 float mSlideSpeedNoPowerup;
23 virtual ~daEnShell_c();
28 virtual void boyonBegin() {}
34 virtual bool EtcDamageCheck(
dCc_c *self,
dCc_c *other);
35 virtual void Normal_VsEnHitCheck(
dCc_c *self,
dCc_c *other);
36 virtual void Normal_VsPlHitCheck(
dCc_c *self,
dCc_c *other);
37 virtual void Normal_VsYoshiHitCheck(
dCc_c *self,
dCc_c *other);
38 virtual bool hitCallback_Spin(
dCc_c *self,
dCc_c *other);
39 virtual bool hitCallback_HipAttk(
dCc_c *self,
dCc_c *other);
40 virtual bool hitCallback_YoshiHipAttk(
dCc_c *self,
dCc_c *other);
41 virtual bool hitCallback_Shell(
dCc_c *self,
dCc_c *other);
42 virtual bool hitCallback_Ice(
dCc_c *self,
dCc_c *other);
43 virtual bool setDamage(
dActor_c *actor);
44 virtual void returnState_Ice();
45 virtual bool checkComboClap(
int max);
46 virtual void FumiJumpSet(
dActor_c *actor);
47 virtual void FumiScoreSet(
dActor_c *actor);
48 virtual void YoshiFumiScoreSet(
dActor_c *actor) { daEnShell_c::FumiScoreSet(actor); }
58 virtual bool setPlayerDamage(
dActor_c *actor) {
return true; }
59 virtual bool checkSleep();
60 virtual void setEnemyTurn() {}
61 virtual bool specialFumiProc(
dActor_c *actor) {
return false; }
62 virtual bool specialFumiProc_Yoshi(
dActor_c *actor) {
return specialFumiProc(actor); }
63 virtual bool isFumiInvalid()
const {
return false; }
64 virtual void setAfterSleepState() {}
65 virtual bool turnProc() {
return false; }
66 virtual void kickSE(
int plrNo);
67 virtual void kickEffect(mVec3_c pos) { dEf::createEffect_change(
"Wm_mr_kickhit", 0, &pos,
nullptr,
nullptr); }
68 virtual bool isDieShell() {
return true; }
69 virtual void calcShellEffectPos() {}
70 virtual void slideEffect() {}
71 virtual bool isBlockHitDeath()
const {
return false; }
79 void createShell(
const char *arcName,
const char *resPath,
const char *modelName,
const char *anmTexName,
float animFrame);
82 void setKickSlide(dCc_c *self,
dActor_c *other);
86 bool cullCheck_Shell();
87 void setSlideThrowSpeed(
dActor_c *actor);
88 void setSlideKickSpeed(
dActor_c *actor);
90 void setDeathInfo_CarryBgIn(
dActor_c *);
93 void setDeathInfo_Hasami();
95 dHeapAllocator_c mAllocator;
96 nw4r::g3d::ResFile mResFile;
99 nw4r::g3d::ResAnmTexPat mResAnmTexPat;
100 m3d::anmTexPat_c mAnimTex;
102 sBcSensorPoint mSensorHead;
103 sBcSensorLine mSensorFootNormal;
104 sBcSensorLine mSensorWall;
105 sBcSensorLine mSensorFootSlide;
106 mEf::levelEffect_c mEffect;
108 int mUseBaseIceBehaviour;
112 int mSlideAirAfterThrow;
121 mAng mWakeupShakeAngle;
128 float mMugenComboSpeed;
129 float mMugenComboPosX;
131 ACTOR_PARAM_CONFIG(MugenComboAllowed, 20, 1);
135 static const u16 smc_SLEEP_TIMER = 511;
136 static const u16 smc_SLEEP_TIMER_SHAKE = 96;
bool isState(const sStateIDIf_c &other) const
Checks if the actor is currently in the given state.
The minimum required implementation for a stage actor.
dActor_c()
Constructs a new actor.
Collider ("Collision Check") class - handles collisions between actors.
A carryable enemy. [As opposed to dEnemyCarry_c, this class is used a bit more widely....
virtual bool setEatSpitOut(dActor_c *actor)
Callback for when the actor is about to be spat out.
virtual void setEatTongue(dActor_c *actor)
Callback for when the actor is targeted by Yoshi's tongue.
u16 mSleepTimer
How many frames longer the shell will remain asleep.
virtual bool ActorDrawCullCheck()
Checks if the actor is out of view.
virtual void postExecute(fBase_c::MAIN_STATE_e status)
post method for the execute operation.
virtual bool isSpinLiftUpEnable()
Returns whether the actor can be carried.
bool mIsFlipped
Whether the shell is flipped upside down from a block hit.
fBaseID_e mJumpPlayerCarryActorID
The actor which the player who jumped on the shell is currently carrying.
u16 mCarryTimer
How many more frames the sleep timer will remain paused while being carried.
int mYoshiKickable
Whether the shell can be kicked in any state by Yoshi.
int mJumpPlayerNoCarryHitTimer
For how long the shell will ignore collisions with the carried item.
static sFStateVirtualID_c< daEnShell_c > StateID_Sleep
Remaining stationary after being jumped on.
void createShell(const char *arcName, const char *resPath, const char *modelName, const char *anmTexName, float animFrame)
Loads the resources for the shell model and animation.
virtual void setCarryFall(dActor_c *carryingActor, int collisionDelay)
Callback for when the actor is dropped by the carrying actor.
bool isSlideTowards(dActor_c *actor)
virtual void setSpinLiftUpActor(dActor_c *carryingActor)
Callback for when the actor is picked up by another actor.
virtual void block_hit_init()
Callback for when a block directly beneath the actor is hit.
bool checkMugenCombo(dActor_c *player)
Checks if the player is performing the staircase infinite jump trick.
MAIN_STATE_e
The possible operation results.
A three-dimensional short angle vector.
A two-dimensional floating point vector.
A three-dimensional floating point vector.
fBaseID_e
A unique identifier for each base.
#define STATE_VIRTUAL_FUNC_DECLARE(class, name)
Declares a virtual state.
A one-dimensional short angle vector.