summaryrefslogtreecommitdiff
path: root/src/JSystem
diff options
context:
space:
mode:
Diffstat (limited to 'src/JSystem')
-rw-r--r--src/JSystem/JParticle/JPABaseShape.cpp797
-rw-r--r--src/JSystem/JParticle/JPAChildShape.cpp12
-rw-r--r--src/JSystem/JParticle/JPADynamicsBlock.cpp76
-rw-r--r--src/JSystem/JParticle/JPAEmitter.cpp117
-rw-r--r--src/JSystem/JParticle/JPAEmitterManager.cpp33
-rw-r--r--src/JSystem/JParticle/JPAExTexShape.cpp17
-rw-r--r--src/JSystem/JParticle/JPAExtraShape.cpp40
-rw-r--r--src/JSystem/JParticle/JPAFieldBlock.cpp69
-rw-r--r--src/JSystem/JParticle/JPAKeyBlock.cpp13
-rw-r--r--src/JSystem/JParticle/JPAMath.cpp54
-rw-r--r--src/JSystem/JParticle/JPAParticle.cpp26
-rw-r--r--src/JSystem/JParticle/JPAResource.cpp346
-rw-r--r--src/JSystem/JParticle/JPAResourceLoader.cpp91
-rw-r--r--src/JSystem/JParticle/JPAResourceManager.cpp66
-rw-r--r--src/JSystem/JParticle/JPATexture.cpp7
15 files changed, 664 insertions, 1100 deletions
diff --git a/src/JSystem/JParticle/JPABaseShape.cpp b/src/JSystem/JParticle/JPABaseShape.cpp
index 74abae5d..6e8682d4 100644
--- a/src/JSystem/JParticle/JPABaseShape.cpp
+++ b/src/JSystem/JParticle/JPABaseShape.cpp
@@ -1,41 +1,30 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPABaseShape
-//
-
#include "JSystem/JParticle/JPAExTexShape.h"
#include "egg/core/eggHeap.h"
#include "JSystem/JParticle/JPABaseShape.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAResourceManager.h"
+#include "JSystem/JUtility/JUTAssert.h"
#include "nw4r/math/math_triangular.h"
#include "rvl/MTX.h"
#include "rvl/GX.h"
-/* 80276A90-80276ACC 2713D0 003C+00 0/0 1/1 0/0 .text JPASetPointSize__FP18JPAEmitterWorkData */
void JPASetPointSize(JPAEmitterWorkData* work) {
GXSetPointSize((u8)(25.0f * work->mGlobalPtclScl.x), GX_TO_ONE);
}
-/* 80276ACC-80276B08 27140C 003C+00 0/0 1/1 0/0 .text JPASetLineWidth__FP18JPAEmitterWorkData */
void JPASetLineWidth(JPAEmitterWorkData* work) {
GXSetLineWidth((u8)(25.0f * work->mGlobalPtclScl.x), GX_TO_ONE);
}
-/* 80276B08-80276B4C 271448 0044+00 0/0 1/1 0/0 .text
- * JPASetPointSize__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPASetPointSize(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
GXSetPointSize((u8)(ptcl->mParticleScaleX * (25.0f * work->mGlobalPtclScl.x)), GX_TO_ONE);
}
-/* 80276B4C-80276B90 27148C 0044+00 0/0 1/1 0/0 .text
- * JPASetLineWidth__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPASetLineWidth(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
GXSetLineWidth((u8)(ptcl->mParticleScaleX * (25.0f * work->mGlobalPtclScl.x)), GX_TO_ONE);
}
-/* 80276B90-80276C2C 2714D0 009C+00 0/0 1/1 0/0 .text JPARegistPrm__FP18JPAEmitterWorkData */
void JPARegistPrm(JPAEmitterWorkData* work) {
JPABaseEmitter* emtr = work->mpEmtr;
GXColor prm = emtr->mPrmClr;
@@ -46,7 +35,6 @@ void JPARegistPrm(JPAEmitterWorkData* work) {
GXSetTevColor(GX_TEVREG0, prm);
}
-/* 80276C2C-80276CB0 27156C 0084+00 0/0 1/1 0/0 .text JPARegistEnv__FP18JPAEmitterWorkData */
void JPARegistEnv(JPAEmitterWorkData* work) {
JPABaseEmitter* emtr = work->mpEmtr;
GXColor env = emtr->mEnvClr;
@@ -56,7 +44,6 @@ void JPARegistEnv(JPAEmitterWorkData* work) {
GXSetTevColor(GX_TEVREG1, env);
}
-/* 80276CB0-80276DB0 2715F0 0100+00 0/0 1/1 0/0 .text JPARegistPrmEnv__FP18JPAEmitterWorkData */
void JPARegistPrmEnv(JPAEmitterWorkData* work) {
JPABaseEmitter* emtr = work->mpEmtr;
GXColor prm = emtr->mPrmClr;
@@ -72,8 +59,6 @@ void JPARegistPrmEnv(JPAEmitterWorkData* work) {
GXSetTevColor(GX_TEVREG1, env);
}
-/* 80276DB0-80276E60 2716F0 00B0+00 0/0 1/1 0/0 .text
- * JPARegistAlpha__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPARegistAlpha(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPABaseEmitter* emtr = work->mpEmtr;
GXColor prm = emtr->mPrmClr;
@@ -85,8 +70,6 @@ void JPARegistAlpha(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
GXSetTevColor(GX_TEVREG0, prm);
}
-/* 80276E60-80276F10 2717A0 00B0+00 0/0 1/1 0/0 .text
- * JPARegistPrmAlpha__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPARegistPrmAlpha(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPABaseEmitter* emtr = work->mpEmtr;
GXColor prm = ptcl->mPrmClr;
@@ -98,8 +81,6 @@ void JPARegistPrmAlpha(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
GXSetTevColor(GX_TEVREG0, prm);
}
-/* 80276F10-80277024 271850 0114+00 0/0 1/1 0/0 .text
- * JPARegistPrmAlphaEnv__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPARegistPrmAlphaEnv(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPABaseEmitter* emtr = work->mpEmtr;
GXColor prm = ptcl->mPrmClr;
@@ -116,8 +97,6 @@ void JPARegistPrmAlphaEnv(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
GXSetTevColor(GX_TEVREG1, env);
}
-/* 80277024-80277138 271964 0114+00 0/0 1/1 0/0 .text
- * JPARegistAlphaEnv__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPARegistAlphaEnv(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPABaseEmitter* emtr = work->mpEmtr;
GXColor prm = emtr->mPrmClr;
@@ -134,8 +113,6 @@ void JPARegistAlphaEnv(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
GXSetTevColor(GX_TEVREG1, env);
}
-/* 80277138-802771BC 271A78 0084+00 0/0 1/1 0/0 .text
- * JPARegistEnv__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPARegistEnv(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPABaseEmitter* emtr = work->mpEmtr;
GXColor env = ptcl->mEnvClr;
@@ -145,8 +122,6 @@ void JPARegistEnv(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
GXSetTevColor(GX_TEVREG1, env);
}
-/* 802771BC-802771E8 271AFC 002C+00 0/0 1/1 0/0 .text JPACalcClrIdxNormal__FP18JPAEmitterWorkData
- */
void JPACalcClrIdxNormal(JPAEmitterWorkData* work) {
JPABaseShape* bsp = work->mpRes->getBsp();
s16 keyFrame;
@@ -158,138 +133,92 @@ void JPACalcClrIdxNormal(JPAEmitterWorkData* work) {
work->mClrKeyFrame = keyFrame;
}
-/* 802771E8-80277210 271B28 0028+00 0/0 1/1 0/0 .text
- * JPACalcClrIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcClrIdxNormal(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
- s16 keyFrame;
- if (param_1->mAge < shape->getClrAnmMaxFrm()) {
- keyFrame = param_1->mAge;
- } else {
- keyFrame = shape->getClrAnmMaxFrm();
- }
- work->mClrKeyFrame = keyFrame;
+ work->mClrKeyFrame = param_1->mAge < shape->getClrAnmMaxFrm() ? param_1->mAge : shape->getClrAnmMaxFrm();
}
-/* 80277210-80277240 271B50 0030+00 0/0 1/1 0/0 .text JPACalcClrIdxRepeat__FP18JPAEmitterWorkData
- */
void JPACalcClrIdxRepeat(JPAEmitterWorkData* work) {
JPABaseShape* shape = work->mpRes->getBsp();
work->mClrKeyFrame = work->mpEmtr->mTick % (shape->getClrAnmMaxFrm() + 1);
}
-/* 80277240-8027727C 271B80 003C+00 0/0 1/1 0/0 .text
- * JPACalcClrIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcClrIdxRepeat(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
- s32 tick = param_1->mAge + shape->getClrLoopOfst(param_1->mAnmRandom);
- work->mClrKeyFrame = tick % (shape->getClrAnmMaxFrm() + 1);
+ s32 r28 = shape->getClrAnmMaxFrm() + 1;
+ work->mClrKeyFrame = (param_1->mAge + shape->getClrLoopOfst(param_1->mAnmRandom)) % r28;
}
-/* 8027727C-802772BC 271BBC 0040+00 0/0 1/1 0/0 .text JPACalcClrIdxReverse__FP18JPAEmitterWorkData
- */
void JPACalcClrIdxReverse(JPAEmitterWorkData* work) {
JPABaseShape* shape = work->mpRes->getBsp();
int maxFrm = shape->getClrAnmMaxFrm();
- u32 tick = work->mpEmtr->mTick;
- u32 uVar1 = tick / maxFrm;
- tick = tick % maxFrm;
- uVar1 &= 1;
- work->mClrKeyFrame = tick + (uVar1) * (maxFrm - tick * 2);
+ u32 div = (work->mpEmtr->mTick / maxFrm) & 1;
+ u32 rem = work->mpEmtr->mTick % maxFrm;
+ work->mClrKeyFrame = rem + (div) * (maxFrm - rem * 2);
}
-/* 802772BC-80277308 271BFC 004C+00 0/0 1/1 0/0 .text
- * JPACalcClrIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcClrIdxReverse(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
- s32 tick = param_1->mAge + shape->getClrLoopOfst(param_1->mAnmRandom);
+ s32 r29 = param_1->mAge + shape->getClrLoopOfst(param_1->mAnmRandom);
s32 maxFrm = shape->getClrAnmMaxFrm();
- s32 rem = tick % maxFrm;
- work->mClrKeyFrame = rem + ((tick / maxFrm) & 1) * (maxFrm - rem * 2);
+ s32 div = (r29 / maxFrm) & 1;
+ s32 rem = r29 % maxFrm;
+ work->mClrKeyFrame = rem + (div) * (maxFrm - rem * 2);
}
-/* 80277308-80277314 271C48 000C+00 0/0 1/1 0/0 .text JPACalcClrIdxMerge__FP18JPAEmitterWorkData
- */
void JPACalcClrIdxMerge(JPAEmitterWorkData* work) {
work->mClrKeyFrame = 0;
}
-/* 80277314-80277384 271C54 0070+00 0/0 1/1 0/0 .text
- * JPACalcClrIdxMerge__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcClrIdxMerge(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
s32 maxFrm = shape->getClrAnmMaxFrm() + 1;
- s32 tick = (s32)(param_1->mTime * maxFrm) + shape->getClrLoopOfst(param_1->mAnmRandom);
- work->mClrKeyFrame = tick % maxFrm;
+ work->mClrKeyFrame = (s32(param_1->mTime * maxFrm) + shape->getClrLoopOfst(param_1->mAnmRandom)) % maxFrm;
}
-/* 80277384-80277390 271CC4 000C+00 0/0 1/1 0/0 .text JPACalcClrIdxRandom__FP18JPAEmitterWorkData
- */
void JPACalcClrIdxRandom(JPAEmitterWorkData* work) {
work->mClrKeyFrame = 0;
}
-/* 80277390-802773C4 271CD0 0034+00 0/0 1/1 0/0 .text
- * JPACalcClrIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcClrIdxRandom(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
- s32 tick = shape->getClrLoopOfst(param_1->mAnmRandom);
- s32 maxFrm = shape->getClrAnmMaxFrm() + 1;
- work->mClrKeyFrame = tick % maxFrm;
+ work->mClrKeyFrame = shape->getClrLoopOfst(param_1->mAnmRandom) % (shape->getClrAnmMaxFrm() + 1);
}
-/* 802773C4-80277404 271D04 0040+00 0/0 1/1 0/0 .text JPACalcPrm__FP18JPAEmitterWorkData
- */
void JPACalcPrm(JPAEmitterWorkData* work) {
work->mpRes->getBsp()->getPrmClr(work->mClrKeyFrame, &work->mpEmtr->mPrmClr);
}
-/* 80277404-80277440 271D44 003C+00 0/0 1/1 0/0 .text
- * JPACalcPrm__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcPrm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
work->mpRes->getBsp()->getPrmClr(work->mClrKeyFrame, &ptcl->mPrmClr);
}
-/* 80277440-80277480 271D80 0040+00 0/0 1/1 0/0 .text JPACalcEnv__FP18JPAEmitterWorkData
- */
void JPACalcEnv(JPAEmitterWorkData* work) {
work->mpRes->getBsp()->getEnvClr(work->mClrKeyFrame, &work->mpEmtr->mEnvClr);
}
-/* 80277480-802774BC 271DC0 003C+00 0/0 1/1 0/0 .text
- * JPACalcEnv__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcEnv(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
work->mpRes->getBsp()->getEnvClr(work->mClrKeyFrame, &ptcl->mEnvClr);
}
-/* 802774BC-80277504 271DFC 0048+00 0/0 1/1 0/0 .text
- * JPACalcColorCopy__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcColorCopy(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPABaseEmitter* emtr = work->mpEmtr;
ptcl->mPrmClr = emtr->mPrmClr;
ptcl->mEnvClr = emtr->mEnvClr;
}
-/* 80277504-8027753C 271E44 0038+00 0/0 1/1 0/0 .text JPAGenTexCrdMtxIdt__FP18JPAEmitterWorkData
- */
void JPAGenTexCrdMtxIdt(JPAEmitterWorkData* param_0) {
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE, GX_PTIDENTITY);
}
-/* 8027753C-80277574 271E7C 0038+00 0/0 1/1 0/0 .text JPAGenTexCrdMtxAnm__FP18JPAEmitterWorkData
- */
void JPAGenTexCrdMtxAnm(JPAEmitterWorkData* param_0) {
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX0, GX_FALSE, GX_PTIDENTITY);
}
-/* 80277574-802775AC 271EB4 0038+00 0/0 1/1 0/0 .text JPAGenTexCrdMtxPrj__FP18JPAEmitterWorkData
- */
void JPAGenTexCrdMtxPrj(JPAEmitterWorkData* param_0) {
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX3x4, GX_TG_POS, GX_TEXMTX0, GX_FALSE, GX_PTIDENTITY);
}
-/* 802775AC-80277758 271EEC 01AC+00 0/0 1/1 0/0 .text
- * JPAGenCalcTexCrdMtxAnm__FP18JPAEmitterWorkData */
void JPAGenCalcTexCrdMtxAnm(JPAEmitterWorkData* work) {
JPABaseShape* shape = work->mpRes->getBsp();
f32 dVar16 = work->mpEmtr->mTick;
@@ -321,8 +250,6 @@ void JPAGenCalcTexCrdMtxAnm(JPAEmitterWorkData* work) {
GXSetTexCoordGen2(GX_TEXCOORD0, GX_TG_MTX2x4, GX_TG_TEX0, 0x1e, false, 0x7d);
}
-/* 80277758-802778EC 272098 0194+00 0/0 1/1 0/0 .text
- * JPALoadCalcTexCrdMtxAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPALoadCalcTexCrdMtxAnm(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
f32 dVar16 = param_1->mAge;
@@ -357,50 +284,33 @@ void fn_8031A8C0(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
work->mpRes->getEts()->fn_8031DE80(work->mpRes->getBsp(), ptcl->getAge());
}
-/* 802778EC-80277940 27222C 0054+00 0/0 1/1 0/0 .text JPALoadTex__FP18JPAEmitterWorkData
- */
void JPALoadTex(JPAEmitterWorkData* work) {
work->mpResMgr->load(work->mpRes->getTexIdx(work->mpRes->getBsp()->getTexIdx()), GX_TEXMAP0);
}
-/* 80277940-80277990 272280 0050+00 0/0 1/1 0/0 .text JPALoadTexAnm__FP18JPAEmitterWorkData */
void JPALoadTexAnm(JPAEmitterWorkData* work) {
work->mpResMgr->load(work->mpRes->getTexIdx(work->mpEmtr->mTexAnmIdx), GX_TEXMAP0);
}
-/* 80277990-802779DC 2722D0 004C+00 0/0 1/1 0/0 .text
- * JPALoadTexAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPALoadTexAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
work->mpResMgr->load(work->mpRes->getTexIdx(ptcl->mTexAnmIdx), GX_TEXMAP0);
}
-/* 802779DC-80277A18 27231C 003C+00 0/0 1/1 0/0 .text JPACalcTexIdxNormal__FP18JPAEmitterWorkData
- */
void JPACalcTexIdxNormal(JPAEmitterWorkData* work) {
JPABaseShape* shape = work->mpRes->getBsp();
- u8 tick = shape->getTexAnmKeyNum() - 1 < work->mpEmtr->mTick
- ? shape->getTexAnmKeyNum() - 1 : work->mpEmtr->mTick;
- work->mpEmtr->mTexAnmIdx = shape->getTexIdx(tick);
+ work->mpEmtr->mTexAnmIdx = shape->getTexIdx(shape->getTexAnmKeyNum() - 1 < work->mpEmtr->mTick ? shape->getTexAnmKeyNum() - 1 : work->mpEmtr->mTick);
}
-/* 80277A18-80277A50 272358 0038+00 0/0 1/1 0/0 .text
- * JPACalcTexIdxNormal__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcTexIdxNormal(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
- u8 tick = shape->getTexAnmKeyNum() - 1 < param_1->mAge
- ? shape->getTexAnmKeyNum() - 1 : param_1->mAge;
- param_1->mTexAnmIdx = shape->getTexIdx(tick);
+ param_1->mTexAnmIdx = shape->getTexIdx(shape->getTexAnmKeyNum() - 1 < param_1->mAge ? shape->getTexAnmKeyNum() - 1 : param_1->mAge);
}
-/* 80277A50-80277A88 272390 0038+00 0/0 1/1 0/0 .text JPACalcTexIdxRepeat__FP18JPAEmitterWorkData
- */
void JPACalcTexIdxRepeat(JPAEmitterWorkData* work) {
JPABaseShape* shape = work->mpRes->getBsp();
work->mpEmtr->mTexAnmIdx = shape->getTexIdx(work->mpEmtr->mTick % shape->getTexAnmKeyNum());
}
-/* 80277A88-80277ACC 2723C8 0044+00 0/0 1/1 0/0 .text
- * JPACalcTexIdxRepeat__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcTexIdxRepeat(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
param_1->mTexAnmIdx = shape->getTexIdx(
@@ -408,75 +318,58 @@ void JPACalcTexIdxRepeat(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
% shape->getTexAnmKeyNum());
}
-/* 80277ACC-80277B1C 27240C 0050+00 0/0 1/1 0/0 .text JPACalcTexIdxReverse__FP18JPAEmitterWorkData
- */
void JPACalcTexIdxReverse(JPAEmitterWorkData* work) {
JPABaseShape* shape = work->mpRes->getBsp();
int tick = work->mpEmtr->mTick;
int keyNum = (int)shape->getTexAnmKeyNum() - 1;
- int div = tick / keyNum;
+ int div = tick / keyNum & 1;
int rem = tick % keyNum;
- work->mpEmtr->mTexAnmIdx = shape->getTexIdx(rem + (div & 1) * (keyNum - rem * 2));
+ work->mpEmtr->mTexAnmIdx = shape->getTexIdx(rem + div * (keyNum - rem * 2));
}
-/* 80277B1C-80277B78 27245C 005C+00 0/0 1/1 0/0 .text
- * JPACalcTexIdxReverse__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcTexIdxReverse(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
s32 tick = shape->getTexLoopOfst(param_1->mAnmRandom) + param_1->mAge;
int keyNum = (int)shape->getTexAnmKeyNum() - 1;
- int div = tick / keyNum;
+ int div = tick / keyNum & 1;
int rem = tick % keyNum;
- param_1->mTexAnmIdx = shape->getTexIdx(rem + (div & 1) * (keyNum - rem * 2));
+ param_1->mTexAnmIdx = shape->getTexIdx(rem + div * (keyNum - rem * 2));
}
-/* 80277B78-80277B94 2724B8 001C+00 0/0 1/1 0/0 .text JPACalcTexIdxMerge__FP18JPAEmitterWorkData
- */
void JPACalcTexIdxMerge(JPAEmitterWorkData* work) {
work->mpEmtr->mTexAnmIdx = work->mpRes->getBsp()->getTexIdx();
}
-/* 80277B94-80277C0C 2724D4 0078+00 0/0 1/1 0/0 .text
- * JPACalcTexIdxMerge__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcTexIdxMerge(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
s32 maxFrm = shape->getTexAnmKeyNum();
- s32 tick = (s32)(maxFrm * param_1->mTime) + shape->getTexLoopOfst(param_1->mAnmRandom);
- param_1->mTexAnmIdx = shape->getTexIdx(tick % maxFrm);
+ param_1->mTexAnmIdx = shape->getTexIdx((s32(maxFrm * param_1->mTime) + shape->getTexLoopOfst(param_1->mAnmRandom)) % maxFrm);
}
-/* 80277C0C-80277C28 27254C 001C+00 0/0 1/1 0/0 .text JPACalcTexIdxRandom__FP18JPAEmitterWorkData
- */
void JPACalcTexIdxRandom(JPAEmitterWorkData* work) {
work->mpEmtr->mTexAnmIdx = work->mpRes->getBsp()->getTexIdx();
}
-/* 80277C28-80277C64 272568 003C+00 0/0 1/1 0/0 .text
- * JPACalcTexIdxRandom__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcTexIdxRandom(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
JPABaseShape* shape = work->mpRes->getBsp();
param_1->mTexAnmIdx = shape->getTexIdx(((int)shape->getTexLoopOfst(param_1->mAnmRandom))
% shape->getTexAnmKeyNum());
}
-/* 80277C64-80277C8C 2725A4 0028+00 0/0 1/1 0/0 .text JPALoadPosMtxCam__FP18JPAEmitterWorkData */
void JPALoadPosMtxCam(JPAEmitterWorkData* work) {
GXLoadPosMtxImm(work->mPosCamMtx, GX_PNMTX0);
}
-/* 80277C8C-80277C90 2725CC 0004+00 1/0 0/0 0/0 .text noLoadPrj__FPC18JPAEmitterWorkDataPA4_Cf */
static void noLoadPrj(JPAEmitterWorkData const* work, const Mtx srt) {
/* empty function */
}
-/* 80277C90-80277CC8 2725D0 0038+00 1/0 0/0 0/0 .text loadPrj__FPC18JPAEmitterWorkDataPA4_Cf */
void loadPrj(JPAEmitterWorkData const* work, const Mtx srt) {
Mtx mtx;
MTXConcat(work->mPrjMtx, srt, mtx);
GXLoadTexMtxImm(mtx, GX_TEXMTX0, GX_MTX3x4);
}
-/* 80277CC8-80277E88 272608 01C0+00 1/0 0/0 0/0 .text loadPrjAnm__FPC18JPAEmitterWorkDataPA4_Cf */
static void loadPrjAnm(JPAEmitterWorkData const* work, const Mtx srt) {
JPABaseShape* shape = work->mpRes->getBsp();
f32 dVar16 = work->mpEmtr->getAge();
@@ -509,13 +402,11 @@ static void loadPrjAnm(JPAEmitterWorkData const* work, const Mtx srt) {
GXLoadTexMtxImm(local_108, 0x1e, GX_MTX3x4);
}
-/* 803C42E0-803C4300 021400 0020+00 10/9 0/0 0/0 .data jpa_dl */
static u8 ALIGN_DECL(32) jpa_dl[32] = {
0x80, 0x00, 0x04, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
-/* 803C4300-803C4320 021420 0020+00 1/0 0/0 0/0 .data jpa_dl_x */
static u8 ALIGN_DECL(32) jpa_dl_x[32] = {
0x80, 0x00, 0x08, 0x00, 0x00, 0x01, 0x01, 0x02, 0x02, 0x03, 0x03, 0x48, 0x00, 0x49, 0x01, 0x4A,
0x02, 0x4B, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -523,176 +414,150 @@ static u8 ALIGN_DECL(32) jpa_dl_x[32] = {
typedef void (*projectionFunc)(JPAEmitterWorkData const*, const Mtx);
-/* 803C4320-803C432C -00001 000C+00 6/10 0/0 0/0 .data p_prj */
static projectionFunc p_prj[3] = {
noLoadPrj,
loadPrj,
loadPrjAnm,
};
-/* 80277E88-80277F70 2727C8 00E8+00 0/0 1/1 0/0 .text
- * JPADrawBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawBillboard(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
- if (param_1->checkStatus(8) == 0) {
- EGG::Vector3f local_48;
- MTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
- Mtx local_38;
- local_38[0][0] = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
- local_38[0][3] = local_48.x;
- local_38[1][1] = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
- local_38[1][3] = local_48.y;
- local_38[2][2] = 1.0f;
- local_38[2][3] = local_48.z;
- local_38[2][1] = 0.0f;
- local_38[2][0] = 0.0f;
- local_38[1][2] = 0.0f;
- local_38[1][0] = 0.0f;
- local_38[0][2] = 0.0f;
- local_38[0][1] = 0.0f;
- GXLoadPosMtxImm(local_38, 0);
- p_prj[work->mPrjType](work, local_38);
- GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
+ if (param_1->checkStatus(JPAPtclStts_Invisible)) {
+ return;
}
+
+ EGG::Vector3f local_48;
+ MTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
+ Mtx local_38;
+ local_38[0][0] = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ local_38[0][3] = local_48.x;
+ local_38[1][1] = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ local_38[1][3] = local_48.y;
+ local_38[2][2] = 1.0f;
+ local_38[2][3] = local_48.z;
+ local_38[0][1] = local_38[0][2] = local_38[1][0] = local_38[1][2] = local_38[2][0] = local_38[2][1] = 0.0f;
+ GXLoadPosMtxImm(local_38, 0);
+ p_prj[work->mPrjType](work, local_38);
+ GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
}
-/* 80277F70-80278088 2728B0 0118+00 0/0 1/1 0/0 .text
- * JPADrawRotBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawRotBillboard(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
- if (param_1->checkStatus(8) == 0) {
- EGG::Vector3f local_48;
- MTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
- f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
- f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
- f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
- f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
-
- Mtx local_38;
- local_38[0][0] = cosRot * particleX;
- local_38[0][1] = -sinRot * particleY;
- local_38[0][3] = local_48.x;
- local_38[1][0] = sinRot * particleX;
- local_38[1][1] = cosRot * particleY;
- local_38[1][3] = local_48.y;
- local_38[2][2] = 1.0f;
- local_38[2][3] = local_48.z;
- local_38[2][1] = 0.0f;
- local_38[2][0] = 0.0f;
- local_38[1][2] = 0.0f;
- local_38[0][2] = 0.0f;
- GXLoadPosMtxImm(local_38, 0);
- p_prj[work->mPrjType](work, local_38);
- GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
+ if (param_1->checkStatus(JPAPtclStts_Invisible)) {
+ return;
}
+
+ EGG::Vector3f local_48;
+ MTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
+ f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
+ f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
+ f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
+
+ Mtx local_38;
+ local_38[0][0] = cosRot * particleX;
+ local_38[0][1] = -sinRot * particleY;
+ local_38[0][3] = local_48.x;
+ local_38[1][0] = sinRot * particleX;
+ local_38[1][1] = cosRot * particleY;
+ local_38[1][3] = local_48.y;
+ local_38[2][2] = 1.0f;
+ local_38[2][3] = local_48.z;
+ local_38[0][2] = local_38[1][2] = local_38[2][0] = local_38[2][1] = 0.0f;
+ GXLoadPosMtxImm(local_38, 0);
+ p_prj[work->mPrjType](work, local_38);
+ GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
}
-/* 80278088-80278184 2729C8 00FC+00 0/0 1/1 0/0 .text
- * JPADrawYBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawYBillboard(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
- if (param_1->checkStatus(8) == 0) {
- EGG::Vector3f local_48;
- MTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
- Mtx local_38;
- f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
- f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
- local_38[0][0] = particleX;
- local_38[0][3] = local_48.x;
- local_38[1][1] = work->mYBBCamMtx[1][1] * particleY;
- local_38[1][2] = work->mYBBCamMtx[1][2];
- local_38[1][3] = local_48.y;
- local_38[2][1] = work->mYBBCamMtx[2][1] * particleY;
- local_38[2][2] = work->mYBBCamMtx[2][2];
- local_38[2][3] = local_48.z;
- local_38[2][0] = 0.0f;
- local_38[1][0] = 0.0f;
- local_38[0][2] = 0.0f;
- local_38[0][1] = 0.0f;
- GXLoadPosMtxImm(local_38, 0);
- p_prj[work->mPrjType](work, local_38);
- GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
+ if (param_1->checkStatus(JPAPtclStts_Invisible)) {
+ return;
}
+
+ EGG::Vector3f local_48;
+ MTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
+ Mtx local_38;
+ f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ local_38[0][0] = particleX;
+ local_38[0][3] = local_48.x;
+ local_38[1][1] = work->mYBBCamMtx[1][1] * particleY;
+ local_38[1][2] = work->mYBBCamMtx[1][2];
+ local_38[1][3] = local_48.y;
+ local_38[2][1] = work->mYBBCamMtx[2][1] * particleY;
+ local_38[2][2] = work->mYBBCamMtx[2][2];
+ local_38[2][3] = local_48.z;
+ local_38[0][1] = local_38[0][2] = local_38[1][0] = local_38[2][0] = 0.0f;
+ GXLoadPosMtxImm(local_38, 0);
+ p_prj[work->mPrjType](work, local_38);
+ GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
}
-/* 80278184-802782B4 272AC4 0130+00 0/0 1/1 0/0 .text
- * JPADrawRotYBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawRotYBillboard(JPAEmitterWorkData* work, JPABaseParticle* param_1) {
- if (param_1->checkStatus(8) == 0) {
- EGG::Vector3f local_48;
- MTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
- f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
- f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
- Mtx local_38;
- f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
- f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
- f32 local_98 = (float)(sinRot * particleX);
- f32 local_94 = (float)(cosRot * particleY);
- f32 local_90 = work->mYBBCamMtx[1][1];
- f32 fVar1 = work->mYBBCamMtx[2][1];
- local_38[0][0] = (float)(cosRot * particleX);
- local_38[0][1] = (float)(-sinRot * particleY);
- local_38[0][2] = 0.0f;
- local_38[0][3] = local_48.x;
- local_38[1][0] = local_98 * local_90;
- local_38[1][1] = local_94 * local_90;
- local_38[1][2] = -fVar1;
- local_38[1][3] = local_48.y;
- local_38[2][0] = local_98 * fVar1;
- local_38[2][1] = local_94 * fVar1;
- local_38[2][2] = local_90;
- local_38[2][3] = local_48.z;
- GXLoadPosMtxImm(local_38, 0);
- p_prj[work->mPrjType](work, local_38);
- GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
+ if (param_1->checkStatus(JPAPtclStts_Invisible)) {
+ return;
}
+
+ EGG::Vector3f local_48;
+ MTXMultVec(work->mPosCamMtx, param_1->mPosition, local_48);
+ f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
+ f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
+ Mtx local_38;
+ f32 particleX = work->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = work->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ f32 local_98 = (float)(sinRot * particleX);
+ f32 local_94 = (float)(cosRot * particleY);
+ f32 local_90 = work->mYBBCamMtx[1][1];
+ f32 fVar1 = work->mYBBCamMtx[2][1];
+ local_38[0][0] = (float)(cosRot * particleX);
+ local_38[0][1] = (float)(-sinRot * particleY);
+ local_38[0][2] = 0.0f;
+ local_38[0][3] = local_48.x;
+ local_38[1][0] = local_98 * local_90;
+ local_38[1][1] = local_94 * local_90;
+ local_38[1][2] = -fVar1;
+ local_38[1][3] = local_48.y;
+ local_38[2][0] = local_98 * fVar1;
+ local_38[2][1] = local_94 * fVar1;
+ local_38[2][2] = local_90;
+ local_38[2][3] = local_48.z;
+ GXLoadPosMtxImm(local_38, 0);
+ p_prj[work->mPrjType](work, local_38);
+ GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
}
-/* 802782B4-802782D0 272BF4 001C+00 1/0 0/0 0/0 .text
- * dirTypeVel__FPC18JPAEmitterWorkDataPC15JPABaseParticlePQ29JGeometry8TVec3<f> */
void dirTypeVel(JPAEmitterWorkData const* work, JPABaseParticle const* param_1,
EGG::Vector3f* param_2) {
- param_1->getVelVec(*param_2);
+ param_1->getVelVec(param_2);
}
-/* 802782D0-802782EC 272C10 001C+00 1/0 0/0 0/0 .text
- * dirTypePos__FPC18JPAEmitterWorkDataPC15JPABaseParticlePQ29JGeometry8TVec3<f> */
void dirTypePos(JPAEmitterWorkData const* work, JPABaseParticle const* param_1,
EGG::Vector3f* param_2) {
- param_1->getLocalPosition(*param_2);
+ param_1->getLocalPosition(param_2);
}
-/* 802782EC-80278320 272C2C 0034+00 1/0 0/0 0/0 .text
- * dirTypePosInv__FPC18JPAEmitterWorkDataPC15JPABaseParticlePQ29JGeometry8TVec3<f> */
void dirTypePosInv(JPAEmitterWorkData const* work, JPABaseParticle const* param_1,
EGG::Vector3f* param_2) {
- param_1->getLocalPosition(*param_2);
+ param_1->getLocalPosition(param_2);
*param_2 = param_2->negated();
}
-/* 80278320-8027833C 272C60 001C+00 1/0 0/0 0/0 .text
- * dirTypeEmtrDir__FPC18JPAEmitterWorkDataPC15JPABaseParticlePQ29JGeometry8TVec3<f> */
void dirTypeEmtrDir(JPAEmitterWorkData const* work, JPABaseParticle const* param_1,
EGG::Vector3f* param_2) {
param_2->set(work->mGlobalEmtrDir);
}
-/* 8027833C-802783D4 272C7C 0098+00 1/0 0/0 0/0 .text
- * dirTypePrevPtcl__FPC18JPAEmitterWorkDataPC15JPABaseParticlePQ29JGeometry8TVec3<f> */
void dirTypePrevPtcl(JPAEmitterWorkData const* work, JPABaseParticle const* param_1,
EGG::Vector3f* param_2) {
EGG::Vector3f aTStack_24;
- param_1->getGlobalPosition(aTStack_24);
- JPANode<JPABaseParticle>* end = work->mpAlivePtcl->getEnd();
- JPANode<JPABaseParticle>* prev = work->mpCurNode->getPrev();
-
- if (end != prev) {
- JPABaseParticle* particle = work->mpCurNode->getPrev()->getObject();
- particle->getGlobalPosition(*param_2);
+ param_1->getGlobalPosition(&aTStack_24);
+
+ if (work->mpCurNode->getPrev() != work->mpAlivePtcl->getEnd()) {
+ work->mpCurNode->getPrev()->getObject()->getGlobalPosition(param_2);
} else {
work->mpEmtr->calcEmitterGlobalPosition(param_2);
}
*param_2 -= aTStack_24;
}
-/* 802783D4-80278414 272D14 0040+00 1/0 0/0 0/0 .text rotTypeY__FffRA3_A4_f */
static void rotTypeY(f32 param_0, f32 param_1, Mtx& param_2) {
param_2[0][0] = param_1;
param_2[0][1] = 0.0f;
@@ -708,7 +573,6 @@ static void rotTypeY(f32 param_0, f32 param_1, Mtx& param_2) {
param_2[2][3] = 0.0f;
}
-/* 80278414-80278454 272D54 0040+00 1/0 0/0 0/0 .text rotTypeX__FffRA3_A4_f */
static void rotTypeX(f32 param_0, f32 param_1, Mtx& param_2) {
param_2[0][0] = 1.0f;
param_2[0][1] = 0.0f;
@@ -724,7 +588,6 @@ static void rotTypeX(f32 param_0, f32 param_1, Mtx& param_2) {
param_2[2][3] = 0.0f;
}
-/* 80278454-80278494 272D94 0040+00 1/0 0/0 0/0 .text rotTypeZ__FffRA3_A4_f */
static void rotTypeZ(f32 param_0, f32 param_1, Mtx& param_2) {
param_2[0][0] = param_1;
param_2[0][1] = -param_0;
@@ -740,7 +603,6 @@ static void rotTypeZ(f32 param_0, f32 param_1, Mtx& param_2) {
param_2[2][3] = 0.0f;
}
-/* 80278494-802784F0 272DD4 005C+00 1/0 0/0 0/0 .text rotTypeXYZ__FffRA3_A4_f */
static void rotTypeXYZ(f32 param_0, f32 param_1, Mtx& param_2) {
f32 f3;
f32 fVar1;
@@ -768,7 +630,6 @@ static void rotTypeXYZ(f32 param_0, f32 param_1, Mtx& param_2) {
param_2[2][3] = 0.0f;
}
-/* 802784F0-8027853C 272E30 004C+00 1/0 0/0 0/0 .text basePlaneTypeXY__FPA4_fff */
static void basePlaneTypeXY(MtxP param_0, f32 param_1, f32 param_2) {
param_0[0][0] *= param_1;
param_0[1][0] *= param_1;
@@ -778,7 +639,6 @@ static void basePlaneTypeXY(MtxP param_0, f32 param_1, f32 param_2) {
param_0[2][1] *= param_2;
}
-/* 8027853C-80278588 272E7C 004C+00 1/0 0/0 0/0 .text basePlaneTypeXZ__FPA4_fff */
static void basePlaneTypeXZ(MtxP param_0, f32 param_1, f32 param_2) {
param_0[0][0] *= param_1;
param_0[1][0] *= param_1;
@@ -788,7 +648,6 @@ static void basePlaneTypeXZ(MtxP param_0, f32 param_1, f32 param_2) {
param_0[2][2] *= param_2;
}
-/* 80278588-802785F8 272EC8 0070+00 1/0 0/0 0/0 .text basePlaneTypeX__FPA4_fff */
static void basePlaneTypeX(MtxP param_0, f32 param_1, f32 param_2) {
param_0[0][0] *= param_1;
param_0[1][0] *= param_1;
@@ -801,7 +660,6 @@ static void basePlaneTypeX(MtxP param_0, f32 param_1, f32 param_2) {
param_0[2][2] *= param_1;
}
-/* 803C432C-803C4340 -00001 0014+00 2/5 0/0 0/0 .data p_direction */
typedef void (*dirTypeFunc)(JPAEmitterWorkData const*, JPABaseParticle const*,
EGG::Vector3f*);
static dirTypeFunc p_direction[5] = {
@@ -809,7 +667,6 @@ static dirTypeFunc p_direction[5] = {
dirTypeEmtrDir, dirTypePrevPtcl,
};
-/* 803C4340-803C4354 -00001 0014+00 0/2 0/0 0/0 .data p_rot */
typedef void (*rotTypeFunc)(f32, f32, Mtx&);
#pragma push
#pragma force_active on
@@ -819,7 +676,6 @@ static rotTypeFunc p_rot[5] = {
};
#pragma pop
-/* 803C4354-803C4360 -00001 000C+00 0/3 0/0 0/0 .data p_plane */
typedef void (*planeFunc)(MtxP, f32, f32);
@@ -829,158 +685,166 @@ static planeFunc p_plane[3] = {
basePlaneTypeX,
};
-/* 804507A0-804507A8 -00001 0008+00 3/3 0/0 0/0 .sdata p_dl */
static u8* p_dl[2] = {
jpa_dl,
jpa_dl_x,
};
-/* 802785F8-80278994 272F38 039C+00 0/0 1/1 0/0 .text
- * JPADrawDirection__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawDirection(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- if (param_1->checkStatus(8) == 0) {
- EGG::Vector3f local_6c;
- EGG::Vector3f local_78;
- p_direction[param_0->mDirType](param_0, param_1, &local_6c);
- if (!local_6c.isZero()) {
- local_6c.normalise();
- local_78 = param_1->mBaseAxis.cross(local_6c);
- if (!local_78.isZero()) {
- local_78.normalise();
- param_1->mBaseAxis = local_6c.cross(local_78);
- param_1->mBaseAxis.normalise();
- Mtx local_60;
- f32 fVar1 = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
- f32 fVar2 = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
- local_60[0][0] = param_1->mBaseAxis.x;
- local_60[0][1] = local_6c.x;
- local_60[0][2] = local_78.x;
- local_60[0][3] = param_1->mPosition.x;
- local_60[1][0] = param_1->mBaseAxis.y;
- local_60[1][1] = local_6c.y;
- local_60[1][2] = local_78.y;
- local_60[1][3] = param_1->mPosition.y;
- local_60[2][0] = param_1->mBaseAxis.z;
- local_60[2][1] = local_6c.z;
- local_60[2][2] = local_78.z;
- local_60[2][3] = param_1->mPosition.z;
- p_plane[param_0->mPlaneType](local_60, fVar1, fVar2);
- MTXConcat(param_0->mPosCamMtx, local_60, local_60);
- GXLoadPosMtxImm(local_60, 0);
- p_prj[param_0->mPrjType](param_0, local_60);
- GXCallDisplayList(p_dl[param_0->mDLType], sizeof(jpa_dl));
- }
- }
+ if (param_1->checkStatus(JPAPtclStts_Invisible)) {
+ return;
}
+
+ EGG::Vector3f local_6c;
+ EGG::Vector3f local_78;
+ p_direction[param_0->mDirType](param_0, param_1, &local_6c);
+
+ if (local_6c.isZero()) {
+ return;
+ }
+
+ local_6c.normalise();
+ local_78 = param_1->mBaseAxis.cross(local_6c);
+
+ if (local_78.isZero()) {
+ return;
+ }
+
+ local_78.normalise();
+ param_1->mBaseAxis = local_6c.cross(local_78);
+ param_1->mBaseAxis.normalise();
+ Mtx local_60;
+ f32 fVar1 = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 fVar2 = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ local_60[0][0] = param_1->mBaseAxis.x;
+ local_60[0][1] = local_6c.x;
+ local_60[0][2] = local_78.x;
+ local_60[0][3] = param_1->mPosition.x;
+ local_60[1][0] = param_1->mBaseAxis.y;
+ local_60[1][1] = local_6c.y;
+ local_60[1][2] = local_78.y;
+ local_60[1][3] = param_1->mPosition.y;
+ local_60[2][0] = param_1->mBaseAxis.z;
+ local_60[2][1] = local_6c.z;
+ local_60[2][2] = local_78.z;
+ local_60[2][3] = param_1->mPosition.z;
+ p_plane[param_0->mPlaneType](local_60, fVar1, fVar2);
+ MTXConcat(param_0->mPosCamMtx, local_60, local_60);
+ GXLoadPosMtxImm(local_60, 0);
+ p_prj[param_0->mPrjType](param_0, local_60);
+ GXCallDisplayList(p_dl[param_0->mDLType], sizeof(jpa_dl));
}
-/* 80278994-80278DA8 2732D4 0414+00 0/0 1/1 0/0 .text
- * JPADrawRotDirection__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawRotDirection(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- if (param_1->checkStatus(8) == 0) {
- f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
- f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
- EGG::Vector3f local_6c;
- EGG::Vector3f local_78;
- p_direction[param_0->mDirType](param_0, param_1, &local_6c);
- if (!local_6c.isZero()) {
- local_6c.normalise();
- local_78 = param_1->mBaseAxis.cross(local_6c);
- if (!local_78.isZero()) {
- local_78.normalise();
- param_1->mBaseAxis = local_6c.cross(local_78);
- param_1->mBaseAxis.normalise();
- f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
- f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
- Mtx auStack_80;
- Mtx local_60;
- p_rot[param_0->mRotType](sinRot, cosRot, auStack_80);
- p_plane[param_0->mPlaneType](auStack_80, particleX, particleY);
- local_60[0][0] = param_1->mBaseAxis.x;
- local_60[0][1] = local_6c.x;
- local_60[0][2] = local_78.x;
- local_60[0][3] = param_1->mPosition.x;
- local_60[1][0] = param_1->mBaseAxis.y;
- local_60[1][1] = local_6c.y;
- local_60[1][2] = local_78.y;
- local_60[1][3] = param_1->mPosition.y;
- local_60[2][0] = param_1->mBaseAxis.z;
- local_60[2][1] = local_6c.z;
- local_60[2][2] = local_78.z;
- local_60[2][3] = param_1->mPosition.z;
- MTXConcat(local_60, auStack_80, auStack_80);
- MTXConcat(param_0->mPosCamMtx, auStack_80, local_60);
- GXLoadPosMtxImm(local_60, 0);
- p_prj[param_0->mPrjType](param_0, local_60);
- GXCallDisplayList(p_dl[param_0->mDLType], sizeof(jpa_dl));
- }
- }
+ if (param_1->checkStatus(JPAPtclStts_Invisible)) {
+ return;
+ }
+
+ f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
+ f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
+ EGG::Vector3f local_6c;
+ EGG::Vector3f local_78;
+ p_direction[param_0->mDirType](param_0, param_1, &local_6c);
+
+ if (local_6c.isZero()) {
+ return;
}
+
+ local_6c.normalise();
+ local_78 = param_1->mBaseAxis.cross(local_6c);
+
+ if (local_78.isZero()) {
+ return;
+ }
+
+ local_78.normalise();
+ param_1->mBaseAxis = local_6c.cross(local_78);
+ param_1->mBaseAxis.normalise();
+ f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ Mtx auStack_80;
+ Mtx local_60;
+ p_rot[param_0->mRotType](sinRot, cosRot, auStack_80);
+ p_plane[param_0->mPlaneType](auStack_80, particleX, particleY);
+ local_60[0][0] = param_1->mBaseAxis.x;
+ local_60[0][1] = local_6c.x;
+ local_60[0][2] = local_78.x;
+ local_60[0][3] = param_1->mPosition.x;
+ local_60[1][0] = param_1->mBaseAxis.y;
+ local_60[1][1] = local_6c.y;
+ local_60[1][2] = local_78.y;
+ local_60[1][3] = param_1->mPosition.y;
+ local_60[2][0] = param_1->mBaseAxis.z;
+ local_60[2][1] = local_6c.z;
+ local_60[2][2] = local_78.z;
+ local_60[2][3] = param_1->mPosition.z;
+ MTXConcat(local_60, auStack_80, auStack_80);
+ MTXConcat(param_0->mPosCamMtx, auStack_80, local_60);
+ GXLoadPosMtxImm(local_60, 0);
+ p_prj[param_0->mPrjType](param_0, local_60);
+ GXCallDisplayList(p_dl[param_0->mDLType], sizeof(jpa_dl));
}
-/* 80278DA8-80278FC8 2736E8 0220+00 0/0 1/1 0/0 .text
- * JPADrawDBillboard__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawDBillboard(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- if (param_1->checkStatus(8) == 0) {
- EGG::Vector3f local_70;
- p_direction[param_0->mDirType](param_0, param_1, &local_70);
- EGG::Vector3f aTStack_7c;
- aTStack_7c.set(param_0->mPosCamMtx[2][0], param_0->mPosCamMtx[2][1],
- param_0->mPosCamMtx[2][2]);
- local_70 = local_70.cross(aTStack_7c);
- if (!local_70.isZero()) {
- local_70.normalise();
- MTXMultVecSR(param_0->mPosCamMtx, local_70, local_70);
- EGG::Vector3f local_88;
- MTXMultVec(param_0->mPosCamMtx, param_1->mPosition, local_88);
- f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
- f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
- Mtx local_60;
- local_60[0][0] = local_70.x * particleX;
- local_60[0][1] = -local_70.y * particleY;
- local_60[0][3] = local_88.x;
- local_60[1][0] = local_70.y * particleX;
- local_60[1][1] = local_70.x * particleY;
- local_60[1][3] = local_88.y;
- local_60[2][2] = 1.0f;
- local_60[2][3] = local_88.z;
- local_60[2][1] = 0.0f;
- local_60[2][0] = 0.0f;
- local_60[1][2] = 0.0f;
- local_60[0][2] = 0.0f;
- GXLoadPosMtxImm(local_60, 0);
- p_prj[param_0->mPrjType](param_0, local_60);
- GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
- }
+ if (param_1->checkStatus(JPAPtclStts_Invisible)) {
+ return;
+ }
+
+ EGG::Vector3f local_70;
+ p_direction[param_0->mDirType](param_0, param_1, &local_70);
+ EGG::Vector3f aTStack_7c(param_0->mPosCamMtx[2][0], param_0->mPosCamMtx[2][1], param_0->mPosCamMtx[2][2]);
+ local_70 = local_70.cross(aTStack_7c);
+
+ if (local_70.isZero()) {
+ return;
}
+
+ local_70.normalise();
+ MTXMultVecSR(param_0->mPosCamMtx, local_70, local_70);
+ EGG::Vector3f local_88;
+ MTXMultVec(param_0->mPosCamMtx, param_1->mPosition, local_88);
+ f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ Mtx local_60;
+ local_60[0][0] = local_70.x * particleX;
+ local_60[0][1] = -local_70.y * particleY;
+ local_60[0][3] = local_88.x;
+ local_60[1][0] = local_70.y * particleX;
+ local_60[1][1] = local_70.x * particleY;
+ local_60[1][3] = local_88.y;
+ local_60[2][2] = 1.0f;
+ local_60[2][3] = local_88.z;
+ local_60[0][2] = local_60[1][2] = local_60[2][0] = local_60[2][1] = 0.0f;
+ GXLoadPosMtxImm(local_60, 0);
+ p_prj[param_0->mPrjType](param_0, local_60);
+ GXCallDisplayList(jpa_dl, sizeof(jpa_dl));
}
-/* 80278FC8-80279110 273908 0148+00 0/0 1/1 0/0 .text
- * JPADrawRotation__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawRotation(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- if (param_1->checkStatus(8) == 0) {
- f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
- f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
- f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
- f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
- Mtx auStack_88;
- p_rot[param_0->mRotType](sinRot, cosRot, auStack_88);
- p_plane[param_0->mPlaneType](auStack_88, particleX, particleY);
- auStack_88[0][3] = param_1->mPosition.x;
- auStack_88[1][3] = param_1->mPosition.y;
- auStack_88[2][3] = param_1->mPosition.z;
- MTXConcat(param_0->mPosCamMtx, auStack_88, auStack_88);
- GXLoadPosMtxImm(auStack_88, 0);
- p_prj[param_0->mPrjType](param_0, auStack_88);
- GXCallDisplayList(p_dl[param_0->mDLType], sizeof(jpa_dl));
+ if (param_1->checkStatus(JPAPtclStts_Invisible)) {
+ return;
}
+
+ f32 sinRot = nw4r::math::SinIdx((s16)param_1->mRotateAngle);
+ f32 cosRot = nw4r::math::CosIdx((s16)param_1->mRotateAngle);
+ f32 particleX = param_0->mGlobalPtclScl.x * param_1->mParticleScaleX;
+ f32 particleY = param_0->mGlobalPtclScl.y * param_1->mParticleScaleY;
+ Mtx auStack_88;
+ p_rot[param_0->mRotType](sinRot, cosRot, auStack_88);
+ p_plane[param_0->mPlaneType](auStack_88, particleX, particleY);
+ auStack_88[0][3] = param_1->mPosition.x;
+ auStack_88[1][3] = param_1->mPosition.y;
+ auStack_88[2][3] = param_1->mPosition.z;
+ MTXConcat(param_0->mPosCamMtx, auStack_88, auStack_88);
+ GXLoadPosMtxImm(auStack_88, 0);
+ p_prj[param_0->mPrjType](param_0, auStack_88);
+ GXCallDisplayList(p_dl[param_0->mDLType], sizeof(jpa_dl));
}
-/* 80279110-802791B0 273A50 00A0+00 0/0 1/1 0/0 .text
- * JPADrawPoint__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawPoint(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
- if (!!(ptcl->mStatus & JPAPtclStts_Invisible))
+ if (ptcl->checkStatus(JPAPtclStts_Invisible)) {
return;
+ }
GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
@@ -992,36 +856,37 @@ void JPADrawPoint(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
}
-/* 802791B0-80279364 273AF0 01B4+00 0/0 1/1 0/0 .text
- * JPADrawLine__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawLine(JPAEmitterWorkData* param_0, JPABaseParticle* param_1) {
- if (param_1->checkStatus(8) == 0) {
- EGG::Vector3f local_1c = param_1->mPosition;
- EGG::Vector3f local_28;
- param_1->getVelVec(local_28);
- if (!local_28.isZero()) {
- local_28.setLength(param_0->mGlobalPtclScl.y * (25.0f * param_1->mParticleScaleY));
- local_28 = local_1c - local_28;
- GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
- GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
- GXBegin(GX_LINES, GX_VTXFMT1, 2);
- GXPosition3f32(local_1c.x, local_1c.y, local_1c.z);
- GXTexCoord2f32(0.0f, 0.0f);
- GXPosition3f32(local_28.x, local_28.y, local_28.z);
- GXTexCoord2f32(0.0f, 1.0f);
- GXEnd();
- GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
- GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
- }
+ if (param_1->checkStatus(JPAPtclStts_Invisible)) {
+ return;
}
+
+ EGG::Vector3f local_1c(param_1->mPosition);
+ EGG::Vector3f local_28;
+ param_1->getVelVec(&local_28);
+
+ if (local_28.isZero()) {
+ return;
+ }
+
+ local_28.setLength(param_0->mGlobalPtclScl.y * (25.0f * param_1->mParticleScaleY));
+ local_28 = local_1c - local_28;
+ GXSetVtxDesc(GX_VA_POS, GX_DIRECT);
+ GXSetVtxDesc(GX_VA_TEX0, GX_DIRECT);
+ GXBegin(GX_LINES, GX_VTXFMT1, 2);
+ GXPosition3f32(local_1c.x, local_1c.y, local_1c.z);
+ GXTexCoord2f32(0.0f, 0.0f);
+ GXPosition3f32(local_28.x, local_28.y, local_28.z);
+ GXTexCoord2f32(0.0f, 1.0f);
+ GXEnd();
+ GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
+ GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
}
-/* 80279364-8027936C 273CA4 0008+00 2/2 0/0 0/0 .text getNext__FP26JPANode<15JPABaseParticle> */
JPANode<JPABaseParticle>* getNext(JPANode<JPABaseParticle>* param_0) {
return param_0->getNext();
}
-/* 8027936C-80279374 273CAC 0008+00 2/2 0/0 0/0 .text getPrev__FP26JPANode<15JPABaseParticle> */
JPANode<JPABaseParticle>* getPrev(JPANode<JPABaseParticle>* param_0) {
return param_0->getPrev();
}
@@ -1032,7 +897,6 @@ void fn_8031C2C0(JPAEmitterWorkData* work) {
work->mpRes->getEts()->fn_8031DE80(work->mpRes->getBsp(), work->mpEmtr->getAge());
}
-/* 80279374-8027996C 273CB4 05F8+00 0/0 1/1 0/0 .text JPADrawStripe__FP18JPAEmitterWorkData */
void JPADrawStripe(JPAEmitterWorkData* param_0) {
JPABaseShape* shape = param_0->mpRes->getBsp();
u32 ptcl_num = param_0->mpAlivePtcl->getNum();
@@ -1051,8 +915,8 @@ void JPADrawStripe(JPAEmitterWorkData* param_0) {
EGG::Vector3f local_e0[2];
EGG::Vector3f local_f8;
EGG::Vector3f local_104;
- getNodeFunc node_func;
- JPANode<JPABaseParticle>* startNode;
+ JPANode<JPABaseParticle>* startNode = NULL;
+ getNodeFunc node_func = NULL;
if (shape->isDrawFwdAhead()) {
startNode = param_0->mpAlivePtcl->getLast();
node_func = getPrev;
@@ -1119,7 +983,6 @@ void JPADrawStripe(JPAEmitterWorkData* param_0) {
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
}
-/* 8027996C-8027A3D8 2742AC 0A6C+00 0/0 1/1 0/0 .text JPADrawStripeX__FP18JPAEmitterWorkData */
void JPADrawStripeX(JPAEmitterWorkData* param_0) {
JPABaseShape* shape = param_0->mpRes->getBsp();
u32 ptcl_num = param_0->mpAlivePtcl->getNum();
@@ -1141,8 +1004,8 @@ void JPADrawStripeX(JPAEmitterWorkData* param_0) {
EGG::Vector3f local_a8[2];
EGG::Vector3f local_c0;
EGG::Vector3f local_cc;
- JPANode<JPABaseParticle>* startNode;
- getNodeFunc node_func;
+ JPANode<JPABaseParticle>* startNode = NULL;
+ getNodeFunc node_func = NULL;
if (shape->isDrawFwdAhead()) {
startNode = param_0->mpAlivePtcl->getLast();
node_func = getPrev;
@@ -1259,26 +1122,24 @@ void JPADrawStripeX(JPAEmitterWorkData* param_0) {
GXSetVtxDesc(GX_VA_TEX0, GX_INDEX8);
}
-/* 8027A3D8-8027A414 274D18 003C+00 0/0 1/1 0/0 .text
- * JPADrawEmitterCallBackB__FP18JPAEmitterWorkData */
void JPADrawEmitterCallBackB(JPAEmitterWorkData* work) {
- if (work->mpEmtr->mpEmtrCallBack == NULL)
+ JPABaseEmitter* emtr = work->mpEmtr;
+ if (emtr->mpEmtrCallBack == NULL) {
return;
+ }
- work->mpEmtr->mpEmtrCallBack->draw(work->mpEmtr);
+ emtr->mpEmtrCallBack->draw(emtr);
}
-/* 8027A414-8027A454 274D54 0040+00 0/0 1/1 0/0 .text
- * JPADrawParticleCallBack__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPADrawParticleCallBack(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
- if (work->mpEmtr->mpPtclCallBack == NULL)
+ JPABaseEmitter* emtr = work->mpEmtr;
+ if (emtr->mpPtclCallBack == NULL) {
return;
+ }
- work->mpEmtr->mpPtclCallBack->draw(work->mpEmtr, ptcl);
+ emtr->mpPtclCallBack->draw(emtr, ptcl);
}
-/* 8027A454-8027A6DC 274D94 0288+00 1/1 0/0 0/0 .text
- * makeColorTable__FPP8_GXColorPC16JPAClrAnmKeyDataUcsP7JKRHeap */
static void makeColorTable(GXColor** o_color_table, JPAClrAnmKeyData const* i_data, u8 param_2,
s16 i_size, EGG::Heap* i_heap) {
// The TP code didn't match, the MKDD version helps here
@@ -1331,42 +1192,6 @@ static void makeColorTable(GXColor** o_color_table, JPAClrAnmKeyData const* i_da
*o_color_table = color_table;
}
-/* 8027A6DC-8027A7E8 27501C 010C+00 0/0 1/1 0/0 .text __ct__12JPABaseShapeFPCUcP7JKRHeap
- */
-JPABaseShape::JPABaseShape(u8 const* pData, EGG::Heap* pHeap) {
- mpData = (const JPABaseShapeData*)pData;
-
- if (isTexCrdAnm()) {
- mpTexCrdMtxAnmTbl = (const void*)(pData + sizeof(JPABaseShapeData));
- } else {
- mpTexCrdMtxAnmTbl = NULL;
- }
-
- if (isTexAnm()) {
- u32 offs = sizeof(JPABaseShapeData);
- if (isTexCrdAnm())
- offs = sizeof(JPABaseShapeData) + 0x28;
- mpTexIdxAnimTbl = (const u8*)(pData + offs);
- } else {
- mpTexIdxAnimTbl = NULL;
- }
-
- if (isPrmAnm()) {
- makeColorTable(&mpPrmClrAnmTbl, (JPAClrAnmKeyData*)(pData + mpData->mClrPrmAnmOffset),
- mpData->mClrPrmKeyNum, mpData->mClrAnmFrmMax, pHeap);
- } else {
- mpPrmClrAnmTbl = NULL;
- }
-
- if (isEnvAnm()) {
- makeColorTable(&mpEnvClrAnmTbl, (JPAClrAnmKeyData*)(pData + mpData->mClrEnvAnmOffset),
- mpData->mClrEnvKeyNum, mpData->mClrAnmFrmMax, pHeap);
- } else {
- mpEnvClrAnmTbl = NULL;
- }
-}
-
-/* 803C4360-803C436C 021480 000C+00 0/1 0/0 0/0 .data st_bm__12JPABaseShape */
GXBlendMode JPABaseShape::st_bm[4] = {
GX_BM_NONE,
GX_BM_BLEND,
@@ -1374,26 +1199,22 @@ GXBlendMode JPABaseShape::st_bm[4] = {
GX_BM_SUBTRACT,
};
-/* 803C436C-803C4394 02148C 0028+00 0/1 0/0 0/0 .data st_bf__12JPABaseShape */
GXBlendFactor JPABaseShape::st_bf[10] = {
GX_BL_ZERO, GX_BL_ONE, GX_BL_SRCCLR, GX_BL_INVSRCCLR,
- GX_BL_SRCCLR, GX_BL_INVSRCCLR, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA,
+ GX_BL_DSTCLR, GX_BL_INVDSTCLR, GX_BL_SRCALPHA, GX_BL_INVSRCALPHA,
GX_BL_DSTALPHA, GX_BL_INVDSTALPHA,
};
-/* 803C4394-803C43D4 0214B4 0040+00 0/1 0/0 0/0 .data st_lo__12JPABaseShape */
GXLogicOp JPABaseShape::st_lo[16] = {
GX_LO_CLEAR, GX_LO_SET, GX_LO_COPY, GX_LO_INVCOPY, GX_LO_NOOP, GX_LO_INV,
GX_LO_AND, GX_LO_NAND, GX_LO_OR, GX_LO_NOR, GX_LO_XOR, GX_LO_EQUIV,
GX_LO_REVAND, GX_LO_INVAND, GX_LO_REVOR, GX_LO_INVOR,
};
-/* 803C43D4-803C43F4 0214F4 0020+00 0/1 0/0 0/0 .data st_c__12JPABaseShape */
GXCompare JPABaseShape::st_c[8] = {
GX_NEVER, GX_LESS, GX_LEQUAL, GX_EQUAL, GX_NEQUAL, GX_GEQUAL, GX_GREATER, GX_ALWAYS,
};
-/* 803C43F4-803C4404 021514 0010+00 0/1 0/0 0/0 .data st_ao__12JPABaseShape */
GXAlphaOp JPABaseShape::st_ao[4] = {
GX_AOP_AND,
GX_AOP_OR,
@@ -1401,7 +1222,6 @@ GXAlphaOp JPABaseShape::st_ao[4] = {
GX_AOP_XNOR,
};
-/* 803C4404-803C4464 021524 0060+00 0/1 0/0 0/0 .data st_ca__12JPABaseShape */
GXTevColorArg JPABaseShape::st_ca[6][4] = {
{
GX_CC_ZERO,
@@ -1441,7 +1261,6 @@ GXTevColorArg JPABaseShape::st_ca[6][4] = {
},
};
-/* 803C4464-803C4488 021584 0020+04 0/1 0/0 0/0 .data st_aa__12JPABaseShape */
JPABaseShapeAlphaArg JPABaseShape::st_aa[5] = {
{
GX_CA_ZERO,
@@ -1484,9 +1303,45 @@ JPABaseShapeAlphaArg JPABaseShape::st_aa[5] = {
GX_CS_SCALE_2,
},
};
+JPABaseShape::JPABaseShape(u8 const* pData, EGG::Heap* pHeap) {
+ pBsd = (const JPABaseShapeData*)pData;
+
+ if (isTexCrdAnm()) {
+ mpTexCrdMtxAnmTbl = (const void*)(pData + sizeof(JPABaseShapeData));
+ } else {
+ mpTexCrdMtxAnmTbl = NULL;
+ }
+
+ if (isTexAnm()) {
+ JUT_ASSERT(1698, pBsd->texAnmKeyNum != 0);
+ u32 offs = sizeof(JPABaseShapeData);
+ if (isTexCrdAnm()) {
+ offs += 0x28;
+ }
+ mpTexIdxAnimTbl = (const u8*)(pData + offs);
+ } else {
+ mpTexIdxAnimTbl = NULL;
+ }
+
+ if (isPrmAnm()) {
+ JUT_ASSERT(1707, pBsd->prmAnmKeyNum != 0);
+ JPAClrAnmKeyData* anmKeyData = (JPAClrAnmKeyData*)(pData + pBsd->mClrPrmAnmOffset);
+ makeColorTable(&mpPrmClrAnmTbl, anmKeyData,
+ pBsd->prmAnmKeyNum, pBsd->mClrAnmFrmMax, pHeap);
+ } else {
+ mpPrmClrAnmTbl = NULL;
+ }
+
+ if (isEnvAnm()) {
+ JUT_ASSERT(1716, pBsd->envAnmKeyNum != 0);
+ JPAClrAnmKeyData* anmKeyData = (JPAClrAnmKeyData*)(pData + pBsd->mClrEnvAnmOffset);
+ makeColorTable(&mpEnvClrAnmTbl, anmKeyData,
+ pBsd->envAnmKeyNum, pBsd->mClrAnmFrmMax, pHeap);
+ } else {
+ mpEnvClrAnmTbl = NULL;
+ }
+}
-/* 8027A7E8-8027A918 275128 0130+00 0/0 1/1 0/0 .text setGX__12JPABaseShapeCFP18JPAEmitterWorkData
- */
void JPABaseShape::setGX(JPAEmitterWorkData* work) const {
const GXTevColorArg* colorArg = getTevColorArg();
const JPABaseShapeAlphaArg* alphaArg = getTevAlphaArg();
diff --git a/src/JSystem/JParticle/JPAChildShape.cpp b/src/JSystem/JParticle/JPAChildShape.cpp
index 979b5df2..c970dc51 100644
--- a/src/JSystem/JParticle/JPAChildShape.cpp
+++ b/src/JSystem/JParticle/JPAChildShape.cpp
@@ -1,8 +1,3 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAChildShape
-//
-
#include "JSystem/JParticle/JPAChildShape.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
@@ -15,8 +10,6 @@ void fn_8031DBA0(JPAEmitterWorkData* work) {
}
}
-/* 8027AEBC-8027AFDC 2757FC 0120+00 0/0 1/1 0/0 .text JPARegistChildPrmEnv__FP18JPAEmitterWorkData
- */
void JPARegistChildPrmEnv(JPAEmitterWorkData* work) {
JPAChildShape* csp = work->mpRes->getCsp();
JPABaseEmitter* emtr = work->mpEmtr;
@@ -34,21 +27,16 @@ void JPARegistChildPrmEnv(JPAEmitterWorkData* work) {
GXSetTevColor(GX_TEVREG1, env);
}
-/* 8027AFDC-8027B008 27591C 002C+00 0/0 1/1 0/0 .text
- * JPACalcChildAlphaOut__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcChildAlphaOut(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
f32 anm = (1.0f - ptcl->mTime) * 255.0f;
OSf32tou8(&anm, &ptcl->mPrmColorAlphaAnm);
}
-/* 8027B008-8027B038 275948 0030+00 0/0 1/1 0/0 .text
- * JPACalcChildScaleOut__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcChildScaleOut(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
ptcl->mParticleScaleX = ptcl->mScaleOut * (1.0f - ptcl->mTime);
ptcl->mParticleScaleY = ptcl->mAlphaWaveRandom * (1.0f - ptcl->mTime);
}
-/* 8027B038-8027B040 -00001 0008+00 0/0 0/0 0/0 .text __ct__13JPAChildShapeFPCUc */
JPAChildShape::JPAChildShape(u8 const* pData) {
mpData = (JPAChildShapeData*)pData;
}
diff --git a/src/JSystem/JParticle/JPADynamicsBlock.cpp b/src/JSystem/JParticle/JPADynamicsBlock.cpp
index a037be31..4804cd6d 100644
--- a/src/JSystem/JParticle/JPADynamicsBlock.cpp
+++ b/src/JSystem/JParticle/JPADynamicsBlock.cpp
@@ -1,14 +1,8 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPADynamicsBlock
-//
-
#include "JSystem/JParticle/JPADynamicsBlock.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "nw4r/math/math_triangular.h"
-/* 8027B144-8027B220 275A84 00DC+00 1/1 0/0 0/0 .text JPAVolumePoint__FP18JPAEmitterWorkData */
void JPAVolumePoint(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVolumePos.setZero();
work->mVolumeCalcData.mVelOmni.set(work->mpEmtr->get_r_zh(), work->mpEmtr->get_r_zh(),
@@ -17,7 +11,6 @@ void JPAVolumePoint(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVelOmni.z);
}
-/* 8027B220-8027B33C 275B60 011C+00 1/1 0/0 0/0 .text JPAVolumeLine */
void JPAVolumeLine(JPAEmitterWorkData* work) {
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
work->mVolumeCalcData.mVolumePos.set(
@@ -34,7 +27,6 @@ void JPAVolumeLine(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVelAxis.set(0.0f, 0.0f, work->mVolumeCalcData.mVolumePos.z);
}
-/* 8027B33C-8027B4E8 275C7C 01AC+00 1/1 0/0 0/0 .text JPAVolumeCircle */
// NONMATCHING regalloc. Could be issue with mul asm implementations
void JPAVolumeCircle(JPAEmitterWorkData* work) {
s16 theta;
@@ -56,29 +48,25 @@ void JPAVolumeCircle(JPAEmitterWorkData* work) {
distance = work->mVolumeSize * (work->mVolumeMinRad + distance * (1.0f - work->mVolumeMinRad));
work->mVolumeCalcData.mVolumePos.set(distance * nw4r::math::SinIdx(theta), 0.0f,
distance * nw4r::math::CosIdx(theta));
- work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos;
- work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
+ work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f,
work->mVolumeCalcData.mVolumePos.z);
}
-/* 8027B4E8-8027B5F0 275E28 0108+00 1/1 0/0 0/0 .text JPAVolumeCube */
void JPAVolumeCube(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVolumePos.set(work->mpEmtr->get_r_zh() * work->mVolumeSize,
work->mpEmtr->get_r_zh() * work->mVolumeSize,
work->mpEmtr->get_r_zh() * work->mVolumeSize);
- work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos;
- work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
+ work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f, work->mVolumeCalcData.mVolumePos.z);
}
-/* 8027B5F0-8027B87C 275F30 028C+00 1/1 0/0 0/0 .text JPAVolumeSphere__FP18JPAEmitterWorkData */
static void JPAVolumeSphere(JPAEmitterWorkData* work) {
- s16 phi, theta;
+ s16 phi, r28;
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
- phi = (u16)(work->mVolumeX * 0x8000 / (work->mDivNumber - 1) + 0x4000);
- f32 tmp = (u16)(work->mVolumeAngleNum * 0x10000 / (work->mVolumeAngleMax - 1));
- theta = tmp * work->mVolumeSweep + 0x8000;
+ phi = u16(work->mVolumeX * 0x8000 / (work->mDivNumber - 1) + 0x4000);
+ u16 r26 = u16(work->mVolumeAngleNum * 0x10000 / (work->mVolumeAngleMax - 1));
+ r28 = f32(r26) * work->mVolumeSweep + 0x8000;
work->mVolumeAngleNum++;
if (work->mVolumeAngleNum == work->mVolumeAngleMax) {
work->mVolumeAngleNum = 0;
@@ -92,16 +80,16 @@ static void JPAVolumeSphere(JPAEmitterWorkData* work) {
}
} else {
phi = work->mpEmtr->get_r_ss() >> 1;
- theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
+ r28 = work->mVolumeSweep * work->mpEmtr->get_r_ss();
}
- f32 rnd = work->mpEmtr->get_r_f();
+ f32 f31 = work->mpEmtr->get_r_f();
if (work->mpEmtr->checkFlag(JPADynFlag_FixedDensity)) {
- rnd = 1.0f - rnd * rnd * rnd;
+ f31 = 1.0f - f31 * f31 * f31;
}
- f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad));
- work->mVolumeCalcData.mVolumePos.set(rad * nw4r::math::CosIdx(phi) * nw4r::math::SinIdx(theta), -rad * nw4r::math::SinIdx(phi),
- rad * nw4r::math::CosIdx(phi) * nw4r::math::CosIdx(theta));
+ f31 = work->mVolumeSize * (work->mVolumeMinRad + f31 * (1.0f - work->mVolumeMinRad));
+ work->mVolumeCalcData.mVolumePos.set(f31 * nw4r::math::CosIdx(phi) * nw4r::math::SinIdx(r28), -f31 * nw4r::math::SinIdx(phi),
+ f31 * nw4r::math::CosIdx(phi) * nw4r::math::CosIdx(r28));
work->mVolumeCalcData.mVelOmni.set(
work->mVolumeCalcData.mVolumePos.x * work->mGlobalScl.x,
work->mVolumeCalcData.mVolumePos.y * work->mGlobalScl.y, work->mVolumeCalcData.mVolumePos.z * work->mGlobalScl.z
@@ -110,16 +98,15 @@ static void JPAVolumeSphere(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVolumePos.z);
}
-/* 8027B87C-8027B9F8 2761BC 017C+00 1/1 0/0 0/0 .text JPAVolumeCylinder__FP18JPAEmitterWorkData */
static void JPAVolumeCylinder(JPAEmitterWorkData* work) {
- s16 theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
- f32 rnd = work->mpEmtr->get_r_f();
+ s16 r30 = work->mVolumeSweep * work->mpEmtr->get_r_ss();
+ f32 f31 = work->mpEmtr->get_r_f();
if (work->mpEmtr->checkFlag(JPADynFlag_FixedDensity)) {
- rnd = 1.0f - rnd * rnd;
+ f31 = 1.0f - f31 * f31;
}
- f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad));
+ f31 = work->mVolumeSize * (work->mVolumeMinRad + f31 * (1.0f - work->mVolumeMinRad));
work->mVolumeCalcData.mVolumePos.set(
- rad * nw4r::math::SinIdx(theta), work->mVolumeSize * work->mpEmtr->get_r_zp(), rad * nw4r::math::CosIdx(theta));
+ f31 * nw4r::math::SinIdx(r30), work->mVolumeSize * work->mpEmtr->get_r_zp(), f31 * nw4r::math::CosIdx(r30));
work->mVolumeCalcData.mVelOmni.set(
work->mVolumeCalcData.mVolumePos.x * work->mGlobalScl.x,
work->mVolumeCalcData.mVolumePos.y * work->mGlobalScl.y, work->mVolumeCalcData.mVolumePos.z * work->mGlobalScl.z
@@ -128,7 +115,6 @@ static void JPAVolumeCylinder(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVolumePos.z);
}
-/* 8027B9F8-8027BB18 276338 0120+00 1/1 0/0 0/0 .text JPAVolumeTorus__FP18JPAEmitterWorkData */
static void JPAVolumeTorus(JPAEmitterWorkData* work) {
s16 theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
s16 phi = work->mpEmtr->get_r_ss();
@@ -145,7 +131,6 @@ static void JPAVolumeTorus(JPAEmitterWorkData* work) {
);
}
-/* 8027BB18-8027BB4C 276458 0034+00 0/0 1/1 0/0 .text __ct__16JPADynamicsBlockFPCUc */
JPADynamicsBlock::JPADynamicsBlock(u8 const* data) {
mpData = (const JPADynamicsBlockData*)data;
init();
@@ -161,7 +146,6 @@ enum {
VOL_Line = 0x06,
};
-/* 8027BB4C-8027BBE8 27648C 009C+00 2/1 0/0 0/0 .text init__16JPADynamicsBlockFv */
void JPADynamicsBlock::init() {
switch (getVolumeType()) {
case VOL_Cube:
@@ -188,30 +172,18 @@ void JPADynamicsBlock::init() {
}
}
-/* 8027BBE8-8027BDEC 276528 0204+00 0/0 1/1 0/0 .text
- * create__16JPADynamicsBlockFP18JPAEmitterWorkData */
void JPADynamicsBlock::create(JPAEmitterWorkData* work) {
if (work->mpEmtr->checkStatus(JPAEmtrStts_RateStepEmit)) {
- s32 emitCount;
- s32 createCount;
+ s32 emitCount = 0;
- // Probably an inlined function.
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
- s32 count;
- if (getVolumeType() == VOL_Sphere) {
- count = 4 * getDivNumber() * getDivNumber() + 2;
- } else {
- count = getDivNumber();
- }
- emitCount = count;
+ emitCount = getVolumeType() == VOL_Sphere ? 4 * getDivNumber() * getDivNumber() + 2 : getDivNumber();
work->mVolumeEmitIdx = 0;
} else {
f32 newPtclCount =
work->mpEmtr->mRate * (getRateRndm() * work->mpEmtr->get_r_zp() + 1.0f);
- f32 newEmitCount = work->mpEmtr->mEmitCount + newPtclCount;
- work->mpEmtr->mEmitCount = newEmitCount;
- emitCount = (s32)newEmitCount;
+ emitCount = work->mpEmtr->mEmitCount += newPtclCount;
work->mpEmtr->mEmitCount -= emitCount;
if (work->mpEmtr->checkStatus(JPAEmtrStts_FirstEmit) && 0.0f < newPtclCount &&
@@ -224,10 +196,10 @@ void JPADynamicsBlock::create(JPAEmitterWorkData* work) {
emitCount = 0;
}
- // Probably an inlined function.
- createCount = emitCount;
+ JPABaseParticle* ptcl = NULL;
+ s32 createCount = emitCount;
while (createCount > 0) {
- JPABaseParticle* ptcl = work->mpEmtr->createParticle();
+ ptcl = work->mpEmtr->createParticle();
if (ptcl == NULL)
break;
createCount--;
@@ -235,7 +207,7 @@ void JPADynamicsBlock::create(JPAEmitterWorkData* work) {
}
if (++work->mpEmtr->mRateStepTimer >= (work->mpEmtr->mRateStep + 1)) {
- work->mpEmtr->mRateStepTimer -= (work->mpEmtr->mRateStep + 1);
+ work->mpEmtr->mRateStepTimer -= work->mpEmtr->mRateStep + 1;
work->mpEmtr->setStatus(JPAEmtrStts_RateStepEmit);
} else {
work->mpEmtr->clearStatus(JPAEmtrStts_RateStepEmit);
diff --git a/src/JSystem/JParticle/JPAEmitter.cpp b/src/JSystem/JParticle/JPAEmitter.cpp
index b61e413d..abfbde46 100644
--- a/src/JSystem/JParticle/JPAEmitter.cpp
+++ b/src/JSystem/JParticle/JPAEmitter.cpp
@@ -1,8 +1,3 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAEmitter
-//
-
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAEmitterManager.h"
#include "JSystem/JParticle/JPAParticle.h"
@@ -10,65 +5,39 @@
#include "JSystem/JParticle/JPABaseShape.h"
#include "egg/math/eggVector.h"
-//
-// Types:
-//
-
-//
-// Forward References:
-//
-
-//
-// External References:
-//
-
-//
-// Declarations:
-//
-
-/* 8027E6A4-8027E6EC 278FE4 0048+00 0/0 14/14 16/16 .text __dt__18JPAEmitterCallBackFv */
JPAEmitterCallBack::~JPAEmitterCallBack() {
}
-/* 8027E6EC-8027EA40 27902C 0354+00 0/0 1/1 0/0 .text
- * init__14JPABaseEmitterFP17JPAEmitterManagerP11JPAResource */
void JPABaseEmitter::init(JPAEmitterManager* param_0, JPAResource* param_1) {
mpEmtrMgr = param_0;
- mpRes = param_1;
- mpRes->getDyn()->getEmitterScl(&mLocalScl);
- mpRes->getDyn()->getEmitterTrs(&mLocalTrs);
- mpRes->getDyn()->getEmitterDir(&mLocalDir);
+ pRes = param_1;
+ pRes->getDyn()->getEmitterScl(&mLocalScl);
+ pRes->getDyn()->getEmitterTrs(&mLocalTrs);
+ pRes->getDyn()->getEmitterDir(&mLocalDir);
mLocalDir.normalise();
- mpRes->getDyn()->getEmitterRot(&mLocalRot);
- mMaxFrame = mpRes->getDyn()->getMaxFrame();
- mLifeTime = mpRes->getDyn()->getLifetime();
- mVolumeSize = mpRes->getDyn()->getVolumeSize();
- mRate = mpRes->getDyn()->getRate();
- mRateStep = mpRes->getDyn()->getRateStep();
- mVolumeSweep = mpRes->getDyn()->getVolumeSweep();
- mVolumeMinRad = mpRes->getDyn()->getVolumeMinRad();
- mAwayFromCenterSpeed = mpRes->getDyn()->getInitVelOmni();
- mAwayFromAxisSpeed = mpRes->getDyn()->getInitVelAxis();
- mDirSpeed = mpRes->getDyn()->getInitVelDir();
- mSpread = mpRes->getDyn()->getInitVelDirSp();
- mRndmDirSpeed = mpRes->getDyn()->getInitVelRndm();
- mAirResist = mpRes->getDyn()->getAirRes();
+ pRes->getDyn()->getEmitterRot(&mLocalRot);
+ mMaxFrame = pRes->getDyn()->getMaxFrame();
+ mLifeTime = pRes->getDyn()->getLifetime();
+ mVolumeSize = pRes->getDyn()->getVolumeSize();
+ mRate = pRes->getDyn()->getRate();
+ mRateStep = pRes->getDyn()->getRateStep();
+ mVolumeSweep = pRes->getDyn()->getVolumeSweep();
+ mVolumeMinRad = pRes->getDyn()->getVolumeMinRad();
+ mAwayFromCenterSpeed = pRes->getDyn()->getInitVelOmni();
+ mAwayFromAxisSpeed = pRes->getDyn()->getInitVelAxis();
+ mDirSpeed = pRes->getDyn()->getInitVelDir();
+ mSpread = pRes->getDyn()->getInitVelDirSp();
+ mRndmDirSpeed = pRes->getDyn()->getInitVelRndm();
+ mAirResist = pRes->getDyn()->getAirRes();
mRndm.set_seed(mpEmtrMgr->pWd->mRndm.get_rndm_u());
MTXIdentity(mGlobalRot);
mGlobalScl.set(1.0f, 1.0f, 1.0f);
mGlobalTrs.setZero();
mGlobalPScl.set(1.0f, 1.0f);
- mGlobalEnvClr.a = 0xff;
- mGlobalEnvClr.b = 0xff;
- mGlobalEnvClr.g = 0xff;
- mGlobalEnvClr.r = 0xff;
- mGlobalPrmClr.a = 0xff;
- mGlobalPrmClr.b = 0xff;
- mGlobalPrmClr.g = 0xff;
- mGlobalPrmClr.r = 0xff;
+ mGlobalPrmClr.r = mGlobalPrmClr.g = mGlobalPrmClr.b = mGlobalPrmClr.a = mGlobalEnvClr.r = mGlobalEnvClr.g = mGlobalEnvClr.b = mGlobalEnvClr.a = 0xff;
param_1->getBsp()->getPrmClr(&mPrmClr);
param_1->getBsp()->getEnvClr(&mEnvClr);
- mpUserWork = NULL;
+ mpUserWork = 0;
mScaleOut = 1.0f;
mEmitCount = 0.0f;
initStatus(0x30);
@@ -79,34 +48,33 @@ void JPABaseEmitter::init(JPAEmitterManager* param_0, JPAResource* param_1) {
mTexAnmIdx = 0;
}
-/* 8027EA40-8027EB60 279380 0120+00 0/0 3/3 0/0 .text createParticle__14JPABaseEmitterFv
- */
JPABaseParticle* JPABaseEmitter::createParticle() {
if (mpPtclPool->getNum() != 0) {
JPANode<JPABaseParticle>* node = mpPtclPool->pop_front();
mAlivePtclBase.push_front(node);
- mpRes->getDyn()->calc(mpEmtrMgr->pWd);
- node->mData.init_p(mpEmtrMgr->pWd);
- return &node->mData;
+ pRes->getDyn()->calc(mpEmtrMgr->pWd);
+ node->getObject()->init_p(mpEmtrMgr->pWd);
+ return node->getObject();
+ } else {
+ JUT_WARN(128, "%s", "JPA : Can NOT create particle more\n");
}
return NULL;
}
-/* 8027EB60-8027EC60 2794A0 0100+00 0/0 1/1 0/0 .text
- * createChild__14JPABaseEmitterFP15JPABaseParticle */
JPABaseParticle* JPABaseEmitter::createChild(JPABaseParticle* parent) {
if (mpPtclPool->getNum() != 0) {
JPANode<JPABaseParticle>* node = mpPtclPool->pop_front();
mAlivePtclChld.push_front(node);
- node->mData.init_c(mpEmtrMgr->pWd, parent);
- return &node->mData;
+ node->getObject()->init_c(mpEmtrMgr->pWd, parent);
+ return node->getObject();
+ } else {
+ JUT_WARN(151, "%s", "JPA : Can NOT create child particle more\n")
}
return NULL;
}
-/* 8027EC60-8027EDD4 2795A0 0174+00 0/0 2/2 21/21 .text deleteAllParticle__14JPABaseEmitterFv */
void JPABaseEmitter::deleteAllParticle() {
while (mAlivePtclBase.getNum())
mpPtclPool->push_front(mAlivePtclBase.pop_back());
@@ -114,21 +82,17 @@ void JPABaseEmitter::deleteAllParticle() {
mpPtclPool->push_front(mAlivePtclChld.pop_back());
}
-/* 8027EDD4-8027EE14 279714 0040+00 0/0 1/1 0/0 .text processTillStartFrame__14JPABaseEmitterFv */
bool JPABaseEmitter::processTillStartFrame() {
- JPADynamicsBlock* dyn = mpRes->getDyn();
- s16 startFrame = dyn->getStartFrame();
-
- if (mWaitTime >= startFrame)
+ if (mWaitTime >= pRes->getDyn()->getStartFrame())
return true;
- if (!(mStatus & 2))
+ if (!checkStatus(2)) {
mWaitTime++;
+ }
return false;
}
-/* 8027EE14-8027EEB0 279754 009C+00 0/0 1/1 0/0 .text processTermination__14JPABaseEmitterFv */
bool JPABaseEmitter::processTermination() {
if (checkStatus(0x100)) {
return true;
@@ -140,19 +104,17 @@ bool JPABaseEmitter::processTermination() {
if (mMaxFrame < 0) {
setStatus(8);
return getParticleNumber() == 0;
- }
+ }
if (mTick >= mMaxFrame) {
setStatus(8);
if (checkStatus(0x40)) {
- return false;
+ return 0;
}
return getParticleNumber() == 0;
}
return false;
}
-/* 8027EEB0-8027EF30 2797F0 0080+00 0/0 1/1 0/0 .text
- * calcEmitterGlobalPosition__14JPABaseEmitterCFPQ29JGeometry8TVec3<f> */
void JPABaseEmitter::calcEmitterGlobalPosition(EGG::Vector3f* dst) const {
Mtx mtx;
MTXScale(mtx, mGlobalScl.x, mGlobalScl.y, mGlobalScl.z);
@@ -163,21 +125,16 @@ void JPABaseEmitter::calcEmitterGlobalPosition(EGG::Vector3f* dst) const {
MTXMultVec(mtx, mLocalTrs, *dst);
}
-/* 8027EF30-8027EF40 279870 0010+00 0/0 1/1 0/0 .text getCurrentCreateNumber__14JPABaseEmitterCFv
- */
u32 JPABaseEmitter::getCurrentCreateNumber() const {
return mpEmtrMgr->pWd->mEmitCount;
}
-/* 8027EF40-8027EF50 279880 0010+00 0/0 3/3 0/0 .text getDrawCount__14JPABaseEmitterCFv
- */
u8 JPABaseEmitter::getDrawCount() const {
return mpEmtrMgr->pWd->mDrawCount;
}
-/* 8027EF50-8027EFA4 279890 0054+00 0/0 1/1 0/0 .text
- * loadTexture__14JPABaseEmitterFUc11_GXTexMapID */
-bool JPABaseEmitter::loadTexture(u8 idx, GXTexMapID texMapID) {
- mpEmtrMgr->pWd->mpResMgr->load(mpRes->getTexIdx(idx), texMapID);
+bool JPABaseEmitter::loadTexture(u8 no, GXTexMapID texMapID) {
+ JUT_ASSERT(286, pRes->texNum > no);
+ mpEmtrMgr->pWd->mpResMgr->load(pRes->getTexIdx(no), texMapID);
return true;
}
diff --git a/src/JSystem/JParticle/JPAEmitterManager.cpp b/src/JSystem/JParticle/JPAEmitterManager.cpp
index 54f4a874..75b7f86a 100644
--- a/src/JSystem/JParticle/JPAEmitterManager.cpp
+++ b/src/JSystem/JParticle/JPAEmitterManager.cpp
@@ -1,8 +1,3 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAEmitterManager
-//
-
#include "JSystem/JParticle/JPAList.h"
#include "JSystem/JSupport/JSUList.h"
#include "egg/core/eggHeap.h"
@@ -16,8 +11,6 @@
#include "rvl/GX/GXTypes.h"
#include "rvl/GX.h"
-/* 8027DCA0-8027DEBC 2785E0 021C+00 0/0 1/1 0/0 .text __ct__17JPAEmitterManagerFUlUlP7EGG::HeapUcUc
- */
JPAEmitterManager::JPAEmitterManager(u32 i_ptclNum, u32 i_emtrNum, EGG::Heap* pHeap, u8 i_gidMax,
u8 i_ridMax) {
emtrNum = i_emtrNum;
@@ -49,16 +42,13 @@ JPAEmitterManager::JPAEmitterManager(u32 i_ptclNum, u32 i_emtrNum, EGG::Heap* pH
JUT_ASSERT(67, pWd);
}
-/* 8027DEBC-8027DFA0 2787FC 00E4+00 0/0 3/3 0/0 .text
- * createSimpleEmitterID__17JPAEmitterManagerFRCQ29JGeometry8TVec3<f>UsUcUcP18JPAEmitterCallBackP19JPAParticleCallBack
- */
JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(EGG::Vector3f const& pos,
u16 resID, u8 group_id, u8 res_mgr_id,
JPAEmitterCallBack* emtrCB,
JPAParticleCallBack* ptclCB) {
JUT_ASSERT(88, group_id < gidMax);
JUT_ASSERT(89, res_mgr_id < ridMax);
- JUT_ASSERT(90, pResMgrAry[res_mgr_id] != 0);
+ JUT_ASSERT(90, pResMgrAry[res_mgr_id] != NULL);
JPAResource* pRes = pResMgrAry[res_mgr_id]->getResource(resID);
if (pRes == NULL) {
@@ -118,7 +108,6 @@ void JPAEmitterManager::fn_80320E20(u8 group_id, f32 of_x, f32 of_z) {
}
}
-/* 8027DFA0-8027E028 2788E0 0088+00 0/0 3/3 0/0 .text calc__17JPAEmitterManagerFUc */
void JPAEmitterManager::calc(u8 group_id) {
JUT_ASSERT(154, group_id < gidMax);
JSULink<JPABaseEmitter>* pNext = NULL;
@@ -128,13 +117,11 @@ void JPAEmitterManager::calc(u8 group_id) {
JPABaseEmitter* emtr = pLink->getObject();
- if (emtr->mpRes->calc(pWd, emtr) && !emtr->checkStatus(0x200))
+ if (emtr->pRes->calc(pWd, emtr) && !emtr->checkStatus(0x200))
forceDeleteEmitter(emtr);
}
}
-/* 8027E028-8027E220 278968 01F8+00 0/0 1/1 0/0 .text draw__17JPAEmitterManagerFPC11JPADrawInfoUc
- */
void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 group_id) {
JUT_ASSERT(192, group_id < gidMax);
drawInfo->getCamMtx(pWd->mPosCamMtx);
@@ -166,30 +153,24 @@ void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 group_id) {
JPABaseEmitter* emtr = pLink->getObject();
if (!emtr->checkStatus(0x04)) {
pWd->mpResMgr = pResMgrAry[emtr->mResMgrID];
- emtr->mpRes->draw(pWd, emtr);
+ emtr->pRes->draw(pWd, emtr);
}
}
GXSetClipMode(GX_CLIP_ENABLE);
}
-/* 8027E220-8027E278 278B60 0058+00 0/0 1/1 0/0 .text forceDeleteAllEmitter__17JPAEmitterManagerFv
- */
void JPAEmitterManager::forceDeleteAllEmitter() {
for (u8 i = 0; i < gidMax; i++)
forceDeleteGroupEmitter(i);
}
-/* 8027E278-8027E2D8 278BB8 0060+00 1/1 0/0 0/0 .text
- * forceDeleteGroupEmitter__17JPAEmitterManagerFUc */
void JPAEmitterManager::forceDeleteGroupEmitter(u8 group_id) {
JUT_ASSERT(288, group_id < gidMax);
while (pEmtrUseList[group_id].getNumLinks())
forceDeleteEmitter(pEmtrUseList[group_id].getLast()->getObject());
}
-/* 8027E2D8-8027E344 278C18 006C+00 3/3 1/1 0/0 .text
- * forceDeleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter */
void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) {
emtr->deleteAllParticle();
emtr->setStatus(0x300);
@@ -197,17 +178,13 @@ void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) {
mFreeEmtrList.prepend(&emtr->mLink);
}
-/* 8027E344-8027E354 278C84 0010+00 0/0 2/2 0/0 .text
- * entryResourceManager__17JPAEmitterManagerFP18JPAResourceManagerUc */
void JPAEmitterManager::entryResourceManager(JPAResourceManager* resMgr, u8 resMgrID) {
- JUT_ASSERT_MSG_F(325, resMgrID < ridMax && (pResMgrAry[resMgrID]) == 0,
+ JUT_ASSERT_MSG_F(325, resMgrID < ridMax && (pResMgrAry[resMgrID]) == NULL,
"res_id %d res_id_max %d array[%d] = %x", resMgrID, ridMax, resMgrID,
pResMgrAry[resMgrID]);
pResMgrAry[resMgrID] = resMgr;
}
-/* 8027E354-8027E3F4 278C94 00A0+00 0/0 1/1 0/0 .text clearResourceManager__17JPAEmitterManagerFUc
- */
void JPAEmitterManager::clearResourceManager(u8 res_mgr_id) {
JUT_ASSERT(339, res_mgr_id < ridMax);
for (u8 i = 0; i < gidMax; i++) {
@@ -224,8 +201,6 @@ void JPAEmitterManager::clearResourceManager(u8 res_mgr_id) {
pResMgrAry[res_mgr_id] = NULL;
}
-/* 8027E3F4-8027E51C 278D34 0128+00 1/1 0/0 0/0 .text calcYBBCam__17JPAEmitterManagerFv
- */
void JPAEmitterManager::calcYBBCam() {
EGG::Vector3f v(0.0f, pWd->mPosCamMtx[1][1], pWd->mPosCamMtx[2][1]);
JUT_ASSERT(367, !v.isZero());
diff --git a/src/JSystem/JParticle/JPAExTexShape.cpp b/src/JSystem/JParticle/JPAExTexShape.cpp
index 7d8d08f2..34e72f51 100644
--- a/src/JSystem/JParticle/JPAExTexShape.cpp
+++ b/src/JSystem/JParticle/JPAExTexShape.cpp
@@ -1,8 +1,3 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAExTexShape
-//
-
#include "JSystem/JParticle/JPAExTexShape.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JParticle/JPAEmitter.h"
@@ -10,31 +5,27 @@
#include "rvl/MTX.h"
#include "rvl/GX.h"
-/* 8027B040-8027B13C 275980 00FC+00 0/0 1/1 0/0 .text JPALoadExTex__FP18JPAEmitterWorkData */
void JPALoadExTex(JPAEmitterWorkData* work) {
- Mtx m;
JPAExTexShape* ets = work->mpRes->getEts();
-
+
GXTexCoordID secTexCoordID = GX_TEXCOORD1;
if (ets->isUseIndirect()) {
+ Mtx m;
MTXIdentity(m);
GXLoadTexMtxImm(m, GX_TEXMTX2, GX_MTX2x4);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX2, GX_FALSE,
GX_PTIDENTITY);
- u8 texIdx = ets->getIndTexIdx();
- work->mpResMgr->load(work->mpRes->getTexIdx(texIdx), GX_TEXMAP2);
+ work->mpResMgr->load(work->mpRes->getTexIdx(ets->getIndTexIdx()), GX_TEXMAP2);
secTexCoordID = GX_TEXCOORD2;
}
if (ets->isUseSecTex()) {
GXSetTexCoordGen2(secTexCoordID, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE,
GX_PTIDENTITY);
- u8 texIdx = ets->getSecTexIdx();
- work->mpResMgr->load(work->mpRes->getTexIdx(texIdx), GX_TEXMAP3);
+ work->mpResMgr->load(work->mpRes->getTexIdx(ets->getSecTexIdx()), GX_TEXMAP3);
}
}
-/* 8027B13C-8027B144 -00001 0008+00 0/0 0/0 0/0 .text __ct__13JPAExTexShapeFPCUc */
JPAExTexShape::JPAExTexShape(u8 const* data) {
mpData = (const JPAExTexShapeData*)data;
}
diff --git a/src/JSystem/JParticle/JPAExtraShape.cpp b/src/JSystem/JParticle/JPAExtraShape.cpp
index ca825d31..3e565e57 100644
--- a/src/JSystem/JParticle/JPAExtraShape.cpp
+++ b/src/JSystem/JParticle/JPAExtraShape.cpp
@@ -1,15 +1,8 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAExtraShape
-//
-
#include "JSystem/JParticle/JPAExtraShape.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "nw4r/math/math_triangular.h"
-/* 8027A918-8027A990 275258 0078+00 0/0 1/1 0/0 .text
- * JPACalcScaleX__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
if (work->mScaleAnm < esp->getScaleInTiming()) {
@@ -24,8 +17,6 @@ void JPACalcScaleX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
}
}
-/* 8027A990-8027AA08 2752D0 0078+00 0/0 1/1 0/0 .text
- * JPACalcScaleY__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
if (work->mScaleAnm < esp->getScaleInTiming()) {
@@ -40,57 +31,41 @@ void JPACalcScaleY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
}
}
-/* 8027AA08-8027AA14 275348 000C+00 0/0 1/1 0/0 .text
- * JPACalcScaleCopy__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleCopy(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
- JPAExtraShape* esp = work->mpRes->getEsp();
ptcl->mParticleScaleY = ptcl->mParticleScaleX;
}
-/* 8027AA14-8027AA20 275354 000C+00 0/0 1/1 0/0 .text
- * JPACalcScaleAnmNormal__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmNormal(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
work->mScaleAnm = ptcl->mTime;
}
-/* 8027AA20-8027AA84 275360 0064+00 0/0 1/1 0/0 .text
- * JPACalcScaleAnmRepeatX__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmRepeatX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
work->mScaleAnm = (ptcl->mAge % esp->getScaleAnmCycleX()) / (f32)esp->getScaleAnmCycleX();
}
-/* 8027AA84-8027AAE8 2753C4 0064+00 0/0 1/1 0/0 .text
- * JPACalcScaleAnmRepeatY__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmRepeatY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
work->mScaleAnm = (ptcl->mAge % esp->getScaleAnmCycleY()) / (f32)esp->getScaleAnmCycleY();
}
-/* 8027AAE8-8027AB7C 275428 0094+00 0/0 1/1 0/0 .text
- * JPACalcScaleAnmReverseX__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmReverseX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
f32 cycle = ptcl->mAge / esp->getScaleAnmCycleX() & 1;
f32 base = (ptcl->mAge % esp->getScaleAnmCycleX()) / (f32)esp->getScaleAnmCycleX();
- work->mScaleAnm = base + (cycle * (1.0f - base * 2.0f));
+ work->mScaleAnm = base + cycle * (1.0f - base * 2.0f);
}
-/* 8027AB7C-8027AC10 2754BC 0094+00 0/0 1/1 0/0 .text
- * JPACalcScaleAnmReverseY__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmReverseY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
f32 cycle = ptcl->mAge / esp->getScaleAnmCycleY() & 1;
f32 base = (ptcl->mAge % esp->getScaleAnmCycleY()) / (f32)esp->getScaleAnmCycleY();
- work->mScaleAnm = base + (cycle * (1.0f - base * 2.0f));
+ work->mScaleAnm = base + cycle * (1.0f - base * 2.0f);
}
-/* 8027AC10-8027AC98 275550 0088+00 0/0 1/1 0/0 .text
- * JPACalcAlphaAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcAlphaAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
- 0.0f; // float order
JPAExtraShape* esp = work->mpRes->getEsp();
- f32 alpha;
+ f32 alpha = 0.0f;
if (ptcl->mTime < esp->getAlphaInTiming()) {
alpha = 255.0f * (esp->getAlphaInValue() + esp->getAlphaIncRate() * ptcl->mTime);
} else if (ptcl->mTime > esp->getAlphaOutTiming()) {
@@ -102,11 +77,9 @@ void JPACalcAlphaAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
OSf32tou8(&alpha, &ptcl->mPrmColorAlphaAnm);
}
-/* 8027AC98-8027AD88 2755D8 00F0+00 0/0 1/1 0/0 .text
- * JPACalcAlphaFlickAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcAlphaFlickAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
- f32 alpha;
+ f32 alpha = 0.0f;
if (ptcl->mTime < esp->getAlphaInTiming()) {
alpha = (esp->getAlphaInValue() + esp->getAlphaIncRate() * ptcl->mTime);
} else if (ptcl->mTime > esp->getAlphaOutTiming()) {
@@ -115,19 +88,16 @@ void JPACalcAlphaFlickAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
} else {
alpha = esp->getAlphaBaseValue();
}
- s32 theta = ptcl->mAlphaWaveRandom * ptcl->mAge * 16384.0f * (1.0f - esp->getAlphaFreq());
- f32 wave = nw4r::math::SinIdx(theta);
+ f32 wave = nw4r::math::SinIdx(ptcl->mAlphaWaveRandom * ptcl->mAge * 16384.0f * (1.0f - esp->getAlphaFreq()));
alpha *= (1.0f + esp->getAlphaAmp() * (wave - 1.0f) * 0.5f) * 255.0f;
OSf32tou8(&alpha, &ptcl->mPrmColorAlphaAnm);
}
-/* 8027AD88-8027ADBC 2756C8 0034+00 0/0 1/1 0/0 .text __ct__13JPAExtraShapeFPCUc */
JPAExtraShape::JPAExtraShape(u8 const* data) {
mpData = (const JPAExtraShapeData*)data;
init();
}
-/* 8027ADBC-8027AEBC 2756FC 0100+00 1/1 0/0 0/0 .text init__13JPAExtraShapeFv */
void JPAExtraShape::init() {
mAlphaIncRate = (getAlphaInTiming() != 0.0f) ?
(getAlphaBaseValue() - getAlphaInValue()) / getAlphaInTiming() :
diff --git a/src/JSystem/JParticle/JPAFieldBlock.cpp b/src/JSystem/JParticle/JPAFieldBlock.cpp
index da16788e..20da330a 100644
--- a/src/JSystem/JParticle/JPAFieldBlock.cpp
+++ b/src/JSystem/JParticle/JPAFieldBlock.cpp
@@ -1,16 +1,10 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAFieldBlock
-//
-
#include "egg/core/eggHeap.h"
#include "JSystem/JParticle/JPAFieldBlock.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAParticle.h"
+#include "JSystem/JUtility/JUTAssert.h"
#include "egg/math/eggVector.h"
-/* 8027BDEC-8027BF18 27672C 012C+00 8/8 0/0 0/0 .text
- * calcAffect__12JPAFieldBaseFP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldBase::calcAffect(JPAFieldBlock* block, JPABaseParticle* ptcl) {
EGG::Vector3f vec = mAccel;
if (!ptcl->checkStatus(4) && block->checkStatus(0x78)) {
@@ -30,8 +24,6 @@ void JPAFieldBase::calcAffect(JPAFieldBlock* block, JPABaseParticle* ptcl) {
}
}
-/* 8027BF18-8027BFB4 276858 009C+00 2/2 0/0 0/0 .text
- * calcFadeAffect__12JPAFieldBaseCFP13JPAFieldBlockf */
f32 JPAFieldBase::calcFadeAffect(JPAFieldBlock* block, f32 time) const {
f32 fade = 1.0f;
if ((block->checkStatus(8) && time < block->getEnTime())
@@ -46,8 +38,6 @@ f32 JPAFieldBase::calcFadeAffect(JPAFieldBlock* block, f32 time) const {
return fade;
}
-/* 8027BFB4-8027C054 2768F4 00A0+00 1/0 0/0 0/0 .text
- * prepare__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldGravity::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
if (block->checkStatus(2)) {
mAccel = block->getMag() * block->getDir();
@@ -57,14 +47,10 @@ void JPAFieldGravity::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
}
}
-/* 8027C054-8027C07C 276994 0028+00 1/0 0/0 0/0 .text
- * calc__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldGravity::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
calcAffect(block, ptcl);
}
-/* 8027C07C-8027C1B8 2769BC 013C+00 1/0 0/0 0/0 .text
- * prepare__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldAir::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
EGG::Vector3f vec = block->getDir();
vec.normalise();
@@ -76,8 +62,6 @@ void JPAFieldAir::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
}
}
-/* 8027C1B8-8027C24C 276AF8 0094+00 1/0 0/0 0/0 .text
- * calc__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldAir::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
calcAffect(block, ptcl);
if (block->checkStatus(4)) {
@@ -88,31 +72,23 @@ void JPAFieldAir::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABasePa
}
}
-/* 8027C24C-8027C29C 276B8C 0050+00 1/0 0/0 0/0 .text
- * prepare__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldMagnet::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
mDir = block->getPos() - work->mEmitterPos;
MTXMultVecSR(work->mRotationMtx, mDir, mDir);
}
-/* 8027C29C-8027C36C 276BDC 00D0+00 1/0 0/0 0/0 .text
- * calc__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldMagnet::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
mAccel = mDir - ptcl->mLocalPosition;
mAccel.setLength(block->getMag());
calcAffect(block, ptcl);
}
-/* 8027C36C-8027C3E0 276CAC 0074+00 1/0 0/0 0/0 .text
- * prepare__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldNewton::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
mDir = block->getPos() - work->mEmitterPos;
MTXMultVecSR(work->mRotationMtx, mDir, mDir);
mCutoff = block->getVal1() * block->getVal1();
}
-/* 8027C3E0-8027C56C 276D20 018C+00 1/0 0/0 0/0 .text
- * calc__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldNewton::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
mAccel = mDir - ptcl->mLocalPosition;
f32 len_sq = mAccel.squaredLength();
@@ -124,17 +100,13 @@ void JPAFieldNewton::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABas
calcAffect(block, ptcl);
}
-/* 8027C56C-8027C674 276EAC 0108+00 1/0 0/0 0/0 .text
- * prepare__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldVortex::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
- PSMTXMultVecSR(work->mGlobalRot, block->getDir(), field_0x10);
+ MTXMultVecSR(work->mGlobalRot, block->getDir(), field_0x10);
field_0x10.normalise();
field_0x1c = block->getPos().z * block->getPos().z;
field_0x20 = 1.0f / field_0x1c;
}
-/* 8027C674-8027C814 276FB4 01A0+00 1/0 0/0 0/0 .text
- * calc__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldVortex::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
EGG::Vector3f vec;
vec = field_0x10.dot(ptcl->mLocalPosition) * field_0x10;
@@ -152,8 +124,6 @@ void JPAFieldVortex::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABas
calcAffect(block, ptcl);
}
-/* 8027C814-8027CA94 277154 0280+00 1/0 0/0 0/0 .text
- * prepare__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldConvection::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
EGG::Vector3f vec1, vec2;
vec2 = block->getPos().cross(block->getDir());
@@ -166,8 +136,6 @@ void JPAFieldConvection::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block)
field_0x28.normalise();
}
-/* 8027CA94-8027CCCC 2773D4 0238+00 1/0 0/0 0/0 .text
- * calc__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldConvection::calc(JPAEmitterWorkData* work, JPAFieldBlock* block,
JPABaseParticle* ptcl) {
EGG::Vector3f vec1, vec2, vec3;
@@ -182,8 +150,6 @@ void JPAFieldConvection::calc(JPAEmitterWorkData* work, JPAFieldBlock* block,
calcAffect(block, ptcl);
}
-/* 8027CCCC-8027CDE4 27760C 0118+00 1/0 0/0 0/0 .text
- * calc__14JPAFieldRandomFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldRandom::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
if (ptcl->mAge == 0 || (block->getCycle() != 0 && ptcl->mAge % block->getCycle() == 0)) {
JPABaseEmitter* emtr = work->mpEmtr;
@@ -193,8 +159,6 @@ void JPAFieldRandom::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABas
}
}
-/* 8027CDE4-8027CE64 277724 0080+00 1/0 0/0 0/0 .text
- * calc__12JPAFieldDragFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldDrag::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
if (!ptcl->checkStatus(4)) {
f32 fade = calcFadeAffect(block, ptcl->mTime);
@@ -204,8 +168,6 @@ void JPAFieldDrag::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseP
}
}
-/* 8027CE64-8027CFA8 2777A4 0144+00 1/0 0/0 0/0 .text
- * prepare__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldSpin::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
EGG::Vector3f axis;
MTXMultVecSR(work->mGlobalRot, block->getDir(), axis);
@@ -217,8 +179,6 @@ void JPAFieldSpin::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
field_0x28.set(mtx[0][2], mtx[1][2], mtx[2][2]);
}
-/* 8027CFA8-8027D088 2778E8 00E0+00 1/0 0/0 0/0 .text
- * calc__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldSpin::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
Mtx mtx;
mtx[0][0] = field_0x10.x;
@@ -238,14 +198,11 @@ void JPAFieldSpin::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseP
calcAffect(block, ptcl);
}
-/* 8027D088-8027D0C0 2779C8 0038+00 0/0 1/1 0/0 .text __ct__13JPAFieldBlockFPCUcP7JKRHeap
- */
JPAFieldBlock::JPAFieldBlock(u8 const* data, EGG::Heap* heap)
: mpData((const JPAFieldBlockData*)data) {
init(heap);
}
-/* 8027D0C0-8027D3AC 277A00 02EC+00 2/1 0/0 0/0 .text init__13JPAFieldBlockFP7JKRHeap */
void JPAFieldBlock::init(EGG::Heap* heap) {
mFadeInRate = getFadeInTime() - getEnTime();
if (mFadeInRate == 0.0f) {
@@ -267,34 +224,36 @@ void JPAFieldBlock::init(EGG::Heap* heap) {
switch (getType()) {
case FIELD_GRAVITY:
- mpField = new (heap, 4) JPAFieldGravity();
+ pFld = new (heap) JPAFieldGravity();
break;
case FIELD_AIR:
- mpField = new (heap, 4) JPAFieldAir();
+ pFld = new (heap) JPAFieldAir();
break;
case FIELD_MAGNET:
- mpField = new (heap, 4) JPAFieldMagnet();
+ pFld = new (heap) JPAFieldMagnet();
break;
case FIELD_NEWTON:
- mpField = new (heap, 4) JPAFieldNewton();
+ pFld = new (heap) JPAFieldNewton();
break;
case FIELD_VORTEX:
- mpField = new (heap, 4) JPAFieldVortex();
+ pFld = new (heap) JPAFieldVortex();
break;
case FIELD_RANDOM:
- mpField = new (heap, 4) JPAFieldRandom();
+ pFld = new (heap) JPAFieldRandom();
break;
case FIELD_DRAG:
- mpField = new (heap, 4) JPAFieldDrag();
+ pFld = new (heap) JPAFieldDrag();
break;
case FIELD_CONVECTION:
- mpField = new (heap, 4) JPAFieldConvection();
+ pFld = new (heap) JPAFieldConvection();
break;
case FIELD_SPIN:
- mpField = new (heap, 4) JPAFieldSpin();
+ pFld = new (heap) JPAFieldSpin();
break;
default:
- mpField = NULL;
+ pFld = NULL;
+ JUT_WARN(483, "JPA : WRONG ID (%d) in field data\n", getType());
break;
}
+ JUT_ASSERT(485, pFld != 0);
}
diff --git a/src/JSystem/JParticle/JPAKeyBlock.cpp b/src/JSystem/JParticle/JPAKeyBlock.cpp
index fdb1e8e6..c4cd83ac 100644
--- a/src/JSystem/JParticle/JPAKeyBlock.cpp
+++ b/src/JSystem/JParticle/JPAKeyBlock.cpp
@@ -1,25 +1,18 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAKeyBlock
-//
-
#include "JSystem/JParticle/JPAKeyBlock.h"
#include "JSystem/JParticle/JPAMath.h"
-/* 8027D730-8027D740 278070 0010+00 0/0 1/1 0/0 .text __ct__11JPAKeyBlockFPCUc */
JPAKeyBlock::JPAKeyBlock(const u8* data)
: mDataStart(data)
, field_0x4(reinterpret_cast<const float*>(&data[0xC]))
{
}
-/* 8027D740-8027D7D4 278080 0094+00 0/0 1/1 0/0 .text calc__11JPAKeyBlockFf */
f32 JPAKeyBlock::calc(float p1) {
- if (mDataStart[0xB] != '\0') {
- int v1 = (int)field_0x4[(mDataStart[9] - 1) * 4] + 1;
+ if (isLoop()) {
+ int v1 = (int)getKeyData()[(getKeyNum() - 1) * 4] + 1;
// p1 -= (v1 * ((int)p1 / v1));
int v2 = ((int)p1 / v1);
p1 = p1 - (v2 * v1);
}
- return JPACalcKeyAnmValue(p1, mDataStart[9], field_0x4);
+ return JPACalcKeyAnmValue(p1, getKeyNum(), getKeyData());
}
diff --git a/src/JSystem/JParticle/JPAMath.cpp b/src/JSystem/JParticle/JPAMath.cpp
index 8d3eba27..d3e072a8 100644
--- a/src/JSystem/JParticle/JPAMath.cpp
+++ b/src/JSystem/JParticle/JPAMath.cpp
@@ -1,8 +1,3 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAMath
-//
-
#include "JSystem/JParticle/JPAMath.h"
#include "JSystem/JMath/JMath.h"
@@ -10,8 +5,6 @@
#include "egg/math/eggVector.h"
#include "nw4r/math/math_triangular.h"
-/* 80280588-802806C0 27AEC8 0138+00 0/0 1/1 0/0 .text JPAGetDirMtx__FRCQ29JGeometry8TVec3<f>PA4_f
- */
void JPAGetDirMtx(EGG::Vector3f const& param_0, f32 (*param_1)[4]) {
1.0f; // probably some dummy function
@@ -42,7 +35,6 @@ void JPAGetDirMtx(EGG::Vector3f const& param_0, f32 (*param_1)[4]) {
param_1[2][3] = 0.0f;
}
-/* 802806C0-80280734 27B000 0074+00 0/0 1/1 0/0 .text JPAGetYZRotateMtx__FssPA4_f */
void JPAGetYZRotateMtx(s16 angleY, s16 angleZ, f32 (*param_2)[4]) {
f32 cosy = nw4r::math::CosIdx(angleY);
f32 cosz = nw4r::math::CosIdx(angleZ);
@@ -56,13 +48,9 @@ void JPAGetYZRotateMtx(s16 angleY, s16 angleZ, f32 (*param_2)[4]) {
param_2[1][2] = (siny * sinz);
param_2[2][0] = -siny;
param_2[2][2] = cosy;
- param_2[2][3] = 0.0f;
- param_2[2][1] = 0.0f;
- param_2[1][3] = 0.0f;
- param_2[0][3] = 0.0f;
+ param_2[0][3] = param_2[1][3] = param_2[2][1] = param_2[2][3] = 0.0f;
}
-/* 80280734-802807E0 27B074 00AC+00 0/0 6/6 11/11 .text JPAGetXYZRotateMtx__FsssPA4_f */
void JPAGetXYZRotateMtx(s16 x, s16 y, s16 z, Mtx mtx) {
f32 cosx = nw4r::math::CosIdx(x);
f32 cosy = nw4r::math::CosIdx(y);
@@ -75,37 +63,26 @@ void JPAGetXYZRotateMtx(s16 x, s16 y, s16 z, Mtx mtx) {
mtx[2][0] = -siny;
mtx[2][1] = sinx * cosy;
mtx[2][2] = cosx * cosy;
- f32 sinxsinz;
- f32 cosxcosz;
- f32 cosxsinz;
- f32 sinxcosz;
- cosxsinz = cosx * sinz;
- sinxcosz = sinx * cosz;
- mtx[0][1] = sinxcosz * siny - cosxsinz;
- mtx[1][2] = cosxsinz * siny - sinxcosz;
- sinxsinz = sinx * sinz;
- cosxcosz = cosx * cosz;
- mtx[0][2] = sinxsinz + cosxcosz * siny;
- mtx[1][1] = cosxcosz + sinxsinz * siny;
- mtx[2][3] = 0.0f;
- mtx[1][3] = 0.0f;
- mtx[0][3] = 0.0f;
+ f32 f30 = cosx * sinz;
+ f32 f29 = sinx * cosz;
+ mtx[0][1] = f29 * siny - f30;
+ mtx[1][2] = f30 * siny - f29;
+ f30 = sinx * sinz;
+ f29 = cosx * cosz;
+ mtx[0][2] = f30 + f29 * siny;
+ mtx[1][1] = f29 + f30 * siny;
+ mtx[0][3] = mtx[1][3] = mtx[2][3] = 0.0f;
}
-/* 802807E0-80280808 27B120 0028+00 0/0 11/11 71/71 .text
- * JPASetRMtxTVecfromMtx__FPA4_CfPA4_fPQ29JGeometry8TVec3<f> */
-void JPASetRMtxTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4], EGG::Vector3f *param_2) {
+void JPASetRMtxTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4],
+ EGG::Vector3f* param_2) {
EGG::Vector3f dummy;
JPASetRMtxSTVecfromMtx(param_0, param_1, &dummy, param_2);
}
-/* 80280808-80280984 27B148 017C+00 1/1 1/1 53/53 .text
- * JPASetRMtxSTVecfromMtx__FPA4_CfPA4_fPQ29JGeometry8TVec3<f>PQ29JGeometry8TVec3<f> */
-void JPASetRMtxSTVecfromMtx(
- f32 const (*param_0)[4], f32 (*param_1)[4], EGG::Vector3f *param_2, EGG::Vector3f *param_3
-) {
- EGG::Vector3f aTStack_54;
- aTStack_54.set(param_0[0][0], param_0[1][0], param_0[2][0]);
+void JPASetRMtxSTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4],
+ EGG::Vector3f* param_2, EGG::Vector3f* param_3) {
+ EGG::Vector3f aTStack_54(param_0[0][0], param_0[1][0], param_0[2][0]);
param_2->x = aTStack_54.length();
aTStack_54.set(param_0[0][1], param_0[1][1], param_0[2][1]);
param_2->y = aTStack_54.length();
@@ -133,7 +110,6 @@ void JPASetRMtxSTVecfromMtx(
param_3->set(param_0[0][3], param_0[1][3], param_0[2][3]);
}
-/* 80280984-80280A48 27B2C4 00C4+00 0/0 2/1 0/0 .text JPACalcKeyAnmValue__FfUsPCf */
f32 JPACalcKeyAnmValue(f32 param_0, u16 param_1, f32 const* param_2) {
if (param_0 < param_2[0]) {
return param_2[1];
diff --git a/src/JSystem/JParticle/JPAParticle.cpp b/src/JSystem/JParticle/JPAParticle.cpp
index 5b90f05d..4d205d2c 100644
--- a/src/JSystem/JParticle/JPAParticle.cpp
+++ b/src/JSystem/JParticle/JPAParticle.cpp
@@ -1,8 +1,3 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAParticle
-//
-
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPABaseShape.h"
#include "JSystem/JParticle/JPAChildShape.h"
@@ -11,13 +6,10 @@
#include "JSystem/JParticle/JPAExtraShape.h"
#include "egg/math/eggVector.h"
-/* 8027EFA4-8027EFEC 2798E4 0048+00 0/0 11/11 1/1 .text __dt__19JPAParticleCallBackFv */
JPAParticleCallBack::~JPAParticleCallBack() {
/* empty function */
}
-/* 8027EFEC-8027F8C8 27992C 08DC+00 0/0 1/1 0/0 .text
- * init_p__15JPABaseParticleFP18JPAEmitterWorkData */
void JPABaseParticle::init_p(JPAEmitterWorkData* work) {
JPABaseEmitter* emtr = work->mpEmtr;
JPAExtraShape* esp = work->mpRes->getEsp();
@@ -128,8 +120,6 @@ void JPABaseParticle::init_p(JPAEmitterWorkData* work) {
}
}
-/* 8027F8C8-8027FFD0 27A208 0708+00 0/0 1/1 0/0 .text
- * init_c__15JPABaseParticleFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPABaseParticle::init_c(JPAEmitterWorkData* work, JPABaseParticle* parent) {
JPABaseEmitter* emtr = work->mpEmtr;
JPAChildShape* csp = work->mpRes->getCsp();
@@ -214,8 +204,6 @@ void JPABaseParticle::init_c(JPAEmitterWorkData* work, JPABaseParticle* parent)
mTexAnmIdx = 0;
}
-/* 8027FFD0-80280260 27A910 0290+00 0/0 1/1 0/0 .text
- * calc_p__15JPABaseParticleFP18JPAEmitterWorkData */
bool JPABaseParticle::calc_p(JPAEmitterWorkData* work) {
if (++mAge >= mLifeTime) {
return true;
@@ -262,8 +250,6 @@ bool JPABaseParticle::calc_p(JPAEmitterWorkData* work) {
return false;
}
-/* 80280260-802804C8 27ABA0 0268+00 0/0 1/1 0/0 .text
- * calc_c__15JPABaseParticleFP18JPAEmitterWorkData */
bool JPABaseParticle::calc_c(JPAEmitterWorkData* work) {
if (++mAge >= mLifeTime) {
return true;
@@ -306,8 +292,6 @@ bool JPABaseParticle::calc_c(JPAEmitterWorkData* work) {
return false;
}
-/* 802804C8-80280548 27AE08 0080+00 1/1 0/0 0/0 .text
- * canCreateChild__15JPABaseParticleFP18JPAEmitterWorkData */
bool JPABaseParticle::canCreateChild(JPAEmitterWorkData* work) {
JPAChildShape* csp = work->mpRes->getCsp();
bool ret = false;
@@ -318,16 +302,10 @@ bool JPABaseParticle::canCreateChild(JPAEmitterWorkData* work) {
return ret;
}
-/* 80280548-80280568 27AE88 0020+00 0/0 3/3 0/0 .text
- * getWidth__15JPABaseParticleCFPC14JPABaseEmitter */
f32 JPABaseParticle::getWidth(JPABaseEmitter const* emtr) const {
- f32 scale = 2.0f * mParticleScaleX;
- return scale * emtr->mpEmtrMgr->pWd->mGlobalPtclScl.x;
+ return mParticleScaleX * 2.0f * emtr->mpEmtrMgr->pWd->mGlobalPtclScl.x;
}
-/* 80280568-80280588 27AEA8 0020+00 0/0 3/3 0/0 .text
- * getHeight__15JPABaseParticleCFPC14JPABaseEmitter */
f32 JPABaseParticle::getHeight(JPABaseEmitter const* emtr) const {
- f32 scale = 2.0f * mParticleScaleY;
- return scale * emtr->mpEmtrMgr->pWd->mGlobalPtclScl.y;
+ return mParticleScaleY * 2.0f * emtr->mpEmtrMgr->pWd->mGlobalPtclScl.y;
}
diff --git a/src/JSystem/JParticle/JPAResource.cpp b/src/JSystem/JParticle/JPAResource.cpp
index d678396e..33dcaad2 100644
--- a/src/JSystem/JParticle/JPAResource.cpp
+++ b/src/JSystem/JParticle/JPAResource.cpp
@@ -1,8 +1,3 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAResource
-//
-
#include "egg/core/eggHeap.h"
#include "JSystem/JParticle/JPAResource.h"
#include "JSystem/JParticle/JPABaseShape.h"
@@ -14,39 +9,23 @@
#include "JSystem/JParticle/JPAKeyBlock.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAResourceManager.h"
+#include "JSystem/JUtility/JUTAssert.h"
#include "rvl/GX.h"
-/* 80274010-80274080 26E950 0070+00 0/0 1/1 0/0 .text __ct__11JPAResourceFv */
JPAResource::JPAResource() {
- mpDrawEmitterChildFuncList = NULL;
- mpDrawEmitterFuncList = NULL;
- mpCalcEmitterFuncList = NULL;
- mpDrawParticleChildFuncList = NULL;
- mpCalcParticleChildFuncList = NULL;
- mpDrawParticleFuncList = NULL;
- mpCalcParticleFuncList = NULL;
- mpBaseShape = NULL;
- mpExtraShape = NULL;
- mpChildShape = NULL;
- mpExTexShape = NULL;
- mpDynamicsBlock = NULL;
- mpFieldBlocks = NULL;
- mpKeyBlocks = NULL;
+ mpCalcEmitterFuncList = mpDrawEmitterFuncList = mpDrawEmitterChildFuncList = NULL;
+ mpCalcParticleFuncList = mpDrawParticleFuncList = mpCalcParticleChildFuncList = mpDrawParticleChildFuncList = NULL;
+ pBsp = NULL;
+ pEsp = NULL;
+ pCsp = NULL;
+ pEts = NULL;
+ pDyn = NULL;
+ ppFld = NULL;
+ ppKey = NULL;
mpTDB1 = NULL;
- mpDrawParticleChildFuncListNum = 0;
- mpCalcParticleChildFuncListNum = 0;
- mpDrawParticleFuncListNum = 0;
- mpCalcParticleFuncListNum = 0;
- mpDrawEmitterChildFuncListNum = 0;
- mpDrawEmitterFuncListNum = 0;
- mpCalcEmitterFuncListNum = 0;
- mTDB1Num = 0;
- mKeyBlockNum = 0;
- mFieldBlockNum = 0;
- mUsrIdx = 0;
+ mUsrIdx = fldNum = keyNum = texNum = mpCalcEmitterFuncListNum = mpDrawEmitterFuncListNum = mpDrawEmitterChildFuncListNum = mpCalcParticleFuncListNum = mpDrawParticleFuncListNum = mpCalcParticleChildFuncListNum = mpDrawParticleChildFuncListNum = 0;
}
-/* 803C40C0-803C4220 0211E0 0144+1C 2/2 0/0 0/0 .data jpa_pos */
static u8 jpa_pos[324] ALIGN_DECL(32) = {
0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0xCE, 0x00, 0x00, 0xCE, 0x00, 0xE7, 0x00, 0x00, 0x19,
0x00, 0x00, 0x19, 0xCE, 0x00, 0xE7, 0xCE, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE,
@@ -71,39 +50,38 @@ static u8 jpa_pos[324] ALIGN_DECL(32) = {
0x00, 0x00, 0x00, 0xCE,
};
-/* 803C4220-803C4240 021340 0020+00 2/2 0/0 0/0 .data jpa_crd */
static u8 jpa_crd[32] ALIGN_DECL(32) = {
0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x02, 0x01, 0x00, 0x01,
0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02,
};
-/* 80274080-802755E8 26E9C0 1568+00 2/0 1/1 0/0 .text init__11JPAResourceFP7JKRHeap */
void JPAResource::init(EGG::Heap* heap) {
- // The s32s here are probably fake but fixes the regswaps
- s32 is_glbl_clr_anm = mpBaseShape->isGlblClrAnm();
- s32 is_glbl_tex_anm = mpBaseShape->isGlblTexAnm();
- BOOL is_prm_anm = mpBaseShape->isPrmAnm();
- BOOL is_env_anm = mpBaseShape->isEnvAnm();
- BOOL is_tex_anm = mpBaseShape->isTexAnm();
- BOOL is_tex_crd_anm = mpBaseShape->isTexCrdAnm();
- BOOL is_prj_tex = mpBaseShape->isPrjTex();
- BOOL is_enable_scale_anm = mpExtraShape != NULL && mpExtraShape->isEnableScaleAnm();
- BOOL is_enable_alpha_anm = mpExtraShape != NULL && mpExtraShape->isEnableAlphaAnm();
- BOOL is_enable_alpha_flick = mpExtraShape != NULL && mpExtraShape->isEnableAlphaAnm()
- && mpExtraShape->isEnableAlphaFlick();
- BOOL is_enable_rotate_anm = mpExtraShape != NULL && mpExtraShape->isEnableRotateAnm();
+ // The s32s here are fake but fixes the regswaps
+ s32 is_glbl_clr_anm = pBsp->isGlblClrAnm();
+ s32 is_glbl_tex_anm = pBsp->isGlblTexAnm();
+ BOOL is_prm_anm = pBsp->isPrmAnm();
+ BOOL is_env_anm = pBsp->isEnvAnm();
+ BOOL is_tex_anm = pBsp->isTexAnm();
+ BOOL is_tex_crd_anm = pBsp->isTexCrdAnm();
+ BOOL is_prj_tex = pBsp->isPrjTex();
+ BOOL is_enable_scale_anm = pEsp != NULL && pEsp->isEnableScaleAnm();
+ BOOL is_enable_alpha_anm = pEsp != NULL && pEsp->isEnableAlphaAnm();
+ BOOL is_enable_alpha_flick = pEsp != NULL && pEsp->isEnableAlphaAnm()
+ && pEsp->isEnableAlphaFlick();
+ BOOL is_enable_rotate_anm = pEsp != NULL && pEsp->isEnableRotateAnm();
BOOL is_rotate_on = is_enable_rotate_anm
- || (mpChildShape != NULL && mpChildShape->isRotateOn());
- BOOL base_type_5_6 = mpBaseShape->getType() == 5 || mpBaseShape->getType() == 6;
- BOOL base_type_0 = mpBaseShape->getType() == 0;
- BOOL base_type_0_1 = mpBaseShape->getType() == 0 || mpBaseShape->getType() == 1;
- BOOL child_type_5_6 = mpChildShape != NULL
- && (mpChildShape->getType() == 5 || mpChildShape->getType() == 6);
- BOOL child_type_0 = mpChildShape != NULL && mpChildShape->getType() == 0;
- BOOL child_type_0_1 = mpChildShape != NULL
- && (mpChildShape->getType() == 0 || mpChildShape->getType() == 1);
- BOOL is_draw_parent = !mpBaseShape->isNoDrawParent();
- BOOL is_draw_child = !mpBaseShape->isNoDrawChild();
+ || (pCsp != NULL && pCsp->isRotateOn());
+ BOOL base_type_5_6 = pBsp->getType() == 5 || pBsp->getType() == 6;
+ BOOL base_type_0 = pBsp->getType() == 0;
+ BOOL base_type_0_1 = pBsp->getType() == 0 || pBsp->getType() == 1;
+ BOOL child_type_5_6 = pCsp != NULL
+ && (pCsp->getType() == 5 || pCsp->getType() == 6);
+ BOOL child_type_0 = pCsp != NULL && pCsp->getType() == 0;
+ BOOL child_type_0_1 = pCsp != NULL
+ && (pCsp->getType() == 0 || pCsp->getType() == 1);
+ BOOL is_draw_parent = !pBsp->isNoDrawParent();
+ BOOL is_draw_child = !pBsp->isNoDrawChild();
+ int func_no = 0;
if (is_glbl_tex_anm && is_tex_anm) {
mpCalcEmitterFuncListNum++;
@@ -126,10 +104,10 @@ void JPAResource::init(EGG::Heap* heap) {
(EmitterFunc*)heap->alloc(mpCalcEmitterFuncListNum * 4, 4);
}
- int func_no = 0;
+ func_no = 0;
if (is_glbl_tex_anm && is_tex_anm) {
- switch (mpBaseShape->getTexAnmType()) {
+ switch ((int)pBsp->getTexAnmType()) {
case 0:
mpCalcEmitterFuncList[func_no] = &JPACalcTexIdxNormal;
break;
@@ -159,7 +137,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
if (is_prm_anm || is_env_anm) {
- switch (mpBaseShape->getClrAnmType()) {
+ switch ((int)pBsp->getClrAnmType()) {
case 0:
mpCalcEmitterFuncList[func_no] = &JPACalcClrIdxNormal;
break;
@@ -176,6 +154,7 @@ void JPAResource::init(EGG::Heap* heap) {
mpCalcEmitterFuncList[func_no] = &JPACalcClrIdxRandom;
break;
}
+ func_no++;
}
}
@@ -202,9 +181,9 @@ void JPAResource::init(EGG::Heap* heap) {
}
if (is_enable_scale_anm) {
- if (mpBaseShape->getType() != 0) {
- if (mpExtraShape->isScaleXYDiff()) {
- if (mpExtraShape->getScaleAnmTypeX() == 0 && mpExtraShape->getScaleAnmTypeY() == 0) {
+ if (pBsp->getType() != 0) {
+ if (pEsp->isScaleXYDiff()) {
+ if (pEsp->getScaleAnmTypeX() == 0 && pEsp->getScaleAnmTypeY() == 0) {
mpCalcParticleFuncListNum++;
} else {
mpCalcParticleFuncListNum++;
@@ -226,7 +205,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (!is_glbl_tex_anm && is_tex_anm) {
- switch (mpBaseShape->getTexAnmType()) {
+ switch ((int)pBsp->getTexAnmType()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcTexIdxNormal;
break;
@@ -266,7 +245,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
if (is_prm_anm || is_env_anm) {
- switch (mpBaseShape->getClrAnmType()) {
+ switch ((int)pBsp->getClrAnmType()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcClrIdxNormal;
break;
@@ -291,12 +270,12 @@ void JPAResource::init(EGG::Heap* heap) {
}
if (is_enable_scale_anm) {
- if (mpBaseShape->getType() != 0) {
- if (mpExtraShape->isScaleXYDiff()) {
+ if (pBsp->getType() != 0) {
+ if (pEsp->isScaleXYDiff()) {
mpCalcParticleFuncList[func_no] = &JPACalcScaleY;
func_no++;
- if (mpExtraShape->getScaleAnmTypeY() != 0 || mpExtraShape->getScaleAnmTypeX() != 0) {
- switch (mpExtraShape->getScaleAnmTypeY()) {
+ if (pEsp->getScaleAnmTypeY() != 0 || pEsp->getScaleAnmTypeX() != 0) {
+ switch (pEsp->getScaleAnmTypeY()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcScaleAnmNormal;
break;
@@ -316,7 +295,7 @@ void JPAResource::init(EGG::Heap* heap) {
}
mpCalcParticleFuncList[func_no] = &JPACalcScaleX;
func_no++;
- switch (mpExtraShape->getScaleAnmTypeX()) {
+ switch (pEsp->getScaleAnmTypeX()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcScaleAnmNormal;
break;
@@ -327,13 +306,14 @@ void JPAResource::init(EGG::Heap* heap) {
mpCalcParticleFuncList[func_no] = &JPACalcScaleAnmReverseX;
break;
}
+ func_no++;
}
- if (mpChildShape != NULL && mpChildShape->isScaleOutOn()) {
+ if (pCsp != NULL && pCsp->isScaleOutOn()) {
mpCalcParticleChildFuncListNum++;
}
- if (mpChildShape != NULL && mpChildShape->isAlphaOutOn()) {
+ if (pCsp != NULL && pCsp->isAlphaOutOn()) {
mpCalcParticleChildFuncListNum++;
}
@@ -344,25 +324,26 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
- if (mpChildShape != NULL && mpChildShape->isScaleOutOn()) {
+ if (pCsp != NULL && pCsp->isScaleOutOn()) {
mpCalcParticleChildFuncList[func_no] = &JPACalcChildScaleOut;
func_no++;
}
- if (mpChildShape != NULL && mpChildShape->isAlphaOutOn()) {
+ if (pCsp != NULL && pCsp->isAlphaOutOn()) {
mpCalcParticleChildFuncList[func_no] = &JPACalcChildAlphaOut;
+ func_no++;
}
if (is_draw_parent && base_type_5_6) {
mpDrawEmitterFuncListNum++;
- if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
+ if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawEmitterFuncListNum++;
}
}
mpDrawEmitterFuncListNum++;
- if (mpExTexShape != NULL) {
+ if (pEts != NULL) {
mpDrawEmitterFuncListNum++;
}
@@ -392,14 +373,14 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (is_draw_parent && base_type_5_6) {
- if (mpBaseShape->getType() == 5) {
+ if (pBsp->getType() == 5) {
mpDrawEmitterFuncList[func_no] = &JPADrawStripe;
func_no++;
} else {
mpDrawEmitterFuncList[func_no] = &JPADrawStripeX;
func_no++;
}
- if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
+ if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawEmitterFuncList[func_no] = &fn_8031C2C0;
func_no++;
}
@@ -408,7 +389,7 @@ void JPAResource::init(EGG::Heap* heap) {
mpDrawEmitterFuncList[func_no] = &JPADrawEmitterCallBackB;
func_no++;
- if (mpExTexShape != NULL) {
+ if (pEts != NULL) {
mpDrawEmitterFuncList[func_no] = &JPALoadExTex;
func_no++;
}
@@ -458,17 +439,22 @@ void JPAResource::init(EGG::Heap* heap) {
if (is_glbl_clr_anm) {
if (base_type_5_6 || !is_enable_alpha_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistPrmEnv;
+ func_no++;
} else if (is_enable_alpha_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistEnv;
+ func_no++;
}
} else if (!is_prm_anm && !is_enable_alpha_anm) {
if (!is_env_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistPrmEnv;
+ func_no++;
} else {
mpDrawEmitterFuncList[func_no] = &JPARegistPrm;
+ func_no++;
}
} else if (!is_env_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistEnv;
+ func_no++;
}
if (is_draw_child && child_type_5_6) {
@@ -481,8 +467,8 @@ void JPAResource::init(EGG::Heap* heap) {
mpDrawEmitterChildFuncListNum++;
}
- if (mpChildShape != NULL && ((!mpChildShape->isAlphaOutOn() && !mpChildShape->isAlphaInherited()
- && !mpChildShape->isColorInherited()) || is_draw_child && child_type_5_6)) {
+ if (pCsp != NULL && ((!pCsp->isAlphaOutOn() && !pCsp->isAlphaInherited()
+ && !pCsp->isColorInherited()) || is_draw_child && child_type_5_6)) {
mpDrawEmitterChildFuncListNum++;
}
@@ -494,7 +480,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (is_draw_child && child_type_5_6) {
- if (mpChildShape->getType() == 5) {
+ if (pCsp->getType() == 5) {
mpDrawEmitterChildFuncList[func_no] = &JPADrawStripe;
func_no++;
} else {
@@ -511,11 +497,14 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
- if (mpChildShape != NULL) {
- if (!mpChildShape->isAlphaOutOn() && !mpChildShape->isAlphaInherited() && !mpChildShape->isColorInherited()) {
+ if (pCsp != NULL) {
+ if (!pCsp->isAlphaOutOn() && !pCsp->isAlphaInherited()
+ && !pCsp->isColorInherited()) {
mpDrawEmitterChildFuncList[func_no] = &JPARegistChildPrmEnv;
+ func_no++;
} else if (is_draw_child && child_type_5_6) {
mpDrawEmitterChildFuncList[func_no] = &fn_8031DBA0;
+ func_no++;
}
}
@@ -528,14 +517,14 @@ void JPAResource::init(EGG::Heap* heap) {
if (!is_glbl_tex_anm && is_tex_anm) {
mpDrawParticleFuncListNum++;
}
-
+
if (base_type_0_1 && is_enable_scale_anm) {
mpDrawParticleFuncListNum++;
} else {
if (is_tex_crd_anm && !is_prj_tex) {
mpDrawParticleFuncListNum++;
}
- if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
+ if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawParticleFuncListNum++;
}
}
@@ -553,7 +542,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (is_draw_parent && !base_type_5_6) {
- switch (mpBaseShape->getType()) {
+ switch (pBsp->getType()) {
case 2:
if (is_enable_rotate_anm) {
mpDrawParticleFuncList[func_no] = &JPADrawRotBillboard;
@@ -615,7 +604,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
- if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
+ if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawParticleFuncList[func_no] = &fn_8031A8C0;
func_no++;
}
@@ -625,23 +614,29 @@ void JPAResource::init(EGG::Heap* heap) {
if (is_prm_anm) {
if (is_env_anm) {
mpDrawParticleFuncList[func_no] = &JPARegistPrmAlphaEnv;
+ func_no++;
} else {
mpDrawParticleFuncList[func_no] = &JPARegistPrmAlpha;
+ func_no++;
}
} else if (is_enable_alpha_anm) {
if (is_env_anm) {
mpDrawParticleFuncList[func_no] = &JPARegistAlphaEnv;
+ func_no++;
} else {
mpDrawParticleFuncList[func_no] = &JPARegistAlpha;
+ func_no++;
}
} else if (is_env_anm) {
mpDrawParticleFuncList[func_no] = &JPARegistEnv;
+ func_no++;
}
} else if (is_enable_alpha_anm && !base_type_5_6) {
mpDrawParticleFuncList[func_no] = &JPARegistAlpha;
+ func_no++;
}
- if (is_draw_child && mpChildShape != NULL && !child_type_5_6) {
+ if (is_draw_child && pCsp != NULL && !child_type_5_6) {
mpDrawParticleChildFuncListNum++;
}
@@ -651,8 +646,8 @@ void JPAResource::init(EGG::Heap* heap) {
mpDrawParticleChildFuncListNum++;
}
- if (mpChildShape != NULL && (mpChildShape->isAlphaOutOn() || mpChildShape->isAlphaInherited()
- || mpChildShape->isColorInherited())) {
+ if (pCsp != NULL && (pCsp->isAlphaOutOn() || pCsp->isAlphaInherited()
+ || pCsp->isColorInherited())) {
mpDrawParticleChildFuncListNum++;
}
@@ -663,8 +658,8 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
- if (is_draw_child && mpChildShape != NULL && !child_type_5_6) {
- switch (mpChildShape->getType()) {
+ if (is_draw_child && pCsp != NULL && !child_type_5_6) {
+ switch (pCsp->getType()) {
case 2:
if (is_rotate_on) {
mpDrawParticleChildFuncList[func_no] = &JPADrawRotBillboard;
@@ -717,14 +712,13 @@ void JPAResource::init(EGG::Heap* heap) {
}
}
- if (mpChildShape != NULL && (mpChildShape->isAlphaOutOn() || mpChildShape->isAlphaInherited()
- || mpChildShape->isColorInherited())) {
+ if (pCsp != NULL && (pCsp->isAlphaOutOn() || pCsp->isAlphaInherited()
+ || pCsp->isColorInherited())) {
mpDrawParticleChildFuncList[func_no] = &JPARegistPrmAlphaEnv;
+ func_no++;
}
}
-/* 802755E8-80275A94 26FF28 04AC+00 0/0 1/1 0/0 .text
- * calc__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter */
bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
work->mpEmtr = emtr;
work->mpRes = this;
@@ -753,8 +747,8 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
} else {
calcKey(work);
- for (int i = mFieldBlockNum - 1; i >= 0; i--) {
- mpFieldBlocks[i]->initOpParam();
+ for (int i = fldNum - 1; i >= 0; i--) {
+ ppFld[i]->initOpParam();
}
if (emtr->mpEmtrCallBack != NULL) {
@@ -770,12 +764,12 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
(*mpCalcEmitterFuncList[i])(work);
}
- for (int i = mFieldBlockNum - 1; i >= 0; i--) {
- mpFieldBlocks[i]->prepare(work);
+ for (int i = fldNum - 1; i >= 0; i--) {
+ ppFld[i]->prepare(work);
}
if (!emtr->checkStatus(8)) {
- mpDynamicsBlock->create(work);
+ pDyn->create(work);
}
if (emtr->mpEmtrCallBack != NULL) {
@@ -785,23 +779,19 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
}
}
- JPANode<JPABaseParticle>* node = emtr->mAlivePtclBase.getFirst();
- JPANode<JPABaseParticle>* next;
- while (node != emtr->mAlivePtclBase.getEnd()) {
+ JPANode<JPABaseParticle>* next = NULL;
+ for (JPANode<JPABaseParticle>* node = emtr->mAlivePtclBase.getFirst(); node != emtr->mAlivePtclBase.getEnd(); node = next) {
next = node->getNext();
if (node->getObject()->calc_p(work)) {
emtr->mpPtclPool->push_front(emtr->mAlivePtclBase.erase(node));
}
- node = next;
}
- node = emtr->mAlivePtclChld.getFirst();
- while (node != emtr->mAlivePtclChld.getEnd()) {
+ for (JPANode<JPABaseParticle>* node = emtr->mAlivePtclChld.getFirst(); node != emtr->mAlivePtclChld.getEnd(); node = next) {
next = node->getNext();
if (node->getObject()->calc_c(work)) {
emtr->mpPtclPool->push_front(emtr->mAlivePtclChld.erase(node));
}
- node = next;
}
emtr->mTick++;
@@ -810,51 +800,47 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
return false;
}
-/* 80275A94-80275B74 2703D4 00E0+00 0/0 1/1 0/0 .text
- * draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter */
void JPAResource::draw(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
work->mpEmtr = emtr;
work->mpRes = this;
work->mDrawCount = 0;
calcWorkData_d(work);
- mpBaseShape->setGX(work);
+ pBsp->setGX(work);
for (s32 i = 1; i <= emtr->getDrawTimes(); i++) {
work->mDrawCount++;
- if (mpBaseShape->isDrawPrntAhead() && mpChildShape != NULL)
+ if (pBsp->isDrawPrntAhead() && pCsp != NULL)
drawC(work);
drawP(work);
- if (!mpBaseShape->isDrawPrntAhead() && mpChildShape != NULL)
+ if (!pBsp->isDrawPrntAhead() && pCsp != NULL)
drawC(work);
}
}
-/* 80275B74-80275EB0 2704B4 033C+00 1/1 0/0 0/0 .text drawP__11JPAResourceFP18JPAEmitterWorkData
- */
void JPAResource::drawP(JPAEmitterWorkData* work) {
work->mpEmtr->clearStatus(0x80);
- work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * mpBaseShape->getBaseSizeX();
- work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * mpBaseShape->getBaseSizeY();
+ work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * pBsp->getBaseSizeX();
+ work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * pBsp->getBaseSizeY();
- if (mpBaseShape->getType() == 0) {
+ if (pBsp->getType() == 0) {
work->mGlobalPtclScl.x *= 1.02f;
- } else if (mpBaseShape->getType() == 1) {
+ } else if (pBsp->getType() == 1) {
work->mGlobalPtclScl.x *= 1.02f;
work->mGlobalPtclScl.y *= 0.4f;
}
- if (mpExtraShape != NULL && mpExtraShape->isEnableScaleAnm()) {
- work->mPivot.x = mpExtraShape->getScaleCenterX() - 1.0f;
- work->mPivot.y = mpExtraShape->getScaleCenterY() - 1.0f;
+ if (pEsp != NULL && pEsp->isEnableScaleAnm()) {
+ work->mPivot.x = pEsp->getScaleCenterX() - 1.0f;
+ work->mPivot.y = pEsp->getScaleCenterY() - 1.0f;
} else {
work->mPivot.x = work->mPivot.y = 0.0f;
}
- work->mDirType = mpBaseShape->getDirType();
- work->mRotType = mpBaseShape->getRotType();
- work->mDLType = mpBaseShape->getType() == 4 || mpBaseShape->getType() == 8;
- work->mPlaneType = work->mDLType ? 2 : mpBaseShape->getBasePlaneType();
- work->mPrjType = mpBaseShape->isPrjTex() ? (mpBaseShape->isTexCrdAnm() ? 2 : 1) : 0;
+ work->mDirType = pBsp->getDirType();
+ work->mRotType = pBsp->getRotType();
+ work->mDLType = pBsp->getType() == 4 || pBsp->getType() == 8;
+ work->mPlaneType = work->mDLType ? 2 : pBsp->getBasePlaneType();
+ work->mPrjType = pBsp->isPrjTex() ? (pBsp->isTexCrdAnm() ? 2 : 1) : 0;
work->mpAlivePtcl = &work->mpEmtr->mAlivePtclBase;
setPTev();
@@ -863,7 +849,7 @@ void JPAResource::drawP(JPAEmitterWorkData* work) {
(*mpDrawEmitterFuncList[i])(work);
}
- if (mpBaseShape->isDrawFwdAhead()) {
+ if (pBsp->isDrawFwdAhead()) {
JPANode<JPABaseParticle>* node = work->mpEmtr->mAlivePtclBase.getLast();
for (; node != work->mpEmtr->mAlivePtclBase.getEnd(); node = node->getPrev()) {
work->mpCurNode = node;
@@ -892,32 +878,30 @@ void JPAResource::drawP(JPAEmitterWorkData* work) {
}
}
-/* 80275EB0-802761A8 2707F0 02F8+00 1/1 0/0 0/0 .text drawC__11JPAResourceFP18JPAEmitterWorkData
- */
void JPAResource::drawC(JPAEmitterWorkData* work) {
work->mpEmtr->setStatus(0x80);
- if (mpChildShape->isScaleInherited()) {
- work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * mpBaseShape->getBaseSizeX();
- work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * mpBaseShape->getBaseSizeY();
+ if (pCsp->isScaleInherited()) {
+ work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * pBsp->getBaseSizeX();
+ work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * pBsp->getBaseSizeY();
} else {
- work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * mpChildShape->getScaleX();
- work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * mpChildShape->getScaleY();
+ work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * pCsp->getScaleX();
+ work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * pCsp->getScaleY();
}
- if (mpChildShape->getType() == 0) {
+ if (pCsp->getType() == 0) {
work->mGlobalPtclScl.x *= 1.02f;
- } else if (mpChildShape->getType() == 1) {
+ } else if (pCsp->getType() == 1) {
work->mGlobalPtclScl.x *= 1.02f;
work->mGlobalPtclScl.y *= 0.4f;
}
work->mPivot.x = work->mPivot.y = 0.0f;
- work->mDirType = mpChildShape->getDirType();
- work->mRotType = mpChildShape->getRotType();
- work->mDLType = mpChildShape->getType() == 4 || mpChildShape->getType() == 8;
- work->mPlaneType = work->mDLType ? 2 : mpChildShape->getBasePlaneType();
+ work->mDirType = pCsp->getDirType();
+ work->mRotType = pCsp->getRotType();
+ work->mDLType = pCsp->getType() == 4 || pCsp->getType() == 8;
+ work->mPlaneType = work->mDLType ? 2 : pCsp->getBasePlaneType();
work->mPrjType = 0;
work->mpAlivePtcl = &work->mpEmtr->mAlivePtclChld;
@@ -927,7 +911,7 @@ void JPAResource::drawC(JPAEmitterWorkData* work) {
(*mpDrawEmitterChildFuncList[i])(work);
}
- if (mpBaseShape->isDrawFwdAhead()) {
+ if (pBsp->isDrawFwdAhead()) {
JPANode<JPABaseParticle>* node = work->mpEmtr->mAlivePtclChld.getLast();
for (; node != work->mpEmtr->mAlivePtclChld.getEnd(); node = node->getPrev()) {
work->mpCurNode = node;
@@ -956,40 +940,33 @@ void JPAResource::drawC(JPAEmitterWorkData* work) {
}
}
-/* 802761A8-8027642C 270AE8 0284+00 1/1 0/0 0/0 .text setPTev__11JPAResourceFv */
void JPAResource::setPTev() {
GXTexCoordID tex_coord = GX_TEXCOORD1;
u8 tev_stages = 1;
u8 tex_gens = 1;
u8 ind_stages = 0;
- int base_plane_type = (mpBaseShape->getType() == 3 || mpBaseShape->getType() == 7) ?
- mpBaseShape->getBasePlaneType() : 0;
- int center_offset;
- if (mpExtraShape != NULL) {
- center_offset =
- (mpExtraShape->getScaleCenterX() + 3 * mpExtraShape->getScaleCenterY()) * 0xC;
- } else {
- center_offset = 0x30;
- }
+ int base_plane_type = (pBsp->getType() == 3 || pBsp->getType() == 7) ?
+ pBsp->getBasePlaneType() : 0;
+ int center_offset = pEsp != NULL ? (pEsp->getScaleCenterX() + 3 * pEsp->getScaleCenterY()) * 0xC : 0x30;
int pos_offset = center_offset + base_plane_type * 0x6C;
- int crd_offset = (mpBaseShape->getTilingS() + 2 * mpBaseShape->getTilingT()) * 8;
+ int crd_offset = (pBsp->getTilingS() + 2 * pBsp->getTilingT()) * 8;
GXSetArray(GX_VA_POS, jpa_pos + pos_offset, 3);
GXSetArray(GX_VA_TEX0, jpa_crd + crd_offset, 2);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
- if (mpExTexShape != NULL) {
- if (mpExTexShape->isUseIndirect()) {
- GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP2);
+ if (pEts != NULL) {
+ if (pEts->isUseIndirect()) {
+ GXSetIndTexOrder(GX_INDTEXSTAGE0, tex_coord, GX_TEXMAP2);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
- GXSetIndTexMtx(GX_ITM_0, (f32(*)[3])mpExTexShape->getIndTexMtx(), mpExTexShape->getExpScale());
+ GXSetIndTexMtx(GX_ITM_0, (f32(*)[3])pEts->getIndTexMtx(), pEts->getExpScale());
GXSetTevIndirect(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_ITF_8, GX_ITB_STU, GX_ITM_0,
GX_ITW_OFF, GX_ITW_OFF, 0, 0, GX_ITBA_OFF);
ind_stages++;
tex_gens++;
tex_coord = GX_TEXCOORD2;
}
- if (mpExTexShape->isUseSecTex()) {
+ if (pEts->isUseSecTex()) {
GXSetTevOrder(GX_TEVSTAGE1, tex_coord, GX_TEXMAP3, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
@@ -1004,7 +981,7 @@ void JPAResource::setPTev() {
GXSetNumTevStages(tev_stages);
GXSetNumIndStages(ind_stages);
- if (mpBaseShape->isClipOn()) {
+ if (pBsp->isClipOn()) {
GXSetMisc(GX_MT_XF_FLUSH, 8);
GXSetClipMode(GX_CLIP_ENABLE);
} else {
@@ -1013,11 +990,9 @@ void JPAResource::setPTev() {
GXSetNumTexGens(tex_gens);
}
-/* 8027642C-8027658C 270D6C 0160+00 1/1 0/0 0/0 .text setCTev__11JPAResourceFP18JPAEmitterWorkData
- */
void JPAResource::setCTev(JPAEmitterWorkData* work) {
- int base_plane_type = (mpChildShape->getType() == 3 || mpChildShape->getType() == 7) ?
- mpChildShape->getBasePlaneType() : 0;
+ int base_plane_type = (pCsp->getType() == 3 || pCsp->getType() == 7) ?
+ pCsp->getBasePlaneType() : 0;
int pos_offset = 0x30 + base_plane_type * 0x6C;
GXSetArray(GX_VA_POS, jpa_pos + pos_offset, 3);
GXSetArray(GX_VA_TEX0, jpa_crd, 2);
@@ -1026,18 +1001,16 @@ void JPAResource::setCTev(JPAEmitterWorkData* work) {
GXSetTevDirect(GX_TEVSTAGE0);
GXSetNumTevStages(1);
GXSetNumIndStages(0);
- if (mpChildShape->isClipOn()) {
+ if (pCsp->isClipOn()) {
GXSetMisc(GX_MT_XF_FLUSH, 8);
GXSetClipMode(GX_CLIP_ENABLE);
} else {
GXSetClipMode(GX_CLIP_DISABLE);
}
GXSetNumTexGens(1);
- work->mpResMgr->load(work->mpRes->getTexIdx(mpChildShape->getTexIdx()), GX_TEXMAP1);
+ work->mpResMgr->load(work->mpRes->getTexIdx(pCsp->getTexIdx()), GX_TEXMAP1);
}
-/* 8027658C-80276608 270ECC 007C+00 0/0 1/1 0/0 .text
- * calc_p__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calc_p(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
if (mpCalcParticleFuncList != NULL) {
for (int i = mpCalcParticleFuncListNum - 1; i >= 0; i--) {
@@ -1046,8 +1019,6 @@ void JPAResource::calc_p(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
}
}
-/* 80276608-80276684 270F48 007C+00 0/0 1/1 0/0 .text
- * calc_c__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calc_c(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
if (mpCalcParticleChildFuncList != NULL) {
for (int i = mpCalcParticleChildFuncListNum - 1; i >= 0; i--) {
@@ -1056,20 +1027,16 @@ void JPAResource::calc_c(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
}
}
-/* 80276684-80276700 270FC4 007C+00 0/0 2/2 0/0 .text
- * calcField__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calcField(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
- for (int i = mFieldBlockNum - 1; i >= 0; i--) {
- mpFieldBlocks[i]->calc(work, ptcl);
+ for (int i = fldNum - 1; i >= 0; i--) {
+ ppFld[i]->calc(work, ptcl);
}
}
-/* 80276700-80276840 271040 0140+00 2/1 0/0 0/0 .text calcKey__11JPAResourceFP18JPAEmitterWorkData
- */
void JPAResource::calcKey(JPAEmitterWorkData* work) {
- for (int i = mKeyBlockNum - 1; i >= 0; i--) {
- f32 val = mpKeyBlocks[i]->calc(work->mpEmtr->mTick);
- switch (mpKeyBlocks[i]->getID()) {
+ for (int i = keyNum - 1; i >= 0; i--) {
+ f32 val = ppKey[i]->calc(work->mpEmtr->mTick);
+ switch (ppKey[i]->getID()) {
case 0:
work->mpEmtr->mRate = val;
break;
@@ -1097,20 +1064,20 @@ void JPAResource::calcKey(JPAEmitterWorkData* work) {
case 10:
work->mpEmtr->mScaleOut = val;
break;
+ default:
+ JUT_WARN(917, "%s", "JPA : WRONG ID in key data\n");
+ break;
}
}
}
-/* 80276840-80276A0C 271180 01CC+00 1/1 0/0 0/0 .text
- * calcWorkData_c__11JPAResourceFP18JPAEmitterWorkData */
void JPAResource::calcWorkData_c(JPAEmitterWorkData* work) {
work->mVolumeSize = work->mpEmtr->mVolumeSize;
work->mVolumeMinRad = work->mpEmtr->mVolumeMinRad;
work->mVolumeSweep = work->mpEmtr->mVolumeSweep;
- work->mVolumeX = 0;
- work->mVolumeAngleNum = 0;
+ work->mVolumeAngleNum = work->mVolumeX = 0;
work->mVolumeAngleMax = 1;
- work->mDivNumber = mpDynamicsBlock->getDivNumber() * 2 + 1;
+ work->mDivNumber = pDyn->getDivNumber() * 2 + 1;
Mtx local_scl_mtx, local_rot_mtx, global_mtx;
MTXScale(local_scl_mtx, work->mpEmtr->mLocalScl.x, work->mpEmtr->mLocalScl.y,
work->mpEmtr->mLocalScl.z);
@@ -1127,14 +1094,11 @@ void JPAResource::calcWorkData_c(JPAEmitterWorkData* work) {
MTXConcat(work->mGlobalRot, local_scl_mtx, work->mGlobalSR);
work->mEmitterPos.set(work->mpEmtr->mLocalTrs);
work->mGlobalScl.mul(work->mpEmtr->mGlobalScl, work->mpEmtr->mLocalScl);
-
JPAGetDirMtx(work->mpEmtr->mLocalDir, work->mDirectionMtx);
work->mPublicScale.set(work->mpEmtr->mGlobalScl);
MTXMultVec(global_mtx, work->mpEmtr->mLocalTrs, work->mGlobalPos);
}
-/* 80276A0C-80276A8C 27134C 0080+00 1/1 0/0 0/0 .text
- * calcWorkData_d__11JPAResourceFP18JPAEmitterWorkData */
void JPAResource::calcWorkData_d(JPAEmitterWorkData* work) {
Mtx mtx;
JPAGetXYZRotateMtx(work->mpEmtr->mLocalRot.x * 0xB6, work->mpEmtr->mLocalRot.y * 0xB6,
@@ -1142,9 +1106,3 @@ void JPAResource::calcWorkData_d(JPAEmitterWorkData* work) {
MTXConcat(work->mpEmtr->mGlobalRot, mtx, work->mGlobalRot);
MTXMultVecSR(work->mGlobalRot, work->mpEmtr->mLocalDir, work->mGlobalEmtrDir);
}
-/*
-#pragma push
-#pragma force_active on
-static u8 jpa_resource_padding[28] = {0};
-#pragma pop
-*/
diff --git a/src/JSystem/JParticle/JPAResourceLoader.cpp b/src/JSystem/JParticle/JPAResourceLoader.cpp
index c43c70ab..8928a575 100644
--- a/src/JSystem/JParticle/JPAResourceLoader.cpp
+++ b/src/JSystem/JParticle/JPAResourceLoader.cpp
@@ -1,8 +1,3 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAResourceLoader
-//
-
#include "egg/core/eggHeap.h"
#include "JSystem/JParticle/JPAResourceLoader.h"
#include "JSystem/JParticle/JPABaseShape.h"
@@ -14,12 +9,13 @@
#include "JSystem/JParticle/JPAKeyBlock.h"
#include "JSystem/JParticle/JPAResource.h"
#include "JSystem/JParticle/JPAResourceManager.h"
+#include "JSystem/JUtility/JUTAssert.h"
-/* 8027D8A0-8027D8E0 2781E0 0040+00 0/0 1/1 0/0 .text
- * __ct__17JPAResourceLoaderFPCUcP18JPAResourceManager */
JPAResourceLoader::JPAResourceLoader(u8 const* data, JPAResourceManager* mgr) {
if (*(u32*)(data + 4) == '2-11') {
load_jpc(data, mgr);
+ } else {
+ JUT_WARN(48, "JPA : wrong version file\n");
}
}
@@ -31,76 +27,89 @@ struct JPAResourceHeader {
/* 0x6 */ u8 mTDB1Num;
};
-/* 8027D8E0-8027DCA0 278220 03C0+00 1/1 0/0 0/0 .text
- * load_jpc__17JPAResourceLoaderFPCUcP18JPAResourceManager */
-void JPAResourceLoader::load_jpc(u8 const* data, JPAResourceManager* mgr) {
- EGG::Heap* heap = mgr->mpHeap;
- mgr->mResMax = *(u16*)(data + 8);
- mgr->mTexMax = *(u16*)(data + 0xA);
- mgr->mpResArr = new (heap, 4) JPAResource*[mgr->mResMax];
- mgr->mpTexArr = new (heap, 4) JPATexture*[mgr->mTexMax];
+void JPAResourceLoader::load_jpc(u8 const* data, JPAResourceManager* p_res_mgr) {
+ EGG::Heap* heap = p_res_mgr->mpHeap;
+ p_res_mgr->resMaxNum = *(u16*)(data + 8);
+ p_res_mgr->texMaxNum = *(u16*)(data + 0xA);
+ p_res_mgr->pResAry = new (heap) JPAResource*[p_res_mgr->resMaxNum];
+ p_res_mgr->pTexAry = new (heap) JPATexture*[p_res_mgr->texMaxNum];
+ JUT_ASSERT(199, (p_res_mgr->pResAry != NULL) && (p_res_mgr->pTexAry != 0));
u32 offset = 0x10;
for (int i = 0; i < *(u16*)(data + 8); i++) {
JPAResourceHeader* header = (JPAResourceHeader*)(data + offset);
- JPAResource* res = new (heap, 4) JPAResource();
- res->mFieldBlockNum = header->mFieldBlockNum;
- res->mpFieldBlocks = res->mFieldBlockNum != 0 ?
- new (heap, 4) JPAFieldBlock*[res->mFieldBlockNum] : NULL;
- res->mKeyBlockNum = header->mKeyBlockNum;
- res->mpKeyBlocks = res->mKeyBlockNum != 0 ?
- new (heap, 4) JPAKeyBlock*[res->mKeyBlockNum] : NULL;
- res->mTDB1Num = header->mTDB1Num;
- res->mpTDB1 = NULL;
- res->mUsrIdx = header->mUsrIdx;
+ JPAResource* p_res = new (heap) JPAResource();
+ JUT_ASSERT(211, p_res != NULL);
+ p_res->fldNum = header->mFieldBlockNum;
+ p_res->ppFld = p_res->fldNum != 0 ?
+ new (heap) JPAFieldBlock*[p_res->fldNum] : NULL;
+ JUT_ASSERT(216, (p_res->ppFld != NULL) || (p_res->fldNum == 0));
+ p_res->keyNum = header->mKeyBlockNum;
+ p_res->ppKey = p_res->keyNum != 0 ?
+ new (heap) JPAKeyBlock*[p_res->keyNum] : NULL;
+ JUT_ASSERT(221, (p_res->ppKey != NULL) || (p_res->keyNum == 0));
+ p_res->texNum = header->mTDB1Num;
+ p_res->mpTDB1 = NULL;
+ p_res->mUsrIdx = header->mUsrIdx;
offset += 8;
- u32 field_idx = 0;
- u32 key_idx = 0;
+ u32 fld_no = 0;
+ u32 key_no = 0;
for (int j = 0; j < header->mBlockNum; j++) {
u32 magic = *(u32*)(data + offset);
u32 size = *(u32*)(data + offset + 4);
switch (magic) {
case 'FLD1':
- res->mpFieldBlocks[field_idx] = new (heap, 4) JPAFieldBlock(data + offset, heap);
- field_idx++;
+ p_res->ppFld[fld_no] = new (heap) JPAFieldBlock(data + offset, heap);
+ JUT_ASSERT(244, p_res->ppFld[fld_no] != NULL);
+ fld_no++;
break;
case 'KFA1':
- res->mpKeyBlocks[key_idx] = new (heap, 4) JPAKeyBlock(data + offset);
- key_idx++;
+ p_res->ppKey[key_no] = new (heap) JPAKeyBlock(data + offset);
+ JUT_ASSERT(249, p_res->ppKey[key_no] != NULL);
+ key_no++;
break;
case 'BEM1':
- res->mpDynamicsBlock = new (heap, 4) JPADynamicsBlock(data + offset);
+ p_res->pDyn = new (heap) JPADynamicsBlock(data + offset);
+ JUT_ASSERT(254, p_res->pDyn != NULL);
break;
case 'BSP1':
- res->mpBaseShape = new (heap, 4) JPABaseShape(data + offset, heap);
+ p_res->pBsp = new (heap) JPABaseShape(data + offset, heap);
+ JUT_ASSERT(258, p_res->pBsp != NULL);
break;
case 'ESP1':
- res->mpExtraShape = new (heap, 4) JPAExtraShape(data + offset);
+ p_res->pEsp = new (heap) JPAExtraShape(data + offset);
+ JUT_ASSERT(262, p_res->pEsp != NULL);
break;
case 'SSP1':
- res->mpChildShape = new (heap, 4) JPAChildShape(data + offset);
+ p_res->pCsp = new (heap) JPAChildShape(data + offset);
+ JUT_ASSERT(266, p_res->pCsp != NULL);
break;
case 'ETX1':
- res->mpExTexShape = new (heap, 4) JPAExTexShape(data + offset);
+ p_res->pEts = new (heap) JPAExTexShape(data + offset);
+ JUT_ASSERT(270, p_res->pEts != NULL);
break;
case 'TDB1':
- res->mpTDB1 = (const u16*)(data + offset + 8);
+ p_res->mpTDB1 = (const u16*)(data + offset + 8);
+ break;
+ default:
+ JUT_WARN(275, "JPA : wrong type block in jpc file %d %x\n", header->mBlockNum, offset);
break;
}
offset += size;
}
- res->init(heap);
- mgr->registRes(res);
+ p_res->init(heap);
+ p_res_mgr->registRes(p_res);
}
offset = *(u32*)(data + 0xC);
for (int i = 0; i < *(u16*)(data + 0xA); i++) {
u32 size = *(u32*)(data + offset + 4);
- JPATexture* tex = new (heap, 4) JPATexture(data + offset);
- mgr->registTex(tex);
+ JPATexture* p_tex = new (heap) JPATexture(data + offset);
+ JUT_ASSERT(298, p_tex != NULL);
+ p_res_mgr->registTex(p_tex);
offset += size;
}
}
diff --git a/src/JSystem/JParticle/JPAResourceManager.cpp b/src/JSystem/JParticle/JPAResourceManager.cpp
index 09a80c74..430ad101 100644
--- a/src/JSystem/JParticle/JPAResourceManager.cpp
+++ b/src/JSystem/JParticle/JPAResourceManager.cpp
@@ -1,54 +1,47 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAResourceManager
-//
-
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JParticle/JPADynamicsBlock.h"
#include "JSystem/JParticle/JPAResource.h"
-#include "string.h"
+#include "JSystem/JUtility/JUTAssert.h"
+#include "egg/core/eggHeap.h"
+#include <cstring>
struct JPAResourceLoader {
- /* 8027D8A0 */ JPAResourceLoader(u8 const*, JPAResourceManager*);
+ JPAResourceLoader(u8 const*, JPAResourceManager*);
};
-/* 80273E10-80273E68 26E750 0058+00 0/0 2/2 0/0 .text __ct__18JPAResourceManagerFPCvP7JKRHeap */
-JPAResourceManager::JPAResourceManager(void const* pData, EGG::Heap* pHeap) {
- mpResArr = NULL;
- mpTexArr = NULL;
- mResMax = 0;
- mResNum = 0;
- mTexMax = 0;
- mTexNum = 0;
+JPAResourceManager::JPAResourceManager(void const* p_jpc, EGG::Heap* pHeap) {
+ pResAry = NULL;
+ pTexAry = NULL;
+ resMaxNum = 0;
+ resRegNum = 0;
+ texMaxNum = 0;
+ texRegNum = 0;
mpHeap = pHeap;
- JPAResourceLoader loader((u8 const*)pData, this);
+ JUT_ASSERT(49, (p_jpc != 0) && (pHeap != 0));
+ JPAResourceLoader loader((u8 const*)p_jpc, this);
}
-/* 80273E68-80273EA8 26E7A8 0040+00 1/1 1/1 0/0 .text getResource__18JPAResourceManagerCFUs */
JPAResource* JPAResourceManager::getResource(u16 usrIdx) const {
- for (u16 i = 0; i < mResNum; i++)
- if (mpResArr[i]->getUsrIdx() == usrIdx)
- return mpResArr[i];
+ for (u16 i = 0; i < resRegNum; i++)
+ if (pResAry[i]->getUsrIdx() == usrIdx)
+ return pResAry[i];
return NULL;
}
-/* 80273EA8-80273EEC 26E7E8 0044+00 0/0 2/2 0/0 .text
- * checkUserIndexDuplication__18JPAResourceManagerCFUs */
bool JPAResourceManager::checkUserIndexDuplication(u16 usrIdx) const {
- for (s32 i = 0; i < mResNum; i++)
- if (mpResArr[i]->getUsrIdx() == usrIdx)
+ for (s32 i = 0; i < resRegNum; i++)
+ if (pResAry[i]->getUsrIdx() == usrIdx)
return true;
return false;
}
-/* 80273EEC-80273F8C 26E82C 00A0+00 0/0 2/2 0/0 .text
- * swapTexture__18JPAResourceManagerFPC7ResTIMGPCc */
const EGG::ResTIMG* JPAResourceManager::swapTexture(EGG::ResTIMG const* img, char const* swapName) {
const EGG::ResTIMG* ret = NULL;
+ EGG::Texture* tex = NULL;
- for (s32 i = 0; i < mTexNum; i++) {
- if (strcmp(swapName, mpTexArr[i]->getName()) == 0) {
- EGG::Texture* tex = mpTexArr[i]->getJUTTexture();
+ for (s32 i = 0; i < texRegNum; i++) {
+ if (strcmp(swapName, pTexAry[i]->getName()) == 0) {
+ tex = pTexAry[i]->getJUTTexture();
ret = tex->getTexInfo();
tex->storeTIMG(img, (u8)0);
break;
@@ -58,21 +51,18 @@ const EGG::ResTIMG* JPAResourceManager::swapTexture(EGG::ResTIMG const* img, cha
return ret;
}
-/* 80273F8C-80273FAC 26E8CC 0020+00 0/0 1/1 0/0 .text
- * registRes__18JPAResourceManagerFP11JPAResource */
void JPAResourceManager::registRes(JPAResource* res) {
- mpResArr[mResNum] = res;
- mResNum++;
+ JUT_ASSERT(151, resRegNum < resMaxNum);
+ pResAry[resRegNum] = res;
+ resRegNum++;
}
-/* 80273FAC-80273FCC 26E8EC 0020+00 0/0 1/1 0/0 .text
- * registTex__18JPAResourceManagerFP10JPATexture */
void JPAResourceManager::registTex(JPATexture* tex) {
- mpTexArr[mTexNum] = tex;
- mTexNum++;
+ JUT_ASSERT(166, texRegNum < texMaxNum);
+ pTexAry[texRegNum] = tex;
+ texRegNum++;
}
-/* 80273FCC-80274010 26E90C 0044+00 0/0 6/6 0/0 .text getResUserWork__18JPAResourceManagerCFUs */
u32 JPAResourceManager::getResUserWork(u16 usrIdx) const {
u32 ret = 0;
diff --git a/src/JSystem/JParticle/JPATexture.cpp b/src/JSystem/JParticle/JPATexture.cpp
index d137b762..18826218 100644
--- a/src/JSystem/JParticle/JPATexture.cpp
+++ b/src/JSystem/JParticle/JPATexture.cpp
@@ -1,15 +1,8 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPATexture
-//
-
#include "JSystem/JParticle/JPATexture.h"
-/* 8027D7D4-8027D83C 278114 0068+00 0/0 1/1 0/0 .text __ct__10JPATextureFPCUc */
JPATexture::JPATexture(u8 const* pData) {
mpData = (const JPATextureData*)pData;
mTexture.store(&mpData->mResTIMG);
}
-/* 8027D83C-8027D8A0 27817C 0064+00 1/0 0/0 0/0 .text __dt__10JPATextureFv */
JPATexture::~JPATexture() {}