diff options
Diffstat (limited to 'src/JSystem/J2DGraph/J2DAnimation.cpp')
| -rw-r--r-- | src/JSystem/J2DGraph/J2DAnimation.cpp | 424 |
1 files changed, 194 insertions, 230 deletions
diff --git a/src/JSystem/J2DGraph/J2DAnimation.cpp b/src/JSystem/J2DGraph/J2DAnimation.cpp index bd10f3f369..5ca534a3a1 100644 --- a/src/JSystem/J2DGraph/J2DAnimation.cpp +++ b/src/JSystem/J2DGraph/J2DAnimation.cpp @@ -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; -} |
