mirror of
https://github.com/zeldaret/tp
synced 2026-08-05 17:44:09 -04:00
more simple J2D/J3D funcs (#166)
* more simple J2D/J3D funcs * JPABaseShape constructor * fmt Co-authored-by: lepelog <25211966+lepelog@users.noreply.github.com>
This commit is contained in:
committed by
GitHub
parent
f7916ebde1
commit
c15d8fcb3e
@@ -1,6 +1,7 @@
|
||||
#ifndef J2DTEVS_H
|
||||
#define J2DTEVS_H
|
||||
|
||||
#include "dolphin/gx/GX.h"
|
||||
#include "dolphin/mtx/mtxvec.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
@@ -13,12 +14,19 @@ struct J2DTextureSRTInfo {
|
||||
}; // Size: 0x14
|
||||
|
||||
struct J2DTexMtxInfo {
|
||||
/* 0x00 */ u8 field_0x0;
|
||||
/* 0x01 */ u8 field_0x1;
|
||||
enum {
|
||||
/* 0x0 */ DCC_NONE,
|
||||
/* 0x1 */ DCC_MAYA,
|
||||
};
|
||||
|
||||
/* 0x00 */ u8 mTexMtxType;
|
||||
/* 0x01 */ u8 mTexMtxDCC;
|
||||
/* 0x02 */ u8 field_0x2; // padding ?
|
||||
/* 0x03 */ u8 field_0x3; // padding ?
|
||||
/* 0x04 */ Vec field_0x4;
|
||||
/* 0x04 */ Vec mCenter;
|
||||
/* 0x10 */ J2DTextureSRTInfo mTexSRTInfo;
|
||||
|
||||
GXTexMtxType getTexMtxType() const { return (GXTexMtxType)mTexMtxType; }
|
||||
}; // Size: 0x24
|
||||
|
||||
class J2DTexMtx {
|
||||
@@ -29,13 +37,16 @@ public:
|
||||
/* 802E9EBC */ void getTextureMtxMaya(J2DTextureSRTInfo const&, f32 (*)[4]);
|
||||
|
||||
private:
|
||||
/* 0x00 */ J2DTexMtxInfo mTexMtxInfo;
|
||||
/* 0x00 */ J2DTexMtxInfo mInfo;
|
||||
/* 0x24 */ Mtx mTexMtx;
|
||||
};
|
||||
|
||||
struct J2DIndTexOrderInfo {
|
||||
/* 0x0 */ u8 field_0x0;
|
||||
/* 0x1 */ u8 field_0x1;
|
||||
/* 0x0 */ u8 mTexCoordID;
|
||||
/* 0x1 */ u8 mTexMapID;
|
||||
|
||||
GXTexCoordID getTexCoordID() const { return (GXTexCoordID)mTexCoordID; }
|
||||
GXTexMapID getTexMapID() const { return (GXTexMapID)mTexMapID; }
|
||||
};
|
||||
|
||||
class J2DIndTexOrder {
|
||||
@@ -44,12 +55,12 @@ public:
|
||||
/* 802EA0FC */ void load(u8);
|
||||
|
||||
private:
|
||||
/* 0x0 */ J2DIndTexOrderInfo mIndTexOrderInfo;
|
||||
/* 0x0 */ J2DIndTexOrderInfo mInfo;
|
||||
};
|
||||
|
||||
struct J2DIndTexMtxInfo {
|
||||
/* 0x00 */ Mtx23 mMtx;
|
||||
/* 0x18 */ u8 field_0x18;
|
||||
/* 0x18 */ s8 mScaleExp;
|
||||
};
|
||||
|
||||
class J2DIndTexMtx {
|
||||
@@ -65,8 +76,11 @@ private:
|
||||
}; // Size: 0x1C
|
||||
|
||||
struct J2DIndTexCoordScaleInfo {
|
||||
/* 0x0 */ u8 field_0x0;
|
||||
/* 0x0 */ u8 field_0x1;
|
||||
/* 0x0 */ u8 mScaleS;
|
||||
/* 0x0 */ u8 mScaleT;
|
||||
|
||||
GXIndTexScale getScaleS() const { return (GXIndTexScale)mScaleS; }
|
||||
GXIndTexScale getScaleT() const { return (GXIndTexScale)mScaleT; }
|
||||
};
|
||||
|
||||
class J2DIndTexCoordScale {
|
||||
@@ -76,7 +90,7 @@ public:
|
||||
/* 802EA0CC */ void load(u8);
|
||||
|
||||
private:
|
||||
/* 0x0 */ J2DIndTexCoordScaleInfo mIndTexCoordScaleInfo;
|
||||
/* 0x0 */ J2DIndTexCoordScaleInfo mInfo;
|
||||
}; // Size: 0x2
|
||||
|
||||
class J2DIndTevStage {
|
||||
@@ -86,6 +100,16 @@ public:
|
||||
|
||||
private:
|
||||
/* 0x0 */ u32 mFlags;
|
||||
|
||||
GXIndTexStageID getIndStage() const { return (GXIndTexStageID)(mFlags & 0x03); }
|
||||
GXIndTexFormat getIndFormat() const { return (GXIndTexFormat)((mFlags >> 2) & 0x03); }
|
||||
GXIndTexBiasSel getBiasSel() const { return (GXIndTexBiasSel)((mFlags >> 4) & 0x07); }
|
||||
GXIndTexWrap getWrapS() const { return (GXIndTexWrap)((mFlags >> 8) & 0x07); }
|
||||
GXIndTexWrap getWrapT() const { return (GXIndTexWrap)((mFlags >> 11) & 0x07); }
|
||||
GXIndTexMtxID getMtxSel() const { return (GXIndTexMtxID)((mFlags >> 16) & 0x0F); }
|
||||
GXBool getPrev() const { return (GXBool)((mFlags >> 20) & 0x01); }
|
||||
GXBool getLod() const { return (GXBool)((mFlags >> 21) & 0x01); }
|
||||
GXIndTexAlphaSel getAlphaSel() const { return (GXIndTexAlphaSel)((mFlags >> 22) & 0x03); }
|
||||
};
|
||||
|
||||
struct J2DTexCoordInfo {
|
||||
@@ -156,7 +180,12 @@ private:
|
||||
/* 0x7 */ u8 field_0x7;
|
||||
};
|
||||
|
||||
struct J2DTevSwapModeInfo {};
|
||||
struct J2DTevSwapModeInfo {
|
||||
/* 0x0 */ u8 mR;
|
||||
/* 0x1 */ u8 mG;
|
||||
/* 0x2 */ u8 mB;
|
||||
/* 0x3 */ u8 mA;
|
||||
};
|
||||
|
||||
class J2DTevSwapModeTable {
|
||||
public:
|
||||
|
||||
@@ -10,7 +10,7 @@ class J3DMtxBuffer;
|
||||
|
||||
class J3DMtxCalc {
|
||||
public:
|
||||
/* 80325D1C */ void setMtxBuffer(J3DMtxBuffer*);
|
||||
/* 80325D1C */ static void setMtxBuffer(J3DMtxBuffer*);
|
||||
|
||||
/* 8000D948 */ virtual ~J3DMtxCalc();
|
||||
/* 80014E90 */ virtual void setAnmTransform(J3DAnmTransform*);
|
||||
@@ -52,11 +52,12 @@ public:
|
||||
u8 getScaleCompensate() const { return mScaleCompensate; }
|
||||
J3DJoint* getYounger() { return mYounger; }
|
||||
void setYounger(J3DJoint* pYounger) { mYounger = pYounger; }
|
||||
void setCurrentMtxCalc(J3DMtxCalc* pMtxCalc) { mCurrentMtxCalc = pMtxCalc; }
|
||||
|
||||
static J3DMtxCalc* mCurrentMtxCalc;
|
||||
|
||||
private:
|
||||
/* 0x00 */ void* field_0x0;
|
||||
/* 0x00 */ void* mCallBackUserData;
|
||||
/* 0x04 */ J3DJointCallBack mCallBack;
|
||||
/* 0x08 */ void* field_0x8;
|
||||
/* 0x0C */ J3DJoint* mChild;
|
||||
@@ -65,7 +66,7 @@ private:
|
||||
/* 0x16 */ u8 mMtxType;
|
||||
/* 0x17 */ u8 mScaleCompensate;
|
||||
/* 0x18 */ J3DTransformInfo mTransformInfo;
|
||||
/* 0x38 */ f32 field_0x38;
|
||||
/* 0x38 */ f32 mBoundingSphereRadius;
|
||||
/* 0x3C */ Vec mMin;
|
||||
/* 0x48 */ Vec mMax;
|
||||
/* 0x54 */ J3DMtxCalc* mMtxCalc;
|
||||
|
||||
@@ -32,7 +32,11 @@ public:
|
||||
/* 80325D24 */ virtual ~J3DJointTree();
|
||||
|
||||
u16 getWEvlpMtxNum() const { return mWEvlpMtxNum; }
|
||||
u16 getJointNum() const { return mJointNum; }
|
||||
u16 getDrawMtxNum() const { return mDrawMtxData.mEntryNum; }
|
||||
J3DJoint* getRootNode() { return mRootNode; }
|
||||
J3DJoint* getJointNodePointer(u16 idx) const { return mJointNodePointer[idx]; }
|
||||
J3DMtxCalc* getBasicMtxCalc() const { return mBasicMtxCalc; }
|
||||
|
||||
private:
|
||||
/* 0x04 */ J3DModelHierarchy* mHierarchy;
|
||||
@@ -43,13 +47,13 @@ private:
|
||||
/* 0x18 */ J3DJoint** mJointNodePointer;
|
||||
/* 0x1C */ u16 mJointNum;
|
||||
/* 0x1E */ u16 mWEvlpMtxNum;
|
||||
/* 0x20 */ u8 mWEvlpMixMtxNum;
|
||||
/* 0x20 */ u32 mWEvlpMixMtxNum;
|
||||
/* 0x24 */ s32 mWEvlpMixIndex;
|
||||
/* 0x28 */ s32 mWEvlpMixWeight;
|
||||
/* 0x2C */ Mtx* mInvJointMtx;
|
||||
/* 0x30 */ s32 mWEvlpImportantMtxIdx;
|
||||
/* 0x34 */ J3DDrawMtxData mDrawMtxNum;
|
||||
/* 0x40 */ u8 field_0x40[4];
|
||||
/* 0x34 */ J3DDrawMtxData mDrawMtxData;
|
||||
/* 0x40 */ u32 field_0x40;
|
||||
/* 0x44 */ JUTNameTab* mJointName;
|
||||
}; // Size: 0x48
|
||||
|
||||
|
||||
@@ -15,6 +15,17 @@ enum J3DMdlFlag {
|
||||
/* 0x8 */ J3DMdlFlag_SkinNrmCpu = 0x8,
|
||||
};
|
||||
|
||||
struct J3DUnkCalc1 {
|
||||
virtual void calc(J3DModel* model);
|
||||
};
|
||||
|
||||
struct J3DUnkCalc2 {
|
||||
virtual void unk();
|
||||
virtual void calc(J3DModelData* mpModelData);
|
||||
};
|
||||
|
||||
typedef void (*J3DCalcCallBack)(J3DModel*, u32 timing);
|
||||
|
||||
class J3DModel {
|
||||
public:
|
||||
/* 800CFFF4 */ void setBaseTRMtx(f32 (*)[4]);
|
||||
@@ -45,19 +56,25 @@ public:
|
||||
/* 80328350 */ virtual ~J3DModel();
|
||||
|
||||
J3DModelData* getModelData() { return mModelData; }
|
||||
|
||||
void onFlag(u32 flag) { mFlags |= flag; }
|
||||
void offFlag(u32 flag) { mFlags &= ~flag; }
|
||||
bool checkFlag(u32 flag) const { return (mFlags & flag) ? true : false; }
|
||||
Mtx& getBaseTRMtx() { return mBaseTransformMtx; }
|
||||
void i_setBaseTRMtx(Mtx m) { PSMTXCopy(m, mBaseTransformMtx); }
|
||||
u32 getMtxCalcMode() const { return mFlags & 0x03; }
|
||||
J3DVertexBuffer* getVertexBuffer() const { return (J3DVertexBuffer*)&mVertexBuffer; }
|
||||
J3DShapePacket* getShapePacket(u16 idx) const { return &mShapePacket[idx]; }
|
||||
Mtx33* getBumpMtxPtr(int idx) const { return mMtxBuffer->getBumpMtxPtr(idx); }
|
||||
Mtx33* getNrmMtxPtr() const { return mMtxBuffer->getNrmMtxPtr(); }
|
||||
|
||||
// is there a better way to handle inlines with same name as non-inlines?
|
||||
MtxP i_getAnmMtx(int p1) { return mMtxBuffer->getAnmMtx(p1); }
|
||||
|
||||
/* 0x04 */ J3DModelData* mModelData;
|
||||
/* 0x08 */ u32 mFlags;
|
||||
/* 0x0C */ u32 field_0x0c;
|
||||
/* 0x10 */ int field_0x10;
|
||||
/* 0x0C */ u32 mDiffFlag;
|
||||
/* 0x10 */ J3DCalcCallBack mCalcCallBack;
|
||||
/* 0x14 */ u32 mUserArea;
|
||||
/* 0x18 */ Vec mBaseScale;
|
||||
/* 0x24 */ Mtx mBaseTransformMtx;
|
||||
@@ -65,12 +82,12 @@ public:
|
||||
/* 0x84 */ J3DMtxBuffer* mMtxBuffer;
|
||||
/* 0x88 */ J3DVertexBuffer mVertexBuffer;
|
||||
/* 0xC0 */ J3DMatPacket* mMatPacket;
|
||||
/* 0xC4 */ J3DShapePacket** mShapePacket;
|
||||
/* 0xC4 */ J3DShapePacket* mShapePacket;
|
||||
/* 0xC8 */ J3DDeformData* mDeformData;
|
||||
/* 0xCC */ J3DSkinDeform* mSkinDeform;
|
||||
/* 0xD0 */ J3DVtxColorCalc* mVtxColorCalc;
|
||||
/* 0xD4 */ int field_0xd4;
|
||||
/* 0xD8 */ int field_0xd8;
|
||||
/* 0xD4 */ J3DUnkCalc1* mUnkCalc1;
|
||||
/* 0xD8 */ J3DUnkCalc2* mUnkCalc2;
|
||||
};
|
||||
|
||||
#endif /* J3DMODEL_H */
|
||||
|
||||
@@ -25,6 +25,8 @@ public:
|
||||
J3DVertexData& getVertexData() { return mVertexData; }
|
||||
u16 getShapeNum() const { return mShapeTable.getShapeNum(); }
|
||||
u16 getMaterialNum() const { return mMaterialTable.getMaterialNum(); }
|
||||
u16 getJointNum() const { return mJointTree.getJointNum(); }
|
||||
u16 getDrawMtxNum() const { return mJointTree.getDrawMtxNum(); }
|
||||
J3DMaterial* getMaterialNodePointer(u16 idx) const {
|
||||
return mMaterialTable.getMaterialNodePointer(idx);
|
||||
}
|
||||
@@ -36,14 +38,15 @@ public:
|
||||
void* getVtxPosArray() const { return mVertexData.getVtxPosArray(); }
|
||||
void* getVtxNrmArray() const { return mVertexData.getVtxNrmArray(); }
|
||||
_GXColor* getVtxColorArray(u8 idx) const { return mVertexData.getVtxColorArray(idx); }
|
||||
bool checkFlag(u32 flag) const { return (mFlags & flag) ? true : false; }
|
||||
bool checkBBoardFlag() const { return field_0xe == 1; }
|
||||
bool checkFlag(u32 flag) const { return !!(mFlags & flag); }
|
||||
bool checkBumpFlag() const { return mbHasBumpArray; }
|
||||
bool checkBBoardFlag() const { return mbHasBillboard == 1; }
|
||||
|
||||
private:
|
||||
/* 0x04 */ u32 field_0x4;
|
||||
/* 0x04 */ void* mpRawData;
|
||||
/* 0x08 */ u32 mFlags;
|
||||
/* 0x0C */ u16 field_0xc;
|
||||
/* 0x0E */ u16 field_0xe;
|
||||
/* 0x0C */ u16 mbHasBumpArray;
|
||||
/* 0x0E */ u16 mbHasBillboard;
|
||||
/* 0x10 */ J3DJointTree mJointTree;
|
||||
/* 0x58 */ J3DMaterialTable mMaterialTable;
|
||||
/* 0x78 */ J3DShapeTable mShapeTable;
|
||||
|
||||
@@ -24,9 +24,16 @@ public:
|
||||
/* 80326D3C */ void calcNrmMtx();
|
||||
/* 80326EF0 */ void calcBBoardMtx();
|
||||
|
||||
MtxP getAnmMtx(int idx) const { return *(mMatrices[0] + idx); }
|
||||
MtxP getAnmMtx(int idx) const { return mpAnmMtx[idx]; }
|
||||
|
||||
void setScaleFlag(int idx, u8 flag) { mScaleFlag[idx] = flag; }
|
||||
void setScaleFlag(int idx, u8 flag) { mScaleFlagArray[idx] = flag; }
|
||||
u32* getCurrentViewNoPtr() { return &mCurrentViewNo; }
|
||||
u8* getScaleFlagArray() const { return mScaleFlagArray; }
|
||||
Mtx** getDrawMtxPtrPtr() const { return mpDrawMtxArr; }
|
||||
Mtx33** getNrmMtxPtrPtr() const { return mpNrmMtxArr; }
|
||||
Mtx33* getNrmMtxPtr() const { return mpNrmMtxArr[mCurrentViewNo]; }
|
||||
Mtx33** getBumpMtxPtrPtr() const { return mpBumpMtxArr; }
|
||||
Mtx33* getBumpMtxPtr(int idx) const { return mpBumpMtxArr[idx]; }
|
||||
|
||||
static Mtx sNoUseDrawMtx;
|
||||
static Mtx33 sNoUseNrmMtx;
|
||||
@@ -35,14 +42,18 @@ public:
|
||||
|
||||
private:
|
||||
/* 0x00 */ J3DJointTree* mJointTree;
|
||||
/* 0x04 */ u8* mScaleFlag;
|
||||
/* 0x04 */ u8* mScaleFlagArray;
|
||||
/* 0x08 */ u8* mEnvScaleFlag;
|
||||
/* 0x0C */ Mtx* mMatrices[5]; // fix this later
|
||||
/* 0x20 */ Mtx33* mpNrmMtxPtrPtr;
|
||||
/* 0x24 */ Mtx** field_0x24;
|
||||
/* 0x28 */ Mtx** mpBumpMtxPtr;
|
||||
/* 0x2C */ u32 field_0x2c;
|
||||
/* 0x30 */ u32* mCurrentViewNoPtr;
|
||||
/* 0x0C */ Mtx* mpAnmMtx;
|
||||
/* 0x10 */ Mtx* mpWeightEnvMtx;
|
||||
/* 0x14 */ Mtx** mpOldDrawMtxArr;
|
||||
/* 0x18 */ Mtx** mpDrawMtxArr;
|
||||
/* 0x1C */ Mtx33** mpOldNrmMtxArr;
|
||||
/* 0x20 */ Mtx33** mpNrmMtxArr;
|
||||
/* 0x24 */ u32 field_0x24;
|
||||
/* 0x28 */ Mtx33** mpBumpMtxArr;
|
||||
/* 0x2C */ u32 mFlags;
|
||||
/* 0x30 */ u32 mCurrentViewNo;
|
||||
/* 0x34 */ Mtx** mUserAnmMtx;
|
||||
|
||||
public:
|
||||
|
||||
@@ -21,11 +21,13 @@ struct J3DGXColor : public _GXColor {
|
||||
struct J3DNBTScaleInfo {
|
||||
/* 8032587C */ void operator=(J3DNBTScaleInfo const&);
|
||||
|
||||
/* 0x0 */ u8 field_0x0;
|
||||
/* 0x0 */ u8 mbHasScale;
|
||||
/* 0x4 */ Vec mScale;
|
||||
}; // Size: 0x10
|
||||
|
||||
struct J3DNBTScale : public J3DNBTScaleInfo {};
|
||||
struct J3DNBTScale : public J3DNBTScaleInfo {
|
||||
Vec* getScale() { return &mScale; }
|
||||
};
|
||||
|
||||
class J3DTexGenBlock {
|
||||
public:
|
||||
@@ -50,7 +52,7 @@ public:
|
||||
/* 8000DFD8 */ virtual J3DTexMtx* getTexMtx(u32);
|
||||
/* 80317424 */ virtual void setNBTScale(J3DNBTScale const*);
|
||||
/* 80317420 */ virtual void setNBTScale(J3DNBTScale);
|
||||
/* 80317334 */ virtual bool getNBTScale();
|
||||
/* 80317334 */ virtual J3DNBTScale* getNBTScale();
|
||||
/* 80317428 */ virtual bool getTexMtxOffset() const;
|
||||
/* 80317430 */ virtual void setTexMtxOffset(u32);
|
||||
/* 803171DC */ virtual ~J3DTexGenBlock();
|
||||
@@ -71,7 +73,7 @@ public:
|
||||
/* 8031ACD0 */ virtual void diffTexMtx();
|
||||
/* 8031AD30 */ virtual void diffTexGen();
|
||||
/* 80317B9C */ virtual s32 countDLSize();
|
||||
/* 80322E74 */ virtual void getType();
|
||||
/* 80322E74 */ virtual u32 getType();
|
||||
/* 80322D3C */ virtual void setTexGenNum(u32 const*);
|
||||
/* 80322D34 */ virtual void setTexGenNum(u32);
|
||||
/* 80322D48 */ virtual void getTexGenNum() const;
|
||||
@@ -98,7 +100,7 @@ public:
|
||||
/* 8031A9E8 */ virtual void load();
|
||||
/* 8031ABC0 */ virtual void patch();
|
||||
/* 80317BAC */ virtual s32 countDLSize();
|
||||
/* 80322C6C */ virtual void getType();
|
||||
/* 80322C6C */ virtual u32 getType();
|
||||
/* 80322C9C */ virtual void setNBTScale(J3DNBTScale const*);
|
||||
/* 80322C78 */ virtual void setNBTScale(J3DNBTScale);
|
||||
/* 80322CC0 */ virtual void getNBTScale();
|
||||
@@ -116,7 +118,7 @@ public:
|
||||
/* 8031A948 */ virtual void load();
|
||||
/* 8031AB18 */ virtual void patch();
|
||||
/* 80317BA4 */ virtual s32 countDLSize();
|
||||
/* 80322DA8 */ virtual void getType();
|
||||
/* 80322DA8 */ virtual u32 getType();
|
||||
/* 80322DD8 */ virtual void setNBTScale(J3DNBTScale const*);
|
||||
/* 80322DB4 */ virtual void setNBTScale(J3DNBTScale);
|
||||
/* 80322DFC */ virtual void getNBTScale();
|
||||
@@ -205,7 +207,7 @@ public:
|
||||
/* 8031C0AC */ virtual void patchTexNoAndTexCoordScale();
|
||||
/* 8031DFB4 */ virtual void ptrToIndex();
|
||||
/* 80322974 */ virtual void indexToPtr();
|
||||
/* 80322998 */ virtual void getType();
|
||||
/* 80322998 */ virtual u32 getType();
|
||||
/* 80317BB4 */ virtual s32 countDLSize();
|
||||
/* 803229D0 */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 803229C0 */ virtual void setTexNo(u32, u16);
|
||||
@@ -269,7 +271,7 @@ public:
|
||||
/* 8031C854 */ virtual void patchTexNoAndTexCoordScale();
|
||||
/* 80321FE8 */ virtual void ptrToIndex();
|
||||
/* 80321FEC */ virtual void indexToPtr();
|
||||
/* 80322010 */ virtual void getType();
|
||||
/* 80322010 */ virtual u32 getType();
|
||||
/* 80317BCC */ virtual s32 countDLSize();
|
||||
/* 8032202C */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 8032201C */ virtual void setTexNo(u32, u16);
|
||||
@@ -339,7 +341,7 @@ public:
|
||||
/* 8031C558 */ virtual void patchTexNoAndTexCoordScale();
|
||||
/* 803223AC */ virtual void ptrToIndex();
|
||||
/* 803223B0 */ virtual void indexToPtr();
|
||||
/* 803223D4 */ virtual void getType();
|
||||
/* 803223D4 */ virtual u32 getType();
|
||||
/* 80317BC4 */ virtual s32 countDLSize();
|
||||
/* 803223F0 */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 803223E0 */ virtual void setTexNo(u32, u16);
|
||||
@@ -409,7 +411,7 @@ public:
|
||||
/* 8031CB7C */ virtual void patchTexNoAndTexCoordScale();
|
||||
/* 8031DED0 */ virtual void ptrToIndex();
|
||||
/* 80321C20 */ virtual void indexToPtr();
|
||||
/* 80321C44 */ virtual void getType();
|
||||
/* 80321C44 */ virtual u32 getType();
|
||||
/* 80317BD4 */ virtual s32 countDLSize();
|
||||
/* 80321C60 */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 80321C50 */ virtual void setTexNo(u32, u16);
|
||||
@@ -479,7 +481,7 @@ public:
|
||||
/* 8031C2E8 */ virtual void patchTexNoAndTexCoordScale();
|
||||
/* 80322770 */ virtual void ptrToIndex();
|
||||
/* 80322774 */ virtual void indexToPtr();
|
||||
/* 80322798 */ virtual void getType();
|
||||
/* 80322798 */ virtual u32 getType();
|
||||
/* 80317BBC */ virtual s32 countDLSize();
|
||||
/* 803227B4 */ virtual void setTexNo(u32, u16 const*);
|
||||
/* 803227A4 */ virtual void setTexNo(u32, u16);
|
||||
@@ -581,7 +583,7 @@ class J3DPEBlockXlu : public J3DPEBlock {
|
||||
public:
|
||||
/* 8031E98C */ virtual void load();
|
||||
/* 80317BF4 */ virtual s32 countDLSize();
|
||||
/* 80323258 */ virtual void getType();
|
||||
/* 80323258 */ virtual u32 getType();
|
||||
/* 80323264 */ virtual ~J3DPEBlockXlu();
|
||||
};
|
||||
|
||||
@@ -589,7 +591,7 @@ class J3DPEBlockTexEdge : public J3DPEBlock {
|
||||
public:
|
||||
/* 8031E6C8 */ virtual void load();
|
||||
/* 80317BEC */ virtual s32 countDLSize();
|
||||
/* 803232C0 */ virtual void getType();
|
||||
/* 803232C0 */ virtual u32 getType();
|
||||
/* 803232CC */ virtual ~J3DPEBlockTexEdge();
|
||||
};
|
||||
|
||||
@@ -597,7 +599,7 @@ class J3DPEBlockOpa : public J3DPEBlock {
|
||||
public:
|
||||
/* 8031E408 */ virtual void load();
|
||||
/* 80317BE4 */ virtual s32 countDLSize();
|
||||
/* 80323328 */ virtual void getType();
|
||||
/* 80323328 */ virtual u32 getType();
|
||||
/* 80323334 */ virtual ~J3DPEBlockOpa();
|
||||
};
|
||||
|
||||
@@ -612,7 +614,7 @@ public:
|
||||
/* 8031F940 */ virtual void diffFog();
|
||||
/* 8031F9B8 */ virtual void diffBlend();
|
||||
/* 80317C04 */ virtual s32 countDLSize();
|
||||
/* 8032194C */ virtual void getType();
|
||||
/* 8032194C */ virtual u32 getType();
|
||||
/* 8032197C */ virtual void setFog(J3DFog);
|
||||
/* 80321958 */ virtual void setFog(J3DFog*);
|
||||
/* 803219A0 */ virtual void getFog();
|
||||
@@ -654,7 +656,7 @@ public:
|
||||
/* 80321ACC */ virtual void diff(u32);
|
||||
/* 8031F0D8 */ virtual void diffBlend();
|
||||
/* 80317BFC */ virtual s32 countDLSize();
|
||||
/* 80321B00 */ virtual void getType();
|
||||
/* 80321B00 */ virtual u32 getType();
|
||||
/* 80321B28 */ virtual void setAlphaComp(J3DAlphaComp const*);
|
||||
/* 80321B0C */ virtual void setAlphaComp(J3DAlphaComp const&);
|
||||
/* 80321B44 */ virtual void getAlphaComp();
|
||||
@@ -732,7 +734,7 @@ public:
|
||||
/* 8031E328 */ virtual void diff(u32);
|
||||
/* 8031E12C */ virtual void load();
|
||||
/* 80317BDC */ virtual s32 countDLSize();
|
||||
/* 80323390 */ virtual void getType();
|
||||
/* 80323390 */ virtual u32 getType();
|
||||
/* 8032339C */ virtual void setIndTexStageNum(u8);
|
||||
/* 803233A4 */ virtual void getIndTexStageNum() const;
|
||||
/* 803233AC */ virtual void setIndTexOrder(u32, J3DIndTexOrder);
|
||||
@@ -758,7 +760,7 @@ public:
|
||||
/* 803173A0 */ virtual void reset(J3DIndBlock*);
|
||||
/* 80317398 */ virtual void diff(u32);
|
||||
/* 8031739C */ virtual void load();
|
||||
/* 803173A4 */ virtual void getType();
|
||||
/* 803173A4 */ virtual u32 getType();
|
||||
/* 803173B0 */ virtual ~J3DIndBlockNull();
|
||||
};
|
||||
|
||||
@@ -830,7 +832,7 @@ public:
|
||||
/* 8031A4D4 */ virtual void diffColorChan();
|
||||
/* 8031A8E0 */ virtual void diffLightObj(u32);
|
||||
/* 80317B94 */ virtual s32 countDLSize();
|
||||
/* 80322E80 */ virtual void getType();
|
||||
/* 80322E80 */ virtual u32 getType();
|
||||
/* 80322EB8 */ virtual void setMatColor(u32, J3DGXColor const*);
|
||||
/* 80322E8C */ virtual void setMatColor(u32, J3DGXColor);
|
||||
/* 80322EE4 */ virtual void getMatColor(u32);
|
||||
@@ -878,7 +880,7 @@ public:
|
||||
/* 80319BB4 */ virtual void diffMatColor();
|
||||
/* 80319D30 */ virtual void diffColorChan();
|
||||
/* 80317B84 */ virtual s32 countDLSize();
|
||||
/* 80323560 */ virtual void getType();
|
||||
/* 80323560 */ virtual u32 getType();
|
||||
/* 80323184 */ virtual void setMatColor(u32, J3DGXColor const*);
|
||||
/* 80323158 */ virtual void setMatColor(u32, J3DGXColor);
|
||||
/* 803231B0 */ virtual void getMatColor(u32);
|
||||
@@ -913,7 +915,7 @@ public:
|
||||
/* 8031816C */ virtual void load();
|
||||
/* 8031FDE4 */ virtual void reset(J3DColorBlock*);
|
||||
/* 80317B8C */ virtual s32 countDLSize();
|
||||
/* 80323074 */ virtual void getType();
|
||||
/* 80323074 */ virtual u32 getType();
|
||||
/* 803230AC */ virtual void setAmbColor(u32, J3DGXColor const*);
|
||||
/* 80323080 */ virtual void setAmbColor(u32, J3DGXColor);
|
||||
/* 803230D8 */ virtual void getAmbColor(u32);
|
||||
|
||||
@@ -45,6 +45,7 @@ public:
|
||||
/* 80316E70 */ virtual void change();
|
||||
|
||||
J3DMaterial* getNext() const { return mNext; }
|
||||
J3DShape* getShape() const { return mShape; }
|
||||
J3DTevBlock* getTevBlock() const { return mTevBlock; }
|
||||
J3DColorBlock* getColorBlock() const { return mColorBlock; }
|
||||
J3DTexGenBlock* getTexGenBlock() const { return mTexGenBlock; }
|
||||
@@ -57,8 +58,9 @@ public:
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
J3DNBTScale* getNBTScale() const { return mTexGenBlock->getNBTScale(); }
|
||||
|
||||
private:
|
||||
public:
|
||||
/* 0x04 */ J3DMaterial* mNext;
|
||||
/* 0x08 */ J3DShape* mShape;
|
||||
/* 0x0C */ J3DJoint* mJoint;
|
||||
@@ -72,7 +74,7 @@ private:
|
||||
/* 0x2C */ J3DTevBlock* mTevBlock;
|
||||
/* 0x30 */ J3DIndBlock* mIndBlock;
|
||||
/* 0x34 */ J3DPEBlock* mPEBlock;
|
||||
/* 0x38 */ J3DMaterial* field_0x38;
|
||||
/* 0x38 */ J3DMaterial* mpOrigMaterial;
|
||||
/* 0x3C */ J3DMaterialAnm* mMaterialAnm;
|
||||
/* 0x40 */ J3DCurrentMtx mCurrentMtx;
|
||||
/* 0x48 */ J3DDisplayListObj* mSharedDLObj;
|
||||
|
||||
@@ -57,6 +57,7 @@ public:
|
||||
}
|
||||
|
||||
void addChildPacket(J3DPacket*);
|
||||
J3DPacket* getNextPacket() const { return mpNextSibling; }
|
||||
|
||||
inline void clear() {
|
||||
mpNextSibling = NULL;
|
||||
@@ -81,9 +82,22 @@ public:
|
||||
J3DError newSingleDisplayList(u32);
|
||||
virtual void draw();
|
||||
|
||||
J3DDisplayListObj* getDisplayListObj() { return mpDisplayListObj; }
|
||||
J3DDisplayListObj* getDisplayListObj() const { return mpDisplayListObj; }
|
||||
void setDisplayListObj(J3DDisplayListObj* pObj) { mpDisplayListObj = pObj; }
|
||||
|
||||
void callDL() const { getDisplayListObj()->callDL(); }
|
||||
|
||||
enum {
|
||||
LOCKED = 0x01,
|
||||
};
|
||||
|
||||
bool checkFlag(u32 flag) const { return (mFlags & flag) != 0; }
|
||||
void onFlag(u32 flag) { mFlags |= flag; }
|
||||
void offFlag(u32 flag) { mFlags &= ~flag; }
|
||||
void lock() { onFlag(LOCKED); }
|
||||
void unlock() { offFlag(LOCKED); }
|
||||
J3DTexMtx* getTexMtxObj() const { return mpTexMtx; }
|
||||
|
||||
public:
|
||||
/* 0x10 */ u32 mFlags;
|
||||
/* 0x14 */ char mPad0[0x0C]; // unk
|
||||
@@ -104,11 +118,16 @@ public:
|
||||
|
||||
void setShape(J3DShape* pShape) { mpShape = pShape; }
|
||||
void setModel(J3DModel* pModel) { mpModel = pModel; }
|
||||
void setMtxBuffer(J3DMtxBuffer* pMtxBuffer) { mpMtxBuffer = pMtxBuffer; }
|
||||
void setBaseMtxPtr(Mtx* pMtx) { mpBaseMtxPtr = pMtx; }
|
||||
|
||||
J3DShape* getShape() const { return mpShape; }
|
||||
J3DModel* getModel() const { return mpModel; }
|
||||
|
||||
public:
|
||||
/* 0x28 */ J3DShape* mpShape;
|
||||
/* 0x2C */ J3DMtxBuffer* mpMtxBuffer;
|
||||
/* 0x30 */ Mtx* mpViewMtx;
|
||||
/* 0x30 */ Mtx* mpBaseMtxPtr;
|
||||
/* 0x34 */ u32 mDiffFlag;
|
||||
/* 0x38 */ J3DModel* mpModel;
|
||||
}; // Size: 0x3C
|
||||
@@ -121,13 +140,17 @@ public:
|
||||
void endDiff();
|
||||
bool isSame(J3DMatPacket*) const;
|
||||
|
||||
J3DShapePacket* getShapePacket() const { return mpShapePacket; }
|
||||
void setShapePacket(J3DShapePacket* packet) { mpShapePacket = packet; }
|
||||
void setInitShapePacket(J3DShapePacket* packet) { mpInitShapePacket = packet; }
|
||||
|
||||
virtual ~J3DMatPacket();
|
||||
virtual bool entry(J3DDrawBuffer*);
|
||||
virtual void draw();
|
||||
|
||||
public:
|
||||
/* 0x28 */ J3DShapePacket* mpShapePacket;
|
||||
/* 0x2C */ J3DShapePacket* mpFirstShapePacket;
|
||||
/* 0x28 */ J3DShapePacket* mpInitShapePacket;
|
||||
/* 0x2C */ J3DShapePacket* mpShapePacket;
|
||||
/* 0x30 */ J3DMaterial* mpMaterial;
|
||||
/* 0x34 */ u32 mSortFlags;
|
||||
/* 0x38 */ J3DTexture* mpTexture;
|
||||
|
||||
@@ -23,6 +23,13 @@ class J3DMaterial;
|
||||
class J3DVertexData;
|
||||
class J3DDrawMtxData;
|
||||
|
||||
enum J3DShpFlag {
|
||||
J3DShpFlag_SkinPosCpu = 0x0004,
|
||||
J3DShpFlag_SkinNrmCpu = 0x0008,
|
||||
J3DShpFlag_Hidden = 0x0010,
|
||||
J3DShpFlag_EnableLod = 0x0100,
|
||||
};
|
||||
|
||||
class J3DShape {
|
||||
public:
|
||||
/* 80314B48 */ void initialize();
|
||||
@@ -44,13 +51,23 @@ public:
|
||||
|
||||
void onFlag(u32 flag) { mFlags |= flag; }
|
||||
void offFlag(u32 flag) { mFlags &= ~flag; }
|
||||
bool checkFlag(u32 flag) { return !!(mFlags & flag); }
|
||||
void setDrawMtxDataPointer(J3DDrawMtxData* pMtxData) { mDrawMtxData = pMtxData; }
|
||||
void setVertexDataPointer(J3DVertexData* pVtxData) { mVertexData = pVtxData; }
|
||||
void* getVcdVatCmd() const { return mVcdVatCmd; }
|
||||
void setVcdVatCmd(void* pVatCmd) { mVcdVatCmd = pVatCmd; }
|
||||
void show() { offFlag(1); }
|
||||
void hide() { onFlag(1); }
|
||||
void setCurrentViewNoPtr(u32* pViewNoPtr) { mCurrentViewNo = pViewNoPtr; }
|
||||
void setScaleFlagArray(u8* pScaleFlagArray) { mScaleFlagArray = pScaleFlagArray; }
|
||||
void setDrawMtx(Mtx** pDrawMtx) { mDrawMtx = pDrawMtx; }
|
||||
void setNrmMtx(Mtx33** pNrmMtx) { mNrmMtx = pNrmMtx; }
|
||||
bool getNBTFlag() const { return mHasNBT; }
|
||||
u32 getBumpMtxOffset() const { return mBumpMtxOffset; }
|
||||
|
||||
inline J3DMaterial* getMaterial() const { return mMaterial; }
|
||||
inline u32 getPipeline() const { return (mFlags >> 2) & 7; }
|
||||
inline u32 getTexMtxLoadType() const { return mFlags & 0xF000; }
|
||||
static void resetVcdVatCache() { sOldVcdVatCmd = NULL; }
|
||||
|
||||
static void* sOldVcdVatCmd;
|
||||
@@ -64,17 +81,17 @@ private:
|
||||
/* 0x14 */ Vec mMin;
|
||||
/* 0x20 */ Vec mMax;
|
||||
/* 0x2C */ void* mVcdVatCmd;
|
||||
/* 0x30 */ _GXAttr* mVtxDesc;
|
||||
/* 0x30 */ GXVtxDescList* mVtxDesc;
|
||||
/* 0x34 */ bool mHasNBT;
|
||||
/* 0x38 */ J3DShapeMtx* mShapeMtx;
|
||||
/* 0x3C */ J3DShapeDraw* mShapeDraw;
|
||||
/* 0x38 */ J3DShapeMtx** mShapeMtx;
|
||||
/* 0x3C */ J3DShapeDraw** mShapeDraw;
|
||||
/* 0x40 */ J3DCurrentMtx mCurrentMtx;
|
||||
/* 0x48 */ bool mHasPNMTXIdx;
|
||||
/* 0x4C */ J3DVertexData* mVertexData;
|
||||
/* 0x50 */ J3DDrawMtxData* mDrawMtxData;
|
||||
/* 0x54 */ u8* mScaleFlagArray;
|
||||
/* 0x58 */ Mtx* mDrawMtx;
|
||||
/* 0x5C */ Mtx* mNrmMtx;
|
||||
/* 0x58 */ Mtx** mDrawMtx;
|
||||
/* 0x5C */ Mtx33** mNrmMtx;
|
||||
/* 0x60 */ u32* mCurrentViewNo;
|
||||
/* 0x64 */ u32 mBumpMtxOffset;
|
||||
};
|
||||
|
||||
@@ -4,6 +4,19 @@
|
||||
#include "dolphin/mtx/mtxvec.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
class J3DTexMtx;
|
||||
class J3DTexGenBlock;
|
||||
|
||||
class J3DDifferedTexMtx {
|
||||
public:
|
||||
/* 8031322C */ void loadExecute(f32 const (*)[4]);
|
||||
|
||||
static J3DTexGenBlock* sTexGenBlock;
|
||||
static J3DTexMtx* sTexMtxObj;
|
||||
};
|
||||
|
||||
extern u8 struct_804515B0[4];
|
||||
|
||||
class J3DShapeMtx {
|
||||
public:
|
||||
/* 803130A8 */ void resetMtxLoadCache();
|
||||
@@ -20,10 +33,14 @@ public:
|
||||
/* 80313BF0 */ virtual void calcNBTScale(Vec const&, f32 (*)[3][3], f32 (*)[3][3]);
|
||||
|
||||
static u8 sMtxLoadPipeline[48];
|
||||
static u8 sMtxLoadCache[20 + 4 /* padding */];
|
||||
static u8 sCurrentPipeline[4];
|
||||
static u8 sCurrentScaleFlag[4];
|
||||
static u8 sTexMtxLoadType[4];
|
||||
static u16 sMtxLoadCache[10 + 2 /* padding */];
|
||||
static u32 sCurrentPipeline;
|
||||
// static J3DScaleFlag sCurrentScaleFlag;
|
||||
static u8* sCurrentScaleFlag;
|
||||
static u32 sTexMtxLoadType;
|
||||
|
||||
static void setCurrentPipeline(u32 pipeline) { sCurrentPipeline = pipeline; }
|
||||
static void setLODFlag(u8 flag) { struct_804515B0[1] = flag; }
|
||||
|
||||
private:
|
||||
/* 0x04 */ u16 mUseMtxIndex;
|
||||
|
||||
@@ -19,8 +19,14 @@ class J3DShape;
|
||||
class J3DDrawBuffer;
|
||||
class J3DTexture;
|
||||
|
||||
enum J3DSysFlag {
|
||||
J3DSysFlag_SkinPosCpu = 0x00000004,
|
||||
J3DSysFlag_SkinNrmCpu = 0x00000008,
|
||||
J3DSysFlag_PostTexMtx = 0x40000000,
|
||||
};
|
||||
|
||||
struct J3DSys {
|
||||
/* 0x000 */ Mtx mMtx;
|
||||
/* 0x000 */ Mtx mViewMtx;
|
||||
/* 0x030 */ J3DMtxCalc* mCurrentMtxCalc;
|
||||
/* 0x034 */ u32 mFlags;
|
||||
/* 0x038 */ J3DModel* mModel;
|
||||
@@ -31,7 +37,9 @@ struct J3DSys {
|
||||
/* 0x050 */ u32 mDrawMode;
|
||||
/* 0x054 */ u32 mMaterialMode;
|
||||
/* 0x058 */ J3DTexture* mTexture;
|
||||
/* 0x05C */ u8 field_0x5c[0x10C - 0x5C];
|
||||
/* 0x05C */ u8 field_0x5c[0x104 - 0x5C];
|
||||
/* 0x104 */ Mtx* mModelDrawMtx;
|
||||
/* 0x104 */ Mtx33* mModelNrmMtx;
|
||||
/* 0x10C */ void* mVtxPos;
|
||||
/* 0x110 */ void* mVtxNrm;
|
||||
/* 0x114 */ _GXColor* mVtxCol;
|
||||
@@ -56,17 +64,25 @@ struct J3DSys {
|
||||
/* 0x4 */ XLU,
|
||||
};
|
||||
|
||||
Mtx* getViewMtx() { return &mViewMtx; }
|
||||
|
||||
void setDrawModeOpaTexEdge() { mDrawMode = OPA_TEX_EDGE; }
|
||||
|
||||
void setDrawModeXlu() { mDrawMode = XLU; }
|
||||
|
||||
void* getVtxPos() const { return mVtxPos; }
|
||||
void setVtxPos(void* pVtxPos) { mVtxPos = pVtxPos; }
|
||||
|
||||
void* getVtxNrm() const { return mVtxNrm; }
|
||||
void setVtxNrm(void* pVtxNrm) { mVtxNrm = pVtxNrm; }
|
||||
|
||||
void* getVtxCol() const { return mVtxCol; }
|
||||
void setVtxCol(_GXColor* pVtxCol) { mVtxCol = pVtxCol; }
|
||||
|
||||
void setModel(J3DModel* pModel) { mModel = pModel; }
|
||||
void setShapePacket(J3DShapePacket* pPacket) { mShapePacket = pPacket; }
|
||||
void setMatPacket(J3DMatPacket* pPacket) { mMatPacket = pPacket; }
|
||||
void setMaterialMode(u32 mode) { mMaterialMode = mode; }
|
||||
|
||||
void setTexture(J3DTexture* pTex) { mTexture = pTex; }
|
||||
|
||||
@@ -74,6 +90,18 @@ struct J3DSys {
|
||||
|
||||
void offFlag(u32 flag) { mFlags &= ~flag; }
|
||||
|
||||
bool checkFlag(u32 flag) { return mFlags & flag; }
|
||||
|
||||
void setModelDrawMtx(Mtx* pMtxArr) {
|
||||
mModelDrawMtx = pMtxArr;
|
||||
GXSetArray(GX_POS_MTX_ARRAY, mModelDrawMtx, sizeof(*mModelDrawMtx));
|
||||
}
|
||||
|
||||
void setModelNrmMtx(Mtx33* pMtxArr) {
|
||||
mModelNrmMtx = pMtxArr;
|
||||
GXSetArray(GX_NRM_MTX_ARRAY, mModelNrmMtx, sizeof(*mModelNrmMtx));
|
||||
}
|
||||
|
||||
static Mtx mCurrentMtx;
|
||||
static Vec mCurrentS;
|
||||
static Vec mParentS;
|
||||
|
||||
@@ -3,6 +3,7 @@
|
||||
|
||||
#include "JSystem/JUtility/JUTTexture.h"
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
#include "dolphin/mtx/mtx44.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
class J3DTexture {
|
||||
@@ -18,27 +19,21 @@ public:
|
||||
};
|
||||
|
||||
struct J3DTextureSRTInfo {
|
||||
/* 0x00 */ f32 field_0x0;
|
||||
/* 0x04 */ f32 field_0x4;
|
||||
/* 0x08 */ s16 field_0x8;
|
||||
/* 0x0C */ f32 field_0xc;
|
||||
/* 0x10 */ f32 field_0x10;
|
||||
/* 0x00 */ f32 mScaleX;
|
||||
/* 0x04 */ f32 mScaleY;
|
||||
/* 0x08 */ s16 mRotation;
|
||||
/* 0x0C */ f32 mTranslationX;
|
||||
/* 0x10 */ f32 mTranslationY;
|
||||
}; // Size: 0x14
|
||||
|
||||
struct J3DTexMtxInfo {
|
||||
/* 80325718 */ void operator=(J3DTexMtxInfo const&);
|
||||
|
||||
/* 0x00 */ u8 field_0x0;
|
||||
/* 0x01 */ u8 field_0x1;
|
||||
/* 0x04 */ f32 field_0x04;
|
||||
/* 0x08 */ f32 field_0x08;
|
||||
/* 0x0C */ f32 field_0x0c;
|
||||
/* 0x10 */ J3DTextureSRTInfo field_0x10;
|
||||
/* 0x24 */ Mtx mEffectMtx;
|
||||
/* 0x54 */ f32 field_0x54;
|
||||
/* 0x58 */ f32 field_0x58;
|
||||
/* 0x5C */ f32 field_0x5c;
|
||||
/* 0x60 */ f32 field_0x60;
|
||||
/* 0x00 */ u8 mProjection;
|
||||
/* 0x01 */ u8 mInfo;
|
||||
/* 0x04 */ Vec mCenter;
|
||||
/* 0x10 */ J3DTextureSRTInfo mSRT;
|
||||
/* 0x24 */ Mtx44 mEffectMtx;
|
||||
}; // Size: 0x64
|
||||
|
||||
class J3DTexMtx {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef JGEOMETRY_H
|
||||
#define JGEOMETRY_H
|
||||
|
||||
#include "dolphin/mtx/vec.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
namespace JGeometry {
|
||||
@@ -10,15 +11,29 @@ struct TVec3 {
|
||||
T x;
|
||||
T y;
|
||||
T z;
|
||||
};
|
||||
/*
|
||||
template <>
|
||||
struct TVec3<f32> {
|
||||
TVec3(Vec& v) {
|
||||
|
||||
void set(const TVec3& other) {
|
||||
x = other.x;
|
||||
y = other.y;
|
||||
z = other.z;
|
||||
}
|
||||
};
|
||||
|
||||
template <>
|
||||
struct TVec3<f32> {
|
||||
f32 x;
|
||||
f32 y;
|
||||
f32 z;
|
||||
|
||||
operator Vec*() { return (Vec*)&x; }
|
||||
operator const Vec*() const { return (Vec*)&x; }
|
||||
|
||||
void set(const TVec3<f32>& other) {
|
||||
x = other.x;
|
||||
y = other.y;
|
||||
z = other.z;
|
||||
}
|
||||
};
|
||||
*/
|
||||
|
||||
template <typename T>
|
||||
struct TVec2 {
|
||||
|
||||
@@ -1,6 +1,61 @@
|
||||
#ifndef JPADYNAMICSBLOCK_H
|
||||
#define JPADYNAMICSBLOCK_H
|
||||
|
||||
#include "JSystem/JGeometry.h"
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
class JPAEmitterWorkData;
|
||||
|
||||
struct JPADynamicsBlockData {
|
||||
// Common header.
|
||||
/* 0x00 */ u8 mMagic[4];
|
||||
/* 0x04 */ u32 mSize;
|
||||
|
||||
/* 0x08 */ u32 mFlags;
|
||||
/* 0x0C */ u32 mResUserWork;
|
||||
/* 0x10 */ JGeometry::TVec3<f32> mEmitterScl;
|
||||
/* 0x1C */ JGeometry::TVec3<f32> mEmitterTrs;
|
||||
/* 0x28 */ JGeometry::TVec3<f32> mEmitterDir;
|
||||
/* 0x34 */ f32 mInitialVelOmni;
|
||||
/* 0x38 */ f32 mInitialVelAxis;
|
||||
/* 0x3C */ f32 mInitialVelRndm;
|
||||
/* 0x40 */ f32 mInitialVelDir;
|
||||
/* 0x44 */ f32 mSpread;
|
||||
/* 0x48 */ f32 mInitialVelRatio;
|
||||
/* 0x4C */ f32 mRate;
|
||||
/* 0x50 */ f32 mRateRndm;
|
||||
/* 0x54 */ f32 mLifeTimeRndm;
|
||||
/* 0x58 */ f32 mVolumeSweep;
|
||||
/* 0x5C */ f32 mVolumeMinRad;
|
||||
/* 0x60 */ f32 mAirResist;
|
||||
/* 0x64 */ f32 mMoment;
|
||||
/* 0x68 */ JGeometry::TVec3<s16> mEmitterRot;
|
||||
/* 0x6E */ s16 mMaxFrame;
|
||||
/* 0x70 */ s16 mStartFrame;
|
||||
/* 0x72 */ s16 mLifeTime;
|
||||
/* 0x74 */ s16 mVolumeSize;
|
||||
/* 0x76 */ s16 mDivNumber;
|
||||
/* 0x78 */ u8 mRateStep;
|
||||
/* 0x7C */ u32 field_0x7c;
|
||||
};
|
||||
|
||||
typedef void (*JPADynamicsCalcVolumeFunc)(JPAEmitterWorkData*);
|
||||
|
||||
class JPADynamicsBlock {
|
||||
public:
|
||||
/* 8027BB18 */ JPADynamicsBlock(u8 const*);
|
||||
/* 8027BB4C */ void init();
|
||||
/* 8027BBE8 */ void create(JPAEmitterWorkData*);
|
||||
|
||||
void calc(JPAEmitterWorkData* work) { mpCalcVolumeFunc(work); }
|
||||
|
||||
s16 getStartFrame() const { return mpData->mStartFrame; }
|
||||
u32 getResUserWork() const { return mpData->mResUserWork; }
|
||||
|
||||
public:
|
||||
JPADynamicsBlockData* mpData;
|
||||
JPADynamicsCalcVolumeFunc mpCalcVolumeFunc;
|
||||
};
|
||||
|
||||
#endif /* JPADYNAMICSBLOCK_H */
|
||||
|
||||
@@ -3,4 +3,31 @@
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
struct JPAExTexShapeData {
|
||||
// Common header.
|
||||
/* 0x00 */ u8 mMagic[4];
|
||||
/* 0x04 */ u32 mSize;
|
||||
|
||||
/* 0x08 */ u32 mFlags;
|
||||
/* 0x0C */ f32 mIndTexMtx[2][3];
|
||||
/* 0x24 */ s8 mExpScale;
|
||||
/* 0x25 */ s8 mIndTexIdx;
|
||||
/* 0x26 */ s8 mSecTexIdx;
|
||||
};
|
||||
|
||||
class JPAExTexShape {
|
||||
public:
|
||||
/* 8027B13C */ JPAExTexShape(u8 const*);
|
||||
|
||||
const f32* getIndTexMtx() const { return &mpData->mIndTexMtx[0][0]; }
|
||||
s32 getExpScale() const { return mpData->mExpScale; }
|
||||
u8 getIndTexIdx() const { return mpData->mIndTexIdx; }
|
||||
u8 getSecTexIdx() const { return mpData->mSecTexIdx; }
|
||||
bool isUseIndirect() const { return !!(mpData->mFlags & 0x01); }
|
||||
bool isUseSecTex() const { return !!(mpData->mFlags & 0x0100); }
|
||||
|
||||
public:
|
||||
const JPAExTexShapeData* mpData;
|
||||
};
|
||||
|
||||
#endif /* JPAEXTEXSHAPE_H */
|
||||
|
||||
@@ -1,6 +1,9 @@
|
||||
#ifndef JPAMATH_H
|
||||
#define JPAMATH_H
|
||||
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
void JPAGetXYZRotateMtx(s16 x, s16 y, s16 z, Mtx dst);
|
||||
|
||||
#endif /* JPAMATH_H */
|
||||
|
||||
@@ -4,15 +4,243 @@
|
||||
#include "dolphin/gx/GX.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
class JPABaseParticle;
|
||||
#include "JSystem/JGeometry.h"
|
||||
#include "JSystem/JSupport/JSUList.h"
|
||||
|
||||
struct JPABaseEmitter {
|
||||
class JKRHeap;
|
||||
class JPABaseEmitter;
|
||||
class JPABaseParticle;
|
||||
class JPADrawInfo;
|
||||
class JPAEmitterCallBack;
|
||||
class JPAEmitterManager;
|
||||
class JPAParticleCallBack;
|
||||
class JPAResource;
|
||||
class JPAResourceManager;
|
||||
|
||||
class JPADrawInfo {
|
||||
public:
|
||||
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; }
|
||||
|
||||
public:
|
||||
u32 mSeed;
|
||||
};
|
||||
|
||||
template <class T>
|
||||
struct 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 */ u32 mEmitCount;
|
||||
/* 0x44 */ u32 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 */ void execute(JPABaseEmitter*);
|
||||
/* 8005036C */ void draw(JPABaseEmitter*);
|
||||
/* 80050370 */ void drawAfter(JPABaseEmitter*);
|
||||
/* 80050374 */ void executeAfter(JPABaseEmitter*);
|
||||
/* 8027E6A4 */ ~JPAEmitterCallBack();
|
||||
};
|
||||
|
||||
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 */ void createChild(JPABaseParticle*);
|
||||
/* 8027EA40 */ void createParticle();
|
||||
/* 8027EF30 */ void getCurrentCreateNumber() const;
|
||||
/* 8027EF40 */ void getDrawCount() const;
|
||||
/* 8027EF50 */ void loadTexture(u8, _GXTexMapID);
|
||||
/* 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; }
|
||||
bool checkStatus(u32 status) { return !!(mStatus & status); }
|
||||
u8 getResourceManagerID() const { return mResMgrID; }
|
||||
u8 getGroupID() const { return mGroupID; }
|
||||
|
||||
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 */ u16 mRateStepTimer;
|
||||
/* 0x108 */ GXColor mPrmClr;
|
||||
/* 0x10C */ GXColor mEnvClr;
|
||||
/* 0x110 */ u8 mDrawTimes;
|
||||
/* 0x111 */ u8 mTexAnmIdx;
|
||||
/* 0x112 */ u8 mGroupID;
|
||||
/* 0x113 */ u8 mResMgrID;
|
||||
};
|
||||
|
||||
class JPAParticleCallBack {
|
||||
@@ -22,4 +250,69 @@ public:
|
||||
virtual void draw(JPABaseEmitter*, JPABaseParticle*);
|
||||
};
|
||||
|
||||
class JPABaseParticle {
|
||||
public:
|
||||
/* 8027EFEC */ void init_p(JPAEmitterWorkData*);
|
||||
/* 8027F8C8 */ void init_c(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
/* 8027FFD0 */ void calc_p(JPAEmitterWorkData*);
|
||||
/* 80280260 */ void calc_c(JPAEmitterWorkData*);
|
||||
/* 802804C8 */ void canCreateChild(JPAEmitterWorkData*);
|
||||
/* 80280548 */ f32 getWidth(JPABaseEmitter const*) const;
|
||||
/* 80280568 */ f32 getHeight(JPABaseEmitter const*) const;
|
||||
|
||||
public:
|
||||
/* 0x00 */ Vec mPosition;
|
||||
/* 0x0C */ Vec mLocalPosition;
|
||||
/* 0x18 */ Vec mOffsetPosition;
|
||||
/* 0x24 */ Vec mVelocity;
|
||||
/* 0x30 */ Vec mVelType1;
|
||||
/* 0x3C */ Vec mVelType0;
|
||||
/* 0x48 */ Vec mVelType2;
|
||||
/* 0x54 */ Vec mBaseAxis;
|
||||
/* 0x60 */ f32 mParticleScaleX;
|
||||
/* 0x64 */ f32 mParticleScaleY;
|
||||
/* 0x68 */ f32 mScaleOut;
|
||||
/* 0x6C */ f32 mAlphaWaveRandom;
|
||||
/* 0x70 */ f32 mMoment;
|
||||
/* 0x74 */ f32 mDrag;
|
||||
/* 0x78 */ u32 field_0x78;
|
||||
/* 0x7C */ u32 mStatus;
|
||||
/* 0x80 */ u16 mAge;
|
||||
/* 0x82 */ u16 mLifeTime;
|
||||
/* 0x84 */ f32 mTime;
|
||||
/* 0x88 */ u16 mRotateAngle;
|
||||
/* 0x8A */ u16 mRotateSpeed;
|
||||
/* 0x8C */ GXColor mPrmClr;
|
||||
/* 0x90 */ GXColor mEnvClr;
|
||||
/* 0x94 */ u8 mTexAnmIdx;
|
||||
/* 0x95 */ u8 mAnmRandom;
|
||||
/* 0x96 */ u8 mPrmColorAlphaAnm;
|
||||
};
|
||||
|
||||
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();
|
||||
|
||||
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 /* JPAPARTICLE_H */
|
||||
|
||||
@@ -3,4 +3,73 @@
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
class JKRHeap;
|
||||
class JPAEmitterWorkData;
|
||||
class JPABaseEmitter;
|
||||
class JPABaseParticle;
|
||||
|
||||
class JPABaseShape;
|
||||
class JPAExtraShape;
|
||||
class JPAChildShape;
|
||||
class JPAExTexShape;
|
||||
class JPADynamicsBlock;
|
||||
class JPAFieldBlock;
|
||||
class JPAKeyBlock;
|
||||
|
||||
class JPAResource {
|
||||
public:
|
||||
/* 80274010 */ JPAResource();
|
||||
/* 80274080 */ void init(JKRHeap*);
|
||||
/* 802755E8 */ void calc(JPAEmitterWorkData*, JPABaseEmitter*);
|
||||
/* 80275A94 */ void draw(JPAEmitterWorkData*, JPABaseEmitter*);
|
||||
/* 80275B74 */ void drawP(JPAEmitterWorkData*);
|
||||
/* 80275EB0 */ void drawC(JPAEmitterWorkData*);
|
||||
/* 802761A8 */ void setPTev();
|
||||
/* 8027642C */ void setCTev(JPAEmitterWorkData*);
|
||||
/* 8027658C */ void calc_p(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
/* 80276608 */ void calc_c(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
/* 80276684 */ void calcField(JPAEmitterWorkData*, JPABaseParticle*);
|
||||
/* 80276700 */ void calcKey(JPAEmitterWorkData*);
|
||||
/* 80276840 */ void calcWorkData_c(JPAEmitterWorkData*);
|
||||
/* 80276A0C */ void calcWorkData_d(JPAEmitterWorkData*);
|
||||
|
||||
JPABaseShape* getBsp() const { return mpBaseShape; }
|
||||
JPAExtraShape* getEsp() const { return mpExtraShape; }
|
||||
JPAChildShape* getCsp() const { return mpChildShape; }
|
||||
JPAExTexShape* getEts() const { return mpExTexShape; }
|
||||
JPADynamicsBlock* getDyn() const { return mpDynamicsBlock; }
|
||||
|
||||
u32 getTexIdx(u32 idx) const { return mpTDB1[idx]; }
|
||||
u16 getUsrIdx() const { return mUsrIdx; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ void** mpCalcEmitterFuncList;
|
||||
/* 0x04 */ void** mpDrawEmitterFuncList;
|
||||
/* 0x08 */ void** mpDrawEmitterChildFuncList;
|
||||
/* 0x0C */ void** mpCalcParticleFuncList;
|
||||
/* 0x10 */ void** mpDrawParticleFuncList;
|
||||
/* 0x14 */ void** mpCalcParticleChildFuncList;
|
||||
/* 0x18 */ void** mpDrawParticleChildFuncList;
|
||||
|
||||
/* 0x1C */ JPABaseShape* mpBaseShape;
|
||||
/* 0x20 */ JPAExtraShape* mpExtraShape;
|
||||
/* 0x24 */ JPAChildShape* mpChildShape;
|
||||
/* 0x28 */ JPAExTexShape* mpExTexShape;
|
||||
/* 0x2C */ JPADynamicsBlock* mpDynamicsBlock;
|
||||
/* 0x30 */ JPAFieldBlock** mpFieldBlocks;
|
||||
/* 0x34 */ JPAKeyBlock** mpKeyBlocks;
|
||||
/* 0x38 */ u16 const* mpTDB1;
|
||||
/* 0x3C */ u16 mUsrIdx;
|
||||
/* 0x3E */ u8 mFieldBlockNum;
|
||||
/* 0x3F */ u8 mKeyBlockNum;
|
||||
/* 0x40 */ u8 mTDB1Num;
|
||||
/* 0x41 */ u8 mpCalcEmitterFuncListNum;
|
||||
/* 0x42 */ u8 mpDrawEmitterFuncListNum;
|
||||
/* 0x43 */ u8 mpDrawEmitterChildFuncListNum;
|
||||
/* 0x44 */ u8 mpCalcParticleFuncListNum;
|
||||
/* 0x45 */ u8 mpDrawParticleFuncListNum;
|
||||
/* 0x46 */ u8 mpCalcParticleChildFuncListNum;
|
||||
/* 0x47 */ u8 mpDrawParticleChildFuncListNum;
|
||||
};
|
||||
|
||||
#endif /* JPARESOURCE_H */
|
||||
|
||||
@@ -1,6 +1,34 @@
|
||||
#ifndef JPARESOURCEMANAGER_H
|
||||
#define JPARESOURCEMANAGER_H
|
||||
|
||||
#include "JSystem/JParticle/JPATexture.h"
|
||||
#include "dolphin/gx/GX.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
class JKRHeap;
|
||||
class ResTIMG;
|
||||
class JPAResource;
|
||||
|
||||
class JPAResourceManager {
|
||||
public:
|
||||
/* 80273E10 */ JPAResourceManager(void const*, JKRHeap*);
|
||||
/* 80273E68 */ JPAResource* getResource(u16) const;
|
||||
/* 80273EA8 */ bool checkUserIndexDuplication(u16) const;
|
||||
/* 80273EEC */ const ResTIMG* swapTexture(ResTIMG const*, char const*);
|
||||
/* 80273F8C */ void registRes(JPAResource*);
|
||||
/* 80273FAC */ void registTex(JPATexture*);
|
||||
/* 80273FCC */ u32 getResUserWork(u16) const;
|
||||
|
||||
void load(u16 idx, GXTexMapID texMapID) { mpTexArr[idx]->load(texMapID); }
|
||||
|
||||
public:
|
||||
/* 0x00 */ JKRHeap* mpHeap;
|
||||
/* 0x04 */ JPAResource** mpResArr;
|
||||
/* 0x08 */ JPATexture** mpTexArr;
|
||||
/* 0x0C */ u16 mResMax;
|
||||
/* 0x0E */ u16 mResNum;
|
||||
/* 0x10 */ u16 mTexMax;
|
||||
/* 0x12 */ u16 mTexNum;
|
||||
};
|
||||
|
||||
#endif /* JPARESOURCEMANAGER_H */
|
||||
|
||||
@@ -1,6 +1,29 @@
|
||||
#ifndef JPATEXTURE_H
|
||||
#define JPATEXTURE_H
|
||||
|
||||
#include "JSystem/JUtility/JUTTexture.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
struct JPATextureData {
|
||||
// Probably magic / size / flags up top here, but they're unused.
|
||||
/* 0x00 */ char field_0x00[0x0C];
|
||||
/* 0x0C */ char mName[0x14];
|
||||
/* 0x20 */ ResTIMG mResTIMG;
|
||||
};
|
||||
|
||||
class JPATexture {
|
||||
public:
|
||||
JPATexture(u8 const*);
|
||||
virtual ~JPATexture();
|
||||
|
||||
void load(GXTexMapID texMapID) { mTexture.load(texMapID); }
|
||||
|
||||
JUTTexture* getJUTTexture() { return &mTexture; }
|
||||
const char* getName() const { return mpData->mName; }
|
||||
|
||||
public:
|
||||
JUTTexture mTexture;
|
||||
const JPATextureData* mpData;
|
||||
};
|
||||
|
||||
#endif /* JPATEXTURE_H */
|
||||
|
||||
@@ -5,22 +5,6 @@
|
||||
#include "dolphin/types.h"
|
||||
#include "f_op/f_op_actor.h"
|
||||
|
||||
class JPAEmitterCallBack {
|
||||
public:
|
||||
/* 8027E6A4 */ virtual ~JPAEmitterCallBack() = 0;
|
||||
/* 80050368 */ virtual void execute(JPABaseEmitter*);
|
||||
/* 80050374 */ virtual void executeAfter(JPABaseEmitter*);
|
||||
/* 8005036C */ virtual void draw(JPABaseEmitter*);
|
||||
/* 80050370 */ virtual void drawAfter(JPABaseEmitter*);
|
||||
};
|
||||
|
||||
struct JPAResourceManager {
|
||||
/* 80273E10 */ JPAResourceManager(void const*, JKRHeap*);
|
||||
/* 80273EA8 */ void checkUserIndexDuplication(u16) const;
|
||||
/* 80273EEC */ void swapTexture(ResTIMG const*, char const*);
|
||||
/* 80273FCC */ void getResUserWork(u16) const;
|
||||
};
|
||||
|
||||
class dPa_levelEcallBack : public JPAEmitterCallBack {
|
||||
public:
|
||||
/* 8004FB18 */ virtual ~dPa_levelEcallBack();
|
||||
|
||||
+113
-8
@@ -12,6 +12,14 @@ typedef struct _GXColor {
|
||||
/* 0x1 */ u8 g;
|
||||
/* 0x2 */ u8 b;
|
||||
/* 0x3 */ u8 a;
|
||||
|
||||
_GXColor& operator=(const _GXColor& o) {
|
||||
r = o.r;
|
||||
g = o.g;
|
||||
b = o.b;
|
||||
a = o.a;
|
||||
return *this;
|
||||
}
|
||||
} GXColor;
|
||||
|
||||
typedef struct _GXColorS10 {
|
||||
@@ -234,7 +242,7 @@ typedef enum _GXLogicOp {
|
||||
/* 0x4 */ GX_LO_INV_AND,
|
||||
/* 0x5 */ GX_LO_NOOP,
|
||||
/* 0x6 */ GX_LO_XOR,
|
||||
/* 0x7 */ GX_LO_OP,
|
||||
/* 0x7 */ GX_LO_OR,
|
||||
/* 0x8 */ GX_LO_NOR,
|
||||
/* 0x9 */ GX_LO_EQUIV,
|
||||
/* 0xA */ GX_LO_INV,
|
||||
@@ -258,7 +266,7 @@ typedef enum _GXVtxFmt {
|
||||
} GXVtxFmt;
|
||||
|
||||
typedef enum _GXAttr {
|
||||
/* 0x00 */ GX_VA_PTNMTXIDX,
|
||||
/* 0x00 */ GX_VA_PNMTXIDX,
|
||||
/* 0x01 */ GX_VA_TEX0MTXIDX,
|
||||
/* 0x02 */ GX_VA_TEX1MTXIDX,
|
||||
/* 0x03 */ GX_VA_TEX2MTXIDX,
|
||||
@@ -364,8 +372,8 @@ typedef enum _GXTevColorArg {
|
||||
|
||||
typedef enum _GXTevColor {
|
||||
/* 0x0 */ GX_CH_RED,
|
||||
/* 0x1 */ GX_CH_BLUE,
|
||||
/* 0x2 */ GX_CH_GREEN,
|
||||
/* 0x1 */ GX_CH_GREEN,
|
||||
/* 0x2 */ GX_CH_BLUE,
|
||||
/* 0x3 */ GX_CH_ALPHA,
|
||||
} GXTevColor;
|
||||
|
||||
@@ -693,6 +701,41 @@ typedef enum _GXIndTexMtxID {
|
||||
/* 0xB */ GX_ITM_T2,
|
||||
} GXIndTexMtxID;
|
||||
|
||||
typedef enum _GXIndTexFormat {
|
||||
/* 0x0 */ GX_ITF_8,
|
||||
/* 0x1 */ GX_ITF_5,
|
||||
/* 0x2 */ GX_ITF_4,
|
||||
/* 0x3 */ GX_ITF_3,
|
||||
} GXIndTexFormat;
|
||||
|
||||
typedef enum _GXIndTexBiasSel {
|
||||
/* 0x0 */ GX_ITB_NONE,
|
||||
/* 0x1 */ GX_ITB_S,
|
||||
/* 0x2 */ GX_ITB_T,
|
||||
/* 0x3 */ GX_ITB_ST,
|
||||
/* 0x4 */ GX_ITB_U,
|
||||
/* 0x5 */ GX_ITB_SU,
|
||||
/* 0x6 */ GX_ITB_TU,
|
||||
/* 0x7 */ GX_ITB_STU,
|
||||
} GXIndTexBiasSel;
|
||||
|
||||
typedef enum _GXIndTexAlphaSel {
|
||||
/* 0x0 */ GX_ITBA_OFF,
|
||||
/* 0x1 */ GX_ITBA_S,
|
||||
/* 0x2 */ GX_ITBA_T,
|
||||
/* 0x3 */ GX_ITBA_U,
|
||||
} GXIndTexAlphaSel;
|
||||
|
||||
typedef enum _GXIndTexWrap {
|
||||
/* 0x0 */ GX_ITW_OFF,
|
||||
/* 0x1 */ GX_ITW_256,
|
||||
/* 0x2 */ GX_ITW_128,
|
||||
/* 0x3 */ GX_ITW_64,
|
||||
/* 0x4 */ GX_ITW_32,
|
||||
/* 0x5 */ GX_ITW_16,
|
||||
/* 0x6 */ GX_ITW_0,
|
||||
} GXIndTexWrap;
|
||||
|
||||
typedef enum _GXTexOffset {
|
||||
/* 0x0 */ GX_TO_ZERO,
|
||||
/* 0x1 */ GX_TO_SIXTEENTH,
|
||||
@@ -717,6 +760,62 @@ typedef enum _GXTexCacheSize {
|
||||
/* 0x3 */ GX_TEXCACHE_NONE,
|
||||
} GXTexCacheSize;
|
||||
|
||||
typedef enum _GXPosNrmMtx {
|
||||
GX_PNMTX0 = 3 * 0,
|
||||
GX_PNMTX1 = 3 * 1,
|
||||
GX_PNMTX2 = 3 * 2,
|
||||
GX_PNMTX3 = 3 * 3,
|
||||
GX_PNMTX4 = 3 * 4,
|
||||
GX_PNMTX5 = 3 * 5,
|
||||
GX_PNMTX6 = 3 * 6,
|
||||
GX_PNMTX7 = 3 * 7,
|
||||
GX_PNMTX8 = 3 * 8,
|
||||
GX_PNMTX9 = 3 * 9,
|
||||
} GXPosNrmMtx;
|
||||
|
||||
typedef enum _GXTexMtx {
|
||||
GX_TEXMTX0 = 30 + 0 * 3,
|
||||
GX_TEXMTX1 = 30 + 1 * 3,
|
||||
GX_TEXMTX2 = 30 + 2 * 3,
|
||||
GX_TEXMTX3 = 30 + 3 * 3,
|
||||
GX_TEXMTX4 = 30 + 4 * 3,
|
||||
GX_TEXMTX5 = 30 + 5 * 3,
|
||||
GX_TEXMTX6 = 30 + 6 * 3,
|
||||
GX_TEXMTX7 = 30 + 7 * 3,
|
||||
GX_TEXMTX8 = 30 + 8 * 3,
|
||||
GX_TEXMTX9 = 30 + 9 * 3,
|
||||
GX_IDENTITY = 60,
|
||||
};
|
||||
|
||||
typedef enum _GXPTTexMtx {
|
||||
GX_PTTEXMTX0 = 64 + 0 * 3,
|
||||
GX_PTTEXMTX1 = 64 + 1 * 3,
|
||||
GX_PTTEXMTX2 = 64 + 2 * 3,
|
||||
GX_PTTEXMTX3 = 64 + 3 * 3,
|
||||
GX_PTTEXMTX4 = 64 + 4 * 3,
|
||||
GX_PTTEXMTX5 = 64 + 5 * 3,
|
||||
GX_PTTEXMTX6 = 64 + 6 * 3,
|
||||
GX_PTTEXMTX7 = 64 + 7 * 3,
|
||||
GX_PTTEXMTX8 = 64 + 8 * 3,
|
||||
GX_PTTEXMTX9 = 64 + 9 * 3,
|
||||
GX_PTTEXMTX10 = 64 + 10 * 3,
|
||||
GX_PTTEXMTX11 = 64 + 11 * 3,
|
||||
GX_PTTEXMTX12 = 64 + 12 * 3,
|
||||
GX_PTTEXMTX13 = 64 + 13 * 3,
|
||||
GX_PTTEXMTX14 = 64 + 14 * 3,
|
||||
GX_PTTEXMTX15 = 64 + 15 * 3,
|
||||
GX_PTTEXMTX16 = 64 + 16 * 3,
|
||||
GX_PTTEXMTX17 = 64 + 17 * 3,
|
||||
GX_PTTEXMTX18 = 64 + 18 * 3,
|
||||
GX_PTTEXMTX19 = 64 + 19 * 3,
|
||||
GX_PTIDENTITY = 125,
|
||||
};
|
||||
|
||||
typedef struct _GXVtxDescList {
|
||||
GXAttr attr;
|
||||
GXAttrType type;
|
||||
} GXVtxDescList;
|
||||
|
||||
extern "C" {
|
||||
f32 GXGetYScaleFactor(u16 efb_height, u16 xfb_height);
|
||||
u16 GXGetNumXfbLines(u32 efb_height, f32 y_scale);
|
||||
@@ -741,10 +840,13 @@ void GXSetTevColorIn(GXTevStageID, GXTevColorArg, GXTevColorArg, GXTevColorArg,
|
||||
void GXSetTevAlphaIn(GXTevStageID, GXTevAlphaArg, GXTevAlphaArg, GXTevAlphaArg, GXTevAlphaArg);
|
||||
void GXSetTevColorOp(GXTevStageID, GXTevOp, GXTevBias, GXTevScale, GXBool, GXTevRegID);
|
||||
void GXSetTevAlphaOp(GXTevStageID, GXTevOp, GXTevBias, GXTevScale, GXBool, GXTevRegID);
|
||||
void GXSetTevIndirect(GXTevStageID, _GXIndTexStageID, GXIndTexFormat, GXIndTexBiasSel,
|
||||
GXIndTexMtxID, GXIndTexWrap, GXIndTexWrap, GXBool, GXBool, GXIndTexAlphaSel);
|
||||
void GXSetBlendMode(GXBlendMode, GXBlendFactor, GXBlendFactor, GXLogicOp);
|
||||
void GXSetVtxAttrFmt(GXVtxFmt, GXAttr, GXCompCnt, GXCompType, u32);
|
||||
void GXClearVtxDesc();
|
||||
void GXClearVtxDesc(void);
|
||||
void GXSetVtxDesc(GXAttr, GXAttrType);
|
||||
void GXSetArray(GXAttr, const void*, u8);
|
||||
typedef void (*GXDrawDoneCallback)(void);
|
||||
void GXSetDrawDoneCallback(GXDrawDoneCallback);
|
||||
void GXDrawDone(void);
|
||||
@@ -772,9 +874,11 @@ void GXPixModeSync(void);
|
||||
void GXProject(f32, f32, f32, Mtx, f32*, f32*, f32*, f32*, f32*);
|
||||
void GXSetAlphaCompare(GXCompare, u8, GXAlphaOp, GXCompare, u8);
|
||||
void GXSetAlphaUpdate(GXBool);
|
||||
void GXSetChanAmbColor(GXChannelID, GXColor);
|
||||
void GXSetChanMatColor(GXChannelID, GXColor);
|
||||
void GXSetClipMode(GXBool);
|
||||
void GXSetCoPlanar(GXBool);
|
||||
void GXSetColorUpdate(GXBool);
|
||||
void GXSetCopyFilter(GXBool, u8[12][2], GXBool, u8[7]);
|
||||
void GXSetCullMode(GXCullMode);
|
||||
void GXSetCurrentMtx(u32);
|
||||
@@ -786,7 +890,7 @@ void GXSetProjection(Mtx44, GXProjectionType);
|
||||
void GXSetScissor(u32, u32, u32, u32);
|
||||
void GXSetTevColorS10(GXTevRegID, GXColorS10);
|
||||
void GXSetTevKAlphaSel(GXTevStageID, GXTevKAlphaSel);
|
||||
void GXSetTevSwapMode(GXTevStageID, GXTevSwapSel);
|
||||
void GXSetTevSwapMode(GXTevStageID, GXTevSwapSel, GXTevSwapSel);
|
||||
void GXSetTevSwapModeTable(GXTevSwapSel, GXTevColor, GXTevColor, GXTevColor, GXTevColor);
|
||||
void GXSetTexCoordGen2(GXTexCoordID, GXTexGenType, GXTexGenSrc, u32, GXBool, u32);
|
||||
void GXSetTexCopyDst(u16, u16, GXTexFmt, GXBool);
|
||||
@@ -795,7 +899,7 @@ void GXSetViewport(f32, f32, f32, f32, f32, f32);
|
||||
void GXSetZCompLoc(GXBool);
|
||||
void GXSetZMode(GXBool, GXCompare, GXBool);
|
||||
void GXSetZTexture(GXZTexOp, GXZTexFmt, u32);
|
||||
void GXClearVtxDesc(void);
|
||||
void GXSetPointSize(u8, GXTexOffset);
|
||||
void GXSetLineWidth(u8, GXTexOffset);
|
||||
void GXSetTevDirect(GXTevStageID);
|
||||
void GXSetTevKColor(GXTevKColorID, GXColor);
|
||||
@@ -804,6 +908,7 @@ void GXGetScissor(u32*, u32*, u32*, u32*);
|
||||
void GXSetIndTexMtx(GXIndTexMtxID, Mtx23, s8);
|
||||
void GXSetIndTexCoordScale(GXIndTexStageID, GXIndTexScale, GXIndTexScale);
|
||||
void GXSetIndTexOrder(GXIndTexStageID, GXTexCoordID, GXTexMapID);
|
||||
void GXEnableTexOffsets(GXTexCoordID, GXBool, GXBool);
|
||||
};
|
||||
|
||||
#endif
|
||||
#endif
|
||||
|
||||
@@ -24,6 +24,8 @@ void PSMTXTransApply(const Mtx src, Mtx dst, float x, float y, float z);
|
||||
void PSMTXScale(Mtx matrix, float x_scale, float y_scale, float z_scale);
|
||||
void PSMTXScaleApply(const Mtx src, Mtx dst, float x_scale, float y_scale, float z_scale);
|
||||
void PSMTXQuat(Mtx matrix, const Quaternion* quat);
|
||||
void PSMTXMultVec(const Mtx matrix, const Vec* src, Vec* dst);
|
||||
void PSMTXMultVecSR(const Mtx matrix, const Vec* src, Vec* dst);
|
||||
|
||||
void C_MTXLookAt(Mtx param_1, const Vec* param_2, const Vec* param_3, const Vec* param_4);
|
||||
void C_MTXLightPerspective(Mtx matrix, float fov_y, float aspect, float scale_s, float scale_t,
|
||||
|
||||
Reference in New Issue
Block a user