From c4048a1e1cc92a48cf9875b5b4c61e56e445a0f8 Mon Sep 17 00:00:00 2001 From: ChiefFruitcake <96551211+ChiefFruitcake@users.noreply.github.com> Date: Sat, 1 Jan 2022 20:11:03 -0500 Subject: [PATCH] Code 80281FA0 decomp (#126) * Match a few functions in code_80281FA0.c * Match func_80282200 --- .../code_80281FA0/func_802821A0.s | 27 ---- .../code_80281FA0/func_80282200.s | 49 ------- .../code_80281FA0/func_802822AC.s | 52 -------- .../code_80281FA0/func_80282364.s | 49 ------- .../code_80281FA0/func_802832C4.s | 31 ----- src/code_80281FA0.c | 121 ++++++------------ 6 files changed, 42 insertions(+), 287 deletions(-) delete mode 100644 asm/non_matchings/code_80281FA0/func_802821A0.s delete mode 100644 asm/non_matchings/code_80281FA0/func_80282200.s delete mode 100644 asm/non_matchings/code_80281FA0/func_802822AC.s delete mode 100644 asm/non_matchings/code_80281FA0/func_80282364.s delete mode 100644 asm/non_matchings/code_80281FA0/func_802832C4.s diff --git a/asm/non_matchings/code_80281FA0/func_802821A0.s b/asm/non_matchings/code_80281FA0/func_802821A0.s deleted file mode 100644 index dc7943085..000000000 --- a/asm/non_matchings/code_80281FA0/func_802821A0.s +++ /dev/null @@ -1,27 +0,0 @@ -glabel func_802821A0 -/* 1257E0 802821A0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 1257E4 802821A4 44810000 */ mtc1 $at, $f0 -/* 1257E8 802821A8 44866000 */ mtc1 $a2, $f12 -/* 1257EC 802821AC 44857000 */ mtc1 $a1, $f14 -/* 1257F0 802821B0 24020001 */ li $v0, 1 -/* 1257F4 802821B4 460C003C */ c.lt.s $f0, $f12 -/* 1257F8 802821B8 00000000 */ nop -/* 1257FC 802821BC 45020003 */ bc1fl .L802821CC -/* 125800 802821C0 C4800000 */ lwc1 $f0, ($a0) -/* 125804 802821C4 46000306 */ mov.s $f12, $f0 -/* 125808 802821C8 C4800000 */ lwc1 $f0, ($a0) -.L802821CC: -/* 12580C 802821CC 46007101 */ sub.s $f4, $f14, $f0 -/* 125810 802821D0 460C2182 */ mul.s $f6, $f4, $f12 -/* 125814 802821D4 46003200 */ add.s $f8, $f6, $f0 -/* 125818 802821D8 E4880000 */ swc1 $f8, ($a0) -/* 12581C 802821DC C48A0000 */ lwc1 $f10, ($a0) -/* 125820 802821E0 460A7032 */ c.eq.s $f14, $f10 -/* 125824 802821E4 00000000 */ nop -/* 125828 802821E8 45000003 */ bc1f .L802821F8 -/* 12582C 802821EC 00000000 */ nop -/* 125830 802821F0 03E00008 */ jr $ra -/* 125834 802821F4 00001025 */ move $v0, $zero -.L802821F8: -/* 125838 802821F8 03E00008 */ jr $ra -/* 12583C 802821FC 00000000 */ nop diff --git a/asm/non_matchings/code_80281FA0/func_80282200.s b/asm/non_matchings/code_80281FA0/func_80282200.s deleted file mode 100644 index 54e222e87..000000000 --- a/asm/non_matchings/code_80281FA0/func_80282200.s +++ /dev/null @@ -1,49 +0,0 @@ -glabel func_80282200 -/* 125840 80282200 00057400 */ sll $t6, $a1, 0x10 -/* 125844 80282204 0006C400 */ sll $t8, $a2, 0x10 -/* 125848 80282208 0018CC03 */ sra $t9, $t8, 0x10 -/* 12584C 8028220C 000E7C03 */ sra $t7, $t6, 0x10 -/* 125850 80282210 AFA50004 */ sw $a1, 4($sp) -/* 125854 80282214 AFA60008 */ sw $a2, 8($sp) -/* 125858 80282218 03203025 */ move $a2, $t9 -/* 12585C 8028221C 01E02825 */ move $a1, $t7 -/* 125860 80282220 17200003 */ bnez $t9, .L80282230 -/* 125864 80282224 84820000 */ lh $v0, ($a0) -/* 125868 80282228 10000018 */ b .L8028228C -/* 12586C 8028222C A4850000 */ sh $a1, ($a0) -.L80282230: -/* 125870 80282230 00451023 */ subu $v0, $v0, $a1 -/* 125874 80282234 00024400 */ sll $t0, $v0, 0x10 -/* 125878 80282238 00084C03 */ sra $t1, $t0, 0x10 -/* 12587C 8028223C 0126001A */ div $zero, $t1, $a2 -/* 125880 80282240 01201025 */ move $v0, $t1 -/* 125884 80282244 14C00002 */ bnez $a2, .L80282250 -/* 125888 80282248 00000000 */ nop -/* 12588C 8028224C 0007000D */ break 7 -.L80282250: -/* 125890 80282250 2401FFFF */ li $at, -1 -/* 125894 80282254 14C10004 */ bne $a2, $at, .L80282268 -/* 125898 80282258 3C018000 */ lui $at, 0x8000 -/* 12589C 8028225C 14410002 */ bne $v0, $at, .L80282268 -/* 1258A0 80282260 00000000 */ nop -/* 1258A4 80282264 0006000D */ break 6 -.L80282268: -/* 1258A8 80282268 00005012 */ mflo $t2 -/* 1258AC 8028226C 004A1023 */ subu $v0, $v0, $t2 -/* 1258B0 80282270 00025C00 */ sll $t3, $v0, 0x10 -/* 1258B4 80282274 000B6403 */ sra $t4, $t3, 0x10 -/* 1258B8 80282278 01851021 */ addu $v0, $t4, $a1 -/* 1258BC 8028227C 00026C00 */ sll $t5, $v0, 0x10 -/* 1258C0 80282280 000D7403 */ sra $t6, $t5, 0x10 -/* 1258C4 80282284 01C01025 */ move $v0, $t6 -/* 1258C8 80282288 A48E0000 */ sh $t6, ($a0) -.L8028228C: -/* 1258CC 8028228C 848F0000 */ lh $t7, ($a0) -/* 1258D0 80282290 24020001 */ li $v0, 1 -/* 1258D4 80282294 14AF0003 */ bne $a1, $t7, .L802822A4 -/* 1258D8 80282298 00000000 */ nop -/* 1258DC 8028229C 03E00008 */ jr $ra -/* 1258E0 802822A0 00001025 */ move $v0, $zero -.L802822A4: -/* 1258E4 802822A4 03E00008 */ jr $ra -/* 1258E8 802822A8 00000000 */ nop diff --git a/asm/non_matchings/code_80281FA0/func_802822AC.s b/asm/non_matchings/code_80281FA0/func_802822AC.s deleted file mode 100644 index 4e448da8a..000000000 --- a/asm/non_matchings/code_80281FA0/func_802822AC.s +++ /dev/null @@ -1,52 +0,0 @@ -glabel func_802822AC -/* 1258EC 802822AC 44867000 */ mtc1 $a2, $f14 -/* 1258F0 802822B0 44801000 */ mtc1 $zero, $f2 -/* 1258F4 802822B4 44856000 */ mtc1 $a1, $f12 -/* 1258F8 802822B8 C4840000 */ lwc1 $f4, ($a0) -/* 1258FC 802822BC 4602703C */ c.lt.s $f14, $f2 -/* 125900 802822C0 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 125904 802822C4 24020001 */ li $v0, 1 -/* 125908 802822C8 46046001 */ sub.s $f0, $f12, $f4 -/* 12590C 802822CC 45020006 */ bc1fl .L802822E8 -/* 125910 802822D0 4600103C */ c.lt.s $f2, $f0 -/* 125914 802822D4 44813000 */ mtc1 $at, $f6 -/* 125918 802822D8 00000000 */ nop -/* 12591C 802822DC 460E3382 */ mul.s $f14, $f6, $f14 -/* 125920 802822E0 00000000 */ nop -/* 125924 802822E4 4600103C */ c.lt.s $f2, $f0 -.L802822E8: -/* 125928 802822E8 00000000 */ nop -/* 12592C 802822EC 4502000C */ bc1fl .L80282320 -/* 125930 802822F0 460E0000 */ add.s $f0, $f0, $f14 -/* 125934 802822F4 460E0001 */ sub.s $f0, $f0, $f14 -/* 125938 802822F8 4600103C */ c.lt.s $f2, $f0 -/* 12593C 802822FC 00000000 */ nop -/* 125940 80282300 45000004 */ bc1f .L80282314 -/* 125944 80282304 00000000 */ nop -/* 125948 80282308 46006201 */ sub.s $f8, $f12, $f0 -/* 12594C 8028230C 1000000C */ b .L80282340 -/* 125950 80282310 E4880000 */ swc1 $f8, ($a0) -.L80282314: -/* 125954 80282314 1000000A */ b .L80282340 -/* 125958 80282318 E48C0000 */ swc1 $f12, ($a0) -/* 12595C 8028231C 460E0000 */ add.s $f0, $f0, $f14 -.L80282320: -/* 125960 80282320 4602003C */ c.lt.s $f0, $f2 -/* 125964 80282324 00000000 */ nop -/* 125968 80282328 45020005 */ bc1fl .L80282340 -/* 12596C 8028232C E48C0000 */ swc1 $f12, ($a0) -/* 125970 80282330 46006281 */ sub.s $f10, $f12, $f0 -/* 125974 80282334 10000002 */ b .L80282340 -/* 125978 80282338 E48A0000 */ swc1 $f10, ($a0) -/* 12597C 8028233C E48C0000 */ swc1 $f12, ($a0) -.L80282340: -/* 125980 80282340 C4900000 */ lwc1 $f16, ($a0) -/* 125984 80282344 46106032 */ c.eq.s $f12, $f16 -/* 125988 80282348 00000000 */ nop -/* 12598C 8028234C 45000003 */ bc1f .L8028235C -/* 125990 80282350 00000000 */ nop -/* 125994 80282354 03E00008 */ jr $ra -/* 125998 80282358 00001025 */ move $v0, $zero -.L8028235C: -/* 12599C 8028235C 03E00008 */ jr $ra -/* 1259A0 80282360 00000000 */ nop diff --git a/asm/non_matchings/code_80281FA0/func_80282364.s b/asm/non_matchings/code_80281FA0/func_80282364.s deleted file mode 100644 index 8eddc68e4..000000000 --- a/asm/non_matchings/code_80281FA0/func_80282364.s +++ /dev/null @@ -1,49 +0,0 @@ -glabel func_80282364 -/* 1259A4 80282364 AFA50004 */ sw $a1, 4($sp) -/* 1259A8 80282368 AFA60008 */ sw $a2, 8($sp) -/* 1259AC 8028236C 84880000 */ lh $t0, ($a0) -/* 1259B0 80282370 00057400 */ sll $t6, $a1, 0x10 -/* 1259B4 80282374 000E2C03 */ sra $a1, $t6, 0x10 -/* 1259B8 80282378 0006C400 */ sll $t8, $a2, 0x10 -/* 1259BC 8028237C 00A81023 */ subu $v0, $a1, $t0 -/* 1259C0 80282380 0018CC03 */ sra $t9, $t8, 0x10 -/* 1259C4 80282384 00024C00 */ sll $t1, $v0, 0x10 -/* 1259C8 80282388 03203025 */ move $a2, $t9 -/* 1259CC 8028238C 07210004 */ bgez $t9, .L802823A0 -/* 1259D0 80282390 00091403 */ sra $v0, $t1, 0x10 -/* 1259D4 80282394 00195823 */ negu $t3, $t9 -/* 1259D8 80282398 000B6400 */ sll $t4, $t3, 0x10 -/* 1259DC 8028239C 000C3403 */ sra $a2, $t4, 0x10 -.L802823A0: -/* 1259E0 802823A0 5840000B */ blezl $v0, .L802823D0 -/* 1259E4 802823A4 00461021 */ addu $v0, $v0, $a2 -/* 1259E8 802823A8 00461023 */ subu $v0, $v0, $a2 -/* 1259EC 802823AC 00027400 */ sll $t6, $v0, 0x10 -/* 1259F0 802823B0 000E7C03 */ sra $t7, $t6, 0x10 -/* 1259F4 802823B4 05E00003 */ bltz $t7, .L802823C4 -/* 1259F8 802823B8 00AFC023 */ subu $t8, $a1, $t7 -/* 1259FC 802823BC 1000000B */ b .L802823EC -/* 125A00 802823C0 A4980000 */ sh $t8, ($a0) -.L802823C4: -/* 125A04 802823C4 10000009 */ b .L802823EC -/* 125A08 802823C8 A4850000 */ sh $a1, ($a0) -/* 125A0C 802823CC 00461021 */ addu $v0, $v0, $a2 -.L802823D0: -/* 125A10 802823D0 0002CC00 */ sll $t9, $v0, 0x10 -/* 125A14 802823D4 00194403 */ sra $t0, $t9, 0x10 -/* 125A18 802823D8 1D000003 */ bgtz $t0, .L802823E8 -/* 125A1C 802823DC 00A84823 */ subu $t1, $a1, $t0 -/* 125A20 802823E0 10000002 */ b .L802823EC -/* 125A24 802823E4 A4890000 */ sh $t1, ($a0) -.L802823E8: -/* 125A28 802823E8 A4850000 */ sh $a1, ($a0) -.L802823EC: -/* 125A2C 802823EC 848A0000 */ lh $t2, ($a0) -/* 125A30 802823F0 24020001 */ li $v0, 1 -/* 125A34 802823F4 14AA0003 */ bne $a1, $t2, .L80282404 -/* 125A38 802823F8 00000000 */ nop -/* 125A3C 802823FC 03E00008 */ jr $ra -/* 125A40 80282400 00001025 */ move $v0, $zero -.L80282404: -/* 125A44 80282404 03E00008 */ jr $ra -/* 125A48 80282408 00000000 */ nop diff --git a/asm/non_matchings/code_80281FA0/func_802832C4.s b/asm/non_matchings/code_80281FA0/func_802832C4.s deleted file mode 100644 index 13b2ec91b..000000000 --- a/asm/non_matchings/code_80281FA0/func_802832C4.s +++ /dev/null @@ -1,31 +0,0 @@ -glabel func_802832C4 -/* 126904 802832C4 3C028028 */ lui $v0, %hi(D_802876D2) # $v0, 0x8028 -/* 126908 802832C8 844276D2 */ lh $v0, %lo(D_802876D2)($v0) -/* 12690C 802832CC 27BDFFE8 */ addiu $sp, $sp, -0x18 -/* 126910 802832D0 00067400 */ sll $t6, $a2, 0x10 -/* 126914 802832D4 000E7C03 */ sra $t7, $t6, 0x10 -/* 126918 802832D8 0007C400 */ sll $t8, $a3, 0x10 -/* 12691C 802832DC 004F082A */ slt $at, $v0, $t7 -/* 126920 802832E0 0018CC03 */ sra $t9, $t8, 0x10 -/* 126924 802832E4 AFBF0014 */ sw $ra, 0x14($sp) -/* 126928 802832E8 AFA40018 */ sw $a0, 0x18($sp) -/* 12692C 802832EC AFA60020 */ sw $a2, 0x20($sp) -/* 126930 802832F0 1420000A */ bnez $at, .L8028331C -/* 126934 802832F4 AFA70024 */ sw $a3, 0x24($sp) -/* 126938 802832F8 2401FFFF */ li $at, -1 -/* 12693C 802832FC 13210003 */ beq $t9, $at, .L8028330C -/* 126940 80283300 0322082A */ slt $at, $t9, $v0 -/* 126944 80283304 54200006 */ bnel $at, $zero, .L80283320 -/* 126948 80283308 8FBF0014 */ lw $ra, 0x14($sp) -.L8028330C: -/* 12694C 8028330C 8FB90018 */ lw $t9, 0x18($sp) -/* 126950 80283310 00A02025 */ move $a0, $a1 -/* 126954 80283314 0320F809 */ jalr $t9 -/* 126958 80283318 00000000 */ nop -.L8028331C: -/* 12695C 8028331C 8FBF0014 */ lw $ra, 0x14($sp) -.L80283320: -/* 126960 80283320 27BD0018 */ addiu $sp, $sp, 0x18 -/* 126964 80283324 00001025 */ move $v0, $zero -/* 126968 80283328 03E00008 */ jr $ra -/* 12696C 8028332C 00000000 */ nop diff --git a/src/code_80281FA0.c b/src/code_80281FA0.c index fc9205e9d..cb8e2f35a 100644 --- a/src/code_80281FA0.c +++ b/src/code_80281FA0.c @@ -7,8 +7,9 @@ extern Player *gPlayerOne; extern Player *gPlayerTwo; extern Player *gPlayerThree; extern Player *gPlayerFour; +extern s16 D_802876D2; -s32 func_802832C4(s32, s32, s16, s16); +s32 func_802832C4(void (*)(s32), s32, s16, s16); void func_80281FA0(Vec3f arg0, f32 arg1, f32 arg2, f32 arg3) { arg0[0] = arg1; @@ -96,122 +97,93 @@ void func_802820F8(void *arg0, u16 arg2) { GLOBAL_ASM("asm/non_matchings/code_80281FA0/func_802820F8.s") #endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -? func_802821A0(f32 *arg0, f32 arg1, f32 arg2) { - f32 temp_f0; - f32 phi_f12; - - phi_f12 = arg2; +s32 func_802821A0(f32* arg0, f32 arg1, f32 arg2) { if (arg2 > 1.0f) { - phi_f12 = 1.0f; + arg2 = 1.0f; } - temp_f0 = *arg0; - *arg0 = ((arg1 - temp_f0) * phi_f12) + temp_f0; + + *arg0 = *arg0 + ((arg1 - *arg0) * arg2); + if (arg1 == *arg0) { return 0; } return 1; } -#else -GLOBAL_ASM("asm/non_matchings/code_80281FA0/func_802821A0.s") -#endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -? func_80282200(s16 *arg0, s16 arg1, s16 arg2) { - s16 temp_v0; +s32 func_80282200(s16* arg0, s16 arg1, s16 arg2) { + s16 temp_v0 = *arg0; if (arg2 == 0) { *arg0 = arg1; } else { - temp_v0 = *arg0 - arg1; - *arg0 = (temp_v0 - (temp_v0 / arg2)) + arg1; + temp_v0 -= arg1; + temp_v0 -= (temp_v0 / arg2); + temp_v0 += arg1; + *arg0 = temp_v0; } + if (arg1 == *arg0) { return 0; } return 1; } -#else -GLOBAL_ASM("asm/non_matchings/code_80281FA0/func_80282200.s") -#endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -? func_802822AC(f32 *arg0, f32 arg1, f32 arg2) { - f32 temp_f0; - f32 temp_f0_2; - f32 temp_f0_3; - f32 phi_f14; - - temp_f0 = arg1 - *arg0; - phi_f14 = arg2; +s32 func_802822AC(f32* arg0, f32 arg1, f32 arg2) { + f32 temp_f0 = arg1 - *arg0; + if (arg2 < 0.0f) { - phi_f14 = -1.0f * arg2; + arg2 = -1.0f * arg2; } + if (temp_f0 > 0.0f) { - temp_f0_2 = temp_f0 - phi_f14; - if (temp_f0_2 > 0.0f) { - *arg0 = arg1 - temp_f0_2; + temp_f0 -= arg2; + if (temp_f0 > 0.0f) { + *arg0 = arg1 - temp_f0; } else { - goto block_8; + *arg0 = arg1; } } else { - temp_f0_3 = temp_f0 + phi_f14; - if (temp_f0_3 < 0.0f) { - *arg0 = arg1 - temp_f0_3; + temp_f0 += arg2; + if (temp_f0 < 0.0f) { + *arg0 = arg1 - temp_f0; } else { -block_8: *arg0 = arg1; } } + if (arg1 == *arg0) { return 0; } return 1; } -#else -GLOBAL_ASM("asm/non_matchings/code_80281FA0/func_802822AC.s") -#endif -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -? func_80282364(s16 *arg0, s16 arg1, s16 arg2) { - s16 temp_v0; - s16 temp_v0_2; - s16 temp_v0_3; - s16 phi_a2; +s32 func_80282364(s16* arg0, s16 arg1, s16 arg2) { + s16 temp_v0 = arg1 - *arg0; - temp_v0 = arg1 - *arg0; - phi_a2 = arg2; if (arg2 < 0) { - phi_a2 = arg2 * -1; + arg2 = arg2 * -1; } - if (temp_v0 > 0) { - temp_v0_2 = temp_v0 - phi_a2; - if (temp_v0_2 >= 0) { - *arg0 = arg1 - temp_v0_2; + if ( temp_v0 > 0) { + temp_v0 -= arg2; + if (temp_v0 >= 0) { + *arg0 = arg1 - temp_v0; } else { - goto block_8; + *arg0 = arg1; } } else { - temp_v0_3 = temp_v0 + phi_a2; - if (temp_v0_3 <= 0) { - *arg0 = arg1 - temp_v0_3; + temp_v0 += arg2; + if (temp_v0 <= 0) { + *arg0 = arg1 - temp_v0; } else { -block_8: *arg0 = arg1; } } + if (arg1 == *arg0) { return 0; } return 1; } -#else -GLOBAL_ASM("asm/non_matchings/code_80281FA0/func_80282364.s") -#endif extern f32 D_80287B18; extern s16 D_80287B1C; @@ -677,21 +649,12 @@ void func_80283240(s16 arg0) { } } -#ifdef MIPS_TO_C -//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307 -extern s16 D_802876D2; - -s32 func_802832C4(s32 arg0, s32 arg1, s16 arg2, s16 arg3) { - +s32 func_802832C4(void (*func_ptr)(s32), s32 arg1, s16 arg2, s16 arg3) { if ((D_802876D2 >= arg2) && ((arg3 == -1) || (arg3 >= D_802876D2))) { - return arg0; + func_ptr(arg1); } - return arg1; + return 0; } -#else -GLOBAL_ASM("asm/non_matchings/code_80281FA0/func_802832C4.s") -#endif - extern s16 D_802876D0; extern s16 D_802876D2;