diff --git a/src/include/data.h b/src/include/data.h index a2eb76a94..f1e3a885c 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -60,7 +60,6 @@ extern u32 var8005efe0; extern u32 var8005efec; extern u32 var8005eff8; extern u32 var8005f000; -extern u32 var8005f004; extern s16 g_NumAnimations; extern struct animheader *g_Anims; extern u8 *var8005f010; diff --git a/src/include/lib/anim.h b/src/include/lib/anim.h index 5844a5cd0..d0977544b 100644 --- a/src/include/lib/anim.h +++ b/src/include/lib/anim.h @@ -10,7 +10,7 @@ void anim0002373c(void); s32 animGetNumFrames(s16 anim_id); bool animHasFrames(s16 animnum); s32 animGetNumAnimations(void); -u32 anim000237e8(void); +s32 anim000237e8(void *arg0, u8 *data, s32 pos); s32 anim0002384c(s16 animnum, s32 frame); u32 anim00023908(void); bool anim000239e0(s16 animnum, s32 frame); diff --git a/src/lib/anim.c b/src/lib/anim.c index 239513d25..369cff8b4 100644 --- a/src/lib/anim.c +++ b/src/lib/anim.c @@ -18,7 +18,7 @@ void *var8009a874; s16 *var8009a878; s16 *var8009a87c; u8 *var8009a880; -void *var8009a884; +u8 *var8009a884; s32 *var8009a888; s16 *var8009a88c; s32 *var8009a890; @@ -26,7 +26,7 @@ s16 var8009a894; struct animheader *var8009a898; u32 var8005f000 = 0; -u32 var8005f004 = 0; +s32 var8005f004 = 0; s16 g_NumAnimations = 0; struct animheader *g_Anims = NULL; u8 *var8005f010 = NULL; @@ -74,7 +74,7 @@ void animsInit(void) var8009a878 = mempAlloc(0x40, MEMPOOL_PERMANENT); var8009a87c = mempAlloc(0x40, MEMPOOL_PERMANENT); var8009a880 = mempAlloc(0x40, MEMPOOL_PERMANENT); - var8009a884 = mempAlloc(ALIGN64(var8005f01c * 0x28), MEMPOOL_PERMANENT); + var8009a884 = mempAlloc(ALIGN64(var8005f01c * 40), MEMPOOL_PERMANENT); var8009a888 = mempAlloc(0xc0, MEMPOOL_PERMANENT); var8009a88c = mempAlloc(0x80, MEMPOOL_PERMANENT); var8009a890 = mempAlloc(0xc0, MEMPOOL_PERMANENT); @@ -607,6 +607,43 @@ glabel anim00023d38 /* 23f4c: 00000000 */ nop ); +// Mismatch: for loop is handled differently +//void anim00023d38(s16 animnum) +//{ +// s32 i; +// +// if (var8005f010[animnum] != 0xff) { +// var8009a890[var8005f010[animnum]] = g_Vars.thisframe240; +// var8005f004 = (var8005f010[animnum] + 1) % 40; +// } else { +// s32 index = var8005f004; +// s32 bestvalue = var8009a890[index]; +// s32 stack; +// s32 tmp; +// +// for (i = 0; i < 40; i++) { +// if (var8009a890[i] < bestvalue) { +// bestvalue = var8009a890[i]; +// index = i; +// } +// } +// +// tmp = var8009a88c[index]; +// +// if (tmp) { +// var8005f010[tmp] = 0xff; +// } +// +// tmp = g_Anims[animnum].initialposbytes; +// +// var8009a888[index] = anim000237e8(&var8009a884[var8005f01c * index], g_Anims[animnum].data, tmp); +// var8005f010[animnum] = index; +// var8009a88c[index] = animnum; +// var8009a890[index] = g_Vars.thisframe240; +// var8005f004 = (index + 1) % 40; +// } +//} + GLOBAL_ASM( glabel anim00023f50 /* 23f50: 30cf0007 */ andi $t7,$a2,0x7