diff --git a/docs/recommended_todo.md b/docs/recommended_todo.md index dcec23a6c..a40e570e2 100644 --- a/docs/recommended_todo.md +++ b/docs/recommended_todo.md @@ -92,10 +92,10 @@ | File | Size (bytes) | File | Size (bytes) | | ---- | ---- | ---- | ---- | | flockMgr.cpp | 7469 | cellIterator.cpp | 9325 | -| mapMgrTraceMove.cpp | 9736 | aiEnter.cpp | 10813 | -| naviWhistle.cpp | 11601 | itemHole.cpp | 11707 | -| itemHoney.cpp | 12288 | itemBigFountain.cpp | 12667 | -| aiBreakGate.cpp | 13962 | creatureLOD.cpp | 14138 | +| mapMgrTraceMove.cpp | 9736 | creatureLOD.cpp | 10051 | +| aiEnter.cpp | 10813 | naviWhistle.cpp | 11601 | +| itemHole.cpp | 11707 | itemHoney.cpp | 12288 | +| itemBigFountain.cpp | 12667 | aiBreakGate.cpp | 13962 | | texCaster.cpp | 14405 | gameCaveInfo.cpp | 15260 | | baseGameSectionKantei.cpp | 15455 | itemRock.cpp | 17251 | | itemCave.cpp | 20160 | pathfinder.cpp | 20316 | diff --git a/src/plugProjectKandoU/creatureLOD.cpp b/src/plugProjectKandoU/creatureLOD.cpp index ef3403d03..6b75fc23f 100644 --- a/src/plugProjectKandoU/creatureLOD.cpp +++ b/src/plugProjectKandoU/creatureLOD.cpp @@ -8,6 +8,8 @@ namespace Game { +bool AILOD::drawInfo; + /** * @note Address: 0x801D7808 * @note Size: 0x1C @@ -42,17 +44,19 @@ void Creature::updateLOD(Game::AILODParm& parm) if (parm.mIsCylinder) { getLODCylinder(lodCylinder); } - mLod.mFlags = AILOD_NULL; - int iStack[2]; - int* pi = iStack; - bool shouldCull = true; // set to false if visible on any viewport - int v11 = 2; + + // gonna have to play with the order of these probably + mLod.mFlags = AILOD_NULL; + bool shouldCull = true; // set to false if visible on any viewport + int vpStats[2]; Graphics* gfx = sys->mGfx; int viewportCount = gfx->mActiveViewports; + int currFlag = 2; + for (int i = 0; i < viewportCount; i++) { Viewport* vp = gfx->getViewport(i); if (!vp->viewable()) { - *pi = 2; + vpStats[i] = 2; } else { Camera* camera = vp->mCamera; if (parm.mIsCylinder) { @@ -69,19 +73,18 @@ void Creature::updateLOD(Game::AILODParm& parm) f32 screenSize = camera->calcScreenSize(lodSphere); if (screenSize > parm.mFar) { - *pi = 0; + vpStats[i] = 0; } else { if (screenSize > parm.mClose) { - *pi = 1; + vpStats[i] = 1; } else { - *pi = 2; + vpStats[i] = 2; } } - if (*pi < v11) { - v11 = *pi; + if (vpStats[i] < currFlag) { + currFlag = vpStats[i]; } } - pi++; } if (!(gameSystem->isMultiplayerMode() && (2 <= viewportCount))) { @@ -99,7 +102,7 @@ void Creature::updateLOD(Game::AILODParm& parm) P2ASSERTLINE(176, vp1->mCamera); Vector3f pos0 = *vp0->mCamera->getSoundPositionPtr(); Vector3f pos1 = *vp1->mCamera->getSoundPositionPtr(); - if (sqrDistance(pos1, lodSphere.mPosition) < sqrDistance(pos0, lodSphere.mPosition)) { + if (pos1.sqrDistance(lodSphere.mPosition) < pos0.sqrDistance(lodSphere.mPosition)) { mLod.mSndVpId = 0; } else { mLod.mSndVpId = 1; @@ -107,18 +110,20 @@ void Creature::updateLOD(Game::AILODParm& parm) } } } + for (int i = 0; i < viewportCount; i++) { gfx->getViewport(i)->viewable(); } - mLod.mFlags |= (u8)v11; + mLod.setFlag((u8)currFlag); if (!shouldCull) { - mLod.mFlags |= AILOD_IsVisible; + mLod.setFlag(AILOD_IsVisible); } else { - mLod.mFlags = AILOD_IsFar; + mLod.mFlags = (AILOD_IsFar); } if (0 < getCellPikiCount()) { - mLod.mFlags |= AILOD_PikiInCell; + mLod.setFlag(AILOD_PikiInCell); } + /* stwu r1, -0xa0(r1) mflr r0 @@ -418,7 +423,7 @@ void Creature::drawLODInfo(Graphics& gfx, Vector3f& position) gfx.initPerspPrintf(gfx.mCurrentViewport); const char* nearnessLabels[] = { "near", "mid", "far" }; - u8 nearness = mLod.mFlags & (AILOD_IsMid | AILOD_IsFar); + int nearness = mLod.mFlags & (AILOD_IsMid | AILOD_IsFar); switch (nearness) { case AILOD_NULL: info.mColorA.set(0, 10, 255, 255); @@ -433,198 +438,19 @@ void Creature::drawLODInfo(Graphics& gfx, Vector3f& position) info.mColorB.set(200, 200, 200, 255); break; } - const char* flag4Text = "_"; - if (mLod.mFlags & AILOD_IsVisible) { - flag4Text = "p"; - } - const char* vp1VisibilityText = "x"; - if (mLod.mFlags & AILOD_IsVisVP1) { - vp1VisibilityText = "v"; - } - const char* vp0VisibilityText = "x"; - if (mLod.mFlags & AILOD_IsVisVP0) { - vp0VisibilityText = "v"; - } - gfx.perspPrintf(info, position, "[%s%s %s %s]", vp0VisibilityText, vp1VisibilityText, flag4Text, nearnessLabels[nearness]); + + gfx.perspPrintf(info, position, "[%s%s %s %s]", (mLod.isFlag(AILOD_IsVisVP0)) ? "v" : "x", + (mLod.isFlag(AILOD_IsVisVP1)) ? "v" : "x", (mLod.isFlag(AILOD_PikiInCell)) ? "p" : "_", nearnessLabels[nearness]); + Camera* camera0 = sys->mGfx->getViewport(0)->mCamera; Vector3f sizeOnScreenTextPosition; - sizeOnScreenTextPosition.x = position.x; - sizeOnScreenTextPosition.y = position.y + 15.0f; - sizeOnScreenTextPosition.z = position.z; + sizeOnScreenTextPosition = position; + sizeOnScreenTextPosition.y += 15.0f; + Sys::Sphere lodSphere; getLODSphere(lodSphere); gfx.perspPrintf(info, sizeOnScreenTextPosition, "<%f>", camera0->calcScreenSize(lodSphere)); } - /* - stwu r1, -0x60(r1) - mflr r0 - stw r0, 0x64(r1) - stw r31, 0x5c(r1) - mr r31, r5 - stw r30, 0x58(r1) - mr r30, r4 - stw r29, 0x54(r1) - mr r29, r3 - stw r28, 0x50(r1) - lbz r0, drawInfo__Q24Game5AILOD@sda21(r13) - cmplwi r0, 0 - beq lbl_801D7E1C - lwz r3, systemFont__9JFWSystem@sda21(r13) - li r6, 0 - li r0, 0xff - li r5, 0x66 - lfs f0, lbl_80519768@sda21(r2) - li r4, 0x99 - stw r3, 0x30(r1) - mr r3, r30 - stw r6, 0x34(r1) - stw r6, 0x38(r1) - stw r6, 0x3c(r1) - stfs f0, 0x40(r1) - stb r5, 0x44(r1) - stb r4, 0x45(r1) - stb r0, 0x46(r1) - stb r0, 0x47(r1) - stb r6, 0x48(r1) - stb r5, 0x49(r1) - stb r0, 0x4a(r1) - stb r0, 0x4b(r1) - lwz r4, 0x25c(r30) - bl initPerspPrintf__8GraphicsFP8Viewport - lbz r0, 0xd8(r29) - lis r3, lbl_804807E4@ha - lwzu r5, lbl_804807E4@l(r3) - clrlwi r0, r0, 0x1e - lwz r4, 4(r3) - cmpwi r0, 1 - lwz r3, 8(r3) - stw r5, 0x24(r1) - stw r4, 0x28(r1) - stw r3, 0x2c(r1) - beq lbl_801D7CEC - bge lbl_801D7CAC - cmpwi r0, 0 - bge lbl_801D7CB8 - b lbl_801D7D4C - -lbl_801D7CAC: - cmpwi r0, 3 - bge lbl_801D7D4C - b lbl_801D7D1C - -lbl_801D7CB8: - li r4, 0xff - li r3, 0xc8 - li r6, 0 - li r5, 0xa - stb r6, 0x44(r1) - stb r5, 0x45(r1) - stb r4, 0x46(r1) - stb r4, 0x47(r1) - stb r3, 0x48(r1) - stb r3, 0x49(r1) - stb r3, 0x4a(r1) - stb r4, 0x4b(r1) - b lbl_801D7D4C - -lbl_801D7CEC: - li r5, 0xc8 - li r3, 0xff - li r4, 0 - stb r5, 0x44(r1) - stb r5, 0x45(r1) - stb r4, 0x46(r1) - stb r3, 0x47(r1) - stb r5, 0x48(r1) - stb r5, 0x49(r1) - stb r5, 0x4a(r1) - stb r3, 0x4b(r1) - b lbl_801D7D4C - -lbl_801D7D1C: - li r6, 0xff - li r3, 0xc8 - li r5, 0xa - li r4, 0 - stb r6, 0x44(r1) - stb r5, 0x45(r1) - stb r4, 0x46(r1) - stb r6, 0x47(r1) - stb r3, 0x48(r1) - stb r3, 0x49(r1) - stb r3, 0x4a(r1) - stb r6, 0x4b(r1) - -lbl_801D7D4C: - lbz r4, 0xd8(r29) - addi r9, r2, lbl_80519770@sda21 - rlwinm. r3, r4, 0, 0x1c, 0x1c - beq lbl_801D7D60 - addi r9, r2, lbl_8051976C@sda21 - -lbl_801D7D60: - rlwinm. r3, r4, 0, 0x1a, 0x1a - addi r8, r2, lbl_80519778@sda21 - beq lbl_801D7D70 - addi r8, r2, lbl_80519774@sda21 - -lbl_801D7D70: - rlwinm. r3, r4, 0, 0x1b, 0x1b - lis r4, lbl_804807F0@ha - addi r6, r4, lbl_804807F0@l - mr r5, r31 - mr r3, r30 - addi r4, r1, 0x30 - addi r7, r2, lbl_80519778@sda21 - beq lbl_801D7D94 - addi r7, r2, lbl_80519774@sda21 - -lbl_801D7D94: - slwi r0, r0, 2 - addi r10, r1, 0x24 - lwzx r10, r10, r0 - crclr 6 - bl "perspPrintf__8GraphicsFR15PerspPrintfInfoR10Vector3Pce" - lwz r3, sys@sda21(r13) - li r4, 0 - lwz r3, 0x24(r3) - bl getViewport__8GraphicsFi - lwz r28, 0x44(r3) - mr r3, r29 - lfs f1, 0(r31) - addi r4, r1, 8 - lfs f0, lbl_8051977C@sda21(r2) - stfs f1, 0x18(r1) - lfs f1, 4(r31) - stfs f1, 0x1c(r1) - fadds f0, f1, f0 - lfs f1, 8(r31) - stfs f1, 0x20(r1) - stfs f0, 0x1c(r1) - lwz r12, 0(r29) - lwz r12, 0x140(r12) - mtctr r12 - bctrl - mr r3, r28 - addi r4, r1, 8 - bl calcScreenSize__6CameraFRQ23Sys6Sphere - mr r3, r30 - addi r4, r1, 0x30 - addi r5, r1, 0x18 - addi r6, r2, lbl_80519780@sda21 - crset 6 - bl "perspPrintf__8GraphicsFR15PerspPrintfInfoR10Vector3Pce" - -lbl_801D7E1C: - lwz r0, 0x64(r1) - lwz r31, 0x5c(r1) - lwz r30, 0x58(r1) - lwz r29, 0x54(r1) - lwz r28, 0x50(r1) - mtlr r0 - addi r1, r1, 0x60 - blr - */ } } // namespace Game