From 997bc54d6d79586b371869823890713167ff835a Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sat, 11 Nov 2023 20:25:04 -0500 Subject: [PATCH] JPAEmitterLoader match, JPAEmitterManager almost --- configure.py | 2 +- include/JSystem/JParticle/JPAEmitter.h | 3 ++- include/JSystem/JParticle/JPAField.h | 4 +-- include/JSystem/JParticle/JPAParticle.h | 4 +-- src/JSystem/JParticle/JPAEmitterLoader.cpp | 29 +++++++++++++++++++-- src/JSystem/JParticle/JPAEmitterManager.cpp | 21 +++++++-------- 6 files changed, 43 insertions(+), 20 deletions(-) diff --git a/configure.py b/configure.py index a17ccef0e..8e3de5adb 100644 --- a/configure.py +++ b/configure.py @@ -568,7 +568,7 @@ config.libs = [ Object(Matching, "JSystem/JParticle/JPAKeyBlock.cpp"), Object(Matching, "JSystem/JParticle/JPATexture.cpp"), Object(Matching, "JSystem/JParticle/JPAResourceManager.cpp"), - Object(NonMatching, "JSystem/JParticle/JPAEmitterLoader.cpp"), + Object(Matching, "JSystem/JParticle/JPAEmitterLoader.cpp"), Object(NonMatching, "JSystem/JParticle/JPAMath.cpp"), Object(NonMatching, "JSystem/JParticle/JPAField.cpp"), Object(NonMatching, "JSystem/JParticle/JPAEmitter.cpp"), diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index 245c85c69..2dddd5c34 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -131,7 +131,8 @@ public: class JPABaseEmitter { public: - JPABaseEmitter(); + JPABaseEmitter() : mLink(this), mRandomSeed(0), mTick(0.0f), mTime(0.0f) {} + ~JPABaseEmitter() {} typedef void (JPABaseEmitter::*VolumeFunc)(); diff --git a/include/JSystem/JParticle/JPAField.h b/include/JSystem/JParticle/JPAField.h index 115be0dce..a3ea0faba 100644 --- a/include/JSystem/JParticle/JPAField.h +++ b/include/JSystem/JParticle/JPAField.h @@ -27,8 +27,8 @@ public: class JPAFieldData { public: - JPAFieldData(); - virtual ~JPAFieldData(); + JPAFieldData() : mLink(this) {} + virtual ~JPAFieldData() {} JSULink* getLinkBufferPtr() { return &mLink; } static JPAEmitterInfo * pEmtrInfo; diff --git a/include/JSystem/JParticle/JPAParticle.h b/include/JSystem/JParticle/JPAParticle.h index 0a9feb6e2..6dc3e6af7 100644 --- a/include/JSystem/JParticle/JPAParticle.h +++ b/include/JSystem/JParticle/JPAParticle.h @@ -31,8 +31,8 @@ public: bool checkCreateChild(); JSULink* getLinkBufferPtr() { return &mLink; } - ~JPABaseParticle(); - JPABaseParticle(); + ~JPABaseParticle() {} + JPABaseParticle() : mLink(this), mCurFrame(0.0f) {} public: /* 0x00 */ JSULink mLink; diff --git a/src/JSystem/JParticle/JPAEmitterLoader.cpp b/src/JSystem/JParticle/JPAEmitterLoader.cpp index 5f59a8813..01933f67a 100644 --- a/src/JSystem/JParticle/JPAEmitterLoader.cpp +++ b/src/JSystem/JParticle/JPAEmitterLoader.cpp @@ -30,6 +30,31 @@ public: /* 0x0C */ JPATextureResource* mpTexRes; }; +static void dummy() { + OSReport("JPAEmitterLoader.cpp"); + OSReport("%s"); + OSReport("This is WRONG Version File\n"); + OSReport("This is NO JPA File\n"); + OSReport("pEmtrRes"); + OSReport("Halt"); + OSReport("pEmtrRes->pLinkInfoArray"); + OSReport("pLinkInfo"); + OSReport("pLinkInfo->keyBlocks || pLinkInfo->keyNum == 0"); + OSReport("pLinkInfo->fldBlocks || pLinkInfo->fldNum == 0"); + OSReport("pLinkInfo->texDataBase || texNum == 0"); + OSReport("pLinkInfo->fldBlocks[fldCntr]"); + OSReport("pLinkInfo->keyBlocks[keyCntr]"); + OSReport("pLinkInfo->dynBlock"); + OSReport("pLinkInfo->bspBlock"); + OSReport("pLinkInfo->espBlock"); + OSReport("pLinkInfo->sspBlock"); + OSReport("pLinkInfo->etxBlock"); + OSReport("This is WRONG File\n"); + OSReport("pLinkInfo->fldBlocks[fld_cntr]"); + OSReport("pLinkInfo->keyBlocks[key_cntr]"); + OSReport("pTex"); +} + /* 802590B4-8025917C .text load__31JPAEmitterArchiveLoaderDataBaseFPCUcP7JKRHeapPP18JPAEmitterResourcePP18JPATextureResource */ void JPAEmitterArchiveLoaderDataBase::load(const u8* data, JKRHeap* heap, JPAEmitterResource** dstEmtrRes, JPATextureResource** dstTexRes) { u32 magic = ((const u32*)data)[0]; @@ -107,7 +132,7 @@ void JPAEmitterArchiveLoader_v10::load() { break; case 'KFA1': pLinkInfo->keyBlocks[key_cntr] = (JPAKeyBlock*) new(pHeap, 0) JPAKeyBlockArc(pData + blockOffs); - JUT_ASSERT(278, pLinkInfo->keyBlocks[key_cntr]); + JUT_ASSERT(279, pLinkInfo->keyBlocks[key_cntr]); key_cntr++; break; case 'BEM1': @@ -144,7 +169,7 @@ void JPAEmitterArchiveLoader_v10::load() { for (s32 i = 0; i < header->texResNum; i++) { u32 size = *(u32*)(pData + offs + 0x04); - JPATextureArc* pTex = new(pHeap, 0) JPATextureArc(pData + offs); + JPATexture* pTex = new(pHeap, 0) JPATextureArc(pData + offs); JUT_ASSERT(319, pTex); getTextureResource()->registration(pTex); offs += size; diff --git a/src/JSystem/JParticle/JPAEmitterManager.cpp b/src/JSystem/JParticle/JPAEmitterManager.cpp index dd7a03cc3..444d6988e 100644 --- a/src/JSystem/JParticle/JPAEmitterManager.cpp +++ b/src/JSystem/JParticle/JPAEmitterManager.cpp @@ -12,26 +12,26 @@ /* 8025EE44-8025F0E4 .text __ct__17JPAEmitterManagerFP18JPAResourceManagerUlUlUlP7JKRHeap */ JPAEmitterManager::JPAEmitterManager(JPAResourceManager* resMgr, u32 ptclNum, u32 emtrNum, u32 fieldNum, JKRHeap* heap) { - /* Nonmatching */ heap = heap != NULL ? heap : JKRHeap::getCurrentHeap(); mPtclNum = ptclNum; mEmtrNum = emtrNum; mFieldNum = fieldNum; pResMgrArray[0] = resMgr; - for (u32 i = 1; i < 8; i++) + u32 i; + for (i = 1; i < 8; i++) pResMgrArray[i] = 0; JPABaseParticle* pPtclArray = new(heap, 0) JPABaseParticle[mPtclNum]; JUT_ASSERT(0x2e, pPtclArray); - for (u32 i = 0; i < mPtclNum; i++) { + for (i = 0; i < mPtclNum; i++) { JPABaseParticle* ptcl = &pPtclArray[i]; mPtclPool.prepend(ptcl->getLinkBufferPtr()); } JPABaseEmitter* pEmtrArray = new(heap, 0) JPABaseEmitter[mEmtrNum]; JUT_ASSERT(0x35, pEmtrArray); - for (u32 i = 0; i < mEmtrNum; i++) { + for (i = 0; i < mEmtrNum; i++) { JPABaseEmitter* emtr = &pEmtrArray[i]; emtr->setParticleList(&mPtclPool); emtr->setFieldList(&mFieldPool); @@ -40,7 +40,7 @@ JPAEmitterManager::JPAEmitterManager(JPAResourceManager* resMgr, u32 ptclNum, u3 JPAFieldData* pFieldArray = new(heap, 0) JPAFieldData[mFieldNum]; JUT_ASSERT(0x3e, pFieldArray); - for (u32 i = 0; i < mFieldNum; i++) { + for (i = 0; i < mFieldNum; i++) { JPAFieldData* field = &pFieldArray[i]; mFieldPool.prepend(field->getLinkBufferPtr()); } @@ -48,7 +48,7 @@ JPAEmitterManager::JPAEmitterManager(JPAResourceManager* resMgr, u32 ptclNum, u3 /* 8025F0E4-8025F2F4 .text createSimpleEmitterID__17JPAEmitterManagerFRCQ29JGeometry8TVec3UsUcUcP34JPACallBackBaseP54JPACallBackBase2 */ JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(const JGeometry::TVec3& pos, u16 userID, u8 groupID, u8 rmID, JPACallBackBase* pEmtrCallBack, JPACallBackBase2* pPtclCallBack) { - /* Nonmatching */ + /* Nonmatching - regalloc */ JUT_ASSERT(0x56, groupID < 16); JUT_ASSERT(0x57, rmID < 8); JUT_ASSERT(0x58, pResMgrArray[rmID] != 0); @@ -127,12 +127,10 @@ void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) { /* 8025F53C-8025F5B4 .text forceDeleteAllEmitter__17JPAEmitterManagerFv */ void JPAEmitterManager::forceDeleteAllEmitter() { - /* Nonmatching */ - for (u32 i = 0; i < 16; i++) { + for (u8 i = 0; i < 16; i++) { for (JSULink* link = mEmtrGroup[i].getFirst(); link != NULL;) { JSULink* next = link->getNext(); - JPABaseEmitter* emtr = link->getObject(); - forceDeleteEmitter(emtr); + forceDeleteEmitter(link->getObject()); link = next; } } @@ -140,9 +138,8 @@ void JPAEmitterManager::forceDeleteAllEmitter() { /* 8025F5B4-8025F68C .text clearResourceManager__17JPAEmitterManagerFUc */ void JPAEmitterManager::clearResourceManager(u8 rmID) { - /* Nonmatching */ JUT_ASSERT(0x14b, rmID < 8); - for (u32 i = 0; i < 16; i++) { + for (u8 i = 0; i < 16; i++) { for (JSULink* link = mEmtrGroup[i].getFirst(); link != NULL;) { JSULink* next = link->getNext(); JPABaseEmitter* emtr = link->getObject();