mirror of
https://github.com/zeldaret/tww.git
synced 2026-07-07 13:23:27 -04:00
J3DAnimation OK
mostly copied from pikmin2
This commit is contained in:
+1
-1
@@ -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"),
|
||||
|
||||
@@ -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]; }
|
||||
|
||||
@@ -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<s16>(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<s16>(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<s16>(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<s16>(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:
|
||||
|
||||
@@ -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<J3DAnmColorKeyTable>(param_2, (void*)param_2->mTableOffset);
|
||||
param_1->field_0x30 = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mRValOffset);
|
||||
param_1->field_0x34 = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mGValOffset);
|
||||
param_1->field_0x38 = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mBValOffset);
|
||||
param_1->field_0x3c = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mAValOffset);
|
||||
param_1->mTable = JSUConvertOffsetToPtr<J3DAnmColorKeyTable>(param_2, (void*)param_2->mTableOffset);
|
||||
param_1->mColorR = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mRValOffset);
|
||||
param_1->mColorG = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mGValOffset);
|
||||
param_1->mColorB = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mBValOffset);
|
||||
param_1->mColorA = JSUConvertOffsetToPtr<s16>(param_2, (void*)param_2->mAValOffset);
|
||||
param_1->mUpdateMaterialID = JSUConvertOffsetToPtr<u16>(param_2, (void*)param_2->mUpdateMaterialIDOffset);
|
||||
param_1->mUpdateMaterialName.setResource(JSUConvertOffsetToPtr<ResNTAB>(param_2, (void*)param_2->mNameTabOffset));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user