cc debug work (#3133)

This commit is contained in:
TakaRikka
2026-03-17 22:48:37 -07:00
committed by GitHub
parent 6694c1b281
commit f64015ea38
24 changed files with 675 additions and 377 deletions
+236 -31
View File
@@ -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;