From 72287c59b5d16c4b284372f33004c567bc2a7fe5 Mon Sep 17 00:00:00 2001 From: Ryan Dwyer Date: Sat, 16 Jul 2022 23:38:57 +1000 Subject: [PATCH] Decompile anim00024050 --- src/include/lib/anim.h | 6 +- src/lib/anim.c | 748 ++++++++++------------------------------- 2 files changed, 187 insertions(+), 567 deletions(-) diff --git a/src/include/lib/anim.h b/src/include/lib/anim.h index 7e0ab5b11..d6e175345 100644 --- a/src/include/lib/anim.h +++ b/src/include/lib/anim.h @@ -17,9 +17,9 @@ bool anim000239e0(s16 animnum, s32 frame); u8 anim00023ab0(s16 animnum, s32 framenum); void anim00023d0c(void); void anim00023d38(s16 animnum); -u32 anim00023f50(u8 *arg0, u8 arg1, u32 arg2); -u32 anim00023fe0(u8 *arg0, u8 arg1, s32 arg2); -void anim00024050(s32 arg0, s32 arg1, struct skeleton *skel, s32 animnum, u32 arg4, struct coord *arg5, struct coord *arg6, struct coord *arg7); +s32 anim00023f50(u8 *arg0, u8 arg1, u32 arg2); +s32 anim00023fe0(u8 *arg0, u8 arg1, s32 arg2); +void anim00024050(s32 arg0, bool flip, struct skeleton *skel, s16 animnum, u8 arg4, struct coord *arg5, struct coord *arg6, struct coord *arg7); u16 anim0002485c(s32 arg0, bool arg1, struct skeleton *skel, s16 animnum, s32 loopframe, s16 *arg5, s32 arg6); f32 anim00024b64(u32 arg0, u32 arg1, struct skeleton *skel, s16 animnum, u32 arg4, struct coord *coord, u32 arg6); f32 anim00024c14(s32 arg0, s16 animnum, u8 arg2); diff --git a/src/lib/anim.c b/src/lib/anim.c index 5c84fbd85..6f3eb1ee8 100644 --- a/src/lib/anim.c +++ b/src/lib/anim.c @@ -712,7 +712,7 @@ glabel anim00023f50 // return result; //} -u32 anim00023fe0(u8 *arg0, u8 arg1, s32 arg2) +s32 anim00023fe0(u8 *arg0, u8 arg1, s32 arg2) { u16 result = anim00023f50(arg0, arg1, arg2); @@ -723,569 +723,189 @@ u32 anim00023fe0(u8 *arg0, u8 arg1, s32 arg2) return result; } -GLOBAL_ASM( -glabel anim00024050 -.late_rodata -glabel var70054690 -.word 0x3a83126f -glabel var70054694 -.word 0x3a83126f -glabel var70054698 -.word 0x3a83126f -glabel var7005469c -.word 0x40c907a9 -glabel var700546a0 -.word 0x40c907a9 -glabel var700546a4 -.word 0x40c907a9 -.text -/* 24050: 27bdff98 */ addiu $sp,$sp,-104 -/* 24054: 93b9007b */ lbu $t9,0x7b($sp) -/* 24058: 3c18800a */ lui $t8,%hi(var8009a874) -/* 2405c: 8f18a874 */ lw $t8,%lo(var8009a874)($t8) -/* 24060: 00194080 */ sll $t0,$t9,0x2 -/* 24064: afbf001c */ sw $ra,0x1c($sp) -/* 24068: afb10018 */ sw $s1,0x18($sp) -/* 2406c: afb00014 */ sw $s0,0x14($sp) -/* 24070: afa40068 */ sw $a0,0x68($sp) -/* 24074: afa5006c */ sw $a1,0x6c($sp) -/* 24078: afa70074 */ sw $a3,0x74($sp) -/* 2407c: 03084821 */ addu $t1,$t8,$t0 -/* 24080: 8d2a0000 */ lw $t2,0x0($t1) -/* 24084: 00077400 */ sll $t6,$a3,0x10 -/* 24088: 000e3c03 */ sra $a3,$t6,0x10 -/* 2408c: 10a00006 */ beqz $a1,.L000240a8 -/* 24090: afaa0054 */ sw $t2,0x54($sp) -/* 24094: 8ccc0004 */ lw $t4,0x4($a2) -/* 24098: 00047040 */ sll $t6,$a0,0x1 -/* 2409c: 018e7821 */ addu $t7,$t4,$t6 -/* 240a0: 91f90001 */ lbu $t9,0x1($t7) -/* 240a4: afb90068 */ sw $t9,0x68($sp) -.L000240a8: -/* 240a8: 3c188006 */ lui $t8,%hi(g_Anims) -/* 240ac: 8f18f00c */ lw $t8,%lo(g_Anims)($t8) -/* 240b0: 00074080 */ sll $t0,$a3,0x2 -/* 240b4: 01074023 */ subu $t0,$t0,$a3 -/* 240b8: 00084080 */ sll $t0,$t0,0x2 -/* 240bc: 3c0b8006 */ lui $t3,%hi(var8005f010) -/* 240c0: 03081021 */ addu $v0,$t8,$t0 -/* 240c4: 9049000a */ lbu $t1,0xa($v0) -/* 240c8: 8d6bf010 */ lw $t3,%lo(var8005f010)($t3) -/* 240cc: 3c0a800a */ lui $t2,%hi(var8009a888) -/* 240d0: a3a90053 */ sb $t1,0x53($sp) -/* 240d4: 00eb6821 */ addu $t5,$a3,$t3 -/* 240d8: 91ac0000 */ lbu $t4,0x0($t5) -/* 240dc: 8d4aa888 */ lw $t2,%lo(var8009a888)($t2) -/* 240e0: 8fb80068 */ lw $t8,0x68($sp) -/* 240e4: 000c7080 */ sll $t6,$t4,0x2 -/* 240e8: 014e7821 */ addu $t7,$t2,$t6 -/* 240ec: 8df00000 */ lw $s0,0x0($t7) -/* 240f0: 94590008 */ lhu $t9,0x8($v0) -/* 240f4: 00008825 */ or $s1,$zero,$zero -/* 240f8: 00002025 */ or $a0,$zero,$zero -/* 240fc: 1b000043 */ blez $t8,.L0002420c -/* 24100: 03302821 */ addu $a1,$t9,$s0 -/* 24104: 0205082b */ sltu $at,$s0,$a1 -/* 24108: 50200041 */ beqzl $at,.L00024210 -/* 2410c: 0205082b */ sltu $at,$s0,$a1 -/* 24110: 92030000 */ lbu $v1,0x0($s0) -.L00024114: -/* 24114: 26100001 */ addiu $s0,$s0,0x1 -/* 24118: 30680008 */ andi $t0,$v1,0x8 -/* 2411c: 1100000b */ beqz $t0,.L0002414c -/* 24120: 30790002 */ andi $t9,$v1,0x2 -/* 24124: 92090002 */ lbu $t1,0x2($s0) -/* 24128: 920d0005 */ lbu $t5,0x5($s0) -/* 2412c: 920a0008 */ lbu $t2,0x8($s0) -/* 24130: 02295821 */ addu $t3,$s1,$t1 -/* 24134: 920f000b */ lbu $t7,0xb($s0) -/* 24138: 016d6021 */ addu $t4,$t3,$t5 -/* 2413c: 018a7021 */ addu $t6,$t4,$t2 -/* 24140: 2610000c */ addiu $s0,$s0,0xc -/* 24144: 10000014 */ b .L00024198 -/* 24148: 01cf8821 */ addu $s1,$t6,$t7 -.L0002414c: -/* 2414c: 13200009 */ beqz $t9,.L00024174 -/* 24150: 306c0020 */ andi $t4,$v1,0x20 -/* 24154: 92180002 */ lbu $t8,0x2($s0) -/* 24158: 92090005 */ lbu $t1,0x5($s0) -/* 2415c: 920d0008 */ lbu $t5,0x8($s0) -/* 24160: 02384021 */ addu $t0,$s1,$t8 -/* 24164: 01095821 */ addu $t3,$t0,$t1 -/* 24168: 26100009 */ addiu $s0,$s0,0x9 -/* 2416c: 1000000a */ b .L00024198 -/* 24170: 016d8821 */ addu $s1,$t3,$t5 -.L00024174: -/* 24174: 51800009 */ beqzl $t4,.L0002419c -/* 24178: 30680001 */ andi $t0,$v1,0x1 -/* 2417c: 920a0000 */ lbu $t2,0x0($s0) -/* 24180: 920f0005 */ lbu $t7,0x5($s0) -/* 24184: 9218000a */ lbu $t8,0xa($s0) -/* 24188: 022a7021 */ addu $t6,$s1,$t2 -/* 2418c: 01cfc821 */ addu $t9,$t6,$t7 -/* 24190: 2610000f */ addiu $s0,$s0,0xf -/* 24194: 03388821 */ addu $s1,$t9,$t8 -.L00024198: -/* 24198: 30680001 */ andi $t0,$v1,0x1 -.L0002419c: -/* 2419c: 11000009 */ beqz $t0,.L000241c4 -/* 241a0: 306f0040 */ andi $t7,$v1,0x40 -/* 241a4: 92090002 */ lbu $t1,0x2($s0) -/* 241a8: 920d0005 */ lbu $t5,0x5($s0) -/* 241ac: 920a0008 */ lbu $t2,0x8($s0) -/* 241b0: 02295821 */ addu $t3,$s1,$t1 -/* 241b4: 016d6021 */ addu $t4,$t3,$t5 -/* 241b8: 26100009 */ addiu $s0,$s0,0x9 -/* 241bc: 10000005 */ b .L000241d4 -/* 241c0: 018a8821 */ addu $s1,$t4,$t2 -.L000241c4: -/* 241c4: 306e0010 */ andi $t6,$v1,0x10 -/* 241c8: 11c00002 */ beqz $t6,.L000241d4 -/* 241cc: 00000000 */ nop -/* 241d0: 26310060 */ addiu $s1,$s1,0x60 -.L000241d4: -/* 241d4: 11e00004 */ beqz $t7,.L000241e8 -/* 241d8: 30780080 */ andi $t8,$v1,0x80 -/* 241dc: 92190000 */ lbu $t9,0x0($s0) -/* 241e0: 26100005 */ addiu $s0,$s0,0x5 -/* 241e4: 02398821 */ addu $s1,$s1,$t9 -.L000241e8: -/* 241e8: 13000002 */ beqz $t8,.L000241f4 -/* 241ec: 8fa80068 */ lw $t0,0x68($sp) -/* 241f0: 26310060 */ addiu $s1,$s1,0x60 -.L000241f4: -/* 241f4: 24840001 */ addiu $a0,$a0,0x1 -/* 241f8: 0088082a */ slt $at,$a0,$t0 -/* 241fc: 10200003 */ beqz $at,.L0002420c -/* 24200: 0205082b */ sltu $at,$s0,$a1 -/* 24204: 5420ffc3 */ bnezl $at,.L00024114 -/* 24208: 92030000 */ lbu $v1,0x0($s0) -.L0002420c: -/* 2420c: 0205082b */ sltu $at,$s0,$a1 -.L00024210: -/* 24210: 1020017f */ beqz $at,.L00024810 -/* 24214: 8fa3007c */ lw $v1,0x7c($sp) -/* 24218: 92020000 */ lbu $v0,0x0($s0) -/* 2421c: 26100001 */ addiu $s0,$s0,0x1 -/* 24220: 8fa40054 */ lw $a0,0x54($sp) -/* 24224: 304b0002 */ andi $t3,$v0,0x2 -/* 24228: 11600039 */ beqz $t3,.L00024310 -/* 2422c: afa20028 */ sw $v0,0x28($sp) -/* 24230: 92050002 */ lbu $a1,0x2($s0) -/* 24234: 02203025 */ or $a2,$s1,$zero -/* 24238: 0c008ff8 */ jal anim00023fe0 -/* 2423c: a3a5005b */ sb $a1,0x5b($sp) -/* 24240: 920d0001 */ lbu $t5,0x1($s0) -/* 24244: 920a0000 */ lbu $t2,0x0($s0) -/* 24248: 93a5005b */ lbu $a1,0x5b($sp) -/* 2424c: 01a26021 */ addu $t4,$t5,$v0 -/* 24250: 000a7200 */ sll $t6,$t2,0x8 -/* 24254: 018e7821 */ addu $t7,$t4,$t6 -/* 24258: 000fcc00 */ sll $t9,$t7,0x10 -/* 2425c: 0019c403 */ sra $t8,$t9,0x10 -/* 24260: 44982000 */ mtc1 $t8,$f4 -/* 24264: 8fa80080 */ lw $t0,0x80($sp) -/* 24268: 02258821 */ addu $s1,$s1,$a1 -/* 2426c: 468021a0 */ cvt.s.w $f6,$f4 -/* 24270: 02203025 */ or $a2,$s1,$zero -/* 24274: e5060000 */ swc1 $f6,0x0($t0) -/* 24278: 92050005 */ lbu $a1,0x5($s0) -/* 2427c: 8fa40054 */ lw $a0,0x54($sp) -/* 24280: 0c008ff8 */ jal anim00023fe0 -/* 24284: a3a5005b */ sb $a1,0x5b($sp) -/* 24288: 92090004 */ lbu $t1,0x4($s0) -/* 2428c: 920d0003 */ lbu $t5,0x3($s0) -/* 24290: 93a5005b */ lbu $a1,0x5b($sp) -/* 24294: 01225821 */ addu $t3,$t1,$v0 -/* 24298: 000d5200 */ sll $t2,$t5,0x8 -/* 2429c: 016a6021 */ addu $t4,$t3,$t2 -/* 242a0: 000c7400 */ sll $t6,$t4,0x10 -/* 242a4: 000e7c03 */ sra $t7,$t6,0x10 -/* 242a8: 448f4000 */ mtc1 $t7,$f8 -/* 242ac: 8fa70080 */ lw $a3,0x80($sp) -/* 242b0: 02258821 */ addu $s1,$s1,$a1 -/* 242b4: 468042a0 */ cvt.s.w $f10,$f8 -/* 242b8: 02203025 */ or $a2,$s1,$zero -/* 242bc: e4ea0004 */ swc1 $f10,0x4($a3) -/* 242c0: 92050008 */ lbu $a1,0x8($s0) -/* 242c4: 8fa40054 */ lw $a0,0x54($sp) -/* 242c8: 0c008ff8 */ jal anim00023fe0 -/* 242cc: a3a5005b */ sb $a1,0x5b($sp) -/* 242d0: 92190007 */ lbu $t9,0x7($s0) -/* 242d4: 92080006 */ lbu $t0,0x6($s0) -/* 242d8: 93a5005b */ lbu $a1,0x5b($sp) -/* 242dc: 0322c021 */ addu $t8,$t9,$v0 -/* 242e0: 00084a00 */ sll $t1,$t0,0x8 -/* 242e4: 03096821 */ addu $t5,$t8,$t1 -/* 242e8: 000d5c00 */ sll $t3,$t5,0x10 -/* 242ec: 000b5403 */ sra $t2,$t3,0x10 -/* 242f0: 448a8000 */ mtc1 $t2,$f16 -/* 242f4: 8fa70080 */ lw $a3,0x80($sp) -/* 242f8: 44800000 */ mtc1 $zero,$f0 -/* 242fc: 468084a0 */ cvt.s.w $f18,$f16 -/* 24300: 26100009 */ addiu $s0,$s0,0x9 -/* 24304: 02258821 */ addu $s1,$s1,$a1 -/* 24308: 10000064 */ b .L0002449c -/* 2430c: e4f20008 */ swc1 $f18,0x8($a3) -.L00024310: -/* 24310: 8fac0028 */ lw $t4,0x28($sp) -/* 24314: 8faf0028 */ lw $t7,0x28($sp) -/* 24318: 8fa70080 */ lw $a3,0x80($sp) -/* 2431c: 318e0020 */ andi $t6,$t4,0x20 -/* 24320: 11c0004f */ beqz $t6,.L00024460 -/* 24324: 31ed0008 */ andi $t5,$t7,0x8 -/* 24328: 92050000 */ lbu $a1,0x0($s0) -/* 2432c: 8fa40054 */ lw $a0,0x54($sp) -/* 24330: 02203025 */ or $a2,$s1,$zero -/* 24334: 0c008fd4 */ jal anim00023f50 -/* 24338: a3a5005b */ sb $a1,0x5b($sp) -/* 2433c: 92190001 */ lbu $t9,0x1($s0) -/* 24340: 920f0004 */ lbu $t7,0x4($s0) -/* 24344: 92090002 */ lbu $t1,0x2($s0) -/* 24348: 920a0003 */ lbu $t2,0x3($s0) -/* 2434c: 00194600 */ sll $t0,$t9,0x18 -/* 24350: 01e8c021 */ addu $t8,$t7,$t0 -/* 24354: 00096c00 */ sll $t5,$t1,0x10 -/* 24358: 030d5821 */ addu $t3,$t8,$t5 -/* 2435c: 000a6200 */ sll $t4,$t2,0x8 -/* 24360: 016c7021 */ addu $t6,$t3,$t4 -/* 24364: 01c2c821 */ addu $t9,$t6,$v0 -/* 24368: 44992000 */ mtc1 $t9,$f4 -/* 2436c: 3c017005 */ lui $at,%hi(var70054690) -/* 24370: c4284690 */ lwc1 $f8,%lo(var70054690)($at) -/* 24374: 468021a0 */ cvt.s.w $f6,$f4 -/* 24378: 93a5005b */ lbu $a1,0x5b($sp) -/* 2437c: 8fa70080 */ lw $a3,0x80($sp) -/* 24380: 02258821 */ addu $s1,$s1,$a1 -/* 24384: 02203025 */ or $a2,$s1,$zero -/* 24388: 46083282 */ mul.s $f10,$f6,$f8 -/* 2438c: e4ea0000 */ swc1 $f10,0x0($a3) -/* 24390: 92050005 */ lbu $a1,0x5($s0) -/* 24394: 8fa40054 */ lw $a0,0x54($sp) -/* 24398: 0c008fd4 */ jal anim00023f50 -/* 2439c: a3a5005b */ sb $a1,0x5b($sp) -/* 243a0: 92080006 */ lbu $t0,0x6($s0) -/* 243a4: 920f0009 */ lbu $t7,0x9($s0) -/* 243a8: 920d0007 */ lbu $t5,0x7($s0) -/* 243ac: 920c0008 */ lbu $t4,0x8($s0) -/* 243b0: 00084e00 */ sll $t1,$t0,0x18 -/* 243b4: 01e9c021 */ addu $t8,$t7,$t1 -/* 243b8: 000d5400 */ sll $t2,$t5,0x10 -/* 243bc: 030a5821 */ addu $t3,$t8,$t2 -/* 243c0: 000c7200 */ sll $t6,$t4,0x8 -/* 243c4: 016ec821 */ addu $t9,$t3,$t6 -/* 243c8: 03224021 */ addu $t0,$t9,$v0 -/* 243cc: 44888000 */ mtc1 $t0,$f16 -/* 243d0: 3c017005 */ lui $at,%hi(var70054694) -/* 243d4: c4244694 */ lwc1 $f4,%lo(var70054694)($at) -/* 243d8: 468084a0 */ cvt.s.w $f18,$f16 -/* 243dc: 93a5005b */ lbu $a1,0x5b($sp) -/* 243e0: 8fa70080 */ lw $a3,0x80($sp) -/* 243e4: 02258821 */ addu $s1,$s1,$a1 -/* 243e8: 02203025 */ or $a2,$s1,$zero -/* 243ec: 46049182 */ mul.s $f6,$f18,$f4 -/* 243f0: e4e60004 */ swc1 $f6,0x4($a3) -/* 243f4: 9205000a */ lbu $a1,0xa($s0) -/* 243f8: 8fa40054 */ lw $a0,0x54($sp) -/* 243fc: 0c008fd4 */ jal anim00023f50 -/* 24400: a3a5005b */ sb $a1,0x5b($sp) -/* 24404: 9209000b */ lbu $t1,0xb($s0) -/* 24408: 920f000e */ lbu $t7,0xe($s0) -/* 2440c: 920a000c */ lbu $t2,0xc($s0) -/* 24410: 920e000d */ lbu $t6,0xd($s0) -/* 24414: 00096e00 */ sll $t5,$t1,0x18 -/* 24418: 01edc021 */ addu $t8,$t7,$t5 -/* 2441c: 000a6400 */ sll $t4,$t2,0x10 -/* 24420: 030c5821 */ addu $t3,$t8,$t4 -/* 24424: 000eca00 */ sll $t9,$t6,0x8 -/* 24428: 01794021 */ addu $t0,$t3,$t9 -/* 2442c: 01024821 */ addu $t1,$t0,$v0 -/* 24430: 44894000 */ mtc1 $t1,$f8 -/* 24434: 3c017005 */ lui $at,%hi(var70054698) -/* 24438: c4304698 */ lwc1 $f16,%lo(var70054698)($at) -/* 2443c: 468042a0 */ cvt.s.w $f10,$f8 -/* 24440: 93a5005b */ lbu $a1,0x5b($sp) -/* 24444: 8fa70080 */ lw $a3,0x80($sp) -/* 24448: 44800000 */ mtc1 $zero,$f0 -/* 2444c: 2610000f */ addiu $s0,$s0,0xf -/* 24450: 02258821 */ addu $s1,$s1,$a1 -/* 24454: 46105482 */ mul.s $f18,$f10,$f16 -/* 24458: 10000010 */ b .L0002449c -/* 2445c: e4f20008 */ swc1 $f18,0x8($a3) -.L00024460: -/* 24460: 44800000 */ mtc1 $zero,$f0 -/* 24464: 51a0000b */ beqzl $t5,.L00024494 -/* 24468: e4e00008 */ swc1 $f0,0x8($a3) -/* 2446c: 920a0002 */ lbu $t2,0x2($s0) -/* 24470: 920c0005 */ lbu $t4,0x5($s0) -/* 24474: 920b0008 */ lbu $t3,0x8($s0) -/* 24478: 9208000b */ lbu $t0,0xb($s0) -/* 2447c: 022ac021 */ addu $t8,$s1,$t2 -/* 24480: 030c7021 */ addu $t6,$t8,$t4 -/* 24484: 01cbc821 */ addu $t9,$t6,$t3 -/* 24488: 2610000c */ addiu $s0,$s0,0xc -/* 2448c: 03288821 */ addu $s1,$t9,$t0 -/* 24490: e4e00008 */ swc1 $f0,0x8($a3) -.L00024494: -/* 24494: e4e00004 */ swc1 $f0,0x4($a3) -/* 24498: e4e00000 */ swc1 $f0,0x0($a3) -.L0002449c: -/* 2449c: 8fa90028 */ lw $t1,0x28($sp) -/* 244a0: 8fa80028 */ lw $t0,0x28($sp) -/* 244a4: 8fa40054 */ lw $a0,0x54($sp) -/* 244a8: 312f0001 */ andi $t7,$t1,0x1 -/* 244ac: 11e0007d */ beqz $t7,.L000246a4 -/* 244b0: 31190010 */ andi $t9,$t0,0x10 -/* 244b4: 92050002 */ lbu $a1,0x2($s0) -/* 244b8: 02203025 */ or $a2,$s1,$zero -/* 244bc: 0c008fd4 */ jal anim00023f50 -/* 244c0: a3a5005b */ sb $a1,0x5b($sp) -/* 244c4: a7a2005c */ sh $v0,0x5c($sp) -/* 244c8: 920a0000 */ lbu $t2,0x0($s0) -/* 244cc: 920e0001 */ lbu $t6,0x1($s0) -/* 244d0: 93b90053 */ lbu $t9,0x53($sp) -/* 244d4: 000ac200 */ sll $t8,$t2,0x8 -/* 244d8: 00586021 */ addu $t4,$v0,$t8 -/* 244dc: 93a5005b */ lbu $a1,0x5b($sp) -/* 244e0: 24080010 */ addiu $t0,$zero,0x10 -/* 244e4: 018e5821 */ addu $t3,$t4,$t6 -/* 244e8: 3169ffff */ andi $t1,$t3,0xffff -/* 244ec: 01191823 */ subu $v1,$t0,$t9 -/* 244f0: a7ab005c */ sh $t3,0x5c($sp) -/* 244f4: 00697804 */ sllv $t7,$t1,$v1 -/* 244f8: a7af005c */ sh $t7,0x5c($sp) -/* 244fc: 02258821 */ addu $s1,$s1,$a1 -/* 24500: 92050005 */ lbu $a1,0x5($s0) -/* 24504: afa30024 */ sw $v1,0x24($sp) -/* 24508: 02203025 */ or $a2,$s1,$zero -/* 2450c: 8fa40054 */ lw $a0,0x54($sp) -/* 24510: 0c008fd4 */ jal anim00023f50 -/* 24514: a3a5005b */ sb $a1,0x5b($sp) -/* 24518: a7a2005e */ sh $v0,0x5e($sp) -/* 2451c: 920d0003 */ lbu $t5,0x3($s0) -/* 24520: 920e0004 */ lbu $t6,0x4($s0) -/* 24524: 8fb90024 */ lw $t9,0x24($sp) -/* 24528: 000dc200 */ sll $t8,$t5,0x8 -/* 2452c: 00586021 */ addu $t4,$v0,$t8 -/* 24530: 93a5005b */ lbu $a1,0x5b($sp) -/* 24534: 018e4021 */ addu $t0,$t4,$t6 -/* 24538: 310bffff */ andi $t3,$t0,0xffff -/* 2453c: a7a8005e */ sh $t0,0x5e($sp) -/* 24540: 032b4804 */ sllv $t1,$t3,$t9 -/* 24544: a7a9005e */ sh $t1,0x5e($sp) -/* 24548: 02258821 */ addu $s1,$s1,$a1 -/* 2454c: 92050008 */ lbu $a1,0x8($s0) -/* 24550: 02203025 */ or $a2,$s1,$zero -/* 24554: 8fa40054 */ lw $a0,0x54($sp) -/* 24558: 0c008fd4 */ jal anim00023f50 -/* 2455c: a3a5005b */ sb $a1,0x5b($sp) -/* 24560: a7a20060 */ sh $v0,0x60($sp) -/* 24564: 920d0006 */ lbu $t5,0x6($s0) -/* 24568: 920c0007 */ lbu $t4,0x7($s0) -/* 2456c: 97a9005c */ lhu $t1,0x5c($sp) -/* 24570: 000d5200 */ sll $t2,$t5,0x8 -/* 24574: 8fa80024 */ lw $t0,0x24($sp) -/* 24578: 004ac021 */ addu $t8,$v0,$t2 -/* 2457c: 3c014780 */ lui $at,0x4780 -/* 24580: 030c7021 */ addu $t6,$t8,$t4 -/* 24584: 93a5005b */ lbu $a1,0x5b($sp) -/* 24588: 44892000 */ mtc1 $t1,$f4 -/* 2458c: 44811000 */ mtc1 $at,$f2 -/* 24590: 31cbffff */ andi $t3,$t6,0xffff -/* 24594: 3c017005 */ lui $at,%hi(var7005469c) -/* 24598: 44800000 */ mtc1 $zero,$f0 -/* 2459c: a7ae0060 */ sh $t6,0x60($sp) -/* 245a0: 010bc804 */ sllv $t9,$t3,$t0 -/* 245a4: c42c469c */ lwc1 $f12,%lo(var7005469c)($at) -/* 245a8: 8fa3007c */ lw $v1,0x7c($sp) -/* 245ac: a7b90060 */ sh $t9,0x60($sp) -/* 245b0: 02258821 */ addu $s1,$s1,$a1 -/* 245b4: 05210005 */ bgez $t1,.L000245cc -/* 245b8: 468021a0 */ cvt.s.w $f6,$f4 -/* 245bc: 3c014f80 */ lui $at,0x4f80 -/* 245c0: 44814000 */ mtc1 $at,$f8 -/* 245c4: 00000000 */ nop -/* 245c8: 46083180 */ add.s $f6,$f6,$f8 -.L000245cc: -/* 245cc: 460c3282 */ mul.s $f10,$f6,$f12 -/* 245d0: 46025403 */ div.s $f16,$f10,$f2 -/* 245d4: e4700000 */ swc1 $f16,0x0($v1) -/* 245d8: 8fad006c */ lw $t5,0x6c($sp) -/* 245dc: 97a2005e */ lhu $v0,0x5e($sp) -/* 245e0: 97ae005e */ lhu $t6,0x5e($sp) -/* 245e4: 51a0001a */ beqzl $t5,.L00024650 -/* 245e8: 448e4000 */ mtc1 $t6,$f8 -/* 245ec: 10400009 */ beqz $v0,.L00024614 -/* 245f0: 3c0f0001 */ lui $t7,0x1 -/* 245f4: 01e25023 */ subu $t2,$t7,$v0 -/* 245f8: 448a9000 */ mtc1 $t2,$f18 -/* 245fc: 00000000 */ nop -/* 24600: 46809120 */ cvt.s.w $f4,$f18 -/* 24604: 460c2202 */ mul.s $f8,$f4,$f12 -/* 24608: 46024183 */ div.s $f6,$f8,$f2 -/* 2460c: 10000002 */ b .L00024618 -/* 24610: e4660004 */ swc1 $f6,0x4($v1) -.L00024614: -/* 24614: e4600004 */ swc1 $f0,0x4($v1) -.L00024618: -/* 24618: 97a20060 */ lhu $v0,0x60($sp) -/* 2461c: 3c180001 */ lui $t8,0x1 -/* 24620: 10400008 */ beqz $v0,.L00024644 -/* 24624: 03026023 */ subu $t4,$t8,$v0 -/* 24628: 448c5000 */ mtc1 $t4,$f10 -/* 2462c: 00000000 */ nop -/* 24630: 46805420 */ cvt.s.w $f16,$f10 -/* 24634: 460c8482 */ mul.s $f18,$f16,$f12 -/* 24638: 46029103 */ div.s $f4,$f18,$f2 -/* 2463c: 10000051 */ b .L00024784 -/* 24640: e4640008 */ swc1 $f4,0x8($v1) -.L00024644: -/* 24644: 1000004f */ b .L00024784 -/* 24648: e4600008 */ swc1 $f0,0x8($v1) -/* 2464c: 448e4000 */ mtc1 $t6,$f8 -.L00024650: -/* 24650: 3c014f80 */ lui $at,0x4f80 -/* 24654: 05c10004 */ bgez $t6,.L00024668 -/* 24658: 468041a0 */ cvt.s.w $f6,$f8 -/* 2465c: 44815000 */ mtc1 $at,$f10 -/* 24660: 00000000 */ nop -/* 24664: 460a3180 */ add.s $f6,$f6,$f10 -.L00024668: -/* 24668: 460c3402 */ mul.s $f16,$f6,$f12 -/* 2466c: 3c014f80 */ lui $at,0x4f80 -/* 24670: 46028483 */ div.s $f18,$f16,$f2 -/* 24674: e4720004 */ swc1 $f18,0x4($v1) -/* 24678: 97ab0060 */ lhu $t3,0x60($sp) -/* 2467c: 448b2000 */ mtc1 $t3,$f4 -/* 24680: 05610004 */ bgez $t3,.L00024694 -/* 24684: 46802220 */ cvt.s.w $f8,$f4 -/* 24688: 44815000 */ mtc1 $at,$f10 -/* 2468c: 00000000 */ nop -/* 24690: 460a4200 */ add.s $f8,$f8,$f10 -.L00024694: -/* 24694: 460c4182 */ mul.s $f6,$f8,$f12 -/* 24698: 46023403 */ div.s $f16,$f6,$f2 -/* 2469c: 10000039 */ b .L00024784 -/* 246a0: e4700008 */ swc1 $f16,0x8($v1) -.L000246a4: -/* 246a4: 13200034 */ beqz $t9,.L00024778 -/* 246a8: 8fa3007c */ lw $v1,0x7c($sp) -/* 246ac: 8fa40054 */ lw $a0,0x54($sp) -/* 246b0: 24050020 */ addiu $a1,$zero,0x20 -/* 246b4: 0c008fd4 */ jal anim00023f50 -/* 246b8: 02203025 */ or $a2,$s1,$zero -/* 246bc: 27b00038 */ addiu $s0,$sp,0x38 -/* 246c0: afa20038 */ sw $v0,0x38($sp) -/* 246c4: 8fa3007c */ lw $v1,0x7c($sp) -/* 246c8: c6120000 */ lwc1 $f18,0x0($s0) -/* 246cc: 26310020 */ addiu $s1,$s1,0x20 -/* 246d0: 02203025 */ or $a2,$s1,$zero -/* 246d4: e4720000 */ swc1 $f18,0x0($v1) -/* 246d8: 8fa40054 */ lw $a0,0x54($sp) -/* 246dc: 0c008fd4 */ jal anim00023f50 -/* 246e0: 24050020 */ addiu $a1,$zero,0x20 -/* 246e4: afa20038 */ sw $v0,0x38($sp) -/* 246e8: 8fa3007c */ lw $v1,0x7c($sp) -/* 246ec: c6040000 */ lwc1 $f4,0x0($s0) -/* 246f0: 26310020 */ addiu $s1,$s1,0x20 -/* 246f4: 02203025 */ or $a2,$s1,$zero -/* 246f8: e4640004 */ swc1 $f4,0x4($v1) -/* 246fc: 8fa40054 */ lw $a0,0x54($sp) -/* 24700: 0c008fd4 */ jal anim00023f50 -/* 24704: 24050020 */ addiu $a1,$zero,0x20 -/* 24708: afa20038 */ sw $v0,0x38($sp) -/* 2470c: 8fa3007c */ lw $v1,0x7c($sp) -/* 24710: c60a0000 */ lwc1 $f10,0x0($s0) -/* 24714: 44800000 */ mtc1 $zero,$f0 -/* 24718: 26310020 */ addiu $s1,$s1,0x20 -/* 2471c: e46a0008 */ swc1 $f10,0x8($v1) -/* 24720: 8fa9006c */ lw $t1,0x6c($sp) -/* 24724: 51200018 */ beqzl $t1,.L00024788 -/* 24728: 8fad0028 */ lw $t5,0x28($sp) -/* 2472c: c4620004 */ lwc1 $f2,0x4($v1) -/* 24730: 3c017005 */ lui $at,%hi(var700546a0) -/* 24734: 46020032 */ c.eq.s $f0,$f2 -/* 24738: 00000000 */ nop -/* 2473c: 45030005 */ bc1tl .L00024754 -/* 24740: c4620008 */ lwc1 $f2,0x8($v1) -/* 24744: c42c46a0 */ lwc1 $f12,%lo(var700546a0)($at) -/* 24748: 46026201 */ sub.s $f8,$f12,$f2 -/* 2474c: e4680004 */ swc1 $f8,0x4($v1) -/* 24750: c4620008 */ lwc1 $f2,0x8($v1) -.L00024754: -/* 24754: 3c017005 */ lui $at,%hi(var700546a4) -/* 24758: c42c46a4 */ lwc1 $f12,%lo(var700546a4)($at) -/* 2475c: 46020032 */ c.eq.s $f0,$f2 -/* 24760: 00000000 */ nop -/* 24764: 45030008 */ bc1tl .L00024788 -/* 24768: 8fad0028 */ lw $t5,0x28($sp) -/* 2476c: 46026181 */ sub.s $f6,$f12,$f2 -/* 24770: 10000004 */ b .L00024784 -/* 24774: e4660008 */ swc1 $f6,0x8($v1) -.L00024778: -/* 24778: e4600008 */ swc1 $f0,0x8($v1) -/* 2477c: e4600004 */ swc1 $f0,0x4($v1) -/* 24780: e4600000 */ swc1 $f0,0x0($v1) -.L00024784: -/* 24784: 8fad0028 */ lw $t5,0x28($sp) -.L00024788: -/* 24788: 8fa40054 */ lw $a0,0x54($sp) -/* 2478c: 8fb00084 */ lw $s0,0x84($sp) -/* 24790: 31af0080 */ andi $t7,$t5,0x80 -/* 24794: 11e00018 */ beqz $t7,.L000247f8 -/* 24798: 3c013f80 */ lui $at,0x3f80 -/* 2479c: 24050020 */ addiu $a1,$zero,0x20 -/* 247a0: 0c008fd4 */ jal anim00023f50 -/* 247a4: 02203025 */ or $a2,$s1,$zero -/* 247a8: afa20034 */ sw $v0,0x34($sp) -/* 247ac: 8fb00084 */ lw $s0,0x84($sp) -/* 247b0: c7b00034 */ lwc1 $f16,0x34($sp) -/* 247b4: 26310020 */ addiu $s1,$s1,0x20 -/* 247b8: 02203025 */ or $a2,$s1,$zero -/* 247bc: e6100000 */ swc1 $f16,0x0($s0) -/* 247c0: 8fa40054 */ lw $a0,0x54($sp) -/* 247c4: 0c008fd4 */ jal anim00023f50 -/* 247c8: 24050020 */ addiu $a1,$zero,0x20 -/* 247cc: afa20034 */ sw $v0,0x34($sp) -/* 247d0: c7b20034 */ lwc1 $f18,0x34($sp) -/* 247d4: 26260020 */ addiu $a2,$s1,0x20 -/* 247d8: 24050020 */ addiu $a1,$zero,0x20 -/* 247dc: e6120004 */ swc1 $f18,0x4($s0) -/* 247e0: 0c008fd4 */ jal anim00023f50 -/* 247e4: 8fa40054 */ lw $a0,0x54($sp) -/* 247e8: afa20034 */ sw $v0,0x34($sp) -/* 247ec: c7a40034 */ lwc1 $f4,0x34($sp) -/* 247f0: 10000015 */ b .L00024848 -/* 247f4: e6040008 */ swc1 $f4,0x8($s0) -.L000247f8: -/* 247f8: 44811000 */ mtc1 $at,$f2 -/* 247fc: 00000000 */ nop -/* 24800: e6020008 */ swc1 $f2,0x8($s0) -/* 24804: e6020004 */ swc1 $f2,0x4($s0) -/* 24808: 1000000f */ b .L00024848 -/* 2480c: e6020000 */ swc1 $f2,0x0($s0) -.L00024810: -/* 24810: 8fa70080 */ lw $a3,0x80($sp) -/* 24814: 8fb00084 */ lw $s0,0x84($sp) -/* 24818: 44800000 */ mtc1 $zero,$f0 -/* 2481c: 3c013f80 */ lui $at,0x3f80 -/* 24820: 44811000 */ mtc1 $at,$f2 -/* 24824: e4600008 */ swc1 $f0,0x8($v1) -/* 24828: e4600004 */ swc1 $f0,0x4($v1) -/* 2482c: e4600000 */ swc1 $f0,0x0($v1) -/* 24830: e4e00000 */ swc1 $f0,0x0($a3) -/* 24834: e4e00004 */ swc1 $f0,0x4($a3) -/* 24838: e4e00008 */ swc1 $f0,0x8($a3) -/* 2483c: e6020000 */ swc1 $f2,0x0($s0) -/* 24840: e6020004 */ swc1 $f2,0x4($s0) -/* 24844: e6020008 */ swc1 $f2,0x8($s0) -.L00024848: -/* 24848: 8fbf001c */ lw $ra,0x1c($sp) -/* 2484c: 8fb00014 */ lw $s0,0x14($sp) -/* 24850: 8fb10018 */ lw $s1,0x18($sp) -/* 24854: 03e00008 */ jr $ra -/* 24858: 27bd0068 */ addiu $sp,$sp,0x68 -); +void anim00024050(s32 arg0, bool flip, struct skeleton *skel, s16 animnum, u8 arg4, struct coord *arg5, struct coord *arg6, struct coord *arg7) +{ + s32 i; + u16 sp5c[3]; + u8 sp5b; + u8 *sp54 = var8009a874[arg4]; + u8 bitsperentry; + u8 *ptr; + u8 *end; + s32 sum; + u32 stack; + + if (flip) { + arg0 = skel->things[arg0][1]; + } + + bitsperentry = g_Anims[animnum].initialposbitsperentry; + ptr = (u8 *)var8009a888[var8005f010[animnum]]; + sum = 0; + end = ptr + g_Anims[animnum].headerlen; + + for (i = 0; i < arg0 && ptr < end; i++) { + u8 flags = *ptr; + ptr++; + + if (flags & 0x08) { + sum += ptr[2] + ptr[5] + ptr[8] + ptr[11]; + ptr += 12; + } else if (flags & 0x02) { + sum += ptr[2] + ptr[5] + ptr[8]; + ptr += 9; + } else if (flags & 0x20) { + sum += ptr[0] + ptr[5] + ptr[10]; + ptr += 15; + } + + if (flags & 0x01) { + sum += ptr[2] + ptr[5] + ptr[8]; + ptr += 9; + } else if (flags & 0x10) { + sum += 96; + } + + if (flags & 0x40) { + sum += ptr[0]; + ptr += 5; + } + + if (flags & 0x80) { + sum += 0x60; + } + } + + if (ptr < end) { + u8 flags = *ptr; + ptr++; + + if (flags & 0x02) { + sp5b = ptr[2]; + arg6->x = (s16) (anim00023fe0(sp54, sp5b, sum) + (ptr[0] << 8) + ptr[1]); + sum += sp5b; + + sp5b = ptr[5]; + arg6->y = (s16) (anim00023fe0(sp54, sp5b, sum) + (ptr[3] << 8) + ptr[4]); + sum += sp5b; + + sp5b = ptr[8]; + arg6->z = (s16) (anim00023fe0(sp54, sp5b, sum) + (ptr[6] << 8) + ptr[7]); + sum += sp5b; + + ptr += 9; + } else if (flags & 0x20) { + sp5b = ptr[0]; + arg6->x = (anim00023f50(sp54, sp5b, sum) + ((ptr[1] << 24) + (ptr[2] << 16) + (ptr[3] << 8) + ptr[4])) * 0.001f; + sum += sp5b; + + sp5b = ptr[5]; + arg6->y = (anim00023f50(sp54, sp5b, sum) + ((ptr[6] << 24) + (ptr[7] << 16) + (ptr[8] << 8) + ptr[9])) * 0.001f; + sum += sp5b; + + sp5b = ptr[10]; + arg6->z = (anim00023f50(sp54, sp5b, sum) + ((ptr[11] << 24) + (ptr[12] << 16) + (ptr[13] << 8) + ptr[14])) * 0.001f; + sum += sp5b; + + ptr += 15; + } else { + if (flags & 0x08) { + sum += ptr[2] + ptr[5] + ptr[8] + ptr[11]; + ptr += 12; + } + + arg6->x = arg6->y = arg6->z = 0.0f; + } + + if (flags & 0x01) { + sp5b = ptr[2]; + sp5c[0] = anim00023f50(sp54, sp5b, sum); + sp5c[0] += (ptr[0] << 8) + ptr[1]; + sp5c[0] <<= 16 - bitsperentry; + sum += sp5b; + + sp5b = ptr[5]; + sp5c[1] = anim00023f50(sp54, sp5b, sum); + sp5c[1] += (ptr[3] << 8) + ptr[4]; + sp5c[1] <<= 16 - bitsperentry; + sum += sp5b; + + sp5b = ptr[8]; + sp5c[2] = anim00023f50(sp54, sp5b, sum); + sp5c[2] += (ptr[6] << 8) + ptr[7]; + sp5c[2] <<= 16 - bitsperentry; + sum += sp5b; + + arg5->x = sp5c[0] * M_BADTAU / 65536.0f; + + if (flip) { + if (sp5c[1] != 0) { + arg5->y = (0x10000 - sp5c[1]) * M_BADTAU / 65536.0f; + } else { + arg5->y = 0.0f; + } + + if (sp5c[2] != 0) { + arg5->z = (0x10000 - sp5c[2]) * M_BADTAU / 65536.0f; + } else { + arg5->z = 0.0f; + } + } else { + arg5->y = sp5c[1] * M_BADTAU / 65536.0f; + arg5->z = sp5c[2] * M_BADTAU / 65536.0f; + } + } else if (flags & 0x10) { + s32 sp38; + + sp38 = anim00023f50(sp54, 32, sum); + arg5->x = *(f32 *)&sp38; + sum += 32; + + sp38 = anim00023f50(sp54, 32, sum); + arg5->y = *(f32 *)&sp38; + sum += 32; + + sp38 = anim00023f50(sp54, 32, sum); + arg5->z = *(f32 *)&sp38; + sum += 32; + + if (flip) { + if (arg5->y != 0.0f) { + arg5->y = M_BADTAU - arg5->y; + } + + if (arg5->z != 0.0f) { + arg5->z = M_BADTAU - arg5->z; + } + } + } else { + arg5->x = arg5->y = arg5->z = 0.0f; + } + + if (flags & 0x80) { + s32 sp34; + + sp34 = anim00023f50(sp54, 32, sum); + arg7->x = *(f32 *)&sp34; + sum += 32; + + sp34 = anim00023f50(sp54, 32, sum); + arg7->y = *(f32 *)&sp34; + sum += 32; + + sp34 = anim00023f50(sp54, 32, sum); + arg7->z = *(f32 *)&sp34; + } else { + arg7->x = arg7->y = arg7->z = 1.0f; + } + + return; + } + + arg5->x = arg5->y = arg5->z = 0.0f; + arg6->x = arg6->y = arg6->z = 0.0f; + arg7->x = arg7->y = arg7->z = 1.0f; +} u16 anim0002485c(s32 arg0, bool arg1, struct skeleton *skel, s16 animnum, s32 loopframe, s16 *arg5, bool arg6) {