diff --git a/asm/non_matchings/unknown_080500/func_80096790.s b/asm/non_matchings/unknown_080500/func_80096790.s deleted file mode 100644 index 67c93da5..00000000 --- a/asm/non_matchings/unknown_080500/func_80096790.s +++ /dev/null @@ -1,50 +0,0 @@ -glabel func_80096790 -/* 097390 80096790 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 097394 80096794 AFBF0014 */ sw $ra, 0x14($sp) -/* 097398 80096798 0C01AF6C */ jal func_8006BDB0 -/* 09739C 8009679C 00000000 */ nop -/* 0973A0 800967A0 3C04800E */ lui $a0, %hi(D_800E0A24) # $a0, 0x800e -/* 0973A4 800967A4 AFA20018 */ sw $v0, 0x18($sp) -/* 0973A8 800967A8 0C02712A */ jal func_8009C4A8 -/* 0973AC 800967AC 24840A24 */ addiu $a0, %lo(D_800E0A24) # addiu $a0, $a0, 0xa24 -/* 0973B0 800967B0 8FAE0018 */ lw $t6, 0x18($sp) -/* 0973B4 800967B4 3C0F8012 */ lui $t7, %hi(D_80126BB8) # $t7, 0x8012 -/* 0973B8 800967B8 8DEF6BB8 */ lw $t7, %lo(D_80126BB8)($t7) -/* 0973BC 800967BC 81C20000 */ lb $v0, ($t6) -/* 0973C0 800967C0 11E0000B */ beqz $t7, .L800967F0 -/* 0973C4 800967C4 2442FFFF */ addiu $v0, $v0, -1 -/* 0973C8 800967C8 0002C080 */ sll $t8, $v0, 2 -/* 0973CC 800967CC 0302C023 */ subu $t8, $t8, $v0 -/* 0973D0 800967D0 0018C840 */ sll $t9, $t8, 1 -/* 0973D4 800967D4 3C04800E */ lui $a0, 0x800e -/* 0973D8 800967D8 00992021 */ addu $a0, $a0, $t9 -/* 0973DC 800967DC 84840710 */ lh $a0, 0x710($a0) -/* 0973E0 800967E0 0C027142 */ jal func_8009C508 -/* 0973E4 800967E4 AFA2001C */ sw $v0, 0x1c($sp) -/* 0973E8 800967E8 8FA2001C */ lw $v0, 0x1c($sp) -/* 0973EC 800967EC 00000000 */ nop -.L800967F0: -/* 0973F0 800967F0 3C088012 */ lui $t0, %hi(D_80126BBC) # $t0, 0x8012 -/* 0973F4 800967F4 8D086BBC */ lw $t0, %lo(D_80126BBC)($t0) -/* 0973F8 800967F8 3C018012 */ lui $at, %hi(D_80126BB8) # $at, 0x8012 -/* 0973FC 800967FC 11000009 */ beqz $t0, .L80096824 -/* 097400 80096800 AC206BB8 */ sw $zero, %lo(D_80126BB8)($at) -/* 097404 80096804 00024880 */ sll $t1, $v0, 2 -/* 097408 80096808 01224823 */ subu $t1, $t1, $v0 -/* 09740C 8009680C 00095040 */ sll $t2, $t1, 1 -/* 097410 80096810 3C04800E */ lui $a0, 0x800e -/* 097414 80096814 008A2021 */ addu $a0, $a0, $t2 -/* 097418 80096818 84840712 */ lh $a0, 0x712($a0) -/* 09741C 8009681C 0C027142 */ jal func_8009C508 -/* 097420 80096820 00000000 */ nop -.L80096824: -/* 097424 80096824 3C018012 */ lui $at, %hi(D_80126BBC) # $at, 0x8012 -/* 097428 80096828 0C02607A */ jal func_800981E8 -/* 09742C 8009682C AC206BBC */ sw $zero, %lo(D_80126BBC)($at) -/* 097430 80096830 0C00025A */ jal func_80000968 -/* 097434 80096834 00002025 */ move $a0, $zero -/* 097438 80096838 8FBF0014 */ lw $ra, 0x14($sp) -/* 09743C 8009683C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 097440 80096840 03E00008 */ jr $ra -/* 097444 80096844 00000000 */ nop - diff --git a/asm/non_matchings/unknown_080500/func_80097744.s b/asm/non_matchings/unknown_080500/func_80097744.s deleted file mode 100644 index 1549e51a..00000000 --- a/asm/non_matchings/unknown_080500/func_80097744.s +++ /dev/null @@ -1,44 +0,0 @@ -glabel func_80097744 -/* 098344 80097744 00001825 */ move $v1, $zero -/* 098348 80097748 24020001 */ li $v0, 1 -/* 09834C 8009774C 18A0001E */ blez $a1, .L800977C8 -/* 098350 80097750 00003025 */ move $a2, $zero -/* 098354 80097754 3C0A800E */ lui $t2, %hi(D_800E0F6C) # $t2, 0x800e -/* 098358 80097758 3C0C800E */ lui $t4, %hi(D_800E0F6C) # $t4, 0x800e -/* 09835C 8009775C 914B0F6C */ lbu $t3, %lo(D_800E0F6C)($t2) -/* 098360 80097760 258C0F6C */ addiu $t4, %lo(D_800E0F6C) # addiu $t4, $t4, 0xf6c -/* 098364 80097764 00803825 */ move $a3, $a0 -.L80097768: -/* 098368 80097768 90E40000 */ lbu $a0, ($a3) -/* 09836C 8009776C 00004825 */ move $t1, $zero -/* 098370 80097770 14800002 */ bnez $a0, .L8009777C -/* 098374 80097774 0003C140 */ sll $t8, $v1, 5 -/* 098378 80097778 00001025 */ move $v0, $zero -.L8009777C: -/* 09837C 8009777C 14400003 */ bnez $v0, .L8009778C -/* 098380 80097780 24C60001 */ addiu $a2, $a2, 1 -/* 098384 80097784 10000002 */ b .L80097790 -/* 098388 80097788 24080020 */ li $t0, 32 -.L8009778C: -/* 09838C 8009778C 308800FF */ andi $t0, $a0, 0xff -.L80097790: -/* 098390 80097790 110B0009 */ beq $t0, $t3, .L800977B8 -/* 098394 80097794 01002025 */ move $a0, $t0 -.L80097798: -/* 098398 80097798 25290001 */ addiu $t1, $t1, 1 -/* 09839C 8009779C 2921001F */ slti $at, $t1, 0x1f -/* 0983A0 800977A0 10200005 */ beqz $at, .L800977B8 -/* 0983A4 800977A4 01897021 */ addu $t6, $t4, $t1 -/* 0983A8 800977A8 91CF0000 */ lbu $t7, ($t6) -/* 0983AC 800977AC 00000000 */ nop -/* 0983B0 800977B0 148FFFF9 */ bne $a0, $t7, .L80097798 -/* 0983B4 800977B4 00000000 */ nop -.L800977B8: -/* 0983B8 800977B8 3139001F */ andi $t9, $t1, 0x1f -/* 0983BC 800977BC 24E70001 */ addiu $a3, $a3, 1 -/* 0983C0 800977C0 14C5FFE9 */ bne $a2, $a1, .L80097768 -/* 0983C4 800977C4 03191825 */ or $v1, $t8, $t9 -.L800977C8: -/* 0983C8 800977C8 03E00008 */ jr $ra -/* 0983CC 800977CC 00601025 */ move $v0, $v1 - diff --git a/src/mips1/unknown_080500.c b/src/mips1/unknown_080500.c index b193c466..59407a65 100644 --- a/src/mips1/unknown_080500.c +++ b/src/mips1/unknown_080500.c @@ -111,8 +111,6 @@ extern unk800DFA3C D_800DFA3C; extern s32 D_800DFAC0; extern s32 D_800DFAC4; extern s16 D_800DFA38; - - extern u32* D_800DFC10; extern u32* D_800DFC20; extern u32* D_800DFC30; @@ -203,7 +201,10 @@ extern s32 D_801263AC; extern s8 D_801263B4; extern s32 D_801263BC; extern s32 D_801263C4; -extern s8 D_801263D4[4]; +extern s8 D_801263D4; +extern s8 D_801263D5; +extern s8 D_801263D6; +extern s8 D_801263D7; extern s8 D_801263DC; extern s32 D_801263D8; extern s32 D_801263E0; @@ -221,14 +222,18 @@ extern u8 D_80126458; extern u8 D_80126459; extern u8 D_8012645A; extern u8 D_8012645B; +//extern s8 D_8012645C[4]; extern s8 D_8012645C; extern s8 D_8012645D; -extern u8 D_8012645E; -extern u8 D_8012645F; +extern s8 D_8012645E; +extern s8 D_8012645F; + +//extern s8 D_80126464[4]; extern s8 D_80126464; -extern u8 D_80126465; -extern u8 D_80126466; -extern u8 D_80126467; +extern s8 D_80126465; +extern s8 D_80126466; +extern s8 D_80126467; + extern u8 D_80126468; extern u8 D_80126469; extern u8 D_8012646A; @@ -278,6 +283,8 @@ extern s32 D_80126A6C; extern s32 D_80126A94; extern s32* D_80126AA0[16]; extern s32 D_80126BB4; +extern s32 D_80126BB8; +extern s32 D_80126BBC; extern s32 D_80126BC4; extern s32 D_80126BC8; extern s32 D_80126BCC; @@ -297,7 +304,7 @@ extern s32 D_80126C34; extern s32 D_80126C3C; extern u16 D_80126C40; extern u16 D_80126C42; -extern u16 D_80126C46; +extern s16 D_80126C46; extern u16 D_80126C44; extern s32 D_80126C48; extern s16 D_80126C4C; @@ -567,8 +574,6 @@ void func_800851FC(void) { func_800C422C(2); } -//GLOBAL_ASM("asm/non_matchings/unknown_080500/menu_save_options_init.s") - void menu_save_options_init(void) { D_80126A6C = 1; D_80126A10 = 0; @@ -677,7 +682,6 @@ GLOBAL_ASM("asm/non_matchings/unknown_080500/func_800867D4.s") #if 1 GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80086A48.s") #else - void func_80086A48(s32 arg0) { f32 temp, temp2, temp3; temp = D_80126BD4; @@ -688,7 +692,7 @@ void func_80086A48(s32 arg0) { D_80126BDC = D_80126BDC + temp3 * (temp - D_80126BDC); } if (D_801263E0 > 0 && D_80126A00 > 0) { - D_80126BEC = D_80126BEC + temp3 * (temp2 - D_80126BDC); + D_80126BEC = D_80126BEC + temp3 * (temp2 - D_80126BEC); } arg0--; } @@ -923,7 +927,131 @@ void func_8008A8F8(s32 arg0, s32 arg1, s32 arg2) { } } +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuMagicCodesListLoop.s") +#else + +extern s16 D_80126C80[0x1E]; // Array of shorts of the unlocked cheat's bit ids. +void func_8008AD1C(void); +void func_8008A56C(void); +s32 func_8006A554(s32 arg0); + +s32 MenuMagicCodesListLoop(s32 arg0) { + s32 temp_t0; + s32 phi_a2; + s32 phi_s0; + s32 sp48; + s32 phi_s1; + s32 phi_s2; + s32 phi_a3_2; + s32 phi_v0_2; + s32 phi_s3; + s8 *temp, *temp2; + + sp48 = 0; + if (D_800DF47C != 0) { + if (D_800DF47C > 0) { + D_800DF47C += arg0; + } else { + D_800DF47C -= arg0; + } + } + D_801263BC = (D_801263BC + arg0) & 0x3F; + if (D_800DF47C >= -0x13 && D_800DF47C < 0x14) { + func_8008A56C(); + } + + phi_s3 = 0; + phi_a2 = 0; + phi_s2 = 0; + if (D_801263C4 == 0 && D_800DF47C == 0) { + phi_s0 = 0; + temp = (s8*)&D_80126464; + temp2 = (s8*)&D_8012645C; + while(phi_s0 < 4) { + phi_s3 |= func_8006A554(phi_s0); + phi_a2 += *temp; + phi_s2 += *temp2; + temp++; + temp2++; + phi_s0++; + } + } + + phi_s0 = 0; + phi_s1 = 1; + phi_a3_2 = 0; + while(phi_s0 < 32) { // 32 is the max number of cheats. + if (phi_s1 & gUnlockedMagicCodes) { + D_80126C80[phi_a3_2] = phi_s0; + phi_a3_2++; + } + phi_s1 <<= 1; + phi_s0++; + } + + if (((phi_a2 < 0) || (phi_a2 > 0)) && (phi_a3_2 != D_80126C46)) { + func_80001D04(0xEF, NULL); + phi_s1 = 1 << D_80126C80[D_80126C46]; + gActiveMagicCodes ^= phi_s1; // Toggle active cheats? + func_8008A8F8(phi_s1, 0x10, 0x20); // func_8008A8F8() = Clear flags? + func_8008A8F8(phi_s1, 0x20, 0x10); + func_8008A8F8(phi_s1, 0x1000, 0x6080); + func_8008A8F8(phi_s1, 0x6080, 0x1000); + func_8008A8F8(phi_s1, 0x800, 0x1F8000); + func_8008A8F8(phi_s1, 0x1F8000, 0x800); + func_8008A8F8(phi_s1, 0x8000, 0xF0000); + func_8008A8F8(phi_s1, 0x10000, 0xE8000); + func_8008A8F8(phi_s1, 0x20000, 0xD8000); + func_8008A8F8(phi_s1, 0x40000, 0xB8000); + func_8008A8F8(phi_s1, 0x80000, 0x78000); + } + + phi_a2 = D_80126C46; + + if (phi_s2 < 0) { + D_80126C46++; + if (phi_a3_2 < D_80126C46) { + D_80126C46 = phi_a3_2; + } + } + if (phi_s2 > 0) { + D_80126C46--; + if ((s32) D_80126C46 < 0) { + D_80126C46 = 0; + } + } + + if (D_80126C46 < D_801263E0) { + D_801263E0 = D_80126C46; + } else if (D_80126C46 >= (D_801263E0 + D_80126C70)) { + D_801263E0 = (D_80126C46 - D_80126C70) + 1; + } + + if (D_80126C46 != phi_a2) { + func_80001D04(0xEB, NULL); + } + + if ((phi_s3 & 0x9000) && (phi_a3_2 == D_80126C46)) { + sp48 = -1; + } + if (phi_s3 & 0x4000) { + sp48 = -1; + } + if (sp48 != 0) { + D_800DF47C = sp48; + func_800C01D8(&D_800DF774); + func_80001D04(0x241, NULL); + } + if (D_800DF47C < -0x1E) { + func_8008AD1C(); + MenuInit(0xA); + return 0; + } + D_801263C4 = 0; + return 0; +} +#endif void func_8008AD1C(void) { func_8009C508(0x3F); @@ -948,7 +1076,45 @@ void func_8008AEB4(s32 arg0, s32 *arg1) { } } +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8008AF00.s") +#else +void func_8008AF00(s32 arg0) { + s32 i; + + D_800DF4BC = 1; + + i = 0; + while (i < 8) { + D_801263E8[i] = (i == arg0) ? 1 : -1; + i++; + } + + if (arg0 == 0) { + D_801263D4 = 1; + } else { + D_801263D4 = 0; + } + if (arg0 == 1) { + D_801263D5 = 1; + } else { + D_801263D5 = 0; + } + if (arg0 == 2) { + D_801263D6 = 1; + } else { + D_801263D6 = 0; + } + if (arg0 == 3) { + D_801263D7 = 1; + return; + } else { + D_801263D7 = 0; + return; + } +} +#endif + GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuCharacterSelectInit.s") void func_8008B20C(s32 arg0) { @@ -1330,7 +1496,6 @@ void func_8008E45C(void) { D_800E048C.unk8 = D_80126550[29]; } -//GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8008E4B0.s") void func_8008E4B0(void) { D_800E041C = D_80126550[61]; D_800E042C = D_80126550[60]; @@ -1485,13 +1650,6 @@ GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80094D28.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80095624.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80095728.s") -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80096790.s") -#else -extern s16 D_800E0710[30]; -extern s32 D_80126BB8; -extern s32 D_80126BBC; - void func_800981E8(void); void func_80096790(void) { @@ -1515,7 +1673,6 @@ void func_80096790(void) { func_800981E8(); func_80000968(0); } -#endif void menu_11_init(void) { Settings *settings; @@ -1575,10 +1732,6 @@ void func_800976F8(u32 arg0, char *output, s32 length) { } } -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80097744.s") -#else -// Almost matches, except for some regalloc issues. s32 func_80097744(unsigned char *arg0, s32 arg1) { s32 i; u32 output; @@ -1596,12 +1749,13 @@ s32 func_80097744(unsigned char *arg0, s32 arg1) { if (!processingChars) { currentChar = ' '; + charIndex = 0; } else { currentChar = arg0[i]; + charIndex = 0; } - charIndex = 0; - while (D_800E0F6C[charIndex] != currentChar) { + while (currentChar != D_800E0F6C[charIndex]) { charIndex++; if (charIndex >= 0x1F) { break; @@ -1614,7 +1768,6 @@ s32 func_80097744(unsigned char *arg0, s32 arg1) { return output; } -#endif GLOBAL_ASM("asm/non_matchings/unknown_080500/func_800977D0.s") @@ -1738,19 +1891,22 @@ GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80098EBC.s") void func_80098EBC(s32 arg0) { s32 fade; s32 i; + s32 test; + s32 test2; D_801263BC = (D_801263BC + arg0) & 0x3F; - arg0 = D_801263BC * 8; - if (arg0 >= 0x100) { - arg0 = 0x1FF - arg0; + test = D_801263BC * 8; + if (test >= 0x100) { + test = 0x1FF - test; } // Has regalloc issues starting here. for (i = 0; i < D_800E0FE4; i++) { fade = 0xFF; + if (D_800DF4BC < 3 && ((D_801263E0 == 0 && D_80126418[i] != 0) || (D_801263E0 != 0 && D_80126420[i] != 0))) { - fade = (arg0 >> 1) + 0x80; + fade = (test >> 1) + 0x80; } D_800E1088[i][0].filterRed = fade; D_800E1088[i][0].filterGreen = fade; @@ -2040,7 +2196,7 @@ s8 func_8009C280(s32 arg0) { if (arg0 < 0 || arg0 >= 4) { return -1; } - if (D_801263D4[arg0] == 0) { + if (*(&D_801263D4 + arg0) == 0) { return -1; } return D_801263E8[arg0]; @@ -2126,7 +2282,6 @@ void func_8007CCB0(u32 arg0); void func_8000FFB8(u32 arg0); void func_8005FF40(u32 arg0); -//GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8009C508.s") void func_8009C508(s32 arg0) { if (D_80126750[arg0] != 0) { if (D_80126550[arg0] != 0) { @@ -2186,7 +2341,6 @@ void func_8009C8A4(s16 *arg0) { GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8009C904.s") # else s32 func_8006F94C(s32, s32); -unk8009C904 *func_80070C9C(s32, u32); void func_8009C904(s32 arg0) { if (D_800DF75C == NULL) { D_800DF75C = func_80070C9C(0x240, 0xFF0000FF);