diff --git a/include/SSystem/SComponent/c_bg_s_chk.h b/include/SSystem/SComponent/c_bg_s_chk.h index e8ffbd457..204eb4165 100644 --- a/include/SSystem/SComponent/c_bg_s_chk.h +++ b/include/SSystem/SComponent/c_bg_s_chk.h @@ -27,7 +27,12 @@ public: mGrpPassChk = NULL; unk_0x0C = 1; } - void SetExtChk(cBgS_Chk&); + void SetExtChk(cBgS_Chk& other) { + mPolyPassChk = other.mPolyPassChk; + mGrpPassChk = other.mGrpPassChk; + mActorPid = other.mActorPid; + unk_0x0C = other.unk_0x0C; + } bool ChkSameActorPid(unsigned int) const; void SetActorPid(u32 pid) { mActorPid = pid; } diff --git a/include/SSystem/SComponent/c_m3d_g_cir.h b/include/SSystem/SComponent/c_m3d_g_cir.h index 242163819..fb0ef9b96 100644 --- a/include/SSystem/SComponent/c_m3d_g_cir.h +++ b/include/SSystem/SComponent/c_m3d_g_cir.h @@ -21,7 +21,7 @@ class cM3dGCir : public cM2dGCir { f32 mPosZ; public: - cM3dGCir(void); + cM3dGCir(void) {} virtual ~cM3dGCir(void) {} void Set(f32, f32, f32, f32); }; diff --git a/include/d/actor/d_a_player_link.h b/include/d/actor/d_a_player_link.h index 876314968..a03101c96 100644 --- a/include/d/actor/d_a_player_link.h +++ b/include/d/actor/d_a_player_link.h @@ -1061,8 +1061,6 @@ public: /* 0x0708 */ dBgS_BoomerangLinChk mBoomerangLinChk; /* 0x0774 */ dBgS_LinkGndChk mGndChk; /* 0x07C8 */ dBgS_LinkRoofChk mRoofChk; - /* 0x080C */ void* field_0x080c; - /* 0x0810 */ void* field_0x0810; /* 0x0814 */ dBgS_ArrowLinChk mArrowLinChk; /* 0x0880 */ dBgS_MirLightLinChk mMirLightLinChk; /* 0x08EC */ u8 field_0x08EC[0x0910 - 0x08EC]; diff --git a/include/d/d_bg_s_acch.h b/include/d/d_bg_s_acch.h index bfd47a414..897ed892c 100644 --- a/include/d/d_bg_s_acch.h +++ b/include/d/d_bg_s_acch.h @@ -68,6 +68,9 @@ public: /* 0x004000 */ LINE_CHECK_NONE = (1 << 14), /* 0x008000 */ CLR_SPEED_Y = (1 << 15), /* 0x010000 */ LINE_CHECK_HIT = (1 << 16), + /* 0x020000 */ SEA_CHECK = (1 << 17), + /* 0x040000 */ SEA_WATER_HEIGHT = (1 << 18), + /* 0x080000 */ SEA_IN = (1 << 19), /* 0x100000 */ MOVE_BG_ONLY = (1 << 20), /* 0x200000 */ GND_THIN_CELLING_OFF = (1 << 21), /* 0x400000 */ WALL_SORT = (1 << 22), @@ -103,16 +106,17 @@ public: void OnWallSort(); bool ChkWallSort(); bool ChkLineDown(); - bool ChkRoofHit() const; void ClrGroundHit(); - bool ChkGroundHit() const; + f32 GetOnePolyInfo(cBgS_PolyInfo*); + f32 GetWallAddY(Vec&, int); virtual ~dBgS_Acch(); cXyz* GetPos() { return pm_pos; } cXyz* GetOldPos() { return pm_old_pos; } - f32 GetGroundH() const { return m_ground_h; } - f32 GetRoofHeight() const { return m_roof_height; } + f32 GetGroundH() { return m_ground_h; } + f32 GetRoofHeight() { return m_roof_height; } + f32 GetSeaHeight() { return m_sea_height; } void SetLin() { m_lin.SetStartEnd(*pm_old_pos, *pm_pos); } bool ChkGroundFind() { return m_flags & GROUND_FIND; } bool ChkGroundHit() { return m_flags & GROUND_HIT; } @@ -155,6 +159,9 @@ public: bool ChkMoveBGOnly() const { return m_flags & MOVE_BG_ONLY; } void SetWallHit() { m_flags |= WALL_HIT; } void ClrWallNone() { m_flags &= ~WALL_NONE; } + bool ChkSeaCheckOn() { return m_flags & SEA_CHECK;} + bool ChkSeaWaterHeight() { return m_flags & SEA_WATER_HEIGHT;} + bool ChkSeaIn() { return m_flags & SEA_IN;} cM3dGCyl* GetWallBmdCylP() { return &m_wall_cyl; } public: @@ -167,28 +174,27 @@ public: /* 0x040 */ cM3dGLin m_lin; /* 0x05C */ cM3dGCyl m_wall_cyl; /* 0x074 */ int m_bg_index; - /* 0x078 */ void* field_0x7c; - /* 0x07C */ u32 field_0x80; + /* 0x078 */ void* field_0x78; + /* 0x07C */ u32 field_0x7c; /* 0x080 */ fopAc_ac_c* m_my_ac; /* 0x084 */ int m_tbl_size; - /* 0x088 */ dBgS_AcchCir* field_0x8c; - /* 0x08C */ f32 field_0x90; - /* 0x090 */ f32 field_0x94; + /* 0x088 */ dBgS_AcchCir* mp_acch_cir; + /* 0x08C */ f32 m_ground_up_h; + /* 0x090 */ f32 m_ground_up_h_diff; /* 0x094 */ f32 m_ground_h; - /* 0x098 */ f32 field_0x9c; - /* 0x09C */ cM3dGPla field_0xa0; - /* 0x0B0 */ u8 field_0xb4; - /* 0x0B4 */ f32 field_0xb8; - /* 0x0B8 */ f32 field_0xbc; - /* 0x0BC */ u8 field_0xc0; + /* 0x098 */ f32 field_0x98; + /* 0x09C */ cM3dGPla m_pla; + /* 0x0B0 */ u8 field_0xb0; + /* 0x0B4 */ f32 field_0xb4; + /* 0x0B8 */ f32 field_0xb8; + /* 0x0BC */ f32 m_roof_y; /* 0x0C0 */ f32 m_roof_height; /* 0x0C4 */ f32 m_roof_crr_height; /* 0x0C8 */ f32 field_0xc8; - /* 0x0CC */ int field_0xd4; - /* 0x0D0 */ f32 field_0xd8; + /* 0x0CC */ cBgS_PolyInfo* pm_out_poly_info; + /* 0x0D0 */ f32 m_sea_height; /* 0x0D4 */ dBgS_GndChk m_gnd; /* 0x128 */ dBgS_RoofChk m_roof; - /* 0x16C */ u8 field_0x16c[0x174 - 0x16C]; /* 0x174 */ dBgS_WtrChk m_wtr; }; // Size: 0x1C4 diff --git a/include/d/d_bg_s_poly_pass_chk.h b/include/d/d_bg_s_poly_pass_chk.h index 7e8c1f3f1..8205fb4e1 100644 --- a/include/d/d_bg_s_poly_pass_chk.h +++ b/include/d/d_bg_s_poly_pass_chk.h @@ -36,6 +36,10 @@ public: void SetBomb() { mbBombThrough = true; } void SetBoomerang() { mbBoomerangThrough = true; } void SetRope() { mbRopeThrough = true; } + + void SetPassChkInfo(dBgS_PolyPassChk& other) { + *this = other; + } }; STATIC_ASSERT(sizeof(dBgS_PolyPassChk) == 0xC); diff --git a/include/d/d_bg_s_roof_chk.h b/include/d/d_bg_s_roof_chk.h index e3e4affe3..7007f409a 100644 --- a/include/d/d_bg_s_roof_chk.h +++ b/include/d/d_bg_s_roof_chk.h @@ -7,25 +7,34 @@ class dBgS_RoofChk : public cBgS_PolyInfo, public cBgS_Chk, public dBgS_Chk { public: - dBgS_RoofChk(); + dBgS_RoofChk() { + SetPolyPassChk(GetPolyPassChkInfo()); + SetGrpPassChk(GetGrpPassChkInfo()); + m_pos.x = 0.0f; + m_pos.y = 0.0f; + m_pos.z = 0.0f; + SetActorPid(-1); + field_0x44 = 0; + } void Init(); - void SetPos(cXyz const&); - virtual ~dBgS_RoofChk(); + virtual ~dBgS_RoofChk() {} - void i_SetPos(cXyz const& pos) { m_pos = pos; } + void SetPos(cXyz const& pos) { m_pos = pos; } cXyz* GetPosP() { return &m_pos; } private: /* 0x38 */ cXyz m_pos; -}; // Size: 0x44 + /* 0x44 */ void* field_0x44; + /* 0x48 */ void* field_0x48; +}; // Size: 0x4C -STATIC_ASSERT(sizeof(dBgS_RoofChk) == 0x44); +STATIC_ASSERT(sizeof(dBgS_RoofChk) == 0x4C); class dBgS_LinkRoofChk : public dBgS_RoofChk { public: dBgS_LinkRoofChk() { /* SetLink(); */ } virtual ~dBgS_LinkRoofChk(); -}; +}; // Size: 0x4C #endif /* D_BG_D_BG_S_ROOF_CHK_H */ \ No newline at end of file diff --git a/include/d/d_bg_s_spl_grp_chk.h b/include/d/d_bg_s_spl_grp_chk.h index cae1c1af0..215a0c22e 100644 --- a/include/d/d_bg_s_spl_grp_chk.h +++ b/include/d/d_bg_s_spl_grp_chk.h @@ -13,11 +13,10 @@ public: /* 0x4 */ MOVE_BG_ONLY = 4 }; - void Set(cXyz&, f32); - dBgS_SplGrpChk(); + dBgS_SplGrpChk() {} void Init(); - virtual ~dBgS_SplGrpChk(); + virtual ~dBgS_SplGrpChk() {} void OffFind() { m_flags &= ~FIND; } void OffIn() { m_flags &= ~IN; } @@ -29,6 +28,10 @@ public: f32 GetHeight() { return m_height; } cXyz& GetPosP() { return m_ground; } f32 GetRoof() const { return m_roof; } + void Set(cXyz& ground, f32 roof) { + m_ground = ground; + m_roof = roof; + } private: /* 0x38 */ cXyz m_ground; diff --git a/include/d/d_bg_s_wtr_chk.h b/include/d/d_bg_s_wtr_chk.h index f9c210c27..5c22072c9 100644 --- a/include/d/d_bg_s_wtr_chk.h +++ b/include/d/d_bg_s_wtr_chk.h @@ -7,7 +7,7 @@ class dBgS_WtrChk : public dBgS_SplGrpChk { public: dBgS_WtrChk(); - virtual ~dBgS_WtrChk(); + virtual ~dBgS_WtrChk() {} }; // Size: 0x50 STATIC_ASSERT(sizeof(dBgS_WtrChk) == 0x50); diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index a0077e585..8903d103a 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1139,6 +1139,10 @@ inline s32 dComIfGp_roomControl_getStayNo() { return dStage_roomControl_c::getStayNo(); } +inline dBgW* dComIfGp_roomControl_getBgW(int i_roomNo) { + return dStage_roomControl_c::getBgW(i_roomNo); +} + inline void dComIfGp_roomControl_init() { g_dComIfG_gameInfo.play.getRoomControl()->init(); } diff --git a/include/d/d_stage.h b/include/d/d_stage.h index 82dce90d1..9302f8c5e 100644 --- a/include/d/d_stage.h +++ b/include/d/d_stage.h @@ -770,7 +770,7 @@ public: /* 0x18 */ int field_0x18[2]; }; -class dBgW_base; +class dBgW; class dStage_roomStatus_c : public dStage_roomDt_c { public: /* 0x054 */ dKy_tevstr_c mTevStr; @@ -780,7 +780,7 @@ public: /* 0x107 */ s8 mZoneNo; /* 0x108 */ s8 mMemBlockID; /* 0x10C */ int mProcID; - /* 0x110 */ dBgW_base* mpBgW; + /* 0x110 */ dBgW* mpBgW; int getZoneNo() const { return mZoneNo; } ~dStage_roomStatus_c() {} @@ -801,7 +801,7 @@ public: void checkDrawArea() const; dStage_darkStatus_c* getDarkStatus(); u32 getDarkMode(); - void getBgW(int); + static dBgW* getBgW(int i_roomNo); static JKRExpHeap* createMemoryBlock(int, u32); static void destroyMemoryBlock(); @@ -830,7 +830,7 @@ public: mStatus[i_roomNo].mMemBlockID = i_blockID; } - static void setBgW(int param_0, dBgW_base* i_bgw) { mStatus[param_0].mpBgW = i_bgw; } + static void setBgW(int i_roomNo, dBgW* i_bgw) { mStatus[i_roomNo].mpBgW = i_bgw; } BOOL checkStatusFlag(int i_roomNo, u8 flag) const { return cLib_checkBit(mStatus[i_roomNo].mFlags, flag); diff --git a/include/f_op/f_op_actor.h b/include/f_op/f_op_actor.h index c5b5da6ff..3bad63b38 100644 --- a/include/f_op/f_op_actor.h +++ b/include/f_op/f_op_actor.h @@ -89,13 +89,12 @@ struct actor_process_profile_definition2 { class JKRSolidHeap; enum dEvt_Command_e { - dEvtCmd_NONE_e, - dEvtCmd_INTALK_e, - dEvtCmd_INDEMO_e, - dEvtCmd_INDOOR_e, - dEvtCmd_INGETITEM_e, - dEvtCmd_INCATCH_e = 6, - dEvtCmd_DUMMY = 0xFFFF, + dEvtCmd_NONE_e = 0x0000, + dEvtCmd_INTALK_e = 0x0001, + dEvtCmd_INDEMO_e = 0x0002, + dEvtCmd_INDOOR_e = 0x0003, + dEvtCmd_INGETITEM_e = 0x0004, + dEvtCmd_INCATCH_e = 0x0006, }; enum dEvt_Condition_e { @@ -104,7 +103,6 @@ enum dEvt_Condition_e { dEvtCnd_CANDOOR_e = 0x0004, dEvtCnd_CANGETITEM_e = 0x0008, dEvtCnd_CANTALKITEM_e = 0x0020, - dEvtCnd_DUMMY = 0x8000, }; class dEvt_info_c { diff --git a/src/d/actor/d_a_player_npc.cpp b/src/d/actor/d_a_player_npc.cpp index 369085e58..c6a237a61 100644 --- a/src/d/actor/d_a_player_npc.cpp +++ b/src/d/actor/d_a_player_npc.cpp @@ -177,19 +177,14 @@ void daPy_npc_c::drawDamageFog() { return; } - cXyz temp; - f32 temp_f1; - f32 temp_f2; - mDoLib_pos2camera(¤t.pos, &temp); - temp_f2 = fabs(cM_ssin(g_Counter.mTimer * 0x800)); + cXyz camPos; + mDoLib_pos2camera(¤t.pos, &camPos); + f32 adjust = fabsf(cM_ssin(g_Counter.mTimer * 0x800)); mTevStr.mFogColor.r = 255; mTevStr.mFogColor.g = 60; mTevStr.mFogColor.b = 60; - temp_f1 = -temp.z; - temp_f1 -= 200.0f; - temp_f2 = 200.0f * temp_f2; - mTevStr.mFogStartZ = temp_f1 + temp_f2; + mTevStr.mFogStartZ = (-camPos.z - 200.0f) + 200.0f * adjust; mTevStr.mFogEndZ = mTevStr.mFogStartZ + 300.0f; } diff --git a/src/d/d_bg_s_acch.cpp b/src/d/d_bg_s_acch.cpp index aae0e5cfb..1ccc91fd8 100644 --- a/src/d/d_bg_s_acch.cpp +++ b/src/d/d_bg_s_acch.cpp @@ -3,32 +3,73 @@ // Translation Unit: d_bg_s_acch.cpp // -#include "d_bg_s_acch.h" +#include "d/d_bg_s_acch.h" +#include "d/d_bg_s.h" #include "dolphin/types.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "f_op/f_op_actor_mng.h" +#include "d/d_com_inf_game.h" + +bool daSea_ChkArea(f32, f32); +f32 daSea_calcWave(f32, f32); /* 800A257C-800A25F4 .text __ct__12dBgS_AcchCirFv */ dBgS_AcchCir::dBgS_AcchCir() { - /* Nonmatching */ + m_flags = 0; + m_wall_rr = 0.0f; + field_0x2c = 0.0f; + m_wall_h = 0.0f; + m_wall_r = 0.0f; + m_wall_angle_y = 0; + m_wall_h_direct = 0.0f; } /* 800A25F4-800A25FC .text SetWallR__12dBgS_AcchCirFf */ -void dBgS_AcchCir::SetWallR(float) { - /* Nonmatching */ +void dBgS_AcchCir::SetWallR(f32 radius) { + m_wall_r = radius; } /* 800A25FC-800A2624 .text SetWall__12dBgS_AcchCirFff */ -void dBgS_AcchCir::SetWall(float, float) { - /* Nonmatching */ +void dBgS_AcchCir::SetWall(f32 height, f32 radius) { + m_wall_h = height; + SetWallR(radius); } /* 800A2624-800A29B0 .text __dt__9dBgS_AcchFv */ dBgS_Acch::~dBgS_Acch() { - /* Nonmatching */ } /* 800A29B0-800A2CFC .text __ct__9dBgS_AcchFv */ dBgS_Acch::dBgS_Acch() { - /* Nonmatching */ + SetPolyPassChk(GetPolyPassChkInfo()); + SetGrpPassChk(GetGrpPassChkInfo()); + m_flags = 0; + SetRoofNone(); + pm_pos = NULL; + pm_old_pos = NULL; + pm_speed = NULL; + m_ground_h = 1000000000.0f; + m_ground_up_h = 0.0f; + field_0x98 = 98.0f; + m_ground_up_h_diff = 0.0f; + field_0xb0 = 0; + field_0xb4 = 0.0f; + field_0xb8 = 0.0f; + m_tbl_size = 0; + mp_acch_cir = NULL; + m_roof_y = 0.0f; + m_roof_height = 0.0f; + m_roof_crr_height = 0.0f; + field_0xc8 = 200.0f; + pm_angle = NULL; + pm_shape_angle = NULL; + m_my_ac = NULL; + pm_out_poly_info = NULL; + m_sea_height = 1000000000.0f; +} + +static void dummy1() { + OSReport("***********************************\ndBgS_Acch::copy constructer called.\n***********************************\n"); } /* 800A2CFC-800A2D78 .text Init__9dBgS_AcchFv */ @@ -37,8 +78,19 @@ void dBgS_Acch::Init() { } /* 800A2D78-800A2E80 .text Set__9dBgS_AcchFP4cXyzP4cXyzP10fopAc_ac_ciP12dBgS_AcchCirP4cXyzP5csXyzP5csXyz */ -void dBgS_Acch::Set(cXyz*, cXyz*, fopAc_ac_c*, int, dBgS_AcchCir*, cXyz*, csXyz*, csXyz*) { - /* Nonmatching */ +void dBgS_Acch::Set(cXyz* param_1, cXyz* param_2, fopAc_ac_c* param_3, int param_4, dBgS_AcchCir* param_5, cXyz* param_6, csXyz* param_7, csXyz* param_8) { + pm_pos = param_1; + pm_old_pos = param_2; + JUT_ASSERT(221, pm_pos != 0); + JUT_ASSERT(222, pm_old_pos != 0); + + m_my_ac = param_3; + SetActorPid(fopAcM_GetID(param_3)); + pm_speed = param_6; + m_tbl_size = param_4; + mp_acch_cir = param_5; + pm_angle = param_7; + pm_shape_angle = param_8; } /* 800A2E80-800A2EE8 .text GroundCheckInit__9dBgS_AcchFR4dBgS */ @@ -62,12 +114,144 @@ void dBgS_Acch::LineCheck(dBgS&) { } /* 800A3460-800A3F50 .text CrrPos__9dBgS_AcchFR4dBgS */ -void dBgS_Acch::CrrPos(dBgS&) { - /* Nonmatching */ +void dBgS_Acch::CrrPos(dBgS& i_bgs) { + if (m_flags & 0x1) { + return; + } + + JUT_ASSERT(494, pm_pos != 0); + JUT_ASSERT(495, pm_old_pos != 0); + + JUT_ASSERT(535, !(((sizeof(pm_pos->x) == sizeof(float)) ? __fpclassifyf((float)(pm_pos->x)) : __fpclassifyd((double)(pm_pos->x)) ) == 1)); + JUT_ASSERT(536, !(((sizeof(pm_pos->y) == sizeof(float)) ? __fpclassifyf((float)(pm_pos->y)) : __fpclassifyd((double)(pm_pos->y)) ) == 1)); + JUT_ASSERT(537, !(((sizeof(pm_pos->z) == sizeof(float)) ? __fpclassifyf((float)(pm_pos->z)) : __fpclassifyd((double)(pm_pos->z)) ) == 1)); + JUT_ASSERT(541, -1.0e32f < pm_pos->x && pm_pos->x < 1.0e32f && -1.0e32f < pm_pos->y && pm_pos->y < 1.0e32f && -1.0e32f < pm_pos->z && pm_pos->z < 1.0e32f); + + i_bgs.MoveBgCrrPos(m_gnd, ChkGroundHit(), pm_pos, pm_angle, pm_shape_angle); + + GroundCheckInit(i_bgs); + Init(); + + f32 lowH_R = GetWallAllLowH_R(); + cXyz* temp9 = pm_old_pos; + cXyz* temp10 = pm_pos; + f32 distXZ2 = temp9->abs2XZ(*temp10); + f32 distY = pm_old_pos->y - pm_pos->y; + f32 lowH = GetWallAllLowH(); + field_0xb4 = pm_pos->y; + f32 oldY = pm_old_pos->y; + f32 temp7 = lowH + oldY; + f32 temp8 = field_0x98 + pm_pos->y; + + bool ranLineCheck = false; + OffLineCheckHit(); + if (!ChkLineCheckNone() && !cM3d_IsZero(lowH_R)) { + if (distXZ2 > lowH_R*lowH_R || temp7 > temp8 || distY > field_0x98 || ChkLineCheck()) { + ranLineCheck = true; + LineCheck(i_bgs); + } + } + if (!(m_flags & WALL_NONE)) { + i_bgs.WallCorrect(this); + } + if (ChkWallHit() && ranLineCheck) { + LineCheck(i_bgs); + } + + m_roof_crr_height = 1000000000.0f; + if (!(m_flags & ROOF_NONE)) { + m_roof.SetExtChk(*(cBgS_Chk*)this); + ClrRoofHit(); + cXyz roofPos = *pm_pos; + m_roof.SetPos(roofPos); + m_roof_y = i_bgs.RoofChk(&m_roof); + if (m_roof_y != 1000000000.0f && pm_pos->y + m_roof_height > m_roof_y) { + m_roof_crr_height = m_roof_y - m_roof_height; + SetRoofHit(); + } + } + + if (!(m_flags & GRND_NONE)) { + ClrGroundFind(); + GroundCheck(i_bgs); + GroundRoofProc(i_bgs); + } else if (m_roof_crr_height < pm_pos->y) { + pm_pos->y = m_roof_crr_height; + } + + if (!(m_flags & WATER_NONE)) { + ClrWaterHit(); + ClrWaterIn(); + m_wtr.SetHeight(-1000000000.0f); + + int room_no = i_bgs.GetRoomId(m_gnd); + if (m_ground_h != -1000000000.0f && 0 <= room_no && room_no < 64) { + JUT_ASSERT(693, 0 <= room_no && room_no < 64); + + dBgW* bgw = dComIfGp_roomControl_getBgW(room_no); + if (bgw) { + f32 top; + f32 under; + bgw->GetTopUnder(&top, &under); + + cXyz ground = *pm_pos; + ground.y = under; + m_wtr.Set(ground, top); + m_wtr.SetPassChkInfo(*this); + if (i_bgs.SplGrpChk(&m_wtr)) { + SetWaterHit(); + if (m_wtr.GetHeight() > pm_pos->y) { + SetWaterIn(); + } + + // JUT_ASSERT's (COND) == 0 check screws up the codegen here. Using !(COND) instead fixes it. + // JUT_ASSERT(718, m_wtr.GetHeight() >= ground.y); + // JUT_ASSERT(719, m_wtr.GetHeight() <= top); + if (!(m_wtr.GetHeight() >= ground.y)) { + JUTAssertion::showAssert(JUTAssertion::getSDevice(), __FILE__, 718, "m_wtr.GetHeight() >= ground.y"); + OSPanic(__FILE__, 718, "Halt"); + } + if (!(m_wtr.GetHeight() <= top)) { + JUTAssertion::showAssert(JUTAssertion::getSDevice(), __FILE__, 719, "m_wtr.GetHeight() <= top"); + OSPanic(__FILE__, 719, "Halt"); + } + } + } + } + } + + if (ChkSeaCheckOn()) { + m_flags &= ~SEA_IN; + m_sea_height = -1000000000.0f; + + if (daSea_ChkArea(pm_pos->x, pm_pos->z)) { + m_sea_height = daSea_calcWave(pm_pos->x, pm_pos->z); + } + + if (ChkSeaWaterHeight()) { + f32 wtr_height = m_wtr.GetHeight(); + if (m_sea_height < wtr_height) { + m_sea_height = wtr_height; + } + } + + if (m_sea_height > pm_pos->y) { + m_flags |= SEA_IN; + } + } + + JUT_ASSERT(780, !(((sizeof(pm_pos->x) == sizeof(float)) ? __fpclassifyf((float)(pm_pos->x)) : __fpclassifyd((double)(pm_pos->x)) ) == 1)); + JUT_ASSERT(781, !(((sizeof(pm_pos->y) == sizeof(float)) ? __fpclassifyf((float)(pm_pos->y)) : __fpclassifyd((double)(pm_pos->y)) ) == 1)); + JUT_ASSERT(782, !(((sizeof(pm_pos->z) == sizeof(float)) ? __fpclassifyf((float)(pm_pos->z)) : __fpclassifyd((double)(pm_pos->z)) ) == 1)); + JUT_ASSERT(786, -1.0e32f < pm_pos->x && pm_pos->x < 1.0e32f && -1.0e32f < pm_pos->y && pm_pos->y < 1.0e32f && -1.0e32f < pm_pos->z && pm_pos->z < 1.0e32f); +} + +static void dummy2() { + OSReport("\033[43;30m**************************************\ndBgS_ObjAcch::copy constructer called.\n**************************************\n\033[m"); } /* 800A3F50-800A3F8C .text GetWallAllR__9dBgS_AcchFv */ -void dBgS_Acch::GetWallAllR() { +f32 dBgS_Acch::GetWallAllR() { /* Nonmatching */ } @@ -82,77 +266,42 @@ void dBgS_Acch::CalcWallBmdCyl() { } /* 800A4114-800A4128 .text SetGroundUpY__9dBgS_AcchFf */ -void dBgS_Acch::SetGroundUpY(float) { - /* Nonmatching */ +void dBgS_Acch::SetGroundUpY(f32 y) { + m_ground_up_h_diff = y - m_ground_up_h; + m_ground_up_h = y; } /* 800A4128-800A4178 .text GetWallAllLowH__9dBgS_AcchFv */ -void dBgS_Acch::GetWallAllLowH() { +f32 dBgS_Acch::GetWallAllLowH() { /* Nonmatching */ } /* 800A4178-800A41E4 .text GetWallAllLowH_R__9dBgS_AcchFv */ -void dBgS_Acch::GetWallAllLowH_R() { +f32 dBgS_Acch::GetWallAllLowH_R() { /* Nonmatching */ } /* 800A41E4-800A42B4 .text GetOnePolyInfo__9dBgS_AcchFP13cBgS_PolyInfo */ -void dBgS_Acch::GetOnePolyInfo(cBgS_PolyInfo*) { +f32 dBgS_Acch::GetOnePolyInfo(cBgS_PolyInfo*) { /* Nonmatching */ } /* 800A42B4-800A4348 .text GetWallAddY__9dBgS_AcchFR3Veci */ -void dBgS_Acch::GetWallAddY(Vec&, int) { - /* Nonmatching */ -} - -/* 800A4348-800A43A4 .text __dt__8cM3dGCirFv */ -cM3dGCir::~cM3dGCir() { - /* Nonmatching */ -} - -/* 800A43A4-800A43EC .text __dt__8cM2dGCirFv */ -cM2dGCir::~cM2dGCir() { - /* Nonmatching */ -} - -/* 800A43EC-800A4434 .text __dt__8cM3dGPlaFv */ -cM3dGPla::~cM3dGPla() { +f32 dBgS_Acch::GetWallAddY(Vec&, int) { /* Nonmatching */ } /* 800A4434-800A444C .text getBgW__20dStage_roomControl_cFi */ -void dStage_roomControl_c::getBgW(int) { - /* Nonmatching */ +dBgW* dStage_roomControl_c::getBgW(int i_roomNo) { + return mStatus[i_roomNo].mpBgW; } -/* 800A444C-800A44BC .text __dt__12dBgS_ObjAcchFv */ -dBgS_ObjAcch::~dBgS_ObjAcch() { - /* Nonmatching */ -} - -/* 800A44BC-800A4544 .text __dt__12dBgS_AcchCirFv */ -dBgS_AcchCir::~dBgS_AcchCir() { - /* Nonmatching */ -} - -/* 800A4544-800A454C .text @32@__dt__9dBgS_AcchFv */ -void @32@__dt__9dBgS_AcchFv { - /* Nonmatching */ -} - -/* 800A454C-800A4554 .text @20@__dt__9dBgS_AcchFv */ -void @20@__dt__9dBgS_AcchFv { - /* Nonmatching */ -} - -/* 800A4554-800A455C .text @32@__dt__12dBgS_ObjAcchFv */ -void @32@__dt__12dBgS_ObjAcchFv { - /* Nonmatching */ -} - -/* 800A455C-800A4564 .text @20@__dt__12dBgS_ObjAcchFv */ -void @20@__dt__12dBgS_ObjAcchFv { - /* Nonmatching */ -} +// /* 800A444C-800A44BC .text __dt__12dBgS_ObjAcchFv */ +// dBgS_ObjAcch::~dBgS_ObjAcch() { +// /* Nonmatching */ +// } +// /* 800A44BC-800A4544 .text __dt__12dBgS_AcchCirFv */ +// dBgS_AcchCir::~dBgS_AcchCir() { +// /* Nonmatching */ +// }