Re-import JParticle

This commit is contained in:
robojumper
2026-05-07 21:13:24 +02:00
parent d8744e1f34
commit f4d163797f
30 changed files with 863 additions and 1277 deletions
+54 -54
View File
@@ -28,18 +28,18 @@ struct JPABaseShapeData {
/* 0x1C */ u8 mAlphaRef1;
/* 0x1D */ u8 mZModeCfg;
/* 0x1E */ u8 mTexFlg;
/* 0x1F */ u8 mTexAnmNum;
/* 0x1F */ u8 texAnmKeyNum;
/* 0x20 */ u8 mTexIdx;
/* 0x21 */ u8 mClrFlg;
/* 0x22 */ u8 mClrPrmKeyNum;
/* 0x23 */ u8 mClrEnvKeyNum;
/* 0x22 */ u8 prmAnmKeyNum;
/* 0x23 */ u8 envAnmKeyNum;
/* 0x24 */ s16 mClrAnmFrmMax;
/* 0x26 */ GXColor mClrPrm;
/* 0x2A */ GXColor mClrEnv;
/* 0x2E */ u8 mAnmRndm;
/* 0x2F */ u8 mClrAnmRndmMask;
/* 0x30 */ u8 mTexAnmRndmMask;
};
}; // Size: 0x34
struct JPABaseShapeAlphaArg {
GXTevAlphaArg mArg[4];
@@ -64,62 +64,62 @@ public:
static GXTevColorArg st_ca[6][4];
static JPABaseShapeAlphaArg st_aa[5];
GXBlendMode getBlendMode() const { return st_bm[mpData->mBlendModeCfg & 0x03]; }
GXBlendFactor getBlendSrc() const { return st_bf[(mpData->mBlendModeCfg >> 2) & 0x0F]; }
GXBlendFactor getBlendDst() const { return st_bf[(mpData->mBlendModeCfg >> 6) & 0x0F]; }
GXLogicOp getLogicOp() const { return st_lo[(mpData->mBlendModeCfg >> 10) & 0x0F]; }
GXBool getZCompLoc() const { return (GXBool)((mpData->mZModeCfg >> 5) & 0x01); }
GXBlendMode getBlendMode() const { return st_bm[pBsd->mBlendModeCfg & 0x03]; }
GXBlendFactor getBlendSrc() const { return st_bf[(pBsd->mBlendModeCfg >> 2) & 0x0F]; }
GXBlendFactor getBlendDst() const { return st_bf[(pBsd->mBlendModeCfg >> 6) & 0x0F]; }
GXLogicOp getLogicOp() const { return st_lo[(pBsd->mBlendModeCfg >> 10) & 0x0F]; }
GXBool getZCompLoc() const { return (GXBool)((pBsd->mZModeCfg >> 5) & 0x01); }
GXBool getZEnable() const { return (GXBool)(mpData->mZModeCfg & 0x01); }
GXCompare getZCmp() const { return st_c[(mpData->mZModeCfg >> 1) & 0x07]; }
GXBool getZUpd() const { return (GXBool)((mpData->mZModeCfg >> 4) & 0x01); }
GXBool getZEnable() const { return (GXBool)(pBsd->mZModeCfg & 0x01); }
GXCompare getZCmp() const { return st_c[(pBsd->mZModeCfg >> 1) & 0x07]; }
GXBool getZUpd() const { return (GXBool)((pBsd->mZModeCfg >> 4) & 0x01); }
GXCompare getAlphaCmp0() const { return st_c[mpData->mAlphaCompareCfg & 0x07]; }
u8 getAlphaRef0() const { return mpData->mAlphaRef0; }
GXAlphaOp getAlphaOp() const { return st_ao[(mpData->mAlphaCompareCfg >> 3) & 0x03]; }
GXCompare getAlphaCmp1() const { return st_c[(mpData->mAlphaCompareCfg >> 5) & 0x07]; }
u8 getAlphaRef1() const { return mpData->mAlphaRef1; }
GXCompare getAlphaCmp0() const { return st_c[pBsd->mAlphaCompareCfg & 0x07]; }
u8 getAlphaRef0() const { return pBsd->mAlphaRef0; }
GXAlphaOp getAlphaOp() const { return st_ao[(pBsd->mAlphaCompareCfg >> 3) & 0x03]; }
GXCompare getAlphaCmp1() const { return st_c[(pBsd->mAlphaCompareCfg >> 5) & 0x07]; }
u8 getAlphaRef1() const { return pBsd->mAlphaRef1; }
const GXTevColorArg* getTevColorArg() const { return st_ca[(mpData->mFlags >> 0x0F) & 0x07]; }
const JPABaseShapeAlphaArg* getTevAlphaArg() const { return &st_aa[(mpData->mFlags >> 0x12) & 0x07]; }
const GXTevColorArg* getTevColorArg() const { return st_ca[(pBsd->mFlags >> 0x0F) & 0x07]; }
const JPABaseShapeAlphaArg* getTevAlphaArg() const { return &st_aa[(pBsd->mFlags >> 0x12) & 0x07]; }
u32 getType() const { return (mpData->mFlags >> 0) & 0x0F; }
u32 getDirType() const { return (mpData->mFlags >> 4) & 0x07; }
u32 getRotType() const { return (mpData->mFlags >> 7) & 0x07; }
u32 getBasePlaneType() const { return (mpData->mFlags >> 10) & 0x01; }
u32 getTilingS() const { return (mpData->mFlags >> 27) & 0x01; } // was 25
u32 getTilingT() const { return (mpData->mFlags >> 28) & 0x01; } // was 26
BOOL isGlblClrAnm() const { return mpData->mFlags & 0x00001000; }
BOOL isGlblTexAnm() const { return mpData->mFlags & 0x00004000; }
BOOL isPrjTex() const { return mpData->mFlags & 0x00400000; } // was 0x00100000
bool isDrawFwdAhead() const { return !!(mpData->mFlags & 0x00800000); } // was 0x00200000
bool isDrawPrntAhead() const { return !!(mpData->mFlags & 0x01000000); } // was 0x00400000
BOOL isClipOn() const { return (mpData->mFlags & 0x02000000); } // was 0x00800000
BOOL isTexCrdAnm() const { return mpData->mFlags & 0x04000000; } // was 0x01000000
bool isNoDrawParent() const { return !!((mpData->mFlags >> 29) & 1); } // was 0x08000000
bool isNoDrawChild() const { return !!((mpData->mFlags >> 30) & 1); } // was 0x10000000
u32 getType() const { return (pBsd->mFlags >> 0) & 0x0F; }
u32 getDirType() const { return (pBsd->mFlags >> 4) & 0x07; }
u32 getRotType() const { return (pBsd->mFlags >> 7) & 0x07; }
u32 getBasePlaneType() const { return (pBsd->mFlags >> 10) & 0x01; }
u32 getTilingS() const { return (pBsd->mFlags >> 27) & 0x01; } // was 25
u32 getTilingT() const { return (pBsd->mFlags >> 28) & 0x01; } // was 26
BOOL isGlblClrAnm() const { return pBsd->mFlags & 0x00001000; }
BOOL isGlblTexAnm() const { return pBsd->mFlags & 0x00004000; }
BOOL isPrjTex() const { return pBsd->mFlags & 0x00400000; } // was 0x00100000
BOOL isDrawFwdAhead() const { return pBsd->mFlags & 0x00800000; } // was 0x00200000
BOOL isDrawPrntAhead() const { return pBsd->mFlags & 0x01000000; } // was 0x00400000
BOOL isClipOn() const { return pBsd->mFlags & 0x02000000; } // was 0x00800000
BOOL isTexCrdAnm() const { return pBsd->mFlags & 0x04000000; } // was 0x01000000
BOOL isNoDrawParent() const { return pBsd->mFlags >> 29 & 1; } // was 0x08000000
BOOL isNoDrawChild() const { return pBsd->mFlags >> 30 & 1; } // was 0x10000000
BOOL isPrmAnm() const { return mpData->mClrFlg & 0x02; }
BOOL isEnvAnm() const { return mpData->mClrFlg & 0x08; }
u8 getClrAnmType() const { return (mpData->mClrFlg >> 4) & 0x07; }
s16 getClrAnmMaxFrm() const { return mpData->mClrAnmFrmMax; }
void getPrmClr(GXColor* dst) { *dst = mpData->mClrPrm; }
void getPrmClr(s16 idx, GXColor* dst) { *dst = mpPrmClrAnmTbl[idx]; }
void getEnvClr(GXColor* dst) { *dst = mpData->mClrEnv; }
void getEnvClr(s16 idx, GXColor* dst) { *dst = mpEnvClrAnmTbl[idx]; }
BOOL isPrmAnm() const { return pBsd->mClrFlg & 0x02; }
BOOL isEnvAnm() const { return pBsd->mClrFlg & 0x08; }
u32 getClrAnmType() const { return (pBsd->mClrFlg >> 4) & 0x07; }
s16 getClrAnmMaxFrm() const { return pBsd->mClrAnmFrmMax; }
void getPrmClr(GXColor* dst) const { *dst = pBsd->mClrPrm; }
void getPrmClr(s16 idx, GXColor* dst) const { *dst = mpPrmClrAnmTbl[idx]; }
void getEnvClr(GXColor* dst) const { *dst = pBsd->mClrEnv; }
void getEnvClr(s16 idx, GXColor* dst) const { *dst = mpEnvClrAnmTbl[idx]; }
BOOL isTexAnm() const { return mpData->mTexFlg & 0x01; }
u8 getTexAnmType() const { return (mpData->mTexFlg >> 2) & 0x07; }
u32 getTexIdx() const { return mpData->mTexIdx; }
BOOL isTexAnm() const { return pBsd->mTexFlg & 0x01; }
u32 getTexAnmType() const { return (pBsd->mTexFlg >> 2) & 0x07; }
u8 getTexIdx() const { return pBsd->mTexIdx; }
u8 getTexIdx(u8 idx) const { return mpTexIdxAnimTbl[idx]; }
f32 getBaseSizeX() const { return mpData->mBaseSizeX; }
f32 getBaseSizeY() const { return mpData->mBaseSizeY; }
u8 getClrLoopOfstMask() const { return mpData->mClrAnmRndmMask; }
u32 getClrLoopOfst(u32 param_1) const { return getClrLoopOfstMask() & param_1; }
u8 getTexLoopOfstMask() const { return mpData->mTexAnmRndmMask; }
u32 getTexLoopOfst(u8 param_1) const { return getTexLoopOfstMask() & param_1; }
u8 getLoopOfstValue() const { return mpData->mAnmRndm; }
f32 getBaseSizeX() const { return pBsd->mBaseSizeX; }
f32 getBaseSizeY() const { return pBsd->mBaseSizeY; }
u8 getClrLoopOfstMask() const { return pBsd->mClrAnmRndmMask; }
s32 getClrLoopOfst(u8 param_1) const { return getClrLoopOfstMask() & param_1; }
u8 getTexLoopOfstMask() const { return pBsd->mTexAnmRndmMask; }
s32 getTexLoopOfst(u8 param_1) const { return getTexLoopOfstMask() & param_1; }
u8 getLoopOfstValue() const { return pBsd->mAnmRndm; }
f32 getIncTransX() const { return ((f32*)mpTexCrdMtxAnmTbl)[5]; }
f32 getInitTransX() const { return ((f32*)mpTexCrdMtxAnmTbl)[0]; }
@@ -131,10 +131,10 @@ public:
f32 getInitScaleY() const { return ((f32*)mpTexCrdMtxAnmTbl)[3]; }
f32 getIncRot() const { return ((f32*)mpTexCrdMtxAnmTbl)[9]; }
f32 getInitRot() const { return ((f32*)mpTexCrdMtxAnmTbl)[4]; }
u8 getTexAnmKeyNum() const { return mpData->mTexAnmNum; }
u8 getTexAnmKeyNum() const { return pBsd->texAnmKeyNum; }
public:
/* 0x00 */ const JPABaseShapeData* mpData;
/* 0x00 */ const JPABaseShapeData* pBsd;
/* 0x04 */ const void* mpTexCrdMtxAnmTbl;
/* 0x08 */ const u8* mpTexIdxAnimTbl;
/* 0x0C */ GXColor* mpPrmClrAnmTbl;
@@ -82,6 +82,7 @@ public:
/* 0x00 */ const JPAChildShapeData* mpData;
};
// SS addition
void fn_8031DBA0(JPAEmitterWorkData*);
void JPARegistChildPrmEnv(JPAEmitterWorkData*);
+4 -2
View File
@@ -11,12 +11,12 @@
class JPADrawInfo {
public:
JPADrawInfo() {}
JPADrawInfo(Mtx param_0, f32 fovY, f32 aspect) {
JPADrawInfo(const Mtx param_0, f32 fovY, f32 aspect) {
MTXCopy(param_0, mCamMtx);
C_MTXLightPerspective(mPrjMtx, fovY, aspect, 0.5f, -0.5f, 0.5f, 0.5f);
}
JPADrawInfo(Mtx param_0, f32 top, f32 bottom, f32 left, f32 right) {
JPADrawInfo(const Mtx param_0, f32 top, f32 bottom, f32 left, f32 right) {
MTXCopy(param_0, mCamMtx);
C_MTXLightOrtho(mPrjMtx, top, bottom, left, right, 0.5f, 0.5f, 0.5f, 0.5f);
}
@@ -26,6 +26,8 @@ public:
void getCamMtx(Mtx dst) const { MTXCopy(mCamMtx, dst); }
void getPrjMtx(Mtx dst) const { MTXCopy(mPrjMtx, dst); }
void setPrjMtx(const Mtx src) { MTXCopy(src, mPrjMtx); }
};
#endif
+18 -20
View File
@@ -6,8 +6,7 @@
#include "egg/math/eggVector.h"
#include "m/m_angle.h"
class JPAEmitterWorkData;
struct JPAEmitterWorkData;
/**
* @ingroup jsystem-jparticle
@@ -43,8 +42,7 @@ struct JPADynamicsBlockData {
/* 0x74 */ u16 mVolumeSize;
/* 0x76 */ u16 mDivNumber;
/* 0x78 */ u8 mRateStep;
/* 0x7C */ u32 field_0x7c;
};
}; // Size: 0x7C
typedef void (*JPADynamicsCalcVolumeFunc)(JPAEmitterWorkData*);
@@ -66,7 +64,7 @@ public:
void init();
void create(JPAEmitterWorkData*);
void calc(JPAEmitterWorkData* work) { mpCalcVolumeFunc(work); }
void calc(JPAEmitterWorkData* work) const { mpCalcVolumeFunc(work); }
s16 getStartFrame() const { return mpData->mStartFrame; }
u32 getResUserWork() const { return mpData->mResUserWork; }
@@ -83,23 +81,23 @@ public:
void getEmitterDir(EGG::Vector3f* vec) const {
vec->set(mpData->mEmitterDir.x, mpData->mEmitterDir.y, mpData->mEmitterDir.z);
}
void getEmitterRot(mAng3_c* vec) const {
void getEmitterRot(mAng3_c* vec) const {
vec->set(mpData->mEmitterRot);
}
s16 getMaxFrame() { return mpData->mMaxFrame; }
s16 getLifetime() { return mpData->mLifeTime; }
u16 getVolumeSize() { return mpData->mVolumeSize; }
f32 getRate() { return mpData->mRate; }
u8 getRateStep() { return mpData->mRateStep; }
f32 getVolumeSweep() { return mpData->mVolumeSweep; }
f32 getVolumeMinRad() { return mpData->mVolumeMinRad; }
f32 getInitVelOmni() { return mpData->mInitialVelOmni; }
f32 getInitVelAxis() { return mpData->mInitialVelAxis; }
f32 getInitVelDir() { return mpData->mInitialVelDir; }
f32 getInitVelDirSp() { return mpData->mSpread; }
f32 getInitVelRndm() { return mpData->mInitialVelRndm; }
}
s16 getMaxFrame() const { return mpData->mMaxFrame; }
s16 getLifetime() const { return mpData->mLifeTime; }
u16 getVolumeSize() const { return mpData->mVolumeSize; }
f32 getRate() const { return mpData->mRate; }
u8 getRateStep() const { return mpData->mRateStep; }
f32 getVolumeSweep() const { return mpData->mVolumeSweep; }
f32 getVolumeMinRad() const { return mpData->mVolumeMinRad; }
f32 getInitVelOmni() const { return mpData->mInitialVelOmni; }
f32 getInitVelAxis() const { return mpData->mInitialVelAxis; }
f32 getInitVelDir() const { return mpData->mInitialVelDir; }
f32 getInitVelDirSp() const { return mpData->mSpread; }
f32 getInitVelRndm() const { return mpData->mInitialVelRndm; }
f32 getInitVelRatio() const { return mpData->mInitialVelRatio; }
f32 getAirRes() { return mpData->mAirResist; }
f32 getAirRes() const { return mpData->mAirResist; }
f32 getLifetimeRndm() const { return mpData->mLifeTimeRndm; }
f32 getMomentRndm() const { return mpData->mMoment; }
+30 -16
View File
@@ -81,8 +81,6 @@ public:
virtual void executeAfter(JPABaseEmitter*) {}
virtual void draw(JPABaseEmitter*) {}
virtual void drawAfter(JPABaseEmitter*) {}
//~JPAEmitterCallBack();
};
enum {
@@ -119,11 +117,12 @@ public:
void setStatus(u32 status) { mStatus |= status; }
void clearStatus(u32 status) { mStatus &= ~status; }
u32 checkStatus(u32 status) const { return (mStatus & status); }
bool checkFlag(u32 flag) const { return !!(mpRes->getDyn()->getFlag() & flag); }
u32 getDynResUserWork() const { return mpRes->getDyn()->getResUserWork(); }
u32 checkFlag(u32 flag) const { return pRes->getDyn()->getFlag() & flag; }
u32 getDynResUserWork() const { return pRes->getDyn()->getResUserWork(); }
u8 getResourceManagerID() const { return mResMgrID; }
u8 getGroupID() const { return mGroupID; }
u8 getDrawTimes() const { return mDrawTimes; }
f32 getRate() const { return mRate; }
void setRate(f32 rate) { mRate = rate; }
void setDirectionalSpeed(f32 i_speed) { mDirSpeed = i_speed; }
void setRandomDirectionSpeed(f32 i_speed) { mRndmDirSpeed = i_speed; }
@@ -131,21 +130,22 @@ public:
void setGlobalRTMatrix(const Mtx m) { JPASetRMtxTVecfromMtx(m, mGlobalRot, &mGlobalTrs); }
void setGlobalSRTMatrix(const Mtx m) {
JPASetRMtxSTVecfromMtx(m, mGlobalRot, &mGlobalScl, &mGlobalTrs);
// "set is used in TP debug"
mGlobalPScl.set(mGlobalScl.x, mGlobalScl.y);
}
void setGlobalTranslation(f32 x, f32 y, f32 z) { mGlobalTrs.set(x, y, z); }
void setGlobalTranslation(const EGG::Vector3f& trs) { mGlobalTrs.set(trs); }
void getLocalTranslation(EGG::Vector3f& vec) { vec.set(mLocalTrs); }
void getLocalTranslation(EGG::Vector3f* vec) const { vec->set(mLocalTrs); }
void setGlobalRotation(const mAng3_c& rot) {
JPAGetXYZRotateMtx(rot.x, rot.y, rot.z, mGlobalRot);
}
void getGlobalTranslation(EGG::Vector3f* out) const { out->set(mGlobalTrs); }
void setGlobalDynamicsScale(const EGG::Vector3f& i_scale) { mGlobalScl.set(i_scale); }
void getGlobalDynamicsScale(EGG::Vector3f* i_scale) const { i_scale->set(mGlobalScl); }
void setGlobalAlpha(u8 alpha) { mGlobalPrmClr.a = alpha; }
u8 getGlobalAlpha() { return mGlobalPrmClr.a; }
u8 getGlobalAlpha() const { return mGlobalPrmClr.a; }
void getGlobalPrmColor(GXColor& color) { color = mGlobalPrmClr; }
void getGlobalPrmColor(GXColor* color) const { *color = mGlobalPrmClr; }
void setGlobalPrmColor(u8 r, u8 g, u8 b) { mGlobalPrmClr.r = r; mGlobalPrmClr.g = g; mGlobalPrmClr.b = b; }
void setGlobalEnvColor(u8 r, u8 g, u8 b) { mGlobalEnvClr.r = r; mGlobalEnvClr.g = g; mGlobalEnvClr.b = b; }
void setVolumeSize(u16 size) { mVolumeSize = size; }
@@ -154,21 +154,27 @@ public:
void setAwayFromAxisSpeed(f32 i_speed) { mAwayFromAxisSpeed = i_speed; }
void setSpread(f32 i_spread) { mSpread = i_spread; }
void setLocalTranslation(const EGG::Vector3f& i_trans) { mLocalTrs.set(i_trans); }
void setLocalRotation(const mAng3_c& i_rot) { mLocalRot.set(i_rot.x * 0.005493248f, i_rot.y * 0.005493248f, i_rot.z * 0.005493248f); }
void setLocalRotation(const mAng3_c& i_rot) {
mLocalRot.set(i_rot.x * (360.0f / 0xffff), i_rot.y * (360.0f / 0xffff),
i_rot.z * (360.0f / 0xffff));
}
void setRateStep(u8 i_step) { mRateStep = i_step; }
void setGlobalParticleHeightScale(f32 height) {
mGlobalPScl.y = height;
}
void setGlobalParticleScale(const EGG::Vector3f& scale) {
mGlobalPScl.set(scale.x, scale.y);
mGlobalPScl.set((f32)scale.x, (f32)scale.y);
}
void setGlobalParticleScale(f32 scaleX, f32 scaleY) {
mGlobalPScl.set(scaleX, scaleY);
}
void getGlobalParticleScale(EGG::Vector3f& scale) {
void getGlobalParticleScale(EGG::Vector3f& scale) const {
scale.set(mGlobalPScl.x, mGlobalPScl.y, 1.0f);
}
void getGlobalParticleScale(EGG::Vector3f* scale) const {
scale->set(mGlobalPScl.x, mGlobalPScl.y, 1.0f);
}
void setGlobalScale(const EGG::Vector3f& scale) {
mGlobalScl.set(scale);
mGlobalPScl.set(scale.x ,scale.y);
@@ -214,20 +220,28 @@ public:
void stopDrawParticle() { setStatus(JPAEmtrStts_StopDraw); }
void playDrawParticle() { clearStatus(JPAEmtrStts_StopDraw); }
u32 getUserWork() { return mpUserWork; }
void setUserWork(u32 userWork) { mpUserWork = userWork; }
u32 getParticleNumber() {
uintptr_t getUserWork() const { return mpUserWork; }
void setUserWork(uintptr_t userWork) { mpUserWork = userWork; }
u32 getParticleNumber() const {
return mAlivePtclBase.getNum() + mAlivePtclChld.getNum();
}
bool isEnableDeleteEmitter() {
bool isEnableDeleteEmitter() const {
return checkStatus(JPAEmtrStts_EnableDeleteEmitter) && getParticleNumber() == 0;
}
void setDrawTimes(u8 drawTimes) { mDrawTimes = drawTimes; }
void setParticleCallBackPtr(JPAParticleCallBack* cb) { mpPtclCallBack = cb; }
JPAParticleCallBack* getParticleCallBackPtr() { return mpPtclCallBack; }
JPAParticleCallBack* getParticleCallBackPtr() const { return mpPtclCallBack; }
JPAEmitterCallBack* getEmitterCallBackPtr() const { return mpEmtrCallBack; }
u32 getAge() const { return mTick; }
void setVolumeMiniRadius(f32 param_1) {
mVolumeMinRad = param_1;
}
void setMaxFrame(s32 maxFrame) {
mMaxFrame = maxFrame;
}
public:
/* 0x00 */ EGG::Vector3f mLocalScl;
/* 0x0C */ EGG::Vector3f mLocalTrs;
@@ -259,7 +273,7 @@ public:
/* 0xD4 */ JPAList<JPABaseParticle> mAlivePtclChld;
/* 0xE0 */ JPAList<JPABaseParticle>* mpPtclPool;
/* 0xE4 */ JPAEmitterManager* mpEmtrMgr;
/* 0xE8 */ JPAResource* mpRes;
/* 0xE8 */ JPAResource* pRes;
/* 0xEC */ JPAEmitterCallBack* mpEmtrCallBack;
/* 0xF0 */ JPAParticleCallBack* mpPtclCallBack;
/* 0xF4 */ u32 mStatus;
@@ -6,6 +6,7 @@
#include "JSystem/JParticle/JPAList.h"
#include "JSystem/JParticle/JPADrawInfo.h"
#include "JSystem/JSupport/JSUList.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "JSystem/JGeometry.h"
class JPAEmitterCallBack;
@@ -36,7 +37,13 @@ public:
void entryResourceManager(JPAResourceManager*, u8);
void clearResourceManager(u8);
void calcYBBCam();
JPAResourceManager* getResourceManager(u16 idx) { return pResMgrAry[idx]; }
JPAResourceManager* getResourceManager(u16 idx) const { return pResMgrAry[idx]; }
JPAResourceManager* getResourceManager(u8 res_mgr_id) const {
JUT_ASSERT(147, res_mgr_id < ridMax);
return pResMgrAry[res_mgr_id];
}
int getEmitterNumber() const { return emtrNum - mFreeEmtrList.getNumLinks(); }
int getParticleNumber() const { return ptclNum - mPtclPool.getNum(); }
public:
/* 0x00 */ JSUList<JPABaseEmitter>* pEmtrUseList;
+4 -3
View File
@@ -4,7 +4,7 @@
#include "JSystem/JParticle/JPABaseShape.h"
#include "common.h"
class JPAEmitterWorkData;
struct JPAEmitterWorkData;
/**
* @ingroup jsystem-jparticle
@@ -31,7 +31,7 @@ struct JPAExTexShapeData {
/* 0x4D */ s8 mExpScale;
/* 0x4E */ s8 mIndTexIdx;
/* 0x4F */ s8 mSecTexIdx;
};
}; // Size: 0x50
/**
* @ingroup jsystem-jparticle
@@ -46,7 +46,7 @@ public:
s8 getExpScale() const { return mpData->mExpScale; }
u8 getIndTexIdx() const { return mpData->mIndTexIdx; }
u8 getSecTexIdx() const { return mpData->mSecTexIdx; }
bool isUseIndirect() const { return !!(mpData->mFlags & 0x01); }
BOOL isUseIndirect() const { return !!(mpData->mFlags & 0x01); }
BOOL isUseSecTex() const { return (mpData->mFlags & 0x0100); }
f32 getField_0x24() const { return mpData->field_0x24; }
@@ -62,6 +62,7 @@ public:
public:
const JPAExTexShapeData* mpData;
// SS addition
void fn_8031DE80(const JPABaseShape *bsp, f32) const;
};
+2 -2
View File
@@ -3,7 +3,7 @@
#include "common.h"
class JPAEmitterWorkData;
struct JPAEmitterWorkData;
class JPABaseParticle;
/**
@@ -38,7 +38,7 @@ struct JPAExtraShapeData {
/* 0x54 */ f32 mRotateSpeed;
/* 0x58 */ f32 mRotateSpeedRandom;
/* 0x5C */ f32 mRotateDirection;
};
}; // Size: 0x60
/**
* @ingroup jsystem-jparticle
+20 -20
View File
@@ -5,7 +5,7 @@
#include "egg/egg_types.h"
#include "egg/math/eggVector.h"
class JPAEmitterWorkData;
struct JPAEmitterWorkData;
class JPABaseParticle;
class JPAFieldBlock;
@@ -122,36 +122,36 @@ public:
JPAFieldBlock(u8 const*, EGG::Heap*);
void init(EGG::Heap*);
u32 getType() { return mpData->mFlags & 0xF; }
u32 getAddType() { return (mpData->mFlags >> 8) & 3; }
u32 getSttFlag() { return mpData->mFlags >> 16; }
bool checkStatus(u16 flag) { return flag & getSttFlag(); }
u32 getType() const { return mpData->mFlags & 0xF; }
u32 getAddType() const { return (mpData->mFlags >> 8) & 3; }
u32 getSttFlag() const { return mpData->mFlags >> 16; }
u32 checkStatus(u16 flag) { return flag & getSttFlag(); }
f32 getMagRndm() const { return mpData->mMagRndm; }
f32 getVal1() const { return mpData->mVal1; }
f32 getFadeInTime() { return mpData->mFadeInTime; }
f32 getFadeOutTime() { return mpData->mFadeOutTime; }
f32 getEnTime() { return mpData->mEnTime; }
f32 getDisTime() { return mpData->mDisTime; }
u8 getCycle() { return mpData->mCycle; }
f32 getFadeInRate() { return mFadeInRate; }
f32 getFadeOutRate() { return mFadeOutRate; }
EGG::Vector3f& getPos() { return mPos; }
EGG::Vector3f& getDir() { return mDir; }
f32 getFadeInTime() const { return mpData->mFadeInTime; }
f32 getFadeOutTime() const { return mpData->mFadeOutTime; }
f32 getEnTime() const { return mpData->mEnTime; }
f32 getDisTime() const { return mpData->mDisTime; }
u8 getCycle() const { return mpData->mCycle; }
f32 getFadeInRate() const { return mFadeInRate; }
f32 getFadeOutRate() const { return mFadeOutRate; }
const EGG::Vector3f& getPos() const { return mPos; }
const EGG::Vector3f& getDir() const { return mDir; }
f32 getMag() const { return mMag; }
void getPosOrig(EGG::Vector3f* pos) { pos->set(mpData->mPos); }
void getDirOrig(EGG::Vector3f* dir) { dir->set(mpData->mDir); }
f32 getMagOrig() { return mpData->mMag; }
void getPosOrig(EGG::Vector3f* pos) const { pos->set(mpData->mPos); }
void getDirOrig(EGG::Vector3f* dir) const { dir->set(mpData->mDir); }
f32 getMagOrig() const { return mpData->mMag; }
void initOpParam() {
getPosOrig(&mPos);
getDirOrig(&mDir);
mMag = getMagOrig();
}
void prepare(JPAEmitterWorkData* work) { mpField->prepare(work, this); }
void calc(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { mpField->calc(work, this, ptcl); }
void prepare(JPAEmitterWorkData* work) { pFld->prepare(work, this); }
void calc(JPAEmitterWorkData* work, JPABaseParticle* ptcl) { pFld->calc(work, this, ptcl); }
private:
/* 0x00 */ const JPAFieldBlockData* mpData;
/* 0x04 */ JPAFieldBase* mpField;
/* 0x04 */ JPAFieldBase* pFld;
/* 0x08 */ f32 mFadeInRate;
/* 0x0C */ f32 mFadeOutRate;
/* 0x10 */ EGG::Vector3f mPos;
+4 -1
View File
@@ -11,7 +11,10 @@ struct JPAKeyBlock {
JPAKeyBlock(u8 const*);
f32 calc(f32);
u8 getID() { return mDataStart[8]; }
u8 getID() const { return mDataStart[8]; }
u8 getKeyNum() const { return mDataStart[9]; }
BOOL isLoop() const { return mDataStart[11]; }
const f32* getKeyData() const { return field_0x4; }
const u8* mDataStart;
const f32* field_0x4;
+6 -10
View File
@@ -12,8 +12,8 @@ struct JPANode {
JPANode() : mpPrev(NULL), mpNext(NULL) {
}
~JPANode() {}
JPANode<T>* getPrev() { return mpPrev; }
JPANode<T>* getNext() { return mpNext; }
JPANode<T>* getPrev() const { return mpPrev; }
JPANode<T>* getNext() const { return mpNext; }
T* getObject() { return &mData; }
/* 0x00 */ JPANode<T>* mpPrev;
@@ -48,8 +48,7 @@ struct JPAList {
} else {
mpLast = node;
mpFirst = node;
node->mpPrev = NULL;
node->mpNext = NULL;
node->mpNext = node->mpPrev = NULL;
}
mNum++;
@@ -75,8 +74,7 @@ struct JPAList {
if (mNum == 1) {
ret = mpFirst;
mpLast = NULL;
mpFirst = NULL;
mpFirst = mpLast = NULL;
mNum--;
} else if (mNum) {
ret = mpFirst;
@@ -93,8 +91,7 @@ struct JPAList {
if (mNum == 1) {
ret = mpLast;
mpLast = NULL;
mpFirst = NULL;
mpFirst = mpLast = NULL;
mNum--;
} else if (mNum) {
ret = mpLast;
@@ -120,8 +117,7 @@ struct JPAList {
mpLast = node->mpPrev;
mNum--;
} else {
mpLast = NULL;
mpFirst = NULL;
mpFirst = mpLast = NULL;
mNum--;
}
return node;
+8 -6
View File
@@ -27,22 +27,24 @@ public:
bool canCreateChild(JPAEmitterWorkData*);
f32 getWidth(JPABaseEmitter const*) const;
f32 getHeight(JPABaseEmitter const*) const;
int getAge() { return mAge; }
int getAge() const { return mAge; }
void setOffsetPosition(const EGG::Vector3f& pos) { mOffsetPosition.set(pos); }
void setOffsetPosition(f32 x, f32 y, f32 z) { mOffsetPosition.set(x, y, z); }
void getOffsetPosition(EGG::Vector3f& pos) { pos.set(mOffsetPosition); }
s16 getRotateAngle() const { return mRotateAngle; }
void getGlobalPosition(EGG::Vector3f& pos) const { pos.set(mPosition); }
void getOffsetPosition(EGG::Vector3f* pos) const { pos->set(mOffsetPosition); }
u16 getRotateAngle() const { return mRotateAngle; }
void getGlobalPosition(EGG::Vector3f* pos) const { pos->set(mPosition); }
f32 getParticleScaleX() const { return mParticleScaleX; }
f32 getParticleScaleY() const { return mParticleScaleY; }
void setStatus(u32 flag) { mStatus |= flag; }
u32 checkStatus(u32 flag) { return mStatus & flag; }
u32 checkStatus(u32 flag) const { return mStatus & flag; }
void initStatus(u32 status) { mStatus = status; }
void setInvisibleParticleFlag() { setStatus(8); }
void setDeleteParticleFlag() { setStatus(2); }
void getVelVec(EGG::Vector3f& vec) const { vec.set(mVelocity); }
void getLocalPosition(EGG::Vector3f& vec) const { vec.set(mLocalPosition); }
void getVelVec(EGG::Vector3f* vec) const { vec->set(mVelocity); }
void getLocalPosition(EGG::Vector3f* vec) const { vec->set(mLocalPosition); }
void getBaseAxis(EGG::Vector3f& vec) const { vec.set(mBaseAxis); }
void getBaseAxis(EGG::Vector3f* vec) const { vec->set(mBaseAxis); }
public:
/* 0x00 */ EGG::Vector3f mPosition;
+17 -17
View File
@@ -4,7 +4,7 @@
#include "common.h"
#include "egg/egg_types.h"
class JPAEmitterWorkData;
struct JPAEmitterWorkData;
class JPABaseEmitter;
class JPABaseParticle;
@@ -37,13 +37,13 @@ public:
void calcWorkData_c(JPAEmitterWorkData*);
void calcWorkData_d(JPAEmitterWorkData*);
JPABaseShape* getBsp() const { return mpBaseShape; }
JPAExtraShape* getEsp() const { return mpExtraShape; }
JPAChildShape* getCsp() const { return mpChildShape; }
JPAExTexShape* getEts() const { return mpExTexShape; }
JPADynamicsBlock* getDyn() const { return mpDynamicsBlock; }
JPABaseShape* getBsp() const { return pBsp; }
JPAExtraShape* getEsp() const { return pEsp; }
JPAChildShape* getCsp() const { return pCsp; }
JPAExTexShape* getEts() const { return pEts; }
JPADynamicsBlock* getDyn() const { return pDyn; }
u32 getTexIdx(u32 idx) const { return mpTDB1[idx]; }
const u16 getTexIdx(u8 idx) { return mpTDB1[idx]; }
u16 getUsrIdx() const { return mUsrIdx; }
public:
@@ -57,18 +57,18 @@ public:
/* 0x14 */ ParticleFunc* mpCalcParticleChildFuncList;
/* 0x18 */ ParticleFunc* mpDrawParticleChildFuncList;
/* 0x1C */ JPABaseShape* mpBaseShape;
/* 0x20 */ JPAExtraShape* mpExtraShape;
/* 0x24 */ JPAChildShape* mpChildShape;
/* 0x28 */ JPAExTexShape* mpExTexShape;
/* 0x2C */ JPADynamicsBlock* mpDynamicsBlock;
/* 0x30 */ JPAFieldBlock** mpFieldBlocks;
/* 0x34 */ JPAKeyBlock** mpKeyBlocks;
/* 0x1C */ JPABaseShape* pBsp;
/* 0x20 */ JPAExtraShape* pEsp;
/* 0x24 */ JPAChildShape* pCsp;
/* 0x28 */ JPAExTexShape* pEts;
/* 0x2C */ JPADynamicsBlock* pDyn;
/* 0x30 */ JPAFieldBlock** ppFld;
/* 0x34 */ JPAKeyBlock** ppKey;
/* 0x38 */ u16 const* mpTDB1;
/* 0x3C */ u16 mUsrIdx;
/* 0x3E */ u8 mFieldBlockNum;
/* 0x3F */ u8 mKeyBlockNum;
/* 0x40 */ u8 mTDB1Num;
/* 0x3E */ u8 fldNum;
/* 0x3F */ u8 keyNum;
/* 0x40 */ u8 texNum;
/* 0x41 */ u8 mpCalcEmitterFuncListNum;
/* 0x42 */ u8 mpDrawEmitterFuncListNum;
/* 0x43 */ u8 mpDrawEmitterChildFuncListNum;
@@ -22,16 +22,16 @@ public:
void registTex(JPATexture*);
u32 getResUserWork(u16) const;
void load(u16 idx, GXTexMapID texMapID) { mpTexArr[idx]->load(texMapID); }
void load(u16 idx, GXTexMapID texMapID) { pTexAry[idx]->load(texMapID); }
public:
/* 0x00 */ EGG::Heap* mpHeap;
/* 0x04 */ JPAResource** mpResArr;
/* 0x08 */ JPATexture** mpTexArr;
/* 0x0C */ u16 mResMax;
/* 0x0E */ u16 mResNum;
/* 0x10 */ u16 mTexMax;
/* 0x12 */ u16 mTexNum;
/* 0x04 */ JPAResource** pResAry;
/* 0x08 */ JPATexture** pTexAry;
/* 0x0C */ u16 resMaxNum;
/* 0x0E */ u16 resRegNum;
/* 0x10 */ u16 texMaxNum;
/* 0x12 */ u16 texRegNum;
};
#endif /* JPARESOURCEMANAGER_H */
File diff suppressed because it is too large Load Diff
-12
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JPAChildShape
//
#include "JSystem/JParticle/JPAChildShape.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
@@ -15,8 +10,6 @@ void fn_8031DBA0(JPAEmitterWorkData* work) {
}
}
/* 8027AEBC-8027AFDC 2757FC 0120+00 0/0 1/1 0/0 .text JPARegistChildPrmEnv__FP18JPAEmitterWorkData
*/
void JPARegistChildPrmEnv(JPAEmitterWorkData* work) {
JPAChildShape* csp = work->mpRes->getCsp();
JPABaseEmitter* emtr = work->mpEmtr;
@@ -34,21 +27,16 @@ void JPARegistChildPrmEnv(JPAEmitterWorkData* work) {
GXSetTevColor(GX_TEVREG1, env);
}
/* 8027AFDC-8027B008 27591C 002C+00 0/0 1/1 0/0 .text
* JPACalcChildAlphaOut__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcChildAlphaOut(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
f32 anm = (1.0f - ptcl->mTime) * 255.0f;
OSf32tou8(&anm, &ptcl->mPrmColorAlphaAnm);
}
/* 8027B008-8027B038 275948 0030+00 0/0 1/1 0/0 .text
* JPACalcChildScaleOut__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcChildScaleOut(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
ptcl->mParticleScaleX = ptcl->mScaleOut * (1.0f - ptcl->mTime);
ptcl->mParticleScaleY = ptcl->mAlphaWaveRandom * (1.0f - ptcl->mTime);
}
/* 8027B038-8027B040 -00001 0008+00 0/0 0/0 0/0 .text __ct__13JPAChildShapeFPCUc */
JPAChildShape::JPAChildShape(u8 const* pData) {
mpData = (JPAChildShapeData*)pData;
}
+24 -52
View File
@@ -1,14 +1,8 @@
//
// Generated By: dol2asm
// Translation Unit: JPADynamicsBlock
//
#include "JSystem/JParticle/JPADynamicsBlock.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) {
work->mVolumeCalcData.mVolumePos.setZero();
work->mVolumeCalcData.mVelOmni.set(work->mpEmtr->get_r_zh(), work->mpEmtr->get_r_zh(),
@@ -17,7 +11,6 @@ void JPAVolumePoint(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVelOmni.z);
}
/* 8027B220-8027B33C 275B60 011C+00 1/1 0/0 0/0 .text JPAVolumeLine */
void JPAVolumeLine(JPAEmitterWorkData* work) {
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
work->mVolumeCalcData.mVolumePos.set(
@@ -34,7 +27,6 @@ void JPAVolumeLine(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVelAxis.set(0.0f, 0.0f, work->mVolumeCalcData.mVolumePos.z);
}
/* 8027B33C-8027B4E8 275C7C 01AC+00 1/1 0/0 0/0 .text JPAVolumeCircle */
// NONMATCHING regalloc. Could be issue with mul asm implementations
void JPAVolumeCircle(JPAEmitterWorkData* work) {
s16 theta;
@@ -56,29 +48,25 @@ void JPAVolumeCircle(JPAEmitterWorkData* work) {
distance = work->mVolumeSize * (work->mVolumeMinRad + distance * (1.0f - work->mVolumeMinRad));
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.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f,
work->mVolumeCalcData.mVolumePos.z);
}
/* 8027B4E8-8027B5F0 275E28 0108+00 1/1 0/0 0/0 .text JPAVolumeCube */
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 = work->mVolumeCalcData.mVolumePos;
work->mVolumeCalcData.mVelOmni *= work->mGlobalScl;
work->mVolumeCalcData.mVelOmni.mul(work->mVolumeCalcData.mVolumePos, work->mGlobalScl);
work->mVolumeCalcData.mVelAxis.set(work->mVolumeCalcData.mVolumePos.x, 0.0f, work->mVolumeCalcData.mVolumePos.z);
}
/* 8027B5F0-8027B87C 275F30 028C+00 1/1 0/0 0/0 .text JPAVolumeSphere__FP18JPAEmitterWorkData */
static void JPAVolumeSphere(JPAEmitterWorkData* work) {
s16 phi, theta;
s16 phi, r28;
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
phi = (u16)(work->mVolumeX * 0x8000 / (work->mDivNumber - 1) + 0x4000);
f32 tmp = (u16)(work->mVolumeAngleNum * 0x10000 / (work->mVolumeAngleMax - 1));
theta = tmp * work->mVolumeSweep + 0x8000;
phi = u16(work->mVolumeX * 0x8000 / (work->mDivNumber - 1) + 0x4000);
u16 r26 = u16(work->mVolumeAngleNum * 0x10000 / (work->mVolumeAngleMax - 1));
r28 = f32(r26) * work->mVolumeSweep + 0x8000;
work->mVolumeAngleNum++;
if (work->mVolumeAngleNum == work->mVolumeAngleMax) {
work->mVolumeAngleNum = 0;
@@ -92,16 +80,16 @@ static void JPAVolumeSphere(JPAEmitterWorkData* work) {
}
} else {
phi = work->mpEmtr->get_r_ss() >> 1;
theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
r28 = work->mVolumeSweep * work->mpEmtr->get_r_ss();
}
f32 rnd = work->mpEmtr->get_r_f();
f32 f31 = work->mpEmtr->get_r_f();
if (work->mpEmtr->checkFlag(JPADynFlag_FixedDensity)) {
rnd = 1.0f - rnd * rnd * rnd;
f31 = 1.0f - f31 * f31 * f31;
}
f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad));
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));
f31 = work->mVolumeSize * (work->mVolumeMinRad + f31 * (1.0f - work->mVolumeMinRad));
work->mVolumeCalcData.mVolumePos.set(f31 * nw4r::math::CosIdx(phi) * nw4r::math::SinIdx(r28), -f31 * nw4r::math::SinIdx(phi),
f31 * nw4r::math::CosIdx(phi) * nw4r::math::CosIdx(r28));
work->mVolumeCalcData.mVelOmni.set(
work->mVolumeCalcData.mVolumePos.x * work->mGlobalScl.x,
work->mVolumeCalcData.mVolumePos.y * work->mGlobalScl.y, work->mVolumeCalcData.mVolumePos.z * work->mGlobalScl.z
@@ -110,16 +98,15 @@ static void JPAVolumeSphere(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVolumePos.z);
}
/* 8027B87C-8027B9F8 2761BC 017C+00 1/1 0/0 0/0 .text JPAVolumeCylinder__FP18JPAEmitterWorkData */
static void JPAVolumeCylinder(JPAEmitterWorkData* work) {
s16 theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
f32 rnd = work->mpEmtr->get_r_f();
s16 r30 = work->mVolumeSweep * work->mpEmtr->get_r_ss();
f32 f31 = work->mpEmtr->get_r_f();
if (work->mpEmtr->checkFlag(JPADynFlag_FixedDensity)) {
rnd = 1.0f - rnd * rnd;
f31 = 1.0f - f31 * f31;
}
f32 rad = work->mVolumeSize * (work->mVolumeMinRad + rnd * (1.0f - work->mVolumeMinRad));
f31 = work->mVolumeSize * (work->mVolumeMinRad + f31 * (1.0f - work->mVolumeMinRad));
work->mVolumeCalcData.mVolumePos.set(
rad * nw4r::math::SinIdx(theta), work->mVolumeSize * work->mpEmtr->get_r_zp(), rad * nw4r::math::CosIdx(theta));
f31 * nw4r::math::SinIdx(r30), work->mVolumeSize * work->mpEmtr->get_r_zp(), f31 * nw4r::math::CosIdx(r30));
work->mVolumeCalcData.mVelOmni.set(
work->mVolumeCalcData.mVolumePos.x * work->mGlobalScl.x,
work->mVolumeCalcData.mVolumePos.y * work->mGlobalScl.y, work->mVolumeCalcData.mVolumePos.z * work->mGlobalScl.z
@@ -128,7 +115,6 @@ static void JPAVolumeCylinder(JPAEmitterWorkData* work) {
work->mVolumeCalcData.mVolumePos.z);
}
/* 8027B9F8-8027BB18 276338 0120+00 1/1 0/0 0/0 .text JPAVolumeTorus__FP18JPAEmitterWorkData */
static void JPAVolumeTorus(JPAEmitterWorkData* work) {
s16 theta = work->mVolumeSweep * work->mpEmtr->get_r_ss();
s16 phi = work->mpEmtr->get_r_ss();
@@ -145,7 +131,6 @@ static void JPAVolumeTorus(JPAEmitterWorkData* work) {
);
}
/* 8027BB18-8027BB4C 276458 0034+00 0/0 1/1 0/0 .text __ct__16JPADynamicsBlockFPCUc */
JPADynamicsBlock::JPADynamicsBlock(u8 const* data) {
mpData = (const JPADynamicsBlockData*)data;
init();
@@ -161,7 +146,6 @@ enum {
VOL_Line = 0x06,
};
/* 8027BB4C-8027BBE8 27648C 009C+00 2/1 0/0 0/0 .text init__16JPADynamicsBlockFv */
void JPADynamicsBlock::init() {
switch (getVolumeType()) {
case VOL_Cube:
@@ -188,30 +172,18 @@ void JPADynamicsBlock::init() {
}
}
/* 8027BBE8-8027BDEC 276528 0204+00 0/0 1/1 0/0 .text
* create__16JPADynamicsBlockFP18JPAEmitterWorkData */
void JPADynamicsBlock::create(JPAEmitterWorkData* work) {
if (work->mpEmtr->checkStatus(JPAEmtrStts_RateStepEmit)) {
s32 emitCount;
s32 createCount;
s32 emitCount = 0;
// Probably an inlined function.
if (work->mpEmtr->checkFlag(JPADynFlag_FixedInterval)) {
s32 count;
if (getVolumeType() == VOL_Sphere) {
count = 4 * getDivNumber() * getDivNumber() + 2;
} else {
count = getDivNumber();
}
emitCount = count;
emitCount = getVolumeType() == VOL_Sphere ? 4 * getDivNumber() * getDivNumber() + 2 : getDivNumber();
work->mVolumeEmitIdx = 0;
} else {
f32 newPtclCount =
work->mpEmtr->mRate * (getRateRndm() * work->mpEmtr->get_r_zp() + 1.0f);
f32 newEmitCount = work->mpEmtr->mEmitCount + newPtclCount;
work->mpEmtr->mEmitCount = newEmitCount;
emitCount = (s32)newEmitCount;
emitCount = work->mpEmtr->mEmitCount += newPtclCount;
work->mpEmtr->mEmitCount -= emitCount;
if (work->mpEmtr->checkStatus(JPAEmtrStts_FirstEmit) && 0.0f < newPtclCount &&
@@ -224,10 +196,10 @@ void JPADynamicsBlock::create(JPAEmitterWorkData* work) {
emitCount = 0;
}
// Probably an inlined function.
createCount = emitCount;
JPABaseParticle* ptcl = NULL;
s32 createCount = emitCount;
while (createCount > 0) {
JPABaseParticle* ptcl = work->mpEmtr->createParticle();
ptcl = work->mpEmtr->createParticle();
if (ptcl == NULL)
break;
createCount--;
@@ -235,7 +207,7 @@ void JPADynamicsBlock::create(JPAEmitterWorkData* work) {
}
if (++work->mpEmtr->mRateStepTimer >= (work->mpEmtr->mRateStep + 1)) {
work->mpEmtr->mRateStepTimer -= (work->mpEmtr->mRateStep + 1);
work->mpEmtr->mRateStepTimer -= work->mpEmtr->mRateStep + 1;
work->mpEmtr->setStatus(JPAEmtrStts_RateStepEmit);
} else {
work->mpEmtr->clearStatus(JPAEmtrStts_RateStepEmit);
+37 -80
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JPAEmitter
//
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAEmitterManager.h"
#include "JSystem/JParticle/JPAParticle.h"
@@ -10,65 +5,39 @@
#include "JSystem/JParticle/JPABaseShape.h"
#include "egg/math/eggVector.h"
//
// Types:
//
//
// Forward References:
//
//
// External References:
//
//
// Declarations:
//
/* 8027E6A4-8027E6EC 278FE4 0048+00 0/0 14/14 16/16 .text __dt__18JPAEmitterCallBackFv */
JPAEmitterCallBack::~JPAEmitterCallBack() {
}
/* 8027E6EC-8027EA40 27902C 0354+00 0/0 1/1 0/0 .text
* init__14JPABaseEmitterFP17JPAEmitterManagerP11JPAResource */
void JPABaseEmitter::init(JPAEmitterManager* param_0, JPAResource* param_1) {
mpEmtrMgr = param_0;
mpRes = param_1;
mpRes->getDyn()->getEmitterScl(&mLocalScl);
mpRes->getDyn()->getEmitterTrs(&mLocalTrs);
mpRes->getDyn()->getEmitterDir(&mLocalDir);
pRes = param_1;
pRes->getDyn()->getEmitterScl(&mLocalScl);
pRes->getDyn()->getEmitterTrs(&mLocalTrs);
pRes->getDyn()->getEmitterDir(&mLocalDir);
mLocalDir.normalise();
mpRes->getDyn()->getEmitterRot(&mLocalRot);
mMaxFrame = mpRes->getDyn()->getMaxFrame();
mLifeTime = mpRes->getDyn()->getLifetime();
mVolumeSize = mpRes->getDyn()->getVolumeSize();
mRate = mpRes->getDyn()->getRate();
mRateStep = mpRes->getDyn()->getRateStep();
mVolumeSweep = mpRes->getDyn()->getVolumeSweep();
mVolumeMinRad = mpRes->getDyn()->getVolumeMinRad();
mAwayFromCenterSpeed = mpRes->getDyn()->getInitVelOmni();
mAwayFromAxisSpeed = mpRes->getDyn()->getInitVelAxis();
mDirSpeed = mpRes->getDyn()->getInitVelDir();
mSpread = mpRes->getDyn()->getInitVelDirSp();
mRndmDirSpeed = mpRes->getDyn()->getInitVelRndm();
mAirResist = mpRes->getDyn()->getAirRes();
pRes->getDyn()->getEmitterRot(&mLocalRot);
mMaxFrame = pRes->getDyn()->getMaxFrame();
mLifeTime = pRes->getDyn()->getLifetime();
mVolumeSize = pRes->getDyn()->getVolumeSize();
mRate = pRes->getDyn()->getRate();
mRateStep = pRes->getDyn()->getRateStep();
mVolumeSweep = pRes->getDyn()->getVolumeSweep();
mVolumeMinRad = pRes->getDyn()->getVolumeMinRad();
mAwayFromCenterSpeed = pRes->getDyn()->getInitVelOmni();
mAwayFromAxisSpeed = pRes->getDyn()->getInitVelAxis();
mDirSpeed = pRes->getDyn()->getInitVelDir();
mSpread = pRes->getDyn()->getInitVelDirSp();
mRndmDirSpeed = pRes->getDyn()->getInitVelRndm();
mAirResist = pRes->getDyn()->getAirRes();
mRndm.set_seed(mpEmtrMgr->pWd->mRndm.get_rndm_u());
MTXIdentity(mGlobalRot);
mGlobalScl.set(1.0f, 1.0f, 1.0f);
mGlobalTrs.setZero();
mGlobalPScl.set(1.0f, 1.0f);
mGlobalEnvClr.a = 0xff;
mGlobalEnvClr.b = 0xff;
mGlobalEnvClr.g = 0xff;
mGlobalEnvClr.r = 0xff;
mGlobalPrmClr.a = 0xff;
mGlobalPrmClr.b = 0xff;
mGlobalPrmClr.g = 0xff;
mGlobalPrmClr.r = 0xff;
mGlobalPrmClr.r = mGlobalPrmClr.g = mGlobalPrmClr.b = mGlobalPrmClr.a = mGlobalEnvClr.r = mGlobalEnvClr.g = mGlobalEnvClr.b = mGlobalEnvClr.a = 0xff;
param_1->getBsp()->getPrmClr(&mPrmClr);
param_1->getBsp()->getEnvClr(&mEnvClr);
mpUserWork = NULL;
mpUserWork = 0;
mScaleOut = 1.0f;
mEmitCount = 0.0f;
initStatus(0x30);
@@ -79,34 +48,33 @@ void JPABaseEmitter::init(JPAEmitterManager* param_0, JPAResource* param_1) {
mTexAnmIdx = 0;
}
/* 8027EA40-8027EB60 279380 0120+00 0/0 3/3 0/0 .text createParticle__14JPABaseEmitterFv
*/
JPABaseParticle* JPABaseEmitter::createParticle() {
if (mpPtclPool->getNum() != 0) {
JPANode<JPABaseParticle>* node = mpPtclPool->pop_front();
mAlivePtclBase.push_front(node);
mpRes->getDyn()->calc(mpEmtrMgr->pWd);
node->mData.init_p(mpEmtrMgr->pWd);
return &node->mData;
pRes->getDyn()->calc(mpEmtrMgr->pWd);
node->getObject()->init_p(mpEmtrMgr->pWd);
return node->getObject();
} else {
JUT_WARN(128, "%s", "JPA : Can NOT create particle more\n");
}
return NULL;
}
/* 8027EB60-8027EC60 2794A0 0100+00 0/0 1/1 0/0 .text
* createChild__14JPABaseEmitterFP15JPABaseParticle */
JPABaseParticle* JPABaseEmitter::createChild(JPABaseParticle* parent) {
if (mpPtclPool->getNum() != 0) {
JPANode<JPABaseParticle>* node = mpPtclPool->pop_front();
mAlivePtclChld.push_front(node);
node->mData.init_c(mpEmtrMgr->pWd, parent);
return &node->mData;
node->getObject()->init_c(mpEmtrMgr->pWd, parent);
return node->getObject();
} else {
JUT_WARN(151, "%s", "JPA : Can NOT create child particle more\n")
}
return NULL;
}
/* 8027EC60-8027EDD4 2795A0 0174+00 0/0 2/2 21/21 .text deleteAllParticle__14JPABaseEmitterFv */
void JPABaseEmitter::deleteAllParticle() {
while (mAlivePtclBase.getNum())
mpPtclPool->push_front(mAlivePtclBase.pop_back());
@@ -114,21 +82,17 @@ void JPABaseEmitter::deleteAllParticle() {
mpPtclPool->push_front(mAlivePtclChld.pop_back());
}
/* 8027EDD4-8027EE14 279714 0040+00 0/0 1/1 0/0 .text processTillStartFrame__14JPABaseEmitterFv */
bool JPABaseEmitter::processTillStartFrame() {
JPADynamicsBlock* dyn = mpRes->getDyn();
s16 startFrame = dyn->getStartFrame();
if (mWaitTime >= startFrame)
if (mWaitTime >= pRes->getDyn()->getStartFrame())
return true;
if (!(mStatus & 2))
if (!checkStatus(2)) {
mWaitTime++;
}
return false;
}
/* 8027EE14-8027EEB0 279754 009C+00 0/0 1/1 0/0 .text processTermination__14JPABaseEmitterFv */
bool JPABaseEmitter::processTermination() {
if (checkStatus(0x100)) {
return true;
@@ -140,19 +104,17 @@ bool JPABaseEmitter::processTermination() {
if (mMaxFrame < 0) {
setStatus(8);
return getParticleNumber() == 0;
}
}
if (mTick >= mMaxFrame) {
setStatus(8);
if (checkStatus(0x40)) {
return false;
return 0;
}
return getParticleNumber() == 0;
}
return false;
}
/* 8027EEB0-8027EF30 2797F0 0080+00 0/0 1/1 0/0 .text
* calcEmitterGlobalPosition__14JPABaseEmitterCFPQ29JGeometry8TVec3<f> */
void JPABaseEmitter::calcEmitterGlobalPosition(EGG::Vector3f* dst) const {
Mtx mtx;
MTXScale(mtx, mGlobalScl.x, mGlobalScl.y, mGlobalScl.z);
@@ -163,21 +125,16 @@ void JPABaseEmitter::calcEmitterGlobalPosition(EGG::Vector3f* dst) const {
MTXMultVec(mtx, mLocalTrs, *dst);
}
/* 8027EF30-8027EF40 279870 0010+00 0/0 1/1 0/0 .text getCurrentCreateNumber__14JPABaseEmitterCFv
*/
u32 JPABaseEmitter::getCurrentCreateNumber() const {
return mpEmtrMgr->pWd->mEmitCount;
}
/* 8027EF40-8027EF50 279880 0010+00 0/0 3/3 0/0 .text getDrawCount__14JPABaseEmitterCFv
*/
u8 JPABaseEmitter::getDrawCount() const {
return mpEmtrMgr->pWd->mDrawCount;
}
/* 8027EF50-8027EFA4 279890 0054+00 0/0 1/1 0/0 .text
* loadTexture__14JPABaseEmitterFUc11_GXTexMapID */
bool JPABaseEmitter::loadTexture(u8 idx, GXTexMapID texMapID) {
mpEmtrMgr->pWd->mpResMgr->load(mpRes->getTexIdx(idx), texMapID);
bool JPABaseEmitter::loadTexture(u8 no, GXTexMapID texMapID) {
JUT_ASSERT(286, pRes->texNum > no);
mpEmtrMgr->pWd->mpResMgr->load(pRes->getTexIdx(no), texMapID);
return true;
}
+4 -29
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JPAEmitterManager
//
#include "JSystem/JParticle/JPAList.h"
#include "JSystem/JSupport/JSUList.h"
#include "egg/core/eggHeap.h"
@@ -16,8 +11,6 @@
#include "rvl/GX/GXTypes.h"
#include "rvl/GX.h"
/* 8027DCA0-8027DEBC 2785E0 021C+00 0/0 1/1 0/0 .text __ct__17JPAEmitterManagerFUlUlP7EGG::HeapUcUc
*/
JPAEmitterManager::JPAEmitterManager(u32 i_ptclNum, u32 i_emtrNum, EGG::Heap* pHeap, u8 i_gidMax,
u8 i_ridMax) {
emtrNum = i_emtrNum;
@@ -49,16 +42,13 @@ JPAEmitterManager::JPAEmitterManager(u32 i_ptclNum, u32 i_emtrNum, EGG::Heap* pH
JUT_ASSERT(67, pWd);
}
/* 8027DEBC-8027DFA0 2787FC 00E4+00 0/0 3/3 0/0 .text
* createSimpleEmitterID__17JPAEmitterManagerFRCQ29JGeometry8TVec3<f>UsUcUcP18JPAEmitterCallBackP19JPAParticleCallBack
*/
JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(EGG::Vector3f const& pos,
u16 resID, u8 group_id, u8 res_mgr_id,
JPAEmitterCallBack* emtrCB,
JPAParticleCallBack* ptclCB) {
JUT_ASSERT(88, group_id < gidMax);
JUT_ASSERT(89, res_mgr_id < ridMax);
JUT_ASSERT(90, pResMgrAry[res_mgr_id] != 0);
JUT_ASSERT(90, pResMgrAry[res_mgr_id] != NULL);
JPAResource* pRes = pResMgrAry[res_mgr_id]->getResource(resID);
if (pRes == NULL) {
@@ -118,7 +108,6 @@ void JPAEmitterManager::fn_80320E20(u8 group_id, f32 of_x, f32 of_z) {
}
}
/* 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);
JSULink<JPABaseEmitter>* pNext = NULL;
@@ -128,13 +117,11 @@ void JPAEmitterManager::calc(u8 group_id) {
JPABaseEmitter* emtr = pLink->getObject();
if (emtr->mpRes->calc(pWd, emtr) && !emtr->checkStatus(0x200))
if (emtr->pRes->calc(pWd, emtr) && !emtr->checkStatus(0x200))
forceDeleteEmitter(emtr);
}
}
/* 8027E028-8027E220 278968 01F8+00 0/0 1/1 0/0 .text draw__17JPAEmitterManagerFPC11JPADrawInfoUc
*/
void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 group_id) {
JUT_ASSERT(192, group_id < gidMax);
drawInfo->getCamMtx(pWd->mPosCamMtx);
@@ -166,30 +153,24 @@ void JPAEmitterManager::draw(JPADrawInfo const* drawInfo, u8 group_id) {
JPABaseEmitter* emtr = pLink->getObject();
if (!emtr->checkStatus(0x04)) {
pWd->mpResMgr = pResMgrAry[emtr->mResMgrID];
emtr->mpRes->draw(pWd, emtr);
emtr->pRes->draw(pWd, emtr);
}
}
GXSetClipMode(GX_CLIP_ENABLE);
}
/* 8027E220-8027E278 278B60 0058+00 0/0 1/1 0/0 .text forceDeleteAllEmitter__17JPAEmitterManagerFv
*/
void JPAEmitterManager::forceDeleteAllEmitter() {
for (u8 i = 0; i < gidMax; i++)
forceDeleteGroupEmitter(i);
}
/* 8027E278-8027E2D8 278BB8 0060+00 1/1 0/0 0/0 .text
* forceDeleteGroupEmitter__17JPAEmitterManagerFUc */
void JPAEmitterManager::forceDeleteGroupEmitter(u8 group_id) {
JUT_ASSERT(288, group_id < gidMax);
while (pEmtrUseList[group_id].getNumLinks())
forceDeleteEmitter(pEmtrUseList[group_id].getLast()->getObject());
}
/* 8027E2D8-8027E344 278C18 006C+00 3/3 1/1 0/0 .text
* forceDeleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter */
void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) {
emtr->deleteAllParticle();
emtr->setStatus(0x300);
@@ -197,17 +178,13 @@ void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) {
mFreeEmtrList.prepend(&emtr->mLink);
}
/* 8027E344-8027E354 278C84 0010+00 0/0 2/2 0/0 .text
* entryResourceManager__17JPAEmitterManagerFP18JPAResourceManagerUc */
void JPAEmitterManager::entryResourceManager(JPAResourceManager* resMgr, u8 resMgrID) {
JUT_ASSERT_MSG_F(325, resMgrID < ridMax && (pResMgrAry[resMgrID]) == 0,
JUT_ASSERT_MSG_F(325, resMgrID < ridMax && (pResMgrAry[resMgrID]) == NULL,
"res_id %d res_id_max %d array[%d] = %x", resMgrID, ridMax, resMgrID,
pResMgrAry[resMgrID]);
pResMgrAry[resMgrID] = resMgr;
}
/* 8027E354-8027E3F4 278C94 00A0+00 0/0 1/1 0/0 .text clearResourceManager__17JPAEmitterManagerFUc
*/
void JPAEmitterManager::clearResourceManager(u8 res_mgr_id) {
JUT_ASSERT(339, res_mgr_id < ridMax);
for (u8 i = 0; i < gidMax; i++) {
@@ -224,8 +201,6 @@ void JPAEmitterManager::clearResourceManager(u8 res_mgr_id) {
pResMgrAry[res_mgr_id] = NULL;
}
/* 8027E3F4-8027E51C 278D34 0128+00 1/1 0/0 0/0 .text calcYBBCam__17JPAEmitterManagerFv
*/
void JPAEmitterManager::calcYBBCam() {
EGG::Vector3f v(0.0f, pWd->mPosCamMtx[1][1], pWd->mPosCamMtx[2][1]);
JUT_ASSERT(367, !v.isZero());
+4 -13
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JPAExTexShape
//
#include "JSystem/JParticle/JPAExTexShape.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JParticle/JPAEmitter.h"
@@ -10,31 +5,27 @@
#include "rvl/MTX.h"
#include "rvl/GX.h"
/* 8027B040-8027B13C 275980 00FC+00 0/0 1/1 0/0 .text JPALoadExTex__FP18JPAEmitterWorkData */
void JPALoadExTex(JPAEmitterWorkData* work) {
Mtx m;
JPAExTexShape* ets = work->mpRes->getEts();
GXTexCoordID secTexCoordID = GX_TEXCOORD1;
if (ets->isUseIndirect()) {
Mtx m;
MTXIdentity(m);
GXLoadTexMtxImm(m, GX_TEXMTX2, GX_MTX2x4);
GXSetTexCoordGen2(GX_TEXCOORD1, GX_TG_MTX2x4, GX_TG_TEX0, GX_TEXMTX2, GX_FALSE,
GX_PTIDENTITY);
u8 texIdx = ets->getIndTexIdx();
work->mpResMgr->load(work->mpRes->getTexIdx(texIdx), GX_TEXMAP2);
work->mpResMgr->load(work->mpRes->getTexIdx(ets->getIndTexIdx()), GX_TEXMAP2);
secTexCoordID = GX_TEXCOORD2;
}
if (ets->isUseSecTex()) {
GXSetTexCoordGen2(secTexCoordID, GX_TG_MTX2x4, GX_TG_TEX0, GX_IDENTITY, GX_FALSE,
GX_PTIDENTITY);
u8 texIdx = ets->getSecTexIdx();
work->mpResMgr->load(work->mpRes->getTexIdx(texIdx), GX_TEXMAP3);
work->mpResMgr->load(work->mpRes->getTexIdx(ets->getSecTexIdx()), GX_TEXMAP3);
}
}
/* 8027B13C-8027B144 -00001 0008+00 0/0 0/0 0/0 .text __ct__13JPAExTexShapeFPCUc */
JPAExTexShape::JPAExTexShape(u8 const* data) {
mpData = (const JPAExTexShapeData*)data;
}
+5 -35
View File
@@ -1,15 +1,8 @@
//
// Generated By: dol2asm
// Translation Unit: JPAExtraShape
//
#include "JSystem/JParticle/JPAExtraShape.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "nw4r/math/math_triangular.h"
/* 8027A918-8027A990 275258 0078+00 0/0 1/1 0/0 .text
* JPACalcScaleX__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
if (work->mScaleAnm < esp->getScaleInTiming()) {
@@ -24,8 +17,6 @@ void JPACalcScaleX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
}
}
/* 8027A990-8027AA08 2752D0 0078+00 0/0 1/1 0/0 .text
* JPACalcScaleY__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
if (work->mScaleAnm < esp->getScaleInTiming()) {
@@ -40,57 +31,41 @@ void JPACalcScaleY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
}
}
/* 8027AA08-8027AA14 275348 000C+00 0/0 1/1 0/0 .text
* JPACalcScaleCopy__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleCopy(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
ptcl->mParticleScaleY = ptcl->mParticleScaleX;
}
/* 8027AA14-8027AA20 275354 000C+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmNormal__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmNormal(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
work->mScaleAnm = ptcl->mTime;
}
/* 8027AA20-8027AA84 275360 0064+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmRepeatX__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmRepeatX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
work->mScaleAnm = (ptcl->mAge % esp->getScaleAnmCycleX()) / (f32)esp->getScaleAnmCycleX();
}
/* 8027AA84-8027AAE8 2753C4 0064+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmRepeatY__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmRepeatY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
work->mScaleAnm = (ptcl->mAge % esp->getScaleAnmCycleY()) / (f32)esp->getScaleAnmCycleY();
}
/* 8027AAE8-8027AB7C 275428 0094+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmReverseX__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmReverseX(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
f32 cycle = ptcl->mAge / esp->getScaleAnmCycleX() & 1;
f32 base = (ptcl->mAge % esp->getScaleAnmCycleX()) / (f32)esp->getScaleAnmCycleX();
work->mScaleAnm = base + (cycle * (1.0f - base * 2.0f));
work->mScaleAnm = base + cycle * (1.0f - base * 2.0f);
}
/* 8027AB7C-8027AC10 2754BC 0094+00 0/0 1/1 0/0 .text
* JPACalcScaleAnmReverseY__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcScaleAnmReverseY(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
f32 cycle = ptcl->mAge / esp->getScaleAnmCycleY() & 1;
f32 base = (ptcl->mAge % esp->getScaleAnmCycleY()) / (f32)esp->getScaleAnmCycleY();
work->mScaleAnm = base + (cycle * (1.0f - base * 2.0f));
work->mScaleAnm = base + cycle * (1.0f - base * 2.0f);
}
/* 8027AC10-8027AC98 275550 0088+00 0/0 1/1 0/0 .text
* JPACalcAlphaAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcAlphaAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
0.0f; // float order
JPAExtraShape* esp = work->mpRes->getEsp();
f32 alpha;
f32 alpha = 0.0f;
if (ptcl->mTime < esp->getAlphaInTiming()) {
alpha = 255.0f * (esp->getAlphaInValue() + esp->getAlphaIncRate() * ptcl->mTime);
} else if (ptcl->mTime > esp->getAlphaOutTiming()) {
@@ -102,11 +77,9 @@ void JPACalcAlphaAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
OSf32tou8(&alpha, &ptcl->mPrmColorAlphaAnm);
}
/* 8027AC98-8027AD88 2755D8 00F0+00 0/0 1/1 0/0 .text
* JPACalcAlphaFlickAnm__FP18JPAEmitterWorkDataP15JPABaseParticle */
void JPACalcAlphaFlickAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
JPAExtraShape* esp = work->mpRes->getEsp();
f32 alpha;
f32 alpha = 0.0f;
if (ptcl->mTime < esp->getAlphaInTiming()) {
alpha = (esp->getAlphaInValue() + esp->getAlphaIncRate() * ptcl->mTime);
} else if (ptcl->mTime > esp->getAlphaOutTiming()) {
@@ -115,19 +88,16 @@ void JPACalcAlphaFlickAnm(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
} else {
alpha = esp->getAlphaBaseValue();
}
s32 theta = ptcl->mAlphaWaveRandom * ptcl->mAge * 16384.0f * (1.0f - esp->getAlphaFreq());
f32 wave = nw4r::math::SinIdx(theta);
f32 wave = nw4r::math::SinIdx(ptcl->mAlphaWaveRandom * ptcl->mAge * 16384.0f * (1.0f - esp->getAlphaFreq()));
alpha *= (1.0f + esp->getAlphaAmp() * (wave - 1.0f) * 0.5f) * 255.0f;
OSf32tou8(&alpha, &ptcl->mPrmColorAlphaAnm);
}
/* 8027AD88-8027ADBC 2756C8 0034+00 0/0 1/1 0/0 .text __ct__13JPAExtraShapeFPCUc */
JPAExtraShape::JPAExtraShape(u8 const* data) {
mpData = (const JPAExtraShapeData*)data;
init();
}
/* 8027ADBC-8027AEBC 2756FC 0100+00 1/1 0/0 0/0 .text init__13JPAExtraShapeFv */
void JPAExtraShape::init() {
mAlphaIncRate = (getAlphaInTiming() != 0.0f) ?
(getAlphaBaseValue() - getAlphaInValue()) / getAlphaInTiming() :
+13 -54
View File
@@ -1,16 +1,10 @@
//
// Generated By: dol2asm
// Translation Unit: JPAFieldBlock
//
#include "egg/core/eggHeap.h"
#include "JSystem/JParticle/JPAFieldBlock.h"
#include "JSystem/JParticle/JPAEmitter.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "egg/math/eggVector.h"
/* 8027BDEC-8027BF18 27672C 012C+00 8/8 0/0 0/0 .text
* calcAffect__12JPAFieldBaseFP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldBase::calcAffect(JPAFieldBlock* block, JPABaseParticle* ptcl) {
EGG::Vector3f vec = mAccel;
if (!ptcl->checkStatus(4) && block->checkStatus(0x78)) {
@@ -30,8 +24,6 @@ void JPAFieldBase::calcAffect(JPAFieldBlock* block, JPABaseParticle* ptcl) {
}
}
/* 8027BF18-8027BFB4 276858 009C+00 2/2 0/0 0/0 .text
* calcFadeAffect__12JPAFieldBaseCFP13JPAFieldBlockf */
f32 JPAFieldBase::calcFadeAffect(JPAFieldBlock* block, f32 time) const {
f32 fade = 1.0f;
if ((block->checkStatus(8) && time < block->getEnTime())
@@ -46,8 +38,6 @@ f32 JPAFieldBase::calcFadeAffect(JPAFieldBlock* block, f32 time) const {
return fade;
}
/* 8027BFB4-8027C054 2768F4 00A0+00 1/0 0/0 0/0 .text
* prepare__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldGravity::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
if (block->checkStatus(2)) {
mAccel = block->getMag() * block->getDir();
@@ -57,14 +47,10 @@ void JPAFieldGravity::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
}
}
/* 8027C054-8027C07C 276994 0028+00 1/0 0/0 0/0 .text
* calc__15JPAFieldGravityFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldGravity::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
calcAffect(block, ptcl);
}
/* 8027C07C-8027C1B8 2769BC 013C+00 1/0 0/0 0/0 .text
* prepare__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldAir::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
EGG::Vector3f vec = block->getDir();
vec.normalise();
@@ -76,8 +62,6 @@ void JPAFieldAir::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
}
}
/* 8027C1B8-8027C24C 276AF8 0094+00 1/0 0/0 0/0 .text
* calc__11JPAFieldAirFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldAir::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
calcAffect(block, ptcl);
if (block->checkStatus(4)) {
@@ -88,31 +72,23 @@ void JPAFieldAir::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABasePa
}
}
/* 8027C24C-8027C29C 276B8C 0050+00 1/0 0/0 0/0 .text
* prepare__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldMagnet::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
mDir = block->getPos() - work->mEmitterPos;
MTXMultVecSR(work->mRotationMtx, mDir, mDir);
}
/* 8027C29C-8027C36C 276BDC 00D0+00 1/0 0/0 0/0 .text
* calc__14JPAFieldMagnetFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldMagnet::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
mAccel = mDir - ptcl->mLocalPosition;
mAccel.setLength(block->getMag());
calcAffect(block, ptcl);
}
/* 8027C36C-8027C3E0 276CAC 0074+00 1/0 0/0 0/0 .text
* prepare__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldNewton::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
mDir = block->getPos() - work->mEmitterPos;
MTXMultVecSR(work->mRotationMtx, mDir, mDir);
mCutoff = block->getVal1() * block->getVal1();
}
/* 8027C3E0-8027C56C 276D20 018C+00 1/0 0/0 0/0 .text
* calc__14JPAFieldNewtonFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldNewton::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
mAccel = mDir - ptcl->mLocalPosition;
f32 len_sq = mAccel.squaredLength();
@@ -124,8 +100,6 @@ void JPAFieldNewton::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABas
calcAffect(block, ptcl);
}
/* 8027C56C-8027C674 276EAC 0108+00 1/0 0/0 0/0 .text
* prepare__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldVortex::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
MTXMultVecSR(work->mGlobalRot, block->getDir(), field_0x10);
field_0x10.normalise();
@@ -133,8 +107,6 @@ void JPAFieldVortex::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
field_0x20 = 1.0f / field_0x1c;
}
/* 8027C674-8027C814 276FB4 01A0+00 1/0 0/0 0/0 .text
* calc__14JPAFieldVortexFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldVortex::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
EGG::Vector3f vec;
vec = field_0x10.dot(ptcl->mLocalPosition) * field_0x10;
@@ -152,8 +124,6 @@ void JPAFieldVortex::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABas
calcAffect(block, ptcl);
}
/* 8027C814-8027CA94 277154 0280+00 1/0 0/0 0/0 .text
* prepare__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldConvection::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
EGG::Vector3f vec1, vec2;
vec2 = block->getPos().cross(block->getDir());
@@ -166,8 +136,6 @@ void JPAFieldConvection::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block)
field_0x28.normalise();
}
/* 8027CA94-8027CCCC 2773D4 0238+00 1/0 0/0 0/0 .text
* calc__18JPAFieldConvectionFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldConvection::calc(JPAEmitterWorkData* work, JPAFieldBlock* block,
JPABaseParticle* ptcl) {
EGG::Vector3f vec1, vec2, vec3;
@@ -182,8 +150,6 @@ void JPAFieldConvection::calc(JPAEmitterWorkData* work, JPAFieldBlock* block,
calcAffect(block, ptcl);
}
/* 8027CCCC-8027CDE4 27760C 0118+00 1/0 0/0 0/0 .text
* calc__14JPAFieldRandomFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldRandom::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
if (ptcl->mAge == 0 || (block->getCycle() != 0 && ptcl->mAge % block->getCycle() == 0)) {
JPABaseEmitter* emtr = work->mpEmtr;
@@ -193,8 +159,6 @@ void JPAFieldRandom::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABas
}
}
/* 8027CDE4-8027CE64 277724 0080+00 1/0 0/0 0/0 .text
* calc__12JPAFieldDragFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldDrag::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
if (!ptcl->checkStatus(4)) {
f32 fade = calcFadeAffect(block, ptcl->mTime);
@@ -204,8 +168,6 @@ void JPAFieldDrag::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseP
}
}
/* 8027CE64-8027CFA8 2777A4 0144+00 1/0 0/0 0/0 .text
* prepare__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlock */
void JPAFieldSpin::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
EGG::Vector3f axis;
MTXMultVecSR(work->mGlobalRot, block->getDir(), axis);
@@ -217,8 +179,6 @@ void JPAFieldSpin::prepare(JPAEmitterWorkData* work, JPAFieldBlock* block) {
field_0x28.set(mtx[0][2], mtx[1][2], mtx[2][2]);
}
/* 8027CFA8-8027D088 2778E8 00E0+00 1/0 0/0 0/0 .text
* calc__12JPAFieldSpinFP18JPAEmitterWorkDataP13JPAFieldBlockP15JPABaseParticle */
void JPAFieldSpin::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseParticle* ptcl) {
Mtx mtx;
mtx[0][0] = field_0x10.x;
@@ -238,14 +198,11 @@ void JPAFieldSpin::calc(JPAEmitterWorkData* work, JPAFieldBlock* block, JPABaseP
calcAffect(block, ptcl);
}
/* 8027D088-8027D0C0 2779C8 0038+00 0/0 1/1 0/0 .text __ct__13JPAFieldBlockFPCUcP7JKRHeap
*/
JPAFieldBlock::JPAFieldBlock(u8 const* data, EGG::Heap* heap)
: mpData((const JPAFieldBlockData*)data) {
init(heap);
}
/* 8027D0C0-8027D3AC 277A00 02EC+00 2/1 0/0 0/0 .text init__13JPAFieldBlockFP7JKRHeap */
void JPAFieldBlock::init(EGG::Heap* heap) {
mFadeInRate = getFadeInTime() - getEnTime();
if (mFadeInRate == 0.0f) {
@@ -267,34 +224,36 @@ void JPAFieldBlock::init(EGG::Heap* heap) {
switch (getType()) {
case FIELD_GRAVITY:
mpField = new (heap, 4) JPAFieldGravity();
pFld = new (heap) JPAFieldGravity();
break;
case FIELD_AIR:
mpField = new (heap, 4) JPAFieldAir();
pFld = new (heap) JPAFieldAir();
break;
case FIELD_MAGNET:
mpField = new (heap, 4) JPAFieldMagnet();
pFld = new (heap) JPAFieldMagnet();
break;
case FIELD_NEWTON:
mpField = new (heap, 4) JPAFieldNewton();
pFld = new (heap) JPAFieldNewton();
break;
case FIELD_VORTEX:
mpField = new (heap, 4) JPAFieldVortex();
pFld = new (heap) JPAFieldVortex();
break;
case FIELD_RANDOM:
mpField = new (heap, 4) JPAFieldRandom();
pFld = new (heap) JPAFieldRandom();
break;
case FIELD_DRAG:
mpField = new (heap, 4) JPAFieldDrag();
pFld = new (heap) JPAFieldDrag();
break;
case FIELD_CONVECTION:
mpField = new (heap, 4) JPAFieldConvection();
pFld = new (heap) JPAFieldConvection();
break;
case FIELD_SPIN:
mpField = new (heap, 4) JPAFieldSpin();
pFld = new (heap) JPAFieldSpin();
break;
default:
mpField = NULL;
pFld = NULL;
JUT_WARN(483, "JPA : WRONG ID (%d) in field data\n", getType());
break;
}
JUT_ASSERT(485, pFld != 0);
}
+3 -10
View File
@@ -1,25 +1,18 @@
//
// Generated By: dol2asm
// Translation Unit: JPAKeyBlock
//
#include "JSystem/JParticle/JPAKeyBlock.h"
#include "JSystem/JParticle/JPAMath.h"
/* 8027D730-8027D740 278070 0010+00 0/0 1/1 0/0 .text __ct__11JPAKeyBlockFPCUc */
JPAKeyBlock::JPAKeyBlock(const u8* data)
: mDataStart(data)
, field_0x4(reinterpret_cast<const float*>(&data[0xC]))
{
}
/* 8027D740-8027D7D4 278080 0094+00 0/0 1/1 0/0 .text calc__11JPAKeyBlockFf */
f32 JPAKeyBlock::calc(float p1) {
if (mDataStart[0xB] != '\0') {
int v1 = (int)field_0x4[(mDataStart[9] - 1) * 4] + 1;
if (isLoop()) {
int v1 = (int)getKeyData()[(getKeyNum() - 1) * 4] + 1;
// p1 -= (v1 * ((int)p1 / v1));
int v2 = ((int)p1 / v1);
p1 = p1 - (v2 * v1);
}
return JPACalcKeyAnmValue(p1, mDataStart[9], field_0x4);
return JPACalcKeyAnmValue(p1, getKeyNum(), getKeyData());
}
+15 -39
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JPAMath
//
#include "JSystem/JParticle/JPAMath.h"
#include "JSystem/JMath/JMath.h"
@@ -10,8 +5,6 @@
#include "egg/math/eggVector.h"
#include "nw4r/math/math_triangular.h"
/* 80280588-802806C0 27AEC8 0138+00 0/0 1/1 0/0 .text JPAGetDirMtx__FRCQ29JGeometry8TVec3<f>PA4_f
*/
void JPAGetDirMtx(EGG::Vector3f const& param_0, f32 (*param_1)[4]) {
1.0f; // probably some dummy function
@@ -42,7 +35,6 @@ void JPAGetDirMtx(EGG::Vector3f const& param_0, f32 (*param_1)[4]) {
param_1[2][3] = 0.0f;
}
/* 802806C0-80280734 27B000 0074+00 0/0 1/1 0/0 .text JPAGetYZRotateMtx__FssPA4_f */
void JPAGetYZRotateMtx(s16 angleY, s16 angleZ, f32 (*param_2)[4]) {
f32 cosy = nw4r::math::CosIdx(angleY);
f32 cosz = nw4r::math::CosIdx(angleZ);
@@ -56,13 +48,9 @@ void JPAGetYZRotateMtx(s16 angleY, s16 angleZ, f32 (*param_2)[4]) {
param_2[1][2] = (siny * sinz);
param_2[2][0] = -siny;
param_2[2][2] = cosy;
param_2[2][3] = 0.0f;
param_2[2][1] = 0.0f;
param_2[1][3] = 0.0f;
param_2[0][3] = 0.0f;
param_2[0][3] = param_2[1][3] = param_2[2][1] = param_2[2][3] = 0.0f;
}
/* 80280734-802807E0 27B074 00AC+00 0/0 6/6 11/11 .text JPAGetXYZRotateMtx__FsssPA4_f */
void JPAGetXYZRotateMtx(s16 x, s16 y, s16 z, Mtx mtx) {
f32 cosx = nw4r::math::CosIdx(x);
f32 cosy = nw4r::math::CosIdx(y);
@@ -75,37 +63,26 @@ void JPAGetXYZRotateMtx(s16 x, s16 y, s16 z, Mtx mtx) {
mtx[2][0] = -siny;
mtx[2][1] = sinx * cosy;
mtx[2][2] = cosx * cosy;
f32 sinxsinz;
f32 cosxcosz;
f32 cosxsinz;
f32 sinxcosz;
cosxsinz = cosx * sinz;
sinxcosz = sinx * cosz;
mtx[0][1] = sinxcosz * siny - cosxsinz;
mtx[1][2] = cosxsinz * siny - sinxcosz;
sinxsinz = sinx * sinz;
cosxcosz = cosx * cosz;
mtx[0][2] = sinxsinz + cosxcosz * siny;
mtx[1][1] = cosxcosz + sinxsinz * siny;
mtx[2][3] = 0.0f;
mtx[1][3] = 0.0f;
mtx[0][3] = 0.0f;
f32 f30 = cosx * sinz;
f32 f29 = sinx * cosz;
mtx[0][1] = f29 * siny - f30;
mtx[1][2] = f30 * siny - f29;
f30 = sinx * sinz;
f29 = cosx * cosz;
mtx[0][2] = f30 + f29 * siny;
mtx[1][1] = f29 + f30 * siny;
mtx[0][3] = mtx[1][3] = mtx[2][3] = 0.0f;
}
/* 802807E0-80280808 27B120 0028+00 0/0 11/11 71/71 .text
* JPASetRMtxTVecfromMtx__FPA4_CfPA4_fPQ29JGeometry8TVec3<f> */
void JPASetRMtxTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4], EGG::Vector3f *param_2) {
void JPASetRMtxTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4],
EGG::Vector3f* param_2) {
EGG::Vector3f dummy;
JPASetRMtxSTVecfromMtx(param_0, param_1, &dummy, param_2);
}
/* 80280808-80280984 27B148 017C+00 1/1 1/1 53/53 .text
* JPASetRMtxSTVecfromMtx__FPA4_CfPA4_fPQ29JGeometry8TVec3<f>PQ29JGeometry8TVec3<f> */
void JPASetRMtxSTVecfromMtx(
f32 const (*param_0)[4], f32 (*param_1)[4], EGG::Vector3f *param_2, EGG::Vector3f *param_3
) {
EGG::Vector3f aTStack_54;
aTStack_54.set(param_0[0][0], param_0[1][0], param_0[2][0]);
void JPASetRMtxSTVecfromMtx(f32 const (*param_0)[4], f32 (*param_1)[4],
EGG::Vector3f* param_2, EGG::Vector3f* param_3) {
EGG::Vector3f aTStack_54(param_0[0][0], param_0[1][0], param_0[2][0]);
param_2->x = aTStack_54.length();
aTStack_54.set(param_0[0][1], param_0[1][1], param_0[2][1]);
param_2->y = aTStack_54.length();
@@ -133,7 +110,6 @@ void JPASetRMtxSTVecfromMtx(
param_3->set(param_0[0][3], param_0[1][3], param_0[2][3]);
}
/* 80280984-80280A48 27B2C4 00C4+00 0/0 2/1 0/0 .text JPACalcKeyAnmValue__FfUsPCf */
f32 JPACalcKeyAnmValue(f32 param_0, u16 param_1, f32 const* param_2) {
if (param_0 < param_2[0]) {
return param_2[1];
+2 -24
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JPAParticle
//
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPABaseShape.h"
#include "JSystem/JParticle/JPAChildShape.h"
@@ -11,13 +6,10 @@
#include "JSystem/JParticle/JPAExtraShape.h"
#include "egg/math/eggVector.h"
/* 8027EFA4-8027EFEC 2798E4 0048+00 0/0 11/11 1/1 .text __dt__19JPAParticleCallBackFv */
JPAParticleCallBack::~JPAParticleCallBack() {
/* empty function */
}
/* 8027EFEC-8027F8C8 27992C 08DC+00 0/0 1/1 0/0 .text
* init_p__15JPABaseParticleFP18JPAEmitterWorkData */
void JPABaseParticle::init_p(JPAEmitterWorkData* work) {
JPABaseEmitter* emtr = work->mpEmtr;
JPAExtraShape* esp = work->mpRes->getEsp();
@@ -128,8 +120,6 @@ void JPABaseParticle::init_p(JPAEmitterWorkData* work) {
}
}
/* 8027F8C8-8027FFD0 27A208 0708+00 0/0 1/1 0/0 .text
* init_c__15JPABaseParticleFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPABaseParticle::init_c(JPAEmitterWorkData* work, JPABaseParticle* parent) {
JPABaseEmitter* emtr = work->mpEmtr;
JPAChildShape* csp = work->mpRes->getCsp();
@@ -214,8 +204,6 @@ void JPABaseParticle::init_c(JPAEmitterWorkData* work, JPABaseParticle* parent)
mTexAnmIdx = 0;
}
/* 8027FFD0-80280260 27A910 0290+00 0/0 1/1 0/0 .text
* calc_p__15JPABaseParticleFP18JPAEmitterWorkData */
bool JPABaseParticle::calc_p(JPAEmitterWorkData* work) {
if (++mAge >= mLifeTime) {
return true;
@@ -262,8 +250,6 @@ bool JPABaseParticle::calc_p(JPAEmitterWorkData* work) {
return false;
}
/* 80280260-802804C8 27ABA0 0268+00 0/0 1/1 0/0 .text
* calc_c__15JPABaseParticleFP18JPAEmitterWorkData */
bool JPABaseParticle::calc_c(JPAEmitterWorkData* work) {
if (++mAge >= mLifeTime) {
return true;
@@ -306,8 +292,6 @@ bool JPABaseParticle::calc_c(JPAEmitterWorkData* work) {
return false;
}
/* 802804C8-80280548 27AE08 0080+00 1/1 0/0 0/0 .text
* canCreateChild__15JPABaseParticleFP18JPAEmitterWorkData */
bool JPABaseParticle::canCreateChild(JPAEmitterWorkData* work) {
JPAChildShape* csp = work->mpRes->getCsp();
bool ret = false;
@@ -318,16 +302,10 @@ bool JPABaseParticle::canCreateChild(JPAEmitterWorkData* work) {
return ret;
}
/* 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;
}
+152 -194
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JPAResource
//
#include "egg/core/eggHeap.h"
#include "JSystem/JParticle/JPAResource.h"
#include "JSystem/JParticle/JPABaseShape.h"
@@ -14,39 +9,23 @@
#include "JSystem/JParticle/JPAKeyBlock.h"
#include "JSystem/JParticle/JPAParticle.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "rvl/GX.h"
/* 80274010-80274080 26E950 0070+00 0/0 1/1 0/0 .text __ct__11JPAResourceFv */
JPAResource::JPAResource() {
mpDrawEmitterChildFuncList = NULL;
mpDrawEmitterFuncList = NULL;
mpCalcEmitterFuncList = NULL;
mpDrawParticleChildFuncList = NULL;
mpCalcParticleChildFuncList = NULL;
mpDrawParticleFuncList = NULL;
mpCalcParticleFuncList = NULL;
mpBaseShape = NULL;
mpExtraShape = NULL;
mpChildShape = NULL;
mpExTexShape = NULL;
mpDynamicsBlock = NULL;
mpFieldBlocks = NULL;
mpKeyBlocks = NULL;
mpCalcEmitterFuncList = mpDrawEmitterFuncList = mpDrawEmitterChildFuncList = NULL;
mpCalcParticleFuncList = mpDrawParticleFuncList = mpCalcParticleChildFuncList = mpDrawParticleChildFuncList = NULL;
pBsp = NULL;
pEsp = NULL;
pCsp = NULL;
pEts = NULL;
pDyn = NULL;
ppFld = NULL;
ppKey = NULL;
mpTDB1 = NULL;
mpDrawParticleChildFuncListNum = 0;
mpCalcParticleChildFuncListNum = 0;
mpDrawParticleFuncListNum = 0;
mpCalcParticleFuncListNum = 0;
mpDrawEmitterChildFuncListNum = 0;
mpDrawEmitterFuncListNum = 0;
mpCalcEmitterFuncListNum = 0;
mTDB1Num = 0;
mKeyBlockNum = 0;
mFieldBlockNum = 0;
mUsrIdx = 0;
mUsrIdx = fldNum = keyNum = texNum = mpCalcEmitterFuncListNum = mpDrawEmitterFuncListNum = mpDrawEmitterChildFuncListNum = mpCalcParticleFuncListNum = mpDrawParticleFuncListNum = mpCalcParticleChildFuncListNum = mpDrawParticleChildFuncListNum = 0;
}
/* 803C40C0-803C4220 0211E0 0144+1C 2/2 0/0 0/0 .data jpa_pos */
static u8 jpa_pos[324] ALIGN_DECL(32) = {
0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x32, 0xCE, 0x00, 0x00, 0xCE, 0x00, 0xE7, 0x00, 0x00, 0x19,
0x00, 0x00, 0x19, 0xCE, 0x00, 0xE7, 0xCE, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xCE,
@@ -71,39 +50,38 @@ static u8 jpa_pos[324] ALIGN_DECL(32) = {
0x00, 0x00, 0x00, 0xCE,
};
/* 803C4220-803C4240 021340 0020+00 2/2 0/0 0/0 .data jpa_crd */
static u8 jpa_crd[32] ALIGN_DECL(32) = {
0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x02, 0x01, 0x00, 0x01,
0x00, 0x00, 0x01, 0x00, 0x01, 0x02, 0x00, 0x02, 0x00, 0x00, 0x02, 0x00, 0x02, 0x02, 0x00, 0x02,
};
/* 80274080-802755E8 26E9C0 1568+00 2/0 1/1 0/0 .text init__11JPAResourceFP7JKRHeap */
void JPAResource::init(EGG::Heap* heap) {
// The s32s here are probably fake but fixes the regswaps
s32 is_glbl_clr_anm = mpBaseShape->isGlblClrAnm();
s32 is_glbl_tex_anm = mpBaseShape->isGlblTexAnm();
BOOL is_prm_anm = mpBaseShape->isPrmAnm();
BOOL is_env_anm = mpBaseShape->isEnvAnm();
BOOL is_tex_anm = mpBaseShape->isTexAnm();
BOOL is_tex_crd_anm = mpBaseShape->isTexCrdAnm();
BOOL is_prj_tex = mpBaseShape->isPrjTex();
BOOL is_enable_scale_anm = mpExtraShape != NULL && mpExtraShape->isEnableScaleAnm();
BOOL is_enable_alpha_anm = mpExtraShape != NULL && mpExtraShape->isEnableAlphaAnm();
BOOL is_enable_alpha_flick = mpExtraShape != NULL && mpExtraShape->isEnableAlphaAnm()
&& mpExtraShape->isEnableAlphaFlick();
BOOL is_enable_rotate_anm = mpExtraShape != NULL && mpExtraShape->isEnableRotateAnm();
// The s32s here are fake but fixes the regswaps
s32 is_glbl_clr_anm = pBsp->isGlblClrAnm();
s32 is_glbl_tex_anm = pBsp->isGlblTexAnm();
BOOL is_prm_anm = pBsp->isPrmAnm();
BOOL is_env_anm = pBsp->isEnvAnm();
BOOL is_tex_anm = pBsp->isTexAnm();
BOOL is_tex_crd_anm = pBsp->isTexCrdAnm();
BOOL is_prj_tex = pBsp->isPrjTex();
BOOL is_enable_scale_anm = pEsp != NULL && pEsp->isEnableScaleAnm();
BOOL is_enable_alpha_anm = pEsp != NULL && pEsp->isEnableAlphaAnm();
BOOL is_enable_alpha_flick = pEsp != NULL && pEsp->isEnableAlphaAnm()
&& pEsp->isEnableAlphaFlick();
BOOL is_enable_rotate_anm = pEsp != NULL && pEsp->isEnableRotateAnm();
BOOL is_rotate_on = is_enable_rotate_anm
|| (mpChildShape != NULL && mpChildShape->isRotateOn());
BOOL base_type_5_6 = mpBaseShape->getType() == 5 || mpBaseShape->getType() == 6;
BOOL base_type_0 = mpBaseShape->getType() == 0;
BOOL base_type_0_1 = mpBaseShape->getType() == 0 || mpBaseShape->getType() == 1;
BOOL child_type_5_6 = mpChildShape != NULL
&& (mpChildShape->getType() == 5 || mpChildShape->getType() == 6);
BOOL child_type_0 = mpChildShape != NULL && mpChildShape->getType() == 0;
BOOL child_type_0_1 = mpChildShape != NULL
&& (mpChildShape->getType() == 0 || mpChildShape->getType() == 1);
BOOL is_draw_parent = !mpBaseShape->isNoDrawParent();
BOOL is_draw_child = !mpBaseShape->isNoDrawChild();
|| (pCsp != NULL && pCsp->isRotateOn());
BOOL base_type_5_6 = pBsp->getType() == 5 || pBsp->getType() == 6;
BOOL base_type_0 = pBsp->getType() == 0;
BOOL base_type_0_1 = pBsp->getType() == 0 || pBsp->getType() == 1;
BOOL child_type_5_6 = pCsp != NULL
&& (pCsp->getType() == 5 || pCsp->getType() == 6);
BOOL child_type_0 = pCsp != NULL && pCsp->getType() == 0;
BOOL child_type_0_1 = pCsp != NULL
&& (pCsp->getType() == 0 || pCsp->getType() == 1);
BOOL is_draw_parent = !pBsp->isNoDrawParent();
BOOL is_draw_child = !pBsp->isNoDrawChild();
int func_no = 0;
if (is_glbl_tex_anm && is_tex_anm) {
mpCalcEmitterFuncListNum++;
@@ -126,10 +104,10 @@ void JPAResource::init(EGG::Heap* heap) {
(EmitterFunc*)heap->alloc(mpCalcEmitterFuncListNum * 4, 4);
}
int func_no = 0;
func_no = 0;
if (is_glbl_tex_anm && is_tex_anm) {
switch (mpBaseShape->getTexAnmType()) {
switch ((int)pBsp->getTexAnmType()) {
case 0:
mpCalcEmitterFuncList[func_no] = &JPACalcTexIdxNormal;
break;
@@ -159,7 +137,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
if (is_prm_anm || is_env_anm) {
switch (mpBaseShape->getClrAnmType()) {
switch ((int)pBsp->getClrAnmType()) {
case 0:
mpCalcEmitterFuncList[func_no] = &JPACalcClrIdxNormal;
break;
@@ -176,6 +154,7 @@ void JPAResource::init(EGG::Heap* heap) {
mpCalcEmitterFuncList[func_no] = &JPACalcClrIdxRandom;
break;
}
func_no++;
}
}
@@ -202,9 +181,9 @@ void JPAResource::init(EGG::Heap* heap) {
}
if (is_enable_scale_anm) {
if (mpBaseShape->getType() != 0) {
if (mpExtraShape->isScaleXYDiff()) {
if (mpExtraShape->getScaleAnmTypeX() == 0 && mpExtraShape->getScaleAnmTypeY() == 0) {
if (pBsp->getType() != 0) {
if (pEsp->isScaleXYDiff()) {
if (pEsp->getScaleAnmTypeX() == 0 && pEsp->getScaleAnmTypeY() == 0) {
mpCalcParticleFuncListNum++;
} else {
mpCalcParticleFuncListNum++;
@@ -226,7 +205,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (!is_glbl_tex_anm && is_tex_anm) {
switch (mpBaseShape->getTexAnmType()) {
switch ((int)pBsp->getTexAnmType()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcTexIdxNormal;
break;
@@ -266,7 +245,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
if (is_prm_anm || is_env_anm) {
switch (mpBaseShape->getClrAnmType()) {
switch ((int)pBsp->getClrAnmType()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcClrIdxNormal;
break;
@@ -291,12 +270,12 @@ void JPAResource::init(EGG::Heap* heap) {
}
if (is_enable_scale_anm) {
if (mpBaseShape->getType() != 0) {
if (mpExtraShape->isScaleXYDiff()) {
if (pBsp->getType() != 0) {
if (pEsp->isScaleXYDiff()) {
mpCalcParticleFuncList[func_no] = &JPACalcScaleY;
func_no++;
if (mpExtraShape->getScaleAnmTypeY() != 0 || mpExtraShape->getScaleAnmTypeX() != 0) {
switch (mpExtraShape->getScaleAnmTypeY()) {
if (pEsp->getScaleAnmTypeY() != 0 || pEsp->getScaleAnmTypeX() != 0) {
switch (pEsp->getScaleAnmTypeY()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcScaleAnmNormal;
break;
@@ -316,7 +295,7 @@ void JPAResource::init(EGG::Heap* heap) {
}
mpCalcParticleFuncList[func_no] = &JPACalcScaleX;
func_no++;
switch (mpExtraShape->getScaleAnmTypeX()) {
switch (pEsp->getScaleAnmTypeX()) {
case 0:
mpCalcParticleFuncList[func_no] = &JPACalcScaleAnmNormal;
break;
@@ -327,13 +306,14 @@ void JPAResource::init(EGG::Heap* heap) {
mpCalcParticleFuncList[func_no] = &JPACalcScaleAnmReverseX;
break;
}
func_no++;
}
if (mpChildShape != NULL && mpChildShape->isScaleOutOn()) {
if (pCsp != NULL && pCsp->isScaleOutOn()) {
mpCalcParticleChildFuncListNum++;
}
if (mpChildShape != NULL && mpChildShape->isAlphaOutOn()) {
if (pCsp != NULL && pCsp->isAlphaOutOn()) {
mpCalcParticleChildFuncListNum++;
}
@@ -344,25 +324,26 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (mpChildShape != NULL && mpChildShape->isScaleOutOn()) {
if (pCsp != NULL && pCsp->isScaleOutOn()) {
mpCalcParticleChildFuncList[func_no] = &JPACalcChildScaleOut;
func_no++;
}
if (mpChildShape != NULL && mpChildShape->isAlphaOutOn()) {
if (pCsp != NULL && pCsp->isAlphaOutOn()) {
mpCalcParticleChildFuncList[func_no] = &JPACalcChildAlphaOut;
func_no++;
}
if (is_draw_parent && base_type_5_6) {
mpDrawEmitterFuncListNum++;
if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawEmitterFuncListNum++;
}
}
mpDrawEmitterFuncListNum++;
if (mpExTexShape != NULL) {
if (pEts != NULL) {
mpDrawEmitterFuncListNum++;
}
@@ -392,14 +373,14 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (is_draw_parent && base_type_5_6) {
if (mpBaseShape->getType() == 5) {
if (pBsp->getType() == 5) {
mpDrawEmitterFuncList[func_no] = &JPADrawStripe;
func_no++;
} else {
mpDrawEmitterFuncList[func_no] = &JPADrawStripeX;
func_no++;
}
if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawEmitterFuncList[func_no] = &fn_8031C2C0;
func_no++;
}
@@ -408,7 +389,7 @@ void JPAResource::init(EGG::Heap* heap) {
mpDrawEmitterFuncList[func_no] = &JPADrawEmitterCallBackB;
func_no++;
if (mpExTexShape != NULL) {
if (pEts != NULL) {
mpDrawEmitterFuncList[func_no] = &JPALoadExTex;
func_no++;
}
@@ -458,17 +439,22 @@ void JPAResource::init(EGG::Heap* heap) {
if (is_glbl_clr_anm) {
if (base_type_5_6 || !is_enable_alpha_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistPrmEnv;
func_no++;
} else if (is_enable_alpha_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistEnv;
func_no++;
}
} else if (!is_prm_anm && !is_enable_alpha_anm) {
if (!is_env_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistPrmEnv;
func_no++;
} else {
mpDrawEmitterFuncList[func_no] = &JPARegistPrm;
func_no++;
}
} else if (!is_env_anm) {
mpDrawEmitterFuncList[func_no] = &JPARegistEnv;
func_no++;
}
if (is_draw_child && child_type_5_6) {
@@ -481,8 +467,8 @@ void JPAResource::init(EGG::Heap* heap) {
mpDrawEmitterChildFuncListNum++;
}
if (mpChildShape != NULL && ((!mpChildShape->isAlphaOutOn() && !mpChildShape->isAlphaInherited()
&& !mpChildShape->isColorInherited()) || is_draw_child && child_type_5_6)) {
if (pCsp != NULL && ((!pCsp->isAlphaOutOn() && !pCsp->isAlphaInherited()
&& !pCsp->isColorInherited()) || is_draw_child && child_type_5_6)) {
mpDrawEmitterChildFuncListNum++;
}
@@ -494,7 +480,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (is_draw_child && child_type_5_6) {
if (mpChildShape->getType() == 5) {
if (pCsp->getType() == 5) {
mpDrawEmitterChildFuncList[func_no] = &JPADrawStripe;
func_no++;
} else {
@@ -511,11 +497,14 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
if (mpChildShape != NULL) {
if (!mpChildShape->isAlphaOutOn() && !mpChildShape->isAlphaInherited() && !mpChildShape->isColorInherited()) {
if (pCsp != NULL) {
if (!pCsp->isAlphaOutOn() && !pCsp->isAlphaInherited()
&& !pCsp->isColorInherited()) {
mpDrawEmitterChildFuncList[func_no] = &JPARegistChildPrmEnv;
func_no++;
} else if (is_draw_child && child_type_5_6) {
mpDrawEmitterChildFuncList[func_no] = &fn_8031DBA0;
func_no++;
}
}
@@ -528,14 +517,14 @@ void JPAResource::init(EGG::Heap* heap) {
if (!is_glbl_tex_anm && is_tex_anm) {
mpDrawParticleFuncListNum++;
}
if (base_type_0_1 && is_enable_scale_anm) {
mpDrawParticleFuncListNum++;
} else {
if (is_tex_crd_anm && !is_prj_tex) {
mpDrawParticleFuncListNum++;
}
if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawParticleFuncListNum++;
}
}
@@ -553,7 +542,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (is_draw_parent && !base_type_5_6) {
switch (mpBaseShape->getType()) {
switch (pBsp->getType()) {
case 2:
if (is_enable_rotate_anm) {
mpDrawParticleFuncList[func_no] = &JPADrawRotBillboard;
@@ -615,7 +604,7 @@ void JPAResource::init(EGG::Heap* heap) {
func_no++;
}
if (mpExTexShape != NULL && mpExTexShape->isUseIndirect() && mpExTexShape->getfield_0x4C()) {
if (pEts != NULL && pEts->isUseIndirect() && pEts->getfield_0x4C()) {
mpDrawParticleFuncList[func_no] = &fn_8031A8C0;
func_no++;
}
@@ -625,23 +614,29 @@ void JPAResource::init(EGG::Heap* heap) {
if (is_prm_anm) {
if (is_env_anm) {
mpDrawParticleFuncList[func_no] = &JPARegistPrmAlphaEnv;
func_no++;
} else {
mpDrawParticleFuncList[func_no] = &JPARegistPrmAlpha;
func_no++;
}
} else if (is_enable_alpha_anm) {
if (is_env_anm) {
mpDrawParticleFuncList[func_no] = &JPARegistAlphaEnv;
func_no++;
} else {
mpDrawParticleFuncList[func_no] = &JPARegistAlpha;
func_no++;
}
} else if (is_env_anm) {
mpDrawParticleFuncList[func_no] = &JPARegistEnv;
func_no++;
}
} else if (is_enable_alpha_anm && !base_type_5_6) {
mpDrawParticleFuncList[func_no] = &JPARegistAlpha;
func_no++;
}
if (is_draw_child && mpChildShape != NULL && !child_type_5_6) {
if (is_draw_child && pCsp != NULL && !child_type_5_6) {
mpDrawParticleChildFuncListNum++;
}
@@ -651,8 +646,8 @@ void JPAResource::init(EGG::Heap* heap) {
mpDrawParticleChildFuncListNum++;
}
if (mpChildShape != NULL && (mpChildShape->isAlphaOutOn() || mpChildShape->isAlphaInherited()
|| mpChildShape->isColorInherited())) {
if (pCsp != NULL && (pCsp->isAlphaOutOn() || pCsp->isAlphaInherited()
|| pCsp->isColorInherited())) {
mpDrawParticleChildFuncListNum++;
}
@@ -663,8 +658,8 @@ void JPAResource::init(EGG::Heap* heap) {
func_no = 0;
if (is_draw_child && mpChildShape != NULL && !child_type_5_6) {
switch (mpChildShape->getType()) {
if (is_draw_child && pCsp != NULL && !child_type_5_6) {
switch (pCsp->getType()) {
case 2:
if (is_rotate_on) {
mpDrawParticleChildFuncList[func_no] = &JPADrawRotBillboard;
@@ -717,14 +712,13 @@ void JPAResource::init(EGG::Heap* heap) {
}
}
if (mpChildShape != NULL && (mpChildShape->isAlphaOutOn() || mpChildShape->isAlphaInherited()
|| mpChildShape->isColorInherited())) {
if (pCsp != NULL && (pCsp->isAlphaOutOn() || pCsp->isAlphaInherited()
|| pCsp->isColorInherited())) {
mpDrawParticleChildFuncList[func_no] = &JPARegistPrmAlphaEnv;
func_no++;
}
}
/* 802755E8-80275A94 26FF28 04AC+00 0/0 1/1 0/0 .text
* calc__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter */
bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
work->mpEmtr = emtr;
work->mpRes = this;
@@ -753,8 +747,8 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
} else {
calcKey(work);
for (int i = mFieldBlockNum - 1; i >= 0; i--) {
mpFieldBlocks[i]->initOpParam();
for (int i = fldNum - 1; i >= 0; i--) {
ppFld[i]->initOpParam();
}
if (emtr->mpEmtrCallBack != NULL) {
@@ -770,12 +764,12 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
(*mpCalcEmitterFuncList[i])(work);
}
for (int i = mFieldBlockNum - 1; i >= 0; i--) {
mpFieldBlocks[i]->prepare(work);
for (int i = fldNum - 1; i >= 0; i--) {
ppFld[i]->prepare(work);
}
if (!emtr->checkStatus(8)) {
mpDynamicsBlock->create(work);
pDyn->create(work);
}
if (emtr->mpEmtrCallBack != NULL) {
@@ -785,23 +779,19 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
}
}
JPANode<JPABaseParticle>* node = emtr->mAlivePtclBase.getFirst();
JPANode<JPABaseParticle>* next;
while (node != emtr->mAlivePtclBase.getEnd()) {
JPANode<JPABaseParticle>* next = NULL;
for (JPANode<JPABaseParticle>* node = emtr->mAlivePtclBase.getFirst(); node != emtr->mAlivePtclBase.getEnd(); node = next) {
next = node->getNext();
if (node->getObject()->calc_p(work)) {
emtr->mpPtclPool->push_front(emtr->mAlivePtclBase.erase(node));
}
node = next;
}
node = emtr->mAlivePtclChld.getFirst();
while (node != emtr->mAlivePtclChld.getEnd()) {
for (JPANode<JPABaseParticle>* node = emtr->mAlivePtclChld.getFirst(); node != emtr->mAlivePtclChld.getEnd(); node = next) {
next = node->getNext();
if (node->getObject()->calc_c(work)) {
emtr->mpPtclPool->push_front(emtr->mAlivePtclChld.erase(node));
}
node = next;
}
emtr->mTick++;
@@ -810,51 +800,47 @@ bool JPAResource::calc(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
return false;
}
/* 80275A94-80275B74 2703D4 00E0+00 0/0 1/1 0/0 .text
* draw__11JPAResourceFP18JPAEmitterWorkDataP14JPABaseEmitter */
void JPAResource::draw(JPAEmitterWorkData* work, JPABaseEmitter* emtr) {
work->mpEmtr = emtr;
work->mpRes = this;
work->mDrawCount = 0;
calcWorkData_d(work);
mpBaseShape->setGX(work);
pBsp->setGX(work);
for (s32 i = 1; i <= emtr->getDrawTimes(); i++) {
work->mDrawCount++;
if (mpBaseShape->isDrawPrntAhead() && mpChildShape != NULL)
if (pBsp->isDrawPrntAhead() && pCsp != NULL)
drawC(work);
drawP(work);
if (!mpBaseShape->isDrawPrntAhead() && mpChildShape != NULL)
if (!pBsp->isDrawPrntAhead() && pCsp != NULL)
drawC(work);
}
}
/* 80275B74-80275EB0 2704B4 033C+00 1/1 0/0 0/0 .text drawP__11JPAResourceFP18JPAEmitterWorkData
*/
void JPAResource::drawP(JPAEmitterWorkData* work) {
work->mpEmtr->clearStatus(0x80);
work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * mpBaseShape->getBaseSizeX();
work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * mpBaseShape->getBaseSizeY();
work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * pBsp->getBaseSizeX();
work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * pBsp->getBaseSizeY();
if (mpBaseShape->getType() == 0) {
if (pBsp->getType() == 0) {
work->mGlobalPtclScl.x *= 1.02f;
} else if (mpBaseShape->getType() == 1) {
} else if (pBsp->getType() == 1) {
work->mGlobalPtclScl.x *= 1.02f;
work->mGlobalPtclScl.y *= 0.4f;
}
if (mpExtraShape != NULL && mpExtraShape->isEnableScaleAnm()) {
work->mPivot.x = mpExtraShape->getScaleCenterX() - 1.0f;
work->mPivot.y = mpExtraShape->getScaleCenterY() - 1.0f;
if (pEsp != NULL && pEsp->isEnableScaleAnm()) {
work->mPivot.x = pEsp->getScaleCenterX() - 1.0f;
work->mPivot.y = pEsp->getScaleCenterY() - 1.0f;
} else {
work->mPivot.x = work->mPivot.y = 0.0f;
}
work->mDirType = mpBaseShape->getDirType();
work->mRotType = mpBaseShape->getRotType();
work->mDLType = mpBaseShape->getType() == 4 || mpBaseShape->getType() == 8;
work->mPlaneType = work->mDLType ? 2 : mpBaseShape->getBasePlaneType();
work->mPrjType = mpBaseShape->isPrjTex() ? (mpBaseShape->isTexCrdAnm() ? 2 : 1) : 0;
work->mDirType = pBsp->getDirType();
work->mRotType = pBsp->getRotType();
work->mDLType = pBsp->getType() == 4 || pBsp->getType() == 8;
work->mPlaneType = work->mDLType ? 2 : pBsp->getBasePlaneType();
work->mPrjType = pBsp->isPrjTex() ? (pBsp->isTexCrdAnm() ? 2 : 1) : 0;
work->mpAlivePtcl = &work->mpEmtr->mAlivePtclBase;
setPTev();
@@ -863,7 +849,7 @@ void JPAResource::drawP(JPAEmitterWorkData* work) {
(*mpDrawEmitterFuncList[i])(work);
}
if (mpBaseShape->isDrawFwdAhead()) {
if (pBsp->isDrawFwdAhead()) {
JPANode<JPABaseParticle>* node = work->mpEmtr->mAlivePtclBase.getLast();
for (; node != work->mpEmtr->mAlivePtclBase.getEnd(); node = node->getPrev()) {
work->mpCurNode = node;
@@ -892,32 +878,30 @@ void JPAResource::drawP(JPAEmitterWorkData* work) {
}
}
/* 80275EB0-802761A8 2707F0 02F8+00 1/1 0/0 0/0 .text drawC__11JPAResourceFP18JPAEmitterWorkData
*/
void JPAResource::drawC(JPAEmitterWorkData* work) {
work->mpEmtr->setStatus(0x80);
if (mpChildShape->isScaleInherited()) {
work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * mpBaseShape->getBaseSizeX();
work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * mpBaseShape->getBaseSizeY();
if (pCsp->isScaleInherited()) {
work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * pBsp->getBaseSizeX();
work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * pBsp->getBaseSizeY();
} else {
work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * mpChildShape->getScaleX();
work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * mpChildShape->getScaleY();
work->mGlobalPtclScl.x = work->mpEmtr->mGlobalPScl.x * pCsp->getScaleX();
work->mGlobalPtclScl.y = work->mpEmtr->mGlobalPScl.y * pCsp->getScaleY();
}
if (mpChildShape->getType() == 0) {
if (pCsp->getType() == 0) {
work->mGlobalPtclScl.x *= 1.02f;
} else if (mpChildShape->getType() == 1) {
} else if (pCsp->getType() == 1) {
work->mGlobalPtclScl.x *= 1.02f;
work->mGlobalPtclScl.y *= 0.4f;
}
work->mPivot.x = work->mPivot.y = 0.0f;
work->mDirType = mpChildShape->getDirType();
work->mRotType = mpChildShape->getRotType();
work->mDLType = mpChildShape->getType() == 4 || mpChildShape->getType() == 8;
work->mPlaneType = work->mDLType ? 2 : mpChildShape->getBasePlaneType();
work->mDirType = pCsp->getDirType();
work->mRotType = pCsp->getRotType();
work->mDLType = pCsp->getType() == 4 || pCsp->getType() == 8;
work->mPlaneType = work->mDLType ? 2 : pCsp->getBasePlaneType();
work->mPrjType = 0;
work->mpAlivePtcl = &work->mpEmtr->mAlivePtclChld;
@@ -927,7 +911,7 @@ void JPAResource::drawC(JPAEmitterWorkData* work) {
(*mpDrawEmitterChildFuncList[i])(work);
}
if (mpBaseShape->isDrawFwdAhead()) {
if (pBsp->isDrawFwdAhead()) {
JPANode<JPABaseParticle>* node = work->mpEmtr->mAlivePtclChld.getLast();
for (; node != work->mpEmtr->mAlivePtclChld.getEnd(); node = node->getPrev()) {
work->mpCurNode = node;
@@ -956,40 +940,33 @@ void JPAResource::drawC(JPAEmitterWorkData* work) {
}
}
/* 802761A8-8027642C 270AE8 0284+00 1/1 0/0 0/0 .text setPTev__11JPAResourceFv */
void JPAResource::setPTev() {
GXTexCoordID tex_coord = GX_TEXCOORD1;
u8 tev_stages = 1;
u8 tex_gens = 1;
u8 ind_stages = 0;
int base_plane_type = (mpBaseShape->getType() == 3 || mpBaseShape->getType() == 7) ?
mpBaseShape->getBasePlaneType() : 0;
int center_offset;
if (mpExtraShape != NULL) {
center_offset =
(mpExtraShape->getScaleCenterX() + 3 * mpExtraShape->getScaleCenterY()) * 0xC;
} else {
center_offset = 0x30;
}
int base_plane_type = (pBsp->getType() == 3 || pBsp->getType() == 7) ?
pBsp->getBasePlaneType() : 0;
int center_offset = pEsp != NULL ? (pEsp->getScaleCenterX() + 3 * pEsp->getScaleCenterY()) * 0xC : 0x30;
int pos_offset = center_offset + base_plane_type * 0x6C;
int crd_offset = (mpBaseShape->getTilingS() + 2 * mpBaseShape->getTilingT()) * 8;
int crd_offset = (pBsp->getTilingS() + 2 * pBsp->getTilingT()) * 8;
GXSetArray(GX_VA_POS, jpa_pos + pos_offset, 3);
GXSetArray(GX_VA_TEX0, jpa_crd + crd_offset, 2);
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
if (mpExTexShape != NULL) {
if (mpExTexShape->isUseIndirect()) {
GXSetIndTexOrder(GX_INDTEXSTAGE0, GX_TEXCOORD1, GX_TEXMAP2);
if (pEts != NULL) {
if (pEts->isUseIndirect()) {
GXSetIndTexOrder(GX_INDTEXSTAGE0, tex_coord, GX_TEXMAP2);
GXSetIndTexCoordScale(GX_INDTEXSTAGE0, GX_ITS_1, GX_ITS_1);
GXSetIndTexMtx(GX_ITM_0, (f32(*)[3])mpExTexShape->getIndTexMtx(), mpExTexShape->getExpScale());
GXSetIndTexMtx(GX_ITM_0, (f32(*)[3])pEts->getIndTexMtx(), pEts->getExpScale());
GXSetTevIndirect(GX_TEVSTAGE0, GX_INDTEXSTAGE0, GX_ITF_8, GX_ITB_STU, GX_ITM_0,
GX_ITW_OFF, GX_ITW_OFF, 0, 0, GX_ITBA_OFF);
ind_stages++;
tex_gens++;
tex_coord = GX_TEXCOORD2;
}
if (mpExTexShape->isUseSecTex()) {
if (pEts->isUseSecTex()) {
GXSetTevOrder(GX_TEVSTAGE1, tex_coord, GX_TEXMAP3, GX_COLOR_NULL);
GXSetTevColorIn(GX_TEVSTAGE1, GX_CC_ZERO, GX_CC_TEXC, GX_CC_CPREV, GX_CC_ZERO);
GXSetTevAlphaIn(GX_TEVSTAGE1, GX_CA_ZERO, GX_CA_TEXA, GX_CA_APREV, GX_CA_ZERO);
@@ -1004,7 +981,7 @@ void JPAResource::setPTev() {
GXSetNumTevStages(tev_stages);
GXSetNumIndStages(ind_stages);
if (mpBaseShape->isClipOn()) {
if (pBsp->isClipOn()) {
GXSetMisc(GX_MT_XF_FLUSH, 8);
GXSetClipMode(GX_CLIP_ENABLE);
} else {
@@ -1013,11 +990,9 @@ void JPAResource::setPTev() {
GXSetNumTexGens(tex_gens);
}
/* 8027642C-8027658C 270D6C 0160+00 1/1 0/0 0/0 .text setCTev__11JPAResourceFP18JPAEmitterWorkData
*/
void JPAResource::setCTev(JPAEmitterWorkData* work) {
int base_plane_type = (mpChildShape->getType() == 3 || mpChildShape->getType() == 7) ?
mpChildShape->getBasePlaneType() : 0;
int base_plane_type = (pCsp->getType() == 3 || pCsp->getType() == 7) ?
pCsp->getBasePlaneType() : 0;
int pos_offset = 0x30 + base_plane_type * 0x6C;
GXSetArray(GX_VA_POS, jpa_pos + pos_offset, 3);
GXSetArray(GX_VA_TEX0, jpa_crd, 2);
@@ -1026,18 +1001,16 @@ void JPAResource::setCTev(JPAEmitterWorkData* work) {
GXSetTevDirect(GX_TEVSTAGE0);
GXSetNumTevStages(1);
GXSetNumIndStages(0);
if (mpChildShape->isClipOn()) {
if (pCsp->isClipOn()) {
GXSetMisc(GX_MT_XF_FLUSH, 8);
GXSetClipMode(GX_CLIP_ENABLE);
} else {
GXSetClipMode(GX_CLIP_DISABLE);
}
GXSetNumTexGens(1);
work->mpResMgr->load(work->mpRes->getTexIdx(mpChildShape->getTexIdx()), GX_TEXMAP1);
work->mpResMgr->load(work->mpRes->getTexIdx(pCsp->getTexIdx()), GX_TEXMAP1);
}
/* 8027658C-80276608 270ECC 007C+00 0/0 1/1 0/0 .text
* calc_p__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calc_p(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
if (mpCalcParticleFuncList != NULL) {
for (int i = mpCalcParticleFuncListNum - 1; i >= 0; i--) {
@@ -1046,8 +1019,6 @@ void JPAResource::calc_p(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
}
}
/* 80276608-80276684 270F48 007C+00 0/0 1/1 0/0 .text
* calc_c__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calc_c(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
if (mpCalcParticleChildFuncList != NULL) {
for (int i = mpCalcParticleChildFuncListNum - 1; i >= 0; i--) {
@@ -1056,20 +1027,16 @@ void JPAResource::calc_c(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
}
}
/* 80276684-80276700 270FC4 007C+00 0/0 2/2 0/0 .text
* calcField__11JPAResourceFP18JPAEmitterWorkDataP15JPABaseParticle */
void JPAResource::calcField(JPAEmitterWorkData* work, JPABaseParticle* ptcl) {
for (int i = mFieldBlockNum - 1; i >= 0; i--) {
mpFieldBlocks[i]->calc(work, ptcl);
for (int i = fldNum - 1; i >= 0; i--) {
ppFld[i]->calc(work, ptcl);
}
}
/* 80276700-80276840 271040 0140+00 2/1 0/0 0/0 .text calcKey__11JPAResourceFP18JPAEmitterWorkData
*/
void JPAResource::calcKey(JPAEmitterWorkData* work) {
for (int i = mKeyBlockNum - 1; i >= 0; i--) {
f32 val = mpKeyBlocks[i]->calc(work->mpEmtr->mTick);
switch (mpKeyBlocks[i]->getID()) {
for (int i = keyNum - 1; i >= 0; i--) {
f32 val = ppKey[i]->calc(work->mpEmtr->mTick);
switch (ppKey[i]->getID()) {
case 0:
work->mpEmtr->mRate = val;
break;
@@ -1097,20 +1064,20 @@ void JPAResource::calcKey(JPAEmitterWorkData* work) {
case 10:
work->mpEmtr->mScaleOut = val;
break;
default:
JUT_WARN(917, "%s", "JPA : WRONG ID in key data\n");
break;
}
}
}
/* 80276840-80276A0C 271180 01CC+00 1/1 0/0 0/0 .text
* calcWorkData_c__11JPAResourceFP18JPAEmitterWorkData */
void JPAResource::calcWorkData_c(JPAEmitterWorkData* work) {
work->mVolumeSize = work->mpEmtr->mVolumeSize;
work->mVolumeMinRad = work->mpEmtr->mVolumeMinRad;
work->mVolumeSweep = work->mpEmtr->mVolumeSweep;
work->mVolumeX = 0;
work->mVolumeAngleNum = 0;
work->mVolumeAngleNum = work->mVolumeX = 0;
work->mVolumeAngleMax = 1;
work->mDivNumber = mpDynamicsBlock->getDivNumber() * 2 + 1;
work->mDivNumber = pDyn->getDivNumber() * 2 + 1;
Mtx local_scl_mtx, local_rot_mtx, global_mtx;
MTXScale(local_scl_mtx, work->mpEmtr->mLocalScl.x, work->mpEmtr->mLocalScl.y,
work->mpEmtr->mLocalScl.z);
@@ -1127,14 +1094,11 @@ void JPAResource::calcWorkData_c(JPAEmitterWorkData* work) {
MTXConcat(work->mGlobalRot, local_scl_mtx, work->mGlobalSR);
work->mEmitterPos.set(work->mpEmtr->mLocalTrs);
work->mGlobalScl.mul(work->mpEmtr->mGlobalScl, work->mpEmtr->mLocalScl);
JPAGetDirMtx(work->mpEmtr->mLocalDir, work->mDirectionMtx);
work->mPublicScale.set(work->mpEmtr->mGlobalScl);
MTXMultVec(global_mtx, work->mpEmtr->mLocalTrs, work->mGlobalPos);
}
/* 80276A0C-80276A8C 27134C 0080+00 1/1 0/0 0/0 .text
* calcWorkData_d__11JPAResourceFP18JPAEmitterWorkData */
void JPAResource::calcWorkData_d(JPAEmitterWorkData* work) {
Mtx mtx;
JPAGetXYZRotateMtx(work->mpEmtr->mLocalRot.x * 0xB6, work->mpEmtr->mLocalRot.y * 0xB6,
@@ -1142,9 +1106,3 @@ void JPAResource::calcWorkData_d(JPAEmitterWorkData* work) {
MTXConcat(work->mpEmtr->mGlobalRot, mtx, work->mGlobalRot);
MTXMultVecSR(work->mGlobalRot, work->mpEmtr->mLocalDir, work->mGlobalEmtrDir);
}
/*
#pragma push
#pragma force_active on
static u8 jpa_resource_padding[28] = {0};
#pragma pop
*/
+50 -41
View File
@@ -1,8 +1,3 @@
//
// Generated By: dol2asm
// Translation Unit: JPAResourceLoader
//
#include "egg/core/eggHeap.h"
#include "JSystem/JParticle/JPAResourceLoader.h"
#include "JSystem/JParticle/JPABaseShape.h"
@@ -14,12 +9,13 @@
#include "JSystem/JParticle/JPAKeyBlock.h"
#include "JSystem/JParticle/JPAResource.h"
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JUtility/JUTAssert.h"
/* 8027D8A0-8027D8E0 2781E0 0040+00 0/0 1/1 0/0 .text
* __ct__17JPAResourceLoaderFPCUcP18JPAResourceManager */
JPAResourceLoader::JPAResourceLoader(u8 const* data, JPAResourceManager* mgr) {
if (*(u32*)(data + 4) == '2-11') {
load_jpc(data, mgr);
} else {
JUT_WARN(48, "JPA : wrong version file\n");
}
}
@@ -31,76 +27,89 @@ struct JPAResourceHeader {
/* 0x6 */ u8 mTDB1Num;
};
/* 8027D8E0-8027DCA0 278220 03C0+00 1/1 0/0 0/0 .text
* load_jpc__17JPAResourceLoaderFPCUcP18JPAResourceManager */
void JPAResourceLoader::load_jpc(u8 const* data, JPAResourceManager* mgr) {
EGG::Heap* heap = mgr->mpHeap;
mgr->mResMax = *(u16*)(data + 8);
mgr->mTexMax = *(u16*)(data + 0xA);
mgr->mpResArr = new (heap, 4) JPAResource*[mgr->mResMax];
mgr->mpTexArr = new (heap, 4) JPATexture*[mgr->mTexMax];
void JPAResourceLoader::load_jpc(u8 const* data, JPAResourceManager* p_res_mgr) {
EGG::Heap* heap = p_res_mgr->mpHeap;
p_res_mgr->resMaxNum = *(u16*)(data + 8);
p_res_mgr->texMaxNum = *(u16*)(data + 0xA);
p_res_mgr->pResAry = new (heap) JPAResource*[p_res_mgr->resMaxNum];
p_res_mgr->pTexAry = new (heap) JPATexture*[p_res_mgr->texMaxNum];
JUT_ASSERT(199, (p_res_mgr->pResAry != NULL) && (p_res_mgr->pTexAry != 0));
u32 offset = 0x10;
for (int i = 0; i < *(u16*)(data + 8); i++) {
JPAResourceHeader* header = (JPAResourceHeader*)(data + offset);
JPAResource* res = new (heap, 4) JPAResource();
res->mFieldBlockNum = header->mFieldBlockNum;
res->mpFieldBlocks = res->mFieldBlockNum != 0 ?
new (heap, 4) JPAFieldBlock*[res->mFieldBlockNum] : NULL;
res->mKeyBlockNum = header->mKeyBlockNum;
res->mpKeyBlocks = res->mKeyBlockNum != 0 ?
new (heap, 4) JPAKeyBlock*[res->mKeyBlockNum] : NULL;
res->mTDB1Num = header->mTDB1Num;
res->mpTDB1 = NULL;
res->mUsrIdx = header->mUsrIdx;
JPAResource* p_res = new (heap) JPAResource();
JUT_ASSERT(211, p_res != NULL);
p_res->fldNum = header->mFieldBlockNum;
p_res->ppFld = p_res->fldNum != 0 ?
new (heap) JPAFieldBlock*[p_res->fldNum] : NULL;
JUT_ASSERT(216, (p_res->ppFld != NULL) || (p_res->fldNum == 0));
p_res->keyNum = header->mKeyBlockNum;
p_res->ppKey = p_res->keyNum != 0 ?
new (heap) JPAKeyBlock*[p_res->keyNum] : NULL;
JUT_ASSERT(221, (p_res->ppKey != NULL) || (p_res->keyNum == 0));
p_res->texNum = header->mTDB1Num;
p_res->mpTDB1 = NULL;
p_res->mUsrIdx = header->mUsrIdx;
offset += 8;
u32 field_idx = 0;
u32 key_idx = 0;
u32 fld_no = 0;
u32 key_no = 0;
for (int j = 0; j < header->mBlockNum; j++) {
u32 magic = *(u32*)(data + offset);
u32 size = *(u32*)(data + offset + 4);
switch (magic) {
case 'FLD1':
res->mpFieldBlocks[field_idx] = new (heap, 4) JPAFieldBlock(data + offset, heap);
field_idx++;
p_res->ppFld[fld_no] = new (heap) JPAFieldBlock(data + offset, heap);
JUT_ASSERT(244, p_res->ppFld[fld_no] != NULL);
fld_no++;
break;
case 'KFA1':
res->mpKeyBlocks[key_idx] = new (heap, 4) JPAKeyBlock(data + offset);
key_idx++;
p_res->ppKey[key_no] = new (heap) JPAKeyBlock(data + offset);
JUT_ASSERT(249, p_res->ppKey[key_no] != NULL);
key_no++;
break;
case 'BEM1':
res->mpDynamicsBlock = new (heap, 4) JPADynamicsBlock(data + offset);
p_res->pDyn = new (heap) JPADynamicsBlock(data + offset);
JUT_ASSERT(254, p_res->pDyn != NULL);
break;
case 'BSP1':
res->mpBaseShape = new (heap, 4) JPABaseShape(data + offset, heap);
p_res->pBsp = new (heap) JPABaseShape(data + offset, heap);
JUT_ASSERT(258, p_res->pBsp != NULL);
break;
case 'ESP1':
res->mpExtraShape = new (heap, 4) JPAExtraShape(data + offset);
p_res->pEsp = new (heap) JPAExtraShape(data + offset);
JUT_ASSERT(262, p_res->pEsp != NULL);
break;
case 'SSP1':
res->mpChildShape = new (heap, 4) JPAChildShape(data + offset);
p_res->pCsp = new (heap) JPAChildShape(data + offset);
JUT_ASSERT(266, p_res->pCsp != NULL);
break;
case 'ETX1':
res->mpExTexShape = new (heap, 4) JPAExTexShape(data + offset);
p_res->pEts = new (heap) JPAExTexShape(data + offset);
JUT_ASSERT(270, p_res->pEts != NULL);
break;
case 'TDB1':
res->mpTDB1 = (const u16*)(data + offset + 8);
p_res->mpTDB1 = (const u16*)(data + offset + 8);
break;
default:
JUT_WARN(275, "JPA : wrong type block in jpc file %d %x\n", header->mBlockNum, offset);
break;
}
offset += size;
}
res->init(heap);
mgr->registRes(res);
p_res->init(heap);
p_res_mgr->registRes(p_res);
}
offset = *(u32*)(data + 0xC);
for (int i = 0; i < *(u16*)(data + 0xA); i++) {
u32 size = *(u32*)(data + offset + 4);
JPATexture* tex = new (heap, 4) JPATexture(data + offset);
mgr->registTex(tex);
JPATexture* p_tex = new (heap) JPATexture(data + offset);
JUT_ASSERT(298, p_tex != NULL);
p_res_mgr->registTex(p_tex);
offset += size;
}
}
+28 -38
View File
@@ -1,54 +1,47 @@
//
// Generated By: dol2asm
// Translation Unit: JPAResourceManager
//
#include "JSystem/JParticle/JPAResourceManager.h"
#include "JSystem/JParticle/JPADynamicsBlock.h"
#include "JSystem/JParticle/JPAResource.h"
#include "string.h"
#include "JSystem/JUtility/JUTAssert.h"
#include "egg/core/eggHeap.h"
#include <cstring>
struct JPAResourceLoader {
/* 8027D8A0 */ JPAResourceLoader(u8 const*, JPAResourceManager*);
JPAResourceLoader(u8 const*, JPAResourceManager*);
};
/* 80273E10-80273E68 26E750 0058+00 0/0 2/2 0/0 .text __ct__18JPAResourceManagerFPCvP7JKRHeap */
JPAResourceManager::JPAResourceManager(void const* pData, EGG::Heap* pHeap) {
mpResArr = NULL;
mpTexArr = NULL;
mResMax = 0;
mResNum = 0;
mTexMax = 0;
mTexNum = 0;
JPAResourceManager::JPAResourceManager(void const* p_jpc, EGG::Heap* pHeap) {
pResAry = NULL;
pTexAry = NULL;
resMaxNum = 0;
resRegNum = 0;
texMaxNum = 0;
texRegNum = 0;
mpHeap = pHeap;
JPAResourceLoader loader((u8 const*)pData, this);
JUT_ASSERT(49, (p_jpc != 0) && (pHeap != 0));
JPAResourceLoader loader((u8 const*)p_jpc, this);
}
/* 80273E68-80273EA8 26E7A8 0040+00 1/1 1/1 0/0 .text getResource__18JPAResourceManagerCFUs */
JPAResource* JPAResourceManager::getResource(u16 usrIdx) const {
for (u16 i = 0; i < mResNum; i++)
if (mpResArr[i]->getUsrIdx() == usrIdx)
return mpResArr[i];
for (u16 i = 0; i < resRegNum; i++)
if (pResAry[i]->getUsrIdx() == usrIdx)
return pResAry[i];
return NULL;
}
/* 80273EA8-80273EEC 26E7E8 0044+00 0/0 2/2 0/0 .text
* checkUserIndexDuplication__18JPAResourceManagerCFUs */
bool JPAResourceManager::checkUserIndexDuplication(u16 usrIdx) const {
for (s32 i = 0; i < mResNum; i++)
if (mpResArr[i]->getUsrIdx() == usrIdx)
for (s32 i = 0; i < resRegNum; i++)
if (pResAry[i]->getUsrIdx() == usrIdx)
return true;
return false;
}
/* 80273EEC-80273F8C 26E82C 00A0+00 0/0 2/2 0/0 .text
* swapTexture__18JPAResourceManagerFPC7ResTIMGPCc */
const EGG::ResTIMG* JPAResourceManager::swapTexture(EGG::ResTIMG const* img, char const* swapName) {
const EGG::ResTIMG* ret = NULL;
EGG::Texture* tex = NULL;
for (s32 i = 0; i < mTexNum; i++) {
if (strcmp(swapName, mpTexArr[i]->getName()) == 0) {
EGG::Texture* tex = mpTexArr[i]->getJUTTexture();
for (s32 i = 0; i < texRegNum; i++) {
if (strcmp(swapName, pTexAry[i]->getName()) == 0) {
tex = pTexAry[i]->getJUTTexture();
ret = tex->getTexInfo();
tex->storeTIMG(img, (u8)0);
break;
@@ -58,21 +51,18 @@ const EGG::ResTIMG* JPAResourceManager::swapTexture(EGG::ResTIMG const* img, cha
return ret;
}
/* 80273F8C-80273FAC 26E8CC 0020+00 0/0 1/1 0/0 .text
* registRes__18JPAResourceManagerFP11JPAResource */
void JPAResourceManager::registRes(JPAResource* res) {
mpResArr[mResNum] = res;
mResNum++;
JUT_ASSERT(151, resRegNum < resMaxNum);
pResAry[resRegNum] = res;
resRegNum++;
}
/* 80273FAC-80273FCC 26E8EC 0020+00 0/0 1/1 0/0 .text
* registTex__18JPAResourceManagerFP10JPATexture */
void JPAResourceManager::registTex(JPATexture* tex) {
mpTexArr[mTexNum] = tex;
mTexNum++;
JUT_ASSERT(166, texRegNum < texMaxNum);
pTexAry[texRegNum] = tex;
texRegNum++;
}
/* 80273FCC-80274010 26E90C 0044+00 0/0 6/6 0/0 .text getResUserWork__18JPAResourceManagerCFUs */
u32 JPAResourceManager::getResUserWork(u16 usrIdx) const {
u32 ret = 0;
-7
View File
@@ -1,15 +1,8 @@
//
// Generated By: dol2asm
// Translation Unit: JPATexture
//
#include "JSystem/JParticle/JPATexture.h"
/* 8027D7D4-8027D83C 278114 0068+00 0/0 1/1 0/0 .text __ct__10JPATextureFPCUc */
JPATexture::JPATexture(u8 const* pData) {
mpData = (const JPATextureData*)pData;
mTexture.store(&mpData->mResTIMG);
}
/* 8027D83C-8027D8A0 27817C 0064+00 1/0 0/0 0/0 .text __dt__10JPATextureFv */
JPATexture::~JPATexture() {}
+1 -3
View File
@@ -117,7 +117,6 @@ dEmitterBase_c::~dEmitterBase_c() {
}
JPABaseEmitter *dEmitterBase_c::GetNextEmitter(JPABaseEmitter *head) {
// Portability hazard: u32->pointer cast
return reinterpret_cast<JPABaseEmitter *>(head->getUserWork());
}
@@ -134,8 +133,7 @@ bool dEmitterBase_c::createEmitters(
);
if (last != nullptr) {
if (head != nullptr) {
// Portability hazard: pointer->u32 cast
head->setUserWork(reinterpret_cast<u32>(last));
head->setUserWork(reinterpret_cast<uintptr_t>(last));
} else {
mpEmitterHead = last;
}