summaryrefslogtreecommitdiff
path: root/include/d/a
diff options
context:
space:
mode:
authorElijah Thomas <42302100+elijah-thomas774@users.noreply.github.com>2026-05-28 14:32:52 -0400
committerGitHub <noreply@github.com>2026-05-28 14:32:52 -0400
commit83f216dd37e56efddd1d19351836f3b03f074058 (patch)
tree8da270877638838dd70054bf5cd5eadac74bc934 /include/d/a
parent45374694e7e33db110983312c3e2525a6993dc76 (diff)
parent1b61a62a004ceb93a60eb4192ccbb6b601494d5c (diff)
Merge pull request #312 from elijah-thomas774/d_a_e_ks
dAcEKs_c
Diffstat (limited to 'include/d/a')
-rw-r--r--include/d/a/d_a_player.h4
-rw-r--r--include/d/a/e/d_a_e_ks.h281
-rw-r--r--include/d/a/e/d_a_en_base.h19
-rw-r--r--include/d/a/obj/d_a_obj_base.h3
4 files changed, 297 insertions, 10 deletions
diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h
index c1d45efd..e5e6669c 100644
--- a/include/d/a/d_a_player.h
+++ b/include/d/a/d_a_player.h
@@ -91,10 +91,6 @@ public:
return mHeldResFile;
}
- inline bool hasvt_0x1C0() const {
- return vt_0x1C0() != nullptr;
- }
-
inline bool isAffectedByStaminaPotion() const {
return FileManager::GetInstance()->hasStaminaPotionNormal() && getRidingActorType() != RIDING_BOAT;
}
diff --git a/include/d/a/e/d_a_e_ks.h b/include/d/a/e/d_a_e_ks.h
index 73fbc269..d63150e8 100644
--- a/include/d/a/e/d_a_e_ks.h
+++ b/include/d/a/e/d_a_e_ks.h
@@ -1,14 +1,35 @@
#ifndef D_A_E_KS_H
#define D_A_E_KS_H
+#include "common.h"
+#include "d/a/d_a_base.h"
#include "d/a/e/d_a_en_base.h"
+#include "d/col/bg/d_bg_s_acch.h"
+#include "d/col/cc/d_cc_d.h"
+#include "d/d_light_env.h"
+#include "m/m3d/m_anmtexpat.h"
+#include "m/m_mtx.h"
+#include "m/m_vec.h"
+#include "nw4r/g3d/res/g3d_resfile.h"
#include "s/s_State.hpp"
+#include "toBeSorted/d_emitter.h"
+#include "toBeSorted/d_path.h"
+#include "toBeSorted/time_area_mgr.h"
+class dTgKiesuTag_c;
class dAcEKs_c : public dAcEnBase_c {
public:
dAcEKs_c() : mStateMgr(*this) {}
virtual ~dAcEKs_c() {}
+ virtual int doDelete() override;
+ virtual int draw() override;
+ virtual bool createHeap() override;
+ virtual int actorCreate() override;
+ virtual int actorPostCreate() override;
+ virtual int actorExecute() override;
+ virtual bool restorePosRotFromCopy() override;
+
STATE_FUNC_DECLARE(dAcEKs_c, Wait);
STATE_FUNC_DECLARE(dAcEKs_c, WakeUp);
STATE_FUNC_DECLARE(dAcEKs_c, ReturnToWait);
@@ -24,8 +45,266 @@ public:
STATE_FUNC_DECLARE(dAcEKs_c, WindBlow);
STATE_FUNC_DECLARE(dAcEKs_c, PathMove);
+ STATE_MGR_DEFINE_UTIL_CHANGESTATE(dAcEKs_c);
+ STATE_MGR_DEFINE_UTIL_ISSTATE(dAcEKs_c);
+
+ enum Type_e {
+ EKS_NORMAL,
+ EKS_FIRE,
+ EKS_ELECTRIC,
+ EKS_CURSED,
+ };
+ enum StartingStateParam_e {
+ EKS_STARTSTATE_Move = 0,
+ EKS_STARTSTATE_Wait = 1,
+ EKS_STARTSTATE_PathMove = 2,
+ };
+ enum State_e {
+ EKS_STATE_Move = 0,
+ EKS_STATE_Wait = 1,
+ EKS_STATE_PathMove = 2,
+ EKS_STATE_WakeUp = 4,
+ EKS_STATE_ReturnToWait = 5,
+ EKS_STATE_Chase = 6,
+ EKS_STATE_ChaseAttack = 7,
+ EKS_STATE_Fighting = 8,
+ EKS_STATE_AttackReady = 9,
+ EKS_STATE_Attack = 10,
+ EKS_STATE_Damage = 11,
+ EKS_STATE_Stun = 12,
+ EKS_STATE_WindBlow = 13,
+ };
+ enum AnmTexPat_e {
+ EKS_TEXPAT_BLINK1,
+ EKS_TEXPAT_BLINK2,
+ EKS_TEXPAT_BLINK3,
+ };
+
+public:
+ void linkKiesuTag(dTgKiesuTag_c *pTgKs);
+ void setStartingState();
+ void setIdleState();
+
+ void fn_155_A60();
+
+ f32 getLineCrossYRange(const mVec3_c &pos, f32 range);
+
+ void kill(bool dropItem);
+ void chaseTargetY(f32, f32);
+ void playBlinkAnm();
+ void soundSqueak();
+ void soundStun();
+ void fn_155_1430();
+
+ void fn_155_1470();
+
+ // Move impl?
+ void fn_155_1C80();
+
+ /* 0 -> blink_1, 1 -> blink_2, 2 -> blink_3*/
+ void setBlink(u8 blink);
+ void setBlinkChecked(u8 blink);
+
+ void fn_155_2270();
+ /* p1 = 0 -> just LineCross return check, 1 -> increment field_0xDCB till 10 then return check*/
+ bool fn_155_29D0(s32 p1);
+ bool fn_155_2B80(bool b, s32 p1);
+ bool fn_155_2D60(bool b, s32 p1);
+ bool fn_155_2EA0();
+ bool isOutsideRange();
+ bool isNotWaitingNorDamage();
+ bool isTargeted();
+ bool checkWallCross();
+ void adjustTargetGnd();
+ void adjustTargetRoof();
+ bool ChkHit();
+ void fn_155_3460();
+ void fn_155_3480();
+ bool transitionToNextState();
+ void setAnim(char *, f32, f32, f32);
+ void fn_155_3720(f32, f32);
+ void fn_155_3750(u8 state);
+ void fn_155_37A0();
+ void fn_155_37F0();
+ void fn_155_3840();
+ void fn_155_3890();
+ void on_lbl_155_bss_389();
+ /* 0: Checks states to set AC_PROP_0x1 - 1: Unset AC_PROP_0x1*/
+ void fn_155_3900(s32 p0);
+ void setPitchYawToPoint(const mVec3_c &pnt);
+ void fn_155_3BD0(const mVec3_c &);
+ void fn_155_3BE0(const mVec3_c &);
+ void clampRotationX();
+ bool checkPathPntParam(u32 param);
+ void fn_155_3E30();
+ void fn_155_3E90();
+ void fn_155_3EC0();
+
+ /* Some Timestone Check */
+ bool fn_155_3EF0();
+
+ void fn_155_3F50();
+
private:
- /* 0x??? */ STATE_MGR_DECLARE(dAcEKs_c);
+ /* 0x378 */ dAcRef_c<dTgKiesuTag_c> mTgRef;
+ /* 0x384 */ nw4r::g3d::ResFile mResFile;
+ /* 0x388 */ d3d::AnmMdlWrapper mMdl;
+ /* 0x3F8 */ m3d::anmTexPat_c mAnmTexPat;
+ /* 0x324 */ dShadowCircle_c mShadow;
+ /* 0x42C */ dBgS_AcchCir mAcchCir;
+ /* 0x488 */ dBgS_ObjAcch mAcch;
+ /* 0x838 */ dCcD_Sph mSph;
+ /* 0x988 */ STATE_MGR_DECLARE(dAcEKs_c);
+ /* 0x9C4 */ dEmitter_c mEmitter1;
+ /* 0x9F8 */ dEmitter_c mEmitter2;
+ /* 0xA2C */ dWaterEffect_c mWaterEmitter;
+ /* 0xA74 */ ActorOnRail_Ext mRail;
+ /* 0xAA8 */ TimeAreaStruct mTimeArea;
+ /* 0xAB4 */ mMtx_c mCenterWorldMtx;
+ /* 0xAE4 */ mMtx_c field_0xAE4;
+ /* 0xB14 */ mVec3_c mPnts[10];
+ /* 0xB8C */ mVec3_c field_0xB8C;
+ /* 0xB98 */ mVec3_c field_0xB98;
+ /* 0xBA4 */ mVec3_c field_0xBA4;
+ /* 0xBB0 */ mVec3_c mTargetPos;
+ /* 0xBBC */ mVec3_c field_0xBBC;
+ /* 0xBC8 */ mVec3_c field_0xBC8;
+ /* 0xBD4 */ mVec3_c field_0xBD4;
+ /* 0xBE0 */ mVec3_c field_0xBE0;
+ /* 0xBEC */ mVec3_c field_0xBEC;
+ /* 0xBF8 */ mVec3_c field_0xBF8;
+ /* 0xC04 */ mVec3_c field_0xC04;
+ /* 0xC10 */ mVec3_c field_0xC10;
+ /* 0xC1C */ mVec3_c field_0xC1C;
+ /* 0xC28 */ mVec3_c field_0xC28;
+ /* 0xC34 */ mAng mPitch_0xC34;
+ /* 0xC36 */ mAng mYaw_0xC36;
+ /* 0xC38 */ u8 _0xC38[0xC3C - 0xC38];
+ /* 0xC3C */ f32 field_0xC3C;
+ /* 0xC40 */ f32 field_0xC40;
+ /* 0xC44 */ f32 field_0xC44;
+ /* 0xC48 */ f32 field_0xC48;
+ /* 0xC4C */ u8 _0xC4C[0xC70 - 0xC4C];
+ /* 0xC70 */ f32 field_0xC70;
+ /* 0xC74 */ u8 _0xC74[0xC90 - 0xC74];
+ /* 0xC90 */ f32 field_0xC90;
+ /* 0xC94 */ u8 _0xC94[0xCE0 - 0xC94];
+ /* 0xCE0 */ f32 field_0xCE0;
+ /* 0xCE4 */ f32 field_0xCE4;
+ /* 0xCE8 */ u8 _0xCE8[0xCF8 - 0xCE8];
+ /* 0xCF8 */ f32 field_0xCF8;
+ /* 0xCFC */ f32 field_0xCFC;
+ /* 0xD00 */ f32 field_0xD00;
+ /* 0xD04 */ f32 field_0xD04;
+ /* 0xD08 */ f32 field_0xD08;
+ /* 0xD0C */ f32 field_0xD0C;
+ /* 0xD10 */ f32 field_0xD10;
+ /* 0xD14 */ f32 field_0xD14;
+ /* 0xD18 */ f32 field_0xD18;
+ /* 0xD1C */ f32 field_0xD1C;
+ /* 0xD20 */ f32 field_0xD20;
+ /* 0xD24 */ f32 field_0xD24;
+ /* 0xD28 */ f32 field_0xD28;
+ /* 0xD2C */ u32 mCenterNode;
+ /* 0xD30 */ u8 field_0xD30;
+ /* 0xD31 */ u8 field_0xD31;
+ /* 0xD32 */ u16 mTimer;
+ /* 0xD34 */ u8 _0xD34[0xD4A - 0xD34];
+ /* 0xD4A */ s16 field_0xD4A;
+ /* 0xD4C */ s16 field_0xD4C;
+ /* 0xD4E */ s16 field_0xD4E;
+ /* 0xD50 */ s16 field_0xD50;
+ /* 0xD52 */ s16 field_0xD52;
+ /* 0xD54 */ s16 field_0xD54;
+ /* 0xD56 */ s16 field_0xD56;
+ /* 0xD58 */ s16 field_0xD58;
+ /* 0xD5A */ s16 field_0xD5A;
+ /* 0xD5C */ s16 field_0xD5C;
+ /* 0xD5E */ s16 field_0xD5E;
+ /* 0xD60 */ s16 field_0xD60;
+ /* 0xD62 */ s16 field_0xD62;
+ /* 0xD64 */ s16 field_0xD64;
+ /* 0xD66 */ s16 field_0xD66;
+ /* 0xD68 */ s16 field_0xD68;
+ /* 0xD6A */ s16 field_0xD6A;
+ /* 0xD6C */ s16 field_0xD6C;
+ /* 0xD6E */ s16 field_0xD6E;
+ /* 0xD70 */ s16 field_0xD70;
+ /* 0xD72 */ s16 field_0xD72;
+ /* 0xD74 */ s16 field_0xD74;
+ /* 0xD76 */ s16 field_0xD76;
+ /* 0xD78 */ s16 mBlinkTimer;
+ /* 0xD7A */ u16 field_0xD7A;
+ /* 0xD7C */ s16 field_0xD7C;
+ /* 0xD7E */ s16 mSqueakSoundTimer;
+ /* 0xD80 */ s16 mStunSoundTimer;
+ /* 0xD82 */ s16 field_0xD82;
+ /* 0xD84 */ s16 field_0xD84;
+ /* 0xD86 */ s16 field_0xD86;
+ /* 0xD88 */ s16 field_0xD88;
+ /* 0xD8A */ s16 field_0xD8A;
+ /* 0xD8C */ s16 field_0xD8C;
+ /* 0xD8E */ u16 field_0xD8E;
+ /* 0xD90 */ s16 field_0xD90;
+ /* 0xD92 */ s16 field_0xD92;
+ /* 0xD94 */ s16 field_0xD94;
+ /* 0xD96 */ s16 field_0xD96;
+ /* 0xD98 */ s16 field_0xD98;
+ /* 0xD9A */ s16 field_0xD9A;
+ /* 0xD9C */ s16 field_0xD9C;
+ /* 0xD9E */ s16 field_0xD9E;
+ /* 0xDA0 */ s16 field_0xDA0;
+ /* 0xDA2 */ s16 field_0xDA2;
+ /* 0xDA4 */ u8 field_0xDA4;
+ /* 0xDA5 */ u8 field_0xDA5;
+ /* 0xDA6 */ u8 field_0xDA6;
+ /* 0xDA7 */ u8 field_0xDA7;
+ /* 0xDA8 */ u8 field_0xDA8;
+ /* 0xDA9 */ u8 field_0xDA9;
+ /* 0xDAA */ u8 field_0xDAA;
+ /* 0xDAB */ u8 field_0xDAB;
+ /* 0xDAC */ u8 field_0xDAC;
+ /* 0xDAD */ u8 field_0xDAD;
+ /* 0xDAE */ u8 field_0xDAE;
+ /* 0xDAF */ u8 field_0xDAF;
+ /* 0xDB0 */ u8 field_0xDB0;
+ /* 0xDB1 */ u8 field_0xDB1;
+ /* 0xDB2 */ u8 field_0xDB2;
+ /* 0xDB3 */ u8 field_0xDB3;
+ /* 0xDB4 */ u8 field_0xDB4;
+ /* 0xDB5 */ u8 field_0xDB5;
+ /* 0xDB6 */ u8 field_0xDB6;
+ /* 0xDB7 */ u8 field_0xDB7;
+ /* 0xDB8 */ u8 field_0xDB8;
+ /* 0xDB9 */ u8 field_0xDB9;
+ /* 0xDBA */ u8 field_0xDBA;
+ /* 0xDBB */ u8 field_0xDBB;
+ /* 0xDBC */ u8 mType;
+ /* 0xDBD */ u8 field_0xDBD;
+ /* 0xDBE */ u8 field_0xDBE;
+ /* 0xDBF */ u8 field_0xDBF;
+ /* 0xDC0 */ u8 mCurrentAnmTexPat; // blink
+ /* 0xDC1 */ u8 field_0xDC1;
+ /* 0xDC2 */ u8 mCurrentState;
+ /* 0xDC3 */ u8 mNextState;
+ /* 0xDC4 */ u8 field_0xDC4;
+ /* 0xDC5 */ u8 field_0xDC5;
+ /* 0xDC6 */ u8 field_0xDC6;
+ /* 0xDC7 */ u8 mStartingState;
+ /* 0xDC8 */ u8 field_0xDC8;
+ /* 0xDC9 */ u8 field_0xDC9;
+ /* 0xDCA */ u8 field_0xDCA;
+ /* 0xDCB */ u8 field_0xDCB;
+ /* 0xDCC */ u8 field_0xDCC;
+ /* 0xDCD */ u8 field_0xDCD;
+ /* 0xDCE */ u8 field_0xDCE;
+ /* 0xDCF */ u8 field_0xDCF;
+ /* 0xDD0 */ u8 field_0xDD0;
+ /* 0xDD4 */ LIGHT_INFLUENCE mLightInfluence;
+
+ // Controlled by dTgKiesuTag_c
+ static bool lbl_155_bss_388;
+ static bool lbl_155_bss_389;
};
#endif
diff --git a/include/d/a/e/d_a_en_base.h b/include/d/a/e/d_a_en_base.h
index 258cc9b7..adbc1d0c 100644
--- a/include/d/a/e/d_a_en_base.h
+++ b/include/d/a/e/d_a_en_base.h
@@ -51,12 +51,14 @@ public:
/* 0x33C */ u32 mInteractionFlags;
/* 0x340 */ u16 field_0x338;
/* 0x342 */ u16 mHealth;
- /* 0x344 */ u8 _344[0x358 - 0x344];
+ /* 0x344 */ u8 _0x344[0x346 - 0x344];
+ /* 0x346 */ u8 field_0x346;
+ /* 0x347 */ u8 _0x347[0x358 - 0x347];
/* 0x358 */ mVec3_c mFinalBlowPosition;
- /* 0x364 */ u8 _364[0x374 - 0x364];
+ /* 0x364 */ u8 _0x364[0x374 - 0x364];
/* 0x374 */ dAcEnData *mpEnemyData;
- bool checkInteractionFlags(u32 mask) {
+ bool checkInteractionFlags(u32 mask) const {
return mInteractionFlags & mask;
}
void setInteractionFlags(u32 flag) {
@@ -65,9 +67,15 @@ public:
void resetInteractionFlags(u32 flag) {
mInteractionFlags &= ~flag;
}
+ void setFinalBlowPosition(const mVec3_c &v) {
+ mFinalBlowPosition = v;
+ }
dAcBomb_c *getBombWithinRadius(f32 radius); // fn_8002f700
+ void playDeathEffect0(const mVec3_c &pos, const mVec3_c *pScale, bool skipKill);
+ void playDeathEffect1(const mVec3_c &pos, const mVec3_c *pScale, bool skipKill);
+
// Deals with dealing damage to Enemy
// Returns a value 0-13 (similar to mStts rank?)
int fn_8002FDE0(cCcD_Obj &mCc, u16 *pTgOut);
@@ -75,9 +83,10 @@ public:
// Returns 0-3 based on collision
int fn_800301b0(const mVec3_c &pos, mAng ang, bool, f32);
void fn_80030400(m3d::mdl_c &, u8, bool, u8);
- void fn_800306d0();
+ bool fn_80030570(m3d::mdl_c &, u8, f32); // lighting related
+ void fn_800306D0();
void fn_80030700();
-
+ dAcObjBase_c *targetPlayerOrScrapper(f32 biasToScrapper);
static void fn_80030980(m3d::mdl_c &, s32, bool markDirty);
void fn_80030c20(u32 flags, f32, f32, f32, f32);
diff --git a/include/d/a/obj/d_a_obj_base.h b/include/d/a/obj/d_a_obj_base.h
index b2ae203d..fab81e6d 100644
--- a/include/d/a/obj/d_a_obj_base.h
+++ b/include/d/a/obj/d_a_obj_base.h
@@ -101,6 +101,9 @@ public:
mVec3_c &getStartingPosition() {
return mStartingPos;
}
+ const mVec3_c &getStartingPos() const {
+ return mStartingPos;
+ }
void setStartingPosition(const mVec3_c &v) {
mStartingPos = v;
}