summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAnghelo Carvajal <angheloalf95@gmail.com>2021-11-03 12:23:37 -0300
committerGitHub <noreply@github.com>2021-11-03 12:23:37 -0300
commit5e7c19ce295268bffc42e7b037c751e76d0d0f8d (patch)
tree690d5cec1f7aad96cf356cca6e0ff9250b25ae4e
parent60b9cd789e808ceb9314f6aff3e611a64e9dbfdd (diff)
Match `SkelAnime_GetFrameDataLegacy` (#392)
* Properly rename SkelAnime_GetFrameDataLegacy * Match
-rw-r--r--include/functions.h2
-rw-r--r--src/code/z_skelanime.c52
-rw-r--r--tools/disasm/functions.txt2
3 files changed, 8 insertions, 48 deletions
diff --git a/include/functions.h b/include/functions.h
index a575fd6e0..6e8b78e93 100644
--- a/include/functions.h
+++ b/include/functions.h
@@ -2570,7 +2570,7 @@ Gfx* SkelAnime_DrawFlexLimb(GlobalContext* globalCtx, s32 limbIndex, void** skel
Mtx** mtx, Gfx* gfx);
Gfx* SkelAnime_DrawFlex(GlobalContext* globalCtx, void** skeleton, Vec3s* jointTable, s32 dListCount,
OverrideLimbDraw overrideLimbDraw, PostLimbDraw postLimbDraw, Actor* actor, Gfx* gfx);
-s16 SkelAnime_GetFrameData2(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable);
+s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable);
s16 Animation_GetLimbCount2(LegacyAnimationHeader* animation);
s16 Animation_GetLength2(LegacyAnimationHeader* animation);
s16 Animation_GetLastFrame2(LegacyAnimationHeader* animation);
diff --git a/src/code/z_skelanime.c b/src/code/z_skelanime.c
index c8ab534de..e0df1d867 100644
--- a/src/code/z_skelanime.c
+++ b/src/code/z_skelanime.c
@@ -869,8 +869,6 @@ 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
*/
-#ifdef NON_MATCHING
-// equivalent, minor reordering
s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Vec3s* frameTable) {
LegacyAnimationHeader* animHeader = Lib_SegmentedToVirtual(animation);
s16 limbCount = animHeader->limbCount;
@@ -880,59 +878,21 @@ s16 SkelAnime_GetFrameDataLegacy(LegacyAnimationHeader* animation, s32 frame, Ve
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);
- }
-
-ret:
+ 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];
+ }
+
return limbCount;
}
-#else
-#pragma GLOBAL_ASM("asm/non_matchings/code/z_skelanime/SkelAnime_GetFrameData2.s")
-#endif
/**
* Used by legacy animation format
diff --git a/tools/disasm/functions.txt b/tools/disasm/functions.txt
index a51d44753..b2e479288 100644
--- a/tools/disasm/functions.txt
+++ b/tools/disasm/functions.txt
@@ -2536,7 +2536,7 @@
0x80134990:("SkelAnime_Draw",),
0x80134B54:("SkelAnime_DrawFlexLimb",),
0x80134DBC:("SkelAnime_DrawFlex",),
- 0x80134FFC:("SkelAnime_GetFrameData2",),
+ 0x80134FFC:("SkelAnime_GetFrameDataLegacy",),
0x801353D4:("Animation_GetLimbCount2",),
0x801353F8:("Animation_GetLength2",),
0x8013541C:("Animation_GetLastFrame2",),