mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-07-08 20:24:47 -04:00
JPAEmitter OK, work on d_particle (#1874)
* JPAEmitter OK + header reorganization * libelf: silence repeated relocation warning * Work on d_particle
This commit is contained in:
@@ -75,6 +75,10 @@ public:
|
||||
int removeMatColorAnimator(J3DAnmColor* anm) {
|
||||
return mMaterialTable.removeMatColorAnimator(anm);
|
||||
}
|
||||
void syncJ3DSys() {
|
||||
syncJ3DSysFlags();
|
||||
syncJ3DSysPointers();
|
||||
}
|
||||
|
||||
private:
|
||||
/* 0x04 */ void* mpRawData;
|
||||
|
||||
@@ -163,7 +163,7 @@ public:
|
||||
/* 8031730C */ virtual s32 countDLSize();
|
||||
/* 80323544 */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 8000E0AC */ virtual void setTexNo(u32, u16);
|
||||
/* 8000DF94 */ virtual u32 getTexNo(u32) const;
|
||||
/* 8000DF94 */ virtual u16 getTexNo(u32) const;
|
||||
/* 80323548 */ virtual void setTevOrder(u32, J3DTevOrder const*);
|
||||
/* 8000E0BC */ virtual void setTevOrder(u32, J3DTevOrder);
|
||||
/* 8000DFB8 */ virtual J3DTevOrder* getTevOrder(u32);
|
||||
@@ -229,7 +229,7 @@ public:
|
||||
/* 80317BB4 */ virtual s32 countDLSize();
|
||||
/* 803229D0 */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 803229C0 */ virtual void setTexNo(u32, u16);
|
||||
/* 803229E4 */ virtual u32 getTexNo(u32) const;
|
||||
/* 803229E4 */ virtual u16 getTexNo(u32) const;
|
||||
/* 80322A08 */ virtual void setTevOrder(u32, J3DTevOrder const*);
|
||||
/* 803229F4 */ virtual void setTevOrder(u32, J3DTevOrder);
|
||||
/* 80322A1C */ virtual J3DTevOrder* getTevOrder(u32);
|
||||
@@ -296,7 +296,7 @@ public:
|
||||
/* 80317BCC */ virtual s32 countDLSize();
|
||||
/* 8032202C */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 8032201C */ virtual void setTexNo(u32, u16);
|
||||
/* 80322040 */ virtual u32 getTexNo(u32) const;
|
||||
/* 80322040 */ virtual u16 getTexNo(u32) const;
|
||||
/* 80322064 */ virtual void setTevOrder(u32, J3DTevOrder const*);
|
||||
/* 80322050 */ virtual void setTevOrder(u32, J3DTevOrder);
|
||||
/* 80322078 */ virtual J3DTevOrder* getTevOrder(u32);
|
||||
@@ -369,7 +369,7 @@ public:
|
||||
/* 80317BC4 */ virtual s32 countDLSize();
|
||||
/* 803223F0 */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 803223E0 */ virtual void setTexNo(u32, u16);
|
||||
/* 80322404 */ virtual u32 getTexNo(u32) const;
|
||||
/* 80322404 */ virtual u16 getTexNo(u32) const;
|
||||
/* 80322428 */ virtual void setTevOrder(u32, J3DTevOrder const*);
|
||||
/* 80322414 */ virtual void setTevOrder(u32, J3DTevOrder);
|
||||
/* 8032243C */ virtual J3DTevOrder* getTevOrder(u32);
|
||||
@@ -442,7 +442,7 @@ public:
|
||||
/* 80317BD4 */ virtual s32 countDLSize();
|
||||
/* 80321C60 */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 80321C50 */ virtual void setTexNo(u32, u16);
|
||||
/* 80321C74 */ virtual u32 getTexNo(u32) const;
|
||||
/* 80321C74 */ virtual u16 getTexNo(u32) const;
|
||||
/* 80321C98 */ virtual void setTevOrder(u32, J3DTevOrder const*);
|
||||
/* 80321C84 */ virtual void setTevOrder(u32, J3DTevOrder);
|
||||
/* 80321CAC */ virtual J3DTevOrder* getTevOrder(u32);
|
||||
@@ -515,7 +515,7 @@ public:
|
||||
/* 80317BBC */ virtual s32 countDLSize();
|
||||
/* 803227B4 */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 803227A4 */ virtual void setTexNo(u32, u16);
|
||||
/* 803227C8 */ virtual u32 getTexNo(u32) const;
|
||||
/* 803227C8 */ virtual u16 getTexNo(u32) const;
|
||||
/* 803227EC */ virtual void setTevOrder(u32, J3DTevOrder const*);
|
||||
/* 803227D8 */ virtual void setTevOrder(u32, J3DTevOrder);
|
||||
/* 80322800 */ virtual J3DTevOrder* getTevOrder(u32);
|
||||
|
||||
@@ -61,7 +61,7 @@ public:
|
||||
}
|
||||
}
|
||||
J3DNBTScale* getNBTScale() const { return mTexGenBlock->getNBTScale(); }
|
||||
u32 getTexNo(u32 idx) const { return mTevBlock->getTexNo(idx); }
|
||||
u16 getTexNo(u32 idx) const { return mTevBlock->getTexNo(idx); }
|
||||
GXColor* getTevKColor(u32 param_0) { return mTevBlock->getTevKColor(param_0); }
|
||||
GXColorS10* getTevColor(u32 param_0) { return mTevBlock->getTevColor(param_0); }
|
||||
J3DFog* getFog() { return mPEBlock->getFog(); }
|
||||
|
||||
@@ -24,6 +24,10 @@ public:
|
||||
/* 80018C0C */ J3DLightObj() : mInfo(j3dDefaultLightInfo) {}
|
||||
|
||||
J3DLightInfo& getLightInfo() { return mInfo; }
|
||||
J3DLightObj& operator=(J3DLightObj const& other) {
|
||||
mInfo = other.mInfo;
|
||||
return *this;
|
||||
}
|
||||
|
||||
/* 0x00 */ J3DLightInfo mInfo;
|
||||
/* 0x34 */ u8 field_0x34[64];
|
||||
|
||||
@@ -31,6 +31,12 @@ struct TVec3<s16> {
|
||||
z = b.z;
|
||||
return *this;
|
||||
}
|
||||
|
||||
void set(s16 x_, s16 y_, s16 z_) {
|
||||
x = x_;
|
||||
y = y_;
|
||||
z = z_;
|
||||
}
|
||||
};
|
||||
|
||||
inline void setTVec3f(const f32* vec_a, f32* vec_b) {
|
||||
@@ -48,6 +54,11 @@ inline void setTVec3f(const f32* vec_a, f32* vec_b) {
|
||||
};
|
||||
}
|
||||
|
||||
// Until we figure out TVec3 ctors
|
||||
inline void setTVec3f(const Vec& vec_a, Vec& vec_b) {
|
||||
setTVec3f(&vec_a.x, &vec_b.x);
|
||||
}
|
||||
|
||||
inline float fsqrt_step(float mag) {
|
||||
f32 root = __frsqrte(mag);
|
||||
return 0.5f * root * (3.0f - mag * (root * root));
|
||||
|
||||
@@ -89,7 +89,9 @@ public:
|
||||
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 isTexAnm() const { return !!(mpData->mTexFlg & 0x01); }
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
#ifndef JPADRAWINFO_H
|
||||
#define JPADRAWINFO_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
|
||||
class JPADrawInfo {
|
||||
public:
|
||||
JPADrawInfo(Mtx param_0, f32 fovY, f32 aspect) {
|
||||
PSMTXCopy(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) {
|
||||
PSMTXCopy(param_0, mCamMtx);
|
||||
C_MTXLightOrtho(mPrjMtx, top, bottom, left, right, 0.5f, 0.5f, 0.5f, 0.5f);
|
||||
}
|
||||
|
||||
Mtx mCamMtx;
|
||||
Mtx mPrjMtx;
|
||||
|
||||
void getCamMtx(Mtx* dst) const { PSMTXCopy(mCamMtx, *dst); }
|
||||
void getPrjMtx(Mtx* dst) const { PSMTXCopy(mPrjMtx, *dst); }
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -34,7 +34,7 @@ struct JPADynamicsBlockData {
|
||||
/* 0x6E */ s16 mMaxFrame;
|
||||
/* 0x70 */ s16 mStartFrame;
|
||||
/* 0x72 */ s16 mLifeTime;
|
||||
/* 0x74 */ s16 mVolumeSize;
|
||||
/* 0x74 */ u16 mVolumeSize;
|
||||
/* 0x76 */ u16 mDivNumber;
|
||||
/* 0x78 */ u8 mRateStep;
|
||||
/* 0x7C */ u32 field_0x7c;
|
||||
@@ -64,6 +64,31 @@ public:
|
||||
u32 getVolumeType() const { return (mpData->mFlags >> 8) & 0x07; }
|
||||
u16 getDivNumber() const { return mpData->mDivNumber; }
|
||||
f32 getRateRndm() const { return mpData->mRateRndm; }
|
||||
void getEmitterScl(JGeometry::TVec3<f32>* vec) const {
|
||||
vec->set(mpData->mEmitterScl.x, mpData->mEmitterScl.y, mpData->mEmitterScl.z);
|
||||
}
|
||||
void getEmitterTrs(JGeometry::TVec3<f32>* vec) const {
|
||||
vec->set(mpData->mEmitterTrs.x, mpData->mEmitterTrs.y, mpData->mEmitterTrs.z);
|
||||
}
|
||||
void getEmitterDir(JGeometry::TVec3<f32>* vec) const {
|
||||
vec->set(mpData->mEmitterDir.x, mpData->mEmitterDir.y, mpData->mEmitterDir.z);
|
||||
}
|
||||
void getEmitterRot(JGeometry::TVec3<s16>* vec) const {
|
||||
vec->set(mpData->mEmitterRot.x, mpData->mEmitterRot.y, mpData->mEmitterRot.z);
|
||||
}
|
||||
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; }
|
||||
f32 getAirRes() { return mpData->mAirResist; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ const JPADynamicsBlockData* mpData;
|
||||
|
||||
@@ -2,5 +2,219 @@
|
||||
#define JPAEMITTER_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
#include "dolphin/gx/GXEnum.h"
|
||||
#include "dolphin/gx/GXStruct.h"
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
#include "JSystem/JGeometry.h"
|
||||
#include "JSystem/JParticle/JPAResource.h"
|
||||
#include "JSystem/JParticle/JPAList.h"
|
||||
#include "JSystem/JParticle/JPARandom.h"
|
||||
#include "JSystem/JParticle/JPAMath.h"
|
||||
#include "JSystem/JParticle/JPADynamicsBlock.h"
|
||||
#include "JSystem/JSupport/JSUList.h"
|
||||
|
||||
struct JPABaseEmitter;
|
||||
struct JPAResourceManager;
|
||||
struct JPABaseEmitter;
|
||||
struct JPAEmitterManager;
|
||||
struct JPAParticleCallBack;
|
||||
|
||||
struct JPAEmitterWorkData {
|
||||
/* 0x00 */ JPABaseEmitter* mpEmtr;
|
||||
/* 0x04 */ JPAResource* mpRes;
|
||||
/* 0x08 */ JPAResourceManager* mpResMgr;
|
||||
/* 0x0C */ JPARandom mRndm;
|
||||
/* 0x10 */ JGeometry::TVec3<f32> mVolumePos;
|
||||
/* 0x1C */ JGeometry::TVec3<f32> mVelOmni;
|
||||
/* 0x28 */ JGeometry::TVec3<f32> mVelAxis;
|
||||
/* 0x34 */ f32 mVolumeSize;
|
||||
/* 0x38 */ f32 mVolumeMinRad;
|
||||
/* 0x3C */ f32 mVolumeSweep;
|
||||
/* 0x40 */ s32 mEmitCount;
|
||||
/* 0x44 */ s32 mVolumeEmitIdx;
|
||||
/* 0x48 */ Mtx mDirectionMtx;
|
||||
/* 0x78 */ Mtx mRotationMtx;
|
||||
/* 0xA8 */ Mtx mGlobalRot;
|
||||
/* 0xD8 */ Mtx mGlobalSR;
|
||||
/* 0x108 */ JGeometry::TVec3<f32> mEmitterPos;
|
||||
/* 0x114 */ JGeometry::TVec3<f32> mGlobalScl;
|
||||
/* 0x120 */ JGeometry::TVec3<f32> mGlobalEmtrDir;
|
||||
/* 0x12C */ JGeometry::TVec3<f32> mPublicScale;
|
||||
/* 0x138 */ JGeometry::TVec3<f32> mGlobalPos;
|
||||
/* 0x144 */ JGeometry::TVec2<f32> mGlobalPtclScl;
|
||||
/* 0x14C */ JGeometry::TVec2<f32> mPivot;
|
||||
/* 0x154 */ Mtx mYBBCamMtx;
|
||||
/* 0x184 */ Mtx mPosCamMtx;
|
||||
/* 0x1B4 */ Mtx mPrjMtx;
|
||||
/* 0x1E4 */ JPAList<JPABaseParticle>* mpAlivePtcl;
|
||||
/* 0x1E8 */ JPANode<JPABaseParticle>* mpCurNode;
|
||||
/* 0x1EC */ u32 mVolumeAngleNum;
|
||||
/* 0x1F0 */ u32 mVolumeAngleMax;
|
||||
/* 0x1F4 */ u32 mVolumeX;
|
||||
/* 0x1F8 */ u32 mDivNumber;
|
||||
/* 0x1FC */ f32 mScaleAnm;
|
||||
/* 0x200 */ u32 mDirType;
|
||||
/* 0x204 */ u32 mRotType;
|
||||
/* 0x208 */ u32 mPlaneType;
|
||||
/* 0x20C */ u32 mDLType;
|
||||
/* 0x210 */ u32 mPrjType;
|
||||
/* 0x214 */ s16 mClrKeyFrame;
|
||||
/* 0x216 */ u8 mDrawCount;
|
||||
};
|
||||
|
||||
class JPAEmitterCallBack {
|
||||
public:
|
||||
/* 80050368 */ virtual void execute(JPABaseEmitter*);
|
||||
/* 80050374 */ virtual void executeAfter(JPABaseEmitter*);
|
||||
/* 8005036C */ virtual void draw(JPABaseEmitter*);
|
||||
/* 80050370 */ virtual void drawAfter(JPABaseEmitter*);
|
||||
|
||||
/* 8027E6A4 */ ~JPAEmitterCallBack();
|
||||
};
|
||||
|
||||
enum {
|
||||
JPAEmtrStts_StopEmit = 0x01,
|
||||
JPAEmtrStts_StopCalc = 0x02,
|
||||
JPAEmtrStts_StopDraw = 0x04,
|
||||
JPAEmtrStts_EnableDeleteEmitter = 0x08,
|
||||
JPAEmtrStts_FirstEmit = 0x10,
|
||||
JPAEmtrStts_RateStepEmit = 0x20,
|
||||
JPAEmtrStts_Immortal = 0x40,
|
||||
};
|
||||
|
||||
class JPABaseEmitter {
|
||||
public:
|
||||
/* 8027E5EC */ ~JPABaseEmitter();
|
||||
/* 8027E64C */ JPABaseEmitter();
|
||||
/* 8027E6EC */ void init(JPAEmitterManager*, JPAResource*);
|
||||
/* 8027EDD4 */ bool processTillStartFrame();
|
||||
/* 8027EE14 */ bool processTermination();
|
||||
/* 8027EEB0 */ void calcEmitterGlobalPosition(JGeometry::TVec3<f32>*) const;
|
||||
/* 8027EC60 */ void deleteAllParticle();
|
||||
/* 8027EB60 */ JPABaseParticle* createChild(JPABaseParticle*);
|
||||
/* 8027EA40 */ JPABaseParticle* createParticle();
|
||||
/* 8027EF30 */ u32 getCurrentCreateNumber() const;
|
||||
/* 8027EF40 */ u8 getDrawCount() const;
|
||||
/* 8027EF50 */ bool loadTexture(u8, GXTexMapID);
|
||||
|
||||
void initStatus(u32 status) { mStatus = status; }
|
||||
void setStatus(u32 status) { mStatus |= status; }
|
||||
void clearStatus(u32 status) { mStatus &= ~status; }
|
||||
u32 checkStatus(u32 status) { return (mStatus & status); }
|
||||
bool checkFlag(u32 flag) { return !!(mpRes->getDyn()->getFlag() & flag); }
|
||||
u8 getResourceManagerID() const { return mResMgrID; }
|
||||
u8 getGroupID() const { return mGroupID; }
|
||||
u8 getDrawTimes() const { return mDrawTimes; }
|
||||
void setRate(f32 rate) { mRate = rate; }
|
||||
void setEmitterCallBackPtr(JPAEmitterCallBack* ptr) { mpEmtrCallBack = ptr; }
|
||||
void setGlobalRTMatrix(const Mtx m) { JPASetRMtxTVecfromMtx(m, mGlobalRot, &mGlobalTrs); }
|
||||
void setGlobalTranslation(f32 x, f32 y, f32 z) { mGlobalTrs.set(x, y, z); }
|
||||
void getLocalTranslation(JGeometry::TVec3<f32>& vec) { vec.set(mLocalTrs); }
|
||||
void setGlobalRotation(const JGeometry::TVec3<s16>& rot) {
|
||||
JPAGetXYZRotateMtx(rot.x, rot.y, rot.z, mGlobalRot);
|
||||
}
|
||||
void setGlobalAlpha(u8 alpha) { mGlobalPrmClr.a = alpha; }
|
||||
u8 getGlobalAlpha() { return mGlobalPrmClr.a; }
|
||||
void getGlobalPrmColor(GXColor& color) { 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; }
|
||||
void setLifeTime(s16 lifetime) { mLifeTime = lifetime; }
|
||||
|
||||
void setGlobalParticleScale(const JGeometry::TVec3<f32>& scale) {
|
||||
mGlobalPScl.set(scale.x, scale.y);
|
||||
}
|
||||
void getGlobalParticleScale(JGeometry::TVec3<f32>& scale) {
|
||||
scale.set(mGlobalPScl.x, mGlobalPScl.y, 1.0f);
|
||||
}
|
||||
void setGlobalScale(const JGeometry::TVec3<f32>& scale) {
|
||||
mGlobalScl.set(scale);
|
||||
mGlobalPScl.set(scale.x ,scale.y);
|
||||
}
|
||||
|
||||
f32 get_r_f() { return mRndm.get_rndm_f(); }
|
||||
f32 get_r_zp() { return mRndm.get_rndm_zp(); }
|
||||
f32 get_r_zh() { return mRndm.get_rndm_zh(); }
|
||||
s16 get_r_ss() { return mRndm.get_rndm_ss(); }
|
||||
|
||||
void stopCreateParticle() { setStatus(JPAEmtrStts_StopEmit); }
|
||||
void playCreateParticle() { clearStatus(JPAEmtrStts_StopEmit); }
|
||||
void becomeImmortalEmitter() { setStatus(JPAEmtrStts_Immortal); }
|
||||
void becomeContinuousParticle() { mMaxFrame = 0; }
|
||||
void becomeInvalidEmitter() {
|
||||
stopCreateParticle();
|
||||
mMaxFrame = 1;
|
||||
}
|
||||
|
||||
void quitImmortalEmitter() { clearStatus(JPAEmtrStts_Immortal); }
|
||||
void stopCalcEmitter() { setStatus(JPAEmtrStts_StopCalc); }
|
||||
void playCalcEmitter() { clearStatus(JPAEmtrStts_StopCalc); }
|
||||
void stopDrawParticle() { setStatus(JPAEmtrStts_StopDraw); }
|
||||
void playDrawParticle() { clearStatus(JPAEmtrStts_StopDraw); }
|
||||
|
||||
u32 getUserWork() { return mpUserWork; }
|
||||
void setUserWork(u32 userWork) { mpUserWork = userWork; }
|
||||
u32 getParticleNumber() {
|
||||
return mAlivePtclBase.getNum() + mAlivePtclChld.getNum();
|
||||
}
|
||||
bool isEnableDeleteEmitter() {
|
||||
return checkStatus(JPAEmtrStts_EnableDeleteEmitter) && getParticleNumber() == 0;
|
||||
}
|
||||
void setDrawTimes(u8 drawTimes) { mDrawTimes = drawTimes; }
|
||||
void setParticleCallBackPtr(JPAParticleCallBack* cb) { mpPtclCallBack = cb; }
|
||||
JPAParticleCallBack* getParticleCallBackPtr() { return mpPtclCallBack; }
|
||||
JPAEmitterCallBack* getEmitterCallBackPtr() const { return mpEmtrCallBack; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ JGeometry::TVec3<f32> mLocalScl;
|
||||
/* 0x0C */ JGeometry::TVec3<f32> mLocalTrs;
|
||||
/* 0x18 */ JGeometry::TVec3<f32> mLocalDir;
|
||||
/* 0x24 */ s32 mMaxFrame;
|
||||
/* 0x28 */ f32 mRate;
|
||||
/* 0x2C */ f32 mVolumeSweep;
|
||||
/* 0x30 */ f32 mVolumeMinRad;
|
||||
/* 0x34 */ f32 mAwayFromCenterSpeed;
|
||||
/* 0x38 */ f32 mAwayFromAxisSpeed;
|
||||
/* 0x3C */ f32 mDirSpeed;
|
||||
/* 0x40 */ f32 mSpread;
|
||||
/* 0x44 */ f32 mRndmDirSpeed;
|
||||
/* 0x48 */ f32 mAirResist;
|
||||
/* 0x4C */ JGeometry::TVec3<s16> mLocalRot;
|
||||
/* 0x52 */ u16 mLifeTime;
|
||||
/* 0x54 */ u16 mVolumeSize;
|
||||
/* 0x56 */ u8 mRateStep;
|
||||
/* 0x58 */ JSULink<JPABaseEmitter> mLink;
|
||||
/* 0x68 */ Mtx mGlobalRot;
|
||||
/* 0x98 */ JGeometry::TVec3<f32> mGlobalScl;
|
||||
/* 0xA4 */ JGeometry::TVec3<f32> mGlobalTrs;
|
||||
/* 0xB0 */ JGeometry::TVec2<f32> mGlobalPScl;
|
||||
/* 0xB8 */ GXColor mGlobalPrmClr;
|
||||
/* 0xBC */ GXColor mGlobalEnvClr;
|
||||
/* 0xC0 */ s32 mpUserWork;
|
||||
/* 0xC4 */ JPARandom mRndm;
|
||||
/* 0xC8 */ JPAList<JPABaseParticle> mAlivePtclBase;
|
||||
/* 0xD4 */ JPAList<JPABaseParticle> mAlivePtclChld;
|
||||
/* 0xE0 */ JPAList<JPABaseParticle>* mpPtclPool;
|
||||
/* 0xE4 */ JPAEmitterManager* mpEmtrMgr;
|
||||
/* 0xE8 */ JPAResource* mpRes;
|
||||
/* 0xEC */ JPAEmitterCallBack* mpEmtrCallBack;
|
||||
/* 0xF0 */ JPAParticleCallBack* mpPtclCallBack;
|
||||
/* 0xF4 */ volatile u32 mStatus;
|
||||
/* 0xF8 */ f32 mEmitCount;
|
||||
/* 0xFC */ f32 mScaleOut;
|
||||
/* 0x100 */ u32 mTick;
|
||||
/* 0x104 */ s16 mWaitTime;
|
||||
/* 0x106 */ s16 mRateStepTimer;
|
||||
/* 0x108 */ GXColor mPrmClr;
|
||||
/* 0x10C */ GXColor mEnvClr;
|
||||
/* 0x110 */ u8 mDrawTimes;
|
||||
/* 0x111 */ u8 mTexAnmIdx;
|
||||
/* 0x112 */ u8 mGroupID;
|
||||
/* 0x113 */ u8 mResMgrID;
|
||||
};
|
||||
|
||||
enum {
|
||||
JPAPtclStts_Invisible = 0x08,
|
||||
};
|
||||
|
||||
#endif /* JPAEMITTER_H */
|
||||
|
||||
@@ -2,5 +2,44 @@
|
||||
#define JPAEMITTERMANAGER_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
#include "JSystem/JParticle/JPAList.h"
|
||||
#include "JSystem/JParticle/JPADrawInfo.h"
|
||||
#include "JSystem/JSupport/JSUList.h"
|
||||
#include "JSystem/JGeometry.h"
|
||||
|
||||
struct JPAEmitterCallBack;
|
||||
struct JPAParticleCallBack;
|
||||
struct JPABaseEmitter;
|
||||
struct JPAResourceManager;
|
||||
struct JPABaseParticle;
|
||||
struct JKRHeap;
|
||||
struct JPAEmitterWorkData;
|
||||
|
||||
class JPAEmitterManager {
|
||||
public:
|
||||
/* 8027DCA0 */ JPAEmitterManager(u32, u32, JKRHeap*, u8, u8);
|
||||
/* 8027DEBC */ JPABaseEmitter* createSimpleEmitterID(JGeometry::TVec3<f32> const&, u16, u8, u8,
|
||||
JPAEmitterCallBack*, JPAParticleCallBack*);
|
||||
/* 8027DFA0 */ void calc(u8);
|
||||
/* 8027E028 */ void draw(JPADrawInfo const*, u8);
|
||||
/* 8027E220 */ void forceDeleteAllEmitter();
|
||||
/* 8027E278 */ void forceDeleteGroupEmitter(u8);
|
||||
/* 8027E2D8 */ void forceDeleteEmitter(JPABaseEmitter*);
|
||||
/* 8027E344 */ void entryResourceManager(JPAResourceManager*, u8);
|
||||
/* 8027E354 */ void clearResourceManager(u8);
|
||||
/* 8027E3F4 */ void calcYBBCam();
|
||||
JPAResourceManager* getResourceManager(u16 idx) { return mpResMgrAry[idx]; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ JSUList<JPABaseEmitter>* mpGrpEmtr;
|
||||
/* 0x04 */ JSUList<JPABaseEmitter> mFreeEmtrList;
|
||||
/* 0x10 */ JPAList<JPABaseParticle> mPtclPool;
|
||||
/* 0x1C */ JPAResourceManager** mpResMgrAry;
|
||||
/* 0x20 */ JPAEmitterWorkData* mpWorkData;
|
||||
/* 0x24 */ u32 mEmtrMax;
|
||||
/* 0x28 */ u32 mPtclMax;
|
||||
/* 0x2C */ u8 mGrpMax;
|
||||
/* 0x2D */ u8 mResMax;
|
||||
};
|
||||
|
||||
#endif /* JPAEMITTERMANAGER_H */
|
||||
|
||||
@@ -0,0 +1,99 @@
|
||||
#ifndef JPALIST_H
|
||||
#define JPALIST_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
template <class T>
|
||||
struct JPANode {
|
||||
JPANode() {
|
||||
mpPrev = NULL;
|
||||
mpNext = NULL;
|
||||
}
|
||||
~JPANode() {}
|
||||
JPANode<T>* mpPrev;
|
||||
JPANode<T>* mpNext;
|
||||
T mData;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct JPAList {
|
||||
JPANode<T>* mpFirst;
|
||||
JPANode<T>* mpLast;
|
||||
u32 mNum;
|
||||
|
||||
JPAList() : mpFirst(NULL), mpLast(NULL), mNum() {}
|
||||
|
||||
JPANode<T>* getFirst() const { return mpFirst; }
|
||||
JPANode<T>* getLast() const { return mpLast; }
|
||||
u32 getNum() const { return mNum; }
|
||||
|
||||
void push_front(JPANode<T>* node) {
|
||||
if (mpFirst != NULL) {
|
||||
node->mpPrev = NULL;
|
||||
node->mpNext = mpFirst;
|
||||
mpFirst->mpPrev = node;
|
||||
mpFirst = node;
|
||||
} else {
|
||||
mpLast = node;
|
||||
mpFirst = node;
|
||||
node->mpPrev = NULL;
|
||||
node->mpNext = NULL;
|
||||
}
|
||||
|
||||
mNum++;
|
||||
}
|
||||
|
||||
void push_back(JPANode<T>* node) {
|
||||
if (mpLast != NULL) {
|
||||
node->mpPrev = mpLast;
|
||||
node->mpNext = NULL;
|
||||
mpLast->mpNext = node;
|
||||
mpLast = node;
|
||||
} else {
|
||||
mpFirst = node;
|
||||
mpLast = node;
|
||||
node->mpPrev = NULL;
|
||||
node->mpNext = NULL;
|
||||
}
|
||||
|
||||
mNum++;
|
||||
}
|
||||
|
||||
JPANode<T>* pop_front() {
|
||||
JPANode<T>* ret = NULL;
|
||||
|
||||
if (mNum == 1) {
|
||||
ret = mpFirst;
|
||||
mpLast = NULL;
|
||||
mpFirst = NULL;
|
||||
mNum--;
|
||||
} else if (mNum) {
|
||||
ret = mpFirst;
|
||||
ret->mpNext->mpPrev = NULL;
|
||||
mpFirst = ret->mpNext;
|
||||
mNum--;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
JPANode<T>* pop_back() {
|
||||
JPANode<T>* ret = NULL;
|
||||
|
||||
if (mNum == 1) {
|
||||
ret = mpLast;
|
||||
mpLast = NULL;
|
||||
mpFirst = NULL;
|
||||
mNum--;
|
||||
} else if (mNum) {
|
||||
ret = mpLast;
|
||||
ret->mpPrev->mpNext = NULL;
|
||||
mpLast = ret->mpPrev;
|
||||
mNum--;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -1,351 +1,22 @@
|
||||
#ifndef JPAPARTICLE_H
|
||||
#define JPAPARTICLE_H
|
||||
|
||||
#include "dolphin/gx/GXEnum.h"
|
||||
#include "dolphin/gx/GXStruct.h"
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
#include "JSystem/JGeometry.h"
|
||||
#include "JSystem/JSupport/JSUList.h"
|
||||
|
||||
#include "JSystem/JParticle/JPADynamicsBlock.h"
|
||||
#include "JSystem/JParticle/JPAResource.h"
|
||||
#include "JSystem/JParticle/JPAMath.h"
|
||||
#include "JSystem/JParticle/JPAList.h"
|
||||
|
||||
class JKRHeap;
|
||||
class JPABaseEmitter;
|
||||
class JPABaseParticle;
|
||||
class JPADrawInfo;
|
||||
class JPAEmitterCallBack;
|
||||
class JPAEmitterManager;
|
||||
class JPAParticleCallBack;
|
||||
class JPAResource;
|
||||
class JPAResourceManager;
|
||||
|
||||
class JPADrawInfo {
|
||||
public:
|
||||
JPADrawInfo(Mtx param_0, f32 fovY, f32 aspect) {
|
||||
PSMTXCopy(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) {
|
||||
PSMTXCopy(param_0, mCamMtx);
|
||||
C_MTXLightOrtho(mPrjMtx, top, bottom, left, right, 0.5f, 0.5f, 0.5f, 0.5f);
|
||||
}
|
||||
|
||||
Mtx mCamMtx;
|
||||
Mtx mPrjMtx;
|
||||
|
||||
void getCamMtx(Mtx* dst) const { PSMTXCopy(mCamMtx, *dst); }
|
||||
void getPrjMtx(Mtx* dst) const { PSMTXCopy(mPrjMtx, *dst); }
|
||||
};
|
||||
|
||||
struct JPARandom {
|
||||
public:
|
||||
JPARandom() { mSeed = 0; }
|
||||
void set_seed(u32 seed) { mSeed = seed; }
|
||||
|
||||
u32 get_rndm_u() { return mSeed = mSeed * 0x19660du + 0x3c6ef35fu; }
|
||||
|
||||
f32 get_rndm_f() {
|
||||
union {
|
||||
u32 u;
|
||||
f32 f;
|
||||
} a;
|
||||
a.u = ((get_rndm_u() >> 9) | 0x3f800000);
|
||||
return a.f - 1.0f;
|
||||
}
|
||||
|
||||
f32 get_rndm_zp() {
|
||||
f32 f = get_rndm_f();
|
||||
return (f + f) - 1.0f;
|
||||
}
|
||||
|
||||
f32 get_rndm_zh() {
|
||||
f32 f = get_rndm_f();
|
||||
return f - 0.5f;
|
||||
}
|
||||
|
||||
s16 get_rndm_ss() { return (s16)(get_rndm_u() >> 16); }
|
||||
|
||||
public:
|
||||
u32 mSeed;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct JPANode {
|
||||
JPANode() {
|
||||
mpPrev = NULL;
|
||||
mpNext = NULL;
|
||||
}
|
||||
~JPANode() {}
|
||||
JPANode<T>* mpPrev;
|
||||
JPANode<T>* mpNext;
|
||||
T mData;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct JPAList {
|
||||
JPANode<T>* mpFirst;
|
||||
JPANode<T>* mpLast;
|
||||
u32 mNum;
|
||||
|
||||
JPAList() : mpFirst(NULL), mpLast(NULL), mNum() {}
|
||||
|
||||
JPANode<T>* getFirst() const { return mpFirst; }
|
||||
JPANode<T>* getLast() const { return mpLast; }
|
||||
u32 getNum() const { return mNum; }
|
||||
|
||||
void push_front(JPANode<T>* node) {
|
||||
if (mpFirst != NULL) {
|
||||
node->mpPrev = NULL;
|
||||
node->mpNext = mpFirst;
|
||||
mpFirst->mpPrev = node;
|
||||
mpFirst = node;
|
||||
} else {
|
||||
mpLast = node;
|
||||
mpFirst = node;
|
||||
node->mpPrev = NULL;
|
||||
node->mpNext = NULL;
|
||||
}
|
||||
|
||||
mNum++;
|
||||
}
|
||||
|
||||
void push_back(JPANode<T>* node) {
|
||||
if (mpLast != NULL) {
|
||||
node->mpPrev = mpLast;
|
||||
node->mpNext = NULL;
|
||||
mpLast->mpNext = node;
|
||||
mpLast = node;
|
||||
} else {
|
||||
mpFirst = node;
|
||||
mpLast = node;
|
||||
node->mpPrev = NULL;
|
||||
node->mpNext = NULL;
|
||||
}
|
||||
|
||||
mNum++;
|
||||
}
|
||||
|
||||
JPANode<T>* pop_front() {
|
||||
JPANode<T>* ret = NULL;
|
||||
|
||||
if (mNum == 1) {
|
||||
ret = mpFirst;
|
||||
mpLast = NULL;
|
||||
mpFirst = NULL;
|
||||
mNum--;
|
||||
} else if (mNum) {
|
||||
ret = mpFirst;
|
||||
ret->mpNext->mpPrev = NULL;
|
||||
mpFirst = ret->mpNext;
|
||||
mNum--;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
JPANode<T>* pop_back() {
|
||||
JPANode<T>* ret = NULL;
|
||||
|
||||
if (mNum == 1) {
|
||||
ret = mpLast;
|
||||
mpLast = NULL;
|
||||
mpFirst = NULL;
|
||||
mNum--;
|
||||
} else if (mNum) {
|
||||
ret = mpLast;
|
||||
ret->mpPrev->mpNext = NULL;
|
||||
mpLast = ret->mpPrev;
|
||||
mNum--;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
};
|
||||
|
||||
struct JPAEmitterWorkData {
|
||||
/* 0x00 */ JPABaseEmitter* mpEmtr;
|
||||
/* 0x04 */ JPAResource* mpRes;
|
||||
/* 0x08 */ JPAResourceManager* mpResMgr;
|
||||
/* 0x0C */ JPARandom mRndm;
|
||||
/* 0x10 */ JGeometry::TVec3<f32> mVolumePos;
|
||||
/* 0x1C */ JGeometry::TVec3<f32> mVelOmni;
|
||||
/* 0x28 */ JGeometry::TVec3<f32> mVelAxis;
|
||||
/* 0x34 */ f32 mVolumeSize;
|
||||
/* 0x38 */ f32 mVolumeMinRad;
|
||||
/* 0x3C */ f32 mVolumeSweep;
|
||||
/* 0x40 */ s32 mEmitCount;
|
||||
/* 0x44 */ s32 mVolumeEmitIdx;
|
||||
/* 0x48 */ Mtx mDirectionMtx;
|
||||
/* 0x78 */ Mtx mRotationMtx;
|
||||
/* 0xA8 */ Mtx mGlobalRot;
|
||||
/* 0xD8 */ Mtx mGlobalSR;
|
||||
/* 0x108 */ JGeometry::TVec3<f32> mEmitterPos;
|
||||
/* 0x114 */ JGeometry::TVec3<f32> mGlobalScl;
|
||||
/* 0x120 */ JGeometry::TVec3<f32> mGlobalEmtrDir;
|
||||
/* 0x12C */ JGeometry::TVec3<f32> mPublicScale;
|
||||
/* 0x138 */ JGeometry::TVec3<f32> mGlobalPos;
|
||||
/* 0x144 */ JGeometry::TVec2<f32> mGlobalPtclScl;
|
||||
/* 0x14C */ JGeometry::TVec2<f32> mPivot;
|
||||
/* 0x154 */ Mtx mYBBCamMtx;
|
||||
/* 0x184 */ Mtx mPosCamMtx;
|
||||
/* 0x1B4 */ Mtx mPrjMtx;
|
||||
/* 0x1E4 */ JPAList<JPABaseParticle>* mpAlivePtcl;
|
||||
/* 0x1E8 */ JPANode<JPABaseParticle>* mpCurNode;
|
||||
/* 0x1EC */ u32 mVolumeAngleNum;
|
||||
/* 0x1F0 */ u32 mVolumeAngleMax;
|
||||
/* 0x1F4 */ u32 mVolumeX;
|
||||
/* 0x1F8 */ u32 mDivNumber;
|
||||
/* 0x1FC */ f32 mScaleAnm;
|
||||
/* 0x200 */ u32 mDirType;
|
||||
/* 0x204 */ u32 mRotType;
|
||||
/* 0x208 */ u32 mPlaneType;
|
||||
/* 0x20C */ u32 mDLType;
|
||||
/* 0x210 */ u32 mPrjType;
|
||||
/* 0x214 */ s16 mClrKeyFrame;
|
||||
/* 0x216 */ u8 mDrawCount;
|
||||
};
|
||||
|
||||
class JPAEmitterCallBack {
|
||||
public:
|
||||
/* 80050368 */ virtual void execute(JPABaseEmitter*);
|
||||
/* 80050374 */ virtual void executeAfter(JPABaseEmitter*);
|
||||
/* 8005036C */ virtual void draw(JPABaseEmitter*);
|
||||
/* 80050370 */ virtual void drawAfter(JPABaseEmitter*);
|
||||
|
||||
/* 8027E6A4 */ ~JPAEmitterCallBack();
|
||||
};
|
||||
|
||||
enum {
|
||||
JPAEmtrStts_StopEmit = 0x01,
|
||||
JPAEmtrStts_StopCalc = 0x02,
|
||||
JPAEmtrStts_StopDraw = 0x04,
|
||||
JPAEmtrStts_FirstEmit = 0x10,
|
||||
JPAEmtrStts_RateStepEmit = 0x20,
|
||||
JPAEmtrStts_Immortal = 0x40,
|
||||
};
|
||||
|
||||
class JPABaseEmitter {
|
||||
public:
|
||||
/* 8027E5EC */ ~JPABaseEmitter();
|
||||
/* 8027E64C */ JPABaseEmitter();
|
||||
/* 8027E6EC */ void init(JPAEmitterManager*, JPAResource*);
|
||||
/* 8027EDD4 */ bool processTillStartFrame();
|
||||
/* 8027EE14 */ void processTermination();
|
||||
/* 8027EEB0 */ void calcEmitterGlobalPosition(JGeometry::TVec3<f32>*) const;
|
||||
/* 8027EC60 */ void deleteAllParticle();
|
||||
/* 8027EB60 */ JPABaseParticle* createChild(JPABaseParticle*);
|
||||
/* 8027EA40 */ JPABaseParticle* createParticle();
|
||||
/* 8027EF30 */ u32 getCurrentCreateNumber() const;
|
||||
/* 8027EF40 */ u8 getDrawCount() const;
|
||||
/* 8027EF50 */ bool loadTexture(u8, GXTexMapID);
|
||||
|
||||
void setStatus(u32 status) { mStatus |= status; }
|
||||
void clearStatus(u32 status) { mStatus &= ~status; }
|
||||
bool checkStatus(u32 status) { return !!(mStatus & status); }
|
||||
bool checkFlag(u32 flag) { return !!(mpRes->getDyn()->getFlag() & flag); }
|
||||
u8 getResourceManagerID() const { return mResMgrID; }
|
||||
u8 getGroupID() const { return mGroupID; }
|
||||
u8 getDrawTimes() const { return mDrawTimes; }
|
||||
void setRate(f32 rate) { mRate = rate; }
|
||||
void setEmitterCallBackPtr(JPAEmitterCallBack* ptr) { mpEmtrCallBack = ptr; }
|
||||
void setGlobalRTMatrix(const Mtx m) { JPASetRMtxTVecfromMtx(m, mGlobalRot, &mGlobalTrs); }
|
||||
void setGlobalTranslation(f32 x, f32 y, f32 z) { mGlobalTrs.set(x, y, z); }
|
||||
void setGlobalAlpha(u8 alpha) { mGlobalPrmClr.a = alpha; }
|
||||
void setVolumeSize(u16 size) { mVolumeSize = size; }
|
||||
void setLifeTime(s16 lifetime) { mLifeTime = lifetime; }
|
||||
|
||||
void setGlobalParticleScale(const JGeometry::TVec3<f32>& scale) {
|
||||
mGlobalPScl.set(scale.x, scale.y);
|
||||
}
|
||||
|
||||
// void setGlobalScale(const JGeometry::TVec3<f32>& scale) {
|
||||
// mGlobalScl = scale;
|
||||
// mGlobalPScl = scale;
|
||||
// }
|
||||
|
||||
f32 get_r_f() { return mRndm.get_rndm_f(); }
|
||||
f32 get_r_zp() { return mRndm.get_rndm_zp(); }
|
||||
f32 get_r_zh() { return mRndm.get_rndm_zh(); }
|
||||
s16 get_r_ss() { return mRndm.get_rndm_ss(); }
|
||||
|
||||
void stopCreateParticle() { setStatus(JPAEmtrStts_StopEmit); }
|
||||
void becomeImmortalEmitter() { setStatus(JPAEmtrStts_Immortal); }
|
||||
void becomeContinuousParticle() { mMaxFrame = 0; }
|
||||
void becomeInvalidEmitter() {
|
||||
stopCreateParticle();
|
||||
mMaxFrame = 1;
|
||||
}
|
||||
|
||||
void quitImmortalEmitter() { clearStatus(JPAEmtrStts_Immortal); }
|
||||
void stopCalcEmitter() { setStatus(JPAEmtrStts_StopCalc); }
|
||||
void playCalcEmitter() { clearStatus(JPAEmtrStts_StopCalc); }
|
||||
void stopDrawParticle() { setStatus(JPAEmtrStts_StopDraw); }
|
||||
|
||||
void* getUserWork() { return mpUserWork; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ Vec mLocalScl;
|
||||
/* 0x0C */ Vec mLocalTrs;
|
||||
/* 0x18 */ Vec mLocalDir;
|
||||
/* 0x24 */ s32 mMaxFrame;
|
||||
/* 0x28 */ f32 mRate;
|
||||
/* 0x2C */ f32 mVolumeSweep;
|
||||
/* 0x30 */ f32 mVolumeMinRad;
|
||||
/* 0x34 */ f32 mAwayFromCenterSpeed;
|
||||
/* 0x38 */ f32 mAwayFromAxisSpeed;
|
||||
/* 0x3C */ f32 mDirSpeed;
|
||||
/* 0x40 */ f32 mSpread;
|
||||
/* 0x44 */ f32 mRndmDirSpeed;
|
||||
/* 0x48 */ f32 mAirResist;
|
||||
/* 0x4C */ JGeometry::TVec3<s16> mLocalRot;
|
||||
/* 0x52 */ u16 mLifeTime;
|
||||
/* 0x54 */ u16 mVolumeSize;
|
||||
/* 0x56 */ u8 mRateStep;
|
||||
/* 0x58 */ JSULink<JPABaseEmitter> mLink;
|
||||
/* 0x68 */ Mtx mGlobalRot;
|
||||
/* 0x98 */ Vec mGlobalScl;
|
||||
/* 0xA4 */ JGeometry::TVec3<f32> mGlobalTrs;
|
||||
/* 0xB0 */ JGeometry::TVec2<f32> mGlobalPScl;
|
||||
/* 0xB8 */ GXColor mGlobalPrmClr;
|
||||
/* 0xBC */ GXColor mGlobalEnvClr;
|
||||
/* 0xC0 */ void* mpUserWork;
|
||||
/* 0xC4 */ JPARandom mRndm;
|
||||
/* 0xC8 */ JPAList<JPABaseParticle> mAlivePtclBase;
|
||||
/* 0xD4 */ JPAList<JPABaseParticle> mAlivePtclChld;
|
||||
/* 0xE0 */ JPAList<JPABaseParticle>* mpPtclPool;
|
||||
/* 0xE4 */ JPAEmitterManager* mpEmtrMgr;
|
||||
/* 0xE8 */ JPAResource* mpRes;
|
||||
/* 0xEC */ JPAEmitterCallBack* mpEmtrCallBack;
|
||||
/* 0xF0 */ JPAParticleCallBack* mpPtclCallBack;
|
||||
/* 0xF4 */ u32 mStatus;
|
||||
/* 0xF8 */ f32 mEmitCount;
|
||||
/* 0xFC */ f32 mScaleOut;
|
||||
/* 0x100 */ u32 mTick;
|
||||
/* 0x104 */ s16 mWaitTime;
|
||||
/* 0x106 */ s16 mRateStepTimer;
|
||||
/* 0x108 */ GXColor mPrmClr;
|
||||
/* 0x10C */ GXColor mEnvClr;
|
||||
/* 0x110 */ u8 mDrawTimes;
|
||||
/* 0x111 */ u8 mTexAnmIdx;
|
||||
/* 0x112 */ u8 mGroupID;
|
||||
/* 0x113 */ u8 mResMgrID;
|
||||
};
|
||||
|
||||
class JPAParticleCallBack {
|
||||
public:
|
||||
JPAParticleCallBack() {}
|
||||
virtual ~JPAParticleCallBack();
|
||||
virtual void execute(JPABaseEmitter*, JPABaseParticle*);
|
||||
virtual void draw(JPABaseEmitter*, JPABaseParticle*);
|
||||
};
|
||||
|
||||
enum {
|
||||
JPAPtclStts_Invisible = 0x08,
|
||||
};
|
||||
struct JPAEmitterWorkData;
|
||||
|
||||
class JPABaseParticle {
|
||||
public:
|
||||
@@ -358,10 +29,18 @@ public:
|
||||
/* 80280568 */ f32 getHeight(JPABaseEmitter const*) const;
|
||||
int getAge() { return mAge; }
|
||||
void setOffsetPosition(const JGeometry::TVec3<f32>& pos) { mOffsetPosition.set(pos); }
|
||||
void setOffsetPosition(f32 x, f32 y, f32 z) { mOffsetPosition.set(x, y, z); }
|
||||
void getOffsetPosition(JGeometry::TVec3<f32>& pos) { pos.set(mOffsetPosition); }
|
||||
u16 getRotateAngle() const { return mRotateAngle; }
|
||||
void getGlobalPosition(JGeometry::TVec3<f32>& pos) { pos.set(mPosition); }
|
||||
f32 getParticleScaleX() const { return mParticleScaleX; }
|
||||
f32 getParticleScaleY() const { return mParticleScaleY; }
|
||||
void setStatus(u32 flag) { mStatus |= flag; }
|
||||
void setInvisibleParticleFlag() { setStatus(8); }
|
||||
void setDeleteParticleFlag() { setStatus(2); }
|
||||
|
||||
public:
|
||||
/* 0x00 */ Vec mPosition;
|
||||
/* 0x00 */ JGeometry::TVec3<f32> mPosition;
|
||||
/* 0x0C */ Vec mLocalPosition;
|
||||
/* 0x18 */ JGeometry::TVec3<f32> mOffsetPosition;
|
||||
/* 0x24 */ Vec mVelocity;
|
||||
@@ -389,30 +68,12 @@ public:
|
||||
/* 0x96 */ u8 mPrmColorAlphaAnm;
|
||||
};
|
||||
|
||||
class JPAEmitterManager {
|
||||
class JPAParticleCallBack {
|
||||
public:
|
||||
/* 8027DCA0 */ JPAEmitterManager(u32, u32, JKRHeap*, u8, u8);
|
||||
/* 8027DEBC */ JPABaseEmitter* createSimpleEmitterID(JGeometry::TVec3<f32> const&, u16, u8, u8,
|
||||
JPAEmitterCallBack*, JPAParticleCallBack*);
|
||||
/* 8027DFA0 */ void calc(u8);
|
||||
/* 8027E028 */ void draw(JPADrawInfo const*, u8);
|
||||
/* 8027E220 */ void forceDeleteAllEmitter();
|
||||
/* 8027E278 */ void forceDeleteGroupEmitter(u8);
|
||||
/* 8027E2D8 */ void forceDeleteEmitter(JPABaseEmitter*);
|
||||
/* 8027E344 */ void entryResourceManager(JPAResourceManager*, u8);
|
||||
/* 8027E354 */ void clearResourceManager(u8);
|
||||
/* 8027E3F4 */ void calcYBBCam();
|
||||
|
||||
public:
|
||||
/* 0x00 */ JSUList<JPABaseEmitter>* mpGrpEmtr;
|
||||
/* 0x04 */ JSUList<JPABaseEmitter> mFreeEmtrList;
|
||||
/* 0x10 */ JPAList<JPABaseParticle> mPtclPool;
|
||||
/* 0x1C */ JPAResourceManager** mpResMgrAry;
|
||||
/* 0x20 */ JPAEmitterWorkData* mpWorkData;
|
||||
/* 0x24 */ u32 mEmtrMax;
|
||||
/* 0x28 */ u32 mPtclMax;
|
||||
/* 0x2C */ u8 mGrpMax;
|
||||
/* 0x2D */ u8 mResMax;
|
||||
JPAParticleCallBack() {}
|
||||
virtual ~JPAParticleCallBack();
|
||||
virtual void execute(JPABaseEmitter*, JPABaseParticle*);
|
||||
virtual void draw(JPABaseEmitter*, JPABaseParticle*);
|
||||
};
|
||||
|
||||
// not sure where this belongs
|
||||
|
||||
@@ -0,0 +1,38 @@
|
||||
#ifndef JPARANDOM_H
|
||||
#define JPARANDOM_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
struct JPARandom {
|
||||
public:
|
||||
JPARandom() { mSeed = 0; }
|
||||
void set_seed(u32 seed) { mSeed = seed; }
|
||||
|
||||
u32 get_rndm_u() { return mSeed = mSeed * 0x19660du + 0x3c6ef35fu; }
|
||||
|
||||
f32 get_rndm_f() {
|
||||
union {
|
||||
u32 u;
|
||||
f32 f;
|
||||
} a;
|
||||
a.u = ((get_rndm_u() >> 9) | 0x3f800000);
|
||||
return a.f - 1.0f;
|
||||
}
|
||||
|
||||
f32 get_rndm_zp() {
|
||||
f32 f = get_rndm_f();
|
||||
return (f + f) - 1.0f;
|
||||
}
|
||||
|
||||
f32 get_rndm_zh() {
|
||||
f32 f = get_rndm_f();
|
||||
return f - 0.5f;
|
||||
}
|
||||
|
||||
s16 get_rndm_ss() { return (s16)(get_rndm_u() >> 16); }
|
||||
|
||||
public:
|
||||
u32 mSeed;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -793,6 +793,7 @@ public:
|
||||
inline bool checkZoraWearFlg() const;
|
||||
inline bool checkMagicArmorWearFlg() const;
|
||||
inline static BOOL i_checkFirstMidnaDemo() { return i_dComIfGs_isEventBit(0xc10); }
|
||||
static int checkNowWolfPowerUp() { return checkNowWolfEyeUp(); }
|
||||
|
||||
static daMidna_c* getMidnaActor() { return m_midnaActor; }
|
||||
|
||||
|
||||
@@ -195,6 +195,10 @@ struct LightStatus {
|
||||
|
||||
class dKy_tevstr_c {
|
||||
public:
|
||||
// Supposedly exists but didn't work. Might be too big to inline.
|
||||
// See dPa_modelEcallBack::model_c::set.
|
||||
//inline dKy_tevstr_c& operator=(const dKy_tevstr_c& b);
|
||||
|
||||
/* 0x000 */ J3DLightObj mLightObj;
|
||||
/* 0x074 */ J3DLightObj field_0x074[6];
|
||||
/* 0x32C */ cXyz field_0x32c;
|
||||
@@ -573,5 +577,24 @@ void dKy_set_bgcol_ratio(f32 ratio);
|
||||
void dKy_set_fogcol_ratio(f32 ratio);
|
||||
void dKy_set_vrboxcol_ratio(f32 ratio);
|
||||
f32 dKy_get_parcent(f32 param_0, f32 param_1, f32 param_2);
|
||||
void dKy_setLight_nowroom_grass(char param_0, f32 param_1);
|
||||
void dKy_Global_amb_set(dKy_tevstr_c* i_tevstr);
|
||||
u8 dKy_pol_eff_prim_get(cBgS_PolyInfo const* param_0, _GXColor* param_1);
|
||||
void dKy_pol_eff_env_get(cBgS_PolyInfo const* param_0, _GXColor* param_1);
|
||||
u8 dKy_pol_eff_alpha_get(cBgS_PolyInfo const* param_0);
|
||||
f32 dKy_pol_eff_ratio_get(cBgS_PolyInfo const* param_0);
|
||||
void dKy_pol_eff2_prim_get(cBgS_PolyInfo const* param_0, _GXColor* param_1);
|
||||
void dKy_pol_eff2_env_get(cBgS_PolyInfo const* param_0, _GXColor* param_1);
|
||||
u8 dKy_pol_eff2_alpha_get(cBgS_PolyInfo const* param_0);
|
||||
f32 dKy_pol_eff2_ratio_get(cBgS_PolyInfo const* param_0);
|
||||
u8 dKy_pol_efftype_get(cBgS_PolyInfo const* param_0);
|
||||
u8 dKy_pol_efftype2_get(cBgS_PolyInfo const* param_0);
|
||||
void dKy_ParticleColor_get_actor(cXyz* param_0, dKy_tevstr_c* param_1, _GXColor* param_2,
|
||||
_GXColor* param_3, _GXColor* param_4, _GXColor* param_5,
|
||||
f32 param_6);
|
||||
void dKy_ParticleColor_get_bg(cXyz* param_0, dKy_tevstr_c* param_1, _GXColor* param_2,
|
||||
_GXColor* param_3, _GXColor* param_4, _GXColor* param_5,
|
||||
f32 param_6);
|
||||
_GXColor dKy_light_influence_col(_GXColor* param_0, f32 param_1);
|
||||
|
||||
#endif /* D_KANKYO_D_KANKYO_H */
|
||||
|
||||
@@ -28,6 +28,7 @@ void dKyw_evt_wind_set(s16 angleX, s16 angleY);
|
||||
void dKyw_custom_windpower(f32 pow);
|
||||
void dKyw_evt_wind_set_go();
|
||||
void dKyw_wether_proc();
|
||||
void dKyw_get_AllWind_vec(cXyz* param_0, cXyz* param_1, f32* param_2);
|
||||
|
||||
class dKankyo_sun_Packet : public J3DPacket {
|
||||
public:
|
||||
|
||||
@@ -2,10 +2,12 @@
|
||||
#define D_PARTICLE_D_PARTICLE_H
|
||||
|
||||
#include "JSystem/JParticle/JPAParticle.h"
|
||||
#include "JSystem/JParticle/JPAEmitter.h"
|
||||
#include "SSystem/SComponent/c_sxyz.h"
|
||||
#include "SSystem/SComponent/c_xyz.h"
|
||||
#include "dolphin/gx/GXStruct.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "d/kankyo/d_kankyo.h"
|
||||
|
||||
class J3DAnmTexPattern;
|
||||
class J3DModel;
|
||||
@@ -35,32 +37,37 @@ public:
|
||||
private:
|
||||
/* 0x04 */ f32 mRate;
|
||||
/* 0x08 */ int mMaxCnt;
|
||||
/* 0x0C */ cXyz* field_0xc;
|
||||
/* 0x10 */ cXyz* field_0x10;
|
||||
/* 0x14 */ cXyz* field_0x14;
|
||||
/* 0x0C */ cXyz const* field_0xc;
|
||||
/* 0x10 */ cXyz const* field_0x10;
|
||||
/* 0x14 */ cXyz const* field_0x14;
|
||||
};
|
||||
|
||||
class mDoDvdThd_toMainRam_c;
|
||||
class cBgS_PolyInfo;
|
||||
class JPAEmitterManager;
|
||||
struct JPADrawInfo;
|
||||
struct J3DAnmBase;
|
||||
|
||||
class dPa_simpleEcallBack : public JPAEmitterCallBack {
|
||||
public:
|
||||
/* 8004ADF4 */ dPa_simpleEcallBack();
|
||||
/* 8004AF98 */ void create(JPAEmitterManager*, u16, u8);
|
||||
/* 8004B064 */ void createEmitter(JPAEmitterManager*);
|
||||
/* 8004B168 */ void set(cXyz const*, dKy_tevstr_c const*, u8, _GXColor const&, _GXColor const&,
|
||||
/* 8004AF98 */ JPABaseEmitter* create(JPAEmitterManager*, u16, u8);
|
||||
/* 8004B064 */ JPABaseEmitter* createEmitter(JPAEmitterManager*);
|
||||
/* 8004B168 */ u32 set(cXyz const*, dKy_tevstr_c const*, u8, _GXColor const&, _GXColor const&,
|
||||
int, f32);
|
||||
|
||||
/* 8004FC08 */ virtual ~dPa_simpleEcallBack();
|
||||
/* 8004AE1C */ virtual void executeAfter(JPABaseEmitter*);
|
||||
/* 8004AF94 */ virtual void draw(JPABaseEmitter*);
|
||||
|
||||
void removeEmitter() { mEmitter = NULL; }
|
||||
u16 getID() const { return mID; }
|
||||
|
||||
/* 0x04 */ JPABaseEmitter* mEmitter;
|
||||
/* 0x08 */ u16 mID;
|
||||
/* 0x0A */ u8 field_0xa;
|
||||
/* 0x0C */ s16 field_0xc;
|
||||
/* 0x0C */ u16 field_0xe;
|
||||
/* 0x10 */ void* mData;
|
||||
}; // Size: 0x14
|
||||
|
||||
@@ -78,6 +85,9 @@ public:
|
||||
|
||||
void remove() { end(); }
|
||||
JPABaseEmitter* getEmitter() { return mpEmitter; }
|
||||
bool isEnd() {
|
||||
return field_0x10 & 1;
|
||||
}
|
||||
|
||||
/* 0x04 */ JPABaseEmitter* mpEmitter;
|
||||
/* 0x08 */ const cXyz* field_0x8;
|
||||
@@ -137,26 +147,41 @@ public:
|
||||
class dPa_modelEcallBack : public dPa_levelEcallBack {
|
||||
public:
|
||||
struct model_c {
|
||||
/* 8004A608 */ void set(J3DModelData*, dKy_tevstr_c const&, u8, void*, u8, u8);
|
||||
/* 8004A608 */ bool set(J3DModelData*, dKy_tevstr_c const&, u8, void*, u8, u8);
|
||||
/* 8004A7AC */ void setup();
|
||||
/* 8004A88C */ void cleanup();
|
||||
/* 8004A8DC */ void draw(f32 (*)[4]);
|
||||
/* 8004AB88 */ ~model_c();
|
||||
/* 8004FB90 */ model_c();
|
||||
|
||||
void reset() {
|
||||
field_0x0 = 0;
|
||||
}
|
||||
|
||||
u8 getRotAxis() { return mRotAxis; }
|
||||
J3DModelData* getModelData() { return field_0x0; }
|
||||
|
||||
J3DModelData* field_0x0;
|
||||
J3DAnmBase* field_0x4;
|
||||
dKy_tevstr_c field_0x8;
|
||||
u8 mRotAxis;
|
||||
u8 field_0x391;
|
||||
u8 field_0x392;
|
||||
u8 field_0x393;
|
||||
};
|
||||
|
||||
dPa_modelEcallBack() { mModel = NULL; }
|
||||
|
||||
/* 8004AB1C */ void create(u8);
|
||||
/* 8004ABC4 */ void remove();
|
||||
/* 8004AC00 */ static void setModel(JPABaseEmitter*, J3DModelData*, dKy_tevstr_c const&, u8,
|
||||
/* 8004AB1C */ static void create(u8);
|
||||
/* 8004ABC4 */ static void remove();
|
||||
/* 8004AC00 */ static int setModel(JPABaseEmitter*, J3DModelData*, dKy_tevstr_c const&, u8,
|
||||
void*, u8, u8);
|
||||
/* 8004AC90 */ void resetModel(JPABaseEmitter*);
|
||||
/* 8004ACC0 */ void setupModel(JPABaseEmitter*);
|
||||
/* 8004ACEC */ void drawModel(JPABaseEmitter*, f32 (*)[4]);
|
||||
/* 8004AD28 */ void cleanupModel(JPABaseEmitter*);
|
||||
/* 8004AD58 */ void getModel(JPABaseEmitter*);
|
||||
/* 8004AD90 */ void getRotAxis(JPABaseEmitter*);
|
||||
/* 8004AC90 */ static void resetModel(JPABaseEmitter*);
|
||||
/* 8004ACC0 */ static void setupModel(JPABaseEmitter*);
|
||||
/* 8004ACEC */ static void drawModel(JPABaseEmitter*, f32 (*)[4]);
|
||||
/* 8004AD28 */ static void cleanupModel(JPABaseEmitter*);
|
||||
/* 8004AD58 */ static model_c* getModel(JPABaseEmitter*);
|
||||
/* 8004AD90 */ static u8 getRotAxis(JPABaseEmitter*);
|
||||
|
||||
/* 80050378 */ virtual ~dPa_modelEcallBack();
|
||||
/* 8004AA34 */ virtual void draw(JPABaseEmitter*);
|
||||
@@ -169,11 +194,11 @@ public:
|
||||
setModel(param_0, param_1, param_2, param_3, param_4, param_5);
|
||||
}
|
||||
|
||||
// Should be dPa_modelEcallBack
|
||||
static dPa_modelEcallBack* getEcallback() { return mEcallback; }
|
||||
|
||||
static dPa_modelEcallBack* mEcallback;
|
||||
static u8 mPcallback[4];
|
||||
static J3DModel* mModel;
|
||||
static model_c* mModel;
|
||||
};
|
||||
|
||||
class dPa_light8PcallBack : public JPAParticleCallBack {
|
||||
@@ -262,6 +287,8 @@ public:
|
||||
|
||||
void offActive() { mStatus &= ~1; }
|
||||
bool isActive() { return mStatus & 1; }
|
||||
u16 getNameId() { return mNameId; }
|
||||
dPa_levelEcallBack* getCallback() { return mCallback; }
|
||||
|
||||
private:
|
||||
/* 0x00 */ u32 mId;
|
||||
@@ -296,12 +323,12 @@ public:
|
||||
}; // Size: 0x1008
|
||||
|
||||
/* 8004BACC */ dPa_control_c();
|
||||
/* 8004BB70 */ static bool getRM_ID(u16);
|
||||
/* 8004BB70 */ static u8 getRM_ID(u16);
|
||||
/* 8004BB78 */ void createCommon(void const*);
|
||||
/* 8004BCDC */ void createRoomScene();
|
||||
/* 8004BDFC */ void readScene(u8, mDoDvdThd_toMainRam_c**);
|
||||
/* 8004BDFC */ bool readScene(u8, mDoDvdThd_toMainRam_c**);
|
||||
/* 8004BEB0 */ void createScene(void const*);
|
||||
/* 8004BF3C */ void removeRoomScene(bool);
|
||||
/* 8004BF3C */ bool removeRoomScene(bool);
|
||||
/* 8004BFD4 */ void removeScene(bool);
|
||||
/* 8004C054 */ void cleanup();
|
||||
/* 8004C078 */ void calc3D();
|
||||
@@ -317,21 +344,21 @@ public:
|
||||
/* 8004D4CC */ u32 set(u32, u8, u16, cXyz const*, dKy_tevstr_c const*, csXyz const*,
|
||||
cXyz const*, u8, dPa_levelEcallBack*, s8, _GXColor const*,
|
||||
_GXColor const*, cXyz const*, f32);
|
||||
/* 8004CF90 */ void getPolyColor(cBgS_PolyInfo&, int, _GXColor*, _GXColor*, u8*, f32*);
|
||||
/* 8004CF90 */ static s32 getPolyColor(cBgS_PolyInfo&, int, _GXColor*, _GXColor*, u8*, f32*);
|
||||
/* 8004D6A4 */ u32 setPoly(u32, u16, cBgS_PolyInfo&, cXyz const*, dKy_tevstr_c const*,
|
||||
csXyz const*, cXyz const*, int, dPa_levelEcallBack*, s8,
|
||||
cXyz const*);
|
||||
/* 8004D068 */ void setPoly(u16, cBgS_PolyInfo&, cXyz const*, dKy_tevstr_c const*, csXyz const*,
|
||||
/* 8004D068 */ JPABaseEmitter* setPoly(u16, cBgS_PolyInfo&, cXyz const*, dKy_tevstr_c const*, csXyz const*,
|
||||
cXyz const*, int, dPa_levelEcallBack*, s8, cXyz const*);
|
||||
/* 8004D128 */ void newSimple(u16, u8, u32*);
|
||||
/* 8004D1B8 */ void setSimple(u16, cXyz const*, dKy_tevstr_c const*, u8, _GXColor const&,
|
||||
/* 8004D128 */ bool newSimple(u16, u8, u32*);
|
||||
/* 8004D1B8 */ u32 setSimple(u16, cXyz const*, dKy_tevstr_c const*, u8, _GXColor const&,
|
||||
_GXColor const&, int, f32);
|
||||
/* 8004D23C */ void getSimple(u16);
|
||||
/* 8004D770 */ void setStopContinue(u32);
|
||||
/* 8004D23C */ dPa_simpleEcallBack* getSimple(u16);
|
||||
/* 8004D770 */ u32 setStopContinue(u32);
|
||||
/* 8004D7C4 */ u32 setSimpleFoot(u32, u32*, cBgS_PolyInfo&, cXyz const*, dKy_tevstr_c const*,
|
||||
int, csXyz const*, cXyz const*, dPa_levelEcallBack*, s8,
|
||||
cXyz const*);
|
||||
/* 8004D988 */ void setCommonPoly(u32*, cBgS_PolyInfo*, cXyz const*, cXyz const*,
|
||||
/* 8004D988 */ u16 setCommonPoly(u32*, cBgS_PolyInfo*, cXyz const*, cXyz const*,
|
||||
dKy_tevstr_c const*, u32, u32, csXyz const*, cXyz const*, s8);
|
||||
|
||||
void forceOnEventMove(u32 param_0) { field_0x210.forceOnEventMove(param_0); }
|
||||
@@ -386,6 +413,38 @@ public:
|
||||
}
|
||||
|
||||
static JPAEmitterManager* getEmitterManager() { return mEmitterMng; }
|
||||
static JPAParticleCallBack* getLight8PcallBack() {
|
||||
return (JPAParticleCallBack*)mLight8PcallBack;
|
||||
//return &mLight8PcallBack;
|
||||
}
|
||||
static JPAParticleCallBack* getGen_b_Light8PcallBack() {
|
||||
return (JPAParticleCallBack*)m_b_Light8PcallBack;
|
||||
//return &m_b_Light8PcallBack;
|
||||
}
|
||||
static JPAParticleCallBack* getGen_d_Light8PcallBack() {
|
||||
return (JPAParticleCallBack*)m_d_Light8PcallBack;
|
||||
//return &m_d_Light8PcallBack;
|
||||
}
|
||||
static dPa_gen_b_light8EcallBack* getGen_b_Light8EcallBack() {
|
||||
return (dPa_gen_b_light8EcallBack*)m_b_Light8EcallBack;
|
||||
//return &m_b_Light8EcallBack;
|
||||
}
|
||||
static dPa_gen_d_light8EcallBack* getGen_d_Light8EcallBack() {
|
||||
return (dPa_gen_d_light8EcallBack*)m_d_Light8EcallBack;
|
||||
//return &m_d_Light8PcallBack;
|
||||
}
|
||||
static dPa_light8EcallBack* getLight8EcallBack() {
|
||||
return (dPa_light8EcallBack*)mLight8EcallBack;
|
||||
//return &mLight8EcallBack;
|
||||
}
|
||||
static JPAParticleCallBack* getParticleTracePCB() {
|
||||
return (JPAParticleCallBack*)mParticleTracePCB;
|
||||
//return &mParticleTracePCB;
|
||||
}
|
||||
static JPAParticleCallBack* getFsenthPcallBack() {
|
||||
return (JPAParticleCallBack*)mFsenthPcallBack;
|
||||
//return &mFsenthPcallBack;
|
||||
}
|
||||
|
||||
static u8 mTsubo[64];
|
||||
static u8 mLifeBall[24];
|
||||
@@ -411,6 +470,8 @@ private:
|
||||
/* 0x014 */ JPAResourceManager* mSceneResMng;
|
||||
/* 0x018 */ u8 field_0x18;
|
||||
/* 0x019 */ u8 field_0x19;
|
||||
/* 0x01A */ u8 field_0x1a;
|
||||
/* 0x01B */ u8 field_0x1b;
|
||||
/* 0x01C */ dPa_simpleEcallBack field_0x1c[25];
|
||||
/* 0x210 */ level_c field_0x210;
|
||||
};
|
||||
|
||||
@@ -54,15 +54,16 @@ inline void C_VECAdd(register const Vec* a, register const Vec* b, register Vec*
|
||||
inline f32 C_VECSquareMag(const Vec* v) {
|
||||
register f32 x_y;
|
||||
register f32 z;
|
||||
register f32 res;
|
||||
register const f32* src = &v->x;
|
||||
asm {
|
||||
psq_l x_y, 0(src), 0, 0
|
||||
ps_mul x_y, x_y, x_y
|
||||
lfs z, 8(src)
|
||||
ps_madd z, z, z, x_y
|
||||
ps_sum0 z, z, x_y, x_y
|
||||
ps_madd res, z, z, x_y
|
||||
ps_sum0 res, res, x_y, x_y
|
||||
};
|
||||
return z;
|
||||
return res;
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -568,6 +568,7 @@ JKRSolidHeap* mDoExt_createSolidHeapToCurrent(u32 i_size, JKRHeap* i_parent, u32
|
||||
JKRSolidHeap* mDoExt_createSolidHeapFromGameToCurrent(u32 i_size, u32 i_alignment);
|
||||
JKRSolidHeap* mDoExt_createSolidHeapFromGameToCurrent(JKRHeap** o_heap, u32 i_size,
|
||||
u32 i_alignment);
|
||||
JKRSolidHeap* mDoExt_createSolidHeapFromSystem(u32 i_size, u32 i_alignment);
|
||||
u32 mDoExt_adjustSolidHeapToSystem(JKRSolidHeap* i_heap);
|
||||
JKRHeap* mDoExt_getCurrentHeap();
|
||||
void mDoExt_removeMesgFont();
|
||||
|
||||
Reference in New Issue
Block a user