From f524c4e97420eb2751c50d219b6ee9b21bc33289 Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Sat, 20 Jan 2024 10:30:36 -0800 Subject: [PATCH] c_bg_w 99% --- include/SSystem/SComponent/c_bg_s_gnd_chk.h | 1 + include/SSystem/SComponent/c_bg_w.h | 52 +++++--- include/SSystem/SComponent/c_m3d_g_aab.h | 13 ++ src/SSystem/SComponent/c_bg_s.cpp | 10 +- src/SSystem/SComponent/c_bg_w.cpp | 141 ++++++++++++++++---- src/d/d_bg_s.cpp | 22 +-- 6 files changed, 177 insertions(+), 62 deletions(-) diff --git a/include/SSystem/SComponent/c_bg_s_gnd_chk.h b/include/SSystem/SComponent/c_bg_s_gnd_chk.h index 23873b4d4..d0e0dff9a 100644 --- a/include/SSystem/SComponent/c_bg_s_gnd_chk.h +++ b/include/SSystem/SComponent/c_bg_s_gnd_chk.h @@ -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; } diff --git a/include/SSystem/SComponent/c_bg_w.h b/include/SSystem/SComponent/c_bg_w.h index 4e48c1809..58b2fe80b 100644 --- a/include/SSystem/SComponent/c_bg_w.h +++ b/include/SSystem/SComponent/c_bg_w.h @@ -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 */ diff --git a/include/SSystem/SComponent/c_m3d_g_aab.h b/include/SSystem/SComponent/c_m3d_g_aab.h index 3c5861c25..84f229730 100644 --- a/include/SSystem/SComponent/c_m3d_g_aab.h +++ b/include/SSystem/SComponent/c_m3d_g_aab.h @@ -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)); diff --git a/src/SSystem/SComponent/c_bg_s.cpp b/src/SSystem/SComponent/c_bg_s.cpp index 3ab4cd948..b5dc11e4b 100644 --- a/src/SSystem/SComponent/c_bg_s.cpp +++ b/src/SSystem/SComponent/c_bg_s.cpp @@ -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 */ diff --git a/src/SSystem/SComponent/c_bg_w.cpp b/src/SSystem/SComponent/c_bg_w.cpp index 9f4d5eaa8..45ed03778 100644 --- a/src/SSystem/SComponent/c_bg_w.cpp +++ b/src/SSystem/SComponent/c_bg_w.cpp @@ -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 */ diff --git a/src/d/d_bg_s.cpp b/src/d/d_bg_s.cpp index 8b632a9ee..c81ed1819 100644 --- a/src/d/d_bg_s.cpp +++ b/src/d/d_bg_s.cpp @@ -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; } }