diff --git a/asm/non_matchings/save_data/func_800732E8.s b/asm/non_matchings/save_data/func_800732E8.s deleted file mode 100644 index 5e48c219..00000000 --- a/asm/non_matchings/save_data/func_800732E8.s +++ /dev/null @@ -1,182 +0,0 @@ -glabel func_800732E8 -/* 073EE8 800732E8 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 073EEC 800732EC AFB20020 */ sw $s2, 0x20($sp) -/* 073EF0 800732F0 00809025 */ move $s2, $a0 -/* 073EF4 800732F4 AFBF0024 */ sw $ra, 0x24($sp) -/* 073EF8 800732F8 AFA5004C */ sw $a1, 0x4c($sp) -/* 073EFC 800732FC AFB1001C */ sw $s1, 0x1c($sp) -/* 073F00 80073300 AFB00018 */ sw $s0, 0x18($sp) -/* 073F04 80073304 27A5003C */ addiu $a1, $sp, 0x3c -/* 073F08 80073308 0C01AC89 */ jal get_number_of_levels_and_worlds -/* 073F0C 8007330C 27A40040 */ addiu $a0, $sp, 0x40 -/* 073F10 80073310 8FAE004C */ lw $t6, 0x4c($sp) -/* 073F14 80073314 3C018012 */ lui $at, %hi(D_801241EC) # $at, 0x8012 -/* 073F18 80073318 AC2E41EC */ sw $t6, %lo(D_801241EC)($at) -/* 073F1C 8007331C 3C018012 */ lui $at, %hi(D_801241F0) # $at, 0x8012 -/* 073F20 80073320 AC2041F0 */ sw $zero, %lo(D_801241F0)($at) -/* 073F24 80073324 3C018012 */ lui $at, %hi(D_801241F4) # $at, 0x8012 -/* 073F28 80073328 240F0080 */ li $t7, 128 -/* 073F2C 8007332C AC2F41F4 */ sw $t7, %lo(D_801241F4)($at) -/* 073F30 80073330 24040010 */ li $a0, 16 -/* 073F34 80073334 0C01CB8A */ jal func_80072E28 -/* 073F38 80073338 00002825 */ move $a1, $zero -/* 073F3C 8007333C 8FB80040 */ lw $t8, 0x40($sp) -/* 073F40 80073340 00008825 */ move $s1, $zero -/* 073F44 80073344 1B000025 */ blez $t8, .L800733DC -/* 073F48 80073348 00008025 */ move $s0, $zero -.L8007334C: -/* 073F4C 8007334C 0C01AC53 */ jal func_8006B14C -/* 073F50 80073350 02202025 */ move $a0, $s1 -/* 073F54 80073354 10400005 */ beqz $v0, .L8007336C -/* 073F58 80073358 30590040 */ andi $t9, $v0, 0x40 -/* 073F5C 8007335C 17200003 */ bnez $t9, .L8007336C -/* 073F60 80073360 24010008 */ li $at, 8 -/* 073F64 80073364 14410018 */ bne $v0, $at, .L800733C8 -/* 073F68 80073368 8FB80040 */ lw $t8, 0x40($sp) -.L8007336C: -/* 073F6C 8007336C 8E480004 */ lw $t0, 4($s2) -/* 073F70 80073370 00114880 */ sll $t1, $s1, 2 -/* 073F74 80073374 01095021 */ addu $t2, $t0, $t1 -/* 073F78 80073378 8D420000 */ lw $v0, ($t2) -/* 073F7C 8007337C 00002825 */ move $a1, $zero -/* 073F80 80073380 304B0001 */ andi $t3, $v0, 1 -/* 073F84 80073384 11600002 */ beqz $t3, .L80073390 -/* 073F88 80073388 304C0002 */ andi $t4, $v0, 2 -/* 073F8C 8007338C 24050001 */ li $a1, 1 -.L80073390: -/* 073F90 80073390 11800004 */ beqz $t4, .L800733A4 -/* 073F94 80073394 304E0004 */ andi $t6, $v0, 4 -/* 073F98 80073398 24A50001 */ addiu $a1, $a1, 1 -/* 073F9C 8007339C 30AD00FF */ andi $t5, $a1, 0xff -/* 073FA0 800733A0 01A02825 */ move $a1, $t5 -.L800733A4: -/* 073FA4 800733A4 11C00004 */ beqz $t6, .L800733B8 -/* 073FA8 800733A8 00000000 */ nop -/* 073FAC 800733AC 24A50001 */ addiu $a1, $a1, 1 -/* 073FB0 800733B0 30AF00FF */ andi $t7, $a1, 0xff -/* 073FB4 800733B4 01E02825 */ move $a1, $t7 -.L800733B8: -/* 073FB8 800733B8 0C01CB8A */ jal func_80072E28 -/* 073FBC 800733BC 24040002 */ li $a0, 2 -/* 073FC0 800733C0 26100002 */ addiu $s0, $s0, 2 -/* 073FC4 800733C4 8FB80040 */ lw $t8, 0x40($sp) -.L800733C8: -/* 073FC8 800733C8 26310001 */ addiu $s1, $s1, 1 -/* 073FCC 800733CC 0238082A */ slt $at, $s1, $t8 -/* 073FD0 800733D0 1420FFDE */ bnez $at, .L8007334C -/* 073FD4 800733D4 00000000 */ nop -/* 073FD8 800733D8 00008825 */ move $s1, $zero -.L800733DC: -/* 073FDC 800733DC 24190044 */ li $t9, 68 -/* 073FE0 800733E0 03302023 */ subu $a0, $t9, $s0 -/* 073FE4 800733E4 0C01CB8A */ jal func_80072E28 -/* 073FE8 800733E8 00002825 */ move $a1, $zero -/* 073FEC 800733EC 96450014 */ lhu $a1, 0x14($s2) -/* 073FF0 800733F0 0C01CB8A */ jal func_80072E28 -/* 073FF4 800733F4 24040006 */ li $a0, 6 -/* 073FF8 800733F8 9645000E */ lhu $a1, 0xe($s2) -/* 073FFC 800733FC 0C01CB8A */ jal func_80072E28 -/* 074000 80073400 2404000A */ li $a0, 10 -/* 074004 80073404 9645000C */ lhu $a1, 0xc($s2) -/* 074008 80073408 0C01CB8A */ jal func_80072E28 -/* 07400C 8007340C 2404000C */ li $a0, 12 -/* 074010 80073410 8FA8003C */ lw $t0, 0x3c($sp) -/* 074014 80073414 00008025 */ move $s0, $zero -/* 074018 80073418 1900000D */ blez $t0, .L80073450 -/* 07401C 8007341C 00000000 */ nop -.L80073420: -/* 074020 80073420 8E490000 */ lw $t1, ($s2) -/* 074024 80073424 24040007 */ li $a0, 7 -/* 074028 80073428 01305021 */ addu $t2, $t1, $s0 -/* 07402C 8007342C 85450000 */ lh $a1, ($t2) -/* 074030 80073430 0C01CB8A */ jal func_80072E28 -/* 074034 80073434 00000000 */ nop -/* 074038 80073438 8FAB003C */ lw $t3, 0x3c($sp) -/* 07403C 8007343C 26310001 */ addiu $s1, $s1, 1 -/* 074040 80073440 022B082A */ slt $at, $s1, $t3 -/* 074044 80073444 1420FFF6 */ bnez $at, .L80073420 -/* 074048 80073448 26100002 */ addiu $s0, $s0, 2 -/* 07404C 8007344C 00008825 */ move $s1, $zero -.L80073450: -/* 074050 80073450 92450016 */ lbu $a1, 0x16($s2) -/* 074054 80073454 0C01CB8A */ jal func_80072E28 -/* 074058 80073458 24040003 */ li $a0, 3 -/* 07405C 8007345C 92450017 */ lbu $a1, 0x17($s2) -/* 074060 80073460 0C01CB8A */ jal func_80072E28 -/* 074064 80073464 24040003 */ li $a0, 3 -/* 074068 80073468 8FAC003C */ lw $t4, 0x3c($sp) -/* 07406C 8007346C 00000000 */ nop -/* 074070 80073470 19800010 */ blez $t4, .L800734B4 -/* 074074 80073474 00000000 */ nop -.L80073478: -/* 074078 80073478 0C01AC75 */ jal get_hub_area_id -/* 07407C 8007347C 02202025 */ move $a0, $s1 -/* 074080 80073480 8E4D0004 */ lw $t5, 4($s2) -/* 074084 80073484 00027080 */ sll $t6, $v0, 2 -/* 074088 80073488 01AE7821 */ addu $t7, $t5, $t6 -/* 07408C 8007348C 8DE50000 */ lw $a1, ($t7) -/* 074090 80073490 24040010 */ li $a0, 16 -/* 074094 80073494 0005C403 */ sra $t8, $a1, 0x10 -/* 074098 80073498 0C01CB8A */ jal func_80072E28 -/* 07409C 8007349C 3305FFFF */ andi $a1, $t8, 0xffff -/* 0740A0 800734A0 8FA8003C */ lw $t0, 0x3c($sp) -/* 0740A4 800734A4 26310001 */ addiu $s1, $s1, 1 -/* 0740A8 800734A8 0228082A */ slt $at, $s1, $t0 -/* 0740AC 800734AC 1420FFF2 */ bnez $at, .L80073478 -/* 0740B0 800734B0 00000000 */ nop -.L800734B4: -/* 0740B4 800734B4 96450008 */ lhu $a1, 8($s2) -/* 0740B8 800734B8 0C01CB8A */ jal func_80072E28 -/* 0740BC 800734BC 24040008 */ li $a0, 8 -/* 0740C0 800734C0 8E450010 */ lw $a1, 0x10($s2) -/* 0740C4 800734C4 0C01CB8A */ jal func_80072E28 -/* 0740C8 800734C8 24040020 */ li $a0, 32 -/* 0740CC 800734CC 8E450050 */ lw $a1, 0x50($s2) -/* 0740D0 800734D0 0C01CB8A */ jal func_80072E28 -/* 0740D4 800734D4 24040010 */ li $a0, 16 -/* 0740D8 800734D8 24040008 */ li $a0, 8 -/* 0740DC 800734DC 0C01CB8A */ jal func_80072E28 -/* 0740E0 800734E0 00002825 */ move $a1, $zero -/* 0740E4 800734E4 8FA6004C */ lw $a2, 0x4c($sp) -/* 0740E8 800734E8 24110004 */ li $s1, 4 -/* 0740EC 800734EC 24C40002 */ addiu $a0, $a2, 2 -/* 0740F0 800734F0 90820000 */ lbu $v0, ($a0) -/* 0740F4 800734F4 908B0001 */ lbu $t3, 1($a0) -/* 0740F8 800734F8 244A0005 */ addiu $t2, $v0, 5 -/* 0740FC 800734FC 014B1021 */ addu $v0, $t2, $t3 -/* 074100 80073500 00026400 */ sll $t4, $v0, 0x10 -/* 074104 80073504 000C1403 */ sra $v0, $t4, 0x10 -/* 074108 80073508 24040028 */ li $a0, 40 -/* 07410C 8007350C 24C30004 */ addiu $v1, $a2, 4 -.L80073510: -/* 074110 80073510 906E0000 */ lbu $t6, ($v1) -/* 074114 80073514 90790001 */ lbu $t9, 1($v1) -/* 074118 80073518 906A0002 */ lbu $t2, 2($v1) -/* 07411C 8007351C 004EC021 */ addu $t8, $v0, $t6 -/* 074120 80073520 906D0003 */ lbu $t5, 3($v1) -/* 074124 80073524 03194821 */ addu $t1, $t8, $t9 -/* 074128 80073528 012A6021 */ addu $t4, $t1, $t2 -/* 07412C 8007352C 018D1021 */ addu $v0, $t4, $t5 -/* 074130 80073530 00027400 */ sll $t6, $v0, 0x10 -/* 074134 80073534 000E7C03 */ sra $t7, $t6, 0x10 -/* 074138 80073538 26310004 */ addiu $s1, $s1, 4 -/* 07413C 8007353C 01E01025 */ move $v0, $t7 -/* 074140 80073540 1624FFF3 */ bne $s1, $a0, .L80073510 -/* 074144 80073544 24630004 */ addiu $v1, $v1, 4 -/* 074148 80073548 3C018012 */ lui $at, %hi(D_801241EC) # $at, 0x8012 -/* 07414C 8007354C AC2641EC */ sw $a2, %lo(D_801241EC)($at) -/* 074150 80073550 3C018012 */ lui $at, %hi(D_801241F0) # $at, 0x8012 -/* 074154 80073554 AC2041F0 */ sw $zero, %lo(D_801241F0)($at) -/* 074158 80073558 3C018012 */ lui $at, %hi(D_801241F4) # $at, 0x8012 -/* 07415C 8007355C 24180080 */ li $t8, 128 -/* 074160 80073560 AC3841F4 */ sw $t8, %lo(D_801241F4)($at) -/* 074164 80073564 24040010 */ li $a0, 16 -/* 074168 80073568 0C01CB8A */ jal func_80072E28 -/* 07416C 8007356C 01E02825 */ move $a1, $t7 -/* 074170 80073570 8FBF0024 */ lw $ra, 0x24($sp) -/* 074174 80073574 8FB00018 */ lw $s0, 0x18($sp) -/* 074178 80073578 8FB1001C */ lw $s1, 0x1c($sp) -/* 07417C 8007357C 8FB20020 */ lw $s2, 0x20($sp) -/* 074180 80073580 03E00008 */ jr $ra -/* 074184 80073584 27BD0048 */ addiu $sp, $sp, 0x48 - diff --git a/asm/non_matchings/save_data/func_80073588.s b/asm/non_matchings/save_data/func_80073588.s deleted file mode 100644 index f4570049..00000000 --- a/asm/non_matchings/save_data/func_80073588.s +++ /dev/null @@ -1,217 +0,0 @@ -glabel func_80073588 -/* 074188 80073588 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 07418C 8007358C AFA5004C */ sw $a1, 0x4c($sp) -/* 074190 80073590 30C500FF */ andi $a1, $a2, 0xff -/* 074194 80073594 AFBF0024 */ sw $ra, 0x24($sp) -/* 074198 80073598 AFB30020 */ sw $s3, 0x20($sp) -/* 07419C 8007359C 00809825 */ move $s3, $a0 -/* 0741A0 800735A0 AFB2001C */ sw $s2, 0x1c($sp) -/* 0741A4 800735A4 AFB10018 */ sw $s1, 0x18($sp) -/* 0741A8 800735A8 AFB00014 */ sw $s0, 0x14($sp) -/* 0741AC 800735AC AFA60050 */ sw $a2, 0x50($sp) -/* 0741B0 800735B0 0C01B9DC */ jal func_8006E770 -/* 0741B4 800735B4 AFA5002C */ sw $a1, 0x2c($sp) -/* 0741B8 800735B8 27A40040 */ addiu $a0, $sp, 0x40 -/* 0741BC 800735BC 0C01AC89 */ jal get_number_of_levels_and_worlds -/* 0741C0 800735C0 27A5003C */ addiu $a1, $sp, 0x3c -/* 0741C4 800735C4 8FAF002C */ lw $t7, 0x2c($sp) -/* 0741C8 800735C8 8FB9004C */ lw $t9, 0x4c($sp) -/* 0741CC 800735CC 31F80001 */ andi $t8, $t7, 1 -/* 0741D0 800735D0 13000054 */ beqz $t8, .L80073724 -/* 0741D4 800735D4 3C018012 */ lui $at, %hi(D_801241EC) # $at, 0x8012 -/* 0741D8 800735D8 AC3941EC */ sw $t9, %lo(D_801241EC)($at) -/* 0741DC 800735DC 3C018012 */ lui $at, %hi(D_801241F0) # $at, 0x8012 -/* 0741E0 800735E0 AC2041F0 */ sw $zero, %lo(D_801241F0)($at) -/* 0741E4 800735E4 3C018012 */ lui $at, %hi(D_801241F4) # $at, 0x8012 -/* 0741E8 800735E8 AC2041F4 */ sw $zero, %lo(D_801241F4)($at) -/* 0741EC 800735EC 24110002 */ li $s1, 2 -/* 0741F0 800735F0 24100005 */ li $s0, 5 -/* 0741F4 800735F4 27220002 */ addiu $v0, $t9, 2 -.L800735F8: -/* 0741F8 800735F8 90480000 */ lbu $t0, ($v0) -/* 0741FC 800735FC 26310001 */ addiu $s1, $s1, 1 -/* 074200 80073600 02088021 */ addu $s0, $s0, $t0 -/* 074204 80073604 2A2100C0 */ slti $at, $s1, 0xc0 -/* 074208 80073608 00104C00 */ sll $t1, $s0, 0x10 -/* 07420C 8007360C 24420001 */ addiu $v0, $v0, 1 -/* 074210 80073610 1420FFF9 */ bnez $at, .L800735F8 -/* 074214 80073614 00098403 */ sra $s0, $t1, 0x10 -/* 074218 80073618 0C01CB15 */ jal func_80072C54 -/* 07421C 8007361C 24040010 */ li $a0, 16 -/* 074220 80073620 02028023 */ subu $s0, $s0, $v0 -/* 074224 80073624 00105C00 */ sll $t3, $s0, 0x10 -/* 074228 80073628 000B6403 */ sra $t4, $t3, 0x10 -/* 07422C 8007362C 1580003E */ bnez $t4, .L80073728 -/* 074230 80073630 8FAD002C */ lw $t5, 0x2c($sp) -/* 074234 80073634 8FAD0040 */ lw $t5, 0x40($sp) -/* 074238 80073638 00008825 */ move $s1, $zero -/* 07423C 8007363C 19A0003A */ blez $t5, .L80073728 -/* 074240 80073640 8FAD002C */ lw $t5, 0x2c($sp) -.L80073644: -/* 074244 80073644 0C01AC53 */ jal func_8006B14C -/* 074248 80073648 02202025 */ move $a0, $s1 -/* 07424C 8007364C 14400031 */ bnez $v0, .L80073714 -/* 074250 80073650 8FAC0040 */ lw $t4, 0x40($sp) -/* 074254 80073654 0C01AC3E */ jal get_map_available_vehicles -/* 074258 80073658 02202025 */ move $a0, $s1 -/* 07425C 8007365C 00029400 */ sll $s2, $v0, 0x10 -/* 074260 80073660 00127403 */ sra $t6, $s2, 0x10 -/* 074264 80073664 30590001 */ andi $t9, $v0, 1 -/* 074268 80073668 1320000D */ beqz $t9, .L800736A0 -/* 07426C 8007366C 01C09025 */ move $s2, $t6 -/* 074270 80073670 24040010 */ li $a0, 16 -/* 074274 80073674 0C01CB15 */ jal func_80072C54 -/* 074278 80073678 00118040 */ sll $s0, $s1, 1 -/* 07427C 8007367C 8E680024 */ lw $t0, 0x24($s3) -/* 074280 80073680 24040010 */ li $a0, 16 -/* 074284 80073684 01104821 */ addu $t1, $t0, $s0 -/* 074288 80073688 0C01CB15 */ jal func_80072C54 -/* 07428C 8007368C A5220000 */ sh $v0, ($t1) -/* 074290 80073690 8E6A0018 */ lw $t2, 0x18($s3) -/* 074294 80073694 00000000 */ nop -/* 074298 80073698 01505821 */ addu $t3, $t2, $s0 -/* 07429C 8007369C A5620000 */ sh $v0, ($t3) -.L800736A0: -/* 0742A0 800736A0 324C0002 */ andi $t4, $s2, 2 -/* 0742A4 800736A4 1180000C */ beqz $t4, .L800736D8 -/* 0742A8 800736A8 24040010 */ li $a0, 16 -/* 0742AC 800736AC 0C01CB15 */ jal func_80072C54 -/* 0742B0 800736B0 00118040 */ sll $s0, $s1, 1 -/* 0742B4 800736B4 8E6D0028 */ lw $t5, 0x28($s3) -/* 0742B8 800736B8 24040010 */ li $a0, 16 -/* 0742BC 800736BC 01B07021 */ addu $t6, $t5, $s0 -/* 0742C0 800736C0 0C01CB15 */ jal func_80072C54 -/* 0742C4 800736C4 A5C20000 */ sh $v0, ($t6) -/* 0742C8 800736C8 8E6F001C */ lw $t7, 0x1c($s3) -/* 0742CC 800736CC 00000000 */ nop -/* 0742D0 800736D0 01F0C021 */ addu $t8, $t7, $s0 -/* 0742D4 800736D4 A7020000 */ sh $v0, ($t8) -.L800736D8: -/* 0742D8 800736D8 32590004 */ andi $t9, $s2, 4 -/* 0742DC 800736DC 1320000C */ beqz $t9, .L80073710 -/* 0742E0 800736E0 24040010 */ li $a0, 16 -/* 0742E4 800736E4 0C01CB15 */ jal func_80072C54 -/* 0742E8 800736E8 00118040 */ sll $s0, $s1, 1 -/* 0742EC 800736EC 8E68002C */ lw $t0, 0x2c($s3) -/* 0742F0 800736F0 24040010 */ li $a0, 16 -/* 0742F4 800736F4 01104821 */ addu $t1, $t0, $s0 -/* 0742F8 800736F8 0C01CB15 */ jal func_80072C54 -/* 0742FC 800736FC A5220000 */ sh $v0, ($t1) -/* 074300 80073700 8E6A0020 */ lw $t2, 0x20($s3) -/* 074304 80073704 00000000 */ nop -/* 074308 80073708 01505821 */ addu $t3, $t2, $s0 -/* 07430C 8007370C A5620000 */ sh $v0, ($t3) -.L80073710: -/* 074310 80073710 8FAC0040 */ lw $t4, 0x40($sp) -.L80073714: -/* 074314 80073714 26310001 */ addiu $s1, $s1, 1 -/* 074318 80073718 022C082A */ slt $at, $s1, $t4 -/* 07431C 8007371C 1420FFC9 */ bnez $at, .L80073644 -/* 074320 80073720 00000000 */ nop -.L80073724: -/* 074324 80073724 8FAD002C */ lw $t5, 0x2c($sp) -.L80073728: -/* 074328 80073728 8FAF004C */ lw $t7, 0x4c($sp) -/* 07432C 8007372C 31AE0002 */ andi $t6, $t5, 2 -/* 074330 80073730 11C00055 */ beqz $t6, .L80073888 -/* 074334 80073734 25F800C0 */ addiu $t8, $t7, 0xc0 -/* 074338 80073738 3C018012 */ lui $at, %hi(D_801241EC) # $at, 0x8012 -/* 07433C 8007373C AC3841EC */ sw $t8, %lo(D_801241EC)($at) -/* 074340 80073740 3C018012 */ lui $at, %hi(D_801241F0) # $at, 0x8012 -/* 074344 80073744 AC2041F0 */ sw $zero, %lo(D_801241F0)($at) -/* 074348 80073748 3C018012 */ lui $at, %hi(D_801241F4) # $at, 0x8012 -/* 07434C 8007374C AC2041F4 */ sw $zero, %lo(D_801241F4)($at) -/* 074350 80073750 24110002 */ li $s1, 2 -/* 074354 80073754 24100005 */ li $s0, 5 -/* 074358 80073758 27020002 */ addiu $v0, $t8, 2 -.L8007375C: -/* 07435C 8007375C 90590000 */ lbu $t9, ($v0) -/* 074360 80073760 26310001 */ addiu $s1, $s1, 1 -/* 074364 80073764 02198021 */ addu $s0, $s0, $t9 -/* 074368 80073768 2A2100C0 */ slti $at, $s1, 0xc0 -/* 07436C 8007376C 00104400 */ sll $t0, $s0, 0x10 -/* 074370 80073770 24420001 */ addiu $v0, $v0, 1 -/* 074374 80073774 1420FFF9 */ bnez $at, .L8007375C -/* 074378 80073778 00088403 */ sra $s0, $t0, 0x10 -/* 07437C 8007377C 0C01CB15 */ jal func_80072C54 -/* 074380 80073780 24040010 */ li $a0, 16 -/* 074384 80073784 02028023 */ subu $s0, $s0, $v0 -/* 074388 80073788 00105400 */ sll $t2, $s0, 0x10 -/* 07438C 8007378C 000A5C03 */ sra $t3, $t2, 0x10 -/* 074390 80073790 1560003E */ bnez $t3, .L8007388C -/* 074394 80073794 8FBF0024 */ lw $ra, 0x24($sp) -/* 074398 80073798 8FAC0040 */ lw $t4, 0x40($sp) -/* 07439C 8007379C 00008825 */ move $s1, $zero -/* 0743A0 800737A0 1980003A */ blez $t4, .L8007388C -/* 0743A4 800737A4 8FBF0024 */ lw $ra, 0x24($sp) -.L800737A8: -/* 0743A8 800737A8 0C01AC53 */ jal func_8006B14C -/* 0743AC 800737AC 02202025 */ move $a0, $s1 -/* 0743B0 800737B0 14400031 */ bnez $v0, .L80073878 -/* 0743B4 800737B4 8FAB0040 */ lw $t3, 0x40($sp) -/* 0743B8 800737B8 0C01AC3E */ jal get_map_available_vehicles -/* 0743BC 800737BC 02202025 */ move $a0, $s1 -/* 0743C0 800737C0 00029400 */ sll $s2, $v0, 0x10 -/* 0743C4 800737C4 00126C03 */ sra $t5, $s2, 0x10 -/* 0743C8 800737C8 30580001 */ andi $t8, $v0, 1 -/* 0743CC 800737CC 1300000D */ beqz $t8, .L80073804 -/* 0743D0 800737D0 01A09025 */ move $s2, $t5 -/* 0743D4 800737D4 24040010 */ li $a0, 16 -/* 0743D8 800737D8 0C01CB15 */ jal func_80072C54 -/* 0743DC 800737DC 00118040 */ sll $s0, $s1, 1 -/* 0743E0 800737E0 8E79003C */ lw $t9, 0x3c($s3) -/* 0743E4 800737E4 24040010 */ li $a0, 16 -/* 0743E8 800737E8 03304021 */ addu $t0, $t9, $s0 -/* 0743EC 800737EC 0C01CB15 */ jal func_80072C54 -/* 0743F0 800737F0 A5020000 */ sh $v0, ($t0) -/* 0743F4 800737F4 8E690030 */ lw $t1, 0x30($s3) -/* 0743F8 800737F8 00000000 */ nop -/* 0743FC 800737FC 01305021 */ addu $t2, $t1, $s0 -/* 074400 80073800 A5420000 */ sh $v0, ($t2) -.L80073804: -/* 074404 80073804 324B0002 */ andi $t3, $s2, 2 -/* 074408 80073808 1160000C */ beqz $t3, .L8007383C -/* 07440C 8007380C 24040010 */ li $a0, 16 -/* 074410 80073810 0C01CB15 */ jal func_80072C54 -/* 074414 80073814 00118040 */ sll $s0, $s1, 1 -/* 074418 80073818 8E6C0040 */ lw $t4, 0x40($s3) -/* 07441C 8007381C 24040010 */ li $a0, 16 -/* 074420 80073820 01906821 */ addu $t5, $t4, $s0 -/* 074424 80073824 0C01CB15 */ jal func_80072C54 -/* 074428 80073828 A5A20000 */ sh $v0, ($t5) -/* 07442C 8007382C 8E6E0034 */ lw $t6, 0x34($s3) -/* 074430 80073830 00000000 */ nop -/* 074434 80073834 01D07821 */ addu $t7, $t6, $s0 -/* 074438 80073838 A5E20000 */ sh $v0, ($t7) -.L8007383C: -/* 07443C 8007383C 32580004 */ andi $t8, $s2, 4 -/* 074440 80073840 1300000C */ beqz $t8, .L80073874 -/* 074444 80073844 24040010 */ li $a0, 16 -/* 074448 80073848 0C01CB15 */ jal func_80072C54 -/* 07444C 8007384C 00118040 */ sll $s0, $s1, 1 -/* 074450 80073850 8E790044 */ lw $t9, 0x44($s3) -/* 074454 80073854 24040010 */ li $a0, 16 -/* 074458 80073858 03304021 */ addu $t0, $t9, $s0 -/* 07445C 8007385C 0C01CB15 */ jal func_80072C54 -/* 074460 80073860 A5020000 */ sh $v0, ($t0) -/* 074464 80073864 8E690038 */ lw $t1, 0x38($s3) -/* 074468 80073868 00000000 */ nop -/* 07446C 8007386C 01305021 */ addu $t2, $t1, $s0 -/* 074470 80073870 A5420000 */ sh $v0, ($t2) -.L80073874: -/* 074474 80073874 8FAB0040 */ lw $t3, 0x40($sp) -.L80073878: -/* 074478 80073878 26310001 */ addiu $s1, $s1, 1 -/* 07447C 8007387C 022B082A */ slt $at, $s1, $t3 -/* 074480 80073880 1420FFC9 */ bnez $at, .L800737A8 -/* 074484 80073884 00000000 */ nop -.L80073888: -/* 074488 80073888 8FBF0024 */ lw $ra, 0x24($sp) -.L8007388C: -/* 07448C 8007388C 8FB00014 */ lw $s0, 0x14($sp) -/* 074490 80073890 8FB10018 */ lw $s1, 0x18($sp) -/* 074494 80073894 8FB2001C */ lw $s2, 0x1c($sp) -/* 074498 80073898 8FB30020 */ lw $s3, 0x20($sp) -/* 07449C 8007389C 03E00008 */ jr $ra -/* 0744A0 800738A0 27BD0048 */ addiu $sp, $sp, 0x48 - diff --git a/asm/non_matchings/save_data/func_80073C5C.s b/asm/non_matchings/save_data/func_80073C5C.s deleted file mode 100644 index 2c172a8a..00000000 --- a/asm/non_matchings/save_data/func_80073C5C.s +++ /dev/null @@ -1,126 +0,0 @@ -glabel func_80073C5C -/* 07485C 80073C5C 27BDFEC0 */ addiu $sp, $sp, -0x140 -/* 074860 80073C60 AFBF0044 */ sw $ra, 0x44($sp) -/* 074864 80073C64 AFB20028 */ sw $s2, 0x28($sp) -/* 074868 80073C68 AFB10024 */ sw $s1, 0x24($sp) -/* 07486C 80073C6C AFA50144 */ sw $a1, 0x144($sp) -/* 074870 80073C70 AFA60148 */ sw $a2, 0x148($sp) -/* 074874 80073C74 27AE0070 */ addiu $t6, $sp, 0x70 -/* 074878 80073C78 27AF00B0 */ addiu $t7, $sp, 0xb0 -/* 07487C 80073C7C AFBE0040 */ sw $fp, 0x40($sp) -/* 074880 80073C80 AFB7003C */ sw $s7, 0x3c($sp) -/* 074884 80073C84 AFB60038 */ sw $s6, 0x38($sp) -/* 074888 80073C88 AFB50034 */ sw $s5, 0x34($sp) -/* 07488C 80073C8C AFB40030 */ sw $s4, 0x30($sp) -/* 074890 80073C90 AFB3002C */ sw $s3, 0x2c($sp) -/* 074894 80073C94 AFB00020 */ sw $s0, 0x20($sp) -/* 074898 80073C98 24120020 */ li $s2, 32 -/* 07489C 80073C9C 00008825 */ move $s1, $zero -/* 0748A0 80073CA0 AFAF0014 */ sw $t7, 0x14($sp) -/* 0748A4 80073CA4 AFAE0010 */ sw $t6, 0x10($sp) -/* 0748A8 80073CA8 27A60100 */ addiu $a2, $sp, 0x100 -/* 0748AC 80073CAC 24050010 */ li $a1, 16 -/* 0748B0 80073CB0 0C01D798 */ jal get_controller_pak_file_list -/* 0748B4 80073CB4 27A700C0 */ addiu $a3, $sp, 0xc0 -/* 0748B8 80073CB8 1440004B */ bnez $v0, .L80073DE8 -/* 0748BC 80073CBC AFA20060 */ sw $v0, 0x60($sp) -/* 0748C0 80073CC0 3C1E800E */ lui $fp, %hi(D_800E7630) # $fp, 0x800e -/* 0748C4 80073CC4 3C17800E */ lui $s7, %hi(D_800E7640) # $s7, 0x800e -/* 0748C8 80073CC8 26F77640 */ addiu $s7, %lo(D_800E7640) # addiu $s7, $s7, 0x7640 -/* 0748CC 80073CCC 27DE7630 */ addiu $fp, %lo(D_800E7630) # addiu $fp, $fp, 0x7630 -/* 0748D0 80073CD0 00009825 */ move $s3, $zero -/* 0748D4 80073CD4 27B00100 */ addiu $s0, $sp, 0x100 -/* 0748D8 80073CD8 0240A025 */ move $s4, $s2 -/* 0748DC 80073CDC 24160003 */ li $s6, 3 -/* 0748E0 80073CE0 27B50140 */ addiu $s5, $sp, 0x140 -.L80073CE4: -/* 0748E4 80073CE4 8E180000 */ lw $t8, ($s0) -/* 0748E8 80073CE8 8FB90144 */ lw $t9, 0x144($sp) -/* 0748EC 80073CEC 13000022 */ beqz $t8, .L80073D78 -/* 0748F0 80073CF0 00000000 */ nop -/* 0748F4 80073CF4 1736000B */ bne $t9, $s6, .L80073D24 -/* 0748F8 80073CF8 3C04800E */ lui $a0, %hi(D_800E7660) # $a0, 0x800e -/* 0748FC 80073CFC 0C033867 */ jal strlen -/* 074900 80073D00 02E02025 */ move $a0, $s7 -/* 074904 80073D04 8E040000 */ lw $a0, ($s0) -/* 074908 80073D08 03C02825 */ move $a1, $fp -/* 07490C 80073D0C 0C033814 */ jal func_800CE050 -/* 074910 80073D10 00403025 */ move $a2, $v0 -/* 074914 80073D14 1040000C */ beqz $v0, .L80073D48 -/* 074918 80073D18 03B34021 */ addu $t0, $sp, $s3 -/* 07491C 80073D1C 10000017 */ b .L80073D7C -/* 074920 80073D20 26100004 */ addiu $s0, $s0, 4 -.L80073D24: -/* 074924 80073D24 0C033867 */ jal strlen -/* 074928 80073D28 24847660 */ addiu $a0, %lo(D_800E7660) # addiu $a0, $a0, 0x7660 -/* 07492C 80073D2C 8E040000 */ lw $a0, ($s0) -/* 074930 80073D30 3C05800E */ lui $a1, %hi(D_800E7650) # $a1, 0x800e -/* 074934 80073D34 24A57650 */ addiu $a1, %lo(D_800E7650) # addiu $a1, $a1, 0x7650 -/* 074938 80073D38 0C033814 */ jal func_800CE050 -/* 07493C 80073D3C 00403025 */ move $a2, $v0 -/* 074940 80073D40 1440000D */ bnez $v0, .L80073D78 -/* 074944 80073D44 03B34021 */ addu $t0, $sp, $s3 -.L80073D48: -/* 074948 80073D48 8D0800C0 */ lw $t0, 0xc0($t0) -/* 07494C 80073D4C 240A0001 */ li $t2, 1 -/* 074950 80073D50 91020000 */ lbu $v0, ($t0) -/* 074954 80073D54 00000000 */ nop -/* 074958 80073D58 0282082A */ slt $at, $s4, $v0 -/* 07495C 80073D5C 10200003 */ beqz $at, .L80073D6C -/* 074960 80073D60 00401825 */ move $v1, $v0 -/* 074964 80073D64 305200FF */ andi $s2, $v0, 0xff -/* 074968 80073D68 0240A025 */ move $s4, $s2 -.L80073D6C: -/* 07496C 80073D6C 2469001F */ addiu $t1, $v1, 0x1f -/* 074970 80073D70 012A5804 */ sllv $t3, $t2, $t1 -/* 074974 80073D74 022B8825 */ or $s1, $s1, $t3 -.L80073D78: -/* 074978 80073D78 26100004 */ addiu $s0, $s0, 4 -.L80073D7C: -/* 07497C 80073D7C 1615FFD9 */ bne $s0, $s5, .L80073CE4 -/* 074980 80073D80 26730004 */ addiu $s3, $s3, 4 -/* 074984 80073D84 24010020 */ li $at, 32 -/* 074988 80073D88 8FA20148 */ lw $v0, 0x148($sp) -/* 07498C 80073D8C 16810004 */ bne $s4, $at, .L80073DA0 -/* 074990 80073D90 2401005A */ li $at, 90 -/* 074994 80073D94 10000012 */ b .L80073DE0 -/* 074998 80073D98 24120041 */ li $s2, 65 -/* 07499C 80073D9C 2401005A */ li $at, 90 -.L80073DA0: -/* 0749A0 80073DA0 1681000D */ bne $s4, $at, .L80073DD8 -/* 0749A4 80073DA4 26520001 */ addiu $s2, $s2, 1 -/* 0749A8 80073DA8 24120041 */ li $s2, 65 -.L80073DAC: -/* 0749AC 80073DAC 322C0001 */ andi $t4, $s1, 1 -/* 0749B0 80073DB0 1180000B */ beqz $t4, .L80073DE0 -/* 0749B4 80073DB4 00116843 */ sra $t5, $s1, 1 -/* 0749B8 80073DB8 26520001 */ addiu $s2, $s2, 1 -/* 0749BC 80073DBC 324E00FF */ andi $t6, $s2, 0xff -/* 0749C0 80073DC0 29C1005B */ slti $at, $t6, 0x5b -/* 0749C4 80073DC4 01C09025 */ move $s2, $t6 -/* 0749C8 80073DC8 1420FFF8 */ bnez $at, .L80073DAC -/* 0749CC 80073DCC 01A08825 */ move $s1, $t5 -/* 0749D0 80073DD0 10000004 */ b .L80073DE4 -/* 0749D4 80073DD4 A0520000 */ sb $s2, ($v0) -.L80073DD8: -/* 0749D8 80073DD8 324F00FF */ andi $t7, $s2, 0xff -/* 0749DC 80073DDC 01E09025 */ move $s2, $t7 -.L80073DE0: -/* 0749E0 80073DE0 A0520000 */ sb $s2, ($v0) -.L80073DE4: -/* 0749E4 80073DE4 A0400001 */ sb $zero, 1($v0) -.L80073DE8: -/* 0749E8 80073DE8 8FBF0044 */ lw $ra, 0x44($sp) -/* 0749EC 80073DEC 8FA20060 */ lw $v0, 0x60($sp) -/* 0749F0 80073DF0 8FB00020 */ lw $s0, 0x20($sp) -/* 0749F4 80073DF4 8FB10024 */ lw $s1, 0x24($sp) -/* 0749F8 80073DF8 8FB20028 */ lw $s2, 0x28($sp) -/* 0749FC 80073DFC 8FB3002C */ lw $s3, 0x2c($sp) -/* 074A00 80073E00 8FB40030 */ lw $s4, 0x30($sp) -/* 074A04 80073E04 8FB50034 */ lw $s5, 0x34($sp) -/* 074A08 80073E08 8FB60038 */ lw $s6, 0x38($sp) -/* 074A0C 80073E0C 8FB7003C */ lw $s7, 0x3c($sp) -/* 074A10 80073E10 8FBE0040 */ lw $fp, 0x40($sp) -/* 074A14 80073E14 03E00008 */ jr $ra -/* 074A18 80073E18 27BD0140 */ addiu $sp, $sp, 0x140 - diff --git a/src/save_data.c b/src/save_data.c index c1a17d16..50686917 100644 --- a/src/save_data.c +++ b/src/save_data.c @@ -342,7 +342,7 @@ s32 func_80072C54(s32 arg0) { // arg0 is the number of bits we care about // arg1 is the bit being looked for. -void func_80072E28(s32 arg0, s32 arg1) { +void func_80072E28(s32 arg0, u32 arg1) { u32 var_v0; if (arg0 > 0) { @@ -419,22 +419,20 @@ void populate_settings_from_save_data(Settings *settings, u8 *saveData) { } } -#ifdef NON_EQUIVALENT void func_800732E8(Settings *settings, u8 *saveData) { + s16 var_v0; + s8 temp_v0; + u8 courseStatus; s32 levelCount; s32 worldCount; - s16 var_v0; - u8 courseStatus; - s32 var_s0; s32 i; - s8 temp_v0; - s32 blocks; + s32 var_s0; get_number_of_levels_and_worlds(&levelCount, &worldCount); D_801241EC = saveData; D_801241F0 = 0; - D_801241F4 = 128; // 1000 0000 in binary. - func_80072E28(0x10, 0); + D_801241F4 = 128; + func_80072E28(16, 0); for (i = 0, var_s0 = 0; i < levelCount; i++) { temp_v0 = func_8006B14C(i); if ((temp_v0 == 0) || (temp_v0 & 0x40) || (temp_v0 == 8)) { @@ -455,47 +453,39 @@ void func_800732E8(Settings *settings, u8 *saveData) { var_s0 += 2; } } - func_80072E28(0x44 - var_s0, 0); + func_80072E28(68 - var_s0, 0); func_80072E28(6, settings->tajFlags); - func_80072E28(0xA, settings->trophies); - func_80072E28(0xC, settings->bosses); + func_80072E28(10, settings->trophies); + func_80072E28(12, settings->bosses); for (i = 0; i < worldCount; i++) { - func_80072E28(7, settings->balloonsPtr[i * 2]); + func_80072E28(7, settings->balloonsPtr[i]); } func_80072E28(3, settings->ttAmulet); func_80072E28(3, settings->wizpigAmulet); for (i = 0; i < worldCount; i++) { - func_80072E28(0x10, (settings->courseFlagsPtr[get_hub_area_id(i)] >> 16) & 0xFFFF); + func_80072E28(16, (settings->courseFlagsPtr[get_hub_area_id(i)] >> 16) & 0xFFFF); } func_80072E28(8, settings->keys); - func_80072E28(0x20, settings->cutsceneFlags); - func_80072E28(0x10, settings->filename); + func_80072E28(32, settings->cutsceneFlags); + func_80072E28(16, settings->filename); func_80072E28(8, 0); - blocks = 5; - var_v0 = saveData[2] + blocks + saveData[2] + 1; - // 40 is the number of bytes in a save file - // This will be +4 so as to skip the first 4 bytes, which will just be GAMD, the save file header. - for (i = 4; i < blocks * (s32)sizeof(u64); i++) { - var_v0 += saveData[i] + saveData[i + 1] + saveData[i + 2] + saveData[i + 3]; + for (i = 2, var_v0 = 5; i < 40; i++) { + var_v0 += saveData[i]; } D_801241EC = saveData; D_801241F0 = 0; - D_801241F4 = 128; // 1000 0000 in binary. - func_80072E28(0x10, var_v0); + D_801241F4 = 128; + func_80072E28(16, var_v0); } -#else -GLOBAL_ASM("asm/non_matchings/save_data/func_800732E8.s") -#endif //arg1 is eepromData, from read_eeprom_data //arg2 seems to be a flag for either lap times or course initials? -#ifdef NON_MATCHING void func_80073588(Settings *settings, u8 *saveData, u8 arg2) { s16 availableVehicles; s32 levelCount; s32 worldCount; s32 i; - s16 var_s0; + s16 sum; func_8006E770(settings, arg2); get_number_of_levels_and_worlds(&levelCount, &worldCount); @@ -504,71 +494,154 @@ void func_80073588(Settings *settings, u8 *saveData, u8 arg2) { D_801241EC = saveData; D_801241F0 = 0; D_801241F4 = 0; - for (i = 2, var_s0 = 5; i < 192; i++) { - var_s0 += saveData[i]; + for (i = 2, sum = 5; i < 192; i++) { + sum += D_801241EC[i]; } - var_s0 -= func_80072C54(0x10); - if (var_s0 == 0) { + sum -= func_80072C54(16); + if (sum == 0) { for (i = 0; i < levelCount; i++) { if (func_8006B14C(i) == 0) { availableVehicles = get_map_available_vehicles(i); // Car Available if (availableVehicles & 1) { - settings->flapTimesPtr[0][i] = func_80072C54(0x10); - settings->flapInitialsPtr[0][i] = func_80072C54(0x10); + settings->flapTimesPtr[0][i] = func_80072C54(16); + settings->flapInitialsPtr[0][i] = func_80072C54(16); } // Hovercraft Available if (availableVehicles & 2) { - settings->flapTimesPtr[1][i] = func_80072C54(0x10); - settings->flapInitialsPtr[1][i] = func_80072C54(0x10); + settings->flapTimesPtr[1][i] = func_80072C54(16); + settings->flapInitialsPtr[1][i] = func_80072C54(16); } // Plane Available if (availableVehicles & 4) { - settings->flapTimesPtr[2][i] = func_80072C54(0x10); - settings->flapInitialsPtr[2][i] = func_80072C54(0x10); + settings->flapTimesPtr[2][i] = func_80072C54(16); + settings->flapInitialsPtr[2][i] = func_80072C54(16); } } } } } if (arg2 & 2) { - saveData += 192; - D_801241EC = saveData; + D_801241EC = saveData + 192; D_801241F0 = 0; D_801241F4 = 0; - for (i = 2, var_s0 = 5; i < 192; i++) { - var_s0 += saveData[i]; + for (i = 2, sum = 5; i < 192; i++) { + sum += (s16) D_801241EC[i]; } - var_s0 -= func_80072C54(0x10); - if (var_s0 == 0) { + sum -= func_80072C54(16); + if (sum == 0) { for (i = 0; i < levelCount; i++) { if (func_8006B14C(i) == 0) { availableVehicles = get_map_available_vehicles(i); // Car Available if (availableVehicles & 1) { - settings->courseTimesPtr[0][i] = func_80072C54(0x10); - settings->courseInitialsPtr[0][i] = func_80072C54(0x10); + settings->courseTimesPtr[0][i] = func_80072C54(16); + settings->courseInitialsPtr[0][i] = func_80072C54(16); } // Hovercraft Available if (availableVehicles & 2) { - settings->courseTimesPtr[1][i] = func_80072C54(0x10); - settings->courseInitialsPtr[1][i] = func_80072C54(0x10); + settings->courseTimesPtr[1][i] = func_80072C54(16); + settings->courseInitialsPtr[1][i] = func_80072C54(16); } // Plane Available if (availableVehicles & 4) { - settings->courseTimesPtr[2][i] = func_80072C54(0x10); - settings->courseInitialsPtr[2][i] = func_80072C54(0x10); + settings->courseTimesPtr[2][i] = func_80072C54(16); + settings->courseInitialsPtr[2][i] = func_80072C54(16); } } } } } } -#else -GLOBAL_ASM("asm/non_matchings/save_data/func_80073588.s") -#endif +#ifdef NON_EQUIVALENT +void func_800738A4(Settings *settings, u8 *saveData) { + s16 availableVehicles; + s32 levelCount; + s32 worldCount; + s32 i; + s32 vehicleCount; + s16 sum; + + // Fakematch? + if (1) { + get_number_of_levels_and_worlds(&levelCount, &worldCount); + D_801241EC = saveData; + D_801241F0 = 0; + D_801241F4 = 128; + func_80072E28(16, 0); + for (vehicleCount = 0, i = 0; i < levelCount; i++) { + if (func_8006B14C(i) == 0) { + availableVehicles = get_map_available_vehicles(i); + // Car Available + if (availableVehicles & 1) { + func_80072E28(16, settings->flapTimesPtr[0][i]); + func_80072E28(16, settings->flapInitialsPtr[0][i]); + vehicleCount++; + } + // Hovercraft Available + if (availableVehicles & 2) { + func_80072E28(16, settings->flapTimesPtr[1][i]); + func_80072E28(16, settings->flapInitialsPtr[1][i]); + vehicleCount++; + } + // Plane Available + if (availableVehicles & 4) { + func_80072E28(16, settings->flapTimesPtr[2][i]); + func_80072E28(16, settings->flapInitialsPtr[2][i]); + vehicleCount++; + } + // How do we make the `b` instruction appear? + if (vehicleCount < 48) { + continue; + } else { + break; + } + } + } + D_801241EC = saveData; + D_801241F0 = 0; + D_801241F4 = 128; + for (i = 2, sum = 5; i < 192; i++) { + sum += (s16) D_801241EC[i]; + } + func_80072E28(16, sum); + D_801241EC = saveData + 192; + D_801241F0 = 0; + D_801241F4 = 128; + func_80072E28(16, 0); + for (i = 0; i < levelCount; i++) { + if (func_8006B14C(i) == 0) { + availableVehicles = get_map_available_vehicles(i); + // Car Available + if (availableVehicles & 1) { + func_80072E28(16, settings->courseTimesPtr[0][i]); + func_80072E28(16, settings->courseInitialsPtr[0][i]); + } + // Hovercraft Available + if (availableVehicles & 2) { + func_80072E28(16, settings->courseTimesPtr[1][i]); + func_80072E28(16, settings->courseInitialsPtr[1][i]); + } + // Plane Available + if (availableVehicles & 4) { + func_80072E28(16, settings->courseTimesPtr[2][i]); + func_80072E28(16, settings->courseInitialsPtr[2][i]); + } + } + } + D_801241EC = saveData + 192; + D_801241F0 = 0; + D_801241F4 = 128; + } + for (i = 2, sum = 5; i < 192; i++) { + sum += D_801241EC[i]; + } + func_80072E28(16, sum); +} +#else GLOBAL_ASM("asm/non_matchings/save_data/func_800738A4.s") +#endif s32 get_game_data_file_size(void) { return 256; @@ -578,9 +651,56 @@ s32 get_time_data_file_size(void) { return 512; } -//Probably get_file_extension -//func_80073C5C(s32 controllerIndex, s32 fileType, char **fileExt); -GLOBAL_ASM("asm/non_matchings/save_data/func_80073C5C.s") +SIDeviceStatus get_file_extension(s32 controllerIndex, s32 fileType, char *fileExt) { + #define BLANK_EXT_CHAR ' ' + char *fileNames[16]; + char *fileExtensions[16]; + u8 fileTypes[16]; + u32 fileSizes[16]; + s32 var_s1; + s32 fileNum; + char fileExtChar; + SIDeviceStatus ret; + + fileExtChar = BLANK_EXT_CHAR; + var_s1 = 0; + ret = get_controller_pak_file_list(controllerIndex, 16, fileNames, fileExtensions, fileSizes, fileTypes); + if (ret == CONTROLLER_PAK_GOOD) { + for (fileNum = 0; fileNum < 16; fileNum++) { + if (fileNames[fileNum] == NULL) { + continue; + } + if (fileType == 3) { + if((func_800CE050((u8 *) fileNames[fileNum], (char *)D_800E7630, strlen((char *)D_800E7640)) != 0)) { + continue; + } + } else if((func_800CE050((u8 *) fileNames[fileNum], (char *)D_800E7650, strlen((char *)D_800E7660)) != 0)) { + continue; + } + + if (fileExtChar < fileExtensions[fileNum][0]) { + fileExtChar = fileExtensions[fileNum][0]; + } + var_s1 |= (1 << (fileExtensions[fileNum][0] + (BLANK_EXT_CHAR - 1))); + } + if (fileExtChar == BLANK_EXT_CHAR) { + fileExtChar = 'A'; + } else if (fileExtChar == 'Z') { + for (fileExtChar = 'A'; fileExtChar <= 'Z'; var_s1 >>= 1, fileExtChar++) { + if (!(var_s1 & 1)) { + break; + } + } + } else { + fileExtChar++; + } + // Even though file extensions are technically 4 characters, only the first is used. + // So this will set the extension to that character and then a null terminator. + fileExt[0] = fileExtChar; + fileExt[1] = '\0'; + } + return ret; +} //Read DKRACING-ADV data into settings? s32 read_game_data_from_controller_pak(s32 controllerIndex, char *fileExt, Settings *settings) { @@ -640,7 +760,7 @@ s32 write_game_data_to_controller_pak(s32 controllerIndex, Settings *arg1) { gameData = allocate_from_main_pool_safe(fileSize, COLOUR_TAG_WHITE); *((s32 *)gameData) = GAMD; func_800732E8(arg1, gameData + 4); - ret = func_80073C5C(controllerIndex, 3, &fileExt); + ret = get_file_extension(controllerIndex, 3, (char *)&fileExt); if (ret == CONTROLLER_PAK_GOOD) { // D_800E7680 = DKRACING-ADV ret = write_controller_pak_file(controllerIndex, -1, (char *) D_800E7680, (char *)&fileExt, gameData, fileSize); @@ -708,7 +828,7 @@ s32 write_time_data_to_controller_pak(s32 controllerIndex, Settings *arg1) { timeData = allocate_from_main_pool_safe(fileSize, COLOUR_TAG_WHITE); *((s32 *)timeData) = TIMD; func_800738A4(arg1, timeData + 4); - ret = func_80073C5C(controllerIndex, 4, &fileExt); + ret = get_file_extension(controllerIndex, 4, (char *)&fileExt); if (ret == CONTROLLER_PAK_GOOD) { //D_800E76A0 = DKRACING-TIMES ret = write_controller_pak_file(controllerIndex, -1, (char *)D_800E76A0, (char *)&fileExt, timeData, fileSize); @@ -1033,7 +1153,125 @@ s32 func_80074B1C(void) { return (&x)[0] * 6 + 0x100; } +#ifdef NON_EQUIVALENT +s32 func_80074B34(s32 controllerIndex, s16 levelId, s16 vehicleId, u16 *ghostCharacterId, s16 *ghostTime, s16 *ghostNodeCount, GhostHeader *ghostData) { + #define GHSS_FILE_SIZE 0x100 + u8 *fileData; + s32 fileNumber; + s32 fileOffset; + s32 fileSize; + s32 bytesFree; + s32 notesFree; + s32 ret; + s32 retTemp; + s32 var_v1; + u8 *temp_a1; + GhostHeader *ghostHeader; + u8 *var_v0_2; + u8 *temp_v0_4; + + fileOffset = 0; + ret = get_si_device_status(controllerIndex); + if (ret != CONTROLLER_PAK_GOOD) { + start_reading_controller_data(controllerIndex); + return ret; + } + if (ghostCharacterId != NULL) { + *ghostTime = -1; + *ghostCharacterId = -1; + } + //D_800E773C = "DKRACING-GHOSTS" + //D_800E774C = "" + ret = get_file_number(controllerIndex, (char *) D_800E773C, (char *) D_800E774C, &fileNumber); + if (ret == CONTROLLER_PAK_GOOD) { + fileData = allocate_from_main_pool_safe(GHSS_FILE_SIZE, COLOUR_TAG_BLACK); + if (!(pfs[controllerIndex].status & PFS_INITIALIZED)) { + osPfsInit(sControllerMesgQueue, &pfs[controllerIndex], controllerIndex); + } + ret = read_data_from_controller_pak(controllerIndex, fileNumber, fileData, GHSS_FILE_SIZE); + if (ret == CONTROLLER_PAK_GOOD) { + temp_a1 = fileData + 4; + if (fileData[0] == GHSS) { + var_v1 = 0; + var_v0_2 = temp_a1; +loop_10: + var_v1 += 4; + if ((levelId == var_v0_2[0]) && (vehicleId == var_v0_2[1])) { + fileOffset = var_v0_2[2]; + fileSize = var_v0_2[6] - var_v0_2[2]; + } else { + var_v0_2 += 4; + if (var_v1 < 24) { + goto loop_10; + } + } + if (fileOffset == 0) { + ret = CONTROLLER_PAK_UNK6; + if (fileData[4] == 0xFF) { + ret = CONTROLLER_PAK_UNK8; + } + temp_v0_4 = temp_a1 + (2 * 4); + if (fileData[4] == 0xFF) { + ret = CONTROLLER_PAK_UNK8; + } + if (temp_v0_4[0] == 0xFF) { + ret = CONTROLLER_PAK_UNK8; + } + if (temp_v0_4[4] == 0xFF) { + ret = CONTROLLER_PAK_UNK8; + } + if (temp_v0_4[8] == 0xFF) { + ret = CONTROLLER_PAK_UNK8; + } + if (temp_v0_4[12] == 0xFF) { + ret = CONTROLLER_PAK_UNK8; + } + } + } else { + ret = CONTROLLER_PAK_BAD_DATA; + } + } + free_from_memory_pool(fileData); + if (fileOffset != 0) { + if (ghostCharacterId != NULL) { + ghostHeader = allocate_from_main_pool_safe(fileSize + GHSS_FILE_SIZE, COLOUR_TAG_BLACK); + retTemp = CONTROLLER_PAK_BAD_DATA; + if (osPfsReadWriteFile(&pfs[controllerIndex], fileNumber, PFS_READ, fileOffset, fileSize, (u8 *) ghostHeader) == 0) { + if (calculate_ghost_header_checksum(ghostHeader) == ghostHeader->checksum) { + *ghostCharacterId = ghostHeader->characterID; + *ghostTime = ghostHeader->time; + *ghostNodeCount = ghostHeader->nodeCount; + bcopy(ghostHeader + 8, ghostData, *ghostNodeCount * sizeof(GhostNode)); + retTemp = CONTROLLER_PAK_GOOD; + } else { + retTemp = CONTROLLER_PAK_BAD_DATA; + } + } + free_from_memory_pool(ghostHeader); + ret = retTemp; + } + } + if ((fileOffset != 0) && (ghostCharacterId == NULL)) { + ret = CONTROLLER_PAK_GOOD; + } + } + start_reading_controller_data(controllerIndex); + if (ret == CONTROLLER_PAK_CHANGED) { + if (get_free_space(controllerIndex, &bytesFree, ¬esFree) == CONTROLLER_PAK_GOOD) { + if ((bytesFree < func_80074B1C()) || ((notesFree == 0))) { + return CONTROLLER_PAK_FULL; + } + /* Duplicate return node #48. Try simplifying control flow for better match */ + return ret; + } + return CONTROLLER_PAK_BAD_DATA; + } + return ret; +} +#else GLOBAL_ASM("asm/non_matchings/save_data/func_80074B34.s") +#endif + GLOBAL_ASM("asm/non_matchings/save_data/func_80074EB8.s") GLOBAL_ASM("asm/non_matchings/save_data/func_80075000.s") GLOBAL_ASM("asm/non_matchings/save_data/func_800753D8.s") @@ -1364,6 +1602,7 @@ void func_80076164(void) { } //Get Available Space in Controller Pak +//Upper bytes of return value couldl be controllerIndex s32 get_free_space(s32 controllerIndex, u32 *bytesFree, s32 *notesFree) { s32 ret; s32 bytesNotUsed; diff --git a/src/save_data.h b/src/save_data.h index 61b92101..2fc7d6ff 100644 --- a/src/save_data.h +++ b/src/save_data.h @@ -38,6 +38,7 @@ extern s8 *D_800DE440; extern u8 gN64FontCodes[68]; extern s32 D_800DE48C; extern OSPfs pfs[MAXCONTROLLERS]; +size_t strlen(const char *str); u8 func_80072250(s32 arg0); void func_80072298(u8 arg0); @@ -79,19 +80,19 @@ void func_80072348(s16 controllerIndex, u8 arg1); void func_80072424(s16 controllerIndex, u8 arg1, f32 arg2); void rumble_controllers(s32 arg0); void init_controller_paks(void); -void func_80072E28(s32 arg0, s32 arg1); +void func_80072E28(s32 arg0, u32 arg1); s32 func_80072C54(s32 arg0); void populate_settings_from_save_data(Settings *settings, u8 *saveData); s32 func_80074204(s32 saveFileNum, Settings *settings); void erase_save_file(s32 saveFileNum, Settings *settings); SIDeviceStatus func_800756D4(s32 controllerIndex, u8 *arg1, u8 *arg2, u8 *arg3, s16 *arg4); +SIDeviceStatus get_file_extension(s32 controllerIndex, s32 fileType, char *fileExt); //Non matching +void func_80073588(Settings *settings, u8 *saveData, u8 arg2); +void func_800732E8(Settings *settings, u8 *saveData); -s32 func_800738A4(Settings *arg0, u8 *arg1); //Non matching -void func_800732E8(Settings *arg0, u8 *arg1); //Non matching -//void func_80073588(Settings *arg0, u64 *eepromData, s32 arg2); //Non matching -s32 func_80073C5C(s32 controllerIndex, s32 arg1, char **arg2); //Non matching +void func_800738A4(Settings *settings, u8 *saveData); //Using some context, and best guesses, these could be the names of the variables -s32 func_80074B34(s32 controllerIndex, s16 levelID, s16 vehicleID, s16 *ghostCharacterID, s16 *ghostTime, s16 *ghostNodeCount, GhostHeader *arg6); //Non matching +s32 func_80074B34(s32 controllerIndex, s16 levelId, s16 vehicleId, u16 *ghostCharacterId, s16 *ghostTime, s16 *ghostNodeCount, GhostHeader *ghostData); //Non matching char *string_to_font_codes(char *inString, char *outString, s32 stringLength); //Reasonably certain about these names for now.