mirror of
https://github.com/TwilitRealm/dusklight
synced 2026-06-24 15:43:13 -04:00
Merge remote-tracking branch 'Upstream/master'
This commit is contained in:
@@ -1,20 +1,24 @@
|
||||
#ifndef J2DANIMATION_H
|
||||
#define J2DANIMATION_H
|
||||
|
||||
#include "JSystem/J3DGraphAnimator/J3DAnimation.h"
|
||||
#include "JSystem/JUtility/JUTNameTab.h"
|
||||
#include "JSystem/JUtility/JUTTexture.h"
|
||||
#include "dolphin/gx/GX.h"
|
||||
#include "dolphin/os/OS.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
class J2DScreen;
|
||||
|
||||
class J2DAnmBase {
|
||||
public:
|
||||
/* 80053C94 */ virtual ~J2DAnmBase();
|
||||
/* 80053C94 */ virtual ~J2DAnmBase() {}
|
||||
/* 800569B0 */ virtual void searchUpdateMaterialID(J2DScreen*);
|
||||
|
||||
s16 getFrameMax() const { return mFrameMax; }
|
||||
void setFrame(f32 frame) { mFrame = frame; }
|
||||
f32 getFrame() const { return mFrame; }
|
||||
s32 getKind() const { return mKind; }
|
||||
|
||||
private:
|
||||
/* 0x0 */ // vtable
|
||||
@@ -26,7 +30,7 @@ private:
|
||||
|
||||
class J2DAnmVtxColor : public J2DAnmBase {
|
||||
public:
|
||||
/* 8030A358 */ virtual ~J2DAnmVtxColor();
|
||||
/* 8030A358 */ virtual ~J2DAnmVtxColor() {}
|
||||
/* 8030363C */ virtual void getColor(u8, u16, _GXColor*) const;
|
||||
|
||||
private:
|
||||
@@ -38,31 +42,54 @@ private:
|
||||
struct J3DTransformInfo;
|
||||
struct J3DTextureSRTInfo;
|
||||
|
||||
struct J2DAnmVtxColorKeyInfo {
|
||||
J3DAnmKeyTableBase mRInfo;
|
||||
J3DAnmKeyTableBase mGInfo;
|
||||
J3DAnmKeyTableBase mBInfo;
|
||||
J3DAnmKeyTableBase mAInfo;
|
||||
}; // Size = 0x18
|
||||
|
||||
class J2DAnmVtxColorKey : public J2DAnmVtxColor {
|
||||
/* 8030CC20 */ virtual ~J2DAnmVtxColorKey();
|
||||
/* 8030CC20 */ virtual ~J2DAnmVtxColorKey() {}
|
||||
/* 8030B704 */ virtual void getColor(u8, u16, _GXColor*) const;
|
||||
|
||||
private:
|
||||
/* 0x24 */ void* field_0x24[2];
|
||||
/* 0x2C */ void* field_0x2c;
|
||||
/* 0x30 */ void* field_0x30;
|
||||
/* 0x34 */ void* field_0x34;
|
||||
/* 0x38 */ void* field_0x38;
|
||||
/* 0x24 */ J2DAnmVtxColorKeyInfo* mInfoTable[2];
|
||||
/* 0x2C */ s16* mRValues;
|
||||
/* 0x30 */ s16* mGValues;
|
||||
/* 0x34 */ s16* mBValues;
|
||||
/* 0x38 */ s16* mAValues;
|
||||
}; // Size: 0x3C
|
||||
|
||||
struct J2DAnmVtxColorFullInfo {
|
||||
/* 0x00 */ u16 mRMaxFrame;
|
||||
/* 0x02 */ u16 mROffset;
|
||||
/* 0x04 */ u16 mGMaxFrame;
|
||||
/* 0x06 */ u16 mGOffset;
|
||||
/* 0x08 */ u16 mBMaxFrame;
|
||||
/* 0x0A */ u16 mBOffset;
|
||||
/* 0x0C */ u16 mAMaxFrame;
|
||||
/* 0x0E */ u16 mAOffset;
|
||||
}; // Size = 0x10
|
||||
|
||||
class J2DAnmVtxColorFull : public J2DAnmVtxColor {
|
||||
public:
|
||||
/* 8030CC8C */ virtual ~J2DAnmVtxColorFull();
|
||||
/* 8030CC8C */ virtual ~J2DAnmVtxColorFull() {}
|
||||
/* 8030B4C4 */ virtual void getColor(u8, u16, _GXColor*) const;
|
||||
|
||||
private:
|
||||
/* 0x24 */ void* field_0x24[2];
|
||||
/* 0x2C */ void* field_0x2c;
|
||||
/* 0x30 */ void* field_0x30;
|
||||
/* 0x34 */ void* field_0x34;
|
||||
/* 0x38 */ void* field_0x38;
|
||||
/* 0x24 */ J2DAnmVtxColorFullInfo* mInfoTable[2];
|
||||
/* 0x2C */ u8* mRValues;
|
||||
/* 0x30 */ u8* mGValues;
|
||||
/* 0x34 */ u8* mBValues;
|
||||
/* 0x38 */ u8* mAValues;
|
||||
}; // Size: 0x3C
|
||||
|
||||
struct J2DAnmVisibilityFullInfo {
|
||||
u16 _0;
|
||||
u16 _2;
|
||||
}; // Size = 0x4
|
||||
|
||||
class J2DAnmVisibilityFull : public J2DAnmBase {
|
||||
public:
|
||||
/* 8030A3B4 */ virtual ~J2DAnmVisibilityFull();
|
||||
@@ -71,60 +98,84 @@ public:
|
||||
private:
|
||||
/* 0x10 */ u16 field_0x10;
|
||||
/* 0x12 */ u16 field_0x12;
|
||||
/* 0x14 */ void* field_0x14;
|
||||
/* 0x18 */ void* field_0x18;
|
||||
/* 0x14 */ J2DAnmVisibilityFullInfo* field_0x14;
|
||||
/* 0x18 */ u8* field_0x18;
|
||||
}; // Size: 0x1C
|
||||
|
||||
class J2DAnmTransform : public J2DAnmBase {
|
||||
public:
|
||||
/* 80184370 */ virtual ~J2DAnmTransform();
|
||||
/* 80184370 */ virtual ~J2DAnmTransform() {}
|
||||
/* 80191130 */ virtual void getTransform(u16, J3DTransformInfo*) const;
|
||||
|
||||
private:
|
||||
/* 0x10 */ f32* field_0x10;
|
||||
/* 0x14 */ s16* field_0x14;
|
||||
/* 0x18 */ f32* field_0x18;
|
||||
protected:
|
||||
/* 0x10 */ f32* mScaleValues;
|
||||
/* 0x14 */ s16* mRotationValues;
|
||||
/* 0x18 */ f32* mTranslateValues;
|
||||
}; // Size: 0x1C
|
||||
|
||||
struct J2DAnmTransformKeyInfo {
|
||||
J3DAnmKeyTableBase mScaleInfo;
|
||||
J3DAnmKeyTableBase mRotationInfo;
|
||||
J3DAnmKeyTableBase mTranslateInfo;
|
||||
}; // Size = 0x12
|
||||
|
||||
class J2DAnmTransformKey : public J2DAnmTransform {
|
||||
public:
|
||||
/* 801959C0 */ virtual ~J2DAnmTransformKey();
|
||||
/* 8030CD7C */ virtual void getTransform(u16, J3DTransformInfo*) const;
|
||||
/* 801959C0 */ virtual ~J2DAnmTransformKey() {}
|
||||
/* 8030CD7C */ virtual void getTransform(u16 p1, J3DTransformInfo* pInfo) const {
|
||||
this->calcTransform(getFrame(), p1, pInfo);
|
||||
}
|
||||
/* 8030AAFC */ virtual void calcTransform(f32, u16, J3DTransformInfo*) const;
|
||||
|
||||
private:
|
||||
/* 0x1C */ u8 field_0x1c[8];
|
||||
/* 0x24 */ void* field_0x24;
|
||||
/* 0x28 */ void* field_0x28;
|
||||
/* 0x24 */ u32 field_0x24;
|
||||
/* 0x28 */ J2DAnmTransformKeyInfo* mInfoTable;
|
||||
};
|
||||
|
||||
struct J2DAnmTransformFullInfo {
|
||||
/* 0x00 */ u16 mScaleMaxFrame;
|
||||
/* 0x02 */ u16 mScaleOffset;
|
||||
/* 0x04 */ u16 mRotationMaxFrame;
|
||||
/* 0x06 */ u16 mRotationOffset;
|
||||
/* 0x08 */ u16 mTranslateMaxFrame;
|
||||
/* 0x0A */ u16 mTranslateOffset;
|
||||
}; // Size = 0xC
|
||||
|
||||
class J2DAnmTransformFull : public J2DAnmTransform {
|
||||
public:
|
||||
/* 8030CDAC */ virtual ~J2DAnmTransformFull();
|
||||
/* 8030CDAC */ virtual ~J2DAnmTransformFull() {}
|
||||
/* 8030A590 */ virtual void getTransform(u16, J3DTransformInfo*) const;
|
||||
|
||||
private:
|
||||
/* 0x1C */ u8 field_0x1c[6];
|
||||
/* 0x22 */ u16 field_0x22;
|
||||
/* 0x24 */ void* field_0x24;
|
||||
/* 0x24 */ J2DAnmTransformFullInfo* mTableInfo;
|
||||
};
|
||||
|
||||
struct J2DAnmTextureSRTKeyInfo {
|
||||
J3DAnmKeyTableBase mScaleInfo;
|
||||
J3DAnmKeyTableBase mRotationInfo;
|
||||
J3DAnmKeyTableBase mTranslationInfo;
|
||||
}; // Size = 0x12
|
||||
|
||||
class J2DAnmTextureSRTKey : public J2DAnmBase {
|
||||
public:
|
||||
/* 8030B9F0 */ void calcTransform(f32, u16, J3DTextureSRTInfo*) const;
|
||||
|
||||
/* 80184274 */ virtual ~J2DAnmTextureSRTKey();
|
||||
/* 80184274 */ virtual ~J2DAnmTextureSRTKey() {}
|
||||
/* 8030BC60 */ virtual void searchUpdateMaterialID(J2DScreen*);
|
||||
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum / 3; }
|
||||
|
||||
private:
|
||||
/* 0x10 */ int field_0x10;
|
||||
/* 0x14 */ int field_0x14;
|
||||
/* 0x14 */ J2DAnmTextureSRTKeyInfo* mInfoTable;
|
||||
/* 0x18 */ u16 mUpdateMaterialNum;
|
||||
/* 0x1A */ u16 field_0x1a;
|
||||
/* 0x1C */ u16 field_0x1c;
|
||||
/* 0x20 */ int field_0x20;
|
||||
/* 0x24 */ int field_0x24;
|
||||
/* 0x28 */ int field_0x28;
|
||||
/* 0x20 */ f32* mScaleValues;
|
||||
/* 0x24 */ s16* mRotationValues;
|
||||
/* 0x28 */ f32* mTranslationValues;
|
||||
/* 0x2C */ u8* mUpdateTexMtxID;
|
||||
/* 0x30 */ u16* mUpdateMaterialID;
|
||||
/* 0x34 */ JUTNameTab field_0x34;
|
||||
@@ -143,6 +194,13 @@ private:
|
||||
/* 0x7C */ int field_0x7c;
|
||||
};
|
||||
|
||||
struct J2DAnmTexPatternInfo {
|
||||
/* 0x00 */ u16 mMaxFrame;
|
||||
/* 0x02 */ u16 mOffset;
|
||||
/* 0x04 */ u16 _4;
|
||||
/* 0x06 */ u16 _6;
|
||||
}; // Size = 0x8
|
||||
|
||||
class J2DAnmTexPattern : public J2DAnmBase {
|
||||
public:
|
||||
struct J2DAnmTexPatternTIMGPointer {
|
||||
@@ -154,15 +212,16 @@ public:
|
||||
}; // Size: 0x8
|
||||
|
||||
/* 8030BEE8 */ void getTexNo(u16, u16*) const;
|
||||
/* 8030BF9C */ void getResTIMG(u16) const;
|
||||
/* 8030BFF0 */ void getPalette(u16) const;
|
||||
/* 8030BF9C */ ResTIMG* getResTIMG(u16) const;
|
||||
/* 8030BFF0 */ JUTPalette* getPalette(u16) const;
|
||||
|
||||
/* 8030CB90 */ virtual ~J2DAnmTexPattern();
|
||||
/* 8030CB90 */ virtual ~J2DAnmTexPattern() { delete[] mTIMGPtrArray; }
|
||||
/* 8030BD10 */ virtual void searchUpdateMaterialID(J2DScreen*);
|
||||
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; }
|
||||
|
||||
private:
|
||||
/* 0x10 */ int field_0x10;
|
||||
/* 0x14 */ void* mAnmTable;
|
||||
/* 0x10 */ u16* mValues;
|
||||
/* 0x14 */ J2DAnmTexPatternInfo* mAnmTable;
|
||||
/* 0x18 */ u8 field_0x18[2];
|
||||
/* 0x1A */ u16 mUpdateMaterialNum;
|
||||
/* 0x1C */ u16* mUpdaterMaterialID;
|
||||
@@ -170,13 +229,21 @@ private:
|
||||
/* 0x30 */ J2DAnmTexPatternTIMGPointer* mTIMGPtrArray;
|
||||
};
|
||||
|
||||
struct J2DAnmTevRegKeyInfo {
|
||||
/* 0x00 */ J3DAnmKeyTableBase mRTable;
|
||||
/* 0x06 */ J3DAnmKeyTableBase mGTable;
|
||||
/* 0x0C */ J3DAnmKeyTableBase mBTable;
|
||||
/* 0x12 */ J3DAnmKeyTableBase mATable;
|
||||
/* 0x18 */ u8 _18[4];
|
||||
}; // Size = 0x1C
|
||||
|
||||
class J2DAnmTevRegKey : public J2DAnmBase {
|
||||
public:
|
||||
/* 8030C0F0 */ void getTevColorReg(u16, _GXColorS10*) const;
|
||||
/* 8030C3B4 */ void getTevKonstReg(u16, _GXColor*) const;
|
||||
|
||||
/* 801841EC */ virtual ~J2DAnmTevRegKey();
|
||||
/* 8030C678 */ virtual void searchUpdateMaterialID(J2DScreen*);
|
||||
/* 801841EC */ virtual ~J2DAnmTevRegKey() {}
|
||||
/* 8030C678 */ virtual void searchUpdateMaterialID(J2DScreen* pScreen);
|
||||
|
||||
private:
|
||||
/* 0x10 */ u16 mCRegUpdateMaterialNum;
|
||||
@@ -193,27 +260,28 @@ private:
|
||||
/* 0x28 */ JUTNameTab field_0x28;
|
||||
/* 0x38 */ u16* mKRegUpdateMaterialID;
|
||||
/* 0x3C */ JUTNameTab field_0x3c;
|
||||
/* 0x4C */ void* mAnmCRegKeyTable;
|
||||
/* 0x50 */ void* mAnmKRegKeyTable;
|
||||
/* 0x54 */ int field_0x54;
|
||||
/* 0x58 */ int field_0x58;
|
||||
/* 0x5C */ int field_0x5c;
|
||||
/* 0x60 */ int field_0x60;
|
||||
/* 0x64 */ int field_0x64;
|
||||
/* 0x68 */ int field_0x68;
|
||||
/* 0x6C */ int field_0x6c;
|
||||
/* 0x70 */ int field_0x70;
|
||||
/* 0x4C */ J2DAnmTevRegKeyInfo* mAnmCRegKeyTable;
|
||||
/* 0x50 */ J2DAnmTevRegKeyInfo* mAnmKRegKeyTable;
|
||||
/* 0x54 */ s16* mCRValues;
|
||||
/* 0x58 */ s16* mCGValues;
|
||||
/* 0x5C */ s16* mCBValues;
|
||||
/* 0x60 */ s16* mCAValues;
|
||||
/* 0x64 */ s16* mKRValues;
|
||||
/* 0x68 */ s16* mKGValues;
|
||||
/* 0x6C */ s16* mKBValues;
|
||||
/* 0x70 */ s16* mKAValues;
|
||||
};
|
||||
|
||||
class J2DAnmColor : public J2DAnmBase {
|
||||
public:
|
||||
/* 801842FC */ virtual ~J2DAnmColor();
|
||||
/* 801842FC */ virtual ~J2DAnmColor() {}
|
||||
/* 8030AF24 */ virtual void searchUpdateMaterialID(J2DScreen*);
|
||||
/* 802EB390 */ virtual void getColor(u16, _GXColor*) const;
|
||||
u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; }
|
||||
|
||||
private:
|
||||
/* 0x10 */ u16 field_0x10;
|
||||
/* 0x10 */ u16 field_0x12;
|
||||
/* 0x12 */ u16 field_0x12;
|
||||
/* 0x14 */ u16 field_0x14;
|
||||
/* 0x16 */ u16 field_0x16;
|
||||
/* 0x18 */ u16 mUpdateMaterialNum;
|
||||
@@ -221,30 +289,135 @@ private:
|
||||
/* 0x20 */ JUTNameTab field_0x20;
|
||||
}; // Size: 0x30
|
||||
|
||||
struct J2DAnmColorKeyInfo {
|
||||
J3DAnmKeyTableBase mRInfo;
|
||||
J3DAnmKeyTableBase mGInfo;
|
||||
J3DAnmKeyTableBase mBInfo;
|
||||
J3DAnmKeyTableBase mAInfo;
|
||||
}; // Size = 0x18
|
||||
|
||||
class J2DAnmColorKey : public J2DAnmColor {
|
||||
public:
|
||||
/* 80239BE0 */ virtual ~J2DAnmColorKey();
|
||||
/* 80239BE0 */ virtual ~J2DAnmColorKey() {}
|
||||
/* 8030B200 */ virtual void getColor(u16, _GXColor*) const;
|
||||
|
||||
private:
|
||||
/* 0x30 */ int field_0x30;
|
||||
/* 0x34 */ int field_0x34;
|
||||
/* 0x38 */ int field_0x38;
|
||||
/* 0x3C */ int field_0x3c;
|
||||
/* 0x40 */ int field_0x40;
|
||||
/* 0x30 */ s16* mRValues;
|
||||
/* 0x34 */ s16* mGValues;
|
||||
/* 0x38 */ s16* mBValues;
|
||||
/* 0x3C */ s16* mAValues;
|
||||
/* 0x40 */ J2DAnmColorKeyInfo* mInfoTable;
|
||||
};
|
||||
|
||||
struct J2DAnmColorFullInfo {
|
||||
/* 0x00 */ u16 mRMaxFrame;
|
||||
/* 0x02 */ u16 mROffset;
|
||||
/* 0x04 */ u16 mGMaxFrame;
|
||||
/* 0x06 */ u16 mGOffset;
|
||||
/* 0x08 */ u16 mBMaxFrame;
|
||||
/* 0x0A */ u16 mBOffset;
|
||||
/* 0x0C */ u16 mAMaxFrame;
|
||||
/* 0x0E */ u16 mAOffset;
|
||||
}; // Size = 0x10
|
||||
|
||||
class J2DAnmColorFull : public J2DAnmColor {
|
||||
public:
|
||||
/* 8030CCF8 */ virtual ~J2DAnmColorFull();
|
||||
/* 8030CCF8 */ virtual ~J2DAnmColorFull() {}
|
||||
/* 8030AFC8 */ virtual void getColor(u16, _GXColor*) const;
|
||||
|
||||
private:
|
||||
/* 0x30 */ int field_0x30;
|
||||
/* 0x34 */ int field_0x34;
|
||||
/* 0x38 */ int field_0x38;
|
||||
/* 0x3C */ int field_0x3c;
|
||||
/* 0x40 */ int field_0x40;
|
||||
/* 0x30 */ u8* mRValues;
|
||||
/* 0x34 */ u8* mGValues;
|
||||
/* 0x38 */ u8* mBValues;
|
||||
/* 0x3C */ u8* mAValues;
|
||||
/* 0x40 */ J2DAnmColorFullInfo* mInfoTable;
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
inline f32 J2DHermiteInterpolation(f32, T*, T*, T*, T*, T*, T*);
|
||||
|
||||
inline f32 JMAHermiteInterpolation(register f32 p1, register f32 p2, register f32 p3,
|
||||
register f32 p4, register f32 p5, register f32 p6,
|
||||
register f32 p7) {
|
||||
register f32 ff25;
|
||||
register f32 ff31;
|
||||
register f32 ff30;
|
||||
register f32 ff29;
|
||||
register f32 ff28;
|
||||
register f32 ff27;
|
||||
register f32 ff26;
|
||||
// clang-format off
|
||||
asm {
|
||||
fsubs ff31, p1, p2
|
||||
fsubs ff30, p5, p2
|
||||
fdivs ff29, ff31, ff30
|
||||
fmuls ff28,ff29,ff29
|
||||
fadds ff25,ff29,ff29
|
||||
fsubs ff27,ff28,ff29
|
||||
fsubs ff30, p3, p6
|
||||
fmsubs ff26,ff25,ff27,ff28
|
||||
fmadds ff25,p4,ff27,p4
|
||||
fmadds ff26,ff26,ff30,p3
|
||||
fmadds ff25,p7,ff27,ff25
|
||||
fmsubs ff25,ff29,p4,ff25
|
||||
fnmsubs ff25,ff31,ff25,ff26
|
||||
|
||||
}
|
||||
// clang-format on
|
||||
return ff25;
|
||||
}
|
||||
|
||||
template <>
|
||||
inline f32 J2DHermiteInterpolation<f32>(f32 f1, f32* f2, f32* f3, f32* f4, f32* f5, f32* f6,
|
||||
f32* f7) {
|
||||
return JMAHermiteInterpolation(f1, *f2, *f3, *f4, *f5, *f6, *f7);
|
||||
}
|
||||
|
||||
template <>
|
||||
inline f32 J2DHermiteInterpolation<s16>(register f32 pp1, register s16* pp2, register s16* pp3,
|
||||
register s16* pp4, register s16* pp5, register s16* pp6,
|
||||
register s16* pp7) {
|
||||
register f32 p1 = pp1;
|
||||
register f32 ff8;
|
||||
register f32 ff7;
|
||||
register f32 ff6;
|
||||
register f32 ff5;
|
||||
register f32 ff4;
|
||||
register f32 ff3;
|
||||
register f32 ff2;
|
||||
register f32 ff0;
|
||||
register f32 fout;
|
||||
register s16* p2 = pp2;
|
||||
register s16* p3 = pp3;
|
||||
register s16* p4 = pp4;
|
||||
register s16* p5 = pp5;
|
||||
register s16* p6 = pp6;
|
||||
register s16* p7 = pp7;
|
||||
// clang-format off
|
||||
asm {
|
||||
psq_l ff2, 0(p2), 0x1, 5
|
||||
psq_l ff0, 0(p5), 0x1, 5
|
||||
psq_l ff7, 0(p3), 0x1, 5
|
||||
fsubs ff5, ff0, ff2
|
||||
psq_l ff6, 0(p6), 0x1, 5
|
||||
fsubs ff3, p1, ff2
|
||||
psq_l ff0, 0(p7), 0x1, 5
|
||||
fsubs ff4, ff6, ff7
|
||||
fdivs ff3, ff3, ff5
|
||||
psq_l fout, 0(p4), 0x1, 5
|
||||
fmadds ff0, ff0, ff5, ff7
|
||||
fmuls ff2, ff3, ff3
|
||||
fnmsubs ff4, ff5, fout, ff4
|
||||
fsubs ff0, ff0, ff6
|
||||
fsubs ff0, ff0, ff4
|
||||
fmuls ff0, ff2, ff0
|
||||
fmadds fout, ff5, fout, ff0
|
||||
fmadds fout, fout, ff3, ff7
|
||||
fmadds fout, ff4, ff2, fout
|
||||
fsubs fout, fout, ff0
|
||||
}
|
||||
// clang-format on
|
||||
return fout;
|
||||
}
|
||||
|
||||
#endif /* J2DANIMATION_H */
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
#ifndef J2DGRAFCONTEXT_H
|
||||
#define J2DGRAFCONTEXT_H
|
||||
|
||||
#include "JSystem/J2DGraph/J2DMatBlock.h"
|
||||
#include "JSystem/JGeometry.h"
|
||||
#include "JSystem/JUtility/TColor.h"
|
||||
#include "dolphin/mtx/mtx.h"
|
||||
@@ -35,7 +36,7 @@ public:
|
||||
/* 802E9664 */ virtual s32 getGrafType() const { return 0; }
|
||||
/* 802E966C */ virtual void setLookat() {}
|
||||
|
||||
protected:
|
||||
public:
|
||||
/* 0x04 */ JGeometry::TBox2<f32> mBounds;
|
||||
/* 0x14 */ JGeometry::TBox2<f32> mScissorBounds;
|
||||
/* 0x24 */ JUtility::TColor mColorTL;
|
||||
@@ -46,15 +47,9 @@ protected:
|
||||
/* 0x38 */ JGeometry::TVec2<f32> mPrevPos;
|
||||
/* 0x40 */ Mtx44 mMtx44;
|
||||
/* 0x80 */ Mtx mPosMtx;
|
||||
/* 0xB0 */ u8 field_0xb0;
|
||||
/* 0xB1 */ u8 field_0xb1;
|
||||
/* 0xB2 */ u8 field_0xb2;
|
||||
/* 0xB3 */ u8 mLineBlendMode;
|
||||
/* 0xB4 */ u8 mLineSrcBlendFactor;
|
||||
/* 0xB5 */ u8 mLineDstBlendFactor;
|
||||
/* 0xB6 */ u8 mBoxBlendMode;
|
||||
/* 0xB7 */ u8 mBoxSrcBlendFactor;
|
||||
/* 0xB8 */ u8 mBoxDstBlendFactor;
|
||||
/* 0xB0 */ J2DBlendInfo field_0xb0;
|
||||
/* 0xB3 */ J2DBlendInfo mLinePart;
|
||||
/* 0xB6 */ J2DBlendInfo mBoxPart;
|
||||
};
|
||||
|
||||
#endif /* J2DGRAFCONTEXT_H */
|
||||
|
||||
@@ -5,14 +5,26 @@
|
||||
#include "dolphin/types.h"
|
||||
|
||||
struct J2DResReference {
|
||||
/* 8030CF10 */ void getResReference(u16) const;
|
||||
/* 8030CF44 */ void getName(u16) const;
|
||||
/* 0x00 */ u16 mCount;
|
||||
/* 0x02 */ u16 mOffsets[1];
|
||||
|
||||
/* 8030CF10 */ s8* getResReference(u16) const;
|
||||
/* 8030CF44 */ char* getName(u16) const;
|
||||
};
|
||||
|
||||
struct J2DataManageLink {
|
||||
/* 0x00 */ void* mData;
|
||||
/* 0x04 */ char* mName;
|
||||
/* 0x08 */ J2DataManageLink* mNext;
|
||||
};
|
||||
|
||||
class J2DDataManage {
|
||||
private:
|
||||
/* 0x00 */ J2DataManageLink* mList;
|
||||
|
||||
public:
|
||||
/* 8030CE18 */ void get(char const*);
|
||||
/* 8030CE7C */ void get(JSUInputStream*);
|
||||
/* 8030CE18 */ void* get(char const*);
|
||||
/* 8030CE7C */ void* get(JSUInputStream*);
|
||||
};
|
||||
|
||||
#endif /* J2DMANAGE_H */
|
||||
|
||||
@@ -414,11 +414,11 @@ struct J2DBlendInfo {
|
||||
/* 0x0 */ u8 mType;
|
||||
/* 0x1 */ u8 mSrcFactor;
|
||||
/* 0x2 */ u8 mDstFactor;
|
||||
/* 0x3 */ u8 mOp;
|
||||
};
|
||||
|
||||
struct J2DBlend {
|
||||
/* 0x0 */ J2DBlendInfo mBlendInfo;
|
||||
/* 0x3 */ u8 mOp;
|
||||
};
|
||||
|
||||
class J2DPEBlock {
|
||||
|
||||
@@ -31,7 +31,7 @@ public:
|
||||
J2DPane(J2DPane* other, JSURandomInputStream* stream, u8 arg3);
|
||||
virtual ~J2DPane();
|
||||
|
||||
/* 0x0c */ virtual s32 getTypeID() const;
|
||||
/* 0x0c */ virtual s32 getTypeID() const { return 16; }
|
||||
/* 0x10 */ virtual void move(f32 x, f32 y);
|
||||
/* 0x14 */ virtual void add(f32 x, f32 y);
|
||||
/* 0x18 */ virtual void resize(f32 x, f32 y);
|
||||
@@ -53,12 +53,12 @@ public:
|
||||
/* 0x58 */ virtual void rewriteAlpha();
|
||||
/* 0x5c */ virtual void setAnimation(J2DAnmBase* anm);
|
||||
/* 0x60 */ virtual void setAnimation(J2DAnmTransform* anm);
|
||||
/* 0x64 */ virtual void setAnimation(J2DAnmColor* anm);
|
||||
/* 0x68 */ virtual void setAnimation(J2DAnmTexPattern* anm);
|
||||
/* 0x6c */ virtual void setAnimation(J2DAnmTextureSRTKey* anm);
|
||||
/* 0x70 */ virtual void setAnimation(J2DAnmTevRegKey* anm);
|
||||
/* 0x74 */ virtual void setAnimation(J2DAnmVisibilityFull* anm);
|
||||
/* 0x78 */ virtual void setAnimation(J2DAnmVtxColor* anm);
|
||||
/* 0x64 */ virtual void setAnimation(J2DAnmColor* anm) {}
|
||||
/* 0x68 */ virtual void setAnimation(J2DAnmTexPattern* anm) {}
|
||||
/* 0x6c */ virtual void setAnimation(J2DAnmTextureSRTKey* anm) {}
|
||||
/* 0x70 */ virtual void setAnimation(J2DAnmTevRegKey* anm) {}
|
||||
/* 0x74 */ virtual void setAnimation(J2DAnmVisibilityFull* anm) {}
|
||||
/* 0x78 */ virtual void setAnimation(J2DAnmVtxColor* anm) {}
|
||||
/* 0x7c */ virtual const J2DAnmTransform* animationTransform(const J2DAnmTransform* transform);
|
||||
/* 0x80 */ virtual void setVisibileAnimation(J2DAnmVisibilityFull* visibility);
|
||||
/* 0x84 */ virtual void setAnimationVF(J2DAnmVisibilityFull* visibility);
|
||||
@@ -119,7 +119,7 @@ public:
|
||||
void clip(const JGeometry::TBox2<f32>& bounds);
|
||||
void setBasePosition(J2DBasePosition position);
|
||||
void setInfluencedAlpha(bool arg1, bool arg2);
|
||||
void getGlbVtx(u8 arg1) const;
|
||||
JGeometry::TVec3<f32> getGlbVtx(u8 arg1) const;
|
||||
J2DPane* getFirstChildPane();
|
||||
J2DPane* getNextChildPane();
|
||||
J2DPane* getParentPane();
|
||||
@@ -130,7 +130,7 @@ public:
|
||||
void updateTransform(const J2DAnmTransform* transform);
|
||||
void setUserInfo(u64 info) { mUserInfoTag = info; }
|
||||
|
||||
static f32 static_mBounds[4];
|
||||
static JGeometry::TBox2<f32> static_mBounds;
|
||||
|
||||
public:
|
||||
/* 0x04 */ u16 _4;
|
||||
|
||||
@@ -49,9 +49,11 @@ public:
|
||||
/* 802F9640 */ static void* getNameResource(char const*);
|
||||
/* 802F9690 */ void animation();
|
||||
|
||||
static J2DDataManage* getDataManage() { return mDataManage; }
|
||||
|
||||
static J2DDataManage* mDataManage;
|
||||
|
||||
private:
|
||||
// private:
|
||||
/* 0x100 */ bool mScissor;
|
||||
/* 0x102 */ u16 mMaterialNum;
|
||||
/* 0x104 */ J2DMaterial* mMaterials;
|
||||
|
||||
@@ -40,6 +40,12 @@ private:
|
||||
}; // Size: 0x20
|
||||
|
||||
class J3DAnmTransformKey : public J3DAnmTransform {
|
||||
public:
|
||||
J3DAnmTransformKey() : J3DAnmTransform(0, NULL, NULL, NULL) {
|
||||
field_0x20 = 0;
|
||||
field_0x24 = 0;
|
||||
}
|
||||
|
||||
/* 80329A34 */ void calcTransform(f32, u16, J3DTransformInfo*) const;
|
||||
|
||||
/* 8003B8D0 */ virtual ~J3DAnmTransformKey();
|
||||
@@ -69,7 +75,11 @@ class J3DAnmTransformFullWithLerp : public J3DAnmTransformFull {
|
||||
struct J3DTextureSRTInfo;
|
||||
struct J3DModelData;
|
||||
struct J3DMaterialTable;
|
||||
struct J3DAnmKeyTableBase {};
|
||||
struct J3DAnmKeyTableBase {
|
||||
/* 0x00 */ u16 mMaxFrame;
|
||||
/* 0x02 */ u16 mOffset;
|
||||
/* 0x04 */ u16 mType;
|
||||
}; // Size = 0x6
|
||||
|
||||
class J3DAnmTextureSRTKey : public J3DAnmBase {
|
||||
public:
|
||||
|
||||
@@ -24,10 +24,11 @@ class J3DVertexData;
|
||||
class J3DDrawMtxData;
|
||||
|
||||
enum J3DShpFlag {
|
||||
J3DShpFlag_Visible = 0x0001,
|
||||
J3DShpFlag_SkinPosCpu = 0x0004,
|
||||
J3DShpFlag_SkinNrmCpu = 0x0008,
|
||||
J3DShpFlag_Hidden = 0x0010,
|
||||
J3DShpFlag_EnableLod = 0x0100,
|
||||
J3DShpFlag_Hidden = 0x0010,
|
||||
J3DShpFlag_EnableLod = 0x0100,
|
||||
};
|
||||
|
||||
class J3DShape {
|
||||
@@ -56,8 +57,8 @@ public:
|
||||
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 show() { offFlag(J3DShpFlag_Visible); }
|
||||
void hide() { onFlag(J3DShpFlag_Visible); }
|
||||
void setCurrentViewNoPtr(u32* pViewNoPtr) { mCurrentViewNo = pViewNoPtr; }
|
||||
void setScaleFlagArray(u8* pScaleFlagArray) { mScaleFlagArray = pScaleFlagArray; }
|
||||
void setDrawMtx(Mtx** pDrawMtx) { mDrawMtx = pDrawMtx; }
|
||||
@@ -66,7 +67,7 @@ public:
|
||||
u32 getBumpMtxOffset() const { return mBumpMtxOffset; }
|
||||
|
||||
inline J3DMaterial* getMaterial() const { return mMaterial; }
|
||||
inline u32 getPipeline() const { return (mFlags >> 2) & 7; }
|
||||
inline u32 getPipeline() const { return (mFlags >> 2) & 0x07; }
|
||||
inline u32 getTexMtxLoadType() const { return mFlags & 0xF000; }
|
||||
static void resetVcdVatCache() { sOldVcdVatCmd = NULL; }
|
||||
|
||||
|
||||
@@ -3,12 +3,12 @@
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
struct J3DAnmLoaderDataBaseFlag {};
|
||||
enum J3DAnmLoaderDataBaseFlag { UNK_FLAG0 };
|
||||
|
||||
struct J3DAnmBase;
|
||||
|
||||
struct J3DAnmLoaderDataBase {
|
||||
/* 80337B40 */ void load(void const*, J3DAnmLoaderDataBaseFlag);
|
||||
/* 80337B40 */ static void* load(void const*, J3DAnmLoaderDataBaseFlag);
|
||||
/* 80338134 */ void setResource(J3DAnmBase*, void const*);
|
||||
};
|
||||
|
||||
|
||||
@@ -13,7 +13,7 @@ public:
|
||||
operator u32() const { return this->mId; }
|
||||
void operator=(JAISoundID const&);
|
||||
|
||||
JAISoundID(u32 pId);
|
||||
JAISoundID(u32 pId) { mId = pId; };
|
||||
|
||||
JAISoundID(JAISoundID const& other);
|
||||
|
||||
|
||||
@@ -33,6 +33,22 @@ struct TVec3<f32> {
|
||||
y = other.y;
|
||||
z = other.z;
|
||||
}
|
||||
|
||||
void set(f32 x_, f32 y_, f32 z_) {
|
||||
x = x_;
|
||||
y = y_;
|
||||
z = z_;
|
||||
}
|
||||
|
||||
void zero() {
|
||||
x = y = z = 0.0f;
|
||||
}
|
||||
|
||||
void mul(const TVec3<f32>& a, const TVec3<f32>& b) {
|
||||
x = a.x * b.x;
|
||||
y = a.y * b.y;
|
||||
z = a.z * b.z;
|
||||
}
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
@@ -92,6 +108,10 @@ template<> struct TBox<TVec2<f32> > {
|
||||
|
||||
bool isValid() const { return f.isAbove(i); }
|
||||
|
||||
void addPos(f32 x, f32 y) {
|
||||
addPos(TVec2<f32>(x, y));
|
||||
}
|
||||
|
||||
void addPos(const TVec2<f32>& pos) {
|
||||
i.add(pos);
|
||||
f.add(pos);
|
||||
@@ -123,7 +143,7 @@ struct TBox2 : TBox<TVec2<T> > {
|
||||
}
|
||||
|
||||
void set(const TBox2& other) { set(other.i, other.f); }
|
||||
void set(const TVec2<f32>& i, const TVec2<f32> f) { this->i.set(i), this->f.set(f); }
|
||||
void set(const TVec2<f32>& i, const TVec2<f32>& f) { this->i.set(i), this->f.set(f); }
|
||||
void set(f32 x0, f32 y0, f32 x1, f32 y1) { i.set(x0, y0); f.set(x1, y1); }
|
||||
};
|
||||
|
||||
|
||||
@@ -17,6 +17,9 @@ struct pair {
|
||||
|
||||
struct TSinCosTable {
|
||||
std::pair<f32, f32> table[0x2000];
|
||||
|
||||
f32 sinShort(s16 v) const { return table[static_cast<u16>(v) >> 3].a1; }
|
||||
f32 cosShort(s16 v) const { return table[static_cast<u16>(v) >> 3].b1; }
|
||||
};
|
||||
|
||||
struct TAtanTable {
|
||||
@@ -35,4 +38,12 @@ extern TAtanTable atanTable_;
|
||||
extern TAsinAcosTable asinAcosTable_;
|
||||
}; // namespace JMath
|
||||
|
||||
inline f32 JMASSin(s16 s) {
|
||||
return JMath::sincosTable_.sinShort(s);
|
||||
}
|
||||
|
||||
inline f32 JMASCos(s16 s) {
|
||||
return JMath::sincosTable_.cosShort(s);
|
||||
}
|
||||
|
||||
#endif /* JMATRIGONOMETRIC_H */
|
||||
|
||||
@@ -2,5 +2,108 @@
|
||||
#define JPABASESHAPE_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
#include "dolphin/gx/GX.h"
|
||||
|
||||
class JPAEmitterWorkData;
|
||||
class JKRHeap;
|
||||
|
||||
struct JPABaseShapeData {
|
||||
// Common header.
|
||||
/* 0x00 */ u8 mMagic[4];
|
||||
/* 0x04 */ u32 mSize;
|
||||
|
||||
/* 0x08 */ u32 mFlags;
|
||||
/* 0x0C */ s16 mClrPrmAnmOffset;
|
||||
/* 0x0E */ s16 mClrEnvAnmOffset;
|
||||
/* 0x10 */ f32 mBaseSizeX;
|
||||
/* 0x14 */ f32 mBaseSizeY;
|
||||
/* 0x18 */ u16 mBlendModeCfg;
|
||||
/* 0x1A */ u8 mAlphaCompareCfg;
|
||||
/* 0x1B */ u8 mAlphaRef0;
|
||||
/* 0x1C */ u8 mAlphaRef1;
|
||||
/* 0x1D */ u8 mZModeCfg;
|
||||
/* 0x1E */ u8 mTexFlg;
|
||||
/* 0x1F */ u8 mTexAnmNum;
|
||||
/* 0x20 */ u8 mTexIdx;
|
||||
/* 0x21 */ u8 mClrFlg;
|
||||
/* 0x22 */ u8 mClrPrmKeyNum;
|
||||
/* 0x23 */ u8 mClrEnvKeyNum;
|
||||
/* 0x24 */ s16 mClrAnmFrmMax;
|
||||
/* 0x26 */ GXColor mClrPrm;
|
||||
/* 0x2A */ GXColor mClrEnv;
|
||||
/* 0x2E */ u8 mAnmRndm;
|
||||
/* 0x2F */ u8 mClrAnmRndmMask;
|
||||
/* 0x30 */ u8 mTexAnmRndmMask;
|
||||
};
|
||||
|
||||
struct JPABaseShape {
|
||||
public:
|
||||
/* 8027A6DC */ JPABaseShape(u8 const*, JKRHeap*);
|
||||
/* 8027A7E8 */ void setGX(JPAEmitterWorkData*) const;
|
||||
|
||||
static GXBlendMode st_bm[3];
|
||||
static GXBlendFactor st_bf[10];
|
||||
static GXLogicOp st_lo[16];
|
||||
static GXCompare st_c[8];
|
||||
static GXAlphaOp st_ao[4];
|
||||
static GXTevColorArg st_ca[6][4];
|
||||
static GXTevAlphaArg st_aa[2][4];
|
||||
|
||||
GXBlendMode getBlendMode() const { return st_bm[mpData->mBlendModeCfg & 0x03]; }
|
||||
GXBlendFactor getBlendSrc() const { return st_bf[(mpData->mBlendModeCfg >> 2) & 0x0F]; }
|
||||
GXBlendFactor getBlendDst() const { return st_bf[(mpData->mBlendModeCfg >> 6) & 0x0F]; }
|
||||
GXLogicOp getLogicOp() const { return st_lo[(mpData->mBlendModeCfg >> 10) & 0x0F]; }
|
||||
GXBool getZCompLoc() const { return (GXBool)((mpData->mZModeCfg >> 5) & 0x01); }
|
||||
|
||||
GXBool getZEnable() const { return (GXBool)(mpData->mZModeCfg & 0x01); }
|
||||
GXCompare getZCmp() const { return st_c[(mpData->mZModeCfg >> 1) & 0x07]; }
|
||||
GXBool getZUpd() const { return (GXBool)((mpData->mZModeCfg >> 4) & 0x01); }
|
||||
|
||||
GXCompare getAlphaCmp0() const { return st_c[mpData->mAlphaCompareCfg & 0x07]; }
|
||||
u8 getAlphaRef0() const { return mpData->mAlphaRef0; }
|
||||
GXAlphaOp getAlphaOp() const { return st_ao[(mpData->mAlphaCompareCfg >> 3) & 0x03]; }
|
||||
GXCompare getAlphaCmp1() const { return st_c[(mpData->mAlphaCompareCfg >> 5) & 0x07]; }
|
||||
u8 getAlphaRef1() const { return mpData->mAlphaRef1; }
|
||||
|
||||
const GXTevColorArg* getTevColorArg() const { return st_ca[(mpData->mFlags >> 0x0F) & 0x07]; }
|
||||
const GXTevAlphaArg* getTevAlphaArg() const { return st_aa[(mpData->mFlags >> 0x12) & 0x01]; }
|
||||
|
||||
u32 getType() const { return (mpData->mFlags >> 0) & 0x0F; }
|
||||
u32 getDirType() const { return (mpData->mFlags >> 4) & 0x07; }
|
||||
u32 getRotType() const { return (mpData->mFlags >> 7) & 0x07; }
|
||||
u32 getBasePlaneType() const { return (mpData->mFlags >> 10) & 0x07; }
|
||||
u32 getTilingS() const { return (mpData->mFlags >> 25) & 0x01; }
|
||||
u32 getTilingT() const { return (mpData->mFlags >> 26) & 0x01; }
|
||||
bool isGlblClrAnm() const { return !!(mpData->mFlags & 0x00001000); }
|
||||
bool isGlblTexAnm() const { return !!(mpData->mFlags & 0x00004000); }
|
||||
bool isPrjTex() const { return !!(mpData->mFlags & 0x00100000); }
|
||||
bool isDrawFwdAhead() const { return !!(mpData->mFlags & 0x00200000); }
|
||||
bool isDrawPrntAhead() const { return !!(mpData->mFlags & 0x00400000); }
|
||||
bool isClipOn() const { return !!(mpData->mFlags & 0x00800000); }
|
||||
bool isTexCrdAnm() const { return !!(mpData->mFlags & 0x01000000); }
|
||||
bool isNoDrawParent() const { return !!(mpData->mFlags & 0x08000000); }
|
||||
bool isNoDrawChild() const { return !!(mpData->mFlags & 0x10000000); }
|
||||
|
||||
bool isPrmAnm() const { return !!(mpData->mClrFlg & 0x02); }
|
||||
bool isEnvAnm() const { return !!(mpData->mClrFlg & 0x08); }
|
||||
u8 getClrAnmType() const { return (mpData->mClrFlg >> 4) & 0x07; }
|
||||
s16 getClrAnmMaxFrm() const { return mpData->mClrAnmFrmMax; }
|
||||
void getPrmClr(s16 idx, GXColor* dst) { *dst = mpPrmClrAnmTbl[idx]; }
|
||||
void getEnvClr(s16 idx, GXColor* dst) { *dst = mpEnvClrAnmTbl[idx]; }
|
||||
|
||||
bool isTexAnm() const { return !!(mpData->mTexFlg & 0x01); }
|
||||
u8 getTexAnmType() const { return (mpData->mTexFlg >> 2) & 0x07; }
|
||||
u32 getTexIdx() const { return mpData->mTexIdx; }
|
||||
|
||||
f32 getBaseSizeX() const { return mpData->mBaseSizeX; }
|
||||
f32 getBaseSizeY() const { return mpData->mBaseSizeY; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ const JPABaseShapeData* mpData;
|
||||
/* 0x04 */ const void* mpTexCrdMtxAnmTbl;
|
||||
/* 0x08 */ const u8* mpTexIdxAnimTbl;
|
||||
/* 0x0C */ GXColor* mpPrmClrAnmTbl;
|
||||
/* 0x10 */ GXColor* mpEnvClrAnmTbl;
|
||||
};
|
||||
|
||||
#endif /* JPABASESHAPE_H */
|
||||
|
||||
@@ -2,5 +2,43 @@
|
||||
#define JPACHILDSHAPE_H
|
||||
|
||||
#include "dolphin/types.h"
|
||||
#include "dolphin/gx/GX.h"
|
||||
|
||||
struct JPAChildShapeData {
|
||||
// Common header.
|
||||
/* 0x00 */ u8 mMagic[4];
|
||||
/* 0x04 */ u32 mSize;
|
||||
|
||||
/* 0x08 */ u32 mFlags;
|
||||
/* 0x0C */ f32 mPosRndm;
|
||||
/* 0x10 */ f32 mBaseVel;
|
||||
/* 0x14 */ f32 mBaseVelRndm;
|
||||
/* 0x18 */ f32 mVelInfRate;
|
||||
/* 0x1C */ f32 mGravity;
|
||||
/* 0x20 */ f32 mScaleX;
|
||||
/* 0x24 */ f32 mScaleY;
|
||||
/* 0x28 */ f32 mInheritScale;
|
||||
/* 0x2C */ f32 mInheritAlpha;
|
||||
/* 0x30 */ f32 mInheritRGB;
|
||||
/* 0x34 */ GXColor mPrmClr;
|
||||
/* 0x38 */ GXColor mEnvClr;
|
||||
/* 0x3C */ f32 mTiming;
|
||||
/* 0x40 */ s16 mLife;
|
||||
/* 0x42 */ s16 mRate;
|
||||
/* 0x44 */ u8 mStep;
|
||||
/* 0x45 */ u8 mTexIdx;
|
||||
/* 0x46 */ s16 mRotSpeed;
|
||||
};
|
||||
|
||||
class JPAChildShape {
|
||||
public:
|
||||
/* 8027B038 */ JPAChildShape(u8 const*);
|
||||
|
||||
void getPrmClr(GXColor* dst) { *dst = mpData->mPrmClr; }
|
||||
void getEnvClr(GXColor* dst) { *dst = mpData->mEnvClr; }
|
||||
|
||||
public:
|
||||
/* 0x00 */ const JPAChildShapeData* mpData;
|
||||
};
|
||||
|
||||
#endif /* JPACHILDSHAPE_H */
|
||||
|
||||
@@ -35,13 +35,21 @@ struct JPADynamicsBlockData {
|
||||
/* 0x70 */ s16 mStartFrame;
|
||||
/* 0x72 */ s16 mLifeTime;
|
||||
/* 0x74 */ s16 mVolumeSize;
|
||||
/* 0x76 */ s16 mDivNumber;
|
||||
/* 0x76 */ u16 mDivNumber;
|
||||
/* 0x78 */ u8 mRateStep;
|
||||
/* 0x7C */ u32 field_0x7c;
|
||||
};
|
||||
|
||||
typedef void (*JPADynamicsCalcVolumeFunc)(JPAEmitterWorkData*);
|
||||
|
||||
enum {
|
||||
JPADynFlag_FixedDensity = 0x01,
|
||||
JPADynFlag_FixedInterval = 0x02,
|
||||
JPADynFlag_InheritScale = 0x04,
|
||||
JPADynFlag_FollowEmtr = 0x08,
|
||||
JPADynFlag_FollowEmtrChld = 0x10,
|
||||
};
|
||||
|
||||
class JPADynamicsBlock {
|
||||
public:
|
||||
/* 8027BB18 */ JPADynamicsBlock(u8 const*);
|
||||
@@ -52,10 +60,14 @@ public:
|
||||
|
||||
s16 getStartFrame() const { return mpData->mStartFrame; }
|
||||
u32 getResUserWork() const { return mpData->mResUserWork; }
|
||||
u32 getFlag() const { return mpData->mFlags; }
|
||||
u32 getVolumeType() const { return (mpData->mFlags >> 8) & 0x07; }
|
||||
u16 getDivNumber() const { return mpData->mDivNumber; }
|
||||
f32 getRateRndm() const { return mpData->mRateRndm; }
|
||||
|
||||
public:
|
||||
JPADynamicsBlockData* mpData;
|
||||
JPADynamicsCalcVolumeFunc mpCalcVolumeFunc;
|
||||
/* 0x00 */ const JPADynamicsBlockData* mpData;
|
||||
/* 0x04 */ JPADynamicsCalcVolumeFunc mpCalcVolumeFunc;
|
||||
};
|
||||
|
||||
#endif /* JPADYNAMICSBLOCK_H */
|
||||
|
||||
@@ -3,4 +3,71 @@
|
||||
|
||||
#include "dolphin/types.h"
|
||||
|
||||
struct JPAExtraShapeData {
|
||||
// Common header.
|
||||
/* 0x00 */ u8 mMagic[4];
|
||||
/* 0x04 */ u32 mSize;
|
||||
|
||||
/* 0x08 */ u32 mFlags;
|
||||
/* 0x0C */ f32 mScaleInTiming;
|
||||
/* 0x10 */ f32 mScaleOutTiming;
|
||||
/* 0x14 */ f32 mScaleInValueX;
|
||||
/* 0x18 */ f32 mScaleOutValueX;
|
||||
/* 0x1C */ f32 mScaleInValueY;
|
||||
/* 0x20 */ f32 mScaleOutValueY;
|
||||
/* 0x24 */ f32 mScaleOutRandom;
|
||||
/* 0x28 */ s16 mScaleAnmCycleX;
|
||||
/* 0x2A */ s16 mScaleAnmCycleY;
|
||||
/* 0x2C */ f32 mAlphaInTiming;
|
||||
/* 0x30 */ f32 mAlphaOutTiming;
|
||||
/* 0x34 */ f32 mAlphaInValue;
|
||||
/* 0x38 */ f32 mAlphaBaseValue;
|
||||
/* 0x3C */ f32 mAlphaOutValue;
|
||||
/* 0x40 */ f32 mAlphaWaveFrequency;
|
||||
/* 0x44 */ f32 mAlphaWaveRandom;
|
||||
/* 0x48 */ f32 mAlphaWaveAmplitude;
|
||||
/* 0x4C */ f32 mRotateAngle;
|
||||
/* 0x50 */ f32 mRotateAngleRandom;
|
||||
/* 0x54 */ f32 mRotateSpeed;
|
||||
/* 0x58 */ f32 mRotateSpeedRandom;
|
||||
/* 0x5C */ f32 mRotateDirection;
|
||||
};
|
||||
|
||||
class JPAExtraShape {
|
||||
public:
|
||||
/* 8027AD88 */ JPAExtraShape(u8 const*);
|
||||
/* 8027ADBC */ void init();
|
||||
|
||||
f32 getScaleInTiming() const { return mpData->mScaleInTiming; }
|
||||
f32 getScaleOutTiming() const { return mpData->mScaleOutTiming; }
|
||||
f32 getScaleInValueX() const { return mpData->mScaleInValueX; }
|
||||
f32 getScaleInValueY() const { return mpData->mScaleInValueY; }
|
||||
f32 getScaleOutValueX() const { return mpData->mScaleOutValueX; }
|
||||
f32 getScaleOutValueY() const { return mpData->mScaleOutValueY; }
|
||||
s16 getScaleAnmCycleX() const { return mpData->mScaleAnmCycleX; }
|
||||
s16 getScaleAnmCycleY() const { return mpData->mScaleAnmCycleY; }
|
||||
f32 getAlphaInTiming() const { return mpData->mAlphaInTiming; }
|
||||
f32 getAlphaOutTiming() const { return mpData->mAlphaOutTiming; }
|
||||
f32 getAlphaInValue() const { return mpData->mAlphaInValue; }
|
||||
f32 getAlphaOutValue() const { return mpData->mAlphaOutValue; }
|
||||
f32 getAlphaBaseValue() const { return mpData->mAlphaBaseValue; }
|
||||
f32 getAlphaFreq() const { return mpData->mAlphaWaveFrequency; }
|
||||
f32 getAlphaAmp() const { return mpData->mAlphaWaveAmplitude; }
|
||||
f32 getScaleIncRateX() const { return mScaleIncRateX; }
|
||||
f32 getScaleDecRateX() const { return mScaleDecRateX; }
|
||||
f32 getScaleIncRateY() const { return mScaleIncRateY; }
|
||||
f32 getScaleDecRateY() const { return mScaleDecRateY; }
|
||||
f32 getAlphaIncRate() const { return mAlphaIncRate; }
|
||||
f32 getAlphaDecRate() const { return mAlphaDecRate; }
|
||||
|
||||
private:
|
||||
/* 0x00 */ const JPAExtraShapeData* mpData;
|
||||
/* 0x04 */ f32 mAlphaIncRate;
|
||||
/* 0x08 */ f32 mAlphaDecRate;
|
||||
/* 0x0C */ f32 mScaleIncRateX;
|
||||
/* 0x10 */ f32 mScaleIncRateY;
|
||||
/* 0x14 */ f32 mScaleDecRateX;
|
||||
/* 0x18 */ f32 mScaleDecRateY;
|
||||
};
|
||||
|
||||
#endif /* JPAEXTRASHAPE_H */
|
||||
|
||||
@@ -7,6 +7,9 @@
|
||||
#include "JSystem/JGeometry.h"
|
||||
#include "JSystem/JSupport/JSUList.h"
|
||||
|
||||
#include "JSystem/JParticle/JPADynamicsBlock.h"
|
||||
#include "JSystem/JParticle/JPAResource.h"
|
||||
|
||||
class JKRHeap;
|
||||
class JPABaseEmitter;
|
||||
class JPABaseParticle;
|
||||
@@ -31,6 +34,30 @@ public:
|
||||
JPARandom() { mSeed = 0; }
|
||||
void set_seed(u32 seed) { mSeed = seed; }
|
||||
|
||||
u32 get_rndm_u() {
|
||||
return mSeed = mSeed * 0x19660du + 0x3c6ef35fu;
|
||||
}
|
||||
|
||||
f32 get_rndm_f() {
|
||||
union { u32 u; f32 f; } a;
|
||||
a.u = ((get_rndm_u() >> 9) | 0x3f800000);
|
||||
return a.f - 1.0f;
|
||||
}
|
||||
|
||||
f32 get_rndm_zp() {
|
||||
f32 f = get_rndm_f();
|
||||
return (f + f) - 1.0f;
|
||||
}
|
||||
|
||||
f32 get_rndm_zh() {
|
||||
f32 f = get_rndm_f();
|
||||
return f - 1.0f;
|
||||
}
|
||||
|
||||
s16 get_rndm_ss() {
|
||||
return ((s16)get_rndm_u()) >> 16;
|
||||
}
|
||||
|
||||
public:
|
||||
u32 mSeed;
|
||||
};
|
||||
@@ -175,6 +202,13 @@ public:
|
||||
/* 8027E6A4 */ ~JPAEmitterCallBack();
|
||||
};
|
||||
|
||||
enum {
|
||||
JPAEmtrStts_StopEmit = 0x01,
|
||||
JPAEmtrStts_StopCalc = 0x02,
|
||||
JPAEmtrStts_FirstEmit = 0x10,
|
||||
JPAEmtrStts_RateStepEmit = 0x20,
|
||||
};
|
||||
|
||||
class JPABaseEmitter {
|
||||
public:
|
||||
/* 8027E5EC */ ~JPABaseEmitter();
|
||||
@@ -191,9 +225,17 @@ public:
|
||||
/* 8027EF50 */ bool loadTexture(u8, GXTexMapID);
|
||||
|
||||
void setStatus(u32 status) { mStatus |= status; }
|
||||
void clearStatus(u32 status) { mStatus &= ~status; }
|
||||
bool checkStatus(u32 status) { return !!(mStatus & status); }
|
||||
bool checkFlag(u32 flag) { return !!(mpRes->getDyn()->getFlag() & flag); }
|
||||
u8 getResourceManagerID() const { return mResMgrID; }
|
||||
u8 getGroupID() const { return mGroupID; }
|
||||
u8 getDrawTimes() const { return mDrawTimes; }
|
||||
|
||||
f32 get_r_f() { return mRndm.get_rndm_f(); }
|
||||
f32 get_r_zp() { return mRndm.get_rndm_zp(); }
|
||||
f32 get_r_zh() { return mRndm.get_rndm_zh(); }
|
||||
s16 get_r_ss() { return mRndm.get_rndm_ss(); }
|
||||
|
||||
public:
|
||||
/* 0x00 */ Vec mLocalScl;
|
||||
@@ -234,7 +276,7 @@ public:
|
||||
/* 0xFC */ f32 mScaleOut;
|
||||
/* 0x100 */ u32 mTick;
|
||||
/* 0x104 */ s16 mWaitTime;
|
||||
/* 0x106 */ u16 mRateStepTimer;
|
||||
/* 0x106 */ s16 mRateStepTimer;
|
||||
/* 0x108 */ GXColor mPrmClr;
|
||||
/* 0x10C */ GXColor mEnvClr;
|
||||
/* 0x110 */ u8 mDrawTimes;
|
||||
@@ -245,11 +287,15 @@ public:
|
||||
|
||||
class JPAParticleCallBack {
|
||||
public:
|
||||
~JPAParticleCallBack();
|
||||
virtual ~JPAParticleCallBack();
|
||||
virtual void execute(JPABaseEmitter*, JPABaseParticle*);
|
||||
virtual void draw(JPABaseEmitter*, JPABaseParticle*);
|
||||
};
|
||||
|
||||
enum {
|
||||
JPAPtclStts_Invisible = 0x08,
|
||||
};
|
||||
|
||||
class JPABaseParticle {
|
||||
public:
|
||||
/* 8027EFEC */ void init_p(JPAEmitterWorkData*);
|
||||
@@ -277,7 +323,7 @@ public:
|
||||
/* 0x74 */ f32 mDrag;
|
||||
/* 0x78 */ u32 field_0x78;
|
||||
/* 0x7C */ u32 mStatus;
|
||||
/* 0x80 */ u16 mAge;
|
||||
/* 0x80 */ s16 mAge;
|
||||
/* 0x82 */ u16 mLifeTime;
|
||||
/* 0x84 */ f32 mTime;
|
||||
/* 0x88 */ u16 mRotateAngle;
|
||||
|
||||
@@ -20,7 +20,7 @@ class JPAResource {
|
||||
public:
|
||||
/* 80274010 */ JPAResource();
|
||||
/* 80274080 */ void init(JKRHeap*);
|
||||
/* 802755E8 */ void calc(JPAEmitterWorkData*, JPABaseEmitter*);
|
||||
/* 802755E8 */ bool calc(JPAEmitterWorkData*, JPABaseEmitter*);
|
||||
/* 80275A94 */ void draw(JPAEmitterWorkData*, JPABaseEmitter*);
|
||||
/* 80275B74 */ void drawP(JPAEmitterWorkData*);
|
||||
/* 80275EB0 */ void drawC(JPAEmitterWorkData*);
|
||||
|
||||
@@ -19,8 +19,36 @@ public:
|
||||
/* vt[4] */ virtual s32 skip(s32);
|
||||
/* vt[5] */ virtual u32 readData(void*, s32) = 0;
|
||||
|
||||
u32 read32b() {
|
||||
u32 val;
|
||||
this->read(&val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
|
||||
s16 readS16() {
|
||||
s16 val;
|
||||
this->read(&val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
|
||||
u16 readU16() {
|
||||
u16 val;
|
||||
this->read(&val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
|
||||
u8 readU8() {
|
||||
u8 val;
|
||||
this->read(&val, sizeof(val));
|
||||
return val;
|
||||
}
|
||||
|
||||
// TODO: return value probably wrong
|
||||
/* 802DC298 */ s32 read(void*, s32);
|
||||
}; // Size = 0x8
|
||||
|
||||
// move?
|
||||
template <typename T>
|
||||
T* JSUConvertOffsetToPtr(const void*, const void*);
|
||||
|
||||
#endif /* JSUINPUTSTREAM_H */
|
||||
|
||||
@@ -157,67 +157,33 @@ private:
|
||||
// Tree
|
||||
//
|
||||
|
||||
#define JSU_TREE_FROM_LINK(T, LINK) (JSUTree<T>*)(((u8*)(LINK)) - 12)
|
||||
#define JSU_TREE_LINK_IF_NOT_NULL(TREE) \
|
||||
if (TREE) { \
|
||||
TREE = (JSUTree<T>*)(&(TREE)->mLink); \
|
||||
}
|
||||
|
||||
#define _JSU_TREE_AS_LINK(TREE) ((JSULink<T>*)(TREE))
|
||||
|
||||
template <typename T>
|
||||
class JSUTree {
|
||||
class JSUTree : public JSUList<T>, public JSULink<T> {
|
||||
public:
|
||||
JSUTree(T* owner) : mList(), mLink(owner) {}
|
||||
JSUTree(T* owner) : JSUList<T>(), JSULink<T>(owner) {}
|
||||
~JSUTree() {}
|
||||
|
||||
bool appendChild(JSUTree<T>* child) {
|
||||
JSU_TREE_LINK_IF_NOT_NULL(child);
|
||||
return this->mList.append(_JSU_TREE_AS_LINK(child));
|
||||
}
|
||||
bool appendChild(JSUTree<T>* child) { return this->append(child); }
|
||||
|
||||
bool removeChild(JSUTree<T>* child) {
|
||||
JSU_TREE_LINK_IF_NOT_NULL(child);
|
||||
return this->mList.remove(_JSU_TREE_AS_LINK(child));
|
||||
}
|
||||
bool removeChild(JSUTree<T>* child) { return this->remove(child); }
|
||||
|
||||
bool insertChild(JSUTree<T>* before, JSUTree<T>* child) {
|
||||
JSU_TREE_LINK_IF_NOT_NULL(before);
|
||||
JSU_TREE_LINK_IF_NOT_NULL(child);
|
||||
return this->mList.insert(_JSU_TREE_AS_LINK(before), _JSU_TREE_AS_LINK(child));
|
||||
}
|
||||
bool insertChild(JSUTree<T>* before, JSUTree<T>* child) { return this->insert(before, child); }
|
||||
|
||||
JSUTree<T>* getEndChild() const { return NULL; }
|
||||
|
||||
JSUTree<T>* getFirstChild() const {
|
||||
JSULink<T>* link = this->mList.getFirst();
|
||||
return link ? JSU_TREE_FROM_LINK(T, link) : (JSUTree<T>*)link;
|
||||
}
|
||||
JSUTree<T>* getFirstChild() const { return (JSUTree<T>*)this->getFirst(); }
|
||||
|
||||
JSUTree<T>* getLastChild() const {
|
||||
JSULink<T>* link = this->mList.getLast();
|
||||
return link ? JSU_TREE_FROM_LINK(T, link) : (JSUTree<T>*)link;
|
||||
}
|
||||
JSUTree<T>* getLastChild() const { return (JSUTree<T>*)this->getLast(); }
|
||||
|
||||
JSUTree<T>* getNextChild() const {
|
||||
JSULink<T>* link = this->mLink.getNext();
|
||||
return link ? JSU_TREE_FROM_LINK(T, link) : (JSUTree<T>*)link;
|
||||
}
|
||||
JSUTree<T>* getNextChild() const { return (JSUTree<T>*)this->getNext(); }
|
||||
|
||||
JSUTree<T>* getPrevChild() const {
|
||||
JSULink<T>* link = this->mLink.getPrev();
|
||||
return link ? JSU_TREE_FROM_LINK(T, link) : (JSUTree<T>*)link;
|
||||
}
|
||||
JSUTree<T>* getPrevChild() const { return (JSUTree<T>*)this->getPrev(); }
|
||||
|
||||
u32 getNumChildren() const { return this->mList.getNumLinks(); }
|
||||
u32 getNumChildren() const { return this->getNumLinks(); }
|
||||
|
||||
T* getObject() const { return this->mLink.getObject(); }
|
||||
T* getObject() const { return (T*)this->getObjectPtr(); }
|
||||
|
||||
JSUTree<T>* getParent() const { return (JSUTree<T>*)this->mLink.getList(); }
|
||||
|
||||
private:
|
||||
JSUList<T> mList;
|
||||
JSULink<T> mLink;
|
||||
JSUTree<T>* getParent() const { return (JSUTree<T>*)this->getList(); }
|
||||
};
|
||||
|
||||
template <typename T>
|
||||
|
||||
@@ -14,6 +14,9 @@ struct ResTLUT {
|
||||
|
||||
class JUTPalette {
|
||||
public:
|
||||
JUTPalette(_GXTlut p1, _GXTlutFmt p2, JUTTransparency p3, u16 p4, void* p5) {
|
||||
this->storeTLUT(p1, p2, p3, p4, p5);
|
||||
}
|
||||
/* 802DE890 */ void storeTLUT(_GXTlut, ResTLUT*);
|
||||
/* 802DE91C */ void storeTLUT(_GXTlut, _GXTlutFmt, JUTTransparency, u16, void*);
|
||||
/* 802DE95C */ bool load();
|
||||
|
||||
@@ -1,6 +1,20 @@
|
||||
#ifndef JUTRESOURCE_H
|
||||
#define JUTRESOURCE_H
|
||||
|
||||
#include "JSystem/JKernel/JKRArchive.h"
|
||||
#include "JSystem/JSupport/JSUInputStream.h"
|
||||
#include "dolphin/types.h"
|
||||
|
||||
class JUTResReference {
|
||||
private:
|
||||
u8 unk_0x0[0x101];
|
||||
|
||||
public:
|
||||
JUTResReference() { unk_0x0[0] = 0; }
|
||||
/* 802DE078 */ void* getResource(JSUInputStream*, u32, JKRArchive*);
|
||||
/* 802DE120 */ void* getResource(void const*, u32, JKRArchive*);
|
||||
/* 802DE1BC */ void* getResource(u32, JKRArchive*);
|
||||
};
|
||||
// only rough size known due to getPointer__7J2DPaneFP20JSURandomInputStreamUlP10JKRArchive
|
||||
|
||||
#endif /* JUTRESOURCE_H */
|
||||
|
||||
Reference in New Issue
Block a user