diff --git a/config/GZ2E01/symbols.txt b/config/GZ2E01/symbols.txt index e1ea0964800..8aee972b231 100644 --- a/config/GZ2E01/symbols.txt +++ b/config/GZ2E01/symbols.txt @@ -21831,7 +21831,7 @@ mPcallback__18dPa_modelEcallBack = .sbss:0x80450E94; // type:object size:0x4 sco mModel__18dPa_modelEcallBack = .sbss:0x80450E98; // type:object size:0x4 scope:global align:4 data:4byte struct_80450E9C = .sbss:0x80450E9C; // type:object size:0x1 scope:local align:1 data:byte struct_80450E9D = .sbss:0x80450E9D; // type:object size:0x1 scope:local align:1 data:byte -data_80450E9E = .sbss:0x80450E9E; // type:object size:0x1 scope:local align:1 data:byte +init$2305 = .sbss:0x80450E9E; // type:object size:0x1 scope:local align:1 data:byte mEmitterMng__13dPa_control_c = .sbss:0x80450EA0; // type:object size:0x4 scope:global align:4 data:4byte mWaterBubblePcallBack__13dPa_control_c = .sbss:0x80450EA4; // type:object size:0x4 scope:global align:4 data:4byte mFsenthPcallBack__13dPa_control_c = .sbss:0x80450EA8; // type:object size:0x4 scope:global align:4 data:4byte diff --git a/config/GZ2J01/symbols.txt b/config/GZ2J01/symbols.txt index 2abcdb3c916..945692afd70 100644 --- a/config/GZ2J01/symbols.txt +++ b/config/GZ2J01/symbols.txt @@ -21847,7 +21847,7 @@ mPcallback__18dPa_modelEcallBack = .sbss:0x8044AFD4; // type:object size:0x4 sco mModel__18dPa_modelEcallBack = .sbss:0x8044AFD8; // type:object size:0x4 scope:global align:4 data:4byte struct_80450E9C = .sbss:0x8044AFDC; // type:object size:0x1 scope:local align:1 data:byte struct_80450E9D = .sbss:0x8044AFDD; // type:object size:0x1 scope:local align:1 data:byte -data_80450E9E = .sbss:0x8044AFDE; // type:object size:0x1 scope:local align:1 data:byte +init$2305 = .sbss:0x8044AFDE; // type:object size:0x1 scope:local align:1 data:byte mEmitterMng__13dPa_control_c = .sbss:0x8044AFE0; // type:object size:0x4 scope:global align:4 data:4byte mWaterBubblePcallBack__13dPa_control_c = .sbss:0x8044AFE4; // type:object size:0x4 scope:global align:4 data:4byte mFsenthPcallBack__13dPa_control_c = .sbss:0x8044AFE8; // type:object size:0x4 scope:global align:4 data:4byte diff --git a/config/GZ2P01/symbols.txt b/config/GZ2P01/symbols.txt index 2922f6d2ed4..8b291b412dd 100644 --- a/config/GZ2P01/symbols.txt +++ b/config/GZ2P01/symbols.txt @@ -21852,9 +21852,9 @@ lbl_80452E48 = .sbss:0x80452E48; // type:object size:0x1 data:byte mEcallback__18dPa_modelEcallBack = .sbss:0x80452E50; // type:object size:0x4 scope:global align:4 data:4byte mPcallback__18dPa_modelEcallBack = .sbss:0x80452E54; // type:object size:0x4 scope:global align:4 data:4byte mModel__18dPa_modelEcallBack = .sbss:0x80452E58; // type:object size:0x4 scope:global align:4 data:4byte -lbl_80452E5C = .sbss:0x80452E5C; // type:object size:0x1 data:byte -lbl_80452E5D = .sbss:0x80452E5D; // type:object size:0x1 data:byte -lbl_80452E5E = .sbss:0x80452E5E; // type:object size:0x1 data:byte +struct_80450E9C = .sbss:0x80452E5C; // type:object size:0x1 data:byte +struct_80450E9D = .sbss:0x80452E5D; // type:object size:0x1 data:byte +init$2305 = .sbss:0x80452E5E; // type:object size:0x1 data:byte mEmitterMng__13dPa_control_c = .sbss:0x80452E60; // type:object size:0x4 scope:global align:4 data:4byte mWaterBubblePcallBack__13dPa_control_c = .sbss:0x80452E64; // type:object size:0x4 scope:global align:4 data:4byte mFsenthPcallBack__13dPa_control_c = .sbss:0x80452E68; // type:object size:0x4 scope:global align:4 data:4byte diff --git a/configure.py b/configure.py index 8d98af81084..8d0dca111d5 100755 --- a/configure.py +++ b/configure.py @@ -632,7 +632,7 @@ config.libs = [ Object(MatchingFor(ALL_GCN), "d/d_event_lib.cpp"), # debug weak func order Object(Equivalent, "d/d_event_debug.cpp"), # RTTI Object(MatchingFor(ALL_GCN), "d/d_simple_model.cpp"), - Object(NonMatching, "d/d_particle.cpp"), + Object(Equivalent, "d/d_particle.cpp"), # weak func order Object(MatchingFor(ALL_GCN, "Shield"), "d/d_particle_name.cpp"), Object(MatchingFor(ALL_GCN), "d/d_particle_copoly.cpp"), Object(MatchingFor(ALL_GCN), "d/d_path.cpp"), diff --git a/include/JSystem/JParticle/JPAEmitter.h b/include/JSystem/JParticle/JPAEmitter.h index 546b14014c6..a9ecdd03b1e 100644 --- a/include/JSystem/JParticle/JPAEmitter.h +++ b/include/JSystem/JParticle/JPAEmitter.h @@ -164,7 +164,16 @@ public: mGlobalPScl.set(scaleX, scaleY); } void getGlobalParticleScale(JGeometry::TVec3& scale) const { + //TODO: Possible fakematch. Debug and Wii indicate TVec3::set, but using it breaks regalloc + // in dPa_gen_b_light8PcallBack::draw on GCN (where the call to set would normally be + // inlined). +#if PLATFORM_GCN + scale.x = mGlobalPScl.x; + scale.y = mGlobalPScl.y; + scale.z = 1.0f; +#else scale.set(mGlobalPScl.x, mGlobalPScl.y, 1.0f); +#endif } void setGlobalScale(const JGeometry::TVec3& scale) { mGlobalScl.set(scale); diff --git a/include/JSystem/JParticle/JPAParticle.h b/include/JSystem/JParticle/JPAParticle.h index 2e67f8e84ad..fd43c3bcc54 100644 --- a/include/JSystem/JParticle/JPAParticle.h +++ b/include/JSystem/JParticle/JPAParticle.h @@ -79,7 +79,6 @@ public: */ class JPAParticleCallBack { public: - JPAParticleCallBack() {} virtual ~JPAParticleCallBack() = 0; virtual void execute(JPABaseEmitter*, JPABaseParticle*) {} virtual void draw(JPABaseEmitter*, JPABaseParticle*) {} diff --git a/include/d/d_particle.h b/include/d/d_particle.h index 112b79cd16f..b371e48a5ad 100644 --- a/include/d/d_particle.h +++ b/include/d/d_particle.h @@ -1,8 +1,9 @@ #ifndef D_PARTICLE_D_PARTICLE_H #define D_PARTICLE_D_PARTICLE_H -#include "JSystem/JParticle/JPAParticle.h" +#include "SSystem/SComponent/c_m3d_g_pla.h" #include "JSystem/JParticle/JPAEmitter.h" +#include "JSystem/JParticle/JPAParticle.h" #include "d/d_particle_name.h" #include "d/d_kankyo.h" @@ -23,26 +24,6 @@ public: /* 8004FB8C */ virtual void cleanup() {} }; -class dPa_hermiteEcallBack_c : public dPa_levelEcallBack { -public: - dPa_hermiteEcallBack_c() {} - - /* 8004F6B8 */ void setOldPosP(cXyz const*, cXyz const*); - - /* 8004FCC8 */ virtual ~dPa_hermiteEcallBack_c() {} - /* 8004F6C4 */ virtual void executeAfter(JPABaseEmitter*); - /* 8004FABC */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); - - void setRate(f32 rate) { mRate = rate; } - -private: - /* 0x04 */ f32 mRate; - /* 0x08 */ int mMaxCnt; - /* 0x0C */ cXyz const* field_0xc; - /* 0x10 */ cXyz const* field_0x10; - /* 0x14 */ cXyz const* field_0x14; -}; - class mDoDvdThd_toMainRam_c; class cBgS_PolyInfo; class JPAEmitterManager; @@ -73,72 +54,12 @@ public: /* 0x10 */ dPa_simpleData_c* mData; }; // Size: 0x14 -class dPa_followEcallBack : public dPa_levelEcallBack { -public: - /* 80049580 */ dPa_followEcallBack(u8 param_0 = 0, u8 param_1 = 0); - - /* 80050200 */ virtual ~dPa_followEcallBack() {} - /* 800495BC */ virtual void execute(JPABaseEmitter*); - /* 800496B0 */ virtual void draw(JPABaseEmitter*); - /* 800496B4 */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); - /* 80050284 */ virtual void cleanup() { end(); } - /* 8004974C */ virtual void end(); - - void remove() { end(); } - JPABaseEmitter* getEmitter() { return mpEmitter; } - bool isEnd() { - return field_0x10 & 1; - } - - /* 0x04 */ JPABaseEmitter* mpEmitter; - /* 0x08 */ const cXyz* field_0x8; - /* 0x0C */ const csXyz* field_0xc; - /* 0x10 */ u8 field_0x10; - /* 0x11 */ u8 field_0x11; - /* 0x12 */ u8 field_0x12; - /* 0x13 */ u8 field_0x13; -}; - class dPa_windPcallBack : public JPAParticleCallBack { public: /* 8004FF2C */ virtual ~dPa_windPcallBack() {} /* 8004B4E0 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); }; -class dPa_wbPcallBack_c : public JPAParticleCallBack { -public: - /* 8004FECC */ virtual ~dPa_wbPcallBack_c() {} - /* 8004DC28 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); -}; - -class dPa_setColorEcallBack : public dPa_levelEcallBack { -public: - dPa_setColorEcallBack(const GXColor& color) { mColor = color; } - - /* 800502E4 */ virtual ~dPa_setColorEcallBack() {} - /* 800502B0 */ virtual void draw(JPABaseEmitter*) { GXSetTevColor(GX_TEVREG1, mColor); } - /* 800502E0 */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8) {} - - /* 0x4 */ GXColor mColor; -}; - -class dPa_selectTexEcallBack : public dPa_levelEcallBack { -public: - dPa_selectTexEcallBack(u8 param_0) { field_0x4 = param_0; } - - /* 8004FF8C */ virtual ~dPa_selectTexEcallBack() {} - /* 8004ADC4 */ virtual void draw(JPABaseEmitter*); - /* 80050010 */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8) {} - - /* 0x4 */ u8 field_0x4; -}; - -class dPa_particleTracePcallBack_c : public JPAParticleCallBack { -public: - /* 8004FC68 */ virtual ~dPa_particleTracePcallBack_c() {} - /* 8004FAD4 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); -}; - class dPa_modelPcallBack : public JPAParticleCallBack { public: /* 80050038 */ virtual ~dPa_modelPcallBack() {} @@ -152,7 +73,6 @@ public: /* 8004A7AC */ void setup(); /* 8004A88C */ void cleanup(); /* 8004A8DC */ void draw(f32 (*)[4]); - /* 8004AB88 */ ~model_c(); /* 8004FB90 */ model_c() { field_0x0 = NULL; } void reset() { @@ -184,7 +104,6 @@ public: /* 8004AD58 */ static model_c* getModel(JPABaseEmitter*); /* 8004AD90 */ static u8 getRotAxis(JPABaseEmitter*); - /* 80050378 */ virtual ~dPa_modelEcallBack() {} /* 8004AA34 */ virtual void draw(JPABaseEmitter*); /* 80050014 */ virtual void drawAfter(JPABaseEmitter* param_0) { cleanupModel(param_0); } /* 8004AAA8 */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); @@ -202,11 +121,48 @@ public: static model_c* mModel; }; -class dPa_light8PcallBack : public JPAParticleCallBack { +class dPa_selectTexEcallBack : public dPa_levelEcallBack { public: - /* 8004FE0C */ virtual ~dPa_light8PcallBack() {} - /* 8004DD10 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); - /* 8004DD1C */ virtual void draw(JPABaseEmitter*, JPABaseParticle*); + dPa_selectTexEcallBack(u8 param_0) { field_0x4 = param_0; } + + /* 8004FF8C */ virtual ~dPa_selectTexEcallBack() {} + /* 8004ADC4 */ virtual void draw(JPABaseEmitter*); + /* 80050010 */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8) {} + + /* 0x4 */ u8 field_0x4; +}; + +class dPa_followEcallBack : public dPa_levelEcallBack { +public: + /* 80049580 */ dPa_followEcallBack(u8 param_0 = 0, u8 param_1 = 0); + + /* 80050200 */ virtual ~dPa_followEcallBack() {} + /* 800495BC */ virtual void execute(JPABaseEmitter*); + /* 800496B0 */ virtual void draw(JPABaseEmitter*); + /* 800496B4 */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); + /* 80050284 */ virtual void cleanup() { end(); } + /* 8004974C */ virtual void end(); + + void remove() { end(); } + JPABaseEmitter* getEmitter() { return mpEmitter; } + bool isEnd() { + return field_0x10 & 1; + } + + /* 0x04 */ JPABaseEmitter* mpEmitter; + /* 0x08 */ const cXyz* field_0x8; + /* 0x0C */ const csXyz* field_0xc; + /* 0x10 */ u8 field_0x10; + /* 0x11 */ u8 field_0x11; + /* 0x12 */ u8 field_0x12; + /* 0x13 */ u8 field_0x13; +}; + +class dPa_fsenthPcallBack : public JPAParticleCallBack { +public: + /* 8004FE6C */ virtual ~dPa_fsenthPcallBack() {} + /* 8004DCA0 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); + /* 8004DD0C */ virtual void draw(JPABaseEmitter*, JPABaseParticle*); }; class dPa_light8EcallBack : public dPa_levelEcallBack { @@ -217,21 +173,28 @@ public: /* 8004979C */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); }; -class dPa_gen_d_light8PcallBack : public JPAParticleCallBack { +class dPa_gen_b_light8EcallBack : public dPa_levelEcallBack { public: - /* 8004FD4C */ virtual ~dPa_gen_d_light8PcallBack() {} - /* 8004DD18 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); - /* 8004ED44 */ virtual void draw(JPABaseEmitter*, JPABaseParticle*); + /* 800500B8 */ virtual ~dPa_gen_b_light8EcallBack() {} + /* 8004A364 */ virtual void draw(JPABaseEmitter*); + /* 8005013C */ virtual void drawAfter(JPABaseEmitter*) { dPa_cleanupGX(); } + /* 800497B0 */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); }; class dPa_gen_d_light8EcallBack : public dPa_levelEcallBack { public: - /* 800503FC */ virtual ~dPa_gen_d_light8EcallBack() {} /* 8004A388 */ virtual void draw(JPABaseEmitter*); /* 80050098 */ virtual void drawAfter(JPABaseEmitter*) { dPa_cleanupGX(); } /* 800497CC */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); }; +class dPa_light8PcallBack : public JPAParticleCallBack { +public: + /* 8004FE0C */ virtual ~dPa_light8PcallBack() {} + /* 8004DD10 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); + /* 8004DD1C */ virtual void draw(JPABaseEmitter*, JPABaseParticle*); +}; + class dPa_gen_b_light8PcallBack : public JPAParticleCallBack { public: /* 8004FDAC */ virtual ~dPa_gen_b_light8PcallBack() {} @@ -239,19 +202,54 @@ public: /* 8004E6A8 */ virtual void draw(JPABaseEmitter*, JPABaseParticle*); }; -class dPa_gen_b_light8EcallBack : public dPa_levelEcallBack { +class dPa_gen_d_light8PcallBack : public JPAParticleCallBack { public: - /* 800500B8 */ virtual ~dPa_gen_b_light8EcallBack() {} - /* 8004A364 */ virtual void draw(JPABaseEmitter*); - /* 8005013C */ virtual void drawAfter(JPABaseEmitter*) { dPa_cleanupGX(); } - /* 800497B0 */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); + /* 8004FD4C */ virtual ~dPa_gen_d_light8PcallBack() {} + /* 8004DD18 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); + /* 8004ED44 */ virtual void draw(JPABaseEmitter*, JPABaseParticle*); }; -class dPa_fsenthPcallBack : public JPAParticleCallBack { +class dPa_wbPcallBack_c : public JPAParticleCallBack { public: - /* 8004FE6C */ virtual ~dPa_fsenthPcallBack() {} - /* 8004DCA0 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); - /* 8004DD0C */ virtual void draw(JPABaseEmitter*, JPABaseParticle*); + /* 8004FECC */ virtual ~dPa_wbPcallBack_c() {} + /* 8004DC28 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); +}; + +class dPa_particleTracePcallBack_c : public JPAParticleCallBack { +public: + /* 8004FC68 */ virtual ~dPa_particleTracePcallBack_c() {} + /* 8004FAD4 */ virtual void execute(JPABaseEmitter*, JPABaseParticle*); +}; + +class dPa_hermiteEcallBack_c : public dPa_levelEcallBack { +public: + dPa_hermiteEcallBack_c() {} + + /* 8004F6B8 */ void setOldPosP(cXyz const*, cXyz const*); + + /* 8004FCC8 */ virtual ~dPa_hermiteEcallBack_c() {} + /* 8004F6C4 */ virtual void executeAfter(JPABaseEmitter*); + /* 8004FABC */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8); + + void setRate(f32 rate) { mRate = rate; } + +private: + /* 0x04 */ f32 mRate; + /* 0x08 */ int mMaxCnt; + /* 0x0C */ cXyz const* field_0xc; + /* 0x10 */ cXyz const* field_0x10; + /* 0x14 */ cXyz const* field_0x14; +}; + +class dPa_setColorEcallBack : public dPa_levelEcallBack { +public: + dPa_setColorEcallBack(const GXColor& color) { mColor = color; } + + /* 800502E4 */ virtual ~dPa_setColorEcallBack() {} + /* 800502B0 */ virtual void draw(JPABaseEmitter*) { GXSetTevColor(GX_TEVREG1, mColor); } + /* 800502E0 */ virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8) {} + + /* 0x4 */ GXColor mColor; }; class dPa_simpleData_c { diff --git a/src/JSystem/JParticle/JPAParticle.cpp b/src/JSystem/JParticle/JPAParticle.cpp index a464caab372..d28f6b4befd 100644 --- a/src/JSystem/JParticle/JPAParticle.cpp +++ b/src/JSystem/JParticle/JPAParticle.cpp @@ -321,13 +321,11 @@ bool JPABaseParticle::canCreateChild(JPAEmitterWorkData* work) { /* 80280548-80280568 27AE88 0020+00 0/0 3/3 0/0 .text * getWidth__15JPABaseParticleCFPC14JPABaseEmitter */ f32 JPABaseParticle::getWidth(JPABaseEmitter const* emtr) const { - f32 scale = 2.0f * mParticleScaleX; - return scale * emtr->mpEmtrMgr->pWd->mGlobalPtclScl.x; + return mParticleScaleX * 2.0f * emtr->mpEmtrMgr->pWd->mGlobalPtclScl.x; } /* 80280568-80280588 27AEA8 0020+00 0/0 3/3 0/0 .text * getHeight__15JPABaseParticleCFPC14JPABaseEmitter */ f32 JPABaseParticle::getHeight(JPABaseEmitter const* emtr) const { - f32 scale = 2.0f * mParticleScaleY; - return scale * emtr->mpEmtrMgr->pWd->mGlobalPtclScl.y; + return mParticleScaleY * 2.0f * emtr->mpEmtrMgr->pWd->mGlobalPtclScl.y; } diff --git a/src/d/d_particle.cpp b/src/d/d_particle.cpp index f9b16713dff..1b6b7da3d4a 100644 --- a/src/d/d_particle.cpp +++ b/src/d/d_particle.cpp @@ -3,6 +3,15 @@ // Translation Unit: d/d_particle // +// d_particle is odd in that it doesn't appear to include dolzel.pch. +// It uses ...data pooling, but weak data from the PCH (e.g. Z2Calc::cNullVec) +// isn't present like would be expected for a TU using pooling. +// +// Note that it _is_ possible that it does include the PCH and there's just some +// not-yet-understood behavior causing the weak data to be stripped anyway. +// Notably, TWW's version of this TU _does_ use the PCH, but it also includes +// weak data from it (unlike here). + #include "d/d_particle.h" #include "d/d_jnt_col.h" #include "JSystem/JKernel/JKRExpHeap.h" @@ -140,7 +149,7 @@ static u8 struct_80450E9D; /* 8004979C-800497B0 0440DC 0014+00 1/0 0/0 0/0 .text * setup__19dPa_light8EcallBackFP14JPABaseEmitterPC4cXyzPC5csXyzSc */ -// +// void dPa_light8EcallBack::setup(JPABaseEmitter* param_0, cXyz const* param_1, csXyz const* param_2, s8 param_3) { param_0->setDrawTimes(2); @@ -535,7 +544,7 @@ bool dPa_modelEcallBack::model_c::set(J3DModelData* param_0, dKy_tevstr_c const& *(Arr*)&field_0x8.TevColor = *(Arr*)¶m_1.TevColor; *(int*)&field_0x8.TevKColor = *(int*)¶m_1.TevKColor; *(int*)&field_0x8.mLightInf = *(int*)¶m_1.mLightInf; - + field_0x8.mFogStartZ = param_1.mFogStartZ; field_0x8.mFogEndZ = param_1.mFogEndZ; field_0x8.pat_ratio = param_1.pat_ratio; @@ -586,7 +595,7 @@ void dPa_modelEcallBack::model_c::setup() { void dPa_modelEcallBack::model_c::cleanup() { if (field_0x4 == NULL) { return; - } + } if (field_0x392 == 0) { field_0x0->removeTexNoAnimator((J3DAnmTexPattern*)field_0x4); @@ -660,10 +669,6 @@ void dPa_modelEcallBack::create(u8 param_0) { struct_80450E9D = 0; } -/* 8004AB88-8004ABC4 0454C8 003C+00 2/2 0/0 0/0 .text __dt__Q218dPa_modelEcallBack7model_cFv */ -dPa_modelEcallBack::model_c::~model_c() { -} - /* 8004ABC4-8004AC00 045504 003C+00 1/1 0/0 0/0 .text remove__18dPa_modelEcallBackFv */ void dPa_modelEcallBack::remove() { if (mModel != NULL) { @@ -2109,7 +2114,6 @@ void dPa_light8PcallBack::draw(JPABaseEmitter* param_1, JPABaseParticle* param_2 /* 8004E6A8-8004ED44 048FE8 069C+00 1/0 0/0 0/0 .text * draw__25dPa_gen_b_light8PcallBackFP14JPABaseEmitterP15JPABaseParticle */ -// NONMATCHING - fpr regalloc void dPa_gen_b_light8PcallBack::draw(JPABaseEmitter* param_1, JPABaseParticle* param_2) { Mtx local_80; JGeometry::TVec3 local_8c; @@ -2128,13 +2132,13 @@ void dPa_gen_b_light8PcallBack::draw(JPABaseEmitter* param_1, JPABaseParticle* p f32 dVar9 = JMASSin(param_2->getRotateAngle()); f32 dVar10 = JMASCos(param_2->getRotateAngle()); param_1->getGlobalParticleScale(local_bc); - local_bc.x *= param_2->getWidth(param_1); - local_bc.y *= param_2->getHeight(param_1); - local_80[0][0] = dVar10 * local_bc.x; - local_80[0][1] = -dVar9 * local_bc.y; + f32 var_f29 = local_bc.x * param_2->getWidth(param_1); + f32 var_f28 = local_bc.y * param_2->getHeight(param_1); + local_80[0][0] = dVar10 * var_f29; + local_80[0][1] = -dVar9 * var_f28; local_80[0][3] = local_8c.x; - local_80[1][0] = dVar9 * local_bc.x; - local_80[1][1] = dVar10 * local_bc.y; + local_80[1][0] = dVar9 * var_f29; + local_80[1][1] = dVar10 * var_f28; local_80[1][3] = local_8c.y; local_80[2][2] = 1.0f; local_80[2][3] = local_8c.z;