diff --git a/configure.py b/configure.py index 61d65144..cb6bad57 100755 --- a/configure.py +++ b/configure.py @@ -1119,7 +1119,7 @@ def MatchingFor(*versions): Object(Matching, "Kameda/LapGhost2D.cpp"), Object(Matching, "Kameda/CanNotSaveG2D.cpp"), Object(Matching, "Kameda/LANResult2D.cpp"), - Object(NonMatching, "Kameda/LANNum2D.cpp"), + Object(Matching, "Kameda/LANNum2D.cpp"), Object(Matching, "Kameda/Cup2D.cpp"), Object(Matching, "Kameda/BombStart2D.cpp") ] diff --git a/include/Kameda/LANNum2D.h b/include/Kameda/LANNum2D.h index 208263bb..630fcaac 100644 --- a/include/Kameda/LANNum2D.h +++ b/include/Kameda/LANNum2D.h @@ -1,42 +1,85 @@ #ifndef LANNUM2D_H #define LANNUM2D_H +#include "JSystem/J2D/J2DGrafContext.h" +#include "JSystem/J2D/J2DPicture.h" +#include "JSystem/J2D/J2DScreen.h" #include "JSystem/JKernel/JKRHeap.h" - #include "JSystem/JORReflexible.h" #include "Kaneshige/HioMgr.h" -class LANNum2DParam : public JORReflexible { +class LANNum2DParam : public JORReflexible +{ public: - // Inline/Unused LANNum2DParam(); virtual ~LANNum2DParam() {} + + u16 _48; // 0x48 + u8 mFlag; // 0x4a }; -class LANNum2DHioNode : public HioNode { +class LANNum2DHioNode : public HioNode +{ public: - LANNum2DHioNode(); + LANNum2DHioNode() : HioNode("LANNum2D", &mParam, 0, 0) {} virtual ~LANNum2DHioNode() {} LANNum2DParam mParam; }; -class LANNum2D { // Autogenerated +class LANNum2D +{ public: - LANNum2D(JKRHeap *); // 0x80195a90 - void setDraw1(); // 0x801961c8 - void setDraw2(); // 0x80196918 - void setDraw4(); // 0x80197090 - void init(); // 0x80197840 - void draw(); // 0x80197934 - void calc(); // 0x80197a58 - void start(); // 0x80197b4c - void start2(); // 0x80197c88 - // Inline/Unused + struct AnimatedPane + { + J2DAnmTransform *mAnmTransform; // 0x0 + J2DPicture *mPane; // 0x4 + u32 _8; // 0x8 + }; + + struct PlayerPane + { + J2DPicture *mPane; // 0x0 + J2DPicture *mBoxPane; // 0x4 + J2DPicture *mNumberPane; // 0x8 + }; + + struct KartPane + { + J2DPicture *mPane; // 0x0 + J2DPicture *mBoxPane; // 0x4 + J2DPicture *mNumberPane; // 0x8 + }; + + LANNum2D(JKRHeap *heap); // 0x80195a90 ~LANNum2D(); + void setDraw1(); // 0x801961c8 + void setDraw2(); // 0x80196918 + void setDraw4(); // 0x80197090 + void init(); // 0x80197840 + void draw(); // 0x80197934 + void calc(); // 0x80197a58 + void start(); // 0x80197b4c + void start2(); // 0x80197c88 + void reset() { init(); } + private: - PLACEHOLDER_BYTES(0, 0x10c); -}; // class LANNum2D -#endif // LANNUM2D_H + J2DAnmTransform *mAnimation; // 0x00 + u32 _4; // 0x04 + f32 mTransformFrame; // 0x08 + AnimatedPane mEndAnm[4]; // 0x0c + AnimatedPane mNumAnm[4]; // 0x3c + LANNum2DHioNode *mNode; // 0x6c + J2DOrthoGraph *mOrthoGraph; // 0x70 + J2DScreen *mScreen; // 0x74 + bool mDrawFlag; // 0x78 + bool mTransformEnd; // 0x79 + u8 _7a; // 0x7a + u8 _7b; // 0x7b + PlayerPane mPlayerPane[4][2]; // 0x7c + KartPane mKartPane[4]; // 0xdc +}; + +#endif // LANNUM2D_H diff --git a/include/Kaneshige/KartInfo.h b/include/Kaneshige/KartInfo.h index 6ed3e843..6a9d6a48 100644 --- a/include/Kaneshige/KartInfo.h +++ b/include/Kaneshige/KartInfo.h @@ -107,7 +107,9 @@ class KartInfo JUT_MINMAX_ASSERT(0, driverNo, 2); return mKartCharacters[driverNo].getPad(); } - + + KartGamePad *getCoPad() { return mKartCharacters[1].getPad(); } + ECharID getDriverCharID(int driverNo) const { #line 142 JUT_MINMAX_ASSERT(0, driverNo, 2); diff --git a/src/Kameda/LANNum2D.cpp b/src/Kameda/LANNum2D.cpp index ba28184f..bdb745b9 100644 --- a/src/Kameda/LANNum2D.cpp +++ b/src/Kameda/LANNum2D.cpp @@ -1,22 +1,515 @@ #include "Kameda/LANNum2D.h" -#include "mathHelper.h" -LANNum2D::LANNum2D(JKRHeap *) {} +#include "JSystem/J2D/J2DAnmLoader.h" +#include "JSystem/JAudio/JASFakeMatch2.h" // For static initializer +#include "JSystem/JKernel.h" +#include "JSystem/JUtility/JUTAssert.h" +#include "Kameda/J2DManager.h" +#include "Kameda/Race2D.h" +#include "Kameda/Result2D.h" +#include "Kaneshige/RaceMgr.h" +#include "Osako/system.h" +#include "Yamamoto/kartCtrl.h" +#include "mathHelper.h" // For unused data -void LANNum2D::setDraw1() {} +LANNum2DParam::LANNum2DParam() : _48(0), mFlag(1) {} -void LANNum2D::setDraw2() {} +LANNum2D::LANNum2D(JKRHeap *heap) +{ + mNode = new (heap, 0) LANNum2DHioNode(); -void LANNum2D::setDraw4() {} + mOrthoGraph = System::mspJ2DOrtho; -void LANNum2D::init() {} + mScreen = new (heap, 0) J2DScreen(); -void LANNum2D::draw() {} + switch (RCMGetManager()->mRaceInfo->mConsoleNum) + { + case 1: + mScreen->set("LANNum1.blo", 0x40000, GETJ2DManager()->getArchive()); + mAnimation = (J2DAnmTransform *)J2DAnmLoaderDataBase::load( + JKRFileLoader::getGlbResource("LANNum1.bck", GETJ2DManager()->getArchive())); + mScreen->setAnimation(mAnimation); + break; + case 2: + mScreen->set("LANNum2.blo", 0x40000, GETJ2DManager()->getArchive()); + mAnimation = (J2DAnmTransform *)J2DAnmLoaderDataBase::load( + JKRFileLoader::getGlbResource("LANNum2.bck", GETJ2DManager()->getArchive())); + mScreen->setAnimation(mAnimation); + for (int i = 0; i < 2; ++i) + { + mEndAnm[i].mPane = (J2DPicture *)mScreen->search((u64)'NEnd1' + (u64)i); + mEndAnm[i].mAnmTransform = (J2DAnmTransform *)J2DAnmLoaderDataBase::load( + JKRFileLoader::getGlbResource("LANNum2.bck", GETJ2DManager()->getArchive())); + mEndAnm[i].mPane->setAnimation(mEndAnm[i].mAnmTransform); + } + for (int i = 0; i < 2; ++i) + { + mNumAnm[i].mPane = (J2DPicture *)mScreen->search((u64)'NNum1' + (u64)i); + mNumAnm[i].mAnmTransform = (J2DAnmTransform *)J2DAnmLoaderDataBase::load( + JKRFileLoader::getGlbResource("LANNum2.bck", GETJ2DManager()->getArchive())); + mNumAnm[i].mPane->setAnimation(mNumAnm[i].mAnmTransform); + } + break; + case 3: + case 4: + mScreen->set("LANNum4.blo", 0x40000, GETJ2DManager()->getArchive()); + mAnimation = (J2DAnmTransform *)J2DAnmLoaderDataBase::load( + JKRFileLoader::getGlbResource("LANNum4.bck", GETJ2DManager()->getArchive())); + mScreen->setAnimation(mAnimation); + for (int i = 0; i < 4; ++i) + { + mEndAnm[i].mPane = (J2DPicture *)mScreen->search((u64)'NEnd1' + (u64)i); + mEndAnm[i].mAnmTransform = (J2DAnmTransform *)J2DAnmLoaderDataBase::load( + JKRFileLoader::getGlbResource("LANNum4.bck", GETJ2DManager()->getArchive())); + mEndAnm[i].mPane->setAnimation(mEndAnm[i].mAnmTransform); + } + for (int i = 0; i < 4; ++i) + { + mNumAnm[i].mPane = (J2DPicture *)mScreen->search((u64)'NNum1' + (u64)i); + mNumAnm[i].mAnmTransform = (J2DAnmTransform *)J2DAnmLoaderDataBase::load( + JKRFileLoader::getGlbResource("LANNum4.bck", GETJ2DManager()->getArchive())); + mNumAnm[i].mPane->setAnimation(mNumAnm[i].mAnmTransform); + } + break; + default: +#line 114 + JUT_ASSERT(0); + } -void LANNum2D::calc() {} + for (int i = 0; i < 4; ++i) + { + for (int j = 0; j < 2; j++) + { + mPlayerPane[i][j].mPane = (J2DPicture *)mScreen->search((u64)'NP11' + i * 0x0100 + j); -void LANNum2D::start() {} + J2DPicture *pane = (J2DPicture *)mScreen->search((u64)'PB11' + i * 0x0100 + j); + if (pane) + { +#line 128 + JUT_ASSERT(pane->getTypeID() == J2DPane_Picture); + mPlayerPane[i][j].mBoxPane = pane; + } + else + { + mPlayerPane[i][j].mBoxPane = nullptr; + } -void LANNum2D::start2() {} + pane = (J2DPicture *)mScreen->search((u64)'PM11' + i * 0x0100 + j); + if (pane) + { +#line 136 + JUT_ASSERT(pane->getTypeID() == J2DPane_Picture); + mPlayerPane[i][j].mNumberPane = pane; + } + else + { + mPlayerPane[i][j].mNumberPane = nullptr; + } + } + } -#include "JSystem/JAudio/JASFakeMatch2.h" + for (int i = 0; i < 4; ++i) + { + mKartPane[i].mPane = (J2DPicture *)mScreen->search((u64)'NNum1' + (u64)i); + + J2DPicture *pane = (J2DPicture *)mScreen->search((u64)'BNum1' + (u64)i); + if (pane) + { +#line 153 + JUT_ASSERT(pane->getTypeID() == J2DPane_Picture); + mKartPane[i].mBoxPane = pane; + } + else + { + mKartPane[i].mBoxPane = nullptr; + } + + pane = (J2DPicture *)mScreen->search((u64)'KNum1' + (u64)i); + if (pane) + { +#line 161 + JUT_ASSERT(pane->getTypeID() == J2DPane_Picture); + mKartPane[i].mNumberPane = pane; + } + else + { + mKartPane[i].mNumberPane = nullptr; + } + } + + init(); +} + +void LANNum2D::setDraw1() +{ + switch (RCMGetManager()->mRaceInfo->mStatusNum) + { + case 0: + mPlayerPane[0][0].mPane->hide(); + mPlayerPane[0][1].mPane->hide(); + mKartPane[0].mPane->hide(); + break; + case 1: + break; + default: +#line 190 + JUT_ASSERT(0); + } + + int coPadPort; + + for (int i = 0; i < RCMGetManager()->mRaceInfo->mStatusNum; ++i) + { + int kartNo = J2DManager::getStatus2Kart(i); + + KartGamePad *pad = KartCtrl::getKartCtrl()->getPad(kartNo); + KartGamePad *coPad = KartCtrl::getKartCtrl()->getCoPad(kartNo); + + int padPort = pad->getPadPort(); + if (0 <= padPort && padPort < 4) + { + mPlayerPane[i][0].mBoxPane->setCornerColor(Race2D::getCornerColor(padPort)); + mPlayerPane[i][0].mNumberPane->setCornerColor(Race2D::getCornerColor(padPort)); + mPlayerPane[i][0].mNumberPane->changeTexture(Result2D::mPlayerNumberName[padPort], 0); + } + + if (RCMGetManager()->getKartInfo(kartNo)->getCoPad()) + { + coPadPort = coPad->getPadPort(); + if (0 <= coPadPort && coPadPort < 4) + { + mPlayerPane[i][1].mBoxPane->setCornerColor(Race2D::getCornerColor(coPadPort)); + mPlayerPane[i][1].mNumberPane->setCornerColor(Race2D::getCornerColor(coPadPort)); + mPlayerPane[i][1].mNumberPane->changeTexture(Result2D::mPlayerNumberName[coPadPort], + 0); + } + } + else + { + mPlayerPane[i][1].mPane->hide(); + } + + if (0 <= kartNo && kartNo < 8) + { + mKartPane[i].mBoxPane->setCornerColor(Race2D::getCornerColor(kartNo)); + mKartPane[i].mNumberPane->setCornerColor(Race2D::getCornerColor(kartNo)); + mKartPane[i].mNumberPane->changeTexture(J2DManager::mKartNumberName[kartNo], 0); + } + } + + if (RCMGetManager()->mRaceInfo->mStatusNum == 1) + { + if (!RCMGetManager()->getKartInfo(J2DManager::getStatus2Kart(0))->getCoPad()) + { + mPlayerPane[0][0].mPane->hide(); + mPlayerPane[0][1].mPane->hide(); + } + } +} + +void LANNum2D::setDraw2() +{ + switch (RCMGetManager()->mRaceInfo->mStatusNum) + { + case 0: + mPlayerPane[0][0].mPane->hide(); + mPlayerPane[0][1].mPane->hide(); + mKartPane[0].mPane->hide(); + case 1: + mPlayerPane[1][0].mPane->hide(); + mPlayerPane[1][1].mPane->hide(); + mKartPane[1].mPane->hide(); + break; + case 2: + break; + default: +#line 251 + JUT_ASSERT(0); + } + + int coPadPort; + + for (int i = 0; i < RCMGetManager()->mRaceInfo->mStatusNum; ++i) + { + int kartNo = J2DManager::getStatus2Kart(i); + + KartGamePad *pad = KartCtrl::getKartCtrl()->getPad(kartNo); + KartGamePad *coPad = KartCtrl::getKartCtrl()->getCoPad(kartNo); + + int padPort = pad->getPadPort(); + if (0 <= padPort && padPort < 4) + { + mPlayerPane[i][0].mBoxPane->setCornerColor(Race2D::getCornerColor(padPort)); + mPlayerPane[i][0].mNumberPane->setCornerColor(Race2D::getCornerColor(padPort)); + mPlayerPane[i][0].mNumberPane->changeTexture(Result2D::mPlayerNumberName[padPort], 0); + } + + if (RCMGetManager()->getKartInfo(kartNo)->getCoPad()) + { + coPadPort = coPad->getPadPort(); + if (0 <= coPadPort && coPadPort < 4) + { + mPlayerPane[i][1].mBoxPane->setCornerColor(Race2D::getCornerColor(coPadPort)); + mPlayerPane[i][1].mNumberPane->setCornerColor(Race2D::getCornerColor(coPadPort)); + mPlayerPane[i][1].mNumberPane->changeTexture(Result2D::mPlayerNumberName[coPadPort], + 0); + } + } + else + { + mPlayerPane[i][1].mPane->hide(); + } + + if (0 <= kartNo && kartNo < 8) + { + mKartPane[i].mBoxPane->setCornerColor(Race2D::getCornerColor(kartNo)); + mKartPane[i].mNumberPane->setCornerColor(Race2D::getCornerColor(kartNo)); + mKartPane[i].mNumberPane->changeTexture(J2DManager::mKartNumberName[kartNo], 0); + } + } + + if (RCMGetManager()->mRaceInfo->mStatusNum == 1) + { + if (!RCMGetManager()->getKartInfo(J2DManager::getStatus2Kart(0))->getCoPad()) + { + mPlayerPane[0][0].mPane->hide(); + mPlayerPane[0][1].mPane->hide(); + } + } +} + +void LANNum2D::setDraw4() +{ + switch (RCMGetManager()->mRaceInfo->mStatusNum) + { + case 0: + mPlayerPane[0][0].mPane->hide(); + mPlayerPane[0][1].mPane->hide(); + mKartPane[0].mPane->hide(); + case 1: + mPlayerPane[1][0].mPane->hide(); + mKartPane[1].mPane->hide(); + case 2: + mPlayerPane[2][0].mPane->hide(); + mKartPane[2].mPane->hide(); + case 3: + mPlayerPane[3][0].mPane->hide(); + mKartPane[3].mPane->hide(); + break; + case 4: + break; + default: +#line 318 + JUT_ASSERT(0); + } + + int coPadPort; + + for (int i = 0; i < RCMGetManager()->mRaceInfo->mStatusNum; ++i) + { + int kartNo = J2DManager::getStatus2Kart(i); + + KartGamePad *pad = KartCtrl::getKartCtrl()->getPad(kartNo); + KartGamePad *coPad = KartCtrl::getKartCtrl()->getCoPad(kartNo); + + int padPort = pad->getPadPort(); + if (0 <= padPort && padPort < 4) + { + mPlayerPane[i][0].mBoxPane->setCornerColor(Race2D::getCornerColor(padPort)); + mPlayerPane[i][0].mNumberPane->setCornerColor(Race2D::getCornerColor(padPort)); + mPlayerPane[i][0].mNumberPane->changeTexture(Result2D::mPlayerNumberName[padPort], 0); + } + + if (RCMGetManager()->getKartInfo(kartNo)->getCoPad() && i == 0) + { + coPadPort = coPad->getPadPort(); + if (0 <= coPadPort && coPadPort < 4) + { + mPlayerPane[i][1].mBoxPane->setCornerColor(Race2D::getCornerColor(coPadPort)); + mPlayerPane[i][1].mNumberPane->setCornerColor(Race2D::getCornerColor(coPadPort)); + mPlayerPane[i][1].mNumberPane->changeTexture(Result2D::mPlayerNumberName[coPadPort], + 0); + } + } + else if (i == 0) + { + mPlayerPane[i][1].mPane->hide(); + } + + if (0 <= kartNo && kartNo < 8) + { + mKartPane[i].mBoxPane->setCornerColor(Race2D::getCornerColor(kartNo)); + mKartPane[i].mNumberPane->setCornerColor(Race2D::getCornerColor(kartNo)); + mKartPane[i].mNumberPane->changeTexture(J2DManager::mKartNumberName[kartNo], 0); + } + } + + if (RCMGetManager()->mRaceInfo->mStatusNum == 1) + { + if (!RCMGetManager()->getKartInfo(J2DManager::getStatus2Kart(0))->getCoPad()) + { + mPlayerPane[0][0].mPane->hide(); + mPlayerPane[0][1].mPane->hide(); + } + } +} + +void LANNum2D::init() +{ + mDrawFlag = false; + mTransformEnd = false; + mTransformFrame = 0.0f; + mAnimation->mCurrentFrame = 0.0f; + + if (RCMGetManager()->mRaceInfo->mConsoleNum != 1) + { + for (int i = 0; i < RCMGetManager()->mRaceInfo->mStatusNum; ++i) + { + mEndAnm[i].mAnmTransform->mCurrentFrame = 0.0f; + } + } + + mScreen->animation(); +} + +LANNum2D::~LANNum2D() +{ + delete mNode; +} + +void LANNum2D::draw() +{ + if (mNode->mParam.mFlag & 1 && mDrawFlag) + { + if (RCMGetManager()->getRacePhase() != PHASE_CRS_DEMO && !RCMGetManager()->isReplayMode() && + !RCMGetManager()->isWaitDemoMode()) + { + if (mTransformFrame < 200.0f || mTransformEnd) + { + mOrthoGraph->setPort(); + mScreen->draw(0.0f, 0.0f, mOrthoGraph); + } + else + { + init(); + } + } + } +} + +void LANNum2D::calc() +{ + if (mNode->mParam.mFlag & 1 && mDrawFlag && mTransformFrame < 200.0f) + { + f32 frame = mTransformFrame++; + + if (mTransformEnd) + { + if (!(frame < 100.0f)) + { + frame = 100.0f; + } + } + else if (!(frame < 100.0f)) + { + if (frame < 190.0f) + { + frame = 100.0f; + } + else + { + frame -= 90.0f; + } + } + + mAnimation->setFrame(frame); + + if (RCMGetManager()->mRaceInfo->mConsoleNum != 1) + { + for (int i = 0; i < RCMGetManager()->mRaceInfo->mStatusNum; ++i) + { + mNumAnm[i].mAnmTransform->setFrame(frame); + } + } + + mScreen->animation(); + } +} + +void LANNum2D::start() +{ + mDrawFlag = true; + + if (RCMGetManager()->mRaceInfo->mConsoleNum != 1) + { + for (int i = 0; i < RCMGetManager()->mRaceInfo->mStatusNum; ++i) + { + mEndAnm[i].mAnmTransform->mCurrentFrame = 10.0f; + } + } + + switch (RCMGetManager()->mRaceInfo->mConsoleNum) + { + case 1: + setDraw1(); + break; + case 2: + setDraw2(); + break; + case 3: + case 4: + setDraw4(); + break; + default: +#line 489 + JUT_ASSERT(0); + } + + if (!J2DManager::mNetFlag) + { + ((J2DPicture *)mScreen->search('NLan'))->hide(); + } +} + +void LANNum2D::start2() +{ + mDrawFlag = true; + mTransformEnd = true; + + if (RCMGetManager()->mRaceInfo->mConsoleNum != 1) + { + for (int i = 0; i < RCMGetManager()->mRaceInfo->mStatusNum; ++i) + { + mEndAnm[i].mAnmTransform->mCurrentFrame = 11.0f; + } + } + + switch (RCMGetManager()->mRaceInfo->mConsoleNum) + { + case 1: + setDraw1(); + mPlayerPane[0][0].mPane->hide(); + mPlayerPane[0][1].mPane->hide(); + break; + case 2: + setDraw2(); + for (int i = 0; i < 2; ++i) + { + mPlayerPane[i][0].mPane->hide(); + mPlayerPane[i][1].mPane->hide(); + } + break; + case 3: + case 4: + setDraw4(); + for (int i = 0; i < 4; ++i) + { + mPlayerPane[i][0].mPane->hide(); + } + mPlayerPane[0][1].mPane->hide(); + break; + default: +#line 538 + JUT_ASSERT(0); + } +}