summaryrefslogtreecommitdiff
path: root/include/JSystem
diff options
context:
space:
mode:
authorjdflyer <jdflyer10@gmail.com>2022-01-11 20:24:58 -0700
committerjdflyer <jdflyer10@gmail.com>2022-01-11 20:24:58 -0700
commit50471c025b41439242ea5eb88027f0bcd4c50ec1 (patch)
tree3e3aba1b7997164b326a314217c6aed49b38dec7 /include/JSystem
parent0adee83f89da16fe7a870f244f3b4c0e92bbe490 (diff)
parentda3d98b67a9e54260a28fb8e49e9ce8dbbeb7449 (diff)
Merge remote-tracking branch 'Upstream/master'
Diffstat (limited to 'include/JSystem')
-rw-r--r--include/JSystem/J2DGraph/J2DAnimation.h299
-rw-r--r--include/JSystem/J2DGraph/J2DGrafContext.h15
-rw-r--r--include/JSystem/J2DGraph/J2DManage.h20
-rw-r--r--include/JSystem/J2DGraph/J2DMatBlock.h2
-rw-r--r--include/JSystem/J2DGraph/J2DPane.h18
-rw-r--r--include/JSystem/J2DGraph/J2DScreen.h4
-rw-r--r--include/JSystem/J3DGraphAnimator/J3DAnimation.h12
-rw-r--r--include/JSystem/J3DGraphBase/J3DShape.h11
-rw-r--r--include/JSystem/J3DGraphLoader/J3DAnmLoader.h4
-rw-r--r--include/JSystem/JAudio2/JAISound.h2
-rw-r--r--include/JSystem/JGeometry.h22
-rw-r--r--include/JSystem/JMath/JMATrigonometric.h11
-rw-r--r--include/JSystem/JParticle/JPABaseShape.h103
-rw-r--r--include/JSystem/JParticle/JPAChildShape.h38
-rw-r--r--include/JSystem/JParticle/JPADynamicsBlock.h18
-rw-r--r--include/JSystem/JParticle/JPAExtraShape.h67
-rw-r--r--include/JSystem/JParticle/JPAParticle.h52
-rw-r--r--include/JSystem/JParticle/JPAResource.h2
-rw-r--r--include/JSystem/JSupport/JSUInputStream.h28
-rw-r--r--include/JSystem/JSupport/JSUList.h58
-rw-r--r--include/JSystem/JUtility/JUTPalette.h3
-rw-r--r--include/JSystem/JUtility/JUTResource.h14
22 files changed, 652 insertions, 151 deletions
diff --git a/include/JSystem/J2DGraph/J2DAnimation.h b/include/JSystem/J2DGraph/J2DAnimation.h
index 41e7f7f92c..654c997b51 100644
--- a/include/JSystem/J2DGraph/J2DAnimation.h
+++ b/include/JSystem/J2DGraph/J2DAnimation.h
@@ -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 */
diff --git a/include/JSystem/J2DGraph/J2DGrafContext.h b/include/JSystem/J2DGraph/J2DGrafContext.h
index 7d7efa7a65..be64fcc38f 100644
--- a/include/JSystem/J2DGraph/J2DGrafContext.h
+++ b/include/JSystem/J2DGraph/J2DGrafContext.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 */
diff --git a/include/JSystem/J2DGraph/J2DManage.h b/include/JSystem/J2DGraph/J2DManage.h
index 6222e2139b..96a9e5ebc0 100644
--- a/include/JSystem/J2DGraph/J2DManage.h
+++ b/include/JSystem/J2DGraph/J2DManage.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 */
diff --git a/include/JSystem/J2DGraph/J2DMatBlock.h b/include/JSystem/J2DGraph/J2DMatBlock.h
index 0333028fb5..810fccc091 100644
--- a/include/JSystem/J2DGraph/J2DMatBlock.h
+++ b/include/JSystem/J2DGraph/J2DMatBlock.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 {
diff --git a/include/JSystem/J2DGraph/J2DPane.h b/include/JSystem/J2DGraph/J2DPane.h
index a58858aa85..73a920ee42 100644
--- a/include/JSystem/J2DGraph/J2DPane.h
+++ b/include/JSystem/J2DGraph/J2DPane.h
@@ -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;
diff --git a/include/JSystem/J2DGraph/J2DScreen.h b/include/JSystem/J2DGraph/J2DScreen.h
index 1e6527babf..486f1164c2 100644
--- a/include/JSystem/J2DGraph/J2DScreen.h
+++ b/include/JSystem/J2DGraph/J2DScreen.h
@@ -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;
diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h
index 18ff4ee9e2..15ded86a06 100644
--- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h
+++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h
@@ -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:
diff --git a/include/JSystem/J3DGraphBase/J3DShape.h b/include/JSystem/J3DGraphBase/J3DShape.h
index 1fd8e7c56c..b0576077c0 100644
--- a/include/JSystem/J3DGraphBase/J3DShape.h
+++ b/include/JSystem/J3DGraphBase/J3DShape.h
@@ -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; }
diff --git a/include/JSystem/J3DGraphLoader/J3DAnmLoader.h b/include/JSystem/J3DGraphLoader/J3DAnmLoader.h
index 265bc83c18..0c6a6a8474 100644
--- a/include/JSystem/J3DGraphLoader/J3DAnmLoader.h
+++ b/include/JSystem/J3DGraphLoader/J3DAnmLoader.h
@@ -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*);
};
diff --git a/include/JSystem/JAudio2/JAISound.h b/include/JSystem/JAudio2/JAISound.h
index e94ea2cf13..61bac44a42 100644
--- a/include/JSystem/JAudio2/JAISound.h
+++ b/include/JSystem/JAudio2/JAISound.h
@@ -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);
diff --git a/include/JSystem/JGeometry.h b/include/JSystem/JGeometry.h
index 0da0a2718b..a4c0ca50ed 100644
--- a/include/JSystem/JGeometry.h
+++ b/include/JSystem/JGeometry.h
@@ -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); }
};
diff --git a/include/JSystem/JMath/JMATrigonometric.h b/include/JSystem/JMath/JMATrigonometric.h
index 79d3798ed2..a01b717ca8 100644
--- a/include/JSystem/JMath/JMATrigonometric.h
+++ b/include/JSystem/JMath/JMATrigonometric.h
@@ -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 */
diff --git a/include/JSystem/JParticle/JPABaseShape.h b/include/JSystem/JParticle/JPABaseShape.h
index 0e7192f083..a081b0c916 100644
--- a/include/JSystem/JParticle/JPABaseShape.h
+++ b/include/JSystem/JParticle/JPABaseShape.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 */
diff --git a/include/JSystem/JParticle/JPAChildShape.h b/include/JSystem/JParticle/JPAChildShape.h
index f5ef5fa60e..5f6edf0d30 100644
--- a/include/JSystem/JParticle/JPAChildShape.h
+++ b/include/JSystem/JParticle/JPAChildShape.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 */
diff --git a/include/JSystem/JParticle/JPADynamicsBlock.h b/include/JSystem/JParticle/JPADynamicsBlock.h
index aa424f49a9..8b3e441c19 100644
--- a/include/JSystem/JParticle/JPADynamicsBlock.h
+++ b/include/JSystem/JParticle/JPADynamicsBlock.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 */
diff --git a/include/JSystem/JParticle/JPAExtraShape.h b/include/JSystem/JParticle/JPAExtraShape.h
index abdcdd0b4d..0df0e57436 100644
--- a/include/JSystem/JParticle/JPAExtraShape.h
+++ b/include/JSystem/JParticle/JPAExtraShape.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 */
diff --git a/include/JSystem/JParticle/JPAParticle.h b/include/JSystem/JParticle/JPAParticle.h
index 046353808f..ae0a07b8b2 100644
--- a/include/JSystem/JParticle/JPAParticle.h
+++ b/include/JSystem/JParticle/JPAParticle.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;
diff --git a/include/JSystem/JParticle/JPAResource.h b/include/JSystem/JParticle/JPAResource.h
index f207f15d88..5b3e891bc3 100644
--- a/include/JSystem/JParticle/JPAResource.h
+++ b/include/JSystem/JParticle/JPAResource.h
@@ -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*);
diff --git a/include/JSystem/JSupport/JSUInputStream.h b/include/JSystem/JSupport/JSUInputStream.h
index f4a3ed3af3..5bb0f4f98e 100644
--- a/include/JSystem/JSupport/JSUInputStream.h
+++ b/include/JSystem/JSupport/JSUInputStream.h
@@ -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 */
diff --git a/include/JSystem/JSupport/JSUList.h b/include/JSystem/JSupport/JSUList.h
index f204f239ee..b0bbdd4fb9 100644
--- a/include/JSystem/JSupport/JSUList.h
+++ b/include/JSystem/JSupport/JSUList.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>* getLastChild() const {
- JSULink<T>* link = this->mList.getLast();
- return link ? JSU_TREE_FROM_LINK(T, link) : (JSUTree<T>*)link;
- }
+ JSUTree<T>* getFirstChild() const { return (JSUTree<T>*)this->getFirst(); }
- JSUTree<T>* getNextChild() const {
- JSULink<T>* link = this->mLink.getNext();
- return link ? JSU_TREE_FROM_LINK(T, link) : (JSUTree<T>*)link;
- }
+ JSUTree<T>* getLastChild() const { return (JSUTree<T>*)this->getLast(); }
- JSUTree<T>* getPrevChild() const {
- JSULink<T>* link = this->mLink.getPrev();
- return link ? JSU_TREE_FROM_LINK(T, link) : (JSUTree<T>*)link;
- }
+ JSUTree<T>* getNextChild() const { return (JSUTree<T>*)this->getNext(); }
- u32 getNumChildren() const { return this->mList.getNumLinks(); }
+ JSUTree<T>* getPrevChild() const { return (JSUTree<T>*)this->getPrev(); }
- T* getObject() const { return this->mLink.getObject(); }
+ u32 getNumChildren() const { return this->getNumLinks(); }
- JSUTree<T>* getParent() const { return (JSUTree<T>*)this->mLink.getList(); }
+ T* getObject() const { return (T*)this->getObjectPtr(); }
-private:
- JSUList<T> mList;
- JSULink<T> mLink;
+ JSUTree<T>* getParent() const { return (JSUTree<T>*)this->getList(); }
};
template <typename T>
diff --git a/include/JSystem/JUtility/JUTPalette.h b/include/JSystem/JUtility/JUTPalette.h
index dd9ab27cf5..f269bed464 100644
--- a/include/JSystem/JUtility/JUTPalette.h
+++ b/include/JSystem/JUtility/JUTPalette.h
@@ -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();
diff --git a/include/JSystem/JUtility/JUTResource.h b/include/JSystem/JUtility/JUTResource.h
index 9101795e68..3447ca53af 100644
--- a/include/JSystem/JUtility/JUTResource.h
+++ b/include/JSystem/JUtility/JUTResource.h
@@ -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 */