From ad21e2c8b80bf1ebcd3cce4d4659f399989b2a49 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sun, 7 Nov 2021 14:19:21 +1000 Subject: [PATCH] Attempt to decompile anim00023ab0 --- src/include/bss.h | 2 +- src/include/lib/anim.h | 6 ++--- src/include/types.h | 2 +- src/lib/anim.c | 52 +++++++++++++++++++++++++++++++++++++++--- 4 files changed, 54 insertions(+), 8 deletions(-) diff --git a/src/include/bss.h b/src/include/bss.h index 899a29298..02071964a 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -35,7 +35,7 @@ extern u32 var80095200; extern struct var80095210 var80095210; extern OSMesgQueue g_PiMesgQueue; extern struct g_vars g_Vars; -extern void *var8009a874; +extern u8 **var8009a874; extern s32 *var8009a888; extern union filedataptr g_TileFileData; extern s32 g_TileNumRooms; diff --git a/src/include/lib/anim.h b/src/include/lib/anim.h index f9d02dd73..47f1e1b16 100644 --- a/src/include/lib/anim.h +++ b/src/include/lib/anim.h @@ -10,11 +10,11 @@ void anim0002373c(void); s32 animGetNumFrames(s16 anim_id); bool animHasFrames(s16 animnum); s32 animGetNumAnimations(void); -u8 *animDma(u8 *dst, u32 segoffset, s32 len); +u8 *animDma(u8 *dst, u32 segoffset, u32 len); s32 anim0002384c(s16 animnum, s32 frame); -u32 anim00023908(void); +s32 anim00023908(s16 animnum, s32 frame, s32 *frameptr); bool anim000239e0(s16 animnum, s32 frame); -s32 anim00023ab0(s16 animnum, s32 framenum); +u8 anim00023ab0(s16 animnum, s32 framenum); void anim00023d0c(void); void anim00023d38(s16 animnum); u32 anim00023f50(void); diff --git a/src/include/types.h b/src/include/types.h index 7e8bab463..26899dea6 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6016,7 +6016,7 @@ struct modelthing { struct animheader { /*0x00*/ u16 numframes; /*0x02*/ u16 framelen; // in bytes - /*0x04*/ u8 *data; + /*0x04*/ u32 data; /*0x08*/ u16 initialposbytes; /*0x0a*/ u8 initialposbitsperentry; /*0x0b*/ u8 flags; diff --git a/src/lib/anim.c b/src/lib/anim.c index ebb3dd4bc..baef9c960 100644 --- a/src/lib/anim.c +++ b/src/lib/anim.c @@ -13,8 +13,8 @@ #include "data.h" #include "types.h" -void *var8009a870; -void *var8009a874; +u8 *var8009a870; +u8 **var8009a874; s16 *var8009a878; s16 *var8009a87c; u8 *var8009a880; @@ -130,7 +130,7 @@ s32 animGetNumAnimations(void) extern u8 _animationsSegmentRomStart; -u8 *animDma(u8 *dst, u32 segoffset, s32 len) +u8 *animDma(u8 *dst, u32 segoffset, u32 len) { if (g_AnimHostEnabled) { bcopy(&g_AnimHostSegment[segoffset], dst, len); @@ -432,6 +432,52 @@ glabel anim00023ab0 /* 23d08: 30e200ff */ andi $v0,$a3,0xff ); +// Mismatch: regalloc near tmp1 and tmp2 +//u8 anim00023ab0(s16 animnum, s32 framenum) +//{ +// s32 index = -1; +// s32 i; +// s32 tmp1; +// s32 tmp2; +// s32 sp2c = framenum; +// +// for (i = 0; i < 32; i++) { +// if (var8009a878[i] == animnum && var8009a87c[i] == sp2c) { +// index = i; +// break; +// } +// } +// +// if (index >= 0) { +// var8009a880[index] = 1; +// } else { +// index = var8005f000; +// +// while (var8009a880[index]) { +// index = (index + 1) % 32; +// } +// +// if (g_Anims[animnum].flags & ANIMFLAG_04) { +// anim00023908(animnum, framenum, &sp2c); +// } +// +// if (g_Anims[animnum].framelen) { +// tmp1 = g_Anims[animnum].framelen * sp2c; +// tmp2 = tmp1 + (g_Anims[animnum].data + g_Anims[animnum].initialposbytes); +// var8009a874[index] = animDma(&var8009a870[index * var8005f018], tmp2, g_Anims[animnum].framelen); +// } else { +// var8009a874[index] = &var8009a870[index * var8005f018]; +// } +// +// var8009a878[index] = animnum; +// var8009a87c[index] = framenum; +// var8009a880[index] = 1; +// var8005f000 = (index + 1) % 32; +// } +// +// return index; +//} + void anim00023d0c(void) { s32 i;