summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrobojumper <robojumper@gmail.com>2025-04-27 11:14:54 +0200
committerrobojumper <robojumper@gmail.com>2025-04-27 11:14:54 +0200
commita962cdd14ac4520d72151c1b83b3e98d608e06be (patch)
tree3af28a1b00a8fddde18bc312e89b578d2e421349
parent70125c1eacee19e03b8fd9b4dcf277c019ab4f3f (diff)
JPAEmitterManager OK
-rw-r--r--config/SOUE01/splits.txt3
-rw-r--r--config/SOUE01/symbols.txt40
-rw-r--r--configure.py2
-rw-r--r--include/JSystem/JParticle/JPABaseShape.h4
-rw-r--r--include/JSystem/JParticle/JPAChildShape.h2
-rw-r--r--include/JSystem/JParticle/JPADynamicsBlock.h6
-rw-r--r--include/JSystem/JParticle/JPAEmitter.h36
-rw-r--r--include/JSystem/JParticle/JPAEmitterManager.h24
-rw-r--r--include/JSystem/JParticle/JPAExTexShape.h2
-rw-r--r--include/JSystem/JParticle/JPAExtraShape.h4
-rw-r--r--include/JSystem/JParticle/JPAFieldBlock.h92
-rw-r--r--include/JSystem/JParticle/JPAKeyBlock.h4
-rw-r--r--include/JSystem/JParticle/JPAParticle.h14
-rw-r--r--include/JSystem/JParticle/JPAResource.h28
-rw-r--r--include/JSystem/JParticle/JPAResourceLoader.h4
-rw-r--r--include/JSystem/JParticle/JPAResourceManager.h14
-rw-r--r--include/JSystem/JUtility/JUTAssert.h12
-rw-r--r--include/egg/math/eggVector.h2
-rw-r--r--src/JSystem/JParticle/JPADynamicsBlock.cpp36
-rw-r--r--src/JSystem/JParticle/JPAEmitterManager.cpp51
-rw-r--r--src/JSystem/JParticle/JPAExtraShape.cpp5
21 files changed, 219 insertions, 166 deletions
diff --git a/config/SOUE01/splits.txt b/config/SOUE01/splits.txt
index 62d2fba9..e0bcedf8 100644
--- a/config/SOUE01/splits.txt
+++ b/config/SOUE01/splits.txt
@@ -1766,6 +1766,7 @@ JSystem/JParticle/JPABaseShape.cpp:
JSystem/JParticle/JPAExtraShape.cpp:
.text start:0x8031D540 end:0x8031DB98 align:16
+ .sdata2 start:0x8057CE88 end:0x8057CEB0
JSystem/JParticle/JPAChildShape.cpp:
.text start:0x8031DBA0 end:0x8031DD48 align:16
@@ -1775,6 +1776,7 @@ JSystem/JParticle/JPAExTexShape.cpp:
JSystem/JParticle/JPADynamicsBlock.cpp:
.text start:0x8031E0A0 end:0x8031F020 align:16
+ .sdata2 start:0x8057CED8 end:0x8057CF00
JSystem/JParticle/JPAFieldBlock.cpp:
.text start:0x8031F020 end:0x80320410 align:16
@@ -1794,6 +1796,7 @@ JSystem/JParticle/JPAResourceLoader.cpp:
JSystem/JParticle/JPAEmitterManager.cpp:
.text start:0x80320980 end:0x80321444 align:16
+ .sdata2 start:0x8057CF18 end:0x8057CF20
JSystem/JParticle/JPAEmitter.cpp:
.text start:0x80321450 end:0x80321C74 align:16
diff --git a/config/SOUE01/symbols.txt b/config/SOUE01/symbols.txt
index 47d7d17d..847ca54a 100644
--- a/config/SOUE01/symbols.txt
+++ b/config/SOUE01/symbols.txt
@@ -18523,7 +18523,7 @@ 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__FP18JPAEmitterWorkDataP15JPABaseParticle = .text:0x8031D740; // type:function size:0x94
+JPACalcScaleAnmReverseX__FP18JPAEmitterWorkDataPC15JPABaseParticle = .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
@@ -18567,15 +18567,15 @@ prepare__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlock = .text:0x8031FD80
calc__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle = .text:0x8031FE30; // type:function size:0xE8
__ct__13JPAFieldBlockFPCUcPQ23EGG4Heap = .text:0x8031FF20; // type:function size:0x38
init__13JPAFieldBlockFPQ23EGG4Heap = .text:0x8031FF60; // type:function size:0x26C
-fn_803201D0 = .text:0x803201D0; // type:function size:0x40
-fn_80320210 = .text:0x80320210; // type:function size:0x40
-fn_80320250 = .text:0x80320250; // type:function size:0x40
-fn_80320290 = .text:0x80320290; // type:function size:0x40
-fn_803202D0 = .text:0x803202D0; // type:function size:0x40
-fn_80320310 = .text:0x80320310; // type:function size:0x40
-fn_80320350 = .text:0x80320350; // type:function size:0x40
-fn_80320390 = .text:0x80320390; // type:function size:0x40
-fn_803203D0 = .text:0x803203D0; // type:function size:0x40
+__dt__12JPAFieldSpinFv = .text:0x803201D0; // type:function size:0x40
+__dt__18JPAFieldConvectionFv = .text:0x80320210; // type:function size:0x40
+__dt__12JPAFieldDragFv = .text:0x80320250; // type:function size:0x40
+__dt__14JPAFieldRandomFv = .text:0x80320290; // type:function size:0x40
+__dt__14JPAFieldVortexFv = .text:0x803202D0; // type:function size:0x40
+__dt__14JPAFieldNewtonFv = .text:0x80320310; // type:function size:0x40
+__dt__14JPAFieldMagnetFv = .text:0x80320350; // type:function size:0x40
+__dt__11JPAFieldAirFv = .text:0x80320390; // type:function size:0x40
+__dt__15JPAFieldGravityFv = .text:0x803203D0; // type:function size:0x40
__ct__11JPAKeyBlockFPCUc = .text:0x80320410; // type:function size:0x10
calc__11JPAKeyBlockFf = .text:0x80320420; // type:function size:0x94
__ct__10JPATextureFPCUc = .text:0x803204C0; // type:function size:0x60
@@ -18590,7 +18590,7 @@ __ct__25JSUList<14JPABaseEmitter>Fv = .text:0x80320CB0; // type:function size:0x
__ct__26JPANode<15JPABaseParticle>Fv = .text:0x80320CE0; // type:function size:0x10
__dt__26JPANode<15JPABaseParticle>Fv = .text:0x80320CF0; // type:function size:0x40
createSimpleEmitterID__17JPAEmitterManagerFRCQ23EGG8Vector3fUsUcUcP18JPAEmitterCallBackP19JPAParticleCallBack = .text:0x80320D30; // type:function size:0xE4
-fn_80320E20 = .text:0x80320E20; // type:function size:0xB8
+fn_80320E20__17JPAEmitterManagerFUcff = .text:0x80320E20; // type:function size:0xB8
calc__17JPAEmitterManagerFUc = .text:0x80320EE0; // type:function size:0x88
draw__17JPAEmitterManagerFPC11JPADrawInfoUc = .text:0x80320F70; // type:function size:0x204
forceDeleteAllEmitter__17JPAEmitterManagerFv = .text:0x80321180; // type:function size:0x58
@@ -36220,15 +36220,15 @@ jpa_dl_x = .data:0x80546FA0; // type:object size:0x20
p_prj = .data:0x80546FC0; // type:object size:0xC
p_direction = .data:0x80546FCC; // type:object size:0x1B4
jumptable_80547180 = .data:0x80547180; // type:object size:0x24 scope:local
-lbl_805471A4 = .data:0x805471A4; // type:object size:0x14
-lbl_805471B8 = .data:0x805471B8; // type:object size:0x14
-lbl_805471CC = .data:0x805471CC; // type:object size:0x14
-lbl_805471E0 = .data:0x805471E0; // type:object size:0x14
-lbl_805471F4 = .data:0x805471F4; // type:object size:0x14
-lbl_80547208 = .data:0x80547208; // type:object size:0x14
-lbl_8054721C = .data:0x8054721C; // type:object size:0x14
-lbl_80547230 = .data:0x80547230; // type:object size:0x14
-lbl_80547244 = .data:0x80547244; // type:object size:0x14
+__vt__12JPAFieldSpin = .data:0x805471A4; // type:object size:0x14
+__vt__18JPAFieldConvection = .data:0x805471B8; // type:object size:0x14
+__vt__12JPAFieldDrag = .data:0x805471CC; // type:object size:0x14
+__vt__14JPAFieldRandom = .data:0x805471E0; // type:object size:0x14
+__vt__14JPAFieldVortex = .data:0x805471F4; // type:object size:0x14
+__vt__14JPAFieldNewton = .data:0x80547208; // type:object size:0x14
+__vt__14JPAFieldMagnet = .data:0x8054721C; // type:object size:0x14
+__vt__11JPAFieldAir = .data:0x80547230; // type:object size:0x14
+__vt__15JPAFieldGravity = .data:0x80547244; // type:object size:0x14
lbl_80547258 = .data:0x80547258; // type:object size:0xC
lbl_80547268 = .data:0x80547268; // type:object size:0x9 scope:local data:string
lbl_80547278 = .data:0x80547278; // type:object size:0x9 scope:local data:string
diff --git a/configure.py b/configure.py
index 5da06004..531df634 100644
--- a/configure.py
+++ b/configure.py
@@ -1219,7 +1219,7 @@ config.libs = [
Object(Matching, "JSystem/JParticle/JPAKeyBlock.cpp"),
Object(Matching, "JSystem/JParticle/JPATexture.cpp"),
Object(Matching, "JSystem/JParticle/JPAResourceLoader.cpp"),
- Object(NonMatching, "JSystem/JParticle/JPAEmitterManager.cpp"),
+ Object(Matching, "JSystem/JParticle/JPAEmitterManager.cpp"),
Object(NonMatching, "JSystem/JParticle/JPAEmitter.cpp"),
Object(NonMatching, "JSystem/JParticle/JPAParticle.cpp"),
Object(Matching, "JSystem/JParticle/JPAMath.cpp"),
diff --git a/include/JSystem/JParticle/JPABaseShape.h b/include/JSystem/JParticle/JPABaseShape.h
index 6c368ffe..dccd5338 100644
--- a/include/JSystem/JParticle/JPABaseShape.h
+++ b/include/JSystem/JParticle/JPABaseShape.h
@@ -53,8 +53,8 @@ struct JPABaseShapeAlphaArg {
*/
struct JPABaseShape {
public:
- /* 8027A6DC */ JPABaseShape(u8 const*, EGG::Heap*);
- /* 8027A7E8 */ void setGX(JPAEmitterWorkData*) const;
+ JPABaseShape(u8 const*, EGG::Heap*);
+ void setGX(JPAEmitterWorkData*) const;
static GXBlendMode st_bm[3];
static GXBlendFactor st_bf[10];
diff --git a/include/JSystem/JParticle/JPAChildShape.h b/include/JSystem/JParticle/JPAChildShape.h
index 598ea3f3..5d63aa34 100644
--- a/include/JSystem/JParticle/JPAChildShape.h
+++ b/include/JSystem/JParticle/JPAChildShape.h
@@ -43,7 +43,7 @@ struct JPAChildShapeData {
*/
class JPAChildShape {
public:
- /* 8027B038 */ JPAChildShape(u8 const*);
+ JPAChildShape(u8 const*);
f32 getPosRndm() const { return mpData->mPosRndm; }
f32 getBaseVel() const { return mpData->mBaseVel; }
diff --git a/include/JSystem/JParticle/JPADynamicsBlock.h b/include/JSystem/JParticle/JPADynamicsBlock.h
index 689dc2b6..f1811246 100644
--- a/include/JSystem/JParticle/JPADynamicsBlock.h
+++ b/include/JSystem/JParticle/JPADynamicsBlock.h
@@ -62,9 +62,9 @@ enum {
*/
class JPADynamicsBlock {
public:
- /* 8027BB18 */ JPADynamicsBlock(u8 const*);
- /* 8027BB4C */ void init();
- /* 8027BBE8 */ void create(JPAEmitterWorkData*);
+ JPADynamicsBlock(u8 const*);
+ void init();
+ void create(JPAEmitterWorkData*);
void calc(JPAEmitterWorkData* work) { mpCalcVolumeFunc(work); }
diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h
index f220ddea..d6f84636 100644
--- a/include/JSystem/JParticle/JPAEmitter.h
+++ b/include/JSystem/JParticle/JPAEmitter.h
@@ -75,12 +75,12 @@ struct JPAEmitterWorkData {
class JPAEmitterCallBack {
public:
virtual ~JPAEmitterCallBack() = 0;
- /* 80050368 */ virtual void execute(JPABaseEmitter*) {}
- /* 80050374 */ virtual void executeAfter(JPABaseEmitter*) {}
- /* 8005036C */ virtual void draw(JPABaseEmitter*) {}
- /* 80050370 */ virtual void drawAfter(JPABaseEmitter*) {}
-
- /* 8027E6A4 */ //~JPAEmitterCallBack();
+ virtual void execute(JPABaseEmitter*) {}
+ virtual void executeAfter(JPABaseEmitter*) {}
+ virtual void draw(JPABaseEmitter*) {}
+ virtual void drawAfter(JPABaseEmitter*) {}
+
+ //~JPAEmitterCallBack();
};
enum {
@@ -100,18 +100,18 @@ enum {
*/
class JPABaseEmitter {
public:
- /* 8027E5EC */ ~JPABaseEmitter() {}
- /* 8027E64C */ JPABaseEmitter() : mLink(this), mRndm(0) {}
- /* 8027E6EC */ void init(JPAEmitterManager*, JPAResource*);
- /* 8027EDD4 */ bool processTillStartFrame();
- /* 8027EE14 */ bool processTermination();
- /* 8027EEB0 */ void calcEmitterGlobalPosition(EGG::Vector3f*) const;
- /* 8027EC60 */ void deleteAllParticle();
- /* 8027EB60 */ JPABaseParticle* createChild(JPABaseParticle*);
- /* 8027EA40 */ JPABaseParticle* createParticle();
- /* 8027EF30 */ u32 getCurrentCreateNumber() const;
- /* 8027EF40 */ u8 getDrawCount() const;
- /* 8027EF50 */ bool loadTexture(u8, GXTexMapID);
+ ~JPABaseEmitter() {}
+ JPABaseEmitter() : mLink(this), mRndm(0) {}
+ void init(JPAEmitterManager*, JPAResource*);
+ bool processTillStartFrame();
+ bool processTermination();
+ void calcEmitterGlobalPosition(EGG::Vector3f*) const;
+ void deleteAllParticle();
+ JPABaseParticle* createChild(JPABaseParticle*);
+ JPABaseParticle* createParticle();
+ u32 getCurrentCreateNumber() const;
+ u8 getDrawCount() const;
+ bool loadTexture(u8, GXTexMapID);
void initStatus(u32 status) { mStatus = status; }
void setStatus(u32 status) { mStatus |= status; }
diff --git a/include/JSystem/JParticle/JPAEmitterManager.h b/include/JSystem/JParticle/JPAEmitterManager.h
index aa5113c9..f2085e80 100644
--- a/include/JSystem/JParticle/JPAEmitterManager.h
+++ b/include/JSystem/JParticle/JPAEmitterManager.h
@@ -21,17 +21,21 @@ struct JPAEmitterWorkData;
*/
class JPAEmitterManager {
public:
- /* 8027DCA0 */ JPAEmitterManager(u32, u32, EGG::Heap*, u8, u8);
- /* 8027DEBC */ JPABaseEmitter* createSimpleEmitterID(EGG::Vector3f const&, u16, u8, u8,
+ JPAEmitterManager(u32, u32, EGG::Heap*, u8, u8);
+ JPABaseEmitter* createSimpleEmitterID(EGG::Vector3f const&, u16, u8, u8,
JPAEmitterCallBack*, JPAParticleCallBack*);
- /* 8027DFA0 */ void calc(u8);
- /* 8027E028 */ void draw(JPADrawInfo const*, u8);
- /* 8027E220 */ void forceDeleteAllEmitter();
- /* 8027E278 */ void forceDeleteGroupEmitter(u8);
- /* 8027E2D8 */ void forceDeleteEmitter(JPABaseEmitter*);
- /* 8027E344 */ void entryResourceManager(JPAResourceManager*, u8);
- /* 8027E354 */ void clearResourceManager(u8);
- /* 8027E3F4 */ void calcYBBCam();
+
+ ~JPAEmitterManager() {}
+
+ void fn_80320E20(u8, f32, f32); // SS addition
+ void calc(u8);
+ void draw(JPADrawInfo const*, u8);
+ void forceDeleteAllEmitter();
+ void forceDeleteGroupEmitter(u8);
+ void forceDeleteEmitter(JPABaseEmitter*);
+ void entryResourceManager(JPAResourceManager*, u8);
+ void clearResourceManager(u8);
+ void calcYBBCam();
JPAResourceManager* getResourceManager(u16 idx) { return pResMgrAry[idx]; }
public:
diff --git a/include/JSystem/JParticle/JPAExTexShape.h b/include/JSystem/JParticle/JPAExTexShape.h
index 04a357b1..5efd0eac 100644
--- a/include/JSystem/JParticle/JPAExTexShape.h
+++ b/include/JSystem/JParticle/JPAExTexShape.h
@@ -27,7 +27,7 @@ struct JPAExTexShapeData {
*/
class JPAExTexShape {
public:
- /* 8027B13C */ JPAExTexShape(u8 const*);
+ JPAExTexShape(u8 const*);
const f32* getIndTexMtx() const { return &mpData->mIndTexMtx[0][0]; }
s8 getExpScale() const { return mpData->mExpScale; }
diff --git a/include/JSystem/JParticle/JPAExtraShape.h b/include/JSystem/JParticle/JPAExtraShape.h
index 186285e9..a567d768 100644
--- a/include/JSystem/JParticle/JPAExtraShape.h
+++ b/include/JSystem/JParticle/JPAExtraShape.h
@@ -46,8 +46,8 @@ struct JPAExtraShapeData {
*/
class JPAExtraShape {
public:
- /* 8027AD88 */ JPAExtraShape(u8 const*);
- /* 8027ADBC */ void init();
+ JPAExtraShape(u8 const*);
+ void init();
f32 getScaleInTiming() const { return mpData->mScaleInTiming; }
f32 getScaleOutTiming() const { return mpData->mScaleOutTiming; }
diff --git a/include/JSystem/JParticle/JPAFieldBlock.h b/include/JSystem/JParticle/JPAFieldBlock.h
index 01ed4d62..108b8bf6 100644
--- a/include/JSystem/JParticle/JPAFieldBlock.h
+++ b/include/JSystem/JParticle/JPAFieldBlock.h
@@ -11,92 +11,92 @@ class JPAFieldBlock;
class JPAFieldBase {
public:
- /* 8027BDEC */ void calcAffect(JPAFieldBlock*, JPABaseParticle*);
- /* 8027BF18 */ f32 calcFadeAffect(JPAFieldBlock*, f32) const;
+ void calcAffect(JPAFieldBlock*, JPABaseParticle*);
+ f32 calcFadeAffect(JPAFieldBlock*, f32) const;
- /* 8027D3AC */ virtual ~JPAFieldBase() {}
- /* 80276A8C */ virtual void prepare(JPAEmitterWorkData*, JPAFieldBlock*) {}
+ virtual ~JPAFieldBase() {}
+ virtual void prepare(JPAEmitterWorkData*, JPAFieldBlock*) {}
virtual void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*) = 0;
/* 0x04 */ EGG::Vector3f mAccel;
};
-class JPAFieldVortex : public JPAFieldBase {
+class JPAFieldGravity : public JPAFieldBase {
public:
- /* 8027C56C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
- /* 8027C674 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
- /* 8027D564 */ ~JPAFieldVortex() {}
-
- /* 0x10 */ EGG::Vector3f field_0x10;
- /* 0x1C */ f32 field_0x1c;
- /* 0x20 */ f32 field_0x20;
+ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
+ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
+ ~JPAFieldGravity() {}
};
-class JPAFieldSpin : public JPAFieldBase {
+class JPAFieldAir : public JPAFieldBase {
public:
- /* 8027CE64 */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
- /* 8027CFA8 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
- /* 8027D3F4 */ ~JPAFieldSpin() {}
-
- /* 0x10 */ EGG::Vector3f field_0x10;
- /* 0x1C */ EGG::Vector3f field_0x1c;
- /* 0x28 */ EGG::Vector3f field_0x28;
+ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
+ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
+ ~JPAFieldAir() {}
};
-class JPAFieldRandom : public JPAFieldBase {
+class JPAFieldMagnet : public JPAFieldBase {
public:
- /* 8027CCCC */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
- /* 8027D4AC */ ~JPAFieldRandom() {}
+ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
+ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
+ ~JPAFieldMagnet() {}
+
+ /* 0x10 */ EGG::Vector3f mDir;
};
class JPAFieldNewton : public JPAFieldBase {
public:
- /* 8027C36C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
- /* 8027C3E0 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
- /* 8027D5C0 */ ~JPAFieldNewton() {}
+ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
+ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
+ ~JPAFieldNewton() {}
/* 0x10 */ EGG::Vector3f mDir;
/* 0x1C */ f32 mCutoff;
};
-class JPAFieldMagnet : public JPAFieldBase {
+class JPAFieldVortex : public JPAFieldBase {
public:
- /* 8027C24C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
- /* 8027C29C */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
- /* 8027D61C */ ~JPAFieldMagnet() {}
+ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
+ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
+ ~JPAFieldVortex() {}
- /* 0x10 */ EGG::Vector3f mDir;
+ /* 0x10 */ EGG::Vector3f field_0x10;
+ /* 0x1C */ f32 field_0x1c;
+ /* 0x20 */ f32 field_0x20;
};
-class JPAFieldGravity : public JPAFieldBase {
+class JPAFieldRandom : public JPAFieldBase {
public:
- /* 8027BFB4 */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
- /* 8027C054 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
- /* 8027D6D4 */ ~JPAFieldGravity() {}
+ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
+ ~JPAFieldRandom() {}
};
class JPAFieldDrag : public JPAFieldBase {
public:
- /* 8027CDE4 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
- /* 8027D450 */ ~JPAFieldDrag() {}
+ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
+ ~JPAFieldDrag() {}
};
class JPAFieldConvection : public JPAFieldBase {
public:
- /* 8027C814 */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
- /* 8027CA94 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
- /* 8027D508 */ ~JPAFieldConvection() {}
+ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
+ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
+ ~JPAFieldConvection() {}
/* 0x10 */ EGG::Vector3f field_0x10;
/* 0x1C */ EGG::Vector3f field_0x1c;
/* 0x28 */ EGG::Vector3f field_0x28;
};
-class JPAFieldAir : public JPAFieldBase {
+class JPAFieldSpin : public JPAFieldBase {
public:
- /* 8027C07C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
- /* 8027C1B8 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
- /* 8027D678 */ ~JPAFieldAir() {}
+ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
+ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
+ ~JPAFieldSpin() {}
+
+ /* 0x10 */ EGG::Vector3f field_0x10;
+ /* 0x1C */ EGG::Vector3f field_0x1c;
+ /* 0x28 */ EGG::Vector3f field_0x28;
};
// unknown name
@@ -119,8 +119,8 @@ public:
class JPAFieldBlock {
public:
- /* 8027D088 */ JPAFieldBlock(u8 const*, EGG::Heap*);
- /* 8027D0C0 */ void init(EGG::Heap*);
+ JPAFieldBlock(u8 const*, EGG::Heap*);
+ void init(EGG::Heap*);
u32 getType() { return mpData->mFlags & 0xF; }
u32 getAddType() { return (mpData->mFlags >> 8) & 3; }
diff --git a/include/JSystem/JParticle/JPAKeyBlock.h b/include/JSystem/JParticle/JPAKeyBlock.h
index a9eb0fbb..005dc6c1 100644
--- a/include/JSystem/JParticle/JPAKeyBlock.h
+++ b/include/JSystem/JParticle/JPAKeyBlock.h
@@ -8,8 +8,8 @@
*
*/
struct JPAKeyBlock {
- /* 8027D730 */ JPAKeyBlock(u8 const*);
- /* 8027D740 */ f32 calc(f32);
+ JPAKeyBlock(u8 const*);
+ f32 calc(f32);
u8 getID() { return mDataStart[8]; }
diff --git a/include/JSystem/JParticle/JPAParticle.h b/include/JSystem/JParticle/JPAParticle.h
index d1c96f9e..cc56b8e1 100644
--- a/include/JSystem/JParticle/JPAParticle.h
+++ b/include/JSystem/JParticle/JPAParticle.h
@@ -20,13 +20,13 @@ struct JPAEmitterWorkData;
class JPABaseParticle {
public:
~JPABaseParticle() {}
- /* 8027EFEC */ void init_p(JPAEmitterWorkData*);
- /* 8027F8C8 */ void init_c(JPAEmitterWorkData*, JPABaseParticle*);
- /* 8027FFD0 */ bool calc_p(JPAEmitterWorkData*);
- /* 80280260 */ bool calc_c(JPAEmitterWorkData*);
- /* 802804C8 */ bool canCreateChild(JPAEmitterWorkData*);
- /* 80280548 */ f32 getWidth(JPABaseEmitter const*) const;
- /* 80280568 */ f32 getHeight(JPABaseEmitter const*) const;
+ void init_p(JPAEmitterWorkData*);
+ void init_c(JPAEmitterWorkData*, JPABaseParticle*);
+ bool calc_p(JPAEmitterWorkData*);
+ bool calc_c(JPAEmitterWorkData*);
+ bool canCreateChild(JPAEmitterWorkData*);
+ f32 getWidth(JPABaseEmitter const*) const;
+ f32 getHeight(JPABaseEmitter const*) const;
int getAge() { return mAge; }
void setOffsetPosition(const EGG::Vector3f& pos) { mOffsetPosition.set(pos); }
void setOffsetPosition(f32 x, f32 y, f32 z) { mOffsetPosition.set(x, y, z); }
diff --git a/include/JSystem/JParticle/JPAResource.h b/include/JSystem/JParticle/JPAResource.h
index af46fa79..2d41f9b7 100644
--- a/include/JSystem/JParticle/JPAResource.h
+++ b/include/JSystem/JParticle/JPAResource.h
@@ -22,20 +22,20 @@ class JPAKeyBlock;
*/
class JPAResource {
public:
- /* 80274010 */ JPAResource();
- /* 80274080 */ void init(EGG::Heap*);
- /* 802755E8 */ bool calc(JPAEmitterWorkData*, JPABaseEmitter*);
- /* 80275A94 */ void draw(JPAEmitterWorkData*, JPABaseEmitter*);
- /* 80275B74 */ void drawP(JPAEmitterWorkData*);
- /* 80275EB0 */ void drawC(JPAEmitterWorkData*);
- /* 802761A8 */ void setPTev();
- /* 8027642C */ void setCTev(JPAEmitterWorkData*);
- /* 8027658C */ void calc_p(JPAEmitterWorkData*, JPABaseParticle*);
- /* 80276608 */ void calc_c(JPAEmitterWorkData*, JPABaseParticle*);
- /* 80276684 */ void calcField(JPAEmitterWorkData*, JPABaseParticle*);
- /* 80276700 */ void calcKey(JPAEmitterWorkData*);
- /* 80276840 */ void calcWorkData_c(JPAEmitterWorkData*);
- /* 80276A0C */ void calcWorkData_d(JPAEmitterWorkData*);
+ JPAResource();
+ void init(EGG::Heap*);
+ bool calc(JPAEmitterWorkData*, JPABaseEmitter*);
+ void draw(JPAEmitterWorkData*, JPABaseEmitter*);
+ void drawP(JPAEmitterWorkData*);
+ void drawC(JPAEmitterWorkData*);
+ void setPTev();
+ void setCTev(JPAEmitterWorkData*);
+ void calc_p(JPAEmitterWorkData*, JPABaseParticle*);
+ void calc_c(JPAEmitterWorkData*, JPABaseParticle*);
+ void calcField(JPAEmitterWorkData*, JPABaseParticle*);
+ void calcKey(JPAEmitterWorkData*);
+ void calcWorkData_c(JPAEmitterWorkData*);
+ void calcWorkData_d(JPAEmitterWorkData*);
JPABaseShape* getBsp() const { return mpBaseShape; }
JPAExtraShape* getEsp() const { return mpExtraShape; }
diff --git a/include/JSystem/JParticle/JPAResourceLoader.h b/include/JSystem/JParticle/JPAResourceLoader.h
index 49cb6ce7..b5bb3022 100644
--- a/include/JSystem/JParticle/JPAResourceLoader.h
+++ b/include/JSystem/JParticle/JPAResourceLoader.h
@@ -7,8 +7,8 @@ class JPAResourceManager;
class JPAResourceLoader {
public:
- /* 8027D8A0 */ JPAResourceLoader(u8 const*, JPAResourceManager*);
- /* 8027D8E0 */ void load_jpc(u8 const*, JPAResourceManager*);
+ JPAResourceLoader(u8 const*, JPAResourceManager*);
+ void load_jpc(u8 const*, JPAResourceManager*);
};
#endif /* JPARESOURCELOADER_H */
diff --git a/include/JSystem/JParticle/JPAResourceManager.h b/include/JSystem/JParticle/JPAResourceManager.h
index 16ea8ef9..409bde87 100644
--- a/include/JSystem/JParticle/JPAResourceManager.h
+++ b/include/JSystem/JParticle/JPAResourceManager.h
@@ -14,13 +14,13 @@ class JPAResource;
*/
class JPAResourceManager {
public:
- /* 80273E10 */ JPAResourceManager(void const*, EGG::Heap*);
- /* 80273E68 */ JPAResource* getResource(u16) const;
- /* 80273EA8 */ bool checkUserIndexDuplication(u16) const;
- /* 80273EEC */ const EGG::ResTIMG* swapTexture(EGG::ResTIMG const*, char const*);
- /* 80273F8C */ void registRes(JPAResource*);
- /* 80273FAC */ void registTex(JPATexture*);
- /* 80273FCC */ u32 getResUserWork(u16) const;
+ JPAResourceManager(void const*, EGG::Heap*);
+ JPAResource* getResource(u16) const;
+ bool checkUserIndexDuplication(u16) const;
+ const EGG::ResTIMG* swapTexture(EGG::ResTIMG const*, char const*);
+ void registRes(JPAResource*);
+ void registTex(JPATexture*);
+ u32 getResUserWork(u16) const;
void load(u16 idx, GXTexMapID texMapID) { mpTexArr[idx]->load(texMapID); }
diff --git a/include/JSystem/JUtility/JUTAssert.h b/include/JSystem/JUtility/JUTAssert.h
index 9418a9b9..c8459b1a 100644
--- a/include/JSystem/JUtility/JUTAssert.h
+++ b/include/JSystem/JUtility/JUTAssert.h
@@ -44,12 +44,12 @@
#endif
namespace JUTAssertion {
- /* 802E495C */ void create();
- /* 802E4960 */ u32 flush_subroutine();
- /* 802E499C */ void flushMessage();
- /* 802E4A54 */ void flushMessage_dbPrint();
- /* 802E4C34 */ void setVisible(bool);
- /* 802E4C3C */ void setMessageCount(int);
+ void create();
+ u32 flush_subroutine();
+ void flushMessage();
+ void flushMessage_dbPrint();
+ void setVisible(bool);
+ void setMessageCount(int);
u32 getSDevice();
void showAssert(u32 device, const char * file, int line, const char * assertion);
diff --git a/include/egg/math/eggVector.h b/include/egg/math/eggVector.h
index 1c8a220e..f1256a6a 100644
--- a/include/egg/math/eggVector.h
+++ b/include/egg/math/eggVector.h
@@ -48,7 +48,7 @@ struct Vector3f : public nw4r::math::VEC3 {
return Vector3f(-x, -y, -z);
}
- Vector3f operator-(const Vector3f &v) {
+ Vector3f operator-(const Vector3f &v) const {
return Vector3f(x - v.x, y - v.y, z - v.z);
}
diff --git a/src/JSystem/JParticle/JPADynamicsBlock.cpp b/src/JSystem/JParticle/JPADynamicsBlock.cpp
index ab45d938..15b6f2f7 100644
--- a/src/JSystem/JParticle/JPADynamicsBlock.cpp
+++ b/src/JSystem/JParticle/JPADynamicsBlock.cpp
@@ -4,8 +4,9 @@
//
#include "JSystem/JParticle/JPADynamicsBlock.h"
-#include "JSystem/JMath/JMATrigonometric.h"
+
#include "JSystem/JParticle/JPAEmitter.h"
+#include "nw4r/math/math_triangular.h"
/* 8027B144-8027B220 275A84 00DC+00 1/1 0/0 0/0 .text JPAVolumePoint__FP18JPAEmitterWorkData */
void JPAVolumePoint(JPAEmitterWorkData* work) {
@@ -53,9 +54,10 @@ void JPAVolumeCircle(JPAEmitterWorkData* work) {
}
distance = work->mVolumeSize * (work->mVolumeMinRad + distance * (1.0f - work->mVolumeMinRad));
- work->mVolumeCalcData.mVolumePos.set(distance * JMASSin(theta), 0.0f,
- distance * JMASCos(theta));
- // work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
+ work->mVolumeCalcData.mVolumePos.set(distance * nw4r::math::SinIdx(theta), 0.0f,
+ distance * nw4r::math::CosIdx(theta));
+ work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos;
+ work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f,
work->mVolumeCalcData.mVolumePos.z);
}
@@ -65,7 +67,8 @@ void JPAVolumeCube(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVolumePos.set(work->mpEmtr->get_r_zh() * work->mVolumeSize,
work->mpEmtr->get_r_zh() * work->mVolumeSize,
work->mpEmtr->get_r_zh() * work->mVolumeSize);
- // work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
+ work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos;
+ work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f, work->mVolumeCalcData.mVolumePos.z);
}
@@ -97,9 +100,10 @@ static void JPAVolumeSphere(JPAEmitterWorkData* work) {
rnd = 1.0f - rnd * rnd * rnd;
}
f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad));
- work->mVolumeCalcData.mVolumePos.set(rad * JMASCos(phi) * JMASSin(theta), -rad * JMASSin(phi),
- rad * JMASCos(phi) * JMASCos(theta));
- // work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
+ work->mVolumeCalcData.mVolumePos.set(rad * nw4r::math::CosIdx(phi) * nw4r::math::SinIdx(theta), -rad * nw4r::math::SinIdx(phi),
+ rad * nw4r::math::CosIdx(phi) * nw4r::math::CosIdx(theta));
+ work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos;
+ work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f,
work->mVolumeCalcData.mVolumePos.z);
}
@@ -113,8 +117,9 @@ static void JPAVolumeCylinder(JPAEmitterWorkData* work) {
}
f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad));
work->mVolumeCalcData.mVolumePos.set(
- rad * JMASSin(theta), work->mVolumeSize * work->mpEmtr->get_r_zp(), rad * JMASCos(theta));
- // work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
+ rad * nw4r::math::SinIdx(theta), work->mVolumeSize * work->mpEmtr->get_r_zp(), rad * nw4r::math::CosIdx(theta));
+ work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos;
+ work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f,
work->mVolumeCalcData.mVolumePos.z);
}
@@ -124,13 +129,14 @@ static void JPAVolumeTorus(JPAEmitterWorkData* work) {
s16 theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
s16 phi = work->mpEmtr->get_r_ss();
f32 rad = work->mVolumeSize * work->mVolumeMinRad;
- work->mVolumeCalcData.mVelAxis.set(rad * JMASSin(theta) * JMASCos(phi), rad * JMASSin(phi),
- rad * JMASCos(theta) * JMASCos(phi));
+ work->mVolumeCalcData.mVelAxis.set(rad * nw4r::math::SinIdx(theta) * nw4r::math::CosIdx(phi), rad * nw4r::math::SinIdx(phi),
+ rad * nw4r::math::CosIdx(theta) * nw4r::math::CosIdx(phi));
work->mVolumeCalcData.mVolumePos.set(
- work->mVolumeCalcData.mVelAxis.x + work->mVolumeSize * JMASSin(theta),
+ work->mVolumeCalcData.mVelAxis.x + work->mVolumeSize * nw4r::math::SinIdx(theta),
work->mVolumeCalcData.mVelAxis.y,
- work->mVolumeCalcData.mVelAxis.z + work->mVolumeSize * JMASCos(theta));
- // work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
+ work->mVolumeCalcData.mVelAxis.z + work->mVolumeSize * nw4r::math::CosIdx(theta));
+ work->mVolumeCalcData.mVelOmni = work->mVolumeCalcData.mVolumePos;
+ work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
}
/* 8027BB18-8027BB4C 276458 0034+00 0/0 1/1 0/0 .text __ct__16JPADynamicsBlockFPCUc */
diff --git a/src/JSystem/JParticle/JPAEmitterManager.cpp b/src/JSystem/JParticle/JPAEmitterManager.cpp
index 6d39cf80..54f4a874 100644
--- a/src/JSystem/JParticle/JPAEmitterManager.cpp
+++ b/src/JSystem/JParticle/JPAEmitterManager.cpp
@@ -3,6 +3,8 @@
// Translation Unit: JPAEmitterManager
//
+#include "JSystem/JParticle/JPAList.h"
+#include "JSystem/JSupport/JSUList.h"
#include "egg/core/eggHeap.h"
#include "JSystem/JParticle/JPAEmitterManager.h"
#include "JSystem/JParticle/JPAEmitter.h"
@@ -10,6 +12,8 @@
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "egg/math/eggVector.h"
+#include "rvl/GX/GXTransform.h"
+#include "rvl/GX/GXTypes.h"
#include "rvl/GX.h"
/* 8027DCA0-8027DEBC 2785E0 021C+00 0/0 1/1 0/0 .text __ct__17JPAEmitterManagerFUlUlP7EGG::HeapUcUc
@@ -23,25 +27,25 @@ JPAEmitterManager::JPAEmitterManager(u32 i_ptclNum, u32 i_emtrNum, EGG::Heap* pH
JUT_ASSERT(40, emtrNum && ptclNum && gidMax && ridMax);
- JPABaseEmitter* p_emtr_link = new (pHeap, 0) JPABaseEmitter[emtrNum];
+ JPABaseEmitter* p_emtr_link = new (pHeap, 4) JPABaseEmitter[emtrNum];
JUT_ASSERT(44, p_emtr_link);
for (u32 i = 0; i < emtrNum; i++)
mFreeEmtrList.prepend(&p_emtr_link[i].mLink);
- JPANode<JPABaseParticle>* p_ptcl_node = new (pHeap, 0) JPANode<JPABaseParticle>[ptclNum];
+ JPANode<JPABaseParticle>* p_ptcl_node = new (pHeap, 4) JPANode<JPABaseParticle>[ptclNum];
JUT_ASSERT(51, p_ptcl_node);
for (u32 i = 0; i < ptclNum; i++)
mPtclPool.push_back(&p_ptcl_node[i]);
- pEmtrUseList = new (pHeap, 0) JSUList<JPABaseEmitter>[gidMax];
+ pEmtrUseList = new (pHeap, 4) JSUList<JPABaseEmitter>[gidMax];
JUT_ASSERT(58, pEmtrUseList);
- pResMgrAry = new (pHeap, 0) JPAResourceManager*[ridMax];
+ pResMgrAry = new (pHeap, 4) JPAResourceManager*[ridMax];
JUT_ASSERT(62, pResMgrAry)
for (int i = 0; i < ridMax; i++) {
pResMgrAry[i] = NULL;
}
- pWd = new (pHeap, 0) JPAEmitterWorkData();
+ pWd = new (pHeap, 4) JPAEmitterWorkData();
JUT_ASSERT(67, pWd);
}
@@ -79,6 +83,41 @@ JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(EGG::Vector3f const& po
return NULL;
}
+// SS addition
+void JPAEmitterManager::fn_80320E20(u8 group_id, f32 of_x, f32 of_z) {
+ JSULink<JPABaseEmitter> *pNext = NULL;
+ for (JSULink<JPABaseEmitter> *pLink = pEmtrUseList[group_id].getFirst(); pLink != pEmtrUseList[group_id].getEnd();
+ pLink = pNext) {
+ pNext = pLink->getNext();
+ JPABaseEmitter *pEmit = pLink->getObject();
+
+ EGG::Vector3f offset;
+ JPANode<JPABaseParticle> *pNextBase = NULL;
+
+ for (JPANode<JPABaseParticle> *baseLink = pEmit->mAlivePtclBase.getFirst();
+ baseLink != pEmit->mAlivePtclBase.getEnd(); baseLink = pNextBase) {
+ pNextBase = baseLink->getNext();
+
+ JPABaseParticle *o = baseLink->getObject();
+ o->getOffsetPosition(offset);
+ offset.x += of_x;
+ offset.z += of_z;
+ o->setOffsetPosition(offset);
+ }
+
+ for (JPANode<JPABaseParticle> *childLink = pEmit->mAlivePtclChld.getFirst();
+ childLink != pEmit->mAlivePtclChld.getEnd(); childLink = pNextBase) {
+ pNextBase = childLink->getNext();
+
+ JPABaseParticle *o = childLink->getObject();
+ o->getOffsetPosition(offset);
+ offset.x += of_x;
+ offset.z += of_z;
+ o->setOffsetPosition(offset);
+ }
+ }
+}
+
/* 8027DFA0-8027E028 2788E0 0088+00 0/0 3/3 0/0 .text calc__17JPAEmitterManagerFUc */
void JPAEmitterManager::calc(u8 group_id) {
JUT_ASSERT(154, group_id < gidMax);
@@ -130,6 +169,8 @@ void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 group_id) {
emtr->mpRes->draw(pWd, emtr);
}
}
+
+ GXSetClipMode(GX_CLIP_ENABLE);
}
/* 8027E220-8027E278 278B60 0058+00 0/0 1/1 0/0 .text forceDeleteAllEmitter__17JPAEmitterManagerFv
diff --git a/src/JSystem/JParticle/JPAExtraShape.cpp b/src/JSystem/JParticle/JPAExtraShape.cpp
index 5271261a..0c0e8bf5 100644
--- a/src/JSystem/JParticle/JPAExtraShape.cpp
+++ b/src/JSystem/JParticle/JPAExtraShape.cpp
@@ -4,10 +4,9 @@
//
#include "JSystem/JParticle/JPAExtraShape.h"
-#include "JSystem/JMath/JMATrigonometric.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
-#include "rvl/OS.h"
+#include "nw4r/math/math_triangular.h"
/* 8027A918-8027A990 275258 0078+00 0/0 1/1 0/0 .text
* JPACalcScaleX__FP18JPAEmitterWorkDataP15JPABaseParticle */
@@ -116,7 +115,7 @@ void JPACalcAlphaFlickAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
alpha = esp->getAlphaBaseValue();
}
s32 theta = ptcl->mAlphaWaveRandom * ptcl->mAge * 16384.0f * (1.0f - esp->getAlphaFreq());
- f32 wave = JMASSin(theta);
+ f32 wave = nw4r::math::SinIdx(theta);
alpha *= (1.0f + esp->getAlphaAmp() * (wave - 1.0f) * 0.5f) * 255.0f;
OSf32tou8(&alpha, &ptcl->mPrmColorAlphaAnm);
}