1
0
Fork 0
mirror of https://github.com/zeldaret/oot.git synced 2025-07-04 15:04:31 +00:00

Add struct LegacyLimb and rename AnimationHeader2 for object_human (#849)

* Add LegacyLimb and rename AnimationHeader2

* Simplify SkelAnime_GetFrameDataLegacy

* Minor fixes

* Move LegacyLimb with the rest of the limbs
This commit is contained in:
Anghelo Carvajal 2021-06-14 14:12:34 -04:00 committed by GitHub
parent d399c3deb6
commit a4c606c522
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 31 additions and 56 deletions

View file

@ -723,8 +723,8 @@ Gfx* SkelAnime_DrawFlex(GlobalContext* globalCtx, void** skeleton, Vec3s* jointT
* Unpacks frame data for the animation at the given frame into frameTable
* Used by the legacy animation format
*/
s32 SkelAnime_GetFrameData2(AnimationHeader2* animation, s32 frame, Vec3s* frameTable) {
AnimationHeader2* animHeader = SEGMENTED_TO_VIRTUAL(animation);
s32 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable) {
LegacyAnimationHeader* animHeader = SEGMENTED_TO_VIRTUAL(animation);
s32 limbCount = animHeader->limbCount;
JointKey* key = SEGMENTED_TO_VIRTUAL(animHeader->jointKey);
s16* frameData = SEGMENTED_TO_VIRTUAL(animHeader->frameData);
@ -732,61 +732,27 @@ s32 SkelAnime_GetFrameData2(AnimationHeader2* animation, s32 frame, Vec3s* frame
s16* dynamicData = &frameData[frame];
s32 i;
/**
*Equivalent to the following, but the compiler optimizes the loop in a way I can't replicate
*/
// for(i = 0, frameTable++, key++; i < limbCount + 1; i++, key++, frameTable++) {
// frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
// frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
// frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
// }
frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
i = 1;
frameTable++;
key++;
if (limbCount & 1) {}
if (limbCount > 0) {
if (limbCount & 1) {
i++;
frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
key++;
frameTable++;
if (limbCount + 1 == i) {
goto ret;
}
}
do {
i += 2;
frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
key++;
frameTable++;
frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
key++;
frameTable++;
} while (i != limbCount + 1);
for (i = 1; i <= limbCount; i++, key++, frameTable++) {
frameTable->x = frame < key->xMax ? dynamicData[key->x] : staticData[key->x];
frameTable->y = frame < key->yMax ? dynamicData[key->y] : staticData[key->y];
frameTable->z = frame < key->zMax ? dynamicData[key->z] : staticData[key->z];
}
ret:
return limbCount;
}
/**
* Used by legacy animation format
*/
s16 Animation_GetLimbCount2(AnimationHeader2* animation) {
AnimationHeader2* animHeader = SEGMENTED_TO_VIRTUAL(animation);
s16 Animation_GetLimbCountLegacy(LegacyAnimationHeader* animation) {
LegacyAnimationHeader* animHeader = SEGMENTED_TO_VIRTUAL(animation);
return animHeader->limbCount;
}
@ -794,8 +760,8 @@ s16 Animation_GetLimbCount2(AnimationHeader2* animation) {
/**
* Used by legacy animation format
*/
s16 Animation_GetLength2(AnimationHeader2* animation) {
AnimationHeader2* animHeader = SEGMENTED_TO_VIRTUAL(animation);
s16 Animation_GetLengthLegacy(LegacyAnimationHeader* animation) {
LegacyAnimationHeader* animHeader = SEGMENTED_TO_VIRTUAL(animation);
return animHeader->frameCount;
}
@ -803,8 +769,8 @@ s16 Animation_GetLength2(AnimationHeader2* animation) {
/**
* Used by legacy animation format
*/
s16 Animation_GetLastFrame2(AnimationHeader2* animation) {
AnimationHeader2* animHeader = SEGMENTED_TO_VIRTUAL(animation);
s16 Animation_GetLastFrameLegacy(LegacyAnimationHeader* animation) {
LegacyAnimationHeader* animHeader = SEGMENTED_TO_VIRTUAL(animation);
return animHeader->frameCount - 1;
}