JPAEmitterManager OK

This commit is contained in:
robojumper
2025-04-27 11:14:54 +02:00
parent 70125c1eac
commit a962cdd14a
21 changed files with 230 additions and 177 deletions
+3
View File
@@ -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
+20 -20
View File
@@ -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
+1 -1
View File
@@ -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"),
+2 -2
View File
@@ -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];
+1 -1
View File
@@ -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; }
+3 -3
View File
@@ -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); }
+18 -18
View File
@@ -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; }
+14 -10
View File
@@ -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:
+1 -1
View File
@@ -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; }
+2 -2
View File
@@ -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; }
+57 -57
View File
@@ -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 JPAFieldGravity : public JPAFieldBase {
public:
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldGravity() {}
};
class JPAFieldAir : public JPAFieldBase {
public:
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldAir() {}
};
class JPAFieldMagnet : public JPAFieldBase {
public:
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldMagnet() {}
/* 0x10 */ EGG::Vector3f mDir;
};
class JPAFieldNewton : public JPAFieldBase {
public:
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldNewton() {}
/* 0x10 */ EGG::Vector3f mDir;
/* 0x1C */ f32 mCutoff;
};
class JPAFieldVortex : public JPAFieldBase {
public:
/* 8027C56C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
/* 8027C674 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D564 */ ~JPAFieldVortex() {}
void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
~JPAFieldVortex() {}
/* 0x10 */ EGG::Vector3f field_0x10;
/* 0x1C */ f32 field_0x1c;
/* 0x20 */ f32 field_0x20;
};
class JPAFieldSpin : 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;
};
class JPAFieldRandom : public JPAFieldBase {
public:
/* 8027CCCC */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D4AC */ ~JPAFieldRandom() {}
};
class JPAFieldNewton : public JPAFieldBase {
public:
/* 8027C36C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
/* 8027C3E0 */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D5C0 */ ~JPAFieldNewton() {}
/* 0x10 */ EGG::Vector3f mDir;
/* 0x1C */ f32 mCutoff;
};
class JPAFieldMagnet : public JPAFieldBase {
public:
/* 8027C24C */ void prepare(JPAEmitterWorkData*, JPAFieldBlock*);
/* 8027C29C */ void calc(JPAEmitterWorkData*, JPAFieldBlock*, JPABaseParticle*);
/* 8027D61C */ ~JPAFieldMagnet() {}
/* 0x10 */ EGG::Vector3f mDir;
};
class JPAFieldGravity : 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; }
+2 -2
View File
@@ -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]; }
+7 -7
View File
@@ -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); }
+14 -14
View File
@@ -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; }
@@ -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 */
@@ -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); }
+6 -6
View File
@@ -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);
+1 -1
View File
@@ -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);
}
+21 -15
View File
@@ -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 */
+46 -5
View File
@@ -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
+2 -3
View File
@@ -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);
}