From 6cd872c94eb4476bd95ca40ced5e5e25d9948a36 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 6 Nov 2021 18:41:08 +1000 Subject: [PATCH] Decompile animsInit --- src/include/bss.h | 4 +- src/include/data.h | 6 +- src/include/lib/anim.h | 4 +- src/include/types.h | 2 +- src/lib/anim.c | 245 +++++++++++------------------------------ src/lib/main.c | 8 +- 6 files changed, 75 insertions(+), 194 deletions(-) diff --git a/src/include/bss.h b/src/include/bss.h index 63ff61a27..d45bad9c9 100644 --- a/src/include/bss.h +++ b/src/include/bss.h @@ -35,8 +35,8 @@ extern u32 var80095200; extern struct var80095210 var80095210; extern OSMesgQueue g_PiMesgQueue; extern struct g_vars g_Vars; -extern u32 var8009a874; -extern u32 var8009a888; +extern void *var8009a874; +extern void *var8009a888; extern union filedataptr g_TileFileData; extern s32 g_TileNumRooms; extern u32 *g_TileRooms; diff --git a/src/include/data.h b/src/include/data.h index 97ace6038..7af5be7c4 100644 --- a/src/include/data.h +++ b/src/include/data.h @@ -63,10 +63,10 @@ extern u32 var8005f000; extern u32 var8005f004; extern s16 g_NumAnimations; extern struct animheader *g_Anims; -extern u32 var8005f010; +extern void *var8005f010; extern s16 *var8005f014; -extern u32 var8005f018; -extern u32 var8005f01c; +extern s32 var8005f018; +extern s32 var8005f01c; extern u32 var8005f020; extern u32 var8005f024; extern u32 var8005f030; diff --git a/src/include/lib/anim.h b/src/include/lib/anim.h index 418fc49e7..6442f7c0e 100644 --- a/src/include/lib/anim.h +++ b/src/include/lib/anim.h @@ -4,8 +4,8 @@ #include "data.h" #include "types.h" -void anim000233c0(void); -u32 anim00023640(void); +void animsInit(void); +void anim00023640(void); void anim0002373c(void); s32 animGetNumFrames(s16 anim_id); bool animHasFrames(s16 animnum); diff --git a/src/include/types.h b/src/include/types.h index b151d7ad0..f35f43035 100644 --- a/src/include/types.h +++ b/src/include/types.h @@ -6017,7 +6017,7 @@ struct animheader { /*0x02*/ u16 framelen; // in bytes /*0x04*/ u8 *data; /*0x08*/ u16 initialposbytes; - /*0x0a*/ u8 initiaposbitsperentry; + /*0x0a*/ u8 initialposbitsperentry; /*0x0b*/ u8 flags; }; diff --git a/src/lib/anim.c b/src/lib/anim.c index bb02fc1e3..4ed823a84 100644 --- a/src/lib/anim.c +++ b/src/lib/anim.c @@ -13,196 +13,77 @@ #include "data.h" #include "types.h" -u32 var8009a870; -u32 var8009a874; -u32 var8009a878; -u32 var8009a87c; +void *var8009a870; +void *var8009a874; +void *var8009a878; +void *var8009a87c; u8 *var8009a880; -u32 var8009a884; -u32 var8009a888; -u32 var8009a88c; -u32 var8009a890; +void *var8009a884; +void *var8009a888; +void *var8009a88c; +void *var8009a890; s16 var8009a894; struct animheader *var8009a898; -u32 var8005f000 = 0x00000000; -u32 var8005f004 = 0x00000000; +u32 var8005f000 = 0; +u32 var8005f004 = 0; s16 g_NumAnimations = 0; struct animheader *g_Anims = NULL; -u32 var8005f010 = 0x00000000; +void *var8005f010 = NULL; s16 *var8005f014 = NULL; -u32 var8005f018 = 0x000000b0; -u32 var8005f01c = 0x00000260; -u32 var8005f020 = 0x00000000; -u32 var8005f024 = 0x00000000; +s32 var8005f018 = 176; +s32 var8005f01c = 608; +u32 var8005f020 = 0; +u32 var8005f024 = 0; -GLOBAL_ASM( -glabel anim000233c0 -/* 233c0: 27bdffd8 */ addiu $sp,$sp,-40 -/* 233c4: 3c0e007d */ lui $t6,%hi(_animationsTableRomEnd) -/* 233c8: 3c0f007d */ lui $t7,%hi(_animationsTableRomStart) -/* 233cc: afb00018 */ sw $s0,0x18($sp) -/* 233d0: 25efd1a0 */ addiu $t7,$t7,%lo(_animationsTableRomStart) -/* 233d4: 25ce0a40 */ addiu $t6,$t6,%lo(_animationsTableRomEnd) -/* 233d8: 01cf8023 */ subu $s0,$t6,$t7 -/* 233dc: 2610003f */ addiu $s0,$s0,0x3f -/* 233e0: 3618003f */ ori $t8,$s0,0x3f -/* 233e4: afbf001c */ sw $ra,0x1c($sp) -/* 233e8: 3b04003f */ xori $a0,$t8,0x3f -/* 233ec: 00808025 */ or $s0,$a0,$zero -/* 233f0: 0c0048f2 */ jal mempAlloc -/* 233f4: 24050006 */ addiu $a1,$zero,0x6 -/* 233f8: 3c05007d */ lui $a1,%hi(_animationsTableRomStart) -/* 233fc: 24a5d1a0 */ addiu $a1,$a1,%lo(_animationsTableRomStart) -/* 23400: 00402025 */ or $a0,$v0,$zero -/* 23404: 02003025 */ or $a2,$s0,$zero -/* 23408: 0c003504 */ jal dmaExec -/* 2340c: afa20020 */ sw $v0,0x20($sp) -/* 23410: 8fa30020 */ lw $v1,0x20($sp) -/* 23414: 3c04800a */ lui $a0,%hi(var8009a894) -/* 23418: 2484a894 */ addiu $a0,$a0,%lo(var8009a894) -/* 2341c: 8c6a0000 */ lw $t2,0x0($v1) -/* 23420: 3c05800a */ lui $a1,%hi(var8009a898) -/* 23424: 3c098006 */ lui $t1,%hi(g_NumAnimations) -/* 23428: a48a0000 */ sh $t2,0x0($a0) -/* 2342c: 848b0000 */ lh $t3,0x0($a0) -/* 23430: 2529f008 */ addiu $t1,$t1,%lo(g_NumAnimations) -/* 23434: 24a5a898 */ addiu $a1,$a1,%lo(var8009a898) -/* 23438: 246c0004 */ addiu $t4,$v1,0x4 -/* 2343c: acac0000 */ sw $t4,0x0($a1) -/* 23440: 3c018006 */ lui $at,%hi(g_Anims) -/* 23444: a52b0000 */ sh $t3,0x0($t1) -/* 23448: ac2cf00c */ sw $t4,%lo(g_Anims)($at) -/* 2344c: 85280000 */ lh $t0,0x0($t1) -/* 23450: 3c078006 */ lui $a3,%hi(var8005f018) -/* 23454: 3c108006 */ lui $s0,%hi(var8005f01c) -/* 23458: 2610f01c */ addiu $s0,$s0,%lo(var8005f01c) -/* 2345c: 24e7f018 */ addiu $a3,$a3,%lo(var8005f018) -/* 23460: 24060001 */ addiu $a2,$zero,0x1 -/* 23464: ae060000 */ sw $a2,0x0($s0) -/* 23468: 19000017 */ blez $t0,.L000234c8 -/* 2346c: ace60000 */ sw $a2,0x0($a3) -/* 23470: 00083080 */ sll $a2,$t0,0x2 -/* 23474: 00c83023 */ subu $a2,$a2,$t0 -/* 23478: 3c038006 */ lui $v1,%hi(g_Anims) -/* 2347c: 8c63f00c */ lw $v1,%lo(g_Anims)($v1) -/* 23480: 00063080 */ sll $a2,$a2,0x2 -/* 23484: 00002025 */ or $a0,$zero,$zero -.L00023488: -/* 23488: 94620008 */ lhu $v0,0x8($v1) -/* 2348c: 8e0e0000 */ lw $t6,0x0($s0) -/* 23490: 2484000c */ addiu $a0,$a0,0xc -/* 23494: 8ce50000 */ lw $a1,0x0($a3) -/* 23498: 01c2082a */ slt $at,$t6,$v0 -/* 2349c: 50200003 */ beqzl $at,.L000234ac -/* 234a0: 94620002 */ lhu $v0,0x2($v1) -/* 234a4: ae020000 */ sw $v0,0x0($s0) -/* 234a8: 94620002 */ lhu $v0,0x2($v1) -.L000234ac: -/* 234ac: 00a2082a */ slt $at,$a1,$v0 -/* 234b0: 50200003 */ beqzl $at,.L000234c0 -/* 234b4: 0086082a */ slt $at,$a0,$a2 -/* 234b8: ace20000 */ sw $v0,0x0($a3) -/* 234bc: 0086082a */ slt $at,$a0,$a2 -.L000234c0: -/* 234c0: 1420fff1 */ bnez $at,.L00023488 -/* 234c4: 2463000c */ addiu $v1,$v1,12 -.L000234c8: -/* 234c8: 8e0f0000 */ lw $t7,0x0($s0) -/* 234cc: 8ceb0000 */ lw $t3,0x0($a3) -/* 234d0: 2504003f */ addiu $a0,$t0,0x3f -/* 234d4: 25f80031 */ addiu $t8,$t7,0x31 -/* 234d8: 256c0031 */ addiu $t4,$t3,0x31 -/* 234dc: 3719000f */ ori $t9,$t8,0xf -/* 234e0: 358d000f */ ori $t5,$t4,0xf -/* 234e4: 3b2a000f */ xori $t2,$t9,0xf -/* 234e8: 39ae000f */ xori $t6,$t5,0xf -/* 234ec: 348f003f */ ori $t7,$a0,0x3f -/* 234f0: ae0a0000 */ sw $t2,0x0($s0) -/* 234f4: acee0000 */ sw $t6,0x0($a3) -/* 234f8: 39e4003f */ xori $a0,$t7,0x3f -/* 234fc: 0c0048f2 */ jal mempAlloc -/* 23500: 24050006 */ addiu $a1,$zero,0x6 -/* 23504: 3c098006 */ lui $t1,%hi(g_NumAnimations) -/* 23508: 3c018006 */ lui $at,%hi(var8005f010) -/* 2350c: ac22f010 */ sw $v0,%lo(var8005f010)($at) -/* 23510: 2529f008 */ addiu $t1,$t1,%lo(g_NumAnimations) -/* 23514: 85240000 */ lh $a0,0x0($t1) -/* 23518: 24050006 */ addiu $a1,$zero,0x6 -/* 2351c: 0004c840 */ sll $t9,$a0,0x1 -/* 23520: 2724003f */ addiu $a0,$t9,0x3f -/* 23524: 348a003f */ ori $t2,$a0,0x3f -/* 23528: 0c0048f2 */ jal mempAlloc -/* 2352c: 3944003f */ xori $a0,$t2,0x3f -/* 23530: 3c078006 */ lui $a3,%hi(var8005f018) -/* 23534: 3c018006 */ lui $at,%hi(var8005f014) -/* 23538: ac22f014 */ sw $v0,%lo(var8005f014)($at) -/* 2353c: 24e7f018 */ addiu $a3,$a3,%lo(var8005f018) -/* 23540: 8ce40000 */ lw $a0,0x0($a3) -/* 23544: 24050006 */ addiu $a1,$zero,0x6 -/* 23548: 00046140 */ sll $t4,$a0,0x5 -/* 2354c: 2584003f */ addiu $a0,$t4,0x3f -/* 23550: 348d003f */ ori $t5,$a0,0x3f -/* 23554: 0c0048f2 */ jal mempAlloc -/* 23558: 39a4003f */ xori $a0,$t5,0x3f -/* 2355c: 3c01800a */ lui $at,%hi(var8009a870) -/* 23560: ac22a870 */ sw $v0,%lo(var8009a870)($at) -/* 23564: 24040080 */ addiu $a0,$zero,0x80 -/* 23568: 0c0048f2 */ jal mempAlloc -/* 2356c: 24050006 */ addiu $a1,$zero,0x6 -/* 23570: 3c01800a */ lui $at,%hi(var8009a874) -/* 23574: ac22a874 */ sw $v0,%lo(var8009a874)($at) -/* 23578: 24040040 */ addiu $a0,$zero,0x40 -/* 2357c: 0c0048f2 */ jal mempAlloc -/* 23580: 24050006 */ addiu $a1,$zero,0x6 -/* 23584: 3c01800a */ lui $at,%hi(var8009a878) -/* 23588: ac22a878 */ sw $v0,%lo(var8009a878)($at) -/* 2358c: 24040040 */ addiu $a0,$zero,0x40 -/* 23590: 0c0048f2 */ jal mempAlloc -/* 23594: 24050006 */ addiu $a1,$zero,0x6 -/* 23598: 3c01800a */ lui $at,%hi(var8009a87c) -/* 2359c: ac22a87c */ sw $v0,%lo(var8009a87c)($at) -/* 235a0: 24040040 */ addiu $a0,$zero,0x40 -/* 235a4: 0c0048f2 */ jal mempAlloc -/* 235a8: 24050006 */ addiu $a1,$zero,0x6 -/* 235ac: 3c01800a */ lui $at,%hi(var8009a880) -/* 235b0: ac22a880 */ sw $v0,%lo(var8009a880)($at) -/* 235b4: 8e040000 */ lw $a0,0x0($s0) -/* 235b8: 24050006 */ addiu $a1,$zero,0x6 -/* 235bc: 00047880 */ sll $t7,$a0,0x2 -/* 235c0: 01e47821 */ addu $t7,$t7,$a0 -/* 235c4: 000f78c0 */ sll $t7,$t7,0x3 -/* 235c8: 25e4003f */ addiu $a0,$t7,0x3f -/* 235cc: 3498003f */ ori $t8,$a0,0x3f -/* 235d0: 0c0048f2 */ jal mempAlloc -/* 235d4: 3b04003f */ xori $a0,$t8,0x3f -/* 235d8: 3c01800a */ lui $at,%hi(var8009a884) -/* 235dc: ac22a884 */ sw $v0,%lo(var8009a884)($at) -/* 235e0: 240400c0 */ addiu $a0,$zero,0xc0 -/* 235e4: 0c0048f2 */ jal mempAlloc -/* 235e8: 24050006 */ addiu $a1,$zero,0x6 -/* 235ec: 3c01800a */ lui $at,%hi(var8009a888) -/* 235f0: ac22a888 */ sw $v0,%lo(var8009a888)($at) -/* 235f4: 24040080 */ addiu $a0,$zero,0x80 -/* 235f8: 0c0048f2 */ jal mempAlloc -/* 235fc: 24050006 */ addiu $a1,$zero,0x6 -/* 23600: 3c01800a */ lui $at,%hi(var8009a88c) -/* 23604: ac22a88c */ sw $v0,%lo(var8009a88c)($at) -/* 23608: 240400c0 */ addiu $a0,$zero,0xc0 -/* 2360c: 0c0048f2 */ jal mempAlloc -/* 23610: 24050006 */ addiu $a1,$zero,0x6 -/* 23614: 3c01800a */ lui $at,%hi(var8009a890) -/* 23618: 0c008d90 */ jal anim00023640 -/* 2361c: ac22a890 */ sw $v0,%lo(var8009a890)($at) -/* 23620: 8fbf001c */ lw $ra,0x1c($sp) -/* 23624: 3c018006 */ lui $at,%hi(var8005f024) -/* 23628: ac20f024 */ sw $zero,%lo(var8005f024)($at) -/* 2362c: 3c018006 */ lui $at,%hi(var8005f020) -/* 23630: 8fb00018 */ lw $s0,0x18($sp) -/* 23634: ac20f020 */ sw $zero,%lo(var8005f020)($at) -/* 23638: 03e00008 */ jr $ra -/* 2363c: 27bd0028 */ addiu $sp,$sp,0x28 -); +extern u8 _animationsTableRomStart; +extern u8 _animationsTableRomEnd; + +void animsInit(void) +{ + s32 i; + u32 *ptr; + u32 tablelen = ALIGN64(&_animationsTableRomEnd - &_animationsTableRomStart); + + ptr = mempAlloc(tablelen, MEMPOOL_PERMANENT); + dmaExec(ptr, (s32)&_animationsTableRomStart, tablelen); + + g_NumAnimations = var8009a894 = ptr[0]; + g_Anims = var8009a898 = (struct animheader *)&ptr[1]; + + var8005f01c = 1; + var8005f018 = 1; + + for (i = 0; i < g_NumAnimations; i++) { + if (g_Anims[i].initialposbytes > var8005f01c) { + var8005f01c = g_Anims[i].initialposbytes; + } + + if (g_Anims[i].framelen > var8005f018) { + var8005f018 = g_Anims[i].framelen; + } + } + + var8005f01c = ALIGN16(var8005f01c + 34); + var8005f018 = ALIGN16(var8005f018 + 34); + + var8005f010 = mempAlloc(ALIGN64(g_NumAnimations), MEMPOOL_PERMANENT); + var8005f014 = mempAlloc(ALIGN64(g_NumAnimations * 2), MEMPOOL_PERMANENT); + var8009a870 = mempAlloc(ALIGN64(var8005f018 * 0x20), MEMPOOL_PERMANENT); + var8009a874 = mempAlloc(0x80, MEMPOOL_PERMANENT); + var8009a878 = mempAlloc(0x40, MEMPOOL_PERMANENT); + var8009a87c = mempAlloc(0x40, MEMPOOL_PERMANENT); + var8009a880 = mempAlloc(0x40, MEMPOOL_PERMANENT); + var8009a884 = mempAlloc(ALIGN64(var8005f01c * 0x28), MEMPOOL_PERMANENT); + var8009a888 = mempAlloc(0xc0, MEMPOOL_PERMANENT); + var8009a88c = mempAlloc(0x80, MEMPOOL_PERMANENT); + var8009a890 = mempAlloc(0xc0, MEMPOOL_PERMANENT); + + anim00023640(); + + var8005f024 = 0; + var8005f020 = 0; +} GLOBAL_ASM( glabel anim00023640 diff --git a/src/lib/main.c b/src/lib/main.c index 8fd71b1a8..f7bc40225 100644 --- a/src/lib/main.c +++ b/src/lib/main.c @@ -664,7 +664,7 @@ glabel mainInit /* d7c0: 00000000 */ nop /* d7c4: 0fc52c1b */ jal func0f14a3bc /* d7c8: 00000000 */ nop -/* d7cc: 0c008b30 */ jal anim000233c0 +/* d7cc: 0c008b30 */ jal animsInit /* d7d0: 00000000 */ nop /* d7d4: 0fc00040 */ jal func0f000100 /* d7d8: 00000000 */ nop @@ -1067,7 +1067,7 @@ glabel mainInit /* da84: 00000000 */ nop /* da88: 0fc528ef */ jal func0f14a3bc /* da8c: 00000000 */ nop -/* da90: 0c008cf0 */ jal anim000233c0 +/* da90: 0c008cf0 */ jal animsInit /* da94: 00000000 */ nop /* da98: 0fc00040 */ jal func0f000100 /* da9c: 00000000 */ nop @@ -1440,7 +1440,7 @@ glabel mainInit /* df94: 00000000 */ sll $zero,$zero,0x0 /* df98: 0fc512e3 */ jal func0f14a3bc /* df9c: 00000000 */ sll $zero,$zero,0x0 -/* dfa0: 0c0091e8 */ jal anim000233c0 +/* dfa0: 0c0091e8 */ jal animsInit /* dfa4: 00000000 */ sll $zero,$zero,0x0 /* dfa8: 0fc00040 */ jal func0f000100 /* dfac: 00000000 */ sll $zero,$zero,0x0 @@ -1667,7 +1667,7 @@ const char var70053aa0[] = " -ml0 -me0 -mgfx100 -mvtx50 -mt700 -ma400"; // phAllocate(); // pakInitAll(); // func0f14a3bc(); -// anim000233c0(); +// animsInit(); // func0f000100(); // func0f000130(); // stub0f000850();