diff --git a/include/SSystem/SComponent/c_cc_d.h b/include/SSystem/SComponent/c_cc_d.h index 926469245..6c1ff3403 100644 --- a/include/SSystem/SComponent/c_cc_d.h +++ b/include/SSystem/SComponent/c_cc_d.h @@ -346,10 +346,12 @@ public: void setRPrm(s32 rprm) { mRPrm = rprm; } s32 getRPrm() const { return mRPrm; } cCcD_Obj* GetHitObj() { return mHitObj; } + void ClrObj() { mHitObj = NULL; } u32 MskSPrm(u32 mask) const { return mSPrm & mask; } u32 MskRPrm(u32 mask) { return mRPrm & mask; } void OnSPrmBit(u32 flag) { mSPrm |= flag; } void OffSPrmBit(u32 flag) { mSPrm &= ~flag; } + void ClrRPrm(u32 flag) { mRPrm &= ~flag; } void Set(cCcD_SrcObjCommonBase const& src) { mSPrm = src.mSPrm; @@ -364,7 +366,7 @@ public: virtual ~cCcD_ObjAt() {} void SetHit(cCcD_Obj*); void Set(cCcD_SrcObjAt const&); - void ClrHit(); + void ClrHit() { ClrObj(); } int GetType() const { return mType; } u32 GetGrp() const { return MskSPrm(0x1E); } bool ChkSet() const { return MskSPrm(1); } @@ -373,6 +375,7 @@ public: void SetType(u32 type) { mType = type; } void SetAtp(int atp) { mAtp = atp; } void ClrSet() { OffSPrmBit(1); } + void OffHitBit() { ClrRPrm(1); } u32 ChkHit() { return MskRPrm(1); } protected: @@ -470,6 +473,7 @@ public: void SetTgType(u32 type) { mObjTg.SetType(type); } void OnTgSPrmBit(u32 flag) { mObjTg.OnSPrmBit(flag); } void OffAtSetBit() { mObjAt.ClrSet(); } + void OffAtHitBit() { mObjAt.OffHitBit(); } void OnTgSetBit() { mObjTg.OnSPrmBit(1); } void OffTgSetBit() { mObjTg.ClrSet(); } void OnCoSetBit() { mObjCo.OnSPrmBit(1); } diff --git a/include/d/d_cc_d.h b/include/d/d_cc_d.h index f2fb07ea4..e22f5f1e7 100644 --- a/include/d/d_cc_d.h +++ b/include/d/d_cc_d.h @@ -68,7 +68,7 @@ struct dCcD_SrcCps { class dCcD_GStts : public cCcD_GStts { public: dCcD_GStts(); - virtual ~dCcD_GStts() {} + virtual ~dCcD_GStts(); void Ct(); void Move(); @@ -108,7 +108,7 @@ public: virtual void Ct(); virtual void ClrAt(); virtual void ClrTg(); - virtual ~dCcD_Stts() {} + virtual ~dCcD_Stts(); }; // Size = 0x3C @@ -129,15 +129,18 @@ public: public: dCcD_GAtTgCoCommonBase() { ct(); } - void ClrActorInfo(); + void ClrActorInfo() { + mApid = -1; + mAc = NULL; + } void ct(); void SetHitApid(unsigned int); fopAc_ac_c* GetAc(); void Set(dCcD_SrcGAtTgCoCommonBase const&); void SetEffCounterTimer(); - void SubtractEffCounter(); - bool ChkEffCounter(); - virtual ~dCcD_GAtTgCoCommonBase() {} + void SubtractEffCounter() { mEffCounter -= 1; } + bool ChkEffCounter() { return mEffCounter >= 0; } + virtual ~dCcD_GAtTgCoCommonBase(); void ClrEffCounter() { mEffCounter = 0; } u32 GetGFlag() const { return mGFlag; } @@ -152,14 +155,13 @@ public: bool ChkRPrm(u32 flag) const { return MskRPrm(flag); } void SetHitCallback(dCcD_HitCallback callback) { mHitCallback = callback; } dCcD_HitCallback GetHitCallback() { return mHitCallback; } - void ClrHit() { ClrActorInfo(); } }; // Size = 0x1C // Attack (At) Collider class dCcD_GObjAt : public dCcD_GAtTgCoCommonBase { public: void Set(dCcD_SrcGObjAt const&); - virtual ~dCcD_GObjAt() {} + virtual ~dCcD_GObjAt(); void SetVec(cXyz& vec) { mVec = vec; } cXyz& GetVec() { return mVec; } cXyz* GetVecP() { return &mVec; } @@ -174,6 +176,7 @@ public: void SetRVec(cXyz& vec) { mRVec = vec; } void SetHitPos(cXyz& pos) { mHitPos = pos; } cXyz* GetHitPosP() { return &mHitPos; } + void ClrHit() { ClrActorInfo(); } // private: /* 0x1C */ u8 mSe; @@ -189,7 +192,7 @@ public: class dCcD_GObjTg : public dCcD_GAtTgCoCommonBase { public: void Set(dCcD_SrcGObjTg const&); - virtual ~dCcD_GObjTg() {} + virtual ~dCcD_GObjTg(); void SetSe(u8 se) { mSe = se; } void SetVec(cXyz& vec) { mVec = vec; } cXyz& GetVec() { return mVec; } @@ -219,7 +222,7 @@ private: // Correction (Co) Collider class dCcD_GObjCo : public dCcD_GAtTgCoCommonBase { public: - virtual ~dCcD_GObjCo() {} + virtual ~dCcD_GObjCo(); void Set(dCcD_SrcGObjCo const& pSrc) { dCcD_GAtTgCoCommonBase::Set(pSrc.mBase); } }; // Size = 0x1C ? @@ -363,6 +366,8 @@ public: void Set(dCcD_SrcCyl const&); cCcD_ShapeAttr* GetShapeAttr() { return this; } void StartCAt(cXyz&); + void StartCTg(cXyz&); + void MoveCAtTg(cXyz&); void MoveCAt(cXyz&); void MoveCTg(cXyz&); virtual ~dCcD_Cyl() {} diff --git a/src/d/d_cc_d.cpp b/src/d/d_cc_d.cpp index 9ad40c914..0377e51df 100644 --- a/src/d/d_cc_d.cpp +++ b/src/d/d_cc_d.cpp @@ -3,22 +3,41 @@ // Translation Unit: d_cc_d.cpp // -#include "d_cc_d.h" +#include "d/d_cc_d.h" +#include "f_op/f_op_actor_mng.h" #include "dolphin/types.h" +#include "JSystem/JUtility/JUTAssert.h" /* 800AB2AC-800AB328 .text GetAc__22dCcD_GAtTgCoCommonBaseFv */ -void dCcD_GAtTgCoCommonBase::GetAc() { - /* Nonmatching */ +fopAc_ac_c* dCcD_GAtTgCoCommonBase::GetAc() { + if (mApid == -1) { + return NULL; + } + if (mAc == NULL) { + mAc = fopAcM_SearchByID(mApid); + if (mAc == NULL) { + mApid = -1; + } + } + return mAc; } /* 800AB328-800AB334 .text SetEffCounterTimer__22dCcD_GAtTgCoCommonBaseFv */ void dCcD_GAtTgCoCommonBase::SetEffCounterTimer() { - /* Nonmatching */ + mEffCounter = 5; } /* 800AB334-800AB384 .text __ct__10dCcD_GSttsFv */ dCcD_GStts::dCcD_GStts() { - /* Nonmatching */ + mAt = 0; + mTg = 0; + mRoomId = 0; + field_0x08 = -1; + mAtApid = -1; + mAtOldApid = -1; + mTgApid = -1; + mTgOldApid = -1; + field_0x1C = 0; } /* 800AB384-800AB3BC .text Ct__10dCcD_GSttsFv */ @@ -28,12 +47,34 @@ void dCcD_GStts::Ct() { /* 800AB3BC-800AB3DC .text Move__10dCcD_GSttsFv */ void dCcD_GStts::Move() { - /* Nonmatching */ + mAtOldApid = mAtApid; + mAtApid = NULL; + mTgOldApid = mTgApid; + mTgApid = NULL; } /* 800AB3DC-800AB46C .text Init__9dCcD_SttsFiiP10fopAc_ac_c */ -void dCcD_Stts::Init(int, int, fopAc_ac_c*) { - /* Nonmatching */ +void dCcD_Stts::Init(int param_0, int param_1, fopAc_ac_c* pActor) { + u32 procId; + if (pActor) { + procId = fpcM_GetID(pActor); + } else { + procId = -1; + } + cCcD_Stts::Init(param_0, param_1, pActor, procId); + + s32 roomNo; + if (pActor) { + roomNo = pActor->current.roomNo; + } else { + roomNo = 0; + OnNoActor(); + } + if (roomNo != -1) { + SetRoomId(roomNo); + } else { + SetRoomId(0); + } } /* 800AB46C-800AB4A0 .text Ct__9dCcD_SttsFv */ @@ -62,38 +103,53 @@ dCcD_GObjInf::~dCcD_GObjInf() { } /* 800AB7C0-800AB7C4 .text GetGObjInf__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetGObjInf() { - /* Nonmatching */ +cCcD_GObjInf* dCcD_GObjInf::GetGObjInf() { + return (cCcD_GObjInf*)this; } /* 800AB7C4-800AB81C .text ClrAtHit__12dCcD_GObjInfFv */ void dCcD_GObjInf::ClrAtHit() { - /* Nonmatching */ + OffAtHitBit(); + cCcD_Obj::ClrAtHit(); + mGObjAt.ClrHit(); + OffAtShieldHit(); + OffAtHitNoActor(); + SubtractAtEffCounter(); + if (!ChkAtEffCounter()) { + ClrAtEffCounter(); + } } +#if VERSION != VERSION_JPN /* 800AB81C-800AB874 .text ChkAtHit__12dCcD_GObjInfFv */ -void dCcD_GObjInf::ChkAtHit() { +u32 dCcD_GObjInf::ChkAtHit() { /* Nonmatching */ } +#endif /* 800AB874-800AB8B4 .text ResetAtHit__12dCcD_GObjInfFv */ void dCcD_GObjInf::ResetAtHit() { - /* Nonmatching */ + ClrAtHit(); + ClrAtEffCounter(); } /* 800AB8B4-800AB904 .text GetAtHitObj__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetAtHitObj() { +cCcD_Obj* dCcD_GObjInf::GetAtHitObj() { /* Nonmatching */ } /* 800AB904-800AB938 .text GetAtHitGObj__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetAtHitGObj() { - /* Nonmatching */ +cCcD_GObjInf* dCcD_GObjInf::GetAtHitGObj() { + cCcD_Obj* atHitObj = GetAtHitObj(); + if (atHitObj == NULL) { + return NULL; + } + return dCcD_GetGObjInf(atHitObj); } /* 800AB938-800AB958 .text ChkAtNoGuard__12dCcD_GObjInfFv */ -void dCcD_GObjInf::ChkAtNoGuard() { - /* Nonmatching */ +u8 dCcD_GObjInf::ChkAtNoGuard() { + return GetAtSpl() >= 8; } /* 800AB958-800AB9B0 .text ClrTgHit__12dCcD_GObjInfFv */ @@ -101,10 +157,12 @@ void dCcD_GObjInf::ClrTgHit() { /* Nonmatching */ } +#if VERSION != VERSION_JPN /* 800AB9B0-800ABA08 .text ChkTgHit__12dCcD_GObjInfFv */ -void dCcD_GObjInf::ChkTgHit() { +u32 dCcD_GObjInf::ChkTgHit() { /* Nonmatching */ } +#endif /* 800ABA08-800ABA48 .text ResetTgHit__12dCcD_GObjInfFv */ void dCcD_GObjInf::ResetTgHit() { @@ -112,17 +170,17 @@ void dCcD_GObjInf::ResetTgHit() { } /* 800ABA48-800ABA98 .text GetTgHitObj__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetTgHitObj() { +cCcD_Obj* dCcD_GObjInf::GetTgHitObj() { /* Nonmatching */ } /* 800ABA98-800ABACC .text GetTgHitGObj__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetTgHitGObj() { +dCcD_GObjInf* dCcD_GObjInf::GetTgHitGObj() { /* Nonmatching */ } /* 800ABACC-800ABB00 .text GetTgHitObjSe__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetTgHitObjSe() { +u8 dCcD_GObjInf::GetTgHitObjSe() { /* Nonmatching */ } @@ -131,13 +189,15 @@ void dCcD_GObjInf::ClrCoHit() { /* Nonmatching */ } +#if VERSION != VERSION_JPN /* 800ABB4C-800ABBA4 .text ChkCoHit__12dCcD_GObjInfFv */ -void dCcD_GObjInf::ChkCoHit() { +u32 dCcD_GObjInf::ChkCoHit() { /* Nonmatching */ } +#endif /* 800ABBA4-800ABBF4 .text GetCoHitObj__12dCcD_GObjInfFv */ -void dCcD_GObjInf::GetCoHitObj() { +cCcD_Obj* dCcD_GObjInf::GetCoHitObj() { /* Nonmatching */ } @@ -147,8 +207,10 @@ void dCcD_GObjInf::Set(const dCcD_SrcGObjInf&) { } /* 800ABC54-800ABCC4 .text dCcD_GetGObjInf__FP8cCcD_Obj */ -void dCcD_GetGObjInf(cCcD_Obj*) { +dCcD_GObjInf* dCcD_GetGObjInf(cCcD_Obj* pobj) { /* Nonmatching */ + JUT_ASSERT(531, pobj != 0); + return (dCcD_GObjInf*)pobj->GetGObjInf(); } /* 800ABCC4-800ABD34 .text Set__8dCcD_CpsFRC11dCcD_SrcCps */ @@ -206,85 +268,85 @@ void dCcD_Sph::MoveCAt(cXyz&) { /* Nonmatching */ } -/* 800AC0E8-800AC130 .text __dt__10cCcD_GSttsFv */ -cCcD_GStts::~cCcD_GStts() { - /* Nonmatching */ -} +// /* 800AC0E8-800AC130 .text __dt__10cCcD_GSttsFv */ +// cCcD_GStts::~cCcD_GStts() { +// /* Nonmatching */ +// } -/* 800AC130-800AC228 .text __dt__12cCcD_GObjInfFv */ -cCcD_GObjInf::~cCcD_GObjInf() { - /* Nonmatching */ -} +// /* 800AC130-800AC228 .text __dt__12cCcD_GObjInfFv */ +// cCcD_GObjInf::~cCcD_GObjInf() { +// /* Nonmatching */ +// } -/* 800AC228-800AC310 .text __dt__8cCcD_ObjFv */ -cCcD_Obj::~cCcD_Obj() { - /* Nonmatching */ -} +// /* 800AC228-800AC310 .text __dt__8cCcD_ObjFv */ +// cCcD_Obj::~cCcD_Obj() { +// /* Nonmatching */ +// } -/* 800AC310-800AC3D0 .text __dt__14cCcD_ObjHitInfFv */ -cCcD_ObjHitInf::~cCcD_ObjHitInf() { - /* Nonmatching */ -} +// /* 800AC310-800AC3D0 .text __dt__14cCcD_ObjHitInfFv */ +// cCcD_ObjHitInf::~cCcD_ObjHitInf() { +// /* Nonmatching */ +// } -/* 800AC3D0-800AC42C .text __dt__10cCcD_ObjCoFv */ -cCcD_ObjCo::~cCcD_ObjCo() { - /* Nonmatching */ -} +// /* 800AC3D0-800AC42C .text __dt__10cCcD_ObjCoFv */ +// cCcD_ObjCo::~cCcD_ObjCo() { +// /* Nonmatching */ +// } -/* 800AC42C-800AC488 .text __dt__10cCcD_ObjTgFv */ -cCcD_ObjTg::~cCcD_ObjTg() { - /* Nonmatching */ -} +// /* 800AC42C-800AC488 .text __dt__10cCcD_ObjTgFv */ +// cCcD_ObjTg::~cCcD_ObjTg() { +// /* Nonmatching */ +// } -/* 800AC488-800AC4E4 .text __dt__10cCcD_ObjAtFv */ -cCcD_ObjAt::~cCcD_ObjAt() { - /* Nonmatching */ -} +// /* 800AC488-800AC4E4 .text __dt__10cCcD_ObjAtFv */ +// cCcD_ObjAt::~cCcD_ObjAt() { +// /* Nonmatching */ +// } -/* 800AC4E4-800AC52C .text __dt__18cCcD_ObjCommonBaseFv */ -cCcD_ObjCommonBase::~cCcD_ObjCommonBase() { - /* Nonmatching */ -} +// /* 800AC4E4-800AC52C .text __dt__18cCcD_ObjCommonBaseFv */ +// cCcD_ObjCommonBase::~cCcD_ObjCommonBase() { +// /* Nonmatching */ +// } -/* 800AC52C-800AC534 .text GetGObjInf__8cCcD_ObjFv */ -void cCcD_Obj::GetGObjInf() { - /* Nonmatching */ -} +// /* 800AC52C-800AC534 .text GetGObjInf__8cCcD_ObjFv */ +// cCcD_GObjInf* cCcD_Obj::GetGObjInf() { +// /* Nonmatching */ +// } -/* 800AC534-800AC538 .text GetGObjInf__12cCcD_GObjInfCFv */ -void cCcD_GObjInf::GetGObjInf() const { - /* Nonmatching */ -} +// /* 800AC534-800AC538 .text GetGObjInf__12cCcD_GObjInfCFv */ +// cCcD_GObjInf const* cCcD_GObjInf::GetGObjInf() const { +// /* Nonmatching */ +// } -/* 800AC538-800AC540 .text GetShapeAttr__8cCcD_ObjCFv */ -void cCcD_Obj::GetShapeAttr() const { - /* Nonmatching */ -} +// /* 800AC538-800AC540 .text GetShapeAttr__8cCcD_ObjCFv */ +// cCcD_ShapeAttr const* cCcD_Obj::GetShapeAttr() const { +// /* Nonmatching */ +// } -/* 800AC540-800AC558 .text ClrAtHit__12cCcD_GObjInfFv */ -void cCcD_GObjInf::ClrAtHit() { - /* Nonmatching */ -} +// /* 800AC540-800AC558 .text ClrAtHit__12cCcD_GObjInfFv */ +// void cCcD_GObjInf::ClrAtHit() { +// /* Nonmatching */ +// } -/* 800AC558-800AC570 .text ClrTgHit__12cCcD_GObjInfFv */ -void cCcD_GObjInf::ClrTgHit() { - /* Nonmatching */ -} +// /* 800AC558-800AC570 .text ClrTgHit__12cCcD_GObjInfFv */ +// void cCcD_GObjInf::ClrTgHit() { +// /* Nonmatching */ +// } -/* 800AC570-800AC588 .text ClrCoHit__12cCcD_GObjInfFv */ -void cCcD_GObjInf::ClrCoHit() { - /* Nonmatching */ -} +// /* 800AC570-800AC588 .text ClrCoHit__12cCcD_GObjInfFv */ +// void cCcD_GObjInf::ClrCoHit() { +// /* Nonmatching */ +// } -/* 800AC588-800AC58C .text GetGObjInf__12cCcD_GObjInfFv */ -void cCcD_GObjInf::GetGObjInf() { - /* Nonmatching */ -} +// /* 800AC588-800AC58C .text GetGObjInf__12cCcD_GObjInfFv */ +// cCcD_GObjInf* cCcD_GObjInf::GetGObjInf() { +// /* Nonmatching */ +// } -/* 800AC58C-800AC594 .text GetGObjInf__8cCcD_ObjCFv */ -void cCcD_Obj::GetGObjInf() const { - /* Nonmatching */ -} +// /* 800AC58C-800AC594 .text GetGObjInf__8cCcD_ObjCFv */ +// cCcD_GObjInf const* cCcD_Obj::GetGObjInf() const { +// /* Nonmatching */ +// } /* 800AC594-800AC5F0 .text __dt__11dCcD_GObjCoFv */ dCcD_GObjCo::~dCcD_GObjCo() { @@ -307,7 +369,7 @@ dCcD_GAtTgCoCommonBase::~dCcD_GAtTgCoCommonBase() { } /* 800AC6F0-800AC700 .text GetGStts__9dCcD_SttsFv */ -void dCcD_Stts::GetGStts() { +cCcD_GStts* dCcD_Stts::GetGStts() { /* Nonmatching */ } @@ -330,9 +392,3 @@ dCcD_Stts::~dCcD_Stts() { dCcD_GStts::~dCcD_GStts() { /* Nonmatching */ } - -/* 800AC808-800AC810 .text @28@__dt__9dCcD_SttsFv */ -void @28@__dt__9dCcD_SttsFv { - /* Nonmatching */ -} -