d_bg_s_func OK

This commit is contained in:
LagoLunatic
2024-02-05 20:48:25 -05:00
parent 4f868731e4
commit 641a67e7c2
6 changed files with 89 additions and 37 deletions
+1 -1
View File
@@ -388,7 +388,7 @@ config.libs = [
Object(Matching, "d/d_att_dist.cpp"),
Object(Matching, "d/d_bg_s.cpp"),
Object(Matching, "d/d_bg_s_acch.cpp"),
Object(NonMatching, "d/d_bg_s_func.cpp"),
Object(Matching, "d/d_bg_s_func.cpp"),
Object(Matching, "d/d_bg_s_lin_chk.cpp"),
Object(Matching, "d/d_bg_s_movebg_actor.cpp"),
Object(Matching, "d/d_bg_s_spl_grp_chk.cpp"),
-7
View File
@@ -74,10 +74,6 @@ public:
/* 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),
/* 0x800000 */ LINE_DOWN = (1 << 23),
};
dBgS_Acch();
@@ -109,8 +105,6 @@ public:
for (s32 i = 0; i < m_tbl_size; i++)
pm_acch_cir[i].CalcWallRR();
}
void SetMoveBGOnly();
void ClrMoveBGOnly();
void SetGndThinCellingOff();
void ClrGndThinCellingOff();
bool ChkGndThinCellingOff();
@@ -169,7 +163,6 @@ public:
void SetGrndNone() { m_flags |= GRND_NONE; }
void ClrGrndNone() { m_flags &= ~GRND_NONE; }
void SetGroundCheckOffset(f32 offset) { m_ground_check_offset = offset; }
bool ChkMoveBGOnly() const { return m_flags & MOVE_BG_ONLY; }
void SetWallHit() { m_flags |= WALL_HIT; }
void ClrWallNone() { m_flags &= ~WALL_NONE; }
void OnSeaCheckOn() { m_flags |= SEA_CHECK;}
+14
View File
@@ -0,0 +1,14 @@
#ifndef D_BG_S_FUNC_H
#define D_BG_S_FUNC_H
#include "SSystem/SComponent/c_xyz.h"
class dBgS_SplGrpChk;
f32 dBgS_ObjGndChk_Func(cXyz&);
f32 dBgS_ObjGndChk_Wtr_Func(cXyz&);
BOOL dBgS_SplGrpChk_In_ObjGnd(cXyz&, dBgS_SplGrpChk*, f32);
f32 dBgS_GetWaterHeight(cXyz&);
u32 dBgS_GetGndMtrlSndId_Func(cXyz, f32);
#endif /* D_BG_S_FUNC_H */
+5 -2
View File
@@ -40,9 +40,12 @@ public:
class dBgS_ObjGndChk_Wtr : public dBgS_ObjGndChk {
public:
dBgS_ObjGndChk_Wtr();
dBgS_ObjGndChk_Wtr() {
OffNormalGrp();
OnWaterGrp();
}
virtual ~dBgS_ObjGndChk_Wtr();
virtual ~dBgS_ObjGndChk_Wtr() {}
};
class dBgS_ObjGndChk_Spl : public dBgS_ObjGndChk {
+3 -6
View File
@@ -10,7 +10,6 @@ public:
enum {
/* 0x1 */ FIND = 1,
/* 0x2 */ IN = 2,
/* 0x4 */ MOVE_BG_ONLY = 4
};
dBgS_SplGrpChk();
@@ -19,15 +18,13 @@ public:
virtual ~dBgS_SplGrpChk() {}
void OffFind() { m_flags &= ~FIND; }
void OffIn() { m_flags &= ~IN; }
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; }
void OffIn() { m_flags &= ~IN; }
void OnIn() { m_flags |= IN; }
void SetHeight(f32 height) { m_height = height; }
f32 GetHeight() { return m_height; }
cXyz* GetPosP() { return &m_ground; }
f32 GetRoof() const { return m_roof; }
f32 GetRoof() { return m_roof; }
void Set(cXyz& ground, f32 roof) {
m_ground = ground;
m_roof = roof;
+66 -21
View File
@@ -3,39 +3,84 @@
// Translation Unit: d_bg_s_func.cpp
//
#include "d_bg_s_func.h"
#include "dolphin/types.h"
#include "d/d_bg_s_func.h"
#include "d/d_bg_s_gnd_chk.h"
#include "d/d_bg_s_spl_grp_chk.h"
#include "d/d_com_inf_game.h"
#include "d/actor/d_a_sea.h"
#include "JSystem/JUtility/JUTAssert.h"
/* 800A4564-800A4778 .text dBgS_ObjGndChk_Func__FR4cXyz */
void dBgS_ObjGndChk_Func(cXyz&) {
/* Nonmatching */
f32 dBgS_ObjGndChk_Func(cXyz& r25) {
dBgS_ObjGndChk gndChk;
gndChk.SetPos(&r25);
f32 height = dComIfG_Bgsp()->GroundCross(&gndChk);
return height;
}
/* 800A4778-800A49E0 .text dBgS_ObjGndChk_Wtr_Func__FR4cXyz */
void dBgS_ObjGndChk_Wtr_Func(cXyz&) {
/* Nonmatching */
f32 dBgS_ObjGndChk_Wtr_Func(cXyz& r19) {
dBgS_ObjGndChk_Wtr gndChk;
gndChk.SetPos(&r19);
f32 height = dComIfG_Bgsp()->GroundCross(&gndChk);
return height;
}
/* 800A49E0-800A4F68 .text dBgS_SplGrpChk_In_ObjGnd__FR4cXyzP14dBgS_SplGrpChkf */
void dBgS_SplGrpChk_In_ObjGnd(cXyz&, dBgS_SplGrpChk*, float) {
/* Nonmatching */
BOOL dBgS_SplGrpChk_In_ObjGnd(cXyz& r30, dBgS_SplGrpChk* r31, f32 f31) {
dBgS_ObjGndChk gndChk;
cXyz sp1c = r30;
sp1c.y += f31;
gndChk.SetPos(&sp1c);
f32 height = dComIfG_Bgsp()->GroundCross(&gndChk);
r31->SetHeight(height);
if (height == -1e9f) {
return FALSE;
}
int room_no = dComIfG_Bgsp()->GetRoomId(gndChk);
JUT_ASSERT(93, 0 <= room_no && room_no < 64);
dBgW* bgw = dComIfGp_roomControl_getBgW(room_no);
if (bgw == NULL) {
return FALSE;
}
f32 max, min;
bgw->GetTopUnder(&max, &min);
cXyz sp10 = r30;
sp10.y = height;
r31->Set(sp10, max);
if (dComIfG_Bgsp()->SplGrpChk(r31)) {
if (r31->GetHeight() > r30.y) {
r31->OnIn();
}
return TRUE;
} else {
return FALSE;
}
}
/* 800A4F68-800A51FC .text dBgS_GetWaterHeight__FR4cXyz */
void dBgS_GetWaterHeight(cXyz&) {
/* Nonmatching */
f32 dBgS_GetWaterHeight(cXyz& r19) {
dBgS_ObjGndChk_Wtr gndChk;
gndChk.SetPos(&r19);
f32 height = dComIfG_Bgsp()->GroundCross(&gndChk);
if (daSea_ChkArea(r19.x, r19.z)) {
f32 f1 = daSea_calcWave(r19.x, r19.z);
if (height < f1) {
height = f1;
}
}
return height;
}
/* 800A51FC-800A54F8 .text dBgS_GetGndMtrlSndId_Func__F4cXyzf */
void dBgS_GetGndMtrlSndId_Func(cXyz, float) {
/* Nonmatching */
u32 dBgS_GetGndMtrlSndId_Func(cXyz r21, f32 f1) {
r21.y += f1;
dBgS_ObjGndChk gndChk;
gndChk.SetPos(&r21);
if (dComIfG_Bgsp()->GroundCross(&gndChk) == -1e9f) {
return 0;
}
return dComIfG_Bgsp()->GetMtrlSndId(gndChk);
}
/* 800A54F8-800A5660 .text __dt__18dBgS_ObjGndChk_WtrFv */
dBgS_ObjGndChk_Wtr::~dBgS_ObjGndChk_Wtr() {
/* Nonmatching */
}