mirror of
https://github.com/zeldaret/tww.git
synced 2026-05-23 06:54:16 -04:00
d_bg_s_func OK
This commit is contained in:
+1
-1
@@ -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"),
|
||||
|
||||
@@ -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;}
|
||||
|
||||
@@ -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 */
|
||||
@@ -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 {
|
||||
|
||||
@@ -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
@@ -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 */
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user