From 5ac0b8b9ec3956244ca7f2a55b1201128fd18edf Mon Sep 17 00:00:00 2001 From: "Jasper St. Pierre" Date: Tue, 17 Oct 2023 18:50:10 -0700 Subject: [PATCH] J3DMaterialAnm match --- configure.py | 4 +- .../JSystem/J3DGraphAnimator/J3DAnimation.h | 11 +- .../JSystem/J3DGraphAnimator/J3DMaterialAnm.h | 12 +- include/JSystem/JParticle/JPABaseShape.h | 4 +- include/JSystem/JParticle/JPADraw.h | 1 + src/JSystem/J3DGraphAnimator/J3DAnimation.cpp | 288 +++++++++++++----- .../J3DGraphAnimator/J3DMaterialAnm.cpp | 57 +++- src/JSystem/JParticle/JPABaseShape.cpp | 2 +- 8 files changed, 264 insertions(+), 115 deletions(-) diff --git a/configure.py b/configure.py index 5253b5d49..d7c5ac7ca 100644 --- a/configure.py +++ b/configure.py @@ -874,8 +874,8 @@ config.libs = [ Object(Matching, "JSystem/J3DGraphAnimator/J3DModelData.cpp"), Object(NonMatching, "JSystem/J3DGraphAnimator/J3DModel.cpp"), Object(NonMatching, "JSystem/J3DGraphAnimator/J3DAnimation.cpp"), - Object(NonMatching, "JSystem/J3DGraphAnimator/J3DMaterialAnm.cpp"), - Object(Matching, "JSystem/J3DGraphAnimator/J3DVisibility.cpp"), + Object(Matching, "JSystem/J3DGraphAnimator/J3DMaterialAnm.cpp"), + Object(Matching, "JSystem/J3DGraphAnimator/J3DVisibility.cpp"), Object(NonMatching, "JSystem/J3DGraphAnimator/J3DCluster.cpp"), Object(NonMatching, "JSystem/J3DGraphAnimator/J3DJoint.cpp"), Object(Matching, "JSystem/J3DGraphAnimator/J3DNode.cpp"), diff --git a/include/JSystem/J3DGraphAnimator/J3DAnimation.h b/include/JSystem/J3DGraphAnimator/J3DAnimation.h index 1f98f6002..9f69683df 100644 --- a/include/JSystem/J3DGraphAnimator/J3DAnimation.h +++ b/include/JSystem/J3DGraphAnimator/J3DAnimation.h @@ -488,7 +488,6 @@ public: void searchUpdateMaterialID(J3DModelData*); virtual ~J3DAnmColor(); - virtual s32 getKind() const; virtual void getColor(u16, GXColor*) const; u16 getUpdateMaterialNum() const { return mUpdateMaterialNum; } @@ -544,7 +543,7 @@ public: virtual ~J3DAnmVtxColor(); virtual s32 getKind() const; - virtual void getColor(u8, u16, GXColor*) const; + virtual void getColor(u8, u16, GXColor*) const {} private: /* 0x0C */ s16 mAnmTableNum[2]; @@ -576,9 +575,9 @@ private: class J3DAnmCluster : public J3DAnmBase { public: - virtual ~J3DAnmCluster(); + virtual ~J3DAnmCluster() {} virtual s32 getKind() const; - virtual f32 getWeight(u16) const; + virtual f32 getWeight(u16) const { return 1.0f; } private: /* 0x0C */ f32* field_0xc; @@ -586,7 +585,7 @@ private: class J3DAnmClusterFull : public J3DAnmCluster { public: - virtual ~J3DAnmClusterFull(); + virtual ~J3DAnmClusterFull() {} virtual s32 getKind() const; virtual f32 getWeight(u16) const; @@ -596,7 +595,7 @@ private: class J3DAnmClusterKey : public J3DAnmCluster { public: - virtual ~J3DAnmClusterKey(); + virtual ~J3DAnmClusterKey() {} virtual s32 getKind() const; virtual f32 getWeight(u16) const; diff --git a/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h b/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h index 389d65d7b..7b55d9cbd 100644 --- a/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h +++ b/include/JSystem/J3DGraphAnimator/J3DMaterialAnm.h @@ -28,7 +28,7 @@ public: void setAnmFlag(bool flag) { mAnmFlag = flag; } bool getAnmFlag() const { return mAnmFlag; } void setAnmColor(J3DAnmColor* anmColor) { mAnmColor = anmColor; } - void calc(GXColor* pColor) const { mAnmColor->getColor(mAnmIndex, pColor); } + void calc(GXColor* pColor) const; private: /* 0x0 */ u16 mAnmIndex; @@ -43,7 +43,7 @@ public: mAnmTexPattern = NULL; mAnmIndex = 0; }; - virtual void calc(u16* param_0) const { mAnmTexPattern->getTexNo(mAnmIndex, param_0); } + virtual void calc(u16* param_0) const; void operator=(J3DTexNoAnm const& other) { mAnmTexPattern = other.mAnmTexPattern; @@ -85,9 +85,7 @@ public: bool getAnmFlag() const { return mAnmFlag; } void setAnmFlag(bool flag) { mAnmFlag = flag; } void setAnmTransform(J3DAnmTextureSRTKey* transform) { mAnmTransform = transform; } - void calc(J3DTextureSRTInfo* pSRTInfo) const { - mAnmTransform->getTransform(mAnmIndex, pSRTInfo); - } + void calc(J3DTextureSRTInfo* pSRTInfo) const; private: /* 0x0 */ u16 mAnmIndex; @@ -117,7 +115,7 @@ public: void setAnmFlag(bool flag) { mAnmFlag = flag; } bool getAnmFlag() const { return mAnmFlag; } void setAnmTevReg(J3DAnmTevRegKey* tevReg) { mAnmTevReg = tevReg; } - void calc(GXColor* pColor) const { mAnmTevReg->getTevKonstReg(mAnmIndex, pColor); } + void calc(GXColor* pColor) const; private: /* 0x0 */ u16 mAnmIndex; @@ -147,7 +145,7 @@ public: void setAnmFlag(bool flag) { mAnmFlag = flag; } bool getAnmFlag() const { return mAnmFlag; } void setAnmTevReg(J3DAnmTevRegKey* tevReg) { mAnmTevReg = tevReg; } - void calc(GXColorS10* pColor) const { mAnmTevReg->getTevColorReg(mAnmIndex, pColor); } + void calc(GXColorS10* pColor) const; private: /* 0x0 */ u16 mAnmIndex; diff --git a/include/JSystem/JParticle/JPABaseShape.h b/include/JSystem/JParticle/JPABaseShape.h index ea3afc6e2..a8fbb29d5 100644 --- a/include/JSystem/JParticle/JPABaseShape.h +++ b/include/JSystem/JParticle/JPABaseShape.h @@ -42,7 +42,7 @@ public: virtual BOOL isEnableTextureAnm() = 0; virtual BOOL textureIsEmpty() = 0; virtual u32 getTextureAnmType() = 0; - virtual u32 getTextureAnmKeyNum() = 0; + virtual u8 getTextureAnmKeyNum() = 0; virtual u8 getTextureIndex() = 0; virtual u8 getTextureIndex(u8 idx) = 0; virtual BOOL isEnablePrm() = 0; @@ -164,7 +164,7 @@ public: virtual BOOL isEnableTextureAnm() { return pBsd->mTextureFlags & 0x01; } virtual BOOL textureIsEmpty() { return !(pBsd->mTextureFlags & 0x02); } virtual u32 getTextureAnmType() { return (pBsd->mTextureFlags >> 2) & 0x07; } - virtual u32 getTextureAnmKeyNum() { return pBsd->mTextureAnmKeyNum; } + virtual u8 getTextureAnmKeyNum() { return pBsd->mTextureAnmKeyNum; } virtual u8 getTextureIndex() { return pBsd->mTextureIndex; } virtual u8 getTextureIndex(u8 idx) { return mpTexAnmIdxArr[idx]; } virtual BOOL isEnablePrm() { return pBsd->mColorFlags & 0x01; } diff --git a/include/JSystem/JParticle/JPADraw.h b/include/JSystem/JParticle/JPADraw.h index ca6841bc1..032e22ffd 100644 --- a/include/JSystem/JParticle/JPADraw.h +++ b/include/JSystem/JParticle/JPADraw.h @@ -4,6 +4,7 @@ #include "dolphin/types.h" #include "dolphin/gx/GXStruct.h" #include "dolphin/gx/GXEnum.h" +#include "dolphin/mtx/mtx.h" #include "JSystem/JParticle/JPAParticle.h" class JPABaseShapeArc; diff --git a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp index 128323b06..0d3269537 100644 --- a/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DAnimation.cpp @@ -7,62 +7,247 @@ #include "dolphin/types.h" /* 802EF5D8-802EF608 .text init__12J3DFrameCtrlFs */ -void J3DFrameCtrl::init(short) { - /* Nonmatching */ +void J3DFrameCtrl::init(s16 end) { + mAttribute = 2; + mState = 0; + mStart = 0; + mEnd = end; + mLoop = 0; + mRate = 1.0f; + mFrame = 0.0f; } /* 802EF608-802EFBA8 .text checkPass__12J3DFrameCtrlFf */ -BOOL J3DFrameCtrl::checkPass(float) { - /* Nonmatching */ +BOOL J3DFrameCtrl::checkPass(f32 pass_frame) { + f32 cur_frame = mFrame; + f32 next_frame = cur_frame + mRate; + + switch (mAttribute) { + case LOOP_ONCE_e: + case LOOP_ONCE_RESET_e: + if (next_frame < mStart) { + next_frame = mStart; + } + + if (next_frame >= mEnd) { + next_frame = mEnd - 0.001f; + } + + if (cur_frame <= next_frame) { + if (cur_frame <= pass_frame && pass_frame < next_frame) { + return true; + } else { + return false; + } + } + + if (next_frame <= pass_frame && pass_frame < cur_frame) { + return true; + } + return false; + case LOOP_REPEAT_e: + if (cur_frame < mStart) { + while (next_frame < mStart) { + if (mLoop - mStart <= 0.0f) { + break; + } + next_frame += mLoop - mStart; + } + + if (next_frame <= pass_frame && pass_frame < mLoop) { + return true; + } else { + return false; + } + } else if (mEnd <= cur_frame) { + while (next_frame >= mEnd) { + if (mEnd - mLoop <= 0.0f) { + break; + } + next_frame -= mEnd - mLoop; + } + + if (mLoop <= pass_frame && pass_frame < next_frame) { + return true; + } else { + return false; + } + } else if (next_frame < mStart) { + while (next_frame < mStart) { + if (mLoop - mStart <= 0.0f) { + break; + } + next_frame += mLoop - mStart; + } + + if ((mStart <= pass_frame && pass_frame < cur_frame) || (next_frame <= pass_frame && pass_frame < mLoop)) { + return true; + } else { + return false; + } + } else if (mEnd <= next_frame) { + while (next_frame >= mEnd) { + if (mEnd - mLoop <= 0.0f) { + break; + } + + next_frame -= mEnd - mLoop; + } + + if ((cur_frame <= pass_frame && pass_frame < mEnd) || (mLoop <= pass_frame && pass_frame < next_frame)) { + return true; + } else { + return false; + } + } else if (cur_frame <= next_frame) { + if (cur_frame <= pass_frame && pass_frame < next_frame) { + return true; + } else { + return false; + } + } else if (next_frame <= pass_frame && pass_frame < cur_frame) { + return true; + } + return false; + case LOOP_MIRROR_ONCE_e: + case LOOP_MIRROR_REPEAT_e: + if (next_frame >= mEnd) { + next_frame = mEnd - 0.001f; + } + + if (next_frame < mStart) { + next_frame = mStart; + } + + if (cur_frame <= next_frame) { + if (cur_frame <= pass_frame && pass_frame < next_frame) { + return true; + } else { + return false; + } + } + + if (next_frame <= pass_frame && pass_frame < cur_frame) { + return true; + } + return false; + default: + return false; + } } /* 802EFBA8-802EFFE4 .text update__12J3DFrameCtrlFv */ void J3DFrameCtrl::update() { - /* Nonmatching */ + mState = 0; + mFrame += mRate; + switch (mAttribute) { + case LOOP_ONCE_e: + if (mFrame < mStart) { + mFrame = mStart; + mRate = 0.0f; + mState |= 1; + } + if (mFrame >= mEnd) { + mFrame = mEnd - 0.001f; + mRate = 0.0f; + mState |= 1; + } + break; + case LOOP_ONCE_RESET_e: + if (mFrame < mStart) { + mFrame = mStart; + mRate = 0.0f; + mState |= 1; + } + if (mFrame >= mEnd) { + mFrame = mStart; + mRate = 0.0f; + mState |= 1; + } + break; + case LOOP_REPEAT_e: + while (mFrame < mStart) { + mState |= 2; + if (mLoop - mStart <= 0.0f) { + break; + } + mFrame += mLoop - mStart; + } + while (mFrame >= mEnd) { + mState |= 2; + if (mEnd - mLoop <= 0.0f) { + break; + } + mFrame -= mEnd - mLoop; + } + break; + case LOOP_MIRROR_ONCE_e: + if (mFrame >= mEnd) { + mFrame = mEnd - 0.001f; + mRate = -mRate; + } + if (mFrame < mStart) { + mFrame = mStart; + mRate = 0.0f; + mState |= 1; + } + break; + case LOOP_MIRROR_REPEAT_e: + if (mFrame >= mEnd) { + mFrame = mEnd - 0.001f; + mRate = -mRate; + } + if (mFrame < mStart) { + mFrame = mStart; + mRate = -mRate; + mState |= 2; + } + break; + } } /* 802EFFE4-802F06D8 .text getTransform__19J3DAnmTransformFullCFUsP16J3DTransformInfo */ -void J3DAnmTransformFull::getTransform(unsigned short, J3DTransformInfo*) const { +void J3DAnmTransformFull::getTransform(u16, J3DTransformInfo*) const { /* Nonmatching */ } /* 802F06D8-802F072C .text J3DHermiteInterpolationS__FfPsPsPsPsPsPs */ -void J3DHermiteInterpolationS(float, short*, short*, short*, short*, short*, short*) { +f32 J3DHermiteInterpolationS(f32 t, s16* time0, s16* value0, s16* tangent0, s16* time1, s16* value1, s16* tangent1) { /* Nonmatching */ } /* 802F072C-802F0954 .text J3DGetKeyFrameInterpolationS__FfP18J3DAnmKeyTableBasePs */ -void J3DGetKeyFrameInterpolationS(float, J3DAnmKeyTableBase*, short*) { +void J3DGetKeyFrameInterpolationS(f32, J3DAnmKeyTableBase*, s16*) { /* Nonmatching */ } /* 802F0954-802F0E20 .text calcTransform__18J3DAnmTransformKeyCFfUsP16J3DTransformInfo */ -void J3DAnmTransformKey::calcTransform(float, unsigned short, J3DTransformInfo*) const { +void J3DAnmTransformKey::calcTransform(f32, u16, J3DTransformInfo*) const { /* Nonmatching */ } /* 802F0E20-802F10D4 .text calcTransform__19J3DAnmTextureSRTKeyCFfUsP17J3DTextureSRTInfo */ -void J3DAnmTextureSRTKey::calcTransform(float, unsigned short, J3DTextureSRTInfo*) const { +void J3DAnmTextureSRTKey::calcTransform(f32, u16, J3DTextureSRTInfo*) const { /* Nonmatching */ } /* 802F10D4-802F1188 .text getWeight__17J3DAnmClusterFullCFUs */ -f32 J3DAnmClusterFull::getWeight(unsigned short) const { +f32 J3DAnmClusterFull::getWeight(u16) const { /* Nonmatching */ } /* 802F1188-802F120C .text getWeight__16J3DAnmClusterKeyCFUs */ -f32 J3DAnmClusterKey::getWeight(unsigned short) const { +f32 J3DAnmClusterKey::getWeight(u16) const { /* Nonmatching */ } /* 802F120C-802F14B4 .text getColor__18J3DAnmVtxColorFullCFUcUsP8_GXColor */ -void J3DAnmVtxColorFull::getColor(unsigned char, unsigned short, _GXColor*) const { +void J3DAnmVtxColorFull::getColor(unsigned char, u16, _GXColor*) const { /* Nonmatching */ } /* 802F14B4-802F17D0 .text getColor__17J3DAnmVtxColorKeyCFUcUsP8_GXColor */ -void J3DAnmVtxColorKey::getColor(unsigned char, unsigned short, _GXColor*) const { +void J3DAnmVtxColorKey::getColor(unsigned char, u16, _GXColor*) const { /* Nonmatching */ } @@ -77,17 +262,17 @@ void J3DAnmColor::searchUpdateMaterialID(J3DModelData*) { } /* 802F188C-802F1BDC .text getColor__15J3DAnmColorFullCFUsP8_GXColor */ -void J3DAnmColorFull::getColor(unsigned short, _GXColor*) const { +void J3DAnmColorFull::getColor(u16, _GXColor*) const { /* Nonmatching */ } /* 802F1BDC-802F1F20 .text getColor__14J3DAnmColorKeyCFUsP8_GXColor */ -void J3DAnmColorKey::getColor(unsigned short, _GXColor*) const { +void J3DAnmColorKey::getColor(u16, _GXColor*) const { /* Nonmatching */ } /* 802F1F20-802F200C .text getTexNo__16J3DAnmTexPatternCFUsPUs */ -void J3DAnmTexPattern::getTexNo(unsigned short, unsigned short*) const { +void J3DAnmTexPattern::getTexNo(u16, u16*) const { /* Nonmatching */ } @@ -117,12 +302,12 @@ void J3DAnmTextureSRTKey::searchUpdateMaterialID(J3DModelData*) { } /* 802F22E0-802F2624 .text getTevColorReg__15J3DAnmTevRegKeyCFUsP11_GXColorS10 */ -void J3DAnmTevRegKey::getTevColorReg(unsigned short, _GXColorS10*) const { +void J3DAnmTevRegKey::getTevColorReg(u16, _GXColorS10*) const { /* Nonmatching */ } /* 802F2624-802F2968 .text getTevKonstReg__15J3DAnmTevRegKeyCFUsP8_GXColor */ -void J3DAnmTevRegKey::getTevKonstReg(unsigned short, _GXColor*) const { +void J3DAnmTevRegKey::getTevKonstReg(u16, _GXColor*) const { /* Nonmatching */ } @@ -135,68 +320,3 @@ void J3DAnmTevRegKey::searchUpdateMaterialID(J3DMaterialTable*) { void J3DAnmTevRegKey::searchUpdateMaterialID(J3DModelData*) { /* Nonmatching */ } - -/* 802F2EF8-802F2F7C .text __dt__14J3DAnmColorKeyFv */ -J3DAnmColorKey::~J3DAnmColorKey() { - /* Nonmatching */ -} - -/* 802F2F7C-802F2FF0 .text __dt__11J3DAnmColorFv */ -J3DAnmColor::~J3DAnmColor() { - /* Nonmatching */ -} - -/* 802F2FF0-802F2FF4 .text getColor__11J3DAnmColorCFUsP8_GXColor */ -void J3DAnmColor::getColor(unsigned short, _GXColor*) const { - /* Nonmatching */ -} - -/* 802F2FF4-802F3078 .text __dt__15J3DAnmColorFullFv */ -J3DAnmColorFull::~J3DAnmColorFull() { - /* Nonmatching */ -} - -/* 802F3078-802F30E4 .text __dt__17J3DAnmVtxColorKeyFv */ -J3DAnmVtxColorKey::~J3DAnmVtxColorKey() { - /* Nonmatching */ -} - -/* 802F30E4-802F3140 .text __dt__14J3DAnmVtxColorFv */ -J3DAnmVtxColor::~J3DAnmVtxColor() { - /* Nonmatching */ -} - -/* 802F3140-802F3144 .text getColor__14J3DAnmVtxColorCFUcUsP8_GXColor */ -void J3DAnmVtxColor::getColor(unsigned char, unsigned short, _GXColor*) const { - /* Nonmatching */ -} - -/* 802F3144-802F31B0 .text __dt__18J3DAnmVtxColorFullFv */ -J3DAnmVtxColorFull::~J3DAnmVtxColorFull() { - /* Nonmatching */ -} - -/* 802F31B0-802F321C .text __dt__16J3DAnmClusterKeyFv */ -J3DAnmClusterKey::~J3DAnmClusterKey() { - /* Nonmatching */ -} - -/* 802F321C-802F3278 .text __dt__13J3DAnmClusterFv */ -J3DAnmCluster::~J3DAnmCluster() { - /* Nonmatching */ -} - -/* 802F3278-802F3280 .text getWeight__13J3DAnmClusterCFUs */ -f32 J3DAnmCluster::getWeight(unsigned short) const { - /* Nonmatching */ -} - -/* 802F3280-802F32EC .text __dt__17J3DAnmClusterFullFv */ -J3DAnmClusterFull::~J3DAnmClusterFull() { - /* Nonmatching */ -} - -/* 802F32EC-802F3358 .text __dt__19J3DAnmTransformFullFv */ -J3DAnmTransformFull::~J3DAnmTransformFull() { - /* Nonmatching */ -} diff --git a/src/JSystem/J3DGraphAnimator/J3DMaterialAnm.cpp b/src/JSystem/J3DGraphAnimator/J3DMaterialAnm.cpp index f47c1e41f..13334ba73 100644 --- a/src/JSystem/J3DGraphAnimator/J3DMaterialAnm.cpp +++ b/src/JSystem/J3DGraphAnimator/J3DMaterialAnm.cpp @@ -7,36 +7,67 @@ #include "dolphin/types.h" /* 802F3358-802F3394 .text calc__14J3DMatColorAnmCFP8_GXColor */ -void J3DMatColorAnm::calc(_GXColor*) const { - /* Nonmatching */ +void J3DMatColorAnm::calc(GXColor* pColor) const { + mAnmColor->getColor(mAnmIndex, pColor); } /* 802F3394-802F33C8 .text calc__12J3DTexMtxAnmCFP17J3DTextureSRTInfo */ -void J3DTexMtxAnm::calc(J3DTextureSRTInfo*) const { - /* Nonmatching */ +void J3DTexMtxAnm::calc(J3DTextureSRTInfo* pSRTInfo) const { + mAnmTransform->getTransform(mAnmIndex, pSRTInfo); } /* 802F33C8-802F33F8 .text calc__11J3DTexNoAnmCFPUs */ -void J3DTexNoAnm::calc(unsigned short*) const { - /* Nonmatching */ +void J3DTexNoAnm::calc(u16* pTexNo) const { + mAnmTexPattern->getTexNo(mAnmIndex, pTexNo); } /* 802F33F8-802F3428 .text calc__14J3DTevColorAnmCFP11_GXColorS10 */ -void J3DTevColorAnm::calc(_GXColorS10*) const { - /* Nonmatching */ +void J3DTevColorAnm::calc(GXColorS10* pColor) const { + mAnmTevReg->getTevColorReg(mAnmIndex, pColor); } /* 802F3428-802F3458 .text calc__15J3DTevKColorAnmCFP8_GXColor */ -void J3DTevKColorAnm::calc(_GXColor*) const { - /* Nonmatching */ +void J3DTevKColorAnm::calc(GXColor* pColor) const { + mAnmTevReg->getTevKonstReg(mAnmIndex, pColor); } /* 802F3458-802F34FC .text initialize__14J3DMaterialAnmFv */ void J3DMaterialAnm::initialize() { - /* Nonmatching */ + for (u32 i = 0; i < ARRAY_SIZE(mMatColorAnm); i++) + mMatColorAnm[i] = NULL; + for (u32 i = 0; i < ARRAY_SIZE(mTexNoAnm); i++) + mTexNoAnm[i] = NULL; + for (u32 i = 0; i < ARRAY_SIZE(mTevColorAnm); i++) + mTevColorAnm[i] = NULL; + for (u32 i = 0; i < ARRAY_SIZE(mTevKColorAnm); i++) + mTevKColorAnm[i] = NULL; + for (u32 i = 0; i < ARRAY_SIZE(mTexMtxAnm); i++) + mTexMtxAnm[i] = NULL; } /* 802F34FC-802F36BC .text calc__14J3DMaterialAnmCFP11J3DMaterial */ -void J3DMaterialAnm::calc(J3DMaterial*) const { - /* Nonmatching */ +void J3DMaterialAnm::calc(J3DMaterial* pMaterial) const { + for (u32 i = 0; i < ARRAY_SIZE(mMatColorAnm); i++) { + if (mMatColorAnm[i] != NULL) + mMatColorAnm[i]->calc(&pMaterial->getColorBlock()->getMatColor(i)->mColor); + } + for (u32 i = 0; i < ARRAY_SIZE(mTexNoAnm); i++) { + if (mTexNoAnm[i] != NULL) { + u16 texNo; + mTexNoAnm[i]->calc(&texNo); + pMaterial->getTevBlock()->setTexNo(i, texNo); + } + } + for (u32 i = 0; i < 3; i++) { + if (mTevColorAnm[i] != NULL) + mTevColorAnm[i]->calc(&pMaterial->getTevColor(i)->mColor); + } + for (u32 i = 0; i < ARRAY_SIZE(mTevKColorAnm); i++) { + if (mTevKColorAnm[i] != NULL) + mTevKColorAnm[i]->calc(&pMaterial->getTevKColor(i)->mColor); + } + for (u32 i = 0; i < ARRAY_SIZE(mTexMtxAnm); i++) { + if (mTexMtxAnm[i] != NULL) + mTexMtxAnm[i]->calc(&pMaterial->getTexMtx(i)->getTexMtxInfo().mSRT); + } } diff --git a/src/JSystem/JParticle/JPABaseShape.cpp b/src/JSystem/JParticle/JPABaseShape.cpp index 2b446010f..275bb108e 100644 --- a/src/JSystem/JParticle/JPABaseShape.cpp +++ b/src/JSystem/JParticle/JPABaseShape.cpp @@ -102,7 +102,7 @@ JPABaseShapeArc::JPABaseShapeArc(const u8* pData, JKRHeap* pHeap) { bFlag1 = true; } - mGlobalAnmFlags = (bFlag2 ? 2 : 0) | (bFlag1 ? 1 : 0); + mGlobalAnmFlags = bFlag2 << 1 | bFlag1 << 0; if (isEnableTextureAnm() && getTextureAnmKeyNum() != 0) mpTexAnmIdxArr = (const u8*)(pData + 0x60); else