diff options
| author | TakaRikka <38417346+TakaRikka@users.noreply.github.com> | 2026-03-17 22:48:37 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-17 22:48:37 -0700 |
| commit | f64015ea383cc3ba93a90918ac3dd1d2f66e1e17 (patch) | |
| tree | e5b1205895176398034a77ccba6e2c498522fd88 /src/d/d_cc_s.cpp | |
| parent | 6694c1b281a142972fce587bd20cd82ee65ab38f (diff) | |
cc debug work (#3133)
Diffstat (limited to 'src/d/d_cc_s.cpp')
| -rw-r--r-- | src/d/d_cc_s.cpp | 267 |
1 files changed, 236 insertions, 31 deletions
diff --git a/src/d/d_cc_s.cpp b/src/d/d_cc_s.cpp index ccb8501542..de9fa587ed 100644 --- a/src/d/d_cc_s.cpp +++ b/src/d/d_cc_s.cpp @@ -10,13 +10,114 @@ #include "d/d_jnt_col.h" #include "f_op/f_op_actor_mng.h" +class dCcS_HIO : public JORReflexible { +public: + enum flags_e { + FLAG_CAM_COL_DISP_e = 0x1, + FLAG_AT_ON_e = 0x2, + FLAG_TG_ON_e = 0x4, + FLAG_CO_ON_e = 0x8, + FLAG_DRAW_CLEAR_OFF_e = 0x10, + FLAG_COUNTER_e = 0x20, + FLAG_MOVE_OFF_e = 0x40, + FLAG_MASS_OFF_e = 0x80, + FLAG_MOVE_TIMER_e = 0x100, + FLAG_MASS_TIMER_e = 0x200, + FLAG_MASS_COUNTER_e = 0x400, + FLAG_ALL_MASS_TIMER_e = 0x800, + + }; + + dCcS_HIO() { + m_flags = 0; + m_shield_range = 0x4000; + } + + virtual ~dCcS_HIO(); + + void genMessage(JORMContext*); + + BOOL ChkMoveTimer() { return m_flags & FLAG_MOVE_TIMER_e; } + BOOL ChkMoveOff() { return m_flags & FLAG_MOVE_OFF_e; } + BOOL ChkAllMassTimer() { return m_flags & FLAG_ALL_MASS_TIMER_e; } + BOOL ChkDrawClearOff() { return m_flags & FLAG_DRAW_CLEAR_OFF_e; } + BOOL ChkCounter() { return m_flags & FLAG_COUNTER_e; } + BOOL ChkCamColDisp() { return m_flags & FLAG_CAM_COL_DISP_e; } + BOOL CheckCoOn() { return m_flags & FLAG_CO_ON_e; } + BOOL CheckTgOn() { return m_flags & FLAG_TG_ON_e; } + BOOL CheckAtOn() { return m_flags & FLAG_AT_ON_e; } + BOOL ChkMassCounter() { return m_flags & FLAG_MASS_COUNTER_e; } + BOOL ChkMassOff() { return m_flags & FLAG_MASS_OFF_e; } + BOOL ChkMassTimer() { return m_flags & FLAG_MASS_TIMER_e; } + + /* 0x4 */ s8 id; + /* 0x6 */ u16 m_flags; + /* 0x8 */ s16 m_shield_range; +}; + +#if DEBUG +dCcS_HIO::~dCcS_HIO() {} + +void dCcS_HIO::genMessage(JORMContext* mctx) { + mctx->genLabel("処理関係 -----", 0); + mctx->genCheckBox("処理Off", &m_flags, 0x40); + mctx->genCheckBox("多数ヒットチェック(草木花)Off", &m_flags, 0x80); + mctx->genCheckBox("多数ヒット 1回時間", &m_flags, 0x200); + mctx->genCheckBox("多数ヒット 通しの処理時間(->terminal)", &m_flags, 0x800); + mctx->genCheckBox("多数ヒット チェックカウンタ", &m_flags, 0x400); + mctx->genCheckBox("処理時間(->terminal)", &m_flags, 0x100); + + mctx->genLabel("描画関係 -----", 0); + mctx->genCheckBox("At 描画", &m_flags, 2); + mctx->genCheckBox("Tg 描画", &m_flags, 4); + mctx->genCheckBox("Co 描画", &m_flags, 8); + mctx->genCheckBox("カメラCo描画", &m_flags, 1); + mctx->genCheckBox("クリアOff", &m_flags, 0x10); + + mctx->genLabel("情報(->terminal) -----", 0); + mctx->genCheckBox("個数", &m_flags, 0x20); + + mctx->genLabel("特殊-----", 0); + mctx->genSlider("盾範囲(max=360度)", &m_shield_range, 0, 0x7FFF); +} + +static OSStopwatch s_move_timer; +static OSStopwatch s_mass_timer; + +static dCcS_HIO s_Hio; + +int g_mass_counter; +#endif + void dCcS::Ct() { cCcS::Ct(); + + #if DEBUG + m_is_mass_all_timer = 0; + s_Hio.id = mDoHIO_CREATE_CHILD("zelda コリジョンシステム", &s_Hio); + + OSInitStopwatch(&s_move_timer, "CollsionCheckMove"); + OSResetStopwatch(&s_move_timer); + OSInitStopwatch(&s_mass_timer, "MassCheck"); + OSResetStopwatch(&s_mass_timer); + + g_mass_counter = 0; + #endif + mMass_Mng.Ct(); + + #if DEBUG + dJntCol_setDebugHIO(); + #endif } void dCcS::Dt() { cCcS::Dt(); + + #if DEBUG + mDoHIO_DELETE_CHILD(s_Hio.id); + dJntCol_deleteDebugHIO(); + #endif } bool dCcS::ChkShieldFrontRange(cCcD_Obj* i_atObj, cCcD_Obj* i_tgObj, int param_2, @@ -110,11 +211,11 @@ void dCcS::CalcTgPlusDmg(cCcD_Obj* i_atObj, cCcD_Obj* i_tgObj, cCcD_Stts* i_atSt bool dCcS::ChkAtTgHitAfterCross(bool i_setAt, bool i_setTg, cCcD_GObjInf const* i_atObjInf, cCcD_GObjInf const* i_tgObjInf, cCcD_Stts* i_atStts, cCcD_Stts* i_tgStts, cCcD_GStts* i_atGStts, cCcD_GStts* i_tgGStts) { - dCcD_GObjInf* atObjInf = (dCcD_GObjInf*)i_atObjInf; - dCcD_GObjInf* tgObjInf = (dCcD_GObjInf*)i_tgObjInf; - fpc_ProcID tgApid = i_atStts->GetApid(); fpc_ProcID atApid = i_tgStts->GetApid(); + + dCcD_GObjInf* atObjInf = (dCcD_GObjInf*)i_atObjInf; + dCcD_GObjInf* tgObjInf = (dCcD_GObjInf*)i_tgObjInf; if (i_setAt) { static_cast<dCcD_GStts*>(i_atGStts)->SetAtApid(atApid); @@ -269,9 +370,10 @@ void dCcS::SetPosCorrect(cCcD_Obj* i_co1Obj, cXyz* i_pos1, cCcD_Obj* i_co2Obj, c int co1_rank = GetRank(i_co1Obj->GetStts()->GetWeightUc()); int co2_rank = GetRank(i_co2Obj->GetStts()->GetWeightUc()); u8 rank = rank_tbl[co1_rank][co2_rank]; + u8 var_r22 = 100 - rank; f32 fvar1 = rank * 0.01f; - f32 fvar2 = (u8)(100 - rank) * 0.01f; + f32 fvar2 = var_r22 * 0.01f; cXyz co1_move; cXyz co2_move; @@ -279,8 +381,8 @@ void dCcS::SetPosCorrect(cCcD_Obj* i_co1Obj, cXyz* i_pos1, cCcD_Obj* i_co2Obj, c f32 fvar14; if (bvar2) { - VECSubtract(i_pos2, i_pos1, &local_c8); - fvar14 = VECMag(&local_c8); + PSVECSubtract(i_pos2, i_pos1, &local_c8); + fvar14 = PSVECMag(&local_c8); } else { local_c8.x = i_pos2->x - i_pos1->x; local_c8.y = 0.0f; @@ -290,14 +392,15 @@ void dCcS::SetPosCorrect(cCcD_Obj* i_co1Obj, cXyz* i_pos1, cCcD_Obj* i_co2Obj, c if (!cM3d_IsZero(fvar14)) { if (bvar2) { - VECScale(&local_c8, &local_c8, i_cross_len / fvar14); + f32 var_f26 = i_cross_len / fvar14; + PSVECScale(&local_c8, &local_c8, var_f26); fvar1 *= -1.0f; - VECScale(&local_c8, &co1_move, fvar1); - VECScale(&local_c8, &co2_move, fvar2); + PSVECScale(&local_c8, &co1_move, fvar1); + PSVECScale(&local_c8, &co2_move, fvar2); } else { - fvar14 = i_cross_len / fvar14; - local_c8.x *= fvar14; - local_c8.z *= fvar14; + f32 var_f27 = i_cross_len / fvar14; + local_c8.x *= var_f27; + local_c8.z *= var_f27; co1_move.x = -local_c8.x * fvar1; co1_move.y = 0.0f; @@ -332,27 +435,25 @@ void dCcS::CalcParticleAngle(dCcD_GObjInf* i_atObjInf, cCcD_Stts* i_atStts, cCcD csXyz* o_angle) { cXyz vec(*i_atObjInf->GetAtVecP()); - if (cM3d_IsZero(VECMag(&vec))) { + if (cM3d_IsZero(PSVECMag(&vec))) { fopAc_ac_c* atActor = i_atStts->GetActor(); fopAc_ac_c* tgActor = i_tgStts->GetActor(); if (atActor == NULL || tgActor == NULL) { - vec.z = 0.0f; - vec.x = 0.0f; + vec.x = vec.z = 0.0f; vec.y = -1.0f; } else { - VECSubtract(&tgActor->current.pos, &atActor->current.pos, &vec); + PSVECSubtract(&tgActor->current.pos, &atActor->current.pos, &vec); - if (cM3d_IsZero(VECMag(&vec))) { - vec.z = 0.0f; - vec.x = 0.0f; + if (cM3d_IsZero(PSVECMag(&vec))) { + vec.x = vec.z = 0.0f; vec.y = -1.0f; } else { - VECNormalize(&vec, &vec); + PSVECNormalize(&vec, &vec); } } } else { - VECNormalize(&vec, &vec); + PSVECNormalize(&vec, &vec); } cM3d_CalcVecZAngle(vec, o_angle); @@ -441,9 +542,9 @@ void dCcS::SetAtTgGObjInf(bool i_setAt, bool i_setTg, cCcD_Obj* i_atObj, cCcD_Ob atObjInf->SetAtHitApid(i_tgStts->GetApid()); - if (chk_shield || tgObjInf->GetTgHitMark() == 8 && atObjInf->GetAtMtrl() != dCcD_MTRL_ICE && + if (chk_shield || (tgObjInf->GetTgHitMark() == 8 && atObjInf->GetAtMtrl() != dCcD_MTRL_ICE && (atObjInf->GetAtSpl() == 0 || atObjInf->GetAtSpl() == 5 || - atObjInf->GetAtSpl() == 8)) + atObjInf->GetAtSpl() == 8))) { atObjInf->OnAtShieldHit(); } @@ -466,7 +567,8 @@ void dCcS::SetAtTgGObjInf(bool i_setAt, bool i_setTg, cCcD_Obj* i_atObj, cCcD_Ob if (chk_shield) { tgObjInf->OnTgShieldHit(); } else { - i_tgStts->PlusDmg(i_atObj->GetAtAtp()); + int atp = i_atObj->GetAtAtp(); + i_tgStts->PlusDmg(atp); } if (at_gstts->ChkNoActor()) { @@ -523,9 +625,10 @@ bool dCcS::ChkCamera(cXyz& param_0, cXyz& param_1, f32 param_2, fopAc_ac_c* para dCcD_GObjInf* obj = (dCcD_GObjInf*)(*i)->GetGObjInf(); if (obj == NULL || !obj->ChkCoNoCamHit()) { - cCcD_ShapeAttr* shapeAttr = (*i)->GetShapeAttr(); + cCcD_ShapeAttr* pco_sa = (*i)->GetShapeAttr(); + JUT_ASSERT(1058, pco_sa != NULL); - if (sp48.CrossCo(*shapeAttr, &sp14)) { + if (sp48.CrossCo(*pco_sa, &sp14)) { return true; } } @@ -604,10 +707,11 @@ bool dCcS::chkCameraPoint(cXyz const& param_0, cCcD_ShapeAttr::Shape* param_1, f dCcD_GObjInf* obj = (dCcD_GObjInf*)(*i)->GetGObjInf(); if (obj == NULL || !obj->ChkCoNoCamHit()) { - cCcD_ShapeAttr* shapeAttr = (*i)->GetShapeAttr(); + cCcD_ShapeAttr* pco_sa = (*i)->GetShapeAttr(); + JUT_ASSERT(1196, pco_sa != NULL); - if (sp48.CrossCo(*shapeAttr, &sp14)) { - shapeAttr->getShapeAccess(param_1); + if (sp48.CrossCo(*pco_sa, &sp14)) { + pco_sa->getShapeAccess(param_1); if (param_1->_0 != 2) { return true; @@ -626,12 +730,110 @@ void dCcS::MoveAfterCheck() {} void dCcS::DrawAfter() {} void dCcS::Move() { + #if DEBUG + if (s_Hio.ChkAllMassTimer()) { + OnMassAllTimer(); + } else { + OffMassAllTimer(); + } + + if (s_Hio.ChkMoveOff()) { + return; + } + + if (s_Hio.ChkMoveTimer()) { + OSStartStopwatch(&s_move_timer); + } + #endif + cCcS::Move(); + + #if DEBUG + if (s_Hio.ChkMoveTimer()) { + OSStopStopwatch(&s_move_timer); + OSDumpStopwatch(&s_move_timer); + } + #endif } void dCcS::Draw() { + #if DEBUG + if (s_Hio.ChkMassCounter()) { + OS_REPORT("Mass Counter %d\n", g_mass_counter); + g_mass_counter = 0; + } + + if (s_Hio.CheckAtOn()) { + for (int i = 0; i < field_0x280c; i++) { + if (mpObjAt[i] != NULL && mpObjAt[i]->ChkAtSet()) { + dCcD_GObjInf* gobj = (dCcD_GObjInf*)mpObjAt[i]->GetGObjInf(); + if (gobj->ChkAtHit()) { + GXColor color = {0xFF, 0, 0, 0xB4}; + mpObjAt[i]->Draw(color); + } else { + GXColor color = {0xFF, 0, 0, 0x50}; + mpObjAt[i]->Draw(color); + } + } + } + } + + if (s_Hio.CheckTgOn()) { + for (int i = 0; i < field_0x280e; i++) { + if (mpObjTg[i] != NULL && mpObjTg[i]->ChkTgSet()) { + dCcD_GObjInf* gobj = (dCcD_GObjInf*)mpObjTg[i]->GetGObjInf(); + if (gobj->ChkTgHit()) { + GXColor color = {0, 0xFF, 0, 0xB4}; + mpObjTg[i]->Draw(color); + } else { + GXColor color = {0, 0xFF, 0, 0x50}; + mpObjTg[i]->Draw(color); + } + } + } + } + + if (s_Hio.CheckCoOn()) { + for (int i = 0; i < field_0x2810; i++) { + if (mpObjCo[i] != NULL && mpObjCo[i]->ChkCoSet()) { + dCcD_GObjInf* gobj = (dCcD_GObjInf*)mpObjCo[i]->GetGObjInf(); + if (gobj->ChkCoHit()) { + GXColor color = {0xFF, 0xFF, 0xFF, 0xB4}; + mpObjCo[i]->Draw(color); + } else { + GXColor color = {0xFF, 0xFF, 0xFF, 0x50}; + mpObjCo[i]->Draw(color); + } + } + } + } + + if (s_Hio.ChkCamColDisp()) { + for (int i = 0; i < field_0x2810; i++) { + if (mpObjCo[i] != NULL && mpObjCo[i]->ChkCoSet()) { + dCcD_GObjInf* gobj = (dCcD_GObjInf*)mpObjCo[i]->GetGObjInf(); + if (!gobj->ChkCoNoCamHit()) { + GXColor color = {0xFF, 0xFF, 0, 0x50}; + mpObjCo[i]->Draw(color); + } + } + } + } + + if (s_Hio.ChkCounter()) { + OS_REPORT("At:%d,Tg:%d,Co:%d\n", field_0x280c, field_0x280e, field_0x2810); + } + #endif + DrawAfter(); - DrawClear(); + + #if DEBUG + if (!s_Hio.ChkDrawClearOff()) + #endif + { + DrawClear(); + } + mMass_Mng.Clear(); } @@ -657,7 +859,10 @@ BOOL dCcS::ChkAtTgMtrlHit(u8 i_atMtrl, u8 i_tgMtrl) { } bool dCcS::ChkNoHitGAtTg(cCcD_GObjInf const* i_atObjInf, cCcD_GObjInf const* i_tgObjInf, - cCcD_GStts*, cCcD_GStts*) { + cCcD_GStts* i_atStts, cCcD_GStts* i_tgStts) { + UNUSED(i_atStts); + UNUSED(i_tgStts); + dCcD_GObjInf* atObjInf = (dCcD_GObjInf*)i_atObjInf; dCcD_GObjInf* tgObjInf = (dCcD_GObjInf*)i_tgObjInf; |
