mirror of
https://github.com/zeldaret/tww.git
synced 2026-08-13 20:15:02 -04:00
d_drawlist, d_particle, f_op_actor_mng, JPA work
This commit is contained in:
@@ -58,7 +58,24 @@ struct J3DTexMtxInfo {
|
||||
mInfo = other.mInfo;
|
||||
mSRT = other.mSRT;
|
||||
}
|
||||
void setEffectMtx(Mtx);
|
||||
void setEffectMtx(Mtx m) {
|
||||
mEffectMtx[0][0] = m[0][0];
|
||||
mEffectMtx[0][1] = m[0][1];
|
||||
mEffectMtx[0][2] = m[0][2];
|
||||
mEffectMtx[0][3] = m[0][3];
|
||||
mEffectMtx[1][0] = m[1][0];
|
||||
mEffectMtx[1][1] = m[1][1];
|
||||
mEffectMtx[1][2] = m[1][2];
|
||||
mEffectMtx[1][3] = m[1][3];
|
||||
mEffectMtx[2][0] = m[2][0];
|
||||
mEffectMtx[2][1] = m[2][1];
|
||||
mEffectMtx[2][2] = m[2][2];
|
||||
mEffectMtx[2][3] = m[2][3];
|
||||
mEffectMtx[3][2] = 0.0f;
|
||||
mEffectMtx[3][1] = 0.0f;
|
||||
mEffectMtx[3][0] = 0.0f;
|
||||
mEffectMtx[3][3] = 1.0f;
|
||||
}
|
||||
|
||||
/* 0x00 */ u8 mProjection;
|
||||
/* 0x01 */ u8 mInfo;
|
||||
|
||||
@@ -34,7 +34,7 @@ class JPADrawContext {
|
||||
class JPADraw {
|
||||
public:
|
||||
enum JPADrawVisitorDefFlags {};
|
||||
|
||||
|
||||
void initialize(JPABaseEmitter*, JPATextureResource*);
|
||||
void draw(MtxP);
|
||||
void calc();
|
||||
@@ -54,7 +54,7 @@ public:
|
||||
void zDrawParticle();
|
||||
void zDrawChild();
|
||||
void loadYBBMtx(MtxP);
|
||||
|
||||
|
||||
/* 0x00 */ JPADrawExecEmitterVisitor* mpExecEmtrVis[1];
|
||||
/* 0x04 */ JPADrawExecEmitterVisitor* mpExecEmtrPVis[5];
|
||||
/* 0x18 */ JPADrawExecEmitterVisitor* mpExecEmtrCVis[3];
|
||||
@@ -77,7 +77,9 @@ public:
|
||||
/* 0xBC */ GXColor mEnvColor;
|
||||
/* 0xC0 */ s16 mTexIdx;
|
||||
/* 0xC2 */ u8 field_0xc2;
|
||||
/* 0xC3 */ u8 field_0xC3[0xC4 - 0xC3];
|
||||
/* 0xC3 */ u8 field_0xc3;
|
||||
};
|
||||
|
||||
STATIC_ASSERT(sizeof(JPADraw) == 0xC4);
|
||||
|
||||
#endif /* JPADRAW_H */
|
||||
|
||||
@@ -113,8 +113,8 @@ public:
|
||||
/* 0x0E0 */ JGeometry::TVec3<f32> mEmitterGlobalCenter;
|
||||
/* 0x0EC */ JGeometry::TVec3<f32> mPublicScale;
|
||||
/* 0x0F8 */ JGeometry::TVec3<f32> mgReRDir;
|
||||
/* 0x100 */ void* field_0x100;
|
||||
/* 0x104 */ void* field_0x104;
|
||||
/* 0x100 */ f32 mFovy;
|
||||
/* 0x104 */ f32 mAspect;
|
||||
/* 0x10C */ JGeometry::TVec3<f32> mVolumePos;
|
||||
/* 0x118 */ JGeometry::TVec3<f32> mVelOmni;
|
||||
/* 0x124 */ JGeometry::TVec3<f32> mVelAxis;
|
||||
@@ -129,6 +129,8 @@ public:
|
||||
|
||||
class JPABaseEmitter {
|
||||
public:
|
||||
JPABaseEmitter();
|
||||
|
||||
typedef void (JPABaseEmitter::*VolumeFunc)();
|
||||
|
||||
void calcVolumePoint();
|
||||
@@ -166,6 +168,9 @@ public:
|
||||
return mActiveParticles.getNumLinks() + mChildParticles.getNumLinks();
|
||||
}
|
||||
|
||||
u8 getGroupID() { return mGroupID; }
|
||||
u8 getResourceManagerID() { return mResMgrID; }
|
||||
|
||||
JPADataBlockLinkInfo * getEmitterDataBlockInfoPtr() const { return mpDataLinkInfo; }
|
||||
bool isEnableDeleteEmitter() { return checkStatus(JPAEmtrStts_EnableDeleteEmitter) && getParticleNumber() == 0; }
|
||||
|
||||
@@ -204,10 +209,14 @@ public:
|
||||
void setRate(float i_rate) { mRate = i_rate; }
|
||||
void setDirectionalSpeed(float i_speed) { mInitialVelDir = i_speed; }
|
||||
void setAwayFromAxisSpeed(float i_speed) { mInitialVelAxis = i_speed; }
|
||||
void setAwayFromCenterSpeed(float i_speed) { mInitialVelOmni = i_speed; }
|
||||
void setSpread(float i_spread) { mSpread = i_spread; }
|
||||
|
||||
void stopCreateParticle() { setStatus(JPAEmtrStts_StopEmit); }
|
||||
void playCreateParticle() { clearStatus(JPAEmtrStts_StopEmit); }
|
||||
void stopDrawParticle() { setStatus(JPAEmtrStts_StopDraw); }
|
||||
void playDrawParticle() { clearStatus(JPAEmtrStts_StopDraw); }
|
||||
bool isDraw() { return !checkStatus(JPAEmtrStts_StopDraw); }
|
||||
void becomeImmortalEmitter() { setStatus(JPAEmtrStts_Immortal); }
|
||||
void quitImmortalEmitter() { clearStatus(JPAEmtrStts_Immortal); }
|
||||
|
||||
@@ -222,6 +231,11 @@ public:
|
||||
void setParticleCallBackPtr(JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*>* callback) {
|
||||
mpParticleCallBack = callback;
|
||||
}
|
||||
void setParticleList(JSUList<JPABaseParticle>* list) { mpPtclVacList = list; }
|
||||
void setFieldList(JSUList<JPAFieldData>* list) { mFieldManager.mVacList = list; }
|
||||
JSULink<JPABaseEmitter>* getLinkBufferPtr() { return &mLink; }
|
||||
void initDrawMgr(JPATextureResource* texRes) { mDraw.initialize(this, texRes); }
|
||||
void draw(MtxP cameraMtxP) { mDraw.draw(cameraMtxP); }
|
||||
|
||||
static JPAEmitterInfo emtrInfo;
|
||||
|
||||
@@ -256,14 +270,14 @@ public:
|
||||
/* 0x084 */ f32 mVolumeMinRad;
|
||||
/* 0x088 */ s32 mDataFlag;
|
||||
/* 0x08C */ s32 mUseKeyFlag;
|
||||
/* 0x090 */ JSUPtrLink mLink;
|
||||
/* 0x090 */ JSULink<JPABaseEmitter> mLink;
|
||||
/* 0x0A0 */ JPADraw mDraw;
|
||||
/* 0x164 */ f32 mTick;
|
||||
/* 0x168 */ f32 mTime;
|
||||
/* 0x16C */ JPAFieldManager mFieldManager;
|
||||
/* 0x17C */ JSUList<JPABaseParticle> mActiveParticles;
|
||||
/* 0x188 */ JSUList<JPABaseParticle> mChildParticles;
|
||||
/* 0x194 */ JSUPtrList* mpPtclVacList;
|
||||
/* 0x194 */ JSUList<JPABaseParticle>* mpPtclVacList;
|
||||
/* 0x198 */ JPADataBlockLinkInfo* mpDataLinkInfo;
|
||||
/* 0x19C */ JPACallBackBase<JPABaseEmitter*>* mpEmitterCallBack;
|
||||
/* 0x1A0 */ JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*>* mpParticleCallBack;
|
||||
@@ -280,7 +294,7 @@ public:
|
||||
/* 0x210 */ u32 mUserData;
|
||||
/* 0x214 */ u8 mGroupID;
|
||||
/* 0x215 */ u8 mResMgrID;
|
||||
/* 0x216 */ u8 field_0x216[0x218 - 0x216];
|
||||
/* 0x216 */ u16 field_0x216;
|
||||
};
|
||||
|
||||
void JPACallBackBase<JPABaseEmitter*>::init(JPABaseEmitter*) {}
|
||||
|
||||
@@ -14,7 +14,11 @@ public:
|
||||
};
|
||||
|
||||
struct JPAEmitterData {
|
||||
public:
|
||||
JPAEmitterData() : pLinkInfoArray(NULL) {}
|
||||
JPADataBlockLinkInfo** getLinkInfo() { return pLinkInfoArray; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ JPADataBlockLinkInfo** pLinkInfoArray;
|
||||
/* 0x04 */ u16 infoNum;
|
||||
/* 0x06 */ u16 userIndex;
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
#ifndef JPAEMITTERMANAGER_H
|
||||
#define JPAEMITTERMANAGER_H
|
||||
|
||||
#include "JSystem/JGeometry.h"
|
||||
#include "JSystem/JParticle/JPAEmitter.h"
|
||||
|
||||
class JPABaseEmitter;
|
||||
class JPABaseParticle;
|
||||
class JPAResourceManager;
|
||||
class JKRHeap;
|
||||
|
||||
class JPADrawInfo {
|
||||
public:
|
||||
MtxP getCameraMtxPtr() { return mCameraMtxPtr; }
|
||||
f32 getFovy() { return mFovy; }
|
||||
f32 getAspect() { return mAspect; }
|
||||
|
||||
/* 0x00 */ MtxP mCameraMtxPtr;
|
||||
/* 0x04 */ f32 mFovy;
|
||||
/* 0x08 */ f32 mAspect;
|
||||
};
|
||||
|
||||
class JPAEmitterManager {
|
||||
public:
|
||||
JPAEmitterManager(JPAResourceManager*, u32, u32, u32, JKRHeap*);
|
||||
JPABaseEmitter* createSimpleEmitterID(const JGeometry::TVec3<float>&, u16, u8, u8, JPACallBackBase<JPABaseEmitter*>*, JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*>*);
|
||||
void calc(u8);
|
||||
void draw(JPADrawInfo*, u8);
|
||||
void deleteEmitter(JPABaseEmitter*);
|
||||
void forceDeleteEmitter(JPABaseEmitter*);
|
||||
void forceDeleteAllEmitter();
|
||||
void clearResourceManager(u8);
|
||||
|
||||
public:
|
||||
/* 0x00 */ JSUList<JPABaseParticle> mPtclPool;
|
||||
/* 0x0C */ JSUList<JPABaseEmitter> mEmtrPool;
|
||||
/* 0x18 */ JSUList<JPAFieldData> mFieldPool;
|
||||
/* 0x24 */ u32 mPtclNum;
|
||||
/* 0x28 */ u32 mEmtrNum;
|
||||
/* 0x2C */ u32 mFieldNum;
|
||||
/* 0x30 */ JPAResourceManager * pResMgrArray[8];
|
||||
/* 0x50 */ JSUList<JPABaseEmitter> mEmtrGroup[16];
|
||||
};
|
||||
|
||||
#endif /* JPAEMITTERMANAGER_H */
|
||||
@@ -2,11 +2,13 @@
|
||||
#define JPAFIELD_H
|
||||
|
||||
#include "JSystem/JSupport/JSUList.h"
|
||||
#include "JSystem/JGeometry.h"
|
||||
|
||||
class JPADataBlockLinkInfo;
|
||||
class JPAEmitterInfo;
|
||||
class JPAFieldData;
|
||||
class JPABaseParticle;
|
||||
class JPABaseField;
|
||||
|
||||
class JPAFieldManager {
|
||||
public:
|
||||
@@ -17,8 +19,46 @@ public:
|
||||
void deleteField(JPAFieldData*);
|
||||
void deleteAllField();
|
||||
|
||||
/* 0x00 */ JSUPtrList mList;
|
||||
/* 0x0C */ JSUPtrList* field_0x0c;
|
||||
public:
|
||||
/* 0x00 */ JSUList<JPAFieldData> mList;
|
||||
/* 0x0C */ JSUList<JPAFieldData>* mVacList;
|
||||
};
|
||||
|
||||
class JPAFieldData {
|
||||
public:
|
||||
JPAFieldData();
|
||||
virtual ~JPAFieldData();
|
||||
JSULink<JPAFieldData>* getLinkBufferPtr() { return &mLink; }
|
||||
|
||||
public:
|
||||
/* 0x04 */ JPABaseField * mpBaseField;
|
||||
/* 0x08 */ JSULink<JPAFieldData> mLink;
|
||||
/* 0x18 */ JGeometry::TVec3<f32> mVel;
|
||||
/* 0x24 */ JGeometry::TVec3<f32> mAirPos;
|
||||
/* 0x30 */ f32 mAirMinDist;
|
||||
/* 0x34 */ u32 field_0x34;
|
||||
/* 0x38 */ u32 field_0x38;
|
||||
/* 0x3C */ JGeometry::TVec3<f32> mAirDir;
|
||||
/* 0x48 */ u32 field_0x48;
|
||||
/* 0x4C */ f32 mFadeOutRate;
|
||||
/* 0x50 */ f32 mFadeInRate;
|
||||
/* 0x54 */ JGeometry::TVec3<f32> mPos;
|
||||
/* 0x60 */ JGeometry::TVec3<f32> mDir;
|
||||
/* 0x6C */ f32 mMag;
|
||||
/* 0x70 */ f32 mMagRndm;
|
||||
/* 0x74 */ f32 mMaxDist;
|
||||
/* 0x78 */ f32 mVal1;
|
||||
/* 0x7C */ f32 mVal2;
|
||||
/* 0x80 */ f32 mVal3;
|
||||
/* 0x84 */ f32 mFadeIn;
|
||||
/* 0x88 */ f32 mFadeOut;
|
||||
/* 0x8C */ f32 mEnTime;
|
||||
/* 0x90 */ f32 mDisTime;
|
||||
/* 0x94 */ u16 mSttFlag;
|
||||
/* 0x96 */ u8 mType;
|
||||
/* 0x97 */ u8 mID;
|
||||
/* 0x98 */ u8 mVelType;
|
||||
/* 0x99 */ u8 mCycle;
|
||||
};
|
||||
|
||||
#endif /* JPAFIELD_H */
|
||||
|
||||
@@ -29,6 +29,7 @@ public:
|
||||
void calcVelocity();
|
||||
void calcPosition();
|
||||
bool checkCreateChild();
|
||||
JSULink<JPABaseParticle>* getLinkBufferPtr() { return &mLink; }
|
||||
|
||||
~JPABaseParticle();
|
||||
JPABaseParticle();
|
||||
|
||||
@@ -38,6 +38,8 @@ class JPAResourceManager {
|
||||
public:
|
||||
JPAResourceManager(const void*, JKRHeap*);
|
||||
const ResTIMG* swapTexture(const ResTIMG*, const char*);
|
||||
JPATextureResource * getTextureResource() { return pTexRes; }
|
||||
JPAEmitterResource * getEmitterResource() { return pEmtrRes; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ JKRHeap * pHeap;
|
||||
|
||||
@@ -1,13 +1,12 @@
|
||||
#ifndef C_LIST_H
|
||||
#define C_LIST_H
|
||||
|
||||
|
||||
typedef struct node_class node_class;
|
||||
|
||||
typedef struct node_list_class {
|
||||
node_class* mpHead;
|
||||
node_class* mpTail;
|
||||
int mSize;
|
||||
/* 0x00 */ node_class* mpHead;
|
||||
/* 0x04 */ node_class* mpTail;
|
||||
/* 0x08 */ int mSize;
|
||||
} node_list_class;
|
||||
|
||||
void cLs_Init(node_list_class* pList);
|
||||
@@ -17,4 +16,6 @@ int cLs_Insert(node_list_class* pList, int idx, node_class* pNode);
|
||||
node_class* cLs_GetFirst(node_list_class* pList);
|
||||
void cLs_Create(node_list_class* pList);
|
||||
|
||||
#define LIST_GET_HEAD(pList) (pList->mpHead)
|
||||
|
||||
#endif /* C_LIST_H */
|
||||
|
||||
@@ -335,6 +335,11 @@ public:
|
||||
struct dDlst_alphaModelPacket : public J3DPacket {
|
||||
public:
|
||||
virtual void draw();
|
||||
|
||||
public:
|
||||
/* 0x10 */ u8 mType;
|
||||
/* 0x11 */ GXColor mColor;
|
||||
/* 0x18 */ Mtx* mMtxP;
|
||||
};
|
||||
|
||||
struct dDlst_alphaVolPacket : public J3DPacket {
|
||||
|
||||
+34
-61
@@ -41,16 +41,16 @@ class dPa_followEcallBack : public dPa_levelEcallBack {
|
||||
public:
|
||||
dPa_followEcallBack(u8=0, u8=0);
|
||||
virtual ~dPa_followEcallBack() {}
|
||||
|
||||
|
||||
virtual void execute(JPABaseEmitter*);
|
||||
virtual void draw(JPABaseEmitter*);
|
||||
virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8);
|
||||
virtual void end();
|
||||
|
||||
|
||||
JPABaseEmitter* getEmitter() { return mpEmitter; }
|
||||
void setRateOff(u8 param_0) { field_0x11 = param_0; }
|
||||
bool isEnd() { return field_0x10 & 1; }
|
||||
|
||||
|
||||
/* 0x04 */ JPABaseEmitter* mpEmitter;
|
||||
/* 0x08 */ u8 field_0x08[0x10 - 0x08];
|
||||
/* 0x10 */ u8 field_0x10;
|
||||
@@ -67,11 +67,11 @@ public:
|
||||
dPa_smokeEcallBack(u8, u8, u8, u8);
|
||||
dPa_smokeEcallBack(const GXColor&, dKy_tevstr_c*, u8);
|
||||
virtual ~dPa_smokeEcallBack() {}
|
||||
|
||||
|
||||
virtual void draw(JPABaseEmitter*);
|
||||
virtual void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8);
|
||||
virtual void end();
|
||||
|
||||
|
||||
/* 0x14 */ s8 field_0x14;
|
||||
/* 0x15 */ u8 field_0x15;
|
||||
/* 0x16 */ GXColor field_0x16;
|
||||
@@ -167,7 +167,7 @@ class dPa_rippleEcallBack : public dPa_levelEcallBack {
|
||||
public:
|
||||
dPa_rippleEcallBack() { mpBaseEmitter = NULL; }
|
||||
virtual ~dPa_rippleEcallBack() {}
|
||||
|
||||
|
||||
void setup(JPABaseEmitter*, cXyz const*, csXyz const*, s8);
|
||||
void end();
|
||||
void execute(JPABaseEmitter*);
|
||||
@@ -181,10 +181,8 @@ public:
|
||||
/* 0x10 */ f32 mRate;
|
||||
};
|
||||
|
||||
class dPa_modelEmitter_c {
|
||||
class dPa_modelEmitter_c : public node_class {
|
||||
public:
|
||||
u8 temp[0xC];
|
||||
|
||||
dPa_modelEmitter_c();
|
||||
virtual ~dPa_modelEmitter_c() {}
|
||||
};
|
||||
@@ -195,23 +193,27 @@ class dPa_J3DmodelEmitter_c : public dPa_modelEmitter_c {
|
||||
public:
|
||||
u8 temp2[4];
|
||||
JKRSolidHeap* mpHeap;
|
||||
|
||||
|
||||
dPa_J3DmodelEmitter_c(JPABaseEmitter*, J3DModelData*, dKy_tevstr_c&, J3DAnmTexPattern*, unsigned short, int);
|
||||
virtual ~dPa_J3DmodelEmitter_c();
|
||||
|
||||
|
||||
virtual void draw();
|
||||
};
|
||||
|
||||
class dPa_J3Dmodel_c {
|
||||
public:
|
||||
dPa_J3Dmodel_c();
|
||||
|
||||
public:
|
||||
/* 0x00 */ u8 mInit;
|
||||
/* 0x04 */ J3DModel* mModel;
|
||||
};
|
||||
|
||||
class dPa_smokePcallBack : public JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*> {
|
||||
public:
|
||||
dPa_smokePcallBack();
|
||||
virtual ~dPa_smokePcallBack() {}
|
||||
|
||||
|
||||
virtual void execute(JPABaseEmitter*, JPABaseParticle*);
|
||||
virtual void draw(JPABaseEmitter*, JPABaseParticle*);
|
||||
};
|
||||
@@ -220,7 +222,7 @@ class dPa_selectTexEcallBack : public dPa_levelEcallBack {
|
||||
public:
|
||||
dPa_selectTexEcallBack();
|
||||
virtual ~dPa_selectTexEcallBack() {}
|
||||
|
||||
|
||||
virtual void draw(JPABaseEmitter*);
|
||||
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
|
||||
};
|
||||
@@ -229,7 +231,7 @@ class dPa_windPcallBack : public JPACallBackBase2<JPABaseEmitter*, JPABasePartic
|
||||
public:
|
||||
dPa_windPcallBack();
|
||||
virtual ~dPa_windPcallBack() {}
|
||||
|
||||
|
||||
virtual void execute(JPABaseEmitter*, JPABaseParticle*);
|
||||
};
|
||||
|
||||
@@ -237,7 +239,7 @@ class dPa_singleRippleEcallBack : public dPa_levelEcallBack {
|
||||
public:
|
||||
dPa_singleRippleEcallBack();
|
||||
virtual ~dPa_singleRippleEcallBack() {}
|
||||
|
||||
|
||||
virtual void execute(JPABaseEmitter*);
|
||||
virtual void draw(JPABaseEmitter*);
|
||||
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
|
||||
@@ -247,7 +249,7 @@ class dPa_ripplePcallBack : public JPACallBackBase2<JPABaseEmitter*, JPABasePart
|
||||
public:
|
||||
dPa_ripplePcallBack();
|
||||
virtual ~dPa_ripplePcallBack() {}
|
||||
|
||||
|
||||
virtual void execute(JPABaseEmitter*, JPABaseParticle*);
|
||||
virtual void draw(JPABaseEmitter*, JPABaseParticle*);
|
||||
};
|
||||
@@ -256,7 +258,7 @@ class dPa_cutTurnEcallBack_c : public dPa_levelEcallBack {
|
||||
public:
|
||||
dPa_cutTurnEcallBack_c() {}
|
||||
virtual ~dPa_cutTurnEcallBack_c() {}
|
||||
|
||||
|
||||
virtual void executeAfter(JPABaseEmitter*);
|
||||
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
|
||||
void end();
|
||||
@@ -271,7 +273,7 @@ class dPa_stripesEcallBack : public dPa_levelEcallBack {
|
||||
public:
|
||||
dPa_stripesEcallBack();
|
||||
virtual ~dPa_stripesEcallBack() {}
|
||||
|
||||
|
||||
virtual void draw(JPABaseEmitter*);
|
||||
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
|
||||
};
|
||||
@@ -280,7 +282,7 @@ class dPa_kageroEcallBack : public JPACallBackBase<JPABaseEmitter*> {
|
||||
public:
|
||||
dPa_kageroEcallBack();
|
||||
virtual ~dPa_kageroEcallBack() {}
|
||||
|
||||
|
||||
virtual void draw(JPABaseEmitter*);
|
||||
};
|
||||
|
||||
@@ -288,7 +290,7 @@ class dPa_bombSmokeEcallBack : public dPa_levelEcallBack {
|
||||
public:
|
||||
dPa_bombSmokeEcallBack();
|
||||
virtual ~dPa_bombSmokeEcallBack() {}
|
||||
|
||||
|
||||
virtual void execute(JPABaseEmitter*);
|
||||
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
|
||||
};
|
||||
@@ -297,7 +299,7 @@ class dPa_setColorEcallBack : public dPa_levelEcallBack {
|
||||
public:
|
||||
dPa_setColorEcallBack();
|
||||
virtual ~dPa_setColorEcallBack() {}
|
||||
|
||||
|
||||
virtual void draw(JPABaseEmitter*);
|
||||
virtual void setup(JPABaseEmitter*, const cXyz*, const csXyz*, s8);
|
||||
|
||||
@@ -305,53 +307,22 @@ public:
|
||||
/* 0x04 */ GXColor mColor;
|
||||
}; // Size: 0x08
|
||||
|
||||
class dPa_modelControl_c {
|
||||
class dPa_modelControl_c : public node_list_class {
|
||||
public:
|
||||
dPa_modelControl_c(J3DModelData*);
|
||||
~dPa_modelControl_c();
|
||||
|
||||
void newModel(J3DModelData*);
|
||||
static J3DModel * newModel(J3DModelData*);
|
||||
void draw();
|
||||
|
||||
/* 0x00 */ node_list_class parent;
|
||||
/* 0x0C */ void* field_0x0c;
|
||||
/* 0x10 */ void* field_0x10;
|
||||
/* 0x14 */ void* field_0x14;
|
||||
/* 0x18 */ void* field_0x18;
|
||||
/* 0x1C */ void* field_0x1c;
|
||||
/* 0x20 */ void* field_0x20;
|
||||
/* 0x24 */ void* field_0x24;
|
||||
/* 0x28 */ void* field_0x28;
|
||||
/* 0x2C */ void* field_0x2c;
|
||||
/* 0x30 */ void* field_0x30;
|
||||
/* 0x34 */ void* field_0x34;
|
||||
/* 0x38 */ void* field_0x38;
|
||||
/* 0x3C */ void* field_0x3c;
|
||||
/* 0x40 */ void* field_0x40;
|
||||
/* 0x44 */ void* field_0x44;
|
||||
/* 0x48 */ void* field_0x48;
|
||||
/* 0x4C */ void* field_0x4c;
|
||||
/* 0x50 */ void* field_0x50;
|
||||
/* 0x54 */ void* field_0x54;
|
||||
/* 0x58 */ void* field_0x58;
|
||||
/* 0x5C */ void* field_0x5c;
|
||||
/* 0x60 */ void* field_0x60;
|
||||
/* 0x64 */ void* field_0x64;
|
||||
/* 0x68 */ void* field_0x68;
|
||||
/* 0x6C */ void* field_0x6c;
|
||||
/* 0x70 */ void* field_0x70;
|
||||
/* 0x74 */ void* field_0x74;
|
||||
/* 0x78 */ void* field_0x78;
|
||||
/* 0x7C */ void* field_0x7c;
|
||||
/* 0x80 */ void* field_0x80;
|
||||
// /* 0x84 */ J3DVertexData mVertexData;
|
||||
static dPa_J3Dmodel_c * mModel;
|
||||
};
|
||||
|
||||
class dPa_control_c {
|
||||
public:
|
||||
dPa_control_c();
|
||||
|
||||
void getRM_ID(u16);
|
||||
static u16 getRM_ID(u16);
|
||||
void swapFrameBufferTexture();
|
||||
void createCommon(void const*);
|
||||
void createRoomScene(void const*);
|
||||
@@ -434,16 +405,18 @@ public:
|
||||
return set(5, particleID, pos, angle, scale, alpha, &mSingleRippleEcallBack, -1, NULL, NULL, NULL);
|
||||
}
|
||||
|
||||
|
||||
|
||||
void drawModelParticle() { mModelCtrl->draw(); }
|
||||
JKRHeap * getHeap() { return mpHeap; }
|
||||
|
||||
JKRHeap * getHeap() { return mHeap; }
|
||||
|
||||
static dPa_setColorEcallBack* getLifeBallSetColorEcallBack(int idx) { return &mLifeBall[idx]; }
|
||||
|
||||
|
||||
static dPa_rippleEcallBack mSingleRippleEcallBack;
|
||||
static dPa_setColorEcallBack mLifeBall[3];
|
||||
|
||||
/* 0x0000 */ JKRHeap* mpHeap;
|
||||
static JPAEmitterManager * mEmitterMng;
|
||||
|
||||
/* 0x0000 */ JKRHeap* mHeap;
|
||||
/* 0x0004 */ JPAResourceManager* mpCommonResMgr;
|
||||
/* 0x0008 */ dPa_modelControl_c* mModelCtrl;
|
||||
/* 0x000C */ JKRHeap* mpSceneHeap;
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
class J3DModelData; // placeholder
|
||||
class JKRHeap;
|
||||
class cM3dGPla;
|
||||
class daItem_c;
|
||||
|
||||
struct fopAcM_prmBase_class {
|
||||
/* 0x00 */ u32 field_0x00;
|
||||
@@ -463,9 +464,7 @@ s32 fopAcM_createDemoItem(cXyz* p_pos, int itemNo, int itemBitNo, csXyz* p_angle
|
||||
s32 fopAcM_createItemForBoss(cXyz* p_pos, int param_2, int roomNo, csXyz* p_angle,
|
||||
cXyz* p_scale, int param_8);
|
||||
|
||||
void* fopAcM_createItemForSimpleDemo(cXyz* p_pos, int i_itemNo, int i_roomNo,
|
||||
csXyz* p_angle, cXyz* p_scale, f32 speedF,
|
||||
f32 speedY);
|
||||
daItem_c* fopAcM_createItemForSimpleDemo(cXyz* p_pos, int i_itemNo, int i_roomNo, csXyz* p_angle, cXyz* p_scale, f32 speedF, f32 speedY);
|
||||
|
||||
s32 fopAcM_createItem(cXyz* p_pos, int itemNo, int param_3, int roomNo, int type, csXyz* p_angle,
|
||||
int action, cXyz* p_scale);
|
||||
|
||||
@@ -615,6 +615,7 @@ s32 mDoExt_resIDToIndex(JKRArchive*, u16);
|
||||
|
||||
JKRSolidHeap * mDoExt_createSolidHeapFromGameToCurrent(u32 size, u32 align);
|
||||
JKRSolidHeap * mDoExt_createSolidHeapToCurrent(u32, JKRHeap *, u32 align);
|
||||
JKRSolidHeap * mDoExt_createSolidHeapFromSystem(u32 i_size, u32 i_alignment);
|
||||
void mDoExt_restoreCurrentHeap();
|
||||
s32 mDoExt_adjustSolidHeap(JKRSolidHeap * pHeap);
|
||||
void mDoExt_destroySolidHeap(JKRSolidHeap * pHeap);
|
||||
|
||||
@@ -4,84 +4,150 @@
|
||||
//
|
||||
|
||||
#include "JSystem/JParticle/JPAEmitterManager.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "JSystem/JParticle/JPAEmitterLoader.h"
|
||||
#include "JSystem/JParticle/JPAResourceManager.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
|
||||
/* 8025EE44-8025F0E4 .text __ct__17JPAEmitterManagerFP18JPAResourceManagerUlUlUlP7JKRHeap */
|
||||
JPAEmitterManager::JPAEmitterManager(JPAResourceManager*, unsigned long, unsigned long, unsigned long, JKRHeap*) {
|
||||
/* Nonmatching */
|
||||
JPAEmitterManager::JPAEmitterManager(JPAResourceManager* resMgr, u32 ptclNum, u32 emtrNum, u32 fieldNum, JKRHeap* heap) {
|
||||
heap = heap != NULL ? heap : JKRHeap::getCurrentHeap();
|
||||
mPtclNum = ptclNum;
|
||||
mEmtrNum = emtrNum;
|
||||
mFieldNum = fieldNum;
|
||||
pResMgrArray[0] = resMgr;
|
||||
|
||||
for (u32 i = 1; i < 8; i++)
|
||||
pResMgrArray[i] = 0;
|
||||
|
||||
JPABaseParticle* pPtclArray = new(heap, 0) JPABaseParticle[mPtclNum];
|
||||
JUT_ASSERT(0x2e, pPtclArray);
|
||||
for (u32 i = 0; i < mPtclNum; i++) {
|
||||
JPABaseParticle* ptcl = &pPtclArray[i];
|
||||
mPtclPool.prepend(ptcl->getLinkBufferPtr());
|
||||
}
|
||||
|
||||
JPABaseEmitter* pEmtrArray = new(heap, 0) JPABaseEmitter[mEmtrNum];
|
||||
JUT_ASSERT(0x35, pEmtrArray);
|
||||
for (u32 i = 0; i < mEmtrNum; i++) {
|
||||
JPABaseEmitter* emtr = &pEmtrArray[i];
|
||||
emtr->setParticleList(&mPtclPool);
|
||||
emtr->setFieldList(&mFieldPool);
|
||||
mEmtrPool.prepend(emtr->getLinkBufferPtr());
|
||||
}
|
||||
|
||||
JPAFieldData* pFieldArray = new(heap, 0) JPAFieldData[mFieldNum];
|
||||
JUT_ASSERT(0x3e, pFieldArray);
|
||||
for (u32 i = 0; i < mFieldNum; i++) {
|
||||
JPAFieldData* field = &pFieldArray[i];
|
||||
mFieldPool.prepend(field->getLinkBufferPtr());
|
||||
}
|
||||
}
|
||||
|
||||
/* 8025F0E4-8025F2F4 .text createSimpleEmitterID__17JPAEmitterManagerFRCQ29JGeometry8TVec3<f>UsUcUcP34JPACallBackBase<P14JPABaseEmitter>P54JPACallBackBase2<P14JPABaseEmitter,P15JPABaseParticle> */
|
||||
void JPAEmitterManager::createSimpleEmitterID(const JGeometry::TVec3<float>&, unsigned short, unsigned char, unsigned char, JPACallBackBase<JPABaseEmitter*>*, JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*>*) {
|
||||
JPABaseEmitter* JPAEmitterManager::createSimpleEmitterID(const JGeometry::TVec3<float>& pos, u16 userID, u8 groupID, u8 rmID, JPACallBackBase<JPABaseEmitter*>* pEmtrCallBack, JPACallBackBase2<JPABaseEmitter*, JPABaseParticle*>* pPtclCallBack) {
|
||||
/* Nonmatching */
|
||||
JUT_ASSERT(0x56, groupID < 16);
|
||||
JUT_ASSERT(0x57, rmID < 8);
|
||||
JUT_ASSERT(0x58, pResMgrArray[rmID] != 0);
|
||||
|
||||
JPABaseEmitter* emtr;
|
||||
JPAEmitterData* emtrData;
|
||||
JPAResourceManager* resMgr;
|
||||
|
||||
emtr = NULL;
|
||||
resMgr = pResMgrArray[rmID];
|
||||
emtrData = resMgr->getEmitterResource()->getByUserIndex(userID);
|
||||
|
||||
if (emtrData == NULL) {
|
||||
JUT_WARN(98, "%s", "JParticle::Couldn't Create Emitter!");
|
||||
JUT_WARN(99, "%s", "User Index Number specification has mistaken.");
|
||||
JUT_WARN(100, "Group ID (%d),EmitterManagerPtr(%x)", groupID, resMgr);
|
||||
} else if (mEmtrPool.getNumLinks() != 0) {
|
||||
emtr = mEmtrPool.getFirst()->getObject();
|
||||
mEmtrPool.remove(emtr->getLinkBufferPtr());
|
||||
mEmtrGroup[groupID].append(emtr->getLinkBufferPtr());
|
||||
emtr->create(emtrData->getLinkInfo()[0]);
|
||||
emtr->initDrawMgr(pResMgrArray[rmID]->getTextureResource());
|
||||
emtr->setEmitterCallBackPtr(pEmtrCallBack);
|
||||
emtr->setParticleCallBackPtr(pPtclCallBack);
|
||||
emtr->mGroupID = groupID;
|
||||
emtr->mResMgrID = rmID;
|
||||
emtr->mGlobalTranslation.set(pos);
|
||||
}
|
||||
|
||||
return emtr;
|
||||
}
|
||||
|
||||
/* 8025F2F4-8025F3C4 .text calc__17JPAEmitterManagerFUc */
|
||||
void JPAEmitterManager::calc(unsigned char) {
|
||||
/* Nonmatching */
|
||||
void JPAEmitterManager::calc(u8 groupID) {
|
||||
JUT_ASSERT(0xbb, groupID < 16);
|
||||
for (JSULink<JPABaseEmitter>* link = mEmtrGroup[groupID].getFirst(); link != NULL;) {
|
||||
JSULink<JPABaseEmitter>* next = link->getNext();
|
||||
JPABaseEmitter *emtr = link->getObject();
|
||||
bool started = emtr->doStartFrameProcess();
|
||||
if (started) {
|
||||
if (emtr->doTerminationProcess())
|
||||
deleteEmitter(emtr);
|
||||
else
|
||||
emtr->calc();
|
||||
}
|
||||
link = next;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8025F3C4-8025F494 .text draw__17JPAEmitterManagerFP11JPADrawInfoUc */
|
||||
void JPAEmitterManager::draw(JPADrawInfo*, unsigned char) {
|
||||
/* Nonmatching */
|
||||
void JPAEmitterManager::draw(JPADrawInfo* drawInfo, u8 groupID) {
|
||||
JUT_ASSERT(0xde, groupID < 16);
|
||||
JPABaseEmitter::emtrInfo.mFovy = drawInfo->getFovy();
|
||||
JPABaseEmitter::emtrInfo.mAspect = drawInfo->getAspect();
|
||||
for (JSULink<JPABaseEmitter>* link = mEmtrGroup[groupID].getFirst(); link != NULL; link = link->getNext()) {
|
||||
JPABaseEmitter *emtr = link->getObject();
|
||||
if (emtr->isDraw()) {
|
||||
emtr->calcgReRDirection();
|
||||
emtr->draw(drawInfo->getCameraMtxPtr());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 8025F494-8025F4F4 .text deleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter */
|
||||
void JPAEmitterManager::deleteEmitter(JPABaseEmitter*) {
|
||||
/* Nonmatching */
|
||||
void JPAEmitterManager::deleteEmitter(JPABaseEmitter* emtr) {
|
||||
emtr->mFieldManager.deleteAllField();
|
||||
mEmtrGroup[emtr->getGroupID()].remove(emtr->getLinkBufferPtr());
|
||||
mEmtrPool.prepend(emtr->getLinkBufferPtr());
|
||||
}
|
||||
|
||||
/* 8025F4F4-8025F53C .text forceDeleteEmitter__17JPAEmitterManagerFP14JPABaseEmitter */
|
||||
void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter*) {
|
||||
/* Nonmatching */
|
||||
void JPAEmitterManager::forceDeleteEmitter(JPABaseEmitter* emtr) {
|
||||
emtr->deleteAllParticle();
|
||||
deleteEmitter(emtr);
|
||||
}
|
||||
|
||||
/* 8025F53C-8025F5B4 .text forceDeleteAllEmitter__17JPAEmitterManagerFv */
|
||||
void JPAEmitterManager::forceDeleteAllEmitter() {
|
||||
/* Nonmatching */
|
||||
for (u32 i = 0; i < 16; i++) {
|
||||
for (JSULink<JPABaseEmitter>* link = mEmtrGroup[i].getFirst(); link != NULL;) {
|
||||
JSULink<JPABaseEmitter>* next = link->getNext();
|
||||
JPABaseEmitter* emtr = link->getObject();
|
||||
forceDeleteEmitter(emtr);
|
||||
link = next;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* 8025F5B4-8025F68C .text clearResourceManager__17JPAEmitterManagerFUc */
|
||||
void JPAEmitterManager::clearResourceManager(unsigned char) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8025F68C-8025F6F8 .text __dt__12JPAFieldDataFv */
|
||||
JPAFieldData::~JPAFieldData() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8025F6F8-8025F73C .text __ct__12JPAFieldDataFv */
|
||||
JPAFieldData::JPAFieldData() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8025F73C-8025F7E0 .text __dt__14JPABaseEmitterFv */
|
||||
JPABaseEmitter::~JPABaseEmitter() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8025F7E0-8025F848 .text __ct__14JPABaseEmitterFv */
|
||||
JPABaseEmitter::JPABaseEmitter() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8025F848-8025F8A0 .text __dt__15JPABaseParticleFv */
|
||||
JPABaseParticle::~JPABaseParticle() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8025F8A0-8025F8DC .text __ct__15JPABaseParticleFv */
|
||||
JPABaseParticle::JPABaseParticle() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8025F8DC-8025F90C .text __ct__25JSUList<14JPABaseEmitter>Fv */
|
||||
JSUList<JPABaseEmitter>::JSUList() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 8025F90C-8025F960 .text __dt__25JSUList<14JPABaseEmitter>Fv */
|
||||
JSUList<JPABaseEmitter>::~JSUList() {
|
||||
void JPAEmitterManager::clearResourceManager(u8 rmID) {
|
||||
/* Nonmatching */
|
||||
JUT_ASSERT(0x14b, rmID < 8);
|
||||
for (u32 i = 0; i < 16; i++) {
|
||||
for (JSULink<JPABaseEmitter>* link = mEmtrGroup[i].getFirst(); link != NULL;) {
|
||||
JSULink<JPABaseEmitter>* next = link->getNext();
|
||||
JPABaseEmitter* emtr = link->getObject();
|
||||
if (emtr->getResourceManagerID() == rmID)
|
||||
forceDeleteEmitter(emtr);
|
||||
link = next;
|
||||
}
|
||||
}
|
||||
pResMgrArray[rmID] = NULL;
|
||||
}
|
||||
|
||||
+143
-63
@@ -5,6 +5,8 @@
|
||||
|
||||
#include "d/d_drawlist.h"
|
||||
#include "d/d_com_inf_game.h"
|
||||
#include "d/d_kankyo_rain.h"
|
||||
#include "f_op/f_op_camera_mng.h"
|
||||
#include "m_Do/m_Do_lib.h"
|
||||
#include "m_Do/m_Do_mtx.h"
|
||||
#include "JSystem/JKernel/JKRHeap.h"
|
||||
@@ -21,6 +23,9 @@ f32 dDlst_list_c::mWipeSpeed = 0.0f;
|
||||
GXColor dDlst_list_c::mWipeColor = { 0, 0, 0, 0 };
|
||||
dDlst_2DT2_c dDlst_list_c::mWipeDlst;
|
||||
|
||||
static Vec dummy1 = { 1.0f, 1.0f, 1.0f };
|
||||
static Vec dummy2 = { 1.0f, 1.0f, 1.0f };
|
||||
|
||||
/* 800804A4-800804C0 .text setViewPort__14dDlst_window_cFffffff */
|
||||
void dDlst_window_c::setViewPort(f32 x, f32 y, f32 w, f32 h, f32 n, f32 f) {
|
||||
mViewport.mXOrig = x;
|
||||
@@ -83,12 +88,12 @@ void dDlst_2DT2_c::draw() {
|
||||
GXSetNumTevStages(1);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD0, GX_TEXMAP0, GX_COLOR_NULL);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_C0, GX_CC_TEXC, GX_CC_ZERO);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1,true, GX_TEVPREV);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
if (mAlpha)
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_A0);
|
||||
else
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_A0, GX_CA_TEXA, GX_CA_ZERO);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1,true, GX_TEVPREV);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetZCompLoc(0);
|
||||
GXSetZMode(GX_FALSE, GX_ALWAYS, GX_FALSE);
|
||||
GXSetBlendMode(GX_BM_NONE, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR);
|
||||
@@ -474,21 +479,21 @@ extern void GFSetVtxAttrFmtv(GXVtxFmt, GXVtxAttrFmtList*);
|
||||
extern void GFSetBlendModeEtc(GXBlendMode, GXBlendFactor, GXBlendFactor, GXLogicOp, u8, u8, u8);
|
||||
extern void GFSetArray(GXAttr, void*, u8);
|
||||
|
||||
char l_backRevZMat[0x40] = {};
|
||||
char l_frontZMat[0x20] = {};
|
||||
char l_frontNoZSubMat[0x20] = {};
|
||||
char l_backRevZMat[0x41] __attribute__((aligned(32))) = {};
|
||||
char l_frontZMat[0x3c] __attribute__((aligned(32))) = {};
|
||||
char l_frontNoZSubMat[0x2a] __attribute__((aligned(32))) = {};
|
||||
|
||||
Vec l_bonboriPos[0x2a] = {};
|
||||
char l_bonboriDL[0xa0] = {};
|
||||
char l_bonboriDL[0xa7] __attribute__((aligned(32))) = {};
|
||||
|
||||
Vec l_beam_checkPos[0x10] = {};
|
||||
char l_beam_checkDL[0xe0] = {};
|
||||
Vec l_s_beam_checkPos[0x28] = {};
|
||||
char l_s_beam_checkDL[0xf8] __attribute__((aligned(32))) = {};
|
||||
|
||||
Vec l_cubePos[0x10] = {};
|
||||
char l_cubeDL[0xe0] = {};
|
||||
Vec l_cubePos[0x08] = {};
|
||||
char l_cubeDL[0x4a] __attribute__((aligned(32))) = {};
|
||||
|
||||
Vec l_bonbori2Pos[0x2a] = {};
|
||||
char l_bonbori2DL[0xa0] = {};
|
||||
Vec l_bonbori2Pos[0x56] = {};
|
||||
char l_bonbori2DL[0x2a8] __attribute__((aligned(32))) = {};
|
||||
|
||||
/* 80082838-80082E44 .text draw__22dDlst_alphaModelData_cFPA4_f */
|
||||
void dDlst_alphaModelData_c::draw(Mtx viewMtx) {
|
||||
@@ -505,12 +510,12 @@ void dDlst_alphaModelData_c::draw(Mtx viewMtx) {
|
||||
if (mType == 0) {
|
||||
/* Bonbori */
|
||||
GFSetArray(GX_VA_POS, l_bonboriPos, sizeof(*l_bonboriPos));
|
||||
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_frontNoZSubMat, sizeof(l_frontNoZSubMat));
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_backRevZMat, 0x40);
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GXCallDisplayList(l_frontZMat, 0x20);
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GXCallDisplayList(l_frontNoZSubMat, 0x20);
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
} else if (mType == 1) {
|
||||
/* Bonborix2 */
|
||||
GFSetArray(GX_VA_POS, l_bonboriPos, sizeof(*l_bonboriPos));
|
||||
@@ -519,22 +524,22 @@ void dDlst_alphaModelData_c::draw(Mtx viewMtx) {
|
||||
MTXConcat(mtx, tmp, tmp);
|
||||
GFLoadPosMtxImm(tmp, GX_PNMTX1);
|
||||
|
||||
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_backRevZMat, 0x40);
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
|
||||
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
|
||||
GXCallDisplayList(l_frontZMat, 0x20);
|
||||
GFSetCurrentMtx(GX_PNMTX0, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
|
||||
GXCallDisplayList(l_frontNoZSubMat, sizeof(l_frontNoZSubMat));
|
||||
GXCallDisplayList(l_frontNoZSubMat, 0x20);
|
||||
GFSetCurrentMtx(GX_PNMTX0, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
} else if (mType == 5) {
|
||||
/* Bonborix3 */
|
||||
GFSetArray(GX_VA_POS, l_bonboriPos, sizeof(*l_bonboriPos));
|
||||
@@ -547,53 +552,53 @@ void dDlst_alphaModelData_c::draw(Mtx viewMtx) {
|
||||
MTXConcat(mtx, tmp, tmp);
|
||||
GFLoadPosMtxImm(tmp, GX_PNMTX2);
|
||||
|
||||
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_backRevZMat, 0x40);
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GFSetCurrentMtx(GX_PNMTX2, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
|
||||
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
|
||||
GXCallDisplayList(l_frontZMat, 0x20);
|
||||
GFSetCurrentMtx(GX_PNMTX0, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GFSetCurrentMtx(GX_PNMTX2, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
|
||||
GXCallDisplayList(l_frontNoZSubMat, sizeof(l_frontNoZSubMat));
|
||||
GXCallDisplayList(l_frontNoZSubMat, 0x20);
|
||||
GFSetCurrentMtx(GX_PNMTX0, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GFSetCurrentMtx(GX_PNMTX1, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
GFSetCurrentMtx(GX_PNMTX2, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY, GX_IDENTITY);
|
||||
GXCallDisplayList(l_bonboriDL, sizeof(l_bonboriDL));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
} else if (mType == 2) {
|
||||
/* BeamCheck */
|
||||
GFSetArray(GX_VA_POS, l_beam_checkPos, sizeof(*l_beam_checkPos));
|
||||
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
|
||||
GXCallDisplayList(l_beam_checkDL, sizeof(l_beam_checkDL));
|
||||
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
|
||||
GXCallDisplayList(l_beam_checkDL, sizeof(l_beam_checkDL));
|
||||
GXCallDisplayList(l_frontNoZSubMat, sizeof(l_frontNoZSubMat));
|
||||
GXCallDisplayList(l_beam_checkDL, sizeof(l_beam_checkDL));
|
||||
GFSetArray(GX_VA_POS, l_s_beam_checkPos, sizeof(*l_s_beam_checkPos));
|
||||
GXCallDisplayList(l_backRevZMat, 0x40);
|
||||
GXCallDisplayList(l_s_beam_checkDL, 0xe0);
|
||||
GXCallDisplayList(l_frontZMat, 0x20);
|
||||
GXCallDisplayList(l_s_beam_checkDL, 0xe0);
|
||||
GXCallDisplayList(l_frontNoZSubMat, 0x20);
|
||||
GXCallDisplayList(l_s_beam_checkDL, 0xe0);
|
||||
} else if (mType == 3) {
|
||||
/* Cube */
|
||||
/* BeamCheck */
|
||||
GFSetArray(GX_VA_POS, l_cubePos, sizeof(*l_cubePos));
|
||||
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
|
||||
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
|
||||
GXCallDisplayList(l_cubeDL, sizeof(l_cubeDL));
|
||||
GXCallDisplayList(l_backRevZMat, 0x40);
|
||||
GXCallDisplayList(l_frontZMat, 0x20);
|
||||
GXCallDisplayList(l_cubeDL, 0xe0);
|
||||
} else if (mType == 4) {
|
||||
/* Bonbori2 */
|
||||
GFSetArray(GX_VA_POS, l_bonbori2Pos, sizeof(*l_bonbori2Pos));
|
||||
GXCallDisplayList(l_backRevZMat, sizeof(l_backRevZMat));
|
||||
GXCallDisplayList(l_bonbori2DL, sizeof(l_bonbori2DL));
|
||||
GXCallDisplayList(l_frontZMat, sizeof(l_frontZMat));
|
||||
GXCallDisplayList(l_bonbori2DL, sizeof(l_bonbori2DL));
|
||||
GXCallDisplayList(l_frontNoZSubMat, sizeof(l_frontNoZSubMat));
|
||||
GXCallDisplayList(l_bonbori2DL, sizeof(l_bonbori2DL));
|
||||
GXCallDisplayList(l_backRevZMat, 0x40);
|
||||
GXCallDisplayList(l_bonbori2DL, 0x2a0);
|
||||
GXCallDisplayList(l_frontZMat, 0x20);
|
||||
GXCallDisplayList(l_bonbori2DL, 0x2a0);
|
||||
GXCallDisplayList(l_frontNoZSubMat, 0x20);
|
||||
GXCallDisplayList(l_bonbori2DL, 0x2a0);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -623,17 +628,20 @@ dDlst_alphaModel_c * dDlst_alphaModel_c::create(int num) {
|
||||
|
||||
/* 80082EFC-80082F38 .text __dt__22dDlst_alphaModelData_cFv */
|
||||
dDlst_alphaModelData_c::~dDlst_alphaModelData_c() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 80082F38-80082F3C .text __ct__22dDlst_alphaModelData_cFv */
|
||||
dDlst_alphaModelData_c::dDlst_alphaModelData_c() {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
/* 80082F3C-80082F9C .text set__18dDlst_alphaModel_cFUcPA4_fUc */
|
||||
BOOL dDlst_alphaModel_c::set(u8 type, Mtx mtx, u8 alpha) {
|
||||
/* Nonmatching */
|
||||
if (mNum >= mCapacity)
|
||||
return FALSE;
|
||||
|
||||
mpData[mNum].set(type, mtx, alpha);
|
||||
mNum++;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/* 80082F9C-80083064 .text draw__18dDlst_alphaModel_cFPA4_f */
|
||||
@@ -641,7 +649,7 @@ BOOL dDlst_alphaModel_c::draw(Mtx mtx) {
|
||||
if (mNum == 0)
|
||||
return FALSE;
|
||||
|
||||
static char l_matDL[0x60] = {};
|
||||
static char l_matDL[0x64] __attribute__((aligned(32))) = {};
|
||||
|
||||
static GXVtxDescList l_vtxDescList[2] = {
|
||||
};
|
||||
@@ -649,7 +657,7 @@ BOOL dDlst_alphaModel_c::draw(Mtx mtx) {
|
||||
static GXVtxAttrFmtList l_vtxAttrFmtList[2] = {
|
||||
};
|
||||
|
||||
GXCallDisplayList(l_matDL, sizeof(l_matDL));
|
||||
GXCallDisplayList(l_matDL, 0x60);
|
||||
GFSetVtxDescv(l_vtxDescList);
|
||||
GFSetVtxAttrFmtv(GX_VTXFMT0, l_vtxAttrFmtList);
|
||||
GXSetClipMode(GX_CLIP_ENABLE);
|
||||
@@ -705,6 +713,43 @@ char l_shadowVolumeDL[] = {
|
||||
/* 80083064-800832C4 .text draw__22dDlst_alphaModelPacketFv */
|
||||
void dDlst_alphaModelPacket::draw() {
|
||||
/* Nonmatching */
|
||||
GXSetNumChans(1);
|
||||
GXSetChanCtrl(GX_COLOR0A0, GX_FALSE, GX_SRC_REG, GX_SRC_REG, 0, GX_DF_NONE, GX_AF_NONE);
|
||||
GXSetChanMatColor(GX_COLOR0A0, mColor);
|
||||
GXSetNumTexGens(0);
|
||||
GXSetNumTevStages(1);
|
||||
GXSetTevOrder(GX_TEVSTAGE0, GX_TEXCOORD_NULL, GX_TEXMAP_NULL, GX_COLOR0A0);
|
||||
GXSetTevColorIn(GX_TEVSTAGE0, GX_CC_ZERO, GX_CC_ZERO, GX_CC_ZERO, GX_CC_RASC);
|
||||
GXSetTevColorOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetTevAlphaIn(GX_TEVSTAGE0, GX_CA_ZERO, GX_CA_ZERO, GX_CA_ZERO, GX_CA_RASA);
|
||||
GXSetTevAlphaOp(GX_TEVSTAGE0, GX_TEV_ADD, GX_TB_ZERO, GX_CS_SCALE_1, GX_TRUE, GX_TEVPREV);
|
||||
GXSetZCompLoc(GX_TRUE);
|
||||
GXSetZMode(GX_TRUE, GX_LEQUAL, GX_FALSE);
|
||||
GXSetBlendMode(GX_BM_BLEND, GX_BL_SRC_ALPHA, GX_BL_INV_SRC_ALPHA, GX_LO_CLEAR);
|
||||
GXSetAlphaCompare(GX_GREATER, 0, GX_AOP_OR, GX_GREATER, 0);
|
||||
GXSetFog(GX_FOG_NONE, 0.0f, 0.0f, 0.0f, 0.0f, g_clearColor);
|
||||
GXSetCullMode(GX_CULL_FRONT);
|
||||
GXClearVtxDesc();
|
||||
GXSetVtxDesc(GX_VA_POS, GX_INDEX8);
|
||||
GXSetVtxAttrFmt(GX_VTXFMT0, GX_VA_POS, GX_POS_XYZ, GX_F32, 0);
|
||||
Mtx mtx;
|
||||
MTXConcat(j3dSys.getViewMtx(), *mMtxP, mtx);
|
||||
GXLoadPosMtxImm(mtx, GX_PNMTX0);
|
||||
GXSetCurrentMtx(GX_PNMTX0);
|
||||
|
||||
if (mType == 0) {
|
||||
GXSetArray(GX_VA_POS, l_bonboriPos, sizeof(*l_bonboriPos));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
} else if (mType == 1) {
|
||||
GXSetArray(GX_VA_POS, l_bonboriPos, sizeof(*l_bonboriPos));
|
||||
GXCallDisplayList(l_bonboriDL, 0xa0);
|
||||
} else if (mType == 2) {
|
||||
GXSetArray(GX_VA_POS, l_s_beam_checkPos, sizeof(*l_s_beam_checkPos));
|
||||
GXCallDisplayList(l_s_beam_checkDL, 0xe0);
|
||||
} else if (mType == 3) {
|
||||
GXSetArray(GX_VA_POS, l_cubePos, sizeof(*l_cubePos));
|
||||
GXCallDisplayList(l_cubeDL, 0x40);
|
||||
}
|
||||
}
|
||||
|
||||
/* 800832C4-800833CC .text set__18dDlst_shadowPoly_cFP10cBgD_Vtx_tUsUsUsP8cM3dGPla */
|
||||
@@ -1194,11 +1239,46 @@ void dDlst_list_c::calcWipe() {
|
||||
|
||||
mWipeDlst.mScrollS = mWipeRate * 2.0f;
|
||||
mWipeDlst.mScrollT = mWipeDlst.mScrollS * 1.218f;
|
||||
set2DXlu(&mWipeDlst);
|
||||
dComIfGd_set2DXlu(&mWipeDlst);
|
||||
}
|
||||
}
|
||||
|
||||
camera_class * dCam_getCamera();
|
||||
|
||||
/* 80086790-8008696C .text dDlst_texSpecmapST__FPC4cXyzPC12dKy_tevstr_cP12J3DModelDataf */
|
||||
void dDlst_texSpecmapST(const cXyz*, const dKy_tevstr_c*, J3DModelData*, f32) {
|
||||
/* Nonmatching */
|
||||
void dDlst_texSpecmapST(const cXyz* pos, const dKy_tevstr_c* tevStr, J3DModelData* modelData, f32 scale) {
|
||||
static Mtx mtx_adj = {
|
||||
0.5f, 0.0f, 0.0f, 0.5f,
|
||||
0.0f, -0.5f, 0.0f, 0.5f,
|
||||
0.0f, 0.0f, 1.0f, 0.0f,
|
||||
};
|
||||
|
||||
f32 inv = 1.0f / scale;
|
||||
camera_class * camera = dCam_getCamera();
|
||||
cXyz lookDir = *pos - camera->mLookat.mEye;
|
||||
cXyz refl;
|
||||
cXyz lightDir;
|
||||
|
||||
dKyr_get_vectle_calc((cXyz*)&tevStr->mLightPosWorld, (cXyz*)pos, &lightDir);
|
||||
|
||||
C_VECHalfAngle(&lookDir, &lightDir, &refl);
|
||||
Mtx reflMtx, effMtx;
|
||||
C_MTXLookAt(reflMtx, &cXyz::Zero, &cXyz::BaseY, &refl);
|
||||
MTXScale(effMtx, inv, inv, 1.0f);
|
||||
MTXConcat(effMtx, mtx_adj, effMtx);
|
||||
MTXConcat(effMtx, reflMtx, effMtx);
|
||||
effMtx[0][3] = 0.0f;
|
||||
effMtx[1][3] = 0.0f;
|
||||
effMtx[2][3] = 0.0f;
|
||||
|
||||
s32 materialNum = modelData->getMaterialNum();
|
||||
for (s32 i = 0; i < materialNum; i++) {
|
||||
J3DMaterial* mat = modelData->getMaterialNodePointer(i);
|
||||
for (s32 j = 0; j < 8; j++) {
|
||||
J3DTexMtx* texMtx = mat->getTexMtx(j);
|
||||
if (texMtx != NULL && texMtx->getTexMtxInfo().mInfo == 10) {
|
||||
texMtx->getTexMtxInfo().setEffectMtx(effMtx);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+76
-11
@@ -4,11 +4,16 @@
|
||||
//
|
||||
|
||||
#include "d/d_particle.h"
|
||||
#include "dolphin/types.h"
|
||||
#include "JSystem/JParticle/JPAParticle.h"
|
||||
#include "JSystem/JParticle/JPAEmitter.h"
|
||||
#include "JSystem/JParticle/JPAEmitterManager.h"
|
||||
#include "JSystem/JKernel/JKRSolidHeap.h"
|
||||
#include "JSystem/JUtility/JUTAssert.h"
|
||||
#include "SSystem/SComponent/c_malloc.h"
|
||||
|
||||
/* 8007A4D8-8007A514 .text __ct__18dPa_modelEmitter_cFv */
|
||||
dPa_modelEmitter_c::dPa_modelEmitter_c() {
|
||||
/* Nonmatching */
|
||||
cNd_ForcedClear(this);
|
||||
}
|
||||
|
||||
/* 8007A514-8007A804 .text __ct__21dPa_J3DmodelEmitter_cFP14JPABaseEmitterP12J3DModelDataR12dKy_tevstr_cP16J3DAnmTexPatternUsi */
|
||||
@@ -29,19 +34,28 @@ void dPa_J3DmodelEmitter_c::draw() {
|
||||
}
|
||||
|
||||
/* 8007ADC4-8007AECC .text __ct__18dPa_modelControl_cFP12J3DModelData */
|
||||
dPa_modelControl_c::dPa_modelControl_c(J3DModelData*) {
|
||||
/* Nonmatching */
|
||||
dPa_modelControl_c::dPa_modelControl_c(J3DModelData* modelData) {
|
||||
mModel = new dPa_J3Dmodel_c[0x80];
|
||||
JUT_ASSERT(0x10f, mModel != 0);
|
||||
|
||||
dPa_J3Dmodel_c * model = mModel;
|
||||
for (s32 i = 0; i < 0x80; i++, model++) {
|
||||
model->mModel = mDoExt_J3DModel__create(modelData, 0x80000, 0x37221223);
|
||||
JUT_ASSERT(0x120, model->mModel != 0);
|
||||
}
|
||||
|
||||
cLs_Create(this);
|
||||
}
|
||||
|
||||
/* 8007AECC-8007AED8 .text __ct__14dPa_J3Dmodel_cFv */
|
||||
dPa_J3Dmodel_c::dPa_J3Dmodel_c() {
|
||||
/* Nonmatching */
|
||||
mInit = 0;
|
||||
}
|
||||
|
||||
/* 8007AED8-8007AF64 .text __dt__18dPa_modelControl_cFv */
|
||||
dPa_modelControl_c::~dPa_modelControl_c() {
|
||||
/* Nonmatching (node_class has no virtual destructor) */
|
||||
node_class* node = parent.mpHead;
|
||||
node_class* node = mpHead;
|
||||
while (node) {
|
||||
node_class* nextNode = node->mpNextNode;
|
||||
cLs_SingleCut(node);
|
||||
@@ -50,14 +64,56 @@ dPa_modelControl_c::~dPa_modelControl_c() {
|
||||
}
|
||||
}
|
||||
|
||||
dPa_J3Dmodel_c * dPa_modelControl_c::mModel;
|
||||
|
||||
/* 8007AF64-8007B074 .text newModel__18dPa_modelControl_cFP12J3DModelData */
|
||||
void dPa_modelControl_c::newModel(J3DModelData*) {
|
||||
/* Nonmatching */
|
||||
J3DModel * dPa_modelControl_c::newModel(J3DModelData* modelData) {
|
||||
dPa_J3Dmodel_c * model = mModel;
|
||||
for (s32 i = 0; i < 0x80; i++, model++) {
|
||||
if (model->mInit == 0) {
|
||||
model->mInit = 1;
|
||||
J3DModel * j3dmodel = model->mModel;
|
||||
j3dmodel->mModelData = modelData;
|
||||
|
||||
J3DShapePacket * shapePacket = j3dmodel->getShapePacket(0);
|
||||
for (u16 j = 0; j < modelData->getShapeNum(); shapePacket++, j++) {
|
||||
shapePacket->setShape(modelData->getShapeNodePointer(j));
|
||||
}
|
||||
|
||||
J3DMatPacket * matPacket = j3dmodel->getMatPacket(0);
|
||||
for (u16 j = 0; j < modelData->getMaterialNum(); matPacket++, j++) {
|
||||
J3DMaterial* mat = modelData->getMaterialNodePointer(j);
|
||||
matPacket->setMaterial(mat);
|
||||
J3DShapePacket * shapePacket = j3dmodel->getShapePacket(mat->getShape()->getIndex());
|
||||
matPacket->setInitShapePacket(shapePacket);
|
||||
matPacket->addShapePacket(shapePacket);
|
||||
matPacket->setTexture(modelData->getTexture());
|
||||
matPacket->setDisplayListObj(mat->getSharedDisplayListObj());
|
||||
}
|
||||
|
||||
j3dmodel->mVertexBuffer.setVertexData(&modelData->getVertexData());
|
||||
return model->mModel;
|
||||
}
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* 8007B074-8007B158 .text draw__18dPa_modelControl_cFv */
|
||||
void dPa_modelControl_c::draw() {
|
||||
/* Nonmatching */
|
||||
for (u32 i = 0; i < 0x80; i++)
|
||||
mModel[i].mInit = 0;
|
||||
|
||||
dKy_GxFog_set();
|
||||
|
||||
for (node_class * nd = LIST_GET_HEAD(this); nd != NULL;) {
|
||||
node_class* pNext = NODE_GET_NEXT(nd);
|
||||
|
||||
// TODO
|
||||
|
||||
nd = pNext;
|
||||
}
|
||||
}
|
||||
|
||||
/* 8007B158-8007B194 .text __ct__19dPa_followEcallBackFUcUc */
|
||||
@@ -186,14 +242,23 @@ void dPa_windPcallBack::execute(JPABaseEmitter*, JPABaseParticle*) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
JPAEmitterManager * dPa_control_c::mEmitterMng;
|
||||
|
||||
/* 8007C8E8-8007C9A4 .text __ct__13dPa_control_cFv */
|
||||
dPa_control_c::dPa_control_c() {
|
||||
/* Nonmatching */
|
||||
mHeap = mDoExt_createSolidHeapFromSystem(0x16e800, 0);
|
||||
JUT_ASSERT(0x4d8, mHeap != 0);
|
||||
mSceneNo = 0xFF;
|
||||
mCount = 0;
|
||||
mEmitterMng = NULL;
|
||||
mNumSimple = 0;
|
||||
mpCommonResMgr = NULL;
|
||||
mpSceneResMgr = NULL;
|
||||
}
|
||||
|
||||
/* 8007CA28-8007CA30 .text getRM_ID__13dPa_control_cFUs */
|
||||
void dPa_control_c::getRM_ID(u16) {
|
||||
/* Nonmatching */
|
||||
u16 dPa_control_c::getRM_ID(u16 uid) {
|
||||
return (uid >> 15) & 0x01;
|
||||
}
|
||||
|
||||
/* 8007CA30-8007CA98 .text swapFrameBufferTexture__13dPa_control_cFv */
|
||||
|
||||
+51
-39
@@ -575,18 +575,18 @@ s32 fopAcM_cullingCheck(fopAc_ac_c* i_this) {
|
||||
cMtx_concat(j3dSys.getViewMtx(), i_this->mCullMtx, mtx);
|
||||
pMtx = mtx;
|
||||
}
|
||||
|
||||
|
||||
f32 cullFar = i_this->mCullSizeFar;
|
||||
if (dComIfGp_event_runCheck()) {
|
||||
cullFar *= dComIfGp_event_getCullRate();
|
||||
}
|
||||
|
||||
|
||||
int cullType = i_this->mCullType;
|
||||
bool isBox = false;
|
||||
if ((cullType >= 0 && cullType < fopAc_CULLBOX_CUSTOM_e) || cullType == fopAc_CULLBOX_CUSTOM_e) {
|
||||
isBox = true;
|
||||
}
|
||||
|
||||
|
||||
if (isBox) {
|
||||
if (cullType == fopAc_CULLBOX_CUSTOM_e) {
|
||||
if (i_this->mCullSizeFar > 0.0f) {
|
||||
@@ -781,42 +781,42 @@ fopAc_ac_c* fopAcM_getEventPartner(fopAc_ac_c* i_this) {
|
||||
/* 80026118-800261E8 .text fopAcM_createItemForPresentDemo__FP4cXyziUciiP5csXyzP4cXyz */
|
||||
s32 fopAcM_createItemForPresentDemo(cXyz* pos, int i_itemNo, u8 param_3, int roomNo, int param_5, csXyz* rot, cXyz* scale) {
|
||||
JUT_ASSERT(2413, 0 <= i_itemNo && i_itemNo < 256);
|
||||
|
||||
|
||||
dComIfGp_event_setGtItm(i_itemNo);
|
||||
|
||||
|
||||
if (i_itemNo == NO_ITEM) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
return fopAcM_createDemoItem(pos, i_itemNo, roomNo, rot, param_5, scale, param_3);
|
||||
}
|
||||
|
||||
/* 800261E8-800262B4 .text fopAcM_createItemForTrBoxDemo__FP4cXyziiiP5csXyzP4cXyz */
|
||||
s32 fopAcM_createItemForTrBoxDemo(cXyz* pos, int i_itemNo, int roomNo, int param_5, csXyz* rot, cXyz* scale) {
|
||||
JUT_ASSERT(2458, 0 <= i_itemNo && i_itemNo < 256);
|
||||
|
||||
|
||||
dComIfGp_event_setGtItm(i_itemNo);
|
||||
|
||||
|
||||
if (i_itemNo == NO_ITEM) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
return fopAcM_createDemoItem(pos, i_itemNo, roomNo, rot, param_5, scale, 0);
|
||||
}
|
||||
|
||||
/* 800262B4-80026694 .text fopAcM_createItemFromTable__FP4cXyziiiiP5csXyziP4cXyz */
|
||||
s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_itemNo, int i_itemBitNo, int roomNo, int type, csXyz* p_angle, int action, cXyz* p_scale) {
|
||||
JUT_ASSERT(2514, 0 <= i_itemNo && i_itemNo < 64 && (-1 <= i_itemBitNo && i_itemBitNo <= 79) || i_itemBitNo == 127);
|
||||
|
||||
|
||||
static cXyz fairy_offset_tbl[3] = {
|
||||
cXyz(40.0f, 0.0f, 0.0f),
|
||||
cXyz(-40.0f, 0.0f, 0.0f),
|
||||
cXyz(0.0f, 0.0f, 40.0f),
|
||||
};
|
||||
|
||||
|
||||
cXyz pos(0.0f, 0.0f, 0.0f);
|
||||
csXyz angle(0, 0, 0);
|
||||
|
||||
|
||||
if (i_itemNo >= 0x20 && i_itemNo <= 0x3E) {
|
||||
ItemTableList* itemTableList = dComIfGp_getItemTable();
|
||||
int tableIdx = i_itemNo - 0x20;
|
||||
@@ -861,7 +861,7 @@ s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_itemNo, int i_itemBitNo, int r
|
||||
if (p_angle) {
|
||||
angle = *p_angle;
|
||||
}
|
||||
|
||||
|
||||
if (tableIdx == RECOVER_FAIRY) {
|
||||
// Bug: This condition never gets triggered. They meant to check if (itemNo == RECOVER_FAIRY) so
|
||||
// that the 3x fairies drop table (table 0x14) spawns them in a triangle. But nstead they check if
|
||||
@@ -869,10 +869,10 @@ s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_itemNo, int i_itemBitNo, int r
|
||||
pos += fairy_offset_tbl[i];
|
||||
angle.y = cM_rndF((f32)0x7FFE);
|
||||
}
|
||||
|
||||
|
||||
itemNo = getItemNoByLife((s8)itemNo);
|
||||
daItem_c* item = (daItem_c*)fopAcM_fastCreateItem2(&pos, itemNo, i_itemBitNo, roomNo, type, &angle, 8, NULL);
|
||||
|
||||
|
||||
lastItemPcId = fopAcM_GetID(item);
|
||||
if (lastItemPcId == -1) {
|
||||
break;
|
||||
@@ -880,11 +880,11 @@ s32 fopAcM_createItemFromTable(cXyz* p_pos, int i_itemNo, int i_itemBitNo, int r
|
||||
}
|
||||
return lastItemPcId;
|
||||
}
|
||||
|
||||
|
||||
int itemIdx = (int)cM_rndF(15.9999f);
|
||||
i_itemNo = itemTableList->mItemTables[tableIdx][itemIdx];
|
||||
}
|
||||
|
||||
|
||||
if (i_itemNo == 0x3F || i_itemNo == 0xFF) {
|
||||
return -1;
|
||||
} else {
|
||||
@@ -906,7 +906,7 @@ s32 fopAcM_createShopItem(cXyz* pos, int i_itemNo, csXyz* rot, int roomNo, cXyz*
|
||||
if (i_itemNo == NO_ITEM) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
return fopAcM_create(PROC_ShopItem, i_itemNo, pos, roomNo, rot, scale, 0xFF, createFunc);
|
||||
}
|
||||
|
||||
@@ -916,7 +916,7 @@ s32 fopAcM_createRaceItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* rot,
|
||||
if (i_itemNo == NO_ITEM) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
i_itemNo = check_itemno(i_itemNo);
|
||||
u32 params = (i_itemBitNo & 0x7F) << 0x08 | i_itemNo & 0xFF | (param_7 & 0xF) << 0xF;
|
||||
fopAcM_create(PROC_RACEITEM, params, pos, roomNo, rot, scale, 0xFF, NULL);
|
||||
@@ -928,7 +928,7 @@ s32 fopAcM_createDemoItem(cXyz* pos, int i_itemNo, int i_itemBitNo, csXyz* rot,
|
||||
if (i_itemNo == NO_ITEM) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
|
||||
u32 params = i_itemNo & 0xFF | (i_itemBitNo & 0x7F) << 0x08 | (param_7 & 0xFF) << 0x10;
|
||||
fopAcM_create(PROC_Demo_Item, params, pos, roomNo, rot, scale, 0xFF, NULL);
|
||||
}
|
||||
@@ -945,8 +945,7 @@ s32 fopAcM_createItemForBoss(cXyz* pos, int, int roomNo, csXyz* rot, cXyz* scale
|
||||
}
|
||||
|
||||
/* 80026ADC-80026C90 .text fopAcM_createItem__FP4cXyziiiiP5csXyziP4cXyz */
|
||||
s32 fopAcM_createItem(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomNo, int type, csXyz* rot,
|
||||
int action, cXyz* scale) {
|
||||
s32 fopAcM_createItem(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomNo, int type, csXyz* rot, int action, cXyz* scale) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
@@ -955,21 +954,21 @@ void* fopAcM_fastCreateItem2(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomN
|
||||
csXyz* rot, int action, cXyz* scale) {
|
||||
/* Nonmatching (regswap) */
|
||||
JUT_ASSERT(2995, 0 <= i_itemNo && i_itemNo < 256 && (-1 <= i_itemBitNo && i_itemBitNo <= 79) || i_itemBitNo == 127);
|
||||
|
||||
|
||||
csXyz prmRot = csXyz::Zero;
|
||||
|
||||
|
||||
if (i_itemNo == NO_ITEM) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
if (rot) {
|
||||
prmRot = *rot;
|
||||
}
|
||||
prmRot.z = 0xFF;
|
||||
|
||||
|
||||
u32 params = check_itemno(i_itemNo);
|
||||
params = (i_itemBitNo & 0xFF) << 0x08 | params & 0xFF | 0x00FF0000 | (type & 3) << 0x18 | action << 0x1A;
|
||||
|
||||
params = (i_itemBitNo & 0xFF) << 0x08 | params & 0xFF | 0x00FF0000 | (type & 3) << 24 | action << 26;
|
||||
|
||||
daItem_c* item;
|
||||
switch (i_itemNo) {
|
||||
case RECOVER_FAIRY:
|
||||
@@ -986,13 +985,26 @@ void* fopAcM_fastCreateItem2(cXyz* pos, int i_itemNo, int i_itemBitNo, int roomN
|
||||
}
|
||||
|
||||
/* 80026E5C-80026F5C .text fopAcM_createItemForKP2__FP4cXyziiP5csXyzP4cXyzfffUs */
|
||||
void fopAcM_createItemForKP2(cXyz*, int, int, csXyz*, cXyz*, float, float, float, u16) {
|
||||
/* Nonmatching */
|
||||
fopAc_ac_c* fopAcM_createItemForKP2(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXyz* scale, f32 speedF, f32 speedY, f32 gravity, u16 i_itemBitNo) {
|
||||
JUT_ASSERT(0xc25, 0 <= i_itemNo && i_itemNo < 256);
|
||||
if (i_itemNo == NO_ITEM)
|
||||
return NULL;
|
||||
|
||||
fopAc_ac_c* ac = (fopAc_ac_c*)fopAcM_fastCreate(PROC_SPC_ITEM01, i_itemNo | (i_itemBitNo & 0xFFFF) << 8, pos, roomNo, rot, scale, 0xFF, NULL, NULL);
|
||||
if (ac != NULL) {
|
||||
fopAcM_SetSpeedF(ac, speedF);
|
||||
ac->speed.y = speedY;
|
||||
fopAcM_SetGravity(ac, gravity);
|
||||
}
|
||||
return ac;
|
||||
}
|
||||
|
||||
/* 80026F5C-80026F98 .text fopAcM_createItemForSimpleDemo__FP4cXyziiP5csXyzP4cXyzff */
|
||||
void* fopAcM_createItemForSimpleDemo(cXyz*, int, int, csXyz*, cXyz*, float, float) {
|
||||
/* Nonmatching */
|
||||
daItem_c* fopAcM_createItemForSimpleDemo(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXyz* scale, f32 speedF, f32 speedY) {
|
||||
daItem_c* item = (daItem_c*)fopAcM_fastCreateItem(pos, i_itemNo, roomNo, rot, scale, speedF, speedY, -7.0f, 0xFFFFFFFF, NULL);
|
||||
if (item != NULL)
|
||||
item->mCurState = 5;
|
||||
return item;
|
||||
}
|
||||
|
||||
/* 80026F98-80027254 .text fopAcM_fastCreateItem__FP4cXyziiP5csXyzP4cXyzfffiPFPv_i */
|
||||
@@ -1003,13 +1015,13 @@ void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXy
|
||||
if (i_itemNo == NO_ITEM) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
||||
u32 params = (u8)check_itemno(i_itemNo) & 0xFF | (i_itemBitNo & 0xFF) << 0x08 | 0x28FF0000;
|
||||
|
||||
|
||||
if (isHeart(i_itemNo)) {
|
||||
speedF = 2.0f * speedF;
|
||||
}
|
||||
|
||||
|
||||
daItem_c* item;
|
||||
csXyz prmRot;
|
||||
switch (i_itemNo) {
|
||||
@@ -1026,7 +1038,7 @@ void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXy
|
||||
}
|
||||
prmRot.z = 0xFF;
|
||||
prmRot.y += (int)cM_rndFX(0x2000);
|
||||
|
||||
|
||||
item = (daItem_c*)fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmRot, scale, 0xFF, createFunc, NULL);
|
||||
if (item) {
|
||||
item->speedF = speedF * (1.0f + cM_rndFX(0.3f));
|
||||
@@ -1042,7 +1054,7 @@ void* fopAcM_fastCreateItem(cXyz* pos, int i_itemNo, int roomNo, csXyz* rot, cXy
|
||||
prmRot = csXyz::Zero;
|
||||
}
|
||||
prmRot.z = 0xFF;
|
||||
|
||||
|
||||
item = (daItem_c*)fopAcM_fastCreate(PROC_ITEM, params, pos, roomNo, &prmRot, scale, 0xFF, createFunc, NULL);
|
||||
if (item) {
|
||||
item->speedF = speedF;
|
||||
@@ -1064,7 +1076,7 @@ BOOL stealItem_CB(void* actor) {
|
||||
}
|
||||
|
||||
/* 80027280-800273D4 .text fopAcM_createStealItem__FP4cXyziiP5csXyzi */
|
||||
void fopAcM_createStealItem(cXyz*, int, int, csXyz*, int) {
|
||||
void fopAcM_createStealItem(cXyz* p_pos, int i_tblNo, int, csXyz*, int) {
|
||||
/* Nonmatching */
|
||||
}
|
||||
|
||||
@@ -1138,7 +1150,7 @@ void fopAcM_cancelCarryNow(fopAc_ac_c* i_this) {
|
||||
fopAcM_OffStatus(i_this, fopAcStts_CARRY_e);
|
||||
fopAcM_setRoomLayer(i_this, fopAcM_GetRoomNo(i_this));
|
||||
i_this->shape_angle.z = 0;
|
||||
|
||||
|
||||
if (dComIfGp_event_runCheck() && i_this->mGroup != fopAc_ENEMY_e) {
|
||||
fopAcM_OnStatus(i_this, fopAcStts_UNK800_e);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user