diff --git a/include/JSystem/JParticle/JPADraw.h b/include/JSystem/JParticle/JPADraw.h index bbf7b66f7..c7319a53b 100644 --- a/include/JSystem/JParticle/JPADraw.h +++ b/include/JSystem/JParticle/JPADraw.h @@ -14,13 +14,17 @@ public: JPADrawClipBoard() {} ~JPADrawClipBoard() {} + typedef void(*DirTypeFunc)(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&); + typedef void(*RotTypeFunc)(f32, f32, Mtx&); + typedef void(*BasePlaneTypeFunc)(f32, f32, f32, f32, JGeometry::TVec3*); + /* 0x00 */ JPADrawSetupTev mSetupTev; /* 0x04 */ f32 mGlobalScaleX; /* 0x08 */ f32 mGlobalScaleY; /* 0x0C */ f32 mPivotX; /* 0x10 */ f32 mPivotY; /* 0x14 */ JGeometry::TVec2 field_0x14[4]; - /* 0x34 */ MtxP mDrawMtx; + /* 0x34 */ MtxP mDrawMtxPtr; /* 0x38 */ f32 field_0x38; /* 0x3C */ f32 field_0x3c; /* 0x40 */ f32 field_0x40; @@ -33,11 +37,13 @@ public: /* 0x5C */ f32 field_0x5c; /* 0x60 */ f32 field_0x60; /* 0x64 */ f32 field_0x64; - /* 0x68 */ Mtx field_0x68; + /* 0x68 */ Mtx mDrawMtx; /* 0x98 */ GXColor mPrmColor; /* 0x9C */ GXColor mEnvColor; - /* 0xA0 */ void* field_0xa0; - /* 0xA4 */ u8 field_0xa4[0xb4 - 0xa4]; + /* 0xA0 */ DirTypeFunc mDirTypeFunc; + /* 0xA4 */ RotTypeFunc mRotTypeFunc; + /* 0xA8 */ BasePlaneTypeFunc mBasePlaneTypeFunc; + /* 0xAC */ u8 field_0xa4[0xb4 - 0xac]; }; class JPADraw { diff --git a/include/JSystem/JParticle/JPADrawVisitor.h b/include/JSystem/JParticle/JPADrawVisitor.h index 8ac0d7337..aabb63d4c 100644 --- a/include/JSystem/JParticle/JPADrawVisitor.h +++ b/include/JSystem/JParticle/JPADrawVisitor.h @@ -2,6 +2,7 @@ #define JPADRAWVISITOR_H #include "JSystem/JSupport/JSUList.h" +#include "dolphin/mtx/mtx.h" #include "dolphin/types.h" class JPABaseEmitter; @@ -520,4 +521,19 @@ public: /* 0x138 */ JPADrawCalcChildScaleOut mCalcChildScaleOut; }; +void dirTypeVel(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&); +void dirTypePos(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&); +void dirTypePosInv(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&); +void dirTypeEmtrDir(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&); +void dirTypePrevPtcl(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&); + +void rotTypeY(f32, f32, Mtx&); +void rotTypeX(f32, f32, Mtx&); +void rotTypeZ(f32, f32, Mtx&); +void rotTypeXYZ(f32, f32, Mtx&); +void rotTypeYJiggle(f32, f32, Mtx&); + +void basePlaneTypeXY(f32, f32, f32, f32, JGeometry::TVec3*); +void basePlaneTypeXZ(f32, f32, f32, f32, JGeometry::TVec3*); + #endif /* JPADRAWVISITOR_H */ diff --git a/include/JSystem/JParticle/JPAExtraShape.h b/include/JSystem/JParticle/JPAExtraShape.h index 093a97c79..31d553ba4 100644 --- a/include/JSystem/JParticle/JPAExtraShape.h +++ b/include/JSystem/JParticle/JPAExtraShape.h @@ -52,8 +52,8 @@ public: virtual f32 getIncreaseRateY() = 0; virtual f32 getDecreaseRateX() = 0; virtual f32 getDecreaseRateY() = 0; - virtual u32 getPivotX() = 0; - virtual u32 getPivotY() = 0; + virtual u8 getPivotX() = 0; + virtual u8 getPivotY() = 0; virtual f32 getRandomScale() = 0; virtual BOOL isEnableAlpha() = 0; virtual BOOL isEnableSinWave() = 0; @@ -98,8 +98,8 @@ public: virtual f32 getIncreaseRateY() { return mIncreaseRateY; } virtual f32 getDecreaseRateX() { return mDecreaseRateX; } virtual f32 getDecreaseRateY() { return mDecreaseRateY; } - virtual u32 getPivotX() { return (mpData->mFlag >> 14) & 0x03; } - virtual u32 getPivotY() { return (mpData->mFlag >> 16) & 0x03; } + virtual u8 getPivotX() { return (mpData->mFlag >> 14) & 0x03; } + virtual u8 getPivotY() { return (mpData->mFlag >> 16) & 0x03; } virtual f32 getRandomScale() { return mpData->mRandomScale; } virtual BOOL isEnableAlpha() { return (mpData->mFlag & 0x01); } virtual BOOL isEnableSinWave() { return (mpData->mFlag & 0x02); } diff --git a/include/JSystem/JParticle/JPAResourceManager.h b/include/JSystem/JParticle/JPAResourceManager.h index 52091a00e..743512514 100644 --- a/include/JSystem/JParticle/JPAResourceManager.h +++ b/include/JSystem/JParticle/JPAResourceManager.h @@ -18,6 +18,10 @@ public: pTexResArray[id]->load(texMap); } + inline void loadDefaultTexture(GXTexMapID texMap) { + defaultTex.load(texMap); + } + public: /* 0x00 */ JPADefaultTexture defaultTex; /* 0x24 */ u32 registNum; diff --git a/include/JSystem/JParticle/JPASweepShape.h b/include/JSystem/JParticle/JPASweepShape.h index 6d223a994..4b2de54ed 100644 --- a/include/JSystem/JParticle/JPASweepShape.h +++ b/include/JSystem/JParticle/JPASweepShape.h @@ -30,9 +30,9 @@ class JPASweepShape { public: virtual ~JPASweepShape() {}; virtual u8 getType() = 0; - virtual u32 getDirType() = 0; - virtual u32 getRotType() = 0; - virtual u32 getBasePlaneType() = 0; + virtual u8 getDirType() = 0; + virtual u8 getRotType() = 0; + virtual u8 getBasePlaneType() = 0; virtual s16 getLife() = 0; virtual s16 getRate() = 0; virtual f32 getTiming() = 0; @@ -69,9 +69,9 @@ public: JPASweepShapeArc(const u8*); virtual ~JPASweepShapeArc() {}; virtual u8 getType() { return (mpData->mFlag >> 0) & 0x0F; } - virtual u32 getDirType() { return (mpData->mFlag >> 4) & 0x07; } - virtual u32 getRotType() { return (mpData->mFlag >> 7) & 0x07; } - virtual u32 getBasePlaneType() { return (mpData->mFlag >> 10) & 0x01; } + virtual u8 getDirType() { return (mpData->mFlag >> 4) & 0x07; } + virtual u8 getRotType() { return (mpData->mFlag >> 7) & 0x07; } + virtual u8 getBasePlaneType() { return (mpData->mFlag >> 10) & 0x01; } virtual s16 getLife() { return mpData->mLife; } virtual s16 getRate() { return mpData->mRate; } virtual f32 getTiming() { return mpData->mTiming; } diff --git a/include/JSystem/JParticle/JPATexture.h b/include/JSystem/JParticle/JPATexture.h index 167192587..0e0d28742 100644 --- a/include/JSystem/JParticle/JPATexture.h +++ b/include/JSystem/JParticle/JPATexture.h @@ -32,15 +32,22 @@ public: virtual JUTTexture* getJUTTexture() { return &mTexture; } public: - JUTTexture mTexture; - const JPATextureData* mpData; + /* 0x00 */ JUTTexture mTexture; + /* 0x40 */ const JPATextureData* mpData; }; struct JPADefaultTexture { +public: JPADefaultTexture() : imgBuf(NULL) {} void initialize(JKRHeap *); - u8 * imgBuf; - GXTexObj mTexObj; + + inline void load(GXTexMapID texMap) { + GXLoadTexObj(&mTexObj, texMap); + } + +public: + /* 0x00 */ u8 * imgBuf; + /* 0x04 */ GXTexObj mTexObj; }; #endif /* JPATEXTURE_H */ diff --git a/src/JSystem/JParticle/JPADraw.cpp b/src/JSystem/JParticle/JPADraw.cpp index b02a110c0..247de55e9 100644 --- a/src/JSystem/JParticle/JPADraw.cpp +++ b/src/JSystem/JParticle/JPADraw.cpp @@ -119,7 +119,7 @@ void JPADraw::draw(MtxP drawMtx) { GXSetBlendMode(dc.pbsp->getBlendMode1(), dc.pbsp->getSrcBlendFactor1(), dc.pbsp->getDstBlendFactor1(), dc.pbsp->getBlendOp1()); cb.mPrmColor = dc.pbe->mGlobalPrmColor; cb.mEnvColor = dc.pbe->mGlobalEnvColor; - cb.mDrawMtx = drawMtx; + cb.mDrawMtxPtr = drawMtx; cb.mSetupTev.setupTev(dc.pbsp, dc.petx); for (int i = 0; i < execEmtrVisNum; i++) { mpExecEmtrVis[i]->exec(&dc); @@ -160,12 +160,47 @@ void JPADraw::calcChild(JPABaseParticle* ptcl) { /* 80268A48-80268F28 .text initParticle__7JPADrawFP15JPABaseParticle */ void JPADraw::initParticle(JPABaseParticle* ptcl) { - /* Nonmatching */ + ptcl->mAxis.set(JPABaseEmitter::emtrInfo.mEmitterGlobalRot[0][1], JPABaseEmitter::emtrInfo.mEmitterGlobalRot[1][1], JPABaseEmitter::emtrInfo.mEmitterGlobalRot[2][1]); + ptcl->mPrmColor = mPrmColor; + ptcl->mEnvColor = mEnvColor; + ptcl->mAlphaOut = 1.0f; + ptcl->mLoopOffset = dc.pbe->getRandomF() * dc.pbsp->getLoopOffset(); + if (dc.pesp != NULL) { + if (dc.pesp->isEnableRotate()) { + ptcl->mRotateAngle = (dc.pesp->getRotateAngle() * 32768.0f) + (dc.pbe->getRandomSF() * dc.pesp->getRotateRandomAngle() * 65536.0f); + s16 rotateSpeed; + if (dc.pbe->getRandomRF() < dc.pesp->getRotateDirection()) { + rotateSpeed = dc.pesp->getRotateSpeed() * (dc.pesp->getRotateRandomSpeed() * dc.pbe->getRandomRF() + 1.0f) * 32768.0f; + } else { + rotateSpeed = -dc.pesp->getRotateSpeed() * (dc.pesp->getRotateRandomSpeed() * dc.pbe->getRandomRF() + 1.0f) * 32768.0f; + } + ptcl->mRotateSpeed = rotateSpeed; + } else { + ptcl->mRotateAngle = 0; + ptcl->mRotateSpeed = 0; + } + + if (dc.pesp->isEnableScale()) { + ptcl->mScaleX = ptcl->mScaleY = ptcl->mScaleOut = (dc.pbe->getRandomRF() * dc.pesp->getRandomScale() + 1.0f) * mScaleOut; + } else { + ptcl->mScaleX = ptcl->mScaleY = ptcl->mScaleOut = mScaleOut; + } + + if (dc.pesp->isEnableAlpha()) { + ptcl->mAlphaWaveRandom = (dc.pbe->getRandomRF() * dc.pesp->getAlphaWaveRandom() + 1.0f); + } else { + ptcl->mAlphaWaveRandom = 1.0f; + } + } else { + ptcl->mRotateAngle = 0; + ptcl->mRotateSpeed = 0; + ptcl->mScaleOut = ptcl->mScaleX = ptcl->mScaleY = mScaleOut; + ptcl->mAlphaWaveRandom = 1.0f; + } } /* 80268F28-802692A4 .text initChild__7JPADrawFP15JPABaseParticleP15JPABaseParticle */ void JPADraw::initChild(JPABaseParticle* ptcl, JPABaseParticle* chld) { - /* Nonmatching */ chld->mAxis.set(ptcl->mAxis); chld->mAlphaOut = 1.0f; if (dc.pssp->isInheritedRGB()) { @@ -370,7 +405,7 @@ void JPADraw::setDrawExecVisitorsAfterCB(const JPADrawVisitorDefFlags& flags) { case JPABaseShape::JPAType_RotationCross: mpExecPtclVis[execPtclVisNum++] = &vc.mExecRotationCross; break; - case 9: + case JPABaseShape::JPAType_DirBillboard: mpExecPtclVis[execPtclVisNum++] = &vc.mExecDirBillBoard; break; case JPABaseShape::JPAType_Stripe: @@ -608,12 +643,188 @@ void JPADraw::setDrawCalcVisitors(const JPADraw::JPADrawVisitorDefFlags& flags) /* 8026ADB0-8026B3DC .text setParticleClipBoard__7JPADrawFv */ void JPADraw::setParticleClipBoard() { - /* Nonmatching */ + /* Nonmatching - top switch */ + + switch (dc.pbsp->getType()) { + case JPABaseShape::JPAType_Billboard: + break; + case JPABaseShape::JPAType_DirBillboard: + PSMTXIdentity(cb.mDrawMtx); + break; + case JPABaseShape::JPAType_YBillboard: + loadYBBMtx(cb.mDrawMtxPtr); + break; + case JPABaseShape::JPAType_Point: + case JPABaseShape::JPAType_Line: + case JPABaseShape::JPAType_Direction: + case JPABaseShape::JPAType_DirectionCross: + case JPABaseShape::JPAType_Stripe: + case JPABaseShape::JPAType_StripeCross: + case JPABaseShape::JPAType_Rotation: + case JPABaseShape::JPAType_RotationCross: + MTXCopy(cb.mDrawMtxPtr, cb.mDrawMtx); + break; + } + + GXLoadPosMtxImm(cb.mDrawMtx, GX_PNMTX0); + + JPABaseEmitter* emtr = dc.pbe; + f32 scaleX = emtr->mGlobalParticleScale.x; + f32 scaleY = emtr->mGlobalParticleScale.y; + + cb.mGlobalScaleX = 25.0f * dc.pbsp->getBaseSizeX() * scaleX; + cb.mGlobalScaleY = 25.0f * dc.pbsp->getBaseSizeY() * scaleY; + + if (dc.pbsp->getType() == JPABaseShape::JPAType_Point) { + cb.mGlobalScaleX *= 1.02f; + cb.mGlobalScaleY *= 1.02f; + } else if (dc.pbsp->getType() == JPABaseShape::JPAType_Line) { + cb.mGlobalScaleX *= 1.02f; + cb.mGlobalScaleY *= 0.4f; + } + + if (dc.pesp != NULL && dc.pesp->isEnableScale()) { + cb.mPivotX = cb.mGlobalScaleX * (dc.pesp->getPivotX() - 1.0f); + cb.mPivotY = cb.mGlobalScaleY * (dc.pesp->getPivotY() - 1.0f); + } else { + cb.mPivotX = cb.mPivotY = 0.0f; + } + + f32 tilingX = dc.pbsp->getTilingX(); + f32 tilingY = dc.pbsp->getTilingY(); + + cb.field_0x14[0].x = 0.0f; + cb.field_0x14[0].y = 0.0f; + cb.field_0x14[1].x = tilingX; + cb.field_0x14[1].y = 0.0f; + cb.field_0x14[2].x = tilingX; + cb.field_0x14[2].y = tilingY; + cb.field_0x14[3].x = 0.0f; + cb.field_0x14[3].y = tilingY; + + if (!dc.pbsp->textureIsEmpty() && !dc.pbsp->isEnableTextureAnm()) + mTexIdx = dc.pTexIdx[dc.pbsp->getTextureIndex()], GX_TEXMAP0; + + cb.mDirTypeFunc = NULL; + cb.mRotTypeFunc = NULL; + cb.mBasePlaneTypeFunc = NULL; + + if (dc.pbsp->getType() == JPABaseShape::JPAType_Direction || dc.pbsp->getType() == JPABaseShape::JPAType_DirectionCross || dc.pbsp->getType() == JPABaseShape::JPAType_DirBillboard || dc.pbsp->getType() == JPABaseShape::JPAType_Stripe || dc.pbsp->getType() == JPABaseShape::JPAType_StripeCross) { + switch (dc.pbsp->getDirType()) { + case 0: cb.mDirTypeFunc = dirTypeVel; break; + case 1: cb.mDirTypeFunc = dirTypePos; break; + case 2: cb.mDirTypeFunc = dirTypePosInv; break; + case 3: cb.mDirTypeFunc = dirTypeEmtrDir; break; + case 4: cb.mDirTypeFunc = dirTypePrevPtcl; break; + } + } + + if (dc.pbsp->getType() == JPABaseShape::JPAType_Direction || dc.pbsp->getType() == JPABaseShape::JPAType_DirectionCross || dc.pbsp->getType() == JPABaseShape::JPAType_Rotation || dc.pbsp->getType() == JPABaseShape::JPAType_RotationCross) { + switch (dc.pbsp->getRotType()) { + case 0: cb.mRotTypeFunc = rotTypeY; break; + case 1: cb.mRotTypeFunc = rotTypeX; break; + case 2: cb.mRotTypeFunc = rotTypeZ; break; + case 3: cb.mRotTypeFunc = rotTypeXYZ; break; + case 4: cb.mRotTypeFunc = rotTypeYJiggle; break; + } + } + + if (dc.pbsp->getType() == JPABaseShape::JPAType_Direction || dc.pbsp->getType() == JPABaseShape::JPAType_Rotation) { + switch (dc.pbsp->getBasePlaneType()) { + case 0: cb.mBasePlaneTypeFunc = basePlaneTypeXY; break; + case 1: cb.mBasePlaneTypeFunc = basePlaneTypeXZ; break; + } + } } /* 8026B3DC-8026B938 .text setChildClipBoard__7JPADrawFv */ void JPADraw::setChildClipBoard() { - /* Nonmatching */ + /* Nonmatching - top switch */ + + switch (dc.pssp->getType()) { + case JPABaseShape::JPAType_Billboard: + break; + case JPABaseShape::JPAType_DirBillboard: + PSMTXIdentity(cb.mDrawMtx); + break; + case JPABaseShape::JPAType_YBillboard: + loadYBBMtx(cb.mDrawMtxPtr); + break; + case JPABaseShape::JPAType_Point: + case JPABaseShape::JPAType_Line: + case JPABaseShape::JPAType_Direction: + case JPABaseShape::JPAType_DirectionCross: + case JPABaseShape::JPAType_Stripe: + case JPABaseShape::JPAType_StripeCross: + case JPABaseShape::JPAType_Rotation: + case JPABaseShape::JPAType_RotationCross: + MTXCopy(cb.mDrawMtxPtr, cb.mDrawMtx); + break; + } + + GXLoadPosMtxImm(cb.mDrawMtx, GX_PNMTX0); + + JPABaseEmitter* emtr = dc.pbe; + f32 scaleX = emtr->mGlobalParticleScale.x; + f32 scaleY = emtr->mGlobalParticleScale.y; + + if (!dc.pssp->isInheritedScale()) { + cb.mGlobalScaleX = 25.0f * dc.pssp->getScaleX() * scaleX; + cb.mGlobalScaleY = 25.0f * dc.pssp->getScaleY() * scaleY; + } else { + cb.mGlobalScaleX = 25.0f * dc.pbsp->getBaseSizeX() * scaleX; + cb.mGlobalScaleY = 25.0f * dc.pbsp->getBaseSizeY() * scaleY; + } + + if (dc.pssp->getType() == JPABaseShape::JPAType_Point) { + cb.mGlobalScaleX *= 1.02f; + cb.mGlobalScaleY *= 1.02f; + } else if (dc.pssp->getType() == JPABaseShape::JPAType_Line) { + cb.mGlobalScaleX *= 1.02f; + cb.mGlobalScaleY *= 0.4f; + } + + cb.mPivotX = cb.mPivotY = 0.0f; + + cb.field_0x14[1].y = 0.0f; + cb.field_0x14[0].y = 0.0f; + cb.field_0x14[3].x = 0.0f; + cb.field_0x14[0].x = 0.0f; + cb.field_0x14[3].y = 1.0f; + cb.field_0x14[2].y = 1.0f; + cb.field_0x14[2].x = 1.0f; + cb.field_0x14[1].x = 1.0f; + + cb.mDirTypeFunc = NULL; + cb.mRotTypeFunc = NULL; + cb.mBasePlaneTypeFunc = NULL; + + if (dc.pssp->getType() == JPABaseShape::JPAType_Direction || dc.pssp->getType() == JPABaseShape::JPAType_DirectionCross || dc.pssp->getType() == JPABaseShape::JPAType_DirBillboard || dc.pssp->getType() == JPABaseShape::JPAType_Stripe || dc.pssp->getType() == JPABaseShape::JPAType_StripeCross) { + switch (dc.pssp->getDirType()) { + case 0: cb.mDirTypeFunc = dirTypeVel; break; + case 1: cb.mDirTypeFunc = dirTypePos; break; + case 2: cb.mDirTypeFunc = dirTypePosInv; break; + case 3: cb.mDirTypeFunc = dirTypeEmtrDir; break; + case 4: cb.mDirTypeFunc = dirTypePrevPtcl; break; + } + } + + if (dc.pssp->getType() == JPABaseShape::JPAType_Direction || dc.pssp->getType() == JPABaseShape::JPAType_DirectionCross || dc.pssp->getType() == JPABaseShape::JPAType_Rotation || dc.pssp->getType() == JPABaseShape::JPAType_RotationCross) { + switch (dc.pssp->getRotType()) { + case 0: cb.mRotTypeFunc = rotTypeY; break; + case 1: cb.mRotTypeFunc = rotTypeX; break; + case 2: cb.mRotTypeFunc = rotTypeZ; break; + case 3: cb.mRotTypeFunc = rotTypeXYZ; break; + case 4: cb.mRotTypeFunc = rotTypeYJiggle; break; + } + } + + if (dc.pssp->getType() == JPABaseShape::JPAType_Direction || dc.pssp->getType() == JPABaseShape::JPAType_Rotation) { + switch (dc.pssp->getBasePlaneType()) { + case 0: cb.mBasePlaneTypeFunc = basePlaneTypeXY; break; + case 1: cb.mBasePlaneTypeFunc = basePlaneTypeXZ; break; + } + } } /* 8026B938-8026BC2C .text drawParticle__7JPADrawFv */ @@ -668,7 +879,7 @@ void JPADraw::drawChild() { GXEnableTexOffsets(GX_TEXCOORD0, GX_TRUE, GX_TRUE); if (dc.pbsp->textureIsEmpty()) { - GXLoadTexObj(&dc.mpTextureResource->defaultTex.mTexObj, GX_TEXMAP0); + dc.mpTextureResource->loadDefaultTexture(GX_TEXMAP0); } else { dc.mpTextureResource->load(dc.pTexIdx[dc.pssp->getTextureIndex()], GX_TEXMAP0); } diff --git a/src/JSystem/JParticle/JPADrawVisitor.cpp b/src/JSystem/JParticle/JPADrawVisitor.cpp index 6c3793045..6333127ac 100644 --- a/src/JSystem/JParticle/JPADrawVisitor.cpp +++ b/src/JSystem/JParticle/JPADrawVisitor.cpp @@ -5,6 +5,7 @@ #include "JSystem/JParticle/JPADrawVisitor.h" #include "JSystem/JGeometry.h" +#include "dolphin/mtx/mtx.h" JPADrawClipBoard* JPADrawContext::pcb; @@ -114,62 +115,62 @@ void JPADrawExecRotYBillBoard::exec(const JPADrawContext*, JPABaseParticle*) { } /* 8026134C-80261368 .text dirTypeVel__FP15JPABaseParticleP14JPABaseEmitterRQ29JGeometry8TVec3 */ -void dirTypeVel(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&) { +void dirTypeVel(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&) { /* Nonmatching */ } /* 80261368-80261384 .text dirTypePos__FP15JPABaseParticleP14JPABaseEmitterRQ29JGeometry8TVec3 */ -void dirTypePos(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&) { +void dirTypePos(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&) { /* Nonmatching */ } /* 80261384-802613C4 .text dirTypePosInv__FP15JPABaseParticleP14JPABaseEmitterRQ29JGeometry8TVec3 */ -void dirTypePosInv(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&) { +void dirTypePosInv(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&) { /* Nonmatching */ } /* 802613C4-802613E8 .text dirTypeEmtrDir__FP15JPABaseParticleP14JPABaseEmitterRQ29JGeometry8TVec3 */ -void dirTypeEmtrDir(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&) { +void dirTypeEmtrDir(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&) { /* Nonmatching */ } /* 802613E8-802614A8 .text dirTypePrevPtcl__FP15JPABaseParticleP14JPABaseEmitterRQ29JGeometry8TVec3 */ -void dirTypePrevPtcl(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&) { +void dirTypePrevPtcl(JPABaseParticle*, JPABaseEmitter*, JGeometry::TVec3&) { /* Nonmatching */ } /* 802614A8-802614E8 .text rotTypeY__FffRA3_A4_f */ -void rotTypeY(float, float, float(&)[3][4]) { +void rotTypeY(f32, f32, Mtx&) { /* Nonmatching */ } /* 802614E8-80261528 .text rotTypeX__FffRA3_A4_f */ -void rotTypeX(float, float, float(&)[3][4]) { +void rotTypeX(f32, f32, Mtx&) { /* Nonmatching */ } /* 80261528-80261568 .text rotTypeZ__FffRA3_A4_f */ -void rotTypeZ(float, float, float(&)[3][4]) { +void rotTypeZ(f32, f32, Mtx&) { /* Nonmatching */ } /* 80261568-802615C4 .text rotTypeXYZ__FffRA3_A4_f */ -void rotTypeXYZ(float, float, float(&)[3][4]) { +void rotTypeXYZ(f32, f32, Mtx&) { /* Nonmatching */ } /* 802615C4-8026161C .text rotTypeYJiggle__FffRA3_A4_f */ -void rotTypeYJiggle(float, float, float(&)[3][4]) { +void rotTypeYJiggle(f32, f32, Mtx&) { /* Nonmatching */ } /* 8026161C-80261654 .text basePlaneTypeXY__FffffPQ29JGeometry8TVec3 */ -void basePlaneTypeXY(float, float, float, float, JGeometry::TVec3*) { +void basePlaneTypeXY(f32, f32, f32, f32, JGeometry::TVec3*) { /* Nonmatching */ } /* 80261654-8026168C .text basePlaneTypeXZ__FffffPQ29JGeometry8TVec3 */ -void basePlaneTypeXZ(float, float, float, float, JGeometry::TVec3*) { +void basePlaneTypeXZ(f32, f32, f32, f32, JGeometry::TVec3*) { /* Nonmatching */ }