J3DMaterialAnm match

This commit is contained in:
Jasper St. Pierre
2023-10-17 18:50:10 -07:00
parent 1e2a7b16a4
commit 5ac0b8b9ec
8 changed files with 264 additions and 115 deletions
+2 -2
View File
@@ -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"),
@@ -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;
@@ -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;
+2 -2
View File
@@ -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; }
+1
View File
@@ -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;
+204 -84
View File
@@ -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 */
}
+44 -13
View File
@@ -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);
}
}
+1 -1
View File
@@ -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