diff options
| author | Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> | 2026-05-28 14:32:52 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-28 14:32:52 -0400 |
| commit | 83f216dd37e56efddd1d19351836f3b03f074058 (patch) | |
| tree | 8da270877638838dd70054bf5cd5eadac74bc934 /include | |
| parent | 45374694e7e33db110983312c3e2525a6993dc76 (diff) | |
| parent | 1b61a62a004ceb93a60eb4192ccbb6b601494d5c (diff) | |
Merge pull request #312 from elijah-thomas774/d_a_e_ks
dAcEKs_c
Diffstat (limited to 'include')
| -rw-r--r-- | include/c/c_lib.h | 1 | ||||
| -rw-r--r-- | include/d/a/d_a_player.h | 4 | ||||
| -rw-r--r-- | include/d/a/e/d_a_e_ks.h | 281 | ||||
| -rw-r--r-- | include/d/a/e/d_a_en_base.h | 19 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_base.h | 3 | ||||
| -rw-r--r-- | include/d/col/c/c_cc_d.h | 18 | ||||
| -rw-r--r-- | include/d/d_player_act.h | 8 | ||||
| -rw-r--r-- | include/d/d_pouch.h | 2 | ||||
| -rw-r--r-- | include/d/t/d_t_ks.h | 103 | ||||
| -rw-r--r-- | include/f/f_base.h | 3 | ||||
| -rw-r--r-- | include/toBeSorted/d_path.h | 34 |
11 files changed, 447 insertions, 29 deletions
diff --git a/include/c/c_lib.h b/include/c/c_lib.h index be7b0d5e..c31d9bf9 100644 --- a/include/c/c_lib.h +++ b/include/c/c_lib.h @@ -12,6 +12,7 @@ s16 offsetPos(mVec3_c &target, const mVec3_c &v1, s16 angle, const mVec3_c &v2); void addCalcPos2(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep); f32 addCalcPosXZ(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep); f32 addCalcPos(mVec3_c *src, const mVec3_c &target, f32 scale, f32 maxStep, f32 minStep); +bool chasePos(mVec3_c &, mVec3_c &, f32); bool chasePosXZ(mVec3_c &, mVec3_c &, f32); // made up name 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; } diff --git a/include/d/col/c/c_cc_d.h b/include/d/col/c/c_cc_d.h index 384d253d..fa5fec03 100644 --- a/include/d/col/c/c_cc_d.h +++ b/include/d/col/c/c_cc_d.h @@ -680,6 +680,10 @@ public: mSrc.mInfo.field_0x2 |= val; } + void Set_0x50(u32 val) { + field_0x50 = val; + } + public: /* 0x1C */ cCcD_SrcGObjTg mSrc; /* 0x2C */ mVec3_c mAtHitDir; @@ -809,7 +813,7 @@ public: bool ChkTgBit23() const; bool ChkTgBit24() const; bool ChkTgBit25() const; - u16 GetTgSoundID() const; + s32 GetTgSoundID() const; s16 GetTg_0x6A() const; bool ChkTgBit8() const; u8 GetTg_0x4A() const; @@ -1082,6 +1086,9 @@ public: void OnTgInfo_0x2(u16 val) { mTg.OnInfo_0x2(val); } + void SetTg_0x50(u16 val) { + mTg.Set_0x50(val); + } void SetTg_0x40000000() { mTg.OnSPrm(0x40000000); } @@ -1108,9 +1115,18 @@ public: void ClrCo_0x400() { mCo.OffSPrm(0x400); } + void OnCo_0x8000() { + mCo.OnSPrm(0x8000); + } + void ClrCo_0x8000() { + mCo.OffSPrm(0x8000); + } void SetCo_0x400() { mCo.OnSPrm(0x400); } + void SetCo_0x8000() { + mCo.OnSPrm(0x8000); + } void SetCo_0x40000000() { mCo.OnSPrm(0x40000000); } diff --git a/include/d/d_player_act.h b/include/d/d_player_act.h index 1d4a0096..a9a9a2b3 100644 --- a/include/d/d_player_act.h +++ b/include/d/d_player_act.h @@ -250,7 +250,9 @@ public: /* vt 0x1BC */ virtual UNKWORD vt_0x1BC() { return 0; } - /* vt 0x1C0 */ virtual void *vt_0x1C0() const { + + // I believe this can only return the Beetle Actor in-flight (not on hand) + /* vt 0x1C0 */ virtual dAcObjBase_c *getBeetleInFlight() const { return nullptr; } /* vt 0x1C4 */ virtual UNKWORD getActorInActorRef1() { @@ -648,8 +650,8 @@ public: return mSpecificAttackDirection; } - inline bool hasvt_0x1C0() const { - return vt_0x1C0() != nullptr; + inline bool isBeetleInFlight() const { + return getBeetleInFlight() != nullptr; } static s32 getCurrentSwordTypeInline() { diff --git a/include/d/d_pouch.h b/include/d/d_pouch.h index 3b3ae555..1c10c91f 100644 --- a/include/d/d_pouch.h +++ b/include/d/d_pouch.h @@ -25,6 +25,8 @@ bool swapStockItems(s32 slot1, s32 slot2); void sortStock(); +bool tryDropItem(f32 chance); + #define ITEM_CHECK_SLOT_NONE 60 u16 itemCheckFindItemSlot(ITEM_ID item); diff --git a/include/d/t/d_t_ks.h b/include/d/t/d_t_ks.h index e0b066c0..aedcf9dd 100644 --- a/include/d/t/d_t_ks.h +++ b/include/d/t/d_t_ks.h @@ -1,9 +1,16 @@ #ifndef D_T_KS_H #define D_T_KS_H +#include "d/a/d_a_base.h" #include "d/t/d_tg.h" +#include "m/m_angle.h" +#include "m/m_mtx.h" +#include "m/m_vec.h" #include "s/s_State.hpp" +#include "toBeSorted/d_path.h" +#include "toBeSorted/time_area_mgr.h" +class dAcEKs_c; class dTgKiesuTag_c : public dTg_c { public: dTgKiesuTag_c() : mStateMgr(*this) {} @@ -17,8 +24,102 @@ public: STATE_FUNC_DECLARE(dTgKiesuTag_c, ControlPathMove); STATE_FUNC_DECLARE(dTgKiesuTag_c, DoNothing); + /* fn_154_8B0 */ + mVec3_c &getSpawnKsPosition(); + + void incrementField_0x456() { + field_0x456++; + } + + void setField_0x47A() { + field_0x47A = true; + } + private: - /* 0x??? */ STATE_MGR_DECLARE(dTgKiesuTag_c); + /* 0x0FC */ STATE_MGR_DECLARE(dTgKiesuTag_c); + /* 0x138 */ dAcRef_c<dAcEKs_c> mKsRefs[16]; + /* 0x1F8 */ mMtx_c mAreaMtx; + /* 0x228 */ ActorOnRail_Ext mRail; + /* 0x25C */ TimeAreaStruct mTimeArea; + /* 0x268 */ mMtx_c field_0x268; + + /* 0x298 */ u8 _0x298[0x31C - 0x298]; + + /* 0x31C */ mVec3_c field_0x31C; + /* 0x328 */ mVec3_c field_0x328; + /* 0x334 */ mVec3_c field_0x334; + /* 0x340 */ mVec3_c field_0x340; + /* 0x34C */ mVec3_c field_0x34C; + + /* 0x358 */ u8 _0x358[0x37C - 0x358]; + + /* 0x37C */ mVec3_c mTargetPosition; + /* 0x388 */ mVec3_c mSpawnKsPosition; + + /* 0x394 */ u8 _0x394[0x3A0 - 0x394]; + + /* 0x3A0 */ mAng3_c mSpawnKsAngle; + /* 0x3A8 */ mAng3_c field_0x3A8; + /* 0x3AC */ mAng field_0x3AC; // pitch + /* 0x3AE */ mAng field_0x3AE; // yaw + + /* 0x3B0 */ u8 _0x3B0[0x3B4 - 0x3B0]; + + /* 0x3B4 */ f32 field_0x3B4; + /* 0x3B8 */ f32 field_0x3B8; // Y pos offset + /* 0x3BC */ f32 field_0x3BC; // X/Z scale + /* 0x3C0 */ f32 field_0x3C0; // Y scale + + /* 0x3C4 */ u8 _0x3C4[0x3D8 - 0x3C4]; + + /* 0x3D8 */ f32 field_0x3D8; // Y scale + /* 0x3DC */ f32 field_0x3DC; // X/Z scale + + /* 0x3E0 */ u8 _0x3E0[0x3EC - 0x3E0]; + + /* 0x3EC */ mVec3_c field_0x3EC; + + /* 0x3F8 */ u8 _0x3F8[0x448 - 0x3F8]; + + /* 0x448 */ s16 field_0x448; + + // Related to Control? + /* 0x44A */ s16 mNumKsControl; + /* 0x44C */ s16 field_0x44C; + /* 0x44E */ s16 field_0x44E; + /* 0x450 */ s16 field_0x450; + + // Related to ControlFighting? + /* 0x452 */ s16 field_0x452; + /* 0x454 */ s16 field_0x454; + /* 0x456 */ s16 field_0x456; + /* 0x458 */ s16 field_0x458; + /* 0x45A */ s16 field_0x45A; + /* 0x45C */ s16 field_0x45C; + /* 0x45E */ s16 field_0x45E; + + /* 0x460 */ s16 field_0x460; + /* 0x462 */ s16 mMaxKsToLink; + + /* 0x464 */ u8 _0x464[0x468 - 0x464]; + + /* 0x468 */ s16 field_0x468; + /* 0x46A */ s16 field_0x46A; + /* 0x46C */ s16 mNumKsAlive; + /* 0x46E */ s16 field435_0x46e; + + /* 0x470 */ u8 _0x470[0x474 - 0x470]; + + /* 0x474 */ bool field_0x474; + + /* 0x475 */ u8 _0x475[0x47A - 0x475]; + + /* 0x47A */ bool field_0x47A; + /* 0x47E */ bool mbAllKsActive; + + /* 0x48A */ u8 field_0x48A; // Related to getting spawnPos/ Type? + + /* 0x48E */ u8 mNumKsActive; }; #endif diff --git a/include/f/f_base.h b/include/f/f_base.h index 8ef5ac43..296fca1e 100644 --- a/include/f/f_base.h +++ b/include/f/f_base.h @@ -92,6 +92,9 @@ public: u32 getFromParams(u8 shift, u32 mask) { return (mParams >> shift) & mask; } + f32 getFromParams(u8 shift, u32 mask, f32 scale) { + return ((mParams >> shift) & mask) * scale; + } public: fBase_c(); diff --git a/include/toBeSorted/d_path.h b/include/toBeSorted/d_path.h index 56856008..1208c191 100644 --- a/include/toBeSorted/d_path.h +++ b/include/toBeSorted/d_path.h @@ -59,6 +59,11 @@ public: return mpPathPtr->pointCount; } + s32 getLastPointIdx() const { + s32 pnt = getNumPoints() - 1; + return pnt >= 0 ? pnt : 0; + } + bool initWithPathId(s32 pathId, s32 roomId, bool pathSubtype); bool initWithPathIndex(s32 pathIndex, s32 roomId, bool pathSubtype); @@ -118,18 +123,6 @@ public: return mSegmentTime; } - bool CheckFlag(u32 flag) const { - return (mFlags & flag) != 0; - } - - void ClearFlag(u32 flag) { - mFlags &= ~flag; - } - - void SetFlag(u32 flag) { - mFlags |= flag; - } - const mVec3_c &getPosition() const { return mPosition; } @@ -138,22 +131,35 @@ public: mSpeed = speed; } + f32 getSpeed() const { + return mSpeed; + } + void getDirection(mVec3_c &result) { mPath.getDirection(mSegmentIndex, mSegmentTime, result); } + const mVec3_c *getPoint(s32 idx) const { + return reinterpret_cast<const mVec3_c *>(mPath.getPoint(idx)); + } + bool checkFlag(u32 flags) const { return (mFlags & flags) != 0; } - void offFlag(u32 flags) { + void unsetFlag(u32 flags) { mFlags &= ~flags; } - void onFlag(u32 flags) { + void setFlag(u32 flags) { mFlags |= flags; } + const dPath_c &getPath() const { + return mPath; + } + s32 getNextPointIndex2() const; + private: s32 getNextPointIndex(s32 point) const; s32 getNextPointIndex() const; |
