diff options
| author | Elijah Thomas <42302100+elijah-thomas774@users.noreply.github.com> | 2025-05-10 17:23:35 -0400 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-05-10 17:23:35 -0400 |
| commit | e1aad98a2d5f8f597d95557cbfc100affb0cc64d (patch) | |
| tree | 48cc23c60ed23a9b8ad0c7973a3a0e39cd9a71d6 /include | |
| parent | 91e2efd1b21348f63aa676371e6489385ab14d2e (diff) | |
progress on d_a_obj_ivy_rope (#109)
* init
* couple more funcs
* progress
* smol progress
* smol progress 2
* Dont get your hopes up, I just had some lingering things :P
* fix merge
Diffstat (limited to 'include')
| -rw-r--r-- | include/c/c_lib.h | 1 | ||||
| -rw-r--r-- | include/d/a/d_a_player.h | 2 | ||||
| -rw-r--r-- | include/d/a/obj/d_a_obj_ivy_rope.h | 236 | ||||
| -rw-r--r-- | include/d/col/c/c_cc_d.h | 19 | ||||
| -rw-r--r-- | include/d/col/cc/d_cc_d.h | 1 | ||||
| -rw-r--r-- | include/d/d_rope_model.h | 26 | ||||
| -rw-r--r-- | include/m/m3d/m_bline.h | 21 | ||||
| -rw-r--r-- | include/m/m_mtx.h | 14 | ||||
| -rw-r--r-- | include/toBeSorted/actor_on_rail.h | 9 |
9 files changed, 309 insertions, 20 deletions
diff --git a/include/c/c_lib.h b/include/c/c_lib.h index 1862235e..ea300953 100644 --- a/include/c/c_lib.h +++ b/include/c/c_lib.h @@ -9,6 +9,7 @@ namespace cLib { s32 targetAngleY(const mVec3_c &target, const mVec3_c &source); s32 targetAngleX(const mVec3_c &target, const mVec3_c &source); 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); // made up name f32 easeOut(f32 value, f32 exponent); diff --git a/include/d/a/d_a_player.h b/include/d/a/d_a_player.h index e56ec7f5..ed043bff 100644 --- a/include/d/a/d_a_player.h +++ b/include/d/a/d_a_player.h @@ -98,7 +98,7 @@ public: /* vt 0x0D8 */ virtual void getItemFromClawshotsMaybe(); /* vt 0x0DC */ virtual void vt_0x0DC(dAcBase_c *, mVec3_c &); /* vt 0x0E0 */ virtual void isUsingBomb(); - /* vt 0x0E4 */ virtual void vt_0x0E4(); + /* vt 0x0E4 */ virtual mVec3_c &getCenterTranslation() const; /* vt 0x0E8 */ virtual void vt_0x0E8(); /* vt 0x0EC */ virtual void vt_0x0EC(); /* vt 0x0F0 */ virtual void vt_0x0F0(); diff --git a/include/d/a/obj/d_a_obj_ivy_rope.h b/include/d/a/obj/d_a_obj_ivy_rope.h index f873d816..1f342416 100644 --- a/include/d/a/obj/d_a_obj_ivy_rope.h +++ b/include/d/a/obj/d_a_obj_ivy_rope.h @@ -1,14 +1,34 @@ #ifndef D_A_OBJ_IVY_ROPE_H #define D_A_OBJ_IVY_ROPE_H +#include "common.h" #include "d/a/obj/d_a_obj_base.h" +#include "d/col/c/c_cc_d.h" +#include "d/col/cc/d_cc_d.h" +#include "d/d_rope_model.h" +#include "d/d_shadow.h" +#include "m/m3d/m_smdl.h" +#include "m/m_angle.h" +#include "m/m_vec.h" #include "s/s_State.hpp" -#include "s/s_StateMgr.hpp" +#include "toBeSorted/actor_event.h" +#include "toBeSorted/actor_on_rail.h" +#include "toBeSorted/attention.h" class dAcOivyRope_c : public dAcObjBase_c { public: - dAcOivyRope_c() : mStateMgr(*this, sStateID::null) {} - virtual ~dAcOivyRope_c() {} + dAcOivyRope_c() : mField_0x330(0), mStateMgr(*this, sStateID::null), mStts2(this), mEvent(*this, nullptr) {} + virtual ~dAcOivyRope_c(); + + virtual int create() override; + virtual int doDelete() override; + virtual int draw() override; + virtual bool createHeap() override; + virtual int actorExecute() override; + virtual int actorExecuteInEvent() override; + virtual void registerInEvent() override; + virtual bool canBeLinkedToWoodTag() override; + virtual bool drop() override; STATE_FUNC_DECLARE(dAcOivyRope_c, RopeWait); STATE_FUNC_DECLARE(dAcOivyRope_c, PlayerGrip); @@ -20,8 +40,216 @@ public: STATE_FUNC_DECLARE(dAcOivyRope_c, TerryRopeInit); STATE_FUNC_DECLARE(dAcOivyRope_c, TerryRopePlayerCarry); + void initTightRope(); + void fn_256_10C0(); + + UNKTYPE fn_256_11A0(UNKTYPE); + UNKTYPE fn_256_1240(UNKTYPE); + UNKTYPE fn_256_1480(UNKTYPE); + UNKTYPE fn_256_2160(UNKTYPE); + void fn_256_26B0(int, bool, f32); + UNKTYPE fn_256_2C40(UNKTYPE); + UNKTYPE fn_256_2D00(UNKTYPE); + UNKTYPE fn_256_2DC0(UNKTYPE); + UNKTYPE fn_256_2EA0(UNKTYPE); + void fn_256_30A0(mVec3_c &out); + UNKTYPE fn_256_33B0(UNKTYPE); + UNKTYPE fn_256_34B0(UNKTYPE); + UNKTYPE fn_256_3540(UNKTYPE); + UNKTYPE fn_256_35E0(UNKTYPE); + UNKTYPE fn_256_36A0(UNKTYPE); + UNKTYPE fn_256_3770(UNKTYPE); + UNKTYPE fn_256_3A20(UNKTYPE); + UNKTYPE fn_256_3B90(UNKTYPE); + UNKTYPE calcDistance(UNKTYPE); + UNKTYPE fn_256_3E30(UNKTYPE); + UNKTYPE fn_256_3E70(UNKTYPE); + UNKTYPE fn_256_3F60(UNKTYPE); + UNKTYPE fn_256_43B0(UNKTYPE); + UNKTYPE fn_256_4520(UNKTYPE); + UNKTYPE fn_256_4760(UNKTYPE); + UNKTYPE fn_256_4C80(UNKTYPE); + UNKTYPE fn_256_4CA0(UNKTYPE); + int createBase(); + UNKTYPE fn_256_5190(UNKTYPE); + UNKTYPE fn_256_5590(UNKTYPE); + UNKTYPE fn_256_57F0(UNKTYPE); + UNKTYPE fn_256_5B00(UNKTYPE); + UNKTYPE fn_256_5B64(UNKTYPE); + UNKTYPE fn_256_5B70(UNKTYPE); + UNKTYPE fn_256_5DB0(UNKTYPE); + UNKTYPE fn_256_5FF0(UNKTYPE); + UNKTYPE fn_256_6100(UNKTYPE); + UNKTYPE fn_256_61F0(UNKTYPE); + UNKTYPE fn_256_7300(UNKTYPE); + UNKTYPE fn_256_7310(UNKTYPE); + UNKTYPE fn_256_73D0(UNKTYPE); + UNKTYPE fn_256_7560(UNKTYPE); + UNKTYPE fn_256_7680(UNKTYPE); + UNKTYPE fn_256_7D50(UNKTYPE); + UNKTYPE fn_256_8060(UNKTYPE); + UNKTYPE fn_256_8590(UNKTYPE); + UNKTYPE fn_256_8990(UNKTYPE); + UNKTYPE fn_256_8D10(UNKTYPE); + void fn_256_9120(u16); + UNKTYPE fn_256_9280(UNKTYPE); + UNKTYPE fn_256_9450(UNKTYPE); + UNKTYPE fn_256_9C80(UNKTYPE); + UNKTYPE fn_256_A040(UNKTYPE); + void fn_256_A2C0(bool); + bool fn_256_A750(bool bool0, f32 float0); + f32 fn_256_AA40(); + f32 fn_256_AAB0(f32, f32); + int fn_256_AAF0(f32, f32); + void fn_256_ABA0(); + void fn_256_AC00(); + void fn_256_AE00(); + void fn_256_B2B0(); + void fn_256_BAB0(mVec3_c &out, int idx, s16 xRot, s16 yRot); + void fn_256_BB70(); + void fn_256_BE80(); + void fn_256_BFF0(int, f32, f32); + f32 fn_256_C200(int); + void fn_256_C410(); + bool fn_256_C6F0(); + void fn_256_C740(); + void fn_256_C810(mVec3_c &pOut, int idx); + void fn_256_C960(); + void fn_256_C980(f32, f32); + UNKTYPE fn_256_C9B0(UNKTYPE); + void fn_256_CD40(); + void fn_256_CE20(f32 *, f32 *, f32 *); + void fn_256_CFA0(bool); + void fn_256_D050(); + void fn_256_D110(); + void fn_256_D1B0(); + void fn_256_D2B0(); + void fn_256_D3D0(mVec3_c &pOut1, mVec3_c &pOut2, s16 param2, bool bool0, f32 float0); + const mVec3_c &fn_256_D730(s32 idx); // Get Path Point + void fn_256_D7A0(s32, const mVec3_c &); // Set Path Point + void fn_256_D850(); // Draw Shadow + void fn_256_DAA0(bool, bool, f32, f32); + void fn_256_DE80(); + void fn_256_DEE0(); + u32 fn_256_DF30(); + void fn_256_E3E0(); + bool fn_256_E790(); + + bool checkSubtype(u32 sub) { + return mSubtype == sub; + } + private: - /* 0x??? */ STATE_MGR_DECLARE(dAcOivyRope_c); + /* 0x 330 */ UNKWORD mField_0x330; + /* 0x 334 */ m3d::smdl_c mMdlArr[2]; + /* 0x 36C */ dShadowCircle_c mShadow; + /* 0x 374 */ dCcD_Sph mSph; + /* 0x 4C4 */ dCcD_Cps mCps1; + /* 0x 634 */ dCcD_Cps mCps2; + /* 0x 7A4 */ dCcD_Cps mCpsArr[3]; + /* 0x BF4 */ dCcD_Cyl mCyl; + /* 0x D44 */ STATE_MGR_DECLARE(dAcOivyRope_c); + /* 0x D80 */ dMultiMat_c mRopeMdl; + /* 0x DCC */ dSkinMat_c mCoilMdl; + /* 0x E24 */ dMultiMat_c mRopeMdl2; + /* 0x E70 */ ActorOnRail3 mPath; + /* 0x E88 */ u8 _E88[0xE94 - 0xE88]; + /* 0x E94 */ cCcD_Stts mStts2; + /* 0x ED0 */ ActorEventRelated mEvent; + /* 0x F20 */ mVec3_c mTightropeEnd; + /* 0x F2C */ mVec3_c mTightropeStart; + /* 0x F38 */ mVec3_c mField_0xF38; + /* 0x F44 */ mVec3_c mField_0xF44; + /* 0x F50 */ mVec3_c mField_0xF50; + /* 0x F5C */ u8 _F5C[0xF68 - 0xF5C]; + /* 0x F68 */ mVec3_c mField_0xF68; + /* 0x F74 */ u8 _F74[0xFA4 - 0xF74]; + /* 0x FA4 */ f32 mField_0xFA4; + /* 0x FA8 */ f32 mField_0xFA8; + /* 0x FAC */ f32 mField_0xFAC; + /* 0x FB0 */ f32 mField_0xFB0; + /* 0x FB4 */ f32 mField_0xFB4; + /* 0x FB8 */ f32 mDistance; + /* 0x FBC */ f32 mOldDistance; + /* 0x FC0 */ UNKWORD mField_0xFC0; + /* 0x FC4 */ f32 mField_0xFC4; + /* 0x FC8 */ UNKWORD mField_0xFC8; + /* 0x FCC */ mAng mField_0xFCC; + /* 0x FCE */ u16 mField_0xFCE; + /* 0x FD0 */ u8 _FD0[0xFD2 - 0xFD0]; + /* 0x FD2 */ s16 mField_0xFD2; + /* 0x FD4 */ s16 mField_0xFD4; + /* 0x FD6 */ s16 mField_0xFD6; + /* 0x FD8 */ s16 mField_0xFD8; + /* 0x FDA */ mAng mField_0xFDA; + /* 0x FDC */ s16 mField_0xFDC; + /* 0x FDA */ u8 _FDE[0xFE2 - 0xFDE]; + /* 0x FE2 */ s16 mField_0xFE2; + /* 0x FE4 */ u8 mDropsceneFlag; + /* 0x FE5 */ u8 mWoodTagSceneflag; + /* 0x FE6 */ u8 mSegmentCount; + /* 0x FE7 */ u8 mSubtype; + /* 0x FE8 */ bool mbField_0xFE8; + /* 0x FE9 */ u8 mField_0xFE9; + /* 0x FEA */ u8 mField_0xFEA; + /* 0x FEB */ u8 mField_0xFEB; + /* 0x FEC */ u8 mField_0xFEC; + /* 0x FED */ u8 mEventIdx; + /* 0x FEE */ u8 mField_0xFEE; + /* 0x FEF */ u8 mField_0xFEF; + /* 0x FF0 */ u8 mField_0xFF0[4]; + /* 0x FF4 */ u8 mField_0xFF4; + /* 0x FF5 */ u8 mField_0xFF5; + /* 0x FF6 */ u8 mField_0xFF6; + /* 0x FF7 */ u8 mField_0xFF7; + /* 0x FF8 */ u8 mField_0xFF8; + /* 0x FF9 */ u8 _FF9[0x1005 - 0xFF9]; + /* 0x1005 */ u8 mField_0x1005; + /* 0x1006 */ u8 _1006[0x1010 - 0x1006]; + /* 0x1010 */ mVec3_c mField_0x1010; + /* 0x101C */ mVec3_c mField_0x101C; + /* 0x1028 */ f32 mField_0x1028; + /* 0x102C */ f32 mField_0x102C; + /* 0x1030 */ mAng mField_0x1030; + /* 0x1032 */ mAng mField_0x1032; + /* 0x1034 */ u8 _1034[0x1038 - 0x1034]; + /* 0x1038 */ u8 mField_0x1038; + /* 0x1039 */ u8 mField_0x1039; // TODO make field enum + /* 0x103A */ s8 mField_0x103A; + /* 0x103B */ u8 mField_0x103B; + /* 0x103C */ u8 mField_0x103C; + /* 0x103D */ u8 mField_0x103D; + /* 0x103E */ bool mDropped; + /* 0x1040 */ f32 mField_0x1040; + /* 0x1044 */ u8 _1044[0x1050 - 0x1044]; + /* 0x1050 */ f32 mField_0x1050; + /* 0x1054 */ u8 _1054[0x105E - 0x1054]; + /* 0x105E */ u8 mField_0x105E; + /* 0x105F */ u8 mField_0x105F; + /* 0x1060 */ u8 mField_0x1060; + /* 0x1061 */ u8 mField_0x1061; + /* 0x1062 */ u8 mField_0x1062; + /* 0x1064 */ f32 mField_0x1064; + /* 0x1068 */ f32 mField_0x1068; + /* 0x106C */ f32 mField_0x106C; + /* 0x1070 */ u8 _1070[0x1083 - 0x1070]; + /* 0x1083 */ u8 mField_0x1083; + /* 0x1084 */ u8 _1084[0x1088 - 0x1084]; + /* 0x1088 */ dCcD_Cps mCpsArr2[16]; + /* 0x2788 */ mVec3_c *mPnts1; + /* 0x278C */ mVec3_c *mPnts2; + /* 0x2790 */ u16 mField_0x2790; + /* 0x2792 */ u8 mField_0x2792; + /* 0x2793 */ bool mbField_0x2793; + /* 0x2794 */ u8 _2794[0x27C0 - 0x2794]; + /* 0x27C0 */ f32 mField_0x27C0; + /* 0x27C4 */ bool mbField_0x27C4; + /* 0x27C5 */ bool mbField_0x27C5; + + static InteractionTargetDef sInteraction; + static dCcD_SrcCps sCpsSrc; + static dCcD_SrcSph sSphSrc; + static dCcD_SrcCyl sCylSrc; }; #endif diff --git a/include/d/col/c/c_cc_d.h b/include/d/col/c/c_cc_d.h index 2893419d..1636248d 100644 --- a/include/d/col/c/c_cc_d.h +++ b/include/d/col/c/c_cc_d.h @@ -293,6 +293,9 @@ public: /* 0x38 */ int mRank; cCcD_Stts(dAcObjBase_c *); + ~cCcD_Stts() { + mpActor = nullptr; + } void Move(); int GetID() const; void PlusCcMove(f32, f32, f32); @@ -357,6 +360,8 @@ enum dCcD_ObjAtType { /* 0x 0200 0000 */ AT_TYPE_0x2000000 = (1 << 25), /* 0x 0400 0000 */ AT_TYPE_KOLOKTOS_SWORD = (1 << 26), /* 0x 0800 0000 */ AT_TYPE_0x8000000 = (1 << 27), + /* 0x 0148 8200 */ AT_TYPE_COMMON0 = + AT_TYPE_BUGNET | AT_TYPE_BEETLE | AT_TYPE_0x80000 | AT_TYPE_0x8000 | AT_TYPE_WIND, }; enum cCcD_AtModifiers_e { @@ -790,8 +795,14 @@ public: mCo.OnSPrm(f); } - void SetTgType(u32 flag) { - mTg.SetType(flag); + void SetTgType(u32 type) { + mTg.SetType(type); + } + void OnTgType(u32 type) { + mTg.OnType(type); + } + void OffTgType(u32 type) { + mTg.OffType(type); } void SetAtFlag(u32 flag) { mAt.SetSPrm(flag); @@ -913,6 +924,10 @@ public: return mTg.MskSPrm(0x400); } + void OnTg_0x200000() { + mTg.OnSPrm(0x200000); + } + void SetTg_0x4B(u8 val) { mTg.Set_0x4B(val); } diff --git a/include/d/col/cc/d_cc_d.h b/include/d/col/cc/d_cc_d.h index a99588f9..88dff6b7 100644 --- a/include/d/col/cc/d_cc_d.h +++ b/include/d/col/cc/d_cc_d.h @@ -2,7 +2,6 @@ #define D_CC_D_H #include "d/col/c/c_cc_d.h" -#include "d/col/c/c_m3d.h" #include "m/m_vec.h" struct dCcD_SrcCps { diff --git a/include/d/d_rope_model.h b/include/d/d_rope_model.h new file mode 100644 index 00000000..819663d4 --- /dev/null +++ b/include/d/d_rope_model.h @@ -0,0 +1,26 @@ +#ifndef D_ROPE_MODEL_H +#define D_ROPE_MODEL_H + +#include "m/m3d/m_bline.h" + +// +// The names in this file are made up based on the usage in setupGX +// + +class dMultiMat_c : public m3d::blineMat_c { +public: + dMultiMat_c() {} + virtual void setupGX(bool bTransparent) override; +}; + +class dSkinMat_c : public m3d::blineMat_c { +public: + dSkinMat_c() : mField_0x4C(-1), mField_0x50(0xFF), mField_0x54(0xFF) {} + virtual void setupGX(bool bTransparent) override; + + /* 0x4C */ s32 mField_0x4C; + /* 0x50 */ s32 mField_0x50; + /* 0x54 */ s32 mField_0x54; +}; + +#endif diff --git a/include/m/m3d/m_bline.h b/include/m/m3d/m_bline.h index cb47c32f..7e4a26f2 100644 --- a/include/m/m3d/m_bline.h +++ b/include/m/m3d/m_bline.h @@ -1,9 +1,11 @@ #ifndef M3D_BLINE_H #define M3D_BLINE_H +#include "common.h" #include "egg/gfx/eggTexture.h" #include "m/m3d/m_proc.h" #include "m/m_math.h" +#include "m/m_vec.h" #include "nw4r/ut/ut_Color.h" namespace m3d { @@ -11,26 +13,20 @@ namespace m3d { // The Actual line class bline_c { public: - bline_c() : mpPathArr(0), mpVtxPosArr(0), mpVtxNrmArr(0), mpVtxTexArr(0), mFlags(0) {} + bline_c() : mpPathArr(nullptr), mpVtxPosArr(nullptr), mpVtxNrmArr(nullptr), mpVtxTexArr(nullptr), mFlags(0) {} // This is mainly a Guess, When the array is created, it has both a ctor/dtor struct VtxPos { mVec3_c pos1; mVec3_c pos2; }; struct Vec3u8 { + Vec3u8() {} u8 x, y, z; }; // This is mainly a Guess, When the array is created, it has only a ctor struct VtxNrm { -#pragma warning off(10402) - union { - struct { - Vec3u8 nrm1; - Vec3u8 nrm2; - }; - EGG::Vector3s nrm_u16; // There is a short by short copy later - }; -#pragma warning on(10402) + Vec3u8 nrm1; + Vec3u8 nrm2; }; // This is mainly a Guess, When the array is created, it doesnt use the array alloc struct VtxTex { @@ -44,6 +40,10 @@ public: void remove(); void draw(); + mVec3_c &getPathPoint(u16 idx) { + return mpPathArr[idx]; + } + // vt at 0x08 virtual ~bline_c(); @@ -63,6 +63,7 @@ public: class blineMat_c : public proc_c { public: + blineMat_c() : mpLineArr(nullptr) {} virtual ~blineMat_c(); virtual void remove() override; virtual void drawOpa() override; diff --git a/include/m/m_mtx.h b/include/m/m_mtx.h index 668cfe5f..d353a30d 100644 --- a/include/m/m_mtx.h +++ b/include/m/m_mtx.h @@ -17,7 +17,7 @@ class mMtx_c : public EGG::Matrix34f { typedef const f32 (*MtxRefConst)[4]; public: - mMtx_c(){}; + mMtx_c() {}; mMtx_c(f32 xx, f32 xy, f32 xz, f32 xw, f32 yx, f32 yy, f32 yz, f32 yw, f32 zx, f32 zy, f32 zz, f32 zw); operator MtxRef() { @@ -78,17 +78,27 @@ public: return ret; } + void multVec(const mVec3_c &in, mVec3_c &out) const { + PSMTXMultVec(*this, in, out); + } + mMtx_c &operator+=(const mMtx_c &rhs) { PSMTXConcat(*this, rhs, *this); return *this; } + mVec3_c operator*(const mVec3_c &rhs) { + mVec3_c out; + PSMTXMultVec(*this, rhs, out); + return out; + } + void applyQuat(mQuat_c &quat) { PSMTXMultVec(m, quat.v, quat.v); } void fn_802F1C40(s32, s32); - void makeRotationFromVecs(const mVec3_c&, const mVec3_c&, f32); + void makeRotationFromVecs(const mVec3_c &, const mVec3_c &, f32); public: static mMtx_c Identity; diff --git a/include/toBeSorted/actor_on_rail.h b/include/toBeSorted/actor_on_rail.h index 11a4fd16..b4e1924e 100644 --- a/include/toBeSorted/actor_on_rail.h +++ b/include/toBeSorted/actor_on_rail.h @@ -73,4 +73,13 @@ private: mVec3_c mPosition; }; +class ActorOnRail3 { + ActorOnRail mPath; + u16 mSomePntIdx; + u32 mFlags; + +public: + ActorOnRail3() : mSomePntIdx(0), mFlags(0) {} +}; + #endif |
