From 6236bb6154991040360114b220a1863477ff01cd Mon Sep 17 00:00:00 2001 From: Evan Date: Tue, 30 Apr 2024 21:41:59 -0400 Subject: [PATCH] pikiMgr closer --- docs/recommended_todo.md | 16 +- include/PSSystem/SeqTrack.h | 2 +- include/efx/TPk.h | 90 +++++--- src/plugProjectHikinoU/PSGame.cpp | 4 +- src/plugProjectKandoU/pikiMgr.cpp | 333 ++---------------------------- 5 files changed, 90 insertions(+), 355 deletions(-) diff --git a/docs/recommended_todo.md b/docs/recommended_todo.md index ca24c8494..a67866119 100644 --- a/docs/recommended_todo.md +++ b/docs/recommended_todo.md @@ -33,11 +33,11 @@ | JAudio//JAS/JASDSPChannel.cpp | 11462 | JAudio//JAS/JASTaskThread.cpp | 12200 | | JAudio//JAS/JASWSParser.cpp | 12435 | J3D/J3DJoint.cpp | 13780 | | JParticle/JPADynamicsBlock.cpp | 13887 | JAudio//JAS/JASAiCtrl.cpp | 14267 | -| JGadget/std-vector.cpp | 16058 | JStudio_JParticle/object-particle.cpp | 16762 | -| JStudio/stb.cpp | 16978 | JStudio_JStage/object-camera.cpp | 17767 | -| J3D/J3DCluster.cpp | 18124 | J2D/J2DTextBoxEx.cpp | 18983 | -| JAudio//JAI/JAISystemInterface.cpp | 19058 | JAudio//JAS/JASChannel.cpp | 19166 | -| JMessage/resource.cpp | 19364 | J3D/J3DShape.cpp | 19482 | +| J3D/J3DShape.cpp | 14992 | JGadget/std-vector.cpp | 16058 | +| JStudio_JParticle/object-particle.cpp | 16762 | JStudio/stb.cpp | 16978 | +| JStudio_JStage/object-camera.cpp | 17767 | J3D/J3DCluster.cpp | 18124 | +| J2D/J2DTextBoxEx.cpp | 18983 | JAudio//JAI/JAISystemInterface.cpp | 19058 | +| JAudio//JAS/JASChannel.cpp | 19166 | JMessage/resource.cpp | 19364 | | JAudio//JAS/JASBNKParser.cpp | 19529 | J3D/J3DTevs.cpp | 20295 | | JStudio/fvb.cpp | 20306 | J3D/J3DModelLoaderCalcSize.cpp | 21199 | | J3D/J3DMaterial.cpp | 21468 | JAudio//JAI/JAIAnimation.cpp | 21643 | @@ -73,7 +73,7 @@ | ---- | ---- | ---- | ---- | | PSBnkMgr.cpp | 10222 | PSSe.cpp | 22622 | | PSSeq.cpp | 27120 | PSAutoBgm.cpp | 53589 | -| PSGame.cpp | 75602 | | | +| PSGame.cpp | 75560 | | | ###
plugProjectKandoU
| File | Size (bytes) | File | Size (bytes) | @@ -91,8 +91,8 @@ | itemGate.cpp | 32798 | gamePlayDataMemCard.cpp | 36029 | | piki.cpp | 36278 | gamePlayData.cpp | 36923 | | routeMgr.cpp | 39120 | gameGeneratorCache.cpp | 40204 | -| mapMgr.cpp | 41795 | collinfo.cpp | 43421 | -| pikiMgr.cpp | 47897 | singleGS_CaveGame.cpp | 52772 | +| pikiMgr.cpp | 41251 | mapMgr.cpp | 41795 | +| collinfo.cpp | 43421 | singleGS_CaveGame.cpp | 52772 | | cellPyramid.cpp | 52800 | aiFormation.cpp | 53092 | | navi_demoCheck.cpp | 57727 | itemWeed.cpp | 62058 | | pelletState.cpp | 63200 | itemUjamushi.cpp | 63548 | diff --git a/include/PSSystem/SeqTrack.h b/include/PSSystem/SeqTrack.h index 335cfa2ab..8fa79dc07 100644 --- a/include/PSSystem/SeqTrack.h +++ b/include/PSSystem/SeqTrack.h @@ -67,7 +67,7 @@ struct SeqTrackRoot : public SeqTrackBase { f32 mSwingMagnitude; // _34, how significant the swing is (?) int mSwingState; // _38, 0 = olimar, 1 = louie BeatMgr mBeatMgr; // _3C - u16 mBeatInterval; // _3E + u16 mBeatInterval; // _3E, used to determine swing movement rate, usually 60 TaskEntry_Tempo mTempoTask; // _40, for low health TaskEntry_OuterParam _100; // _100 TaskEntry_PitMod mPitchModTask; // _16C, for taking damage diff --git a/include/efx/TPk.h b/include/efx/TPk.h index 51587a15f..fcd625df5 100644 --- a/include/efx/TPk.h +++ b/include/efx/TPk.h @@ -8,12 +8,13 @@ #include "efx/Toe.h" #include "BitFlag.h" -#define PKEFF_Light (0x1) -#define PKEFF_Doped (0x2) -#define PKEFF_Fire (0x4) -#define PKEFF_Gas (0x8) -#define PKEFF_Water (0x10) -#define PKEFF_Drown (0x20) +#define PKEFF_Light (0x1) +#define PKEFF_Doped (0x2) +#define PKEFF_Fire (0x4) +#define PKEFF_Gas (0x8) +#define PKEFF_Water (0x10) +#define PKEFF_Drown (0x20) +#define PKEFF_InMovieDraw (0x80000000) namespace efx { void createSimplePkAp(Vector3f&); @@ -272,10 +273,18 @@ struct TPkEffect { inline bool isFlag(int flagID) { return mFlags.typeView & flagID; } - inline void clear() + // for start of cutscene, disable all effects + inline void killAllEffects() { - mFlags.clear(); - mBackupFlags.clear(); + if (!isFlag(PKEFF_InMovieDraw)) { + mBackupFlags.typeView = mFlags.typeView; + mFlags.clear(); + setFlag(PKEFF_InMovieDraw); + } + + mNageBlur.forceKill(); + mMoeA.forceKill(); + mBlackDown.forceKill(); killKourin_(); killDoping_(); killNage_(); @@ -290,13 +299,12 @@ struct TPkEffect { inline void doDead() { - clear(); + killAllEffects(); createSimpleDead(*mHamonPosPtr, mPikiColor); } - inline void doWaterEntry() + inline void doWaterEntry(bool flag) { - bool flag = isFlag(PKEFF_Drown); setFlag(PKEFF_Drown); updateHamon_(); if (!flag) { @@ -304,6 +312,24 @@ struct TPkEffect { } } + inline void doCreateWater() + { + setFlag(PKEFF_Water); + createWater_(mAltStemPosition); + } + + inline void doCreateChudoku() + { + setFlag(PKEFF_Gas); + createChudoku_(mStemPosition); + } + + inline void doCreateMoe() + { + setFlag(PKEFF_Fire); + createMoe_(mStemPosition); + } + inline void doWaterExit() { resetFlag(PKEFF_Drown); @@ -341,11 +367,26 @@ struct TPkEffect { killKourin_(); } - inline void setMovieDraw() + // for following movie draw, recreate all active effects + inline void createAllEffects() { - doKillDoping(); - doDoping(); - // needs a lot more + if (isFlag(PKEFF_InMovieDraw)) { + mFlags.typeView = mBackupFlags.typeView; + resetFlag(PKEFF_InMovieDraw); + } + + if (isFlag(PKEFF_Light)) + doLightEffect(); + if (isFlag(PKEFF_Doped)) + doDoping(); + if (isFlag(PKEFF_Fire)) + doCreateMoe(); + if (isFlag(PKEFF_Gas)) + doCreateChudoku(); + if (isFlag(PKEFF_Water)) + doCreateWater(); + if (isFlag(PKEFF_Drown)) + doWaterEntry(isFlag(PKEFF_Drown)); } BitFlag mFlags; // _00 @@ -363,15 +404,14 @@ struct TPkEffect { TPkMoeA mMoeA; // _48 TPkBlackDown mBlackDown; // _5C ToeKourin mOeKourin; // _70 - // u8 _8C[4]; // _8C, unknown - ToeDoping mOeDoping; // _90 - ToeNagekira mOeNagekira; // _AC - ToeMoeBC mOeMoeBC; // _C8 - ToeChudoku mOeChudoku; // _100 - ToeWater mOeWater; // _11C - ToeHamonA mOeHamonA; // _154 - ToeHamonB mOeHamonB; // _170 - ToeMoeSmoke mOeMoeSmoke; // _18C + ToeDoping mOeDoping; // _90 + ToeNagekira mOeNagekira; // _AC + ToeMoeBC mOeMoeBC; // _C8 + ToeChudoku mOeChudoku; // _100 + ToeWater mOeWater; // _11C + ToeHamonA mOeHamonA; // _154 + ToeHamonB mOeHamonB; // _170 + ToeMoeSmoke mOeMoeSmoke; // _18C }; struct TPkEffectMgr : public JKRDisposer { diff --git a/src/plugProjectHikinoU/PSGame.cpp b/src/plugProjectHikinoU/PSGame.cpp index 0d368f29f..3a8a66ea3 100644 --- a/src/plugProjectHikinoU/PSGame.cpp +++ b/src/plugProjectHikinoU/PSGame.cpp @@ -2204,9 +2204,9 @@ u16 seqCpuSync(JASTrack* track, u16 command) case 0x600: case 0x300: case 0x800: - JADUtility::PrmSetRc* prm = static_cast(seq)->mConductorMgr.mPrmSetRc; + PSAutoBgm::Conductor* prm = static_cast(seq)->mConductorMgr.mPrmSetRc; P2ASSERTLINE(2128, prm); - return ((PSAutoBgm::Conductor*)prm)->seqCpuSync_AutoBgm(track, command, testID, root); + return prm->seqCpuSync_AutoBgm(track, command, testID, root); default: return 0; } diff --git a/src/plugProjectKandoU/pikiMgr.cpp b/src/plugProjectKandoU/pikiMgr.cpp index bcce1cbe7..735fb43e9 100644 --- a/src/plugProjectKandoU/pikiMgr.cpp +++ b/src/plugProjectKandoU/pikiMgr.cpp @@ -257,201 +257,13 @@ void PikiMgr::setMovieDraw(bool drawOn) if (!mOpenIds[i]) { if (!mArray[i].isMovieActor()) { if (drawOn) { - mArray[i].mEffectsObj->setMovieDraw(); + mArray[i].mEffectsObj->createAllEffects(); } else { - mArray[i].mEffectsObj->clear(); + mArray[i].mEffectsObj->killAllEffects(); } } } } - /* - stwu r1, -0x20(r1) - mflr r0 - stw r0, 0x24(r1) - clrlwi. r0, r4, 0x18 - stmw r26, 8(r1) - mr r28, r4 - mr r27, r3 - bne lbl_8015EFB0 - lbz r0, 0x39(r27) - ori r0, r0, 1 - stb r0, 0x39(r27) - b lbl_8015EFBC - -lbl_8015EFB0: - lbz r0, 0x39(r27) - rlwinm r0, r0, 0, 0x18, 0x1e - stb r0, 0x39(r27) - -lbl_8015EFBC: - li r29, 0 - li r30, 0 - b lbl_8015F1E0 - -lbl_8015EFC8: - lwz r3, 0x2c(r27) - lbzx r0, r3, r29 - cmplwi r0, 0 - bne lbl_8015F1D8 - lwz r0, 0x28(r27) - add r3, r0, r30 - lwz r12, 0(r3) - lwz r12, 0xb8(r12) - mtctr r12 - bctrl - clrlwi. r0, r3, 0x18 - bne lbl_8015F1D8 - clrlwi. r0, r28, 0x18 - beq lbl_8015F110 - lwz r3, 0x28(r27) - addi r0, r30, 0x258 - lwzx r31, r3, r0 - lwz r0, 0(r31) - rlwinm. r0, r0, 0, 0, 0 - beq lbl_8015F02C - lwz r0, 4(r31) - stw r0, 0(r31) - lwz r0, 0(r31) - clrlwi r0, r0, 1 - stw r0, 0(r31) - -lbl_8015F02C: - lwz r3, 0(r31) - clrlwi. r0, r3, 0x1f - beq lbl_8015F058 - ori r0, r3, 1 - stw r0, 0(r31) - lwz r0, 0(r31) - rlwinm. r0, r0, 0, 0x1e, 0x1e - bne lbl_8015F058 - lwz r4, 0xc(r31) - mr r3, r31 - bl "createKourin___Q23efx9TPkEffectFP10Vector3" - -lbl_8015F058: - lwz r3, 0(r31) - rlwinm. r0, r3, 0, 0x1e, 0x1e - beq lbl_8015F080 - ori r0, r3, 2 - mr r3, r31 - stw r0, 0(r31) - lwz r4, 0xc(r31) - bl "createDoping___Q23efx9TPkEffectFP10Vector3" - mr r3, r31 - bl killKourin___Q23efx9TPkEffectFv - -lbl_8015F080: - lwz r3, 0(r31) - rlwinm. r0, r3, 0, 0x1d, 0x1d - beq lbl_8015F0A0 - ori r0, r3, 4 - mr r3, r31 - stw r0, 0(r31) - lwz r4, 0xc(r31) - bl "createMoe___Q23efx9TPkEffectFP10Vector3" - -lbl_8015F0A0: - lwz r3, 0(r31) - rlwinm. r0, r3, 0, 0x1c, 0x1c - beq lbl_8015F0C0 - ori r0, r3, 8 - mr r3, r31 - stw r0, 0(r31) - lwz r4, 0xc(r31) - bl "createChudoku___Q23efx9TPkEffectFP10Vector3" - -lbl_8015F0C0: - lwz r3, 0(r31) - rlwinm. r0, r3, 0, 0x1b, 0x1b - beq lbl_8015F0E0 - ori r0, r3, 0x10 - mr r3, r31 - stw r0, 0(r31) - lwz r4, 0x14(r31) - bl "createWater___Q23efx9TPkEffectFP10Vector3" - -lbl_8015F0E0: - lwz r0, 0(r31) - rlwinm. r26, r0, 0, 0x1a, 0x1a - beq lbl_8015F1D8 - ori r0, r0, 0x20 - mr r3, r31 - stw r0, 0(r31) - bl updateHamon___Q23efx9TPkEffectFv - cmplwi r26, 0 - bne lbl_8015F1D8 - addi r3, r31, 0x28 - bl "createSimpleDive__3efxFR10Vector3" - b lbl_8015F1D8 - -lbl_8015F110: - lwz r3, 0x28(r27) - addi r0, r30, 0x258 - lwzx r31, r3, r0 - lwz r3, 0(r31) - rlwinm. r0, r3, 0, 0, 0 - bne lbl_8015F14C - stw r3, 4(r31) - li r0, 0 - stb r0, 0(r31) - stb r0, 1(r31) - stb r0, 2(r31) - stb r0, 3(r31) - lwz r0, 0(r31) - oris r0, r0, 0x8000 - stw r0, 0(r31) - -lbl_8015F14C: - addi r3, r31, 0x34 - lwz r12, 0x34(r31) - lwz r12, 0xc(r12) - mtctr r12 - bctrl - addi r3, r31, 0x48 - lwz r12, 0x48(r31) - lwz r12, 0xc(r12) - mtctr r12 - bctrl - addi r3, r31, 0x5c - lwz r12, 0x5c(r31) - lwz r12, 0xc(r12) - mtctr r12 - bctrl - mr r3, r31 - bl killKourin___Q23efx9TPkEffectFv - mr r3, r31 - bl killDoping___Q23efx9TPkEffectFv - mr r3, r31 - bl killNage___Q23efx9TPkEffectFv - mr r3, r31 - bl killMoe___Q23efx9TPkEffectFv - mr r3, r31 - bl killChudoku___Q23efx9TPkEffectFv - mr r3, r31 - bl killMoeSmoke___Q23efx9TPkEffectFv - mr r3, r31 - bl killBlackDown___Q23efx9TPkEffectFv - mr r3, r31 - bl killWater___Q23efx9TPkEffectFv - mr r3, r31 - bl killHamonA___Q23efx9TPkEffectFv - mr r3, r31 - bl killHamonB___Q23efx9TPkEffectFv - -lbl_8015F1D8: - addi r30, r30, 0x2c8 - addi r29, r29, 1 - -lbl_8015F1E0: - lwz r0, 0x24(r27) - cmpw r29, r0 - blt lbl_8015EFC8 - lmw r26, 8(r1) - lwz r0, 0x24(r1) - mtlr r0 - addi r1, r1, 0x20 - blr - */ } /** @@ -473,9 +285,10 @@ void PikiMgr::debugShapeDL(char* text) */ void PikiMgr::doSimpleDraw(Viewport* vp) { + int vpid = vp->mVpId; for (int i = 0; i < 5; i++) { J3DModelData& modelData = *mHappaModel[i]; - J3DMaterial* mat = modelData.mJointTree.mRootNode->mMaterial; + J3DMaterial* mat = (*modelData.mJointTree.mJoints)->mMaterial; j3dSys.mVtxPos = modelData.getVertexData()->getVtxPosArray(); j3dSys.mVtxNorm = modelData.getVertexData()->getVtxNrmArray(); j3dSys.mVtxColor = modelData.getVertexData()->getVtxColorArray(0); @@ -487,19 +300,18 @@ void PikiMgr::doSimpleDraw(Viewport* vp) if (!mOpenIds[j]) { Piki* piki = &mArray[j]; if (piki->mLod.mFlags & 4) { - if (!piki->doped() && piki->mLod.mFlags & 0x10) { + if (!piki->doped() && piki->mLod.mFlags & 0x10 << vpid) { int id = piki->getHappa(); // make purple and white pikmin use the red flower/bud - if ((piki->getKind() == Purple || piki->getKind() == White) && id != 0) { + if ((piki->getKind() == White || piki->getKind() == Purple) && id >= 1) { id += 2; } - if (i == id) { - Matrixf* mtx = piki->mLeafStemJoint->getWorldMatrix(); - Matrixf* mtx2 = vp->getMatrix(1); + if (id == i) { Mtx test; - PSMTXConcat(mtx->mMatrix.mtxView, mtx2->mMatrix.mtxView, test); - GXLoadPosMtxImm(test, 0); + Matrixf* mtx = piki->mLeafStemJoint->getWorldMatrix(); + PSMTXConcat(vp->getMatrix(1)->mMatrix.mtxView, mtx->mMatrix.mtxView, test); GXLoadPosMtxImm(test, 0); + GXLoadNrmMtxImm(test, 0); mat->mShape->simpleDrawCache(); } } @@ -508,126 +320,6 @@ void PikiMgr::doSimpleDraw(Viewport* vp) } } } - /* - stwu r1, -0x60(r1) - mflr r0 - stw r0, 0x64(r1) - stmw r22, 0x38(r1) - mr r23, r3 - mr r24, r4 - li r3, 0x10 - mr r29, r23 - li r27, 0 - lhz r0, 0x18(r4) - lis r4, j3dSys@ha - addi r31, r4, j3dSys@l - slw r28, r3, r0 - -lbl_8015F2B8: - lwz r5, 0x58(r29) - li r0, 0 - lwz r4, 0x28(r5) - lwz r3, 0xa0(r5) - lwz r4, 0(r4) - lwz r26, 0x58(r4) - stw r3, 0x10c(r31) - lwz r3, 0xa4(r5) - stw r3, 0x110(r31) - lwz r3, 0xac(r5) - stw r3, 0x114(r31) - stw r0, sOldVcdVatCmd__8J3DShape@sda21(r13) - b lbl_8015F3F0 - -lbl_8015F2EC: - mr r3, r26 - lwz r12, 0(r26) - lwz r12, 0x1c(r12) - mtctr r12 - bctrl - lwz r3, 8(r26) - bl loadPreDrawSetting__8J3DShapeCFv - li r25, 0 - li r30, 0 - b lbl_8015F3E0 - -lbl_8015F314: - lwz r3, 0x2c(r23) - lbzx r0, r3, r25 - cmplwi r0, 0 - bne lbl_8015F3D8 - lwz r0, 0x28(r23) - add r22, r0, r30 - lbz r0, 0xd8(r22) - rlwinm. r0, r0, 0, 0x1d, 0x1d - beq lbl_8015F3D8 - mr r3, r22 - bl doped__Q24Game4PikiFv - clrlwi. r0, r3, 0x18 - bne lbl_8015F3D8 - lbz r0, 0xd8(r22) - and. r0, r0, r28 - beq lbl_8015F3D8 - lbz r3, 0x2b8(r22) - lbz r0, 0x2b9(r22) - cmpwi r3, 4 - mr r4, r0 - beq lbl_8015F370 - cmpwi r3, 3 - bne lbl_8015F37C - -lbl_8015F370: - cmpwi r0, 1 - blt lbl_8015F37C - addi r4, r4, 2 - -lbl_8015F37C: - cmpw r4, r27 - bne lbl_8015F3D8 - lwz r3, 0x268(r22) - bl getWorldMatrix__Q28SysShape5JointFv - mr r0, r3 - mr r3, r24 - mr r22, r0 - li r4, 1 - bl getMatrix__8ViewportFb - mr r4, r22 - addi r5, r1, 8 - bl PSMTXConcat - addi r3, r1, 8 - li r4, 0 - bl GXLoadPosMtxImm - addi r3, r1, 8 - li r4, 0 - bl GXLoadNrmMtxImm - lwz r3, 8(r26) - lwz r12, 0(r3) - lwz r12, 0x14(r12) - mtctr r12 - bctrl - -lbl_8015F3D8: - addi r30, r30, 0x2c8 - addi r25, r25, 1 - -lbl_8015F3E0: - lwz r0, 0x24(r23) - cmpw r25, r0 - blt lbl_8015F314 - lwz r26, 4(r26) - -lbl_8015F3F0: - cmplwi r26, 0 - bne lbl_8015F2EC - addi r27, r27, 1 - addi r29, r29, 4 - cmpwi r27, 5 - blt lbl_8015F2B8 - lmw r22, 0x38(r1) - lwz r0, 0x64(r1) - mtlr r0 - addi r1, r1, 0x60 - blr - */ } /** @@ -1939,13 +1631,16 @@ void PikiMgr::caveSaveFormationPikmins(bool doKill) Piki* list[100]; CI_LOOP(iterator) { - Piki* piki = *iterator; if (piki->isAlive() && (piki->getCurrActionID() != 0 || (piki->mFakePikiFlags.typeView & 0x40))) { list[i++] = piki; } } + if (i == 0) { + for (int j = 125; j > 0; j--) { } + } + for (int j = 0; j < i; j++) { playData->mCaveSaveData.mCavePikis(list[j])++; if (doKill) {