diff options
| author | robojumper <robojumper@gmail.com> | 2026-05-07 21:23:47 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-05-07 21:23:47 +0200 |
| commit | f7b4c029fd5176e817e3de7209727480c445a3d2 (patch) | |
| tree | 9cddc9fa36ec13e7dac76c54d74257c61fe20b47 /src/JSystem/JParticle/JPABaseShape.cpp | |
| parent | ddb116187922a3f73ae3c97a136f499b7d724a2c (diff) | |
| parent | f4d163797f3c21e5a705b75043e0a8fbe7dc2460 (diff) | |
Merge pull request #313 from robojumper/vec-mtx-cleanup
Cleanup
Diffstat (limited to 'src/JSystem/JParticle/JPABaseShape.cpp')
| -rw-r--r-- | src/JSystem/JParticle/JPABaseShape.cpp | 797 |
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(); |
