summaryrefslogtreecommitdiff
path: root/src/JSystem/JParticle/JPABaseShape.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/JSystem/JParticle/JPABaseShape.cpp')
-rw-r--r--src/JSystem/JParticle/JPABaseShape.cpp797
1 files changed, 326 insertions, 471 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();