diff --git a/asm/non_matchings/unknown_080500/MenuOptionsLoop.s b/asm/non_matchings/unknown_080500/MenuOptionsLoop.s index f40b35a7..4128349a 100644 --- a/asm/non_matchings/unknown_080500/MenuOptionsLoop.s +++ b/asm/non_matchings/unknown_080500/MenuOptionsLoop.s @@ -127,12 +127,12 @@ glabel MenuOptionsLoop /* 085130 80084530 00000000 */ nop /* 085134 80084534 14400005 */ bnez $v0, .L8008454C /* 085138 80084538 00000000 */ nop -/* 08513C 8008453C 0C027AE5 */ jal func_8009EB94 +/* 08513C 8008453C 0C027AE5 */ jal set_language /* 085140 80084540 24040002 */ li $a0, 2 /* 085144 80084544 10000004 */ b .L80084558 /* 085148 80084548 240400EB */ li $a0, 235 .L8008454C: -/* 08514C 8008454C 0C027AE5 */ jal func_8009EB94 +/* 08514C 8008454C 0C027AE5 */ jal set_language /* 085150 80084550 00002025 */ move $a0, $zero /* 085154 80084554 240400EB */ li $a0, 235 .L80084558: diff --git a/asm/non_matchings/unknown_080500/func_80081800.s b/asm/non_matchings/unknown_080500/func_80081800.s deleted file mode 100644 index 079292ee..00000000 --- a/asm/non_matchings/unknown_080500/func_80081800.s +++ /dev/null @@ -1,273 +0,0 @@ -glabel func_80081800 -/* 082400 80081800 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 082404 80081804 3C01800E */ lui $at, %hi(D_800DF4A4) # $at, 0x800e -/* 082408 80081808 93AF0073 */ lbu $t7, 0x73($sp) -/* 08240C 8008180C A027F4A4 */ sb $a3, %lo(D_800DF4A4)($at) -/* 082410 80081810 3C01800E */ lui $at, %hi(D_800DF4A8) # $at, 0x800e -/* 082414 80081814 93B80077 */ lbu $t8, 0x77($sp) -/* 082418 80081818 93B9007B */ lbu $t9, 0x7b($sp) -/* 08241C 8008181C A02FF4A8 */ sb $t7, %lo(D_800DF4A8)($at) -/* 082420 80081820 AFB00018 */ sw $s0, 0x18($sp) -/* 082424 80081824 3C01800E */ lui $at, %hi(D_800DF4AC) # $at, 0x800e -/* 082428 80081828 00A08025 */ move $s0, $a1 -/* 08242C 8008182C AFBF0034 */ sw $ra, 0x34($sp) -/* 082430 80081830 AFB60030 */ sw $s6, 0x30($sp) -/* 082434 80081834 AFB5002C */ sw $s5, 0x2c($sp) -/* 082438 80081838 AFB40028 */ sw $s4, 0x28($sp) -/* 08243C 8008183C AFB30024 */ sw $s3, 0x24($sp) -/* 082440 80081840 AFB20020 */ sw $s2, 0x20($sp) -/* 082444 80081844 AFB1001C */ sw $s1, 0x1c($sp) -/* 082448 80081848 AFA7006C */ sw $a3, 0x6c($sp) -/* 08244C 8008184C 17200015 */ bnez $t9, .L800818A4 -/* 082450 80081850 A038F4AC */ sb $t8, %lo(D_800DF4AC)($at) -/* 082454 80081854 44862000 */ mtc1 $a2, $f4 -/* 082458 80081858 3C12800E */ lui $s2, %hi(D_800DF75C) # $s2, 0x800e -/* 08245C 8008185C 468021A0 */ cvt.s.w $f6, $f4 -/* 082460 80081860 2652F75C */ addiu $s2, %lo(D_800DF75C) # addiu $s2, $s2, -0x8a4 -/* 082464 80081864 24C9FFFE */ addiu $t1, $a2, -2 -/* 082468 80081868 8E480000 */ lw $t0, ($s2) -/* 08246C 8008186C 44894000 */ mtc1 $t1, $f8 -/* 082470 80081870 E5060010 */ swc1 $f6, 0x10($t0) -/* 082474 80081874 468042A0 */ cvt.s.w $f10, $f8 -/* 082478 80081878 8E4A0000 */ lw $t2, ($s2) -/* 08247C 8008187C 240B000B */ li $t3, 11 -/* 082480 80081880 240C000A */ li $t4, 10 -/* 082484 80081884 E54A0030 */ swc1 $f10, 0x30($t2) -/* 082488 80081888 00009825 */ move $s3, $zero -/* 08248C 8008188C 24150001 */ li $s5, 1 -/* 082490 80081890 24B0FFD9 */ addiu $s0, $a1, -0x27 -/* 082494 80081894 2416000C */ li $s6, 12 -/* 082498 80081898 AFAB0044 */ sw $t3, 0x44($sp) -/* 08249C 8008189C 10000014 */ b .L800818F0 -/* 0824A0 800818A0 AFAC0040 */ sw $t4, 0x40($sp) -.L800818A4: -/* 0824A4 800818A4 44868000 */ mtc1 $a2, $f16 -/* 0824A8 800818A8 3C12800E */ lui $s2, %hi(D_800DF75C) # $s2, 0x800e -/* 0824AC 800818AC 468084A0 */ cvt.s.w $f18, $f16 -/* 0824B0 800818B0 2652F75C */ addiu $s2, %lo(D_800DF75C) # addiu $s2, $s2, -0x8a4 -/* 0824B4 800818B4 24CEFFFF */ addiu $t6, $a2, -1 -/* 0824B8 800818B8 8E4D0000 */ lw $t5, ($s2) -/* 0824BC 800818BC 448E2000 */ mtc1 $t6, $f4 -/* 0824C0 800818C0 E5B20050 */ swc1 $f18, 0x50($t5) -/* 0824C4 800818C4 468021A0 */ cvt.s.w $f6, $f4 -/* 0824C8 800818C8 8E4F0000 */ lw $t7, ($s2) -/* 0824CC 800818CC 24180009 */ li $t8, 9 -/* 0824D0 800818D0 E5E60070 */ swc1 $f6, 0x70($t7) -/* 0824D4 800818D4 24190005 */ li $t9, 5 -/* 0824D8 800818D8 24130002 */ li $s3, 2 -/* 0824DC 800818DC 24150003 */ li $s5, 3 -/* 0824E0 800818E0 2610FFE4 */ addiu $s0, $s0, -0x1c -/* 0824E4 800818E4 24160009 */ li $s6, 9 -/* 0824E8 800818E8 AFB80044 */ sw $t8, 0x44($sp) -/* 0824EC 800818EC AFB90040 */ sw $t9, 0x40($sp) -.L800818F0: -/* 0824F0 800818F0 27A5005C */ addiu $a1, $sp, 0x5c -/* 0824F4 800818F4 27A60058 */ addiu $a2, $sp, 0x58 -/* 0824F8 800818F8 0C0165E4 */ jal func_80059790 -/* 0824FC 800818FC 27A70054 */ addiu $a3, $sp, 0x54 -/* 082500 80081900 0C01A142 */ jal func_80068508 -/* 082504 80081904 24040001 */ li $a0, 1 -/* 082508 80081908 0C01EFC7 */ jal func_8007BF1C -/* 08250C 8008190C 00002025 */ move $a0, $zero -/* 082510 80081910 8FA8005C */ lw $t0, 0x5c($sp) -/* 082514 80081914 2414000A */ li $s4, 10 -/* 082518 80081918 0114001A */ div $zero, $t0, $s4 -/* 08251C 8008191C 8E4A0000 */ lw $t2, ($s2) -/* 082520 80081920 00138940 */ sll $s1, $s3, 5 -/* 082524 80081924 01515821 */ addu $t3, $t2, $s1 -/* 082528 80081928 44904000 */ mtc1 $s0, $f8 -/* 08252C 8008192C 16800002 */ bnez $s4, .L80081938 -/* 082530 80081930 00000000 */ nop -/* 082534 80081934 0007000D */ break 7 -.L80081938: -/* 082538 80081938 2401FFFF */ li $at, -1 -/* 08253C 8008193C 16810004 */ bne $s4, $at, .L80081950 -/* 082540 80081940 3C018000 */ lui $at, 0x8000 -/* 082544 80081944 15010002 */ bne $t0, $at, .L80081950 -/* 082548 80081948 00000000 */ nop -/* 08254C 8008194C 0006000D */ break 6 -.L80081950: -/* 082550 80081950 468042A0 */ cvt.s.w $f10, $f8 -/* 082554 80081954 02602025 */ move $a0, $s3 -/* 082558 80081958 00004812 */ mflo $t1 -/* 08255C 8008195C A5690018 */ sh $t1, 0x18($t3) -/* 082560 80081960 8E4C0000 */ lw $t4, ($s2) -/* 082564 80081964 00000000 */ nop -/* 082568 80081968 01916821 */ addu $t5, $t4, $s1 -/* 08256C 8008196C 0C027298 */ jal func_8009CA60 -/* 082570 80081970 E5AA000C */ swc1 $f10, 0xc($t5) -/* 082574 80081974 8FAE005C */ lw $t6, 0x5c($sp) -/* 082578 80081978 8E580000 */ lw $t8, ($s2) -/* 08257C 8008197C 01D4001A */ div $zero, $t6, $s4 -/* 082580 80081980 02168021 */ addu $s0, $s0, $s6 -/* 082584 80081984 0311C821 */ addu $t9, $t8, $s1 -/* 082588 80081988 44908000 */ mtc1 $s0, $f16 -/* 08258C 8008198C 16800002 */ bnez $s4, .L80081998 -/* 082590 80081990 00000000 */ nop -/* 082594 80081994 0007000D */ break 7 -.L80081998: -/* 082598 80081998 2401FFFF */ li $at, -1 -/* 08259C 8008199C 16810004 */ bne $s4, $at, .L800819B0 -/* 0825A0 800819A0 3C018000 */ lui $at, 0x8000 -/* 0825A4 800819A4 15C10002 */ bne $t6, $at, .L800819B0 -/* 0825A8 800819A8 00000000 */ nop -/* 0825AC 800819AC 0006000D */ break 6 -.L800819B0: -/* 0825B0 800819B0 468084A0 */ cvt.s.w $f18, $f16 -/* 0825B4 800819B4 02602025 */ move $a0, $s3 -/* 0825B8 800819B8 00007810 */ mfhi $t7 -/* 0825BC 800819BC A72F0018 */ sh $t7, 0x18($t9) -/* 0825C0 800819C0 8E480000 */ lw $t0, ($s2) -/* 0825C4 800819C4 00000000 */ nop -/* 0825C8 800819C8 01115021 */ addu $t2, $t0, $s1 -/* 0825CC 800819CC 0C027298 */ jal func_8009CA60 -/* 0825D0 800819D0 E552000C */ swc1 $f18, 0xc($t2) -/* 0825D4 800819D4 8FA90044 */ lw $t1, 0x44($sp) -/* 0825D8 800819D8 8E4B0000 */ lw $t3, ($s2) -/* 0825DC 800819DC 02098021 */ addu $s0, $s0, $t1 -/* 0825E0 800819E0 44902000 */ mtc1 $s0, $f4 -/* 0825E4 800819E4 00151140 */ sll $v0, $s5, 5 -/* 0825E8 800819E8 468021A0 */ cvt.s.w $f6, $f4 -/* 0825EC 800819EC 01626021 */ addu $t4, $t3, $v0 -/* 0825F0 800819F0 02A02025 */ move $a0, $s5 -/* 0825F4 800819F4 E586000C */ swc1 $f6, 0xc($t4) -/* 0825F8 800819F8 0C027298 */ jal func_8009CA60 -/* 0825FC 800819FC AFA20038 */ sw $v0, 0x38($sp) -/* 082600 80081A00 8FAE0058 */ lw $t6, 0x58($sp) -/* 082604 80081A04 8FAD0040 */ lw $t5, 0x40($sp) -/* 082608 80081A08 01D4001A */ div $zero, $t6, $s4 -/* 08260C 80081A0C 8E4F0000 */ lw $t7, ($s2) -/* 082610 80081A10 020D8021 */ addu $s0, $s0, $t5 -/* 082614 80081A14 01F1C821 */ addu $t9, $t7, $s1 -/* 082618 80081A18 44904000 */ mtc1 $s0, $f8 -/* 08261C 80081A1C 16800002 */ bnez $s4, .L80081A28 -/* 082620 80081A20 00000000 */ nop -/* 082624 80081A24 0007000D */ break 7 -.L80081A28: -/* 082628 80081A28 2401FFFF */ li $at, -1 -/* 08262C 80081A2C 16810004 */ bne $s4, $at, .L80081A40 -/* 082630 80081A30 3C018000 */ lui $at, 0x8000 -/* 082634 80081A34 15C10002 */ bne $t6, $at, .L80081A40 -/* 082638 80081A38 00000000 */ nop -/* 08263C 80081A3C 0006000D */ break 6 -.L80081A40: -/* 082640 80081A40 468042A0 */ cvt.s.w $f10, $f8 -/* 082644 80081A44 02602025 */ move $a0, $s3 -/* 082648 80081A48 0000C012 */ mflo $t8 -/* 08264C 80081A4C A7380018 */ sh $t8, 0x18($t9) -/* 082650 80081A50 8E480000 */ lw $t0, ($s2) -/* 082654 80081A54 00000000 */ nop -/* 082658 80081A58 01115021 */ addu $t2, $t0, $s1 -/* 08265C 80081A5C 0C027298 */ jal func_8009CA60 -/* 082660 80081A60 E54A000C */ swc1 $f10, 0xc($t2) -/* 082664 80081A64 8FA90058 */ lw $t1, 0x58($sp) -/* 082668 80081A68 8E4C0000 */ lw $t4, ($s2) -/* 08266C 80081A6C 0134001A */ div $zero, $t1, $s4 -/* 082670 80081A70 02168021 */ addu $s0, $s0, $s6 -/* 082674 80081A74 01916821 */ addu $t5, $t4, $s1 -/* 082678 80081A78 44908000 */ mtc1 $s0, $f16 -/* 08267C 80081A7C 16800002 */ bnez $s4, .L80081A88 -/* 082680 80081A80 00000000 */ nop -/* 082684 80081A84 0007000D */ break 7 -.L80081A88: -/* 082688 80081A88 2401FFFF */ li $at, -1 -/* 08268C 80081A8C 16810004 */ bne $s4, $at, .L80081AA0 -/* 082690 80081A90 3C018000 */ lui $at, 0x8000 -/* 082694 80081A94 15210002 */ bne $t1, $at, .L80081AA0 -/* 082698 80081A98 00000000 */ nop -/* 08269C 80081A9C 0006000D */ break 6 -.L80081AA0: -/* 0826A0 80081AA0 468084A0 */ cvt.s.w $f18, $f16 -/* 0826A4 80081AA4 02602025 */ move $a0, $s3 -/* 0826A8 80081AA8 00005810 */ mfhi $t3 -/* 0826AC 80081AAC A5AB0018 */ sh $t3, 0x18($t5) -/* 0826B0 80081AB0 8E4E0000 */ lw $t6, ($s2) -/* 0826B4 80081AB4 00000000 */ nop -/* 0826B8 80081AB8 01D17821 */ addu $t7, $t6, $s1 -/* 0826BC 80081ABC 0C027298 */ jal func_8009CA60 -/* 0826C0 80081AC0 E5F2000C */ swc1 $f18, 0xc($t7) -/* 0826C4 80081AC4 8FB80044 */ lw $t8, 0x44($sp) -/* 0826C8 80081AC8 8E590000 */ lw $t9, ($s2) -/* 0826CC 80081ACC 02188021 */ addu $s0, $s0, $t8 -/* 0826D0 80081AD0 44902000 */ mtc1 $s0, $f4 -/* 0826D4 80081AD4 8FA80038 */ lw $t0, 0x38($sp) -/* 0826D8 80081AD8 468021A0 */ cvt.s.w $f6, $f4 -/* 0826DC 80081ADC 03285021 */ addu $t2, $t9, $t0 -/* 0826E0 80081AE0 02A02025 */ move $a0, $s5 -/* 0826E4 80081AE4 0C027298 */ jal func_8009CA60 -/* 0826E8 80081AE8 E546000C */ swc1 $f6, 0xc($t2) -/* 0826EC 80081AEC 8FAC0054 */ lw $t4, 0x54($sp) -/* 0826F0 80081AF0 8FA90040 */ lw $t1, 0x40($sp) -/* 0826F4 80081AF4 0194001A */ div $zero, $t4, $s4 -/* 0826F8 80081AF8 8E4D0000 */ lw $t5, ($s2) -/* 0826FC 80081AFC 02098021 */ addu $s0, $s0, $t1 -/* 082700 80081B00 01B17021 */ addu $t6, $t5, $s1 -/* 082704 80081B04 44904000 */ mtc1 $s0, $f8 -/* 082708 80081B08 16800002 */ bnez $s4, .L80081B14 -/* 08270C 80081B0C 00000000 */ nop -/* 082710 80081B10 0007000D */ break 7 -.L80081B14: -/* 082714 80081B14 2401FFFF */ li $at, -1 -/* 082718 80081B18 16810004 */ bne $s4, $at, .L80081B2C -/* 08271C 80081B1C 3C018000 */ lui $at, 0x8000 -/* 082720 80081B20 15810002 */ bne $t4, $at, .L80081B2C -/* 082724 80081B24 00000000 */ nop -/* 082728 80081B28 0006000D */ break 6 -.L80081B2C: -/* 08272C 80081B2C 468042A0 */ cvt.s.w $f10, $f8 -/* 082730 80081B30 02602025 */ move $a0, $s3 -/* 082734 80081B34 00005812 */ mflo $t3 -/* 082738 80081B38 A5CB0018 */ sh $t3, 0x18($t6) -/* 08273C 80081B3C 8E4F0000 */ lw $t7, ($s2) -/* 082740 80081B40 00000000 */ nop -/* 082744 80081B44 01F1C021 */ addu $t8, $t7, $s1 -/* 082748 80081B48 0C027298 */ jal func_8009CA60 -/* 08274C 80081B4C E70A000C */ swc1 $f10, 0xc($t8) -/* 082750 80081B50 8FB90054 */ lw $t9, 0x54($sp) -/* 082754 80081B54 8E4A0000 */ lw $t2, ($s2) -/* 082758 80081B58 0334001A */ div $zero, $t9, $s4 -/* 08275C 80081B5C 02168021 */ addu $s0, $s0, $s6 -/* 082760 80081B60 01514821 */ addu $t1, $t2, $s1 -/* 082764 80081B64 44908000 */ mtc1 $s0, $f16 -/* 082768 80081B68 16800002 */ bnez $s4, .L80081B74 -/* 08276C 80081B6C 00000000 */ nop -/* 082770 80081B70 0007000D */ break 7 -.L80081B74: -/* 082774 80081B74 2401FFFF */ li $at, -1 -/* 082778 80081B78 16810004 */ bne $s4, $at, .L80081B8C -/* 08277C 80081B7C 3C018000 */ lui $at, 0x8000 -/* 082780 80081B80 17210002 */ bne $t9, $at, .L80081B8C -/* 082784 80081B84 00000000 */ nop -/* 082788 80081B88 0006000D */ break 6 -.L80081B8C: -/* 08278C 80081B8C 468084A0 */ cvt.s.w $f18, $f16 -/* 082790 80081B90 02602025 */ move $a0, $s3 -/* 082794 80081B94 00004010 */ mfhi $t0 -/* 082798 80081B98 A5280018 */ sh $t0, 0x18($t1) -/* 08279C 80081B9C 8E4C0000 */ lw $t4, ($s2) -/* 0827A0 80081BA0 00000000 */ nop -/* 0827A4 80081BA4 01916821 */ addu $t5, $t4, $s1 -/* 0827A8 80081BA8 0C027298 */ jal func_8009CA60 -/* 0827AC 80081BAC E5B2000C */ swc1 $f18, 0xc($t5) -/* 0827B0 80081BB0 0C01A142 */ jal func_80068508 -/* 0827B4 80081BB4 00002025 */ move $a0, $zero -/* 0827B8 80081BB8 0C01EFC7 */ jal func_8007BF1C -/* 0827BC 80081BBC 24040001 */ li $a0, 1 -/* 0827C0 80081BC0 240200FF */ li $v0, 255 -/* 0827C4 80081BC4 3C01800E */ lui $at, %hi(D_800DF4A4) # $at, 0x800e -/* 0827C8 80081BC8 A022F4A4 */ sb $v0, %lo(D_800DF4A4)($at) -/* 0827CC 80081BCC 3C01800E */ lui $at, %hi(D_800DF4A8) # $at, 0x800e -/* 0827D0 80081BD0 8FBF0034 */ lw $ra, 0x34($sp) -/* 0827D4 80081BD4 A022F4A8 */ sb $v0, %lo(D_800DF4A8)($at) -/* 0827D8 80081BD8 3C01800E */ lui $at, %hi(D_800DF4AC) # $at, 0x800e -/* 0827DC 80081BDC 8FB00018 */ lw $s0, 0x18($sp) -/* 0827E0 80081BE0 8FB1001C */ lw $s1, 0x1c($sp) -/* 0827E4 80081BE4 8FB20020 */ lw $s2, 0x20($sp) -/* 0827E8 80081BE8 8FB30024 */ lw $s3, 0x24($sp) -/* 0827EC 80081BEC 8FB40028 */ lw $s4, 0x28($sp) -/* 0827F0 80081BF0 8FB5002C */ lw $s5, 0x2c($sp) -/* 0827F4 80081BF4 8FB60030 */ lw $s6, 0x30($sp) -/* 0827F8 80081BF8 A022F4AC */ sb $v0, %lo(D_800DF4AC)($at) -/* 0827FC 80081BFC 03E00008 */ jr $ra -/* 082800 80081C00 27BD0060 */ addiu $sp, $sp, 0x60 - diff --git a/asm/non_matchings/unknown_080500/func_8008AF00.s b/asm/non_matchings/unknown_080500/func_8008AF00.s deleted file mode 100644 index 171f6735..00000000 --- a/asm/non_matchings/unknown_080500/func_8008AF00.s +++ /dev/null @@ -1,64 +0,0 @@ -glabel func_8008AF00 -/* 08BB00 8008AF00 3C0E8012 */ lui $t6, 0x8012 -/* 08BB04 8008AF04 24060001 */ li $a2, 1 -/* 08BB08 8008AF08 3C01800E */ lui $at, %hi(D_800DF4BC) # $at, 0x800e -/* 08BB0C 8008AF0C 25C563E8 */ addiu $a1, $t6, 0x63e8 -/* 08BB10 8008AF10 3C028012 */ lui $v0, %hi(D_801263F0) # $v0, 0x8012 -/* 08BB14 8008AF14 AC26F4BC */ sw $a2, %lo(D_800DF4BC)($at) -/* 08BB18 8008AF18 244263F0 */ addiu $v0, %lo(D_801263F0) # addiu $v0, $v0, 0x63f0 -/* 08BB1C 8008AF1C 00851821 */ addu $v1, $a0, $a1 -/* 08BB20 8008AF20 2407FFFF */ li $a3, -1 -.L8008AF24: -/* 08BB24 8008AF24 14A30003 */ bne $a1, $v1, .L8008AF34 -/* 08BB28 8008AF28 00000000 */ nop -/* 08BB2C 8008AF2C 10000002 */ b .L8008AF38 -/* 08BB30 8008AF30 A0A60000 */ sb $a2, ($a1) -.L8008AF34: -/* 08BB34 8008AF34 A0A70000 */ sb $a3, ($a1) -.L8008AF38: -/* 08BB38 8008AF38 24A50001 */ addiu $a1, $a1, 1 -/* 08BB3C 8008AF3C 00A2082B */ sltu $at, $a1, $v0 -/* 08BB40 8008AF40 1420FFF8 */ bnez $at, .L8008AF24 -/* 08BB44 8008AF44 00000000 */ nop -/* 08BB48 8008AF48 14800005 */ bnez $a0, .L8008AF60 -/* 08BB4C 8008AF4C 3C018012 */ lui $at, 0x8012 -/* 08BB50 8008AF50 240F0001 */ li $t7, 1 -/* 08BB54 8008AF54 3C018012 */ lui $at, %hi(D_801263D4) # $at, 0x8012 -/* 08BB58 8008AF58 10000002 */ b .L8008AF64 -/* 08BB5C 8008AF5C A02F63D4 */ sb $t7, %lo(D_801263D4)($at) -.L8008AF60: -/* 08BB60 8008AF60 A02063D4 */ sb $zero, %lo(D_801263D4)($at) -.L8008AF64: -/* 08BB64 8008AF64 24010001 */ li $at, 1 -/* 08BB68 8008AF68 14810004 */ bne $a0, $at, .L8008AF7C -/* 08BB6C 8008AF6C 24180001 */ li $t8, 1 -/* 08BB70 8008AF70 3C018012 */ lui $at, %hi(D_801263D5) # $at, 0x8012 -/* 08BB74 8008AF74 10000003 */ b .L8008AF84 -/* 08BB78 8008AF78 A03863D5 */ sb $t8, %lo(D_801263D5)($at) -.L8008AF7C: -/* 08BB7C 8008AF7C 3C018012 */ lui $at, %hi(D_801263D5) # $at, 0x8012 -/* 08BB80 8008AF80 A02063D5 */ sb $zero, %lo(D_801263D5)($at) -.L8008AF84: -/* 08BB84 8008AF84 24010002 */ li $at, 2 -/* 08BB88 8008AF88 14810004 */ bne $a0, $at, .L8008AF9C -/* 08BB8C 8008AF8C 24190001 */ li $t9, 1 -/* 08BB90 8008AF90 3C018012 */ lui $at, %hi(D_801263D6) # $at, 0x8012 -/* 08BB94 8008AF94 10000003 */ b .L8008AFA4 -/* 08BB98 8008AF98 A03963D6 */ sb $t9, %lo(D_801263D6)($at) -.L8008AF9C: -/* 08BB9C 8008AF9C 3C018012 */ lui $at, %hi(D_801263D6) # $at, 0x8012 -/* 08BBA0 8008AFA0 A02063D6 */ sb $zero, %lo(D_801263D6)($at) -.L8008AFA4: -/* 08BBA4 8008AFA4 24010003 */ li $at, 3 -/* 08BBA8 8008AFA8 14810004 */ bne $a0, $at, .L8008AFBC -/* 08BBAC 8008AFAC 24080001 */ li $t0, 1 -/* 08BBB0 8008AFB0 3C018012 */ lui $at, 0x8012 -/* 08BBB4 8008AFB4 03E00008 */ jr $ra -/* 08BBB8 8008AFB8 A02863D7 */ sb $t0, 0x63d7($at) - -.L8008AFBC: -/* 08BBBC 8008AFBC 3C018012 */ lui $at, %hi(D_801263D7) # $at, 0x8012 -/* 08BBC0 8008AFC0 A02063D7 */ sb $zero, %lo(D_801263D7)($at) -/* 08BBC4 8008AFC4 03E00008 */ jr $ra -/* 08BBC8 8008AFC8 00000000 */ nop - diff --git a/asm/non_matchings/unknown_080500/func_8009C904.s b/asm/non_matchings/unknown_080500/func_8009C904.s deleted file mode 100644 index 2c575b9e..00000000 --- a/asm/non_matchings/unknown_080500/func_8009C904.s +++ /dev/null @@ -1,91 +0,0 @@ -glabel func_8009C904 -/* 09D504 8009C904 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 09D508 8009C908 AFB10018 */ sw $s1, 0x18($sp) -/* 09D50C 8009C90C 3C11800E */ lui $s1, %hi(D_800DF75C) # $s1, 0x800e -/* 09D510 8009C910 2631F75C */ addiu $s1, %lo(D_800DF75C) # addiu $s1, $s1, -0x8a4 -/* 09D514 8009C914 8E260000 */ lw $a2, ($s1) -/* 09D518 8009C918 AFBF001C */ sw $ra, 0x1c($sp) -/* 09D51C 8009C91C AFB00014 */ sw $s0, 0x14($sp) -/* 09D520 8009C920 14C00007 */ bnez $a2, .L8009C940 -/* 09D524 8009C924 AFA40030 */ sw $a0, 0x30($sp) -/* 09D528 8009C928 3C05FF00 */ lui $a1, (0xFF0000FF >> 16) # lui $a1, 0xff00 -/* 09D52C 8009C92C 34A500FF */ ori $a1, (0xFF0000FF & 0xFFFF) # ori $a1, $a1, 0xff -/* 09D530 8009C930 0C01C327 */ jal func_80070C9C -/* 09D534 8009C934 24040240 */ li $a0, 576 -/* 09D538 8009C938 AE220000 */ sw $v0, ($s1) -/* 09D53C 8009C93C 00403025 */ move $a2, $v0 -.L8009C940: -/* 09D540 8009C940 8FB00030 */ lw $s0, 0x30($sp) -/* 09D544 8009C944 3C0F800E */ lui $t7, %hi(D_800DF510) # $t7, 0x800e -/* 09D548 8009C948 25EFF510 */ addiu $t7, %lo(D_800DF510) # addiu $t7, $t7, -0xaf0 -/* 09D54C 8009C94C 00107140 */ sll $t6, $s0, 5 -/* 09D550 8009C950 01CF1821 */ addu $v1, $t6, $t7 -/* 09D554 8009C954 84780000 */ lh $t8, ($v1) -/* 09D558 8009C958 00CEC821 */ addu $t9, $a2, $t6 -/* 09D55C 8009C95C A7380000 */ sh $t8, ($t9) -/* 09D560 8009C960 8E290000 */ lw $t1, ($s1) -/* 09D564 8009C964 84680002 */ lh $t0, 2($v1) -/* 09D568 8009C968 012E5021 */ addu $t2, $t1, $t6 -/* 09D56C 8009C96C A5480002 */ sh $t0, 2($t2) -/* 09D570 8009C970 8E2C0000 */ lw $t4, ($s1) -/* 09D574 8009C974 846B0004 */ lh $t3, 4($v1) -/* 09D578 8009C978 018E6821 */ addu $t5, $t4, $t6 -/* 09D57C 8009C97C A5AB0004 */ sh $t3, 4($t5) -/* 09D580 8009C980 8E2F0000 */ lw $t7, ($s1) -/* 09D584 8009C984 01C08025 */ move $s0, $t6 -/* 09D588 8009C988 846E0006 */ lh $t6, 6($v1) -/* 09D58C 8009C98C 01F0C021 */ addu $t8, $t7, $s0 -/* 09D590 8009C990 A70E0006 */ sh $t6, 6($t8) -/* 09D594 8009C994 8E390000 */ lw $t9, ($s1) -/* 09D598 8009C998 C464000C */ lwc1 $f4, 0xc($v1) -/* 09D59C 8009C99C 03304821 */ addu $t1, $t9, $s0 -/* 09D5A0 8009C9A0 E524000C */ swc1 $f4, 0xc($t1) -/* 09D5A4 8009C9A4 8E280000 */ lw $t0, ($s1) -/* 09D5A8 8009C9A8 C4660010 */ lwc1 $f6, 0x10($v1) -/* 09D5AC 8009C9AC 01105021 */ addu $t2, $t0, $s0 -/* 09D5B0 8009C9B0 E5460010 */ swc1 $f6, 0x10($t2) -/* 09D5B4 8009C9B4 8E2C0000 */ lw $t4, ($s1) -/* 09D5B8 8009C9B8 C4680014 */ lwc1 $f8, 0x14($v1) -/* 09D5BC 8009C9BC 01905821 */ addu $t3, $t4, $s0 -/* 09D5C0 8009C9C0 E5680014 */ swc1 $f8, 0x14($t3) -/* 09D5C4 8009C9C4 8E2D0000 */ lw $t5, ($s1) -/* 09D5C8 8009C9C8 C46A0008 */ lwc1 $f10, 8($v1) -/* 09D5CC 8009C9CC 01B07821 */ addu $t7, $t5, $s0 -/* 09D5D0 8009C9D0 E5EA0008 */ swc1 $f10, 8($t7) -/* 09D5D4 8009C9D4 8E380000 */ lw $t8, ($s1) -/* 09D5D8 8009C9D8 846E0018 */ lh $t6, 0x18($v1) -/* 09D5DC 8009C9DC 0310C821 */ addu $t9, $t8, $s0 -/* 09D5E0 8009C9E0 A72E0018 */ sh $t6, 0x18($t9) -/* 09D5E4 8009C9E4 AFA30024 */ sw $v1, 0x24($sp) -/* 09D5E8 8009C9E8 00002025 */ move $a0, $zero -/* 09D5EC 8009C9EC 0C01BE53 */ jal func_8006F94C -/* 09D5F0 8009C9F0 3405FFFF */ li $a1, 65535 -/* 09D5F4 8009C9F4 8E290000 */ lw $t1, ($s1) -/* 09D5F8 8009C9F8 00002025 */ move $a0, $zero -/* 09D5FC 8009C9FC 01304021 */ addu $t0, $t1, $s0 -/* 09D600 8009CA00 A102001A */ sb $v0, 0x1a($t0) -/* 09D604 8009CA04 0C01BE53 */ jal func_8006F94C -/* 09D608 8009CA08 3405FFFF */ li $a1, 65535 -/* 09D60C 8009CA0C 8E2A0000 */ lw $t2, ($s1) -/* 09D610 8009CA10 00002025 */ move $a0, $zero -/* 09D614 8009CA14 01506021 */ addu $t4, $t2, $s0 -/* 09D618 8009CA18 A182001B */ sb $v0, 0x1b($t4) -/* 09D61C 8009CA1C 0C01BE53 */ jal func_8006F94C -/* 09D620 8009CA20 3405FFFF */ li $a1, 65535 -/* 09D624 8009CA24 8E2B0000 */ lw $t3, ($s1) -/* 09D628 8009CA28 8FA30024 */ lw $v1, 0x24($sp) -/* 09D62C 8009CA2C 01706821 */ addu $t5, $t3, $s0 -/* 09D630 8009CA30 A1A2001C */ sb $v0, 0x1c($t5) -/* 09D634 8009CA34 8E380000 */ lw $t8, ($s1) -/* 09D638 8009CA38 806F001D */ lb $t7, 0x1d($v1) -/* 09D63C 8009CA3C 03107021 */ addu $t6, $t8, $s0 -/* 09D640 8009CA40 A1CF001D */ sb $t7, 0x1d($t6) -/* 09D644 8009CA44 8FBF001C */ lw $ra, 0x1c($sp) -/* 09D648 8009CA48 8FB10018 */ lw $s1, 0x18($sp) -/* 09D64C 8009CA4C 8FB00014 */ lw $s0, 0x14($sp) -/* 09D650 8009CA50 03E00008 */ jr $ra -/* 09D654 8009CA54 27BD0030 */ addiu $sp, $sp, 0x30 - -/* 09D658 8009CA58 03E00008 */ jr $ra -/* 09D65C 8009CA5C 00000000 */ nop - diff --git a/include/structs.h b/include/structs.h index 5cbe7baf..8f666024 100644 --- a/include/structs.h +++ b/include/structs.h @@ -47,7 +47,8 @@ typedef struct Racer { typedef struct Settings4C { u8 unk0; u8 unk1; - u8 pad2[0xD]; + s8 unk2; + u8 pad3[0xC]; u8 unkF; } Settings4C; diff --git a/src/unknown_080500.c b/src/unknown_080500.c index 086fadc9..74bf2297 100644 --- a/src/unknown_080500.c +++ b/src/unknown_080500.c @@ -4,6 +4,7 @@ #include "types.h" #include "macros.h" #include "structs.h" +#include "fast3d.h" typedef enum MENU_ID { TITLE_SCREEN, @@ -67,6 +68,9 @@ typedef struct unk800DF4A0 { s32 unk228[4]; u8 pad238[0x24]; s32 unk25C; + u8 pad260[0x78]; + s32 unk2D8; + s32 unk2DC; } unk800DF4A0; extern unk800DF4A0* D_800DF4A0; @@ -86,9 +90,37 @@ extern s8 D_800DF4E4[4]; extern s8 D_800DF4EC; extern s32 gIsInTwoPlayerAdventure; extern s32 gSaveFileIndex; + +extern u8 D_800DF4A4; +extern u8 D_800DF4A8; +extern u8 D_800DF4AC; + +/* Size: 0x20 bytes */ +typedef struct unk800DF510 { + s16 unk0; + s16 unk2; + s16 unk4; + s16 unk6; + f32 unk8; + f32 unkC; + f32 unk10; + f32 unk14; + s16 unk18; + s8 unk1A; + s8 unk1B; + s8 unk1C; + s8 unk1D; + u8 pad1E[2]; +} unk800DF510; + +extern unk800DF510 D_800DF510[18]; +extern unk800DF510 *D_800DF75C; +extern s32 D_800DF764; + extern s16 *D_800DF750[32]; // unknown number of entries extern s16 D_800DF754; extern s16 D_800DF758; +extern s32 D_800DF760; extern s16 D_800DF7C4[11]; extern s32 D_800DF774; extern s32 D_800DF77C; @@ -195,17 +227,14 @@ extern s8 D_800E1E28; extern s32 D_800E8230; extern f32 D_800E8414; -extern s32 D_801263A0; +extern Gfx *D_801263A0; extern s32 D_801263A8; extern s32 D_801263AC; extern s8 D_801263B4; extern s32 D_801263BC; extern s32 D_801263C4; -extern s8 D_801263D4; -extern s8 D_801263D5; -extern s8 D_801263D6; -extern s8 D_801263D7; -extern s8 D_801263DC; +extern s8 D_801263D4[4]; // Array of bools +extern s8 D_801263DC[4]; extern s32 D_801263D8; extern s32 D_801263E0; extern s8 D_801263E8[8]; @@ -214,34 +243,12 @@ extern u8 D_80126418[8]; extern u8 D_80126420[8]; extern s64 D_80126448; extern f32 D_80126450; -extern u8 D_80126454; -extern u8 D_80126455; -extern u8 D_80126456; -extern u8 D_80126457; -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 s8 D_8012645E; -extern s8 D_8012645F; - -//extern s8 D_80126464[4]; -extern s8 D_80126464; -extern s8 D_80126465; -extern s8 D_80126466; -extern s8 D_80126467; - -extern u8 D_80126468; -extern u8 D_80126469; -extern u8 D_8012646A; -extern u8 D_8012646B; -extern u8 D_8012646C; -extern u8 D_8012646D; -extern u8 D_8012646E; -extern u8 D_8012646F; +extern u8 D_80126454[4]; +extern u8 D_80126458[4]; +extern s8 D_8012645C[4]; +extern s8 D_80126464[4]; +extern u8 D_80126468[4]; +extern u8 D_8012646C[4]; extern s32 D_80126470; extern s32 D_80126484; extern s32 D_80126488; @@ -251,8 +258,10 @@ extern s8 D_80126504; extern s8 D_8012650E; extern s8 D_80126516; extern Settings *D_80126530[3]; +extern s32 D_80126548; extern u32* D_80126550[1]; // lookup table? Unknown number of entries. extern u8 D_80126750[1]; // unknown number of entries +extern s32 D_801267D0; extern s8* D_801267EC; extern s32 D_80126804; extern s32 D_80126824; @@ -265,6 +274,8 @@ extern s32 D_80126858; extern s32 D_8012685C; extern s32 D_80126860; extern s8 D_801269C0[4]; // Unknown number of entries. +extern s32 D_801269C8; +extern s32 D_801269CC; extern u32* D_801269E0; extern s32 D_801269FC; extern s32 D_80126A00; @@ -361,7 +372,78 @@ void func_800813C0(void) { GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuInit.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuLoop.s") -GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80081800.s") + +void func_80081800(s32 arg0, s32 arg1, s32 arg2, u8 arg3, u8 arg4, u8 arg5, u8 arg6) { + s32 sp5C; + s32 sp58; + s32 sp54; + s32 phi_s6; + s32 phi_s5; + s32 phi_s3; + s32 sp44; + s32 sp40; + + D_800DF4A4 = arg3; + D_800DF4A8 = arg4; + D_800DF4AC = arg5; + if (arg6 == 0) { + D_800DF75C[0].unk10 = arg2; + D_800DF75C[1].unk10 = arg2 - 2; + phi_s3 = 0; + phi_s5 = 1; + arg1 -= 0x27; + phi_s6 = 0xC; + sp44 = 0xB; + sp40 = 0xA; + } else { + D_800DF75C[2].unk10 = arg2; + D_800DF75C[3].unk10 = arg2 - 1; + phi_s3 = 2; + phi_s5 = 3; + arg1 -= 0x1C; + phi_s6 = 9; + sp44 = 9; + sp40 = 5; + } + func_80059790(arg0, &sp5C, &sp58, &sp54); + func_80068508(1); + func_8007BF1C(0); + D_800DF75C[phi_s3].unk18 = sp5C / 10; + D_800DF75C[phi_s3].unkC = arg1; + func_8009CA60(phi_s3); + arg1 += phi_s6; + D_800DF75C[phi_s3].unk18 = sp5C % 10; + D_800DF75C[phi_s3].unkC = arg1; + func_8009CA60(phi_s3); + arg1 += sp44; + D_800DF75C[phi_s5].unkC = arg1; + func_8009CA60(phi_s5); + arg1 += sp40; + D_800DF75C[phi_s3].unk18 = sp58 / 10; + D_800DF75C[phi_s3].unkC = arg1; + func_8009CA60(phi_s3); + arg1 += phi_s6; + D_800DF75C[phi_s3].unk18 = sp58 % 10; + D_800DF75C[phi_s3].unkC = arg1; + func_8009CA60(phi_s3); + arg1 += sp44; + D_800DF75C[phi_s5].unkC = arg1; + func_8009CA60(phi_s5); + arg1 += sp40; + D_800DF75C[phi_s3].unk18 = sp54 / 10; + D_800DF75C[phi_s3].unkC = arg1; + func_8009CA60(phi_s3); + arg1 += phi_s6; + D_800DF75C[phi_s3].unk18 = sp54 % 10; + D_800DF75C[phi_s3].unkC = arg1; + func_8009CA60(phi_s3); + func_80068508(0); + func_8007BF1C(1); + D_800DF4A4 = (u8)0xFF; + D_800DF4A8 = (u8)0xFF; + D_800DF4AC = (u8)0xFF; +} + GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80081C04.s") void func_80081E54(s32 arg0, f32 arg1, f32 arg2, f32 arg3, s32 arg4, s32 arg5) { @@ -523,7 +605,129 @@ void func_800841B8(s32 arg0) { } } +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuOptionsLoop.s") +#else + +extern s32 D_800DFA14; +extern s32 D_8012644C; + +void func_80084734(void); +void set_language(s32 language); + +s32 MenuOptionsLoop(s32 arg0) { + s32 buttonsPressed; + s32 analogX; + s32 analogY; + + D_801263BC = (D_801263BC + arg0) & 0x3F; + + if (D_800DF47C != 0) { + if (D_800DF47C > 0) { + D_800DF47C += arg0; + } else { + D_800DF47C -= arg0; + } + } + + if (D_800DF47C >= -0x13 && D_800DF47C < 0x23) { + func_800841B8(arg0); + } + + buttonsPressed = 0; + analogX = 0; + analogY = 0; + if (D_801263C4 == 0 && D_800DF47C == 0) { + // Get input from all 4 controllers. + s32 i; + for (i = 0; i < 4; i++) { + analogY += D_80126464[i]; // Y axis (-1 = down, 1 = up) for controller + analogX += D_8012645C[i]; // X axis (-1 = left, 1 = right) for controller + buttonsPressed |= func_8006A554(i); // Button presses for controller + } + } + + if ((buttonsPressed & 0x4000) || ((buttonsPressed & 0x9000) && D_800DF460 == 5)) { + // Leave the option menu + func_80000C98(-0x80, D_800DF460, analogX); + D_800DF47C = -1; + func_800C01D8(&D_800DF774); + func_80001D04(0x241, 0); + } else if ((buttonsPressed & 0x9000) && D_800DF460 >= 2) { + // Go to a sub-menu + D_800DF47C = 0x1F; + func_80001D04(0xEF, 0); + } else if (D_800DF460 == 0 && analogX != 0) { + // Change language + s32 temp_v0 = func_8009EB20(); + if ((temp_v0 >> 0x1F) == 0 && temp_v0 == 0) { + set_language(2); // Sets language to french + } else { + set_language(0); // Sets language to english + } + func_80001D04(0xEB, 0); + } else if (D_800DF460 == 1 && analogX != 0) { + // Enable/Disable subtitles. + if (D_8012644C & 0x2000000) { + func_80001D04(0xEB, 0); + func_8009EABC(0, 0x2000000); + func_800C2AF4(0); + D_800DFA14 = D_800DF4A0->unk2DC; + } else { + func_80001D04(0xEB, 0); + func_8009EA78(0, 0x2000000); + func_800C2AF4(1); + D_800DFA14 = D_800DF4A0->unk2D8; + } + } else { + // Move up & down the list + if (analogY < 0) { + // Scroll down the list. + D_800DF460++; + if (D_800DF460 >= 6) { + D_800DF460 = 5; + } + func_80001D04(0xEB, 0); + } + if (analogY > 0) { + // Scroll up the list. + D_800DF460--; + if (D_800DF460 < 0) { + D_800DF460 = 0; + } + func_80001D04(0xEB, 0); + } + } + + if (D_800DF47C >= 0x1F) { + // Change screen to a sub-menu + switch(D_800DF460) { + case 2: + func_80084734(); + MenuInit(AUDIO_OPTIONS); + return 0; + case 3: + func_80084734(); + MenuInit(SAVE_OPTIONS); + return 0; + default: + func_80084734(); + MenuInit(MAGIC_CODES); + return 0; + } + } + if (D_800DF47C < -0x1E) { + // Change screen back to the title screen. + func_80000B28(); + func_80084734(); + MenuInit(TITLE_SCREEN); + return 0; + } + D_801263C4 = 0; + return 0; +} +#endif + void func_80084734(void) { func_800C422C(2); @@ -558,7 +762,161 @@ void MenuAudioOptionsInit(void) { } GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80084854.s") + +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuAudioOptionsLoop.s") +#else + +extern s32 D_800DFABC; +extern s32 D_800DFAC8; + +void func_800851FC(void); + +s32 MenuAudioOptionsLoop(s32 arg0) { + s32 sp40; + s32 sp30; + s32 phi_a2; + s32 phi_a3; + s32 phi_t0; + s32 phi_s0; + + sp30 = 0; + D_801263BC = (s32) ((D_801263BC + arg0) & 0x3F); + if (D_800DF47C != 0) { + if (D_800DF47C > 0) { + D_800DF47C += arg0; + } else { + D_800DF47C -= arg0; + } + } + if (D_800DF47C >= -0x13 && D_800DF47C < 0x14) { + func_80084854(); + } + if (D_801263C4 == 0 && D_800DF47C == 0) { + sp40 = 0; + phi_a2 = 0; + phi_a3 = 0; + phi_t0 = 0; + phi_s0 = 0; + + while(phi_s0 != 4) { + sp40 |= func_8006A554(phi_s0); + phi_a2 += func_8006A59C(phi_s0); + phi_a3 += D_80126464[phi_s0]; + phi_t0 += D_8012645C[phi_s0]; + phi_s0++; + } + + if (phi_a2 < 0) { + phi_a2 += 0x18; + if (phi_a2 > 0) { + phi_a2 = 0; + } + } else { + phi_a2 -= 0x18; + if (phi_a2 < 0) { + phi_a2 = 0; + } + } + + if (((sp40 & 0x9000) && (D_801263E0 == D_80126C46 + 1)) || (sp40 & 0x4000)) { + D_800DF47C = -1; + func_800C01D8(&D_800DF774); + if (D_801263D8 >= 0) { + func_80000C98(-0x80); + } + sp30 = 3; + } else if (phi_a3 < 0 && D_80126C46 < D_801263E0 - 1) { + D_80126C46++; + sp30 = 1; + } else if (phi_a3 > 0 && D_80126C46 > 0) { + D_80126C46--; + sp30 = 1; + } else if (D_80126C46 == 0 && phi_t0 != 0) { + if (phi_t0 < 0) { + D_800DFAC8--; + } else { + D_800DFAC8++; + } + if (D_800DFAC8 < 0) { + D_800DFAC8 = 2; + } + if (D_800DFAC8 > 2) { + D_800DFAC8 = 0; + } + func_80065BD0(D_800DFAC8); + sp30 = 1; + } else if ((phi_a2 >> 2) != 0) { + if(D_80126C46 == 2) { + D_800DFAC0 += (phi_a2 >> 2); + if (D_800DFAC0 < 0) { + D_800DFAC0 = 0; + } else if (D_800DFAC0 >= 0x101) { + D_800DFAC0 = 0x100; + } + func_80003160(D_800DFAC0); + } else if(D_80126C46 == 1) { + D_800DFAC4 += (phi_a2 >> 2); + if (D_800DFAC4 < 0) { + D_800DFAC4 = 0; + } else { + if (D_800DFAC4 >= 0x101) { + D_800DFAC4 = 0x100; + } + } + func_80001A3C(D_800DFAC4); + if (!musicIsPlaying()) { + if (D_801263D8 >= 0) { + func_80000B28(); + func_80000B34((u8)D_800DFABC); + } else { + func_80000B28(); + func_80000BE0(0x18); + func_80000B34(0x18); + func_80000B18(); + } + } + } + } else if (D_801263E0 >= 5 && D_80126C46 == 1) { + if (phi_t0 < 0 && D_800DFABC > 0) { + D_800DFABC--; + sp30 = 1; + } else if (phi_t0 > 0 && D_800DFABC < (func_80002110() - 1)) { + D_800DFABC++; + sp30 = 1; + } + if (sp40 & 0x9000) { + func_80000B28(); + func_80000BE0(0x18); + func_80000B34((u8)D_800DFABC); + D_801263D8 = D_800DFABC; + } + } + + if (D_80126C46 == 1 && D_801269FC == 0) { + func_80001D04(0x19B, &D_801269FC); + } else if (D_801269FC != 0) { + func_8000488C(D_801269FC); + } + + if (sp30 == 3) { + func_80001D04(0x241, 0); + } else if (sp30 == 2) { + func_80001D04(0xEF, 0); + } else if (sp30 == 1) { + func_80001D04(0xEB, 0); + } + } + if (D_800DF47C < -0x1E) { + func_800851FC(); + MenuInit(0xC); + return 0; + } + D_801263C4 = 0; + return 0; +} + +#endif void func_800851FC(void) { if (D_801269FC != 0) { @@ -1076,44 +1434,19 @@ 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) { + for (i = 0; i < 8; i++) { 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; + + for(i = 0; i < 4; i++) { + D_801263D4[i] = (i == arg0) ? 1 : 0; } } -#endif GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuCharacterSelectInit.s") @@ -1142,7 +1475,101 @@ GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8008B358.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8008B4C8.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8008B758.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8008BB3C.s") + +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuCharacterSelectLoop.s") +#else + +/* Size: 0xE bytes. */ +typedef struct unk801263CC { + u8 pad0[0xC]; + s16 unkC; +} unk801263CC; + +extern unk801263CC *D_801263CC[8]; // unknown number of entries + +void func_8008C128(void); + +s32 MenuCharacterSelectLoop(s32 arg0) { + s32 i; + s32 phi_a0; + s32 phi_t3; + s8 temp[4]; + + func_8008B20C(arg0); + func_8008C168(arg0); + func_8008E4EC(); + + for(i = 0; i < 4; i++){ + if (1 == D_801263DC[i]) { + D_801263DC[i] = 2; + } + } + D_801263C4 = 0; + if (D_800DF47C == 0) { + // Issue: this loop unrolls weirdly. + for (i = 0; i < 4; i++) { + temp[i] = D_801263D4[i]; + } + func_8008B358(); + if (D_800DF480 == D_800DF4BC) { + func_8008B4C8(); + } else { + func_8008B758(temp); + } + return 0; // This return needs to be here. + } else if (D_800DF47C > 0) { + D_800DF47C += arg0; + if (D_800DF47C >= 0x1F) { + phi_t3 = 0; + if (D_800DFFD0 == 0) { + phi_t3++; + if ((gActiveMagicCodes << 7) < 0) { + phi_t3++; + } + } + func_8008C128(); + + // Regalloc issue: D_801263D4 and phi_a0 need to switch registers. + phi_a0 = 0; + for(i = 0; i < 4; i++) { + if (D_801263D4[i]) { + D_801263F0[phi_a0] = (*D_801263CC)[D_801263E8[i]].unkC; + phi_a0++; + } + } + func_8008BB3C(phi_a0); + func_8006A458(D_801263D4); + + D_800DF4B8 = 1; + if (phi_t3 >= D_800DF4BC) { + func_80000B18(); + func_8006E2E8(0x27, -1, 0); + if (D_800DF4BC == 1 && D_800DF498 == 0) { + MenuInit(CAUTION_MESSAGE); + } else { + MenuInit(GAME_SELECT); + } + } else { + func_80000B28(); + func_800828B8(); + func_8006E5BC(); + MenuInit(TRACK_SELECT); + } + } + } else if (D_800DF47C < 0) { + D_800DF47C -= arg0; + if (D_800DF47C < -0x1E) { + func_80000B28(); + func_8008C128(); + D_800DF4BC = 1; + MenuInit(TITLE_SCREEN); + } + } + return 0; +} + +#endif void func_8008BFE8(s32 arg0, s8 *arg1, s32 arg2, u16 arg3, u16 arg4) { s32 someBool; @@ -1364,32 +1791,6 @@ void menu_file_select_init(void) { func_80000B18(); } -/* Size: 0x20 bytes */ -typedef struct unk8009C904 { - s16 unk0; - s16 unk2; - s16 unk4; - s16 unk6; - f32 unk8; - f32 unkC; - f32 unk10; - f32 unk14; - s16 unk18; - s8 unk1A; - s8 unk1B; - s8 unk1C; - s8 unk1D; - u8 pad1E[2]; -} unk8009C904; - -extern unk8009C904 D_800DF510[18]; -extern unk8009C904 *D_800DF75C; - -extern u8 D_800DF4A4; -extern u8 D_800DF4A8; -extern u8 D_800DF4AC; -extern s32 D_800DF764; - GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8008CC28.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8008CD74.s") @@ -1506,7 +1907,108 @@ void func_8008E4B0(void) { GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8008E4EC.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuTrackSelectInit.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8008F00C.s") + +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuTrackSelectLoop.s") +#else + +// Close to done with this function. Just a regalloc issue remains. :/ + +void func_8008F534(void); +void func_8008FF1C(s32 arg0); +void func_800904E8(s32 arg0); +void func_80090918(s32 arg0); +void func_80090ED8(s32 arg0); +void func_80090F30(s32 arg0); +void func_80092188(s32 arg0); +void func_8008E4EC(void); +s32 func_800C73E0(void); +void musicSetRelativeVolume(u8 arg0); + +s32 MenuTrackSelectLoop(s32 arg0) { + s32 phi_a2; + Settings *settings; + s32 i; + + settings = get_settings(); + D_801263BC = (D_801263BC + arg0) & 0x3F; + if (func_800C73E0() == 0) { + if (D_800DF47C != 0) { + if (D_800DF47C < 0) { + D_800DF47C -= arg0; + } else { + D_800DF47C += arg0; + } + } + } + func_8008E4EC(); + + fast3d_cmd(D_801263A0++, 0xB6000000, 0x00001000) // gSPClearGeometryMode(D_801263A0++, G_CULL_FRONT) + + switch(D_801267D0) { + case 0: + func_8008FF1C(arg0); + func_800904E8(arg0); + func_80090918(arg0); + break; + case 1: + func_80090ED8(arg0); + func_80090F30(arg0); + func_80092188(arg0); + break; + } + + if (D_800DF760 < 0) { + musicSetRelativeVolume(0); + } else { + D_800DF760 += arg0 * 2; + if (D_800DF760 >= 0x51) { + D_800DF760 = 0x50; + } + musicSetRelativeVolume((u8)D_800DF760); + } + if (D_801267D0 < 0) { + func_8008F534(); + D_800DF478 = 0; + if (D_800DF4BC >= 3 || D_800DF4BC == 2 && (gActiveMagicCodes << 7) >= 0) { + phi_a2 = 0; + if (is_drumstick_unlocked()) { + phi_a2 = 1; + } + if (is_tt_unlocked()) { + phi_a2 ^= 3; + } + func_8006E2E8(0x16, -1, phi_a2); + func_8008AEB4(0, NULL); + MenuInit(CHARACTER_SELECT); + return 0; + } + func_8006E2E8(0x27, -1, 0); + MenuInit(GAME_SELECT); + return 0; + } + if (D_801267D0 >= 2) { + func_8008F534(); + if (D_80126548 != D_800E0410) { + // regalloc issue with the for loop. + for(i = 0; i < 8; i++) { + settings->racers[i].starting_position = i; + } + } + if (D_801269C8 != 4) { + D_800DF478 = 1; + return D_800DF4BC; + } + gTrophyRaceWorldId = D_801269CC + 1; + D_800DF450 = 0; + D_800E0FEC = 0; + MenuInit(TROPHY_RACE_ROUND); + return 0; + } + D_801263C4 = 0; + return 0; +} +#endif void func_8008F534(void) { s32 i; @@ -1579,7 +2081,76 @@ s32 func_80092BE0(s32 arg0) { return temp; } +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuLoadNewAreaInit.s") +#else + +extern s16 D_800E0758[8]; // Unknown number of entries. + +void MenuLoadNewAreaInit(void) { + s32 temp_v0_2; + s8 temp_s0; + Settings *settings; + + settings = get_settings(); + D_800DF4C4 = 0; + D_801263BC = 0; + D_800DF47C = 0; + temp_s0 = settings->unk4C->unk2; + D_801269C0 = func_8006B0AC(temp_s0); + temp_v0_2 = func_8006B14C(temp_s0); + if (temp_v0_2 != 5) { + if (temp_v0_2 != 8) { + if ((temp_v0_2 & 0x40) == 0) { + if ((*(settings->courseFlagsPtr + (temp_s0 * 4)) & 2) == 0) { +block_4: + if (D_800E0758[temp_s0] != -1) { + func_80000FDC(D_800E0758[temp_s0] & 0xFFFF, 0, 0x3F800000); + } + D_801263E0 = -1; + } else { +block_7: + if (D_800E0758[temp_s0] != -1) { + func_80000FDC(D_800E0758[temp_s0] & 0xFFFF, 0, 0x3F000000); + } + func_80000BE0(0x18); + func_80000B34(0x18); + func_80000B18(); + D_801263E0 = 0; + func_8009C674(&D_800E0FB4); + func_8009C8A4(&D_800E0FD8); + func_8008E45C(); + D_800E04D4 = (s32) D_80126550.unk7C; + D_800E04E4 = (s32) D_80126550.unk78; + D_800E04F4 = (s32) D_80126550.unk84; + D_800E0504 = (s32) D_80126550.unk80; + D_800E0514 = (s32) D_80126550.unk8C; + D_800E0524 = (s32) D_80126550.unk88; + D_800E05B4 = (s32) D_80126550.unkC0; + D_800E0614 = (s32) D_80126550.unk178; + func_800C01D8(&D_800DF77C); + D_801263BC = 0; + D_800DF47C = 0; + D_800E0980 = 0x1E; + func_800C4170(2); + func_8006E2E8(temp_s0, -1, 1); + } + } else { + goto block_7; + } + } else { + goto block_4; + } + } else { + goto block_4; + } + func_800C5494(7); + if (func_8006B14C(temp_s0) & 0x40) { + func_800C31EC(func_8006B190(temp_s0) + 0x3B); + } +} +#endif + GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80092E94.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuLoadNewAreaLoop.s") @@ -1769,7 +2340,36 @@ s32 func_80097744(unsigned char *arg0, s32 arg1) { return output; } +#if 1 GLOBAL_ASM("asm/non_matchings/unknown_080500/func_800977D0.s") +#else +s32 func_800977D0(unsigned char *arg0, unsigned char *arg1) { + s32 phi_v0 = 0; + s32 phi_v1 = 0; + while (*arg0 != '\0') { + if (*arg0 == ' ') { + arg0++; + phi_v0++; + while (*arg0 == ' ') { + arg0++; + phi_v0++; + } + if (*arg0 != '\0') { + while(phi_v1 < phi_v0){ + *arg1 = *arg0; + arg0++; + arg1++; + phi_v1++; + } + } + + } else { + *(arg1++) = *(arg0++); + } + } + *arg1 = '\0'; +} +#endif void func_80097874(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 *arg4, s32 arg5, s32 arg6) { D_800E0F90 = arg0; @@ -1889,10 +2489,9 @@ GLOBAL_ASM("asm/non_matchings/unknown_080500/MenuTrophyRaceRankingsInit.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/func_80098EBC.s") #else void func_80098EBC(s32 arg0) { + s32 test; s32 fade; s32 i; - s32 test; - s32 test2; D_801263BC = (D_801263BC + arg0) & 0x3F; @@ -1905,9 +2504,10 @@ void func_80098EBC(s32 arg0) { 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))) { + if (D_800DF4BC < 3 && ((D_801263E0 == 0 && D_80126418[i]) || (D_801263E0 != 0 && D_80126420[i]))) { fade = (test >> 1) + 0x80; } + D_800E1088[i][0].filterRed = fade; D_800E1088[i][0].filterGreen = fade; D_800E1088[i][0].filterBlue = fade; @@ -2118,30 +2718,15 @@ void func_8009BE54() { } void func_8009BE5C(void) { - D_8012645C = 0; - D_80126464 = 0; - D_80126454 = 0; - D_80126458 = 0; - D_80126468 = 0; - D_8012646C = 0; - D_8012645D = 0; - D_80126465 = 0; - D_80126455 = 0; - D_80126459 = 0; - D_80126469 = 0; - D_8012646D = 0; - D_8012645E = 0; - D_80126466 = 0; - D_80126456 = 0; - D_8012645A = 0; - D_8012646A = 0; - D_8012646E = 0; - D_8012645F = 0; - D_80126467 = 0; - D_80126457 = 0; - D_8012645B = 0; - D_8012646B = 0; - D_8012646F = 0; + s32 i; + for(i = 0; i < 4; i++) { + D_8012645C[i] = 0; + D_80126464[i] = 0; + D_80126454[i] = 0; + D_80126458[i] = 0; + D_80126468[i] = 0; + D_8012646C[i] = 0; + } } GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8009BF20.s") @@ -2189,14 +2774,14 @@ void func_8009C264(s32 arg0, s32 arg1) { } s8* func_8009C274(void) { - return &D_801263DC; + return D_801263DC; } 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]; @@ -2307,9 +2892,9 @@ void func_8009C508(s32 arg0) { func_8001004C(); } if (D_800DF758 == 0) { - if (D_800DF75C != 0) { + if (D_800DF75C != NULL) { func_80071140(D_800DF75C); - D_800DF75C = 0; + D_800DF75C = NULL; } if (*D_800DF750 != NULL) { func_80071140(*D_800DF750); @@ -2337,30 +2922,29 @@ void func_8009C8A4(s16 *arg0) { } } -#if 1 -GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8009C904.s") -# else s32 func_8006F94C(s32, s32); void func_8009C904(s32 arg0) { if (D_800DF75C == NULL) { - D_800DF75C = func_80070C9C(0x240, 0xFF0000FF); + D_800DF75C = func_80070C9C(sizeof(unk800DF510) * 18, 0xFF0000FF); } - D_800DF75C->unk0 = D_800DF510[arg0].unk0; - D_800DF75C->unk2 = D_800DF510[arg0].unk2; - D_800DF75C->unk4 = D_800DF510[arg0].unk4; - D_800DF75C->unk6 = D_800DF510[arg0].unk6; - D_800DF75C->unkC = D_800DF510[arg0].unkC; - D_800DF75C->unk10 = D_800DF510[arg0].unk10; - D_800DF75C->unk14 = D_800DF510[arg0].unk14; - D_800DF75C->unk8 = D_800DF510[arg0].unk8; - D_800DF75C->unk18 = D_800DF510[arg0].unk18; - D_800DF75C->unk1A = func_8006F94C(0, 0xFFFF); - D_800DF75C->unk1B = func_8006F94C(0, 0xFFFF); - D_800DF75C->unk1C = func_8006F94C(0, 0xFFFF); - D_800DF75C->unk1D = D_800DF510[arg0].unk1D; + D_800DF75C[arg0].unk0 = D_800DF510[arg0].unk0; + D_800DF75C[arg0].unk2 = D_800DF510[arg0].unk2; + D_800DF75C[arg0].unk4 = D_800DF510[arg0].unk4; + D_800DF75C[arg0].unk6 = D_800DF510[arg0].unk6; + D_800DF75C[arg0].unkC = D_800DF510[arg0].unkC; + D_800DF75C[arg0].unk10 = D_800DF510[arg0].unk10; + D_800DF75C[arg0].unk14 = D_800DF510[arg0].unk14; + D_800DF75C[arg0].unk8 = D_800DF510[arg0].unk8; + D_800DF75C[arg0].unk18 = D_800DF510[arg0].unk18; + D_800DF75C[arg0].unk1A = func_8006F94C(0, 0xFFFF); + D_800DF75C[arg0].unk1B = func_8006F94C(0, 0xFFFF); + D_800DF75C[arg0].unk1C = func_8006F94C(0, 0xFFFF); + D_800DF75C[arg0].unk1D = D_800DF510[arg0].unk1D; +} + +void func_8009CA58(void) { } -#endif GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8009CA60.s") GLOBAL_ASM("asm/non_matchings/unknown_080500/func_8009CD7C.s") @@ -2409,10 +2993,10 @@ void func_8009D1B8(s32 arg0, s32 arg1, s32 arg2) { } void func_8009D26C(void) { - if (D_80126464 < 0) { + if (D_80126464[0] < 0) { D_801264D8 = D_801264D8 + 1; func_80001D04(0xB2, NULL); - } else if (D_80126464 > 0) { + } else if (D_80126464[0] > 0) { D_801264D8 = D_801264D8 - 1; func_80001D04(0xB2, NULL); } @@ -2484,7 +3068,7 @@ void func_8009E9A8(void) { } -f32 func_8009E9B0(s32 arg0, s32 *arg1, s32 *arg2, s32 *arg3) { +f32 func_8009E9B0(s32 arg0, Gfx **arg1, s32 *arg2, s32 *arg3) { D_801263A0 = *arg1; D_801263A8 = *arg2; D_801263AC = *arg3; @@ -2534,17 +3118,17 @@ s32 func_8009EB20(void) { return val; } -void func_8009EB94(s32 arg0) { - s64 sp18 = 0; +void set_language(s32 language) { + s64 sp18 = 0; // English - switch(arg0) { - case 1: + switch(language) { + case 1: // German sp18 = 4; break; - case 2: + case 2: // French sp18 = 8; break; - case 3: + case 3: // Japanese sp18 = 12; break; }