summaryrefslogtreecommitdiff
path: root/src/JSystem/JParticle/JPAResource.cpp
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2026-05-07 21:23:47 +0200
committerGitHub <noreply@github.com>2026-05-07 21:23:47 +0200
commitf7b4c029fd5176e817e3de7209727480c445a3d2 (patch)
tree9cddc9fa36ec13e7dac76c54d74257c61fe20b47 /src/JSystem/JParticle/JPAResource.cpp
parentddb116187922a3f73ae3c97a136f499b7d724a2c (diff)
parentf4d163797f3c21e5a705b75043e0a8fbe7dc2460 (diff)
Merge pull request #313 from robojumper/vec-mtx-cleanup
Cleanup
Diffstat (limited to 'src/JSystem/JParticle/JPAResource.cpp')
-rw-r--r--src/JSystem/JParticle/JPAResource.cpp346
1 files changed, 152 insertions, 194 deletions
diff --git a/src/JSystem/JParticle/JPAResource.cpp b/src/JSystem/JParticle/JPAResource.cpp
index d678396e..33dcaad2 100644
--- a/src/JSystem/JParticle/JPAResource.cpp
+++ b/src/JSystem/JParticle/JPAResource.cpp
@@ -1,8 +1,3 @@
-//
-// Generated By: dol2asm
-// Translation Unit: JPAResource
-//
-
#include "egg/core/eggHeap.h"
#include "JSystem/JParticle/JPAResource.h"
#include "JSystem/JParticle/JPABaseShape.h"
@@ -14,39 +9,23 @@
#include "JSystem/JParticle/JPAKeyBlock.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAResourceManager.h"
+#include "JSystem/JUtility/JUTAssert.h"
#include "rvl/GX.h"
-/* 80274010-80274080 26E950 0070+00 0/0 1/1 0/0 .text __ct__11JPAResourceFv */
JPAResource::JPAResource() {
- mpDrawEmitterChildFuncList = NULL;
- mpDrawEmitterFuncList = NULL;
- mpCalcEmitterFuncList = NULL;
- mpDrawParticleChildFuncList = NULL;
- mpCalcParticleChildFuncList = NULL;
- mpDrawParticleFuncList = NULL;
- mpCalcParticleFuncList = NULL;
- mpBaseShape = NULL;
- mpExtraShape = NULL;
- mpChildShape = NULL;
- mpExTexShape = NULL;
- mpDynamicsBlock = NULL;
- mpFieldBlocks = NULL;
- mpKeyBlocks = NULL;
+ mpCalcEmitterFuncList = mpDrawEmitterFuncList = mpDrawEmitterChildFuncList = NULL;
+ mpCalcParticleFuncList = mpDrawParticleFuncList = mpCalcParticleChildFuncList = mpDrawParticleChildFuncList = NULL;
+ pBsp = NULL;
+ pEsp = NULL;
+ pCsp = NULL;
+ pEts = NULL;
+ pDyn = NULL;
+ ppFld = NULL;
+ ppKey = NULL;
mpTDB1 = NULL;
- mpDrawParticleChildFuncListNum = 0;
- mpCalcParticleChildFuncListNum = 0;
- mpDrawParticleFuncListNum = 0;
- mpCalcParticleFuncListNum = 0;
- mpDrawEmitterChildFuncListNum = 0;
- mpDrawEmitterFuncListNum = 0;
- mpCalcEmitterFuncListNum = 0;
- mTDB1Num = 0;
- mKeyBlockNum = 0;
- mFieldBlockNum = 0;
- mUsrIdx = 0;
+ mUsrIdx = fldNum = keyNum = texNum = mpCalcEmitterFuncListNum = mpDrawEmitterFuncListNum = mpDrawEmitterChildFuncListNum = mpCalcParticleFuncListNum = mpDrawParticleFuncListNum = mpCalcParticleChildFuncListNum = mpDrawParticleChildFuncListNum = 0;
}
-/* 803C40C0-803C4220 0211E0 0144+1C 2/2 0/0 0/0 .data jpa_pos */
static u8 jpa_pos[324] ALIGN_DECL(32) = {
0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0xCE, 0x00, 0x00, 0xCE, 0x00, 0xE7, 0x00, 0x00, 0x19,
0x00, 0x00, 0x19, 0xCE, 0x00, 0xE7, 0xCE, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE,
@@ -71,39 +50,38 @@ static u8 jpa_pos[324] ALIGN_DECL(32) = {
0x00, 0x00, 0x00, 0xCE,
};
-/* 803C4220-803C4240 021340 0020+00 2/2 0/0 0/0 .data jpa_crd */
static u8 jpa_crd[32] ALIGN_DECL(32) = {
0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x02, 0x01, 0x00, 0x01,
0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02,
};
-/* 80274080-802755E8 26E9C0 1568+00 2/0 1/1 0/0 .text init__11JPAResourceFP7JKRHeap */
void JPAResource::init(EGG::Heap* heap) {
- // The s32s here are probably fake but fixes the regswaps
- s32 is_glbl_clr_anm = mpBaseShape->isGlblClrAnm();
- s32 is_glbl_tex_anm = mpBaseShape->isGlblTexAnm();
- BOOL is_prm_anm = mpBaseShape->isPrmAnm();
- BOOL is_env_anm = mpBaseShape->isEnvAnm();
- BOOL is_tex_anm = mpBaseShape->isTexAnm();
- BOOL is_tex_crd_anm = mpBaseShape->isTexCrdAnm();
- BOOL is_prj_tex = mpBaseShape->isPrjTex();
- BOOL is_enable_scale_anm = mpExtraShape != NULL && mpExtraShape->isEnableScaleAnm();
- BOOL is_enable_alpha_anm = mpExtraShape != NULL && mpExtraShape->isEnableAlphaAnm();
- BOOL is_enable_alpha_flick = mpExtraShape != NULL && mpExtraShape->isEnableAlphaAnm()
- && mpExtraShape->isEnableAlphaFlick();
- BOOL is_enable_rotate_anm = mpExtraShape != NULL && mpExtraShape->isEnableRotateAnm();
+ // The s32s here are fake but fixes the regswaps
+ s32 is_glbl_clr_anm = pBsp->isGlblClrAnm();
+ s32 is_glbl_tex_anm = pBsp->isGlblTexAnm();
+ BOOL is_prm_anm = pBsp->isPrmAnm();
+ BOOL is_env_anm = pBsp->isEnvAnm();
+ BOOL is_tex_anm = pBsp->isTexAnm();
+ BOOL is_tex_crd_anm = pBsp->isTexCrdAnm();
+ BOOL is_prj_tex = pBsp->isPrjTex();
+ BOOL is_enable_scale_anm = pEsp != NULL && pEsp->isEnableScaleAnm();
+ BOOL is_enable_alpha_anm = pEsp != NULL && pEsp->isEnableAlphaAnm();
+ BOOL is_enable_alpha_flick = pEsp != NULL && pEsp->isEnableAlphaAnm()
+ && pEsp->isEnableAlphaFlick();
+ BOOL is_enable_rotate_anm = pEsp != NULL && pEsp->isEnableRotateAnm();
BOOL is_rotate_on = is_enable_rotate_anm
- || (mpChildShape != NULL && mpChildShape->isRotateOn());
- BOOL base_type_5_6 = mpBaseShape->getType() == 5 || mpBaseShape->getType() == 6;
- BOOL base_type_0 = mpBaseShape->getType() == 0;
- BOOL base_type_0_1 = mpBaseShape->getType() == 0 || mpBaseShape->getType() == 1;
- BOOL child_type_5_6 = mpChildShape != NULL
- && (mpChildShape->getType() == 5 || mpChildShape->getType() == 6);
- BOOL child_type_0 = mpChildShape != NULL && mpChildShape->getType() == 0;
- BOOL child_type_0_1 = mpChildShape != NULL
- && (mpChildShape->getType() == 0 || mpChildShape->getType() == 1);
- BOOL is_draw_parent = !mpBaseShape->isNoDrawParent();
- BOOL is_draw_child = !mpBaseShape->isNoDrawChild();
+ || (pCsp != NULL && pCsp->isRotateOn());
+ BOOL base_type_5_6 = pBsp->getType() == 5 || pBsp->getType() == 6;
+ BOOL base_type_0 = pBsp->getType() == 0;
+ BOOL base_type_0_1 = pBsp->getType() == 0 || pBsp->getType() == 1;
+ BOOL child_type_5_6 = pCsp != NULL
+ && (pCsp->getType() == 5 || pCsp->getType() == 6);
+ BOOL child_type_0 = pCsp != NULL && pCsp->getType() == 0;
+ BOOL child_type_0_1 = pCsp != NULL
+ && (pCsp->getType() == 0 || pCsp->getType() == 1);
+ BOOL is_draw_parent = !pBsp->isNoDrawParent();
+ BOOL is_draw_child = !pBsp->isNoDrawChild();
+ int func_no = 0;
if (is_glbl_tex_anm && is_tex_anm) {
mpCalcEmitterFuncListNum++;
@@ -126,10 +104,10 @@ void JPAResource::init(EGG::Heap* heap) {
(EmitterFunc*)heap->alloc(mpCalcEmitterFuncListNum * 4, 4);
}
- int func_no = 0;
+ func_no = 0;
if (is_glbl_tex_anm && is_tex_anm) {
- switch (mpBaseShape->getTexAnmType()) {
+ switch ((int)pBsp->getTexAnmType()) {
case 0:
mpCalcEmitterFuncList[func_no] = &JPACalcTexIdxNormal;
break;
@@ -159,7 +137,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
if (is_prm_anm || is_env_anm) {
- switch (mpBaseShape->getClrAnmType()) {
+ switch ((int)pBsp->getClrAnmType()) {
case 0:
mpCalcEmitterFuncList[func_no] = &JPACalcClrIdxNormal;
break;
@@ -176,6 +154,7 @@ void JPAResource::init(EGG::Heap* heap) {
mpCalcEmitterFuncList[func_no] = &JPACalcClrIdxRandom;
break;
}
+ func_no++;
}
}
@@ -202,9 +181,9 @@ void JPAResource::init(EGG::Heap* heap) {
}
if (is_enable_scale_anm) {
- if (mpBaseShape->getType() != 0) {
- if (mpExtraShape->isScaleXYDiff()) {
- if (mpExtraShape->getScaleAnmTypeX() == 0 && mpExtraShape->getScaleAnmTypeY() == 0) {
+ if (pBsp->getType() != 0) {
+ if (pEsp->isScaleXYDiff()) {
+ if (pEsp->getScaleAnmTypeX() == 0 && pEsp->getScaleAnmTypeY() == 0) {
mpCalcParticleFuncListNum++;
} else {
mpCalcParticleFuncListNum++;
@@ -226,7 +205,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (!is_glbl_tex_anm && is_tex_anm) {
- switch (mpBaseShape->getTexAnmType()) {
+ switch ((int)pBsp->getTexAnmType()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcTexIdxNormal;
break;
@@ -266,7 +245,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
if (is_prm_anm || is_env_anm) {
- switch (mpBaseShape->getClrAnmType()) {
+ switch ((int)pBsp->getClrAnmType()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcClrIdxNormal;
break;
@@ -291,12 +270,12 @@ void JPAResource::init(EGG::Heap* heap) {
}
if (is_enable_scale_anm) {
- if (mpBaseShape->getType() != 0) {
- if (mpExtraShape->isScaleXYDiff()) {
+ if (pBsp->getType() != 0) {
+ if (pEsp->isScaleXYDiff()) {
mpCalcParticleFuncList[func_no] = &JPACalcScaleY;
func_no++;
- if (mpExtraShape->getScaleAnmTypeY() != 0 || mpExtraShape->getScaleAnmTypeX() != 0) {
- switch (mpExtraShape->getScaleAnmTypeY()) {
+ if (pEsp->getScaleAnmTypeY() != 0 || pEsp->getScaleAnmTypeX() != 0) {
+ switch (pEsp->getScaleAnmTypeY()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcScaleAnmNormal;
break;
@@ -316,7 +295,7 @@ void JPAResource::init(EGG::Heap* heap) {
}
mpCalcParticleFuncList[func_no] = &JPACalcScaleX;
func_no++;
- switch (mpExtraShape->getScaleAnmTypeX()) {
+ switch (pEsp->getScaleAnmTypeX()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcScaleAnmNormal;
break;
@@ -327,13 +306,14 @@ void JPAResource::init(EGG::Heap* heap) {
mpCalcParticleFuncList[func_no] = &JPACalcScaleAnmReverseX;
break;
}
+ func_no++;
}
- if (mpChildShape != NULL && mpChildShape->isScaleOutOn()) {
+ if (pCsp != NULL && pCsp->isScaleOutOn()) {
mpCalcParticleChildFuncListNum++;
}
- if (mpChildShape != NULL && mpChildShape->isAlphaOutOn()) {
+ if (pCsp != NULL && pCsp->isAlphaOutOn()) {
mpCalcParticleChildFuncListNum++;
}
@@ -344,25 +324,26 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
- if (mpChildShape != NULL && mpChildShape->isScaleOutOn()) {
+ if (pCsp != NULL && pCsp->isScaleOutOn()) {
mpCalcParticleChildFuncList[func_no] = &JPACalcChildScaleOut;
func_no++;
}
- if (mpChildShape != NULL && mpChildShape->isAlphaOutOn()) {
+ if (pCsp != NULL && pCsp->isAlphaOutOn()) {
mpCalcParticleChildFuncList[func_no] = &JPACalcChildAlphaOut;
+ func_no++;
}
if (is_draw_parent && base_type_5_6) {
mpDrawEmitterFuncListNum++;
- if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
+ if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawEmitterFuncListNum++;
}
}
mpDrawEmitterFuncListNum++;
- if (mpExTexShape != NULL) {
+ if (pEts != NULL) {
mpDrawEmitterFuncListNum++;
}
@@ -392,14 +373,14 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (is_draw_parent && base_type_5_6) {
- if (mpBaseShape->getType() == 5) {
+ if (pBsp->getType() == 5) {
mpDrawEmitterFuncList[func_no] = &JPADrawStripe;
func_no++;
} else {
mpDrawEmitterFuncList[func_no] = &JPADrawStripeX;
func_no++;
}
- if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
+ if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawEmitterFuncList[func_no] = &fn_8031C2C0;
func_no++;
}
@@ -408,7 +389,7 @@ void JPAResource::init(EGG::Heap* heap) {
mpDrawEmitterFuncList[func_no] = &JPADrawEmitterCallBackB;
func_no++;
- if (mpExTexShape != NULL) {
+ if (pEts != NULL) {
mpDrawEmitterFuncList[func_no] = &JPALoadExTex;
func_no++;
}
@@ -458,17 +439,22 @@ void JPAResource::init(EGG::Heap* heap) {
if (is_glbl_clr_anm) {
if (base_type_5_6 || !is_enable_alpha_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistPrmEnv;
+ func_no++;
} else if (is_enable_alpha_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistEnv;
+ func_no++;
}
} else if (!is_prm_anm && !is_enable_alpha_anm) {
if (!is_env_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistPrmEnv;
+ func_no++;
} else {
mpDrawEmitterFuncList[func_no] = &JPARegistPrm;
+ func_no++;
}
} else if (!is_env_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistEnv;
+ func_no++;
}
if (is_draw_child && child_type_5_6) {
@@ -481,8 +467,8 @@ void JPAResource::init(EGG::Heap* heap) {
mpDrawEmitterChildFuncListNum++;
}
- if (mpChildShape != NULL && ((!mpChildShape->isAlphaOutOn() && !mpChildShape->isAlphaInherited()
- && !mpChildShape->isColorInherited()) || is_draw_child && child_type_5_6)) {
+ if (pCsp != NULL && ((!pCsp->isAlphaOutOn() && !pCsp->isAlphaInherited()
+ && !pCsp->isColorInherited()) || is_draw_child && child_type_5_6)) {
mpDrawEmitterChildFuncListNum++;
}
@@ -494,7 +480,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (is_draw_child && child_type_5_6) {
- if (mpChildShape->getType() == 5) {
+ if (pCsp->getType() == 5) {
mpDrawEmitterChildFuncList[func_no] = &JPADrawStripe;
func_no++;
} else {
@@ -511,11 +497,14 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
- if (mpChildShape != NULL) {
- if (!mpChildShape->isAlphaOutOn() && !mpChildShape->isAlphaInherited() && !mpChildShape->isColorInherited()) {
+ if (pCsp != NULL) {
+ if (!pCsp->isAlphaOutOn() && !pCsp->isAlphaInherited()
+ && !pCsp->isColorInherited()) {
mpDrawEmitterChildFuncList[func_no] = &JPARegistChildPrmEnv;
+ func_no++;
} else if (is_draw_child && child_type_5_6) {
mpDrawEmitterChildFuncList[func_no] = &fn_8031DBA0;
+ func_no++;
}
}
@@ -528,14 +517,14 @@ void JPAResource::init(EGG::Heap* heap) {
if (!is_glbl_tex_anm && is_tex_anm) {
mpDrawParticleFuncListNum++;
}
-
+
if (base_type_0_1 && is_enable_scale_anm) {
mpDrawParticleFuncListNum++;
} else {
if (is_tex_crd_anm && !is_prj_tex) {
mpDrawParticleFuncListNum++;
}
- if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
+ if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawParticleFuncListNum++;
}
}
@@ -553,7 +542,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (is_draw_parent && !base_type_5_6) {
- switch (mpBaseShape->getType()) {
+ switch (pBsp->getType()) {
case 2:
if (is_enable_rotate_anm) {
mpDrawParticleFuncList[func_no] = &JPADrawRotBillboard;
@@ -615,7 +604,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
- if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
+ if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawParticleFuncList[func_no] = &fn_8031A8C0;
func_no++;
}
@@ -625,23 +614,29 @@ void JPAResource::init(EGG::Heap* heap) {
if (is_prm_anm) {
if (is_env_anm) {
mpDrawParticleFuncList[func_no] = &JPARegistPrmAlphaEnv;
+ func_no++;
} else {
mpDrawParticleFuncList[func_no] = &JPARegistPrmAlpha;
+ func_no++;
}
} else if (is_enable_alpha_anm) {
if (is_env_anm) {
mpDrawParticleFuncList[func_no] = &JPARegistAlphaEnv;
+ func_no++;
} else {
mpDrawParticleFuncList[func_no] = &JPARegistAlpha;
+ func_no++;
}
} else if (is_env_anm) {
mpDrawParticleFuncList[func_no] = &JPARegistEnv;
+ func_no++;
}
} else if (is_enable_alpha_anm && !base_type_5_6) {
mpDrawParticleFuncList[func_no] = &JPARegistAlpha;
+ func_no++;
}
- if (is_draw_child && mpChildShape != NULL && !child_type_5_6) {
+ if (is_draw_child && pCsp != NULL && !child_type_5_6) {
mpDrawParticleChildFuncListNum++;
}
@@ -651,8 +646,8 @@ void JPAResource::init(EGG::Heap* heap) {
mpDrawParticleChildFuncListNum++;
}
- if (mpChildShape != NULL && (mpChildShape->isAlphaOutOn() || mpChildShape->isAlphaInherited()
- || mpChildShape->isColorInherited())) {
+ if (pCsp != NULL && (pCsp->isAlphaOutOn() || pCsp->isAlphaInherited()
+ || pCsp->isColorInherited())) {
mpDrawParticleChildFuncListNum++;
}
@@ -663,8 +658,8 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
- if (is_draw_child && mpChildShape != NULL && !child_type_5_6) {
- switch (mpChildShape->getType()) {
+ if (is_draw_child && pCsp != NULL && !child_type_5_6) {
+ switch (pCsp->getType()) {
case 2:
if (is_rotate_on) {
mpDrawParticleChildFuncList[func_no] = &JPADrawRotBillboard;
@@ -717,14 +712,13 @@ void JPAResource::init(EGG::Heap* heap) {
}
}
- if (mpChildShape != NULL && (mpChildShape->isAlphaOutOn() || mpChildShape->isAlphaInherited()
- || mpChildShape->isColorInherited())) {
+ if (pCsp != NULL && (pCsp->isAlphaOutOn() || pCsp->isAlphaInherited()
+ || pCsp->isColorInherited())) {
mpDrawParticleChildFuncList[func_no] = &JPARegistPrmAlphaEnv;
+ func_no++;
}
}
-/* 802755E8-80275A94 26FF28 04AC+00 0/0 1/1 0/0 .text
- * calc__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter */
bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
work->mpEmtr = emtr;
work->mpRes = this;
@@ -753,8 +747,8 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
} else {
calcKey(work);
- for (int i = mFieldBlockNum - 1; i >= 0; i--) {
- mpFieldBlocks[i]->initOpParam();
+ for (int i = fldNum - 1; i >= 0; i--) {
+ ppFld[i]->initOpParam();
}
if (emtr->mpEmtrCallBack != NULL) {
@@ -770,12 +764,12 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
(*mpCalcEmitterFuncList[i])(work);
}
- for (int i = mFieldBlockNum - 1; i >= 0; i--) {
- mpFieldBlocks[i]->prepare(work);
+ for (int i = fldNum - 1; i >= 0; i--) {
+ ppFld[i]->prepare(work);
}
if (!emtr->checkStatus(8)) {
- mpDynamicsBlock->create(work);
+ pDyn->create(work);
}
if (emtr->mpEmtrCallBack != NULL) {
@@ -785,23 +779,19 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
}
}
- JPANode<JPABaseParticle>* node = emtr->mAlivePtclBase.getFirst();
- JPANode<JPABaseParticle>* next;
- while (node != emtr->mAlivePtclBase.getEnd()) {
+ JPANode<JPABaseParticle>* next = NULL;
+ for (JPANode<JPABaseParticle>* node = emtr->mAlivePtclBase.getFirst(); node != emtr->mAlivePtclBase.getEnd(); node = next) {
next = node->getNext();
if (node->getObject()->calc_p(work)) {
emtr->mpPtclPool->push_front(emtr->mAlivePtclBase.erase(node));
}
- node = next;
}
- node = emtr->mAlivePtclChld.getFirst();
- while (node != emtr->mAlivePtclChld.getEnd()) {
+ for (JPANode<JPABaseParticle>* node = emtr->mAlivePtclChld.getFirst(); node != emtr->mAlivePtclChld.getEnd(); node = next) {
next = node->getNext();
if (node->getObject()->calc_c(work)) {
emtr->mpPtclPool->push_front(emtr->mAlivePtclChld.erase(node));
}
- node = next;
}
emtr->mTick++;
@@ -810,51 +800,47 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
return false;
}
-/* 80275A94-80275B74 2703D4 00E0+00 0/0 1/1 0/0 .text
- * draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter */
void JPAResource::draw(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
work->mpEmtr = emtr;
work->mpRes = this;
work->mDrawCount = 0;
calcWorkData_d(work);
- mpBaseShape->setGX(work);
+ pBsp->setGX(work);
for (s32 i = 1; i <= emtr->getDrawTimes(); i++) {
work->mDrawCount++;
- if (mpBaseShape->isDrawPrntAhead() && mpChildShape != NULL)
+ if (pBsp->isDrawPrntAhead() && pCsp != NULL)
drawC(work);
drawP(work);
- if (!mpBaseShape->isDrawPrntAhead() && mpChildShape != NULL)
+ if (!pBsp->isDrawPrntAhead() && pCsp != NULL)
drawC(work);
}
}
-/* 80275B74-80275EB0 2704B4 033C+00 1/1 0/0 0/0 .text drawP__11JPAResourceFP18JPAEmitterWorkData
- */
void JPAResource::drawP(JPAEmitterWorkData* work) {
work->mpEmtr->clearStatus(0x80);
- work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * mpBaseShape->getBaseSizeX();
- work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * mpBaseShape->getBaseSizeY();
+ work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * pBsp->getBaseSizeX();
+ work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * pBsp->getBaseSizeY();
- if (mpBaseShape->getType() == 0) {
+ if (pBsp->getType() == 0) {
work->mGlobalPtclScl.x *= 1.02f;
- } else if (mpBaseShape->getType() == 1) {
+ } else if (pBsp->getType() == 1) {
work->mGlobalPtclScl.x *= 1.02f;
work->mGlobalPtclScl.y *= 0.4f;
}
- if (mpExtraShape != NULL && mpExtraShape->isEnableScaleAnm()) {
- work->mPivot.x = mpExtraShape->getScaleCenterX() - 1.0f;
- work->mPivot.y = mpExtraShape->getScaleCenterY() - 1.0f;
+ if (pEsp != NULL && pEsp->isEnableScaleAnm()) {
+ work->mPivot.x = pEsp->getScaleCenterX() - 1.0f;
+ work->mPivot.y = pEsp->getScaleCenterY() - 1.0f;
} else {
work->mPivot.x = work->mPivot.y = 0.0f;
}
- work->mDirType = mpBaseShape->getDirType();
- work->mRotType = mpBaseShape->getRotType();
- work->mDLType = mpBaseShape->getType() == 4 || mpBaseShape->getType() == 8;
- work->mPlaneType = work->mDLType ? 2 : mpBaseShape->getBasePlaneType();
- work->mPrjType = mpBaseShape->isPrjTex() ? (mpBaseShape->isTexCrdAnm() ? 2 : 1) : 0;
+ work->mDirType = pBsp->getDirType();
+ work->mRotType = pBsp->getRotType();
+ work->mDLType = pBsp->getType() == 4 || pBsp->getType() == 8;
+ work->mPlaneType = work->mDLType ? 2 : pBsp->getBasePlaneType();
+ work->mPrjType = pBsp->isPrjTex() ? (pBsp->isTexCrdAnm() ? 2 : 1) : 0;
work->mpAlivePtcl = &work->mpEmtr->mAlivePtclBase;
setPTev();
@@ -863,7 +849,7 @@ void JPAResource::drawP(JPAEmitterWorkData* work) {
(*mpDrawEmitterFuncList[i])(work);
}
- if (mpBaseShape->isDrawFwdAhead()) {
+ if (pBsp->isDrawFwdAhead()) {
JPANode<JPABaseParticle>* node = work->mpEmtr->mAlivePtclBase.getLast();
for (; node != work->mpEmtr->mAlivePtclBase.getEnd(); node = node->getPrev()) {
work->mpCurNode = node;
@@ -892,32 +878,30 @@ void JPAResource::drawP(JPAEmitterWorkData* work) {
}
}
-/* 80275EB0-802761A8 2707F0 02F8+00 1/1 0/0 0/0 .text drawC__11JPAResourceFP18JPAEmitterWorkData
- */
void JPAResource::drawC(JPAEmitterWorkData* work) {
work->mpEmtr->setStatus(0x80);
- if (mpChildShape->isScaleInherited()) {
- work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * mpBaseShape->getBaseSizeX();
- work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * mpBaseShape->getBaseSizeY();
+ if (pCsp->isScaleInherited()) {
+ work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * pBsp->getBaseSizeX();
+ work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * pBsp->getBaseSizeY();
} else {
- work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * mpChildShape->getScaleX();
- work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * mpChildShape->getScaleY();
+ work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * pCsp->getScaleX();
+ work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * pCsp->getScaleY();
}
- if (mpChildShape->getType() == 0) {
+ if (pCsp->getType() == 0) {
work->mGlobalPtclScl.x *= 1.02f;
- } else if (mpChildShape->getType() == 1) {
+ } else if (pCsp->getType() == 1) {
work->mGlobalPtclScl.x *= 1.02f;
work->mGlobalPtclScl.y *= 0.4f;
}
work->mPivot.x = work->mPivot.y = 0.0f;
- work->mDirType = mpChildShape->getDirType();
- work->mRotType = mpChildShape->getRotType();
- work->mDLType = mpChildShape->getType() == 4 || mpChildShape->getType() == 8;
- work->mPlaneType = work->mDLType ? 2 : mpChildShape->getBasePlaneType();
+ work->mDirType = pCsp->getDirType();
+ work->mRotType = pCsp->getRotType();
+ work->mDLType = pCsp->getType() == 4 || pCsp->getType() == 8;
+ work->mPlaneType = work->mDLType ? 2 : pCsp->getBasePlaneType();
work->mPrjType = 0;
work->mpAlivePtcl = &work->mpEmtr->mAlivePtclChld;
@@ -927,7 +911,7 @@ void JPAResource::drawC(JPAEmitterWorkData* work) {
(*mpDrawEmitterChildFuncList[i])(work);
}
- if (mpBaseShape->isDrawFwdAhead()) {
+ if (pBsp->isDrawFwdAhead()) {
JPANode<JPABaseParticle>* node = work->mpEmtr->mAlivePtclChld.getLast();
for (; node != work->mpEmtr->mAlivePtclChld.getEnd(); node = node->getPrev()) {
work->mpCurNode = node;
@@ -956,40 +940,33 @@ void JPAResource::drawC(JPAEmitterWorkData* work) {
}
}
-/* 802761A8-8027642C 270AE8 0284+00 1/1 0/0 0/0 .text setPTev__11JPAResourceFv */
void JPAResource::setPTev() {
GXTexCoordID tex_coord = GX_TEXCOORD1;
u8 tev_stages = 1;
u8 tex_gens = 1;
u8 ind_stages = 0;
- int base_plane_type = (mpBaseShape->getType() == 3 || mpBaseShape->getType() == 7) ?
- mpBaseShape->getBasePlaneType() : 0;
- int center_offset;
- if (mpExtraShape != NULL) {
- center_offset =
- (mpExtraShape->getScaleCenterX() + 3 * mpExtraShape->getScaleCenterY()) * 0xC;
- } else {
- center_offset = 0x30;
- }
+ int base_plane_type = (pBsp->getType() == 3 || pBsp->getType() == 7) ?
+ pBsp->getBasePlaneType() : 0;
+ int center_offset = pEsp != NULL ? (pEsp->getScaleCenterX() + 3 * pEsp->getScaleCenterY()) * 0xC : 0x30;
int pos_offset = center_offset + base_plane_type * 0x6C;
- int crd_offset = (mpBaseShape->getTilingS() + 2 * mpBaseShape->getTilingT()) * 8;
+ int crd_offset = (pBsp->getTilingS() + 2 * pBsp->getTilingT()) * 8;
GXSetArray(GX_VA_POS, jpa_pos + pos_offset, 3);
GXSetArray(GX_VA_TEX0, jpa_crd + crd_offset, 2);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
- if (mpExTexShape != NULL) {
- if (mpExTexShape->isUseIndirect()) {
- GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP2);
+ if (pEts != NULL) {
+ if (pEts->isUseIndirect()) {
+ GXSetIndTexOrder(GX_INDTEXSTAGE0, tex_coord, GX_TEXMAP2);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
- GXSetIndTexMtx(GX_ITM_0, (f32(*)[3])mpExTexShape->getIndTexMtx(), mpExTexShape->getExpScale());
+ GXSetIndTexMtx(GX_ITM_0, (f32(*)[3])pEts->getIndTexMtx(), pEts->getExpScale());
GXSetTevIndirect(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_ITF_8, GX_ITB_STU, GX_ITM_0,
GX_ITW_OFF, GX_ITW_OFF, 0, 0, GX_ITBA_OFF);
ind_stages++;
tex_gens++;
tex_coord = GX_TEXCOORD2;
}
- if (mpExTexShape->isUseSecTex()) {
+ if (pEts->isUseSecTex()) {
GXSetTevOrder(GX_TEVSTAGE1, tex_coord, GX_TEXMAP3, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
@@ -1004,7 +981,7 @@ void JPAResource::setPTev() {
GXSetNumTevStages(tev_stages);
GXSetNumIndStages(ind_stages);
- if (mpBaseShape->isClipOn()) {
+ if (pBsp->isClipOn()) {
GXSetMisc(GX_MT_XF_FLUSH, 8);
GXSetClipMode(GX_CLIP_ENABLE);
} else {
@@ -1013,11 +990,9 @@ void JPAResource::setPTev() {
GXSetNumTexGens(tex_gens);
}
-/* 8027642C-8027658C 270D6C 0160+00 1/1 0/0 0/0 .text setCTev__11JPAResourceFP18JPAEmitterWorkData
- */
void JPAResource::setCTev(JPAEmitterWorkData* work) {
- int base_plane_type = (mpChildShape->getType() == 3 || mpChildShape->getType() == 7) ?
- mpChildShape->getBasePlaneType() : 0;
+ int base_plane_type = (pCsp->getType() == 3 || pCsp->getType() == 7) ?
+ pCsp->getBasePlaneType() : 0;
int pos_offset = 0x30 + base_plane_type * 0x6C;
GXSetArray(GX_VA_POS, jpa_pos + pos_offset, 3);
GXSetArray(GX_VA_TEX0, jpa_crd, 2);
@@ -1026,18 +1001,16 @@ void JPAResource::setCTev(JPAEmitterWorkData* work) {
GXSetTevDirect(GX_TEVSTAGE0);
GXSetNumTevStages(1);
GXSetNumIndStages(0);
- if (mpChildShape->isClipOn()) {
+ if (pCsp->isClipOn()) {
GXSetMisc(GX_MT_XF_FLUSH, 8);
GXSetClipMode(GX_CLIP_ENABLE);
} else {
GXSetClipMode(GX_CLIP_DISABLE);
}
GXSetNumTexGens(1);
- work->mpResMgr->load(work->mpRes->getTexIdx(mpChildShape->getTexIdx()), GX_TEXMAP1);
+ work->mpResMgr->load(work->mpRes->getTexIdx(pCsp->getTexIdx()), GX_TEXMAP1);
}
-/* 8027658C-80276608 270ECC 007C+00 0/0 1/1 0/0 .text
- * calc_p__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calc_p(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
if (mpCalcParticleFuncList != NULL) {
for (int i = mpCalcParticleFuncListNum - 1; i >= 0; i--) {
@@ -1046,8 +1019,6 @@ void JPAResource::calc_p(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
}
}
-/* 80276608-80276684 270F48 007C+00 0/0 1/1 0/0 .text
- * calc_c__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calc_c(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
if (mpCalcParticleChildFuncList != NULL) {
for (int i = mpCalcParticleChildFuncListNum - 1; i >= 0; i--) {
@@ -1056,20 +1027,16 @@ void JPAResource::calc_c(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
}
}
-/* 80276684-80276700 270FC4 007C+00 0/0 2/2 0/0 .text
- * calcField__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calcField(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
- for (int i = mFieldBlockNum - 1; i >= 0; i--) {
- mpFieldBlocks[i]->calc(work, ptcl);
+ for (int i = fldNum - 1; i >= 0; i--) {
+ ppFld[i]->calc(work, ptcl);
}
}
-/* 80276700-80276840 271040 0140+00 2/1 0/0 0/0 .text calcKey__11JPAResourceFP18JPAEmitterWorkData
- */
void JPAResource::calcKey(JPAEmitterWorkData* work) {
- for (int i = mKeyBlockNum - 1; i >= 0; i--) {
- f32 val = mpKeyBlocks[i]->calc(work->mpEmtr->mTick);
- switch (mpKeyBlocks[i]->getID()) {
+ for (int i = keyNum - 1; i >= 0; i--) {
+ f32 val = ppKey[i]->calc(work->mpEmtr->mTick);
+ switch (ppKey[i]->getID()) {
case 0:
work->mpEmtr->mRate = val;
break;
@@ -1097,20 +1064,20 @@ void JPAResource::calcKey(JPAEmitterWorkData* work) {
case 10:
work->mpEmtr->mScaleOut = val;
break;
+ default:
+ JUT_WARN(917, "%s", "JPA : WRONG ID in key data\n");
+ break;
}
}
}
-/* 80276840-80276A0C 271180 01CC+00 1/1 0/0 0/0 .text
- * calcWorkData_c__11JPAResourceFP18JPAEmitterWorkData */
void JPAResource::calcWorkData_c(JPAEmitterWorkData* work) {
work->mVolumeSize = work->mpEmtr->mVolumeSize;
work->mVolumeMinRad = work->mpEmtr->mVolumeMinRad;
work->mVolumeSweep = work->mpEmtr->mVolumeSweep;
- work->mVolumeX = 0;
- work->mVolumeAngleNum = 0;
+ work->mVolumeAngleNum = work->mVolumeX = 0;
work->mVolumeAngleMax = 1;
- work->mDivNumber = mpDynamicsBlock->getDivNumber() * 2 + 1;
+ work->mDivNumber = pDyn->getDivNumber() * 2 + 1;
Mtx local_scl_mtx, local_rot_mtx, global_mtx;
MTXScale(local_scl_mtx, work->mpEmtr->mLocalScl.x, work->mpEmtr->mLocalScl.y,
work->mpEmtr->mLocalScl.z);
@@ -1127,14 +1094,11 @@ void JPAResource::calcWorkData_c(JPAEmitterWorkData* work) {
MTXConcat(work->mGlobalRot, local_scl_mtx, work->mGlobalSR);
work->mEmitterPos.set(work->mpEmtr->mLocalTrs);
work->mGlobalScl.mul(work->mpEmtr->mGlobalScl, work->mpEmtr->mLocalScl);
-
JPAGetDirMtx(work->mpEmtr->mLocalDir, work->mDirectionMtx);
work->mPublicScale.set(work->mpEmtr->mGlobalScl);
MTXMultVec(global_mtx, work->mpEmtr->mLocalTrs, work->mGlobalPos);
}
-/* 80276A0C-80276A8C 27134C 0080+00 1/1 0/0 0/0 .text
- * calcWorkData_d__11JPAResourceFP18JPAEmitterWorkData */
void JPAResource::calcWorkData_d(JPAEmitterWorkData* work) {
Mtx mtx;
JPAGetXYZRotateMtx(work->mpEmtr->mLocalRot.x * 0xB6, work->mpEmtr->mLocalRot.y * 0xB6,
@@ -1142,9 +1106,3 @@ void JPAResource::calcWorkData_d(JPAEmitterWorkData* work) {
MTXConcat(work->mpEmtr->mGlobalRot, mtx, work->mGlobalRot);
MTXMultVecSR(work->mGlobalRot, work->mpEmtr->mLocalDir, work->mGlobalEmtrDir);
}
-/*
-#pragma push
-#pragma force_active on
-static u8 jpa_resource_padding[28] = {0};
-#pragma pop
-*/