From 7bfb08ed5f2dc972148c4738dfb1121bd7b660e5 Mon Sep 17 00:00:00 2001 From: LagoLunatic Date: Sun, 14 Apr 2024 09:53:27 -0400 Subject: [PATCH] J3DAnimation OK mostly copied from pikmin2 --- configure.py | 2 +- .../JSystem/J3DGraphAnimator/J3DAnimation.h | 47 +-- src/JSystem/J3DGraphAnimator/J3DAnimation.cpp | 284 +++++++++++++++--- src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp | 10 +- 4 files changed, 272 insertions(+), 71 deletions(-) diff --git a/configure.py b/configure.py index 5854a6670..e33720c10 100644 --- a/configure.py +++ b/configure.py @@ -879,7 +879,7 @@ config.libs = [ [ Object(Matching, "JSystem/J3DGraphAnimator/J3DModelData.cpp"), Object(NonMatching, "JSystem/J3DGraphAnimator/J3DModel.cpp"), - Object(NonMatching, "JSystem/J3DGraphAnimator/J3DAnimation.cpp"), + Object(Matching, "JSystem/J3DGraphAnimator/J3DAnimation.cpp"), Object(Matching, "JSystem/J3DGraphAnimator/J3DMaterialAnm.cpp"), Object(Matching, "JSystem/J3DGraphAnimator/J3DVisibility.cpp"), Object(NonMatching, "JSystem/J3DGraphAnimator/J3DCluster.cpp"), diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index 058481f2c..5d8d37df6 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -12,10 +12,13 @@ struct J3DAnmKeyTableBase { }; // Size = 0x6 struct J3DAnmColorKeyTable { - J3DAnmKeyTableBase mRInfo; - J3DAnmKeyTableBase mGInfo; - J3DAnmKeyTableBase mBInfo; - J3DAnmKeyTableBase mAInfo; + enum Color { + RED = 0, + GREEN = 1, + BLUE = 2, + ALPHA = 3, + }; + /* 0x00 */ J3DAnmKeyTableBase mColorInfo[4]; }; // Size = 0x18 struct J3DAnmColorFullTable { @@ -374,7 +377,7 @@ public: mAnmTable = NULL; } - virtual ~J3DAnmTransformFull(); + virtual ~J3DAnmTransformFull() {} virtual void getTransform(u16, J3DTransformInfo*) const; private: @@ -612,8 +615,8 @@ public: void searchUpdateMaterialID(J3DMaterialTable*); void searchUpdateMaterialID(J3DModelData*); - virtual ~J3DAnmColor(); - virtual void getColor(u16, GXColor*) const; + virtual ~J3DAnmColor() {} + virtual void getColor(u16, GXColor*) const {} u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; } bool isValidUpdateMaterialID(u16 id) const { return mUpdateMaterialID[id] != 0xFFFF; } @@ -635,22 +638,22 @@ public: friend class J3DAnmKeyLoader_v15; J3DAnmColorKey() { - field_0x30 = 0; - field_0x34 = 0; - field_0x38 = 0; - field_0x3c = 0; - field_0x40 = 0; + mColorR = NULL; + mColorG = NULL; + mColorB = NULL; + mColorA = NULL; + mTable = NULL; } - virtual ~J3DAnmColorKey(); + virtual ~J3DAnmColorKey() {} virtual void getColor(u16, GXColor*) const; private: - /* 0x30 */ s16* field_0x30; - /* 0x34 */ s16* field_0x34; - /* 0x38 */ s16* field_0x38; - /* 0x3C */ s16* field_0x3c; - /* 0x40 */ J3DAnmColorKeyTable* field_0x40; + /* 0x30 */ s16* mColorR; + /* 0x34 */ s16* mColorG; + /* 0x38 */ s16* mColorB; + /* 0x3C */ s16* mColorA; + /* 0x40 */ J3DAnmColorKeyTable* mTable; }; class J3DAnmColorFull : public J3DAnmColor { @@ -665,7 +668,7 @@ public: mAnmTable = NULL; } - virtual ~J3DAnmColorFull(); + virtual ~J3DAnmColorFull() {} virtual void getColor(u16, GXColor*) const; J3DAnmColorFullTable * getAnmTable() const { return mAnmTable; } @@ -696,7 +699,7 @@ public: } } - virtual ~J3DAnmVtxColor(); + virtual ~J3DAnmVtxColor() {} virtual void getColor(u8, u16, GXColor*) const {} protected: @@ -714,7 +717,7 @@ public: } } - virtual ~J3DAnmVtxColorKey(); + virtual ~J3DAnmVtxColorKey() {} virtual void getColor(u8, u16, GXColor*) const; J3DAnmColorKeyTable * getAnmTable(u8 idx) const { return mpTable[idx]; } @@ -737,7 +740,7 @@ public: } } - virtual ~J3DAnmVtxColorFull(); + virtual ~J3DAnmVtxColorFull() {} virtual void getColor(u8, u16, GXColor*) const; J3DAnmColorFullTable * getAnmTable(u8 idx) const { return mpTable[idx]; } diff --git a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp index 1d4305940..863841095 100644 --- a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp @@ -5,6 +5,7 @@ #include "JSystem/J3DGraphAnimator/J3DAnimation.h" #include "JSystem/JMath/JMath.h" +#include "dolphin/os/OS.h" /* 802EF5D8-802EF608 .text init__12J3DFrameCtrlFs */ void J3DFrameCtrl::init(s16 end) { @@ -208,14 +209,13 @@ void J3DFrameCtrl::update() { /* 802EFFE4-802F06D8 .text getTransform__19J3DAnmTransformFullCFUsP16J3DTransformInfo */ void J3DAnmTransformFull::getTransform(u16 idx, J3DTransformInfo* dst) const { - /* Nonmatching */ - /* Scale */ { u16 maxFrame = mAnmTable[idx*3 + 0].mScaleMaxFrame; - if (0.0f <= getFrame() && getFrame() < maxFrame) - dst->mScale.x = mScaleData[(s32)getFrame() + mAnmTable[idx*3 + 0].mScaleOffset]; - else if (getFrame() < 0.0f) + if (0.0f <= getFrame() && getFrame() < maxFrame) { + s32 frame = getFrame(); + dst->mScale.x = mScaleData[frame + mAnmTable[idx*3 + 0].mScaleOffset]; + } else if (getFrame() < 0.0f) dst->mScale.x = mScaleData[mAnmTable[idx*3 + 0].mScaleOffset]; else dst->mScale.x = mScaleData[maxFrame - 1 + mAnmTable[idx*3 + 0].mScaleOffset]; @@ -223,27 +223,30 @@ void J3DAnmTransformFull::getTransform(u16 idx, J3DTransformInfo* dst) const { /* Seems they copy-pasted this block one too many times? */ { u16 maxFrame = mAnmTable[idx*3 + 0].mScaleMaxFrame; - if (0.0f <= getFrame() && getFrame() < maxFrame) - dst->mScale.x = mScaleData[(s32)getFrame() + mAnmTable[idx*3 + 0].mScaleOffset]; - else if (getFrame() < 0.0f) + if (0.0f <= getFrame() && getFrame() < maxFrame) { + s32 frame = getFrame(); + dst->mScale.x = mScaleData[frame + mAnmTable[idx*3 + 0].mScaleOffset]; + } else if (getFrame() < 0.0f) dst->mScale.x = mScaleData[mAnmTable[idx*3 + 0].mScaleOffset]; else dst->mScale.x = mScaleData[maxFrame - 1 + mAnmTable[idx*3 + 0].mScaleOffset]; } { u16 maxFrame = mAnmTable[idx*3 + 1].mScaleMaxFrame; - if (0.0f <= getFrame() && getFrame() < maxFrame) - dst->mScale.y = mScaleData[(s32)getFrame() + mAnmTable[idx*3 + 1].mScaleOffset]; - else if (getFrame() < 0.0f) + if (0.0f <= getFrame() && getFrame() < maxFrame) { + s32 frame = getFrame(); + dst->mScale.y = mScaleData[frame + mAnmTable[idx*3 + 1].mScaleOffset]; + } else if (getFrame() < 0.0f) dst->mScale.y = mScaleData[mAnmTable[idx*3 + 1].mScaleOffset]; else dst->mScale.y = mScaleData[maxFrame - 1 + mAnmTable[idx*3 + 1].mScaleOffset]; } { u16 maxFrame = mAnmTable[idx*3 + 2].mScaleMaxFrame; - if (0.0f <= getFrame() && getFrame() < maxFrame) - dst->mScale.z = mScaleData[(s32)getFrame() + mAnmTable[idx*3 + 2].mScaleOffset]; - else if (getFrame() < 0.0f) + if (0.0f <= getFrame() && getFrame() < maxFrame){ + s32 frame = getFrame(); + dst->mScale.z = mScaleData[frame + mAnmTable[idx*3 + 2].mScaleOffset]; + } else if (getFrame() < 0.0f) dst->mScale.z = mScaleData[mAnmTable[idx*3 + 2].mScaleOffset]; else dst->mScale.z = mScaleData[maxFrame - 1 + mAnmTable[idx*3 + 2].mScaleOffset]; @@ -252,27 +255,30 @@ void J3DAnmTransformFull::getTransform(u16 idx, J3DTransformInfo* dst) const { /* Rotation */ { u16 maxFrame = mAnmTable[idx*3 + 0].mRotationMaxFrame; - if (0.0f <= getFrame() && getFrame() < maxFrame) - dst->mRotation.x = mRotData[(s32)getFrame() + mAnmTable[idx*3 + 0].mRotationOffset]; - else if (getFrame() < 0.0f) + if (0.0f <= getFrame() && getFrame() < maxFrame){ + s32 frame = getFrame(); + dst->mRotation.x = mRotData[frame + mAnmTable[idx*3 + 0].mRotationOffset]; + } else if (getFrame() < 0.0f) dst->mRotation.x = mRotData[mAnmTable[idx*3 + 0].mRotationOffset]; else dst->mRotation.x = mRotData[maxFrame - 1 + mAnmTable[idx*3 + 0].mRotationOffset]; } { u16 maxFrame = mAnmTable[idx*3 + 1].mRotationMaxFrame; - if (0.0f <= getFrame() && getFrame() < maxFrame) - dst->mRotation.y = mRotData[(s32)getFrame() + mAnmTable[idx*3 + 1].mRotationOffset]; - else if (getFrame() < 0.0f) + if (0.0f <= getFrame() && getFrame() < maxFrame){ + s32 frame = getFrame(); + dst->mRotation.y = mRotData[frame + mAnmTable[idx*3 + 1].mRotationOffset]; + } else if (getFrame() < 0.0f) dst->mRotation.y = mRotData[mAnmTable[idx*3 + 1].mRotationOffset]; else dst->mRotation.y = mRotData[maxFrame - 1 + mAnmTable[idx*3 + 1].mRotationOffset]; } { u16 maxFrame = mAnmTable[idx*3 + 2].mRotationMaxFrame; - if (0.0f <= getFrame() && getFrame() < maxFrame) - dst->mRotation.z = mRotData[(s32)getFrame() + mAnmTable[idx*3 + 2].mRotationOffset]; - else if (getFrame() < 0.0f) + if (0.0f <= getFrame() && getFrame() < maxFrame){ + s32 frame = getFrame(); + dst->mRotation.z = mRotData[frame + mAnmTable[idx*3 + 2].mRotationOffset]; + } else if (getFrame() < 0.0f) dst->mRotation.z = mRotData[mAnmTable[idx*3 + 2].mRotationOffset]; else dst->mRotation.z = mRotData[maxFrame - 1 + mAnmTable[idx*3 + 2].mRotationOffset]; @@ -281,27 +287,30 @@ void J3DAnmTransformFull::getTransform(u16 idx, J3DTransformInfo* dst) const { /* Translation */ { u16 maxFrame = mAnmTable[idx*3 + 0].mTranslateMaxFrame; - if (0.0f <= getFrame() && getFrame() < maxFrame) - dst->mTranslate.x = mTransData[(s32)getFrame() + mAnmTable[idx*3 + 0].mTranslateOffset]; - else if (getFrame() < 0.0f) + if (0.0f <= getFrame() && getFrame() < maxFrame){ + s32 frame = getFrame(); + dst->mTranslate.x = mTransData[frame + mAnmTable[idx*3 + 0].mTranslateOffset]; + } else if (getFrame() < 0.0f) dst->mTranslate.x = mTransData[mAnmTable[idx*3 + 0].mTranslateOffset]; else dst->mTranslate.x = mTransData[maxFrame - 1 + mAnmTable[idx*3 + 0].mTranslateOffset]; } { u16 maxFrame = mAnmTable[idx*3 + 1].mTranslateMaxFrame; - if (0.0f <= getFrame() && getFrame() < maxFrame) - dst->mTranslate.y = mTransData[(s32)getFrame() + mAnmTable[idx*3 + 1].mTranslateOffset]; - else if (getFrame() < 0.0f) + if (0.0f <= getFrame() && getFrame() < maxFrame){ + s32 frame = getFrame(); + dst->mTranslate.y = mTransData[frame + mAnmTable[idx*3 + 1].mTranslateOffset]; + } else if (getFrame() < 0.0f) dst->mTranslate.y = mTransData[mAnmTable[idx*3 + 1].mTranslateOffset]; else dst->mTranslate.y = mTransData[maxFrame - 1 + mAnmTable[idx*3 + 1].mTranslateOffset]; } { u16 maxFrame = mAnmTable[idx*3 + 2].mTranslateMaxFrame; - if (0.0f <= getFrame() && getFrame() < maxFrame) - dst->mTranslate.z = mTransData[(s32)getFrame() + mAnmTable[idx*3 + 2].mTranslateOffset]; - else if (getFrame() < 0.0f) + if (0.0f <= getFrame() && getFrame() < maxFrame){ + s32 frame = getFrame(); + dst->mTranslate.z = mTransData[frame + mAnmTable[idx*3 + 2].mTranslateOffset]; + } else if (getFrame() < 0.0f) dst->mTranslate.z = mTransData[mAnmTable[idx*3 + 2].mTranslateOffset]; else dst->mTranslate.z = mTransData[maxFrame - 1 + mAnmTable[idx*3 + 2].mTranslateOffset]; @@ -310,13 +319,46 @@ void J3DAnmTransformFull::getTransform(u16 idx, J3DTransformInfo* dst) const { /* 802F06D8-802F072C .text J3DHermiteInterpolationS__FfPsPsPsPsPsPs */ f32 J3DHermiteInterpolationS(f32 t, s16* time0, s16* value0, s16* tangent0, s16* time1, s16* value1, s16* tangent1) { - /* Nonmatching */ + /* f32 v0 = *(f32*)value0; f32 timeRange = (*(f32*)time1 - *(f32*)time0); f32 kt = (t - *(f32*)time0) / timeRange; f32 t1 = (-timeRange * *(f32*)tangent0 - (*(f32*)value1 - v0)); f32 t2 = kt * kt * ((*(f32*)tangent1 * timeRange + v0) - *(f32*)value1 - t1); return (t1 * kt * kt + (timeRange * *(f32*)tangent0 + t2) * kt + v0) - t2; + */ + + register f32 p1 = t; + register s16* p2 = time0; + register s16* p3 = value0; + register s16* p4 = tangent0; + register s16* p5 = time1; + register s16* p6 = value1; + register s16* p7 = tangent1; + register f32 fout; + asm { + psq_l f0, 0(p2), 0x1, 5 + psq_l f3, 0(p5), 0x1, 5 + psq_l f2, 0(p3), 0x1, 5 + fsubs f4, f3, f0 + psq_l f3, 0(p6), 0x1, 5 + fsubs f6, fout, f0 + psq_l fout, 0(p7), 0x1, 5 + fsubs f5, f3, f2 + fdivs f6, f6, f4 + psq_l f0, 0(p4), 0x1, 5 + fmadds fout, fout, f4, f2 + fmuls f7, f6, f6 + fnmsubs f5, f4, f0, f5 + fsubs fout, fout, f3 + fsubs fout, fout, f5 + fmuls f3, f7, fout + fmadds fout, f4, f0, f3 + fmadds fout, fout, f6, f2 + fmadds fout, f5, f7, fout + fsubs fout, fout, f3 + } + return fout; } /* 802F072C-802F0954 .text J3DGetKeyFrameInterpolationS__FfP18J3DAnmKeyTableBasePs */ @@ -568,8 +610,83 @@ void J3DAnmVtxColorFull::getColor(u8 col, u16 idx, GXColor* dst) const { } /* 802F14B4-802F17D0 .text getColor__17J3DAnmVtxColorKeyCFUcUsP8_GXColor */ -void J3DAnmVtxColorKey::getColor(u8 col, u16 idx, GXColor* dst) const { - /* Nonmatching */ +void J3DAnmVtxColorKey::getColor(u8 col, u16 idx, GXColor* outColor) const { + f32 frame; + switch (getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::RED].mMaxFrame) { + case 0: + outColor->r = 0; + break; + case 1: + outColor->r = mColorR[getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::RED].mOffset]; + break; + default: + frame = J3DGetKeyFrameInterpolationS(mFrame, &getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::RED], + &mColorR[getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::RED].mOffset]); + if (frame <= 0.0f) { + outColor->r = 0; + } else if (frame <= 255.0f) { + OSf32tou8(&frame, &outColor->r); + } else { + outColor->r = 255; + } + } + + switch (getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::GREEN].mMaxFrame) { + case 0: + outColor->g = 0; + break; + case 1: + outColor->g = mColorG[getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::GREEN].mOffset]; + break; + default: + frame = J3DGetKeyFrameInterpolationS(mFrame, &getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::GREEN], + &mColorG[getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::GREEN].mOffset]); + if (frame <= 0.0f) { + outColor->g = 0; + } else if (frame <= 255.0f) { + OSf32tou8(&frame, &outColor->g); + } else { + outColor->g = 255; + } + } + + switch (getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::BLUE].mMaxFrame) { + case 0: + outColor->b = 0; + break; + case 1: + outColor->b = mColorB[getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::BLUE].mOffset]; + break; + default: + frame = J3DGetKeyFrameInterpolationS(mFrame, &getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::BLUE], + &mColorB[getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::BLUE].mOffset]); + if (frame <= 0.0f) { + outColor->b = 0; + } else if (frame <= 255.0f) { + OSf32tou8(&frame, &outColor->b); + } else { + outColor->b = 255; + } + } + + switch (getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::ALPHA].mMaxFrame) { + case 0: + outColor->a = 0; + break; + case 1: + outColor->a = mColorA[getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::ALPHA].mOffset]; + break; + default: + frame = J3DGetKeyFrameInterpolationS(mFrame, &getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::ALPHA], + &mColorA[getAnmTable(col)[idx].mColorInfo[J3DAnmColorKeyTable::ALPHA].mOffset]); + if (frame <= 0.0f) { + outColor->a = 0; + } else if (frame <= 255.0f) { + OSf32tou8(&frame, &outColor->a); + } else { + outColor->a = 255; + } + } } /* 802F17D0-802F1868 .text searchUpdateMaterialID__11J3DAnmColorFP16J3DMaterialTable */ @@ -629,8 +746,91 @@ void J3DAnmColorFull::getColor(u16 idx, GXColor* dst) const { } /* 802F1BDC-802F1F20 .text getColor__14J3DAnmColorKeyCFUsP8_GXColor */ -void J3DAnmColorKey::getColor(u16 idx, GXColor* dst) const { - /* Nonmatching */ +void J3DAnmColorKey::getColor(u16 tableIndex, GXColor* outColor) const { + f32 frame; + switch (mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::RED].mMaxFrame) { + case 0: + outColor->r = 0; + break; + case 1: + outColor->r = mColorR[mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::RED].mOffset]; + break; + default: + frame = J3DGetKeyFrameInterpolation(mFrame, &mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::RED], + &mColorR[mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::RED].mOffset]); + if (frame < 0.0f) { + outColor->r = 0; + } + if (frame > 255.0f) { + outColor->r = 255; + } + if (0.0f <= frame && frame <= 255.0f) { + outColor->r = frame; + } + } + + switch (mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::GREEN].mMaxFrame) { + case 0: + outColor->g = 0; + break; + case 1: + outColor->g = mColorG[mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::GREEN].mOffset]; + break; + default: + frame = J3DGetKeyFrameInterpolation(mFrame, &mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::GREEN], + &mColorG[mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::GREEN].mOffset]); + if (frame < 0.0f) { + outColor->g = 0; + } + if (frame > 255.0f) { + outColor->g = 255; + } + if (0.0f <= frame && frame <= 255.0f) { + outColor->g = frame; + } + } + + switch (mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::BLUE].mMaxFrame) { + case 0: + outColor->b = 0; + break; + case 1: + outColor->b = mColorB[mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::BLUE].mOffset]; + break; + default: + frame = J3DGetKeyFrameInterpolation(mFrame, &mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::BLUE], + &mColorB[mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::BLUE].mOffset]); + if (frame < 0.0f) { + outColor->b = 0; + } + if (frame > 255.0f) { + outColor->b = 255; + } + if (0.0f <= frame && frame <= 255.0f) { + outColor->b = frame; + } + } + + switch (mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::ALPHA].mMaxFrame) { + case 0: + outColor->a = 0; + break; + case 1: + outColor->a = mColorA[mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::ALPHA].mOffset]; + break; + default: + frame = J3DGetKeyFrameInterpolation(mFrame, &mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::ALPHA], + &mColorA[mTable[tableIndex].mColorInfo[J3DAnmColorKeyTable::ALPHA].mOffset]); + if (frame < 0.0f) { + outColor->a = 0; + } + if (frame > 255.0f) { + outColor->a = 255; + } + if (0.0f <= frame && frame <= 255.0f) { + outColor->a = frame; + } + } } /* 802F1F20-802F200C .text getTexNo__16J3DAnmTexPatternCFUsPUs */ @@ -696,7 +896,6 @@ void J3DAnmTextureSRTKey::searchUpdateMaterialID(J3DModelData* modelData) { /* 802F22E0-802F2624 .text getTevColorReg__15J3DAnmTevRegKeyCFUsP11_GXColorS10 */ void J3DAnmTevRegKey::getTevColorReg(u16 idx, GXColorS10* dst) const { - /* Nonmatching */ { switch (getAnmCRegKeyTable()[idx].mRTable.mMaxFrame) { case 0: @@ -711,7 +910,7 @@ void J3DAnmTevRegKey::getTevColorReg(u16 idx, GXColorS10* dst) const { dst->r = -1024; if (v > 1023.0f) dst->r = 1023; - if (0.0f <= v && v <= 255.0f) + if (-1024.0f <= v && v <= 1023.0f) dst->r = v; break; } @@ -730,7 +929,7 @@ void J3DAnmTevRegKey::getTevColorReg(u16 idx, GXColorS10* dst) const { dst->g = -1024; if (v > 1023.0f) dst->g = 1023; - if (0.0f <= v && v <= 255.0f) + if (-1024.0f <= v && v <= 1023.0f) dst->g = v; break; } @@ -749,7 +948,7 @@ void J3DAnmTevRegKey::getTevColorReg(u16 idx, GXColorS10* dst) const { dst->b = -1024; if (v > 1023.0f) dst->b = 1023; - if (0.0f <= v && v <= 255.0f) + if (-1024.0f <= v && v <= 1023.0f) dst->b = v; break; } @@ -768,7 +967,7 @@ void J3DAnmTevRegKey::getTevColorReg(u16 idx, GXColorS10* dst) const { dst->a = -1024; if (v > 1023.0f) dst->a = 1023; - if (0.0f <= v && v <= 255.0f) + if (-1024.0f <= v && v <= 1023.0f) dst->a = v; break; } @@ -777,7 +976,6 @@ void J3DAnmTevRegKey::getTevColorReg(u16 idx, GXColorS10* dst) const { /* 802F2624-802F2968 .text getTevKonstReg__15J3DAnmTevRegKeyCFUsP8_GXColor */ void J3DAnmTevRegKey::getTevKonstReg(u16 idx, GXColor* dst) const { - /* Nonmatching */ { switch (getAnmKRegKeyTable()[idx].mRTable.mMaxFrame) { case 0: diff --git a/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp b/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp index 70ddb6c9a..225301dde 100644 --- a/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp +++ b/src/JSystem/J3DGraphLoader/J3DAnmLoader.cpp @@ -526,11 +526,11 @@ void J3DAnmKeyLoader_v15::setAnmColor(J3DAnmColorKey* param_1, const J3DAnmColor param_1->field_0x12 = param_2->field_0x12; param_1->field_0x14 = param_2->field_0x14; param_1->field_0x16 = param_2->field_0x16; - param_1->field_0x40 = JSUConvertOffsetToPtr(param_2, (void*)param_2->mTableOffset); - param_1->field_0x30 = JSUConvertOffsetToPtr(param_2, (void*)param_2->mRValOffset); - param_1->field_0x34 = JSUConvertOffsetToPtr(param_2, (void*)param_2->mGValOffset); - param_1->field_0x38 = JSUConvertOffsetToPtr(param_2, (void*)param_2->mBValOffset); - param_1->field_0x3c = JSUConvertOffsetToPtr(param_2, (void*)param_2->mAValOffset); + param_1->mTable = JSUConvertOffsetToPtr(param_2, (void*)param_2->mTableOffset); + param_1->mColorR = JSUConvertOffsetToPtr(param_2, (void*)param_2->mRValOffset); + param_1->mColorG = JSUConvertOffsetToPtr(param_2, (void*)param_2->mGValOffset); + param_1->mColorB = JSUConvertOffsetToPtr(param_2, (void*)param_2->mBValOffset); + param_1->mColorA = JSUConvertOffsetToPtr(param_2, (void*)param_2->mAValOffset); param_1->mUpdateMaterialID = JSUConvertOffsetToPtr(param_2, (void*)param_2->mUpdateMaterialIDOffset); param_1->mUpdateMaterialName.setResource(JSUConvertOffsetToPtr(param_2, (void*)param_2->mNameTabOffset)); }