summaryrefslogtreecommitdiff
path: root/include/JSystem/J2DGraph
diff options
context:
space:
mode:
authorlepelog <25211966+lepelog@users.noreply.github.com>2022-01-04 18:18:23 +0100
committerGitHub <noreply@github.com>2022-01-04 18:18:23 +0100
commitda3d98b67a9e54260a28fb8e49e9ce8dbbeb7449 (patch)
treee1fd0c8c3fb452d0f3ad512702b181c52abe65ad /include/JSystem/J2DGraph
parentf4a3c80af341bcb1dac30a4dcd4dc5797f9adcea (diff)
J2DAnimation (#173)
* ok * naming stuff
Diffstat (limited to 'include/JSystem/J2DGraph')
-rw-r--r--include/JSystem/J2DGraph/J2DAnimation.h298
-rw-r--r--include/JSystem/J2DGraph/J2DScreen.h2
2 files changed, 236 insertions, 64 deletions
diff --git a/include/JSystem/J2DGraph/J2DAnimation.h b/include/JSystem/J2DGraph/J2DAnimation.h
index e97c5be8c6..654c997b51 100644
--- a/include/JSystem/J2DGraph/J2DAnimation.h
+++ b/include/JSystem/J2DGraph/J2DAnimation.h
@@ -1,20 +1,23 @@
#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:
@@ -27,7 +30,7 @@ private:
class J2DAnmVtxColor : public J2DAnmBase {
public:
- /* 8030A358 */ virtual ~J2DAnmVtxColor();
+ /* 8030A358 */ virtual ~J2DAnmVtxColor() {}
/* 8030363C */ virtual void getColor(u8, u16, _GXColor*) const;
private:
@@ -39,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();
@@ -72,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;
@@ -144,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 {
@@ -155,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;
@@ -171,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;
@@ -194,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;
@@ -222,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/J2DScreen.h b/include/JSystem/J2DGraph/J2DScreen.h
index 67470e2d83..486f1164c2 100644
--- a/include/JSystem/J2DGraph/J2DScreen.h
+++ b/include/JSystem/J2DGraph/J2DScreen.h
@@ -53,7 +53,7 @@ public:
static J2DDataManage* mDataManage;
-private:
+ // private:
/* 0x100 */ bool mScissor;
/* 0x102 */ u16 mMaterialNum;
/* 0x104 */ J2DMaterial* mMaterials;