summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-04-27 11:48:38 +0200
committerrobojumper <robojumper@gmail.com>2025-04-27 11:48:38 +0200
commit225ce0d4ce99fa2c1b34a5486bbc0e0c084b62a6 (patch)
treef2a1b69e97be61340c94ebd8b37ec991f039fb19
parent9ea357a17f8a5a39f922cffe03578c9eb5860eb5 (diff)
JPAExtraShape, JPAChildShape OK
-rw-r--r--config/SOUE01/splits.txt1
-rw-r--r--config/SOUE01/symbols.txt4
-rw-r--r--configure.py4
-rw-r--r--include/JSystem/JParticle/JPAChildShape.h1
-rw-r--r--include/JSystem/JParticle/JPAExTexShape.h5
-rw-r--r--include/rvl/GX/GXAttr.h2
-rw-r--r--include/rvl/MTX.h4
-rw-r--r--src/JSystem/JParticle/JPAChildShape.cpp8
-rw-r--r--src/JSystem/JParticle/JPAExTexShape.cpp8
-rw-r--r--src/JSystem/JParticle/JPAExtraShape.cpp9
10 files changed, 31 insertions, 15 deletions
diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt
index e0bcedf8..119877f1 100644
--- a/config/SOUE01/splits.txt
+++ b/config/SOUE01/splits.txt
@@ -1770,6 +1770,7 @@ JSystem/JParticle/JPAExtraShape.cpp:
JSystem/JParticle/JPAChildShape.cpp:
.text start:0x8031DBA0 end:0x8031DD48 align:16
+ .sdata2 start:0x8057CEB0 end:0x8057CEB8
JSystem/JParticle/JPAExTexShape.cpp:
.text start:0x8031DD50 end:0x8031E094 align:16
diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt
index 847ca54a..9d4f00e8 100644
--- a/config/SOUE01/symbols.txt
+++ b/config/SOUE01/symbols.txt
@@ -18523,13 +18523,13 @@ JPACalcScaleCopy__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031D640; /
JPACalcScaleAnmNormal__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031D650; // type:function size:0xC
JPACalcScaleAnmRepeatX__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031D660; // type:function size:0x64
JPACalcScaleAnmRepeatY__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031D6D0; // type:function size:0x64
-JPACalcScaleAnmReverseX__FP18JPAEmitterWorkDataPC15JPABaseParticle = .text:0x8031D740; // type:function size:0x94
+JPACalcScaleAnmReverseX__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031D740; // type:function size:0x94
JPACalcScaleAnmReverseY__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031D7E0; // type:function size:0x94
JPACalcAlphaAnm__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031D880; // type:function size:0x90
JPACalcAlphaFlickAnm__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031D910; // type:function size:0x148
__ct__13JPAExtraShapeFPCUc = .text:0x8031DA60; // type:function size:0x34
init__13JPAExtraShapeFv = .text:0x8031DAA0; // type:function size:0xF8
-fn_8031DBA0 = .text:0x8031DBA0; // type:function size:0x18
+fn_8031DBA0__FP18JPAEmitterWorkData = .text:0x8031DBA0; // type:function size:0x18
JPARegistChildPrmEnv__FP18JPAEmitterWorkData = .text:0x8031DBC0; // type:function size:0x114
JPACalcChildAlphaOut__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031DCE0; // type:function size:0x30
JPACalcChildScaleOut__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031DD10; // type:function size:0x28
diff --git a/configure.py b/configure.py
index 542777ba..f4cc30f3 100644
--- a/configure.py
+++ b/configure.py
@@ -1211,8 +1211,8 @@ config.libs = [
Object(Matching, "JSystem/JParticle/JPAResourceManager.cpp"),
Object(NonMatching, "JSystem/JParticle/JPAResource.cpp"),
Object(NonMatching, "JSystem/JParticle/JPABaseShape.cpp"),
- Object(NonMatching, "JSystem/JParticle/JPAExtraShape.cpp"),
- Object(NonMatching, "JSystem/JParticle/JPAChildShape.cpp"),
+ Object(Matching, "JSystem/JParticle/JPAExtraShape.cpp"),
+ Object(Matching, "JSystem/JParticle/JPAChildShape.cpp"),
Object(NonMatching, "JSystem/JParticle/JPAExTexShape.cpp"),
Object(NonMatching, "JSystem/JParticle/JPADynamicsBlock.cpp"),
Object(NonMatching, "JSystem/JParticle/JPAFieldBlock.cpp"),
diff --git a/include/JSystem/JParticle/JPAChildShape.h b/include/JSystem/JParticle/JPAChildShape.h
index 5d63aa34..f408274a 100644
--- a/include/JSystem/JParticle/JPAChildShape.h
+++ b/include/JSystem/JParticle/JPAChildShape.h
@@ -82,6 +82,7 @@ public:
/* 0x00 */ const JPAChildShapeData* mpData;
};
+void fn_8031DBA0(JPAEmitterWorkData*);
void JPARegistChildPrmEnv(JPAEmitterWorkData*);
void JPACalcChildAlphaOut(JPAEmitterWorkData*, JPABaseParticle*);
diff --git a/include/JSystem/JParticle/JPAExTexShape.h b/include/JSystem/JParticle/JPAExTexShape.h
index 5efd0eac..29e92344 100644
--- a/include/JSystem/JParticle/JPAExTexShape.h
+++ b/include/JSystem/JParticle/JPAExTexShape.h
@@ -17,8 +17,9 @@ struct JPAExTexShapeData {
/* 0x08 */ u32 mFlags;
/* 0x0C */ f32 mIndTexMtx[2][3];
/* 0x24 */ s8 mExpScale;
- /* 0x25 */ s8 mIndTexIdx;
- /* 0x26 */ s8 mSecTexIdx;
+ /* 0x25 */ u8 _0x25[0x4E - 0x25];
+ /* 0x4E */ s8 mIndTexIdx;
+ /* 0x4F */ s8 mSecTexIdx;
};
/**
diff --git a/include/rvl/GX/GXAttr.h b/include/rvl/GX/GXAttr.h
index a67ff6c6..f25ab5a0 100644
--- a/include/rvl/GX/GXAttr.h
+++ b/include/rvl/GX/GXAttr.h
@@ -46,7 +46,7 @@ void __GXSetVCD(void);
void __GXCalculateVLim(void);
void __GXSetVAT(void);
-static void GXSetTexCoordGen(GXTexCoordID id, GXTexGenType type, GXTexGenSrc src, u32 texMtxIdx);
+void GXSetTexCoordGen(GXTexCoordID id, GXTexGenType type, GXTexGenSrc src, u32 texMtxIdx);
// // TODO: What matrix index is this???
// GXSetTexCoordGen2(id, type, src, texMtxIdx, FALSE, 125);
// }
diff --git a/include/rvl/MTX.h b/include/rvl/MTX.h
index 8300c482..1285f13e 100644
--- a/include/rvl/MTX.h
+++ b/include/rvl/MTX.h
@@ -4,11 +4,13 @@
extern "C" {
#endif
-#include "rvl/MTX/mtx.h"
+// IWYU pragma: begin_exports
+#include "rvl/MTX/mtx.h"
#include "rvl/MTX/mtx44.h"
#include "rvl/MTX/mtxvec.h"
#include "rvl/MTX/quat.h"
#include "rvl/MTX/vec.h"
+// IWYU pragma: end_exports
#ifdef __cplusplus
}
diff --git a/src/JSystem/JParticle/JPAChildShape.cpp b/src/JSystem/JParticle/JPAChildShape.cpp
index 18a2e18f..979b5df2 100644
--- a/src/JSystem/JParticle/JPAChildShape.cpp
+++ b/src/JSystem/JParticle/JPAChildShape.cpp
@@ -7,7 +7,13 @@
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "rvl/GX.h"
-#include "rvl/OS.h"
+
+// SS addition
+void fn_8031DBA0(JPAEmitterWorkData* work) {
+ if (work->mpEmtr->mAlivePtclBase.getNum() == 0) {
+ work->mpEmtr->deleteAllParticle();
+ }
+}
/* 8027AEBC-8027AFDC 2757FC 0120+00 0/0 1/1 0/0 .text JPARegistChildPrmEnv__FP18JPAEmitterWorkData
*/
diff --git a/src/JSystem/JParticle/JPAExTexShape.cpp b/src/JSystem/JParticle/JPAExTexShape.cpp
index ce5fd07d..18b0a01e 100644
--- a/src/JSystem/JParticle/JPAExTexShape.cpp
+++ b/src/JSystem/JParticle/JPAExTexShape.cpp
@@ -6,15 +6,19 @@
#include "JSystem/JParticle/JPAExTexShape.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JParticle/JPAEmitter.h"
+#include "rvl/MTX.h"
#include "rvl/GX.h"
/* 8027B040-8027B13C 275980 00FC+00 0/0 1/1 0/0 .text JPALoadExTex__FP18JPAEmitterWorkData */
void JPALoadExTex(JPAEmitterWorkData* work) {
+ Mtx m;
JPAExTexShape* ets = work->mpRes->getEts();
-
+
GXTexCoordID secTexCoordID = GX_TEXCOORD1;
if (ets->isUseIndirect()) {
- GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE,
+ MTXIdentity(m);
+ GXLoadTexMtxImm(m, GX_TEXMTX2, GX_MTX2x4);
+ GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX2, GX_FALSE,
GX_PTIDENTITY);
u8 texIdx = ets->getIndTexIdx();
work->mpResMgr->load(work->mpRes->getTexIdx(texIdx), GX_TEXMAP2);
diff --git a/src/JSystem/JParticle/JPAExtraShape.cpp b/src/JSystem/JParticle/JPAExtraShape.cpp
index 0c0e8bf5..ca825d31 100644
--- a/src/JSystem/JParticle/JPAExtraShape.cpp
+++ b/src/JSystem/JParticle/JPAExtraShape.cpp
@@ -71,23 +71,24 @@ void JPACalcScaleAnmRepeatY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
* JPACalcScaleAnmReverseX__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmReverseX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
- s32 cycle = ptcl->mAge / esp->getScaleAnmCycleX();
+ f32 cycle = ptcl->mAge / esp->getScaleAnmCycleX() & 1;
f32 base = (ptcl->mAge % esp->getScaleAnmCycleX()) / (f32)esp->getScaleAnmCycleX();
- work->mScaleAnm = base + ((cycle & 1) * (1.0f - base * 2.0f));
+ work->mScaleAnm = base + (cycle * (1.0f - base * 2.0f));
}
/* 8027AB7C-8027AC10 2754BC 0094+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmReverseY__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmReverseY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
- s32 cycle = ptcl->mAge / esp->getScaleAnmCycleY();
+ f32 cycle = ptcl->mAge / esp->getScaleAnmCycleY() & 1;
f32 base = (ptcl->mAge % esp->getScaleAnmCycleY()) / (f32)esp->getScaleAnmCycleY();
- work->mScaleAnm = base + ((cycle & 1) * (1.0f - base * 2.0f));
+ work->mScaleAnm = base + (cycle * (1.0f - base * 2.0f));
}
/* 8027AC10-8027AC98 275550 0088+00 0/0 1/1 0/0 .text
* JPACalcAlphaAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcAlphaAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
+ 0.0f; // float order
JPAExtraShape* esp = work->mpRes->getEsp();
f32 alpha;
if (ptcl->mTime < esp->getAlphaInTiming()) {