mirror of https://github.com/yaz0r/FITD.git
Fix Jack animations
This commit is contained in:
parent
341a39580a
commit
612b702790
|
@ -859,9 +859,9 @@ s16 SetInterAnimObjet(int frame, sAnimation* pAnim, sBody* pBody)
|
||||||
point3dStruct& previousState = pPreviousKeyframe->m_groups[i].m_rotateDelta;
|
point3dStruct& previousState = pPreviousKeyframe->m_groups[i].m_rotateDelta;
|
||||||
point3dStruct& nextState = pKeyframe->m_groups[i].m_rotateDelta;
|
point3dStruct& nextState = pKeyframe->m_groups[i].m_rotateDelta;
|
||||||
|
|
||||||
PatchInterStep(&state.x, previousState.x, nextState.x, bp, bx);
|
PatchInterAngle(&state.x, previousState.x, nextState.x, bp, bx);
|
||||||
PatchInterStep(&state.y, previousState.y, nextState.y, bp, bx);
|
PatchInterAngle(&state.y, previousState.y, nextState.y, bp, bx);
|
||||||
PatchInterStep(&state.z, previousState.z, nextState.z, bp, bx);
|
PatchInterAngle(&state.z, previousState.z, nextState.z, bp, bx);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -99,7 +99,7 @@ char* HQ_PtrMalloc(hqrEntryStruct<char>* hqrPtr, int index)
|
||||||
return(ptr->ptr);
|
return(ptr->ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
sAnimation* createAnimationFromPtr(void* ptr)
|
sAnimation* createAnimationFromPtr(void* ptr, int size)
|
||||||
{
|
{
|
||||||
u8* animPtr = (u8*)ptr;
|
u8* animPtr = (u8*)ptr;
|
||||||
|
|
||||||
|
@ -109,6 +109,18 @@ sAnimation* createAnimationFromPtr(void* ptr)
|
||||||
pAnimation->m_numFrames = READ_LE_U16(animPtr); animPtr += 2;
|
pAnimation->m_numFrames = READ_LE_U16(animPtr); animPtr += 2;
|
||||||
pAnimation->m_numGroups = READ_LE_U16(animPtr); animPtr += 2;
|
pAnimation->m_numGroups = READ_LE_U16(animPtr); animPtr += 2;
|
||||||
|
|
||||||
|
int fullSizeNoOptim = 2 + 2 + pAnimation->m_numFrames * (2 + 2 + 2 + 2 + pAnimation->m_numGroups * (2 + 2 + 2 + 2));
|
||||||
|
int fullSizeWithOptim = 2 + 2 + pAnimation->m_numFrames * (2 + 2 + 2 + 2 + pAnimation->m_numGroups * (2 + 2 + 2 + 2 + 2 + 2 + 2 + 2));
|
||||||
|
|
||||||
|
bool bUseOptim = false;
|
||||||
|
|
||||||
|
if (size == fullSizeWithOptim) {
|
||||||
|
bUseOptim = true;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
assert(size == fullSizeNoOptim);
|
||||||
|
}
|
||||||
|
|
||||||
pAnimation->m_frames.resize(pAnimation->m_numFrames);
|
pAnimation->m_frames.resize(pAnimation->m_numFrames);
|
||||||
for (int i = 0; i < pAnimation->m_numFrames; i++)
|
for (int i = 0; i < pAnimation->m_numFrames; i++)
|
||||||
{
|
{
|
||||||
|
@ -128,6 +140,12 @@ sAnimation* createAnimationFromPtr(void* ptr)
|
||||||
pGroup->m_delta.x = READ_LE_S16(animPtr); animPtr += 2;
|
pGroup->m_delta.x = READ_LE_S16(animPtr); animPtr += 2;
|
||||||
pGroup->m_delta.y = READ_LE_S16(animPtr); animPtr += 2;
|
pGroup->m_delta.y = READ_LE_S16(animPtr); animPtr += 2;
|
||||||
pGroup->m_delta.z = READ_LE_S16(animPtr); animPtr += 2;
|
pGroup->m_delta.z = READ_LE_S16(animPtr); animPtr += 2;
|
||||||
|
if (bUseOptim) {
|
||||||
|
pGroup->m_rotateDelta.x = READ_LE_S16(animPtr); animPtr += 2;
|
||||||
|
pGroup->m_rotateDelta.y = READ_LE_S16(animPtr); animPtr += 2;
|
||||||
|
pGroup->m_rotateDelta.z = READ_LE_S16(animPtr); animPtr += 2;
|
||||||
|
pGroup->m_padding = READ_LE_S16(animPtr); animPtr += 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return pAnimation;
|
return pAnimation;
|
||||||
|
@ -376,7 +394,7 @@ T* HQR_Get(hqrEntryStruct<T>* hqrPtr, int index)
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
}
|
}
|
||||||
else if constexpr (std::is_same_v<T, sAnimation>) {
|
else if constexpr (std::is_same_v<T, sAnimation>) {
|
||||||
foundEntry->ptr = createAnimationFromPtr(buffer);
|
foundEntry->ptr = createAnimationFromPtr(buffer, size);
|
||||||
delete[] buffer;
|
delete[] buffer;
|
||||||
}
|
}
|
||||||
else if constexpr (std::is_same_v<T, sHybrid>) {
|
else if constexpr (std::is_same_v<T, sHybrid>) {
|
||||||
|
|
Loading…
Reference in New Issue