From 225ce0d4ce99fa2c1b34a5486bbc0e0c084b62a6 Mon Sep 17 00:00:00 2001 From: robojumper Date: Sun, 27 Apr 2025 11:48:38 +0200 Subject: [PATCH] JPAExtraShape, JPAChildShape OK --- config/SOUE01/splits.txt | 1 + config/SOUE01/symbols.txt | 4 ++-- configure.py | 4 ++-- include/JSystem/JParticle/JPAChildShape.h | 1 + include/JSystem/JParticle/JPAExTexShape.h | 5 +++-- include/rvl/GX/GXAttr.h | 2 +- include/rvl/MTX.h | 4 +++- src/JSystem/JParticle/JPAChildShape.cpp | 8 +++++++- src/JSystem/JParticle/JPAExTexShape.cpp | 8 ++++++-- src/JSystem/JParticle/JPAExtraShape.cpp | 9 +++++---- 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()) {