diff --git a/include/SSystem/SComponent/c_cc_d.h b/include/SSystem/SComponent/c_cc_d.h index 165dc9b77..1150df6ef 100644 --- a/include/SSystem/SComponent/c_cc_d.h +++ b/include/SSystem/SComponent/c_cc_d.h @@ -320,12 +320,12 @@ private: class cCcD_Stts { private: - /* 0x00 */ cXyz mXyz; + /* 0x00 */ cXyz m_cc_move; /* 0x0C */ fopAc_ac_c* mActor; /* 0x10 */ int mApid; /* 0x14 */ u8 mWeight; /* 0x15 */ u8 field_0x15; - /* 0x16 */ u8 mTg; + /* 0x16 */ u8 mDmg; public: cCcD_Stts() {} @@ -336,21 +336,22 @@ public: virtual void Ct(); void PlusCcMove(f32, f32, f32); void ClrCcMove() { - mXyz.z = 0.0f; - mXyz.y = 0.0f; - mXyz.x = 0.0f; + m_cc_move.z = 0.0f; + m_cc_move.y = 0.0f; + m_cc_move.x = 0.0f; } - void PlusDmg(int); + void PlusDmg(int dmg) { mDmg = dmg; } + u8 GetDmg() { return mDmg; } f32 GetWeightF() const; virtual void ClrAt() {} - virtual void ClrTg() { mTg = 0; } + virtual void ClrTg() { mDmg = 0; } u8 GetWeightUc() const { return mWeight; } void SetWeight(u8 weight) { mWeight = weight; } fopAc_ac_c* GetAc() { return mActor; } fopAc_ac_c* GetActor() const { return mActor; } void SetActor(void* ac) { mActor = (fopAc_ac_c*)ac; } - cXyz* GetCCMoveP() { return &mXyz; } + cXyz* GetCCMoveP() { return &m_cc_move; } unsigned int GetApid() const { return mApid; } }; // Size = 0x1C @@ -399,7 +400,11 @@ public: cCcD_ObjAt() { mType = 0; } virtual ~cCcD_ObjAt() {} void SetHit(cCcD_Obj*); - void Set(cCcD_SrcObjAt const&); + void Set(cCcD_SrcObjAt const& src) { + cCcD_ObjCommonBase::Set(src.mBase); + mType = src.mType; + mAtp = src.mAtp; + } void ClrHit() { ClrRPrm(1); ClrObj(); } int GetType() const { return mType; } u32 GetGrp() const { return MskSPrm(0x1E); } @@ -424,7 +429,10 @@ class cCcD_ObjTg : public cCcD_ObjCommonBase { public: cCcD_ObjTg() { ct(); } virtual ~cCcD_ObjTg() {} - void Set(cCcD_SrcObjTg const&); + void Set(cCcD_SrcObjTg const& src) { + cCcD_ObjCommonBase::Set(src.mBase); + mType = src.mType; + } void SetGrp(u32); void ClrHit() { ClrRPrm(1); ClrObj(); } void SetHit(cCcD_Obj*); @@ -544,10 +552,10 @@ public: virtual cCcD_ShapeAttr* GetShapeAttr() { return NULL; } void ct(); void Set(cCcD_SrcObj const&); - fopAc_ac_c* GetAc(); cCcD_Stts* GetStts() { return mStts; } void SetStts(cCcD_Stts* stts) { mStts = stts; } + fopAc_ac_c* GetAc() { return GetStts() != NULL ? GetStts()->GetActor() : NULL; } cCcD_DivideInfo& GetDivideInfo() { return mDivideInfo; } cCcD_DivideInfo* GetPDivideInfo() { return &mDivideInfo; } int ChkBsRevHit() const { return mFlags & 2; } diff --git a/src/SSystem/SComponent/c_cc_d.cpp b/src/SSystem/SComponent/c_cc_d.cpp index 223f0169d..2e40eeb26 100644 --- a/src/SSystem/SComponent/c_cc_d.cpp +++ b/src/SSystem/SComponent/c_cc_d.cpp @@ -4,16 +4,42 @@ // #include "SSystem/SComponent/c_cc_d.h" +#include "JSystem/JUtility/JUTAssert.h" #include "dolphin/types.h" +#define CHECK_FLOAT_CLASS(line, x) JUT_ASSERT(line, !(((sizeof(x) == sizeof(float)) ? __fpclassifyf((float)(x)) : __fpclassifyd((double)(x)) ) == 1)); +#define CHECK_FLOAT_RANGE(line, x) JUT_ASSERT(line, -1.0e32f < x && x < 1.0e32f); +#define CHECK_VEC3_RANGE(line, v) JUT_ASSERT(line, -1.0e32f < v.x && v.x < 1.0e32f && -1.0e32f < v.y && v.y < 1.0e32f && -1.0e32f < v.z && v.z < 1.0e32f) + /* 802413EC-80241428 .text Chk__15cCcD_DivideInfoCFRC15cCcD_DivideInfo */ -void cCcD_DivideInfo::Chk(const cCcD_DivideInfo&) const { - /* Nonmatching */ +bool cCcD_DivideInfo::Chk(const cCcD_DivideInfo& other) const { + u32 mask = mRangeBits & other.mRangeBits; + if ((mask & 0x7FF) == 0) + return false; + if ((mask & 0xFFE00000) == 0) + return false; + if ((mask & 0x1FF800) == 0) + return false; + return true; } /* 80241428-80241558 .text SetArea__15cCcD_DivideAreaFRC8cM3dGAab */ -void cCcD_DivideArea::SetArea(const cM3dGAab&) { - /* Nonmatching */ +void cCcD_DivideArea::SetArea(const cM3dGAab& aabb) { + *(cM3dGAab*)this = aabb; + mScaledXDiff = (GetMaxX() - GetMinX()) * 0.09090909f; + mXDiffIsZero = fabsf(mScaledXDiff) < G_CM3D_F_ABS_MIN; + if (!mXDiffIsZero) + mInvScaledXDiff = 1.0f / mScaledXDiff; + + mScaledYDiff = (GetMaxY() - GetMinY()) * 0.09090909f; + mYDiffIsZero = fabsf(mScaledYDiff) < G_CM3D_F_ABS_MIN; + if (!mYDiffIsZero) + mInvScaledYDiff = 1.0f / mScaledYDiff; + + mScaledZDiff = (GetMaxZ() - GetMinZ()) * 0.09090909f; + mZDiffIsZero = fabsf(mScaledZDiff) < G_CM3D_F_ABS_MIN; + if (!mZDiffIsZero) + mInvScaledZDiff = 1.0f / mScaledZDiff; } /* 80241558-8024170C .text CalcDivideInfo__15cCcD_DivideAreaFP15cCcD_DivideInfoRC8cM3dGAabUl */ @@ -27,52 +53,72 @@ void cCcD_DivideArea::CalcDivideInfoOverArea(cCcD_DivideInfo*, const cM3dGAab&) } /* 80241924-8024192C .text GetGStts__9cCcD_SttsCFv */ -void cCcD_Stts::GetGStts() const { - /* Nonmatching */ +const cCcD_GStts* cCcD_Stts::GetGStts() const { + return NULL; } /* 8024192C-80241934 .text GetGStts__9cCcD_SttsFv */ -void cCcD_Stts::GetGStts() { - /* Nonmatching */ +cCcD_GStts* cCcD_Stts::GetGStts() { + return NULL; } /* 80241934-80241994 .text Init__9cCcD_SttsFiiPvUi */ -void cCcD_Stts::Init(int, int, void*, unsigned int) { - /* Nonmatching */ +void cCcD_Stts::Init(int weight, int param_1, void* pProc, unsigned int procID) { + Ct(); + mWeight = weight; + field_0x15 = param_1; + mActor = (fopAc_ac_c*)pProc; + mApid = procID; } /* 80241994-802419C4 .text Ct__9cCcD_SttsFv */ void cCcD_Stts::Ct() { - /* Nonmatching */ + m_cc_move.x = 0.0f; + m_cc_move.y = 0.0f; + m_cc_move.z = 0.0f; + mActor = NULL; + mApid = -1; + mWeight = 0; + field_0x15 = 0; + mDmg = 0; } /* 802419C4-80241C5C .text PlusCcMove__9cCcD_SttsFfff */ -void cCcD_Stts::PlusCcMove(float, float, float) { - /* Nonmatching */ +void cCcD_Stts::PlusCcMove(f32 x, f32 y, f32 z) { + m_cc_move.x += x; + m_cc_move.y += y; + m_cc_move.z += z; + CHECK_FLOAT_CLASS(0x1bb, m_cc_move.x); + CHECK_FLOAT_CLASS(0x1bc, m_cc_move.y); + CHECK_FLOAT_CLASS(0x1bd, m_cc_move.z); + CHECK_VEC3_RANGE(0x1c1, m_cc_move); } /* 80241C5C-80241C98 .text Set__8cCcD_ObjFRC11cCcD_SrcObj */ -void cCcD_Obj::Set(const cCcD_SrcObj&) { - /* Nonmatching */ +void cCcD_Obj::Set(const cCcD_SrcObj& src) { + mFlags = src.mFlags; + mObjAt.Set(src.mSrcObjHitInf.mObjAt); + mObjTg.Set(src.mSrcObjHitInf.mObjTg); + mObjCo.Set(src.mSrcObjHitInf.mObjCo); } /* 80241C98-80241D68 .text CrossAtTg__12cCcD_TriAttrCFRC12cCcD_CpsAttrP4cXyz */ -void cCcD_TriAttr::CrossAtTg(const cCcD_CpsAttr&, cXyz*) const { +bool cCcD_TriAttr::CrossAtTg(const cCcD_CpsAttr&, cXyz*) const { /* Nonmatching */ } /* 80241D68-80241DA0 .text CrossAtTg__12cCcD_TriAttrCFRC12cCcD_CylAttrP4cXyz */ -void cCcD_TriAttr::CrossAtTg(const cCcD_CylAttr&, cXyz*) const { +bool cCcD_TriAttr::CrossAtTg(const cCcD_CylAttr&, cXyz*) const { /* Nonmatching */ } /* 80241DA0-80241DDC .text CrossAtTg__12cCcD_TriAttrCFRC12cCcD_SphAttrP4cXyz */ -void cCcD_TriAttr::CrossAtTg(const cCcD_SphAttr&, cXyz*) const { +bool cCcD_TriAttr::CrossAtTg(const cCcD_SphAttr&, cXyz*) const { /* Nonmatching */ } /* 80241DDC-80241E14 .text CrossAtTg__12cCcD_TriAttrCFRC12cCcD_TriAttrP4cXyz */ -void cCcD_TriAttr::CrossAtTg(const cCcD_TriAttr&, cXyz*) const { +bool cCcD_TriAttr::CrossAtTg(const cCcD_TriAttr&, cXyz*) const { /* Nonmatching */ } @@ -82,42 +128,42 @@ void cCcD_TriAttr::CalcAabBox() { } /* 80241EC4-80241F60 .text GetNVec__12cCcD_TriAttrCFRC4cXyzP4cXyz */ -void cCcD_TriAttr::GetNVec(const cXyz&, cXyz*) const { +bool cCcD_TriAttr::GetNVec(const cXyz&, cXyz*) const { /* Nonmatching */ } /* 80241F60-80241FA4 .text CrossAtTg__12cCcD_CpsAttrCFRC12cCcD_CpsAttrP4cXyz */ -void cCcD_CpsAttr::CrossAtTg(const cCcD_CpsAttr&, cXyz*) const { +bool cCcD_CpsAttr::CrossAtTg(const cCcD_CpsAttr&, cXyz*) const { /* Nonmatching */ } /* 80241FA4-80241FE8 .text CrossAtTg__12cCcD_CpsAttrCFRC12cCcD_CylAttrP4cXyz */ -void cCcD_CpsAttr::CrossAtTg(const cCcD_CylAttr&, cXyz*) const { +bool cCcD_CpsAttr::CrossAtTg(const cCcD_CylAttr&, cXyz*) const { /* Nonmatching */ } /* 80241FE8-8024202C .text CrossAtTg__12cCcD_CpsAttrCFRC12cCcD_SphAttrP4cXyz */ -void cCcD_CpsAttr::CrossAtTg(const cCcD_SphAttr&, cXyz*) const { +bool cCcD_CpsAttr::CrossAtTg(const cCcD_SphAttr&, cXyz*) const { /* Nonmatching */ } /* 8024202C-802420FC .text CrossAtTg__12cCcD_CpsAttrCFRC12cCcD_TriAttrP4cXyz */ -void cCcD_CpsAttr::CrossAtTg(const cCcD_TriAttr&, cXyz*) const { +bool cCcD_CpsAttr::CrossAtTg(const cCcD_TriAttr&, cXyz*) const { /* Nonmatching */ } /* 802420FC-8024214C .text CrossCo__12cCcD_CpsAttrCFRC12cCcD_CpsAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_CpsAttr&, float*) const { +bool cCcD_CpsAttr::CrossCo(const cCcD_CpsAttr&, f32*) const { /* Nonmatching */ } /* 8024214C-8024219C .text CrossCo__12cCcD_CpsAttrCFRC12cCcD_CylAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_CylAttr&, float*) const { +bool cCcD_CpsAttr::CrossCo(const cCcD_CylAttr&, f32*) const { /* Nonmatching */ } /* 8024219C-802421EC .text CrossCo__12cCcD_CpsAttrCFRC12cCcD_SphAttrPf */ -void cCcD_CpsAttr::CrossCo(const cCcD_SphAttr&, float*) const { +bool cCcD_CpsAttr::CrossCo(const cCcD_SphAttr&, f32*) const { /* Nonmatching */ } @@ -127,42 +173,42 @@ void cCcD_CpsAttr::CalcAabBox() { } /* 80242294-802423FC .text GetNVec__12cCcD_CpsAttrCFRC4cXyzP4cXyz */ -void cCcD_CpsAttr::GetNVec(const cXyz&, cXyz*) const { +bool cCcD_CpsAttr::GetNVec(const cXyz&, cXyz*) const { /* Nonmatching */ } /* 802423FC-80242448 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_CpsAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_CpsAttr&, cXyz*) const { +bool cCcD_CylAttr::CrossAtTg(const cCcD_CpsAttr&, cXyz*) const { /* Nonmatching */ } /* 80242448-8024248C .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_CylAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_CylAttr&, cXyz*) const { +bool cCcD_CylAttr::CrossAtTg(const cCcD_CylAttr&, cXyz*) const { /* Nonmatching */ } /* 8024248C-802424D0 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_SphAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_SphAttr&, cXyz*) const { +bool cCcD_CylAttr::CrossAtTg(const cCcD_SphAttr&, cXyz*) const { /* Nonmatching */ } /* 802424D0-80242508 .text CrossAtTg__12cCcD_CylAttrCFRC12cCcD_TriAttrP4cXyz */ -void cCcD_CylAttr::CrossAtTg(const cCcD_TriAttr&, cXyz*) const { +bool cCcD_CylAttr::CrossAtTg(const cCcD_TriAttr&, cXyz*) const { /* Nonmatching */ } /* 80242508-8024254C .text CrossCo__12cCcD_CylAttrCFRC12cCcD_CylAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_CylAttr&, float*) const { +bool cCcD_CylAttr::CrossCo(const cCcD_CylAttr&, f32*) const { /* Nonmatching */ } /* 8024254C-80242590 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_SphAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_SphAttr&, float*) const { +bool cCcD_CylAttr::CrossCo(const cCcD_SphAttr&, f32*) const { /* Nonmatching */ } /* 80242590-802425E8 .text CrossCo__12cCcD_CylAttrCFRC12cCcD_CpsAttrPf */ -void cCcD_CylAttr::CrossCo(const cCcD_CpsAttr&, float*) const { +bool cCcD_CylAttr::CrossCo(const cCcD_CpsAttr&, f32*) const { /* Nonmatching */ } @@ -172,42 +218,42 @@ void cCcD_CylAttr::CalcAabBox() { } /* 8024264C-80242734 .text GetNVec__12cCcD_CylAttrCFRC4cXyzP4cXyz */ -void cCcD_CylAttr::GetNVec(const cXyz&, cXyz*) const { +bool cCcD_CylAttr::GetNVec(const cXyz&, cXyz*) const { /* Nonmatching */ } /* 80242734-80242780 .text CrossAtTg__12cCcD_SphAttrCFRC12cCcD_CpsAttrP4cXyz */ -void cCcD_SphAttr::CrossAtTg(const cCcD_CpsAttr&, cXyz*) const { +bool cCcD_SphAttr::CrossAtTg(const cCcD_CpsAttr&, cXyz*) const { /* Nonmatching */ } /* 80242780-802427C4 .text CrossAtTg__12cCcD_SphAttrCFRC12cCcD_CylAttrP4cXyz */ -void cCcD_SphAttr::CrossAtTg(const cCcD_CylAttr&, cXyz*) const { +bool cCcD_SphAttr::CrossAtTg(const cCcD_CylAttr&, cXyz*) const { /* Nonmatching */ } /* 802427C4-80242808 .text CrossAtTg__12cCcD_SphAttrCFRC12cCcD_SphAttrP4cXyz */ -void cCcD_SphAttr::CrossAtTg(const cCcD_SphAttr&, cXyz*) const { +bool cCcD_SphAttr::CrossAtTg(const cCcD_SphAttr&, cXyz*) const { /* Nonmatching */ } /* 80242808-80242840 .text CrossAtTg__12cCcD_SphAttrCFRC12cCcD_TriAttrP4cXyz */ -void cCcD_SphAttr::CrossAtTg(const cCcD_TriAttr&, cXyz*) const { +bool cCcD_SphAttr::CrossAtTg(const cCcD_TriAttr&, cXyz*) const { /* Nonmatching */ } /* 80242840-80242894 .text CrossCo__12cCcD_SphAttrCFRC12cCcD_CylAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_CylAttr&, float*) const { +bool cCcD_SphAttr::CrossCo(const cCcD_CylAttr&, f32*) const { /* Nonmatching */ } /* 80242894-802428D8 .text CrossCo__12cCcD_SphAttrCFRC12cCcD_SphAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_SphAttr&, float*) const { +bool cCcD_SphAttr::CrossCo(const cCcD_SphAttr&, f32*) const { /* Nonmatching */ } /* 802428D8-80242930 .text CrossCo__12cCcD_SphAttrCFRC12cCcD_CpsAttrPf */ -void cCcD_SphAttr::CrossCo(const cCcD_CpsAttr&, float*) const { +bool cCcD_SphAttr::CrossCo(const cCcD_CpsAttr&, f32*) const { /* Nonmatching */ } @@ -217,91 +263,6 @@ void cCcD_SphAttr::CalcAabBox() { } /* 802429B8-80242A54 .text GetNVec__12cCcD_SphAttrCFRC4cXyzP4cXyz */ -void cCcD_SphAttr::GetNVec(const cXyz&, cXyz*) const { - /* Nonmatching */ -} - -/* 80242A54-80242A5C .text CrossAtTg__12cCcD_TriAttrCFRC12cCcD_AabAttrP4cXyz */ -void cCcD_TriAttr::CrossAtTg(const cCcD_AabAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 80242A5C-80242A64 .text CrossAtTg__12cCcD_TriAttrCFRC12cCcD_PntAttrP4cXyz */ -void cCcD_TriAttr::CrossAtTg(const cCcD_PntAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 80242A64-80242A9C .text CrossAtTg__12cCcD_TriAttrCFRC14cCcD_ShapeAttrP4cXyz */ -void cCcD_TriAttr::CrossAtTg(const cCcD_ShapeAttr&, cXyz*) const { - /* Nonmatching */ -} - -/* 80242A9C-80242AA4 .text CrossCo__12cCcD_TriAttrCFRC12cCcD_SphAttrPf */ -void cCcD_TriAttr::CrossCo(const cCcD_SphAttr&, float*) const { - /* Nonmatching */ -} - -/* 80242AA4-80242AAC .text CrossCo__12cCcD_TriAttrCFRC12cCcD_CylAttrPf */ -void cCcD_TriAttr::CrossCo(const cCcD_CylAttr&, float*) const { - /* Nonmatching */ -} - -/* 80242AAC-80242AB4 .text CrossCo__12cCcD_TriAttrCFRC12cCcD_AabAttrPf */ -void cCcD_TriAttr::CrossCo(const cCcD_AabAttr&, float*) const { - /* Nonmatching */ -} - -/* 80242AB4-80242ABC .text CrossCo__12cCcD_TriAttrCFRC12cCcD_TriAttrPf */ -void cCcD_TriAttr::CrossCo(const cCcD_TriAttr&, float*) const { - /* Nonmatching */ -} - -/* 80242ABC-80242AC4 .text CrossCo__12cCcD_TriAttrCFRC12cCcD_CpsAttrPf */ -void cCcD_TriAttr::CrossCo(const cCcD_CpsAttr&, float*) const { - /* Nonmatching */ -} - -/* 80242AC4-80242ACC .text CrossCo__12cCcD_TriAttrCFRC12cCcD_PntAttrPf */ -void cCcD_TriAttr::CrossCo(const cCcD_PntAttr&, float*) const { - /* Nonmatching */ -} - -/* 80242ACC-80242B04 .text CrossCo__12cCcD_TriAttrCFRC14cCcD_ShapeAttrPf */ -void cCcD_TriAttr::CrossCo(const cCcD_ShapeAttr&, float*) const { - /* Nonmatching */ -} - -/* 80242B04-80242BA4 .text __dt__12cCcD_TriAttrFv */ -cCcD_TriAttr::~cCcD_TriAttr() { - /* Nonmatching */ -} - -/* 80242BA4-80242BA8 .text ClrAt__9cCcD_SttsFv */ -void cCcD_Stts::ClrAt() { - /* Nonmatching */ -} - -/* 80242BA8-80242BB4 .text ClrTg__9cCcD_SttsFv */ -void cCcD_Stts::ClrTg() { - /* Nonmatching */ -} - -/* 80242C08-80242C10 .text @32@__dt__12cCcD_TriAttrFv */ -void @32@__dt__12cCcD_TriAttrFv { - /* Nonmatching */ -} - -/* 80242C10-80242C18 .text @32@__dt__12cCcD_CpsAttrFv */ -void @32@__dt__12cCcD_CpsAttrFv { - /* Nonmatching */ -} - -/* 80242C18-80242C20 .text @32@__dt__12cCcD_CylAttrFv */ -void @32@__dt__12cCcD_CylAttrFv { - /* Nonmatching */ -} - -/* 80242C20-80242C28 .text @32@__dt__12cCcD_SphAttrFv */ -void @32@__dt__12cCcD_SphAttrFv { +bool cCcD_SphAttr::GetNVec(const cXyz&, cXyz*) const { /* Nonmatching */ } diff --git a/src/SSystem/SComponent/c_cc_s.cpp b/src/SSystem/SComponent/c_cc_s.cpp index 30304a1e0..68b02de71 100644 --- a/src/SSystem/SComponent/c_cc_s.cpp +++ b/src/SSystem/SComponent/c_cc_s.cpp @@ -13,37 +13,94 @@ cCcS::cCcS() { /* 80242C50-80242CE4 .text Ct__4cCcSFv */ void cCcS::Ct() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mpObjAt); i++) + mpObjAt[i] = NULL; + for (u32 i = 0; i < ARRAY_SIZE(mpObjTg); i++) + mpObjTg[i] = NULL; + for (u32 i = 0; i < ARRAY_SIZE(mpObjCo); i++) + mpObjCo[i] = NULL; + for (u32 i = 0; i < ARRAY_SIZE(mpObj); i++) + mpObj[i] = NULL; + mObjAtCount = 0; + mObjTgCount = 0; + mObjCoCount = 0; + mObjCount = 0; } /* 80242CE4-80242D04 .text Dt__4cCcSFv */ void cCcS::Dt() { - /* Nonmatching */ + Ct(); } /* 80242D04-80242DB8 .text Set__4cCcSFP8cCcD_Obj */ -void cCcS::Set(cCcD_Obj*) { - /* Nonmatching */ +void cCcS::Set(cCcD_Obj* obj) { + if (obj->ChkAtSet() && mObjAtCount < (s32)ARRAY_SIZE(mpObjAt)) { + mpObjAt[mObjAtCount] = obj; + mObjAtCount++; + } + if (obj->ChkTgSet() && mObjTgCount < (s32)ARRAY_SIZE(mpObjTg)) { + mpObjTg[mObjTgCount] = obj; + mObjTgCount++; + } + if (obj->ChkCoSet() && mObjCoCount < (s32)ARRAY_SIZE(mpObjCo)) { + mpObjCo[mObjCoCount] = obj; + mObjCoCount++; + } + if (mObjCount < (s32)ARRAY_SIZE(mpObj)) { + mpObj[mObjCount] = obj; + mObjCount++; + } } /* 80242DB8-80242E58 .text ClrCoHitInf__4cCcSFv */ void cCcS::ClrCoHitInf() { - /* Nonmatching */ + for (s32 i = 0; i < mObjCoCount; i++) { + if (mpObjCo[i] != NULL) { + cCcD_GObjInf * pInf = mpObjCo[i]->GetGObjInf(); + pInf->ClrCoHit(); + cCcD_Stts * pStts = mpObjCo[i]->GetStts(); + if (pStts != NULL) + pStts->ClrCcMove(); + } + } } /* 80242E58-80242EF8 .text ClrTgHitInf__4cCcSFv */ void cCcS::ClrTgHitInf() { - /* Nonmatching */ + for (s32 i = 0; i < mObjTgCount; i++) { + if (mpObjTg[i] != NULL) { + cCcD_GObjInf * pInf = mpObjTg[i]->GetGObjInf(); + pInf->ClrTgHit(); + cCcD_Stts * pStts = mpObjTg[i]->GetStts(); + if (pStts != NULL) + pStts->ClrTg(); + } + } } /* 80242EF8-80242F94 .text ClrAtHitInf__4cCcSFv */ void cCcS::ClrAtHitInf() { - /* Nonmatching */ + for (s32 i = 0; i < mObjAtCount; i++) { + if (mpObjAt[i] != NULL) { + cCcD_GObjInf * pInf = mpObjAt[i]->GetGObjInf(); + pInf->ClrAtHit(); + cCcD_Stts * pStts = mpObjAt[i]->GetStts(); + if (pStts != NULL) + pStts->ClrAt(); + } + } } /* 80242F94-802430BC .text ChkNoHitAtTg__4cCcSFP8cCcD_ObjP8cCcD_Obj */ -void cCcS::ChkNoHitAtTg(cCcD_Obj*, cCcD_Obj*) { - /* Nonmatching */ +bool cCcS::ChkNoHitAtTg(cCcD_Obj* at, cCcD_Obj* tg) { + /* Nonmatching - more complicated conditional */ + fopAc_ac_c * ac_at = at->GetAc(); + fopAc_ac_c * ac_tg = tg->GetAc(); + if ((ac_at == NULL || ac_tg == NULL || ac_at != ac_tg) && (at->GetAtGrp() & tg->GetTgGrp()) != 0) { + return ChkNoHitGAtTg(at->GetGObjInf(), tg->GetGObjInf(), at->GetStts()->GetGStts(), tg->GetStts()->GetGStts()); + } + + return true; } /* 802430BC-802432F8 .text ChkAtTg__4cCcSFv */ @@ -52,7 +109,7 @@ void cCcS::ChkAtTg() { } /* 802432F8-802433A8 .text ChkNoHitCo__4cCcSFP8cCcD_ObjP8cCcD_Obj */ -void cCcS::ChkNoHitCo(cCcD_Obj*, cCcD_Obj*) { +bool cCcS::ChkNoHitCo(cCcD_Obj*, cCcD_Obj*) { /* Nonmatching */ } @@ -62,8 +119,11 @@ void cCcS::ChkCo() { } /* 8024352C-80243544 .text CalcTgPlusDmg__4cCcSFP8cCcD_ObjP8cCcD_ObjP9cCcD_SttsP9cCcD_Stts */ -void cCcS::CalcTgPlusDmg(cCcD_Obj*, cCcD_Obj*, cCcD_Stts*, cCcD_Stts*) { - /* Nonmatching */ +void cCcS::CalcTgPlusDmg(cCcD_Obj* at, cCcD_Obj* tg, cCcD_Stts* at_stts, cCcD_Stts* tg_stts) { + s32 atp = at->GetAtAtp(); + if (tg_stts->GetDmg() >= atp) + return; + tg_stts->PlusDmg(atp); } /* 80243544-80243740 .text SetAtTgCommonHitInf__4cCcSFP8cCcD_ObjP8cCcD_ObjP4cXyz */ @@ -88,40 +148,57 @@ void cCcS::CalcArea() { /* 80244894-802448F8 .text Move__4cCcSFv */ void cCcS::Move() { - /* Nonmatching */ + CalcArea(); + ChkAtTg(); + ChkCo(); + MoveAfterCheck(); + mObjAtCount = 0; + mObjTgCount = 0; + mObjCoCount = 0; + mObjCount = 0; } /* 802448F8-8024498C .text DrawClear__4cCcSFv */ void cCcS::DrawClear() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mpObjAt); i++) + mpObjAt[i] = NULL; + mObjAtCount = 0; + + for (u32 i = 0; i < ARRAY_SIZE(mpObjTg); i++) + mpObjTg[i] = NULL; + mObjTgCount = 0; + + for (u32 i = 0; i < ARRAY_SIZE(mpObjCo); i++) + mpObjCo[i] = NULL; + mObjCoCount = 0; + + for (u32 i = 0; i < ARRAY_SIZE(mpObj); i++) + mpObj[i] = NULL; + mObjCount = 0; } /* 8024498C-80244990 .text SetCoGCorrectProc__4cCcSFP8cCcD_ObjP8cCcD_Obj */ void cCcS::SetCoGCorrectProc(cCcD_Obj*, cCcD_Obj*) { - /* Nonmatching */ } /* 80244990-80244998 .text ChkNoHitGCo__4cCcSFP8cCcD_ObjP8cCcD_Obj */ -void cCcS::ChkNoHitGCo(cCcD_Obj*, cCcD_Obj*) { - /* Nonmatching */ +bool cCcS::ChkNoHitGCo(cCcD_Obj*, cCcD_Obj*) { + return false; } /* 80244998-8024499C .text SetAtTgGObjInf__4cCcSFbbP8cCcD_ObjP8cCcD_ObjP12cCcD_GObjInfP12cCcD_GObjInfP9cCcD_SttsP9cCcD_SttsP10cCcD_GSttsP10cCcD_GSttsP4cXyz */ void cCcS::SetAtTgGObjInf(bool, bool, cCcD_Obj*, cCcD_Obj*, cCcD_GObjInf*, cCcD_GObjInf*, cCcD_Stts*, cCcD_Stts*, cCcD_GStts*, cCcD_GStts*, cXyz*) { - /* Nonmatching */ } /* 8024499C-802449A4 .text ChkAtTgHitAfterCross__4cCcSFbbPC12cCcD_GObjInfPC12cCcD_GObjInfP9cCcD_SttsP9cCcD_SttsP10cCcD_GSttsP10cCcD_GStts */ -void cCcS::ChkAtTgHitAfterCross(bool, bool, const cCcD_GObjInf*, const cCcD_GObjInf*, cCcD_Stts*, cCcD_Stts*, cCcD_GStts*, cCcD_GStts*) { - /* Nonmatching */ +bool cCcS::ChkAtTgHitAfterCross(bool, bool, const cCcD_GObjInf*, const cCcD_GObjInf*, cCcD_Stts*, cCcD_Stts*, cCcD_GStts*, cCcD_GStts*) { + return false; } /* 802449A4-802449A8 .text SetCoGObjInf__4cCcSFbbP12cCcD_GObjInfP12cCcD_GObjInfP9cCcD_SttsP9cCcD_SttsP10cCcD_GSttsP10cCcD_GStts */ void cCcS::SetCoGObjInf(bool, bool, cCcD_GObjInf*, cCcD_GObjInf*, cCcD_Stts*, cCcD_Stts*, cCcD_GStts*, cCcD_GStts*) { - /* Nonmatching */ } /* 802449A8-802449AC .text MoveAfterCheck__4cCcSFv */ void cCcS::MoveAfterCheck() { - /* Nonmatching */ }