mirror of
https://github.com/zeldaret/tp
synced 2026-05-23 06:54:28 -04:00
@@ -7,90 +7,138 @@
|
||||
#include "JSystem/JUtility/JUTResource.h"
|
||||
#include "dolphin/os.h"
|
||||
|
||||
f32 J2DGetKeyFrameInterpolationf(f32 param_0, J3DAnmKeyTableBase* param_1, f32* param_2);
|
||||
f32 J2DGetKeyFrameInterpolations(f32 param_0, J3DAnmKeyTableBase* param_1, s16* param_2);
|
||||
template<typename T>
|
||||
f32 J2DGetKeyFrameInterpolation(f32 param_0, J3DAnmKeyTableBase* param_1, T* param_2) {
|
||||
J3D_PANIC(101, param_2, "Error : null pointer.");
|
||||
if (param_0 < param_2[0]) {
|
||||
return param_2[1];
|
||||
} else {
|
||||
if (param_1->mType == 0) {
|
||||
if (param_2[(param_1->mMaxFrame - 1) * 3] <= param_0) {
|
||||
return param_2[(param_1->mMaxFrame - 1) * 3 + 1];
|
||||
} else {
|
||||
u32 tmp = param_1->mMaxFrame;
|
||||
while (tmp > 1) {
|
||||
u32 halfTmp = tmp / 2;
|
||||
u32 upIdx = halfTmp * 3;
|
||||
if (param_0 >= param_2[upIdx]) {
|
||||
param_2 = param_2 + upIdx;
|
||||
tmp -= halfTmp;
|
||||
} else {
|
||||
tmp = halfTmp;
|
||||
}
|
||||
}
|
||||
f32 result = J2DHermiteInterpolation(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[2], ¶m_2[3], ¶m_2[4], ¶m_2[5]);
|
||||
return result;
|
||||
}
|
||||
} else {
|
||||
if (param_2[(param_1->mMaxFrame - 1) * 4] <= param_0) {
|
||||
return param_2[(param_1->mMaxFrame - 1) * 4 + 1];
|
||||
} else {
|
||||
u32 tmp = param_1->mMaxFrame;
|
||||
while (tmp > 1) {
|
||||
u32 halfTmp = tmp / 2;
|
||||
u32 upIdx = halfTmp * 4;
|
||||
if (param_0 >= param_2[upIdx]) {
|
||||
param_2 = param_2 + upIdx;
|
||||
tmp -= halfTmp;
|
||||
} else {
|
||||
tmp = halfTmp;
|
||||
}
|
||||
}
|
||||
f32 result = J2DHermiteInterpolation(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[3], ¶m_2[4], ¶m_2[5], ¶m_2[6]);
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void J2DAnmTransformFull::getTransform(u16 param_0, J3DTransformInfo* transformInfo) const {
|
||||
u32 local_3c = mFrame;
|
||||
J3D_PANIC(169, param_0 < field_0x22, "Error : range over.");
|
||||
J3D_PANIC(170, transformInfo, "Error : null pointer.");
|
||||
u16 idx = (param_0 * 3);
|
||||
J3DAnmTransformFullTable* xPart = &mTableInfo[idx];
|
||||
J3DAnmTransformFullTable* yPart = &mTableInfo[idx + 1];
|
||||
J3DAnmTransformFullTable* zPart = &mTableInfo[idx + 2];
|
||||
u16 xMaxFrame = xPart->mScaleMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
u32 maxFrame = xPart->mScaleMaxFrame;
|
||||
if (mFrame < 0) {
|
||||
transformInfo->mScale.x = mScaleValues[xPart->mScaleOffset];
|
||||
} else if (getFrame() >= xMaxFrame) {
|
||||
transformInfo->mScale.x = mScaleValues[(xPart->mScaleOffset + (xMaxFrame - 1))];
|
||||
} else if (mFrame >= maxFrame) {
|
||||
transformInfo->mScale.x = mScaleValues[(xPart->mScaleOffset + (maxFrame - 1))];
|
||||
} else {
|
||||
transformInfo->mScale.x = mScaleValues[(xPart->mScaleOffset + (int)getFrame())];
|
||||
transformInfo->mScale.x = mScaleValues[(xPart->mScaleOffset + (int)mFrame)];
|
||||
}
|
||||
u16 yMaxFrame = yPart->mScaleMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
maxFrame = yPart->mScaleMaxFrame;
|
||||
if (mFrame < 0) {
|
||||
transformInfo->mScale.y = mScaleValues[yPart->mScaleOffset];
|
||||
} else if (getFrame() >= yMaxFrame) {
|
||||
transformInfo->mScale.y = mScaleValues[(yPart->mScaleOffset + (yMaxFrame - 1))];
|
||||
} else if (mFrame >= maxFrame) {
|
||||
transformInfo->mScale.y = mScaleValues[(yPart->mScaleOffset + (maxFrame - 1))];
|
||||
} else {
|
||||
transformInfo->mScale.y = mScaleValues[(yPart->mScaleOffset + (int)getFrame())];
|
||||
transformInfo->mScale.y = mScaleValues[(yPart->mScaleOffset + (int)mFrame)];
|
||||
}
|
||||
u16 zMaxFrame = zPart->mScaleMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
maxFrame = zPart->mScaleMaxFrame;
|
||||
if (mFrame < 0) {
|
||||
transformInfo->mScale.z = mScaleValues[zPart->mScaleOffset];
|
||||
} else if (getFrame() >= zMaxFrame) {
|
||||
transformInfo->mScale.z = mScaleValues[(zPart->mScaleOffset + (zMaxFrame - 1))];
|
||||
} else if (mFrame >= maxFrame) {
|
||||
transformInfo->mScale.z = mScaleValues[(zPart->mScaleOffset + (maxFrame - 1))];
|
||||
} else {
|
||||
transformInfo->mScale.z = mScaleValues[(zPart->mScaleOffset + (int)getFrame())];
|
||||
transformInfo->mScale.z = mScaleValues[(zPart->mScaleOffset + (int)mFrame)];
|
||||
}
|
||||
xMaxFrame = xPart->mRotationMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
maxFrame = xPart->mRotationMaxFrame;
|
||||
if (mFrame < 0) {
|
||||
transformInfo->mRotation.x = mRotationValues[xPart->mRotationOffset];
|
||||
} else if (getFrame() >= xMaxFrame) {
|
||||
transformInfo->mRotation.x = mRotationValues[(xPart->mRotationOffset + (xMaxFrame - 1))];
|
||||
} else if (mFrame >= maxFrame) {
|
||||
transformInfo->mRotation.x = mRotationValues[(xPart->mRotationOffset + (maxFrame - 1))];
|
||||
} else {
|
||||
transformInfo->mRotation.x = mRotationValues[(xPart->mRotationOffset + (int)getFrame())];
|
||||
transformInfo->mRotation.x = mRotationValues[(xPart->mRotationOffset + (int)mFrame)];
|
||||
}
|
||||
yMaxFrame = yPart->mRotationMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
maxFrame = yPart->mRotationMaxFrame;
|
||||
if (mFrame < 0) {
|
||||
transformInfo->mRotation.y = mRotationValues[yPart->mRotationOffset];
|
||||
} else if (getFrame() >= yMaxFrame) {
|
||||
transformInfo->mRotation.y = mRotationValues[(yPart->mRotationOffset + (yMaxFrame - 1))];
|
||||
} else if (mFrame >= maxFrame) {
|
||||
transformInfo->mRotation.y = mRotationValues[(yPart->mRotationOffset + (maxFrame - 1))];
|
||||
} else {
|
||||
transformInfo->mRotation.y = mRotationValues[(yPart->mRotationOffset + (int)getFrame())];
|
||||
transformInfo->mRotation.y = mRotationValues[(yPart->mRotationOffset + (int)mFrame)];
|
||||
}
|
||||
zMaxFrame = zPart->mRotationMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
maxFrame = zPart->mRotationMaxFrame;
|
||||
if (mFrame < 0) {
|
||||
transformInfo->mRotation.z = mRotationValues[zPart->mRotationOffset];
|
||||
} else if (getFrame() >= zMaxFrame) {
|
||||
transformInfo->mRotation.z = mRotationValues[(zPart->mRotationOffset + (zMaxFrame - 1))];
|
||||
} else if (mFrame >= maxFrame) {
|
||||
transformInfo->mRotation.z = mRotationValues[(zPart->mRotationOffset + (maxFrame - 1))];
|
||||
} else {
|
||||
transformInfo->mRotation.z = mRotationValues[(zPart->mRotationOffset + (int)getFrame())];
|
||||
transformInfo->mRotation.z = mRotationValues[(zPart->mRotationOffset + (int)mFrame)];
|
||||
}
|
||||
xMaxFrame = xPart->mTranslateMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
maxFrame = xPart->mTranslateMaxFrame;
|
||||
if (mFrame < 0) {
|
||||
transformInfo->mTranslate.x = mTranslateValues[xPart->mTranslateOffset];
|
||||
} else if (getFrame() >= xMaxFrame) {
|
||||
transformInfo->mTranslate.x = mTranslateValues[(xPart->mTranslateOffset + (xMaxFrame - 1))];
|
||||
} else if (mFrame >= maxFrame) {
|
||||
transformInfo->mTranslate.x = mTranslateValues[(xPart->mTranslateOffset + (maxFrame - 1))];
|
||||
} else {
|
||||
transformInfo->mTranslate.x = mTranslateValues[(xPart->mTranslateOffset + (int)getFrame())];
|
||||
transformInfo->mTranslate.x = mTranslateValues[(xPart->mTranslateOffset + (int)mFrame)];
|
||||
}
|
||||
yMaxFrame = yPart->mTranslateMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
maxFrame = yPart->mTranslateMaxFrame;
|
||||
if (mFrame < 0) {
|
||||
transformInfo->mTranslate.y = mTranslateValues[yPart->mTranslateOffset];
|
||||
} else if (getFrame() >= yMaxFrame) {
|
||||
transformInfo->mTranslate.y = mTranslateValues[(yPart->mTranslateOffset + (yMaxFrame - 1))];
|
||||
} else if (mFrame >= maxFrame) {
|
||||
transformInfo->mTranslate.y = mTranslateValues[(yPart->mTranslateOffset + (maxFrame - 1))];
|
||||
} else {
|
||||
transformInfo->mTranslate.y = mTranslateValues[(yPart->mTranslateOffset + (int)getFrame())];
|
||||
transformInfo->mTranslate.y = mTranslateValues[(yPart->mTranslateOffset + (int)mFrame)];
|
||||
}
|
||||
zMaxFrame = zPart->mTranslateMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
maxFrame = zPart->mTranslateMaxFrame;
|
||||
if (mFrame < 0) {
|
||||
transformInfo->mTranslate.z = mTranslateValues[zPart->mTranslateOffset];
|
||||
} else if (getFrame() >= zMaxFrame) {
|
||||
transformInfo->mTranslate.z = mTranslateValues[(zPart->mTranslateOffset + (zMaxFrame - 1))];
|
||||
} else if (mFrame >= maxFrame) {
|
||||
transformInfo->mTranslate.z = mTranslateValues[(zPart->mTranslateOffset + (maxFrame - 1))];
|
||||
} else {
|
||||
transformInfo->mTranslate.z = mTranslateValues[(zPart->mTranslateOffset + (int)getFrame())];
|
||||
transformInfo->mTranslate.z = mTranslateValues[(zPart->mTranslateOffset + (int)mFrame)];
|
||||
}
|
||||
}
|
||||
|
||||
void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
|
||||
J3DTransformInfo* transformInfo) const {
|
||||
J3D_PANIC(268, param_1 < field_0x22, "Error : range over.");
|
||||
J3D_PANIC(269, transformInfo, "Error : null pointer.");
|
||||
u16 idx = param_1 * 3;
|
||||
J3DAnmTransformKeyTable* xInf = &mInfoTable[idx];
|
||||
J3DAnmTransformKeyTable* yInf = &mInfoTable[idx + 1];
|
||||
@@ -103,7 +151,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
|
||||
transformInfo->mScale.x = mScaleValues[xInf->mScaleInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
transformInfo->mScale.x = J2DGetKeyFrameInterpolationf(
|
||||
transformInfo->mScale.x = J2DGetKeyFrameInterpolation<f32>(
|
||||
param_0, &xInf->mScaleInfo, &mScaleValues[xInf->mScaleInfo.mOffset]);
|
||||
}
|
||||
switch (yInf->mScaleInfo.mMaxFrame) {
|
||||
@@ -114,7 +162,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
|
||||
transformInfo->mScale.y = mScaleValues[yInf->mScaleInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
transformInfo->mScale.y = J2DGetKeyFrameInterpolationf(
|
||||
transformInfo->mScale.y = J2DGetKeyFrameInterpolation<f32>(
|
||||
param_0, &yInf->mScaleInfo, &mScaleValues[yInf->mScaleInfo.mOffset]);
|
||||
}
|
||||
switch (zInf->mScaleInfo.mMaxFrame) {
|
||||
@@ -125,7 +173,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
|
||||
transformInfo->mScale.z = mScaleValues[zInf->mScaleInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
transformInfo->mScale.z = J2DGetKeyFrameInterpolationf(
|
||||
transformInfo->mScale.z = J2DGetKeyFrameInterpolation<f32>(
|
||||
param_0, &zInf->mScaleInfo, &mScaleValues[zInf->mScaleInfo.mOffset]);
|
||||
}
|
||||
switch (xInf->mRotationInfo.mMaxFrame) {
|
||||
@@ -137,7 +185,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
|
||||
break;
|
||||
default:
|
||||
transformInfo->mRotation.x =
|
||||
static_cast<s32>(J2DGetKeyFrameInterpolations(
|
||||
static_cast<s32>(J2DGetKeyFrameInterpolation<s16>(
|
||||
param_0, &xInf->mRotationInfo, &mRotationValues[xInf->mRotationInfo.mOffset]))
|
||||
<< field_0x24;
|
||||
}
|
||||
@@ -150,7 +198,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
|
||||
break;
|
||||
default:
|
||||
transformInfo->mRotation.y =
|
||||
static_cast<s32>(J2DGetKeyFrameInterpolations(
|
||||
static_cast<s32>(J2DGetKeyFrameInterpolation<s16>(
|
||||
param_0, &yInf->mRotationInfo, &mRotationValues[yInf->mRotationInfo.mOffset]))
|
||||
<< field_0x24;
|
||||
}
|
||||
@@ -163,7 +211,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
|
||||
break;
|
||||
default:
|
||||
transformInfo->mRotation.z =
|
||||
static_cast<s32>(J2DGetKeyFrameInterpolations(
|
||||
static_cast<s32>(J2DGetKeyFrameInterpolation<s16>(
|
||||
param_0, &zInf->mRotationInfo, &mRotationValues[zInf->mRotationInfo.mOffset]))
|
||||
<< field_0x24;
|
||||
}
|
||||
@@ -175,7 +223,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
|
||||
transformInfo->mTranslate.x = mTranslateValues[xInf->mTranslateInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
transformInfo->mTranslate.x = J2DGetKeyFrameInterpolationf(
|
||||
transformInfo->mTranslate.x = J2DGetKeyFrameInterpolation<f32>(
|
||||
param_0, &xInf->mTranslateInfo, &mTranslateValues[xInf->mTranslateInfo.mOffset]);
|
||||
}
|
||||
switch (yInf->mTranslateInfo.mMaxFrame) {
|
||||
@@ -186,7 +234,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
|
||||
transformInfo->mTranslate.y = mTranslateValues[yInf->mTranslateInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
transformInfo->mTranslate.y = J2DGetKeyFrameInterpolationf(
|
||||
transformInfo->mTranslate.y = J2DGetKeyFrameInterpolation<f32>(
|
||||
param_0, &yInf->mTranslateInfo, &mTranslateValues[yInf->mTranslateInfo.mOffset]);
|
||||
}
|
||||
switch (zInf->mTranslateInfo.mMaxFrame) {
|
||||
@@ -197,7 +245,7 @@ void J2DAnmTransformKey::calcTransform(f32 param_0, u16 param_1,
|
||||
transformInfo->mTranslate.z = mTranslateValues[zInf->mTranslateInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
transformInfo->mTranslate.z = J2DGetKeyFrameInterpolationf(
|
||||
transformInfo->mTranslate.z = J2DGetKeyFrameInterpolation<f32>(
|
||||
param_0, &zInf->mTranslateInfo, &mTranslateValues[zInf->mTranslateInfo.mOffset]);
|
||||
}
|
||||
}
|
||||
@@ -216,42 +264,46 @@ void J2DAnmColor::searchUpdateMaterialID(J2DScreen* pScreen) {
|
||||
}
|
||||
|
||||
void J2DAnmColorFull::getColor(u16 param_0, _GXColor* pColor) const {
|
||||
J3D_PANIC(432, param_0 < mUpdateMaterialNum, "Error : range over.");
|
||||
J3D_PANIC(433, pColor, "Error : null pointer.");
|
||||
J3DAnmColorFullTable* info = &mInfoTable[param_0];
|
||||
u16 maxFrame = info->mRMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
if (mFrame < 0) {
|
||||
pColor->r = mRValues[info->mROffset];
|
||||
} else if (getFrame() >= maxFrame) {
|
||||
} else if (mFrame >= maxFrame) {
|
||||
pColor->r = mRValues[info->mROffset + (maxFrame - 1)];
|
||||
} else {
|
||||
pColor->r = mRValues[info->mROffset + (int)getFrame()];
|
||||
pColor->r = mRValues[info->mROffset + (int)mFrame];
|
||||
}
|
||||
maxFrame = info->mGMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
if (mFrame < 0) {
|
||||
pColor->g = mGValues[info->mGOffset];
|
||||
} else if (getFrame() >= maxFrame) {
|
||||
} else if (mFrame >= maxFrame) {
|
||||
pColor->g = mGValues[info->mGOffset + (maxFrame - 1)];
|
||||
} else {
|
||||
pColor->g = mGValues[info->mGOffset + (int)getFrame()];
|
||||
pColor->g = mGValues[info->mGOffset + (int)mFrame];
|
||||
}
|
||||
maxFrame = info->mBMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
if (mFrame < 0) {
|
||||
pColor->b = mBValues[info->mBOffset];
|
||||
} else if (getFrame() >= maxFrame) {
|
||||
} else if (mFrame >= maxFrame) {
|
||||
pColor->b = mBValues[info->mBOffset + (maxFrame - 1)];
|
||||
} else {
|
||||
pColor->b = mBValues[info->mBOffset + (int)getFrame()];
|
||||
pColor->b = mBValues[info->mBOffset + (int)mFrame];
|
||||
}
|
||||
maxFrame = info->mAMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
if (mFrame < 0) {
|
||||
pColor->a = mAValues[info->mAOffset];
|
||||
} else if (getFrame() >= maxFrame) {
|
||||
} else if (mFrame >= maxFrame) {
|
||||
pColor->a = mAValues[info->mAOffset + (maxFrame - 1)];
|
||||
} else {
|
||||
pColor->a = mAValues[info->mAOffset + (int)getFrame()];
|
||||
pColor->a = mAValues[info->mAOffset + (int)mFrame];
|
||||
}
|
||||
}
|
||||
|
||||
void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const {
|
||||
J3D_PANIC(490, param_0 < mUpdateMaterialNum, "Error : range over.");
|
||||
J3D_PANIC(491, pColor, "Error : null pointer.");
|
||||
J3DAnmColorKeyTable* info = &mInfoTable[param_0];
|
||||
f32 val;
|
||||
switch (info->mRInfo.mMaxFrame) {
|
||||
@@ -262,7 +314,7 @@ void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const {
|
||||
pColor->r = mRValues[info->mRInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRInfo,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mRInfo,
|
||||
&mRValues[info->mRInfo.mOffset]);
|
||||
if (val < 0) {
|
||||
pColor->r = 0;
|
||||
@@ -280,7 +332,7 @@ void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const {
|
||||
pColor->g = mGValues[info->mGInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGInfo,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mGInfo,
|
||||
&mGValues[info->mGInfo.mOffset]);
|
||||
if (val < 0) {
|
||||
pColor->g = 0;
|
||||
@@ -298,7 +350,7 @@ void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const {
|
||||
pColor->b = mBValues[info->mBInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBInfo,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mBInfo,
|
||||
&mBValues[info->mBInfo.mOffset]);
|
||||
if (val < 0) {
|
||||
pColor->b = 0;
|
||||
@@ -316,7 +368,7 @@ void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const {
|
||||
pColor->a = mAValues[info->mAInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mAInfo,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mAInfo,
|
||||
&mAValues[info->mAInfo.mOffset]);
|
||||
if (val < 0) {
|
||||
pColor->a = 0;
|
||||
@@ -329,42 +381,44 @@ void J2DAnmColorKey::getColor(u16 param_0, _GXColor* pColor) const {
|
||||
}
|
||||
|
||||
void J2DAnmVtxColorFull::getColor(u8 param_0, u16 param_1, _GXColor* pColor) const {
|
||||
J3D_PANIC(597, pColor, "Error : null pointer.");
|
||||
J3DAnmColorFullTable* info = &mInfoTable[param_0][param_1];
|
||||
u16 maxFrame = info->mRMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
if (mFrame < 0) {
|
||||
pColor->r = mRValues[info->mROffset];
|
||||
} else if (getFrame() >= maxFrame) {
|
||||
} else if (mFrame >= maxFrame) {
|
||||
pColor->r = mRValues[info->mROffset + (maxFrame - 1)];
|
||||
} else {
|
||||
pColor->r = mRValues[info->mROffset + (int)getFrame()];
|
||||
pColor->r = mRValues[info->mROffset + (int)mFrame];
|
||||
}
|
||||
maxFrame = info->mGMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
if (mFrame < 0) {
|
||||
pColor->g = mGValues[info->mGOffset];
|
||||
} else if (getFrame() >= maxFrame) {
|
||||
} else if (mFrame >= maxFrame) {
|
||||
pColor->g = mGValues[info->mGOffset + (maxFrame - 1)];
|
||||
} else {
|
||||
pColor->g = mGValues[info->mGOffset + (int)getFrame()];
|
||||
pColor->g = mGValues[info->mGOffset + (int)mFrame];
|
||||
}
|
||||
maxFrame = info->mBMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
if (mFrame < 0) {
|
||||
pColor->b = mBValues[info->mBOffset];
|
||||
} else if (getFrame() >= maxFrame) {
|
||||
} else if (mFrame >= maxFrame) {
|
||||
pColor->b = mBValues[info->mBOffset + (maxFrame - 1)];
|
||||
} else {
|
||||
pColor->b = mBValues[info->mBOffset + (int)getFrame()];
|
||||
pColor->b = mBValues[info->mBOffset + (int)mFrame];
|
||||
}
|
||||
maxFrame = info->mAMaxFrame;
|
||||
if (getFrame() < 0) {
|
||||
if (mFrame < 0) {
|
||||
pColor->a = mAValues[info->mAOffset];
|
||||
} else if (getFrame() >= maxFrame) {
|
||||
} else if (mFrame >= maxFrame) {
|
||||
pColor->a = mAValues[info->mAOffset + (maxFrame - 1)];
|
||||
} else {
|
||||
pColor->a = mAValues[info->mAOffset + (int)getFrame()];
|
||||
pColor->a = mAValues[info->mAOffset + (int)mFrame];
|
||||
}
|
||||
}
|
||||
|
||||
void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) const {
|
||||
J3D_PANIC(658, pColor, "Error : null pointer.");
|
||||
J3DAnmColorKeyTable* info = &mInfoTable[param_0][param_1];
|
||||
f32 val;
|
||||
switch (info->mRInfo.mMaxFrame) {
|
||||
@@ -375,7 +429,7 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons
|
||||
pColor->r = mRValues[info->mRInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRInfo,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mRInfo,
|
||||
&mRValues[info->mRInfo.mOffset]);
|
||||
if ((val <= 0)) {
|
||||
pColor->r = 0;
|
||||
@@ -393,7 +447,7 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons
|
||||
pColor->g = mGValues[info->mGInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGInfo,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mGInfo,
|
||||
&mGValues[info->mGInfo.mOffset]);
|
||||
if (val <= 0) {
|
||||
pColor->g = 0;
|
||||
@@ -411,7 +465,7 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons
|
||||
pColor->b = mBValues[info->mBInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBInfo,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mBInfo,
|
||||
&mBValues[info->mBInfo.mOffset]);
|
||||
if (val <= 0) {
|
||||
pColor->b = 0;
|
||||
@@ -429,7 +483,7 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons
|
||||
pColor->a = mAValues[info->mAInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mAInfo,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mAInfo,
|
||||
&mAValues[info->mAInfo.mOffset]);
|
||||
if (val <= 0) {
|
||||
pColor->a = 0;
|
||||
@@ -442,6 +496,8 @@ void J2DAnmVtxColorKey::getColor(u8 param_0, u16 param_1, _GXColor* pColor) cons
|
||||
}
|
||||
|
||||
void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTInfo* pInfo) const {
|
||||
J3D_PANIC(766, param_1 < mUpdateMaterialNum, "Error : range over.");
|
||||
J3D_PANIC(767, pInfo, "Error : null pointer.");
|
||||
u16 idx = param_1 * 3;
|
||||
J3DAnmTransformKeyTable* xInf = &mInfoTable[idx];
|
||||
J3DAnmTransformKeyTable* yInf = &mInfoTable[idx + 1];
|
||||
@@ -454,7 +510,7 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI
|
||||
pInfo->mScaleX = mScaleValues[xInf->mScaleInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
pInfo->mScaleX = J2DGetKeyFrameInterpolationf(param_0, &xInf->mScaleInfo,
|
||||
pInfo->mScaleX = J2DGetKeyFrameInterpolation<f32>(param_0, &xInf->mScaleInfo,
|
||||
&mScaleValues[xInf->mScaleInfo.mOffset]);
|
||||
}
|
||||
switch (yInf->mScaleInfo.mMaxFrame) {
|
||||
@@ -465,7 +521,7 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI
|
||||
pInfo->mScaleY = mScaleValues[yInf->mScaleInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
pInfo->mScaleY = J2DGetKeyFrameInterpolationf(param_0, &yInf->mScaleInfo,
|
||||
pInfo->mScaleY = J2DGetKeyFrameInterpolation<f32>(param_0, &yInf->mScaleInfo,
|
||||
&mScaleValues[yInf->mScaleInfo.mOffset]);
|
||||
}
|
||||
switch (zInf->mRotationInfo.mMaxFrame) {
|
||||
@@ -477,7 +533,7 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI
|
||||
break;
|
||||
default:
|
||||
pInfo->mRotation =
|
||||
static_cast<s32>(J2DGetKeyFrameInterpolations(
|
||||
static_cast<s32>(J2DGetKeyFrameInterpolation<s16>(
|
||||
param_0, &zInf->mRotationInfo, &mRotationValues[zInf->mRotationInfo.mOffset]))
|
||||
<< field_0x10;
|
||||
}
|
||||
@@ -489,7 +545,7 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI
|
||||
pInfo->mTranslationX = mTranslationValues[xInf->mTranslateInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
pInfo->mTranslationX = J2DGetKeyFrameInterpolationf(
|
||||
pInfo->mTranslationX = J2DGetKeyFrameInterpolation<f32>(
|
||||
param_0, &xInf->mTranslateInfo, &mTranslationValues[xInf->mTranslateInfo.mOffset]);
|
||||
}
|
||||
switch (yInf->mTranslateInfo.mMaxFrame) {
|
||||
@@ -500,7 +556,7 @@ void J2DAnmTextureSRTKey::calcTransform(f32 param_0, u16 param_1, J3DTextureSRTI
|
||||
pInfo->mTranslationY = mTranslationValues[yInf->mTranslateInfo.mOffset];
|
||||
break;
|
||||
default:
|
||||
pInfo->mTranslationY = J2DGetKeyFrameInterpolationf(
|
||||
pInfo->mTranslationY = J2DGetKeyFrameInterpolation<f32>(
|
||||
param_0, &yInf->mTranslateInfo, &mTranslationValues[yInf->mTranslateInfo.mOffset]);
|
||||
}
|
||||
}
|
||||
@@ -533,7 +589,7 @@ void J2DAnmTexPattern::searchUpdateMaterialID(J2DScreen* pScreen) {
|
||||
if (mTIMGPtrArray != NULL) {
|
||||
JUTResReference resRef;
|
||||
for (u16 i = 0; i < pScreen->mTexRes->mCount; i++) {
|
||||
s8* var1 = pScreen->mTexRes->getResReference(i);
|
||||
char* var1 = pScreen->mTexRes->getResReference(i);
|
||||
ResTIMG* var2 = NULL;
|
||||
if (var1 != NULL) {
|
||||
var2 = (ResTIMG*)resRef.getResource(var1, 'TIMG', NULL);
|
||||
@@ -544,11 +600,13 @@ void J2DAnmTexPattern::searchUpdateMaterialID(J2DScreen* pScreen) {
|
||||
}
|
||||
mTIMGPtrArray[i].mRes = var2;
|
||||
if (var2 != NULL && var2->indexTexture) {
|
||||
JUTPalette* palette =
|
||||
new JUTPalette(GX_TLUT0, (_GXTlutFmt)var2->colorFormat,
|
||||
(JUTTransparency)var2->alphaEnabled, var2->numColors,
|
||||
((u8*)var2) + var2->paletteOffset);
|
||||
mTIMGPtrArray[i].mPalette = palette;
|
||||
mTIMGPtrArray[i].mPalette = new JUTPalette(
|
||||
GX_TLUT0,
|
||||
GXTlutFmt(var2->colorFormat),
|
||||
JUTTransparency(var2->alphaEnabled),
|
||||
var2->numColors,
|
||||
((u8*)var2) + var2->paletteOffset
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -557,49 +615,56 @@ void J2DAnmTexPattern::searchUpdateMaterialID(J2DScreen* pScreen) {
|
||||
|
||||
void J2DAnmTexPattern::getTexNo(u16 param_0, u16* pTexNo) const {
|
||||
u16 maxFrame = mAnmTable[param_0].mMaxFrame;
|
||||
f32 frame = getFrame();
|
||||
if (frame < 0) {
|
||||
J3D_PANIC(1024, param_0 < mUpdateMaterialNum, "Error : range over.");
|
||||
J3D_PANIC(1025, pTexNo, "Error : null pointer.");
|
||||
if (mFrame < 0) {
|
||||
*pTexNo = mValues[mAnmTable[param_0].mOffset];
|
||||
} else if (frame >= maxFrame) {
|
||||
} else if (mFrame >= maxFrame) {
|
||||
*pTexNo = mValues[mAnmTable[param_0].mOffset + (maxFrame - 1)];
|
||||
} else {
|
||||
*pTexNo = mValues[mAnmTable[param_0].mOffset + (int)frame];
|
||||
*pTexNo = mValues[mAnmTable[param_0].mOffset + (int)mFrame];
|
||||
}
|
||||
}
|
||||
|
||||
ResTIMG* J2DAnmTexPattern::getResTIMG(u16 param_0) const {
|
||||
if (mTIMGPtrArray == NULL) {
|
||||
return NULL;
|
||||
} else {
|
||||
u16 texNo;
|
||||
this->getTexNo(param_0, &texNo);
|
||||
return mTIMGPtrArray[texNo].mRes;
|
||||
}
|
||||
u16 maxFrame = mAnmTable[param_0].mMaxFrame;
|
||||
J3D_PANIC(1053, param_0 < mUpdateMaterialNum, "Error : range over.");
|
||||
|
||||
u16 texNo;
|
||||
this->getTexNo(param_0, &texNo);
|
||||
return mTIMGPtrArray[texNo].mRes;
|
||||
}
|
||||
|
||||
JUTPalette* J2DAnmTexPattern::getPalette(u16 param_0) const {
|
||||
if (mTIMGPtrArray == NULL) {
|
||||
return NULL;
|
||||
} else {
|
||||
u16 texNo;
|
||||
this->getTexNo(param_0, &texNo);
|
||||
return mTIMGPtrArray[texNo].mPalette;
|
||||
}
|
||||
u16 maxFrame = mAnmTable[param_0].mMaxFrame;
|
||||
J3D_PANIC(1076, param_0 < mUpdateMaterialNum, "Error : range over.");
|
||||
u16 texNo;
|
||||
this->getTexNo(param_0, &texNo);
|
||||
return mTIMGPtrArray[texNo].mPalette;
|
||||
}
|
||||
|
||||
void J2DAnmVisibilityFull::getVisibility(u16 param_0, u8* pOut) const {
|
||||
u16 maxFrame = mTable[param_0]._0;
|
||||
if (getFrame() < 0) {
|
||||
J3D_PANIC(1094, param_0 < field_0x10, "Error : range over.");
|
||||
J3D_PANIC(1095, pOut, "Error : null pointer.");
|
||||
if (mFrame < 0) {
|
||||
*pOut = mValues[mTable[param_0]._2];
|
||||
} else if (getFrame() >= maxFrame) {
|
||||
} else if (mFrame >= maxFrame) {
|
||||
*pOut = mValues[mTable[param_0]._2 + (maxFrame - 1)];
|
||||
} else {
|
||||
int frame = getFrame();
|
||||
*pOut = mValues[mTable[param_0]._2 + frame];
|
||||
*pOut = mValues[mTable[param_0]._2 + (int)mFrame];
|
||||
}
|
||||
}
|
||||
|
||||
void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const {
|
||||
void J2DAnmTevRegKey::getTevColorReg(u16 param_0, GXColorS10* pColor) const {
|
||||
J3D_PANIC(1116, param_0 < mCRegUpdateMaterialNum, "Error : range over.");
|
||||
J3D_PANIC(1117, pColor, "Error : null pointer.");
|
||||
J3DAnmCRegKeyTable* info = &mAnmCRegKeyTable[param_0];
|
||||
f32 val;
|
||||
switch (info->mRTable.mMaxFrame) {
|
||||
@@ -610,7 +675,7 @@ void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const {
|
||||
pColor->r = mCRValues[info->mRTable.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRTable,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mRTable,
|
||||
&mCRValues[info->mRTable.mOffset]);
|
||||
if (val < -0x400) {
|
||||
pColor->r = -0x400;
|
||||
@@ -628,7 +693,7 @@ void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const {
|
||||
pColor->g = mCGValues[info->mGTable.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGTable,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mGTable,
|
||||
&mCGValues[info->mGTable.mOffset]);
|
||||
if (val < -0x400) {
|
||||
pColor->g = -0x400;
|
||||
@@ -646,7 +711,7 @@ void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const {
|
||||
pColor->b = mCBValues[info->mBTable.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBTable,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mBTable,
|
||||
&mCBValues[info->mBTable.mOffset]);
|
||||
if (val < -0x400) {
|
||||
pColor->b = -0x400;
|
||||
@@ -664,7 +729,7 @@ void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const {
|
||||
pColor->a = mCAValues[info->mATable.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mATable,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mATable,
|
||||
&mCAValues[info->mATable.mOffset]);
|
||||
if (val < -0x400) {
|
||||
pColor->a = -0x400;
|
||||
@@ -676,7 +741,9 @@ void J2DAnmTevRegKey::getTevColorReg(u16 param_0, _GXColorS10* pColor) const {
|
||||
}
|
||||
}
|
||||
|
||||
void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const {
|
||||
void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, GXColor* pColor) const {
|
||||
J3D_PANIC(1222, param_0 < mKRegUpdateMaterialNum, "Error : range over.");
|
||||
J3D_PANIC(1223, pColor, "Error : null pointer.");
|
||||
J3DAnmKRegKeyTable* info = &mAnmKRegKeyTable[param_0];
|
||||
f32 val;
|
||||
switch (info->mRTable.mMaxFrame) {
|
||||
@@ -687,7 +754,7 @@ void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const {
|
||||
pColor->r = mKRValues[info->mRTable.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mRTable,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mRTable,
|
||||
&mKRValues[info->mRTable.mOffset]);
|
||||
if (val < 0) {
|
||||
pColor->r = 0;
|
||||
@@ -705,7 +772,7 @@ void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const {
|
||||
pColor->g = mKGValues[info->mGTable.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mGTable,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mGTable,
|
||||
&mKGValues[info->mGTable.mOffset]);
|
||||
if (val < 0) {
|
||||
pColor->g = 0;
|
||||
@@ -723,7 +790,7 @@ void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const {
|
||||
pColor->b = mKBValues[info->mBTable.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mBTable,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mBTable,
|
||||
&mKBValues[info->mBTable.mOffset]);
|
||||
if (val < 0) {
|
||||
pColor->b = 0;
|
||||
@@ -741,7 +808,7 @@ void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const {
|
||||
pColor->a = mKAValues[info->mATable.mOffset];
|
||||
break;
|
||||
default:
|
||||
val = J2DGetKeyFrameInterpolations(getFrame(), &info->mATable,
|
||||
val = J2DGetKeyFrameInterpolation<s16>(mFrame, &info->mATable,
|
||||
&mKAValues[info->mATable.mOffset]);
|
||||
if (val < 0) {
|
||||
pColor->a = 0;
|
||||
@@ -755,7 +822,7 @@ void J2DAnmTevRegKey::getTevKonstReg(u16 param_0, _GXColor* pColor) const {
|
||||
|
||||
void J2DAnmTevRegKey::searchUpdateMaterialID(J2DScreen* pScreen) {
|
||||
if (pScreen != NULL && pScreen->mNameTable != NULL) {
|
||||
for (u16 i = 0; i < mCRegUpdateMaterialNum; i++) {
|
||||
for (u16 i = 0; i < getCRegUpdateMaterialNum(); i++) {
|
||||
s32 idx = pScreen->mNameTable->getIndex(mCRegNameTab.getName(i));
|
||||
if (idx != -1) {
|
||||
mCRegUpdateMaterialID[i] = idx;
|
||||
@@ -763,7 +830,7 @@ void J2DAnmTevRegKey::searchUpdateMaterialID(J2DScreen* pScreen) {
|
||||
mCRegUpdateMaterialID[i] = 0xFFFF;
|
||||
}
|
||||
}
|
||||
for (u16 i = 0; i < mKRegUpdateMaterialNum; i++) {
|
||||
for (u16 i = 0; i < getKRegUpdateMaterialNum(); i++) {
|
||||
s32 idx = pScreen->mNameTable->getIndex(mKRegNameTab.getName(i));
|
||||
if (idx != -1) {
|
||||
mKRegUpdateMaterialID[i] = idx;
|
||||
@@ -773,106 +840,3 @@ void J2DAnmTevRegKey::searchUpdateMaterialID(J2DScreen* pScreen) {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// should be J2DGetKeyFrameInterpolation<s16>
|
||||
f32 J2DGetKeyFrameInterpolations(f32 param_0, J3DAnmKeyTableBase* param_1, s16* param_2) {
|
||||
if (param_0 < param_2[0]) {
|
||||
return param_2[1];
|
||||
} else {
|
||||
if (param_1->mType == 0) {
|
||||
if (param_2[(param_1->mMaxFrame - 1) * 3] <= param_0) {
|
||||
return param_2[(param_1->mMaxFrame - 1) * 3 + 1];
|
||||
} else {
|
||||
u32 tmp = param_1->mMaxFrame;
|
||||
while (tmp > 1) {
|
||||
u32 halfTmp = tmp / 2;
|
||||
u32 upIdx = halfTmp * 3;
|
||||
if (param_0 >= param_2[upIdx]) {
|
||||
param_2 = param_2 + upIdx;
|
||||
tmp -= halfTmp;
|
||||
} else {
|
||||
tmp = halfTmp;
|
||||
}
|
||||
}
|
||||
return J2DHermiteInterpolation<s16>(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[2],
|
||||
¶m_2[3], ¶m_2[4], ¶m_2[5]);
|
||||
}
|
||||
} else {
|
||||
if (param_2[(param_1->mMaxFrame - 1) * 4] <= param_0) {
|
||||
return param_2[(param_1->mMaxFrame - 1) * 4 + 1];
|
||||
} else {
|
||||
u32 tmp = param_1->mMaxFrame;
|
||||
while (tmp > 1) {
|
||||
u32 halfTmp = tmp / 2;
|
||||
u32 upIdx = halfTmp * 4;
|
||||
if (param_0 >= param_2[upIdx]) {
|
||||
param_2 = param_2 + upIdx;
|
||||
tmp -= halfTmp;
|
||||
} else {
|
||||
tmp = halfTmp;
|
||||
}
|
||||
}
|
||||
return J2DHermiteInterpolation<s16>(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[3],
|
||||
¶m_2[4], ¶m_2[5], ¶m_2[6]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// should be J2DGetKeyFrameInterpolation<s16>
|
||||
f32 J2DGetKeyFrameInterpolationf(f32 param_0, J3DAnmKeyTableBase* param_1, f32* param_2) {
|
||||
if (param_0 < param_2[0]) {
|
||||
return param_2[1];
|
||||
} else {
|
||||
if (param_1->mType == 0) {
|
||||
if (param_2[(param_1->mMaxFrame - 1) * 3] <= param_0) {
|
||||
return param_2[(param_1->mMaxFrame - 1) * 3 + 1];
|
||||
} else {
|
||||
u32 tmp = param_1->mMaxFrame;
|
||||
while (tmp > 1) {
|
||||
u32 halfTmp = tmp / 2;
|
||||
u32 upIdx = halfTmp * 3;
|
||||
if (param_0 >= param_2[upIdx]) {
|
||||
param_2 = param_2 + upIdx;
|
||||
tmp -= halfTmp;
|
||||
} else {
|
||||
tmp = halfTmp;
|
||||
}
|
||||
}
|
||||
return J2DHermiteInterpolation<f32>(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[2],
|
||||
¶m_2[3], ¶m_2[4], ¶m_2[5]);
|
||||
}
|
||||
} else {
|
||||
if (param_2[(param_1->mMaxFrame - 1) * 4] <= param_0) {
|
||||
return param_2[(param_1->mMaxFrame - 1) * 4 + 1];
|
||||
} else {
|
||||
u32 tmp = param_1->mMaxFrame;
|
||||
while (tmp > 1) {
|
||||
u32 halfTmp = tmp / 2;
|
||||
u32 upIdx = halfTmp * 4;
|
||||
if (param_0 >= param_2[upIdx]) {
|
||||
param_2 = param_2 + upIdx;
|
||||
tmp -= halfTmp;
|
||||
} else {
|
||||
tmp = halfTmp;
|
||||
}
|
||||
}
|
||||
return J2DHermiteInterpolation<f32>(param_0, ¶m_2[0], ¶m_2[1], ¶m_2[3],
|
||||
¶m_2[4], ¶m_2[5], ¶m_2[6]);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
J2DAnmTexPattern::J2DAnmTexPatternTIMGPointer::J2DAnmTexPatternTIMGPointer() {
|
||||
mRes = NULL;
|
||||
mPalette = NULL;
|
||||
}
|
||||
|
||||
J2DAnmTexPattern::J2DAnmTexPatternTIMGPointer::~J2DAnmTexPatternTIMGPointer() {
|
||||
delete mPalette;
|
||||
}
|
||||
|
||||
static void dummyDelete(J2DAnmTexPattern* pattern) {
|
||||
delete pattern;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user