summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/SSystem/SComponent/c_bg_s_shdw_draw.h3
-rw-r--r--include/SSystem/SComponent/c_bg_w.h2
-rw-r--r--include/SSystem/SComponent/c_m3d_g_aab.h8
-rw-r--r--include/SSystem/SComponent/c_m3d_g_cir.h2
-rw-r--r--include/SSystem/SComponent/c_m3d_g_pla.h4
-rw-r--r--include/d/d_bg_s.h179
-rw-r--r--include/d/d_bg_s_acch.h140
-rw-r--r--include/d/d_bg_s_cap_poly.h19
-rw-r--r--include/d/d_bg_s_capt_poly.h20
-rw-r--r--include/d/d_bg_s_grp_pass_chk.h1
-rw-r--r--include/d/d_bg_s_sph_chk.h1
-rw-r--r--include/d/d_bg_s_spl_grp_chk.h2
-rw-r--r--include/d/d_bg_w.h30
-rw-r--r--include/d/d_bg_w_base.h10
-rw-r--r--include/d/d_com_inf_game.h40
-rw-r--r--include/d/d_menu_window_HIO.h108
-rw-r--r--include/d/d_msg_object.h5
-rw-r--r--include/d/d_save.h4
-rw-r--r--src/d/actor/d_a_obj_brg.cpp5
-rw-r--r--src/d/actor/d_a_obj_ladder.cpp5
-rw-r--r--src/d/actor/d_a_obj_swpush.cpp2
-rw-r--r--src/d/d_bg_s.cpp1355
-rw-r--r--src/d/d_bg_s_acch.cpp311
-rw-r--r--src/d/d_bg_s_capt_poly.cpp4
-rw-r--r--src/d/d_bg_s_movebg_actor.cpp24
-rw-r--r--src/d/d_bg_s_poly_pass_chk.cpp5
-rw-r--r--src/d/d_bg_s_spl_grp_chk.cpp11
-rw-r--r--src/d/d_bg_w.cpp1315
-rw-r--r--src/d/d_bg_w_kcol.cpp4
-rw-r--r--src/d/d_menu_window_HIO.cpp1304
30 files changed, 3690 insertions, 1233 deletions
diff --git a/include/SSystem/SComponent/c_bg_s_shdw_draw.h b/include/SSystem/SComponent/c_bg_s_shdw_draw.h
index e99a933b70..9ec3023306 100644
--- a/include/SSystem/SComponent/c_bg_s_shdw_draw.h
+++ b/include/SSystem/SComponent/c_bg_s_shdw_draw.h
@@ -20,6 +20,9 @@ public:
/* 0x14 */ cM3dGAab mM3dGAab;
/* 0x30 */ cBgS_ShdwDraw_Callback mCallbackFun;
+ #if DEBUG
+ /* 0x34 */ int field_0x34;
+ #endif
};
#endif /* C_BG_S_SHDW_DRAW_H */
diff --git a/include/SSystem/SComponent/c_bg_w.h b/include/SSystem/SComponent/c_bg_w.h
index f1d5e291b4..23c6747d15 100644
--- a/include/SSystem/SComponent/c_bg_w.h
+++ b/include/SSystem/SComponent/c_bg_w.h
@@ -18,7 +18,7 @@ public:
cBgW_BgId() { Ct(); }
void Ct() { m_id = 0x100; }
- u16 GetId() const { return m_id; }
+ int GetId() const { return m_id; }
};
bool cBgW_CheckBGround(float a1);
diff --git a/include/SSystem/SComponent/c_m3d_g_aab.h b/include/SSystem/SComponent/c_m3d_g_aab.h
index 6317065a31..b070e776eb 100644
--- a/include/SSystem/SComponent/c_m3d_g_aab.h
+++ b/include/SSystem/SComponent/c_m3d_g_aab.h
@@ -35,16 +35,16 @@ public:
const f32 GetMinX(void) const { return mMin.x; }
const f32 GetMinY(void) const { return mMin.y; }
const f32 GetMinZ(void) const { return mMin.z; }
- bool Cross(const cM3dGLin *param_1) {
+ bool Cross(const cM3dGLin *param_1) const {
return cM3d_Cross_MinMaxBoxLine(GetMinP(), GetMaxP(), (Vec*)&param_1->GetStartP(), (Vec*)&param_1->GetEndP());
}
- bool Cross(const cM3dGAab *param_1) {
+ bool Cross(const cM3dGAab *param_1) const {
return cM3d_Cross_AabAab(this, param_1);
}
- bool Cross(const cM3dGCyl *param_1) {
+ bool Cross(const cM3dGCyl *param_1) const {
return cM3d_Cross_AabCyl(this, param_1);
}
- bool Cross(const cM3dGSph *param_1) {
+ bool Cross(const cM3dGSph *param_1) const {
return cM3d_Cross_AabSph(this, param_1);
}
}; // Size = 0x1C
diff --git a/include/SSystem/SComponent/c_m3d_g_cir.h b/include/SSystem/SComponent/c_m3d_g_cir.h
index eccd553c86..af837d47d6 100644
--- a/include/SSystem/SComponent/c_m3d_g_cir.h
+++ b/include/SSystem/SComponent/c_m3d_g_cir.h
@@ -30,6 +30,8 @@ public:
cM3dGCir(void);
virtual ~cM3dGCir(void);
void Set(f32, f32, f32, f32);
+
+ f32 GetHeight() const { return mPosZ; }
};
#endif /* C_M3D_G_CIR_H */
diff --git a/include/SSystem/SComponent/c_m3d_g_pla.h b/include/SSystem/SComponent/c_m3d_g_pla.h
index 7f25724b55..e2b0eefb55 100644
--- a/include/SSystem/SComponent/c_m3d_g_pla.h
+++ b/include/SSystem/SComponent/c_m3d_g_pla.h
@@ -31,8 +31,8 @@ public:
cM3d_CalcPla(v1, v2, v3, &mNormal, &mD);
}
- f32 getCrossY_NonIsZero(const cXyz *param_1) {
- return ((-mNormal.x * param_1->x - mNormal.z * param_1->z) - mD) / mNormal.y;
+ f32 getCrossY_NonIsZero(const cXyz& param_1) const {
+ return ((-mNormal.x * param_1.x - mNormal.z * param_1.z) - mD) / mNormal.y;
}
bool cross(cM3dGLin const& line, Vec& point) {
diff --git a/include/d/d_bg_s.h b/include/d/d_bg_s.h
index 315a7be614..1c47356c80 100644
--- a/include/d/d_bg_s.h
+++ b/include/d/d_bg_s.h
@@ -13,7 +13,7 @@ class cBgS_ChkElm {
public:
/* 0x00 */ dBgW_Base* m_bgw_base_ptr;
/* 0x04 */ bool m_used;
- /* 0x08 */ u32 m_actor_id;
+ /* 0x08 */ fpc_ProcID m_actor_id;
/* 0x0C */ fopAc_ac_c* m_actor_ptr;
/* 0x10 vtable */
@@ -50,6 +50,7 @@ public:
bool GetTriPnt(cBgS_PolyInfo const&, cXyz*, cXyz*, cXyz*) const;
void ShdwDraw(cBgS_ShdwDraw*);
u32 GetGrpInf(cBgS_PolyInfo const&) const;
+ void Draw();
virtual ~cBgS() {}
virtual void Ct();
@@ -67,40 +68,124 @@ u8 dKy_pol_sound_get(cBgS_PolyInfo const* param_0);
class dBgS_HIO : public JORReflexible {
public:
#if DEBUG
+ enum flags_e {
+ FLAG_ACCH_WALL_OFF_e = 0x2,
+ FLAG_CHECK_COUNTER_e = 0x4,
+ FLAG_ACCH_WALL_TIMER_e = 0x8,
+ FLAG_OBJ_LINE_CHECK_e = 0x10,
+ FLAG_ACCH_DRAW_WALL_e = 0x400,
+ FLAG_ROOF_TIMER_e = 0x2000,
+ FLAG_ROOF_OFF_e = 0x4000,
+
+ FLAG2_GND_CHK_e = 0x1,
+ FLAG2_SHAPE_DISP_e = 0x2,
+ FLAG2_GROUND_CHECK_TIMER_e = 0x4,
+ FLAG2_SPL_OFF_e = 0x8,
+ FLAG2_SPL_TIMER_e = 0x10,
+ FLAG2_LINE_OFF_e = 0x40,
+ FLAG2_LINE_TIMER_e = 0x80,
+ FLAG2_SHDW_DRAW_OFF_e = 0x100,
+ FLAG2_SHDW_DRAW_TIMER_e = 0x200,
+ FLAG2_CAPTPOLY_OFF_e = 0x800,
+ FLAG2_CAPTPOLY_TIMER_e = 0x1000,
+ FLAG2_SPH_CHK_OFF_e = 0x2000,
+ FLAG2_SPH_CHK_TIMER_e = 0x4000,
+ };
+
dBgS_HIO() {
- field_0x6 = 0;
- field_0x8 = 0;
+ m_flags = 0;
+ m_flags2 = 0;
- field_0xc.x = field_0xc.y = field_0xc.z = 0.0f;
- field_0x18.x = field_0x18.y = field_0x18.z = 0.0f;
- field_0x24.x = field_0x24.y = field_0x24.z = 0.0f;
+ m_linecheck_start.x = m_linecheck_start.y = m_linecheck_start.z = 0.0f;
+ m_linecheck_end.x = m_linecheck_end.y = m_linecheck_end.z = 0.0f;
+ m_gndcheck_pos.x = m_gndcheck_pos.y = m_gndcheck_pos.z = 0.0f;
- field_0x30 = -1;
+ m_errorCheck_actor_num = -1;
}
virtual void genMessage(JORMContext*);
virtual ~dBgS_HIO();
- BOOL ChkLineOff();
- BOOL ChkCheckCounter();
- BOOL ChkLineTimer();
- BOOL ChkGroundCheckTimer();
-
- /* 0x04 */ u8 field_0x4[0x6 - 0x4];
- /* 0x06 */ u16 field_0x6;
- /* 0x08 */ u16 field_0x8;
- /* 0x0C */ cXyz field_0xc;
- /* 0x18 */ cXyz field_0x18;
- /* 0x24 */ cXyz field_0x24;
- /* 0x30 */ int field_0x30;
+ bool ChkLineOff() { return m_flags2 & FLAG2_LINE_OFF_e; }
+ bool ChkCheckCounter() { return m_flags & FLAG_CHECK_COUNTER_e; }
+ bool ChkLineTimer() { return m_flags2 & FLAG2_LINE_TIMER_e; }
+ bool ChkGroundCheckTimer() { return m_flags2 & FLAG2_GROUND_CHECK_TIMER_e; }
+ bool ChkObjLineCheck() { return m_flags & FLAG_OBJ_LINE_CHECK_e; }
+ bool ChkGndCheck() { return m_flags2 & FLAG2_GND_CHK_e; }
+ bool ChkCaptPolyTimer() { return m_flags2 & FLAG2_CAPTPOLY_TIMER_e; }
+ bool ChkCaptPolyOff() { return m_flags2 & FLAG2_CAPTPOLY_OFF_e; }
+ bool ChkShdwDrawOff() { return m_flags2 & FLAG2_SHDW_DRAW_OFF_e; }
+ bool ChkShdwDrawTimer() { return m_flags2 & FLAG2_SHDW_DRAW_TIMER_e; }
+ bool ChkAcchWallOff() { return m_flags & FLAG_ACCH_WALL_OFF_e; }
+ bool ChkAcchWallTimer() { return m_flags & FLAG_ACCH_WALL_TIMER_e; }
+ bool ChkRoofTimer() { return m_flags & FLAG_ROOF_TIMER_e; }
+ bool ChkRoofOff() { return m_flags & FLAG_ROOF_OFF_e; }
+ bool ChkSplOff() { return m_flags2 & FLAG2_SPL_OFF_e; }
+ bool ChkSplTimer() { return m_flags2 & FLAG2_SPL_TIMER_e; }
+ bool ChkSphChkOff() { return m_flags2 & FLAG2_SPH_CHK_OFF_e; }
+ bool ChkSphChkTimer() { return m_flags2 & FLAG2_SPH_CHK_TIMER_e; }
+ bool ChkShapeDisp() { return m_flags2 & FLAG2_SHAPE_DISP_e; }
+ bool ChkAcchDrawWall() { return m_flags & FLAG_ACCH_DRAW_WALL_e; }
+
+ /* 0x04 */ s8 id;
+ /* 0x06 */ u16 m_flags;
+ /* 0x08 */ u16 m_flags2;
+ /* 0x0C */ cXyz m_linecheck_start;
+ /* 0x18 */ cXyz m_linecheck_end;
+ /* 0x24 */ cXyz m_gndcheck_pos;
+ /* 0x30 */ s32 m_errorCheck_actor_num;
#endif
};
-extern int g_line_counter;
-extern OSStopwatch s_line_sw;
+class dBgS_InsideHIO : public JORReflexible {
+public:
+#if DEBUG
+ enum flags_e {
+ FLAG_DISP_POLY_e = 0x1,
+ FLAG_DISP_DP_AREA_e = 0x2,
+ FLAG_WHITE_WIRE_e = 0x4,
+ FLAG_PLAYER_AROUND_e = 0x8,
+ FLAG_DISP_WATER_POLY_e = 0x10,
+ FLAG_GROUND_OFF_e = 0x20,
+ FLAG_WALL_OFF_e = 0x40,
+ FLAG_ROOF_OFF_e = 0x80,
+ FLAG_GNDCHK_PLAYER_UNDER_e = 0x100,
+ };
+
+ dBgS_InsideHIO() {
+ m_flags = FLAG_PLAYER_AROUND_e;
+
+ m_raise_amount = 1.0f;
-extern int g_ground_counter;
-extern OSStopwatch s_ground_sw;
+ m_p0.x = 100.0f;
+ m_p0.y = 0.0f;
+ m_p0.z = 0.0f;
+
+ m_p1.x = 0.0f;
+ m_p1.y = 0.0f;
+ m_p1.z = 0.0f;
+ }
+
+ virtual void genMessage(JORMContext*);
+ virtual ~dBgS_InsideHIO();
+
+ BOOL ChkWallOff() { return m_flags & FLAG_WALL_OFF_e; }
+ BOOL ChkRoofOff() { return m_flags & FLAG_ROOF_OFF_e; }
+ BOOL ChkGroundOff() { return m_flags & FLAG_GROUND_OFF_e; }
+ BOOL ChkGndChkPlayerUnder() { return m_flags & FLAG_GNDCHK_PLAYER_UNDER_e; }
+ BOOL ChkWhiteWire() { return m_flags & FLAG_WHITE_WIRE_e; }
+ BOOL ChkDispWaterPoly() { return m_flags & FLAG_DISP_WATER_POLY_e; }
+ BOOL ChkDispDpArea() { return m_flags & FLAG_DISP_DP_AREA_e; }
+ BOOL ChkPlayerAround() { return m_flags & FLAG_PLAYER_AROUND_e; }
+ BOOL ChkDispPoly() { return m_flags & FLAG_DISP_POLY_e; }
+
+ /* 0x04 */ s8 id;
+ /* 0x06 */ u16 m_flags;
+ /* 0x08 */ f32 m_raise_amount;
+ /* 0x0C */ cXyz m_p0;
+ /* 0x18 */ cXyz m_p1;
+#endif
+};
class dBgS : public cBgS {
public:
@@ -149,53 +234,31 @@ public:
bool WaterChk(dBgS_SplGrpChk* chk) { return SplGrpChk(chk); }
u32 GetMtrlSndId(const cBgS_PolyInfo& param_0) { return dKy_pol_sound_get(&param_0); }
- void DebugDrawPoly(dBgW_Base *param_1) {}
- void DebugDrawPoly(dBgW_Base const& param_1) {}
void DrawPoly(cBgS_PolyInfo const& param_0, GXColor const& param_1);
fopAc_ac_c* GetActorPointer(cBgS_PolyInfo const& param_0) const { return cBgS::GetActorPointer(param_0); }
+
+ #if DEBUG
+ void DebugDrawPoly(const dBgW_Base& param_1);
+ #endif
+
+ #if DEBUG
+ bool LineCross(cBgS_LinChk* i_linChk);
+ f32 GroundCross(cBgS_GndChk* i_gndChk);
+ void ShdwDraw(cBgS_ShdwDraw*);
+ #else
bool LineCross(cBgS_LinChk* i_linChk) {
- #if DEBUG
- if (m_hio.ChkLineOff()) {
- return false;
- }
- if (m_hio.ChkCheckCounter()) {
- g_line_counter++;
- }
- if (m_hio.ChkLineTimer()) {
- OSStartStopwatch(&s_line_sw);
- }
- bool rt = cBgS::LineCross(i_linChk);
- if (m_hio.ChkLineTimer()) {
- OSStopStopwatch(&s_line_sw);
- OSDumpStopwatch(&s_line_sw);
- }
- return rt;
- #else
return cBgS::LineCross(i_linChk);
- #endif
}
+
f32 GroundCross(cBgS_GndChk* i_gndChk) {
- #if DEBUG
- if (m_hio.ChkCheckCounter()) {
- g_ground_counter++;
- }
- if (m_hio.ChkGroundCheckTimer()) {
- OSStartStopwatch(&s_ground_sw);
- }
- f32 rt = cBgS::GroundCross(i_gndChk);
- if (m_hio.ChkGroundCheckTimer()) {
- OSStopStopwatch(&s_ground_sw);
- OSDumpStopwatch(&s_ground_sw);
- }
- return rt;
- #else
return cBgS::GroundCross(i_gndChk);
- #endif
}
+ #endif
void ChkDeleteActorRegist(fopAc_ac_c*);
void Draw();
+ void CaptPoly(dBgS_CaptPoly&);
#if DEBUG
/* 0x1404 */ u8 field_0x1404[0x1408 - 0x1404];
diff --git a/include/d/d_bg_s_acch.h b/include/d/d_bg_s_acch.h
index 4f97961dde..33bca24c0a 100644
--- a/include/d/d_bg_s_acch.h
+++ b/include/d/d_bg_s_acch.h
@@ -25,7 +25,7 @@ private:
public:
enum {
- /* 0x2 */ WALL_HIT = 2,
+ /* 0x2 */ FLAG_WALL_HIT = 2,
/* 0x4 */ WALL_H_DIRECT = 4,
};
@@ -42,16 +42,18 @@ public:
virtual ~dBgS_AcchCir() {}
#endif
+ void SetWallPolyIndex(int index) { SetPolyIndex(index); }
+
f32 GetWallH() { return m_wall_h; }
f32 GetWallR() { return m_wall_r; }
void SetWallH(f32 h) { m_wall_h = h; }
void ClrWallHDirect() { m_flags &= ~WALL_H_DIRECT; }
- bool ChkWallHit() { return (m_flags & WALL_HIT) != 0; }
+ bool ChkWallHit() { return (m_flags & FLAG_WALL_HIT) != 0; }
s16 GetWallAngleY() { return m_wall_angle_y; }
- bool ChkWallHDirect() { return (m_flags & WALL_H_DIRECT) != 0; }
+ BOOL ChkWallHDirect() { return (m_flags & WALL_H_DIRECT); }
f32 GetWallHDirect() { return m_wall_h_direct; }
f32 GetWallRR() { return m_wall_rr; }
- void SetWallHit() { m_flags |= WALL_HIT; }
+ void SetWallHit() { m_flags |= FLAG_WALL_HIT; }
void SetWallAngleY(s16 i_angle) { m_wall_angle_y = i_angle; }
cM3dGCir* GetCirP() { return &m_cir; }
@@ -62,26 +64,26 @@ class dBgS;
class dBgS_Acch : public cBgS_Chk, public dBgS_Chk {
public:
enum {
- /* 0x000002 */ GRND_NONE = (1 << 1),
- /* 0x000004 */ WALL_NONE = (1 << 2),
- /* 0x000008 */ ROOF_NONE = (1 << 3),
- /* 0x000010 */ WALL_HIT = (1 << 4),
- /* 0x000020 */ GROUND_HIT = (1 << 5),
- /* 0x000040 */ GROUND_FIND = (1 << 6),
- /* 0x000080 */ GROUND_LANDING = (1 << 7),
- /* 0x000100 */ GROUND_AWAY = (1 << 8),
- /* 0x000200 */ ROOF_HIT = (1 << 9),
- /* 0x000400 */ WATER_NONE = (1 << 10),
- /* 0x000800 */ WATER_HIT = (1 << 11),
- /* 0x001000 */ WATER_IN = (1 << 12),
- /* 0x002000 */ LINE_CHECK = (1 << 13),
- /* 0x004000 */ LINE_CHECK_NONE = (1 << 14),
- /* 0x008000 */ CLR_SPEED_Y = (1 << 15),
- /* 0x010000 */ LINE_CHECK_HIT = (1 << 16),
- /* 0x100000 */ MOVE_BG_ONLY = (1 << 20),
- /* 0x200000 */ GND_THIN_CELLING_OFF = (1 << 21),
- /* 0x400000 */ WALL_SORT = (1 << 22),
- /* 0x800000 */ LINE_DOWN = (1 << 23),
+ /* 0x000002 */ FLAG_GRND_NONE = (1 << 1),
+ /* 0x000004 */ FLAG_WALL_NONE = (1 << 2),
+ /* 0x000008 */ FLAG_ROOF_NONE = (1 << 3),
+ /* 0x000010 */ FLAG_WALL_HIT = (1 << 4),
+ /* 0x000020 */ FLAG_GROUND_HIT = (1 << 5),
+ /* 0x000040 */ FLAG_GROUND_FIND = (1 << 6),
+ /* 0x000080 */ FLAG_GROUND_LANDING = (1 << 7),
+ /* 0x000100 */ FLAG_GROUND_AWAY = (1 << 8),
+ /* 0x000200 */ FLAG_ROOF_HIT = (1 << 9),
+ /* 0x000400 */ FLAG_WATER_NONE = (1 << 10),
+ /* 0x000800 */ FLAG_WATER_HIT = (1 << 11),
+ /* 0x001000 */ FLAG_WATER_IN = (1 << 12),
+ /* 0x002000 */ FLAG_LINE_CHECK = (1 << 13),
+ /* 0x004000 */ FLAG_LINE_CHECK_NONE = (1 << 14),
+ /* 0x008000 */ FLAG_CLR_SPEED_Y = (1 << 15),
+ /* 0x010000 */ FLAG_LINE_CHECK_HIT = (1 << 16),
+ /* 0x100000 */ FLAG_MOVE_BG_ONLY = (1 << 20),
+ /* 0x200000 */ FLAG_GND_THIN_CELLING_OFF = (1 << 21),
+ /* 0x400000 */ FLAG_WALL_SORT = (1 << 22),
+ /* 0x800000 */ FLAG_LINE_DOWN = (1 << 23),
};
dBgS_Acch();
@@ -124,56 +126,56 @@ public:
f32 GetRoofHeight() const { return m_roof_height; }
int GetTblSize() { return m_tbl_size; }
void SetLin() { m_lin.SetStartEnd(*pm_old_pos, *pm_pos); }
- bool ChkGroundFind() { return (m_flags & GROUND_FIND) != 0; }
- bool ChkGroundHit() const { return (m_flags & GROUND_HIT) != 0; }
- bool ChkGroundLanding() const { return (m_flags & GROUND_LANDING) != 0; }
- void ClrGroundLanding() { m_flags &= ~GROUND_LANDING; }
- void ClrGroundAway() { m_flags &= ~GROUND_AWAY; }
- void ClrWallHit() { m_flags &= ~WALL_HIT; }
- void SetRoofNone() { m_flags |= ROOF_NONE; }
- void SetRoofHit() { m_flags |= ROOF_HIT; }
- void SetWaterNone() { m_flags |= WATER_NONE; }
- u32 ChkWallHit() const { return m_flags & WALL_HIT; }
- void OffLineCheckHit() { m_flags &= ~LINE_CHECK_HIT; }
- void OffLineCheck() { m_flags &= ~LINE_CHECK; }
- u32 ChkLineCheckNone() const { return (m_flags & LINE_CHECK_NONE) != 0; }
- u32 ChkLineCheck() const { return (m_flags & LINE_CHECK) != 0; }
- void ClrRoofHit() { m_flags &= ~ROOF_HIT; }
- void ClrWaterHit() { m_flags &= ~WATER_HIT; }
- void SetWaterHit() { m_flags |= WATER_HIT; }
- void ClrWaterIn() { m_flags &= ~WATER_IN; }
- void SetWaterIn() { m_flags |= WATER_IN; }
- const u32 MaskWaterIn() const { return m_flags & WATER_IN; }
+ bool ChkGroundFind() { return (m_flags & FLAG_GROUND_FIND) != 0; }
+ bool ChkGroundHit() const { return (m_flags & FLAG_GROUND_HIT) != 0; }
+ bool ChkGroundLanding() const { return (m_flags & FLAG_GROUND_LANDING) != 0; }
+ void ClrGroundLanding() { m_flags &= ~FLAG_GROUND_LANDING; }
+ void ClrGroundAway() { m_flags &= ~FLAG_GROUND_AWAY; }
+ void ClrWallHit() { m_flags &= ~FLAG_WALL_HIT; }
+ void SetRoofNone() { m_flags |= FLAG_ROOF_NONE; }
+ void SetRoofHit() { m_flags |= FLAG_ROOF_HIT; }
+ void SetWaterNone() { m_flags |= FLAG_WATER_NONE; }
+ u32 ChkWallHit() const { return m_flags & FLAG_WALL_HIT; }
+ void OffLineCheckHit() { m_flags &= ~FLAG_LINE_CHECK_HIT; }
+ void OffLineCheck() { m_flags &= ~FLAG_LINE_CHECK; }
+ u32 ChkLineCheckNone() const { return (m_flags & FLAG_LINE_CHECK_NONE); }
+ u32 ChkLineCheck() const { return (m_flags & FLAG_LINE_CHECK); }
+ void ClrRoofHit() { m_flags &= ~FLAG_ROOF_HIT; }
+ void ClrWaterHit() { m_flags &= ~FLAG_WATER_HIT; }
+ void SetWaterHit() { m_flags |= FLAG_WATER_HIT; }
+ void ClrWaterIn() { m_flags &= ~FLAG_WATER_IN; }
+ void SetWaterIn() { m_flags |= FLAG_WATER_IN; }
+ const u32 MaskWaterIn() const { return m_flags & FLAG_WATER_IN; }
const bool ChkWaterIn() const { return MaskWaterIn() != 0; }
- void ClrGroundFind() { m_flags &= ~GROUND_FIND; }
- u32 MaskRoofHit() const { return m_flags & ROOF_HIT; }
+ void ClrGroundFind() { m_flags &= ~FLAG_GROUND_FIND; }
+ u32 MaskRoofHit() const { return m_flags & FLAG_ROOF_HIT; }
bool ChkRoofHit() const { return MaskRoofHit() != 0; }
- void OffClrSpeedY() { m_flags |= CLR_SPEED_Y; }
- void OnClrSpeedY() { m_flags &= ~CLR_SPEED_Y; }
- bool ChkClrSpeedY() const { return !(m_flags & CLR_SPEED_Y); }
- void SetGroundFind() { m_flags |= GROUND_FIND; }
- void SetGroundHit() { m_flags |= GROUND_HIT; }
- void SetGroundLanding() { m_flags |= GROUND_LANDING; }
- void SetGroundAway() { m_flags |= GROUND_AWAY; }
- const u32 MaskWaterHit() const { return m_flags & WATER_HIT; }
+ void OffClrSpeedY() { m_flags |= FLAG_CLR_SPEED_Y; }
+ void OnClrSpeedY() { m_flags &= ~FLAG_CLR_SPEED_Y; }
+ bool ChkClrSpeedY() const { return !(m_flags & FLAG_CLR_SPEED_Y); }
+ void SetGroundFind() { m_flags |= FLAG_GROUND_FIND; }
+ void SetGroundHit() { m_flags |= FLAG_GROUND_HIT; }
+ void SetGroundLanding() { m_flags |= FLAG_GROUND_LANDING; }
+ void SetGroundAway() { m_flags |= FLAG_GROUND_AWAY; }
+ const u32 MaskWaterHit() const { return m_flags & FLAG_WATER_HIT; }
const bool ChkWaterHit() const { return MaskWaterHit() != 0; }
- void ClrWaterNone() { m_flags &= ~WATER_NONE; }
+ void ClrWaterNone() { m_flags &= ~FLAG_WATER_NONE; }
void SetWaterCheckOffset(f32 offset) { m_wtr_chk_offset = offset; }
- void OnLineCheck() { m_flags |= LINE_CHECK; }
- void ClrRoofNone() { m_flags &= ~ROOF_NONE; }
+ void OnLineCheck() { m_flags |= FLAG_LINE_CHECK; }
+ void ClrRoofNone() { m_flags &= ~FLAG_ROOF_NONE; }
void SetRoofCrrHeight(f32 height) { m_roof_crr_height = height; }
void SetWtrChkMode(int mode) { m_wtr_mode = mode; }
- void SetGrndNone() { m_flags |= GRND_NONE; }
- void ClrGrndNone() { m_flags &= ~GRND_NONE; }
- bool ChkMoveBGOnly() const { return (m_flags & MOVE_BG_ONLY) != 0; }
- void SetWallHit() { m_flags |= WALL_HIT; }
- void ClrWallNone() { m_flags &= ~WALL_NONE; }
- void OnLineCheckNone() { m_flags |= LINE_CHECK_NONE; }
- void OffLineCheckNone() { m_flags &= ~LINE_CHECK_NONE; }
- void SetWallNone() { m_flags |= WALL_NONE; }
- void OnLineCheckHit() { m_flags |= LINE_CHECK_HIT; }
- bool ChkGroundAway() const { return (m_flags & GROUND_AWAY) != 0; }
- void ClrGroundHit() { m_flags &= ~GROUND_HIT; }
+ void SetGrndNone() { m_flags |= FLAG_GRND_NONE; }
+ void ClrGrndNone() { m_flags &= ~FLAG_GRND_NONE; }
+ bool ChkMoveBGOnly() const { return (m_flags & FLAG_MOVE_BG_ONLY) != 0; }
+ void SetWallHit() { m_flags |= FLAG_WALL_HIT; }
+ void ClrWallNone() { m_flags &= ~FLAG_WALL_NONE; }
+ void OnLineCheckNone() { m_flags |= FLAG_LINE_CHECK_NONE; }
+ void OffLineCheckNone() { m_flags &= ~FLAG_LINE_CHECK_NONE; }
+ void SetWallNone() { m_flags |= FLAG_WALL_NONE; }
+ void OnLineCheckHit() { m_flags |= FLAG_LINE_CHECK_HIT; }
+ bool ChkGroundAway() const { return (m_flags & FLAG_GROUND_AWAY) != 0; }
+ void ClrGroundHit() { m_flags &= ~FLAG_GROUND_HIT; }
void SetGroundCheckOffset(f32 offset) { m_gnd_chk_offset = offset; }
cM3dGCyl* GetWallBmdCylP() { return &m_wall_cyl; }
@@ -186,7 +188,7 @@ public:
f32 GetWallH(int i_no) { return pm_acch_cir[i_no].GetWallH(); }
f32 GetWallR(int i_no) { return pm_acch_cir[i_no].GetWallR(); }
- bool ChkWallHDirect(int i_no) { return pm_acch_cir[i_no].ChkWallHDirect(); }
+ BOOL ChkWallHDirect(int i_no) { return pm_acch_cir[i_no].ChkWallHDirect(); }
f32 GetWallHDirect(int i_no) { return pm_acch_cir[i_no].GetWallHDirect(); }
f32 GetWallRR(int i_no) { return pm_acch_cir[i_no].GetWallRR(); }
void SetWallCirHit(int i_no) { pm_acch_cir[i_no].SetWallHit(); }
diff --git a/include/d/d_bg_s_cap_poly.h b/include/d/d_bg_s_cap_poly.h
deleted file mode 100644
index ca4a38542c..0000000000
--- a/include/d/d_bg_s_cap_poly.h
+++ /dev/null
@@ -1,19 +0,0 @@
-#ifndef D_BG_D_BG_S_CAPT_POLY_H
-#define D_BG_D_BG_S_CAPT_POLY_H
-
-#include "d/d_bg_s_chk.h"
-#include "SSystem/SComponent/c_m3d_g_aab.h"
-
-class dBgS_CaptPoly;
-
-typedef void (*CaptPolyCallback)(dBgS_CaptPoly&, cBgD_Vtx_t*, u16, u16, u16, cM3dGPla*);
-
-struct dBgS_CaptPoly : public cBgS_Chk, public dBgS_Chk {
-public:
- cM3dGAab* GetBndP() { return &m_pos;}
-
- /* 0x2C */ cM3dGAab m_pos;
- /* 0x48 */ CaptPolyCallback m_callback;
-};
-
-#endif
diff --git a/include/d/d_bg_s_capt_poly.h b/include/d/d_bg_s_capt_poly.h
index 69a36ce247..9e61d74336 100644
--- a/include/d/d_bg_s_capt_poly.h
+++ b/include/d/d_bg_s_capt_poly.h
@@ -1,18 +1,24 @@
-#ifndef _D_BG_S_CAPT_POLY_H
-#define _D_BG_S_CAPT_POLY_H
+#ifndef D_BG_D_BG_S_CAPT_POLY_H
+#define D_BG_D_BG_S_CAPT_POLY_H
#include "d/d_bg_s_chk.h"
#include "SSystem/SComponent/c_m3d_g_aab.h"
-#include "SSystem/SComponent/c_xyz.h"
-class dBgS_CaptPoly : public cBgS_Chk, public dBgS_Chk {
+struct dBgS_CaptPoly;
+
+typedef int (*CaptPolyCallback)(dBgS_CaptPoly*, cBgD_Vtx_t*, int, int, int, cM3dGPla*);
+
+struct dBgS_CaptPoly : public cBgS_Chk, public dBgS_Chk {
public:
dBgS_CaptPoly();
~dBgS_CaptPoly() {}
void Set(cXyz&, cXyz&);
- /* 0x24 */ cM3dGAab aab;
- /* 0x48 */ int field_0x48;
+ void SetCallback(CaptPolyCallback callback) { m_callback = callback; }
+ cM3dGAab* GetBndP() { return &m_bnd;}
+
+ /* 0x2C */ cM3dGAab m_bnd;
+ /* 0x48 */ CaptPolyCallback m_callback;
};
-#endif /* _D_BG_S_CAPT_POLY_H */
+#endif
diff --git a/include/d/d_bg_s_grp_pass_chk.h b/include/d/d_bg_s_grp_pass_chk.h
index c58300e68b..eea3414b98 100644
--- a/include/d/d_bg_s_grp_pass_chk.h
+++ b/include/d/d_bg_s_grp_pass_chk.h
@@ -20,6 +20,7 @@ public:
void OffWaterGrp() { mGrp &= ~WATER_GRP; }
void OnNormalGrp() { mGrp |= NORMAL_GRP; }
void OffNormalGrp() { mGrp &= ~NORMAL_GRP; }
+ void OnFullGrp() { mGrp |= FULL_GRP; }
void OffFullGrp() { mGrp &= ~FULL_GRP; }
void OnAll() { mGrp |= FULL_GRP; }
u32 MaskNormalGrp() { return mGrp & NORMAL_GRP; }
diff --git a/include/d/d_bg_s_sph_chk.h b/include/d/d_bg_s_sph_chk.h
index a7734563c6..200a46d89b 100644
--- a/include/d/d_bg_s_sph_chk.h
+++ b/include/d/d_bg_s_sph_chk.h
@@ -15,6 +15,7 @@ public:
dBgS_SphChk();
virtual ~dBgS_SphChk();
+ void Init() { ClearPi(); }
void SetCallback(SphChk_Callback i_callback) { mCallback = i_callback; }
/* 0x50 */ SphChk_Callback mCallback;
diff --git a/include/d/d_bg_s_spl_grp_chk.h b/include/d/d_bg_s_spl_grp_chk.h
index bc8567eec5..447bbf4d73 100644
--- a/include/d/d_bg_s_spl_grp_chk.h
+++ b/include/d/d_bg_s_spl_grp_chk.h
@@ -24,7 +24,7 @@ public:
void OffMoveBGOnly() { m_flags &= ~MOVE_BG_ONLY; }
void OnMoveBGOnly() { m_flags |= MOVE_BG_ONLY; }
void OnFind() { m_flags |= FIND; }
- bool ChkMoveBGOnly() { return m_flags & MOVE_BG_ONLY; }
+ BOOL ChkMoveBGOnly() { return m_flags & MOVE_BG_ONLY; }
void SetHeight(f32 height) { m_height = height; }
f32 GetHeight() { return m_height; }
cXyz& GetPosP() { return m_ground; }
diff --git a/include/d/d_bg_w.h b/include/d/d_bg_w.h
index 09970f9f4d..592ae177a5 100644
--- a/include/d/d_bg_w.h
+++ b/include/d/d_bg_w.h
@@ -153,6 +153,10 @@ public:
u32 GetMaskPolyInf1_NoShift(int, u32) const;
u32 GetPolyInf2(int, u32, u32) const;
int GetTriGrp(int) const;
+
+ #if DEBUG
+ void DebugLocalPos();
+ #endif
virtual ~cBgW();
virtual bool ChkMemoryError();
@@ -215,23 +219,23 @@ public:
virtual bool ChkShdwDrawThrough(int, cBgS_PolyPassChk*);
virtual bool ChkGrpThrough(int, cBgS_GrpPassChk*, int);
- u32 GetOldInvMtx(Mtx m) { return MTXInverse(m_inv_mtx, m); }
- MtxP GetBaseMtxP() { return pm_base; }
- bool ChkNoCalcVtx() { return mFlags & NO_CALC_VTX_e; }
- bool ChkFlush() { return field_0x91 & 8; }
+ u32 GetOldInvMtx(Mtx m) const { return PSMTXInverse(m_inv_mtx, m); }
+ MtxP GetBaseMtxP() { return *pm_base; }
+ BOOL ChkNoCalcVtx() { return mFlags & NO_CALC_VTX_e; }
+ BOOL ChkFlush() { return field_0x91 & 8; }
void SetLock() { mFlags |= (u8)LOCK_e; }
void OffRoofRegist() { field_0x91 |= (u8)0x4; }
void OnRoofRegist() { field_0x91 &= ~0x04; }
- bool ChkRoofRegist() { return field_0x91 & 4;}
+ bool ChkRoofRegist() { return (field_0x91 & 4) == 0;}
cBgD_Vtx_t* GetVtxTbl() const { return pm_vtx_tbl; }
int GetVtxNum() const { return pm_bgd->m_v_num; }
void ClrNoCalcVtx() { mFlags &= ~NO_CALC_VTX_e; }
- void SetBaseMtxP(MtxP mtx) { pm_base = mtx; }
+ void SetBaseMtxP(Mtx* mtx) { pm_base = mtx; }
void SetNoCalcVtx() { mFlags |= NO_CALC_VTX_e; }
cBgD_t* GetBgd() const { return pm_bgd; }
public:
- /* 0x18 */ MtxP pm_base; // Model Matrix
+ /* 0x18 */ Mtx* pm_base; // Model Matrix
/* 0x1C */ Mtx m_inv_mtx;
/* 0x4C */ Mtx m_mtx;
/* 0x7C */ cXyz mTransVel;
@@ -330,10 +334,16 @@ public:
virtual bool ChkShdwDrawThrough(int, cBgS_PolyPassChk*);
virtual bool ChkGrpThrough(int, cBgS_GrpPassChk*, int);
+ #if DEBUG
+ void DrawBox() const;
+ void DebugDraw() const;
+ void DrawPoly(const cBgS_PolyInfo&, const GXColor&) const;
+ #endif
+
void SetCrrFunc(dBgW_CrrFunc func) { m_crr_func = func; }
void SetRideCallback(dBgW_RideCallback func) { m_ride_callback = func; }
void SetArrowStickCallback(dBgW_ArrowStickCallback func) { m_arrow_stick_callback = func; }
- void OnMoveFlag() { m_flags |= 1; }
+ void OnMoveFlag() { m_flags |= (u8)1; }
private:
/* 0xB0 */ dBgW_CrrFunc m_crr_func;
@@ -344,4 +354,8 @@ private:
dBgW* dBgW_NewSet(cBgD_t* pbgd, u32 flags, Mtx* pbase_mtx);
+#if DEBUG
+extern u8 lbl_8074C7F0;
+#endif
+
#endif /* D_BG_D_BG_W_H */
diff --git a/include/d/d_bg_w_base.h b/include/d/d_bg_w_base.h
index b8127cde6a..900b87c307 100644
--- a/include/d/d_bg_w_base.h
+++ b/include/d/d_bg_w_base.h
@@ -106,16 +106,16 @@ public:
virtual void CallArrowStickCallBack(fopAc_ac_c*, fopAc_ac_c*, cXyz&);
#if DEBUG
- virtual void DebugDraw() {}
- virtual void DrawPoly(cBgS_PolyInfo const& param_0, GXColor const& param_1) {}
- virtual void DebugBox() {}
+ virtual void DebugDraw() const {}
+ virtual void DrawPoly(cBgS_PolyInfo const& param_0, GXColor const& param_1) const {}
+ virtual void DrawBox() const {}
#endif
PushPull_CallBack GetPushPullCallback() const { return m_pushPull_Callback; }
s16 GetDiffShapeAngleY() { return m_diff_ShapeAngleY; }
int GetRoomId() { return m_roomId; }
- bool chkStickWall() { return field_0xb & 1; }
- bool chkStickRoof() { return field_0xb & 2; }
+ BOOL chkStickWall() { return field_0xb & 1; }
+ BOOL chkStickRoof() { return field_0xb & 2; }
bool ChkPushPullOk() const { return m_pushPull_Ok; }
void SetPushPullCallback(PushPull_CallBack i_callBack) { m_pushPull_Callback = i_callBack; }
void SetRoomId(int id) { m_roomId = id; }
diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h
index cc233eb750..1d6edbb860 100644
--- a/include/d/d_com_inf_game.h
+++ b/include/d/d_com_inf_game.h
@@ -616,6 +616,7 @@ public:
void setItemMaxMagicCount(s16 max) { mItemInfo.mItemMaxMagicCount += max; }
s32 getItemOilCount() { return mItemInfo.mItemOilCount; }
void setItemOilCount(s32 oil) { mItemInfo.mItemOilCount += oil; }
+ void setItemMaxOilCount(s32 oil) { mItemInfo.mItemMaxOilCount += oil; }
void clearItemOilCount() { mItemInfo.mItemOilCount = 0; }
s32 getItemNowOil() { return mItemInfo.mItemNowOil; }
void setItemNowOil(s32 oil) { mItemInfo.mItemNowOil = oil; }
@@ -630,6 +631,7 @@ public:
s32 getOxygenCount() { return mItemInfo.mOxygenCount; }
void setOxygenCount(s32 oxygen) { mItemInfo.mOxygenCount += oxygen; }
void clearOxygenCount() { mItemInfo.mOxygenCount = 0; }
+ void setMaxOxygenCount(s32 oxygen) { mItemInfo.mMaxOxygenCount += oxygen; }
s32 getMaxOxygenCount() { return mItemInfo.mMaxOxygenCount; }
void clearMaxOxygenCount() { mItemInfo.mMaxOxygenCount = 0; }
s16 getItemArrowNumCount() { return mItemInfo.mItemArrowNumCount; }
@@ -1615,6 +1617,10 @@ inline u8 dComIfGs_getBombMax(u8 i_bombType) {
return g_dComIfG_gameInfo.info.getPlayer().getItemMax().getBombNum(i_bombType);
}
+inline void dComIfGs_setPohSpiritNum(u8 i_num) {
+ g_dComIfG_gameInfo.info.getPlayer().getCollect().setPohNum(i_num);
+}
+
inline u8 dComIfGs_getPohSpiritNum() {
return g_dComIfG_gameInfo.info.getPlayer().getCollect().getPohNum();
}
@@ -1623,6 +1629,10 @@ inline void dComIfGs_addPohSpiritNum() {
g_dComIfG_gameInfo.info.getPlayer().getCollect().addPohNum();
}
+inline BOOL dComIfGs_isCollectClothes(u8 i_clothesNo) {
+ return g_dComIfG_gameInfo.info.getPlayer().getCollect().isCollect(COLLECT_CLOTHING, i_clothesNo);
+}
+
inline void dComIfGs_setCollectClothes(u8 i_clothesNo) {
g_dComIfG_gameInfo.info.getPlayer().getCollect().setCollect(COLLECT_CLOTHING, i_clothesNo);
}
@@ -1640,18 +1650,34 @@ inline BOOL dComIfGs_isCollectClothing(u8 i_clothesNo) {
i_clothesNo);
}
+inline void dComIfGs_offCollectClothes(u8 i_clothesNo) {
+ g_dComIfG_gameInfo.info.getPlayer().getCollect().offCollect(COLLECT_CLOTHING, i_clothesNo);
+}
+
inline BOOL dComIfGs_isCollectSword(u8 i_swordNo) {
return g_dComIfG_gameInfo.info.getPlayer().getCollect().isCollect(COLLECT_SWORD, i_swordNo);
}
+inline void dComIfGs_offCollectSword(u8 i_swordNo) {
+ g_dComIfG_gameInfo.info.getPlayer().getCollect().offCollect(COLLECT_SWORD, i_swordNo);
+}
+
inline BOOL dComIfGs_isCollectShield(u8 i_item) {
return g_dComIfG_gameInfo.info.getPlayer().getCollect().isCollect(COLLECT_SHIELD, i_item);
}
+inline void dComIfGs_offCollectShield(u8 i_shieldNo) {
+ g_dComIfG_gameInfo.info.getPlayer().getCollect().offCollect(COLLECT_SHIELD, i_shieldNo);
+}
+
inline void dComIfGs_onCollectCrystal(u8 i_item) {
g_dComIfG_gameInfo.info.getPlayer().getCollect().onCollectCrystal(i_item);
}
+inline void dComIfGs_offCollectCrystal(u8 i_item) {
+ g_dComIfG_gameInfo.info.getPlayer().getCollect().offCollectCrystal(i_item);
+}
+
inline bool dComIfGs_isCollectCrystal(u8 i_item) {
return g_dComIfG_gameInfo.info.getPlayer().getCollect().isCollectCrystal(i_item);
}
@@ -1660,6 +1686,10 @@ inline void dComIfGs_onCollectMirror(u8 i_item) {
g_dComIfG_gameInfo.info.getPlayer().getCollect().onCollectMirror(i_item);
}
+inline void dComIfGs_offCollectMirror(u8 i_item) {
+ g_dComIfG_gameInfo.info.getPlayer().getCollect().offCollectMirror(i_item);
+}
+
inline bool dComIfGs_isCollectMirror(u8 i_item) {
return g_dComIfG_gameInfo.info.getPlayer().getCollect().isCollectMirror(i_item);
}
@@ -3457,7 +3487,7 @@ inline u8 dComIfGp_getItemLifeCountType() {
return g_dComIfG_gameInfo.play.getItemLifeCountType();
}
-inline void dComIfGp_setItemLifeCount(float amount, u8 type) {
+inline void dComIfGp_setItemLifeCount(f32 amount, u8 type) {
g_dComIfG_gameInfo.play.setItemLifeCount(amount, type);
}
@@ -3521,6 +3551,10 @@ inline void dComIfGp_setItemOilCount(s32 oil) {
g_dComIfG_gameInfo.play.setItemOilCount(oil);
}
+inline void dComIfGp_setItemMaxOilCount(s32 oil) {
+ g_dComIfG_gameInfo.play.setItemMaxOilCount(oil);
+}
+
inline void dComIfGp_clearItemOilCount() {
g_dComIfG_gameInfo.play.clearItemOilCount();
}
@@ -3577,6 +3611,10 @@ inline void dComIfGp_clearOxygenCount() {
g_dComIfG_gameInfo.play.clearOxygenCount();
}
+inline void dComIfGp_setMaxOxygenCount(s32 oxygen) {
+ g_dComIfG_gameInfo.play.setMaxOxygenCount(oxygen);
+}
+
inline s32 dComIfGp_getMaxOxygenCount() {
return g_dComIfG_gameInfo.play.getMaxOxygenCount();
}
diff --git a/include/d/d_menu_window_HIO.h b/include/d/d_menu_window_HIO.h
index 1df1b5cb72..b5d5c81fb4 100644
--- a/include/d/d_menu_window_HIO.h
+++ b/include/d/d_menu_window_HIO.h
@@ -1,75 +1,83 @@
#ifndef D_MENU_D_MENU_WINDOW_HIO_H
#define D_MENU_D_MENU_WINDOW_HIO_H
-#include <types.h>
+#include "JSystem/JHostIO/JORReflexible.h"
-class dMw_DHIO_c {
+class dMw_DHIO_c : public JORReflexible {
public:
dMw_DHIO_c();
virtual ~dMw_DHIO_c() {}
+ void genMessage(JORMContext*);
+
+ void bitCheck();
/* 0x004 */ s8 field_0x4;
- /* 0x005 */ bool mMap[32];
- /* 0x025 */ bool mCompass[32];
- /* 0x045 */ bool mBossKey[32];
- /* 0x065 */ bool mBossClear[32];
- /* 0x085 */ bool mHeartContainer[32];
- /* 0x0A5 */ bool mBossDemo[32];
- /* 0x0C5 */ bool mPortal[32];
- /* 0x0E5 */ bool mMidBossClear[32];
- /* 0x105 */ bool mMapCopy[32];
- /* 0x125 */ bool mCompassCopy[32];
- /* 0x145 */ bool mBossKeyCopy[32];
- /* 0x165 */ bool mBossClearCopy[32];
- /* 0x185 */ bool mHeartContainerCopy[32];
- /* 0x1A5 */ bool mBossDemoCopy[32];
- /* 0x1C5 */ bool mPortalCopy[32];
- /* 0x1E5 */ bool mMidBossClearCopy[32];
+ /* 0x005 */ u8 mMap[32];
+ /* 0x025 */ u8 mCompass[32];
+ /* 0x045 */ u8 mBossKey[32];
+ /* 0x065 */ u8 mBossClear[32];
+ /* 0x085 */ u8 mHeartContainer[32];
+ /* 0x0A5 */ u8 mBossDemo[32];
+ /* 0x0C5 */ u8 mPortal[32];
+ /* 0x0E5 */ u8 mMidBossClear[32];
+ /* 0x105 */ u8 mMapCopy[32];
+ /* 0x125 */ u8 mCompassCopy[32];
+ /* 0x145 */ u8 mBossKeyCopy[32];
+ /* 0x165 */ u8 mBossClearCopy[32];
+ /* 0x185 */ u8 mHeartContainerCopy[32];
+ /* 0x1A5 */ u8 mBossDemoCopy[32];
+ /* 0x1C5 */ u8 mPortalCopy[32];
+ /* 0x1E5 */ u8 mMidBossClearCopy[32];
};
extern dMw_DHIO_c g_mwDHIO;
-class dMw_HIO_c {
+class dMw_HIO_c : public JORReflexible {
public:
dMw_HIO_c();
void init();
- bool getBombFlag();
- bool getArrowFlag();
- bool getPachinkoFlag();
+ u8 getBombFlag();
+ u8 getArrowFlag();
+ u8 getPachinkoFlag();
void update();
+ void playerStatusHIO();
+ void itemBitCheck();
+ void itemNumHIO();
+ void itemHIO();
void setArrowFlag(u8 i_flag) { mArrowFlag = i_flag; }
void setPachinkoFlag(u8 i_flag) { mPachinkoFlag = i_flag; }
void setBombFlag(u8 i_flag) { mBombFlag = i_flag; }
virtual ~dMw_HIO_c() {}
+ void genMessage(JORMContext*);
/* 0x004 */ s8 field_0x4;
- /* 0x006 */ u16 mLife;
- /* 0x008 */ u16 mMaxLife;
+ /* 0x006 */ s16 mLife;
+ /* 0x008 */ s16 mMaxLife;
/* 0x00A */ u8 mMagic;
/* 0x00B */ u8 mMaxMagic;
/* 0x00C */ s32 mOil;
/* 0x010 */ s32 mMaxOil;
/* 0x014 */ s32 mOxygen;
/* 0x018 */ s32 mMaxOxygen;
- /* 0x01C */ bool mEnableMagic;
- /* 0x01D */ bool mEnableArrowDrops;
+ /* 0x01C */ u8 mEnableMagic;
+ /* 0x01D */ u8 mEnableArrowDrops;
/* 0x01E */ s16 mRupees;
/* 0x020 */ s16 mWalletSize;
/* 0x022 */ u8 mKeys;
/* 0x023 */ u8 field_0x23;
- /* 0x024 */ u16 mLifeCopy;
- /* 0x026 */ u16 mMaxLifeCopy;
+ /* 0x024 */ s16 mLifeCopy;
+ /* 0x026 */ s16 mMaxLifeCopy;
/* 0x028 */ u8 mMagicCopy;
/* 0x029 */ u8 mMaxMagicCopy;
/* 0x02C */ s32 mOilCopy;
/* 0x030 */ s32 mMaxOilCopy;
/* 0x034 */ s32 mOxygenCopy;
/* 0x038 */ s32 mMaxOxygenCopy;
- /* 0x03C */ bool mEnableMagicCopy;
- /* 0x03D */ bool mEnableArrowDropsCopy;
+ /* 0x03C */ u8 mEnableMagicCopy;
+ /* 0x03D */ u8 mEnableArrowDropsCopy;
/* 0x03E */ s16 mRupeesCopy;
/* 0x040 */ s16 mWalletSizeCopy;
/* 0x042 */ s16 mDonationAmount;
@@ -81,23 +89,23 @@ public:
/* 0x04A */ u8 mItems[24];
/* 0x062 */ u8 mItemsCopy[24];
/* 0x07A */ u8 field_0x7a[24];
- /* 0x092 */ bool mSwords[4];
- /* 0x096 */ bool mShields[3];
- /* 0x099 */ bool mClothes[3];
- /* 0x09C */ bool mSwordsCopy[4];
- /* 0x0A0 */ bool mShieldsCopy[3];
- /* 0x0A3 */ bool mClothesCopy[3];
+ /* 0x092 */ u8 mSwords[4];
+ /* 0x096 */ u8 mShields[3];
+ /* 0x099 */ u8 mClothes[3];
+ /* 0x09C */ u8 mSwordsCopy[4];
+ /* 0x0A0 */ u8 mShieldsCopy[3];
+ /* 0x0A3 */ u8 mClothesCopy[3];
/* 0x0A6 */ u8 mScent;
/* 0x0A7 */ u8 mScentCopy;
/* 0x0A8 */ u8 field_0xa8;
- /* 0x0A9 */ bool mBombBagLV2;
- /* 0x0AA */ bool mBombBagLV2Copy;
- /* 0x0AB */ bool mLV2KeyShards[3];
- /* 0x0AE */ bool mLV2KeyShardsCopy[3];
- /* 0x0B1 */ bool mLV5Item[2];
- /* 0x0B3 */ bool mLV5ItemCopy[2];
- /* 0x0B5 */ bool mGoldBug[24];
- /* 0x0CD */ bool mGoldBugCopy[24];
+ /* 0x0A9 */ u8 mBombBagLV2;
+ /* 0x0AA */ u8 mBombBagLV2Copy;
+ /* 0x0AB */ u8 mLV2KeyShards[3];
+ /* 0x0AE */ u8 mLV2KeyShardsCopy[3];
+ /* 0x0B1 */ u8 mLV5Item[2];
+ /* 0x0B3 */ u8 mLV5ItemCopy[2];
+ /* 0x0B5 */ u8 mGoldBug[24];
+ /* 0x0CD */ u8 mGoldBugCopy[24];
/* 0x0E5 */ u8 mArrowNum;
/* 0x0E6 */ u8 mSeedNum;
/* 0x0E7 */ u8 mBombNum[3];
@@ -112,15 +120,15 @@ public:
/* 0x101 */ u8 field_0x101[8];
/* 0x109 */ u8 field_0x109[8];
/* 0x111 */ u8 field_0x111[8];
- /* 0x119 */ bool mEnableOxygenMeter;
- /* 0x11A */ bool mEnableOxygenMeterCopy;
+ /* 0x119 */ u8 mEnableOxygenMeter;
+ /* 0x11A */ u8 mEnableOxygenMeterCopy;
/* 0x11B */ u8 mArrowFlag;
/* 0x11C */ u8 mPachinkoFlag;
/* 0x11D */ u8 mBombFlag;
- /* 0x11E */ bool mFusedShadow[4];
- /* 0x122 */ bool mFusedShadowCopy[4];
- /* 0x126 */ bool mMirrorShard[4];
- /* 0x12A */ bool mMirrorShardCopy[4];
+ /* 0x11E */ u8 mFusedShadow[4];
+ /* 0x122 */ u8 mFusedShadowCopy[4];
+ /* 0x126 */ u8 mMirrorShard[4];
+ /* 0x12A */ u8 mMirrorShardCopy[4];
}; // Size: 0x130
extern dMw_HIO_c g_mwHIO;
diff --git a/include/d/d_msg_object.h b/include/d/d_msg_object.h
index 2ef3f0ad69..45606e4e81 100644
--- a/include/d/d_msg_object.h
+++ b/include/d/d_msg_object.h
@@ -557,6 +557,11 @@ inline bool dMsgObject_isSelectTalkNowCheck() {
return dMsgObject_getMsgObjectClass()->getStatus() != 8 || (dMsgObject_getMsgObjectClass()->getStatus() != 9 && dMsgObject_getMsgObjectClass()->getStatus() != 20);
}
+inline void dMsgObject_setOffering(u16 i_num) {
+ dComIfGs_setEventReg(0xF7FF, i_num >> 8);
+ dComIfGs_setEventReg(0xF8FF, i_num & 0xFF);
+}
+
class dMsgObject_HowlHIO_c {
public:
dMsgObject_HowlHIO_c();
diff --git a/include/d/d_save.h b/include/d/d_save.h
index e56137ef51..3bcb4766a0 100644
--- a/include/d/d_save.h
+++ b/include/d/d_save.h
@@ -396,12 +396,14 @@ public:
void offCollectMirror(u8 i_item);
BOOL isCollectMirror(u8 i_item) const;
+ void setPohNum(u8 i_num) { mPohNum = i_num; }
u8 getPohNum() const { return mPohNum; }
+
void addPohNum() {
if (mPohNum < 0xFF) {
mPohNum++;
}
- };
+ }
private:
/* 0x0 */ u8 mItem[8];
diff --git a/src/d/actor/d_a_obj_brg.cpp b/src/d/actor/d_a_obj_brg.cpp
index 6257f1740f..cd0c504b7d 100644
--- a/src/d/actor/d_a_obj_brg.cpp
+++ b/src/d/actor/d_a_obj_brg.cpp
@@ -20,7 +20,8 @@ static void ride_call_back(dBgW* i_bgw, fopAc_ac_c* i_bgActor, fopAc_ac_c* i_rid
obj_brg_class* a_this = (obj_brg_class*)i_bgActor;
cXyz sp74 = a_this->mBr[0].field_0x0bc - i_rideActor->current.pos;
- int var_r27 = JMAFastSqrt(sp74.x * sp74.x + sp74.z * sp74.z) / (a_this->field_0xaedc * 51.0f) - -0.5f;
+ f32 var_f28 = JMAFastSqrt(sp74.x * sp74.x + sp74.z * sp74.z);
+ int var_r27 = var_f28 / (a_this->field_0xaedc * 51.0f) - -0.5f;
if (var_r27 > a_this->field_0xb1ea - 1) {
var_r27 = a_this->field_0xb1ea - 1;
@@ -37,7 +38,7 @@ static void ride_call_back(dBgW* i_bgw, fopAc_ac_c* i_bgActor, fopAc_ac_c* i_rid
if (a_this->mType & 5) {
var_f30 = 0.85f;
} else if (a_this->field_0xb1ed == 2) {
- var_f30 = KREG_F(7) + 0.1f;
+ var_f30 = KREG_F(4) + 0.1f;
} else {
var_f30 = 1.0f;
}
diff --git a/src/d/actor/d_a_obj_ladder.cpp b/src/d/actor/d_a_obj_ladder.cpp
index 903fb97e11..88a21141ae 100644
--- a/src/d/actor/d_a_obj_ladder.cpp
+++ b/src/d/actor/d_a_obj_ladder.cpp
@@ -380,7 +380,10 @@ int Act_c::Draw() {
dComIfGd_setListBG();
mDoExt_modelUpdateDL(mModel);
dComIfGd_setList();
- dComIfG_Bgsp().DebugDrawPoly(mpBgW);
+
+ #if DEBUG
+ dComIfG_Bgsp().DebugDrawPoly(*mpBgW);
+ #endif
return 1;
}
diff --git a/src/d/actor/d_a_obj_swpush.cpp b/src/d/actor/d_a_obj_swpush.cpp
index 8eede8f547..f740c61a11 100644
--- a/src/d/actor/d_a_obj_swpush.cpp
+++ b/src/d/actor/d_a_obj_swpush.cpp
@@ -240,7 +240,7 @@ cPhs_Step daObjSwpush::Act_c::Mthd_Create() {
mDoMtx_stack_c::scaleM(field_0x5f8);
MTXCopy(mDoMtx_stack_c::get(), mMtx);
mpBgW->ClrNoCalcVtx();
- mpBgW->SetBaseMtxP(mMtx);
+ mpBgW->SetBaseMtxP(&mMtx);
mpBgW->GlobalVtx();
mpBgW->SetBaseMtxP(NULL);
mpBgW->SetNoCalcVtx();
diff --git a/src/d/d_bg_s.cpp b/src/d/d_bg_s.cpp
index 7295126a6b..44c7cc2511 100644
--- a/src/d/d_bg_s.cpp
+++ b/src/d/d_bg_s.cpp
@@ -11,86 +11,256 @@
#include "d/d_com_inf_game.h"
#include "f_op/f_op_actor_mng.h"
+#if DEBUG
+#include "d/d_debug_viewer.h"
+#include "d/d_bg_s_capt_poly.h"
+#endif
+
+#if DEBUG
+int g_ground_counter;
+int g_line_counter;
+int g_acch_wall_counter;
+int g_roof_counter;
+int g_spl_counter;
+int g_shdw_counter;
+int g_sph_counter;
+int g_capt_poly_counter;
+#endif
+
+#if DEBUG
+void dBgS_HIO::genMessage(JORMContext* mctx) {
+ mctx->genLabel("zelda地形チェック", 0);
+
+ mctx->genLabel("チェック回数 ----------", 0);
+ mctx->genCheckBox("チェックカウンター", &m_flags, FLAG_CHECK_COUNTER_e);
+
+ mctx->genLabel("平均処理時間(Mean) -----------", 0);
+ mctx->genCheckBox("ラインチェック時間(->terminal)", &m_flags2, FLAG2_LINE_TIMER_e);
+ mctx->genCheckBox("アクターチェック時間[壁、床(+天井、水面)](->terminal)", &m_flags, 1);
+ mctx->genCheckBox("アクターチェック 壁チェック時間(->terminal)", &m_flags, FLAG_ACCH_WALL_TIMER_e);
+ mctx->genCheckBox("天井チェック時間(->terminal)", &m_flags, FLAG_ROOF_TIMER_e);
+ mctx->genCheckBox("Splチェック(水、溶岩、毒水面)時間(->terminal)", &m_flags2, FLAG2_SPL_TIMER_e);
+ mctx->genCheckBox("床チェック時間(->terminal)", &m_flags2, FLAG2_GROUND_CHECK_TIMER_e);
+ mctx->genCheckBox("リアル影描画時間(->terminal)", &m_flags2, FLAG2_SHDW_DRAW_TIMER_e);
+ mctx->genCheckBox("球チェック時間[コールバック処理含む](->terminal)", &m_flags2, FLAG2_SPH_CHK_TIMER_e);
+ mctx->genCheckBox("ポリゴンキャプチャ時間", &m_flags2, FLAG2_CAPTPOLY_TIMER_e);
+
+ mctx->genLabel("処理off ----------", 0);
+ mctx->genCheckBox("ライン off", &m_flags2, FLAG2_LINE_OFF_e);
+ mctx->genCheckBox("アクターチェック 壁処理off", &m_flags, FLAG_ACCH_WALL_OFF_e);
+ mctx->genCheckBox("天井チェックoff", &m_flags, FLAG_ROOF_OFF_e);
+ mctx->genCheckBox("Splチェック(水、溶岩、毒水面)off", &m_flags2, FLAG2_SPL_OFF_e);
+ mctx->genCheckBox("リアル影処理Off", &m_flags2, FLAG2_SHDW_DRAW_OFF_e);
+ mctx->genCheckBox("球チェックOff", &m_flags2, FLAG2_SPH_CHK_OFF_e);
+ mctx->genCheckBox("ポリゴンキャプチャOff", &m_flags2, FLAG2_CAPTPOLY_OFF_e);
+
+ mctx->genLabel("当たりチェック ----------", 0);
+ mctx->genCheckBox("ラインチェック", &m_flags, FLAG_OBJ_LINE_CHECK_e);
+ mctx->genSlider("start x", &m_linecheck_start.x, -450000.0, 450000.0);
+ mctx->genSlider("start y", &m_linecheck_start.y, -450000.0, 450000.0);
+ mctx->genSlider("start z", &m_linecheck_start.z, -450000.0, 450000.0);
+ mctx->genSlider("end x", &m_linecheck_end.x, -450000.0, 450000.0);
+ mctx->genSlider("end y", &m_linecheck_end.y, -450000.0, 450000.0);
+ mctx->genSlider("end z", &m_linecheck_end.z, -450000.0, 450000.0);
+ mctx->genCheckBox("Obj床チェック", &m_flags2, FLAG2_GND_CHK_e);
+ mctx->genSlider("gnd x", &m_gndcheck_pos.x, -450000.0, 450000.0);
+ mctx->genSlider("gnd y", &m_gndcheck_pos.y, -450000.0, 450000.0);
+ mctx->genSlider("gnd z", &m_gndcheck_pos.z, -450000.0, 450000.0);
+
+ mctx->genLabel("抜けチェック ----------", 0);
+ mctx->genCheckBox("アクターチェック 抜けチェック", &m_flags, 0x200);
+ mctx->genSlider("抜けチェックアクター番号 ", &m_errorCheck_actor_num, -1, 3000);
+ mctx->genCheckBox("プレイヤーのアクター地形チェックの床法線ベクトル", &m_flags2, 0x400);
+
+ mctx->genLabel("デバッグ表示 ----------", 0);
+ mctx->genCheckBox("アクターチェック 壁当たり範囲表示", &m_flags, 0x400);
+ mctx->genCheckBox("BoundingBox描画", &m_flags, 0x8000);
+ mctx->genCheckBox("当たり表示On", &m_flags2, FLAG2_SHAPE_DISP_e);
+
+ mctx->genLabel("その他 ----------", 0);
+ mctx->genCheckBox("作業1", &m_flags, 0x20);
+ mctx->genCheckBox("作業2", &m_flags, 0x40);
+ mctx->genCheckBox("作業3", &m_flags, 0x80);
+ mctx->genCheckBox("作業4", &m_flags, 0x100);
+}
+
+dBgS_InsideHIO::~dBgS_InsideHIO() {}
+
+void dBgS_InsideHIO::genMessage(JORMContext* mctx) {
+ mctx->genLabel("デバッグポリゴン描画 -----", 0);
+ mctx->genCheckBox("デバッグポリゴン描画", &m_flags, FLAG_DISP_POLY_e);
+
+ mctx->genLabel("-----", 0);
+ mctx->genCheckBox("範囲描画(青い箱)", &m_flags, FLAG_DISP_DP_AREA_e);
+ mctx->genCheckBox("プレイヤー位置(±p0 x)", &m_flags, FLAG_PLAYER_AROUND_e);
+
+ mctx->genLabel("-----", 0);
+ mctx->genCheckBox("白ワイヤーフレーム", &m_flags, FLAG_WHITE_WIRE_e);
+
+ mctx->genLabel("-----", 0);
+ mctx->genCheckBox("水面ポリゴンのみ", &m_flags, FLAG_DISP_WATER_POLY_e);
+
+ mctx->genLabel("-----", 0);
+ mctx->genCheckBox("床Off", &m_flags, FLAG_GROUND_OFF_e);
+ mctx->genCheckBox("壁Off", &m_flags, FLAG_WALL_OFF_e);
+ mctx->genCheckBox("天井Off", &m_flags, FLAG_ROOF_OFF_e);
+
+ mctx->genLabel("-----", 0);
+ mctx->genSlider("p0 x", &m_p0.x, -100000.0, 100000.0);
+ mctx->genSlider("p0 y", &m_p0.y, -100000.0, 100000.0);
+ mctx->genSlider("p0 z", &m_p0.z, -100000.0, 100000.0);
+ mctx->genSlider("p1 x", &m_p1.x, -100000.0, 100000.0);
+ mctx->genSlider("p1 y", &m_p1.y, -100000.0, 100000.0);
+ mctx->genSlider("p1 z", &m_p1.z, -100000.0, 100000.0);
+ mctx->genSlider("持ち上げ量", &m_raise_amount, -10.0, 30.0);
+
+ mctx->genLabel("-----", 0);
+ mctx->genCheckBox("Obj床 プレイヤー下", &m_flags, FLAG_GNDCHK_PLAYER_UNDER_e);
+}
+#endif
+
void cBgS_ChkElm::Init() {
m_bgw_base_ptr = NULL;
m_used = false;
m_actor_ptr = NULL;
- m_actor_id = 0xFFFFFFFF;
+ m_actor_id = fpcM_ERROR_PROCESS_ID_e;
}
-void cBgS_ChkElm::Regist2(dBgW_Base* p_data, fpc_ProcID actor_id, void* p_actor) {
+void cBgS_ChkElm::Regist2(dBgW_Base* pbgw, fpc_ProcID actor_id, void* pactor) {
m_used = true;
- m_bgw_base_ptr = p_data;
+ m_bgw_base_ptr = pbgw;
m_actor_id = actor_id;
- m_actor_ptr = (fopAc_ac_c*)p_actor;
+ m_actor_ptr = (fopAc_ac_c*)pactor;
}
void cBgS_ChkElm::Release() {
m_used = false;
m_bgw_base_ptr = NULL;
- m_actor_id = 0xFFFFFFFF;
+ m_actor_id = fpcM_ERROR_PROCESS_ID_e;
m_actor_ptr = NULL;
}
static int l_SetCounter;
-bool cBgS::Regist(dBgW_Base* p_data, fpc_ProcID actor_id, void* p_actor) {
- if (p_data == NULL) {
+bool cBgS::Regist(dBgW_Base* pbgw, fpc_ProcID actor_id, void* pactor) {
+ if (pbgw == NULL) {
+ // "cBgS::Regist() data is Null"
+ OS_REPORT_ERROR("cBgS::Regist() データがNull\n");
return true;
- } else if (p_data->ChkUsed()) {
+ } else if (pbgw->ChkUsed()) {
+ // "cBgS::Regist() check duplicate entry."
+ OS_REPORT_ERROR("cBgS::Regist() チェック二重登録。\n");
return true;
- } else if (p_data->ChkMemoryError()) {
+ } else if (pbgw->ChkMemoryError()) {
+ // "cBgS::Regist() registration rejected (dBgW_Base=%x)"
+ OS_REPORT_ERROR("cBgS::Regist() 登録拒否(dBgW_Base=%x)\n", pbgw);
return true;
- } else {
- int i = l_SetCounter;
- do {
- if (!m_chk_element[i].m_used) {
- m_chk_element[i].Regist2(p_data, actor_id, p_actor);
- p_data->Regist(i);
-
- l_SetCounter = i + 1;
- if (l_SetCounter >= 0x100) {
- l_SetCounter = 0;
- }
- return false;
- }
+ }
- i++;
- if (i >= 0x100) {
- i = 0;
- }
- } while (l_SetCounter != i);
- p_data->Release();
+ #if DEBUG
+ for (int i = 0; i < 0x100; i++) {
+ if (m_chk_element[i].ChkUsed() && m_chk_element[i].m_bgw_base_ptr == pbgw) {
+ // "cBgS::Regist() will continue processing, but an entry with the same address (address:%x, id = %d) is already registered. This is probably a duplicate entry. Duplicate registrations are dangerous. !!"
+ OS_REPORT_ERROR("cBgS::Regist() 処理は続けますが、同じアドレスのもの(address:%x, id = %d)がすでに登録されています。多分ですが多重登録です。多重登録ならキケンです。!!\n", pbgw, i);
+ JUT_WARN(368, "%s", "cBgS::Regist() double regist");
+ }
}
+ #endif
+
+ int i = l_SetCounter;
+ JUT_ASSERT(376, 0 <= i && i < 256);
+
+ do {
+ if (!m_chk_element[i].ChkUsed()) {
+ m_chk_element[i].Regist2(pbgw, actor_id, pactor);
+ pbgw->Regist(i);
+
+ l_SetCounter = i + 1;
+ if (l_SetCounter >= 0x100) {
+ l_SetCounter = 0;
+ }
+ return false;
+ }
+
+ i++;
+ if (i >= 0x100) {
+ i = 0;
+ }
+ } while (l_SetCounter != i);
+
+ JUT_WARN(398, "%s", "cBgS::Regist() regist over.");
+ OS_REPORT_ERROR("[ERROR] cBgS::Regist() table is no empty\n");
+ pbgw->Release();
return true;
}
-bool cBgS::Release(dBgW_Base* p_data) {
- if (p_data == NULL) {
+bool cBgS::Release(dBgW_Base* pbgw) {
+ if (pbgw == NULL) {
return 1;
}
- int id = p_data->GetId();
- if (p_data->ChkUsed() && id >= 0 && id < 0x100 && m_chk_element[id].ChkUsed()) {
+ int id = pbgw->GetId();
+ if (pbgw->ChkUsed() && id >= 0 && id < 0x100 && m_chk_element[id].ChkUsed()) {
+ #if DEBUG
+ if (m_chk_element[id].m_bgw_base_ptr != pbgw) {
+ // "[ERROR] cBgS::Release() the work area pointer registered to %d differs from pointer passed as an argument to Release(). (%x,%x) [Releasing]"
+ OS_REPORT_ERROR("[ERROR] cBgS::Release() %dに登録されている作業領域のポインターと、Release()に引数で渡されているポインターが異なる。(%x,%x) [解放実行]", id, m_chk_element[id].m_bgw_base_ptr, pbgw);
+ JUT_WARN(431, "%s", "cBgS::Release() data error.");
+ }
+ #endif
+
m_chk_element[id].Release();
- p_data->Release();
+ pbgw->Release();
} else {
+ #if DEBUG
+ if (id == 0x100) {
+ // "cBgS::Release() attempting to release unregistered terrain. operation won't be processed."
+ OS_WARNING("cBgS::Release() 登録していない地形をReleaseしようとしています。処理しません。\n");
+ } else {
+ // "[Error] cBgS::Release() Error[Check id=%d won't be released.](dBgW_Base=%x)"
+ OS_REPORT_ERROR("[Error] cBgS::Release() Error[id=%d番のチェックはリリースしません。](dBgW_Base=%x)\n", id, pbgw);
+
+ if (!pbgw->ChkUsed()) {
+ // "Data [%d] is not being used."
+ OS_REPORT_ERROR("データ[%d]は使っていません。\n", id);
+ }
+
+ if (!m_chk_element[id].ChkUsed()) {
+ // "Table [%d] is not being used."
+ OS_REPORT_ERROR("テーブル[%d]は使っていません。\n", id);
+ }
+ }
+ #endif
+
return 1;
}
return 0;
}
+#if DEBUG
+u8 lbl_8074C7F0; // belongs in d_bg_w?
+static u8 lbl_8074C7F8;
+#endif
+
void cBgS::Ct() {
l_SetCounter = 0;
for (int i = 0; i < 0x100; i++) {
m_chk_element[i].Init();
}
+
+ #if DEBUG
+ lbl_8074C7F8 = 0;
+ lbl_8074C7F0 = 0;
+ #endif
}
void cBgS::Dt() {
for (int i = 0; i < 0x100; i++) {
if (m_chk_element[i].ChkUsed()) {
+ JUT_WARN(499, "%s", "cBgS::Dt() release error.");
+ OS_REPORT_ERROR("[ERROR] ========== cBgS::Dt() 消し残し地形チェックがあります。id=%d ==========\n", i);
+ OS_REPORT_ERROR("!!!!!!!!! 勝手に消しときます !!!!!!!!\n");
m_chk_element[i].Release();
}
}
@@ -100,41 +270,41 @@ void cBgS::Dt() {
}
}
-bool cBgS::LineCross(cBgS_LinChk* p_line) {
- p_line->ClearPi();
- p_line->ClrHit();
- p_line->PreCalc();
+bool cBgS::LineCross(cBgS_LinChk* plinchk) {
+ plinchk->ClearPi();
+ plinchk->ClrHit();
+ plinchk->PreCalc();
cBgS_ChkElm* elm = m_chk_element;
for (int i = 0; i < 0x100; i++) {
if (elm->ChkUsed() && !elm->m_bgw_base_ptr->ChkNotReady() &&
- !p_line->ChkSameActorPid(elm->m_actor_id) && elm->m_bgw_base_ptr->LineCheck(p_line))
+ !plinchk->ChkSameActorPid(elm->m_actor_id) && elm->m_bgw_base_ptr->LineCheck(plinchk))
{
- p_line->SetActorInfo(i, elm->m_bgw_base_ptr, elm->m_actor_id);
- p_line->SetHit();
+ plinchk->SetActorInfo(i, elm->m_bgw_base_ptr, elm->m_actor_id);
+ plinchk->SetHit();
}
elm++;
}
- return p_line->ChkHit();
+ return plinchk->ChkHit();
}
-f32 cBgS::GroundCross(cBgS_GndChk* p_gnd) {
- p_gnd->SetNowY(-G_CM3D_F_INF);
- p_gnd->ClearPi();
- p_gnd->PreCheck();
+f32 cBgS::GroundCross(cBgS_GndChk* pgndchk) {
+ pgndchk->SetNowY(-G_CM3D_F_INF);
+ pgndchk->ClearPi();
+ pgndchk->PreCheck();
cBgS_ChkElm* elm = m_chk_element;
for (int i = 0; i < 0x100; i++) {
if (elm->ChkUsed() && !elm->m_bgw_base_ptr->ChkNotReady() &&
- !p_gnd->ChkSameActorPid(elm->m_actor_id) && elm->m_bgw_base_ptr->GroundCross(p_gnd))
+ !pgndchk->ChkSameActorPid(elm->m_actor_id) && elm->m_bgw_base_ptr->GroundCross(pgndchk))
{
- p_gnd->SetActorInfo(i, elm->m_bgw_base_ptr, elm->m_actor_id);
+ pgndchk->SetActorInfo(i, elm->m_bgw_base_ptr, elm->m_actor_id);
}
elm++;
}
- return p_gnd->GetNowY();
+ return pgndchk->GetNowY();
}
// this is identical to cBgD_t except using u32's for the table offsets.
@@ -172,39 +342,46 @@ struct cBgD_Grp_t_ {
u8 data[0x30];
};
-void* cBgS::ConvDzb(void* p_dzb) {
- cBgD_t_* pbgd = (cBgD_t_*)p_dzb;
+void* cBgS::ConvDzb(void* pdzb) {
+ cBgD_t_* pbgd = (cBgD_t_*)pdzb;
if (((pbgd->m_flags & 0x80000000) == 0)) {
pbgd->m_flags |= 0x80000000;
} else {
- return p_dzb;
+ return pdzb;
}
+ JUT_ASSERT(596, ((int)pbgd->m_v_tbl % 4) == 0);
+ JUT_ASSERT(597, ((int)pbgd->m_t_tbl % 2) == 0);
+ JUT_ASSERT(598, ((int)pbgd->m_b_tbl % 2) == 0);
+ JUT_ASSERT(599, ((int)pbgd->m_tree_tbl % 2) == 0);
+ JUT_ASSERT(600, ((int)pbgd->m_g_tbl % 4) == 0);
+ JUT_ASSERT(601, ((int)pbgd->m_ti_tbl % 4) == 0);
+
if (pbgd->m_v_tbl != 0) {
- pbgd->m_v_tbl += (uintptr_t)p_dzb;
+ pbgd->m_v_tbl += (uintptr_t)pdzb;
}
- pbgd->m_t_tbl += (uintptr_t)p_dzb;
- pbgd->m_b_tbl += (uintptr_t)p_dzb;
- pbgd->m_tree_tbl += (uintptr_t)p_dzb;
- pbgd->m_g_tbl += (uintptr_t)p_dzb;
- pbgd->m_ti_tbl += (uintptr_t)p_dzb;
+ pbgd->m_t_tbl += (uintptr_t)pdzb;
+ pbgd->m_b_tbl += (uintptr_t)pdzb;
+ pbgd->m_tree_tbl += (uintptr_t)pdzb;
+ pbgd->m_g_tbl += (uintptr_t)pdzb;
+ pbgd->m_ti_tbl += (uintptr_t)pdzb;
for (int i = 0; i < pbgd->m_g_num; i++) {
- ((cBgD_Grp_t_*)pbgd->m_g_tbl)[i].strOffset =
- (uintptr_t)p_dzb + ((cBgD_Grp_t_*)pbgd->m_g_tbl)[i].strOffset;
+ ((cBgD_Grp_t_*)pbgd->m_g_tbl)[i].strOffset = (uintptr_t)pdzb + ((cBgD_Grp_t_*)pbgd->m_g_tbl)[i].strOffset;
}
- return p_dzb;
+ return pdzb;
}
fopAc_ac_c* cBgS::GetActorPointer(int actor_index) const {
+ JUT_ASSERT(631, 0 <= actor_index && actor_index < 256);
return m_chk_element[actor_index].m_actor_ptr;
}
-dBgW_Base* cBgS::GetBgWBasePointer(cBgS_PolyInfo const& poly) const {
- int bg_index = poly.GetBgIndex();
+dBgW_Base* cBgS::GetBgWBasePointer(const cBgS_PolyInfo& polyinfo) const {
+ int bg_index = polyinfo.GetBgIndex();
if (bg_index < 0 || bg_index >= 0x100 || !m_chk_element[bg_index].ChkUsed()) {
return NULL;
@@ -212,83 +389,147 @@ dBgW_Base* cBgS::GetBgWBasePointer(cBgS_PolyInfo const& poly) const {
return m_chk_element[bg_index].m_bgw_base_ptr;
}
-bool cBgS::ChkPolySafe(cBgS_PolyInfo const& poly) {
- if (!poly.ChkSetInfo()) {
+bool cBgS::ChkPolySafe(const cBgS_PolyInfo& polyinfo) {
+ if (!polyinfo.ChkSetInfo()) {
return false;
}
- int bg_index = poly.GetBgIndex();
+ int bg_index = polyinfo.GetBgIndex();
if (bg_index < 0 || bg_index >= 0x100) {
return false;
- } else {
- if (m_chk_element[bg_index].ChkUsed()) {
- return poly.ChkSafe(m_chk_element[bg_index].m_bgw_base_ptr,
- m_chk_element[bg_index].m_actor_id);
- } else {
- return false;
- }
}
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return false;
+ }
+
+ return polyinfo.ChkSafe(m_chk_element[bg_index].m_bgw_base_ptr, m_chk_element[bg_index].m_actor_id);
}
-s32 cBgS::GetGrpRoomId(cBgS_PolyInfo const& poly) const {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetGrpRoomIndex(poly);
- } else {
+s32 cBgS::GetGrpRoomId(const cBgS_PolyInfo& polyinfo) const {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(697, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
return 0xFF;
}
+
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetGrpRoomIndex(polyinfo);
}
-bool cBgS::GetTriPla(cBgS_PolyInfo const& poly, cM3dGPla* p_pla) const {
- int bg_index = poly.GetBgIndex();
+bool cBgS::GetTriPla(const cBgS_PolyInfo& polyinfo, cM3dGPla* ppla) const {
+ int bg_index = polyinfo.GetBgIndex();
if (bg_index < 0 || bg_index >= 0x100 || !m_chk_element[bg_index].ChkUsed()) {
return false;
}
- *p_pla = m_chk_element[bg_index].m_bgw_base_ptr->GetTriPla(poly);
+ *ppla = m_chk_element[bg_index].m_bgw_base_ptr->GetTriPla(polyinfo);
return true;
}
-bool cBgS::GetTriPnt(cBgS_PolyInfo const& poly, cXyz* param_1, cXyz* param_2, cXyz* param_3) const {
- int id = poly.GetBgIndex();
+bool cBgS::GetTriPnt(const cBgS_PolyInfo& polyinfo, cXyz* ppnt0, cXyz* ppnt1, cXyz* ppnt2) const {
+ int id = polyinfo.GetBgIndex();
+ JUT_ASSERT(737, 0 <= id && id < 256);
+
if (!m_chk_element[id].ChkUsed()) {
return false;
}
- return m_chk_element[id].m_bgw_base_ptr->GetTriPnt(poly, param_1, param_2, param_3);
+ return m_chk_element[id].m_bgw_base_ptr->GetTriPnt(polyinfo, ppnt0, ppnt1, ppnt2);
}
-void cBgS::ShdwDraw(cBgS_ShdwDraw* p_shdw) {
+void cBgS::Draw() {}
+
+void cBgS::ShdwDraw(cBgS_ShdwDraw* pshdw) {
cBgS_ChkElm* elm = m_chk_element;
for (int i = 0; i < 0x100; i++) {
if (elm->ChkUsed()) {
- elm->m_bgw_base_ptr->ShdwDraw(p_shdw);
+ elm->m_bgw_base_ptr->ShdwDraw(pshdw);
}
elm++;
}
}
-u32 cBgS::GetGrpInf(cBgS_PolyInfo const& poly) const {
- int id = poly.GetBgIndex();
- if (!m_chk_element[id].ChkUsed()) {
+u32 cBgS::GetGrpInf(const cBgS_PolyInfo& polyinfo) const {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(803, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
return -1;
}
- return m_chk_element[id].m_bgw_base_ptr->GetGrpInf(poly);
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetGrpInf(polyinfo);
}
+#if DEBUG
+static OSStopwatch s_ground_sw;
+static OSStopwatch s_line_sw;
+static OSStopwatch s_wall_correct_sw;
+static OSStopwatch s_roof_sw;
+static OSStopwatch s_spl_sw;
+static OSStopwatch s_shdw_sw;
+static OSStopwatch s_sph_chk_sw;
+static OSStopwatch s_capt_poly_sw;
+
+static dBgS_InsideHIO s_InsideHio;
+#endif
+
void dBgS::Ct() {
cBgS::Ct();
+
+ #if DEBUG
+ g_ground_counter = 0;
+ g_line_counter = 0;
+ g_acch_wall_counter = 0;
+ g_roof_counter = 0;
+ g_spl_counter = 0;
+ g_shdw_counter = 0;
+ g_sph_counter = 0;
+ g_capt_poly_counter = 0;
+
+ m_hio.id = mDoHIO_CREATE_CHILD("zelda地形チェック", &m_hio);
+ s_InsideHio.id = mDoHIO_CREATE_CHILD("zelda地形チェック内部", &s_InsideHio);
+
+ OSInitStopwatch(&s_ground_sw, "GroundCheck");
+ OSResetStopwatch(&s_ground_sw);
+
+ OSInitStopwatch(&s_line_sw, "LineCheck");
+ OSResetStopwatch(&s_line_sw);
+
+ OSInitStopwatch(&s_wall_correct_sw, "WallCorrect()");
+ OSResetStopwatch(&s_wall_correct_sw);
+
+ OSInitStopwatch(&s_roof_sw, "RoofChk()");
+ OSResetStopwatch(&s_roof_sw);
+
+ OSInitStopwatch(&s_spl_sw, "SplGrpChk()");
+ OSResetStopwatch(&s_spl_sw);
+
+ OSInitStopwatch(&s_shdw_sw, "ShdwDraw()");
+ OSResetStopwatch(&s_shdw_sw);
+
+ OSInitStopwatch(&s_sph_chk_sw, "SphChk()");
+ OSResetStopwatch(&s_sph_chk_sw);
+
+ OSInitStopwatch(&s_capt_poly_sw, "CaptPoly()");
+ OSResetStopwatch(&s_capt_poly_sw);
+ #endif
}
void dBgS::Dt() {
cBgS::Dt();
+
+ #if DEBUG
+ mDoHIO_DELETE_CHILD(m_hio.id);
+ mDoHIO_DELETE_CHILD(s_InsideHio.id);
+ #endif
}
void dBgS::ClrMoveFlag() {
for (int i = 0; i < 0x100; i++) {
if (m_chk_element[i].ChkUsed()) {
- m_chk_element[i].m_bgw_base_ptr->OffMoveFlag();
+ dBgW_Base* bgw_base = m_chk_element[i].m_bgw_base_ptr;
+ bgw_base->OffMoveFlag();
}
}
}
@@ -297,37 +538,309 @@ void dBgS::Move() {
cBgS_ChkElm* elm = m_chk_element;
for (int i = 0; i < 0x100; i++) {
if (elm->ChkUsed()) {
- elm->m_bgw_base_ptr->CalcDiffShapeAngleY(elm->m_actor_ptr->shape_angle.y);
+ fopAc_ac_c* bgw_actor = elm->m_actor_ptr;
+ elm->m_bgw_base_ptr->CalcDiffShapeAngleY(bgw_actor->shape_angle.y);
}
elm++;
}
+
+ #if DEBUG
+ if (lbl_8074C7F8 == TRUE) {
+ JUTReport(20, 100, "WARNING:kcl:WCS(wall/roof poly num) is over.");
+ }
+
+ if (lbl_8074C7F0 == TRUE) {
+ JUTReport(20, 200, "WARNING:dzb:wcs(wall/roof poly num) is over.");
+ }
+ #endif
+}
+
+#if DEBUG
+void dBgS_AabDraw(cM3dGAab& aab, GXColor& color) {
+ cXyz points[8];
+
+ points[0].x = aab.GetMinP()->x;
+ points[0].y = aab.GetMaxP()->y;
+ points[0].z = aab.GetMinP()->z;
+
+ points[1].x = aab.GetMaxP()->x;
+ points[1].y = aab.GetMaxP()->y;
+ points[1].z = aab.GetMinP()->z;
+
+ points[2].x = aab.GetMinP()->x;
+ points[2].y = aab.GetMaxP()->y;
+ points[2].z = aab.GetMaxP()->z;
+
+ points[3].x = aab.GetMaxP()->x;
+ points[3].y = aab.GetMaxP()->y;
+ points[3].z = aab.GetMaxP()->z;
+
+ points[4].x = aab.GetMinP()->x;
+ points[4].y = aab.GetMinP()->y;
+ points[4].z = aab.GetMinP()->z;
+
+ points[5].x = aab.GetMaxP()->x;
+ points[5].y = aab.GetMinP()->y;
+ points[5].z = aab.GetMinP()->z;
+
+ points[6].x = aab.GetMinP()->x;
+ points[6].y = aab.GetMinP()->y;
+ points[6].z = aab.GetMaxP()->z;
+
+ points[7].x = aab.GetMaxP()->x;
+ points[7].y = aab.GetMinP()->y;
+ points[7].z = aab.GetMaxP()->z;
+
+ dDbVw_drawCube8pOpa(points, color);
+}
+
+static int white_draw(dBgS_CaptPoly* capt, cBgD_Vtx_t* vtxList, int v0, int v1, int v2, cM3dGPla* plane) {
+ cXyz raise;
+ PSVECScale(&plane->mNormal, &raise, s_InsideHio.m_raise_amount + 1.0f);
+
+ cXyz start;
+ start.set(vtxList[v0]);
+ cXyz end;
+ end.set(vtxList[v1]);
+ PSVECAdd(&raise, &start, &start);
+ PSVECAdd(&raise, &end, &end);
+
+ GXColor color = {0xFF, 0xFF, 0xFF, 0xFF};
+ dDbVw_drawLineOpa(start, end, color, TRUE, 12);
+
+ start.set(vtxList[v1]);
+ end.set(vtxList[v2]);
+ PSVECAdd(&raise, &start, &start);
+ PSVECAdd(&raise, &end, &end);
+ dDbVw_drawLineOpa(start, end, color, TRUE, 12);
+
+ start.set(vtxList[v2]);
+ end.set(vtxList[v0]);
+ PSVECAdd(&raise, &start, &start);
+ PSVECAdd(&raise, &end, &end);
+ dDbVw_drawLineOpa(start, end, color, TRUE, 12);
+ return 0;
}
-bool dBgS::Regist(dBgW_Base* pbgw, fopAc_ac_c* p_actor) {
+static int poly_draw(dBgS_CaptPoly* capt, cBgD_Vtx_t* vtxList, int v0, int v1, int v2, cM3dGPla* plane) {
+ UNUSED(capt);
+
+ cXyz points[3];
+ GXColor ground_color = {0xFF, 0, 0, 0xFF};
+ GXColor roof_color = {0, 0, 0xFF, 0xFF};
+ GXColor wall_color = {0, 0xFF, 0, 0xFF};
+
+ cXyz raise;
+ PSVECScale(&plane->mNormal, &raise, s_InsideHio.m_raise_amount);
+
+ points[0] = vtxList[v0];
+ points[1] = vtxList[v1];
+ points[2] = vtxList[v2];
+
+ PSVECAdd(&points[0], &raise, &points[0]);
+ PSVECAdd(&points[1], &raise, &points[1]);
+ PSVECAdd(&points[2], &raise, &points[2]);
+
+ if (cBgW_CheckBGround(plane->mNormal.y)) {
+ if (!s_InsideHio.ChkGroundOff()) {
+ dDbVw_drawTriangleOpa(points, ground_color, TRUE);
+ }
+ } else if (cBgW_CheckBRoof(plane->mNormal.y)) {
+ if (!s_InsideHio.ChkRoofOff()) {
+ dDbVw_drawTriangleOpa(points, roof_color, TRUE);
+ }
+ } else {
+ if (!s_InsideHio.ChkWallOff()) {
+ dDbVw_drawTriangleOpa(points, wall_color, TRUE);
+ }
+ }
+
+ return 0;
+}
+#endif
+
+void dBgS::Draw() {
+ #if DEBUG
+ cBgS::Draw();
+
+ if (s_InsideHio.ChkDispPoly()) {
+ cM3dGAab aab;
+ if (s_InsideHio.ChkPlayerAround()) {
+ fopAc_ac_c* player = dComIfGp_getPlayer(0);
+ cXyz min;
+ cXyz max;
+
+ f32 var_f31 = fabsf(s_InsideHio.m_p0.x);
+
+ min.x = player->current.pos.x - var_f31;
+ min.y = player->current.pos.y - var_f31;
+ min.z = player->current.pos.z - var_f31;
+ max.x = player->current.pos.x + var_f31;
+ max.y = player->current.pos.y + var_f31;
+ max.z = player->current.pos.z + var_f31;
+
+ aab.Set(&min, &max);
+ } else {
+ aab.ClearForMinMax();
+ aab.SetMinMax(s_InsideHio.m_p0);
+ aab.SetMinMax(s_InsideHio.m_p1);
+ }
+
+ if (s_InsideHio.ChkDispDpArea()) {
+ static GXColor l_color = {0, 0, 0xFF, 0x80};
+ dBgS_AabDraw(aab, l_color);
+ }
+
+ dBgS_CaptPoly capt;
+ capt.Set(*aab.GetMinP(), *aab.GetMaxP());
+
+ if (s_InsideHio.ChkDispWaterPoly()) {
+ capt.OffFullGrp();
+ capt.OnWaterGrp();
+ } else {
+ capt.OnFullGrp();
+ }
+
+ if (s_InsideHio.ChkWhiteWire()) {
+ capt.SetCallback(white_draw);
+ CaptPoly(capt);
+ }
+
+ capt.SetCallback(poly_draw);
+ CaptPoly(capt);
+ }
+
+ if (m_hio.ChkCheckCounter()) {
+ OSReport("ラインチェック %d回\n", g_line_counter);
+ g_line_counter = 0;
+
+ OSReport("アクター地形チェック壁処理 %d回\n", g_acch_wall_counter);
+ g_acch_wall_counter = 0;
+
+ OSReport("天井チェック %d回\n", g_roof_counter);
+ g_roof_counter = 0;
+
+ OSReport("Splチェック %d回\n", g_spl_counter);
+ g_spl_counter = 0;
+
+ OSReport("床チェック %d回\n", g_ground_counter);
+ g_ground_counter = 0;
+
+ OSReport("リアル影 %d回\n", g_shdw_counter);
+ g_shdw_counter = 0;
+
+ OSReport("球チェック %d回\n", g_sph_counter);
+ g_sph_counter = 0;
+
+ OSReport("ポリゴンキャプチャ %d\n", g_capt_poly_counter);
+ g_capt_poly_counter = 0;
+ }
+
+ if (m_hio.ChkObjLineCheck()) {
+ dBgS_LinChk linechk;
+ linechk.Set(&m_hio.m_linecheck_start, &m_hio.m_linecheck_end, NULL);
+
+ dDbVw_drawLineOpa(m_hio.m_linecheck_start, m_hio.m_linecheck_end, (GXColor){0xFF, 0xFF, 0xFF, 0xFF}, TRUE, 12);
+ dDbVw_drawSphereOpa(m_hio.m_linecheck_start, 10.0f, (GXColor){0xFF, 0, 0, 0xFF}, TRUE);
+ dDbVw_drawSphereOpa(m_hio.m_linecheck_end, 10.0f, (GXColor){0, 0, 0xFF, 0xFF}, TRUE);
+
+ if (LineCross(&linechk)) {
+ dDbVw_drawSphereOpa(*linechk.GetCrossP(), 10.0f, (GXColor){0, 0xFF, 0, 0xFF}, TRUE);
+ }
+ }
+
+ if (m_hio.ChkGndCheck()) {
+ dBgS_ObjGndChk gndchk;
+ cXyz sp54;
+
+ if (!s_InsideHio.ChkGndChkPlayerUnder()) {
+ sp54 = m_hio.m_gndcheck_pos;
+ } else {
+ fopAc_ac_c* player = dComIfGp_getPlayer(0);
+ cXyz sp48(player->current.pos);
+ sp48.y += 200.0f;
+ }
+
+ gndchk.SetPos(&sp54);
+ f32 var_f30 = dComIfG_Bgsp().GroundCross(&gndchk);
+
+ cXyz sp3C;
+ sp3C = sp54;
+ sp3C.y = var_f30;
+
+ dDbVw_drawLineOpa(sp54, sp3C, (GXColor){0, 0xFF, 0, 0xFF}, TRUE, 12);
+ dDbVw_drawPointOpa(sp3C, (GXColor){0xFF, 0, 0, 0xFF}, TRUE, 12);
+
+ if (var_f30 != G_CM3D_F_INF) {
+ DrawPoly(gndchk, (GXColor){0xFF, 0xFF, 0, 0xFF});
+ }
+ }
+
+ #endif
+}
+
+#if DEBUG
+void dBgS::CaptPoly(dBgS_CaptPoly& capt) {
+ if (!m_hio.ChkCaptPolyOff()) {
+ if (m_hio.ChkCheckCounter()) {
+ g_capt_poly_counter++;
+ }
+
+ if (m_hio.ChkCaptPolyTimer()) {
+ OSStartStopwatch(&s_capt_poly_sw);
+ }
+
+ cBgS_ChkElm* elm = m_chk_element;
+ for (int i = 0; i < 0x100; i++) {
+ if (elm->ChkUsed()) {
+ elm->m_bgw_base_ptr->CaptPoly(capt);
+ }
+ elm++;
+ }
+
+ if (m_hio.ChkCaptPolyTimer()) {
+ OSStopStopwatch(&s_capt_poly_sw);
+ OSDumpStopwatch(&s_capt_poly_sw);
+ }
+ }
+}
+
+void dBgS::ChkDeleteActorRegist(fopAc_ac_c* actor) {
+ for (int i = 0; i < 0x100; i++) {
+ if (m_chk_element[i].ChkUsed() && actor == m_chk_element[i].m_actor_ptr) {
+ OS_REPORT_ERROR("dBgS::ChkDeleteActorRegist() [%d]削除されたアクターのポインターが、まだ登録されています。\n", i);
+ }
+ }
+}
+#endif
+
+bool dBgS::Regist(dBgW_Base* pbgw, fopAc_ac_c* pactor) {
if (pbgw == NULL) {
+ OS_REPORT_ERROR("dBgS::Regist() pbgwがNULLのため登録できません。\n");
return true;
}
- if (p_actor != NULL && pbgw->ChkMoveBg()) {
- pbgw->SetOldShapeAngleY(p_actor->shape_angle.y);
- pbgw->SetRoomId(fopAcM_GetRoomNo(p_actor));
+ if (pactor != NULL && pbgw->ChkMoveBg()) {
+ fopAc_ac_c* actor = pactor;
+ pbgw->SetOldShapeAngleY(actor->shape_angle.y);
+ pbgw->SetRoomId(fopAcM_GetRoomNo(actor));
}
- return cBgS::Regist(pbgw, fopAcM_GetID(p_actor), p_actor);
+ return cBgS::Regist(pbgw, fopAcM_GetID(pactor), pactor);
}
void dBgW_Base::SetOldShapeAngleY(s16 shape_angle) {
m_old_ShapeAngleY = shape_angle;
}
-bool dBgS::ChkMoveBG(cBgS_PolyInfo const& poly) {
- dBgW_Base* base = dComIfG_Bgsp().GetBgWBasePointer(poly);
- if (base != NULL) {
- if (base->ChkLock()) {
+bool dBgS::ChkMoveBG(const cBgS_PolyInfo& polyinfo) {
+ dBgW_Base* pbgw = dComIfG_Bgsp().GetBgWBasePointer(polyinfo);
+ if (pbgw != NULL) {
+ if (pbgw->ChkLock()) {
return false;
}
- if (base->ChkMoveBg()) {
+ if (pbgw->ChkMoveBg()) {
return true;
}
}
@@ -335,182 +848,216 @@ bool dBgS::ChkMoveBG(cBgS_PolyInfo const& poly) {
return false;
}
-bool dBgS::ChkMoveBG_NoDABg(cBgS_PolyInfo const& poly) {
- dBgW_Base* base = dComIfG_Bgsp().GetBgWBasePointer(poly);
- if (base != NULL && base->ChkMoveBg()) {
+bool dBgS::ChkMoveBG_NoDABg(const cBgS_PolyInfo& polyinfo) {
+ dBgW_Base* pbgw = dComIfG_Bgsp().GetBgWBasePointer(polyinfo);
+ if (pbgw != NULL && pbgw->ChkMoveBg()) {
return true;
}
return false;
}
-s32 dBgS::GetExitId(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetExitId(poly);
- } else {
+s32 dBgS::GetExitId(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1421, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
return 0x3F;
}
+
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetExitId(polyinfo);
}
-s32 dBgS::GetPolyColor(cBgS_PolyInfo const& poly) {
- if (!poly.ChkSetInfo()) {
+s32 dBgS::GetPolyColor(const cBgS_PolyInfo& polyinfo) {
+ if (!polyinfo.ChkSetInfo()) {
return 0xFF;
}
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetPolyColor(poly);
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1443, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0xFF;
}
- return 0xFF;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetPolyColor(polyinfo);
}
-BOOL dBgS::GetHorseNoEntry(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetHorseNoEntry(poly);
- }
+BOOL dBgS::GetHorseNoEntry(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1460, 0 <= bg_index && bg_index < 256);
- return false;
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return false;
+ }
+
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetHorseNoEntry(polyinfo);
}
-int dBgS::GetSpecialCode(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetSpecialCode(poly);
+int dBgS::GetSpecialCode(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1477, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0;
}
- return 0;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetSpecialCode(polyinfo);
}
-int dBgS::GetMagnetCode(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetMagnetCode(poly);
+int dBgS::GetMagnetCode(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1494, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0;
}
- return 0;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetMagnetCode(polyinfo);
}
-int dBgS::GetMonkeyBarsCode(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetMonkeyBarsCode(poly);
+int dBgS::GetMonkeyBarsCode(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1509, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0;
}
- return 0;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetMonkeyBarsCode(polyinfo);
}
-u32 dBgS::GetUnderwaterRoofCode(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetUnderwaterRoofCode(poly.GetPolyIndex());
+u32 dBgS::GetUnderwaterRoofCode(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1524, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0;
}
- return 0;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetUnderwaterRoofCode(polyinfo.GetPolyIndex());
}
-s32 dBgS::GetWallCode(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetWallCode(poly);
+s32 dBgS::GetWallCode(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1574, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0;
}
- return 0;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetWallCode(polyinfo);
}
-int dBgS::GetPolyAtt0(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetPolyAtt0(poly);
+int dBgS::GetPolyAtt0(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1591, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0;
}
- return 0;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetPolyAtt0(polyinfo);
}
-int dBgS::GetPolyAtt1(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetPolyAtt1(poly);
- }
+int dBgS::GetPolyAtt1(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1608, 0 <= bg_index && bg_index < 256);
- return 0;
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0;
+ }
+
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetPolyAtt1(polyinfo);
}
-int dBgS::GetGroundCode(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetGroundCode(poly);
- }
+int dBgS::GetGroundCode(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1625, 0 <= bg_index && bg_index < 256);
- return 0;
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0;
+ }
+
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetGroundCode(polyinfo);
}
-s32 dBgS::GetCamMoveBG(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetCamMoveBG(poly);
+s32 dBgS::GetCamMoveBG(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1667, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0xFF;
}
- return 0xFF;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetCamMoveBG(polyinfo);
}
-s32 dBgS::GetRoomCamId(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetRoomCamId(poly);
+s32 dBgS::GetRoomCamId(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1684, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0xFF;
}
- return 0xFF;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetRoomCamId(polyinfo);
}
-s32 dBgS::GetRoomPathId(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetRoomPathId(poly);
+s32 dBgS::GetRoomPathId(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1700, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0xFF;
}
- return 0xFF;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetRoomPathId(polyinfo);
}
-s32 dBgS::GetRoomPathPntNo(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
- if (m_chk_element[bg_index].ChkUsed()) {
- return m_chk_element[bg_index].m_bgw_base_ptr->GetRoomPathPntNo(poly);
+s32 dBgS::GetRoomPathPntNo(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(1717, 0 <= bg_index && bg_index < 256);
+
+ if (!m_chk_element[bg_index].ChkUsed()) {
+ return 0xFF;
}
- return 0xFF;
+ return m_chk_element[bg_index].m_bgw_base_ptr->GetRoomPathPntNo(polyinfo);
}
-int dBgS::GetGrpSoundId(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
+int dBgS::GetGrpSoundId(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
JUT_ASSERT(1761, 0 <= bg_index && bg_index < 256);
+
if (!m_chk_element[bg_index].ChkUsed()) {
return 0xFF;
}
- dBgW_Base* r30 = m_chk_element[bg_index].m_bgw_base_ptr;
- return r30->GetGrpSoundId(poly);
+
+ dBgW_Base* pbgw = m_chk_element[bg_index].m_bgw_base_ptr;
+ return pbgw->GetGrpSoundId(polyinfo);
}
-u32 dBgS::ChkGrpInf(cBgS_PolyInfo const& poly, u32 param_1) {
- u32 grp_inf = GetGrpInf(poly);
- return grp_inf & param_1;
+u32 dBgS::ChkGrpInf(const cBgS_PolyInfo& polyinfo, u32 mask) {
+ u32 grp_inf = GetGrpInf(polyinfo);
+ return grp_inf & mask;
}
-int dBgS::GetRoomId(cBgS_PolyInfo const& poly) {
- if (!poly.ChkSetInfo()) {
+int dBgS::GetRoomId(const cBgS_PolyInfo& polyinfo) {
+ if (!polyinfo.ChkSetInfo()) {
return -1;
}
- int id = poly.GetBgIndex();
- if (!ChkPolySafe(poly)) {
+ int id = polyinfo.GetBgIndex();
+ JUT_ASSERT(1804, 0 <= id && id < 256);
+ if (!ChkPolySafe(polyinfo)) {
return -1;
}
- s32 roomId = m_chk_element[id].m_bgw_base_ptr->GetRoomId();
+ dBgW_Base* pbgw = m_chk_element[id].m_bgw_base_ptr;
+ int roomId = pbgw->GetRoomId();
if (roomId == 0xFF) {
- roomId = GetGrpRoomId(poly);
+ roomId = GetGrpRoomId(polyinfo);
if (roomId == 0xFF) {
roomId = -1;
}
@@ -519,29 +1066,110 @@ int dBgS::GetRoomId(cBgS_PolyInfo const& poly) {
return roomId;
}
-bool dBgS::GetPolyAttackThrough(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
+bool dBgS::GetPolyAttackThrough(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
JUT_ASSERT(1894, 0 <= bg_index && bg_index < 256);
+
if (!m_chk_element[bg_index].ChkUsed()) {
return false;
}
- dBgW_Base* r30 = m_chk_element[bg_index].m_bgw_base_ptr;
- return r30->GetAttackThrough(poly.GetPolyIndex()) != 0;
+
+ dBgW_Base* pbgw = m_chk_element[bg_index].m_bgw_base_ptr;
+ return pbgw->GetAttackThrough(polyinfo.GetPolyIndex()) != 0;
}
-u32 dBgS::ChkPolyHSStick(cBgS_PolyInfo const& poly) {
- int bg_index = poly.GetBgIndex();
+u32 dBgS::ChkPolyHSStick(const cBgS_PolyInfo& polyinfo) {
+ int bg_index = polyinfo.GetBgIndex();
JUT_ASSERT(1912, 0 <= bg_index && bg_index < 256);
+
if (!m_chk_element[bg_index].ChkUsed()) {
return 0;
}
- dBgW_Base* r30 = m_chk_element[bg_index].m_bgw_base_ptr;
- return r30->GetPolyHSStick(poly.GetPolyIndex());
+
+ dBgW_Base* pbgw = m_chk_element[bg_index].m_bgw_base_ptr;
+ return pbgw->GetPolyHSStick(polyinfo.GetPolyIndex());
}
-void dBgS::WallCorrect(dBgS_Acch* p_acch) {
- p_acch->CalcWallRR();
- p_acch->CalcMovePosWork();
+// these don't appear to be inlined based on the static var usage and location within the TU,
+// but if they're not inlined then the calls in retail don't resolve to cBgS variants.
+// Ifdef'ing for now to preserve both versions behavior
+#if DEBUG
+f32 dBgS::GroundCross(cBgS_GndChk* pgndchk) {
+ if (m_hio.ChkCheckCounter()) {
+ g_ground_counter++;
+ }
+
+ if (m_hio.ChkGroundCheckTimer()) {
+ OSStartStopwatch(&s_ground_sw);
+ }
+
+ f32 rt = cBgS::GroundCross(pgndchk);
+ if (m_hio.ChkGroundCheckTimer()) {
+ OSStopStopwatch(&s_ground_sw);
+ OSDumpStopwatch(&s_ground_sw);
+ }
+
+ return rt;
+}
+
+bool dBgS::LineCross(cBgS_LinChk* plinchk) {
+ if (m_hio.ChkLineOff()) {
+ return false;
+ }
+
+ if (m_hio.ChkCheckCounter()) {
+ g_line_counter++;
+ }
+
+ if (m_hio.ChkLineTimer()) {
+ OSStartStopwatch(&s_line_sw);
+ }
+
+ bool rt = cBgS::LineCross(plinchk);
+ if (m_hio.ChkLineTimer()) {
+ OSStopStopwatch(&s_line_sw);
+ OSDumpStopwatch(&s_line_sw);
+ }
+
+ return rt;
+}
+
+void dBgS::ShdwDraw(cBgS_ShdwDraw* pshdwDraw) {
+ if (!m_hio.ChkShdwDrawOff()) {
+ if (m_hio.ChkCheckCounter()) {
+ g_shdw_counter++;
+ }
+
+ if (m_hio.ChkShdwDrawTimer()) {
+ OSStartStopwatch(&s_shdw_sw);
+ }
+
+ cBgS::ShdwDraw(pshdwDraw);
+ if (m_hio.ChkShdwDrawTimer()) {
+ OSStopStopwatch(&s_shdw_sw);
+ OSDumpStopwatch(&s_shdw_sw);
+ }
+ }
+}
+#endif
+
+void dBgS::WallCorrect(dBgS_Acch* pacch) {
+ #if DEBUG
+ if (m_hio.ChkAcchWallOff()) {
+ return;
+ }
+
+ if (m_hio.ChkCheckCounter()) {
+ g_acch_wall_counter++;
+ }
+
+ if (m_hio.ChkAcchWallTimer()) {
+ OSStartStopwatch(&s_wall_correct_sw);
+ }
+ #endif
+
+ pacch->CalcWallRR();
+ pacch->CalcMovePosWork();
for (int i = 0; i < 3; i++) {
cBgS_ChkElm* elm = m_chk_element;
@@ -550,21 +1178,42 @@ void dBgS::WallCorrect(dBgS_Acch* p_acch) {
if (elm->ChkUsed() && !elm->m_bgw_base_ptr->ChkNotReady()) {
dBgW_Base* pbgw = elm->m_bgw_base_ptr;
- if (pbgw->ChkPriority(i) && !p_acch->ChkSameActorPid(elm->m_actor_id)) {
- if (!p_acch->ChkMoveBGOnly() || (pbgw->ChkMoveBg() && !pbgw->ChkLock())) {
- p_acch->SetNowActorInfo(j, elm->m_bgw_base_ptr, elm->m_actor_id);
- pbgw->WallCorrect(p_acch);
+ if (pbgw->ChkPriority(i) && !pacch->ChkSameActorPid(elm->m_actor_id)) {
+ if (!pacch->ChkMoveBGOnly() || (pbgw->ChkMoveBg() && !pbgw->ChkLock())) {
+ pacch->SetNowActorInfo(j, elm->m_bgw_base_ptr, elm->m_actor_id);
+ pbgw->WallCorrect(pacch);
}
}
}
elm++;
}
}
+
+ #if DEBUG
+ if (m_hio.ChkAcchWallTimer()) {
+ OSStopStopwatch(&s_wall_correct_sw);
+ OSDumpStopwatch(&s_wall_correct_sw);
+ }
+ #endif
}
-void dBgS::WallCorrectSort(dBgS_Acch* p_acch) {
- p_acch->CalcWallRR();
- p_acch->CalcMovePosWork();
+void dBgS::WallCorrectSort(dBgS_Acch* pacch) {
+ #if DEBUG
+ if (m_hio.ChkAcchWallOff()) {
+ return;
+ }
+
+ if (m_hio.ChkCheckCounter()) {
+ g_acch_wall_counter++;
+ }
+
+ if (m_hio.ChkAcchWallTimer()) {
+ OSStartStopwatch(&s_wall_correct_sw);
+ }
+ #endif
+
+ pacch->CalcWallRR();
+ pacch->CalcMovePosWork();
for (int i = 0; i < 3; i++) {
cBgS_ChkElm* elm = m_chk_element;
@@ -573,53 +1222,95 @@ void dBgS::WallCorrectSort(dBgS_Acch* p_acch) {
if (elm->ChkUsed() && !elm->m_bgw_base_ptr->ChkNotReady()) {
dBgW_Base* pbgw = elm->m_bgw_base_ptr;
- if (pbgw->ChkPriority(i) && !p_acch->ChkSameActorPid(elm->m_actor_id)) {
- if (!p_acch->ChkMoveBGOnly() || (pbgw->ChkMoveBg() && !pbgw->ChkLock())) {
- p_acch->SetNowActorInfo(j, elm->m_bgw_base_ptr, elm->m_actor_id);
- pbgw->WallCorrectSort(p_acch);
+ if (pbgw->ChkPriority(i) && !pacch->ChkSameActorPid(elm->m_actor_id)) {
+ if (!pacch->ChkMoveBGOnly() || (pbgw->ChkMoveBg() && !pbgw->ChkLock())) {
+ pacch->SetNowActorInfo(j, elm->m_bgw_base_ptr, elm->m_actor_id);
+ pbgw->WallCorrectSort(pacch);
}
}
}
elm++;
}
}
+
+ #if DEBUG
+ if (m_hio.ChkAcchWallTimer()) {
+ OSStopStopwatch(&s_wall_correct_sw);
+ OSDumpStopwatch(&s_wall_correct_sw);
+ }
+ #endif
}
-f32 dBgS::RoofChk(dBgS_RoofChk* p_roof) {
- p_roof->Init();
+f32 dBgS::RoofChk(dBgS_RoofChk* proof) {
+ #if DEBUG
+ if (m_hio.ChkRoofOff()) {
+ return G_CM3D_F_INF;
+ }
+
+ if (m_hio.ChkCheckCounter()) {
+ g_roof_counter++;
+ }
+
+ if (m_hio.ChkRoofTimer()) {
+ OSStartStopwatch(&s_roof_sw);
+ }
+ #endif
+
+ proof->Init();
cBgS_ChkElm* elm = m_chk_element;
for (int i = 0; i < 0x100; i++) {
if (elm->ChkUsed() && !elm->m_bgw_base_ptr->ChkNotReady()) {
- if (!p_roof->ChkSameActorPid(elm->m_actor_id)) {
+ if (!proof->ChkSameActorPid(elm->m_actor_id)) {
dBgW_Base* pbgw = elm->m_bgw_base_ptr;
- if (pbgw->RoofChk(p_roof)) {
- p_roof->SetActorInfo(i, elm->m_bgw_base_ptr, elm->m_actor_id);
+ if (pbgw->RoofChk(proof)) {
+ proof->SetActorInfo(i, elm->m_bgw_base_ptr, elm->m_actor_id);
}
}
}
elm++;
}
- return p_roof->GetNowY();
+ #if DEBUG
+ if (m_hio.ChkAcchWallTimer()) {
+ OSStopStopwatch(&s_roof_sw);
+ OSDumpStopwatch(&s_roof_sw);
+ }
+ #endif
+
+ return proof->GetNowY();
}
-bool dBgS::SplGrpChk(dBgS_SplGrpChk* p_grp) {
+bool dBgS::SplGrpChk(dBgS_SplGrpChk* pspl) {
+ #if DEBUG
+ if (m_hio.ChkSplOff()) {
+ return false;
+ }
+
+ if (m_hio.ChkCheckCounter()) {
+ g_spl_counter++;
+ }
+
+ if (m_hio.ChkSplTimer()) {
+ OSStartStopwatch(&s_spl_sw);
+ }
+ #endif
+
bool ret = false;
- p_grp->Init();
+ pspl->Init();
cBgS_ChkElm* elm = m_chk_element;
for (int i = 0; i < 0x100; i++) {
if (elm->ChkUsed() && !elm->m_bgw_base_ptr->ChkNotReady()) {
- if (!p_grp->ChkSameActorPid(elm->m_actor_id)) {
+ if (!pspl->ChkSameActorPid(elm->m_actor_id)) {
dBgW_Base* pbgw = elm->m_bgw_base_ptr;
- if (!p_grp->ChkMoveBGOnly() || (pbgw->ChkMoveBg() && !pbgw->ChkLock())) {
- if (pbgw->SplGrpChk(p_grp)) {
+ if (!pspl->ChkMoveBGOnly() || (pbgw->ChkMoveBg() && !pbgw->ChkLock())) {
+ if (pbgw->SplGrpChk(pspl)) {
ret = true;
- p_grp->SetActorInfo(i, elm->m_bgw_base_ptr, elm->m_actor_id);
- p_grp->OnFind();
+ pspl->SetActorInfo(i, elm->m_bgw_base_ptr, elm->m_actor_id);
+ pspl->OnFind();
}
}
}
@@ -627,25 +1318,46 @@ bool dBgS::SplGrpChk(dBgS_SplGrpChk* p_grp) {
elm++;
}
+ #if DEBUG
+ if (m_hio.ChkAcchWallTimer()) {
+ OSStopStopwatch(&s_spl_sw);
+ OSDumpStopwatch(&s_spl_sw);
+ }
+ #endif
+
return ret;
}
-bool dBgS::SphChk(dBgS_SphChk* p_sph, void* param_1) {
- if (p_sph->mCallback == NULL) {
+bool dBgS::SphChk(dBgS_SphChk* psphchk, void* param_1) {
+ if (psphchk->mCallback == NULL) {
+ return false;
+ }
+
+ #if DEBUG
+ if (m_hio.ChkSphChkOff()) {
return false;
}
+ if (m_hio.ChkCheckCounter()) {
+ g_sph_counter++;
+ }
+
+ if (m_hio.ChkSphChkTimer()) {
+ OSStartStopwatch(&s_sph_chk_sw);
+ }
+ #endif
+
bool ret = false;
- p_sph->ClearPi();
+ psphchk->Init();
cBgS_ChkElm* elm = m_chk_element;
for (int i = 0; i < 0x100; i++) {
if (elm->ChkUsed() && !elm->m_bgw_base_ptr->ChkNotReady()) {
- if (!p_sph->ChkSameActorPid(elm->m_actor_id)) {
+ if (!psphchk->ChkSameActorPid(elm->m_actor_id)) {
dBgW_Base* pbgw = elm->m_bgw_base_ptr;
- if (pbgw->SphChk(p_sph, param_1)) {
- p_sph->SetActorInfo(i, elm->m_bgw_base_ptr, elm->m_actor_id);
+ if (pbgw->SphChk(psphchk, param_1)) {
+ psphchk->SetActorInfo(i, elm->m_bgw_base_ptr, elm->m_actor_id);
ret = true;
}
}
@@ -653,81 +1365,109 @@ bool dBgS::SphChk(dBgS_SphChk* p_sph, void* param_1) {
elm++;
}
+ #if DEBUG
+ if (m_hio.ChkAcchWallTimer()) {
+ OSStopStopwatch(&s_sph_chk_sw);
+ OSDumpStopwatch(&s_sph_chk_sw);
+ }
+ #endif
+
return ret;
}
-void dBgS::MoveBgCrrPos(cBgS_PolyInfo const& i_poly, bool param_1, cXyz* i_pos, csXyz* i_angle,
+void dBgS::MoveBgCrrPos(const cBgS_PolyInfo& i_poly, bool param_1, cXyz* i_pos, csXyz* i_angle,
csXyz* i_shapeAngle, bool param_5, bool param_6) {
if (!param_1 || !i_poly.ChkBgIndex()) {
return;
}
int bg_index = i_poly.GetBgIndex();
+ JUT_ASSERT(2414, 0 <= bg_index && bg_index < 256);
+
+ dBgW_Base* pbgw;
if (m_chk_element[bg_index].ChkUsed()) {
- dBgW_Base* bgw_p = m_chk_element[bg_index].m_bgw_base_ptr;
+ pbgw = m_chk_element[bg_index].m_bgw_base_ptr;
- if ((!param_5 || bgw_p->chkStickWall()) && (!param_6 || bgw_p->chkStickRoof()) &&
- bgw_p->ChkMoveFlag() && ChkPolySafe(i_poly))
+ if ((!param_5 || pbgw->chkStickWall()) && (!param_6 || pbgw->chkStickRoof()) &&
+ pbgw->ChkMoveFlag() && ChkPolySafe(i_poly))
{
- bgw_p->CrrPos(i_poly, m_chk_element[bg_index].m_actor_ptr, param_1, i_pos, i_angle,
+ pbgw->CrrPos(i_poly, m_chk_element[bg_index].m_actor_ptr, param_1, i_pos, i_angle,
i_shapeAngle);
}
}
}
-void dBgS::MoveBgTransPos(cBgS_PolyInfo const& i_poly, bool param_1, cXyz* i_pos, csXyz* i_angle,
+void dBgS::MoveBgTransPos(const cBgS_PolyInfo& i_poly, bool param_1, cXyz* i_pos, csXyz* i_angle,
csXyz* i_shapeAngle) {
if (!param_1 || !i_poly.ChkBgIndex()) {
return;
}
int bg_index = i_poly.GetBgIndex();
+ JUT_ASSERT(2466, 0 <= bg_index && bg_index < 256);
+
+ dBgW_Base* pbgw;
if (m_chk_element[bg_index].ChkUsed()) {
- dBgW_Base* bgw_p = m_chk_element[bg_index].m_bgw_base_ptr;
+ pbgw = m_chk_element[bg_index].m_bgw_base_ptr;
- if (bgw_p->ChkMoveFlag() && ChkPolySafe(i_poly)) {
- bgw_p->TransPos(i_poly, m_chk_element[bg_index].m_actor_ptr, param_1, i_pos, i_angle,
+ if (pbgw->ChkMoveFlag() && ChkPolySafe(i_poly)) {
+ pbgw->TransPos(i_poly, m_chk_element[bg_index].m_actor_ptr, param_1, i_pos, i_angle,
i_shapeAngle);
}
}
}
-void dBgS::MoveBgMatrixCrrPos(cBgS_PolyInfo const& i_poly, bool param_1, cXyz* i_pos,
+void dBgS::MoveBgMatrixCrrPos(const cBgS_PolyInfo& i_poly, bool param_1, cXyz* i_pos,
csXyz* i_angle, csXyz* i_shapeAngle) {
if (!param_1 || !i_poly.ChkBgIndex()) {
return;
}
int bg_index = i_poly.GetBgIndex();
+ JUT_ASSERT(2509, 0 <= bg_index && bg_index < 256);
+
+ dBgW_Base* pbgw;
if (m_chk_element[bg_index].ChkUsed()) {
- dBgW_Base* bgw_p = m_chk_element[bg_index].m_bgw_base_ptr;
+ pbgw = m_chk_element[bg_index].m_bgw_base_ptr;
- if (bgw_p->ChkMoveFlag()) {
- bgw_p->MatrixCrrPos(i_poly, m_chk_element[bg_index].m_actor_ptr, param_1, i_pos,
+ if (pbgw->ChkMoveFlag()) {
+ pbgw->MatrixCrrPos(i_poly, m_chk_element[bg_index].m_actor_ptr, param_1, i_pos,
i_angle, i_shapeAngle);
}
}
}
-void dBgS_MoveBGProc_Typical(dBgW* i_bgw, void* i_actor_ptr, cBgS_PolyInfo const& i_poly,
+void dBgS_MoveBGProc_Typical(dBgW* pbgw, void* i_actor_ptr, const cBgS_PolyInfo& i_poly,
bool param_3, cXyz* i_pos, csXyz* i_angle, csXyz* i_shapeAngle) {
- Mtx m;
- if (i_bgw->GetOldInvMtx(m) != 0) {
- cXyz move_old;
- MTXMultVec(m, i_pos, &move_old);
+ UNUSED(i_actor_ptr);
+ UNUSED(i_poly);
+ UNUSED(param_3);
+ UNUSED(i_angle);
+ UNUSED(i_shapeAngle);
- cXyz move_pos;
- MTXMultVec(i_bgw->GetBaseMtxP(), &move_old, &move_pos);
- i_pos->x = move_pos.x;
- i_pos->y = move_pos.y;
- i_pos->z = move_pos.z;
+ Mtx m;
+ if (pbgw->GetOldInvMtx(m) == 0) {
+ return;
}
+
+ cXyz move_old;
+ cXyz move_pos;
+
+ PSMTXMultVec(m, i_pos, &move_old);
+ PSMTXMultVec(pbgw->GetBaseMtxP(), &move_old, &move_pos);
+
+ *i_pos = move_pos;
}
-static void dBgS_MoveBGProc_RotY(dBgW* i_bgw, void* i_actor_ptr, cBgS_PolyInfo const& i_poly,
+static void dBgS_MoveBGProc_RotY(dBgW* pbgw, void* i_actor_ptr, const cBgS_PolyInfo& i_poly,
bool param_3, cXyz* i_pos, csXyz* i_angle, csXyz* i_shapeAngle) {
+ UNUSED(i_actor_ptr);
+ UNUSED(i_poly);
+ UNUSED(param_3);
+ UNUSED(i_pos);
+
if (i_shapeAngle != NULL) {
- s16 y = i_bgw->GetDiffShapeAngleY();
+ s16 y = pbgw->GetDiffShapeAngleY();
if (i_shapeAngle != NULL) {
i_shapeAngle->y += y;
@@ -739,101 +1479,126 @@ static void dBgS_MoveBGProc_RotY(dBgW* i_bgw, void* i_actor_ptr, cBgS_PolyInfo c
}
}
-void dBgS_MoveBGProc_TypicalRotY(dBgW* i_bgw, void* i_actor_ptr, cBgS_PolyInfo const& i_poly,
+void dBgS_MoveBGProc_TypicalRotY(dBgW* pbgw, void* i_actor_ptr, const cBgS_PolyInfo& i_poly,
bool param_3, cXyz* i_pos, csXyz* i_angle, csXyz* i_shapeAngle) {
- dBgS_MoveBGProc_Typical(i_bgw, i_actor_ptr, i_poly, param_3, i_pos, i_angle, i_shapeAngle);
- dBgS_MoveBGProc_RotY(i_bgw, i_actor_ptr, i_poly, param_3, i_pos, i_angle, i_shapeAngle);
+ dBgS_MoveBGProc_Typical(pbgw, i_actor_ptr, i_poly, param_3, i_pos, i_angle, i_shapeAngle);
+ dBgS_MoveBGProc_RotY(pbgw, i_actor_ptr, i_poly, param_3, i_pos, i_angle, i_shapeAngle);
}
-void dBgS_MoveBGProc_Trans(dBgW* i_bgw, void* i_actor_ptr, cBgS_PolyInfo const& i_poly,
+void dBgS_MoveBGProc_Trans(dBgW* pbgw, void* i_actor_ptr, const cBgS_PolyInfo& i_poly,
bool param_3, cXyz* i_pos, csXyz* i_angle, csXyz* i_shapeAngle) {
+ UNUSED(i_actor_ptr);
+ UNUSED(i_poly);
+ UNUSED(param_3);
+ UNUSED(i_angle);
+ UNUSED(i_shapeAngle);
+
cXyz trans;
- i_bgw->GetTrans(&trans);
+ pbgw->GetTrans(&trans);
- VECAdd(i_pos, &trans, i_pos);
+ PSVECAdd(i_pos, &trans, i_pos);
}
-void dBgS::RideCallBack(cBgS_PolyInfo const& poly, fopAc_ac_c* param_1) {
- int bg_index = poly.GetBgIndex();
- dBgW_Base* base = m_chk_element[bg_index].m_bgw_base_ptr;
- if (base->ChkUsed()) {
- base->CallRideCallBack(m_chk_element[bg_index].m_actor_ptr, param_1);
+void dBgS::RideCallBack(const cBgS_PolyInfo& polyinfo, fopAc_ac_c* param_1) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(2682, 0 <= bg_index && bg_index < 256);
+
+ dBgW_Base* pbgw = m_chk_element[bg_index].m_bgw_base_ptr;
+ if (!pbgw->ChkUsed()) {
+ OS_REPORT_ERROR("dBgS::RideCallBack() Error\n");
+ } else {
+ pbgw->CallRideCallBack(m_chk_element[bg_index].m_actor_ptr, param_1);
}
}
-void dBgS::ArrowStickCallBack(cBgS_PolyInfo const& poly, fopAc_ac_c* param_1, cXyz& param_2) {
- int bg_index = poly.GetBgIndex();
- dBgW_Base* base = m_chk_element[bg_index].m_bgw_base_ptr;
- if (base->ChkUsed()) {
- base->CallArrowStickCallBack(m_chk_element[bg_index].m_actor_ptr, param_1, param_2);
+void dBgS::ArrowStickCallBack(const cBgS_PolyInfo& polyinfo, fopAc_ac_c* param_1, cXyz& param_2) {
+ int bg_index = polyinfo.GetBgIndex();
+ JUT_ASSERT(2704, 0 <= bg_index && bg_index < 256);
+
+ dBgW_Base* pbgw = m_chk_element[bg_index].m_bgw_base_ptr;
+ if (!pbgw->ChkUsed()) {
+ OS_REPORT_ERROR("dBgS::ArrowStickCallBack() Used Error\n");
+ } else {
+ pbgw->CallArrowStickCallBack(m_chk_element[bg_index].m_actor_ptr, param_1, param_2);
}
}
-fopAc_ac_c* dBgS::PushPullCallBack(cBgS_PolyInfo const& param_0, fopAc_ac_c* i_pushActor, s16 i_angle,
+fopAc_ac_c* dBgS::PushPullCallBack(const cBgS_PolyInfo& param_0, fopAc_ac_c* i_pushActor, s16 i_angle,
dBgW_Base::PushPullLabel i_label) {
int bg_index = param_0.GetBgIndex();
- dBgW_Base* base = m_chk_element[bg_index].m_bgw_base_ptr;
- if (!base->ChkUsed()) {
+ JUT_ASSERT(2733, 0 <= bg_index && bg_index < 256);
+
+ dBgW_Base* pbgw = m_chk_element[bg_index].m_bgw_base_ptr;
+ if (!pbgw->ChkUsed()) {
+ OS_REPORT_ERROR("dBgS::PushPullCallBack() Error\n");
return NULL;
}
- if (m_chk_element[bg_index].m_actor_ptr == NULL) {
+ fopAc_ac_c* bg_actor = m_chk_element[bg_index].m_actor_ptr;
+ if (bg_actor == NULL) {
return NULL;
}
- if (base->GetPushPullCallback() == NULL) {
+ dBgW::PushPull_CallBack callback = pbgw->GetPushPullCallback();
+ if (callback == NULL) {
return NULL;
}
- return base->GetPushPullCallback()(m_chk_element[bg_index].m_actor_ptr, i_pushActor, i_angle,
- i_label);
+ return callback(bg_actor, i_pushActor, i_angle, i_label);
}
#if DEBUG
+void dBgS::DebugDrawPoly(const dBgW_Base& param_1) {
+ if (m_hio.ChkShapeDisp()) {
+ param_1.DebugDraw();
+ }
+}
-void dBgS::DrawPoly(cBgS_PolyInfo const& polyInfo, GXColor const& color) {
+void dBgS::DrawPoly(const cBgS_PolyInfo& polyInfo, GXColor const& color) {
dBgW_Base* pdBgw = dComIfG_Bgsp().GetBgWBasePointer(polyInfo);
if (pdBgw != NULL) {
pdBgw->DrawPoly(polyInfo, color);
}
}
-
#endif
-bool dBgS_CheckBWallPoly(cBgS_PolyInfo const& poly) {
+bool dBgS_CheckBWallPoly(const cBgS_PolyInfo& polyinfo) {
cM3dGPla pla;
- if (!dComIfG_Bgsp().GetTriPla(poly, &pla)) {
+ bool rt = dComIfG_Bgsp().GetTriPla(polyinfo, &pla);
+ if (!rt) {
return false;
}
return cBgW_CheckBWall(pla.mNormal.y);
}
-bool dBgS_CheckBGroundPoly(cBgS_PolyInfo const& poly) {
+bool dBgS_CheckBGroundPoly(const cBgS_PolyInfo& polyinfo) {
cM3dGPla pla;
- if (!dComIfG_Bgsp().GetTriPla(poly, &pla)) {
+ bool rt = dComIfG_Bgsp().GetTriPla(polyinfo, &pla);
+ if (!rt) {
return false;
}
return cBgW_CheckBGround(pla.mNormal.y);
}
-bool dBgS_CheckBRoofPoly(cBgS_PolyInfo const& poly) {
+bool dBgS_CheckBRoofPoly(const cBgS_PolyInfo& polyinfo) {
cM3dGPla pla;
- if (!dComIfG_Bgsp().GetTriPla(poly, &pla)) {
+ bool rt = dComIfG_Bgsp().GetTriPla(polyinfo, &pla);
+ if (!rt) {
return false;
}
return cBgW_CheckBRoof(pla.mNormal.y);
}
-f32 dBgS_GetNY(cBgS_PolyInfo const& poly) {
+f32 dBgS_GetNY(const cBgS_PolyInfo& polyinfo) {
cM3dGPla pla;
- dComIfG_Bgsp().GetTriPla(poly, &pla);
+ dComIfG_Bgsp().GetTriPla(polyinfo, &pla);
return pla.mNormal.y;
}
diff --git a/src/d/d_bg_s_acch.cpp b/src/d/d_bg_s_acch.cpp
index 0259c3f55d..7ff969fde0 100644
--- a/src/d/d_bg_s_acch.cpp
+++ b/src/d/d_bg_s_acch.cpp
@@ -11,6 +11,10 @@
#include "d/d_com_inf_game.h"
#include "global.h"
+#if DEBUG
+#include "d/d_debug_viewer.h"
+#endif
+
dBgS_AcchCir::dBgS_AcchCir() {
m_flags = 0;
m_wall_rr = 0.0f;
@@ -22,26 +26,26 @@ dBgS_AcchCir::dBgS_AcchCir() {
}
void dBgS_AcchCir::ClrWallHit() {
- m_flags &= ~WALL_HIT;
+ m_flags &= ~FLAG_WALL_HIT;
ClearPi();
}
-void dBgS_AcchCir::SetWallR(f32 i_wall_r) {
- m_wall_r = i_wall_r;
+void dBgS_AcchCir::SetWallR(f32 wall_r) {
+ m_wall_r = wall_r;
}
void dBgS_AcchCir::CalcWallRR() {
m_wall_rr = m_wall_r * m_wall_r;
}
-void dBgS_AcchCir::SetWall(f32 i_wall_h, f32 i_wall_r) {
- SetWallH(i_wall_h);
- SetWallR(i_wall_r);
+void dBgS_AcchCir::SetWall(f32 wall_h, f32 wall_r) {
+ SetWallH(wall_h);
+ SetWallR(wall_r);
}
-void dBgS_AcchCir::SetWallHDirect(f32 i_h_direct) {
+void dBgS_AcchCir::SetWallHDirect(f32 h_direct) {
m_flags |= WALL_H_DIRECT;
- m_wall_h_direct = i_h_direct;
+ m_wall_h_direct = h_direct;
}
dBgS_Acch::~dBgS_Acch() {}
@@ -89,40 +93,43 @@ void dBgS_Acch::Init() {
}
}
-void dBgS_Acch::Set(cXyz* i_pos, cXyz* i_old_pos, fopAc_ac_c* i_actor, int i_tbl_size,
- dBgS_AcchCir* i_acchcir, cXyz* i_speed, csXyz* i_angle, csXyz* i_shape_angle) {
- pm_pos = i_pos;
- pm_old_pos = i_old_pos;
+void dBgS_Acch::Set(cXyz* ppos, cXyz* pold_pos, fopAc_ac_c* pactor, int tbl_size,
+ dBgS_AcchCir* pacchcir, cXyz* pspeed, csXyz* pangle, csXyz* pshape_angle) {
+ pm_pos = ppos;
+ pm_old_pos = pold_pos;
JUT_ASSERT(246, pm_pos != NULL);
JUT_ASSERT(247, pm_old_pos != NULL);
- m_my_ac = i_actor;
- fpc_ProcID id = fopAcM_GetID(i_actor);
+ m_my_ac = pactor;
+
+ fpc_ProcID id = fopAcM_GetID(pactor);
SetActorPid(id);
- pm_speed = i_speed;
- m_tbl_size = i_tbl_size;
- pm_acch_cir = i_acchcir;
- pm_angle = i_angle;
- pm_shape_angle = i_shape_angle;
+
+ pm_speed = pspeed;
+ m_tbl_size = tbl_size;
+ pm_acch_cir = pacchcir;
+ pm_angle = pangle;
+ pm_shape_angle = pshape_angle;
}
-void dBgS_Acch::Set(fopAc_ac_c* i_actor, int i_tbl_size, dBgS_AcchCir* i_acchcir) {
- m_tbl_size = i_tbl_size;
- pm_acch_cir = i_acchcir;
- m_my_ac = i_actor;
+void dBgS_Acch::Set(fopAc_ac_c* pactor, int tbl_size, dBgS_AcchCir* pacchcir) {
+ m_tbl_size = tbl_size;
+ pm_acch_cir = pacchcir;
+ m_my_ac = pactor;
- SetActorPid(fopAcM_GetID(i_actor));
- pm_pos = fopAcM_GetPosition_p(i_actor);
- pm_old_pos = fopAcM_GetOldPosition_p(i_actor);
- pm_speed = fopAcM_GetSpeed_p(i_actor);
- pm_angle = fopAcM_GetAngle_p(i_actor);
- pm_shape_angle = fopAcM_GetShapeAngle_p(i_actor);
+ SetActorPid(fopAcM_GetID(pactor));
+ pm_pos = fopAcM_GetPosition_p(pactor);
+ pm_old_pos = fopAcM_GetOldPosition_p(pactor);
+ pm_speed = fopAcM_GetSpeed_p(pactor);
+ pm_angle = fopAcM_GetAngle_p(pactor);
+ pm_shape_angle = fopAcM_GetShapeAngle_p(pactor);
}
-void dBgS_Acch::GroundCheckInit(dBgS& i_bgs) {
- UNUSED(i_bgs);
- if (!(m_flags & 2)) {
+void dBgS_Acch::GroundCheckInit(dBgS& bgs) {
+ UNUSED(bgs);
+
+ if (!(m_flags & FLAG_GRND_NONE)) {
m_ground_h = -G_CM3D_F_INF;
m_gnd.SetExtChk(*this);
field_0xb4 = ChkGroundHit();
@@ -132,8 +139,8 @@ void dBgS_Acch::GroundCheckInit(dBgS& i_bgs) {
}
}
-void dBgS_Acch::GroundCheck(dBgS& i_bgs) {
- if (!(m_flags & GRND_NONE)) {
+void dBgS_Acch::GroundCheck(dBgS& bgs) {
+ if (!(m_flags & FLAG_GRND_NONE)) {
cXyz grnd_pos;
grnd_pos = *pm_pos;
grnd_pos.y += field_0x94 + (m_gnd_chk_offset - field_0x90);
@@ -143,15 +150,15 @@ void dBgS_Acch::GroundCheck(dBgS& i_bgs) {
tmpRoofChk.SetActorPid(m_gnd.GetActorPid());
tmpRoofChk.SetPos(*pm_pos);
- f32 roof_chk = i_bgs.RoofChk(&tmpRoofChk);
- if (grnd_pos.y > roof_chk) {
- grnd_pos.y = roof_chk;
+ f32 roof_y = bgs.RoofChk(&tmpRoofChk);
+ if (grnd_pos.y > roof_y) {
+ grnd_pos.y = roof_y;
}
}
field_0x94 = 0.0f;
m_gnd.SetPos(&grnd_pos);
- m_ground_h = i_bgs.GroundCross(&m_gnd);
+ m_ground_h = bgs.GroundCross(&m_gnd);
if (m_ground_h != -G_CM3D_F_INF) {
field_0xbc = m_ground_h + field_0x90;
@@ -162,13 +169,13 @@ void dBgS_Acch::GroundCheck(dBgS& i_bgs) {
pm_speed->y = 0.0f;
}
- i_bgs.GetTriPla(m_gnd, &field_0xa0);
+ bgs.GetTriPla(m_gnd, &field_0xa0);
SetGroundFind();
SetGroundHit();
if (field_0xc0 == 0) {
field_0xc0 = 1;
- i_bgs.RideCallBack(m_gnd, m_my_ac);
+ bgs.RideCallBack(m_gnd, m_my_ac);
}
if (field_0xb4 == 0) {
@@ -183,28 +190,28 @@ void dBgS_Acch::GroundCheck(dBgS& i_bgs) {
}
}
-void dBgS_Acch::GroundRoofProc(dBgS& i_bgs) {
+void dBgS_Acch::GroundRoofProc(dBgS& bgs) {
if (m_ground_h != -G_CM3D_F_INF) {
if (field_0xbc < field_0xcc && field_0xcc < pm_pos->y) {
pm_pos->y = field_0xcc;
}
- if (!(m_flags & ROOF_NONE) && m_ground_h >= m_roof_height) {
+ if (!(m_flags & FLAG_ROOF_NONE) && m_ground_h >= m_roof_height) {
m_roof.SetExtChk(*this);
ClrRoofHit();
cXyz roof_pos(*pm_pos);
m_roof.SetPos(roof_pos);
- m_roof_height = i_bgs.RoofChk(&m_roof);
+ m_roof_height = bgs.RoofChk(&m_roof);
}
}
}
-void dBgS_Acch::LineCheck(dBgS& i_bgs) {
+void dBgS_Acch::LineCheck(dBgS& bgs) {
dBgS_RoofChk roof_chk;
roof_chk.SetActorPid(m_gnd.GetActorPid());
roof_chk.SetPos(*GetOldPos());
- f32 temp_f31 = dComIfG_Bgsp().RoofChk(&roof_chk);
+ f32 roof_y = dComIfG_Bgsp().RoofChk(&roof_chk);
f32 var_f30 = G_CM3D_F_INF;
bool var_r30 = false;
@@ -218,22 +225,22 @@ void dBgS_Acch::LineCheck(dBgS& i_bgs) {
old_pos = *GetOldPos();
pos = *GetPos();
- f32 var_f2 = GetWallH(i);
- if (temp_f31 < old_pos.y + var_f2) {
+ f32 wall_h = GetWallH(i);
+ if (roof_y < old_pos.y + wall_h) {
if (var_r29) {
continue;
} else {
- var_f2 = (temp_f31 - old_pos.y) - 1.0f;
+ wall_h = (roof_y - old_pos.y) - 1.0f;
var_r29 = true;
}
}
- if (var_f30 > var_f2) {
- var_f30 = var_f2;
+ if (var_f30 > wall_h) {
+ var_f30 = wall_h;
}
- old_pos.y += var_f2;
- pos.y += var_f2;
+ old_pos.y += wall_h;
+ pos.y += wall_h;
if (GetSpeedY() < 0.0f) {
if (m_my_ac != NULL && fopAcM_GetName(m_my_ac) == fpcNm_ALINK_e &&
@@ -246,7 +253,7 @@ void dBgS_Acch::LineCheck(dBgS& i_bgs) {
lin_chk.Set2(&old_pos, &pos, GetActorPid());
lin_chk.SetExtChk(*this);
- if (i_bgs.LineCross(&lin_chk)) {
+ if (bgs.LineCross(&lin_chk)) {
*GetPos() = lin_chk.GetCross();
OnLineCheckHit();
@@ -254,10 +261,10 @@ void dBgS_Acch::LineCheck(dBgS& i_bgs) {
*pm_out_poly_info = lin_chk;
cM3dGPla plane;
- i_bgs.GetTriPla(lin_chk, &plane);
+ bgs.GetTriPla(lin_chk, &plane);
if (!cBgW_CheckBGround(plane.mNormal.y)) {
PSVECAdd(GetPos(), &plane.mNormal, GetPos());
- f32 var_f28 = JMAFastSqrt(plane.mNormal.x * plane.mNormal.x + plane.mNormal.z * plane.mNormal.z);
+ f32 var_f28 = JMAFastSqrt(SQUARE(plane.mNormal.x) + SQUARE(plane.mNormal.z));
if (!cM3d_IsZero(var_f28)) {
pm_acch_cir[i].SetWallHDirect(GetPos()->y);
}
@@ -265,7 +272,7 @@ void dBgS_Acch::LineCheck(dBgS& i_bgs) {
GetPos()->y -= GetWallH(i);
} else {
GetPos()->y -= 1.0f;
- GroundCheck(i_bgs);
+ GroundCheck(bgs);
var_r30 = true;
}
}
@@ -273,7 +280,6 @@ void dBgS_Acch::LineCheck(dBgS& i_bgs) {
if (ChkLineDown()) {
f32 temp_f1 = GetOldPos()->y - GetPos()->y;
-
if (var_f30 != G_CM3D_F_INF && !var_r30 && !cM3d_IsZero(temp_f1)) {
cBgS_LinChk lin_chk;
cXyz old_pos;
@@ -287,7 +293,7 @@ void dBgS_Acch::LineCheck(dBgS& i_bgs) {
lin_chk.Set2(&old_pos, &pos, GetActorPid());
lin_chk.SetExtChk(*this);
- if (i_bgs.LineCross(&lin_chk)) {
+ if (bgs.LineCross(&lin_chk)) {
*GetPos() = lin_chk.GetCross();
OnLineCheckHit();
@@ -295,13 +301,13 @@ void dBgS_Acch::LineCheck(dBgS& i_bgs) {
*pm_out_poly_info = lin_chk;
GetPos()->y -= 1.0f;
- GroundCheck(i_bgs);
+ GroundCheck(bgs);
}
}
}
}
-void dBgS_Acch::CrrPos(dBgS& i_bgs) {
+void dBgS_Acch::CrrPos(dBgS& bgs) {
bool bvar9;
if (!(m_flags & 1)) {
JUT_ASSERT(792, pm_pos != NULL);
@@ -316,7 +322,7 @@ void dBgS_Acch::CrrPos(dBgS& i_bgs) {
JUT_ASSERT(839, pm_pos->y < 1.0e32f);
JUT_ASSERT(840, -1.0e32f < pm_pos->z && pm_pos->z < 1.0e32f);
- i_bgs.MoveBgCrrPos(m_gnd, ChkGroundHit(), pm_pos, pm_angle, pm_shape_angle, false, false);
+ bgs.MoveBgCrrPos(m_gnd, ChkGroundHit(), pm_pos, pm_angle, pm_shape_angle, false, false);
if (!ChkGroundHit()) {
bvar9 = false;
@@ -324,7 +330,7 @@ void dBgS_Acch::CrrPos(dBgS& i_bgs) {
if (ChkWallHit()) {
for (int i = 0; i < m_tbl_size; i++) {
if (pm_acch_cir[i].ChkWallHit()) {
- i_bgs.MoveBgCrrPos(pm_acch_cir[i], true, pm_pos, pm_angle, pm_shape_angle,
+ bgs.MoveBgCrrPos(pm_acch_cir[i], true, pm_pos, pm_angle, pm_shape_angle,
true, false);
bvar9 = true;
break;
@@ -333,89 +339,86 @@ void dBgS_Acch::CrrPos(dBgS& i_bgs) {
}
if (!bvar9 && ChkRoofHit()) {
- i_bgs.MoveBgCrrPos(m_roof, true, pm_pos, pm_angle, pm_shape_angle, false, true);
+ bgs.MoveBgCrrPos(m_roof, true, pm_pos, pm_angle, pm_shape_angle, false, true);
}
}
- GroundCheckInit(i_bgs);
+ GroundCheckInit(bgs);
Init();
- f32 tmp = GetWallAllLowH_R();
- f32 dvar10 = GetOldPos()->abs2XZ(*GetPos());
- f32 dvar11 = GetOldPos()->y - GetPos()->y;
- f32 tmp2 = GetWallAllLowH();
+ f32 wall_all_low_h_r = GetWallAllLowH_R();
+ f32 old_pos_dist2XZ = GetOldPos()->abs2XZ(*GetPos());
+ f32 old_pos_dist_y = GetOldPos()->y - GetPos()->y;
+ f32 wall_all_low_h = GetWallAllLowH();
field_0xb8 = GetPos()->y;
field_0xc0 = 0;
- f32 fvar12 = tmp2 + GetOldPos()->y;
+ f32 fvar12 = wall_all_low_h + GetOldPos()->y;
f32 fvar1 = m_gnd_chk_offset + GetPos()->y;
bool bvar2 = false;
OffLineCheckHit();
- if (!ChkLineCheckNone() && !cM3d_IsZero(tmp) &&
- (dvar10 > (tmp * tmp) || fvar12 > fvar1 || dvar11 > m_gnd_chk_offset || ChkLineCheck()))
+ if (!ChkLineCheckNone() && !cM3d_IsZero(wall_all_low_h_r) &&
+ (old_pos_dist2XZ > SQUARE(wall_all_low_h_r) || fvar12 > fvar1 || old_pos_dist_y > m_gnd_chk_offset || ChkLineCheck()))
{
bvar2 = true;
- LineCheck(i_bgs);
+ LineCheck(bgs);
}
- if (!(m_flags & WALL_NONE)) {
+ if (!(m_flags & FLAG_WALL_NONE)) {
if (ChkWallSort()) {
- i_bgs.WallCorrectSort(this);
+ bgs.WallCorrectSort(this);
} else {
- i_bgs.WallCorrect(this);
+ bgs.WallCorrect(this);
}
}
if (ChkWallHit() && bvar2) {
- LineCheck(i_bgs);
+ LineCheck(bgs);
}
+
field_0xcc = G_CM3D_F_INF;
- if (!(m_flags & ROOF_NONE)) {
+ if (!(m_flags & FLAG_ROOF_NONE)) {
m_roof.SetExtChk(*this);
ClrRoofHit();
- cXyz roof_pos;
- roof_pos.x = pm_pos->x;
- roof_pos.y = pm_pos->y;
- roof_pos.z = pm_pos->z;
+ cXyz roof_pos(*pm_pos);
m_roof.SetPos(roof_pos);
- m_roof_height = i_bgs.RoofChk(&m_roof);
+ m_roof_height = bgs.RoofChk(&m_roof);
if (m_roof_height != G_CM3D_F_INF) {
- f32 y = pm_pos->y;
-
- if (y + m_roof_crr_height > m_roof_height) {
+ if (pm_pos->y + m_roof_crr_height > m_roof_height) {
field_0xcc = m_roof_height - m_roof_crr_height;
SetRoofHit();
}
}
}
- if (!(m_flags & GRND_NONE)) {
+ if (!(m_flags & FLAG_GRND_NONE)) {
ClrGroundFind();
- GroundCheck(i_bgs);
- GroundRoofProc(i_bgs);
+ GroundCheck(bgs);
+ GroundRoofProc(bgs);
} else {
if (field_0xcc < pm_pos->y) {
pm_pos->y = field_0xcc;
}
}
- if (!(m_flags & 0x400)) {
+ if (!(m_flags & FLAG_WATER_NONE)) {
ClrWaterHit();
ClrWaterIn();
m_wtr.SetHeight(-G_CM3D_F_INF);
+ bool spD = false;
+
f32 var_f29;
f32 top;
-
- f32 temp_f1_5 = m_ground_h;
- if (temp_f1_5 == -G_CM3D_F_INF) {
+ if (m_ground_h == -G_CM3D_F_INF) {
var_f29 = pm_pos->y - 50.0f;
+ spD = true;
} else {
- var_f29 = temp_f1_5;
+ var_f29 = m_ground_h;
}
if (m_wtr_mode == 1) {
@@ -425,7 +428,7 @@ void dBgS_Acch::CrrPos(dBgS& i_bgs) {
roof_chk.SetUnderwaterRoof();
roof_chk.SetPos(*pm_pos);
- top = i_bgs.RoofChk(&roof_chk);
+ top = bgs.RoofChk(&roof_chk);
if (top == G_CM3D_F_INF) {
top = pm_pos->y + 1000000.0f;
}
@@ -438,7 +441,7 @@ void dBgS_Acch::CrrPos(dBgS& i_bgs) {
m_wtr.Set(ground, top);
m_wtr.SetPassChkInfo(*this);
- if (i_bgs.WaterChk(&m_wtr)) {
+ if (bgs.WaterChk(&m_wtr)) {
SetWaterHit();
if (m_wtr.GetHeight() > pm_pos->y) {
SetWaterIn();
@@ -460,15 +463,15 @@ void dBgS_Acch::CrrPos(dBgS& i_bgs) {
}
f32 dBgS_Acch::GetWallAllR() {
- f32 ret = 0.0f;
+ f32 rt = 0.0f;
for (int i = 0; i < m_tbl_size; i++) {
- f32 wall_r = pm_acch_cir[i].GetWallR();
- if (ret < wall_r) {
- ret = wall_r;
+ if (rt < pm_acch_cir[i].GetWallR()) {
+ rt = pm_acch_cir[i].GetWallR();
}
}
- return ret;
+
+ return rt;
}
void dBgS_Acch::SetWallCir() {
@@ -481,31 +484,26 @@ void dBgS_Acch::CalcWallBmdCyl() {
if (m_tbl_size <= 0) {
m_wall_cyl.Set(*pm_pos, 0.0f, 0.0f);
} else {
- f32 dvar8 = GetWallAllR();
- f32 dvar9 = pm_acch_cir->GetWallH();
- f32 dvar10 = pm_acch_cir->GetWallH();
+ f32 wall_all_r = GetWallAllR();
+ f32 wall_h_max = pm_acch_cir->GetWallH();
+ f32 wall_h_min = pm_acch_cir->GetWallH();
if (m_tbl_size >= 1) {
for (int i = 0; i < m_tbl_size; i++) {
- f32 tmp = pm_acch_cir[i].GetWallH();
- if (dvar9 > tmp) {
- dvar9 = pm_acch_cir[i].GetWallH();
+ if (wall_h_max > pm_acch_cir[i].GetWallH()) {
+ wall_h_max = pm_acch_cir[i].GetWallH();
}
- f32 tmp2 = pm_acch_cir[i].GetWallH();
- if (dvar10 < tmp2) {
- dvar10 = pm_acch_cir[i].GetWallH();
+ if (wall_h_min < pm_acch_cir[i].GetWallH()) {
+ wall_h_min = pm_acch_cir[i].GetWallH();
}
}
}
- cXyz xyz;
- xyz.x = pm_pos->x;
- xyz.y = pm_pos->y;
- xyz.z = pm_pos->z;
- xyz.y += dvar9;
+ cXyz xyz(*pm_pos);
+ xyz.y += wall_h_max;
- m_wall_cyl.Set(xyz, dvar8, dvar10 - dvar9);
+ m_wall_cyl.Set(xyz, wall_all_r, wall_h_min - wall_h_max);
}
}
@@ -519,15 +517,14 @@ f32 dBgS_Acch::GetWallAllLowH() {
return 0.0f;
}
- f32 tmp = pm_acch_cir->GetWallH();
+ f32 wall_low_h = pm_acch_cir->GetWallH();
for (int i = 1; i < m_tbl_size; i++) {
- f32 tmp2 = pm_acch_cir[i].GetWallH();
- if (tmp > tmp2) {
- tmp = pm_acch_cir[i].GetWallH();
+ if (wall_low_h > pm_acch_cir[i].GetWallH()) {
+ wall_low_h = pm_acch_cir[i].GetWallH();
}
}
- return tmp;
+ return wall_low_h;
}
f32 dBgS_Acch::GetWallAllLowH_R() {
@@ -536,11 +533,10 @@ f32 dBgS_Acch::GetWallAllLowH_R() {
}
int index = 0;
- f32 tmp = pm_acch_cir->GetWallH();
+ f32 wall_h = pm_acch_cir->GetWallH();
for (int i = 1; i < m_tbl_size; i++) {
- f32 tmp2 = pm_acch_cir[i].GetWallH();
- if (tmp > tmp2) {
- tmp = pm_acch_cir[i].GetWallH();
+ if (wall_h > pm_acch_cir[i].GetWallH()) {
+ wall_h = pm_acch_cir[i].GetWallH();
index = i;
}
}
@@ -556,6 +552,49 @@ f32 dBgS_Acch::GetSpeedY() {
return 0.0f;
}
+#if DEBUG
+static GXColor blue = {0, 0, 0xFF, 0x80};
+static GXColor red = {0xFF, 0, 0, 0x80};
+
+void dBgS_Acch::DrawWall(dBgS& bgs) {
+ if (bgs.m_hio.ChkAcchDrawWall()) {
+ if (!(m_flags & FLAG_WALL_NONE)) {
+ for (int i = 0; i < m_tbl_size; i++) {
+ cM3dGCir cir;
+ cir = *pm_acch_cir[i].GetCirP();
+
+ cXyz pos;
+ pos.x = cir.GetCx();
+ pos.y = cir.GetHeight();
+ pos.z = cir.GetCy();
+
+ f32 radius = cir.GetR();
+ dDbVw_drawCylinderXlu(pos, radius, 3.0f, blue, TRUE);
+
+ if (pm_acch_cir[i].ChkWallHit()) {
+ bgs.DrawPoly(pm_acch_cir[i], blue);
+ }
+ }
+ } else {
+ SetWallCir();
+
+ for (int i = 0; i < m_tbl_size; i++) {
+ cM3dGCir cir;
+ cir = *pm_acch_cir[i].GetCirP();
+
+ cXyz pos;
+ pos.x = cir.GetCx();
+ pos.y = cir.GetHeight();
+ pos.z = cir.GetCy();
+
+ f32 radius = cir.GetR();
+ dDbVw_drawCylinderXlu(pos, radius, 3.0f, red, TRUE);
+ }
+ }
+ }
+}
+#endif
+
f32 dBgS_Acch::GetWallAddY(Vec& param_0) {
if (!ChkGroundFind() || field_0xa0.mNormal.y < 0.5f) {
return 0.0f;
@@ -572,15 +611,17 @@ f32 dBgS_Acch::GetWallAddY(Vec& param_0) {
return 0.0f;
}
-void dBgS_Acch::SetNowActorInfo(int bg_index, void* param_1, fpc_ProcID param_2) {
+void dBgS_Acch::SetNowActorInfo(int bg_index, void* param_1, fpc_ProcID proc_id) {
m_bg_index = bg_index;
field_0x7c = param_1;
- field_0x80 = param_2;
+ field_0x80 = proc_id;
}
void dBgS_Acch::SetWallPolyIndex(int index, int poly_index) {
+ JUT_ASSERT(1534, index <= m_tbl_size);
+
pm_acch_cir[index].SetActorInfo(m_bg_index, field_0x7c, field_0x80);
- pm_acch_cir[index].SetPolyIndex(poly_index);
+ pm_acch_cir[index].SetWallPolyIndex(poly_index);
}
void dBgS_Acch::CalcMovePosWork() {
@@ -596,35 +637,35 @@ void dBgS_Acch::CalcWallRR() {
}
void dBgS_Acch::SetMoveBGOnly() {
- m_flags |= MOVE_BG_ONLY;
+ m_flags |= FLAG_MOVE_BG_ONLY;
m_wtr.OnMoveBGOnly();
}
void dBgS_Acch::ClrMoveBGOnly() {
- m_flags &= ~MOVE_BG_ONLY;
+ m_flags &= ~FLAG_MOVE_BG_ONLY;
m_wtr.OffMoveBGOnly();
}
void dBgS_Acch::SetGndThinCellingOff() {
- m_flags |= GND_THIN_CELLING_OFF;
+ m_flags |= FLAG_GND_THIN_CELLING_OFF;
}
void dBgS_Acch::ClrGndThinCellingOff() {
- m_flags &= ~GND_THIN_CELLING_OFF;
+ m_flags &= ~FLAG_GND_THIN_CELLING_OFF;
}
bool dBgS_Acch::ChkGndThinCellingOff() {
- return m_flags & GND_THIN_CELLING_OFF;
+ return m_flags & FLAG_GND_THIN_CELLING_OFF;
}
void dBgS_Acch::OnWallSort() {
- m_flags |= WALL_SORT;
+ m_flags |= FLAG_WALL_SORT;
}
bool dBgS_Acch::ChkWallSort() {
- return m_flags & WALL_SORT;
+ return m_flags & FLAG_WALL_SORT;
}
bool dBgS_Acch::ChkLineDown() {
- return m_flags & LINE_DOWN;
+ return m_flags & FLAG_LINE_DOWN;
}
diff --git a/src/d/d_bg_s_capt_poly.cpp b/src/d/d_bg_s_capt_poly.cpp
index 287db6ef59..1178947624 100644
--- a/src/d/d_bg_s_capt_poly.cpp
+++ b/src/d/d_bg_s_capt_poly.cpp
@@ -7,11 +7,11 @@
dBgS_CaptPoly::dBgS_CaptPoly() {
SetPolyPassChk(GetPolyPassChkInfo());
SetGrpPassChk(GetGrpPassChkInfo());
- field_0x48 = 0;
+ m_callback = NULL;
}
void dBgS_CaptPoly::Set(cXyz& min, cXyz& max) {
- aab.Set(&min, &max);
+ m_bnd.Set(&min, &max);
JUT_ASSERT(36, !(fpclassify(min.x) == FP_QNAN));
JUT_ASSERT(37, !(fpclassify(min.y) == FP_QNAN));
diff --git a/src/d/d_bg_s_movebg_actor.cpp b/src/d/d_bg_s_movebg_actor.cpp
index 3e0735cf91..f65b042288 100644
--- a/src/d/d_bg_s_movebg_actor.cpp
+++ b/src/d/d_bg_s_movebg_actor.cpp
@@ -14,8 +14,9 @@ dBgS_MoveBgActor::dBgS_MoveBgActor() {
mpBgW = NULL;
}
-static int CheckCreateHeap(fopAc_ac_c* p_actor) {
- return static_cast<dBgS_MoveBgActor*>(p_actor)->MoveBGCreateHeap();
+static int CheckCreateHeap(fopAc_ac_c* actor) {
+ dBgS_MoveBgActor* i_this = (dBgS_MoveBgActor*)actor;
+ return i_this->MoveBGCreateHeap();
}
int dBgS_MoveBgActor::CreateHeap() {
@@ -68,8 +69,7 @@ int dBgS_MoveBgActor::MoveBGCreateHeap() {
mpBgW = new dBgW();
if (mpBgW != NULL) {
- cBgD_t* res = (cBgD_t*)dComIfG_getObjectRes(m_name, m_dzb_id);
- if (!mpBgW->Set(res, cBgW::MOVE_BG_e, &mBgMtx)) {
+ if (!mpBgW->Set((cBgD_t*)dComIfG_getObjectRes(m_name, m_dzb_id), cBgW::MOVE_BG_e, &mBgMtx)) {
if (m_set_func != NULL) {
mpBgW->SetCrrFunc(m_set_func);
}
@@ -87,6 +87,8 @@ int dBgS_MoveBgActor::MoveBGCreateHeap() {
int dBgS_MoveBgActor::MoveBGCreate(char const* i_arcName, int i_dzb_id,
MoveBGActor_SetFunc i_setFunc, u32 i_heapSize, Mtx* i_bgMtx) {
+ bool var_r28 = true;
+
if (i_bgMtx == NULL) {
mDoMtx_stack_c::transS(current.pos.x, current.pos.y, current.pos.z);
mDoMtx_stack_c::YrotM(shape_angle.y);
@@ -104,6 +106,15 @@ int dBgS_MoveBgActor::MoveBGCreate(char const* i_arcName, int i_dzb_id,
return cPhs_ERROR_e;
}
+ #if DEBUG
+ if (mpBgW != NULL && mpBgW->ChkUsed()) {
+ BOOL isDebugPad = mDoCPd_c::isConnect(PAD_3);
+ if (isDebugPad) {
+ JUT_WARN(185, "%s", "dBgS_MoveBgActor::MoveBGCreate() Don't Regist CreateHeap\n");
+ }
+ }
+ #endif
+
if (mpBgW != NULL && dComIfG_Bgsp().Regist(mpBgW, this)) {
return cPhs_ERROR_e;
}
@@ -116,7 +127,10 @@ int dBgS_MoveBgActor::MoveBGDelete() {
int ret = Delete();
if (mpBgW != NULL && mpBgW->ChkUsed()) {
- dComIfG_Bgsp().Release(mpBgW);
+ bool rt = dComIfG_Bgsp().Release(mpBgW);
+ if (rt != 0) {
+ OS_REPORT("Release Error\n");
+ }
}
return ret;
}
diff --git a/src/d/d_bg_s_poly_pass_chk.cpp b/src/d/d_bg_s_poly_pass_chk.cpp
index 1433540464..18b60eb36b 100644
--- a/src/d/d_bg_s_poly_pass_chk.cpp
+++ b/src/d/d_bg_s_poly_pass_chk.cpp
@@ -84,7 +84,10 @@ bool dBgS_PolyPassChk::ChkNoHorse() {
return true;
}
- return !ChkHorse();
+ if (!ChkHorse())
+ return true;
+
+ return false;
}
void dBgS_PolyPassChk::SetStatue() {
diff --git a/src/d/d_bg_s_spl_grp_chk.cpp b/src/d/d_bg_s_spl_grp_chk.cpp
index 2915686a47..b09ce3c7b5 100644
--- a/src/d/d_bg_s_spl_grp_chk.cpp
+++ b/src/d/d_bg_s_spl_grp_chk.cpp
@@ -10,6 +10,17 @@
void dBgS_SplGrpChk::Set(cXyz& ground, f32 roof) {
m_ground = ground;
m_roof = roof;
+
+ JUT_ASSERT(23, !isnan(m_ground.x));
+ JUT_ASSERT(24, !isnan(m_ground.y));
+ JUT_ASSERT(25, !isnan(m_ground.z));
+
+ JUT_ASSERT(29, -INF < m_ground.x && m_ground.x < INF);
+ JUT_ASSERT(30, -INF < m_ground.y && m_ground.y < INF);
+ JUT_ASSERT(31, -INF < m_ground.z && m_ground.z < INF);
+
+ JUT_ASSERT(33, !isnan(m_roof));
+ JUT_ASSERT(34, -INF < m_roof && m_roof < INF);
}
dBgS_SplGrpChk::dBgS_SplGrpChk() {
diff --git a/src/d/d_bg_w.cpp b/src/d/d_bg_w.cpp
index d0f5a718eb..1407b38b15 100644
--- a/src/d/d_bg_w.cpp
+++ b/src/d/d_bg_w.cpp
@@ -9,11 +9,43 @@
#include "SSystem/SComponent/c_bg_s_shdw_draw.h"
#include "SSystem/SComponent/c_m2d.h"
#include "SSystem/SComponent/c_math.h"
-#include "d/d_bg_s_cap_poly.h"
+#include "d/d_bg_s_capt_poly.h"
#include "d/d_bg_s_sph_chk.h"
#include "d/d_com_inf_game.h"
#include "d/actor/d_a_horse.h"
+#if DEBUG
+#include "d/d_debug_viewer.h"
+#endif
+
+#if DEBUG
+static void ASSERT_SOLDHEAP() {
+ JKRHeap* currentHeap = JKRGetCurrentHeap();
+ u32 type = currentHeap->getHeapType();
+ if (type != 'SLID') {
+ /**
+ * ******* THIS IS A BUG *******
+ * ******* THIS IS A BUG *******
+ * ******* THIS IS A BUG *******
+ * cBgW will crash if the current heap is not a solid heap.
+ * Make sure to set the current heap to a solide heap.
+ * The memory allocated here will never be freed.
+ * This will cause memory leaks and certainly other bugs.
+ * Please fix immediately. The actor's name should be listed in the blue message below.
+ */
+ OS_REPORT_ERROR(
+ "*******Aバグです*******\n"
+ "*******Aバグです*******\n"
+ "*******Aバグです*******\n"
+ "cBgWはカレントヒープがソリッドヒープ以外だと破綻します。\n"
+ "必ず、カレントヒープをソリッドヒープにしてください。\n"
+ "ここでnewされた領域は二度と開放されることはありません。\n"
+ "慢性的にメモリーリークを繰り返し、いずれ確実にAバグを引き起こすことでしょう。\n"
+ "必ず修正してください。この下の水色のメッセージにアクターの名前が書いてあるはずです。\n");
+ }
+}
+#endif
+
cBgW_RwgElm::cBgW_RwgElm() {}
cBgW_RwgElm::~cBgW_RwgElm() {}
@@ -27,7 +59,10 @@ cBgW::cBgW() {
mFlags = GLOBAL_e;
mNeedsFullTransform = 1;
mMoveCounter = 0;
- mTransVel.set(0.0f, 0.0f, 0.0f);
+
+ mTransVel.x = 0.0f;
+ mTransVel.y = 0.0f;
+ mTransVel.z = 0.0f;
pm_tri = NULL;
pm_rwg = NULL;
@@ -60,24 +95,50 @@ void cBgW::GlobalVtx() {
if (pm_base != NULL) {
if (!mNeedsFullTransform) {
for (int i = 0; i < pm_bgd->m_v_num; i++) {
- Vec* vtx = &pm_vtx_tbl[i];
- VECAdd(vtx, &mTransVel, vtx);
+ PSVECAdd(&pm_vtx_tbl[i], &mTransVel, &pm_vtx_tbl[i]);
}
} else {
+ // TODO: supposed to be *pm_base, type must be wrong
+ JUT_ASSERT(201,
+ !isnan((*pm_base)[0][0]) &&
+ !isnan((*pm_base)[0][1]) &&
+ !isnan((*pm_base)[0][2]) &&
+ !isnan((*pm_base)[0][3]) &&
+ !isnan((*pm_base)[1][0]) &&
+ !isnan((*pm_base)[1][1]) &&
+ !isnan((*pm_base)[1][2]) &&
+ !isnan((*pm_base)[1][3]) &&
+ !isnan((*pm_base)[2][0]) &&
+ !isnan((*pm_base)[2][1]) &&
+ !isnan((*pm_base)[2][2]) &&
+ !isnan((*pm_base)[2][3]));
+
for (int i = 0; i < pm_bgd->m_v_num; i++) {
- MTXMultVec(pm_base, &pm_bgd->m_v_tbl[i], &pm_vtx_tbl[i]);
+ PSMTXMultVec(*pm_base, &pm_bgd->m_v_tbl[i], &pm_vtx_tbl[i]);
}
}
}
}
+#if DEBUG
+// stripped func, needed for string data
+void cBgW::DebugLocalPos() {
+ OSReport("cBgW::DebugLocalPos() {%ff, %ff, %ff}, {%ff, %ff, %ff}\n");
+}
+#endif
+
bool cBgW::SetVtx() {
+ #if DEBUG
+ ASSERT_SOLDHEAP();
+ #endif
+
if (mFlags & NO_VTX_TBL_e) {
pm_vtx_tbl = NULL;
} else if (mFlags & MOVE_BG_e) {
pm_vtx_tbl = (cBgD_Vtx_t*)new Vec[pm_bgd->m_v_num];
if (pm_vtx_tbl == NULL) {
+ OS_REPORT_ERROR("c_bg_w.cpp[%d] メモリ確保できません。\n", 272);
return true;
}
@@ -103,22 +164,36 @@ void cBgW::CalcPlane() {
if (pm_vtx_tbl != NULL) {
if (!mNeedsFullTransform) {
for (int i = 0; i < pm_bgd->m_t_num; i++) {
- pm_tri[i].m_plane.mD -= VECDotProduct(&pm_tri[i].m_plane.mNormal, &mTransVel);
+ pm_tri[i].m_plane.mD -= PSVECDotProduct(&pm_tri[i].m_plane.mNormal, &mTransVel);
}
} else {
for (int i = 0; i < pm_bgd->m_t_num; i++) {
pm_tri[i].m_plane.SetupFrom3Vtx(&pm_vtx_tbl[tri[i].m_vtx_idx0],
&pm_vtx_tbl[tri[i].m_vtx_idx1],
&pm_vtx_tbl[tri[i].m_vtx_idx2]);
- }
+
+ #if DEBUG
+ cXyz vec;
+ vec = pm_tri[i].m_plane.mNormal;
+
+ JUT_ASSERT(327, -1.1f <= vec.x && vec.x <= 1.1f);
+ JUT_ASSERT(328, -1.1f <= vec.y && vec.y <= 1.1f);
+ JUT_ASSERT(329, -1.1f <= vec.z && vec.z <= 1.1f);
+ #endif
+ }
}
}
}
bool cBgW::SetTri() {
+ #if DEBUG
+ ASSERT_SOLDHEAP();
+ #endif
+
pm_tri = new cBgW_TriElm[pm_bgd->m_t_num];
if (pm_tri == NULL) {
+ OS_REPORT_ERROR("c_bg_w.cpp[%d] メモリ確保できません\n", 353);
return true;
}
@@ -130,17 +205,17 @@ cBgW_TriElm::~cBgW_TriElm() {}
cBgW_TriElm::cBgW_TriElm() {}
-void cBgW::BlckConnect(u16* i_start_idx, int* i_prev_idx, int i_idx) {
- if (*i_start_idx == 0xFFFF) {
- *i_start_idx = i_idx;
+void cBgW::BlckConnect(u16* pstart_index, int* pprev_index, int index) {
+ if (*pstart_index == 0xFFFF) {
+ *pstart_index = index;
}
- if (*i_prev_idx != 0xFFFF) {
- pm_rwg[*i_prev_idx].m_next = i_idx;
+ if (*pprev_index != 0xFFFF) {
+ pm_rwg[*pprev_index].m_next = index;
}
- *i_prev_idx = i_idx;
- pm_rwg[*i_prev_idx].m_next = 0xFFFF;
+ *pprev_index = index;
+ pm_rwg[*pprev_index].m_next = 0xFFFF;
}
void cBgW::ClassifyPlane() {
@@ -173,7 +248,7 @@ void cBgW::ClassifyPlane() {
if (cBgW_CheckBGround(norm_y)) {
BlckConnect(&pm_blk[i].m_gnd_idx, &blk_gnd_idx, j);
} else if (cBgW_CheckBRoof(norm_y)) {
- if (!ChkRoofRegist()) {
+ if (ChkRoofRegist()) {
BlckConnect(&pm_blk[i].m_roof_idx, &blk_roof_idx, j);
}
} else {
@@ -184,117 +259,110 @@ void cBgW::ClassifyPlane() {
}
}
-void cBgW::MakeBlckTransMinMax(cXyz* i_min, cXyz* i_max) {
- VECAdd(i_min, &mTransVel, i_min);
- VECAdd(i_max, &mTransVel, i_max);
+void cBgW::MakeBlckTransMinMax(cXyz* pmin, cXyz* pmax) {
+ PSVECAdd(pmin, &mTransVel, pmin);
+ PSVECAdd(pmax, &mTransVel, pmax);
}
-void cBgW::MakeBlckMinMax(int vtx_index, cXyz* i_min, cXyz* i_max) {
+void cBgW::MakeBlckMinMax(int vtx_index, cXyz* pmin, cXyz* pmax) {
Vec* vtx = &pm_vtx_tbl[vtx_index];
- if (i_min->x > vtx->x) {
- i_min->x = vtx->x;
+ if (pmin->x > vtx->x) {
+ pmin->x = vtx->x;
}
- if (i_max->x < vtx->x) {
- i_max->x = vtx->x;
+ if (pmax->x < vtx->x) {
+ pmax->x = vtx->x;
}
- if (i_min->y > vtx->y) {
- i_min->y = vtx->y;
+ if (pmin->y > vtx->y) {
+ pmin->y = vtx->y;
}
- if (i_max->y < vtx->y) {
- i_max->y = vtx->y;
+ if (pmax->y < vtx->y) {
+ pmax->y = vtx->y;
}
- if (i_min->z > vtx->z) {
- i_min->z = vtx->z;
+ if (pmin->z > vtx->z) {
+ pmin->z = vtx->z;
}
- if (i_max->z < vtx->z) {
- i_max->z = vtx->z;
+ if (pmax->z < vtx->z) {
+ pmax->z = vtx->z;
}
}
-void cBgW::MakeBlckBnd(int i_blk_idx, cXyz* i_min, cXyz* i_max) {
- int start = pm_bgd->m_b_tbl[i_blk_idx].field_0x0;
+void cBgW::MakeBlckBnd(int blck_index, cXyz* pmin, cXyz* pmax) {
+ int start = pm_bgd->m_b_tbl[blck_index].field_0x0;
int max;
- if (i_blk_idx != pm_bgd->m_b_num - 1) {
- max = pm_bgd->m_b_tbl[i_blk_idx + 1].field_0x0 - 1;
+ if (blck_index != pm_bgd->m_b_num - 1) {
+ max = pm_bgd->m_b_tbl[blck_index + 1].field_0x0 - 1;
} else {
max = pm_bgd->m_t_num - 1;
}
if (mNeedsFullTransform == 0) {
- MakeBlckTransMinMax(i_min, i_max);
+ MakeBlckTransMinMax(pmin, pmax);
} else {
- i_min->z = G_CM3D_F_INF;
- i_min->y = G_CM3D_F_INF;
- i_min->x = G_CM3D_F_INF;
- i_max->z = -G_CM3D_F_INF;
- i_max->y = -G_CM3D_F_INF;
- i_max->x = -G_CM3D_F_INF;
+ pmin->x = pmin->y = pmin->z = G_CM3D_F_INF;
+ pmax->x = pmax->y = pmax->z =-G_CM3D_F_INF;
for (int i = start; i <= max; i++) {
- MakeBlckMinMax(pm_bgd->m_t_tbl[i].m_vtx_idx0, i_min, i_max);
- MakeBlckMinMax(pm_bgd->m_t_tbl[i].m_vtx_idx1, i_min, i_max);
- MakeBlckMinMax(pm_bgd->m_t_tbl[i].m_vtx_idx2, i_min, i_max);
+ MakeBlckMinMax(pm_bgd->m_t_tbl[i].m_vtx_idx0, pmin, pmax);
+ MakeBlckMinMax(pm_bgd->m_t_tbl[i].m_vtx_idx1, pmin, pmax);
+ MakeBlckMinMax(pm_bgd->m_t_tbl[i].m_vtx_idx2, pmin, pmax);
}
- i_min->x -= 1.0f;
- i_min->y -= 1.0f;
- i_min->z -= 1.0f;
- i_max->x += 1.0f;
- i_max->y += 1.0f;
- i_max->z += 1.0f;
+ pmin->x -= 1.0f;
+ pmin->y -= 1.0f;
+ pmin->z -= 1.0f;
+ pmax->x += 1.0f;
+ pmax->y += 1.0f;
+ pmax->z += 1.0f;
}
}
-void cBgW::MakeNodeTreeRp(int i_tree_idx) {
- cBgD_Tree_t* tree_data = &pm_bgd->m_tree_tbl[i_tree_idx];
+void cBgW::MakeNodeTreeRp(int node_index) {
+ cBgD_Tree_t* pnode = &pm_bgd->m_tree_tbl[node_index];
- if (tree_data->m_flag & 1) {
- int child_idx = tree_data->m_id[0];
+ if (pnode->m_flag & 1) {
+ int child_idx = pnode->m_id[0];
if (child_idx != 0xFFFF) {
- cXyz* max = (cXyz*)pm_node_tree[i_tree_idx].GetMaxP();
- cXyz* min = (cXyz*)pm_node_tree[i_tree_idx].GetMinP();
-
- MakeBlckBnd(child_idx, min, max);
+ MakeBlckBnd(child_idx, pm_node_tree[node_index].GetMinP(), pm_node_tree[node_index].GetMaxP());
}
} else {
- pm_node_tree[i_tree_idx].ClearForMinMax();
+ pm_node_tree[node_index].ClearForMinMax();
for (int i = 0; i < 8; i++) {
- int child_idx = tree_data->m_id[i];
+ int child_idx = pnode->m_id[i];
if (child_idx != 0xFFFF) {
MakeNodeTreeRp(child_idx);
- pm_node_tree[i_tree_idx].SetMinMax(*pm_node_tree[child_idx].GetMinP());
- pm_node_tree[i_tree_idx].SetMinMax(*pm_node_tree[child_idx].GetMaxP());
+ pm_node_tree[node_index].SetMinMax(*pm_node_tree[child_idx].GetMinP());
+ pm_node_tree[node_index].SetMinMax(*pm_node_tree[child_idx].GetMaxP());
}
}
}
}
-void cBgW::MakeNodeTreeGrpRp(int i_grp_idx) {
- if (pm_bgd->m_g_tbl[i_grp_idx].m_tree_idx != 0xFFFF) {
- MakeNodeTreeRp(pm_bgd->m_g_tbl[i_grp_idx].m_tree_idx);
- pm_grp[i_grp_idx].m_aab.SetMin(
- *pm_node_tree[pm_bgd->m_g_tbl[i_grp_idx].m_tree_idx].GetMinP());
- pm_grp[i_grp_idx].m_aab.SetMax(
- *pm_node_tree[pm_bgd->m_g_tbl[i_grp_idx].m_tree_idx].GetMaxP());
+void cBgW::MakeNodeTreeGrpRp(int g) {
+ if (pm_bgd->m_g_tbl[g].m_tree_idx != 0xFFFF) {
+ MakeNodeTreeRp(pm_bgd->m_g_tbl[g].m_tree_idx);
+ pm_grp[g].m_aab.SetMin(
+ *pm_node_tree[pm_bgd->m_g_tbl[g].m_tree_idx].GetMinP());
+ pm_grp[g].m_aab.SetMax(
+ *pm_node_tree[pm_bgd->m_g_tbl[g].m_tree_idx].GetMaxP());
}
- int child_idx = pm_bgd->m_g_tbl[i_grp_idx].m_first_child;
+ int child_idx = pm_bgd->m_g_tbl[g].m_first_child;
while (true) {
if (child_idx == 0xFFFF)
break;
MakeNodeTreeGrpRp(child_idx);
- pm_grp[i_grp_idx].m_aab.SetMin(*pm_grp[child_idx].m_aab.GetMinP());
- pm_grp[i_grp_idx].m_aab.SetMax(*pm_grp[child_idx].m_aab.GetMaxP());
+ pm_grp[g].m_aab.SetMin(*pm_grp[child_idx].m_aab.GetMinP());
+ pm_grp[g].m_aab.SetMax(*pm_grp[child_idx].m_aab.GetMaxP());
child_idx = pm_bgd->m_g_tbl[child_idx].m_next_sibling;
}
}
@@ -333,6 +401,10 @@ bool cBgW::ChkMemoryError() {
}
bool cBgW::Set(cBgD_t* pbgd, u32 flags, Mtx* pbase_mtx) {
+ #if DEBUG
+ ASSERT_SOLDHEAP();
+ #endif
+
mFlags = GLOBAL_e;
pm_vtx_tbl = NULL;
pm_tri = NULL;
@@ -340,7 +412,7 @@ bool cBgW::Set(cBgD_t* pbgd, u32 flags, Mtx* pbase_mtx) {
pm_blk = NULL;
pm_node_tree = NULL;
pm_grp = NULL;
- mMoveCounter = cM_rndF(128.0f);
+ mMoveCounter = (int)cM_rndF(128.0f) & 0xFF;
if (pbgd == NULL) {
return true;
@@ -352,38 +424,43 @@ bool cBgW::Set(cBgD_t* pbgd, u32 flags, Mtx* pbase_mtx) {
MTXIdentity(m_inv_mtx);
MTXIdentity(m_mtx);
} else {
- pm_base = *pbase_mtx;
- MTXCopy(pm_base, m_inv_mtx);
- MTXCopy(pm_base, m_mtx);
+ pm_base = pbase_mtx;
+ PSMTXCopy(*pm_base, m_inv_mtx);
+ PSMTXCopy(*pm_base, m_mtx);
}
pm_bgd = pbgd;
if (SetVtx() || SetTri()) {
FreeArea();
+ OS_REPORT_ERROR("cBgW::Set() メモリ足りません。\n");
return true;
}
pm_rwg = new cBgW_RwgElm[pm_bgd->m_t_num];
if (pm_rwg == NULL) {
+ OS_REPORT_ERROR("c_bg_w.cpp[%d] メモリ確保できません。\n", 892);
FreeArea();
return true;
}
pm_blk = new cBgW_BlkElm[pm_bgd->m_b_num];
if (pm_blk == NULL) {
+ OS_REPORT_ERROR("c_bg_w.cpp[%d] メモリ確保できません。\n", 914);
FreeArea();
return true;
}
pm_node_tree = new cBgW_NodeTree[pm_bgd->m_tree_num];
if (pm_node_tree == NULL) {
+ OS_REPORT_ERROR("c_bg_w.cpp[%d] メモリ確保できません\n", 936);
FreeArea();
return true;
}
pm_grp = new cBgW_GrpElm[pm_bgd->m_g_num];
if (pm_grp == NULL) {
+ OS_REPORT_ERROR("c_bg_w.cpp[%d] メモリ確保できません\n", 958);
FreeArea();
return true;
}
@@ -398,62 +475,73 @@ cBgW_GrpElm::~cBgW_GrpElm() {}
cBgW_GrpElm::cBgW_GrpElm() {}
-bool cBgW::RwgLineCheck(u16 i_poly_index, cBgS_LinChk* i_linchk) {
+bool cBgW::RwgLineCheck(u16 poly_index, cBgS_LinChk* plinchk) {
bool chk = false;
cM3dGTri tri;
while (true) {
- cBgD_Tri_t* tri_t = &pm_bgd->m_t_tbl[i_poly_index];
+ cBgD_Tri_t* tri_t = &pm_bgd->m_t_tbl[poly_index];
tri.setBg(&pm_vtx_tbl[tri_t->m_vtx_idx0], &pm_vtx_tbl[tri_t->m_vtx_idx1],
- &pm_vtx_tbl[tri_t->m_vtx_idx2], &pm_tri[i_poly_index].m_plane);
+ &pm_vtx_tbl[tri_t->m_vtx_idx2], &pm_tri[poly_index].m_plane);
- cXyz cross_pos;
- if (tri.cross(i_linchk->GetLinP(), &cross_pos, i_linchk->ChkFrontFlag(),
- i_linchk->ChkBackFlag()))
+ cXyz cross;
+ if (tri.cross(plinchk->GetLinP(), &cross, plinchk->ChkFrontFlag(),
+ plinchk->ChkBackFlag()))
{
- if (!ChkPolyThrough(i_poly_index, i_linchk->GetPolyPassChk())) {
- i_linchk->SetCross(cross_pos);
- i_linchk->SetPolyIndex(i_poly_index);
+ if (!ChkPolyThrough(poly_index, plinchk->GetPolyPassChk())) {
+ JUT_ASSERT(1080, !isnan(cross.x));
+ JUT_ASSERT(1081, !isnan(cross.y));
+ JUT_ASSERT(1082, !isnan(cross.z));
+ JUT_ASSERT(1088, -INF < cross.x && cross.x < INF && -INF < cross.y && cross.y < INF && -INF < cross.z && cross.z < INF);
+
+ plinchk->SetCross(cross);
+ plinchk->SetPolyIndex(poly_index);
chk = true;
}
}
- if (pm_rwg[i_poly_index].m_next == 0xFFFF) {
+ cBgW_RwgElm* element = &pm_rwg[poly_index];
+ if (element->m_next == 0xFFFF) {
break;
}
- i_poly_index = pm_rwg[i_poly_index].m_next;
+
+ poly_index = element->m_next;
}
return chk;
}
-bool cBgW::LineCheckRp(cBgS_LinChk* i_linchk, int i_idx) {
- cBgW_NodeTree* node = &pm_node_tree[i_idx];
+bool cBgW::LineCheckRp(cBgS_LinChk* plinchk, int node_index) {
+ cBgW_NodeTree* node = &pm_node_tree[node_index];
if (!cM3d_Cross_MinMaxBoxLine(node->GetMinP(), node->GetMaxP(),
- &i_linchk->GetLinP()->GetStartP(),
- &i_linchk->GetLinP()->GetEndP()))
+ &plinchk->GetLinP()->GetStartP(),
+ &plinchk->GetLinP()->GetEndP()))
{
return false;
}
- cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i_idx];
+ cBgD_Tree_t* pnode = &pm_bgd->m_tree_tbl[node_index];
bool chk = false;
- if (tree->m_flag & 1) {
- if (i_linchk->GetPreWallChk() && pm_blk[tree->m_id[0]].m_wall_idx != 0xFFFF &&
- RwgLineCheck(pm_blk[tree->m_id[0]].m_wall_idx, i_linchk))
+ if (pnode->m_flag & 1) {
+ JUT_ASSERT(1140, pnode->m_id[0] != 0xffff);
+
+ JUT_ASSERT(1142, pnode->m_id[0] >= 0 && pnode->m_id[0] < pm_bgd->m_b_num);
+
+ if (plinchk->GetPreWallChk() && pm_blk[pnode->m_id[0]].m_wall_idx != 0xFFFF &&
+ RwgLineCheck(pm_blk[pnode->m_id[0]].m_wall_idx, plinchk))
{
chk = true;
}
- if (i_linchk->GetPreGroundChk() && pm_blk[tree->m_id[0]].m_gnd_idx != 0xFFFF &&
- RwgLineCheck(pm_blk[tree->m_id[0]].m_gnd_idx, i_linchk))
+ if (plinchk->GetPreGroundChk() && pm_blk[pnode->m_id[0]].m_gnd_idx != 0xFFFF &&
+ RwgLineCheck(pm_blk[pnode->m_id[0]].m_gnd_idx, plinchk))
{
chk = true;
}
- if (i_linchk->GetPreRoofChk() && pm_blk[tree->m_id[0]].m_roof_idx != 0xFFFF &&
- RwgLineCheck(pm_blk[tree->m_id[0]].m_roof_idx, i_linchk))
+ if (plinchk->GetPreRoofChk() && pm_blk[pnode->m_id[0]].m_roof_idx != 0xFFFF &&
+ RwgLineCheck(pm_blk[pnode->m_id[0]].m_roof_idx, plinchk))
{
chk = true;
}
@@ -462,7 +550,7 @@ bool cBgW::LineCheckRp(cBgS_LinChk* i_linchk, int i_idx) {
}
for (int i = 0; i < 8; i++) {
- if (tree->m_id[i] != 0xFFFF && LineCheckRp(i_linchk, tree->m_id[i])) {
+ if (pnode->m_id[i] != 0xFFFF && LineCheckRp(plinchk, pnode->m_id[i])) {
chk = true;
}
}
@@ -470,30 +558,31 @@ bool cBgW::LineCheckRp(cBgS_LinChk* i_linchk, int i_idx) {
return chk;
}
-bool cBgW::LineCheckGrpRp(cBgS_LinChk* i_linchk, int i_grp_idx, int depth) {
- cM3dGLin* pline = i_linchk->GetLinP();
- if (!pm_grp[i_grp_idx].m_aab.Cross(pline)) {
+bool cBgW::LineCheckGrpRp(cBgS_LinChk* plinchk, int g, int depth) {
+ if (!pm_grp[g].m_aab.Cross(plinchk->GetLinP())) {
return false;
}
- if (ChkGrpThrough(i_grp_idx, i_linchk->GetGrpPassChk(), depth)) {
+ if (ChkGrpThrough(g, plinchk->GetGrpPassChk(), depth)) {
return false;
}
bool chk = false;
- if (pm_bgd->m_g_tbl[i_grp_idx].m_tree_idx != 0xFFFF &&
- LineCheckRp(i_linchk, pm_bgd->m_g_tbl[i_grp_idx].m_tree_idx))
+ if (pm_bgd->m_g_tbl[g].m_tree_idx != 0xFFFF &&
+ LineCheckRp(plinchk, pm_bgd->m_g_tbl[g].m_tree_idx))
{
chk = true;
}
- int child_idx = pm_bgd->m_g_tbl[i_grp_idx].m_first_child;
+ int child_idx = pm_bgd->m_g_tbl[g].m_first_child;
+ depth++;
+
while (true) {
if (child_idx == 0xFFFF)
break;
- if (LineCheckGrpRp(i_linchk, child_idx, depth + 1)) {
+ if (LineCheckGrpRp(plinchk, child_idx, depth)) {
chk = true;
}
child_idx = pm_bgd->m_g_tbl[child_idx].m_next_sibling;
@@ -502,19 +591,23 @@ bool cBgW::LineCheckGrpRp(cBgS_LinChk* i_linchk, int i_grp_idx, int depth) {
return chk;
}
-bool cBgW::LineCheck(cBgS_LinChk* i_linchk) {
- return LineCheckGrpRp(i_linchk, m_rootGrpIdx, 1);
+bool cBgW::LineCheck(cBgS_LinChk* plinchk) {
+ return LineCheckGrpRp(plinchk, m_rootGrpIdx, 1);
}
-bool cBgW::RwgGroundCheckCommon(f32 i_yPos, u16 i_poly_idx, cBgS_GndChk* i_gndchk) {
- if (i_yPos < i_gndchk->GetPointP().y && i_yPos > i_gndchk->GetNowY()) {
- cBgD_Tri_t* tri = &pm_bgd->m_t_tbl[i_poly_idx];
+bool cBgW::RwgGroundCheckCommon(f32 cy, u16 poly_index, cBgS_GndChk* pgndchk) {
+ if (cy < pgndchk->GetPointP().y && cy > pgndchk->GetNowY()) {
+ cBgD_Tri_t* tri = &pm_bgd->m_t_tbl[poly_index];
if (cM3d_CrossY_Tri_Front(pm_vtx_tbl[tri->m_vtx_idx0], pm_vtx_tbl[tri->m_vtx_idx1],
- pm_vtx_tbl[tri->m_vtx_idx2], (const Vec*)&i_gndchk->GetPointP()))
+ pm_vtx_tbl[tri->m_vtx_idx2], (const Vec*)&pgndchk->GetPointP()))
{
- if (!ChkPolyThrough(i_poly_idx, i_gndchk->GetPolyPassChk())) {
- i_gndchk->SetNowY(i_yPos);
- i_gndchk->SetPolyIndex(i_poly_idx);
+ if (!ChkPolyThrough(poly_index, pgndchk->GetPolyPassChk())) {
+ pgndchk->SetNowY(cy);
+ pgndchk->SetPolyIndex(poly_index);
+
+ JUT_ASSERT(1278, !isnan(cy));
+
+ JUT_ASSERT(1280, -INF < cy && cy < INF);
return true;
}
}
@@ -523,55 +616,61 @@ bool cBgW::RwgGroundCheckCommon(f32 i_yPos, u16 i_poly_idx, cBgS_GndChk* i_gndch
return false;
}
-bool cBgW::RwgGroundCheckGnd(u16 i_poly_idx, cBgS_GndChk* i_gndchk) {
+bool cBgW::RwgGroundCheckGnd(u16 poly_index, cBgS_GndChk* pgndchk) {
bool chk = false;
while (true) {
- cBgW_RwgElm* rwg = &pm_rwg[i_poly_idx];
- f32 tri_y = pm_tri[i_poly_idx].m_plane.getCrossY_NonIsZero(&i_gndchk->GetPointP());
- if (RwgGroundCheckCommon(tri_y, (u32)i_poly_idx, i_gndchk)) {
+ cBgW_RwgElm* rwg = &pm_rwg[poly_index];
+ f32 tri_y = pm_tri[poly_index].m_plane.getCrossY_NonIsZero(pgndchk->GetPointP());
+ if (RwgGroundCheckCommon(tri_y, (u32)poly_index, pgndchk)) {
chk = true;
}
if (rwg->m_next == 0xFFFF)
break;
- i_poly_idx = rwg->m_next;
+ poly_index = rwg->m_next;
}
return chk;
}
-bool cBgW::RwgGroundCheckWall(u16 i_poly_idx, cBgS_GndChk* i_gndchk) {
+bool cBgW::RwgGroundCheckWall(u16 poly_index, cBgS_GndChk* pgndchk) {
bool chk = false;
while (true) {
- cBgW_TriElm* tri = &pm_tri[i_poly_idx];
- cBgW_RwgElm* rwg = &pm_rwg[i_poly_idx];
+ cBgW_TriElm* tri = &pm_tri[poly_index];
+ cBgW_RwgElm* rwg = &pm_rwg[poly_index];
if (tri->m_plane.mNormal.y >= 0.014f) {
- f32 tri_y = tri->m_plane.getCrossY_NonIsZero(&i_gndchk->GetPointP());
- if (RwgGroundCheckCommon(tri_y, (u32)i_poly_idx, i_gndchk)) {
+ f32 tri_y = tri->m_plane.getCrossY_NonIsZero(pgndchk->GetPointP());
+ if (RwgGroundCheckCommon(tri_y, (u32)poly_index, pgndchk)) {
chk = true;
}
}
if (rwg->m_next == 0xFFFF)
break;
- i_poly_idx = rwg->m_next;
+ poly_index = rwg->m_next;
}
return chk;
}
-bool cBgW::GroundCrossRp(cBgS_GndChk* i_gndchk, int i_idx) {
+bool cBgW::GroundCrossRp(cBgS_GndChk* pgndchk, int node_index) {
+ JUT_ASSERT(1376, 0 <= node_index && node_index < pm_bgd->m_tree_num);
+
bool chk = false;
- cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i_idx];
- if ((tree->m_flag & 1)) {
- if (pm_blk[tree->m_id[0]].m_gnd_idx != 0xFFFF &&
- RwgGroundCheckGnd(pm_blk[tree->m_id[0]].m_gnd_idx, i_gndchk))
+ cBgD_Tree_t* pnode = &pm_bgd->m_tree_tbl[node_index];
+ if ((pnode->m_flag & 1)) {
+ JUT_ASSERT(1386, pnode->m_id[0] != 0xffff);
+
+ JUT_ASSERT(1387, pnode->m_id[0] >= 0 && pnode->m_id[0] < pm_bgd->m_b_num);
+
+ if (pm_blk[pnode->m_id[0]].m_gnd_idx != 0xFFFF &&
+ RwgGroundCheckGnd(pm_blk[pnode->m_id[0]].m_gnd_idx, pgndchk))
{
chk = true;
}
- if (i_gndchk->GetWallPrecheck() && pm_blk[tree->m_id[0]].m_wall_idx != 0xFFFF &&
- RwgGroundCheckWall(pm_blk[tree->m_id[0]].m_wall_idx, i_gndchk))
+ if (pgndchk->GetWallPrecheck() && pm_blk[pnode->m_id[0]].m_wall_idx != 0xFFFF &&
+ RwgGroundCheckWall(pm_blk[pnode->m_id[0]].m_wall_idx, pgndchk))
{
chk = true;
}
@@ -579,12 +678,12 @@ bool cBgW::GroundCrossRp(cBgS_GndChk* i_gndchk, int i_idx) {
}
for (int i = 0; i < 8; i++) {
- if (tree->m_id[i] != 0xFFFF) {
- cM3dGAab* aab = &pm_node_tree[tree->m_id[i]];
- if (aab->CrossY(&i_gndchk->GetPointP())) {
- if (aab->UnderPlaneYUnder(i_gndchk->GetPointP().y)) {
- if (!aab->TopPlaneYUnder(i_gndchk->GetNowY()) &&
- GroundCrossRp(i_gndchk, tree->m_id[i]))
+ if (pnode->m_id[i] != 0xFFFF) {
+ cM3dGAab* aab = &pm_node_tree[pnode->m_id[i]];
+ if (aab->CrossY(&pgndchk->GetPointP())) {
+ if (aab->UnderPlaneYUnder(pgndchk->GetPointP().y)) {
+ if (!aab->TopPlaneYUnder(pgndchk->GetNowY()) &&
+ GroundCrossRp(pgndchk, pnode->m_id[i]))
{
chk = true;
}
@@ -596,33 +695,36 @@ bool cBgW::GroundCrossRp(cBgS_GndChk* i_gndchk, int i_idx) {
return chk;
}
-bool cBgW::GroundCrossGrpRp(cBgS_GndChk* i_gndchk, int i_grp_idx, int i_depth) {
- cBgW_GrpElm* grp = &pm_grp[i_grp_idx];
- if (!grp->m_aab.CrossY(&i_gndchk->GetPointP()) ||
- !grp->m_aab.UnderPlaneYUnder(i_gndchk->GetPointP().y) ||
- grp->m_aab.TopPlaneYUnder(i_gndchk->GetNowY()))
+bool cBgW::GroundCrossGrpRp(cBgS_GndChk* pgndchk, int g, int depth) {
+ JUT_ASSERT(1441, 0 <= g && g < pm_bgd->m_g_num);
+
+ cBgW_GrpElm* grp = &pm_grp[g];
+ if (!grp->m_aab.CrossY(&pgndchk->GetPointP()) ||
+ !grp->m_aab.UnderPlaneYUnder(pgndchk->GetPointP().y) ||
+ grp->m_aab.TopPlaneYUnder(pgndchk->GetNowY()))
{
return false;
}
- if (ChkGrpThrough(i_grp_idx, i_gndchk->GetGrpPassChk(), i_depth)) {
+ if (ChkGrpThrough(g, pgndchk->GetGrpPassChk(), depth)) {
return false;
}
bool chk = false;
- if (pm_bgd->m_g_tbl[i_grp_idx].m_tree_idx != 0xFFFF &&
- GroundCrossRp(i_gndchk, pm_bgd->m_g_tbl[i_grp_idx].m_tree_idx))
+ if (pm_bgd->m_g_tbl[g].m_tree_idx != 0xFFFF &&
+ GroundCrossRp(pgndchk, pm_bgd->m_g_tbl[g].m_tree_idx))
{
chk = true;
}
- int child_idx = pm_bgd->m_g_tbl[i_grp_idx].m_first_child;
+ int child_idx = pm_bgd->m_g_tbl[g].m_first_child;
+ depth++;
while (true) {
if (child_idx == 0xFFFF)
break;
- if (GroundCrossGrpRp(i_gndchk, child_idx, i_depth + 1)) {
+ if (GroundCrossGrpRp(pgndchk, child_idx, depth)) {
chk = true;
}
@@ -632,38 +734,38 @@ bool cBgW::GroundCrossGrpRp(cBgS_GndChk* i_gndchk, int i_grp_idx, int i_depth) {
return chk;
}
-bool cBgW::GroundCross(cBgS_GndChk* i_gndchk) {
- return GroundCrossGrpRp(i_gndchk, m_rootGrpIdx, 1);
+bool cBgW::GroundCross(cBgS_GndChk* pgndchk) {
+ return GroundCrossGrpRp(pgndchk, m_rootGrpIdx, 1);
}
void cBgW::CopyOldMtx() {
if (pm_base != NULL) {
- MTXCopy(m_mtx, m_inv_mtx);
- MTXCopy(pm_base, m_mtx);
+ PSMTXCopy(m_mtx, m_inv_mtx);
+ PSMTXCopy(*pm_base, m_mtx);
}
}
void cBgW::Move() {
if (!ChkLock() && (mFlags & MOVE_BG_e)) {
if (!ChkNoCalcVtx()) {
- if (mMoveCounter >= 0xFF || m_mtx[0][0] != pm_base[0][0] ||
- m_mtx[0][1] != pm_base[0][1] || m_mtx[0][2] != pm_base[0][2] ||
- m_mtx[1][0] != pm_base[1][0] || m_mtx[1][1] != pm_base[1][1] ||
- m_mtx[1][2] != pm_base[1][2] || m_mtx[2][0] != pm_base[2][0] ||
- m_mtx[2][1] != pm_base[2][1] || m_mtx[2][2] != pm_base[2][2])
+ if (mMoveCounter >= 0xFF || m_mtx[0][0] != (*pm_base)[0][0] ||
+ m_mtx[0][1] != (*pm_base)[0][1] || m_mtx[0][2] != (*pm_base)[0][2] ||
+ m_mtx[1][0] != (*pm_base)[1][0] || m_mtx[1][1] != (*pm_base)[1][1] ||
+ m_mtx[1][2] != (*pm_base)[1][2] || m_mtx[2][0] != (*pm_base)[2][0] ||
+ m_mtx[2][1] != (*pm_base)[2][1] || m_mtx[2][2] != (*pm_base)[2][2])
{
mNeedsFullTransform = 1;
- } else if (m_mtx[0][3] == pm_base[0][3] && m_mtx[1][3] == pm_base[1][3] &&
- m_mtx[2][3] == pm_base[2][3])
+ } else if (m_mtx[0][3] == (*pm_base)[0][3] && m_mtx[1][3] == (*pm_base)[1][3] &&
+ m_mtx[2][3] == (*pm_base)[2][3])
{
- MTXCopy(pm_base, m_inv_mtx);
+ PSMTXCopy(*pm_base, m_inv_mtx);
if (!ChkFlush()) {
return;
}
} else {
- mTransVel.x = pm_base[0][3] - m_mtx[0][3];
- mTransVel.y = pm_base[1][3] - m_mtx[1][3];
- mTransVel.z = pm_base[2][3] - m_mtx[2][3];
+ mTransVel.x = (*pm_base)[0][3] - m_mtx[0][3];
+ mTransVel.y = (*pm_base)[1][3] - m_mtx[1][3];
+ mTransVel.z = (*pm_base)[2][3] - m_mtx[2][3];
mNeedsFullTransform = 0;
}
@@ -682,63 +784,80 @@ void cBgW::Move() {
}
}
-void cBgW::RwgShdwDraw(int i_idx, cBgS_ShdwDraw* i_shdw) {
+static void dummyString() {
+ OSReport("Label:%s\n");
+ OSReport("cBgW:%x\n");
+ OSReport("vtx num:%d\n");
+ OSReport("(%f,%f,%f)\n");
+}
+
+void cBgW::RwgShdwDraw(int index, cBgS_ShdwDraw* pshdw) {
+ cBgW_RwgElm* rwg;
+
while (true) {
- cBgW_RwgElm* rwg = &pm_rwg[i_idx];
- if (!ChkShdwDrawThrough(i_idx, i_shdw->GetPolyPassChk())) {
- (i_shdw->mCallbackFun)(i_shdw, pm_vtx_tbl, pm_bgd->m_t_tbl[i_idx].m_vtx_idx0,
- pm_bgd->m_t_tbl[i_idx].m_vtx_idx1,
- pm_bgd->m_t_tbl[i_idx].m_vtx_idx2, &pm_tri[i_idx].m_plane);
+ rwg = &pm_rwg[index];
+ if (!ChkShdwDrawThrough(index, pshdw->GetPolyPassChk())) {
+ #if DEBUG
+ pshdw->field_0x34++;
+ #endif
+
+ (pshdw->mCallbackFun)(pshdw, pm_vtx_tbl, pm_bgd->m_t_tbl[index].m_vtx_idx0,
+ pm_bgd->m_t_tbl[index].m_vtx_idx1,
+ pm_bgd->m_t_tbl[index].m_vtx_idx2, &pm_tri[index].m_plane);
}
if (rwg->m_next == 0xFFFF)
break;
- i_idx = rwg->m_next;
+
+ index = rwg->m_next;
+ JUT_ASSERT(1681, 0 <= index && index < pm_bgd->m_t_num);
}
}
-void cBgW::ShdwDrawRp(cBgS_ShdwDraw* i_shdw, int i_idx) {
- if (pm_node_tree[i_idx].Cross(i_shdw->GetBndP())) {
- cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i_idx];
+void cBgW::ShdwDrawRp(cBgS_ShdwDraw* pshdw, int node_index) {
+ if (pm_node_tree[node_index].Cross(pshdw->GetBndP())) {
+ cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[node_index];
if ((tree->m_flag & 1)) {
if (pm_blk[tree->m_id[0]].m_wall_idx != 0xFFFF) {
- RwgShdwDraw(pm_blk[tree->m_id[0]].m_wall_idx, i_shdw);
+ RwgShdwDraw(pm_blk[tree->m_id[0]].m_wall_idx, pshdw);
}
if (pm_blk[tree->m_id[0]].m_roof_idx != 0xFFFF) {
- RwgShdwDraw(pm_blk[tree->m_id[0]].m_roof_idx, i_shdw);
+ RwgShdwDraw(pm_blk[tree->m_id[0]].m_roof_idx, pshdw);
}
if (pm_blk[tree->m_id[0]].m_gnd_idx != 0xFFFF) {
- RwgShdwDraw(pm_blk[tree->m_id[0]].m_gnd_idx, i_shdw);
+ RwgShdwDraw(pm_blk[tree->m_id[0]].m_gnd_idx, pshdw);
}
} else {
for (int i = 0; i < 8; i++) {
if (tree->m_id[i] != 0xFFFF) {
- ShdwDrawRp(i_shdw, tree->m_id[i]);
+ ShdwDrawRp(pshdw, tree->m_id[i]);
}
}
}
}
}
-void cBgW::ShdwDrawGrpRp(cBgS_ShdwDraw* i_shdw, int i_idx) {
- if (pm_grp[i_idx].m_aab.Cross(i_shdw->GetBndP())) {
- if (pm_bgd->m_g_tbl[i_idx].m_tree_idx != 0xFFFF) {
- ShdwDrawRp(i_shdw, pm_bgd->m_g_tbl[i_idx].m_tree_idx);
+void cBgW::ShdwDrawGrpRp(cBgS_ShdwDraw* pshdw, int node_index) {
+ int child_idx;
+
+ if (pm_grp[node_index].m_aab.Cross(pshdw->GetBndP())) {
+ if (pm_bgd->m_g_tbl[node_index].m_tree_idx != 0xFFFF) {
+ ShdwDrawRp(pshdw, pm_bgd->m_g_tbl[node_index].m_tree_idx);
}
- int child_idx = pm_bgd->m_g_tbl[i_idx].m_first_child;
+ child_idx = pm_bgd->m_g_tbl[node_index].m_first_child;
while (true) {
if (child_idx == 0xFFFF) {
break;
}
- ShdwDrawGrpRp(i_shdw, child_idx);
+ ShdwDrawGrpRp(pshdw, child_idx);
child_idx = pm_bgd->m_g_tbl[child_idx].m_next_sibling;
}
}
}
-void cBgW::ShdwDraw(cBgS_ShdwDraw* i_shdw) {
- ShdwDrawGrpRp(i_shdw, m_rootGrpIdx);
+void cBgW::ShdwDraw(cBgS_ShdwDraw* pshdw) {
+ ShdwDrawGrpRp(pshdw, m_rootGrpIdx);
}
bool cBgW::ChkPolyThrough(int param_0, cBgS_PolyPassChk* param_1) {
@@ -753,16 +872,18 @@ bool cBgW::ChkGrpThrough(int param_0, cBgS_GrpPassChk* param_1, int param_2) {
return false;
}
-int cBgW::GetGrpRoomIndex(cBgS_PolyInfo const& poly) const {
- int grp_index = GetTriGrp(poly.GetPolyIndex());
+int cBgW::GetGrpRoomIndex(const cBgS_PolyInfo& polyinfo) const {
+ int poly_index = polyinfo.GetPolyIndex();
+ JUT_ASSERT(1848, 0 <= poly_index && poly_index < pm_bgd->m_t_num);
- u16 parent_idx = pm_bgd->m_g_tbl[grp_index].m_parent;
+ int grp_index = GetTriGrp(poly_index);
+ JUT_ASSERT(1850, 0 <= grp_index && grp_index < pm_bgd->m_g_num);
- if (parent_idx == 0xFFFF || pm_bgd->m_g_tbl[parent_idx].m_parent == 0xFFFF) {
+ if (pm_bgd->m_g_tbl[grp_index].m_parent == 0xFFFF || pm_bgd->m_g_tbl[pm_bgd->m_g_tbl[grp_index].m_parent].m_parent == 0xFFFF) {
return 0xFF;
}
- int room_index = pm_bgd->m_g_tbl[pm_bgd->m_g_tbl[parent_idx].m_parent].m_room_id;
+ int room_index = pm_bgd->m_g_tbl[pm_bgd->m_g_tbl[pm_bgd->m_g_tbl[grp_index].m_parent].m_parent].m_room_id;
if (room_index >= 0xFF) {
room_index = 0xFF;
}
@@ -774,79 +895,91 @@ cM3dGAab* cBgW::GetBnd() const {
return &pm_grp[m_rootGrpIdx].m_aab;
}
-void cBgW::GetTrans(cXyz* o_trans) const {
- MtxP base = pm_base;
- o_trans->x = base[0][3] - m_inv_mtx[0][3];
- o_trans->y = base[1][3] - m_inv_mtx[1][3];
- o_trans->z = base[2][3] - m_inv_mtx[2][3];
+void cBgW::GetTrans(cXyz* ptrans) const {
+ ptrans->x = (*pm_base)[0][3] - m_inv_mtx[0][3];
+ ptrans->y = (*pm_base)[1][3] - m_inv_mtx[1][3];
+ ptrans->z = (*pm_base)[2][3] - m_inv_mtx[2][3];
}
-bool cBgW::GetTriPnt(cBgS_PolyInfo const& poly, cXyz* o_pntA, cXyz* o_pntB, cXyz* o_pntC) const {
- int poly_index = poly.GetPolyIndex();
+bool cBgW::GetTriPnt(const cBgS_PolyInfo& polyinfo, cXyz* ppnt0, cXyz* ppnt1, cXyz* ppnt2) const {
+ JUT_ASSERT(1923, pm_bgd != NULL);
+
+ int poly_index = polyinfo.GetPolyIndex();
cBgD_Tri_t* tri = &pm_bgd->m_t_tbl[poly_index];
- o_pntA->set(pm_vtx_tbl[tri->m_vtx_idx0]);
- o_pntB->set(pm_vtx_tbl[tri->m_vtx_idx1]);
- o_pntC->set(pm_vtx_tbl[tri->m_vtx_idx2]);
+ ppnt0->set(pm_vtx_tbl[tri->m_vtx_idx0]);
+ ppnt1->set(pm_vtx_tbl[tri->m_vtx_idx1]);
+ ppnt2->set(pm_vtx_tbl[tri->m_vtx_idx2]);
return true;
}
-void cBgW::GetTopUnder(f32* o_top, f32* o_under) const {
- *o_under = pm_grp[m_rootGrpIdx].m_aab.GetMinP()->y;
- *o_top = pm_grp[m_rootGrpIdx].m_aab.GetMaxP()->y;
+void cBgW::GetTopUnder(f32* ptop, f32* punder) const {
+ *punder = pm_grp[m_rootGrpIdx].m_aab.GetMinP()->y;
+ *ptop = pm_grp[m_rootGrpIdx].m_aab.GetMaxP()->y;
}
-cM3dGPla cBgW::GetTriPla(cBgS_PolyInfo const& poly) const {
- int poly_index = poly.GetPolyIndex();
+cM3dGPla cBgW::GetTriPla(const cBgS_PolyInfo& polyinfo) const {
+ int poly_index = polyinfo.GetPolyIndex();
JUT_ASSERT(1956, 0 <= poly_index && poly_index < pm_bgd->m_t_num);
return pm_tri[poly_index].m_plane;
}
-u32 cBgW::GetGrpInf(cBgS_PolyInfo const& poly) const {
- int grp = GetTriGrp(poly.GetPolyIndex());
- return pm_bgd->m_g_tbl[grp].m_info;
+u32 cBgW::GetGrpInf(const cBgS_PolyInfo& polyinfo) const {
+ int poly_index = polyinfo.GetPolyIndex();
+ JUT_ASSERT(1969, 0 <= poly_index && poly_index < pm_bgd->m_t_num);
+
+ int grp_id = GetTriGrp(poly_index);
+ JUT_ASSERT(1971, 0 <= grp_id && grp_id < pm_bgd->m_g_num);
+
+ return pm_bgd->m_g_tbl[grp_id].m_info;
}
int cBgW::GetPolyInfId(int poly_index) const {
+ JUT_ASSERT(1983, 0 <= poly_index && poly_index < pm_bgd->m_t_num);
+
return pm_bgd->m_t_tbl[poly_index].m_id;
}
u32 cBgW::GetPolyInf0(int poly_index, u32 mask, u32 shift) const {
int id = GetPolyInfId(poly_index);
+ JUT_ASSERT(2024, 0 <= id && id < pm_bgd->m_ti_num);
+
return (pm_bgd->m_ti_tbl[id].m_info0 & mask) >> shift;
}
u32 cBgW::GetMaskPolyInf0_NoShift(int poly_index, u32 mask) const {
int id = GetPolyInfId(poly_index);
+ JUT_ASSERT(2039, 0 <= id && id < pm_bgd->m_ti_num);
+
return (pm_bgd->m_ti_tbl[id].m_info0 & mask);
}
-int dBgW::GetExitId(cBgS_PolyInfo const& poly) {
- return GetPolyInf0(poly.GetPolyIndex(), 0x3F, 0);
+int dBgW::GetExitId(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf0(polyinfo.GetPolyIndex(), 0x3F, 0);
}
-int dBgW::GetPolyColor(cBgS_PolyInfo const& poly) {
- return GetPolyInf0(poly.GetPolyIndex(), 0x3FC0, 6);
+int dBgW::GetPolyColor(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf0(polyinfo.GetPolyIndex(), 0x3FC0, 6);
}
-BOOL dBgW::GetHorseNoEntry(cBgS_PolyInfo const& poly) {
- return GetPolyInf0(poly.GetPolyIndex(), 0x200000, 21);
+BOOL dBgW::GetHorseNoEntry(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf0(polyinfo.GetPolyIndex(), 0x200000, 21);
}
-int dBgW::GetSpecialCode(cBgS_PolyInfo const& poly) {
- return GetSpecialCode(poly.GetPolyIndex());
+int dBgW::GetSpecialCode(const cBgS_PolyInfo& polyinfo) {
+ return GetSpecialCode(polyinfo.GetPolyIndex());
}
int dBgW::GetSpecialCode(int poly_index) {
return GetPolyInf0(poly_index, 0xF000000, 24);
}
-int dBgW::GetMagnetCode(cBgS_PolyInfo const& poly) {
- return GetPolyInf0(poly.GetPolyIndex(), 0x30000000, 28);
+int dBgW::GetMagnetCode(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf0(polyinfo.GetPolyIndex(), 0x30000000, 28);
}
-int dBgW::GetMonkeyBarsCode(cBgS_PolyInfo const& poly) {
- return GetPolyInf0(poly.GetPolyIndex(), 0x80000000, 31);
+int dBgW::GetMonkeyBarsCode(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf0(polyinfo.GetPolyIndex(), 0x80000000, 31);
}
u32 dBgW::GetPolyObjThrough(int poly_index) {
@@ -891,31 +1024,35 @@ u32 dBgW::GetUnderwaterRoofCode(int poly_index) {
u32 cBgW::GetPolyInf1(int poly_index, u32 mask, u32 shift) const {
int id = GetPolyInfId(poly_index);
+ JUT_ASSERT(2259, 0 <= id && id < pm_bgd->m_ti_num);
+
return (pm_bgd->m_ti_tbl[id].m_info1 & mask) >> shift;
}
-int dBgW::GetLinkNo(cBgS_PolyInfo const& poly) {
- return GetPolyInf1(poly.GetPolyIndex(), 0xFF, 0);
+int dBgW::GetLinkNo(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf1(polyinfo.GetPolyIndex(), 0xFF, 0);
}
-int dBgW::GetWallCode(cBgS_PolyInfo const& poly) {
- return GetPolyInf1(poly.GetPolyIndex(), 0xF00, 8);
+int dBgW::GetWallCode(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf1(polyinfo.GetPolyIndex(), 0xF00, 8);
}
-int dBgW::GetPolyAtt0(cBgS_PolyInfo const& poly) {
- return GetPolyInf1(poly.GetPolyIndex(), 0xF000, 12);
+int dBgW::GetPolyAtt0(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf1(polyinfo.GetPolyIndex(), 0xF000, 12);
}
-int dBgW::GetPolyAtt1(cBgS_PolyInfo const& poly) {
- return GetPolyInf1(poly.GetPolyIndex(), 0x70000, 16);
+int dBgW::GetPolyAtt1(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf1(polyinfo.GetPolyIndex(), 0x70000, 16);
}
-int dBgW::GetGroundCode(cBgS_PolyInfo const& poly) {
- return GetPolyInf1(poly.GetPolyIndex(), 0xF80000, 19);
+int dBgW::GetGroundCode(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf1(polyinfo.GetPolyIndex(), 0xF80000, 19);
}
u32 cBgW::GetMaskPolyInf1_NoShift(int poly_index, u32 mask) const {
int id = GetPolyInfId(poly_index);
+ JUT_ASSERT(2324, 0 <= id && id < pm_bgd->m_ti_num);
+
return (pm_bgd->m_ti_tbl[id].m_info1 & mask);
}
@@ -929,26 +1066,30 @@ u32 dBgW::GetAttackThrough(int poly_index) {
u32 cBgW::GetPolyInf2(int poly_index, u32 mask, u32 shift) const {
int id = GetPolyInfId(poly_index);
+ JUT_ASSERT(2368, 0 <= id && id < pm_bgd->m_ti_num);
+
return (pm_bgd->m_ti_tbl[id].m_info2 & mask) >> shift;
}
-int dBgW::GetCamMoveBG(cBgS_PolyInfo const& poly) {
- return GetPolyInf2(poly.GetPolyIndex(), 0xFF, 0);
+int dBgW::GetCamMoveBG(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf2(polyinfo.GetPolyIndex(), 0xFF, 0);
}
-int dBgW::GetRoomCamId(cBgS_PolyInfo const& poly) {
- return GetPolyInf2(poly.GetPolyIndex(), 0xFF00, 8);
+int dBgW::GetRoomCamId(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf2(polyinfo.GetPolyIndex(), 0xFF00, 8);
}
-int dBgW::GetRoomPathId(cBgS_PolyInfo const& poly) {
- return GetPolyInf2(poly.GetPolyIndex(), 0xFF0000, 16);
+int dBgW::GetRoomPathId(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf2(polyinfo.GetPolyIndex(), 0xFF0000, 16);
}
-int dBgW::GetRoomPathPntNo(cBgS_PolyInfo const& poly) {
- return GetPolyInf2(poly.GetPolyIndex(), 0xFF000000, 24);
+int dBgW::GetRoomPathPntNo(const cBgS_PolyInfo& polyinfo) {
+ return GetPolyInf2(polyinfo.GetPolyIndex(), 0xFF000000, 24);
}
int cBgW::GetTriGrp(int poly_index) const {
+ JUT_ASSERT(2440, 0 <= poly_index && poly_index < pm_bgd->m_t_num);
+
return pm_bgd->m_t_tbl[poly_index].m_grp;
}
@@ -964,6 +1105,111 @@ bool cBgW::ChkMoveBg() const {
return mFlags & MOVE_BG_e;
}
+#if DEBUG
+void dBgW::DrawBox() const {
+ cXyz min;
+ cXyz max;
+ cXyz points[8];
+
+ min = *pm_grp[m_rootGrpIdx].m_aab.GetMinP();
+ max = *pm_grp[m_rootGrpIdx].m_aab.GetMaxP();
+
+ points[0].x = min.x;
+ points[0].y = max.y;
+ points[0].z = min.z;
+
+ points[1].x = max.x;
+ points[1].y = max.y;
+ points[1].z = min.z;
+
+ points[2].x = min.x;
+ points[2].y = max.y;
+ points[2].z = max.z;
+
+ points[3].x = max.x;
+ points[3].y = max.y;
+ points[3].z = max.z;
+
+ points[4].x = min.x;
+ points[4].y = min.y;
+ points[4].z = min.z;
+
+ points[5].x = max.x;
+ points[5].y = min.y;
+ points[5].z = min.z;
+
+ points[6].x = min.x;
+ points[6].y = min.y;
+ points[6].z = max.z;
+
+ points[7].x = max.x;
+ points[7].y = min.y;
+ points[7].z = max.z;
+
+ dDbVw_drawCube8pXlu(points, (GXColor){0, 0xFF, 0, 0x64});
+}
+
+void dBgW::DebugDraw() const {
+ GXColor ground_color = {0xFF, 0, 0, 0x80};
+ GXColor roof_color = {0, 0, 0xFF, 0x80};
+ GXColor wall_color = {0, 0xFF, 0, 0x80};
+
+ cBgD_Tri_t* t_tbl = pm_bgd->m_t_tbl;
+ for (int i = 0; i < pm_bgd->m_t_num; i++) {
+ cXyz normal;
+ normal = pm_tri[i].m_plane.mNormal;
+
+ cBgD_Vtx_t* v0 = &pm_vtx_tbl[t_tbl[i].m_vtx_idx0];
+ cBgD_Vtx_t* v1 = &pm_vtx_tbl[t_tbl[i].m_vtx_idx1];
+ cBgD_Vtx_t* v2 = &pm_vtx_tbl[t_tbl[i].m_vtx_idx2];
+
+ cXyz points[3];
+ points[0].set(*v0);
+ points[1].set(*v1);
+ points[2].set(*v2);
+
+ points[0] += normal;
+ points[1] += normal;
+ points[2] += normal;
+
+ GXColor* pcolor;
+ if (cBgW_CheckBGround(normal.y)) {
+ pcolor = &ground_color;
+ } else if (cBgW_CheckBRoof(normal.y)) {
+ pcolor = &roof_color;
+ } else {
+ pcolor = &wall_color;
+ }
+
+ dDbVw_drawTriangleXlu(points, *pcolor, TRUE);
+ }
+}
+
+void dBgW::DrawPoly(const cBgS_PolyInfo& polyinfo, const GXColor& color) const {
+ int poly_index = polyinfo.GetPolyIndex();
+ JUT_ASSERT(2579, 0 <= poly_index && poly_index < pm_bgd->m_t_num);
+
+ cXyz normal;
+ normal = pm_tri[poly_index].m_plane.mNormal;
+
+ cBgD_Tri_t* t_tbl = pm_bgd->m_t_tbl;
+ cBgD_Vtx_t* v0 = &pm_vtx_tbl[t_tbl[poly_index].m_vtx_idx0];
+ cBgD_Vtx_t* v1 = &pm_vtx_tbl[t_tbl[poly_index].m_vtx_idx1];
+ cBgD_Vtx_t* v2 = &pm_vtx_tbl[t_tbl[poly_index].m_vtx_idx2];
+
+ cXyz points[3];
+ points[0].set(*v0);
+ points[1].set(*v1);
+ points[2].set(*v2);
+
+ points[0] += normal;
+ points[1] += normal;
+ points[2] += normal;
+
+ dDbVw_drawTriangleXlu(points, color, TRUE);
+}
+#endif
+
dBgW::dBgW() {
m_crr_func = NULL;
m_ride_callback = NULL;
@@ -976,41 +1222,44 @@ void dBgW::Move() {
cBgW::Move();
}
-void dBgW::positionWallCorrect(dBgS_Acch* i_acch, f32 i_dist, cM3dGPla& plane, cXyz* pupper_pos,
+void dBgW::positionWallCorrect(dBgS_Acch* pwi, f32 dist, cM3dGPla& plane, cXyz* pupper_pos,
f32 speed) {
- i_acch->SetWallHit();
+ pwi->SetWallHit();
- f32 speed_correct = speed - 1.0f;
- if (speed_correct < 0.0f) {
- speed_correct = 0.0f;
+ speed -= 1.0f;
+ if (speed < 0.0f) {
+ speed = 0.0f;
}
- f32 move = speed_correct * i_dist;
- pupper_pos->x += move * plane.mNormal.x;
- pupper_pos->z += move * plane.mNormal.z;
+ f32 move = speed * dist;
+ pupper_pos->x += move * plane.GetNP()->x;
+ pupper_pos->z += move * plane.GetNP()->z;
+
+ JUT_ASSERT(2682, !isnan(pupper_pos->x));
+ JUT_ASSERT(2683, !isnan(pupper_pos->z));
}
-bool dBgW::RwgWallCorrect(dBgS_Acch* pwi, u16 i_poly_idx) {
+bool dBgW::RwgWallCorrect(dBgS_Acch* pwi, u16 poly_index) {
bool correct = false;
while (true) {
- cBgW_RwgElm* rwg_elm = &pm_rwg[i_poly_idx];
+ cBgW_RwgElm* rwg_elm = &pm_rwg[poly_index];
- if (!ChkPolyThrough(i_poly_idx, pwi->GetPolyPassChk())) {
- cBgW_TriElm* tri = &pm_tri[i_poly_idx];
+ if (!ChkPolyThrough(poly_index, pwi->GetPolyPassChk())) {
+ cBgW_TriElm* tri = &pm_tri[poly_index];
f32 sp68 = JMAFastSqrt(tri->m_plane.GetNP()->x * tri->m_plane.GetNP()->x +
tri->m_plane.GetNP()->z * tri->m_plane.GetNP()->z);
if (cM3d_IsZero(sp68)) {
if (rwg_elm->m_next != 0xFFFF) {
- i_poly_idx = rwg_elm->m_next;
+ poly_index = rwg_elm->m_next;
continue;
}
break;
}
f32 sp6C = 1.0f / sp68;
- cBgD_Tri_t* tri_data = &pm_bgd->m_t_tbl[i_poly_idx];
+ cBgD_Tri_t* tri_data = &pm_bgd->m_t_tbl[poly_index];
int cir_index = 0;
while (cir_index < pwi->GetTblSize()) {
@@ -1119,10 +1368,10 @@ bool dBgW::RwgWallCorrect(dBgS_Acch* pwi, u16 i_poly_idx) {
JMAFastSqrt(spC8));
pwi->CalcMovePosWork();
pwi->SetWallCirHit(cir_index);
- pwi->SetWallPolyIndex(cir_index, i_poly_idx);
- pwi->SetWallAngleY(cir_index,
- cM_atan2s(tri->m_plane.GetNP()->x,
- tri->m_plane.GetNP()->z));
+ pwi->SetWallPolyIndex(cir_index, poly_index);
+
+ s16 sp10 = cM_atan2s(tri->m_plane.GetNP()->x, tri->m_plane.GetNP()->z);
+ pwi->SetWallAngleY(cir_index, sp10);
correct = true;
} else {
cx0 -= sp50.x;
@@ -1130,9 +1379,9 @@ bool dBgW::RwgWallCorrect(dBgS_Acch* pwi, u16 i_poly_idx) {
cx1 -= sp50.x;
cy1 -= sp50.z;
- JUT_ASSERT(0, pwi->GetPos()->x ==
+ JUT_ASSERT(2920, pwi->GetPos()->x ==
pwi->GetWallCirP(cir_index)->GetCx());
- JUT_ASSERT(0, pwi->GetPos()->z ==
+ JUT_ASSERT(2922, pwi->GetPos()->z ==
pwi->GetWallCirP(cir_index)->GetCy());
f32 spE0 =
@@ -1143,12 +1392,12 @@ bool dBgW::RwgWallCorrect(dBgS_Acch* pwi, u16 i_poly_idx) {
f32 onx = -tri->m_plane.GetNP()->x;
f32 ony = -tri->m_plane.GetNP()->z;
- JUT_ASSERT(0, !(cM3d_IsZero(onx) && cM3d_IsZero(ony)));
+ JUT_ASSERT(2938, !(cM3d_IsZero(onx) && cM3d_IsZero(ony)));
if (spE0 < spE4) {
if (!(spE0 > spDC) && !(fabsf(spE0 - spDC) < 0.008f)) {
- JUT_ASSERT(0, !isnan(cx0));
- JUT_ASSERT(0, !isnan(cy0));
+ JUT_ASSERT(2950, !isnan(cx0));
+ JUT_ASSERT(2951, !isnan(cy0));
f32 spF0, spF4;
cM2d_CrossCirLin(*pwi->GetWallCirP(cir_index), cx0, cy0,
@@ -1156,21 +1405,20 @@ bool dBgW::RwgWallCorrect(dBgS_Acch* pwi, u16 i_poly_idx) {
pwi->GetPos()->x += cx0 - spF0;
pwi->GetPos()->z += cy0 - spF4;
- JUT_ASSERT(0, !isnan(pwi->GetPos()->x));
- JUT_ASSERT(0, !isnan(pwi->GetPos()->z));
+ JUT_ASSERT(2968, !isnan(pwi->GetPos()->x));
+ JUT_ASSERT(2969, !isnan(pwi->GetPos()->z));
pwi->CalcMovePosWork();
pwi->SetWallCirHit(cir_index);
- pwi->SetWallPolyIndex(cir_index, i_poly_idx);
- pwi->SetWallAngleY(cir_index,
- cM_atan2s(tri->m_plane.GetNP()->x,
- tri->m_plane.GetNP()->z));
+ pwi->SetWallPolyIndex(cir_index, poly_index);
+ s16 spE = cM_atan2s(tri->m_plane.GetNP()->x, tri->m_plane.GetNP()->z);
+ pwi->SetWallAngleY(cir_index, spE);
correct = true;
pwi->SetWallHit();
}
} else if (!(spE4 > spDC) && !(fabsf(spE4 - spDC) < 0.008f)) {
- JUT_ASSERT(0, !isnan(cx1));
- JUT_ASSERT(0, !isnan(cy1));
+ JUT_ASSERT(2999, !isnan(cx1));
+ JUT_ASSERT(3000, !isnan(cy1));
f32 spF8, spFC;
cM2d_CrossCirLin(*pwi->GetWallCirP(cir_index), cx1, cy1,
@@ -1178,15 +1426,15 @@ bool dBgW::RwgWallCorrect(dBgS_Acch* pwi, u16 i_poly_idx) {
pwi->GetPos()->x += cx1 - spF8;
pwi->GetPos()->z += cy1 - spFC;
- JUT_ASSERT(0, !isnan(pwi->GetPos()->x));
- JUT_ASSERT(0, !isnan(pwi->GetPos()->z));
+ JUT_ASSERT(3016, !isnan(pwi->GetPos()->x));
+ JUT_ASSERT(3017, !isnan(pwi->GetPos()->z));
pwi->CalcMovePosWork();
pwi->SetWallCirHit(cir_index);
- pwi->SetWallPolyIndex(cir_index, i_poly_idx);
- pwi->SetWallAngleY(cir_index,
- cM_atan2s(tri->m_plane.GetNP()->x,
- tri->m_plane.GetNP()->z));
+ pwi->SetWallPolyIndex(cir_index, poly_index);
+
+ s16 spC = cM_atan2s(tri->m_plane.GetNP()->x, tri->m_plane.GetNP()->z);
+ pwi->SetWallAngleY(cir_index, spC);
correct = true;
pwi->SetWallHit();
}
@@ -1204,27 +1452,34 @@ bool dBgW::RwgWallCorrect(dBgS_Acch* pwi, u16 i_poly_idx) {
break;
}
- i_poly_idx = rwg_elm->m_next;
+ poly_index = rwg_elm->m_next;
}
return correct;
}
-bool dBgW::WallCorrectRp(dBgS_Acch* i_acch, int i_idx) {
- if (!pm_node_tree[i_idx].Cross(i_acch->GetWallBmdCylP())) {
+bool dBgW::WallCorrectRp(dBgS_Acch* pwi, int node_index) {
+ JUT_ASSERT(3060, 0 <= node_index && node_index < pm_bgd->m_tree_num);
+
+ cBgW_NodeTree* tree = &pm_node_tree[node_index];
+ if (!tree->Cross(pwi->GetWallBmdCylP())) {
return false;
}
- cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i_idx];
+ cBgD_Tree_t* pnode = &pm_bgd->m_tree_tbl[node_index];
bool chk = false;
- if ((tree->m_flag & 1)) {
- if (pm_blk[tree->m_id[0]].m_wall_idx != 0xFFFF &&
- RwgWallCorrect(i_acch, pm_blk[tree->m_id[0]].m_wall_idx))
+ if ((pnode->m_flag & 1)) {
+ JUT_ASSERT(3076, pnode->m_id[0] != 0xffff);
+
+ JUT_ASSERT(3078, pnode->m_id[0] >= 0 && pnode->m_id[0] < pm_bgd->m_b_num);
+
+ if (pm_blk[pnode->m_id[0]].m_wall_idx != 0xFFFF &&
+ RwgWallCorrect(pwi, pm_blk[pnode->m_id[0]].m_wall_idx))
{
chk = true;
}
- if (pm_blk[tree->m_id[0]].m_roof_idx != 0xFFFF &&
- RwgWallCorrect(i_acch, pm_blk[tree->m_id[0]].m_roof_idx))
+ if (pm_blk[pnode->m_id[0]].m_roof_idx != 0xFFFF &&
+ RwgWallCorrect(pwi, pm_blk[pnode->m_id[0]].m_roof_idx))
{
chk = true;
}
@@ -1232,7 +1487,7 @@ bool dBgW::WallCorrectRp(dBgS_Acch* i_acch, int i_idx) {
}
for (int i = 0; i < 8; i++) {
- if (tree->m_id[i] != 0xFFFF && WallCorrectRp(i_acch, tree->m_id[i])) {
+ if (pnode->m_id[i] != 0xFFFF && WallCorrectRp(pwi, pnode->m_id[i])) {
chk = true;
}
}
@@ -1240,28 +1495,31 @@ bool dBgW::WallCorrectRp(dBgS_Acch* i_acch, int i_idx) {
return chk;
}
-bool dBgW::WallCorrectGrpRp(dBgS_Acch* i_acch, int i_idx, int i_depth) {
- if (!pm_grp[i_idx].m_aab.Cross(i_acch->GetWallBmdCylP())) {
+bool dBgW::WallCorrectGrpRp(dBgS_Acch* pwi, int g, int depth) {
+ JUT_ASSERT(3117, 0 <= g && g < pm_bgd->m_g_num);
+
+ if (!pm_grp[g].m_aab.Cross(pwi->GetWallBmdCylP())) {
return false;
}
- if (ChkGrpThrough(i_idx, i_acch->GetGrpPassChk(), i_depth)) {
+ if (ChkGrpThrough(g, pwi->GetGrpPassChk(), depth)) {
return false;
}
bool chk = false;
- if (pm_bgd->m_g_tbl[i_idx].m_tree_idx != 0xFFFF &&
- WallCorrectRp(i_acch, pm_bgd->m_g_tbl[i_idx].m_tree_idx))
+ if (pm_bgd->m_g_tbl[g].m_tree_idx != 0xFFFF &&
+ WallCorrectRp(pwi, pm_bgd->m_g_tbl[g].m_tree_idx))
{
chk = true;
}
- int child_idx = pm_bgd->m_g_tbl[i_idx].m_first_child;
+ int child_idx = pm_bgd->m_g_tbl[g].m_first_child;
+ depth++;
while (true) {
if (child_idx == 0xFFFF) {
break;
}
- if (WallCorrectGrpRp(i_acch, child_idx, i_depth + 1)) {
+ if (WallCorrectGrpRp(pwi, child_idx, depth)) {
chk = true;
}
child_idx = pm_bgd->m_g_tbl[child_idx].m_next_sibling;
@@ -1270,8 +1528,8 @@ bool dBgW::WallCorrectGrpRp(dBgS_Acch* i_acch, int i_idx, int i_depth) {
return chk;
}
-bool dBgW::WallCorrect(dBgS_Acch* pacch) {
- return WallCorrectGrpRp(pacch, m_rootGrpIdx, 1);
+bool dBgW::WallCorrect(dBgS_Acch* pwi) {
+ return WallCorrectGrpRp(pwi, m_rootGrpIdx, 1);
}
struct wcs_data {
@@ -1286,24 +1544,24 @@ static wcs_data* l_start;
static int l_wcsbuf_num;
-void dBgW::RwgWallCorrectSort(dBgS_Acch* i_acch, u16 i_poly_idx) {
+void dBgW::RwgWallCorrectSort(dBgS_Acch* pwi, u16 poly_index) {
while (true) {
- cBgW_RwgElm* rwg_elm = &pm_rwg[i_poly_idx];
+ cBgW_RwgElm* rwg_elm = &pm_rwg[poly_index];
- if (!ChkPolyThrough(i_poly_idx, i_acch->GetPolyPassChk())) {
- cBgW_TriElm* tri_elm = &pm_tri[i_poly_idx];
+ if (!ChkPolyThrough(poly_index, pwi->GetPolyPassChk())) {
+ cBgW_TriElm* tri_elm = &pm_tri[poly_index];
f32 var_f30 = JMAFastSqrt(tri_elm->m_plane.GetNP()->x * tri_elm->m_plane.GetNP()->x +
tri_elm->m_plane.GetNP()->z * tri_elm->m_plane.GetNP()->z);
if (cM3d_IsZero(var_f30)) {
if (rwg_elm->m_next != 0xFFFF) {
- i_poly_idx = rwg_elm->m_next;
+ poly_index = rwg_elm->m_next;
continue;
}
break;
}
- fopAc_ac_c* actor = i_acch->getMyAc();
+ fopAc_ac_c* actor = pwi->getMyAc();
cXyz sp88;
sp88.x = cM_ssin(actor->current.angle.y);
sp88.z = cM_scos(actor->current.angle.y);
@@ -1312,52 +1570,67 @@ void dBgW::RwgWallCorrectSort(dBgS_Acch* i_acch, u16 i_poly_idx) {
f32 var_f31 = var_f29 * ((sp88.x * tri_elm->m_plane.GetNP()->x) +
(sp88.z * tri_elm->m_plane.GetNP()->z));
- wcs_data* data = l_start;
- if (data == NULL) {
+ if (l_start == NULL) {
if (l_wcsbuf_num < 84) {
l_wcsbuf[l_wcsbuf_num].field_0x0 = var_f31;
- l_wcsbuf[l_wcsbuf_num].poly_idx = i_poly_idx;
+ l_wcsbuf[l_wcsbuf_num].poly_idx = poly_index;
l_wcsbuf[l_wcsbuf_num].next = NULL;
l_start = &l_wcsbuf[l_wcsbuf_num];
l_wcsbuf_num++;
+ } else {
+ #if DEBUG
+ lbl_8074C7F0 = 1;
+ #endif
}
- } else if (i_poly_idx != l_start->poly_idx) {
+ } else if (poly_index != l_start->poly_idx) {
if (var_f31 > l_start->field_0x0) {
if (l_wcsbuf_num < 84) {
l_wcsbuf[l_wcsbuf_num].field_0x0 = var_f31;
- l_wcsbuf[l_wcsbuf_num].poly_idx = i_poly_idx;
+ l_wcsbuf[l_wcsbuf_num].poly_idx = poly_index;
l_wcsbuf[l_wcsbuf_num].next = l_start;
l_start = &l_wcsbuf[l_wcsbuf_num];
l_wcsbuf_num++;
+ } else {
+ #if DEBUG
+ lbl_8074C7F0 = 1;
+ #endif
}
} else {
+ wcs_data* data = l_start;
while (true) {
- wcs_data* tmp_data = data->next;
- if (tmp_data == NULL) {
+ if (data->next == NULL) {
if (l_wcsbuf_num < 84) {
l_wcsbuf[l_wcsbuf_num].field_0x0 = var_f31;
- l_wcsbuf[l_wcsbuf_num].poly_idx = i_poly_idx;
+ l_wcsbuf[l_wcsbuf_num].poly_idx = poly_index;
l_wcsbuf[l_wcsbuf_num].next = NULL;
data->next = &l_wcsbuf[l_wcsbuf_num];
l_wcsbuf_num++;
+ } else {
+ #if DEBUG
+ lbl_8074C7F0 = 1;
+ #endif
}
break;
- } else if (i_poly_idx == tmp_data->poly_idx) {
+ } else if (poly_index == data->next->poly_idx) {
break;
}
- if (var_f31 > tmp_data->field_0x0) {
+ if (var_f31 > data->next->field_0x0) {
if (l_wcsbuf_num < 84) {
l_wcsbuf[l_wcsbuf_num].field_0x0 = var_f31;
- l_wcsbuf[l_wcsbuf_num].poly_idx = i_poly_idx;
+ l_wcsbuf[l_wcsbuf_num].poly_idx = poly_index;
l_wcsbuf[l_wcsbuf_num].next = data->next;
data->next = &l_wcsbuf[l_wcsbuf_num];
l_wcsbuf_num++;
+ } else {
+ #if DEBUG
+ lbl_8074C7F0 = 1;
+ #endif
}
break;
}
- data = tmp_data;
+ data = data->next;
}
}
}
@@ -1367,52 +1640,64 @@ void dBgW::RwgWallCorrectSort(dBgS_Acch* i_acch, u16 i_poly_idx) {
return;
}
- i_poly_idx = rwg_elm->m_next;
+ poly_index = rwg_elm->m_next;
}
}
-void dBgW::WallCorrectRpSort(dBgS_Acch* i_acch, int i_idx) {
- if (!pm_node_tree[i_idx].Cross(i_acch->GetWallBmdCylP())) {
+void dBgW::WallCorrectRpSort(dBgS_Acch* pwi, int node_index) {
+ JUT_ASSERT(3330, 0 <= node_index && node_index < pm_bgd->m_tree_num);
+
+ cBgW_NodeTree* tree = &pm_node_tree[node_index];
+ if (!tree->Cross(pwi->GetWallBmdCylP())) {
return;
}
- cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i_idx];
- if ((tree->m_flag & 1)) {
- if (pm_blk[tree->m_id[0]].m_wall_idx != 0xFFFF) {
- RwgWallCorrectSort(i_acch, pm_blk[tree->m_id[0]].m_wall_idx);
+ cBgD_Tree_t* pnode = &pm_bgd->m_tree_tbl[node_index];
+ if ((pnode->m_flag & 1)) {
+ JUT_ASSERT(3345, pnode->m_id[0] != 0xffff);
+
+ JUT_ASSERT(3347, pnode->m_id[0] >= 0 && pnode->m_id[0] < pm_bgd->m_b_num);
+
+ if (pm_blk[pnode->m_id[0]].m_wall_idx != 0xFFFF) {
+ RwgWallCorrectSort(pwi, pm_blk[pnode->m_id[0]].m_wall_idx);
}
- if (pm_blk[tree->m_id[0]].m_roof_idx != 0xFFFF) {
- RwgWallCorrectSort(i_acch, pm_blk[tree->m_id[0]].m_roof_idx);
+ if (pm_blk[pnode->m_id[0]].m_roof_idx != 0xFFFF) {
+ RwgWallCorrectSort(pwi, pm_blk[pnode->m_id[0]].m_roof_idx);
}
return;
}
for (int i = 0; i < 8; i++) {
- if (tree->m_id[i] != 0xFFFF) {
- WallCorrectRpSort(i_acch, tree->m_id[i]);
+ if (pnode->m_id[i] != 0xFFFF) {
+ WallCorrectRpSort(pwi, pnode->m_id[i]);
}
}
}
-bool dBgW::WallCorrectGrpRpSort(dBgS_Acch* i_acch, int i_idx, int i_depth) {
- if (!pm_grp[i_idx].m_aab.Cross(i_acch->GetWallBmdCylP())) {
+bool dBgW::WallCorrectGrpRpSort(dBgS_Acch* pwi, int g, int depth) {
+ JUT_ASSERT(3378, 0 <= g && g < pm_bgd->m_g_num);
+
+ if (!pm_grp[g].m_aab.Cross(pwi->GetWallBmdCylP())) {
return false;
}
- if (ChkGrpThrough(i_idx, i_acch->GetGrpPassChk(), i_depth)) {
+ if (ChkGrpThrough(g, pwi->GetGrpPassChk(), depth)) {
return false;
}
- if (pm_bgd->m_g_tbl[i_idx].m_tree_idx != 0xFFFF) {
- WallCorrectRpSort(i_acch, pm_bgd->m_g_tbl[i_idx].m_tree_idx);
+ bool var_r25 = false;
+
+ if (pm_bgd->m_g_tbl[g].m_tree_idx != 0xFFFF) {
+ WallCorrectRpSort(pwi, pm_bgd->m_g_tbl[g].m_tree_idx);
}
- int child_idx = pm_bgd->m_g_tbl[i_idx].m_first_child;
+ int child_idx = pm_bgd->m_g_tbl[g].m_first_child;
+ depth++;
while (true) {
if (child_idx == 0xFFFF) {
break;
}
- WallCorrectGrpRpSort(i_acch, child_idx, i_depth + 1);
+ WallCorrectGrpRpSort(pwi, child_idx, depth);
child_idx = pm_bgd->m_g_tbl[child_idx].m_next_sibling;
}
@@ -1546,8 +1831,8 @@ bool dBgW::WallCorrectSort(dBgS_Acch* pwi) {
pwi->CalcMovePosWork();
pwi->SetWallCirHit(cir_index);
pwi->SetWallPolyIndex(cir_index, poly_index);
- pwi->SetWallAngleY(cir_index, cM_atan2s(tri->m_plane.GetNP()->x,
- tri->m_plane.GetNP()->z));
+ s16 sp10 = cM_atan2s(tri->m_plane.GetNP()->x, tri->m_plane.GetNP()->z);
+ pwi->SetWallAngleY(cir_index, sp10);
correct = true;
} else {
cx0 -= sp50.x;
@@ -1555,9 +1840,9 @@ bool dBgW::WallCorrectSort(dBgS_Acch* pwi) {
cx1 -= sp50.x;
cy1 -= sp50.z;
- JUT_ASSERT(0, pwi->GetPos()->x ==
+ JUT_ASSERT(3625, pwi->GetPos()->x ==
pwi->GetWallCirP(cir_index)->GetCx());
- JUT_ASSERT(0, pwi->GetPos()->z ==
+ JUT_ASSERT(3627, pwi->GetPos()->z ==
pwi->GetWallCirP(cir_index)->GetCy());
f32 spE0 =
@@ -1568,12 +1853,12 @@ bool dBgW::WallCorrectSort(dBgS_Acch* pwi) {
f32 onx = -tri->m_plane.GetNP()->x;
f32 ony = -tri->m_plane.GetNP()->z;
- JUT_ASSERT(0, !(cM3d_IsZero(onx) && cM3d_IsZero(ony)));
+ JUT_ASSERT(3643, !(cM3d_IsZero(onx) && cM3d_IsZero(ony)));
if (spE0 < spE4) {
if (!(spE0 > spDC) && !(fabsf(spE0 - spDC) < 0.008f)) {
- JUT_ASSERT(0, !isnan(cx0));
- JUT_ASSERT(0, !isnan(cy0));
+ JUT_ASSERT(3655, !isnan(cx0));
+ JUT_ASSERT(3656, !isnan(cy0));
f32 spF0, spF4;
cM2d_CrossCirLin(*pwi->GetWallCirP(cir_index), cx0, cy0,
@@ -1581,21 +1866,20 @@ bool dBgW::WallCorrectSort(dBgS_Acch* pwi) {
pwi->GetPos()->x += cx0 - spF0;
pwi->GetPos()->z += cy0 - spF4;
- JUT_ASSERT(0, !isnan(pwi->GetPos()->x));
- JUT_ASSERT(0, !isnan(pwi->GetPos()->z));
+ JUT_ASSERT(3666, !isnan(pwi->GetPos()->x));
+ JUT_ASSERT(3667, !isnan(pwi->GetPos()->z));
pwi->CalcMovePosWork();
pwi->SetWallCirHit(cir_index);
pwi->SetWallPolyIndex(cir_index, poly_index);
- pwi->SetWallAngleY(cir_index,
- cM_atan2s(tri->m_plane.GetNP()->x,
- tri->m_plane.GetNP()->z));
+ s16 spE = cM_atan2s(tri->m_plane.GetNP()->x, tri->m_plane.GetNP()->z);
+ pwi->SetWallAngleY(cir_index, spE);
correct = true;
pwi->SetWallHit();
}
} else if (!(spE4 > spDC) && !(fabsf(spE4 - spDC) < 0.008f)) {
- JUT_ASSERT(0, !isnan(cx1));
- JUT_ASSERT(0, !isnan(cy1));
+ JUT_ASSERT(3697, !isnan(cx1));
+ JUT_ASSERT(3698, !isnan(cy1));
f32 spF8, spFC;
cM2d_CrossCirLin(*pwi->GetWallCirP(cir_index), cx1, cy1, onx,
@@ -1603,15 +1887,14 @@ bool dBgW::WallCorrectSort(dBgS_Acch* pwi) {
pwi->GetPos()->x += cx1 - spF8;
pwi->GetPos()->z += cy1 - spFC;
- JUT_ASSERT(0, !isnan(pwi->GetPos()->x));
- JUT_ASSERT(0, !isnan(pwi->GetPos()->z));
+ JUT_ASSERT(3707, !isnan(pwi->GetPos()->x));
+ JUT_ASSERT(3708, !isnan(pwi->GetPos()->z));
pwi->CalcMovePosWork();
pwi->SetWallCirHit(cir_index);
pwi->SetWallPolyIndex(cir_index, poly_index);
- pwi->SetWallAngleY(cir_index,
- cM_atan2s(tri->m_plane.GetNP()->x,
- tri->m_plane.GetNP()->z));
+ s16 spC = cM_atan2s(tri->m_plane.GetNP()->x, tri->m_plane.GetNP()->z);
+ pwi->SetWallAngleY(cir_index, spC);
correct = true;
pwi->SetWallHit();
}
@@ -1630,46 +1913,58 @@ bool dBgW::WallCorrectSort(dBgS_Acch* pwi) {
return correct;
}
-bool dBgW::RwgRoofChk(u16 i_poly_idx, dBgS_RoofChk* i_roofchk) {
+bool dBgW::RwgRoofChk(u16 poly_index, dBgS_RoofChk* proofchk) {
bool chk = false;
- f32 crossY;
+ f32 cy;
while (true) {
- if (pm_tri[i_poly_idx].m_plane.getCrossY(*i_roofchk->GetPosP(), &crossY) &&
- crossY > i_roofchk->GetPosP()->y && crossY < i_roofchk->GetNowY())
+ if (pm_tri[poly_index].m_plane.getCrossY(*proofchk->GetPosP(), &cy) &&
+ cy > proofchk->GetPosP()->y && cy < proofchk->GetNowY())
{
- cBgD_Tri_t* tri = &pm_bgd->m_t_tbl[i_poly_idx];
+ cBgD_Tri_t* tri = &pm_bgd->m_t_tbl[poly_index];
if (cM3d_CrossY_Tri(pm_vtx_tbl[tri->m_vtx_idx0], pm_vtx_tbl[tri->m_vtx_idx1],
- pm_vtx_tbl[tri->m_vtx_idx2], pm_tri[i_poly_idx].m_plane,
- (const Vec*)i_roofchk->GetPosP()))
+ pm_vtx_tbl[tri->m_vtx_idx2], pm_tri[poly_index].m_plane,
+ (const Vec*)proofchk->GetPosP()))
{
- if (!ChkPolyThrough(i_poly_idx, i_roofchk->GetPolyPassChk())) {
- i_roofchk->SetNowY(crossY);
- i_roofchk->SetPolyIndex(i_poly_idx);
+ if (!ChkPolyThrough(poly_index, proofchk->GetPolyPassChk())) {
+ proofchk->SetNowY(cy);
+ proofchk->SetPolyIndex(poly_index);
chk = true;
+
+ JUT_ASSERT(3774, !isnan(cy));
+
+ JUT_ASSERT(3776, -INF < cy && cy < INF);
}
}
}
- if (pm_rwg[i_poly_idx].m_next == 0xFFFF)
+ cBgW_RwgElm* element = &pm_rwg[poly_index];
+ if (element->m_next == 0xFFFF)
break;
- i_poly_idx = pm_rwg[i_poly_idx].m_next;
+
+ poly_index = element->m_next;
}
return chk;
}
-bool dBgW::RoofChkRp(dBgS_RoofChk* i_roofchk, int i_idx) {
- cBgW_NodeTree* node = &pm_node_tree[i_idx];
- if (!node->CrossY(i_roofchk->GetPosP()) || !node->UnderPlaneYUnder(i_roofchk->GetNowY()) ||
- node->TopPlaneYUnder(i_roofchk->GetPosP()->y))
+bool dBgW::RoofChkRp(dBgS_RoofChk* proofchk, int node_index) {
+ JUT_ASSERT(3802, 0 <= node_index && node_index < pm_bgd->m_tree_num);
+
+ cBgW_NodeTree* node = &pm_node_tree[node_index];
+ if (!node->CrossY(proofchk->GetPosP()) || !node->UnderPlaneYUnder(proofchk->GetNowY()) ||
+ node->TopPlaneYUnder(proofchk->GetPosP()->y))
{
return false;
}
- cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i_idx];
- if ((tree->m_flag & 1)) {
- if (pm_blk[tree->m_id[0]].m_roof_idx != 0xFFFF &&
- RwgRoofChk(pm_blk[tree->m_id[0]].m_roof_idx, i_roofchk))
+ cBgD_Tree_t* pnode = &pm_bgd->m_tree_tbl[node_index];
+ if ((pnode->m_flag & 1)) {
+ JUT_ASSERT(3819, pnode->m_id[0] != 0xffff);
+
+ JUT_ASSERT(3821, pnode->m_id[0] >= 0 && pnode->m_id[0] < pm_bgd->m_b_num);
+
+ if (pm_blk[pnode->m_id[0]].m_roof_idx != 0xFFFF &&
+ RwgRoofChk(pm_blk[pnode->m_id[0]].m_roof_idx, proofchk))
{
return true;
}
@@ -1678,7 +1973,7 @@ bool dBgW::RoofChkRp(dBgS_RoofChk* i_roofchk, int i_idx) {
bool chk = false;
for (int i = 0; i < 8; i++) {
- if (tree->m_id[i] != 0xFFFF && RoofChkRp(i_roofchk, tree->m_id[i])) {
+ if (pnode->m_id[i] != 0xFFFF && RoofChkRp(proofchk, pnode->m_id[i])) {
chk = true;
}
}
@@ -1686,31 +1981,34 @@ bool dBgW::RoofChkRp(dBgS_RoofChk* i_roofchk, int i_idx) {
return chk;
}
-bool dBgW::RoofChkGrpRp(dBgS_RoofChk* i_roofchk, int i_idx, int i_depth) {
- cBgW_GrpElm* grp = &pm_grp[i_idx];
- if (!grp->m_aab.CrossY(i_roofchk->GetPosP()) ||
- !grp->m_aab.UnderPlaneYUnder(i_roofchk->GetNowY()) ||
- grp->m_aab.TopPlaneYUnder(i_roofchk->GetPosP()->y))
+bool dBgW::RoofChkGrpRp(dBgS_RoofChk* proofchk, int g, int depth) {
+ JUT_ASSERT(3856, 0 <= g && g < pm_bgd->m_g_num);
+
+ cBgW_GrpElm* grp = &pm_grp[g];
+ if (!grp->m_aab.CrossY(proofchk->GetPosP()) ||
+ !grp->m_aab.UnderPlaneYUnder(proofchk->GetNowY()) ||
+ grp->m_aab.TopPlaneYUnder(proofchk->GetPosP()->y))
{
return false;
}
- if (ChkGrpThrough(i_idx, i_roofchk->GetGrpPassChk(), i_depth)) {
+ if (ChkGrpThrough(g, proofchk->GetGrpPassChk(), depth)) {
return false;
}
bool chk = false;
- cBgD_Grp_t* data = &pm_bgd->m_g_tbl[i_idx];
- if (data->m_tree_idx != 0xFFFF && RoofChkRp(i_roofchk, data->m_tree_idx)) {
+ cBgD_Grp_t* data = &pm_bgd->m_g_tbl[g];
+ if (data->m_tree_idx != 0xFFFF && RoofChkRp(proofchk, data->m_tree_idx)) {
chk = true;
}
+ depth++;
int child_idx = data->m_first_child;
while (true) {
if (child_idx == 0xFFFF) {
break;
}
- if (RoofChkGrpRp(i_roofchk, child_idx, i_depth + 1)) {
+ if (RoofChkGrpRp(proofchk, child_idx, depth)) {
chk = true;
}
child_idx = pm_bgd->m_g_tbl[child_idx].m_next_sibling;
@@ -1719,50 +2017,62 @@ bool dBgW::RoofChkGrpRp(dBgS_RoofChk* i_roofchk, int i_idx, int i_depth) {
return chk;
}
-bool dBgW::RoofChk(dBgS_RoofChk* pchk) {
- return RoofChkGrpRp(pchk, m_rootGrpIdx, 1);
+bool dBgW::RoofChk(dBgS_RoofChk* proofchk) {
+ return RoofChkGrpRp(proofchk, m_rootGrpIdx, 1);
}
-bool dBgW::RwgSplGrpChk(u16 i_poly_idx, dBgS_SplGrpChk* i_splchk) {
+bool dBgW::RwgSplGrpChk(u16 poly_index, dBgS_SplGrpChk* psplchk) {
bool chk = false;
- f32 crossY;
+ f32 cy;
while (true) {
- if (pm_tri[i_poly_idx].m_plane.getCrossY(i_splchk->GetPosP(), &crossY) &&
- crossY < i_splchk->GetRoof() && crossY > i_splchk->GetHeight())
+ if (pm_tri[poly_index].m_plane.getCrossY(psplchk->GetPosP(), &cy) &&
+ cy < psplchk->GetRoof() && cy > psplchk->GetHeight())
{
- cBgD_Tri_t* tri = &pm_bgd->m_t_tbl[i_poly_idx];
+ cBgD_Tri_t* tri = &pm_bgd->m_t_tbl[poly_index];
if (cM3d_CrossY_Tri(pm_vtx_tbl[tri->m_vtx_idx0], pm_vtx_tbl[tri->m_vtx_idx1],
- pm_vtx_tbl[tri->m_vtx_idx2], pm_tri[i_poly_idx].m_plane,
- (const Vec*)&i_splchk->GetPosP()))
+ pm_vtx_tbl[tri->m_vtx_idx2], pm_tri[poly_index].m_plane,
+ (const Vec*)&psplchk->GetPosP()))
{
- if (!ChkPolyThrough(i_poly_idx, i_splchk->GetPolyPassChk())) {
- i_splchk->SetHeight(crossY);
- i_splchk->SetPolyIndex(i_poly_idx);
+ if (!ChkPolyThrough(poly_index, psplchk->GetPolyPassChk())) {
+ psplchk->SetHeight(cy);
+ psplchk->SetPolyIndex(poly_index);
chk = true;
+
+ JUT_ASSERT(3951, !isnan(cy));
+
+ JUT_ASSERT(3953, -INF < cy && cy < INF);
}
}
}
- if (pm_rwg[i_poly_idx].m_next == 0xFFFF)
+ cBgW_RwgElm* element = &pm_rwg[poly_index];
+ if (element->m_next == 0xFFFF)
break;
- i_poly_idx = pm_rwg[i_poly_idx].m_next;
+
+ poly_index = element->m_next;
}
return chk;
}
-bool dBgW::SplGrpChkRp(dBgS_SplGrpChk* i_splchk, int i_idx) {
- cBgW_NodeTree* node = &pm_node_tree[i_idx];
- if (!node->CrossY(&i_splchk->GetPosP()) || !node->UnderPlaneYUnder(i_splchk->GetRoof()) ||
- node->TopPlaneYUnder(i_splchk->GetHeight()))
+bool dBgW::SplGrpChkRp(dBgS_SplGrpChk* psplchk, int node_index) {
+ JUT_ASSERT(3980, 0 <= node_index && node_index < pm_bgd->m_tree_num);
+
+ cBgW_NodeTree* node = &pm_node_tree[node_index];
+ if (!node->CrossY(&psplchk->GetPosP()) || !node->UnderPlaneYUnder(psplchk->GetRoof()) ||
+ node->TopPlaneYUnder(psplchk->GetHeight()))
{
return false;
}
- cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i_idx];
- if ((tree->m_flag & 1)) {
- if (pm_blk[tree->m_id[0]].m_gnd_idx != 0xFFFF &&
- RwgSplGrpChk(pm_blk[tree->m_id[0]].m_gnd_idx, i_splchk))
+ cBgD_Tree_t* pnode = &pm_bgd->m_tree_tbl[node_index];
+ if ((pnode->m_flag & 1)) {
+ JUT_ASSERT(3996, pnode->m_id[0] != 0xffff);
+
+ JUT_ASSERT(3998, pnode->m_id[0] >= 0 && pnode->m_id[0] < pm_bgd->m_b_num);
+
+ if (pm_blk[pnode->m_id[0]].m_gnd_idx != 0xFFFF &&
+ RwgSplGrpChk(pm_blk[pnode->m_id[0]].m_gnd_idx, psplchk))
{
return true;
}
@@ -1771,7 +2081,7 @@ bool dBgW::SplGrpChkRp(dBgS_SplGrpChk* i_splchk, int i_idx) {
bool chk = false;
for (int i = 0; i < 8; i++) {
- if (tree->m_id[i] != 0xFFFF && SplGrpChkRp(i_splchk, tree->m_id[i])) {
+ if (pnode->m_id[i] != 0xFFFF && SplGrpChkRp(psplchk, pnode->m_id[i])) {
chk = true;
}
}
@@ -1779,31 +2089,34 @@ bool dBgW::SplGrpChkRp(dBgS_SplGrpChk* i_splchk, int i_idx) {
return chk;
}
-bool dBgW::SplGrpChkGrpRp(dBgS_SplGrpChk* i_splchk, int i_idx, int i_depth) {
- cBgW_GrpElm* grp = &pm_grp[i_idx];
- if (!grp->m_aab.CrossY(&i_splchk->GetPosP()) ||
- !grp->m_aab.UnderPlaneYUnder(i_splchk->GetRoof()) ||
- grp->m_aab.TopPlaneYUnder(i_splchk->GetHeight()))
+bool dBgW::SplGrpChkGrpRp(dBgS_SplGrpChk* psplchk, int g, int depth) {
+ JUT_ASSERT(4030, 0 <= g && g < pm_bgd->m_g_num);
+
+ cBgW_GrpElm* grp = &pm_grp[g];
+ if (!grp->m_aab.CrossY(&psplchk->GetPosP()) ||
+ !grp->m_aab.UnderPlaneYUnder(psplchk->GetRoof()) ||
+ grp->m_aab.TopPlaneYUnder(psplchk->GetHeight()))
{
return false;
}
- if (ChkGrpThrough(i_idx, i_splchk->GetGrpPassChk(), i_depth)) {
+ if (ChkGrpThrough(g, psplchk->GetGrpPassChk(), depth)) {
return false;
}
bool chk = false;
- cBgD_Grp_t* data = &pm_bgd->m_g_tbl[i_idx];
- if (data->m_tree_idx != 0xFFFF && SplGrpChkRp(i_splchk, data->m_tree_idx)) {
+ cBgD_Grp_t* data = &pm_bgd->m_g_tbl[g];
+ if (data->m_tree_idx != 0xFFFF && SplGrpChkRp(psplchk, data->m_tree_idx)) {
chk = true;
}
+ depth++;
int child_idx = data->m_first_child;
while (true) {
if (child_idx == 0xFFFF) {
break;
}
- if (SplGrpChkGrpRp(i_splchk, child_idx, i_depth + 1)) {
+ if (SplGrpChkGrpRp(psplchk, child_idx, depth)) {
chk = true;
}
child_idx = pm_bgd->m_g_tbl[child_idx].m_next_sibling;
@@ -1812,38 +2125,41 @@ bool dBgW::SplGrpChkGrpRp(dBgS_SplGrpChk* i_splchk, int i_idx, int i_depth) {
return chk;
}
-bool dBgW::SplGrpChk(dBgS_SplGrpChk* pchk) {
- return SplGrpChkGrpRp(pchk, m_rootGrpIdx, 1);
+bool dBgW::SplGrpChk(dBgS_SplGrpChk* psplchk) {
+ return SplGrpChkGrpRp(psplchk, m_rootGrpIdx, 1);
}
-void dBgW::RwgCaptPoly(int i_idx, dBgS_CaptPoly& i_captpoly) {
+void dBgW::RwgCaptPoly(int index, dBgS_CaptPoly& capt) {
+ cBgW_RwgElm* rwg;
while (true) {
- cBgW_RwgElm* rwg = &pm_rwg[i_idx];
- i_captpoly.m_callback(i_captpoly, pm_vtx_tbl, pm_bgd->m_t_tbl[i_idx].m_vtx_idx0,
- pm_bgd->m_t_tbl[i_idx].m_vtx_idx1, pm_bgd->m_t_tbl[i_idx].m_vtx_idx2,
- &pm_tri[i_idx].m_plane);
+ rwg = &pm_rwg[index];
+ capt.m_callback(&capt, pm_vtx_tbl, pm_bgd->m_t_tbl[index].m_vtx_idx0,
+ pm_bgd->m_t_tbl[index].m_vtx_idx1, pm_bgd->m_t_tbl[index].m_vtx_idx2,
+ &pm_tri[index].m_plane);
if (rwg->m_next == 0xFFFF)
break;
- i_idx = rwg->m_next;
+ index = rwg->m_next;
+
+ JUT_ASSERT(4110, 0 <= index && index < pm_bgd->m_t_num);
}
}
-void dBgW::CaptPolyRp(dBgS_CaptPoly& i_captpoly, int i_idx) {
- if (!pm_node_tree[i_idx].Cross(i_captpoly.GetBndP())) {
+void dBgW::CaptPolyRp(dBgS_CaptPoly& capt, int node_index) {
+ if (!pm_node_tree[node_index].Cross(capt.GetBndP())) {
return;
}
- cBgD_Tree_t* tree_data = &pm_bgd->m_tree_tbl[i_idx];
+ cBgD_Tree_t* tree_data = &pm_bgd->m_tree_tbl[node_index];
if (tree_data->m_flag & 1) {
if (pm_blk[tree_data->m_id[0]].m_wall_idx != 0xFFFF) {
- RwgCaptPoly(pm_blk[tree_data->m_id[0]].m_wall_idx, i_captpoly);
+ RwgCaptPoly(pm_blk[tree_data->m_id[0]].m_wall_idx, capt);
}
if (pm_blk[tree_data->m_id[0]].m_roof_idx != 0xFFFF) {
- RwgCaptPoly(pm_blk[tree_data->m_id[0]].m_roof_idx, i_captpoly);
+ RwgCaptPoly(pm_blk[tree_data->m_id[0]].m_roof_idx, capt);
}
if (pm_blk[tree_data->m_id[0]].m_gnd_idx != 0xFFFF) {
- RwgCaptPoly(pm_blk[tree_data->m_id[0]].m_gnd_idx, i_captpoly);
+ RwgCaptPoly(pm_blk[tree_data->m_id[0]].m_gnd_idx, capt);
}
return;
}
@@ -1852,90 +2168,90 @@ void dBgW::CaptPolyRp(dBgS_CaptPoly& i_captpoly, int i_idx) {
if (tree_data->m_id[i] == 0xFFFF) {
continue;
}
- CaptPolyRp(i_captpoly, tree_data->m_id[i]);
+ CaptPolyRp(capt, tree_data->m_id[i]);
}
}
-void dBgW::CaptPolyGrpRp(dBgS_CaptPoly& i_captpoly, int i_idx, int i_depth) {
- cBgW_GrpElm* grp = &pm_grp[i_idx];
- if (!grp->m_aab.Cross(i_captpoly.GetBndP())) {
+void dBgW::CaptPolyGrpRp(dBgS_CaptPoly& capt, int node_index, int depth) {
+ if (!pm_grp[node_index].m_aab.Cross(capt.GetBndP())) {
return;
}
- if (ChkGrpThrough(i_idx, i_captpoly.GetGrpPassChk(), i_depth)) {
+ if (ChkGrpThrough(node_index, capt.GetGrpPassChk(), depth)) {
return;
}
- cBgD_Grp_t* data = &pm_bgd->m_g_tbl[i_idx];
- if (pm_bgd->m_g_tbl[i_idx].m_tree_idx != 0xFFFF) {
- CaptPolyRp(i_captpoly, pm_bgd->m_g_tbl[i_idx].m_tree_idx);
+ if (pm_bgd->m_g_tbl[node_index].m_tree_idx != 0xFFFF) {
+ CaptPolyRp(capt, pm_bgd->m_g_tbl[node_index].m_tree_idx);
}
- int child_idx = pm_bgd->m_g_tbl[i_idx].m_first_child;
+ depth++;
+ int child_idx = pm_bgd->m_g_tbl[node_index].m_first_child;
while (true) {
if (child_idx == 0xFFFF) {
break;
}
- CaptPolyGrpRp(i_captpoly, child_idx, i_depth + 1);
+ CaptPolyGrpRp(capt, child_idx, depth);
child_idx = pm_bgd->m_g_tbl[child_idx].m_next_sibling;
}
}
-void dBgW::CaptPoly(dBgS_CaptPoly& i_captpoly) {
- CaptPolyGrpRp(i_captpoly, m_rootGrpIdx, 1);
+void dBgW::CaptPoly(dBgS_CaptPoly& capt) {
+ CaptPolyGrpRp(capt, m_rootGrpIdx, 1);
}
-bool dBgW::RwgSphChk(u16 i_poly_idx, dBgS_SphChk* i_sphchk, void* i_data) {
+bool dBgW::RwgSphChk(u16 poly_index, dBgS_SphChk* psphchk, void* i_data) {
cM3dGTri tri;
cBgW_RwgElm* rwg;
cBgD_Tri_t* tri_t;
bool chk = false;
while (true) {
- rwg = &pm_rwg[i_poly_idx];
- if (!ChkPolyThrough(i_poly_idx, i_sphchk->GetPolyPassChk())) {
- tri_t = &pm_bgd->m_t_tbl[i_poly_idx];
+ rwg = &pm_rwg[poly_index];
+ if (!ChkPolyThrough(poly_index, psphchk->GetPolyPassChk())) {
+ tri_t = &pm_bgd->m_t_tbl[poly_index];
tri.setBg(&pm_vtx_tbl[tri_t->m_vtx_idx0], &pm_vtx_tbl[tri_t->m_vtx_idx1],
- &pm_vtx_tbl[tri_t->m_vtx_idx2], &pm_tri[i_poly_idx].m_plane);
+ &pm_vtx_tbl[tri_t->m_vtx_idx2], &pm_tri[poly_index].m_plane);
- if (i_sphchk->cross(&tri)) {
- i_sphchk->mCallback(i_sphchk, pm_vtx_tbl, tri_t->m_vtx_idx0, tri_t->m_vtx_idx1,
- tri_t->m_vtx_idx2, &pm_tri[i_poly_idx].m_plane, i_data);
- i_sphchk->SetPolyIndex(i_poly_idx);
+ if (psphchk->cross(&tri)) {
+ psphchk->mCallback(psphchk, pm_vtx_tbl, tri_t->m_vtx_idx0, tri_t->m_vtx_idx1,
+ tri_t->m_vtx_idx2, &pm_tri[poly_index].m_plane, i_data);
+ psphchk->SetPolyIndex(poly_index);
chk = true;
}
}
if (rwg->m_next == 0xFFFF)
break;
- i_poly_idx = rwg->m_next;
+ poly_index = rwg->m_next;
}
return chk;
}
-bool dBgW::SphChkRp(dBgS_SphChk* i_sphchk, void* i_data, int i_idx) {
- if (!pm_node_tree[i_idx].Cross(i_sphchk)) {
+bool dBgW::SphChkRp(dBgS_SphChk* psphchk, void* i_data, int node_index) {
+ cBgW_NodeTree* tree = &pm_node_tree[node_index];
+ if (!tree->Cross(psphchk)) {
return false;
}
- cBgD_Tree_t* tree_data = &pm_bgd->m_tree_tbl[i_idx];
+ cBgD_Tree_t* tree_data = &pm_bgd->m_tree_tbl[node_index];
bool chk = false;
if (tree_data->m_flag & 1) {
if (pm_blk[tree_data->m_id[0]].m_gnd_idx != 0xFFFF &&
- RwgSphChk(pm_blk[tree_data->m_id[0]].m_gnd_idx, i_sphchk, i_data))
+ RwgSphChk(pm_blk[tree_data->m_id[0]].m_gnd_idx, psphchk, i_data))
{
chk = true;
}
if (pm_blk[tree_data->m_id[0]].m_roof_idx != 0xFFFF &&
- RwgSphChk(pm_blk[tree_data->m_id[0]].m_roof_idx, i_sphchk, i_data))
+ RwgSphChk(pm_blk[tree_data->m_id[0]].m_roof_idx, psphchk, i_data))
{
chk = true;
}
if (pm_blk[tree_data->m_id[0]].m_wall_idx != 0xFFFF &&
- RwgSphChk(pm_blk[tree_data->m_id[0]].m_wall_idx, i_sphchk, i_data))
+ RwgSphChk(pm_blk[tree_data->m_id[0]].m_wall_idx, psphchk, i_data))
{
chk = true;
}
@@ -1947,34 +2263,36 @@ bool dBgW::SphChkRp(dBgS_SphChk* i_sphchk, void* i_data, int i_idx) {
if (tree_data->m_id[i] == 0xFFFF) {
continue;
}
- if (SphChkRp(i_sphchk, i_data, tree_data->m_id[i])) {
+ if (SphChkRp(psphchk, i_data, tree_data->m_id[i])) {
chk = true;
}
}
return chk;
}
-bool dBgW::SphChkGrpRp(dBgS_SphChk* i_sphchk, void* i_data, int i_idx, int i_depth) {
- if (!pm_grp[i_idx].m_aab.Cross(i_sphchk)) {
+bool dBgW::SphChkGrpRp(dBgS_SphChk* psphchk, void* i_data, int node_index, int depth) {
+ cBgW_GrpElm* pnode = &pm_grp[node_index];
+ if (!pnode->m_aab.Cross(psphchk)) {
return false;
}
- if (ChkGrpThrough(i_idx, i_sphchk->GetGrpPassChk(), i_depth)) {
+ if (ChkGrpThrough(node_index, psphchk->GetGrpPassChk(), depth)) {
return false;
}
bool chk = false;
- cBgD_Grp_t* data = &pm_bgd->m_g_tbl[i_idx];
- if (data->m_tree_idx != 0xFFFF && SphChkRp(i_sphchk, i_data, data->m_tree_idx)) {
+ cBgD_Grp_t* data = &pm_bgd->m_g_tbl[node_index];
+ if (data->m_tree_idx != 0xFFFF && SphChkRp(psphchk, i_data, data->m_tree_idx)) {
chk = true;
}
+ depth++;
int child_idx = data->m_first_child;
while (true) {
if (child_idx == 0xFFFF) {
break;
}
- if (SphChkGrpRp(i_sphchk, i_data, child_idx, i_depth + 1)) {
+ if (SphChkGrpRp(psphchk, i_data, child_idx, depth)) {
chk = true;
}
child_idx = pm_bgd->m_g_tbl[child_idx].m_next_sibling;
@@ -1983,35 +2301,39 @@ bool dBgW::SphChkGrpRp(dBgS_SphChk* i_sphchk, void* i_data, int i_idx, int i_dep
return chk;
}
-bool dBgW::SphChk(dBgS_SphChk* pchk, void* i_data) {
- return SphChkGrpRp(pchk, i_data, m_rootGrpIdx, 1);
+bool dBgW::SphChk(dBgS_SphChk* psphchk, void* i_data) {
+ return SphChkGrpRp(psphchk, i_data, m_rootGrpIdx, 1);
}
-u8 dBgW::GetPolyGrpRoomInfId(cBgS_PolyInfo const& poly) {
- return GetGrpInf(poly) & 0xFF;
+u8 dBgW::GetPolyGrpRoomInfId(const cBgS_PolyInfo& polyinfo) {
+ u32 inf = GetGrpInf(polyinfo);
+ u8 id = inf & 0xFF;
+ return id;
}
-int dBgW::GetGrpSoundId(cBgS_PolyInfo const& poly) {
- return (GetGrpInf(poly) >> 11) & 0xFF;
+int dBgW::GetGrpSoundId(const cBgS_PolyInfo& polyinfo) {
+ u32 inf = GetGrpInf(polyinfo);
+ int id = (inf >> 11) & 0xFF;
+ return id;
}
-void dBgW::CrrPos(cBgS_PolyInfo const& i_poly, void* i_actor_ptr, bool param_2, cXyz* i_pos,
- csXyz* i_angle, csXyz* i_shapeAngle) {
+void dBgW::CrrPos(const cBgS_PolyInfo& polyinfo, void* actor_ptr, bool param_2, cXyz* ppos,
+ csXyz* pangle, csXyz* pshapeangle) {
if (m_crr_func) {
- m_crr_func(this, i_actor_ptr, i_poly, param_2, i_pos, i_angle, i_shapeAngle);
+ m_crr_func(this, actor_ptr, polyinfo, param_2, ppos, pangle, pshapeangle);
}
}
-void dBgW::TransPos(cBgS_PolyInfo const& i_poly, void* i_actor_ptr, bool param_2, cXyz* i_pos,
- csXyz* i_angle, csXyz* i_shapeAngle) {
+void dBgW::TransPos(const cBgS_PolyInfo& polyinfo, void* actor_ptr, bool param_2, cXyz* ppos,
+ csXyz* pangle, csXyz* pshapeangle) {
if (m_crr_func) {
- m_crr_func(this, i_actor_ptr, i_poly, param_2, i_pos, i_angle, i_shapeAngle);
+ m_crr_func(this, actor_ptr, polyinfo, param_2, ppos, pangle, pshapeangle);
}
}
-void dBgW::MatrixCrrPos(cBgS_PolyInfo const& i_poly, void* i_actor_ptr, bool param_2, cXyz* i_pos,
- csXyz* i_angle, csXyz* i_shapeAngle) {
- CrrPos(i_poly, i_actor_ptr, param_2, i_pos, i_angle, i_shapeAngle);
+void dBgW::MatrixCrrPos(const cBgS_PolyInfo& polyinfo, void* actor_ptr, bool param_2, cXyz* ppos,
+ csXyz* pangle, csXyz* pshapeangle) {
+ CrrPos(polyinfo, actor_ptr, param_2, ppos, pangle, pshapeangle);
}
bool dBgW::ChkPolyThrough(int poly_index, cBgS_PolyPassChk* ppass_chk) {
@@ -2066,7 +2388,8 @@ bool dBgW::ChkPolyThrough(int poly_index, cBgS_PolyPassChk* ppass_chk) {
cXyz pos(pm_tri[poly_index].m_plane.mNormal);
if (chk->ChkHorse() && dComIfGp_getHorseActor() != NULL) {
- if (!dComIfGp_getHorseActor()->checkSpecialWallHit(pos)) {
+ daHorse_c* horse = dComIfGp_getHorseActor();
+ if (!horse->checkSpecialWallHit(pos)) {
return true;
}
}
@@ -2083,26 +2406,35 @@ bool dBgW::ChkPolyThrough(int poly_index, cBgS_PolyPassChk* ppass_chk) {
return false;
}
-bool dBgW::ChkShdwDrawThrough(int poly_index, cBgS_PolyPassChk*) {
+bool dBgW::ChkShdwDrawThrough(int poly_index, cBgS_PolyPassChk* ppchk) {
+ UNUSED(ppchk);
+
if (GetShdwThrough(poly_index)) {
return true;
}
- return GetPolyArrowThrough(poly_index);
+ if (GetPolyArrowThrough(poly_index)) {
+ return true;
+ }
+
+ return false;
}
-bool dBgW::ChkGrpThrough(int i_grp_idx, cBgS_GrpPassChk* i_passChk, int i_depth) {
- if (i_depth != 2 || i_passChk == NULL) {
+bool dBgW::ChkGrpThrough(int g, cBgS_GrpPassChk* ppasschk, int depth) {
+ if (depth != 2 || ppasschk == NULL) {
return false;
}
- if ((pm_bgd->m_g_tbl[i_grp_idx].m_info & 0x100) == 0 &&
- ((dBgS_GrpPassChk*)i_passChk)->MaskNormalGrp())
+
+ dBgS_GrpPassChk* var_r31 = (dBgS_GrpPassChk*)ppasschk;
+
+ u32 var_r29 = pm_bgd->m_g_tbl[g].m_info & 0x100;
+ if (!var_r29 && var_r31->MaskNormalGrp())
{
return false;
}
- if ((pm_bgd->m_g_tbl[i_grp_idx].m_info & 0x100) &&
- ((dBgS_GrpPassChk*)i_passChk)->MaskWaterGrp())
+ u32 var_r28 = pm_bgd->m_g_tbl[g].m_info & 0x100;
+ if (var_r28 && var_r31->MaskWaterGrp())
{
return false;
}
@@ -2123,7 +2455,7 @@ void dBgW::CallArrowStickCallBack(fopAc_ac_c* param_0, fopAc_ac_c* param_1, cXyz
}
void dBgW::OffMoveFlag() {
- m_flags &= ~1;
+ m_flags &= (u8)~1;
}
u32 dBgW::ChkMoveFlag() const {
@@ -2134,10 +2466,13 @@ dBgW* dBgW_NewSet(cBgD_t* pbgd, u32 flags, Mtx* pbase_mtx) {
dBgW* nw = new dBgW();
if (nw == NULL) {
+ OS_REPORT_ERROR("dBgW_NewSet():dBgWの確保失敗\n");
return NULL;
}
- if (nw->Set(pbgd, flags, pbase_mtx)) {
+ bool rt = nw->Set(pbgd, flags, pbase_mtx);
+ if (rt) {
+ OS_REPORT_ERROR("dBgW_NewSet():dBgWのSet失敗\n");
return NULL;
}
diff --git a/src/d/d_bg_w_kcol.cpp b/src/d/d_bg_w_kcol.cpp
index 07950e6763..aff8edb7a6 100644
--- a/src/d/d_bg_w_kcol.cpp
+++ b/src/d/d_bg_w_kcol.cpp
@@ -3,7 +3,7 @@
#include "d/d_bg_w_kcol.h"
#include "d/d_com_inf_game.h"
#include "d/actor/d_a_horse.h"
-#include "d/d_bg_s_cap_poly.h"
+#include "d/d_bg_s_capt_poly.h"
#include <algorithm>
#include <cmath>
@@ -979,7 +979,7 @@ void dBgWKCol::CaptPoly(dBgS_CaptPoly& i_captpoly) {
cM3dGPla plane;
plane = GetTriPla(r28[0]);
- i_captpoly.m_callback(i_captpoly, (cBgD_Vtx_t*)&vtx_tbl, 0, 1, 2, &plane);
+ i_captpoly.m_callback(&i_captpoly, (cBgD_Vtx_t*)&vtx_tbl, 0, 1, 2, &plane);
}
}
}
diff --git a/src/d/d_menu_window_HIO.cpp b/src/d/d_menu_window_HIO.cpp
index c48e62d0a8..053aeaf837 100644
--- a/src/d/d_menu_window_HIO.cpp
+++ b/src/d/d_menu_window_HIO.cpp
@@ -7,6 +7,13 @@
#include "d/d_menu_window_HIO.h"
#include "d/d_com_inf_game.h"
+#include "d/d_msg_object.h"
+#include "d/d_meter2_info.h"
+
+#if DEBUG
+#include "JSystem/JHostIO/JORServer.h"
+#include "d/d_s_menu.h"
+#endif
dMw_HIO_c::dMw_HIO_c() {
init();
@@ -21,127 +28,1058 @@ void dMw_HIO_c::init() {
mBombFlag = 0;
mPachinkoFlag = 0;
- mLifeCopy = 0;
- mLife = 0;
- mMaxLifeCopy = 0;
- mMaxLife = 0;
- mMagicCopy = 0;
- mMagic = 0;
- mMaxMagicCopy = 0;
- mMaxMagic = 0;
- mOilCopy = 0;
- mOil = 0;
- mMaxOilCopy = 0;
- mMaxOil = 0;
- mOxygenCopy = 0;
- mOxygen = 0;
- mMaxOxygenCopy = 0;
- mMaxOxygen = 0;
- mEnableMagicCopy = false;
- mEnableMagic = false;
- mEnableArrowDropsCopy = false;
- mEnableArrowDrops = false;
- mRupeesCopy = 0;
- mRupees = 0;
- mWalletSizeCopy = WALLET;
- mWalletSize = WALLET;
- mKeysCopy = 0;
- mKeys = 0;
- field_0x47 = 0;
- field_0x23 = 0;
- mEnableOxygenMeterCopy = false;
- mEnableOxygenMeter = false;
- mPoesCopy = 0;
- mPoes = 0;
- mDonationAmountCopy = 0;
- mDonationAmount = 0;
+ mLife = mLifeCopy = 0;
+ mMaxLife = mMaxLifeCopy = 0;
+ mMagic = mMagicCopy = 0;
+ mMaxMagic = mMaxMagicCopy = 0;
+ mOil = mOilCopy = 0;
+ mMaxOil = mMaxOilCopy = 0;
+ mOxygen = mOxygenCopy = 0;
+ mMaxOxygen = mMaxOxygenCopy = 0;
+ mEnableMagic = mEnableMagicCopy = false;
+ mEnableArrowDrops = mEnableArrowDropsCopy = false;
+ mRupees = mRupeesCopy = 0;
+ mWalletSize = mWalletSizeCopy = WALLET;
+ mKeys = mKeysCopy = 0;
+ field_0x23 = field_0x47 = 0;
+ mEnableOxygenMeter = mEnableOxygenMeterCopy = false;
+ mPoes = mPoesCopy = 0;
+ mDonationAmount = mDonationAmountCopy = 0;
for (int i = 0; i < 24; i++) {
- mItemsCopy[i] = dItemNo_NONE_e;
- mItems[i] = dItemNo_NONE_e;
+ mItems[i] = mItemsCopy[i] = dItemNo_NONE_e;
field_0x7a[i] = 0;
}
for (int i = 0; i < 4; i++) {
- mBottleNumCopy[i] = 0;
- mBottleNum[i] = 0;
+ mBottleNum[i] = mBottleNumCopy[i] = 0;
}
for (int i = 0; i < 3; i++) {
- mBombNumCopy[i] = 0;
- mBombNum[i] = 0;
+ mBombNum[i] = mBombNumCopy[i] = 0;
}
- mScentCopy = dItemNo_NONE_e;
- mScent = dItemNo_NONE_e;
+ mScent = mScentCopy = dItemNo_NONE_e;
field_0xa8 = 0;
- field_0xf4 = 0;
- field_0xea = 0;
+ field_0xea = field_0xf4 = 0;
for (int i = 0; i < 4; i++) {
- bool swordBit = dComIfGs_isItemFirstBit(m_sword_item[i]);
- mSwordsCopy[i] = swordBit;
- mSwords[i] = swordBit;
+ mSwords[i] = mSwordsCopy[i] = dComIfGs_isItemFirstBit(m_sword_item[i]) ? 1 : 0;
}
for (int i = 0; i < 3; i++) {
- bool shieldBit = dComIfGs_isItemFirstBit(m_shield_item[i]);
- mShieldsCopy[i] = shieldBit;
- mShields[i] = shieldBit;
-
- bool clothesBit = dComIfGs_isItemFirstBit(m_cloth_item[i]);
- mClothesCopy[i] = clothesBit;
- mClothes[i] = clothesBit;
+ mShields[i] = mShieldsCopy[i] = dComIfGs_isItemFirstBit(m_shield_item[i]) ? 1 : 0;
+ mClothes[i] = mClothesCopy[i] = dComIfGs_isItemFirstBit(m_cloth_item[i]) ? 1 : 0;
}
- mBombBagLV2Copy = false;
- mBombBagLV2 = false;
+ mBombBagLV2 = mBombBagLV2Copy = false;
for (int i = 0; i < 3; i++) {
- mLV2KeyShardsCopy[i] = false;
- mLV2KeyShards[i] = false;
+ mLV2KeyShards[i] = mLV2KeyShardsCopy[i] = false;
}
for (int i = 0; i < 2; i++) {
- mLV5ItemCopy[i] = false;
- mLV5Item[i] = false;
+ mLV5Item[i] = mLV5ItemCopy[i] = false;
}
for (int i = 0; i < 24; i++) {
- mGoldBugCopy[i] = false;
- mGoldBug[i] = false;
+ mGoldBug[i] = mGoldBugCopy[i] = false;
}
for (int i = 0; i < 8; i++) {
- field_0x101[i] = 0;
- field_0xf9[i] = 0;
- field_0x111[i] = 0;
- field_0x109[i] = 0;
+ field_0xf9[i] = field_0x101[i] = 0;
+ field_0x109[i] = field_0x111[i] = 0;
}
for (int i = 0; i < 4; i++) {
- mFusedShadowCopy[i] = false;
- mFusedShadow[i] = false;
+ mFusedShadow[i] = mFusedShadowCopy[i] = false;
}
for (int i = 0; i < 4; i++) {
- mMirrorShardCopy[i] = false;
- mMirrorShard[i] = false;
+ mMirrorShard[i] = mMirrorShardCopy[i] = false;
}
}
-bool dMw_HIO_c::getBombFlag() {
+#if DEBUG
+void dMw_HIO_c::genMessage(JORMContext* mctx) {
+ // "*****Player Status*****"
+ mctx->genLabel("\n*****プレイヤーの状態*****", 0);
+ mctx->genCheckBox("魔法使える", &mEnableMagic, 1);
+ mctx->genCheckBox("矢補給", &mEnableArrowDrops, 1);
+ mctx->genCheckBox("矢の数無限", &mArrowFlag, 1);
+ mctx->genCheckBox("パチンコ玉の数無限", &mPachinkoFlag, 1);
+ mctx->genCheckBox("爆弾の数無限", &mBombFlag, 1);
+ mctx->genSlider("ライフ", (s16*)&mLife, 0, 80);
+ mctx->genSlider("ライフ最大", (s16*)&mMaxLife, 0, 100);
+ mctx->genSlider("魔法メーター", &mMagic, 0, 32);
+ mctx->genSlider("魔法メーター最大", &mMaxMagic, 0, 32);
+ mctx->genSlider("カンテラ油", &mOil, 0, 100000);
+ mctx->genSlider("カンテラ油最大", &mMaxOil, 0, 100000);
+ mctx->genCheckBox("酸素メーターON", &mEnableOxygenMeter, 1);
+ mctx->genSlider("酸素メーター", &mOxygen, 0, 100000);
+ mctx->genSlider("酸素メーター最大", &mMaxOxygen, 0, 100000);
+ mctx->genSlider("ルピ−", &mRupees, 0, 5000);
+ mctx->genSlider("財布", &mWalletSize, 0, 2);
+ mctx->genSlider("鍵", &mKeys, 0, 99);
+ mctx->genSlider("ゴースト", &mPoes, 0, 60);
+ mctx->genSlider("お布施総額", &mDonationAmount, 0, 10000);
+ mctx->genCheckBox("爆弾袋LV2", &mBombBagLV2, 1);
+
+ // "*****Item*****"
+ mctx->genLabel("\n*****アイテム*****", 0);
+ mctx->startComboBox("風のロッド", &mItems[0], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("風のロッド", dItemNo_BOOMERANG_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("カンテラ", &mItems[1], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("カンテラ", dItemNo_KANTERA_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("スピナー", &mItems[2], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("スピナー", dItemNo_SPINNER_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("アイアンブーツ", &mItems[3], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("アイアンブーツ", dItemNo_HVY_BOOTS_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("弓矢", &mItems[4], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("弓矢", dItemNo_BOW_e);
+ mctx->genComboBoxItem("光の矢", dItemNo_LIGHT_ARROW_e);
+ mctx->genComboBoxItem("ホークアイ+矢", dItemNo_HAWK_ARROW_e);
+ mctx->genComboBoxItem("爆弾+矢", dItemNo_BOMB_ARROW_e);
+ mctx->endComboBox();
+
+ mctx->genSlider("矢の数", &mArrowNum, 0, 100);
+
+ mctx->startComboBox("ホークアイ", &mItems[5], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("ホークアイ", dItemNo_HAWK_EYE_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("鉄球", &mItems[6], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("鉄球", dItemNo_IRONBALL_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("ミラーシールド", &mItems[7], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("コピーロッド", &mItems[8], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("コピーロッド", dItemNo_COPY_ROD_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("フックショット", &mItems[9], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("フックショット", dItemNo_HOOKSHOT_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("Wフックショット", &mItems[10], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("Wフックショット", dItemNo_W_HOOKSHOT_e);
+ mctx->endComboBox();
+
+ for (int i = 0; i < 4; i = i + 1) {
+ char sp30[8];
+ sprintf(sp30, "ビン%d", i + 1);
+ mctx->startComboBox(sp30, &mItems[11 + i], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("空きビン", dItemNo_EMPTY_BOTTLE_e);
+ mctx->genComboBoxItem("赤い薬入りビン", dItemNo_RED_BOTTLE_e);
+ mctx->genComboBoxItem("緑の薬入りビン", dItemNo_GREEN_BOTTLE_e);
+ mctx->genComboBoxItem("青い薬入りビン", dItemNo_BLUE_BOTTLE_e);
+ mctx->genComboBoxItem("水入りビン", dItemNo_WATER_BOTTLE_e);
+ mctx->genComboBoxItem("妖精入りビン", dItemNo_FAIRY_e);
+ mctx->genComboBoxItem("牛乳入りビン", dItemNo_MILK_BOTTLE_e);
+ mctx->genComboBoxItem("牛乳半分入りビン", dItemNo_HALF_MILK_BOTTLE_e);
+ mctx->genComboBoxItem("油入りビン", dItemNo_OIL_BOTTLE_e);
+ mctx->genComboBoxItem("まずいスープ", dItemNo_UGLY_SOUP_e);
+ mctx->genComboBoxItem("温泉水入りビン", dItemNo_HOT_SPRING_e);
+ mctx->genComboBoxItem("最初にもらうスープ", dItemNo_LV1_SOUP_e);
+ mctx->genComboBoxItem("材料が1つ入ったスープ", dItemNo_LV2_SOUP_e);
+ mctx->genComboBoxItem("完成したスープ", dItemNo_LV3_SOUP_e);
+ mctx->genComboBoxItem("ポウの炎1", dItemNo_POU_FIRE1_e);
+ mctx->genComboBoxItem("ポウの炎2", dItemNo_POU_FIRE2_e);
+ mctx->genComboBoxItem("ポウの炎3", dItemNo_POU_FIRE3_e);
+ mctx->genComboBoxItem("ポウの炎4", dItemNo_POU_FIRE4_e);
+ mctx->genComboBoxItem("チュチュゼリー赤", dItemNo_CHUCHU_RED_e);
+ mctx->genComboBoxItem("チュチュゼリー青", dItemNo_CHUCHU_BLUE_e);
+ mctx->genComboBoxItem("チュチュゼリー緑", dItemNo_CHUCHU_GREEN_e);
+ mctx->genComboBoxItem("チュチュゼリー黄", dItemNo_CHUCHU_YELLOW_e);
+ mctx->genComboBoxItem("チュチュゼリー紫", dItemNo_CHUCHU_PURPLE_e);
+ mctx->genComboBoxItem("チュチュゼリーレア", dItemNo_CHUCHU_RARE_e);
+ mctx->genComboBoxItem("チュチュゼリー黒", dItemNo_CHUCHU_BLACK_e);
+ mctx->genComboBoxItem("妖精", dItemNo_FAIRY_e);
+ mctx->genComboBoxItem("カブトムシ♂", dItemNo_M_BEETLE_e);
+ mctx->genComboBoxItem("カブトムシ♀", dItemNo_F_BEETLE_e);
+ mctx->genComboBoxItem("チョウチョ♂", dItemNo_M_BUTTERFLY_e);
+ mctx->genComboBoxItem("チョウチョ♀", dItemNo_F_BUTTERFLY_e);
+ mctx->genComboBoxItem("クワガタ♂", dItemNo_M_STAG_BEETLE_e);
+ mctx->genComboBoxItem("クワガタ♀", dItemNo_F_STAG_BEETLE_e);
+ mctx->genComboBoxItem("バッタ♂", dItemNo_M_GRASSHOPPER_e);
+ mctx->genComboBoxItem("バッタ♀", dItemNo_F_GRASSHOPPER_e);
+ mctx->genComboBoxItem("ナナフシ♂", dItemNo_M_NANAFUSHI_e);
+ mctx->genComboBoxItem("ナナフシ♀", dItemNo_F_NANAFUSHI_e);
+ mctx->genComboBoxItem("ダンゴムシ♂", dItemNo_M_DANGOMUSHI_e);
+ mctx->genComboBoxItem("ダンゴムシ♀", dItemNo_F_DANGOMUSHI_e);
+ mctx->genComboBoxItem("カマキリ♂", dItemNo_M_MANTIS_e);
+ mctx->genComboBoxItem("カマキリ♀", dItemNo_F_MANTIS_e);
+ mctx->genComboBoxItem("テントウムシ♂", dItemNo_M_LADYBUG_e);
+ mctx->genComboBoxItem("テントウムシ♀", dItemNo_F_LADYBUG_e);
+ mctx->genComboBoxItem("カタツムリ♂", dItemNo_M_SNAIL_e);
+ mctx->genComboBoxItem("カタツムリ♀", dItemNo_F_SNAIL_e);
+ mctx->genComboBoxItem("トンボ♂", dItemNo_M_DRAGONFLY_e);
+ mctx->genComboBoxItem("トンボ♀", dItemNo_F_DRAGONFLY_e);
+ mctx->genComboBoxItem("アリ♂", dItemNo_M_ANT_e);
+ mctx->genComboBoxItem("アリ♀", dItemNo_F_ANT_e);
+ mctx->genComboBoxItem("カゲロウ♂", dItemNo_M_MAYFLY_e);
+ mctx->genComboBoxItem("カゲロウ♀", dItemNo_F_MAYFLY_e);
+ mctx->genComboBoxItem("蜂の子", dItemNo_BEE_CHILD_e);
+ mctx->genComboBoxItem("みみず", dItemNo_WORM_e);
+ mctx->genComboBoxItem("大妖精の滴", dItemNo_FAIRY_DROP_e);
+ mctx->endComboBox();
+
+ mctx->genSlider("アイテムの数", &mBottleNum[i], 0, 10);
+ }
+
+ for (int i = 0; i < 3; i = i + 1) {
+ char sp38[8];
+ sprintf(sp38, "爆弾袋%d", i + 1);
+ mctx->startComboBox(sp38, &mItems[15 + i], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("爆弾袋", dItemNo_BOMB_BAG_LV1_e);
+ mctx->genComboBoxItem("ノーマル爆弾", dItemNo_NORMAL_BOMB_e);
+ mctx->genComboBoxItem("水中爆弾", dItemNo_WATER_BOMB_e);
+ mctx->genComboBoxItem("ポケ虫", dItemNo_POKE_BOMB_e);
+ mctx->endComboBox();
+
+ mctx->genSlider("爆弾の数", &mBombNum[i], 0, 99);
+ }
+
+ mctx->startComboBox("天空人", &mItems[18], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("天空人", dItemNo_DUNGEON_EXIT_e);
+ mctx->genComboBoxItem("天空人の息子", dItemNo_DUNGEON_BACK_e);
+ mctx->genComboBoxItem("天空人の書置き", dItemNo_TKS_LETTER_e);
+ mctx->genComboBoxItem("再開時の天空人", dItemNo_DUNGEON_EXIT_2_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("メモ", &mItems[19], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("ラフレルのメモ", dItemNo_RAFRELS_MEMO_e);
+ mctx->genComboBoxItem("アッシュの走り書き", dItemNo_ASHS_SCRIBBLING_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("釣竿", &mItems[20], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("珊瑚の耳飾り", dItemNo_ZORAS_JEWEL_e);
+ mctx->genComboBoxItem("釣竿", dItemNo_FISHING_ROD_1_e);
+ mctx->genComboBoxItem("釣竿+蜂の子", dItemNo_BEE_ROD_e);
+ mctx->genComboBoxItem("釣竿+みみず", dItemNo_WORM_ROD_e);
+ mctx->genComboBoxItem("珊瑚+釣竿", dItemNo_JEWEL_ROD_e);
+ mctx->genComboBoxItem("珊瑚+釣竿+蜂の子", dItemNo_JEWEL_BEE_ROD_e);
+ mctx->genComboBoxItem("珊瑚+釣竿+みみず", dItemNo_JEWEL_WORM_ROD_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("わらしべアイテム", &mItems[21], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("レナードの手紙", dItemNo_LETTER_e);
+ mctx->genComboBoxItem("請求書", dItemNo_BILL_e);
+ mctx->genComboBoxItem("木彫りの像", dItemNo_WOOD_STATUE_e);
+ mctx->genComboBoxItem("イリアのペンダント", dItemNo_IRIAS_PENDANT_e);
+ mctx->genComboBoxItem("馬笛", dItemNo_HORSE_FLUTE_e);
+ mctx->endComboBox();
+
+ mctx->startComboBox("古文書", &mItems[22], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("天空の古文書", dItemNo_ANCIENT_DOCUMENT_e);
+ mctx->genComboBoxItem("天空文字", dItemNo_AIR_LETTER_e);
+ mctx->genComboBoxItem("解封の古文書", dItemNo_ANCIENT_DOCUMENT2_e);
+ mctx->endComboBox();
+
+ char sp40[8];
+ sprintf(sp40, "パチンコ");
+ mctx->startComboBox(sp40, &mItems[23], 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("未装備", dItemNo_NONE_e);
+ mctx->genComboBoxItem("パチンコ", dItemNo_PACHINKO_e);
+ mctx->endComboBox();
+
+ mctx->genSlider("パチンコ玉の数", &mSeedNum, 0, 50);
+
+ // "*****Collect*****"
+ mctx->genLabel("\n*****コレクト*****", 0);
+ mctx->genCheckBox("コキリの服", &mClothes[0], 1);
+ mctx->genCheckBox("装甲服", &mClothes[1], 1);
+ mctx->genCheckBox("ゾーラの服", &mClothes[2], 1);
+ mctx->genCheckBox("木刀", &mSwords[3], 1);
+ mctx->genCheckBox("金剛の剣", &mSwords[0], 1);
+ mctx->genCheckBox("マスターソード", &mSwords[1], 1);
+ mctx->genCheckBox("ライトニングソード", &mSwords[2], 1);
+ mctx->genCheckBox("木彫りの盾", &mShields[2], 1);
+ mctx->genCheckBox("木の盾", &mShields[0], 1);
+ mctx->genCheckBox("ハイリアの盾", &mShields[1], 1);
+ mctx->genCheckBox("LV2ボス鍵かけら1", &mLV2KeyShards[0], 1);
+ mctx->genCheckBox("LV2ボス鍵かけら2", &mLV2KeyShards[1], 1);
+ mctx->genCheckBox("LV2ボス鍵かけら3", &mLV2KeyShards[2], 1);
+ mctx->genCheckBox("かぼちゃ", &mLV5Item[0], 1);
+ mctx->genCheckBox("トアル産チーズ", &mLV5Item[1], 1);
+
+ mctx->startComboBox("におい", &mScent, 0, NULL, 0xFFFF, 0xFFFF, 256, 26);
+ mctx->genComboBoxItem("覚えてない", dItemNo_NONE_e);
+ mctx->genComboBoxItem("かぼちゃのにおい(削除)", dItemNo_SMELL_PUMPKIN_e);
+ mctx->genComboBoxItem("イリアのポーチのにおい", dItemNo_SMELL_YELIA_POUCH_e);
+ mctx->genComboBoxItem("魚のにおい", dItemNo_SMELL_FISH_e);
+ mctx->genComboBoxItem("ポウのにおい", dItemNo_SMELL_POH_e);
+ mctx->genComboBoxItem("子供のにおい", dItemNo_SMELL_CHILDREN_e);
+ mctx->genComboBoxItem("薬品のにおい", dItemNo_SMELL_MEDICINE_e);
+ mctx->endComboBox();
+
+ for (int i = 0; i < 24; i = i + 1) {
+ static const char* insect_name[] = {
+ "カブトムシ♂", "カブトムシ♀",
+ "チョウチョ♂", "チョウチョ♀",
+ "クワガタ♂", "クワガタ♀",
+ "バッタ♂", "バッタ♀",
+ "ナナフシ♂", "ナナフシ♀",
+ "ダンゴムシ♂", "ダンゴムシ♀",
+ "カマキリ♂", "カマキリ♀",
+ "テントウムシ♂", "テントウムシ♀",
+ "カタツムリ♂", "カタツムリ♀",
+ "トンボ♂", "トンボ♀",
+ "アリ♂", "アリ♀",
+ "カゲロウ♂", "カゲロウ♀",
+ };
+
+ mctx->genCheckBox(insect_name[i], &mGoldBug[i], 1);
+ }
+
+ // "*****Fused Shadows*****"
+ mctx->genLabel("\n*****影の水晶石*****", 0);
+ char sp28[24];
+ for (int i = 0; i < 4; i = i + 1) {
+ sprintf(sp28, "影の水晶石%d", i + 1);
+ mctx->genCheckBox(sp28, &mFusedShadow[i], 1);
+ }
+
+ // "*****Mirror Shards*****"
+ mctx->genLabel("\n*****陰りの鏡*****", 0);
+ for (int i = 0; i < 4; i = i + 1) {
+ sprintf(sp28, "陰りの鏡%d", i + 1);
+ mctx->genCheckBox(sp28, &mMirrorShard[i], 1);
+ }
+}
+
+void dMw_HIO_c::update() {
+ JORMContext* mctx = attachJORMContext(8);
+ mctx->startUpdateNode(this);
+ mctx->updateCheckBox(2, &mArrowFlag, 1, 0);
+ mctx->updateCheckBox(2, &mBombFlag, 1, 0);
+ mctx->endUpdateNode();
+ releaseJORMContext(mctx);
+}
+
+void dMw_HIO_c::playerStatusHIO() {
+ JORMContext* mctx = attachJORMContext(8);
+
+ if (mLife != mLifeCopy) {
+ s16 sp10 = mLife - dComIfGs_getLife();
+ dComIfGp_clearItemLifeCount();
+ dComIfGp_setItemLifeCount(sp10, 0);
+ mLifeCopy = mLife;
+ } else if (mLifeCopy != dComIfGs_getLife()) {
+ mLife = mLifeCopy = dComIfGs_getLife();
+ mctx->updateSlider(2, &mLife, 0, 0, 0);
+ }
+
+ if (mMaxLifeCopy != mMaxLife) {
+ s16 spE = mMaxLife - dComIfGs_getMaxLife();
+ dComIfGp_clearItemMaxLifeCount();
+ dComIfGp_setItemMaxLifeCount(spE);
+ mMaxLifeCopy = mMaxLife;
+ } else if (mMaxLifeCopy != dComIfGs_getMaxLife()) {
+ mMaxLife = mMaxLifeCopy = dComIfGs_getMaxLife();
+ mctx->updateSlider(2, &mMaxLife, 0, 0, 0);
+ }
+
+ if (mMagicCopy != mMagic) {
+ s16 spC = mMagic - dComIfGs_getMagic();
+ dComIfGp_setItemMagicCount(spC);
+ mMagicCopy = mMagic;
+ } else if (mMagicCopy != dComIfGs_getMagic()) {
+ mMagic = mMagicCopy = dComIfGs_getMagic();
+ mctx->updateSlider(2, &mMagic, 0, 0, 0);
+ }
+
+ if (mMaxMagicCopy != mMaxMagic) {
+ s16 spB = mMaxMagic - dComIfGs_getMaxMagic();
+ dComIfGp_setItemMaxMagicCount(spB);
+ mMaxMagicCopy = mMaxMagic;
+ } else if (mMaxMagicCopy != dComIfGs_getMaxMagic()) {
+ mMaxMagic = mMaxMagicCopy = dComIfGs_getMaxMagic();
+ mctx->updateSlider(2, &mMaxMagic, 0, 0, 0);
+ }
+
+ if (mOilCopy != mOil) {
+ s32 sp2C = mOil - dComIfGs_getOil();
+ dComIfGp_setItemOilCount(sp2C);
+ mOilCopy = mOil;
+ } else if (mOilCopy != dComIfGs_getOil()) {
+ mOil = mOilCopy = dComIfGs_getOil();
+ mctx->updateSlider(2, &mOil, 0, 0, 0);
+ }
+
+ if (mMaxOilCopy != mMaxOil) {
+ s32 sp30 = mMaxOil - dComIfGs_getMaxOil();
+ dComIfGp_setItemMaxOilCount(sp30);
+ mMaxOilCopy = mMaxOil;
+ } else if (mMaxOilCopy != dComIfGs_getMaxOil()) {
+ mMaxOil = mMaxOilCopy = dComIfGs_getMaxOil();
+ mctx->updateSlider(2, &mMaxOil, 0, 0, 0);
+ }
+
+ if (mEnableOxygenMeterCopy != mEnableOxygenMeter) {
+ if (mEnableOxygenMeter) {
+ dComIfGp_onOxygenShowFlag();
+ } else {
+ dComIfGp_offOxygenShowFlag();
+ }
+ mEnableOxygenMeterCopy = mEnableOxygenMeter;
+ } else if (mEnableOxygenMeterCopy != dComIfGp_getOxygenShowFlag()) {
+ mEnableOxygenMeter = mEnableOxygenMeterCopy = dComIfGp_getOxygenShowFlag();
+ mctx->updateSlider(2, &mEnableOxygenMeter, 0, 0, 0);
+ }
+
+ if (mOxygenCopy != mOxygen) {
+ s32 sp30 = mOxygen - dComIfGp_getOxygen();
+ dComIfGp_setOxygenCount(sp30);
+ mOxygenCopy = mOxygen;
+ } else if (mOxygenCopy != dComIfGp_getOxygen()) {
+ mOxygen = mOxygenCopy = dComIfGp_getOxygen();
+ mctx->updateSlider(2, &mOxygen, 0, 0, 0);
+ }
+
+ if (mMaxOxygenCopy != mMaxOxygen) {
+ s32 sp30 = mMaxOxygen - dComIfGp_getMaxOxygen();
+ dComIfGp_setMaxOxygenCount(sp30);
+ mMaxOxygenCopy = mMaxOxygen;
+ } else if (mMaxOxygenCopy != dComIfGp_getMaxOxygen()) {
+ mMaxOxygen = mMaxOxygenCopy = dComIfGp_getMaxOxygen();
+ mctx->updateSlider(2, &mMaxOxygen, 0, 0, 0);
+ }
+
+ if (mRupeesCopy != mRupees) {
+ s32 sp30 = mRupees - dComIfGs_getRupee();
+ dComIfGp_clearItemRupeeCount();
+ dComIfGp_setItemRupeeCount(sp30);
+ mRupeesCopy = mRupees;
+ } else if (mRupeesCopy != dComIfGs_getRupee()) {
+ mRupees = mRupeesCopy = dComIfGs_getRupee();
+ mctx->updateSlider(2, &mRupees, 0, 0, 0);
+ }
+
+ if (mWalletSizeCopy != mWalletSize) {
+ mWalletSizeCopy = mWalletSize;
+ dComIfGs_setWalletSize(mWalletSize);
+ } else if (mWalletSizeCopy != (s16)dComIfGs_getWalletSize()) {
+ mWalletSize = mWalletSizeCopy = dComIfGs_getWalletSize();
+ mctx->updateSlider(2, &mWalletSize, 0, 0, 0);
+ }
+
+ if (mKeysCopy != mKeys) {
+ s16 sp30 = mKeys - dComIfGs_getKeyNum();
+ dComIfGp_clearItemKeyNumCount();
+ dComIfGp_setItemKeyNumCount(sp30);
+ mKeysCopy = mKeys;
+ } else if (mKeysCopy != dComIfGs_getKeyNum()) {
+ mKeys = mKeysCopy = dComIfGs_getKeyNum();
+ mctx->updateSlider(2, &mKeys, 0, 0, 0);
+ }
+
+ if (mPoesCopy != mPoes) {
+ dComIfGs_setPohSpiritNum(mPoes);
+ mPoesCopy = mPoes;
+ } else if (mPoesCopy != dComIfGs_getPohSpiritNum()) {
+ mPoes = mPoesCopy = dComIfGs_getPohSpiritNum();
+ mctx->updateSlider(2, &mPoes, 0, 0, 0);
+ }
+
+ if (mDonationAmountCopy != mDonationAmount) {
+ dMsgObject_setOffering(mDonationAmount);
+ mDonationAmountCopy = mDonationAmount;
+ } else if (mDonationAmountCopy != dMsgObject_getOffering()) {
+ mDonationAmount = mDonationAmountCopy = dMsgObject_getOffering();
+ mctx->updateSlider(2, &mDonationAmount, 0, 0, 0);
+ }
+
+ releaseJORMContext(mctx);
+}
+#endif
+
+u8 dMw_HIO_c::getBombFlag() {
+ #if DEBUG
+ if (mDoCPd_c::isConnect(PAD_3)) {
+ return mBombFlag;
+ } else if (mDoCPd_c::isConnect(PAD_3)) {
+ return mBombFlag;
+ } else {
+ return false;
+ }
+ #else
return false;
+ #endif
}
-bool dMw_HIO_c::getArrowFlag() {
+u8 dMw_HIO_c::getArrowFlag() {
+ #if DEBUG
+ if (mDoCPd_c::isConnect(PAD_3)) {
+ return mArrowFlag;
+ } else {
+ return false;
+ }
+ #else
return false;
+ #endif
}
-bool dMw_HIO_c::getPachinkoFlag() {
+u8 dMw_HIO_c::getPachinkoFlag() {
+ #if DEBUG
+ if (mDoCPd_c::isConnect(PAD_3)) {
+ return mPachinkoFlag;
+ } else {
+ return false;
+ }
+ #else
return false;
+ #endif
+}
+
+#if DEBUG
+void dMw_HIO_c::itemBitCheck() {
+ JORMContext* mctx = attachJORMContext(8);
+ u8 var_r29;
+
+ if (dComIfGs_isGetMagicUseFlag())
+ var_r29 = 1;
+ else
+ var_r29 = 0;
+
+ if (mEnableMagicCopy != var_r29) {
+ mEnableMagicCopy = mEnableMagic;
+ mEnableMagic = var_r29;
+ mctx->updateSlider(2, &mEnableMagic, 0, 0, 0);
+ }
+
+ if (mEnableArrowDrops != mEnableArrowDropsCopy) {
+ mEnableArrowDropsCopy = mEnableArrowDrops;
+ if (mEnableArrowDrops) {
+ dComIfGs_onItemFirstBit(dItemNo_BOW_e);
+ } else {
+ dComIfGs_offItemFirstBit(dItemNo_BOW_e);
+ }
+ }
+
+ if (mEnableArrowDrops != (u8)dComIfGs_isItemFirstBit(dItemNo_BOW_e)) {
+ mEnableArrowDrops = mEnableArrowDropsCopy = dComIfGs_isItemFirstBit(dItemNo_BOW_e);
+
+ JORMContext* mctx = attachJORMContext(8);
+ mctx->startUpdateNode(this);
+ mctx->updateCheckBox(2, &mEnableArrowDrops, 1, 0);
+ mctx->endUpdateNode();
+ releaseJORMContext(mctx);
+ }
+
+ for (int i = 0; i < 24; i++) {
+ if (mItemsCopy[i] != dComIfGs_getItem((u8)i, false)) {
+ field_0x7a[i] = 1;
+ mItemsCopy[i] = mItems[i];
+ mItems[i] = dComIfGs_getItem((u8)i, false);
+ mctx->updateComboBox(2, &mItems[i], 0);
+ }
+ }
+
+ if (mScentCopy != dComIfGs_getCollectSmell()) {
+ field_0xa8 = 1;
+ mScentCopy = mScent;
+ mScent = dComIfGs_getCollectSmell();
+ mctx->updateComboBox(2, &mScent, 0);
+ }
+
+ var_r29 = field_0x101[0];
+ if (dComIfGs_isCollectClothes(2)) {
+ var_r29 = 3;
+ } else if (dComIfGs_isCollectClothes(1)) {
+ var_r29 = 2;
+ } else if (dComIfGs_isCollectClothes(0)) {
+ var_r29 = 1;
+ } else {
+ var_r29 = 0;
+ }
+
+ if (field_0x101[0] != var_r29) {
+ field_0x101[0] = field_0xf9[0];
+ field_0xf9[0] = var_r29;
+ mctx->updateComboBox(2, &field_0xf9[0], 0);
+ }
+
+ for (int i = 0; i < 4; i++) {
+ static u8 m_sword_item[] = {dItemNo_SWORD_e, dItemNo_MASTER_SWORD_e, dItemNo_LIGHT_SWORD_e, dItemNo_WOOD_STICK_e};
+ if (dComIfGs_isItemFirstBit(m_sword_item[i]))
+ var_r29 = 1;
+ else
+ var_r29 = 0;
+
+ if (mSwordsCopy[i] != var_r29) {
+ mSwordsCopy[i] = mSwords[i];
+ mSwords[i] = var_r29;
+ mctx->updateSlider(2, &mSwords[i], 0, 0, 0);
+ }
+ }
+
+ for (int i = 0; i < 3; i++) {
+ static u8 m_cloth_item[] = {dItemNo_WEAR_KOKIRI_e, dItemNo_ARMOR_e, dItemNo_WEAR_ZORA_e};
+ if (dComIfGs_isItemFirstBit(m_cloth_item[i]))
+ var_r29 = 1;
+ else
+ var_r29 = 0;
+
+ if (mClothesCopy[i] != var_r29) {
+ mClothesCopy[i] = mClothes[i];
+ mClothes[i] = var_r29;
+ mctx->updateSlider(2, &mClothes[i], 0, 0, 0);
+ }
+
+ static u8 m_shield_item[] = {dItemNo_SHIELD_e, dItemNo_HYLIA_SHIELD_e, dItemNo_WOOD_SHIELD_e};
+ if (dComIfGs_isItemFirstBit(m_shield_item[i]))
+ var_r29 = 1;
+ else
+ var_r29 = 0;
+
+ if (mShieldsCopy[i] != var_r29) {
+ mShieldsCopy[i] = mShields[i];
+ mShields[i] = var_r29;
+ mctx->updateSlider(2, &mShields[i], 0, 0, 0);
+ }
+ }
+
+ if (dComIfGs_isItemFirstBit(dItemNo_BOMB_BAG_LV2_e))
+ var_r29 = 1;
+ else
+ var_r29 = 0;
+
+ if (mBombBagLV2Copy != var_r29) {
+ mBombBagLV2Copy = mBombBagLV2;
+ mBombBagLV2 = var_r29;
+ mctx->updateSlider(2, &mBombBagLV2, 0, 0, 0);
+ }
+
+ for (int i = 0; i < 3; i++) {
+ static u8 m_lv2_dun_key[] = {dItemNo_L2_KEY_PIECES1_e, dItemNo_L2_KEY_PIECES2_e, dItemNo_L2_KEY_PIECES3_e};
+ if (dComIfGs_isItemFirstBit(m_lv2_dun_key[i]))
+ var_r29 = 1;
+ else
+ var_r29 = 0;
+
+ if (mLV2KeyShardsCopy[i] != var_r29) {
+ mLV2KeyShardsCopy[i] = mLV2KeyShards[i];
+ mLV2KeyShards[i] = var_r29;
+ mctx->updateSlider(2, &mLV2KeyShards[i], 0, 0, 0);
+ }
+ }
+
+ for (int i = 0; i < 2; i++) {
+ static u8 m_lv5_dun_item[] = {dItemNo_TOMATO_PUREE_e, dItemNo_TASTE_e};
+ if (dComIfGs_isItemFirstBit(m_lv5_dun_item[i]))
+ var_r29 = 1;
+ else
+ var_r29 = 0;
+
+ if (mLV5ItemCopy[i] != var_r29) {
+ mLV5ItemCopy[i] = mLV5Item[i];
+ mLV5Item[i] = var_r29;
+ mctx->updateSlider(2, &mLV5Item[i], 0, 0, 0);
+ }
+ }
+
+ for (int i = 0; i < 24; i++) {
+ if (dComIfGs_isItemFirstBit(i + dItemNo_M_BEETLE_e))
+ var_r29 = 1;
+ else
+ var_r29 = 0;
+
+ if (mGoldBugCopy[i] != var_r29) {
+ mGoldBugCopy[i] = mGoldBug[i];
+ mGoldBug[i] = var_r29;
+ mctx->updateSlider(2, &mGoldBug[i], 0, 0, 0);
+ }
+ }
+
+ var_r29 = field_0x101[1];
+ if (dComIfGs_isCollectSword(1)) {
+ var_r29 = 2;
+ } else if (dComIfGs_isCollectSword(0)) {
+ var_r29 = 1;
+ } else if (dComIfGs_isCollectSword(2)) {
+ var_r29 = 3;
+ } else if (dComIfGs_isCollectSword(3)) {
+ var_r29 = 4;
+ } else {
+ var_r29 = 0;
+ }
+
+ if (field_0x101[1] != var_r29) {
+ field_0x101[1] = field_0xf9[1];
+ field_0xf9[1] = var_r29;
+ mctx->updateComboBox(2, &field_0xf9[1], 0);
+ }
+
+ var_r29 = field_0x101[2];
+ if (dComIfGs_isCollectShield(3)) {
+ var_r29 = 4;
+ } else if (dComIfGs_isCollectShield(2)) {
+ var_r29 = 3;
+ } else if (dComIfGs_isCollectShield(1)) {
+ var_r29 = 2;
+ } else if (dComIfGs_isCollectShield(0)) {
+ var_r29 = 1;
+ } else {
+ var_r29 = 0;
+ }
+
+ if (field_0x101[2] != var_r29) {
+ field_0x101[2] = field_0xf9[2];
+ field_0xf9[2] = var_r29;
+ mctx->updateComboBox(2, &field_0xf9[2], 0);
+ }
+
+ for (int i = 0; i < 4; i++) {
+ if (dComIfGs_isCollectCrystal(i))
+ var_r29 = 1;
+ else
+ var_r29 = 0;
+
+ if (mFusedShadowCopy[i] != var_r29) {
+ mFusedShadowCopy[i] = mFusedShadow[i];
+ mFusedShadow[i] = var_r29;
+ mctx->updateSlider(2, &mFusedShadow[i], 0, 0, 0);
+ }
+ }
+
+ for (int i = 0; i < 4; i++) {
+ if (dComIfGs_isCollectMirror(i))
+ var_r29 = 1;
+ else
+ var_r29 = 0;
+
+ if (mMirrorShardCopy[i] != var_r29) {
+ mMirrorShardCopy[i] = mMirrorShard[i];
+ mMirrorShard[i] = var_r29;
+ mctx->updateSlider(2, &mMirrorShard[i], 0, 0, 0);
+ }
+ }
+
+ releaseJORMContext(mctx);
}
+void dMw_HIO_c::itemNumHIO() {
+ JORMContext* mctx = attachJORMContext(8);
+
+ if (mArrowNumCopy != mArrowNum) {
+ s16 count = mArrowNum - dComIfGs_getArrowNum();
+ dComIfGp_setItemArrowNumCount(count);
+ mArrowNumCopy = mArrowNum;
+ } else if (mArrowNumCopy != dComIfGs_getArrowNum()) {
+ mArrowNum = mArrowNumCopy = dComIfGs_getArrowNum();
+ mctx->updateSlider(2, &mArrowNum, 0, 0, 0);
+ }
+
+ for (int i = 0; i < 4; i++) {
+ if (mBottleNumCopy[i] != mBottleNum[i]) {
+ s16 count = mBottleNum[i] - dComIfGs_getBottleNum(i);
+ dComIfGs_addBottleNum(i, count);
+ mBottleNumCopy[i] = mBottleNum[i];
+ } else if (mBottleNumCopy[i] != dComIfGs_getBottleNum(i)) {
+ mBottleNum[i] = mBottleNumCopy[i] = dComIfGs_getBottleNum(i);
+ mctx->updateSlider(2, &mBottleNum[i], 0, 0, 0);
+ }
+ }
+
+ for (int i = 0; i < 3; i++) {
+ if (mBombNumCopy[i] != mBombNum[i]) {
+ s16 count = mBombNum[i] - dComIfGs_getBombNum(i);
+ dComIfGp_setItemBombNumCount(i, count);
+ mBombNumCopy[i] = mBombNum[i];
+ } else if (mBombNumCopy[i] != dComIfGs_getBombNum(i)) {
+ mBombNum[i] = mBombNumCopy[i] = dComIfGs_getBombNum(i);
+ mctx->updateSlider(2, &mBombNum[i], 0, 0, 0);
+ }
+ }
+
+ if (mSeedNumCopy != mSeedNum) {
+ s16 count = mSeedNum - dComIfGs_getPachinkoNum();
+ dComIfGp_setItemPachinkoNumCount(count);
+ mSeedNumCopy = mSeedNum;
+ } else if (mSeedNumCopy != dComIfGs_getPachinkoNum()) {
+ mSeedNum = mSeedNumCopy = dComIfGs_getPachinkoNum();
+ mctx->updateSlider(2, &mSeedNum, 0, 0, 0);
+ }
+
+ releaseJORMContext(mctx);
+}
+
+void dMw_HIO_c::itemHIO() {
+ playerStatusHIO();
+ itemNumHIO();
+ itemBitCheck();
+
+ JORMContext* mctx = attachJORMContext(8);
+
+ if (mEnableMagic != mEnableMagicCopy) {
+ mEnableMagicCopy = mEnableMagic;
+ if (mEnableMagic) {
+ dComIfGs_onGetMagicUseFlag();
+ } else {
+ dComIfGs_offGetMagicUseFlag();
+ }
+ }
+
+ if (mEnableMagic != (u8)dComIfGs_isGetMagicUseFlag()) {
+ mEnableMagic = mEnableMagicCopy = dComIfGs_isGetMagicUseFlag();
+
+ JORMContext* mctx = attachJORMContext(8);
+ mctx->startUpdateNode(this);
+ mctx->updateCheckBox(2, &mEnableMagic, 1, 0);
+ mctx->endUpdateNode();
+ releaseJORMContext(mctx);
+ }
+
+ if (mEnableArrowDrops != mEnableArrowDropsCopy) {
+ mEnableArrowDropsCopy = mEnableArrowDrops;
+ if (mEnableArrowDrops) {
+ dComIfGs_onItemFirstBit(dItemNo_BOW_e);
+ } else {
+ dComIfGs_offItemFirstBit(dItemNo_BOW_e);
+ }
+ }
+
+ if (mEnableArrowDrops != (u8)dComIfGs_isItemFirstBit(dItemNo_BOW_e)) {
+ mEnableArrowDrops = mEnableArrowDropsCopy = dComIfGs_isItemFirstBit(dItemNo_BOW_e);
+
+ JORMContext* mctx = attachJORMContext(8);
+ mctx->startUpdateNode(this);
+ mctx->updateCheckBox(2, &mEnableArrowDrops, 1, 0);
+ mctx->endUpdateNode();
+ releaseJORMContext(mctx);
+ }
+
+ for (int i = 0; i < 24; i++) {
+ if (mItems[i] != mItemsCopy[i]) {
+ if (i == 20 && field_0x7a[i] == 0) {
+ switch (mItems[i]) {
+ case dItemNo_NONE_e:
+ case dItemNo_FISHING_ROD_1_e:
+ case dItemNo_BEE_ROD_e:
+ case dItemNo_WORM_ROD_e:
+ dComIfGs_offItemFirstBit(dItemNo_ZORAS_JEWEL_e);
+ break;
+ case dItemNo_JEWEL_ROD_e:
+ case dItemNo_JEWEL_BEE_ROD_e:
+ case dItemNo_JEWEL_WORM_ROD_e:
+ case dItemNo_ZORAS_JEWEL_e:
+ dComIfGs_onItemFirstBit(dItemNo_ZORAS_JEWEL_e);
+ break;
+ }
+ }
+
+ dComIfGs_setItem((u8)i, mItems[i]);
+
+ if (mItems[i] == dItemNo_HOT_SPRING_e) {
+ dMeter2Info_setHotSpringTimer(i);
+ }
+
+ if (mItems[i] == dItemNo_BEE_CHILD_e && field_0x7a[i] == 0) {
+ dComIfGs_setBottleNum(i - 11, dComIfGs_getBottleMax());
+ }
+
+ mItemsCopy[i] = mItems[i];
+ field_0x7a[i] = 0;
+ }
+ }
+
+ if (mScent != mScentCopy) {
+ dMsgObject_setSmellType(mScent);
+ mScentCopy = mScent;
+ field_0xa8 = 0;
+ }
+
+ for (int i = 0; i < 4; i++) {
+ if (mSwords[i] != mSwordsCopy[i]) {
+ static u8 m_sword_item[] = {dItemNo_SWORD_e, dItemNo_MASTER_SWORD_e, dItemNo_LIGHT_SWORD_e, dItemNo_WOOD_STICK_e};
+ if (mSwords[i] != 0) {
+ dComIfGs_onItemFirstBit(m_sword_item[i]);
+ } else {
+ dComIfGs_offItemFirstBit(m_sword_item[i]);
+ if (m_sword_item[i] == dComIfGs_getSelectEquipSword()) {
+ dMeter2Info_setSword(dItemNo_NONE_e, false);
+ }
+ }
+
+ mSwordsCopy[i] = mSwords[i];
+ }
+ }
+
+ for (int i = 0; i < 3; i++) {
+ if (mClothes[i] != mClothesCopy[i]) {
+ static u8 m_cloth_item[] = {dItemNo_WEAR_KOKIRI_e, dItemNo_ARMOR_e, dItemNo_WEAR_ZORA_e};
+ if (mClothes[i] != 0) {
+ dComIfGs_onItemFirstBit(m_cloth_item[i]);
+ } else {
+ dComIfGs_offItemFirstBit(m_cloth_item[i]);
+
+ }
+ mClothesCopy[i] = mClothes[i];
+ }
+
+ if (mShields[i] != mShieldsCopy[i]) {
+ static u8 m_shield_item[] = {dItemNo_SHIELD_e, dItemNo_HYLIA_SHIELD_e, dItemNo_WOOD_SHIELD_e};
+ if (mShields[i] != 0) {
+ dComIfGs_onItemFirstBit(m_shield_item[i]);
+ } else {
+ dComIfGs_offItemFirstBit(m_shield_item[i]);
+
+ }
+ mShieldsCopy[i] = mShields[i];
+ }
+ }
+
+ if (mBombBagLV2 != mBombBagLV2Copy) {
+ if (mBombBagLV2) {
+ dComIfGs_onItemFirstBit(dItemNo_BOMB_BAG_LV2_e);
+ } else {
+ dComIfGs_offItemFirstBit(dItemNo_BOMB_BAG_LV2_e);
+ }
+ mBombBagLV2Copy = mBombBagLV2;
+ }
+
+ for (int i = 0; i < 3; i++) {
+ static u8 m_lv2_dun_key[] = {dItemNo_L2_KEY_PIECES1_e, dItemNo_L2_KEY_PIECES2_e, dItemNo_L2_KEY_PIECES3_e};
+ if (mLV2KeyShards[i] != mLV2KeyShardsCopy[i]) {
+ if (mLV2KeyShards[i] != 0) {
+ dComIfGs_onItemFirstBit(m_lv2_dun_key[i]);
+ } else {
+ dComIfGs_offItemFirstBit(m_lv2_dun_key[i]);
+ }
+ mLV2KeyShardsCopy[i] = mLV2KeyShards[i];
+ }
+ }
+
+ for (int i = 0; i < 2; i++) {
+ static u8 m_lv5_dun_item[] = {dItemNo_TOMATO_PUREE_e, dItemNo_TASTE_e};
+ if (mLV5Item[i] != mLV5ItemCopy[i]) {
+ if (mLV5Item[i] != 0) {
+ dComIfGs_onItemFirstBit(m_lv5_dun_item[i]);
+ } else {
+ dComIfGs_offItemFirstBit(m_lv5_dun_item[i]);
+ }
+ mLV5ItemCopy[i] = mLV5Item[i];
+ }
+ }
+
+ for (int i = 0; i < 24; i++) {
+ if (mGoldBug[i] != mGoldBugCopy[i]) {
+ if (mGoldBug[i] != 0) {
+ dComIfGs_onItemFirstBit(i + dItemNo_M_BEETLE_e);
+ } else {
+ dComIfGs_offItemFirstBit(i + dItemNo_M_BEETLE_e);
+ }
+ mGoldBugCopy[i] = mGoldBug[i];
+ }
+ }
+
+ for (int i = 0; i < 3; i++) {
+ if (i == 0) {
+ if (g_playerKind == 2) {
+ field_0xf9[i] = 0;
+ } else if (g_playerKind == 3) {
+ field_0xf9[i] = 1;
+ } else if (g_playerKind == 4) {
+ field_0xf9[i] = 2;
+ }
+ }
+
+ if (field_0xf9[i] != field_0x101[i]) {
+ switch (i) {
+ case 0:
+ for (int j = 0; j < 8; j++) {
+ dComIfGs_offCollectClothes(j);
+ }
+
+ if (field_0xf9[i] != 0) {
+ dComIfGs_setCollectClothes(field_0xf9[i] - 1);
+ } else {
+ dComIfGs_setSelectEquipClothes(dItemNo_WEAR_CASUAL_e);
+ }
+ break;
+ case 1:
+ for (int j = 0; j < 8; j++) {
+ dComIfGs_offCollectSword(j);
+ }
+
+ if (field_0xf9[i] != 0) {
+ dComIfGs_setCollectSword(field_0xf9[i] - 1);
+ } else {
+ dComIfGs_setSelectEquipSword(dItemNo_NONE_e);
+ }
+ break;
+ case 2:
+ for (int j = 0; j < 8; j++) {
+ dComIfGs_offCollectShield(j);
+ }
+
+ if (field_0xf9[i] != 0) {
+ dComIfGs_setCollectShield(field_0xf9[i] - 1);
+ } else {
+ dComIfGs_setSelectEquipShield(dItemNo_NONE_e);
+ }
+ break;
+ }
+
+ field_0x101[i] = field_0xf9[i];
+ }
+ }
+
+ for (int i = 0; i < 4; i++) {
+ if (mFusedShadow[i] != mFusedShadowCopy[i]) {
+ if (mFusedShadow[i] != 0) {
+ dComIfGs_onCollectCrystal(i);
+ } else {
+ dComIfGs_offCollectCrystal(i);
+ }
+ mFusedShadowCopy[i] = mFusedShadow[i];
+ }
+ }
+
+ for (int i = 0; i < 4; i++) {
+ if (mMirrorShard[i] != mMirrorShardCopy[i]) {
+ if (mMirrorShard[i] != 0) {
+ dComIfGs_onCollectMirror(i);
+ } else {
+ dComIfGs_offCollectMirror(i);
+ }
+ mMirrorShardCopy[i] = mMirrorShard[i];
+ }
+ }
+
+ releaseJORMContext(mctx);
+}
+#endif
+
dMw_DHIO_c::dMw_DHIO_c() {
for (int i = 0; i < 32; i++) {
mMap[i] = false;
@@ -163,6 +1101,226 @@ dMw_DHIO_c::dMw_DHIO_c() {
}
}
+#if DEBUG
+void dMw_DHIO_c::genMessage(JORMContext* mctx) {
+ static const char* name_str[] = {
+ "\n*****0 ラトアーヌ地方*****",
+ "\n*****1 ハイラル城*****",
+ "\n*****2 フィローネ地方*****",
+ "\n*****3 オルディン地方*****",
+ "\n*****4 ラネール地方*****",
+ "\n*****5 影の世界*****",
+ "\n*****6 環状フィールド*****",
+ "\n*****7 空き*****",
+ "\n*****8 空き*****",
+ "\n*****9 空き*****",
+ "\n*****10 空き*****",
+ "\n*****11 空き*****",
+ "\n*****12 空き*****",
+ "\n*****13 空き*****",
+ "\n*****14 空き*****",
+ "\n*****15 空き*****",
+ "\n*****16 L-1ダンジョン*****",
+ "\n*****17 L-2ダンジョン*****",
+ "\n*****18 L-3ダンジョン*****",
+ "\n*****19 L-4ダンジョン*****",
+ "\n*****20 L-5ダンジョン*****",
+ "\n*****21 L-6ダンジョン*****",
+ "\n*****22 L-7ダンジョン*****",
+ "\n*****23 L-8ダンジョン*****",
+ "\n*****24 最終ダンジョン*****",
+ "\n*****25 空き*****",
+ "\n*****26 空き*****",
+ "\n*****27 空き*****",
+ "\n*****28 空き*****",
+ "\n*****29 空き*****",
+ "\n*****30 空き*****",
+ "\n*****31 デフォルト*****",
+ };
+
+ for (int i = 16; i < 25; i++) {
+ mctx->genLabel(name_str[i], 0);
+ mctx->genCheckBox("マップ", &mMap[i], 1);
+ mctx->genCheckBox("コンパス", &mCompass[i], 1);
+ mctx->genCheckBox("ボス鍵", &mBossKey[i], 1);
+ mctx->genCheckBox("ワープ", &mPortal[i], 1);
+ mctx->genCheckBox("中ボス攻略", &mMidBossClear[i], 1);
+ mctx->genCheckBox("ボス攻略", &mBossClear[i], 1);
+ mctx->genCheckBox("ハートの器", &mHeartContainer[i], 1);
+ mctx->genCheckBox("ボスデモ", &mBossDemo[i], 1);
+ }
+}
+
+void dMw_DHIO_c::bitCheck() {
+ JORMContext* mctx = attachJORMContext(8);
+ u8 var_r28;
+
+ for (int i = 0; i < 32; i++) {
+ if (dComIfGs_isDungeonItemMap(i))
+ var_r28 = 1;
+ else
+ var_r28 = 0;
+
+ if (mMapCopy[i] != var_r28) {
+ mMapCopy[i] = mMap[i];
+ mMap[i] = var_r28;
+ mctx->updateSlider(2, &mMap[i], 0, 0, 0);
+ }
+
+ if (mMap[i] != mMapCopy[i]) {
+ if (mMap[i] != 0) {
+ dComIfGs_onDungeonItemMap(i);
+ } else {
+ dComIfGs_offDungeonItemMap(i);
+ }
+ mMapCopy[i] = mMap[i];
+ }
+
+ if (dComIfGs_isDungeonItemCompass(i))
+ var_r28 = 1;
+ else
+ var_r28 = 0;
+
+ if (mCompassCopy[i] != var_r28) {
+ mCompassCopy[i] = mCompass[i];
+ mCompass[i] = var_r28;
+ mctx->updateSlider(2, &mCompass[i], 0, 0, 0);
+ }
+
+ if (mCompass[i] != mCompassCopy[i]) {
+ if (mCompass[i] != 0) {
+ dComIfGs_onDungeonItemCompass(i);
+ } else {
+ dComIfGs_offDungeonItemCompass(i);
+ }
+ mCompassCopy[i] = mCompass[i];
+ }
+
+ if (dComIfGs_isDungeonItemBossKey(i))
+ var_r28 = 1;
+ else
+ var_r28 = 0;
+
+ if (mBossKeyCopy[i] != var_r28) {
+ mBossKeyCopy[i] = mBossKey[i];
+ mBossKey[i] = var_r28;
+ mctx->updateSlider(2, &mBossKey[i], 0, 0, 0);
+ }
+
+ if (mBossKey[i] != mBossKeyCopy[i]) {
+ if (mBossKey[i] != 0) {
+ dComIfGs_onDungeonItemBossKey(i);
+ } else {
+ dComIfGs_offDungeonItemBossKey(i);
+ }
+ mBossKeyCopy[i] = mBossKey[i];
+ }
+
+ if (dComIfGs_isDungeonItemWarp(i))
+ var_r28 = 1;
+ else
+ var_r28 = 0;
+
+ if (mPortalCopy[i] != var_r28) {
+ mPortalCopy[i] = mPortal[i];
+ mPortal[i] = var_r28;
+ mctx->updateSlider(2, &mPortal[i], 0, 0, 0);
+ }
+
+ if (mPortal[i] != mPortalCopy[i]) {
+ if (mPortal[i] != 0) {
+ dComIfGs_onDungeonItemWarp(i);
+ } else {
+ dComIfGs_offDungeonItemWarp(i);
+ }
+ mPortalCopy[i] = mPortal[i];
+ }
+
+ if (dComIfGs_isStageBossEnemy(i))
+ var_r28 = 1;
+ else
+ var_r28 = 0;
+
+ if (mBossClearCopy[i] != var_r28) {
+ mBossClearCopy[i] = mBossClear[i];
+ mBossClear[i] = var_r28;
+ mctx->updateSlider(2, &mBossClear[i], 0, 0, 0);
+ }
+
+ if (mBossClear[i] != mBossClearCopy[i]) {
+ if (mBossClear[i] != 0) {
+ dComIfGs_onStageBossEnemy(i);
+ } else {
+ dComIfGs_offStageBossEnemy(i);
+ }
+ mBossClearCopy[i] = mBossClear[i];
+ }
+
+ if (dComIfGs_isStageMiddleBoss(i))
+ var_r28 = 1;
+ else
+ var_r28 = 0;
+
+ if (mMidBossClearCopy[i] != var_r28) {
+ mMidBossClearCopy[i] = mMidBossClear[i];
+ mMidBossClear[i] = var_r28;
+ mctx->updateSlider(2, &mMidBossClear[i], 0, 0, 0);
+ }
+
+ if (mMidBossClear[i] != mMidBossClearCopy[i]) {
+ if (mMidBossClear[i] != 0) {
+ dComIfGs_onStageMiddleBoss(i);
+ } else {
+ dComIfGs_offStageMiddleBoss(i);
+ }
+ mMidBossClearCopy[i] = mMidBossClear[i];
+ }
+
+ if (dComIfGs_isStageLife(i))
+ var_r28 = 1;
+ else
+ var_r28 = 0;
+
+ if (mHeartContainerCopy[i] != var_r28) {
+ mHeartContainerCopy[i] = mHeartContainer[i];
+ mHeartContainer[i] = var_r28;
+ mctx->updateSlider(2, &mHeartContainer[i], 0, 0, 0);
+ }
+
+ if (mHeartContainer[i] != mHeartContainerCopy[i]) {
+ if (mHeartContainer[i] != 0) {
+ dComIfGs_onStageLife(i);
+ } else {
+ dComIfGs_offStageLife(i);
+ }
+ mHeartContainerCopy[i] = mHeartContainer[i];
+ }
+
+ if (dComIfGs_isStageBossDemo(i))
+ var_r28 = 1;
+ else
+ var_r28 = 0;
+
+ if (mBossDemoCopy[i] != var_r28) {
+ mBossDemoCopy[i] = mBossDemo[i];
+ mBossDemo[i] = var_r28;
+ mctx->updateSlider(2, &mBossDemo[i], 0, 0, 0);
+ }
+
+ if (mBossDemo[i] != mBossDemoCopy[i]) {
+ if (mBossDemo[i] != 0) {
+ dComIfGs_onStageBossDemo(i);
+ } else {
+ dComIfGs_offStageBossDemo(i);
+ }
+ mBossDemoCopy[i] = mBossDemo[i];
+ }
+ }
+
+ releaseJORMContext(mctx);
+}
+#endif
+
dMw_HIO_c g_mwHIO;
dMw_DHIO_c g_mwDHIO;