c_bg_w 99%

This commit is contained in:
Jasper St. Pierre
2024-01-20 10:30:36 -08:00
parent aaad06a5f4
commit f524c4e974
6 changed files with 177 additions and 62 deletions
@@ -19,6 +19,7 @@ public:
f32 GetNowY() const { return mNowY; }
void SetNowY(f32 y) { mNowY = y; }
cXyz* GetPointP() { return &m_pos; }
u32 GetGndPrecheck() const { return mGndPrecheck; }
u32 GetWallPrecheck() const { return mWallPrecheck; }
void OffWall() { mFlag &= ~2; }
+30 -22
View File
@@ -139,6 +139,7 @@ class cBgW : public cBgW_BgId {
public:
enum Flags_e {
MOVE_BG_e = 0x1,
NO_CALC_VTX_e = 0x2,
NO_VTX_TBL_e = 0x10,
GLOBAL_e = 0x20,
UNK40_e = 0x40,
@@ -198,19 +199,14 @@ public:
void SetPriority(PRIORITY priority) { mWallCorrectPriority = priority; }
void SetLock() { mFlags |= LOCK_e; }
void ChkFlush() {}
void ChkGroundRegist() {}
void ChkLock() {}
bool ChkLock() { return mFlags & LOCK_e; }
bool ChkMoveBg() { return mFlags & MOVE_BG_e; }
void ChkNoCalcVtx() {}
void SetNoCalcVtx() { mFlags |= NO_CALC_VTX_e; }
void ClrNoCalcVtx() { mFlags &= ~NO_CALC_VTX_e; }
bool ChkNoCalcVtx() { return mFlags & NO_CALC_VTX_e; }
BOOL ChkPriority(int prio) { return mWallCorrectPriority == prio; }
void ChkRoofRegist() {}
void ChkThrough() {}
void ChkWallRegist() {}
void ClrNoCalcVtx() {}
void GetBaseMtxP() {}
void GetOldInvMtx(float(*)[4]) const {}
Mtx* GetBaseMtxP() { return pm_base; }
u32 GetPolyInfId(int poly_index) const {
JUT_ASSERT(0x2f1, 0 <= poly_index && poly_index < pm_bgd->m_t_num);
return pm_bgd->m_t_tbl[poly_index].id;
@@ -231,15 +227,27 @@ public:
JUT_ASSERT(0x307, 0 <= id && id < pm_bgd->m_ti_num);
return pm_bgd->m_ti_tbl[id].mPolyInf3;
}
void GetVtxNum() const {}
void GetVtxTbl() const {}
void GroundCross(cBgS_GndChk*) {}
void LineCheck(cBgS_LinChk*) {}
int GetVtxNum() const { return pm_bgd->m_v_num; }
Vec* GetVtxTbl() const { return pm_vtx_tbl; }
bool GroundCross(cBgS_GndChk* chk) {
return GroundCrossGrpRp(chk, m_rootGrpIdx, 1);
}
bool LineCheck(cBgS_LinChk* chk) {
return LineCheckGrpRp(chk, m_rootGrpIdx, 1);
}
void GetOldInvMtx(float(*)[4]) const {}
bool ChkFlush() { return mIgnorePlaneType & 8; }
void ChkGroundRegist() {}
void ChkRoofRegist() {}
void ChkThrough() {}
void ChkWallRegist() {}
void OffRoofRegist() {}
void SetBaseMtxP(float(*)[3][4]) {}
void SetNoCalcVtx() {}
void SetVtxTbl(Vec*) {}
void ShdwDraw(cBgS_ShdwDraw*) {}
void SetBaseMtxP(Mtx* mtx_p) { pm_base = mtx_p; }
void SetVtxTbl(Vec* v) { pm_vtx_tbl = v; }
void ShdwDraw(cBgS_ShdwDraw* shdw) {
ShdwDrawGrpRp(shdw, m_rootGrpIdx);
}
virtual ~cBgW();
virtual u32 GetGrpToRoomIndex(int) const;
@@ -270,8 +278,8 @@ public:
/* 0xA4 */ int m_rootGrpIdx;
};
bool cBgW_CheckBGround(f32 a1);
bool cBgW_CheckBRoof(f32 a1);
bool cBgW_CheckBWall(f32 a1);
bool cBgW_CheckBGround(f32 ny);
bool cBgW_CheckBRoof(f32 ny);
bool cBgW_CheckBWall(f32 ny);
#endif /* C_BG_W_H */
+13
View File
@@ -56,6 +56,19 @@ public:
mMax.y = -1000000000.0f;
mMax.x = -1000000000.0f;
}
bool CrossY(const cXyz* v) const {
if (mMin.x > v->x || mMax.x < v->x || mMin.z > v->z || mMax.z < v->z) {
return false;
} else {
return true;
}
}
bool UnderPlaneYUnder(f32 y) const {
return mMin.y < y;
}
bool TopPlaneYUnder(f32 y) const {
return mMax.y < y;
}
}; // Size = 0x1C
STATIC_ASSERT(0x1C == sizeof(cM3dGAab));
+5 -5
View File
@@ -113,9 +113,9 @@ bool cBgS::LineCross(cBgS_LinChk* chk) {
chk->ClrHit();
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
cBgS_ChkElm* elm = &m_chk_element[bg_index];
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
chk->PreCalc();
if (elm->m_bgw_base_ptr->LineCheckGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
if (elm->m_bgw_base_ptr->LineCheck(chk)) {
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
ret = true;
}
@@ -134,8 +134,8 @@ f32 cBgS::GroundCross(cBgS_GndChk* chk) {
chk->mGndPrecheck = (chk->mFlag & 0x01);
cBgS_ChkElm* elm = m_chk_element;
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++, elm++) {
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
if (elm->m_bgw_base_ptr->GroundCrossGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
if (elm->m_bgw_base_ptr->GroundCross(chk)) {
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
}
}
@@ -258,7 +258,7 @@ void cBgS::Move() {
void cBgS::ShdwDraw(cBgS_ShdwDraw* shdw) {
for (s32 i = 0; i < (s32)ARRAY_SIZE(m_chk_element); i++)
if (m_chk_element[i].ChkUsed())
m_chk_element[i].m_bgw_base_ptr->ShdwDrawGrpRp(shdw, m_chk_element[i].m_bgw_base_ptr->m_rootGrpIdx);
m_chk_element[i].m_bgw_base_ptr->ShdwDraw(shdw);
}
/* 802471E8-80247304 .text GetGrpInf__4cBgSCFR13cBgS_PolyInfoi */
+117 -24
View File
@@ -77,7 +77,7 @@ bool cBgW::SetVtx() {
if (mFlags & NO_VTX_TBL_e) {
pm_vtx_tbl = NULL;
} else {
if (mFlags & MOVE_BG_e) {
if (ChkMoveBg()) {
pm_vtx_tbl = new Vec[pm_bgd->m_v_num];
if (pm_vtx_tbl == NULL)
return true;
@@ -138,9 +138,16 @@ void cBgW::BlckConnect(u16* rwg, int* prev, int i_no) {
pm_rwg[*prev].next = -1;
}
inline bool cBgW_CheckBGround(f32 ny) {
return ny >= 0.5f;
}
inline bool cBgW_CheckBRoof(f32 ny) {
return ny < (-4.0f / 5.0f);
}
/* 80247A24-80247BF8 .text ClassifyPlane__4cBgWFv */
void cBgW::ClassifyPlane() {
/* Nonmatching */
if (pm_vtx_tbl == NULL)
return;
@@ -150,7 +157,11 @@ void cBgW::ClassifyPlane() {
int roof, wall, ground;
for (; i < pm_bgd->m_b_num; i++) {
s32 startTri = pm_bgd->m_b_tbl[i].startTri;
s32 lastTri = (i != pm_bgd->m_b_num - 1) ? pm_bgd->m_b_tbl[i + 1].startTri - 1 : pm_bgd->m_t_num - 1;
s32 lastTri;
if (i != pm_bgd->m_b_num - 1)
lastTri = pm_bgd->m_b_tbl[i + 1].startTri - 1;
else
lastTri = pm_bgd->m_t_num - 1;
pm_blk[i].roof = 0xFFFF;
pm_blk[i].wall = 0xFFFF;
@@ -163,19 +174,20 @@ void cBgW::ClassifyPlane() {
for (s32 j = startTri; j <= lastTri; j++) {
cBgW_TriElm* tri_elm = &pm_tri[j];
/* cM3d_isZero */
f32 ny = tri_elm->m_plane.mNormal.y;
if (fabsf(tri_elm->m_plane.mNormal.x) < eps && fabsf(tri_elm->m_plane.mNormal.y) < eps && fabsf(tri_elm->m_plane.mNormal.z) < eps)
continue;
if (ny >= 0.5f) {
if (cBgW_CheckBGround(ny)) {
if (!(mIgnorePlaneType & 1))
BlckConnect(&pm_blk[i].ground, &ground, i);
} else if (ny < -0.8f) {
BlckConnect(&pm_blk[i].ground, &ground, j);
} else if (cBgW_CheckBRoof(ny)) {
if (!(mIgnorePlaneType & 4))
BlckConnect(&pm_blk[i].roof, &roof, i);
BlckConnect(&pm_blk[i].roof, &roof, j);
} else {
if (!(mIgnorePlaneType & 2))
BlckConnect(&pm_blk[i].wall, &wall, i);
BlckConnect(&pm_blk[i].wall, &wall, j);
}
}
}
@@ -400,9 +412,9 @@ static void dummy() {
/* 802485FC-80248868 .text LineCheckRp__4cBgWFP11cBgS_LinChki */
bool cBgW::LineCheckRp(cBgS_LinChk* chk, int i) {
/* Nonmatching */
if (!pm_node_tree[i].Cross(chk->GetLinP()))
cBgW_NodeTree* node = &pm_node_tree[i];
// node->Cross(chk->GetLinP());
if (!cM3d_Cross_MinMaxBoxLine(node->GetMinP(), node->GetMaxP(), chk->GetLinP()->GetStartP(), chk->GetLinP()->GetEndP()))
return false;
cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i];
@@ -416,6 +428,7 @@ bool cBgW::LineCheckRp(cBgS_LinChk* chk, int i) {
ret = true;
return ret;
} else {
// was this manually unrolled?
if (tree->mChild[0] != 0xFFFF && LineCheckRp(chk, tree->mChild[0]))
ret = true;
if (tree->mChild[1] != 0xFFFF && LineCheckRp(chk, tree->mChild[1]))
@@ -438,7 +451,6 @@ bool cBgW::LineCheckRp(cBgS_LinChk* chk, int i) {
/* 80248868-8024898C .text LineCheckGrpRp__4cBgWFP11cBgS_LinChkii */
bool cBgW::LineCheckGrpRp(cBgS_LinChk* chk, int grp_id, int depth) {
/* Nonmatching */
if (ChkGrpThrough(grp_id, chk->GetGrpPassChk(), depth))
return false;
@@ -508,27 +520,76 @@ bool cBgW::RwgGroundCheckWall(u16 poly_index, cBgS_GndChk* chk) {
}
/* 80248C38-802491F4 .text GroundCrossRp__4cBgWFP11cBgS_GndChki */
bool cBgW::GroundCrossRp(cBgS_GndChk*, int) {
/* Nonmatching */
bool cBgW::GroundCrossRp(cBgS_GndChk* chk, int i) {
bool ret = false;
cBgD_Tree_t* tree = &pm_bgd->m_tree_tbl[i];
if (tree->mFlag & 1) {
if (chk->GetGndPrecheck() && pm_blk[tree->mBlock].ground != 0xFFFF && RwgGroundCheckGnd(pm_blk[tree->mBlock].ground, chk))
ret = true;
if (chk->GetWallPrecheck() && pm_blk[tree->mBlock].wall != 0xFFFF && RwgGroundCheckWall(pm_blk[tree->mBlock].wall, chk))
ret = true;
return ret;
} else {
if (tree->mChild[2] != 0xFFFF) {
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[2]];
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[2]))
ret = true;
}
if (tree->mChild[3] != 0xFFFF) {
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[3]];
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[3]))
ret = true;
}
if (tree->mChild[6] != 0xFFFF) {
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[6]];
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[6]))
ret = true;
}
if (tree->mChild[7] != 0xFFFF) {
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[7]];
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[7]))
ret = true;
}
if (tree->mChild[0] != 0xFFFF) {
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[0]];
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[0]))
ret = true;
}
if (tree->mChild[1] != 0xFFFF) {
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[1]];
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[1]))
ret = true;
}
if (tree->mChild[4] != 0xFFFF) {
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[4]];
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[4]))
ret = true;
}
if (tree->mChild[5] != 0xFFFF) {
cBgW_NodeTree* node = &pm_node_tree[tree->mChild[5]];
if (node->CrossY(chk->GetPointP()) && node->UnderPlaneYUnder(chk->GetPointP()->y) && !node->TopPlaneYUnder(chk->mNowY) && GroundCrossRp(chk, tree->mChild[5]))
ret = true;
}
return ret;
}
}
/* 802491F4-80249368 .text GroundCrossGrpRp__4cBgWFP11cBgS_GndChkii */
bool cBgW::GroundCrossGrpRp(cBgS_GndChk* chk, int grp_id, int depth) {
/* Nonmatching */
if (ChkGrpThrough(grp_id, chk->GetGrpPassChk(), depth))
return false;
bool insideXZ;
cBgW_GrpElm* grp = &pm_grp[grp_id];
// is this an inline? also seems to be used in GroundCrossGrp
if (grp->aab.mMin.x > chk->GetPointP()->x || grp->aab.mMax.x < chk->GetPointP()->x ||
grp->aab.mMin.z > chk->GetPointP()->z || grp->aab.mMax.z < chk->GetPointP()->z)
insideXZ = false;
else
insideXZ = true;
if (!insideXZ || (grp->aab.mMin.y > chk->GetPointP()->y || grp->aab.mMax.y < chk->GetNowY()))
if (!grp->aab.CrossY(chk->GetPointP()) || !grp->aab.UnderPlaneYUnder(chk->GetPointP()->y) || grp->aab.TopPlaneYUnder(chk->mNowY))
return false;
bool ret = false;
@@ -559,6 +620,38 @@ void cBgW::CopyOldMtx() {
/* 802493B4-80249584 .text Move__4cBgWFv */
void cBgW::Move() {
/* Nonmatching */
if (!ChkLock() && ChkMoveBg()) {
if (!ChkNoCalcVtx()) {
if (mMoveCounter >= 0xFF ||
mCurMtx[0][0] != (*pm_base)[0][0] || mCurMtx[0][1] != (*pm_base)[0][1] || mCurMtx[0][2] != (*pm_base)[0][2] ||
mCurMtx[1][0] != (*pm_base)[1][0] || mCurMtx[1][1] != (*pm_base)[1][1] || mCurMtx[1][2] != (*pm_base)[1][2] ||
mCurMtx[2][0] != (*pm_base)[2][0] || mCurMtx[2][1] != (*pm_base)[2][1] || mCurMtx[2][2] != (*pm_base)[2][2]) {
mbNeedsFullTransform = true;
} else if (mCurMtx[0][3] == (*pm_base)[0][3] && mCurMtx[1][3] == (*pm_base)[1][3] && mCurMtx[2][3] == (*pm_base)[2][3]) {
mDoMtx_copy(*pm_base, mOldMtx);
if (!ChkFlush())
return;
} else {
mTransVel.x = mCurMtx[0][3] - (*pm_base)[0][3];
mTransVel.y = mCurMtx[1][3] - (*pm_base)[1][3];
mTransVel.z = mCurMtx[2][3] - (*pm_base)[2][3];
mbNeedsFullTransform = false;
}
if (mMoveCounter >= 0xFF) {
mMoveCounter = 0;
} else {
mMoveCounter++;
}
GlobalVtx();
}
CopyOldMtx();
CalcPlane();
ClassifyPlane();
MakeNodeTree();
}
}
/* 80249584-80249698 .text RwgShdwDraw__4cBgWFiP13cBgS_ShdwDraw */
+11 -11
View File
@@ -53,7 +53,7 @@ bool dBgS::Regist(cBgW* bgw, fopAc_ac_c* ac) {
if (bgw == NULL)
return true;
if (ac != NULL && !!(bgw->mFlags & cBgW::MOVE_BG_e)) {
if (ac != NULL && bgw->ChkMoveBg()) {
dBgW* bgwp = (dBgW*)bgw;
bgwp->mOldRotY = ac->shape_angle.y;
bgwp->mRoomNo = fopAcM_GetRoomNo(ac);
@@ -66,9 +66,9 @@ bool dBgS::Regist(cBgW* bgw, fopAc_ac_c* ac) {
bool dBgS::ChkMoveBG(cBgS_PolyInfo& polyInfo) {
dBgW* bgwp = (dBgW*)dComIfG_Bgsp()->GetBgWPointer(polyInfo);
if (bgwp != NULL) {
if (bgwp->mFlags & cBgW::LOCK_e)
if (bgwp->ChkLock())
return false;
if (bgwp->mFlags & cBgW::MOVE_BG_e)
if (bgwp->ChkMoveBg())
return true;
}
return false;
@@ -78,7 +78,7 @@ bool dBgS::ChkMoveBG(cBgS_PolyInfo& polyInfo) {
bool dBgS::ChkMoveBG_NoDABg(cBgS_PolyInfo& polyInfo) {
dBgW* bgwp = (dBgW*)dComIfG_Bgsp()->GetBgWPointer(polyInfo);
if (bgwp != NULL) {
if (bgwp->mFlags & cBgW::MOVE_BG_e)
if (bgwp->ChkMoveBg())
return true;
}
return false;
@@ -316,7 +316,7 @@ bool dBgS::LineCrossNonMoveBG(cBgS_LinChk* chk) {
chk->ClrHit();
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
cBgS_ChkElm* elm = &m_chk_element[bg_index];
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id) && !elm->m_bgw_base_ptr->ChkMoveBg()) {
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id) && !elm->m_bgw_base_ptr->ChkMoveBg()) {
chk->PreCalc();
if (elm->m_bgw_base_ptr->LineCheckGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
@@ -340,7 +340,7 @@ void dBgS::WallCorrect(dBgS_Acch* acch) {
for (s32 prio = 0; prio < 3; prio++) {
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
elm = &m_chk_element[bg_index];
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL) {
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL) {
acch->SetNowActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
if (!acch->ChkSameActorPid(elm->m_actor_id)) {
dBgW* bgwp = (dBgW*)elm->m_bgw_base_ptr;
@@ -359,7 +359,7 @@ f32 dBgS::RoofChk(dBgS_RoofChk* chk) {
cBgS_ChkElm* elm;
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
elm = &m_chk_element[bg_index];
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
dBgW* bgwp = (dBgW*)elm->m_bgw_base_ptr;
if (bgwp->RoofChkGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
@@ -375,7 +375,7 @@ bool dBgS::SplGrpChk(dBgS_SplGrpChk* chk) {
chk->Init();
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
cBgS_ChkElm* elm = &m_chk_element[bg_index];
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
dBgW* bgwp = (dBgW*)elm->m_bgw_base_ptr;
if (bgwp->SplGrpChkGrpRp(chk, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
ret = true;
@@ -394,7 +394,7 @@ bool dBgS::SphChk(dBgS_SphChk* chk, void* user) {
chk->Init();
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
elm = &m_chk_element[bg_index];
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL && !chk->ChkSameActorPid(elm->m_actor_id)) {
dBgW* bgwp = (dBgW*)elm->m_bgw_base_ptr;
if (bgwp->SphChkGrpRp(chk, user, elm->m_bgw_base_ptr->m_rootGrpIdx, 1)) {
chk->SetActorInfo(bg_index, elm->m_bgw_base_ptr, elm->m_actor_id);
@@ -417,7 +417,7 @@ bool dBgS::WallCrrPos(dBgS_CrrPos* crr) {
for (s32 prio = 0; prio < 3; prio++) {
for (s32 bg_index = 0; bg_index < (s32)ARRAY_SIZE(m_chk_element); bg_index++) {
elm = &m_chk_element[bg_index];
if (elm->ChkUsed() && elm->m_bgw_base_ptr->pm_vtx_tbl != NULL) {
if (elm->ChkUsed() && elm->m_bgw_base_ptr->GetVtxTbl() != NULL) {
if (crr->ChkSameActorPid(elm->m_actor_id))
continue;
dBgW* bgwp = (dBgW*)elm->m_bgw_base_ptr;
@@ -489,7 +489,7 @@ void dBgS_MoveBGProc_Typical(dBgW* pbgw, void* user, cBgS_PolyInfo& polyInfo, bo
if (MTXInverse(pbgw->mOldMtx, inv)) {
cXyz local, newPos;
MTXMultVec(inv, pos, &local);
MTXMultVec(*pbgw->pm_base, &local, &newPos);
MTXMultVec(*pbgw->GetBaseMtxP(), &local, &newPos);
*pos = newPos;
}
}