From 37e2fecf7e740edd00a46c32ea249dec68cdc59c Mon Sep 17 00:00:00 2001 From: Ryan Myers Date: Tue, 20 Sep 2022 09:42:30 -0400 Subject: [PATCH] =?UTF-8?q?Split=20out=20functions=20in=20unknown=5F070110?= =?UTF-8?q?,=20and=20do=20some=20documenting=20on=20the=E2=80=A6=20(#243)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Split out functions in unknown_070110, and do some documenting on them. Also fixes the scoring script to include UNUSED funcs * Match func_80021400 * Match unused func_800B3678 * Commit suggestions * Match func_80009AB4 * Fix breaking NON_EQUIVALENT builds when I changed the LevelHeader struct * I swear I fixed this before the last push, but oh well. Here's the proper fix * Match func_80007FA4 * Add suggestions for PR, and do a NON_EQUIVALENT but near match of func_8005F310 * Add offsets to the sound_ids, and set them up in some arrays that are a list of sounds to play. * Update a few variables to floats to match func_800699E4 * Fix NON_EQUIVALENT * Nearly match func_80011134 * Match func_8001B668 and do some more documenting * Match func_80069A40 * Do a NON_EQUIVALENT, possible NON_MATHCING match of func_8005CB680 * Do NON_MATCHING of func_8005C364 + update diff.py * WIP func_8005A6F0 * Remove unk8004F77C struct as it's just Object_Racer * Match func_8005A6F0 * Match func_8002263C * WIP func_8005B818 * WIP func_80011570 and match catmull_rom_interpolation * Match func_80011570 * Remove some extra function declarations from C files, and used the .h files instead. * Better matches for the catmull math funcs * Get obj_loop_effectbox a little closer to matching * Match obj_loop_goldenballoon * Fix some minor whitespace issues. Co-authored-by: Ryan Myers --- asm/non_matchings/camera/func_80065EA0.s | 4 +- asm/non_matchings/camera/func_80068514.s | 8 +- asm/non_matchings/camera/func_80069484.s | 4 +- asm/non_matchings/camera/func_800699E4.s | 25 - asm/non_matchings/camera/func_80069A40.s | 38 - asm/non_matchings/game_ui/func_800A8474.s | 2 +- asm/non_matchings/game_ui/func_800AA3EC.s | 2 +- .../objects/catmull_rom_interpolation.s | 65 - asm/non_matchings/objects/func_80011570.s | 281 ---- asm/non_matchings/objects/func_8001B668.s | 58 - asm/non_matchings/objects/func_80021400.s | 55 - asm/non_matchings/objects/func_8002263C.s | 82 -- asm/non_matchings/printf/func_800B3678.s | 55 - asm/non_matchings/racer/func_8005A6F0.s | 1221 ---------------- .../unknown_005740/func_80007FA4.s | 48 - .../unknown_005740/func_80009AB4.s | 63 - .../unknown_032760/obj_loop_animator.s | 2 +- .../unknown_032760/obj_loop_goldenballoon.s | 216 --- .../unknown_032760/obj_loop_texscroll.s | 2 +- asm/unknown_070110.s | 38 +- asm/unknown_070110/arctan2_f.s | 22 +- asm/unknown_070110/func_8006F510.s | 2 +- asm/unknown_070110/func_8006F53C.s | 4 +- asm/unknown_070110/func_8006F564.s | 32 - asm/unknown_070110/func_8006F570.s | 4 + asm/unknown_070110/func_8006F57C.s | 27 + asm/unknown_070110/func_8006F9B8.s | 75 - asm/unknown_070110/func_8006FA40.s | 16 + asm/unknown_070110/func_8006FA78.s | 59 + asm/unknown_070110/func_80070780.s | 12 + asm/unknown_070110/func_800707AC.s | 7 + asm/unknown_070110/func_80070890.s | 96 +- asm/unknown_070110/func_800708D0.s | 98 ++ asm/unknown_070110/func_80070A2C.s | 11 - asm/unknown_070110/rng.s | 25 + asm/unknown_070110/set_breakpoint.s | 13 + include/math_util.h | 2 +- include/sound_ids.h | 1283 ++++++++--------- include/structs.h | 101 +- src/camera.c | 45 +- src/camera.h | 4 + src/game.c | 27 +- src/game.h | 4 +- src/menu.c | 28 +- src/menu.h | 2 +- src/object_functions.c | 125 +- src/objects.c | 229 ++- src/objects.h | 10 +- src/particles.h | 2 +- src/printf.c | 20 +- src/printf.h | 2 + src/racer.c | 605 +++++++- src/racer.h | 29 +- src/unknown_005740.c | 26 +- src/unknown_005740.h | 5 +- src/unknown_008C40.c | 28 +- src/unknown_008C40.h | 18 + src/unknown_0255E0.c | 2 +- src/unknown_0255E0.h | 5 +- src/unknown_05CEF0.c | 333 ++++- src/unknown_05CEF0.h | 18 +- src/unknown_05DCD0.h | 4 +- src/unknown_05F0C0.h | 2 +- src/unknown_05F690.h | 2 +- src/unknown_05FF10.c | 144 +- src/unknown_05FF10.h | 2 +- tools/python/diff.py | 663 +++++++-- tools/python/score.py | 2 +- 68 files changed, 3022 insertions(+), 3522 deletions(-) delete mode 100644 asm/non_matchings/camera/func_800699E4.s delete mode 100644 asm/non_matchings/camera/func_80069A40.s delete mode 100644 asm/non_matchings/objects/catmull_rom_interpolation.s delete mode 100644 asm/non_matchings/objects/func_80011570.s delete mode 100644 asm/non_matchings/objects/func_8001B668.s delete mode 100644 asm/non_matchings/objects/func_80021400.s delete mode 100644 asm/non_matchings/objects/func_8002263C.s delete mode 100644 asm/non_matchings/printf/func_800B3678.s delete mode 100644 asm/non_matchings/racer/func_8005A6F0.s delete mode 100644 asm/non_matchings/unknown_005740/func_80007FA4.s delete mode 100644 asm/non_matchings/unknown_005740/func_80009AB4.s delete mode 100644 asm/non_matchings/unknown_032760/obj_loop_goldenballoon.s create mode 100644 asm/unknown_070110/func_8006F570.s create mode 100644 asm/unknown_070110/func_8006F57C.s create mode 100644 asm/unknown_070110/func_8006FA40.s create mode 100644 asm/unknown_070110/func_8006FA78.s create mode 100644 asm/unknown_070110/func_80070780.s create mode 100644 asm/unknown_070110/func_800707AC.s create mode 100644 asm/unknown_070110/func_800708D0.s create mode 100644 asm/unknown_070110/set_breakpoint.s diff --git a/asm/non_matchings/camera/func_80065EA0.s b/asm/non_matchings/camera/func_80065EA0.s index 1d0f7afa..a20dc3da 100644 --- a/asm/non_matchings/camera/func_80065EA0.s +++ b/asm/non_matchings/camera/func_80065EA0.s @@ -96,10 +96,10 @@ glabel func_80065EA0 /* 066BF4 80065FF4 C426709C */ lwc1 $f6, %lo(D_800E709C)($at) /* 066BF8 80065FF8 3C013F80 */ li $at, 0x3F800000 # 1.000000 /* 066BFC 80065FFC 44814000 */ mtc1 $at, $f8 -/* 066C00 80066000 3C058012 */ lui $a1, %hi(perspNorm+20) # $a1, 0x8012 +/* 066C00 80066000 3C058012 */ lui $a1, %hi(perspNorm) # $a1, 0x8012 /* 066C04 80066004 3C073FAA */ lui $a3, (0x3FAAAAAB >> 16) # lui $a3, 0x3faa /* 066C08 80066008 34E7AAAB */ ori $a3, (0x3FAAAAAB & 0xFFFF) # ori $a3, $a3, 0xaaab -/* 066C0C 8006600C 24A50D6C */ addiu $a1, %lo(perspNorm+20) # addiu $a1, $a1, 0xd6c +/* 066C0C 8006600C 24A50D6C */ addiu $a1, %lo(perspNorm) # addiu $a1, $a1, 0xd6c /* 066C10 80066010 02002025 */ move $a0, $s0 /* 066C14 80066014 3C064270 */ lui $a2, 0x4270 /* 066C18 80066018 E7A40010 */ swc1 $f4, 0x10($sp) diff --git a/asm/non_matchings/camera/func_80068514.s b/asm/non_matchings/camera/func_80068514.s index aa429b32..61a7fc1b 100644 --- a/asm/non_matchings/camera/func_80068514.s +++ b/asm/non_matchings/camera/func_80068514.s @@ -27,12 +27,12 @@ glabel func_80068514 /* 069178 80068578 E7A8005C */ swc1 $f8, 0x5c($sp) /* 06917C 8006857C C4F20010 */ lwc1 $f18, 0x10($a3) /* 069180 80068580 C42A0D40 */ lwc1 $f10, %lo(D_80120D40)($at) -/* 069184 80068584 3C018012 */ lui $at, %hi(perspNorm) # $at, 0x8012 +/* 069184 80068584 3C018012 */ lui $at, %hi(D_80120D58) # $at, 0x8012 /* 069188 80068588 46125101 */ sub.s $f4, $f10, $f18 /* 06918C 8006858C 00390821 */ addu $at, $at, $t9 /* 069190 80068590 E7A40058 */ swc1 $f4, 0x58($sp) /* 069194 80068594 C4E80014 */ lwc1 $f8, 0x14($a3) -/* 069198 80068598 C4260D58 */ lwc1 $f6, %lo(perspNorm)($at) +/* 069198 80068598 C4260D58 */ lwc1 $f6, %lo(D_80120D58)($at) /* 06919C 8006859C 84E40000 */ lh $a0, ($a3) /* 0691A0 800685A0 0C01C1F1 */ jal cosine_s /* 0691A4 800685A4 46083501 */ sub.s $f20, $f6, $f8 @@ -119,12 +119,12 @@ glabel func_80068514 /* 0692DC 800686DC C42A0D40 */ lwc1 $f10, %lo(D_80120D40)($at) /* 0692E0 800686E0 C6120010 */ lwc1 $f18, 0x10($s0) /* 0692E4 800686E4 46083001 */ sub.s $f0, $f6, $f8 -/* 0692E8 800686E8 3C018012 */ lui $at, %hi(perspNorm) # $at, 0x8012 +/* 0692E8 800686E8 3C018012 */ lui $at, %hi(D_80120D58) # $at, 0x8012 /* 0692EC 800686EC 46125101 */ sub.s $f4, $f10, $f18 /* 0692F0 800686F0 002C0821 */ addu $at, $at, $t4 /* 0692F4 800686F4 E7A40058 */ swc1 $f4, 0x58($sp) /* 0692F8 800686F8 C6080014 */ lwc1 $f8, 0x14($s0) -/* 0692FC 800686FC C4260D58 */ lwc1 $f6, %lo(perspNorm)($at) +/* 0692FC 800686FC C4260D58 */ lwc1 $f6, %lo(D_80120D58)($at) /* 069300 80068700 46000282 */ mul.s $f10, $f0, $f0 /* 069304 80068704 46083501 */ sub.s $f20, $f6, $f8 /* 069308 80068708 00125840 */ sll $t3, $s2, 1 diff --git a/asm/non_matchings/camera/func_80069484.s b/asm/non_matchings/camera/func_80069484.s index efb96809..126b9ed1 100644 --- a/asm/non_matchings/camera/func_80069484.s +++ b/asm/non_matchings/camera/func_80069484.s @@ -192,9 +192,9 @@ glabel func_80069484 /* 06A370 80069770 E7A40044 */ swc1 $f4, 0x44($sp) /* 06A374 80069774 E4280D40 */ swc1 $f8, %lo(D_80120D40)($at) /* 06A378 80069778 C7AA0044 */ lwc1 $f10, 0x44($sp) -/* 06A37C 8006977C 3C018012 */ lui $at, %hi(perspNorm) # $at, 0x8012 +/* 06A37C 8006977C 3C018012 */ lui $at, %hi(D_80120D58) # $at, 0x8012 /* 06A380 80069780 00220821 */ addu $at, $at, $v0 /* 06A384 80069784 27BD0050 */ addiu $sp, $sp, 0x50 /* 06A388 80069788 03E00008 */ jr $ra -/* 06A38C 8006978C E42A0D58 */ swc1 $f10, %lo(perspNorm)($at) +/* 06A38C 8006978C E42A0D58 */ swc1 $f10, %lo(D_80120D58)($at) diff --git a/asm/non_matchings/camera/func_800699E4.s b/asm/non_matchings/camera/func_800699E4.s deleted file mode 100644 index 1376fcdb..00000000 --- a/asm/non_matchings/camera/func_800699E4.s +++ /dev/null @@ -1,25 +0,0 @@ - -glabel func_800699E4 -/* 06A5E4 800699E4 3C028012 */ lui $v0, %hi(D_80120D20) # $v0, 0x8012 -/* 06A5E8 800699E8 24420D20 */ addiu $v0, %lo(D_80120D20) # addiu $v0, $v0, 0xd20 -/* 06A5EC 800699EC 8C4E0000 */ lw $t6, ($v0) -/* 06A5F0 800699F0 3C018012 */ lui $at, %hi(D_80120D28) # $at, 0x8012 -/* 06A5F4 800699F4 000E7880 */ sll $t7, $t6, 2 -/* 06A5F8 800699F8 002F0821 */ addu $at, $at, $t7 -/* 06A5FC 800699FC C4240D28 */ lwc1 $f4, %lo(D_80120D28)($at) -/* 06A600 80069A00 3C018012 */ lui $at, %hi(D_80120D40) # $at, 0x8012 -/* 06A604 80069A04 E4840000 */ swc1 $f4, ($a0) -/* 06A608 80069A08 8C580000 */ lw $t8, ($v0) -/* 06A60C 80069A0C 00000000 */ nop -/* 06A610 80069A10 0018C880 */ sll $t9, $t8, 2 -/* 06A614 80069A14 00390821 */ addu $at, $at, $t9 -/* 06A618 80069A18 C4260D40 */ lwc1 $f6, %lo(D_80120D40)($at) -/* 06A61C 80069A1C 3C018012 */ lui $at, %hi(perspNorm) # $at, 0x8012 -/* 06A620 80069A20 E4A60000 */ swc1 $f6, ($a1) -/* 06A624 80069A24 8C480000 */ lw $t0, ($v0) -/* 06A628 80069A28 00000000 */ nop -/* 06A62C 80069A2C 00084880 */ sll $t1, $t0, 2 -/* 06A630 80069A30 00290821 */ addu $at, $at, $t1 -/* 06A634 80069A34 C4280D58 */ lwc1 $f8, %lo(perspNorm)($at) -/* 06A638 80069A38 03E00008 */ jr $ra -/* 06A63C 80069A3C E4C80000 */ swc1 $f8, ($a2) \ No newline at end of file diff --git a/asm/non_matchings/camera/func_80069A40.s b/asm/non_matchings/camera/func_80069A40.s deleted file mode 100644 index 2e6d3f86..00000000 --- a/asm/non_matchings/camera/func_80069A40.s +++ /dev/null @@ -1,38 +0,0 @@ -glabel func_80069A40 -/* 06A640 80069A40 3C058012 */ lui $a1, %hi(D_80120D20) # $a1, 0x8012 -/* 06A644 80069A44 3C068012 */ lui $a2, %hi(D_80120D1C) # $a2, 0x8012 -/* 06A648 80069A48 24C60D1C */ addiu $a2, %lo(D_80120D1C) # addiu $a2, $a2, 0xd1c -/* 06A64C 80069A4C 24A50D20 */ addiu $a1, %lo(D_80120D20) # addiu $a1, $a1, 0xd20 -/* 06A650 80069A50 8CAE0000 */ lw $t6, ($a1) -/* 06A654 80069A54 8CD80000 */ lw $t8, ($a2) -/* 06A658 80069A58 25CFFFFF */ addiu $t7, $t6, -1 -/* 06A65C 80069A5C 2719FFFF */ addiu $t9, $t8, -1 -/* 06A660 80069A60 ACAF0000 */ sw $t7, ($a1) -/* 06A664 80069A64 1B200010 */ blez $t9, .L80069AA8 -/* 06A668 80069A68 ACD90000 */ sw $t9, ($a2) -/* 06A66C 80069A6C 8C830000 */ lw $v1, ($a0) -/* 06A670 80069A70 3C0A0140 */ lui $t2, (0x01400040 >> 16) # lui $t2, 0x140 -/* 06A674 80069A74 24690008 */ addiu $t1, $v1, 8 -/* 06A678 80069A78 AC890000 */ sw $t1, ($a0) -/* 06A67C 80069A7C 354A0040 */ ori $t2, (0x01400040 & 0xFFFF) # ori $t2, $t2, 0x40 -/* 06A680 80069A80 AC6A0000 */ sw $t2, ($v1) -/* 06A684 80069A84 8CCB0000 */ lw $t3, ($a2) -/* 06A688 80069A88 3C0D8012 */ lui $t5, %hi(D_80120D88) # $t5, 0x8012 -/* 06A68C 80069A8C 000B6080 */ sll $t4, $t3, 2 -/* 06A690 80069A90 01AC6821 */ addu $t5, $t5, $t4 -/* 06A694 80069A94 8DAD0D88 */ lw $t5, %lo(D_80120D88)($t5) -/* 06A698 80069A98 3C018000 */ lui $at, 0x8000 -/* 06A69C 80069A9C 01A17021 */ addu $t6, $t5, $at -/* 06A6A0 80069AA0 03E00008 */ jr $ra -/* 06A6A4 80069AA4 AC6E0004 */ sw $t6, 4($v1) - -.L80069AA8: -/* 06A6A8 80069AA8 8C830000 */ lw $v1, ($a0) -/* 06A6AC 80069AAC 3C18BC00 */ lui $t8, (0xBC00000A >> 16) # lui $t8, 0xbc00 -/* 06A6B0 80069AB0 246F0008 */ addiu $t7, $v1, 8 -/* 06A6B4 80069AB4 AC8F0000 */ sw $t7, ($a0) -/* 06A6B8 80069AB8 3718000A */ ori $t8, (0xBC00000A & 0xFFFF) # ori $t8, $t8, 0xa -/* 06A6BC 80069ABC AC780000 */ sw $t8, ($v1) -/* 06A6C0 80069AC0 AC600004 */ sw $zero, 4($v1) -/* 06A6C4 80069AC4 03E00008 */ jr $ra -/* 06A6C8 80069AC8 00000000 */ nop diff --git a/asm/non_matchings/game_ui/func_800A8474.s b/asm/non_matchings/game_ui/func_800A8474.s index f2d92acd..043074ce 100644 --- a/asm/non_matchings/game_ui/func_800A8474.s +++ b/asm/non_matchings/game_ui/func_800A8474.s @@ -1435,7 +1435,7 @@ glabel func_800A8474 /* 0AA55C 800A995C 24A56D00 */ addiu $a1, %lo(D_80126D00) # addiu $a1, $a1, 0x6d00 /* 0AA560 800A9960 0C019FCB */ jal func_80067F2C /* 0AA564 800A9964 02802025 */ move $a0, $s4 -/* 0AA568 800A9968 0C00B1F1 */ jal func_8002C7C4 +/* 0AA568 800A9968 0C00B1F1 */ jal get_current_level_model /* 0AA56C 800A996C 00000000 */ nop /* 0AA570 800A9970 10400296 */ beqz $v0, .L800AA3CC /* 0AA574 800A9974 AFA20158 */ sw $v0, 0x158($sp) diff --git a/asm/non_matchings/game_ui/func_800AA3EC.s b/asm/non_matchings/game_ui/func_800AA3EC.s index 8ca45429..737e535a 100644 --- a/asm/non_matchings/game_ui/func_800AA3EC.s +++ b/asm/non_matchings/game_ui/func_800AA3EC.s @@ -4,7 +4,7 @@ glabel func_800AA3EC /* 0AAFF4 800AA3F4 E7AC0030 */ swc1 $f12, 0x30($sp) /* 0AAFF8 800AA3F8 E7AE0034 */ swc1 $f14, 0x34($sp) /* 0AAFFC 800AA3FC AFA60038 */ sw $a2, 0x38($sp) -/* 0AB000 800AA400 0C00B1F1 */ jal func_8002C7C4 +/* 0AB000 800AA400 0C00B1F1 */ jal get_current_level_model /* 0AB004 800AA404 AFA7003C */ sw $a3, 0x3c($sp) /* 0AB008 800AA408 3C014270 */ li $at, 0x42700000 # 60.000000 /* 0AB00C 800AA40C 44812000 */ mtc1 $at, $f4 diff --git a/asm/non_matchings/objects/catmull_rom_interpolation.s b/asm/non_matchings/objects/catmull_rom_interpolation.s deleted file mode 100644 index e3aeb8ff..00000000 --- a/asm/non_matchings/objects/catmull_rom_interpolation.s +++ /dev/null @@ -1,65 +0,0 @@ -glabel catmull_rom_interpolation -/* 023140 80022540 27BDFFF0 */ addiu $sp, $sp, -0x10 -/* 023144 80022544 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 023148 80022548 00057080 */ sll $t6, $a1, 2 -/* 02314C 8002254C 44819800 */ mtc1 $at, $f19 -/* 023150 80022550 AFA60018 */ sw $a2, 0x18($sp) -/* 023154 80022554 008E1021 */ addu $v0, $a0, $t6 -/* 023158 80022558 C4460000 */ lwc1 $f6, ($v0) -/* 02315C 8002255C 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 023160 80022560 44814800 */ mtc1 $at, $f9 -/* 023164 80022564 C444000C */ lwc1 $f4, 0xc($v0) -/* 023168 80022568 44804000 */ mtc1 $zero, $f8 -/* 02316C 8002256C 46003321 */ cvt.d.s $f12, $f6 -/* 023170 80022570 462C4382 */ mul.d $f14, $f8, $f12 -/* 023174 80022574 C44A0004 */ lwc1 $f10, 4($v0) -/* 023178 80022578 3C013FF8 */ li $at, 0x3FF80000 # 1.937500 -/* 02317C 8002257C 460020A1 */ cvt.d.s $f2, $f4 -/* 023180 80022580 C4440008 */ lwc1 $f4, 8($v0) -/* 023184 80022584 44813800 */ mtc1 $at, $f7 -/* 023188 80022588 44803000 */ mtc1 $zero, $f6 -/* 02318C 8002258C 46005421 */ cvt.d.s $f16, $f10 -/* 023190 80022590 46303202 */ mul.d $f8, $f6, $f16 -/* 023194 80022594 3C01BFF8 */ li $at, 0xBFF80000 # -1.937500 -/* 023198 80022598 46002021 */ cvt.d.s $f0, $f4 -/* 02319C 8002259C 44802000 */ mtc1 $zero, $f4 -/* 0231A0 800225A0 44812800 */ mtc1 $at, $f5 -/* 0231A4 800225A4 44809000 */ mtc1 $zero, $f18 -/* 0231A8 800225A8 46202182 */ mul.d $f6, $f4, $f0 -/* 0231AC 800225AC 46287280 */ add.d $f10, $f14, $f8 -/* 0231B0 800225B0 3C01C004 */ li $at, 0xC0040000 # -2.062500 -/* 0231B4 800225B4 46321102 */ mul.d $f4, $f2, $f18 -/* 0231B8 800225B8 46265200 */ add.d $f8, $f10, $f6 -/* 0231BC 800225BC 46282280 */ add.d $f10, $f4, $f8 -/* 0231C0 800225C0 44802000 */ mtc1 $zero, $f4 -/* 0231C4 800225C4 44812800 */ mtc1 $at, $f5 -/* 0231C8 800225C8 462051A0 */ cvt.s.d $f6, $f10 -/* 0231CC 800225CC 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 0231D0 800225D0 46302202 */ mul.d $f8, $f4, $f16 -/* 0231D4 800225D4 46200100 */ add.d $f4, $f0, $f0 -/* 0231D8 800225D8 E7A60000 */ swc1 $f6, ($sp) -/* 0231DC 800225DC 46286280 */ add.d $f10, $f12, $f8 -/* 0231E0 800225E0 46245200 */ add.d $f8, $f10, $f4 -/* 0231E4 800225E4 44805000 */ mtc1 $zero, $f10 -/* 0231E8 800225E8 44815800 */ mtc1 $at, $f11 -/* 0231EC 800225EC 00000000 */ nop -/* 0231F0 800225F0 462A1102 */ mul.d $f4, $f2, $f10 -/* 0231F4 800225F4 462080A0 */ cvt.s.d $f2, $f16 -/* 0231F8 800225F8 46282280 */ add.d $f10, $f4, $f8 -/* 0231FC 800225FC 46320202 */ mul.d $f8, $f0, $f18 -/* 023200 80022600 46205120 */ cvt.s.d $f4, $f10 -/* 023204 80022604 E7A40004 */ swc1 $f4, 4($sp) -/* 023208 80022608 462E4280 */ add.d $f10, $f8, $f14 -/* 02320C 8002260C 46205220 */ cvt.s.d $f8, $f10 -/* 023210 80022610 C7AA0018 */ lwc1 $f10, 0x18($sp) -/* 023214 80022614 E7A80008 */ swc1 $f8, 8($sp) -/* 023218 80022618 460A3182 */ mul.s $f6, $f6, $f10 -/* 02321C 8002261C 27BD0010 */ addiu $sp, $sp, 0x10 -/* 023220 80022620 46043180 */ add.s $f6, $f6, $f4 -/* 023224 80022624 460A3102 */ mul.s $f4, $f6, $f10 -/* 023228 80022628 46082180 */ add.s $f6, $f4, $f8 -/* 02322C 8002262C 460A3102 */ mul.s $f4, $f6, $f10 -/* 023230 80022630 46022080 */ add.s $f2, $f4, $f2 -/* 023234 80022634 03E00008 */ jr $ra -/* 023238 80022638 46001006 */ mov.s $f0, $f2 - diff --git a/asm/non_matchings/objects/func_80011570.s b/asm/non_matchings/objects/func_80011570.s deleted file mode 100644 index a52a3caf..00000000 --- a/asm/non_matchings/objects/func_80011570.s +++ /dev/null @@ -1,281 +0,0 @@ -.late_rodata -glabel D_800E5538 -.double 1000.0 -glabel D_800E5540 -.double 3000.0 -glabel D_800E5548 -.double 500.0 - -.text -glabel func_80011570 -/* 012170 80011570 27BDFFC0 */ addiu $sp, $sp, -0x40 -/* 012174 80011574 AFBF0014 */ sw $ra, 0x14($sp) -/* 012178 80011578 AFA40040 */ sw $a0, 0x40($sp) -/* 01217C 8001157C AFA50044 */ sw $a1, 0x44($sp) -/* 012180 80011580 AFA60048 */ sw $a2, 0x48($sp) -/* 012184 80011584 AFA7004C */ sw $a3, 0x4c($sp) -/* 012188 80011588 0C00B1F1 */ jal func_8002C7C4 -/* 01218C 8001158C AFA40040 */ sw $a0, 0x40($sp) -/* 012190 80011590 8FA70040 */ lw $a3, 0x40($sp) -/* 012194 80011594 C7A60048 */ lwc1 $f6, 0x48($sp) -/* 012198 80011598 C4EE0010 */ lwc1 $f14, 0x10($a3) -/* 01219C 8001159C C4E2000C */ lwc1 $f2, 0xc($a3) -/* 0121A0 800115A0 46067200 */ add.s $f8, $f14, $f6 -/* 0121A4 800115A4 C7A40044 */ lwc1 $f4, 0x44($sp) -/* 0121A8 800115A8 E7A8001C */ swc1 $f8, 0x1c($sp) -/* 0121AC 800115AC C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0121B0 800115B0 C4F00014 */ lwc1 $f16, 0x14($a3) -/* 0121B4 800115B4 46041480 */ add.s $f18, $f2, $f4 -/* 0121B8 800115B8 3C04800E */ lui $a0, %hi(D_800DC848) # $a0, 0x800e -/* 0121BC 800115BC 460A8100 */ add.s $f4, $f16, $f10 -/* 0121C0 800115C0 14400005 */ bnez $v0, .L800115D8 -/* 0121C4 800115C4 E7A40018 */ swc1 $f4, 0x18($sp) -/* 0121C8 800115C8 2484C848 */ addiu $a0, %lo(D_800DC848) # addiu $a0, $a0, -0x37b8 -/* 0121CC 800115CC A0800000 */ sb $zero, ($a0) -/* 0121D0 800115D0 100000DF */ b .L80011950 -/* 0121D4 800115D4 00001025 */ move $v0, $zero -.L800115D8: -/* 0121D8 800115D8 844E003E */ lh $t6, 0x3e($v0) -/* 0121DC 800115DC 3C01800E */ lui $at, %hi(D_800E5538 + 4) # $at, 0x800e -/* 0121E0 800115E0 448E3000 */ mtc1 $t6, $f6 -/* 0121E4 800115E4 C42D5538 */ lwc1 $f13, %lo(D_800E5538)($at) -/* 0121E8 800115E8 46803221 */ cvt.d.w $f8, $f6 -/* 0121EC 800115EC C42C553C */ lwc1 $f12, %lo(D_800E5538 + 4)($at) -/* 0121F0 800115F0 3C04800E */ lui $a0, %hi(D_800DC848) # $a0, 0x800e -/* 0121F4 800115F4 462C4280 */ add.d $f10, $f8, $f12 -/* 0121F8 800115F8 00001825 */ move $v1, $zero -/* 0121FC 800115FC 46205020 */ cvt.s.d $f0, $f10 -/* 012200 80011600 2484C848 */ addiu $a0, %lo(D_800DC848) # addiu $a0, $a0, -0x37b8 -/* 012204 80011604 4612003C */ c.lt.s $f0, $f18 -/* 012208 80011608 00000000 */ nop -/* 01220C 8001160C 45000002 */ bc1f .L80011618 -/* 012210 80011610 00000000 */ nop -/* 012214 80011614 24030001 */ li $v1, 1 -.L80011618: -/* 012218 80011618 844F003C */ lh $t7, 0x3c($v0) -/* 01221C 8001161C 00000000 */ nop -/* 012220 80011620 448F2000 */ mtc1 $t7, $f4 -/* 012224 80011624 00000000 */ nop -/* 012228 80011628 468021A1 */ cvt.d.w $f6, $f4 -/* 01222C 8001162C 462C3201 */ sub.d $f8, $f6, $f12 -/* 012230 80011630 46204020 */ cvt.s.d $f0, $f8 -/* 012234 80011634 4600103C */ c.lt.s $f2, $f0 -/* 012238 80011638 00000000 */ nop -/* 01223C 8001163C 45000002 */ bc1f .L80011648 -/* 012240 80011640 00000000 */ nop -/* 012244 80011644 24030001 */ li $v1, 1 -.L80011648: -/* 012248 80011648 84580042 */ lh $t8, 0x42($v0) -/* 01224C 8001164C 3C01800E */ lui $at, %hi(D_800E5540 + 4) # $at, 0x800e -/* 012250 80011650 44985000 */ mtc1 $t8, $f10 -/* 012254 80011654 C4275540 */ lwc1 $f7, %lo(D_800E5540)($at) -/* 012258 80011658 46805121 */ cvt.d.w $f4, $f10 -/* 01225C 8001165C C4265544 */ lwc1 $f6, %lo(D_800E5540 + 4)($at) -/* 012260 80011660 00000000 */ nop -/* 012264 80011664 46262200 */ add.d $f8, $f4, $f6 -/* 012268 80011668 46204020 */ cvt.s.d $f0, $f8 -/* 01226C 8001166C 460E003C */ c.lt.s $f0, $f14 -/* 012270 80011670 00000000 */ nop -/* 012274 80011674 45000002 */ bc1f .L80011680 -/* 012278 80011678 00000000 */ nop -/* 01227C 8001167C 24030001 */ li $v1, 1 -.L80011680: -/* 012280 80011680 84590040 */ lh $t9, 0x40($v0) -/* 012284 80011684 3C01800E */ lui $at, %hi(D_800E5548 + 4) # $at, 0x800e -/* 012288 80011688 44995000 */ mtc1 $t9, $f10 -/* 01228C 8001168C C4275548 */ lwc1 $f7, %lo(D_800E5548)($at) -/* 012290 80011690 46805121 */ cvt.d.w $f4, $f10 -/* 012294 80011694 C426554C */ lwc1 $f6, %lo(D_800E5548 + 4)($at) -/* 012298 80011698 00000000 */ nop -/* 01229C 8001169C 46262201 */ sub.d $f8, $f4, $f6 -/* 0122A0 800116A0 46204020 */ cvt.s.d $f0, $f8 -/* 0122A4 800116A4 4600703C */ c.lt.s $f14, $f0 -/* 0122A8 800116A8 00000000 */ nop -/* 0122AC 800116AC 45000002 */ bc1f .L800116B8 -/* 0122B0 800116B0 00000000 */ nop -/* 0122B4 800116B4 24030001 */ li $v1, 1 -.L800116B8: -/* 0122B8 800116B8 84490046 */ lh $t1, 0x46($v0) -/* 0122BC 800116BC 00000000 */ nop -/* 0122C0 800116C0 44895000 */ mtc1 $t1, $f10 -/* 0122C4 800116C4 00000000 */ nop -/* 0122C8 800116C8 46805121 */ cvt.d.w $f4, $f10 -/* 0122CC 800116CC 462C2180 */ add.d $f6, $f4, $f12 -/* 0122D0 800116D0 46203020 */ cvt.s.d $f0, $f6 -/* 0122D4 800116D4 4610003C */ c.lt.s $f0, $f16 -/* 0122D8 800116D8 00000000 */ nop -/* 0122DC 800116DC 45000002 */ bc1f .L800116E8 -/* 0122E0 800116E0 00000000 */ nop -/* 0122E4 800116E4 24030001 */ li $v1, 1 -.L800116E8: -/* 0122E8 800116E8 844A0044 */ lh $t2, 0x44($v0) -/* 0122EC 800116EC 00000000 */ nop -/* 0122F0 800116F0 448A4000 */ mtc1 $t2, $f8 -/* 0122F4 800116F4 00000000 */ nop -/* 0122F8 800116F8 468042A1 */ cvt.d.w $f10, $f8 -/* 0122FC 800116FC 462C5101 */ sub.d $f4, $f10, $f12 -/* 012300 80011700 46202020 */ cvt.s.d $f0, $f4 -/* 012304 80011704 4600803C */ c.lt.s $f16, $f0 -/* 012308 80011708 00000000 */ nop -/* 01230C 8001170C 45000002 */ bc1f .L80011718 -/* 012310 80011710 00000000 */ nop -/* 012314 80011714 24030001 */ li $v1, 1 -.L80011718: -/* 012318 80011718 808B0000 */ lb $t3, ($a0) -/* 01231C 8001171C 00000000 */ nop -/* 012320 80011720 11600002 */ beqz $t3, .L8001172C -/* 012324 80011724 00000000 */ nop -/* 012328 80011728 00001825 */ move $v1, $zero -.L8001172C: -/* 01232C 8001172C 10600005 */ beqz $v1, .L80011744 -/* 012330 80011730 A0800000 */ sb $zero, ($a0) -/* 012334 80011734 240CFFFF */ li $t4, -1 -/* 012338 80011738 A4EC002E */ sh $t4, 0x2e($a3) -/* 01233C 8001173C 10000084 */ b .L80011950 -/* 012340 80011740 24020001 */ li $v0, 1 -.L80011744: -/* 012344 80011744 E4F2000C */ swc1 $f18, 0xc($a3) -/* 012348 80011748 C7A6001C */ lwc1 $f6, 0x1c($sp) -/* 01234C 8001174C 84E4002E */ lh $a0, 0x2e($a3) -/* 012350 80011750 E4E60010 */ swc1 $f6, 0x10($a3) -/* 012354 80011754 C7A80018 */ lwc1 $f8, 0x18($sp) -/* 012358 80011758 00000000 */ nop -/* 01235C 8001175C E4E80014 */ swc1 $f8, 0x14($a3) -/* 012360 80011760 E7B20020 */ swc1 $f18, 0x20($sp) -/* 012364 80011764 0C00A8B7 */ jal func_8002A2DC -/* 012368 80011768 AFA70040 */ sw $a3, 0x40($sp) -/* 01236C 8001176C 8FA70040 */ lw $a3, 0x40($sp) -/* 012370 80011770 C7A0001C */ lwc1 $f0, 0x1c($sp) -/* 012374 80011774 C7A20018 */ lwc1 $f2, 0x18($sp) -/* 012378 80011778 C7B20020 */ lwc1 $f18, 0x20($sp) -/* 01237C 8001177C 1440002D */ bnez $v0, .L80011834 -/* 012380 80011780 00000000 */ nop -/* 012384 80011784 444DF800 */ cfc1 $t5, $31 -/* 012388 80011788 AFA70040 */ sw $a3, 0x40($sp) -/* 01238C 8001178C 35A10003 */ ori $at, $t5, 3 -/* 012390 80011790 38210002 */ xori $at, $at, 2 -/* 012394 80011794 44C1F800 */ ctc1 $at, $31 -/* 012398 80011798 00000000 */ nop -/* 01239C 8001179C 460092A4 */ cvt.w.s $f10, $f18 -/* 0123A0 800117A0 440E5000 */ mfc1 $t6, $f10 -/* 0123A4 800117A4 44CDF800 */ ctc1 $t5, $31 -/* 0123A8 800117A8 448E2000 */ mtc1 $t6, $f4 -/* 0123AC 800117AC 00000000 */ nop -/* 0123B0 800117B0 46802320 */ cvt.s.w $f12, $f4 -/* 0123B4 800117B4 444FF800 */ cfc1 $t7, $31 -/* 0123B8 800117B8 00000000 */ nop -/* 0123BC 800117BC 35E10003 */ ori $at, $t7, 3 -/* 0123C0 800117C0 38210002 */ xori $at, $at, 2 -/* 0123C4 800117C4 44C1F800 */ ctc1 $at, $31 -/* 0123C8 800117C8 00000000 */ nop -/* 0123CC 800117CC 460001A4 */ cvt.w.s $f6, $f0 -/* 0123D0 800117D0 44183000 */ mfc1 $t8, $f6 -/* 0123D4 800117D4 44CFF800 */ ctc1 $t7, $31 -/* 0123D8 800117D8 44984000 */ mtc1 $t8, $f8 -/* 0123DC 800117DC 00000000 */ nop -/* 0123E0 800117E0 468043A0 */ cvt.s.w $f14, $f8 -/* 0123E4 800117E4 4459F800 */ cfc1 $t9, $31 -/* 0123E8 800117E8 00000000 */ nop -/* 0123EC 800117EC 37210003 */ ori $at, $t9, 3 -/* 0123F0 800117F0 38210002 */ xori $at, $at, 2 -/* 0123F4 800117F4 44C1F800 */ ctc1 $at, $31 -/* 0123F8 800117F8 00000000 */ nop -/* 0123FC 800117FC 460012A4 */ cvt.w.s $f10, $f2 -/* 012400 80011800 44095000 */ mfc1 $t1, $f10 -/* 012404 80011804 44D9F800 */ ctc1 $t9, $31 -/* 012408 80011808 44892000 */ mtc1 $t1, $f4 -/* 01240C 8001180C 00000000 */ nop -/* 012410 80011810 46802120 */ cvt.s.w $f4, $f4 -/* 012414 80011814 44062000 */ mfc1 $a2, $f4 -/* 012418 80011818 0C00A7C6 */ jal get_level_segment_index_from_position -/* 01241C 8001181C 00000000 */ nop -/* 012420 80011820 8FA70040 */ lw $a3, 0x40($sp) -/* 012424 80011824 00000000 */ nop -/* 012428 80011828 A4E2002E */ sh $v0, 0x2e($a3) -/* 01242C 8001182C 10000048 */ b .L80011950 -/* 012430 80011830 00001025 */ move $v0, $zero -.L80011834: -/* 012434 80011834 444AF800 */ cfc1 $t2, $31 -/* 012438 80011838 844B0006 */ lh $t3, 6($v0) -/* 01243C 8001183C 35410003 */ ori $at, $t2, 3 -/* 012440 80011840 38210002 */ xori $at, $at, 2 -/* 012444 80011844 44C1F800 */ ctc1 $at, $31 -/* 012448 80011848 00002025 */ move $a0, $zero -/* 01244C 8001184C 460091A4 */ cvt.w.s $f6, $f18 -/* 012450 80011850 44083000 */ mfc1 $t0, $f6 -/* 012454 80011854 44CAF800 */ ctc1 $t2, $31 -/* 012458 80011858 0168082A */ slt $at, $t3, $t0 -/* 01245C 8001185C 14200006 */ bnez $at, .L80011878 -/* 012460 80011860 00000000 */ nop -/* 012464 80011864 844C0000 */ lh $t4, ($v0) -/* 012468 80011868 00000000 */ nop -/* 01246C 8001186C 010C082A */ slt $at, $t0, $t4 -/* 012470 80011870 10200002 */ beqz $at, .L8001187C -/* 012474 80011874 00000000 */ nop -.L80011878: -/* 012478 80011878 24040001 */ li $a0, 1 -.L8001187C: -/* 01247C 8001187C 444DF800 */ cfc1 $t5, $31 -/* 012480 80011880 844E0008 */ lh $t6, 8($v0) -/* 012484 80011884 35A10003 */ ori $at, $t5, 3 -/* 012488 80011888 38210002 */ xori $at, $at, 2 -/* 01248C 8001188C 44C1F800 */ ctc1 $at, $31 -/* 012490 80011890 00000000 */ nop -/* 012494 80011894 46000224 */ cvt.w.s $f8, $f0 -/* 012498 80011898 44054000 */ mfc1 $a1, $f8 -/* 01249C 8001189C 44CDF800 */ ctc1 $t5, $31 -/* 0124A0 800118A0 01C5082A */ slt $at, $t6, $a1 -/* 0124A4 800118A4 14200006 */ bnez $at, .L800118C0 -/* 0124A8 800118A8 00000000 */ nop -/* 0124AC 800118AC 844F0002 */ lh $t7, 2($v0) -/* 0124B0 800118B0 00000000 */ nop -/* 0124B4 800118B4 00AF082A */ slt $at, $a1, $t7 -/* 0124B8 800118B8 10200002 */ beqz $at, .L800118C4 -/* 0124BC 800118BC 00000000 */ nop -.L800118C0: -/* 0124C0 800118C0 24040001 */ li $a0, 1 -.L800118C4: -/* 0124C4 800118C4 4458F800 */ cfc1 $t8, $31 -/* 0124C8 800118C8 8459000A */ lh $t9, 0xa($v0) -/* 0124CC 800118CC 37010003 */ ori $at, $t8, 3 -/* 0124D0 800118D0 38210002 */ xori $at, $at, 2 -/* 0124D4 800118D4 44C1F800 */ ctc1 $at, $31 -/* 0124D8 800118D8 00000000 */ nop -/* 0124DC 800118DC 460012A4 */ cvt.w.s $f10, $f2 -/* 0124E0 800118E0 44035000 */ mfc1 $v1, $f10 -/* 0124E4 800118E4 44D8F800 */ ctc1 $t8, $31 -/* 0124E8 800118E8 0323082A */ slt $at, $t9, $v1 -/* 0124EC 800118EC 14200006 */ bnez $at, .L80011908 -/* 0124F0 800118F0 00000000 */ nop -/* 0124F4 800118F4 84490004 */ lh $t1, 4($v0) -/* 0124F8 800118F8 00000000 */ nop -/* 0124FC 800118FC 0069082A */ slt $at, $v1, $t1 -/* 012500 80011900 10200002 */ beqz $at, .L8001190C -/* 012504 80011904 00000000 */ nop -.L80011908: -/* 012508 80011908 24040001 */ li $a0, 1 -.L8001190C: -/* 01250C 8001190C 10800010 */ beqz $a0, .L80011950 -/* 012510 80011910 00001025 */ move $v0, $zero -/* 012514 80011914 44834000 */ mtc1 $v1, $f8 -/* 012518 80011918 44882000 */ mtc1 $t0, $f4 -/* 01251C 8001191C 46804220 */ cvt.s.w $f8, $f8 -/* 012520 80011920 44853000 */ mtc1 $a1, $f6 -/* 012524 80011924 AFA70040 */ sw $a3, 0x40($sp) -/* 012528 80011928 44064000 */ mfc1 $a2, $f8 -/* 01252C 8001192C 46802320 */ cvt.s.w $f12, $f4 -/* 012530 80011930 0C00A7C6 */ jal get_level_segment_index_from_position -/* 012534 80011934 468033A0 */ cvt.s.w $f14, $f6 -/* 012538 80011938 8FA70040 */ lw $a3, 0x40($sp) -/* 01253C 8001193C 2401FFFF */ li $at, -1 -/* 012540 80011940 10410002 */ beq $v0, $at, .L8001194C -/* 012544 80011944 00000000 */ nop -/* 012548 80011948 A4E2002E */ sh $v0, 0x2e($a3) -.L8001194C: -/* 01254C 8001194C 00001025 */ move $v0, $zero -.L80011950: -/* 012550 80011950 8FBF0014 */ lw $ra, 0x14($sp) -/* 012554 80011954 27BD0040 */ addiu $sp, $sp, 0x40 -/* 012558 80011958 03E00008 */ jr $ra -/* 01255C 8001195C 00000000 */ nop - diff --git a/asm/non_matchings/objects/func_8001B668.s b/asm/non_matchings/objects/func_8001B668.s deleted file mode 100644 index a03034d7..00000000 --- a/asm/non_matchings/objects/func_8001B668.s +++ /dev/null @@ -1,58 +0,0 @@ -glabel func_8001B668 -/* 01C268 8001B668 27BDFFD0 */ addiu $sp, $sp, -0x30 -/* 01C26C 8001B66C AFBF001C */ sw $ra, 0x1c($sp) -/* 01C270 8001B670 0C01666A */ jal func_800599A8 -/* 01C274 8001B674 AFA40030 */ sw $a0, 0x30($sp) -/* 01C278 8001B678 0C01AF62 */ jal func_8006BD88 -/* 01C27C 8001B67C AFA20024 */ sw $v0, 0x24($sp) -/* 01C280 8001B680 8FAE0024 */ lw $t6, 0x24($sp) -/* 01C284 8001B684 3C0F8012 */ lui $t7, %hi(D_8011AE82) # $t7, 0x8012 -/* 01C288 8001B688 144E0006 */ bne $v0, $t6, .L8001B6A4 -/* 01C28C 8001B68C 3C18800E */ lui $t8, %hi(D_800DC728) # $t8, 0x800e -/* 01C290 8001B690 85EFAE82 */ lh $t7, %lo(D_8011AE82)($t7) -/* 01C294 8001B694 8718C728 */ lh $t8, %lo(D_800DC728)($t8) -/* 01C298 8001B698 00000000 */ nop -/* 01C29C 8001B69C 11F80019 */ beq $t7, $t8, .L8001B704 -/* 01C2A0 8001B6A0 00000000 */ nop -.L8001B6A4: -/* 01C2A4 8001B6A4 0C01AF62 */ jal func_8006BD88 -/* 01C2A8 8001B6A8 00000000 */ nop -/* 01C2AC 8001B6AC 3C068012 */ lui $a2, %hi(D_8011AE82) # $a2, 0x8012 -/* 01C2B0 8001B6B0 84C6AE82 */ lh $a2, %lo(D_8011AE82)($a2) -/* 01C2B4 8001B6B4 8FA40030 */ lw $a0, 0x30($sp) -/* 01C2B8 8001B6B8 27B9002C */ addiu $t9, $sp, 0x2c -/* 01C2BC 8001B6BC AFB90010 */ sw $t9, 0x10($sp) -/* 01C2C0 8001B6C0 00402825 */ move $a1, $v0 -/* 01C2C4 8001B6C4 0C01666E */ jal func_800599B8 -/* 01C2C8 8001B6C8 27A7002E */ addiu $a3, $sp, 0x2e -/* 01C2CC 8001B6CC 1440000B */ bnez $v0, .L8001B6FC -/* 01C2D0 8001B6D0 00401825 */ move $v1, $v0 -/* 01C2D4 8001B6D4 3C088012 */ lui $t0, %hi(D_8011AE82) # $t0, 0x8012 -/* 01C2D8 8001B6D8 8508AE82 */ lh $t0, %lo(D_8011AE82)($t0) -/* 01C2DC 8001B6DC 3C01800E */ lui $at, %hi(D_800DC728) # $at, 0x800e -/* 01C2E0 8001B6E0 87A9002E */ lh $t1, 0x2e($sp) -/* 01C2E4 8001B6E4 A428C728 */ sh $t0, %lo(D_800DC728)($at) -/* 01C2E8 8001B6E8 3C01800E */ lui $at, %hi(D_800DC72C) # $at, 0x800e -/* 01C2EC 8001B6EC 87AA002C */ lh $t2, 0x2c($sp) -/* 01C2F0 8001B6F0 A429C72C */ sh $t1, %lo(D_800DC72C)($at) -/* 01C2F4 8001B6F4 3C01800E */ lui $at, %hi(D_800DC724) # $at, 0x800e -/* 01C2F8 8001B6F8 A42AC724 */ sh $t2, %lo(D_800DC724)($at) -.L8001B6FC: -/* 01C2FC 8001B6FC 1000000A */ b .L8001B728 -/* 01C300 8001B700 00601025 */ move $v0, $v1 -.L8001B704: -/* 01C304 8001B704 0C01AF62 */ jal func_8006BD88 -/* 01C308 8001B708 00000000 */ nop -/* 01C30C 8001B70C 3C068012 */ lui $a2, %hi(D_8011AE82) # $a2, 0x8012 -/* 01C310 8001B710 84C6AE82 */ lh $a2, %lo(D_8011AE82)($a2) -/* 01C314 8001B714 8FA40030 */ lw $a0, 0x30($sp) -/* 01C318 8001B718 00402825 */ move $a1, $v0 -/* 01C31C 8001B71C 00003825 */ move $a3, $zero -/* 01C320 8001B720 0C01666E */ jal func_800599B8 -/* 01C324 8001B724 AFA00010 */ sw $zero, 0x10($sp) -.L8001B728: -/* 01C328 8001B728 8FBF001C */ lw $ra, 0x1c($sp) -/* 01C32C 8001B72C 27BD0030 */ addiu $sp, $sp, 0x30 -/* 01C330 8001B730 03E00008 */ jr $ra -/* 01C334 8001B734 00000000 */ nop - diff --git a/asm/non_matchings/objects/func_80021400.s b/asm/non_matchings/objects/func_80021400.s deleted file mode 100644 index 13ba17a3..00000000 --- a/asm/non_matchings/objects/func_80021400.s +++ /dev/null @@ -1,55 +0,0 @@ -glabel func_80021400 -/* 022000 80021400 3C038012 */ lui $v1, %hi(D_8011AE78) # $v1, 0x8012 -/* 022004 80021404 8463AE78 */ lh $v1, %lo(D_8011AE78)($v1) -/* 022008 80021408 308E00FF */ andi $t6, $a0, 0xff -/* 02200C 8002140C 01C02025 */ move $a0, $t6 -/* 022010 80021410 18600017 */ blez $v1, .L80021470 -/* 022014 80021414 00001025 */ move $v0, $zero -/* 022018 80021418 3C058012 */ lui $a1, %hi(D_8011AE74) # $a1, 0x8012 -/* 02201C 8002141C 8CA5AE74 */ lw $a1, %lo(D_8011AE74)($a1) -/* 022020 80021420 00000000 */ nop -/* 022024 80021424 8CAF0000 */ lw $t7, ($a1) -/* 022028 80021428 00000000 */ nop -/* 02202C 8002142C 8DF8007C */ lw $t8, 0x7c($t7) -/* 022030 80021430 00000000 */ nop -/* 022034 80021434 331900FF */ andi $t9, $t8, 0xff -/* 022038 80021438 11D9000E */ beq $t6, $t9, .L80021474 -/* 02203C 8002143C 0043082A */ slt $at, $v0, $v1 -.L80021440: -/* 022040 80021440 24420001 */ addiu $v0, $v0, 1 -/* 022044 80021444 0043082A */ slt $at, $v0, $v1 -/* 022048 80021448 10200009 */ beqz $at, .L80021470 -/* 02204C 8002144C 00024080 */ sll $t0, $v0, 2 -/* 022050 80021450 00A84821 */ addu $t1, $a1, $t0 -/* 022054 80021454 8D2A0000 */ lw $t2, ($t1) -/* 022058 80021458 00000000 */ nop -/* 02205C 8002145C 8D4B007C */ lw $t3, 0x7c($t2) -/* 022060 80021460 00000000 */ nop -/* 022064 80021464 316C00FF */ andi $t4, $t3, 0xff -/* 022068 80021468 148CFFF5 */ bne $a0, $t4, .L80021440 -/* 02206C 8002146C 00000000 */ nop -.L80021470: -/* 022070 80021470 0043082A */ slt $at, $v0, $v1 -.L80021474: -/* 022074 80021474 10200011 */ beqz $at, .L800214BC -/* 022078 80021478 3C0D8012 */ lui $t5, %hi(D_8011AE74) # $t5, 0x8012 -/* 02207C 8002147C 8DADAE74 */ lw $t5, %lo(D_8011AE74)($t5) -/* 022080 80021480 00027080 */ sll $t6, $v0, 2 -/* 022084 80021484 01AE7821 */ addu $t7, $t5, $t6 -/* 022088 80021488 8DF80000 */ lw $t8, ($t7) -/* 02208C 8002148C 00000000 */ nop -/* 022090 80021490 8F030064 */ lw $v1, 0x64($t8) -/* 022094 80021494 00000000 */ nop -/* 022098 80021498 10600008 */ beqz $v1, .L800214BC -/* 02209C 8002149C 00000000 */ nop -/* 0220A0 800214A0 8C620064 */ lw $v0, 0x64($v1) -/* 0220A4 800214A4 24080001 */ li $t0, 1 -/* 0220A8 800214A8 8459002A */ lh $t9, 0x2a($v0) -/* 0220AC 800214AC 00000000 */ nop -/* 0220B0 800214B0 07210002 */ bgez $t9, .L800214BC -/* 0220B4 800214B4 00000000 */ nop -/* 0220B8 800214B8 A448002A */ sh $t0, 0x2a($v0) -.L800214BC: -/* 0220BC 800214BC 03E00008 */ jr $ra -/* 0220C0 800214C0 00000000 */ nop - diff --git a/asm/non_matchings/objects/func_8002263C.s b/asm/non_matchings/objects/func_8002263C.s deleted file mode 100644 index f4abd641..00000000 --- a/asm/non_matchings/objects/func_8002263C.s +++ /dev/null @@ -1,82 +0,0 @@ -glabel func_8002263C -/* 02323C 8002263C 27BDFFE0 */ addiu $sp, $sp, -0x20 -/* 023240 80022640 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 023244 80022644 00057080 */ sll $t6, $a1, 2 -/* 023248 80022648 44819800 */ mtc1 $at, $f19 -/* 02324C 8002264C E7B50008 */ swc1 $f21, 8($sp) -/* 023250 80022650 E7B4000C */ swc1 $f20, 0xc($sp) -/* 023254 80022654 008E1021 */ addu $v0, $a0, $t6 -/* 023258 80022658 C4460000 */ lwc1 $f6, ($v0) -/* 02325C 8002265C 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 023260 80022660 44814800 */ mtc1 $at, $f9 -/* 023264 80022664 C444000C */ lwc1 $f4, 0xc($v0) -/* 023268 80022668 44804000 */ mtc1 $zero, $f8 -/* 02326C 8002266C 46003321 */ cvt.d.s $f12, $f6 -/* 023270 80022670 462C4382 */ mul.d $f14, $f8, $f12 -/* 023274 80022674 C44A0004 */ lwc1 $f10, 4($v0) -/* 023278 80022678 3C013FF8 */ li $at, 0x3FF80000 # 1.937500 -/* 02327C 8002267C 460020A1 */ cvt.d.s $f2, $f4 -/* 023280 80022680 C4440008 */ lwc1 $f4, 8($v0) -/* 023284 80022684 44813800 */ mtc1 $at, $f7 -/* 023288 80022688 44803000 */ mtc1 $zero, $f6 -/* 02328C 8002268C 46005421 */ cvt.d.s $f16, $f10 -/* 023290 80022690 46303202 */ mul.d $f8, $f6, $f16 -/* 023294 80022694 3C01BFF8 */ li $at, 0xBFF80000 # -1.937500 -/* 023298 80022698 46002021 */ cvt.d.s $f0, $f4 -/* 02329C 8002269C 44802000 */ mtc1 $zero, $f4 -/* 0232A0 800226A0 44812800 */ mtc1 $at, $f5 -/* 0232A4 800226A4 44809000 */ mtc1 $zero, $f18 -/* 0232A8 800226A8 46202182 */ mul.d $f6, $f4, $f0 -/* 0232AC 800226AC 46287280 */ add.d $f10, $f14, $f8 -/* 0232B0 800226B0 3C01C004 */ li $at, 0xC0040000 # -2.062500 -/* 0232B4 800226B4 4486A000 */ mtc1 $a2, $f20 -/* 0232B8 800226B8 46321102 */ mul.d $f4, $f2, $f18 -/* 0232BC 800226BC 46265200 */ add.d $f8, $f10, $f6 -/* 0232C0 800226C0 46282280 */ add.d $f10, $f4, $f8 -/* 0232C4 800226C4 44802000 */ mtc1 $zero, $f4 -/* 0232C8 800226C8 44812800 */ mtc1 $at, $f5 -/* 0232CC 800226CC 462051A0 */ cvt.s.d $f6, $f10 -/* 0232D0 800226D0 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 0232D4 800226D4 46302202 */ mul.d $f8, $f4, $f16 -/* 0232D8 800226D8 46200100 */ add.d $f4, $f0, $f0 -/* 0232DC 800226DC E7A60010 */ swc1 $f6, 0x10($sp) -/* 0232E0 800226E0 46286280 */ add.d $f10, $f12, $f8 -/* 0232E4 800226E4 46245200 */ add.d $f8, $f10, $f4 -/* 0232E8 800226E8 44805000 */ mtc1 $zero, $f10 -/* 0232EC 800226EC 44815800 */ mtc1 $at, $f11 -/* 0232F0 800226F0 3C014040 */ li $at, 0x40400000 # 3.000000 -/* 0232F4 800226F4 462A1102 */ mul.d $f4, $f2, $f10 -/* 0232F8 800226F8 46003306 */ mov.s $f12, $f6 -/* 0232FC 800226FC 462080A0 */ cvt.s.d $f2, $f16 -/* 023300 80022700 46282280 */ add.d $f10, $f4, $f8 -/* 023304 80022704 46320202 */ mul.d $f8, $f0, $f18 -/* 023308 80022708 46205120 */ cvt.s.d $f4, $f10 -/* 02330C 8002270C E7A40014 */ swc1 $f4, 0x14($sp) -/* 023310 80022710 462E4280 */ add.d $f10, $f8, $f14 -/* 023314 80022714 462054A0 */ cvt.s.d $f18, $f10 -/* 023318 80022718 44815000 */ mtc1 $at, $f10 -/* 02331C 8002271C 46002386 */ mov.s $f14, $f4 -/* 023320 80022720 460A3182 */ mul.s $f6, $f6, $f10 -/* 023324 80022724 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 023328 80022728 44814000 */ mtc1 $at, $f8 -/* 02332C 8002272C E7B20018 */ swc1 $f18, 0x18($sp) -/* 023330 80022730 46143102 */ mul.s $f4, $f6, $f20 -/* 023334 80022734 00000000 */ nop -/* 023338 80022738 460E4282 */ mul.s $f10, $f8, $f14 -/* 02333C 8002273C 460A2180 */ add.s $f6, $f4, $f10 -/* 023340 80022740 46143202 */ mul.s $f8, $f6, $f20 -/* 023344 80022744 00000000 */ nop -/* 023348 80022748 46146282 */ mul.s $f10, $f12, $f20 -/* 02334C 8002274C 46124100 */ add.s $f4, $f8, $f18 -/* 023350 80022750 E4E40000 */ swc1 $f4, ($a3) -/* 023354 80022754 460E5180 */ add.s $f6, $f10, $f14 -/* 023358 80022758 C7B50008 */ lwc1 $f21, 8($sp) -/* 02335C 8002275C 46143202 */ mul.s $f8, $f6, $f20 -/* 023360 80022760 46124100 */ add.s $f4, $f8, $f18 -/* 023364 80022764 46142282 */ mul.s $f10, $f4, $f20 -/* 023368 80022768 C7B4000C */ lwc1 $f20, 0xc($sp) -/* 02336C 8002276C 27BD0020 */ addiu $sp, $sp, 0x20 -/* 023370 80022770 46025080 */ add.s $f2, $f10, $f2 -/* 023374 80022774 03E00008 */ jr $ra -/* 023378 80022778 46001006 */ mov.s $f0, $f2 - diff --git a/asm/non_matchings/printf/func_800B3678.s b/asm/non_matchings/printf/func_800B3678.s deleted file mode 100644 index 16736aaa..00000000 --- a/asm/non_matchings/printf/func_800B3678.s +++ /dev/null @@ -1,55 +0,0 @@ -glabel func_800B3678 -/* 0B4278 800B3678 27BDFFB8 */ addiu $sp, $sp, -0x48 -/* 0B427C 800B367C AFB20024 */ sw $s2, 0x24($sp) -/* 0B4280 800B3680 AFB10020 */ sw $s1, 0x20($sp) -/* 0B4284 800B3684 00808825 */ move $s1, $a0 -/* 0B4288 800B3688 00A09025 */ move $s2, $a1 -/* 0B428C 800B368C AFBF002C */ sw $ra, 0x2c($sp) -/* 0B4290 800B3690 AFB30028 */ sw $s3, 0x28($sp) -/* 0B4294 800B3694 00C09825 */ move $s3, $a2 -/* 0B4298 800B3698 AFB0001C */ sw $s0, 0x1c($sp) -/* 0B429C 800B369C 27A50034 */ addiu $a1, $sp, 0x34 -/* 0B42A0 800B36A0 0C003A62 */ jal func_8000E988 -/* 0B42A4 800B36A4 27A40038 */ addiu $a0, $sp, 0x38 -/* 0B42A8 800B36A8 8FA30038 */ lw $v1, 0x38($sp) -/* 0B42AC 800B36AC 8FAE0034 */ lw $t6, 0x34($sp) -/* 0B42B0 800B36B0 00408025 */ move $s0, $v0 -/* 0B42B4 800B36B4 006E082A */ slt $at, $v1, $t6 -/* 0B42B8 800B36B8 1020001B */ beqz $at, .L800B3728 -/* 0B42BC 800B36BC 8FBF002C */ lw $ra, 0x2c($sp) -.L800B36C0: -/* 0B42C0 800B36C0 8FAF0038 */ lw $t7, 0x38($sp) -/* 0B42C4 800B36C4 00000000 */ nop -/* 0B42C8 800B36C8 000FC080 */ sll $t8, $t7, 2 -/* 0B42CC 800B36CC 0218C821 */ addu $t9, $s0, $t8 -/* 0B42D0 800B36D0 8F240000 */ lw $a0, ($t9) -/* 0B42D4 800B36D4 00000000 */ nop -/* 0B42D8 800B36D8 84880006 */ lh $t0, 6($a0) -/* 0B42DC 800B36DC 00000000 */ nop -/* 0B42E0 800B36E0 31098000 */ andi $t1, $t0, 0x8000 -/* 0B42E4 800B36E4 1120000A */ beqz $t1, .L800B3710 -/* 0B42E8 800B36E8 8FA30038 */ lw $v1, 0x38($sp) -/* 0B42EC 800B36EC 8C8A0040 */ lw $t2, 0x40($a0) -/* 0B42F0 800B36F0 02202825 */ move $a1, $s1 -/* 0B42F4 800B36F4 314B8000 */ andi $t3, $t2, 0x8000 -/* 0B42F8 800B36F8 11600004 */ beqz $t3, .L800B370C -/* 0B42FC 800B36FC 02403025 */ move $a2, $s2 -/* 0B4300 800B3700 02603825 */ move $a3, $s3 -/* 0B4304 800B3704 0C02CDD0 */ jal func_800B3740 -/* 0B4308 800B3708 AFA00010 */ sw $zero, 0x10($sp) -.L800B370C: -/* 0B430C 800B370C 8FA30038 */ lw $v1, 0x38($sp) -.L800B3710: -/* 0B4310 800B3710 8FAC0034 */ lw $t4, 0x34($sp) -/* 0B4314 800B3714 24630001 */ addiu $v1, $v1, 1 -/* 0B4318 800B3718 006C082A */ slt $at, $v1, $t4 -/* 0B431C 800B371C 1420FFE8 */ bnez $at, .L800B36C0 -/* 0B4320 800B3720 AFA30038 */ sw $v1, 0x38($sp) -/* 0B4324 800B3724 8FBF002C */ lw $ra, 0x2c($sp) -.L800B3728: -/* 0B4328 800B3728 8FB0001C */ lw $s0, 0x1c($sp) -/* 0B432C 800B372C 8FB10020 */ lw $s1, 0x20($sp) -/* 0B4330 800B3730 8FB20024 */ lw $s2, 0x24($sp) -/* 0B4334 800B3734 8FB30028 */ lw $s3, 0x28($sp) -/* 0B4338 800B3738 03E00008 */ jr $ra -/* 0B433C 800B373C 27BD0048 */ addiu $sp, $sp, 0x48 \ No newline at end of file diff --git a/asm/non_matchings/racer/func_8005A6F0.s b/asm/non_matchings/racer/func_8005A6F0.s deleted file mode 100644 index 0a6a692f..00000000 --- a/asm/non_matchings/racer/func_8005A6F0.s +++ /dev/null @@ -1,1221 +0,0 @@ -.late_rodata -glabel D_800E6940 -.double 0.45 -glabel D_800E6948 -.float -0.02 -glabel D_800E694C -.float 1000000.0 -glabel D_800E6950 -.double 160000.0 -glabel D_800E6958 -.float 0.8 -.word 0 # Padding -glabel D_800E6960 -.double 160000.0 -glabel jpt_800E6968 -.word L8005AF80, L8005AFD8, L8005B004, L8005B030, L8005AFAC, L8005B05C, L8005B094, L8005B0CC, L8005B0CC, L8005B1B0, L8005B030, L8005B10C, L8005B144, L8005B17C -glabel D_800E69A0 -.double 0.9 -glabel D_800E69A8 -.float 0.02 -glabel D_800E69AC -.float -0.02 -glabel D_800E69B0 -.float 265.0 -.word 0 # Padding -glabel D_800E69B8 -.double 1500.0 - -.text -glabel func_8005A6F0 -/* 05B2F0 8005A6F0 27BDFF60 */ addiu $sp, $sp, -0xa0 -/* 05B2F4 8005A6F4 AFBF002C */ sw $ra, 0x2c($sp) -/* 05B2F8 8005A6F8 AFB00028 */ sw $s0, 0x28($sp) -/* 05B2FC 8005A6FC 240EFFFF */ li $t6, -1 -/* 05B300 8005A700 3C018012 */ lui $at, %hi(gCurrentPlayerIndex) # $at, 0x8012 -/* 05B304 8005A704 00A08025 */ move $s0, $a1 -/* 05B308 8005A708 AFA400A0 */ sw $a0, 0xa0($sp) -/* 05B30C 8005A70C AFA600A8 */ sw $a2, 0xa8($sp) -/* 05B310 8005A710 AFA700AC */ sw $a3, 0xac($sp) -/* 05B314 8005A714 0C01B683 */ jal get_render_context -/* 05B318 8005A718 AC2ED55C */ sw $t6, %lo(gCurrentPlayerIndex)($at) -/* 05B31C 8005A71C 0C01AF6C */ jal get_current_level_header -/* 05B320 8005A720 AFA20094 */ sw $v0, 0x94($sp) -/* 05B324 8005A724 AFA20070 */ sw $v0, 0x70($sp) -/* 05B328 8005A728 820301F6 */ lb $v1, 0x1f6($s0) -/* 05B32C 8005A72C 3C198012 */ lui $t9, %hi(gRaceStartTimer) # $t9, 0x8012 -/* 05B330 8005A730 18600006 */ blez $v1, .L8005A74C -/* 05B334 8005A734 00000000 */ nop -/* 05B338 8005A738 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 05B33C 8005A73C 00000000 */ nop -/* 05B340 8005A740 006FC023 */ subu $t8, $v1, $t7 -/* 05B344 8005A744 10000002 */ b .L8005A750 -/* 05B348 8005A748 A21801F6 */ sb $t8, 0x1f6($s0) -.L8005A74C: -/* 05B34C 8005A74C A20001F6 */ sb $zero, 0x1f6($s0) -.L8005A750: -/* 05B350 8005A750 8F39D540 */ lw $t9, %lo(gRaceStartTimer)($t9) -/* 05B354 8005A754 00000000 */ nop -/* 05B358 8005A758 13200005 */ beqz $t9, .L8005A770 -/* 05B35C 8005A75C 2404FFC4 */ li $a0, -60 -/* 05B360 8005A760 0C01BE53 */ jal get_random_number_from_range -/* 05B364 8005A764 2405003C */ li $a1, 60 -/* 05B368 8005A768 244D0078 */ addiu $t5, $v0, 0x78 -/* 05B36C 8005A76C A60D01C6 */ sh $t5, 0x1c6($s0) -.L8005A770: -/* 05B370 8005A770 8602018C */ lh $v0, 0x18c($s0) -/* 05B374 8005A774 00000000 */ nop -/* 05B378 8005A778 18400006 */ blez $v0, .L8005A794 -/* 05B37C 8005A77C 00000000 */ nop -/* 05B380 8005A780 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 05B384 8005A784 00000000 */ nop -/* 05B388 8005A788 004E7823 */ subu $t7, $v0, $t6 -/* 05B38C 8005A78C 10000002 */ b .L8005A798 -/* 05B390 8005A790 A60F018C */ sh $t7, 0x18c($s0) -.L8005A794: -/* 05B394 8005A794 A600018C */ sh $zero, 0x18c($s0) -.L8005A798: -/* 05B398 8005A798 0C0078A7 */ jal get_misc_asset -/* 05B39C 8005A79C 24040009 */ li $a0, 9 -/* 05B3A0 8005A7A0 3C038012 */ lui $v1, %hi(gCurrentRacerMiscAssetPtr) # $v1, 0x8012 -/* 05B3A4 8005A7A4 2463D564 */ addiu $v1, %lo(gCurrentRacerMiscAssetPtr) # addiu $v1, $v1, -0x2a9c -/* 05B3A8 8005A7A8 AC620000 */ sw $v0, ($v1) -/* 05B3AC 8005A7AC 82190003 */ lb $t9, 3($s0) -/* 05B3B0 8005A7B0 3C01800E */ lui $at, %hi(D_800E6940 + 4) # $at, 0x800e -/* 05B3B4 8005A7B4 00196880 */ sll $t5, $t9, 2 -/* 05B3B8 8005A7B8 004D7021 */ addu $t6, $v0, $t5 -/* 05B3BC 8005A7BC C5C40000 */ lwc1 $f4, ($t6) -/* 05B3C0 8005A7C0 C4296940 */ lwc1 $f9, %lo(D_800E6940)($at) -/* 05B3C4 8005A7C4 C4286944 */ lwc1 $f8, %lo(D_800E6940 + 4)($at) -/* 05B3C8 8005A7C8 460021A1 */ cvt.d.s $f6, $f4 -/* 05B3CC 8005A7CC 46283282 */ mul.d $f10, $f6, $f8 -/* 05B3D0 8005A7D0 3C0C8012 */ lui $t4, %hi(gCurrentRacerWeightStat) # $t4, 0x8012 -/* 05B3D4 8005A7D4 258CD56C */ addiu $t4, %lo(gCurrentRacerWeightStat) # addiu $t4, $t4, -0x2a94 -/* 05B3D8 8005A7D8 462054A0 */ cvt.s.d $f18, $f10 -/* 05B3DC 8005A7DC E5920000 */ swc1 $f18, ($t4) -/* 05B3E0 8005A7E0 860F0204 */ lh $t7, 0x204($s0) -/* 05B3E4 8005A7E4 00000000 */ nop -/* 05B3E8 8005A7E8 19E00004 */ blez $t7, .L8005A7FC -/* 05B3EC 8005A7EC 3C01800E */ lui $at, %hi(D_800E6948) # $at, 0x800e -/* 05B3F0 8005A7F0 C4246948 */ lwc1 $f4, %lo(D_800E6948)($at) -/* 05B3F4 8005A7F4 00000000 */ nop -/* 05B3F8 8005A7F8 E5840000 */ swc1 $f4, ($t4) -.L8005A7FC: -/* 05B3FC 8005A7FC 0C0078A7 */ jal get_misc_asset -/* 05B400 8005A800 2404000A */ li $a0, 10 -/* 05B404 8005A804 3C038012 */ lui $v1, %hi(gCurrentRacerMiscAssetPtr) # $v1, 0x8012 -/* 05B408 8005A808 2463D564 */ addiu $v1, %lo(gCurrentRacerMiscAssetPtr) # addiu $v1, $v1, -0x2a9c -/* 05B40C 8005A80C AC620000 */ sw $v0, ($v1) -/* 05B410 8005A810 82180003 */ lb $t8, 3($s0) -/* 05B414 8005A814 3C018012 */ lui $at, %hi(gCurrentRacerHandlingStat) # $at, 0x8012 -/* 05B418 8005A818 00186880 */ sll $t5, $t8, 2 -/* 05B41C 8005A81C 004D7021 */ addu $t6, $v0, $t5 -/* 05B420 8005A820 C5C60000 */ lwc1 $f6, ($t6) -/* 05B424 8005A824 2404000B */ li $a0, 11 -/* 05B428 8005A828 0C0078A7 */ jal get_misc_asset -/* 05B42C 8005A82C E426D570 */ swc1 $f6, %lo(gCurrentRacerHandlingStat)($at) -/* 05B430 8005A830 3C058012 */ lui $a1, %hi(gCurrentRacerMiscAssetPtr) # $a1, 0x8012 -/* 05B434 8005A834 24A5D564 */ addiu $a1, %lo(gCurrentRacerMiscAssetPtr) # addiu $a1, $a1, -0x2a9c -/* 05B438 8005A838 ACA20000 */ sw $v0, ($a1) -/* 05B43C 8005A83C 82180003 */ lb $t8, 3($s0) -/* 05B440 8005A840 8FA400A0 */ lw $a0, 0xa0($sp) -/* 05B444 8005A844 0018C880 */ sll $t9, $t8, 2 -/* 05B448 8005A848 00596821 */ addu $t5, $v0, $t9 -/* 05B44C 8005A84C C5A80000 */ lwc1 $f8, ($t5) -/* 05B450 8005A850 3C018012 */ lui $at, %hi(D_8011D574) # $at, 0x8012 -/* 05B454 8005A854 E428D574 */ swc1 $f8, %lo(D_8011D574)($at) -/* 05B458 8005A858 C48A000C */ lwc1 $f10, 0xc($a0) -/* 05B45C 8005A85C 00000000 */ nop -/* 05B460 8005A860 E7AA008C */ swc1 $f10, 0x8c($sp) -/* 05B464 8005A864 C4920010 */ lwc1 $f18, 0x10($a0) -/* 05B468 8005A868 00000000 */ nop -/* 05B46C 8005A86C E7B20088 */ swc1 $f18, 0x88($sp) -/* 05B470 8005A870 C4840014 */ lwc1 $f4, 0x14($a0) -/* 05B474 8005A874 00000000 */ nop -/* 05B478 8005A878 E7A40084 */ swc1 $f4, 0x84($sp) -/* 05B47C 8005A87C 860301B2 */ lh $v1, 0x1b2($s0) -/* 05B480 8005A880 00000000 */ nop -/* 05B484 8005A884 1860000A */ blez $v1, .L8005A8B0 -/* 05B488 8005A888 00000000 */ nop -/* 05B48C 8005A88C 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 05B490 8005A890 00000000 */ nop -/* 05B494 8005A894 006EC023 */ subu $t8, $v1, $t6 -/* 05B498 8005A898 A61801B2 */ sh $t8, 0x1b2($s0) -/* 05B49C 8005A89C 860F01B2 */ lh $t7, 0x1b2($s0) -/* 05B4A0 8005A8A0 00000000 */ nop -/* 05B4A4 8005A8A4 05E10002 */ bgez $t7, .L8005A8B0 -/* 05B4A8 8005A8A8 00000000 */ nop -/* 05B4AC 8005A8AC A60001B2 */ sh $zero, 0x1b2($s0) -.L8005A8B0: -/* 05B4B0 8005A8B0 821901E7 */ lb $t9, 0x1e7($s0) -/* 05B4B4 8005A8B4 00000000 */ nop -/* 05B4B8 8005A8B8 272D0001 */ addiu $t5, $t9, 1 -/* 05B4BC 8005A8BC 0C008D07 */ jal func_8002341C -/* 05B4C0 8005A8C0 A20D01E7 */ sb $t5, 0x1e7($s0) -/* 05B4C4 8005A8C4 1440001A */ bnez $v0, .L8005A930 -/* 05B4C8 8005A8C8 240E001E */ li $t6, 30 -/* 05B4CC 8005A8CC 0C008D5A */ jal func_80023568 -/* 05B4D0 8005A8D0 00000000 */ nop -/* 05B4D4 8005A8D4 14400016 */ bnez $v0, .L8005A930 -/* 05B4D8 8005A8D8 240E001E */ li $t6, 30 -/* 05B4DC 8005A8DC 820E01D6 */ lb $t6, 0x1d6($s0) -/* 05B4E0 8005A8E0 24010004 */ li $at, 4 -/* 05B4E4 8005A8E4 11C10011 */ beq $t6, $at, .L8005A92C -/* 05B4E8 8005A8E8 3C0142F0 */ li $at, 0x42F00000 # 120.000000 -/* 05B4EC 8005A8EC 44813000 */ mtc1 $at, $f6 -/* 05B4F0 8005A8F0 3C018012 */ lui $at, %hi(D_8011D544) # $at, 0x8012 -/* 05B4F4 8005A8F4 C428D544 */ lwc1 $f8, %lo(D_8011D544)($at) -/* 05B4F8 8005A8F8 3C188012 */ lui $t8, %hi(gRaceStartTimer) # $t8, 0x8012 -/* 05B4FC 8005A8FC 4608303C */ c.lt.s $f6, $f8 -/* 05B500 8005A900 00000000 */ nop -/* 05B504 8005A904 4501000A */ bc1t .L8005A930 -/* 05B508 8005A908 240E001E */ li $t6, 30 -/* 05B50C 8005A90C 8F18D540 */ lw $t8, %lo(gRaceStartTimer)($t8) -/* 05B510 8005A910 8FAF0070 */ lw $t7, 0x70($sp) -/* 05B514 8005A914 17000006 */ bnez $t8, .L8005A930 -/* 05B518 8005A918 240E001E */ li $t6, 30 -/* 05B51C 8005A91C 81F9004C */ lb $t9, 0x4c($t7) -/* 05B520 8005A920 00000000 */ nop -/* 05B524 8005A924 332D0040 */ andi $t5, $t9, 0x40 -/* 05B528 8005A928 11A00002 */ beqz $t5, .L8005A934 -.L8005A92C: -/* 05B52C 8005A92C 240E001E */ li $t6, 30 -.L8005A930: -/* 05B530 8005A930 A20E0201 */ sb $t6, 0x201($s0) -.L8005A934: -/* 05B534 8005A934 82180201 */ lb $t8, 0x201($s0) -/* 05B538 8005A938 3C01800E */ lui $at, %hi(D_800E694C) # $at, 0x800e -/* 05B53C 8005A93C C422694C */ lwc1 $f2, %lo(D_800E694C)($at) -/* 05B540 8005A940 1700007C */ bnez $t8, .L8005AB34 -/* 05B544 8005A944 27A40090 */ addiu $a0, $sp, 0x90 -/* 05B548 8005A948 0C006E9D */ jal get_object_struct_array -/* 05B54C 8005A94C E7A20078 */ swc1 $f2, 0x78($sp) -/* 05B550 8005A950 8FAF0090 */ lw $t7, 0x90($sp) -/* 05B554 8005A954 C7A20078 */ lwc1 $f2, 0x78($sp) -/* 05B558 8005A958 00004025 */ move $t0, $zero -/* 05B55C 8005A95C 00003825 */ move $a3, $zero -/* 05B560 8005A960 19E00055 */ blez $t7, .L8005AAB8 -/* 05B564 8005A964 00005025 */ move $t2, $zero -/* 05B568 8005A968 31E30003 */ andi $v1, $t7, 3 -/* 05B56C 8005A96C 10600018 */ beqz $v1, .L8005A9D0 -/* 05B570 8005A970 00604825 */ move $t1, $v1 -/* 05B574 8005A974 0000C880 */ sll $t9, $zero, 2 -/* 05B578 8005A978 00593021 */ addu $a2, $v0, $t9 -/* 05B57C 8005A97C 240B0001 */ li $t3, 1 -.L8005A980: -/* 05B580 8005A980 8CC40000 */ lw $a0, ($a2) -/* 05B584 8005A984 254A0001 */ addiu $t2, $t2, 1 -/* 05B588 8005A988 8C850064 */ lw $a1, 0x64($a0) -/* 05B58C 8005A98C 00000000 */ nop -/* 05B590 8005A990 84AD0000 */ lh $t5, ($a1) -/* 05B594 8005A994 00000000 */ nop -/* 05B598 8005A998 15A00002 */ bnez $t5, .L8005A9A4 -/* 05B59C 8005A99C 00000000 */ nop -/* 05B5A0 8005A9A0 00803825 */ move $a3, $a0 -.L8005A9A4: -/* 05B5A4 8005A9A4 84AE0000 */ lh $t6, ($a1) -/* 05B5A8 8005A9A8 00000000 */ nop -/* 05B5AC 8005A9AC 156E0002 */ bne $t3, $t6, .L8005A9B8 -/* 05B5B0 8005A9B0 00000000 */ nop -/* 05B5B4 8005A9B4 00804025 */ move $t0, $a0 -.L8005A9B8: -/* 05B5B8 8005A9B8 152AFFF1 */ bne $t1, $t2, .L8005A980 -/* 05B5BC 8005A9BC 24C60004 */ addiu $a2, $a2, 4 -/* 05B5C0 8005A9C0 8FB80090 */ lw $t8, 0x90($sp) -/* 05B5C4 8005A9C4 00000000 */ nop -/* 05B5C8 8005A9C8 1158003B */ beq $t2, $t8, .L8005AAB8 -/* 05B5CC 8005A9CC 00000000 */ nop -.L8005A9D0: -/* 05B5D0 8005A9D0 8FAF0090 */ lw $t7, 0x90($sp) -/* 05B5D4 8005A9D4 000A6880 */ sll $t5, $t2, 2 -/* 05B5D8 8005A9D8 000FC880 */ sll $t9, $t7, 2 -/* 05B5DC 8005A9DC 03224821 */ addu $t1, $t9, $v0 -/* 05B5E0 8005A9E0 004D3021 */ addu $a2, $v0, $t5 -/* 05B5E4 8005A9E4 240B0001 */ li $t3, 1 -.L8005A9E8: -/* 05B5E8 8005A9E8 8CC40000 */ lw $a0, ($a2) -/* 05B5EC 8005A9EC 00000000 */ nop -/* 05B5F0 8005A9F0 8C850064 */ lw $a1, 0x64($a0) -/* 05B5F4 8005A9F4 00000000 */ nop -/* 05B5F8 8005A9F8 84AE0000 */ lh $t6, ($a1) -/* 05B5FC 8005A9FC 00000000 */ nop -/* 05B600 8005AA00 15C00002 */ bnez $t6, .L8005AA0C -/* 05B604 8005AA04 00000000 */ nop -/* 05B608 8005AA08 00803825 */ move $a3, $a0 -.L8005AA0C: -/* 05B60C 8005AA0C 84B80000 */ lh $t8, ($a1) -/* 05B610 8005AA10 00000000 */ nop -/* 05B614 8005AA14 15780002 */ bne $t3, $t8, .L8005AA20 -/* 05B618 8005AA18 00000000 */ nop -/* 05B61C 8005AA1C 00804025 */ move $t0, $a0 -.L8005AA20: -/* 05B620 8005AA20 8CC50004 */ lw $a1, 4($a2) -/* 05B624 8005AA24 00000000 */ nop -/* 05B628 8005AA28 8CA30064 */ lw $v1, 0x64($a1) -/* 05B62C 8005AA2C 00000000 */ nop -/* 05B630 8005AA30 84640000 */ lh $a0, ($v1) -/* 05B634 8005AA34 00000000 */ nop -/* 05B638 8005AA38 14800002 */ bnez $a0, .L8005AA44 -/* 05B63C 8005AA3C 00000000 */ nop -/* 05B640 8005AA40 00A03825 */ move $a3, $a1 -.L8005AA44: -/* 05B644 8005AA44 15640002 */ bne $t3, $a0, .L8005AA50 -/* 05B648 8005AA48 00000000 */ nop -/* 05B64C 8005AA4C 00A04025 */ move $t0, $a1 -.L8005AA50: -/* 05B650 8005AA50 8CC50008 */ lw $a1, 8($a2) -/* 05B654 8005AA54 00000000 */ nop -/* 05B658 8005AA58 8CA30064 */ lw $v1, 0x64($a1) -/* 05B65C 8005AA5C 00000000 */ nop -/* 05B660 8005AA60 84640000 */ lh $a0, ($v1) -/* 05B664 8005AA64 00000000 */ nop -/* 05B668 8005AA68 14800002 */ bnez $a0, .L8005AA74 -/* 05B66C 8005AA6C 00000000 */ nop -/* 05B670 8005AA70 00A03825 */ move $a3, $a1 -.L8005AA74: -/* 05B674 8005AA74 15640002 */ bne $t3, $a0, .L8005AA80 -/* 05B678 8005AA78 00000000 */ nop -/* 05B67C 8005AA7C 00A04025 */ move $t0, $a1 -.L8005AA80: -/* 05B680 8005AA80 8CC5000C */ lw $a1, 0xc($a2) -/* 05B684 8005AA84 24C60010 */ addiu $a2, $a2, 0x10 -/* 05B688 8005AA88 8CA30064 */ lw $v1, 0x64($a1) -/* 05B68C 8005AA8C 00000000 */ nop -/* 05B690 8005AA90 84640000 */ lh $a0, ($v1) -/* 05B694 8005AA94 00000000 */ nop -/* 05B698 8005AA98 14800002 */ bnez $a0, .L8005AAA4 -/* 05B69C 8005AA9C 00000000 */ nop -/* 05B6A0 8005AAA0 00A03825 */ move $a3, $a1 -.L8005AAA4: -/* 05B6A4 8005AAA4 15640002 */ bne $t3, $a0, .L8005AAB0 -/* 05B6A8 8005AAA8 00000000 */ nop -/* 05B6AC 8005AAAC 00A04025 */ move $t0, $a1 -.L8005AAB0: -/* 05B6B0 8005AAB0 14C9FFCD */ bne $a2, $t1, .L8005A9E8 -/* 05B6B4 8005AAB4 00000000 */ nop -.L8005AAB8: -/* 05B6B8 8005AAB8 10E0000B */ beqz $a3, .L8005AAE8 -/* 05B6BC 8005AABC 3C01800E */ lui $at, %hi(D_800E6950 + 4) # $at, 0x800e -/* 05B6C0 8005AAC0 8FA400A0 */ lw $a0, 0xa0($sp) -/* 05B6C4 8005AAC4 C4EA000C */ lwc1 $f10, 0xc($a3) -/* 05B6C8 8005AAC8 C492000C */ lwc1 $f18, 0xc($a0) -/* 05B6CC 8005AACC C4E40014 */ lwc1 $f4, 0x14($a3) -/* 05B6D0 8005AAD0 46125081 */ sub.s $f2, $f10, $f18 -/* 05B6D4 8005AAD4 C4860014 */ lwc1 $f6, 0x14($a0) -/* 05B6D8 8005AAD8 46021202 */ mul.s $f8, $f2, $f2 -/* 05B6DC 8005AADC 46062001 */ sub.s $f0, $f4, $f6 -/* 05B6E0 8005AAE0 46000282 */ mul.s $f10, $f0, $f0 -/* 05B6E4 8005AAE4 460A4080 */ add.s $f2, $f8, $f10 -.L8005AAE8: -/* 05B6E8 8005AAE8 8FA400A0 */ lw $a0, 0xa0($sp) -/* 05B6EC 8005AAEC 11000011 */ beqz $t0, .L8005AB34 -/* 05B6F0 8005AAF0 00000000 */ nop -/* 05B6F4 8005AAF4 C4256950 */ lwc1 $f5, %lo(D_800E6950)($at) -/* 05B6F8 8005AAF8 C4246954 */ lwc1 $f4, %lo(D_800E6950 + 4)($at) -/* 05B6FC 8005AAFC 460014A1 */ cvt.d.s $f18, $f2 -/* 05B700 8005AB00 4632203E */ c.le.d $f4, $f18 -/* 05B704 8005AB04 00000000 */ nop -/* 05B708 8005AB08 4500000A */ bc1f .L8005AB34 -/* 05B70C 8005AB0C 00000000 */ nop -/* 05B710 8005AB10 C506000C */ lwc1 $f6, 0xc($t0) -/* 05B714 8005AB14 C488000C */ lwc1 $f8, 0xc($a0) -/* 05B718 8005AB18 C50A0014 */ lwc1 $f10, 0x14($t0) -/* 05B71C 8005AB1C 46083081 */ sub.s $f2, $f6, $f8 -/* 05B720 8005AB20 C4920014 */ lwc1 $f18, 0x14($a0) -/* 05B724 8005AB24 46021102 */ mul.s $f4, $f2, $f2 -/* 05B728 8005AB28 46125001 */ sub.s $f0, $f10, $f18 -/* 05B72C 8005AB2C 46000182 */ mul.s $f6, $f0, $f0 -/* 05B730 8005AB30 46062080 */ add.s $f2, $f4, $f6 -.L8005AB34: -/* 05B734 8005AB34 86020204 */ lh $v0, 0x204($s0) -/* 05B738 8005AB38 8FA400A0 */ lw $a0, 0xa0($sp) -/* 05B73C 8005AB3C 1840000A */ blez $v0, .L8005AB68 -/* 05B740 8005AB40 00000000 */ nop -/* 05B744 8005AB44 8FA600A8 */ lw $a2, 0xa8($sp) -/* 05B748 8005AB48 3C01800E */ lui $at, %hi(D_800E6958) # $at, 0x800e -/* 05B74C 8005AB4C 00467823 */ subu $t7, $v0, $a2 -/* 05B750 8005AB50 A60F0204 */ sh $t7, 0x204($s0) -/* 05B754 8005AB54 C42A6958 */ lwc1 $f10, %lo(D_800E6958)($at) -/* 05B758 8005AB58 C608002C */ lwc1 $f8, 0x2c($s0) -/* 05B75C 8005AB5C 00000000 */ nop -/* 05B760 8005AB60 460A4482 */ mul.s $f18, $f8, $f10 -/* 05B764 8005AB64 E612002C */ swc1 $f18, 0x2c($s0) -.L8005AB68: -/* 05B768 8005AB68 86020206 */ lh $v0, 0x206($s0) -/* 05B76C 8005AB6C 8FA600A8 */ lw $a2, 0xa8($sp) -/* 05B770 8005AB70 18400003 */ blez $v0, .L8005AB80 -/* 05B774 8005AB74 0046C823 */ subu $t9, $v0, $a2 -/* 05B778 8005AB78 A602018A */ sh $v0, 0x18a($s0) -/* 05B77C 8005AB7C A6190206 */ sh $t9, 0x206($s0) -.L8005AB80: -/* 05B780 8005AB80 82020201 */ lb $v0, 0x201($s0) -/* 05B784 8005AB84 00000000 */ nop -/* 05B788 8005AB88 1440000B */ bnez $v0, .L8005ABB8 -/* 05B78C 8005AB8C 3C01800E */ lui $at, %hi(D_800E6960 + 4) # $at, 0x800e -/* 05B790 8005AB90 C4276960 */ lwc1 $f7, %lo(D_800E6960)($at) -/* 05B794 8005AB94 C4266964 */ lwc1 $f6, %lo(D_800E6960 + 4)($at) -/* 05B798 8005AB98 46001121 */ cvt.d.s $f4, $f2 -/* 05B79C 8005AB9C 4626203C */ c.lt.d $f4, $f6 -/* 05B7A0 8005ABA0 240D001E */ li $t5, 30 -/* 05B7A4 8005ABA4 45000004 */ bc1f .L8005ABB8 -/* 05B7A8 8005ABA8 00000000 */ nop -/* 05B7AC 8005ABAC A20D0201 */ sb $t5, 0x201($s0) -/* 05B7B0 8005ABB0 82020201 */ lb $v0, 0x201($s0) -/* 05B7B4 8005ABB4 00000000 */ nop -.L8005ABB8: -/* 05B7B8 8005ABB8 10400218 */ beqz $v0, .L8005B41C -/* 05B7BC 8005ABBC 8FA700AC */ lw $a3, 0xac($sp) -/* 05B7C0 8005ABC0 0C01105C */ jal func_80044170 -/* 05B7C4 8005ABC4 02002825 */ move $a1, $s0 -/* 05B7C8 8005ABC8 3C0E8012 */ lui $t6, %hi(gCurrentRacerInput) # $t6, 0x8012 -/* 05B7CC 8005ABCC 8DCED528 */ lw $t6, %lo(gCurrentRacerInput)($t6) -/* 05B7D0 8005ABD0 3C0C8012 */ lui $t4, %hi(gCurrentRacerWeightStat) # $t4, 0x8012 -/* 05B7D4 8005ABD4 31D88000 */ andi $t8, $t6, 0x8000 -/* 05B7D8 8005ABD8 258CD56C */ addiu $t4, %lo(gCurrentRacerWeightStat) # addiu $t4, $t4, -0x2a94 -/* 05B7DC 8005ABDC 17000003 */ bnez $t8, .L8005ABEC -/* 05B7E0 8005ABE0 240B0001 */ li $t3, 1 -/* 05B7E4 8005ABE4 240F0001 */ li $t7, 1 -/* 05B7E8 8005ABE8 A20F020C */ sb $t7, 0x20c($s0) -.L8005ABEC: -/* 05B7EC 8005ABEC 920201FE */ lbu $v0, 0x1fe($s0) -/* 05B7F0 8005ABF0 24010003 */ li $at, 3 -/* 05B7F4 8005ABF4 14410011 */ bne $v0, $at, .L8005AC3C -/* 05B7F8 8005ABF8 00000000 */ nop -/* 05B7FC 8005ABFC 921901FF */ lbu $t9, 0x1ff($s0) -/* 05B800 8005AC00 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 05B804 8005AC04 44994000 */ mtc1 $t9, $f8 -/* 05B808 8005AC08 07210004 */ bgez $t9, .L8005AC1C -/* 05B80C 8005AC0C 468042A0 */ cvt.s.w $f10, $f8 -/* 05B810 8005AC10 44819000 */ mtc1 $at, $f18 -/* 05B814 8005AC14 00000000 */ nop -/* 05B818 8005AC18 46125280 */ add.s $f10, $f10, $f18 -.L8005AC1C: -/* 05B81C 8005AC1C 3C014380 */ li $at, 0x43800000 # 256.000000 -/* 05B820 8005AC20 44812000 */ mtc1 $at, $f4 -/* 05B824 8005AC24 C5880000 */ lwc1 $f8, ($t4) -/* 05B828 8005AC28 46045183 */ div.s $f6, $f10, $f4 -/* 05B82C 8005AC2C 46064482 */ mul.s $f18, $f8, $f6 -/* 05B830 8005AC30 E5920000 */ swc1 $f18, ($t4) -/* 05B834 8005AC34 920201FE */ lbu $v0, 0x1fe($s0) -/* 05B838 8005AC38 00000000 */ nop -.L8005AC3C: -/* 05B83C 8005AC3C 1562001E */ bne $t3, $v0, .L8005ACB8 -/* 05B840 8005AC40 24010002 */ li $at, 2 -/* 05B844 8005AC44 920D01FF */ lbu $t5, 0x1ff($s0) -/* 05B848 8005AC48 C5800000 */ lwc1 $f0, ($t4) -/* 05B84C 8005AC4C 448D5000 */ mtc1 $t5, $f10 -/* 05B850 8005AC50 05A10005 */ bgez $t5, .L8005AC68 -/* 05B854 8005AC54 46805120 */ cvt.s.w $f4, $f10 -/* 05B858 8005AC58 3C014F80 */ li $at, 0x4F800000 # 4294967296.000000 -/* 05B85C 8005AC5C 44814000 */ mtc1 $at, $f8 -/* 05B860 8005AC60 00000000 */ nop -/* 05B864 8005AC64 46082100 */ add.s $f4, $f4, $f8 -.L8005AC68: -/* 05B868 8005AC68 46040182 */ mul.s $f6, $f0, $f4 -/* 05B86C 8005AC6C 3C014300 */ li $at, 0x43000000 # 128.000000 -/* 05B870 8005AC70 44819000 */ mtc1 $at, $f18 -/* 05B874 8005AC74 3C018012 */ lui $at, %hi(gCurrentStickY) # $at, 0x8012 -/* 05B878 8005AC78 46123283 */ div.s $f10, $f6, $f18 -/* 05B87C 8005AC7C 2418003C */ li $t8, 60 -/* 05B880 8005AC80 460A0201 */ sub.s $f8, $f0, $f10 -/* 05B884 8005AC84 E5880000 */ swc1 $f8, ($t4) -/* 05B888 8005AC88 860E0204 */ lh $t6, 0x204($s0) -/* 05B88C 8005AC8C 00000000 */ nop -/* 05B890 8005AC90 19C00005 */ blez $t6, .L8005ACA8 -/* 05B894 8005AC94 00000000 */ nop -/* 05B898 8005AC98 C5840000 */ lwc1 $f4, ($t4) -/* 05B89C 8005AC9C 00000000 */ nop -/* 05B8A0 8005ACA0 46002187 */ neg.s $f6, $f4 -/* 05B8A4 8005ACA4 E5860000 */ swc1 $f6, ($t4) -.L8005ACA8: -/* 05B8A8 8005ACA8 AC38D538 */ sw $t8, %lo(gCurrentStickY)($at) -/* 05B8AC 8005ACAC 920201FE */ lbu $v0, 0x1fe($s0) -/* 05B8B0 8005ACB0 00000000 */ nop -/* 05B8B4 8005ACB4 24010002 */ li $at, 2 -.L8005ACB8: -/* 05B8B8 8005ACB8 1441002F */ bne $v0, $at, .L8005AD78 -/* 05B8BC 8005ACBC 00000000 */ nop -/* 05B8C0 8005ACC0 920F01FF */ lbu $t7, 0x1ff($s0) -/* 05B8C4 8005ACC4 00000000 */ nop -/* 05B8C8 8005ACC8 000FCE00 */ sll $t9, $t7, 0x18 -/* 05B8CC 8005ACCC 0C01C1F1 */ jal cosine_s -/* 05B8D0 8005ACD0 00192403 */ sra $a0, $t9, 0x10 -/* 05B8D4 8005ACD4 3C013FB0 */ li $at, 0x3FB00000 # 1.375000 -/* 05B8D8 8005ACD8 44817800 */ mtc1 $at, $f15 -/* 05B8DC 8005ACDC 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 05B8E0 8005ACE0 44814000 */ mtc1 $at, $f8 -/* 05B8E4 8005ACE4 C6020084 */ lwc1 $f2, 0x84($s0) -/* 05B8E8 8005ACE8 46080102 */ mul.s $f4, $f0, $f8 -/* 05B8EC 8005ACEC C7B200AC */ lwc1 $f18, 0xac($sp) -/* 05B8F0 8005ACF0 44807000 */ mtc1 $zero, $f14 -/* 05B8F4 8005ACF4 920E01FF */ lbu $t6, 0x1ff($s0) -/* 05B8F8 8005ACF8 46022181 */ sub.s $f6, $f4, $f2 -/* 05B8FC 8005ACFC 000EC600 */ sll $t8, $t6, 0x18 -/* 05B900 8005AD00 46009321 */ cvt.d.s $f12, $f18 -/* 05B904 8005AD04 460034A1 */ cvt.d.s $f18, $f6 -/* 05B908 8005AD08 462E9202 */ mul.d $f8, $f18, $f14 -/* 05B90C 8005AD0C 460012A1 */ cvt.d.s $f10, $f2 -/* 05B910 8005AD10 00182403 */ sra $a0, $t8, 0x10 -/* 05B914 8005AD14 462C4102 */ mul.d $f4, $f8, $f12 -/* 05B918 8005AD18 46245180 */ add.d $f6, $f10, $f4 -/* 05B91C 8005AD1C 462034A0 */ cvt.s.d $f18, $f6 -/* 05B920 8005AD20 E6120084 */ swc1 $f18, 0x84($s0) -/* 05B924 8005AD24 E7AC0044 */ swc1 $f12, 0x44($sp) -/* 05B928 8005AD28 0C01C1FE */ jal sine_s -/* 05B92C 8005AD2C E7AD0040 */ swc1 $f13, 0x40($sp) -/* 05B930 8005AD30 3C013FB0 */ li $at, 0x3FB00000 # 1.375000 -/* 05B934 8005AD34 44817800 */ mtc1 $at, $f15 -/* 05B938 8005AD38 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 05B93C 8005AD3C 44815000 */ mtc1 $at, $f10 -/* 05B940 8005AD40 C6020088 */ lwc1 $f2, 0x88($s0) -/* 05B944 8005AD44 460A0102 */ mul.s $f4, $f0, $f10 -/* 05B948 8005AD48 44807000 */ mtc1 $zero, $f14 -/* 05B94C 8005AD4C C7AD0040 */ lwc1 $f13, 0x40($sp) -/* 05B950 8005AD50 C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 05B954 8005AD54 46022181 */ sub.s $f6, $f4, $f2 -/* 05B958 8005AD58 460034A1 */ cvt.d.s $f18, $f6 -/* 05B95C 8005AD5C 462E9282 */ mul.d $f10, $f18, $f14 -/* 05B960 8005AD60 46001221 */ cvt.d.s $f8, $f2 -/* 05B964 8005AD64 462C5102 */ mul.d $f4, $f10, $f12 -/* 05B968 8005AD68 46244180 */ add.d $f6, $f8, $f4 -/* 05B96C 8005AD6C 462034A0 */ cvt.s.d $f18, $f6 -/* 05B970 8005AD70 10000015 */ b .L8005ADC8 -/* 05B974 8005AD74 E6120088 */ swc1 $f18, 0x88($s0) -.L8005AD78: -/* 05B978 8005AD78 C60A0084 */ lwc1 $f10, 0x84($s0) -/* 05B97C 8005AD7C 3C013FB0 */ li $at, 0x3FB00000 # 1.375000 -/* 05B980 8005AD80 44817800 */ mtc1 $at, $f15 -/* 05B984 8005AD84 44807000 */ mtc1 $zero, $f14 -/* 05B988 8005AD88 46005021 */ cvt.d.s $f0, $f10 -/* 05B98C 8005AD8C 462E0102 */ mul.d $f4, $f0, $f14 -/* 05B990 8005AD90 C7A800AC */ lwc1 $f8, 0xac($sp) -/* 05B994 8005AD94 00000000 */ nop -/* 05B998 8005AD98 46004321 */ cvt.d.s $f12, $f8 -/* 05B99C 8005AD9C C6080088 */ lwc1 $f8, 0x88($s0) -/* 05B9A0 8005ADA0 462C2182 */ mul.d $f6, $f4, $f12 -/* 05B9A4 8005ADA4 460040A1 */ cvt.d.s $f2, $f8 -/* 05B9A8 8005ADA8 462E1102 */ mul.d $f4, $f2, $f14 -/* 05B9AC 8005ADAC 46260481 */ sub.d $f18, $f0, $f6 -/* 05B9B0 8005ADB0 462C2182 */ mul.d $f6, $f4, $f12 -/* 05B9B4 8005ADB4 462092A0 */ cvt.s.d $f10, $f18 -/* 05B9B8 8005ADB8 E60A0084 */ swc1 $f10, 0x84($s0) -/* 05B9BC 8005ADBC 46261481 */ sub.d $f18, $f2, $f6 -/* 05B9C0 8005ADC0 462092A0 */ cvt.s.d $f10, $f18 -/* 05B9C4 8005ADC4 E60A0088 */ swc1 $f10, 0x88($s0) -.L8005ADC8: -/* 05B9C8 8005ADC8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 05B9CC 8005ADCC 44814000 */ mtc1 $at, $f8 -/* 05B9D0 8005ADD0 3C018012 */ lui $at, %hi(gCurrentRacerHandlingStat) # $at, 0x8012 -/* 05B9D4 8005ADD4 24040021 */ li $a0, 33 -/* 05B9D8 8005ADD8 0C0078A7 */ jal get_misc_asset -/* 05B9DC 8005ADDC E428D570 */ swc1 $f8, %lo(gCurrentRacerHandlingStat)($at) -/* 05B9E0 8005ADE0 8FB900A0 */ lw $t9, 0xa0($sp) -/* 05B9E4 8005ADE4 3C018012 */ lui $at, %hi(gCurrentRacerMiscAssetPtr) # $at, 0x8012 -/* 05B9E8 8005ADE8 AC22D564 */ sw $v0, %lo(gCurrentRacerMiscAssetPtr)($at) -/* 05B9EC 8005ADEC 8F2D0040 */ lw $t5, 0x40($t9) -/* 05B9F0 8005ADF0 00000000 */ nop -/* 05B9F4 8005ADF4 91A4005D */ lbu $a0, 0x5d($t5) -/* 05B9F8 8005ADF8 0C0078A7 */ jal get_misc_asset -/* 05B9FC 8005ADFC 00000000 */ nop -/* 05BA00 8005AE00 3C018012 */ lui $at, %hi(D_8011D568) # $at, 0x8012 -/* 05BA04 8005AE04 8FAE00A0 */ lw $t6, 0xa0($sp) -/* 05BA08 8005AE08 AC22D568 */ sw $v0, %lo(D_8011D568)($at) -/* 05BA0C 8005AE0C C5C40020 */ lwc1 $f4, 0x20($t6) -/* 05BA10 8005AE10 3C014010 */ li $at, 0x40100000 # 2.250000 -/* 05BA14 8005AE14 44819800 */ mtc1 $at, $f19 -/* 05BA18 8005AE18 44809000 */ mtc1 $zero, $f18 -/* 05BA1C 8005AE1C 460021A1 */ cvt.d.s $f6, $f4 -/* 05BA20 8005AE20 4632303C */ c.lt.d $f6, $f18 -/* 05BA24 8005AE24 240B0001 */ li $t3, 1 -/* 05BA28 8005AE28 4500000F */ bc1f .L8005AE68 -/* 05BA2C 8005AE2C 00000000 */ nop -/* 05BA30 8005AE30 821801E2 */ lb $t8, 0x1e2($s0) -/* 05BA34 8005AE34 00000000 */ nop -/* 05BA38 8005AE38 2B010003 */ slti $at, $t8, 3 -/* 05BA3C 8005AE3C 10200009 */ beqz $at, .L8005AE64 -/* 05BA40 8005AE40 00000000 */ nop -/* 05BA44 8005AE44 C60800C0 */ lwc1 $f8, 0xc0($s0) -/* 05BA48 8005AE48 44805800 */ mtc1 $zero, $f11 -/* 05BA4C 8005AE4C 44805000 */ mtc1 $zero, $f10 -/* 05BA50 8005AE50 46004121 */ cvt.d.s $f4, $f8 -/* 05BA54 8005AE54 46245032 */ c.eq.d $f10, $f4 -/* 05BA58 8005AE58 00000000 */ nop -/* 05BA5C 8005AE5C 45010002 */ bc1t .L8005AE68 -/* 05BA60 8005AE60 00000000 */ nop -.L8005AE64: -/* 05BA64 8005AE64 A20001F1 */ sb $zero, 0x1f1($s0) -.L8005AE68: -/* 05BA68 8005AE68 820F0175 */ lb $t7, 0x175($s0) -/* 05BA6C 8005AE6C 00000000 */ nop -/* 05BA70 8005AE70 11E00006 */ beqz $t7, .L8005AE8C -/* 05BA74 8005AE74 00000000 */ nop -/* 05BA78 8005AE78 8FA400A0 */ lw $a0, 0xa0($sp) -/* 05BA7C 8005AE7C 8FA600A8 */ lw $a2, 0xa8($sp) -/* 05BA80 8005AE80 0C015B8B */ jal func_80056E2C -/* 05BA84 8005AE84 02002825 */ move $a1, $s0 -/* 05BA88 8005AE88 240B0001 */ li $t3, 1 -.L8005AE8C: -/* 05BA8C 8005AE8C 821901D6 */ lb $t9, 0x1d6($s0) -/* 05BA90 8005AE90 00000000 */ nop -/* 05BA94 8005AE94 11790008 */ beq $t3, $t9, .L8005AEB8 -/* 05BA98 8005AE98 8FAD00A0 */ lw $t5, 0xa0($sp) -/* 05BA9C 8005AE9C 44803000 */ mtc1 $zero, $f6 -/* 05BAA0 8005AEA0 A20001E5 */ sb $zero, 0x1e5($s0) -/* 05BAA4 8005AEA4 3C018012 */ lui $at, %hi(D_8011D5AE) # $at, 0x8012 -/* 05BAA8 8005AEA8 E60600C0 */ swc1 $f6, 0xc0($s0) -/* 05BAAC 8005AEAC 1000000A */ b .L8005AED8 -/* 05BAB0 8005AEB0 A020D5AE */ sb $zero, %lo(D_8011D5AE)($at) -/* 05BAB4 8005AEB4 8FAD00A0 */ lw $t5, 0xa0($sp) -.L8005AEB8: -/* 05BAB8 8005AEB8 3C078012 */ lui $a3, %hi(D_8011D5B0) # $a3, 0x8012 -/* 05BABC 8005AEBC 85A4002E */ lh $a0, 0x2e($t5) -/* 05BAC0 8005AEC0 8DA5000C */ lw $a1, 0xc($t5) -/* 05BAC4 8005AEC4 8DA60014 */ lw $a2, 0x14($t5) -/* 05BAC8 8005AEC8 0C00AC3D */ jal func_8002B0F4 -/* 05BACC 8005AECC 24E7D5B0 */ addiu $a3, %lo(D_8011D5B0) # addiu $a3, $a3, -0x2a50 -/* 05BAD0 8005AED0 3C018012 */ lui $at, %hi(D_8011D5AE) # $at, 0x8012 -/* 05BAD4 8005AED4 A022D5AE */ sb $v0, %lo(D_8011D5AE)($at) -.L8005AED8: -/* 05BAD8 8005AED8 0C00AB32 */ jal func_8002ACC8 -/* 05BADC 8005AEDC 00002025 */ move $a0, $zero -/* 05BAE0 8005AEE0 8E0E0148 */ lw $t6, 0x148($s0) -/* 05BAE4 8005AEE4 240B0001 */ li $t3, 1 -/* 05BAE8 8005AEE8 15C00009 */ bnez $t6, .L8005AF10 -/* 05BAEC 8005AEEC 3C088012 */ lui $t0, %hi(gRaceStartTimer) # $t0, 0x8012 -/* 05BAF0 8005AEF0 2508D540 */ addiu $t0, %lo(gRaceStartTimer) # addiu $t0, $t0, -0x2ac0 -/* 05BAF4 8005AEF4 8D180000 */ lw $t8, ($t0) -/* 05BAF8 8005AEF8 00000000 */ nop -/* 05BAFC 8005AEFC 17000004 */ bnez $t8, .L8005AF10 -/* 05BB00 8005AF00 00000000 */ nop -/* 05BB04 8005AF04 860F0204 */ lh $t7, 0x204($s0) -/* 05BB08 8005AF08 00000000 */ nop -/* 05BB0C 8005AF0C 19E0000E */ blez $t7, .L8005AF48 -.L8005AF10: -/* 05BB10 8005AF10 3C018012 */ lui $at, %hi(gCurrentStickX) # $at, 0x8012 -/* 05BB14 8005AF14 AC20D534 */ sw $zero, %lo(gCurrentStickX)($at) -/* 05BB18 8005AF18 3C018012 */ lui $at, %hi(gCurrentStickY) # $at, 0x8012 -/* 05BB1C 8005AF1C 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BB20 8005AF20 AC20D538 */ sw $zero, %lo(gCurrentStickY)($at) -/* 05BB24 8005AF24 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BB28 8005AF28 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BB2C 8005AF2C AC600000 */ sw $zero, ($v1) -/* 05BB30 8005AF30 3C018012 */ lui $at, %hi(gCurrentButtonsReleased) # $at, 0x8012 -/* 05BB34 8005AF34 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BB38 8005AF38 3C088012 */ lui $t0, %hi(gRaceStartTimer) # $t0, 0x8012 -/* 05BB3C 8005AF3C AC20D530 */ sw $zero, %lo(gCurrentButtonsReleased)($at) -/* 05BB40 8005AF40 2508D540 */ addiu $t0, %lo(gRaceStartTimer) # addiu $t0, $t0, -0x2ac0 -/* 05BB44 8005AF44 AC400000 */ sw $zero, ($v0) -.L8005AF48: -/* 05BB48 8005AF48 921901D6 */ lbu $t9, 0x1d6($s0) -/* 05BB4C 8005AF4C 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BB50 8005AF50 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BB54 8005AF54 2F21000E */ sltiu $at, $t9, 0xe -/* 05BB58 8005AF58 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BB5C 8005AF5C 10200094 */ beqz $at, .L8005B1B0 -/* 05BB60 8005AF60 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BB64 8005AF64 0019C880 */ sll $t9, $t9, 2 -/* 05BB68 8005AF68 3C01800E */ lui $at, %hi(jpt_800E6968) # $at, 0x800e -/* 05BB6C 8005AF6C 00390821 */ addu $at, $at, $t9 -/* 05BB70 8005AF70 8C396968 */ lw $t9, %lo(jpt_800E6968)($at) -/* 05BB74 8005AF74 00000000 */ nop -/* 05BB78 8005AF78 03200008 */ jr $t9 -/* 05BB7C 8005AF7C 00000000 */ nop -glabel L8005AF80 -/* 05BB80 8005AF80 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BB84 8005AF84 8FA500AC */ lw $a1, 0xac($sp) -/* 05BB88 8005AF88 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BB8C 8005AF8C 0C013DFD */ jal func_8004F7F4 -/* 05BB90 8005AF90 02003825 */ move $a3, $s0 -/* 05BB94 8005AF94 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BB98 8005AF98 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BB9C 8005AF9C 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BBA0 8005AFA0 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BBA4 8005AFA4 10000082 */ b .L8005B1B0 -/* 05BBA8 8005AFA8 240B0001 */ li $t3, 1 -glabel L8005AFAC -/* 05BBAC 8005AFAC 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BBB0 8005AFB0 8FA500AC */ lw $a1, 0xac($sp) -/* 05BBB4 8005AFB4 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BBB8 8005AFB8 0C013308 */ jal func_8004CC20 -/* 05BBBC 8005AFBC 02003825 */ move $a3, $s0 -/* 05BBC0 8005AFC0 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BBC4 8005AFC4 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BBC8 8005AFC8 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BBCC 8005AFCC 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BBD0 8005AFD0 10000077 */ b .L8005B1B0 -/* 05BBD4 8005AFD4 240B0001 */ li $t3, 1 -glabel L8005AFD8 -/* 05BBD8 8005AFD8 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BBDC 8005AFDC 8FA500AC */ lw $a1, 0xac($sp) -/* 05BBE0 8005AFE0 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BBE4 8005AFE4 0C011949 */ jal func_80046524 -/* 05BBE8 8005AFE8 02003825 */ move $a3, $s0 -/* 05BBEC 8005AFEC 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BBF0 8005AFF0 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BBF4 8005AFF4 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BBF8 8005AFF8 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BBFC 8005AFFC 1000006C */ b .L8005B1B0 -/* 05BC00 8005B000 240B0001 */ li $t3, 1 -glabel L8005B004 -/* 05BC04 8005B004 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BC08 8005B008 8FA500AC */ lw $a1, 0xac($sp) -/* 05BC0C 8005B00C 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BC10 8005B010 0C0125E5 */ jal func_80049794 -/* 05BC14 8005B014 02003825 */ move $a3, $s0 -/* 05BC18 8005B018 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BC1C 8005B01C 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BC20 8005B020 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BC24 8005B024 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BC28 8005B028 10000061 */ b .L8005B1B0 -/* 05BC2C 8005B02C 240B0001 */ li $t3, 1 -glabel L8005B030 -/* 05BC30 8005B030 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BC34 8005B034 8FA500AC */ lw $a1, 0xac($sp) -/* 05BC38 8005B038 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BC3C 8005B03C 0C013657 */ jal func_8004D95C -/* 05BC40 8005B040 02003825 */ move $a3, $s0 -/* 05BC44 8005B044 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BC48 8005B048 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BC4C 8005B04C 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BC50 8005B050 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BC54 8005B054 10000056 */ b .L8005B1B0 -/* 05BC58 8005B058 240B0001 */ li $t3, 1 -glabel L8005B05C -/* 05BC5C 8005B05C 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BC60 8005B060 8FA500AC */ lw $a1, 0xac($sp) -/* 05BC64 8005B064 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BC68 8005B068 02003825 */ move $a3, $s0 -/* 05BC6C 8005B06C AFA30010 */ sw $v1, 0x10($sp) -/* 05BC70 8005B070 AFA20014 */ sw $v0, 0x14($sp) -/* 05BC74 8005B074 0C0170D9 */ jal func_8005C364 -/* 05BC78 8005B078 AFA80018 */ sw $t0, 0x18($sp) -/* 05BC7C 8005B07C 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BC80 8005B080 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BC84 8005B084 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BC88 8005B088 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BC8C 8005B08C 10000048 */ b .L8005B1B0 -/* 05BC90 8005B090 240B0001 */ li $t3, 1 -glabel L8005B094 -/* 05BC94 8005B094 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BC98 8005B098 8FA500AC */ lw $a1, 0xac($sp) -/* 05BC9C 8005B09C 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BCA0 8005B0A0 02003825 */ move $a3, $s0 -/* 05BCA4 8005B0A4 AFA30010 */ sw $v1, 0x10($sp) -/* 05BCA8 8005B0A8 AFA20014 */ sw $v0, 0x14($sp) -/* 05BCAC 8005B0AC 0C017434 */ jal func_8005D0D0 -/* 05BCB0 8005B0B0 AFA80018 */ sw $t0, 0x18($sp) -/* 05BCB4 8005B0B4 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BCB8 8005B0B8 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BCBC 8005B0BC 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BCC0 8005B0C0 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BCC4 8005B0C4 1000003A */ b .L8005B1B0 -/* 05BCC8 8005B0C8 240B0001 */ li $t3, 1 -glabel L8005B0CC -/* 05BCCC 8005B0CC 3C0D8012 */ lui $t5, %hi(gCurrentStickX) # $t5, 0x8012 -/* 05BCD0 8005B0D0 25ADD534 */ addiu $t5, %lo(gCurrentStickX) # addiu $t5, $t5, -0x2acc -/* 05BCD4 8005B0D4 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BCD8 8005B0D8 8FA500AC */ lw $a1, 0xac($sp) -/* 05BCDC 8005B0DC 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BCE0 8005B0E0 AFAD0014 */ sw $t5, 0x14($sp) -/* 05BCE4 8005B0E4 02003825 */ move $a3, $s0 -/* 05BCE8 8005B0E8 AFA30010 */ sw $v1, 0x10($sp) -/* 05BCEC 8005B0EC 0C017608 */ jal func_8005D820 -/* 05BCF0 8005B0F0 AFA80018 */ sw $t0, 0x18($sp) -/* 05BCF4 8005B0F4 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BCF8 8005B0F8 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BCFC 8005B0FC 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BD00 8005B100 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BD04 8005B104 1000002A */ b .L8005B1B0 -/* 05BD08 8005B108 240B0001 */ li $t3, 1 -glabel L8005B10C -/* 05BD0C 8005B10C 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BD10 8005B110 8FA500AC */ lw $a1, 0xac($sp) -/* 05BD14 8005B114 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BD18 8005B118 02003825 */ move $a3, $s0 -/* 05BD1C 8005B11C AFA30010 */ sw $v1, 0x10($sp) -/* 05BD20 8005B120 AFA20014 */ sw $v0, 0x14($sp) -/* 05BD24 8005B124 0C017930 */ jal func_8005E4C0 -/* 05BD28 8005B128 AFA80018 */ sw $t0, 0x18($sp) -/* 05BD2C 8005B12C 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BD30 8005B130 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BD34 8005B134 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BD38 8005B138 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BD3C 8005B13C 1000001C */ b .L8005B1B0 -/* 05BD40 8005B140 240B0001 */ li $t3, 1 -glabel L8005B144 -/* 05BD44 8005B144 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BD48 8005B148 8FA500AC */ lw $a1, 0xac($sp) -/* 05BD4C 8005B14C 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BD50 8005B150 02003825 */ move $a3, $s0 -/* 05BD54 8005B154 AFA30010 */ sw $v1, 0x10($sp) -/* 05BD58 8005B158 AFA20014 */ sw $v0, 0x14($sp) -/* 05BD5C 8005B15C 0C017AA4 */ jal func_8005EA90 -/* 05BD60 8005B160 AFA80018 */ sw $t0, 0x18($sp) -/* 05BD64 8005B164 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BD68 8005B168 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BD6C 8005B16C 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BD70 8005B170 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BD74 8005B174 1000000E */ b .L8005B1B0 -/* 05BD78 8005B178 240B0001 */ li $t3, 1 -glabel L8005B17C -/* 05BD7C 8005B17C 8FA400A8 */ lw $a0, 0xa8($sp) -/* 05BD80 8005B180 8FA500AC */ lw $a1, 0xac($sp) -/* 05BD84 8005B184 8FA600A0 */ lw $a2, 0xa0($sp) -/* 05BD88 8005B188 02003825 */ move $a3, $s0 -/* 05BD8C 8005B18C AFA30010 */ sw $v1, 0x10($sp) -/* 05BD90 8005B190 AFA20014 */ sw $v0, 0x14($sp) -/* 05BD94 8005B194 0C017CC4 */ jal func_8005F310 -/* 05BD98 8005B198 AFA80018 */ sw $t0, 0x18($sp) -/* 05BD9C 8005B19C 3C038012 */ lui $v1, %hi(gCurrentRacerInput) # $v1, 0x8012 -/* 05BDA0 8005B1A0 3C028012 */ lui $v0, %hi(gCurrentButtonsPressed) # $v0, 0x8012 -/* 05BDA4 8005B1A4 2442D52C */ addiu $v0, %lo(gCurrentButtonsPressed) # addiu $v0, $v0, -0x2ad4 -/* 05BDA8 8005B1A8 2463D528 */ addiu $v1, %lo(gCurrentRacerInput) # addiu $v1, $v1, -0x2ad8 -/* 05BDAC 8005B1AC 240B0001 */ li $t3, 1 -.L8005B1B0: -glabel L8005B1B0 -/* 05BDB0 8005B1B0 8FAE0094 */ lw $t6, 0x94($sp) -/* 05BDB4 8005B1B4 8FA400A0 */ lw $a0, 0xa0($sp) -/* 05BDB8 8005B1B8 11CB0006 */ beq $t6, $t3, .L8005B1D4 -/* 05BDBC 8005B1BC 00000000 */ nop -/* 05BDC0 8005B1C0 8C450000 */ lw $a1, ($v0) -/* 05BDC4 8005B1C4 8C660000 */ lw $a2, ($v1) -/* 05BDC8 8005B1C8 8FA700A8 */ lw $a3, 0xa8($sp) -/* 05BDCC 8005B1CC 0C001434 */ jal func_800050D0 -/* 05BDD0 8005B1D0 00000000 */ nop -.L8005B1D4: -/* 05BDD4 8005B1D4 C61200A8 */ lwc1 $f18, 0xa8($s0) -/* 05BDD8 8005B1D8 C7A80084 */ lwc1 $f8, 0x84($sp) -/* 05BDDC 8005B1DC E7B20080 */ swc1 $f18, 0x80($sp) -/* 05BDE0 8005B1E0 82180192 */ lb $t8, 0x192($s0) -/* 05BDE4 8005B1E4 8FA500A0 */ lw $a1, 0xa0($sp) -/* 05BDE8 8005B1E8 AFB80090 */ sw $t8, 0x90($sp) -/* 05BDEC 8005B1EC 82040192 */ lb $a0, 0x192($s0) -/* 05BDF0 8005B1F0 8FA6008C */ lw $a2, 0x8c($sp) -/* 05BDF4 8005B1F4 8FA70088 */ lw $a3, 0x88($sp) -/* 05BDF8 8005B1F8 260F00A8 */ addiu $t7, $s0, 0xa8 -/* 05BDFC 8005B1FC 261901C8 */ addiu $t9, $s0, 0x1c8 -/* 05BE00 8005B200 AFB90018 */ sw $t9, 0x18($sp) -/* 05BE04 8005B204 AFAF0014 */ sw $t7, 0x14($sp) -/* 05BE08 8005B208 0C006179 */ jal func_800185E4 -/* 05BE0C 8005B20C E7A80010 */ swc1 $f8, 0x10($sp) -/* 05BE10 8005B210 2401FF9C */ li $at, -100 -/* 05BE14 8005B214 14410006 */ bne $v0, $at, .L8005B230 -/* 05BE18 8005B218 00405025 */ move $t2, $v0 -/* 05BE1C 8005B21C 02002025 */ move $a0, $s0 -/* 05BE20 8005B220 0C01709C */ jal func_8005C270 -/* 05BE24 8005B224 AFA2009C */ sw $v0, 0x9c($sp) -/* 05BE28 8005B228 8FAA009C */ lw $t2, 0x9c($sp) -/* 05BE2C 8005B22C 00000000 */ nop -.L8005B230: -/* 05BE30 8005B230 82040192 */ lb $a0, 0x192($s0) -/* 05BE34 8005B234 920501C8 */ lbu $a1, 0x1c8($s0) -/* 05BE38 8005B238 0C006E87 */ jal func_8001BA1C -/* 05BE3C 8005B23C AFAA009C */ sw $t2, 0x9c($sp) -/* 05BE40 8005B240 820D01CA */ lb $t5, 0x1ca($s0) -/* 05BE44 8005B244 8FAA009C */ lw $t2, 0x9c($sp) -/* 05BE48 8005B248 004D7021 */ addu $t6, $v0, $t5 -/* 05BE4C 8005B24C 81D80036 */ lb $t8, 0x36($t6) -/* 05BE50 8005B250 24010005 */ li $at, 5 -/* 05BE54 8005B254 17010007 */ bne $t8, $at, .L8005B274 -/* 05BE58 8005B258 00000000 */ nop -/* 05BE5C 8005B25C 821901E5 */ lb $t9, 0x1e5($s0) -/* 05BE60 8005B260 240F001E */ li $t7, 30 -/* 05BE64 8005B264 13200003 */ beqz $t9, .L8005B274 -/* 05BE68 8005B268 A20F0201 */ sb $t7, 0x201($s0) -/* 05BE6C 8005B26C 240D0001 */ li $t5, 1 -/* 05BE70 8005B270 A20D01C8 */ sb $t5, 0x1c8($s0) -.L8005B274: -/* 05BE74 8005B274 820E01CA */ lb $t6, 0x1ca($s0) -/* 05BE78 8005B278 24010006 */ li $at, 6 -/* 05BE7C 8005B27C 004EC021 */ addu $t8, $v0, $t6 -/* 05BE80 8005B280 83030036 */ lb $v1, 0x36($t8) -/* 05BE84 8005B284 8FAF0070 */ lw $t7, 0x70($sp) -/* 05BE88 8005B288 14610009 */ bne $v1, $at, .L8005B2B0 -/* 05BE8C 8005B28C 24010004 */ li $at, 4 -/* 05BE90 8005B290 81F9004B */ lb $t9, 0x4b($t7) -/* 05BE94 8005B294 820E01CA */ lb $t6, 0x1ca($s0) -/* 05BE98 8005B298 272D0001 */ addiu $t5, $t9, 1 -/* 05BE9C 8005B29C A20D0193 */ sb $t5, 0x193($s0) -/* 05BEA0 8005B2A0 004EC021 */ addu $t8, $v0, $t6 -/* 05BEA4 8005B2A4 83030036 */ lb $v1, 0x36($t8) -/* 05BEA8 8005B2A8 00000000 */ nop -/* 05BEAC 8005B2AC 24010004 */ li $at, 4 -.L8005B2B0: -/* 05BEB0 8005B2B0 14610010 */ bne $v1, $at, .L8005B2F4 -/* 05BEB4 8005B2B4 00000000 */ nop -/* 05BEB8 8005B2B8 C60A002C */ lwc1 $f10, 0x2c($s0) -/* 05BEBC 8005B2BC 3C01C010 */ li $at, 0xC0100000 # -2.250000 -/* 05BEC0 8005B2C0 44812800 */ mtc1 $at, $f5 -/* 05BEC4 8005B2C4 44802000 */ mtc1 $zero, $f4 -/* 05BEC8 8005B2C8 46005021 */ cvt.d.s $f0, $f10 -/* 05BECC 8005B2CC 4624003C */ c.lt.d $f0, $f4 -/* 05BED0 8005B2D0 3C01800E */ lui $at, %hi(D_800E69A0 + 4) # $at, 0x800e -/* 05BED4 8005B2D4 45000007 */ bc1f .L8005B2F4 -/* 05BED8 8005B2D8 00000000 */ nop -/* 05BEDC 8005B2DC C42769A0 */ lwc1 $f7, %lo(D_800E69A0)($at) -/* 05BEE0 8005B2E0 C42669A4 */ lwc1 $f6, %lo(D_800E69A0 + 4)($at) -/* 05BEE4 8005B2E4 00000000 */ nop -/* 05BEE8 8005B2E8 46260482 */ mul.d $f18, $f0, $f6 -/* 05BEEC 8005B2EC 46209220 */ cvt.s.d $f8, $f18 -/* 05BEF0 8005B2F0 E608002C */ swc1 $f8, 0x2c($s0) -.L8005B2F4: -/* 05BEF4 8005B2F4 1540002C */ bnez $t2, .L8005B3A8 -/* 05BEF8 8005B2F8 00000000 */ nop -/* 05BEFC 8005B2FC 820F01CA */ lb $t7, 0x1ca($s0) -/* 05BF00 8005B300 24010002 */ li $at, 2 -/* 05BF04 8005B304 004FC821 */ addu $t9, $v0, $t7 -/* 05BF08 8005B308 832D0036 */ lb $t5, 0x36($t9) -/* 05BF0C 8005B30C 240E0001 */ li $t6, 1 -/* 05BF10 8005B310 15A10002 */ bne $t5, $at, .L8005B31C -/* 05BF14 8005B314 00000000 */ nop -/* 05BF18 8005B318 A20E01C8 */ sb $t6, 0x1c8($s0) -.L8005B31C: -/* 05BF1C 8005B31C 0C006E99 */ jal func_8001BA64 -/* 05BF20 8005B320 00000000 */ nop -/* 05BF24 8005B324 82180192 */ lb $t8, 0x192($s0) -/* 05BF28 8005B328 00000000 */ nop -/* 05BF2C 8005B32C 270F0001 */ addiu $t7, $t8, 1 -/* 05BF30 8005B330 A20F0192 */ sb $t7, 0x192($s0) -/* 05BF34 8005B334 82190192 */ lb $t9, 0x192($s0) -/* 05BF38 8005B338 00000000 */ nop -/* 05BF3C 8005B33C 0322082A */ slt $at, $t9, $v0 -/* 05BF40 8005B340 1420000C */ bnez $at, .L8005B374 -/* 05BF44 8005B344 8FB80070 */ lw $t8, 0x70($sp) -/* 05BF48 8005B348 860D0190 */ lh $t5, 0x190($s0) -/* 05BF4C 8005B34C A2000192 */ sb $zero, 0x192($s0) -/* 05BF50 8005B350 19A00008 */ blez $t5, .L8005B374 -/* 05BF54 8005B354 8FB80070 */ lw $t8, 0x70($sp) -/* 05BF58 8005B358 82030193 */ lb $v1, 0x193($s0) -/* 05BF5C 8005B35C 00000000 */ nop -/* 05BF60 8005B360 28610078 */ slti $at, $v1, 0x78 -/* 05BF64 8005B364 10200002 */ beqz $at, .L8005B370 -/* 05BF68 8005B368 246E0001 */ addiu $t6, $v1, 1 -/* 05BF6C 8005B36C A20E0193 */ sb $t6, 0x193($s0) -.L8005B370: -/* 05BF70 8005B370 8FB80070 */ lw $t8, 0x70($sp) -.L8005B374: -/* 05BF74 8005B374 86030190 */ lh $v1, 0x190($s0) -/* 05BF78 8005B378 830F004B */ lb $t7, 0x4b($t8) -/* 05BF7C 8005B37C 24182710 */ li $t8, 10000 -/* 05BF80 8005B380 25F90003 */ addiu $t9, $t7, 3 -/* 05BF84 8005B384 03220019 */ multu $t9, $v0 -/* 05BF88 8005B388 246E0001 */ addiu $t6, $v1, 1 -/* 05BF8C 8005B38C 00006812 */ mflo $t5 -/* 05BF90 8005B390 006D082A */ slt $at, $v1, $t5 -/* 05BF94 8005B394 10200002 */ beqz $at, .L8005B3A0 -/* 05BF98 8005B398 00000000 */ nop -/* 05BF9C 8005B39C A60E0190 */ sh $t6, 0x190($s0) -.L8005B3A0: -/* 05BFA0 8005B3A0 1000000E */ b .L8005B3DC -/* 05BFA4 8005B3A4 A61801A8 */ sh $t8, 0x1a8($s0) -.L8005B3A8: -/* 05BFA8 8005B3A8 860F0000 */ lh $t7, ($s0) -/* 05BFAC 8005B3AC 2401FFFF */ li $at, -1 -/* 05BFB0 8005B3B0 15E10009 */ bne $t7, $at, .L8005B3D8 -/* 05BFB4 8005B3B4 00000000 */ nop -/* 05BFB8 8005B3B8 C7A00080 */ lwc1 $f0, 0x80($sp) -/* 05BFBC 8005B3BC C60A00A8 */ lwc1 $f10, 0xa8($s0) -/* 05BFC0 8005B3C0 00000000 */ nop -/* 05BFC4 8005B3C4 460A003C */ c.lt.s $f0, $f10 -/* 05BFC8 8005B3C8 00000000 */ nop -/* 05BFCC 8005B3CC 45000002 */ bc1f .L8005B3D8 -/* 05BFD0 8005B3D0 00000000 */ nop -/* 05BFD4 8005B3D4 E60000A8 */ swc1 $f0, 0xa8($s0) -.L8005B3D8: -/* 05BFD8 8005B3D8 A60A01A8 */ sh $t2, 0x1a8($s0) -.L8005B3DC: -/* 05BFDC 8005B3DC 8FB900A0 */ lw $t9, 0xa0($sp) -/* 05BFE0 8005B3E0 00000000 */ nop -/* 05BFE4 8005B3E4 C724000C */ lwc1 $f4, 0xc($t9) -/* 05BFE8 8005B3E8 00000000 */ nop -/* 05BFEC 8005B3EC E6040068 */ swc1 $f4, 0x68($s0) -/* 05BFF0 8005B3F0 8FAD00A0 */ lw $t5, 0xa0($sp) -/* 05BFF4 8005B3F4 00000000 */ nop -/* 05BFF8 8005B3F8 C5A60010 */ lwc1 $f6, 0x10($t5) -/* 05BFFC 8005B3FC 00000000 */ nop -/* 05C000 8005B400 E606006C */ swc1 $f6, 0x6c($s0) -/* 05C004 8005B404 8FAE00A0 */ lw $t6, 0xa0($sp) -/* 05C008 8005B408 00000000 */ nop -/* 05C00C 8005B40C C5D20014 */ lwc1 $f18, 0x14($t6) -/* 05C010 8005B410 1000000F */ b .L8005B450 -/* 05C014 8005B414 E6120070 */ swc1 $f18, 0x70($s0) -/* 05C018 8005B418 8FA700AC */ lw $a3, 0xac($sp) -.L8005B41C: -/* 05C01C 8005B41C 0C016E06 */ jal func_8005B818 -/* 05C020 8005B420 02002825 */ move $a1, $s0 -/* 05C024 8005B424 8FB80094 */ lw $t8, 0x94($sp) -/* 05C028 8005B428 240B0001 */ li $t3, 1 -/* 05C02C 8005B42C 130B0008 */ beq $t8, $t3, .L8005B450 -/* 05C030 8005B430 3C058012 */ lui $a1, %hi(gCurrentButtonsPressed) # $a1, 0x8012 -/* 05C034 8005B434 3C068012 */ lui $a2, %hi(gCurrentRacerInput) # $a2, 0x8012 -/* 05C038 8005B438 8CC6D528 */ lw $a2, %lo(gCurrentRacerInput)($a2) -/* 05C03C 8005B43C 8FA400A0 */ lw $a0, 0xa0($sp) -/* 05C040 8005B440 8CA5D52C */ lw $a1, %lo(gCurrentButtonsPressed)($a1) -/* 05C044 8005B444 8FA700A8 */ lw $a3, 0xa8($sp) -/* 05C048 8005B448 0C001434 */ jal func_800050D0 -/* 05C04C 8005B44C 00000000 */ nop -.L8005B450: -/* 05C050 8005B450 C7A800AC */ lwc1 $f8, 0xac($sp) -/* 05C054 8005B454 820F0175 */ lb $t7, 0x175($s0) -/* 05C058 8005B458 46004321 */ cvt.d.s $f12, $f8 -/* 05C05C 8005B45C 15E0000C */ bnez $t7, .L8005B490 -/* 05C060 8005B460 8FB900A8 */ lw $t9, 0xa8($sp) -/* 05C064 8005B464 8E040178 */ lw $a0, 0x178($s0) -/* 05C068 8005B468 00000000 */ nop -/* 05C06C 8005B46C 10800008 */ beqz $a0, .L8005B490 -/* 05C070 8005B470 8FB900A8 */ lw $t9, 0xa8($sp) -/* 05C074 8005B474 E7AD0040 */ swc1 $f13, 0x40($sp) -/* 05C078 8005B478 0C001223 */ jal func_8000488C -/* 05C07C 8005B47C E7AC0044 */ swc1 $f12, 0x44($sp) -/* 05C080 8005B480 C7AD0040 */ lwc1 $f13, 0x40($sp) -/* 05C084 8005B484 C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 05C088 8005B488 AE000178 */ sw $zero, 0x178($s0) -/* 05C08C 8005B48C 8FB900A8 */ lw $t9, 0xa8($sp) -.L8005B490: -/* 05C090 8005B490 8FA400A0 */ lw $a0, 0xa0($sp) -/* 05C094 8005B494 8FA5008C */ lw $a1, 0x8c($sp) -/* 05C098 8005B498 8FA60088 */ lw $a2, 0x88($sp) -/* 05C09C 8005B49C 8FA70084 */ lw $a3, 0x84($sp) -/* 05C0A0 8005B4A0 E7AD0040 */ swc1 $f13, 0x40($sp) -/* 05C0A4 8005B4A4 E7AC0044 */ swc1 $f12, 0x44($sp) -/* 05C0A8 8005B4A8 0C006338 */ jal func_80018CE0 -/* 05C0AC 8005B4AC AFB90010 */ sw $t9, 0x10($sp) -/* 05C0B0 8005B4B0 82060188 */ lb $a2, 0x188($s0) -/* 05C0B4 8005B4B4 C7AD0040 */ lwc1 $f13, 0x40($sp) -/* 05C0B8 8005B4B8 C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 05C0BC 8005B4BC 18C00009 */ blez $a2, .L8005B4E4 -/* 05C0C0 8005B4C0 00000000 */ nop -/* 05C0C4 8005B4C4 8FA400A0 */ lw $a0, 0xa0($sp) -/* 05C0C8 8005B4C8 02002825 */ move $a1, $s0 -/* 05C0CC 8005B4CC E7AD0040 */ swc1 $f13, 0x40($sp) -/* 05C0D0 8005B4D0 0C015DB8 */ jal func_800576E0 -/* 05C0D4 8005B4D4 E7AC0044 */ swc1 $f12, 0x44($sp) -/* 05C0D8 8005B4D8 C7AD0040 */ lwc1 $f13, 0x40($sp) -/* 05C0DC 8005B4DC C7AC0044 */ lwc1 $f12, 0x44($sp) -/* 05C0E0 8005B4E0 00000000 */ nop -.L8005B4E4: -/* 05C0E4 8005B4E4 8E0D0148 */ lw $t5, 0x148($s0) -/* 05C0E8 8005B4E8 44803000 */ mtc1 $zero, $f6 -/* 05C0EC 8005B4EC 11A00005 */ beqz $t5, .L8005B504 -/* 05C0F0 8005B4F0 3C02800E */ lui $v0, %hi(D_800DCB54) # $v0, 0x800e -/* 05C0F4 8005B4F4 44808000 */ mtc1 $zero, $f16 -/* 05C0F8 8005B4F8 AE000148 */ sw $zero, 0x148($s0) -/* 05C0FC 8005B4FC E610002C */ swc1 $f16, 0x2c($s0) -/* 05C100 8005B500 E6100030 */ swc1 $f16, 0x30($s0) -.L8005B504: -/* 05C104 8005B504 C60E0090 */ lwc1 $f14, 0x90($s0) -/* 05C108 8005B508 C600008C */ lwc1 $f0, 0x8c($s0) -/* 05C10C 8005B50C 44808000 */ mtc1 $zero, $f16 -/* 05C110 8005B510 460E003E */ c.le.s $f0, $f14 -/* 05C114 8005B514 3C01800E */ lui $at, %hi(D_800E69AC) # $at, 0x800e -/* 05C118 8005B518 45000005 */ bc1f .L8005B530 -/* 05C11C 8005B51C 46007281 */ sub.s $f10, $f14, $f0 -/* 05C120 8005B520 3C01800E */ lui $at, %hi(D_800E69A8) # $at, 0x800e -/* 05C124 8005B524 C42269A8 */ lwc1 $f2, %lo(D_800E69A8)($at) -/* 05C128 8005B528 10000004 */ b .L8005B53C -/* 05C12C 8005B52C 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 -.L8005B530: -/* 05C130 8005B530 C42269AC */ lwc1 $f2, %lo(D_800E69AC)($at) -/* 05C134 8005B534 00000000 */ nop -/* 05C138 8005B538 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 -.L8005B53C: -/* 05C13C 8005B53C 44813800 */ mtc1 $at, $f7 -/* 05C140 8005B540 46005121 */ cvt.d.s $f4, $f10 -/* 05C144 8005B544 46262482 */ mul.d $f18, $f4, $f6 -/* 05C148 8005B548 46001221 */ cvt.d.s $f8, $f2 -/* 05C14C 8005B54C 460001A1 */ cvt.d.s $f6, $f0 -/* 05C150 8005B550 4610103C */ c.lt.s $f2, $f16 -/* 05C154 8005B554 46289280 */ add.d $f10, $f18, $f8 -/* 05C158 8005B558 462C5102 */ mul.d $f4, $f10, $f12 -/* 05C15C 8005B55C 46243480 */ add.d $f18, $f6, $f4 -/* 05C160 8005B560 46209220 */ cvt.s.d $f8, $f18 -/* 05C164 8005B564 45000007 */ bc1f .L8005B584 -/* 05C168 8005B568 E608008C */ swc1 $f8, 0x8c($s0) -/* 05C16C 8005B56C C60A008C */ lwc1 $f10, 0x8c($s0) -/* 05C170 8005B570 00000000 */ nop -/* 05C174 8005B574 460E503E */ c.le.s $f10, $f14 -/* 05C178 8005B578 00000000 */ nop -/* 05C17C 8005B57C 4501000B */ bc1t .L8005B5AC -/* 05C180 8005B580 3C013F80 */ lui $at, 0x3f80 -.L8005B584: -/* 05C184 8005B584 4602803C */ c.lt.s $f16, $f2 -/* 05C188 8005B588 00000000 */ nop -/* 05C18C 8005B58C 4500000A */ bc1f .L8005B5B8 -/* 05C190 8005B590 00000000 */ nop -/* 05C194 8005B594 C606008C */ lwc1 $f6, 0x8c($s0) -/* 05C198 8005B598 00000000 */ nop -/* 05C19C 8005B59C 4606703E */ c.le.s $f14, $f6 -/* 05C1A0 8005B5A0 00000000 */ nop -/* 05C1A4 8005B5A4 45000004 */ bc1f .L8005B5B8 -/* 05C1A8 8005B5A8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.L8005B5AC: -/* 05C1AC 8005B5AC 44812000 */ mtc1 $at, $f4 -/* 05C1B0 8005B5B0 E60E008C */ swc1 $f14, 0x8c($s0) -/* 05C1B4 8005B5B4 E6040090 */ swc1 $f4, 0x90($s0) -.L8005B5B8: -/* 05C1B8 8005B5B8 8603016A */ lh $v1, 0x16a($s0) -/* 05C1BC 8005B5BC 860E016C */ lh $t6, 0x16c($s0) -/* 05C1C0 8005B5C0 8FAF00A8 */ lw $t7, 0xa8($sp) -/* 05C1C4 8005B5C4 01C3C023 */ subu $t8, $t6, $v1 -/* 05C1C8 8005B5C8 030F0019 */ multu $t8, $t7 -/* 05C1CC 8005B5CC 00005012 */ mflo $t2 -/* 05C1D0 8005B5D0 000AC8C3 */ sra $t9, $t2, 3 -/* 05C1D4 8005B5D4 2B210801 */ slti $at, $t9, 0x801 -/* 05C1D8 8005B5D8 14200002 */ bnez $at, .L8005B5E4 -/* 05C1DC 8005B5DC 03205025 */ move $t2, $t9 -/* 05C1E0 8005B5E0 240A0800 */ li $t2, 2048 -.L8005B5E4: -/* 05C1E4 8005B5E4 2941F800 */ slti $at, $t2, -0x800 -/* 05C1E8 8005B5E8 10200002 */ beqz $at, .L8005B5F4 -/* 05C1EC 8005B5EC 00000000 */ nop -/* 05C1F0 8005B5F0 240AF800 */ li $t2, -2048 -.L8005B5F4: -/* 05C1F4 8005B5F4 8442CB54 */ lh $v0, %lo(D_800DCB54)($v0) -/* 05C1F8 8005B5F8 006A7021 */ addu $t6, $v1, $t2 -/* 05C1FC 8005B5FC 10400003 */ beqz $v0, .L8005B60C -/* 05C200 8005B600 00626821 */ addu $t5, $v1, $v0 -/* 05C204 8005B604 10000002 */ b .L8005B610 -/* 05C208 8005B608 A60D016A */ sh $t5, 0x16a($s0) -.L8005B60C: -/* 05C20C 8005B60C A60E016A */ sh $t6, 0x16a($s0) -.L8005B610: -/* 05C210 8005B610 8602018E */ lh $v0, 0x18e($s0) -/* 05C214 8005B614 00000000 */ nop -/* 05C218 8005B618 18400031 */ blez $v0, .L8005B6E0 -/* 05C21C 8005B61C 2841003D */ slti $at, $v0, 0x3d -/* 05C220 8005B620 1420001E */ bnez $at, .L8005B69C -/* 05C224 8005B624 00000000 */ nop -/* 05C228 8005B628 8E04017C */ lw $a0, 0x17c($s0) -/* 05C22C 8005B62C 00000000 */ nop -/* 05C230 8005B630 1080000B */ beqz $a0, .L8005B660 -/* 05C234 8005B634 00000000 */ nop -/* 05C238 8005B638 8FA200A0 */ lw $v0, 0xa0($sp) -/* 05C23C 8005B63C 00000000 */ nop -/* 05C240 8005B640 8C45000C */ lw $a1, 0xc($v0) -/* 05C244 8005B644 8C460010 */ lw $a2, 0x10($v0) -/* 05C248 8005B648 8C470014 */ lw $a3, 0x14($v0) -/* 05C24C 8005B64C 0C0025B6 */ jal update_spatial_audio_position -/* 05C250 8005B650 00000000 */ nop -/* 05C254 8005B654 8602018E */ lh $v0, 0x18e($s0) -/* 05C258 8005B658 10000019 */ b .L8005B6C0 -/* 05C25C 8005B65C 8FAE00A8 */ lw $t6, 0xa8($sp) -.L8005B660: -/* 05C260 8005B660 8E180118 */ lw $t8, 0x118($s0) -/* 05C264 8005B664 8FAF00A0 */ lw $t7, 0xa0($sp) -/* 05C268 8005B668 13000014 */ beqz $t8, .L8005B6BC -/* 05C26C 8005B66C 2404009F */ li $a0, 159 -/* 05C270 8005B670 8DE5000C */ lw $a1, 0xc($t7) -/* 05C274 8005B674 8DE60010 */ lw $a2, 0x10($t7) -/* 05C278 8005B678 8DE70014 */ lw $a3, 0x14($t7) -/* 05C27C 8005B67C 24190001 */ li $t9, 1 -/* 05C280 8005B680 260D017C */ addiu $t5, $s0, 0x17c -/* 05C284 8005B684 AFAD0014 */ sw $t5, 0x14($sp) -/* 05C288 8005B688 0C002556 */ jal func_80009558 -/* 05C28C 8005B68C AFB90010 */ sw $t9, 0x10($sp) -/* 05C290 8005B690 8602018E */ lh $v0, 0x18e($s0) -/* 05C294 8005B694 1000000A */ b .L8005B6C0 -/* 05C298 8005B698 8FAE00A8 */ lw $t6, 0xa8($sp) -.L8005B69C: -/* 05C29C 8005B69C 8E04017C */ lw $a0, 0x17c($s0) -/* 05C2A0 8005B6A0 00000000 */ nop -/* 05C2A4 8005B6A4 10800006 */ beqz $a0, .L8005B6C0 -/* 05C2A8 8005B6A8 8FAE00A8 */ lw $t6, 0xa8($sp) -/* 05C2AC 8005B6AC 0C0025BE */ jal func_800096F8 -/* 05C2B0 8005B6B0 00000000 */ nop -/* 05C2B4 8005B6B4 8602018E */ lh $v0, 0x18e($s0) -/* 05C2B8 8005B6B8 AE00017C */ sw $zero, 0x17c($s0) -.L8005B6BC: -/* 05C2BC 8005B6BC 8FAE00A8 */ lw $t6, 0xa8($sp) -.L8005B6C0: -/* 05C2C0 8005B6C0 00000000 */ nop -/* 05C2C4 8005B6C4 004EC023 */ subu $t8, $v0, $t6 -/* 05C2C8 8005B6C8 A618018E */ sh $t8, 0x18e($s0) -/* 05C2CC 8005B6CC 860F018E */ lh $t7, 0x18e($s0) -/* 05C2D0 8005B6D0 00000000 */ nop -/* 05C2D4 8005B6D4 1DE00002 */ bgtz $t7, .L8005B6E0 -/* 05C2D8 8005B6D8 00000000 */ nop -/* 05C2DC 8005B6DC A2000189 */ sb $zero, 0x189($s0) -.L8005B6E0: -/* 05C2E0 8005B6E0 8E040024 */ lw $a0, 0x24($s0) -/* 05C2E4 8005B6E4 8FA200A0 */ lw $v0, 0xa0($sp) -/* 05C2E8 8005B6E8 10800006 */ beqz $a0, .L8005B704 -/* 05C2EC 8005B6EC 00000000 */ nop -/* 05C2F0 8005B6F0 8C45000C */ lw $a1, 0xc($v0) -/* 05C2F4 8005B6F4 8C460010 */ lw $a2, 0x10($v0) -/* 05C2F8 8005B6F8 8C470014 */ lw $a3, 0x14($v0) -/* 05C2FC 8005B6FC 0C0025B6 */ jal update_spatial_audio_position -/* 05C300 8005B700 00000000 */ nop -.L8005B704: -/* 05C304 8005B704 3C018012 */ lui $at, %hi(D_8011D584) # $at, 0x8012 -/* 05C308 8005B708 A020D584 */ sb $zero, %lo(D_8011D584)($at) -/* 05C30C 8005B70C 8E020150 */ lw $v0, 0x150($s0) -/* 05C310 8005B710 3C198012 */ lui $t9, %hi(gRaceStartTimer) # $t9, 0x8012 -/* 05C314 8005B714 10400038 */ beqz $v0, .L8005B7F8 -/* 05C318 8005B718 00000000 */ nop -/* 05C31C 8005B71C 8F39D540 */ lw $t9, %lo(gRaceStartTimer)($t9) -/* 05C320 8005B720 8FAD00A0 */ lw $t5, 0xa0($sp) -/* 05C324 8005B724 17200034 */ bnez $t9, .L8005B7F8 -/* 05C328 8005B728 00002025 */ move $a0, $zero -/* 05C32C 8005B72C C5B2000C */ lwc1 $f18, 0xc($t5) -/* 05C330 8005B730 0C0078A7 */ jal get_misc_asset -/* 05C334 8005B734 E452000C */ swc1 $f18, 0xc($v0) -/* 05C338 8005B738 820E0003 */ lb $t6, 3($s0) -/* 05C33C 8005B73C 8FA300A0 */ lw $v1, 0xa0($sp) -/* 05C340 8005B740 01C2C021 */ addu $t8, $t6, $v0 -/* 05C344 8005B744 830F0000 */ lb $t7, ($t8) -/* 05C348 8005B748 C4660010 */ lwc1 $f6, 0x10($v1) -/* 05C34C 8005B74C 448F4000 */ mtc1 $t7, $f8 -/* 05C350 8005B750 8E190150 */ lw $t9, 0x150($s0) -/* 05C354 8005B754 468042A0 */ cvt.s.w $f10, $f8 -/* 05C358 8005B758 3C01800E */ lui $at, %hi(D_800E69B0) # $at, 0x800e -/* 05C35C 8005B75C 46065100 */ add.s $f4, $f10, $f6 -/* 05C360 8005B760 E7240010 */ swc1 $f4, 0x10($t9) -/* 05C364 8005B764 8E0D0150 */ lw $t5, 0x150($s0) -/* 05C368 8005B768 C4720014 */ lwc1 $f18, 0x14($v1) -/* 05C36C 8005B76C 00000000 */ nop -/* 05C370 8005B770 E5B20014 */ swc1 $f18, 0x14($t5) -/* 05C374 8005B774 C42A69B0 */ lwc1 $f10, %lo(D_800E69B0)($at) -/* 05C378 8005B778 C4680030 */ lwc1 $f8, 0x30($v1) -/* 05C37C 8005B77C 8E0E0150 */ lw $t6, 0x150($s0) -/* 05C380 8005B780 460A4183 */ div.s $f6, $f8, $f10 -/* 05C384 8005B784 3C01800E */ lui $at, %hi(D_800E69B8) # $at, 0x800e -/* 05C388 8005B788 E5C60008 */ swc1 $f6, 8($t6) -/* 05C38C 8005B78C C4640030 */ lwc1 $f4, 0x30($v1) -/* 05C390 8005B790 C42869BC */ lwc1 $f8, %lo(D_800E69B8 + 4)($at) -/* 05C394 8005B794 C42969B8 */ lwc1 $f9, %lo(D_800E69B8)($at) -/* 05C398 8005B798 460024A1 */ cvt.d.s $f18, $f4 -/* 05C39C 8005B79C 4628903C */ c.lt.d $f18, $f8 -/* 05C3A0 8005B7A0 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 -/* 05C3A4 8005B7A4 45000007 */ bc1f .L8005B7C4 -/* 05C3A8 8005B7A8 00000000 */ nop -/* 05C3AC 8005B7AC 8E020150 */ lw $v0, 0x150($s0) -/* 05C3B0 8005B7B0 00000000 */ nop -/* 05C3B4 8005B7B4 84580006 */ lh $t8, 6($v0) -/* 05C3B8 8005B7B8 00000000 */ nop -/* 05C3BC 8005B7BC 370F4000 */ ori $t7, $t8, 0x4000 -/* 05C3C0 8005B7C0 A44F0006 */ sh $t7, 6($v0) -.L8005B7C4: -/* 05C3C4 8005B7C4 8E020150 */ lw $v0, 0x150($s0) -/* 05C3C8 8005B7C8 44812800 */ mtc1 $at, $f5 -/* 05C3CC 8005B7CC C44A0008 */ lwc1 $f10, 8($v0) -/* 05C3D0 8005B7D0 44802000 */ mtc1 $zero, $f4 -/* 05C3D4 8005B7D4 460051A1 */ cvt.d.s $f6, $f10 -/* 05C3D8 8005B7D8 4624303C */ c.lt.d $f6, $f4 -/* 05C3DC 8005B7DC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 05C3E0 8005B7E0 45000004 */ bc1f .L8005B7F4 -/* 05C3E4 8005B7E4 00000000 */ nop -/* 05C3E8 8005B7E8 44819000 */ mtc1 $at, $f18 -/* 05C3EC 8005B7EC 00000000 */ nop -/* 05C3F0 8005B7F0 E4520008 */ swc1 $f18, 8($v0) -.L8005B7F4: -/* 05C3F4 8005B7F4 AE000150 */ sw $zero, 0x150($s0) -.L8005B7F8: -/* 05C3F8 8005B7F8 241900FF */ li $t9, 255 -/* 05C3FC 8005B7FC A21901FE */ sb $t9, 0x1fe($s0) -/* 05C400 8005B800 0C013DDF */ jal func_8004F77C -/* 05C404 8005B804 02002025 */ move $a0, $s0 -/* 05C408 8005B808 8FBF002C */ lw $ra, 0x2c($sp) -/* 05C40C 8005B80C 8FB00028 */ lw $s0, 0x28($sp) -/* 05C410 8005B810 03E00008 */ jr $ra -/* 05C414 8005B814 27BD00A0 */ addiu $sp, $sp, 0xa0 - diff --git a/asm/non_matchings/unknown_005740/func_80007FA4.s b/asm/non_matchings/unknown_005740/func_80007FA4.s deleted file mode 100644 index 33c1c9f4..00000000 --- a/asm/non_matchings/unknown_005740/func_80007FA4.s +++ /dev/null @@ -1,48 +0,0 @@ -.late_rodata -glabel D_800E4CF8 -.double 0.001 - -.text -glabel func_80007FA4 -/* 008BA4 80007FA4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 008BA8 80007FA8 44818000 */ mtc1 $at, $f16 -/* 008BAC 80007FAC 3C01800E */ lui $at, %hi(D_800E4CF8 + 4) # $at, 0x800e -/* 008BB0 80007FB0 46106101 */ sub.s $f4, $f12, $f16 -/* 008BB4 80007FB4 C4334CF8 */ lwc1 $f19, %lo(D_800E4CF8)($at) -/* 008BB8 80007FB8 460C8180 */ add.s $f6, $f16, $f12 -/* 008BBC 80007FBC C4324CFC */ lwc1 $f18, %lo(D_800E4CF8 + 4)($at) -/* 008BC0 80007FC0 46062303 */ div.s $f12, $f4, $f6 -/* 008BC4 80007FC4 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 008BC8 80007FC8 44801000 */ mtc1 $zero, $f2 -/* 008BCC 80007FCC 44814000 */ mtc1 $at, $f8 -/* 008BD0 80007FD0 24020001 */ li $v0, 1 -/* 008BD4 80007FD4 46081281 */ sub.s $f10, $f2, $f8 -/* 008BD8 80007FD8 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 008BDC 80007FDC 46005121 */ cvt.d.s $f4, $f10 -/* 008BE0 80007FE0 4624903C */ c.lt.d $f18, $f4 -/* 008BE4 80007FE4 00000000 */ nop -/* 008BE8 80007FE8 45000010 */ bc1f .L8000802C -/* 008BEC 80007FEC 46006386 */ mov.s $f14, $f12 -/* 008BF0 80007FF0 460C6402 */ mul.s $f16, $f12, $f12 -/* 008BF4 80007FF4 00000000 */ nop -.L80007FF8: -/* 008BF8 80007FF8 44823000 */ mtc1 $v0, $f6 -/* 008BFC 80007FFC 46001006 */ mov.s $f0, $f2 -/* 008C00 80008000 46803220 */ cvt.s.w $f8, $f6 -/* 008C04 80008004 24420002 */ addiu $v0, $v0, 2 -/* 008C08 80008008 46087283 */ div.s $f10, $f14, $f8 -/* 008C0C 8000800C 46107382 */ mul.s $f14, $f14, $f16 -/* 008C10 80008010 460A1080 */ add.s $f2, $f2, $f10 -/* 008C14 80008014 46001101 */ sub.s $f4, $f2, $f0 -/* 008C18 80008018 460021A1 */ cvt.d.s $f6, $f4 -/* 008C1C 8000801C 4626903C */ c.lt.d $f18, $f6 -/* 008C20 80008020 00000000 */ nop -/* 008C24 80008024 4501FFF4 */ bc1t .L80007FF8 -/* 008C28 80008028 00000000 */ nop -.L8000802C: -/* 008C2C 8000802C 44814000 */ mtc1 $at, $f8 -/* 008C30 80008030 00000000 */ nop -/* 008C34 80008034 46081002 */ mul.s $f0, $f2, $f8 -/* 008C38 80008038 03E00008 */ jr $ra -/* 008C3C 8000803C 00000000 */ nop - diff --git a/asm/non_matchings/unknown_005740/func_80009AB4.s b/asm/non_matchings/unknown_005740/func_80009AB4.s deleted file mode 100644 index ea1e577b..00000000 --- a/asm/non_matchings/unknown_005740/func_80009AB4.s +++ /dev/null @@ -1,63 +0,0 @@ -.late_rodata -glabel D_800E4F20 -.double -100000.0 - -.text -glabel func_80009AB4 -/* 00A6B4 80009AB4 308E00FF */ andi $t6, $a0, 0xff -/* 00A6B8 80009AB8 000E7880 */ sll $t7, $t6, 2 -/* 00A6BC 80009ABC 01EE7823 */ subu $t7, $t7, $t6 -/* 00A6C0 80009AC0 3C188012 */ lui $t8, %hi(D_8011A6D8) # $t8, 0x8012 -/* 00A6C4 80009AC4 2718A6D8 */ addiu $t8, %lo(D_8011A6D8) # addiu $t8, $t8, -0x5928 -/* 00A6C8 80009AC8 000F7980 */ sll $t7, $t7, 6 -/* 00A6CC 80009ACC AFA40000 */ sw $a0, ($sp) -/* 00A6D0 80009AD0 01F81021 */ addu $v0, $t7, $t8 -/* 00A6D4 80009AD4 804700B8 */ lb $a3, 0xb8($v0) -/* 00A6D8 80009AD8 24030001 */ li $v1, 1 -/* 00A6DC 80009ADC 1CE00003 */ bgtz $a3, .L80009AEC -/* 00A6E0 80009AE0 24460004 */ addiu $a2, $v0, 4 -/* 00A6E4 80009AE4 03E00008 */ jr $ra -/* 00A6E8 80009AE8 00001025 */ move $v0, $zero - -.L80009AEC: -/* 00A6EC 80009AEC 18E00020 */ blez $a3, .L80009B70 -/* 00A6F0 80009AF0 00002025 */ move $a0, $zero -/* 00A6F4 80009AF4 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 00A6F8 80009AF8 44817000 */ mtc1 $at, $f14 -/* 00A6FC 80009AFC 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 00A700 80009B00 44816000 */ mtc1 $at, $f12 -/* 00A704 80009B04 3C01800E */ lui $at, %hi(D_800E4F20 + 4) # $at, 0x800e -/* 00A708 80009B08 C4234F20 */ lwc1 $f3, %lo(D_800E4F20)($at) -/* 00A70C 80009B0C C4224F24 */ lwc1 $f2, %lo(D_800E4F20 + 4)($at) -/* 00A710 80009B10 804500B8 */ lb $a1, 0xb8($v0) -/* 00A714 80009B14 00000000 */ nop -.L80009B18: -/* 00A718 80009B18 C4C00000 */ lwc1 $f0, ($a2) -/* 00A71C 80009B1C 24840001 */ addiu $a0, $a0, 1 -/* 00A720 80009B20 46000121 */ cvt.d.s $f4, $f0 -/* 00A724 80009B24 46241032 */ c.eq.d $f2, $f4 -/* 00A728 80009B28 0085082A */ slt $at, $a0, $a1 -/* 00A72C 80009B2C 4501000D */ bc1t .L80009B64 -/* 00A730 80009B30 00000000 */ nop -/* 00A734 80009B34 460C0180 */ add.s $f6, $f0, $f12 -/* 00A738 80009B38 46003221 */ cvt.d.s $f8, $f6 -/* 00A73C 80009B3C 46281032 */ c.eq.d $f2, $f8 -/* 00A740 80009B40 00000000 */ nop -/* 00A744 80009B44 45010007 */ bc1t .L80009B64 -/* 00A748 80009B48 00000000 */ nop -/* 00A74C 80009B4C 460E0280 */ add.s $f10, $f0, $f14 -/* 00A750 80009B50 46005421 */ cvt.d.s $f16, $f10 -/* 00A754 80009B54 46301032 */ c.eq.d $f2, $f16 -/* 00A758 80009B58 00000000 */ nop -/* 00A75C 80009B5C 45000002 */ bc1f .L80009B68 -/* 00A760 80009B60 00000000 */ nop -.L80009B64: -/* 00A764 80009B64 00001825 */ move $v1, $zero -.L80009B68: -/* 00A768 80009B68 1420FFEB */ bnez $at, .L80009B18 -/* 00A76C 80009B6C 24C6000C */ addiu $a2, $a2, 0xc -.L80009B70: -/* 00A770 80009B70 00601025 */ move $v0, $v1 -/* 00A774 80009B74 03E00008 */ jr $ra -/* 00A778 80009B78 00000000 */ nop - diff --git a/asm/non_matchings/unknown_032760/obj_loop_animator.s b/asm/non_matchings/unknown_032760/obj_loop_animator.s index 87f282a7..32adfde0 100644 --- a/asm/non_matchings/unknown_032760/obj_loop_animator.s +++ b/asm/non_matchings/unknown_032760/obj_loop_animator.s @@ -30,7 +30,7 @@ glabel obj_loop_animator /* 038454 80037854 00064903 */ sra $t1, $a2, 4 /* 038458 80037858 AFA3003C */ sw $v1, 0x3c($sp) /* 03845C 8003785C AFA80020 */ sw $t0, 0x20($sp) -/* 038460 80037860 0C00B1F1 */ jal func_8002C7C4 +/* 038460 80037860 0C00B1F1 */ jal get_current_level_model /* 038464 80037864 AFA9001C */ sw $t1, 0x1c($sp) /* 038468 80037868 8FA3003C */ lw $v1, 0x3c($sp) /* 03846C 8003786C 8C4F0004 */ lw $t7, 4($v0) diff --git a/asm/non_matchings/unknown_032760/obj_loop_goldenballoon.s b/asm/non_matchings/unknown_032760/obj_loop_goldenballoon.s deleted file mode 100644 index 0f6e85f2..00000000 --- a/asm/non_matchings/unknown_032760/obj_loop_goldenballoon.s +++ /dev/null @@ -1,216 +0,0 @@ -.late_rodata -glabel D_800E6160 -.double 1.2 - -.text -glabel obj_loop_goldenballoon -/* 03C0BC 8003B4BC 44852000 */ mtc1 $a1, $f4 -/* 03C0C0 8003B4C0 27BDFFB0 */ addiu $sp, $sp, -0x50 -/* 03C0C4 8003B4C4 3C0F8000 */ lui $t7, %hi(osTvType) # $t7, 0x8000 -/* 03C0C8 8003B4C8 46802020 */ cvt.s.w $f0, $f4 -/* 03C0CC 8003B4CC 8DEF0300 */ lw $t7, %lo(osTvType)($t7) -/* 03C0D0 8003B4D0 AFB10020 */ sw $s1, 0x20($sp) -/* 03C0D4 8003B4D4 00808825 */ move $s1, $a0 -/* 03C0D8 8003B4D8 AFBF0024 */ sw $ra, 0x24($sp) -/* 03C0DC 8003B4DC AFB0001C */ sw $s0, 0x1c($sp) -/* 03C0E0 8003B4E0 AFA50054 */ sw $a1, 0x54($sp) -/* 03C0E4 8003B4E4 15E00007 */ bnez $t7, .L8003B504 -/* 03C0E8 8003B4E8 46000086 */ mov.s $f2, $f0 -/* 03C0EC 8003B4EC 3C01800E */ lui $at, %hi(D_800E6160 + 4) # $at, 0x800e -/* 03C0F0 8003B4F0 C4296160 */ lwc1 $f9, %lo(D_800E6160)($at) -/* 03C0F4 8003B4F4 C4286164 */ lwc1 $f8, %lo(D_800E6160 + 4)($at) -/* 03C0F8 8003B4F8 460001A1 */ cvt.d.s $f6, $f0 -/* 03C0FC 8003B4FC 46283282 */ mul.d $f10, $f6, $f8 -/* 03C100 8003B500 462050A0 */ cvt.s.d $f2, $f10 -.L8003B504: -/* 03C104 8003B504 3C18A000 */ lui $t8, %hi(D_A0000284) # $t8, 0xa000 -/* 03C108 8003B508 8F190284 */ lw $t9, %lo(D_A0000284)($t8) -/* 03C10C 8003B50C 3C01240B */ lui $at, (0x240B17D7 >> 16) # lui $at, 0x240b -/* 03C110 8003B510 342117D7 */ ori $at, (0x240B17D7 & 0xFFFF) # ori $at, $at, 0x17d7 -/* 03C114 8003B514 13210002 */ beq $t9, $at, .L8003B520 -/* 03C118 8003B518 00008025 */ move $s0, $zero -/* 03C11C 8003B51C 24100001 */ li $s0, 1 -.L8003B520: -/* 03C120 8003B520 0C01BAA4 */ jal get_settings -/* 03C124 8003B524 E7A2002C */ swc1 $f2, 0x2c($sp) -/* 03C128 8003B528 904B0049 */ lbu $t3, 0x49($v0) -/* 03C12C 8003B52C 8E23003C */ lw $v1, 0x3c($s1) -/* 03C130 8003B530 8C4A0004 */ lw $t2, 4($v0) -/* 03C134 8003B534 000B6080 */ sll $t4, $t3, 2 -/* 03C138 8003B538 80680008 */ lb $t0, 8($v1) -/* 03C13C 8003B53C 014C6821 */ addu $t5, $t2, $t4 -/* 03C140 8003B540 8DAE0000 */ lw $t6, ($t5) -/* 03C144 8003B544 3C090001 */ lui $t1, 1 -/* 03C148 8003B548 01092804 */ sllv $a1, $t1, $t0 -/* 03C14C 8003B54C 01C57824 */ and $t7, $t6, $a1 -/* 03C150 8003B550 11E00013 */ beqz $t7, .L8003B5A0 -/* 03C154 8003B554 00000000 */ nop -/* 03C158 8003B558 8E38007C */ lw $t8, 0x7c($s1) -/* 03C15C 8003B55C 24190002 */ li $t9, 2 -/* 03C160 8003B560 1B00000B */ blez $t8, .L8003B590 -/* 03C164 8003B564 00000000 */ nop -/* 03C168 8003B568 AE390074 */ sw $t9, 0x74($s1) -/* 03C16C 8003B56C 8FA50054 */ lw $a1, 0x54($sp) -/* 03C170 8003B570 0C02BF0F */ jal func_800AFC3C -/* 03C174 8003B574 02202025 */ move $a0, $s1 -/* 03C178 8003B578 8E29007C */ lw $t1, 0x7c($s1) -/* 03C17C 8003B57C 8FA80054 */ lw $t0, 0x54($sp) -/* 03C180 8003B580 00000000 */ nop -/* 03C184 8003B584 01285823 */ subu $t3, $t1, $t0 -/* 03C188 8003B588 1000008B */ b .L8003B7B8 -/* 03C18C 8003B58C AE2B007C */ sw $t3, 0x7c($s1) -.L8003B590: -/* 03C190 8003B590 0C003FEE */ jal gParticlePtrList_addObject -/* 03C194 8003B594 02202025 */ move $a0, $s1 -/* 03C198 8003B598 10000088 */ b .L8003B7BC -/* 03C19C 8003B59C 8FBF0024 */ lw $ra, 0x24($sp) -.L8003B5A0: -/* 03C1A0 8003B5A0 862A0006 */ lh $t2, 6($s1) -/* 03C1A4 8003B5A4 8E2D0078 */ lw $t5, 0x78($s1) -/* 03C1A8 8003B5A8 354C4000 */ ori $t4, $t2, 0x4000 -/* 03C1AC 8003B5AC 15A00082 */ bnez $t5, .L8003B7B8 -/* 03C1B0 8003B5B0 A62C0006 */ sh $t4, 6($s1) -/* 03C1B4 8003B5B4 862E0006 */ lh $t6, 6($s1) -/* 03C1B8 8003B5B8 92240039 */ lbu $a0, 0x39($s1) -/* 03C1BC 8003B5BC 31CFBFFF */ andi $t7, $t6, 0xbfff -/* 03C1C0 8003B5C0 A62F0006 */ sh $t7, 6($s1) -/* 03C1C4 8003B5C4 8FA30054 */ lw $v1, 0x54($sp) -/* 03C1C8 8003B5C8 241900FF */ li $t9, 255 -/* 03C1CC 8003B5CC 0003C040 */ sll $t8, $v1, 1 -/* 03C1D0 8003B5D0 03384823 */ subu $t1, $t9, $t8 -/* 03C1D4 8003B5D4 0089082A */ slt $at, $a0, $t1 -/* 03C1D8 8003B5D8 10200004 */ beqz $at, .L8003B5EC -/* 03C1DC 8003B5DC 240B00FF */ li $t3, 255 -/* 03C1E0 8003B5E0 00984021 */ addu $t0, $a0, $t8 -/* 03C1E4 8003B5E4 10000002 */ b .L8003B5F0 -/* 03C1E8 8003B5E8 A2280039 */ sb $t0, 0x39($s1) -.L8003B5EC: -/* 03C1EC 8003B5EC A22B0039 */ sb $t3, 0x39($s1) -.L8003B5F0: -/* 03C1F0 8003B5F0 8E24004C */ lw $a0, 0x4c($s1) -/* 03C1F4 8003B5F4 00000000 */ nop -/* 03C1F8 8003B5F8 908A0013 */ lbu $t2, 0x13($a0) -/* 03C1FC 8003B5FC 00000000 */ nop -/* 03C200 8003B600 2941002D */ slti $at, $t2, 0x2d -/* 03C204 8003B604 1020003C */ beqz $at, .L8003B6F8 -/* 03C208 8003B608 00000000 */ nop -/* 03C20C 8003B60C 1600003A */ bnez $s0, .L8003B6F8 -/* 03C210 8003B610 00000000 */ nop -/* 03C214 8003B614 8C830000 */ lw $v1, ($a0) -/* 03C218 8003B618 00000000 */ nop -/* 03C21C 8003B61C 10600036 */ beqz $v1, .L8003B6F8 -/* 03C220 8003B620 00000000 */ nop -/* 03C224 8003B624 8C6C0040 */ lw $t4, 0x40($v1) -/* 03C228 8003B628 24060001 */ li $a2, 1 -/* 03C22C 8003B62C 818D0054 */ lb $t5, 0x54($t4) -/* 03C230 8003B630 00000000 */ nop -/* 03C234 8003B634 14CD0030 */ bne $a2, $t5, .L8003B6F8 -/* 03C238 8003B638 00000000 */ nop -/* 03C23C 8003B63C 8C640064 */ lw $a0, 0x64($v1) -/* 03C240 8003B640 00000000 */ nop -/* 03C244 8003B644 848E0000 */ lh $t6, ($a0) -/* 03C248 8003B648 00000000 */ nop -/* 03C24C 8003B64C 15C0002A */ bnez $t6, .L8003B6F8 -/* 03C250 8003B650 00000000 */ nop -/* 03C254 8003B654 90580048 */ lbu $t8, 0x48($v0) -/* 03C258 8003B658 8C4F0000 */ lw $t7, ($v0) -/* 03C25C 8003B65C 0018C840 */ sll $t9, $t8, 1 -/* 03C260 8003B660 01F91821 */ addu $v1, $t7, $t9 -/* 03C264 8003B664 84690000 */ lh $t1, ($v1) -/* 03C268 8003B668 00000000 */ nop -/* 03C26C 8003B66C 25280001 */ addiu $t0, $t1, 1 -/* 03C270 8003B670 A4680000 */ sh $t0, ($v1) -/* 03C274 8003B674 904B0048 */ lbu $t3, 0x48($v0) -/* 03C278 8003B678 00000000 */ nop -/* 03C27C 8003B67C 11600007 */ beqz $t3, .L8003B69C -/* 03C280 8003B680 00000000 */ nop -/* 03C284 8003B684 8C430000 */ lw $v1, ($v0) -/* 03C288 8003B688 00000000 */ nop -/* 03C28C 8003B68C 846A0000 */ lh $t2, ($v1) -/* 03C290 8003B690 00000000 */ nop -/* 03C294 8003B694 254C0001 */ addiu $t4, $t2, 1 -/* 03C298 8003B698 A46C0000 */ sh $t4, ($v1) -.L8003B69C: -/* 03C29C 8003B69C 904E0049 */ lbu $t6, 0x49($v0) -/* 03C2A0 8003B6A0 8C4D0004 */ lw $t5, 4($v0) -/* 03C2A4 8003B6A4 000EC080 */ sll $t8, $t6, 2 -/* 03C2A8 8003B6A8 01B81821 */ addu $v1, $t5, $t8 -/* 03C2AC 8003B6AC 8C6F0000 */ lw $t7, ($v1) -/* 03C2B0 8003B6B0 2404023D */ li $a0, 573 -/* 03C2B4 8003B6B4 01E5C825 */ or $t9, $t7, $a1 -/* 03C2B8 8003B6B8 AC790000 */ sw $t9, ($v1) -/* 03C2BC 8003B6BC 8E270014 */ lw $a3, 0x14($s1) -/* 03C2C0 8003B6C0 8E260010 */ lw $a2, 0x10($s1) -/* 03C2C4 8003B6C4 8E25000C */ lw $a1, 0xc($s1) -/* 03C2C8 8003B6C8 0C0007AA */ jal play_sound_spatial -/* 03C2CC 8003B6CC AFA00010 */ sw $zero, 0x10($sp) -/* 03C2D0 8003B6D0 862B0006 */ lh $t3, 6($s1) -/* 03C2D4 8003B6D4 24090010 */ li $t1, 16 -/* 03C2D8 8003B6D8 24080002 */ li $t0, 2 -/* 03C2DC 8003B6DC 356A4000 */ ori $t2, $t3, 0x4000 -/* 03C2E0 8003B6E0 AE29007C */ sw $t1, 0x7c($s1) -/* 03C2E4 8003B6E4 AE280074 */ sw $t0, 0x74($s1) -/* 03C2E8 8003B6E8 A62A0006 */ sh $t2, 6($s1) -/* 03C2EC 8003B6EC 8FA50054 */ lw $a1, 0x54($sp) -/* 03C2F0 8003B6F0 0C02BF0F */ jal func_800AFC3C -/* 03C2F4 8003B6F4 02202025 */ move $a0, $s1 -.L8003B6F8: -/* 03C2F8 8003B6F8 44801000 */ mtc1 $zero, $f2 -/* 03C2FC 8003B6FC 8E300064 */ lw $s0, 0x64($s1) -/* 03C300 8003B700 A220003B */ sb $zero, 0x3b($s1) -/* 03C304 8003B704 E6020014 */ swc1 $f2, 0x14($s0) -/* 03C308 8003B708 922C0039 */ lbu $t4, 0x39($s1) -/* 03C30C 8003B70C 02202825 */ move $a1, $s1 -/* 03C310 8003B710 298100FF */ slti $at, $t4, 0xff -/* 03C314 8003B714 10200003 */ beqz $at, .L8003B724 -/* 03C318 8003B718 02002025 */ move $a0, $s0 -/* 03C31C 8003B71C 10000004 */ b .L8003B730 -/* 03C320 8003B720 46001006 */ mov.s $f0, $f2 -.L8003B724: -/* 03C324 8003B724 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 03C328 8003B728 44810000 */ mtc1 $at, $f0 -/* 03C32C 8003B72C 00000000 */ nop -.L8003B730: -/* 03C330 8003B730 920E000D */ lbu $t6, 0xd($s0) -/* 03C334 8003B734 240100FF */ li $at, 255 -/* 03C338 8003B738 15C1001C */ bne $t6, $at, .L8003B7AC -/* 03C33C 8003B73C 8FA6002C */ lw $a2, 0x2c($sp) -/* 03C340 8003B740 C62C000C */ lwc1 $f12, 0xc($s1) -/* 03C344 8003B744 C62E0010 */ lwc1 $f14, 0x10($s1) -/* 03C348 8003B748 8E260014 */ lw $a2, 0x14($s1) -/* 03C34C 8003B74C 0C007149 */ jal func_8001C524 -/* 03C350 8003B750 00003825 */ move $a3, $zero -/* 03C354 8003B754 304400FF */ andi $a0, $v0, 0xff -/* 03C358 8003B758 240100FF */ li $at, 255 -/* 03C35C 8003B75C 10810016 */ beq $a0, $at, .L8003B7B8 -/* 03C360 8003B760 A202000D */ sb $v0, 0xd($s0) -/* 03C364 8003B764 2405FFFF */ li $a1, -1 -/* 03C368 8003B768 0C007312 */ jal func_8001CC48 -/* 03C36C 8003B76C 00003025 */ move $a2, $zero -/* 03C370 8003B770 9205000D */ lbu $a1, 0xd($s0) -/* 03C374 8003B774 A202000E */ sb $v0, 0xe($s0) -/* 03C378 8003B778 304400FF */ andi $a0, $v0, 0xff -/* 03C37C 8003B77C 0C007312 */ jal func_8001CC48 -/* 03C380 8003B780 00003025 */ move $a2, $zero -/* 03C384 8003B784 9205000E */ lbu $a1, 0xe($s0) -/* 03C388 8003B788 A202000F */ sb $v0, 0xf($s0) -/* 03C38C 8003B78C 304400FF */ andi $a0, $v0, 0xff -/* 03C390 8003B790 0C007312 */ jal func_8001CC48 -/* 03C394 8003B794 00003025 */ move $a2, $zero -/* 03C398 8003B798 920D000D */ lbu $t5, 0xd($s0) -/* 03C39C 8003B79C A2020010 */ sb $v0, 0x10($s0) -/* 03C3A0 8003B7A0 10000005 */ b .L8003B7B8 -/* 03C3A4 8003B7A4 A20D000C */ sb $t5, 0xc($s0) -/* 03C3A8 8003B7A8 8FA6002C */ lw $a2, 0x2c($sp) -.L8003B7AC: -/* 03C3AC 8003B7AC 44070000 */ mfc1 $a3, $f0 -/* 03C3B0 8003B7B0 0C0071B1 */ jal func_8001C6C4 -/* 03C3B4 8003B7B4 AFA00010 */ sw $zero, 0x10($sp) -.L8003B7B8: -/* 03C3B8 8003B7B8 8FBF0024 */ lw $ra, 0x24($sp) -.L8003B7BC: -/* 03C3BC 8003B7BC 8FB0001C */ lw $s0, 0x1c($sp) -/* 03C3C0 8003B7C0 8FB10020 */ lw $s1, 0x20($sp) -/* 03C3C4 8003B7C4 03E00008 */ jr $ra -/* 03C3C8 8003B7C8 27BD0050 */ addiu $sp, $sp, 0x50 - diff --git a/asm/non_matchings/unknown_032760/obj_loop_texscroll.s b/asm/non_matchings/unknown_032760/obj_loop_texscroll.s index 65e2b1d6..d122eff8 100644 --- a/asm/non_matchings/unknown_032760/obj_loop_texscroll.s +++ b/asm/non_matchings/unknown_032760/obj_loop_texscroll.s @@ -4,7 +4,7 @@ glabel obj_loop_texscroll /* 040D50 80040150 AFB00018 */ sw $s0, 0x18($sp) /* 040D54 80040154 AFA5003C */ sw $a1, 0x3c($sp) /* 040D58 80040158 8C8D0064 */ lw $t5, 0x64($a0) -/* 040D5C 8004015C 0C00B1F1 */ jal func_8002C7C4 +/* 040D5C 8004015C 0C00B1F1 */ jal get_current_level_model /* 040D60 80040160 AFAD0024 */ sw $t5, 0x24($sp) /* 040D64 80040164 8FAD0024 */ lw $t5, 0x24($sp) /* 040D68 80040168 8FAA003C */ lw $t2, 0x3c($sp) diff --git a/asm/unknown_070110.s b/asm/unknown_070110.s index 546ce0ec..1eb78bf4 100644 --- a/asm/unknown_070110.s +++ b/asm/unknown_070110.s @@ -9,18 +9,22 @@ .set noreorder # dont insert nops after branches .set gp=64 # 64-bit instructions are used -.include "asm/unknown_070110/func_8006F510.s" -.include "asm/unknown_070110/func_8006F53C.s" -.include "asm/unknown_070110/func_8006F564.s" +.include "asm/unknown_070110/func_8006F510.s" # If D_800DD430 != 0 THEN Set an interrupt? +.include "asm/unknown_070110/func_8006F53C.s" # If D_800DD430 != 0 THEN __osRestoreInt - void func_8006F53C(u32); +.include "asm/unknown_070110/func_8006F564.s" # Set D_800DD430 +.include "asm/unknown_070110/func_8006F570.s" # UNUSED - Get D_800DD430 +.include "asm/unknown_070110/func_8006F57C.s" # UNUSED .include "asm/unknown_070110/func_8006F5E0.s" -.include "asm/unknown_070110/guMtxXFMF.s" -.include "asm/unknown_070110/func_8006F6EC.s" -.include "asm/unknown_070110/func_8006F768.s" -.include "asm/unknown_070110/func_8006F870.s" +.include "asm/unknown_070110/guMtxXFMF.s" # It's possible the funcs from this point and above are unidentified libultra +.include "asm/unknown_070110/func_8006F6EC.s" # Floating Point Matrix Math +.include "asm/unknown_070110/func_8006F768.s" # Floating Point Matrix Math +.include "asm/unknown_070110/func_8006F870.s" # Floating Point Matrix Math .include "asm/unknown_070110/rng.s" -.include "asm/unknown_070110/func_8006F9B8.s" -.include "asm/unknown_070110/func_8006FB60.s" -.include "asm/unknown_070110/func_8006FC30.s" +.include "asm/unknown_070110/func_8006F9B8.s" # 16 bit Matrix Math? +.include "asm/unknown_070110/func_8006FA40.s" # 16 bit a0 struct/array to 32 bit a1? UNUSED? +.include "asm/unknown_070110/func_8006FA78.s" # UNUSED +.include "asm/unknown_070110/func_8006FB60.s" # +.include "asm/unknown_070110/func_8006FC30.s" # Floating Point Matrix and ObjectTransform * .include "asm/unknown_070110/func_8006FE04.s" .include "asm/unknown_070110/func_8006FE30.s" .include "asm/unknown_070110/func_8006FE74.s" @@ -30,16 +34,20 @@ .include "asm/unknown_070110/func_800703D8.s" .include "asm/unknown_070110/func_80070490.s" .include "asm/unknown_070110/func_800704F0.s" -.include "asm/unknown_070110/func_800705F8.s" +.include "asm/unknown_070110/func_800705F8.s" # Floating Point Matrix Values .include "asm/unknown_070110/func_80070638.s" .include "asm/unknown_070110/func_8007066C.s" .include "asm/unknown_070110/arctan2_f.s" +.include "asm/unknown_070110/func_80070780.s" # UNUSED +.include "asm/unknown_070110/func_800707AC.s" # UNUSED Run a sqrtf on a 32 bit int? .include "asm/unknown_070110/cosine_s.s" .include "asm/unknown_070110/sine_s.s" -.include "asm/unknown_070110/func_8007082C.s" -.include "asm/unknown_070110/func_80070890.s" -.include "asm/unknown_070110/func_80070A2C.s" -.include "asm/unknown_070110/func_80070B04.s" +.include "asm/unknown_070110/func_8007082C.s" # Weird case of one function with two entrance points. Sinewave related? Includes: func_80070830 +.include "asm/unknown_070110/func_80070890.s" # Similar to above, and has UNUSED func_8007088C +.include "asm/unknown_070110/func_800708D0.s" # UNUSED +.include "asm/unknown_070110/func_80070A2C.s" # Floating Point Math with sqrt +.include "asm/unknown_070110/set_breakpoint.s" # UNUSED - +.include "asm/unknown_070110/func_80070B04.s" # Uses mips3 instructions to copy data from s64 values arg0 to arg1 in a loop .section .data diff --git a/asm/unknown_070110/arctan2_f.s b/asm/unknown_070110/arctan2_f.s index 5cec5f5e..5dc6bcdb 100644 --- a/asm/unknown_070110/arctan2_f.s +++ b/asm/unknown_070110/arctan2_f.s @@ -9,25 +9,5 @@ glabel arctan2_f /* 07136C 8007076C 460073A4 */ cvt.w.s $f14, $f14 /* 071370 80070770 44046000 */ mfc1 $a0, $f12 /* 071374 80070774 44057000 */ mfc1 $a1, $f14 -/* 071378 80070778 0801C19B */ j func_8007066C +/* 071378 80070778 0801C19B */ j func_8007066C # Does not do a jr in this func, but lets the jumped to function do it. /* 07137C 8007077C 00000000 */ nop - -/* 071380 80070780 44840000 */ mtc1 $a0, $f0 -/* 071384 80070784 3C014780 */ li $at, 0x47800000 # 65536.000000 -/* 071388 80070788 44811000 */ mtc1 $at, $f2 -/* 07138C 8007078C 46800020 */ cvt.s.w $f0, $f0 -/* 071390 80070790 46020003 */ div.s $f0, $f0, $f2 -/* 071394 80070794 46000004 */ sqrt.s $f0, $f0 -/* 071398 80070798 46020002 */ mul.s $f0, $f0, $f2 -/* 07139C 8007079C 46000024 */ cvt.w.s $f0, $f0 -/* 0713A0 800707A0 44020000 */ mfc1 $v0, $f0 -/* 0713A4 800707A4 03E00008 */ jr $ra -/* 0713A8 800707A8 00000000 */ nop - -/* 0713AC 800707AC 44840000 */ mtc1 $a0, $f0 -/* 0713B0 800707B0 00000000 */ nop -/* 0713B4 800707B4 46000004 */ sqrt.s $f0, $f0 -/* 0713B8 800707B8 44020000 */ mfc1 $v0, $f0 -/* 0713BC 800707BC 03E00008 */ jr $ra -/* 0713C0 800707C0 00000000 */ nop - diff --git a/asm/unknown_070110/func_8006F510.s b/asm/unknown_070110/func_8006F510.s index e804cfdd..e2417b69 100644 --- a/asm/unknown_070110/func_8006F510.s +++ b/asm/unknown_070110/func_8006F510.s @@ -2,7 +2,7 @@ glabel func_8006F510 /* 070110 8006F510 3C08800E */ lui $t0, %hi(D_800DD430) # $t0, 0x800e /* 070114 8006F514 8108D430 */ lb $t0, %lo(D_800DD430)($t0) /* 070118 8006F518 11000006 */ beqz $t0, .L8006F534 -/* 07011C 8006F51C 40086000 */ mfc0 $t0, $12 +/* 07011C 8006F51C 40086000 */ mfc0 $t0, $12 # C0_SR - Status Register /* 070120 8006F520 2401FFFE */ li $at, -2 /* 070124 8006F524 01014824 */ and $t1, $t0, $at /* 070128 8006F528 40896000 */ mtc0 $t1, $12 diff --git a/asm/unknown_070110/func_8006F53C.s b/asm/unknown_070110/func_8006F53C.s index 17535ab4..c775a350 100644 --- a/asm/unknown_070110/func_8006F53C.s +++ b/asm/unknown_070110/func_8006F53C.s @@ -1,8 +1,8 @@ glabel func_8006F53C /* 07013C 8006F53C 3C08800E */ lui $t0, %hi(D_800DD430) # $t0, 0x800e /* 070140 8006F540 8108D430 */ lb $t0, %lo(D_800DD430)($t0) -/* 070144 8006F544 11000005 */ beqz $t0, .L8006F55C -/* 070148 8006F548 40086000 */ mfc0 $t0, $12 +/* 070144 8006F544 11000005 */ beqz $t0, .L8006F55C # Identical to __osRestoreInt below this line +/* 070148 8006F548 40086000 */ mfc0 $t0, $12 # C0_SR - Status Register /* 07014C 8006F54C 01044025 */ or $t0, $t0, $a0 /* 070150 8006F550 40886000 */ mtc0 $t0, $12 /* 070154 8006F554 00000000 */ nop diff --git a/asm/unknown_070110/func_8006F564.s b/asm/unknown_070110/func_8006F564.s index 6020b039..69d87238 100644 --- a/asm/unknown_070110/func_8006F564.s +++ b/asm/unknown_070110/func_8006F564.s @@ -2,35 +2,3 @@ glabel func_8006F564 /* 070164 8006F564 3C01800E */ lui $at, %hi(D_800DD430) # $at, 0x800e /* 070168 8006F568 03E00008 */ jr $ra /* 07016C 8006F56C A024D430 */ sb $a0, %lo(D_800DD430)($at) - -/* 070170 8006F570 3C02800E */ lui $v0, %hi(D_800DD430) # $v0, 0x800e -/* 070174 8006F574 03E00008 */ jr $ra -/* 070178 8006F578 9042D430 */ lbu $v0, %lo(D_800DD430)($v0) - -/* 07017C 8006F57C 34080004 */ ori $t0, $zero, 4 -/* 070180 8006F580 3C0FFFFF */ lui $t7, 0xffff -.L8006F584: -/* 070184 8006F584 8C890000 */ lw $t1, ($a0) -/* 070188 8006F588 8C8A0020 */ lw $t2, 0x20($a0) -/* 07018C 8006F58C 8C8B0004 */ lw $t3, 4($a0) -/* 070190 8006F590 8C8C0024 */ lw $t4, 0x24($a0) -/* 070194 8006F594 A4A90004 */ sh $t1, 4($a1) -/* 070198 8006F598 A4AA0006 */ sh $t2, 6($a1) -/* 07019C 8006F59C A4AB000C */ sh $t3, 0xc($a1) -/* 0701A0 8006F5A0 A4AC000E */ sh $t4, 0xe($a1) -/* 0701A4 8006F5A4 00094C02 */ srl $t1, $t1, 0x10 -/* 0701A8 8006F5A8 000A5402 */ srl $t2, $t2, 0x10 -/* 0701AC 8006F5AC 000B5C02 */ srl $t3, $t3, 0x10 -/* 0701B0 8006F5B0 000C6402 */ srl $t4, $t4, 0x10 -/* 0701B4 8006F5B4 24840008 */ addiu $a0, $a0, 8 -/* 0701B8 8006F5B8 A4A90000 */ sh $t1, ($a1) -/* 0701BC 8006F5BC A4AA0002 */ sh $t2, 2($a1) -/* 0701C0 8006F5C0 A4AB0008 */ sh $t3, 8($a1) -/* 0701C4 8006F5C4 A4AC000A */ sh $t4, 0xa($a1) -/* 0701C8 8006F5C8 20A50010 */ addi $a1, $a1, 0x10 -/* 0701CC 8006F5CC 2508FFFF */ addiu $t0, $t0, -1 -/* 0701D0 8006F5D0 5500FFEC */ bnezl $t0, .L8006F584 -/* 0701D4 8006F5D4 00000000 */ nop -/* 0701D8 8006F5D8 03E00008 */ jr $ra -/* 0701DC 8006F5DC 00000000 */ nop - diff --git a/asm/unknown_070110/func_8006F570.s b/asm/unknown_070110/func_8006F570.s new file mode 100644 index 00000000..7c05794a --- /dev/null +++ b/asm/unknown_070110/func_8006F570.s @@ -0,0 +1,4 @@ +glabel func_8006F570 +/* 070170 8006F570 3C02800E */ lui $v0, %hi(D_800DD430) # $v0, 0x800e +/* 070174 8006F574 03E00008 */ jr $ra +/* 070178 8006F578 9042D430 */ lbu $v0, %lo(D_800DD430)($v0) diff --git a/asm/unknown_070110/func_8006F57C.s b/asm/unknown_070110/func_8006F57C.s new file mode 100644 index 00000000..7ad82a1f --- /dev/null +++ b/asm/unknown_070110/func_8006F57C.s @@ -0,0 +1,27 @@ +glabel func_8006F57C +/* 07017C 8006F57C 34080004 */ ori $t0, $zero, 4 +/* 070180 8006F580 3C0FFFFF */ lui $t7, 0xffff +.L8006F584: +/* 070184 8006F584 8C890000 */ lw $t1, ($a0) +/* 070188 8006F588 8C8A0020 */ lw $t2, 0x20($a0) +/* 07018C 8006F58C 8C8B0004 */ lw $t3, 4($a0) +/* 070190 8006F590 8C8C0024 */ lw $t4, 0x24($a0) +/* 070194 8006F594 A4A90004 */ sh $t1, 4($a1) +/* 070198 8006F598 A4AA0006 */ sh $t2, 6($a1) +/* 07019C 8006F59C A4AB000C */ sh $t3, 0xc($a1) +/* 0701A0 8006F5A0 A4AC000E */ sh $t4, 0xe($a1) +/* 0701A4 8006F5A4 00094C02 */ srl $t1, $t1, 0x10 +/* 0701A8 8006F5A8 000A5402 */ srl $t2, $t2, 0x10 +/* 0701AC 8006F5AC 000B5C02 */ srl $t3, $t3, 0x10 +/* 0701B0 8006F5B0 000C6402 */ srl $t4, $t4, 0x10 +/* 0701B4 8006F5B4 24840008 */ addiu $a0, $a0, 8 +/* 0701B8 8006F5B8 A4A90000 */ sh $t1, ($a1) +/* 0701BC 8006F5BC A4AA0002 */ sh $t2, 2($a1) +/* 0701C0 8006F5C0 A4AB0008 */ sh $t3, 8($a1) +/* 0701C4 8006F5C4 A4AC000A */ sh $t4, 0xa($a1) +/* 0701C8 8006F5C8 20A50010 */ addi $a1, $a1, 0x10 +/* 0701CC 8006F5CC 2508FFFF */ addiu $t0, $t0, -1 +/* 0701D0 8006F5D0 5500FFEC */ bnezl $t0, .L8006F584 +/* 0701D4 8006F5D4 00000000 */ nop +/* 0701D8 8006F5D8 03E00008 */ jr $ra +/* 0701DC 8006F5DC 00000000 */ nop diff --git a/asm/unknown_070110/func_8006F9B8.s b/asm/unknown_070110/func_8006F9B8.s index 9fccfc2e..6a805d2c 100644 --- a/asm/unknown_070110/func_8006F9B8.s +++ b/asm/unknown_070110/func_8006F9B8.s @@ -34,78 +34,3 @@ glabel func_8006F9B8 /* 070638 8006FA38 03E00008 */ jr $ra /* 07063C 8006FA3C A48D000A */ sh $t5, 0xa($a0) -/* 070640 8006FA40 340A0010 */ ori $t2, $zero, 16 -/* 070644 8006FA44 016B5826 */ xor $t3, $t3, $t3 -.L8006FA48: -/* 070648 8006FA48 84880000 */ lh $t0, ($a0) -/* 07064C 8006FA4C 94890020 */ lhu $t1, 0x20($a0) -/* 070650 8006FA50 20840002 */ addi $a0, $a0, 2 -/* 070654 8006FA54 00084400 */ sll $t0, $t0, 0x10 -/* 070658 8006FA58 01094025 */ or $t0, $t0, $t1 -/* 07065C 8006FA5C ACA80000 */ sw $t0, ($a1) -/* 070660 8006FA60 20A50004 */ addi $a1, $a1, 4 -/* 070664 8006FA64 256B0001 */ addiu $t3, $t3, 1 -/* 070668 8006FA68 556AFFF7 */ bnel $t3, $t2, .L8006FA48 -/* 07066C 8006FA6C 00000000 */ nop -/* 070670 8006FA70 03E00008 */ jr $ra -/* 070674 8006FA74 00000000 */ nop - -/* 070678 8006FA78 84A80000 */ lh $t0, ($a1) -/* 07067C 8006FA7C 8C8B0000 */ lw $t3, ($a0) -/* 070680 8006FA80 84A90002 */ lh $t1, 2($a1) -/* 070684 8006FA84 84AA0004 */ lh $t2, 4($a1) -/* 070688 8006FA88 010B0018 */ mult $t0, $t3 -/* 07068C 8006FA8C 8C8B0010 */ lw $t3, 0x10($a0) -/* 070690 8006FA90 00006012 */ mflo $t4 -/* 070694 8006FA94 00000000 */ nop -/* 070698 8006FA98 00000000 */ nop -/* 07069C 8006FA9C 012B0018 */ mult $t1, $t3 -/* 0706A0 8006FAA0 8C8B0020 */ lw $t3, 0x20($a0) -/* 0706A4 8006FAA4 00006812 */ mflo $t5 -/* 0706A8 8006FAA8 018D6020 */ add $t4, $t4, $t5 -/* 0706AC 8006FAAC 00000000 */ nop -/* 0706B0 8006FAB0 014B0018 */ mult $t2, $t3 -/* 0706B4 8006FAB4 8C8B0030 */ lw $t3, 0x30($a0) -/* 0706B8 8006FAB8 00007012 */ mflo $t6 -/* 0706BC 8006FABC 018E6020 */ add $t4, $t4, $t6 -/* 0706C0 8006FAC0 018B6020 */ add $t4, $t4, $t3 -/* 0706C4 8006FAC4 000C6403 */ sra $t4, $t4, 0x10 -/* 0706C8 8006FAC8 A4AC0000 */ sh $t4, ($a1) -/* 0706CC 8006FACC 8C8B0004 */ lw $t3, 4($a0) -/* 0706D0 8006FAD0 010B0018 */ mult $t0, $t3 -/* 0706D4 8006FAD4 8C8B0014 */ lw $t3, 0x14($a0) -/* 0706D8 8006FAD8 00006012 */ mflo $t4 -/* 0706DC 8006FADC 00000000 */ nop -/* 0706E0 8006FAE0 00000000 */ nop -/* 0706E4 8006FAE4 012B0018 */ mult $t1, $t3 -/* 0706E8 8006FAE8 8C8B0024 */ lw $t3, 0x24($a0) -/* 0706EC 8006FAEC 00006812 */ mflo $t5 -/* 0706F0 8006FAF0 018D6020 */ add $t4, $t4, $t5 -/* 0706F4 8006FAF4 00000000 */ nop -/* 0706F8 8006FAF8 014B0018 */ mult $t2, $t3 -/* 0706FC 8006FAFC 8C8B0034 */ lw $t3, 0x34($a0) -/* 070700 8006FB00 00007012 */ mflo $t6 -/* 070704 8006FB04 018E6020 */ add $t4, $t4, $t6 -/* 070708 8006FB08 018B6020 */ add $t4, $t4, $t3 -/* 07070C 8006FB0C 000C6403 */ sra $t4, $t4, 0x10 -/* 070710 8006FB10 A4AC0002 */ sh $t4, 2($a1) -/* 070714 8006FB14 8C8B0008 */ lw $t3, 8($a0) -/* 070718 8006FB18 010B0018 */ mult $t0, $t3 -/* 07071C 8006FB1C 8C8B0018 */ lw $t3, 0x18($a0) -/* 070720 8006FB20 00006012 */ mflo $t4 -/* 070724 8006FB24 00000000 */ nop -/* 070728 8006FB28 00000000 */ nop -/* 07072C 8006FB2C 012B0018 */ mult $t1, $t3 -/* 070730 8006FB30 8C8B0028 */ lw $t3, 0x28($a0) -/* 070734 8006FB34 00006812 */ mflo $t5 -/* 070738 8006FB38 018D6020 */ add $t4, $t4, $t5 -/* 07073C 8006FB3C 00000000 */ nop -/* 070740 8006FB40 014B0018 */ mult $t2, $t3 -/* 070744 8006FB44 8C8B0038 */ lw $t3, 0x38($a0) -/* 070748 8006FB48 00007012 */ mflo $t6 -/* 07074C 8006FB4C 018E6020 */ add $t4, $t4, $t6 -/* 070750 8006FB50 018B6020 */ add $t4, $t4, $t3 -/* 070754 8006FB54 000C6403 */ sra $t4, $t4, 0x10 -/* 070758 8006FB58 03E00008 */ jr $ra -/* 07075C 8006FB5C A4AC0004 */ sh $t4, 4($a1) - diff --git a/asm/unknown_070110/func_8006FA40.s b/asm/unknown_070110/func_8006FA40.s new file mode 100644 index 00000000..289affbc --- /dev/null +++ b/asm/unknown_070110/func_8006FA40.s @@ -0,0 +1,16 @@ +glabel func_8006FA40 +/* 070640 8006FA40 340A0010 */ ori $t2, $zero, 16 +/* 070644 8006FA44 016B5826 */ xor $t3, $t3, $t3 +.L8006FA48: +/* 070648 8006FA48 84880000 */ lh $t0, ($a0) +/* 07064C 8006FA4C 94890020 */ lhu $t1, 0x20($a0) +/* 070650 8006FA50 20840002 */ addi $a0, $a0, 2 +/* 070654 8006FA54 00084400 */ sll $t0, $t0, 0x10 +/* 070658 8006FA58 01094025 */ or $t0, $t0, $t1 +/* 07065C 8006FA5C ACA80000 */ sw $t0, ($a1) +/* 070660 8006FA60 20A50004 */ addi $a1, $a1, 4 +/* 070664 8006FA64 256B0001 */ addiu $t3, $t3, 1 +/* 070668 8006FA68 556AFFF7 */ bnel $t3, $t2, .L8006FA48 +/* 07066C 8006FA6C 00000000 */ nop +/* 070670 8006FA70 03E00008 */ jr $ra +/* 070674 8006FA74 00000000 */ nop diff --git a/asm/unknown_070110/func_8006FA78.s b/asm/unknown_070110/func_8006FA78.s new file mode 100644 index 00000000..cc2d4ace --- /dev/null +++ b/asm/unknown_070110/func_8006FA78.s @@ -0,0 +1,59 @@ +glabel func_8006FA78 +/* 070678 8006FA78 84A80000 */ lh $t0, ($a1) +/* 07067C 8006FA7C 8C8B0000 */ lw $t3, ($a0) +/* 070680 8006FA80 84A90002 */ lh $t1, 2($a1) +/* 070684 8006FA84 84AA0004 */ lh $t2, 4($a1) +/* 070688 8006FA88 010B0018 */ mult $t0, $t3 +/* 07068C 8006FA8C 8C8B0010 */ lw $t3, 0x10($a0) +/* 070690 8006FA90 00006012 */ mflo $t4 +/* 070694 8006FA94 00000000 */ nop +/* 070698 8006FA98 00000000 */ nop +/* 07069C 8006FA9C 012B0018 */ mult $t1, $t3 +/* 0706A0 8006FAA0 8C8B0020 */ lw $t3, 0x20($a0) +/* 0706A4 8006FAA4 00006812 */ mflo $t5 +/* 0706A8 8006FAA8 018D6020 */ add $t4, $t4, $t5 +/* 0706AC 8006FAAC 00000000 */ nop +/* 0706B0 8006FAB0 014B0018 */ mult $t2, $t3 +/* 0706B4 8006FAB4 8C8B0030 */ lw $t3, 0x30($a0) +/* 0706B8 8006FAB8 00007012 */ mflo $t6 +/* 0706BC 8006FABC 018E6020 */ add $t4, $t4, $t6 +/* 0706C0 8006FAC0 018B6020 */ add $t4, $t4, $t3 +/* 0706C4 8006FAC4 000C6403 */ sra $t4, $t4, 0x10 +/* 0706C8 8006FAC8 A4AC0000 */ sh $t4, ($a1) +/* 0706CC 8006FACC 8C8B0004 */ lw $t3, 4($a0) +/* 0706D0 8006FAD0 010B0018 */ mult $t0, $t3 +/* 0706D4 8006FAD4 8C8B0014 */ lw $t3, 0x14($a0) +/* 0706D8 8006FAD8 00006012 */ mflo $t4 +/* 0706DC 8006FADC 00000000 */ nop +/* 0706E0 8006FAE0 00000000 */ nop +/* 0706E4 8006FAE4 012B0018 */ mult $t1, $t3 +/* 0706E8 8006FAE8 8C8B0024 */ lw $t3, 0x24($a0) +/* 0706EC 8006FAEC 00006812 */ mflo $t5 +/* 0706F0 8006FAF0 018D6020 */ add $t4, $t4, $t5 +/* 0706F4 8006FAF4 00000000 */ nop +/* 0706F8 8006FAF8 014B0018 */ mult $t2, $t3 +/* 0706FC 8006FAFC 8C8B0034 */ lw $t3, 0x34($a0) +/* 070700 8006FB00 00007012 */ mflo $t6 +/* 070704 8006FB04 018E6020 */ add $t4, $t4, $t6 +/* 070708 8006FB08 018B6020 */ add $t4, $t4, $t3 +/* 07070C 8006FB0C 000C6403 */ sra $t4, $t4, 0x10 +/* 070710 8006FB10 A4AC0002 */ sh $t4, 2($a1) +/* 070714 8006FB14 8C8B0008 */ lw $t3, 8($a0) +/* 070718 8006FB18 010B0018 */ mult $t0, $t3 +/* 07071C 8006FB1C 8C8B0018 */ lw $t3, 0x18($a0) +/* 070720 8006FB20 00006012 */ mflo $t4 +/* 070724 8006FB24 00000000 */ nop +/* 070728 8006FB28 00000000 */ nop +/* 07072C 8006FB2C 012B0018 */ mult $t1, $t3 +/* 070730 8006FB30 8C8B0028 */ lw $t3, 0x28($a0) +/* 070734 8006FB34 00006812 */ mflo $t5 +/* 070738 8006FB38 018D6020 */ add $t4, $t4, $t5 +/* 07073C 8006FB3C 00000000 */ nop +/* 070740 8006FB40 014B0018 */ mult $t2, $t3 +/* 070744 8006FB44 8C8B0038 */ lw $t3, 0x38($a0) +/* 070748 8006FB48 00007012 */ mflo $t6 +/* 07074C 8006FB4C 018E6020 */ add $t4, $t4, $t6 +/* 070750 8006FB50 018B6020 */ add $t4, $t4, $t3 +/* 070754 8006FB54 000C6403 */ sra $t4, $t4, 0x10 +/* 070758 8006FB58 03E00008 */ jr $ra +/* 07075C 8006FB5C A4AC0004 */ sh $t4, 4($a1) diff --git a/asm/unknown_070110/func_80070780.s b/asm/unknown_070110/func_80070780.s new file mode 100644 index 00000000..cf32c008 --- /dev/null +++ b/asm/unknown_070110/func_80070780.s @@ -0,0 +1,12 @@ +glabel func_80070780 +/* 071380 80070780 44840000 */ mtc1 $a0, $f0 +/* 071384 80070784 3C014780 */ li $at, 0x47800000 # 65536.000000 +/* 071388 80070788 44811000 */ mtc1 $at, $f2 +/* 07138C 8007078C 46800020 */ cvt.s.w $f0, $f0 +/* 071390 80070790 46020003 */ div.s $f0, $f0, $f2 +/* 071394 80070794 46000004 */ sqrt.s $f0, $f0 +/* 071398 80070798 46020002 */ mul.s $f0, $f0, $f2 +/* 07139C 8007079C 46000024 */ cvt.w.s $f0, $f0 +/* 0713A0 800707A0 44020000 */ mfc1 $v0, $f0 +/* 0713A4 800707A4 03E00008 */ jr $ra +/* 0713A8 800707A8 00000000 */ nop diff --git a/asm/unknown_070110/func_800707AC.s b/asm/unknown_070110/func_800707AC.s new file mode 100644 index 00000000..3a2b5099 --- /dev/null +++ b/asm/unknown_070110/func_800707AC.s @@ -0,0 +1,7 @@ +glabel func_800707AC +/* 0713AC 800707AC 44840000 */ mtc1 $a0, $f0 +/* 0713B0 800707B0 00000000 */ nop +/* 0713B4 800707B4 46000004 */ sqrt.s $f0, $f0 +/* 0713B8 800707B8 44020000 */ mfc1 $v0, $f0 +/* 0713BC 800707BC 03E00008 */ jr $ra +/* 0713C0 800707C0 00000000 */ nop diff --git a/asm/unknown_070110/func_80070890.s b/asm/unknown_070110/func_80070890.s index 9f389377..479d7145 100644 --- a/asm/unknown_070110/func_80070890.s +++ b/asm/unknown_070110/func_80070890.s @@ -1,3 +1,4 @@ +glabel func_8007088C /* 07148C 8007088C 24844000 */ addiu $a0, $a0, 0x4000 glabel func_80070890 /* 071490 80070890 00041440 */ sll $v0, $a0, 0x11 @@ -18,98 +19,3 @@ glabel func_80070890 .L800708C8: /* 0714C8 800708C8 03E00008 */ jr $ra /* 0714CC 800708CC 00000000 */ nop - -/* 0714D0 800708D0 8CA90000 */ lw $t1, ($a1) -/* 0714D4 800708D4 8CAA0004 */ lw $t2, 4($a1) -/* 0714D8 800708D8 8CAB0008 */ lw $t3, 8($a1) -/* 0714DC 800708DC 94880020 */ lhu $t0, 0x20($a0) -/* 0714E0 800708E0 8C86000C */ lw $a2, 0xc($a0) -/* 0714E4 800708E4 8C85002C */ lw $a1, 0x2c($a0) -/* 0714E8 800708E8 8C840000 */ lw $a0, ($a0) -/* 0714EC 800708EC 00421026 */ xor $v0, $v0, $v0 -.L800708F0: -/* 0714F0 800708F0 90CC0006 */ lbu $t4, 6($a2) -/* 0714F4 800708F4 258CFF01 */ addiu $t4, $t4, -0xff -/* 0714F8 800708F8 51800043 */ beql $t4, $zero, .L80070A08 -/* 0714FC 800708FC 94CC0002 */ lhu $t4, 2($a2) -/* 071500 80070900 5040000C */ beql $v0, $zero, .L80070934 -/* 071504 80070904 00000000 */ nop -/* 071508 80070908 340C000A */ ori $t4, $zero, 10 -/* 07150C 8007090C 004C0019 */ multu $v0, $t4 -/* 071510 80070910 340D000A */ ori $t5, $zero, 10 -/* 071514 80070914 00006012 */ mflo $t4 -/* 071518 80070918 008C2021 */ addu $a0, $a0, $t4 -/* 07151C 8007091C 00000000 */ nop -/* 071520 80070920 004D0019 */ multu $v0, $t5 -/* 071524 80070924 00421026 */ xor $v0, $v0, $v0 -/* 071528 80070928 00006812 */ mflo $t5 -/* 07152C 8007092C 00AD2821 */ addu $a1, $a1, $t5 -/* 071530 80070930 00000000 */ nop -.L80070934: -/* 071534 80070934 94CD0002 */ lhu $t5, 2($a2) -/* 071538 80070938 94CC000E */ lhu $t4, 0xe($a2) -/* 07153C 8007093C 24C6000C */ addiu $a2, $a2, 0xc -/* 071540 80070940 018D6023 */ subu $t4, $t4, $t5 -.L80070944: -/* 071544 80070944 84AD0000 */ lh $t5, ($a1) -/* 071548 80070948 84AE0002 */ lh $t6, 2($a1) -/* 07154C 8007094C 84AF0004 */ lh $t7, 4($a1) -/* 071550 80070950 01A90018 */ mult $t5, $t1 -/* 071554 80070954 90B80007 */ lbu $t8, 7($a1) -/* 071558 80070958 90A70006 */ lbu $a3, 6($a1) -/* 07155C 8007095C 90B90008 */ lbu $t9, 8($a1) -/* 071560 80070960 0018C400 */ sll $t8, $t8, 0x10 -/* 071564 80070964 90A30009 */ lbu $v1, 9($a1) -/* 071568 80070968 00F8C025 */ or $t8, $a3, $t8 -/* 07156C 8007096C 00006812 */ mflo $t5 -/* 071570 80070970 00000000 */ nop -/* 071574 80070974 00000000 */ nop -/* 071578 80070978 01CA0018 */ mult $t6, $t2 -/* 07157C 8007097C 00007012 */ mflo $t6 -/* 071580 80070980 01AE6820 */ add $t5, $t5, $t6 -/* 071584 80070984 00000000 */ nop -/* 071588 80070988 01EB0018 */ mult $t7, $t3 -/* 07158C 8007098C 00007812 */ mflo $t7 -/* 071590 80070990 01AF6820 */ add $t5, $t5, $t7 -/* 071594 80070994 19A00007 */ blez $t5, .L800709B4 -/* 071598 80070998 00000000 */ nop -/* 07159C 8007099C 000D6D82 */ srl $t5, $t5, 0x16 -/* 0715A0 800709A0 006D1821 */ addu $v1, $v1, $t5 -/* 0715A4 800709A4 2C6D0081 */ sltiu $t5, $v1, 0x81 -/* 0715A8 800709A8 15A00002 */ bnez $t5, .L800709B4 -/* 0715AC 800709AC 00000000 */ nop -/* 0715B0 800709B0 34030080 */ ori $v1, $zero, 128 -.L800709B4: -/* 0715B4 800709B4 00780019 */ multu $v1, $t8 -/* 0715B8 800709B8 24A5000A */ addiu $a1, $a1, 0xa -/* 0715BC 800709BC 258CFFFF */ addiu $t4, $t4, -1 -/* 0715C0 800709C0 2484000A */ addiu $a0, $a0, 0xa -/* 0715C4 800709C4 0000C012 */ mflo $t8 -/* 0715C8 800709C8 0018C1C2 */ srl $t8, $t8, 7 -/* 0715CC 800709CC A098FFFC */ sb $t8, -4($a0) -/* 0715D0 800709D0 00790019 */ multu $v1, $t9 -/* 0715D4 800709D4 0018C402 */ srl $t8, $t8, 0x10 -/* 0715D8 800709D8 A098FFFD */ sb $t8, -3($a0) -/* 0715DC 800709DC 0000C812 */ mflo $t9 -/* 0715E0 800709E0 0019C9C2 */ srl $t9, $t9, 7 -/* 0715E4 800709E4 A099FFFE */ sb $t9, -2($a0) -/* 0715E8 800709E8 5580FFD6 */ bnezl $t4, .L80070944 -/* 0715EC 800709EC 00000000 */ nop -/* 0715F0 800709F0 2508FFFF */ addiu $t0, $t0, -1 -/* 0715F4 800709F4 5500FFBE */ bnezl $t0, .L800708F0 -/* 0715F8 800709F8 00000000 */ nop -/* 0715FC 800709FC 03E00008 */ jr $ra -/* 071600 80070A00 00000000 */ nop - -/* 071604 80070A04 94CC0002 */ lhu $t4, 2($a2) -.L80070A08: -/* 071608 80070A08 94CD000E */ lhu $t5, 0xe($a2) -/* 07160C 80070A0C 24C6000C */ addiu $a2, $a2, 0xc -/* 071610 80070A10 2508FFFF */ addiu $t0, $t0, -1 -/* 071614 80070A14 01AC6023 */ subu $t4, $t5, $t4 -/* 071618 80070A18 004C1021 */ addu $v0, $v0, $t4 -/* 07161C 80070A1C 5500FFB4 */ bnezl $t0, .L800708F0 -/* 071620 80070A20 00000000 */ nop -/* 071624 80070A24 03E00008 */ jr $ra -/* 071628 80070A28 00000000 */ nop - diff --git a/asm/unknown_070110/func_800708D0.s b/asm/unknown_070110/func_800708D0.s new file mode 100644 index 00000000..29411c30 --- /dev/null +++ b/asm/unknown_070110/func_800708D0.s @@ -0,0 +1,98 @@ +glabel func_800708D0 +/* 0714D0 800708D0 8CA90000 */ lw $t1, ($a1) +/* 0714D4 800708D4 8CAA0004 */ lw $t2, 4($a1) +/* 0714D8 800708D8 8CAB0008 */ lw $t3, 8($a1) +/* 0714DC 800708DC 94880020 */ lhu $t0, 0x20($a0) +/* 0714E0 800708E0 8C86000C */ lw $a2, 0xc($a0) +/* 0714E4 800708E4 8C85002C */ lw $a1, 0x2c($a0) +/* 0714E8 800708E8 8C840000 */ lw $a0, ($a0) +/* 0714EC 800708EC 00421026 */ xor $v0, $v0, $v0 +.L800708F0: +/* 0714F0 800708F0 90CC0006 */ lbu $t4, 6($a2) +/* 0714F4 800708F4 258CFF01 */ addiu $t4, $t4, -0xff +/* 0714F8 800708F8 51800043 */ beql $t4, $zero, .L80070A08 +/* 0714FC 800708FC 94CC0002 */ lhu $t4, 2($a2) +/* 071500 80070900 5040000C */ beql $v0, $zero, .L80070934 +/* 071504 80070904 00000000 */ nop +/* 071508 80070908 340C000A */ ori $t4, $zero, 10 +/* 07150C 8007090C 004C0019 */ multu $v0, $t4 +/* 071510 80070910 340D000A */ ori $t5, $zero, 10 +/* 071514 80070914 00006012 */ mflo $t4 +/* 071518 80070918 008C2021 */ addu $a0, $a0, $t4 +/* 07151C 8007091C 00000000 */ nop +/* 071520 80070920 004D0019 */ multu $v0, $t5 +/* 071524 80070924 00421026 */ xor $v0, $v0, $v0 +/* 071528 80070928 00006812 */ mflo $t5 +/* 07152C 8007092C 00AD2821 */ addu $a1, $a1, $t5 +/* 071530 80070930 00000000 */ nop +.L80070934: +/* 071534 80070934 94CD0002 */ lhu $t5, 2($a2) +/* 071538 80070938 94CC000E */ lhu $t4, 0xe($a2) +/* 07153C 8007093C 24C6000C */ addiu $a2, $a2, 0xc +/* 071540 80070940 018D6023 */ subu $t4, $t4, $t5 +.L80070944: +/* 071544 80070944 84AD0000 */ lh $t5, ($a1) +/* 071548 80070948 84AE0002 */ lh $t6, 2($a1) +/* 07154C 8007094C 84AF0004 */ lh $t7, 4($a1) +/* 071550 80070950 01A90018 */ mult $t5, $t1 +/* 071554 80070954 90B80007 */ lbu $t8, 7($a1) +/* 071558 80070958 90A70006 */ lbu $a3, 6($a1) +/* 07155C 8007095C 90B90008 */ lbu $t9, 8($a1) +/* 071560 80070960 0018C400 */ sll $t8, $t8, 0x10 +/* 071564 80070964 90A30009 */ lbu $v1, 9($a1) +/* 071568 80070968 00F8C025 */ or $t8, $a3, $t8 +/* 07156C 8007096C 00006812 */ mflo $t5 +/* 071570 80070970 00000000 */ nop +/* 071574 80070974 00000000 */ nop +/* 071578 80070978 01CA0018 */ mult $t6, $t2 +/* 07157C 8007097C 00007012 */ mflo $t6 +/* 071580 80070980 01AE6820 */ add $t5, $t5, $t6 +/* 071584 80070984 00000000 */ nop +/* 071588 80070988 01EB0018 */ mult $t7, $t3 +/* 07158C 8007098C 00007812 */ mflo $t7 +/* 071590 80070990 01AF6820 */ add $t5, $t5, $t7 +/* 071594 80070994 19A00007 */ blez $t5, .L800709B4 +/* 071598 80070998 00000000 */ nop +/* 07159C 8007099C 000D6D82 */ srl $t5, $t5, 0x16 +/* 0715A0 800709A0 006D1821 */ addu $v1, $v1, $t5 +/* 0715A4 800709A4 2C6D0081 */ sltiu $t5, $v1, 0x81 +/* 0715A8 800709A8 15A00002 */ bnez $t5, .L800709B4 +/* 0715AC 800709AC 00000000 */ nop +/* 0715B0 800709B0 34030080 */ ori $v1, $zero, 128 +.L800709B4: +/* 0715B4 800709B4 00780019 */ multu $v1, $t8 +/* 0715B8 800709B8 24A5000A */ addiu $a1, $a1, 0xa +/* 0715BC 800709BC 258CFFFF */ addiu $t4, $t4, -1 +/* 0715C0 800709C0 2484000A */ addiu $a0, $a0, 0xa +/* 0715C4 800709C4 0000C012 */ mflo $t8 +/* 0715C8 800709C8 0018C1C2 */ srl $t8, $t8, 7 +/* 0715CC 800709CC A098FFFC */ sb $t8, -4($a0) +/* 0715D0 800709D0 00790019 */ multu $v1, $t9 +/* 0715D4 800709D4 0018C402 */ srl $t8, $t8, 0x10 +/* 0715D8 800709D8 A098FFFD */ sb $t8, -3($a0) +/* 0715DC 800709DC 0000C812 */ mflo $t9 +/* 0715E0 800709E0 0019C9C2 */ srl $t9, $t9, 7 +/* 0715E4 800709E4 A099FFFE */ sb $t9, -2($a0) +/* 0715E8 800709E8 5580FFD6 */ bnezl $t4, .L80070944 +/* 0715EC 800709EC 00000000 */ nop +/* 0715F0 800709F0 2508FFFF */ addiu $t0, $t0, -1 +/* 0715F4 800709F4 5500FFBE */ bnezl $t0, .L800708F0 +/* 0715F8 800709F8 00000000 */ nop +/* 0715FC 800709FC 03E00008 */ jr $ra +/* 071600 80070A00 00000000 */ nop + +# Unused and a bit of a weird case. +# It blends into func_800708D0 if t0 != 0, +# and func_800708D0 can jump into this from instruction 2 +glabel func_80070A04 +/* 071604 80070A04 94CC0002 */ lhu $t4, 2($a2) +.L80070A08: +/* 071608 80070A08 94CD000E */ lhu $t5, 0xe($a2) +/* 07160C 80070A0C 24C6000C */ addiu $a2, $a2, 0xc +/* 071610 80070A10 2508FFFF */ addiu $t0, $t0, -1 +/* 071614 80070A14 01AC6023 */ subu $t4, $t5, $t4 +/* 071618 80070A18 004C1021 */ addu $v0, $v0, $t4 +/* 07161C 80070A1C 5500FFB4 */ bnezl $t0, .L800708F0 +/* 071620 80070A20 00000000 */ nop +/* 071624 80070A24 03E00008 */ jr $ra +/* 071628 80070A28 00000000 */ nop diff --git a/asm/unknown_070110/func_80070A2C.s b/asm/unknown_070110/func_80070A2C.s index 0520d43d..16c22d40 100644 --- a/asm/unknown_070110/func_80070A2C.s +++ b/asm/unknown_070110/func_80070A2C.s @@ -44,15 +44,4 @@ glabel func_80070A2C /* 0716D0 80070AD0 03E00008 */ jr $ra /* 0716D4 80070AD4 46000004 */ sqrt.s $f0, $f0 -/* 0716D8 80070AD8 34840001 */ ori $a0, $a0, 1 -/* 0716DC 80070ADC 40849000 */ mtc0 $a0, $18 -/* 0716E0 80070AE0 2408000F */ li $t0, 15 -/* 0716E4 80070AE4 40889800 */ mtc0 $t0, $19 -/* 0716E8 80070AE8 00000000 */ nop -/* 0716EC 80070AEC 00000000 */ nop -/* 0716F0 80070AF0 00000000 */ nop -/* 0716F4 80070AF4 00000000 */ nop -/* 0716F8 80070AF8 00000000 */ nop -/* 0716FC 80070AFC 03E00008 */ jr $ra -/* 071700 80070B00 00000000 */ nop diff --git a/asm/unknown_070110/rng.s b/asm/unknown_070110/rng.s index e76a1f9a..5305ccee 100644 --- a/asm/unknown_070110/rng.s +++ b/asm/unknown_070110/rng.s @@ -1,3 +1,28 @@ +/* +https://decomp.me/scratch/s8fPG +//-O2 -mips2 +extern s32 D_800DD434; +extern s32 D_800DD438; + +void set_rng_seed(s32 arg0) { + D_800DD434 = arg0; +} + +void save_rng_seed(s32 arg0) { + arg0 = D_800DD434; + D_800DD438 = arg0; +} + +void load_rng_seed(s32 arg0) { + arg0 = D_800DD438; + D_800DD434 = arg0; +} + +s32 get_rng_seed(void) { + return D_800DD434; +} +*/ + glabel set_rng_seed /* 07050C 8006F90C 3C01800E */ lui $at, %hi(D_800DD434) /* 070510 8006F910 03E00008 */ jr $ra diff --git a/asm/unknown_070110/set_breakpoint.s b/asm/unknown_070110/set_breakpoint.s new file mode 100644 index 00000000..f02ddd78 --- /dev/null +++ b/asm/unknown_070110/set_breakpoint.s @@ -0,0 +1,13 @@ +# void set_breakpoint(u32 addr); - Sets a breakpoint on physical address +glabel set_breakpoint +/* 0716D8 80070AD8 34840001 */ ori $a0, $a0, 1 # SET WATCHLO_WTRAP ON - when set traps on stores to paddr; +/* 0716DC 80070ADC 40849000 */ mtc0 $a0, $18 # C0_WATCHLO +/* 0716E0 80070AE0 2408000F */ li $t0, 15 # WATCHHI_VALIDMASK +/* 0716E4 80070AE4 40889800 */ mtc0 $t0, $19 # C0_WATCHHI +/* 0716E8 80070AE8 00000000 */ nop +/* 0716EC 80070AEC 00000000 */ nop +/* 0716F0 80070AF0 00000000 */ nop +/* 0716F4 80070AF4 00000000 */ nop +/* 0716F8 80070AF8 00000000 */ nop +/* 0716FC 80070AFC 03E00008 */ jr $ra +/* 071700 80070B00 00000000 */ nop diff --git a/include/math_util.h b/include/math_util.h index 54c30b19..2365afb0 100644 --- a/include/math_util.h +++ b/include/math_util.h @@ -24,6 +24,6 @@ s16 arctan2_f(f32 y, f32 x); f32 sine_s(s16 angle); f32 cosine_s(s16 angle); void func_80031130(s32, f32*, f32*, s32); -s32 func_80031600(f32*, f32*, s32*, s8* surface, s32, s32*); +s32 func_80031600(f32*, f32*, f32*, s8* surface, s32, s32*); #endif // MATH_UTIL_H diff --git a/include/sound_ids.h b/include/sound_ids.h index a78fddc1..8cbbe399 100644 --- a/include/sound_ids.h +++ b/include/sound_ids.h @@ -12,648 +12,647 @@ // Anything I've labelled as UNK, without a comment, is something I didn't get an audible sound from. enum SoundID { - SOUND_UNK00, - SOUND_CAR_SLIDE, - SOUND_CAR_SLIDE2, // Not sure what this is for. I thought it was for the brakes originally, but there's clearly a brake - SOUND_INTRO_PLANE, - SOUND_INTRO_KIDS, - SOUND_UNK_05, // Sounds like something sifting, idk. - SOUND_UNK_06, // Same thing, but faster - SOUND_UNK_07, - SOUND_UNK_08, - SOUND_STOMP, - SOUND_UNK_0A, - SOUND_UNK_0B, - SOUND_CRASH, - SOUND_CRASH2, // Not the same as the last, sounds like a cymbal or something. - SOUND_BALLOON_POP, - SOUND_PLOP, // Dropping a landmine - SOUND_UNK_10, - SOUND_EXPLOSION, - SOUND_NYOOM, // Firing a rocket. - SOUND_UNK_13, - SOUND_UNK_14, - SOUND_UNK_15, - SOUND_WHOOSH1, // The hud flying in on a race start. - SOUND_EXPLOSION2, // Not sure what this one's for. - SOUND_VOICE_TT_GET_READY, - SOUND_VOICE_TT_GO, - SOUND_UNK_1A, - SOUND_UNK_1B, - SOUND_CAR_BRAKE, - SOUND_UNK_1D, - SOUND_UNK_1E, - SOUND_UNK_1F, - SOUND_UNK_20, - SOUND_NITRO_BOOST, - SOUND_SELECT, - SOUND_VOICE_TAJ_CUTSCENE_0, // "Woah there!" - SOUND_VOICE_TAJ_CUTSCENE_1, // "Hello, friend." - SOUND_VOICE_TAJ_WAHEY, - SOUND_VOICE_TAJ_HOHO, - SOUND_LIGHTNING, - SOUND_VOICE_TAJ_WOAH, - SOUND_VOICE_TAJ_HINT, // "I've got something special for you." - SOUND_UNK_2A, // Sounds like a wave or something, not sure. - SOUND_RIBBIT, // :frog: - SOUND_SPLOOSH, - SOUND_VOICE_TAJ_WINNER, // "You won first prize!" - SOUND_VOICE_CONKER_YEHAHA, - SOUND_VOICE_TIMBER_WOW, - SOUND_WHOOSH2, // This is a transition before a Taj Tech Tip. - SOUND_WHOOSH3, // Don't remember what this is but I know it's used somewhere. - SOUND_VOICE_TAJ_BALLOON, // "This is for you." - SOUND_UNK_33, // Some softer gong thing maybe? - SOUND_TWINKLE, // Sounds like a lower, slower version of SOUND_SELECT - SOUND_VOICE_WIZPIG_LAUGH, - SOUND_NYOOM_HIGH, // High pitched nyoom. - SOUND_UNK_37, // I cannot describe tbis. uhh, a car coming past? really I can't say - SOUND_VOICE_TT_RADIO, // "Okay control" remind me to find the subtitles for this lol. It's the rocket. - SOUND_DOOR_CLOSE, - SOUND_VOICE_TT_THREE, - SOUND_VOICE_TT_TWO, - SOUND_VOICE_BUMPER_OHNO, - SOUND_VOICE_TIPTUP_WAH, - SOUND_VOICE_TT_ONE, - SOUND_VOICE_TT_BLASTOFF, - SOUND_ROCKET_LAUNCH, - SOUND_UNK_41, // Sounds like an explosion sort. Likely related to the rocket. - SOUND_VOICE_DIDDY_LAUGH, - SOUND_VOICE_BANJO_GUHHUH, - SOUND_VOICE_DIDDY_LAUGH2, - SOUND_VOICE_PIPSY_LAUGH, - SOUND_VOICE_TIMBER_YEAH, - SOUND_VOICE_KRUNCH_HOHOO, - SOUND_VOICE_WIZPIG_LAUGH_SHORT, - SOUND_VOICE_TAJ_CUTSCENE2, // "I am the genie of the island." - SOUND_VOICE_PIPSY_YEHAW, - SOUND_VOICE_TAJ_CUTSCENE3, // "I'm here to help you." - SOUND_VOICE_TAJ_CUTSCENE4, // "Good luck!" - SOUND_VOICE_DIDDY_LAUGH_LOW, // Same as his regular laugh but lower pitch - SOUND_VOICE_UNK78, - SOUND_VOICE_UNK79, - SOUND_VOICE_UNK80, // "Yippee, lets party!" - SOUND_VOICE_WIZPIG_LAUGH2, - SOUND_VOICE_WIZPIG_LAUGH3, - SOUND_VOICE_WIZPIG_ENDING, // "Sorry to break the party worms, but I had to say goodbyte!" - SOUND_VOICE_WIZPIG_UNK0, // "Well lookie here, it's the little worm!" - SOUND_UNK_55, // Sounds like some future something - SOUND_VOICE_WIZPIG_SEEYA, // "See ya later, worms!" - SOUND_VOICE_WIZPIG_LAUGH4, - SOUND_VOICE_BLUEY_REMATCH1, // "Fantastic!" - SOUND_VOICE_BLUEY_REMATCH2, // "If you can beat me again..." - SOUND_VOICE_BLUEY_REMATCH3, // "I'll give you a special prize" - SOUND_UNK_58, // Might be the hovercraft engine. - SOUND_UNK_59, // Might be the car engine. - SOUND_TING_LOW, - SOUND_TING_HIGH, - SOUND_BOOST_LEVEL3, - SOUND_UNK_60, // Also not sure - SOUND_UNK_61, // Sounds like an earthquake, goes on for absolutely ever, but not a continuous sound. - SOUND_ELECTRIC_BUZZ, // Bzzzz! - SOUND_UNK_63, // sounds kind of like lightning but not 100% sure - SOUND_UNK_64, - SOUND_UNK_65, - SOUND_VOICE_TT_WRONG_WAY, - SOUND_VOICE_TT_NONONO, - SOUND_MENU_BACK, - SOUND_MENU_BACK2, // Appears to be exactly the same as the previous to my tonedeaf ears. - SOUND_UNK_6A, // Same thing as the previous but with an inverse wave. - SOUND_VOICE_WIZPIG_ENCOUNTER, // "You can't beat me!" - SOUND_VOICE_WIZPIG_DEFEAT, // "Gragh, no! No!" - SOUND_VOICE_WIZPIG_GROAN, - SOUND_VOICE_WIZPIG_SCREAM, - SOUND_ZAP, - SOUND_ZAP2, - SOUND_ZAP3, - SOUND_VOICE_WIZPIG_SCREAM2, - SOUND_VOICE_KRUNCH_LAUGH, - SOUND_UNK_74, // More lightning? - SOUND_VOICE_WIZPIG_SCREAM3, - SOUND_VOICE_DRUMSTUCK_BWAK, // Chicken noises intensify. - SOUND_VOICE_BLUEY_GOODBYE, // "Goodbye, Kid!" - SOUND_VOICE_BANJO_YAHOO, - SOUND_VOICE_BLUEY_SILVERCOINS2, // "Collect all the silver coins from the snow world" - SOUND_CAR_REV, // Selecting the car in the menu, and the initial revs at the start. - SOUND_UNK_7B, - SOUND_UNK_7C, - SOUND_UNK_7D, - SOUND_UNK_7E, - SOUND_UNK_7F, - SOUND_UNK_80, - SOUND_UNK_81, - SOUND_UNK_82, - SOUND_UNK_83, - SOUND_UNK_84, - SOUND_VOICE_BLUEY_TROPHY_CHALLENGE, // "Now try the trophy challenge" - SOUND_VOICE_BLUEY_AMULET, // "You've won a piece of the amulet" - SOUND_VOICE_KRUNCH_SELECT, // "My name's Krunch" - SOUND_VOICE_BUMPER_SELECT, // "My name's Bumper" - SOUND_VOICE_TIPTUP_SELECT, // "Hey, it's Tiptup" - SOUND_VOICE_CONKER_SELECT, // "I'm Conker" - SOUND_VOICE_TIMBER_SELECT, // "Timber" - SOUND_VOICE_BANJO_SELECT, // "I'm Banjo" - SOUND_VOICE_DRUMSTICK_SELECT, // "My name's Drumstick" - SOUND_VOICE_PIPSY_SELECT, // "I'm Pipsy" - SOUND_VOICE_TT_SELECT, // I'm T.T - SOUND_VOICE_DIDDY_SELECT, // "I'm Diddy" - SOUND_VOICE_BLUEY_RETRY, // "You can come back, whenever you're ready" - SOUND_VOICE_BLUEY_NEVERMIND, // "Ah, nevermind kid." - SOUND_VOICE_KRUNCH_EHH, - SOUND_VOICE_BUMPER_UHH, - SOUND_VOICE_TIPTUP_AHH, - SOUND_VOICE_CONKER_AHH, - SOUND_VOICE_TIMBER_RAGH, - SOUND_VOICE_BANJO_WOAH, - SOUND_VOICE_DRUMSTICK_WAH, - SOUND_VOICE_PIPSY_UHOH, - SOUND_VOICE_TT_WOAH, - SOUND_VOICE_DIDDY_WOAH, - SOUND_VOICE_BLUEY_SILVERCOINS3, // "Collect 8 from each level and win" - SOUND_VOICE_BLUEY_SILVERCOINS4, // "Then come back and see me" - SOUND_SHIELD, - SOUND_COLLECT_ITEM, - SOUND_COLLECT_ITEM_TIER2, - SOUND_COLLECT_ITEM_TIER3, - SOUND_VOICE_TRICKY_WOAH, - SOUND_VOICE_TRICKY_WOAH2, // Same as the last - SOUND_VOICE_TRICKY_HM, - SOUND_VOICE_TRICKY_HMMM, - SOUND_VOICE_BLUEY_EH, - SOUND_VOICE_BLUEY_OHNO, - SOUND_FLUTTERING, // idk - SOUND_PLANE_ENGINE, - SOUND_BOING, - SOUND_STOMP2, - SOUND_STOMP3, - SOUND_BOUNCE, - SOUND_UNK_AF, // sounds just like UNK5 - SOUND_FOOTSTEP, - SOUND_UNK_B1, // Very low pitch something - SOUND_MENU_PICK, - SOUND_VOICE_WIZPIG_LAUGH_SHORT2, - SOUND_VOICE_WIZPIG_LAUGH_SHORT3, - SOUND_VOICE_WIZPIG_HA, - SOUND_VOICE_WIZPIG_H2, - SOUND_VOICE_BLUEY_HAHA, - SOUND_VOICE_BLUEY_HAHA2, - SOUND_VOICE_BLUEY_SILVERCOINS1, // "Now try my new challenge" - SOUND_VOICE_TRICKY_ENCOUNTER1, // "Now I challenge you to a race" - SOUND_VOICE_TRICKY_SILVERCOINS1, // "Now try my new challenge" - SOUND_VOICE_TRICKY_SILVERCOINS2, // "Collect all the silver coins from the dino domain." - SOUND_VOICE_TRICKY_GOODTRY, // "Good one, kid" - SOUND_VOICE_TRICKY_NEVERMIND, // "Maybe next time." - SOUND_VOICE_TRICKY_RETRY, // "Come back whenever you're ready." - SOUND_VOICE_TRICKY_SILVERCOINS6, // "Then come back and see me" - SOUND_VOICE_TRICKY_TROPHY1, // "Well done kid" - SOUND_VOICE_TRICKY_TROPHY2, // "You've earned a piece of the amulet" - SOUND_VOICE_TRICKY_TROPHY3, // "Now try the trophy challenge" - SOUND_VOICE_TRICKY_TROPHY4, // "See ya later" - SOUND_VOICE_TRICKY_SILVERCOINS4, // "You must find 8 from each level" - SOUND_VOICE_TRICKY_SILVERCOINS5, // "and win" - SOUND_VOICE_TRICKY_REMATCH1, // "Fantastic" - SOUND_VOICE_TRICKY_REMATCH2, // "If you can beat me again" - SOUND_VOICE_TRICKY_REMATCH3, // "I'll give you a special prize" - SOUND_VOICE_SMOKEY_ENCOUNTER1, // "Hahahaha!" - SOUND_VOICE_SMOKEY_ENCOUNTER2, // "Now I challenge you to a race!" - SOUND_VOICE_SMOKEY_SILVERCOINS1, // "Now try my new challenge" - SOUND_VOICE_SMOKEY_SILVERCOINS2, // "Collect all the silver coins from my world" - SOUND_VOICE_SMOKEY_GOODTRY, // "Excellent" - SOUND_VOICE_SMOKEY_SILVERCOINS3, // "You must find 8 from each level and win" - SOUND_VOICE_SMOKEY_SILVERCOINS4, // "Then come back and see me" - SOUND_UNK_D1, - SOUND_VOICE_SMOKEY_BADLUCK, // "Bad luck" - SOUND_VOICE_SMOKEY_RETRY, // "Try again whenever you're ready" - SOUND_VOICE_SMOKEY_TROPHY1, // "You have earned a piece of the amulet" - SOUND_VOICE_SMOKEY_TROPHY2, // "Now try the trophy challenge" - SOUND_VOICE_SMOKEY_TROPHY3, // "Goodbye" - SOUND_VOICE_SMOKEY_REMATCH2, // "If you can beat me again" - SOUND_VOICE_SMOKEY_REMATCH3, // "I'll give you a special prize" - SOUND_VOICE_BUBBLER_ENCOUNTER1, // "Well done!" - SOUND_VOICE_BUBBLER_ENCOUNTER2, // "Now I challenge you to a race!" - SOUND_VOICE_BUBBLER_SILVERCOINS1, // "Try my new challenge" - SOUND_VOICE_BUBBLER_SILVERCOINS2, // "Collect all the silver coins from my world." - SOUND_VOICE_BUBBLER_SILVERCOINS3, // "Find 8 from each level and win" - SOUND_VOICE_BUBBLER_BADLUCK, // "Tough luck, kid" - SOUND_VOICE_BUBBLER_BADLUCK2, // "Maybe next time" - SOUND_VOICE_BUBBLER_RETRY, // "Come back whenever you're ready" - SOUND_VOICE_BUBBLER_TROPHY1, // "Well done, shrimp" - SOUND_VOICE_BUBBLER_TROPHY2, // "You have earned a piece of the amulet" - SOUND_VOICE_BUBBLER_TROPHY3, // "Now try the trophy challenge" - SOUND_VOICE_BUBBLER_TROPHY4, // "Goodbye" - SOUND_VOICE_BUBBLER_REMATCH2, // "If you can beat me again" - SOUND_VOICE_BUBBLER_REMATCH3, // "I'll give you a special prize" - SOUND_VOICE_BUBBLER_SILVERCOINS4, // "Then return to me" - SOUND_VOICE_BUBBLER_HAHA, - SOUND_VOICE_BLUEY_ENCOUNTER1, // "Well done" - SOUND_VOICE_BLUEY_ENCOUNTER2, // "Now I challenge you to a race" - SOUND_MENU_PICK2, - SOUND_MENU_PICK3, - SOUND_UNK_ED, - SOUND_UNK_EE, - SOUND_SELECT2, - SOUND_VOICE_TRICKY_WOAH3, - SOUND_VOICE_TRICKY_WOAH4, - SOUND_VOICE_SMOKEY_EH, - SOUND_VOICE_SMOKEY_HEH, - SOUND_VOICE_BLUEY_EH2, - SOUND_VOICE_BLUEY_OHNO2, - SOUND_VOICE_TRICKY_LAUGH, - SOUND_VOICE_TRICKY_LAUGH2, - SOUND_VOICE_SMOKEY_HAH, - SOUND_VOICE_SMOKEY_LAUGH, - SOUND_VOICE_BLUEY_HAHA3, - SOUND_VOICE_BLUEY_HAHA4, - SOUND_UNK_FC, - SOUND_CROWD, - SOUND_MENU_PICK4, - SOUND_UNK_FF, - SOUND_VOICE_TT_LAP2, - SOUND_VOICE_TT_FINAL_LAP, - SOUND_VOICE_TT_FINISH, - SOUND_UNK_103, // Sounds like car engines driving past - SOUND_UNK_104, // Continuous sound, not sure what it is - SOUND_VOICE_TT_DIDDY_KONG_RACING, // title drop - SOUND_VOICE_TT_PRESS_START, - SOUND_ZIP_PAD_BOOST, - SOUND_UNK_108, - SOUND_UNK_109, - SOUND_UNK_10A, - SOUND_STOMP4, - SOUND_STOMP5, - SOUND_INTRO_KIDS2, - SOUND_INTRO_PLANE2, - SOUND_VOICE_TAJ_HELLO, // "Hello, friend" - SOUND_WHOOSH4, - SOUND_VOICE_TAJ_BYE, // "Byebye for now" - SOUND_VOICE_TAJ_ALAKAZOOM, - SOUND_CYMBAL, - SOUND_SELECT3, - SOUND_VOICE_TT_ANCIENT_LAKE, - SOUND_VOICE_TT_BOULDER_CANYON, - SOUND_VOICE_TT_CRESCENT_ISLAND, - SOUND_VOICE_TT_DARKMOON_CAVERNS, - SOUND_VOICE_TT_EVERFROST_PEAK, - SOUND_VOICE_TT_FOSSIL_CANYON, - SOUND_VOICE_TT_FROSTY_VILLAGE, - SOUND_VOICE_TT_GREENWOOD_VILLAGE, - SOUND_VOICE_TT_HOT_TOP_VOLCANO, - SOUND_VOICE_TT_HAUNTED_WOODS, - SOUND_VOICE_TT_JUNGLE_FALLS, - SOUND_VOICE_TT_PIRATE_LAGOON, - SOUND_VOICE_TT_SNOWBALL_VALLEY, - SOUND_VOICE_TT_SPACEDUST_VALLEY, - SOUND_VOICE_TT_SPACEPORT_ALPHA, - SOUND_VOICE_TT_TREASURE_CAVES, - SOUND_VOICE_TT_STAR_CITY, - SOUND_VOICE_TT_WALRUS_COVE, - SOUND_VOICE_TT_WINDMILL_PLAINS, - SOUND_VOICE_TT_DINO_DOMAIN, - SOUND_VOICE_TT_DRAGON_FOREST, - SOUND_VOICE_TT_FUTURE_FUN_LAND, - SOUND_VOICE_TT_ICICLE_PYRAMID, - SOUND_VOICE_TT_SHERBET_ISLAND, - SOUND_VOICE_TT_SNOWFLAKE_MOUNTAIN, - SOUND_VOICE_TT_SMOKEY_CASTLE, - SOUND_VOICE_TT_TROPHY_RACE, - SOUND_VOICE_TT_WHALE_BAY, - SOUND_CAR_REV2, - SOUND_VOICE_TT_SNORE, - SOUND_LASER_GUN, - SOUND_NYOOM2, - SOUND_NYOOM3, - SOUND_HOMING_ROCKET, - SOUND_INCOMING_ROCKET, - SOUND_BOUNCE2, - SOUND_WHEE, - SOUND_MAGNET_HUM, - SOUND_TYRE_SCREECH, - SOUND_TWANG, - SOUND_UNK_13D, // Unsure - SOUND_VOICE_TT_POWERUP, - SOUND_SPLAT, - SOUND_PLOP2, - SOUND_VOICE_TT_INTRO, // "Hi there, I'm T.T!" - SOUND_VOICE_TT_SEE_YOU, // "See you there" - SOUND_VOICE_TT_OK, - SOUND_VOICE_TT_LAP_RECORD, - SOUND_VOICE_TT_RACE_RECORD, - SOUND_UNK_146, - SOUND_VOICE_TT_GO_FOR_IT, - SOUND_VOICE_TT_KEEP_GOING, - SOUND_VOICE_TT_YOU_CAN_DO_THIS, - SOUND_UNK_14A, - SOUND_VOICE_TT_OH_NO, - SOUND_VOICE_TT_TOO_BAD, - SOUND_VOICE_TT_UNLUCKY, - SOUND_VOICE_TT_NOT_AGAIN, - SOUND_TING_HIGHER, // Even higher than high. - SOUND_TING_HIGHEST, // Truly the tingiest ting of them all. - SOUND_SPLOINK2, - SOUND_BUBBLE, // The sound of pure rage, embodied. - SOUND_VOICE_TT_DARKWATER_BEACH, - SOUND_VOICE_TT_FIRE_MOUNTAIN, - SOUND_POP, - SOUND_HORN_KRUNCH, - SOUND_HORN_BUMPER, - SOUND_HORN_TIPTUP, - SOUND_HORN_CONKER, - SOUND_HORN_TIMBER, - SOUND_HORN_BANJO, - SOUND_HORN_DRUMSTICK, - SOUND_HORN_PIPSY, - SOUND_HORN_TT, - SOUND_HORN_DIDDY, - SOUND_HORN_UNUSED1, - SOUND_HORN_UNUSED2, - SOUND_VOICE_KRUNCH_POSITIVE1, - SOUND_VOICE_BUMPER_POSITIVE1, - SOUND_VOICE_TIPTUP_POSITIVE1, - SOUND_VOICE_CONKER_POSITIVE1, - SOUND_VOICE_TIMBER_POSITIVE1, - SOUND_VOICE_BANJO_POSITIVE1, - SOUND_VOICE_DRUMSTICK_POSITIVE1, - SOUND_VOICE_PIPSY_POSITIVE1, - SOUND_VOICE_TT_POSITIVE1, - SOUND_VOICE_DIDDY_POSITIVE1, - SOUND_VOICE_UNUSED1_POSITIVE1, - SOUND_VOICE_UNUSED2_POSITIVE1, - SOUND_VOICE_KRUNCH_POSITIVE2, - SOUND_VOICE_BUMPER_POSITIVE2, - SOUND_VOICE_TIPTUP_POSITIVE2, - SOUND_VOICE_CONKER_POSITIVE2, - SOUND_VOICE_TIMBER_POSITIVE2, - SOUND_VOICE_BANJO_POSITIVE2, - SOUND_VOICE_DRUMSTICK_POSITIVE2, - SOUND_VOICE_PIPSY_POSITIVE2, - SOUND_VOICE_TT_POSITIVE2, - SOUND_VOICE_DIDDY_POSITIVE2, - SOUND_VOICE_UNUSED1_POSITIVE2, - SOUND_VOICE_UNUSED2_POSITIVE2, - SOUND_VOICE_KRUNCH_POSITIVE3, - SOUND_VOICE_BUMPER_POSITIVE3, - SOUND_VOICE_TIPTUP_POSITIVE3, - SOUND_VOICE_CONKER_POSITIVE3, - SOUND_VOICE_TIMBER_POSITIVE3, - SOUND_VOICE_BANJO_POSITIVE3, - SOUND_VOICE_DRUMSTICK_POSITIVE3, - SOUND_VOICE_PIPSY_POSITIVE3, - SOUND_VOICE_TT_POSITIVE3, - SOUND_VOICE_DIDDY_POSITIVE3, - SOUND_VOICE_UNUSED1_POSITIVE3, - SOUND_VOICE_UNUSED2_POSITIVE3, - SOUND_VOICE_KRUNCH_POSITIVE4, - SOUND_VOICE_BUMPER_POSITIVE4, - SOUND_VOICE_TIPTUP_POSITIVE4, - SOUND_VOICE_CONKER_POSITIVE4, - SOUND_VOICE_TIMBER_POSITIVE4, - SOUND_VOICE_BANJO_POSITIVE4, - SOUND_VOICE_DRUMSTICK_POSITIVE4, - SOUND_VOICE_PIPSY_POSITIVE4, - SOUND_VOICE_TT_POSITIVE4, - SOUND_VOICE_DIDDY_POSITIVE4, - SOUND_VOICE_UNUSED1_POSITIVE4, - SOUND_VOICE_UNUSED2_POSITIVE4, - SOUND_VOICE_KRUNCH_POSITIVE5, - SOUND_VOICE_BUMPER_POSITIVE5, - SOUND_VOICE_TIPTUP_POSITIVE5, - SOUND_VOICE_CONKER_POSITIVE5, - SOUND_VOICE_TIMBER_POSITIVE5, - SOUND_VOICE_BANJO_POSITIVE5, - SOUND_VOICE_DRUMSTICK_POSITIVE5, - SOUND_VOICE_PIPSY_POSITIVE5, - SOUND_VOICE_TT_POSITIVE5, - SOUND_VOICE_DIDDY_POSITIVE5, - SOUND_VOICE_UNUSED1_POSITIVE5, - SOUND_VOICE_UNUSED2_POSITIVE5, - SOUND_VOICE_KRUNCH_POSITIVE6, - SOUND_VOICE_BUMPER_POSITIVE6, - SOUND_VOICE_TIPTUP_POSITIVE6, - SOUND_VOICE_CONKER_POSITIVE6, - SOUND_VOICE_TIMBER_POSITIVE6, - SOUND_VOICE_BANJO_POSITIVE6, - SOUND_VOICE_DRUMSTICK_POSITIVE6, - SOUND_VOICE_PIPSY_POSITIVE6, - SOUND_VOICE_TT_POSITIVE6, - SOUND_VOICE_DIDDY_POSITIVE6, - SOUND_VOICE_UNUSED1_POSITIVE6, - SOUND_VOICE_UNUSED2_POSITIVE6, - SOUND_VOICE_KRUNCH_POSITIVE7, - SOUND_VOICE_BUMPER_POSITIVE7, - SOUND_VOICE_TIPTUP_POSITIVE7, - SOUND_VOICE_CONKER_POSITIVE7, - SOUND_VOICE_TIMBER_POSITIVE7, - SOUND_VOICE_BANJO_POSITIVE7, - SOUND_VOICE_DRUMSTICK_POSITIVE7, - SOUND_VOICE_PIPSY_POSITIVE7, - SOUND_VOICE_TT_POSITIVE7, - SOUND_VOICE_DIDDY_POSITIVE7, - SOUND_VOICE_UNUSED1_POSITIVE7, - SOUND_VOICE_UNUSED2_POSITIVE7, - SOUND_VOICE_KRUNCH_POSITIVE8, - SOUND_VOICE_BUMPER_POSITIVE8, - SOUND_VOICE_TIPTUP_POSITIVE8, - SOUND_VOICE_CONKER_POSITIVE8, - SOUND_VOICE_TIMBER_POSITIVE8, - SOUND_VOICE_BANJO_POSITIVE8, - SOUND_VOICE_DRUMSTICK_POSITIVE8, - SOUND_VOICE_PIPSY_POSITIVE8, - SOUND_VOICE_TT_POSITIVE8, - SOUND_VOICE_DIDDY_POSITIVE8, - SOUND_VOICE_UNUSED1_POSITIVE8, - SOUND_VOICE_UNUSED2_POSITIVE8, - SOUND_VOICE_KRUNCH_NEGATIVE1, - SOUND_VOICE_BUMPER_NEGATIVE1, - SOUND_VOICE_TIPTUP_NEGATIVE1, - SOUND_VOICE_CONKER_NEGATIVE1, - SOUND_VOICE_TIMBER_NEGATIVE1, - SOUND_VOICE_BANJO_NEGATIVE1, - SOUND_VOICE_DRUMSTICK_NEGATIVE1, - SOUND_VOICE_PIPSY_NEGATIVE1, - SOUND_VOICE_TT_NEGATIVE1, - SOUND_VOICE_DIDDY_NEGATIVE1, - SOUND_VOICE_UNUSED1_NEGATIVE1, - SOUND_VOICE_UNUSED2_NEGATIVE1, - SOUND_VOICE_KRUNCH_NEGATIVE2, - SOUND_VOICE_BUMPER_NEGATIVE2, - SOUND_VOICE_TIPTUP_NEGATIVE2, - SOUND_VOICE_CONKER_NEGATIVE2, - SOUND_VOICE_TIMBER_NEGATIVE2, - SOUND_VOICE_BANJO_NEGATIVE2, - SOUND_VOICE_DRUMSTICK_NEGATIVE2, - SOUND_VOICE_PIPSY_NEGATIVE2, - SOUND_VOICE_TT_NEGATIVE2, - SOUND_VOICE_DIDDY_NEGATIVE2, - SOUND_VOICE_UNUSED1_NEGATIVE2, - SOUND_VOICE_UNUSED2_NEGATIVE2, - SOUND_VOICE_KRUNCH_NEGATIVE3, - SOUND_VOICE_BUMPER_NEGATIVE3, - SOUND_VOICE_TIPTUP_NEGATIVE3, - SOUND_VOICE_CONKER_NEGATIVE3, - SOUND_VOICE_TIMBER_NEGATIVE3, - SOUND_VOICE_BANJO_NEGATIVE3, - SOUND_VOICE_DRUMSTICK_NEGATIVE3, - SOUND_VOICE_PIPSY_NEGATIVE3, - SOUND_VOICE_TT_NEGATIVE3, - SOUND_VOICE_DIDDY_NEGATIVE3, - SOUND_VOICE_UNUSED1_NEGATIVE3, - SOUND_VOICE_UNUSED2_NEGATIVE3, - SOUND_VOICE_KRUNCH_NEGATIVE4, - SOUND_VOICE_BUMPER_NEGATIVE4, - SOUND_VOICE_TIPTUP_NEGATIVE4, - SOUND_VOICE_CONKER_NEGATIVE4, - SOUND_VOICE_TIMBER_NEGATIVE4, - SOUND_VOICE_BANJO_NEGATIVE4, - SOUND_VOICE_DRUMSTICK_NEGATIVE4, - SOUND_VOICE_PIPSY_NEGATIVE4, - SOUND_VOICE_TT_NEGATIVE4, - SOUND_VOICE_DIDDY_NEGATIVE4, - SOUND_VOICE_UNUSED1_NEGATIVE4, - SOUND_VOICE_UNUSED2_NEGATIVE4, - SOUND_VOICE_KRUNCH_NEGATIVE5, - SOUND_VOICE_BUMPER_NEGATIVE5, - SOUND_VOICE_TIPTUP_NEGATIVE5, - SOUND_VOICE_CONKER_NEGATIVE5, - SOUND_VOICE_TIMBER_NEGATIVE5, - SOUND_VOICE_BANJO_NEGATIVE5, - SOUND_VOICE_DRUMSTICK_NEGATIVE5, - SOUND_VOICE_PIPSY_NEGATIVE5, - SOUND_VOICE_TT_NEGATIVE5, - SOUND_VOICE_DIDDY_NEGATIVE5, - SOUND_VOICE_UNUSED1_NEGATIVE5, - SOUND_VOICE_UNUSED2_NEGATIVE5, - SOUND_VOICE_KRUNCH_NEGATIVE6, - SOUND_VOICE_BUMPER_NEGATIVE6, - SOUND_VOICE_TIPTUP_NEGATIVE6, - SOUND_VOICE_CONKER_NEGATIVE6, - SOUND_VOICE_TIMBER_NEGATIVE6, - SOUND_VOICE_BANJO_NEGATIVE6, - SOUND_VOICE_DRUMSTICK_NEGATIVE6, - SOUND_VOICE_PIPSY_NEGATIVE6, - SOUND_VOICE_TT_NEGATIVE6, - SOUND_VOICE_DIDDY_NEGATIVE6, - SOUND_VOICE_UNUSED1_NEGATIVE6, - SOUND_VOICE_UNUSED2_NEGATIVE6, - SOUND_VOICE_KRUNCH_NEGATIVE7, - SOUND_VOICE_BUMPER_NEGATIVE7, - SOUND_VOICE_TIPTUP_NEGATIVE7, - SOUND_VOICE_CONKER_NEGATIVE7, - SOUND_VOICE_TIMBER_NEGATIVE7, - SOUND_VOICE_BANJO_NEGATIVE7, - SOUND_VOICE_DRUMSTICK_NEGATIVE7, - SOUND_VOICE_PIPSY_NEGATIVE7, - SOUND_VOICE_TT_NEGATIVE7, - SOUND_VOICE_DIDDY_NEGATIVE7, - SOUND_VOICE_UNUSED1_NEGATIVE7, - SOUND_VOICE_UNUSED2_NEGATIVE7, - SOUND_VOICE_KRUNCH_NEGATIVE8, - SOUND_VOICE_BUMPER_NEGATIVE8, - SOUND_VOICE_TIPTUP_NEGATIVE8, - SOUND_VOICE_CONKER_NEGATIVE8, - SOUND_VOICE_TIMBER_NEGATIVE8, - SOUND_VOICE_BANJO_NEGATIVE8, - SOUND_VOICE_DRUMSTICK_NEGATIVE8, // Sounds kind of profane ngl - SOUND_VOICE_PIPSY_NEGATIVE8, - SOUND_VOICE_TT_NEGATIVE8, - SOUND_VOICE_DIDDY_NEGATIVE8, - //Betting these are unused, because they sit in the spot where character ID's should be. - SOUND_VOICE_BLUEY_REMATCH4, // "If you can beat me again..." - SOUND_VOICE_BLUEY_TROPHY2, // "Goodbye kid" - SOUND_UNK_222, // I'm guessing rolling snowballs - SOUND_UNK_223, // The sound of hitting something - SOUND_UNK_224, // Same - SOUND_VOICE_TRICKY_OW, - SOUND_VOICE_TRICKY_OW2, - SOUND_VOICE_SMOKEY_HM, - SOUND_VOICE_SMOKEY_HM2, - SOUND_VOICE_BLUEY_AIEE, - SOUND_VOICE_BLUEY_OHNO3, - SOUND_VOICE_BOSS_LAUGH, // Don't recognise it - SOUND_VOICE_BOSS_LAUGH2, // Yeah - SOUND_VOICE_BLUEY_EH3, - SOUND_VOICE_TT_GAME_STATUS, - SOUND_VOICE_TT_OKAY, - SOUND_VOICE_TT_TIME_TRIAL_OFF, - SOUND_VOICE_TT_TIME_TRIAL_ON, - SOUND_NITRO_LEVEL3_CHARGE, - SOUND_NITRO_LEVEL3_BOOST, - SOUND_VOICE_TAJ_SELECT_VEHICLE, - SOUND_VOICE_TAJ_ABRAKADABRA, - SOUND_VOICE_TAJ_ALAKAZAM, - SOUND_VOICE_TAJ_ALAKAZOOM2, - SOUND_VOICE_TAJ_MENUBACK, // "Can I help you further?" - SOUND_VOICE_TAJ_CHALLENGE_MENU, // "Select the challenge of your choice" - SOUND_VOICE_TAJ_MENUBACK2, // "Will that be all?" - SOUND_VOICE_BRONTO_ROAR, - SOUND_WHOOSH5, - SOUND_COLLECT_BALLOON, - SOUND_RAIN, - SOUND_THUNDER, - SOUND_ZAP4, - SOUND_MENU_BACK3, - SOUND_VOICE_BUBBLER_OW, - SOUND_VOICE_BUBBLER_AUGH, - SOUND_VOICE_BUBBLER_HOHO, - SOUND_VOICE_BUBBLER_HOHO2, - SOUND_VOICE_BUBBLER_AW, - SOUND_VOICE_BUBBLER_OW2, - SOUND_VOICE_BUBBLER_AUGH2, - SOUND_DRAWBRIDGE_BELL, - SOUND_BUBBLE_RISE, - SOUND_VOICE_TT_BEAT_MY_TIME, // "Now try beat my time" - SOUND_VOICE_TT_WELL_THEN, - SOUND_VOICE_TT_TRY_ANOTHER_TRACK, // "Now try another track" - SOUND_VOICE_TT_BEAT_ALL_TIMES, // "You've beaten all my times" - SOUND_VOICE_TT_UNLOCKED, // "Now you can pick me" - SOUND_VOICE_TAJ_CHALLENGE_RACE, // "I challenge you to a race" - SOUND_UNK_251, - SOUND_UNK_252, - SOUND_UNK_253, - SOUND_UNK_254, - SOUND_UNK_255, - SOUND_UNK_256, - SOUND_UNK_257, - SOUND_UNK_258, - SOUND_UNK_259, - SOUND_UNK_25A, - SOUND_UNK_25B, - SOUND_UNK_25C, - SOUND_UNK_25D, - SOUND_UNK_25E, - SOUND_UNK_25F, - SOUND_UNK_260, - SOUND_UNK_261, - SOUND_UNK_262, - SOUND_UNK_263, - SOUND_UNK_264, - SOUND_UNK_265, - SOUND_UNK_266, - SOUND_UNK_267, - SOUND_UNK_268, - SOUND_UNK_269, - SOUND_UNK_26A, - SOUND_UNK_26B, - SOUND_UNK_26C, - SOUND_UNK_26D, - SOUND_UNK_26E, - SOUND_UNK_26F, - SOUND_UNK_270, - SOUND_UNK_271, - SOUND_UNK_272, - SOUND_UNK_273, - SOUND_UNK_274, - SOUND_UNK_275, - SOUND_UNK_276, - SOUND_UNK_277, - SOUND_UNK_278, - SOUND_UNK_279, - SOUND_UNK_27A, - SOUND_UNK_27B, - SOUND_UNK_27C, - SOUND_UNK_27E, - SOUND_UNK_27F, - // Trying to play 27F onwards will incur a crash. - NUM_SOUND_IDS +/* 0x0000 */ SOUND_UNK00, +/* 0x0001 */ SOUND_CAR_SLIDE, +/* 0x0002 */ SOUND_CAR_SLIDE2, // Not sure what this is for. I thought it was for the brakes originally, but there's clearly a brake +/* 0x0003 */ SOUND_INTRO_PLANE, +/* 0x0004 */ SOUND_INTRO_KIDS, +/* 0x0005 */ SOUND_UNK_05, // Sounds like something sifting, idk. +/* 0x0006 */ SOUND_UNK_06, // Same thing, but faster +/* 0x0007 */ SOUND_UNK_07, +/* 0x0008 */ SOUND_UNK_08, +/* 0x0009 */ SOUND_STOMP, +/* 0x000A */ SOUND_UNK_0A, +/* 0x000B */ SOUND_UNK_0B, +/* 0x000C */ SOUND_CRASH, +/* 0x000D */ SOUND_CRASH2, // Not the same as the last, sounds like a cymbal or something. +/* 0x000E */ SOUND_BALLOON_POP, +/* 0x000F */ SOUND_PLOP, // Dropping a landmine +/* 0x0010 */ SOUND_UNK_10, +/* 0x0011 */ SOUND_EXPLOSION, +/* 0x0012 */ SOUND_NYOOM, // Firing a rocket. +/* 0x0013 */ SOUND_UNK_13, +/* 0x0014 */ SOUND_UNK_14, +/* 0x0015 */ SOUND_UNK_15, +/* 0x0016 */ SOUND_WHOOSH1, // The hud flying in on a race start. +/* 0x0017 */ SOUND_EXPLOSION2, // Not sure what this one's for. +/* 0x0018 */ SOUND_VOICE_TT_GET_READY, +/* 0x0019 */ SOUND_VOICE_TT_GO, +/* 0x001A */ SOUND_UNK_1A, +/* 0x001B */ SOUND_UNK_1B, +/* 0x001C */ SOUND_CAR_BRAKE, +/* 0x001D */ SOUND_UNK_1D, +/* 0x001E */ SOUND_UNK_1E, +/* 0x001F */ SOUND_UNK_1F, +/* 0x0020 */ SOUND_UNK_20, +/* 0x0021 */ SOUND_NITRO_BOOST, +/* 0x0022 */ SOUND_SELECT, +/* 0x0023 */ SOUND_VOICE_TAJ_CUTSCENE_0, // "Woah there!" +/* 0x0024 */ SOUND_VOICE_TAJ_CUTSCENE_1, // "Hello, friend." +/* 0x0025 */ SOUND_VOICE_TAJ_WAHEY, +/* 0x0026 */ SOUND_VOICE_TAJ_HOHO, +/* 0x0027 */ SOUND_LIGHTNING, +/* 0x0028 */ SOUND_VOICE_TAJ_WOAH, +/* 0x0029 */ SOUND_VOICE_TAJ_HINT, // "I've got something special for you." +/* 0x002A */ SOUND_UNK_2A, // Sounds like a wave or something, not sure. +/* 0x002B */ SOUND_RIBBIT, // :frog: +/* 0x002C */ SOUND_SPLOOSH, +/* 0x002D */ SOUND_VOICE_TAJ_WINNER, // "You won first prize!" +/* 0x002E */ SOUND_VOICE_CONKER_YEHAHA, +/* 0x002F */ SOUND_VOICE_TIMBER_WOW, +/* 0x0030 */ SOUND_WHOOSH2, // This is a transition before a Taj Tech Tip. +/* 0x0031 */ SOUND_WHOOSH3, // Don't remember what this is but I know it's used somewhere. +/* 0x0032 */ SOUND_VOICE_TAJ_BALLOON, // "This is for you." +/* 0x0033 */ SOUND_UNK_33, // Some softer gong thing maybe? +/* 0x0034 */ SOUND_TWINKLE, // Sounds like a lower, slower version of SOUND_SELECT +/* 0x0035 */ SOUND_VOICE_WIZPIG_LAUGH, +/* 0x0036 */ SOUND_NYOOM_HIGH, // High pitched nyoom. +/* 0x0037 */ SOUND_UNK_37, // I cannot describe tbis. uhh, a car coming past? really I can't say +/* 0x0038 */ SOUND_VOICE_TT_RADIO, // "Okay control" remind me to find the subtitles for this lol. It's the rocket. +/* 0x0039 */ SOUND_DOOR_CLOSE, +/* 0x003A */ SOUND_VOICE_TT_THREE, +/* 0x003B */ SOUND_VOICE_TT_TWO, +/* 0x003C */ SOUND_VOICE_BUMPER_OHNO, +/* 0x003D */ SOUND_VOICE_TIPTUP_WAH, +/* 0x003E */ SOUND_VOICE_TT_ONE, +/* 0x003F */ SOUND_VOICE_TT_BLASTOFF, +/* 0x0040 */ SOUND_ROCKET_LAUNCH, +/* 0x0041 */ SOUND_UNK_41, // Sounds like an explosion sort. Likely related to the rocket. +/* 0x0042 */ SOUND_VOICE_DIDDY_LAUGH, +/* 0x0043 */ SOUND_VOICE_BANJO_GUHHUH, +/* 0x0044 */ SOUND_VOICE_DIDDY_LAUGH2, +/* 0x0045 */ SOUND_VOICE_PIPSY_LAUGH, +/* 0x0046 */ SOUND_VOICE_TIMBER_YEAH, +/* 0x0047 */ SOUND_VOICE_KRUNCH_HOHOO, +/* 0x0048 */ SOUND_VOICE_WIZPIG_LAUGH_SHORT, +/* 0x0049 */ SOUND_VOICE_TAJ_CUTSCENE2, // "I am the genie of the island." +/* 0x004A */ SOUND_VOICE_PIPSY_YEHAW, +/* 0x004B */ SOUND_VOICE_TAJ_CUTSCENE3, // "I'm here to help you." +/* 0x004C */ SOUND_VOICE_TAJ_CUTSCENE4, // "Good luck!" +/* 0x004D */ SOUND_VOICE_DIDDY_LAUGH_LOW, // Same as his regular laugh but lower pitch +/* 0x004E */ SOUND_VOICE_UNK_4E, +/* 0x004F */ SOUND_VOICE_UNK_4F, +/* 0x0050 */ SOUND_VOICE_UNK_50, // "Yippee, lets party!" +/* 0x0051 */ SOUND_VOICE_WIZPIG_LAUGH2, +/* 0x0052 */ SOUND_VOICE_WIZPIG_LAUGH3, +/* 0x0053 */ SOUND_VOICE_WIZPIG_ENDING, // "Sorry to break the party worms, but I had to say goodbyte!" +/* 0x0054 */ SOUND_VOICE_WIZPIG_UNK0, // "Well lookie here, it's the little worm!" +/* 0x0055 */ SOUND_UNK_55, // Sounds like some future something +/* 0x0056 */ SOUND_VOICE_WIZPIG_SEEYA, // "See ya later, worms!" +/* 0x0057 */ SOUND_VOICE_WIZPIG_LAUGH4, +/* 0x0058 */ SOUND_VOICE_BLUEY_REMATCH1, // "Fantastic!" +/* 0x0059 */ SOUND_VOICE_BLUEY_REMATCH2, // "If you can beat me again..." +/* 0x005A */ SOUND_VOICE_BLUEY_REMATCH3, // "I'll give you a special prize" +/* 0x005B */ SOUND_UNK_5B, // Might be the hovercraft engine. +/* 0x005C */ SOUND_UNK_5C, // Might be the car engine. +/* 0x005D */ SOUND_TING_LOW, +/* 0x005E */ SOUND_TING_HIGH, +/* 0x005F */ SOUND_BOOST_LEVEL3, +/* 0x0060 */ SOUND_UNK_60, // Also not sure +/* 0x0061 */ SOUND_UNK_61, // Sounds like an earthquake, goes on for absolutely ever, but not a continuous sound. +/* 0x0062 */ SOUND_ELECTRIC_BUZZ, // Bzzzz! +/* 0x0063 */ SOUND_UNK_63, // sounds kind of like lightning but not 100% sure +/* 0x0064 */ SOUND_UNK_64, +/* 0x0065 */ SOUND_UNK_65, +/* 0x0066 */ SOUND_VOICE_TT_WRONG_WAY, +/* 0x0067 */ SOUND_VOICE_TT_NONONO, +/* 0x0068 */ SOUND_MENU_BACK, +/* 0x0069 */ SOUND_MENU_BACK2, // Appears to be exactly the same as the previous to my tonedeaf ears. +/* 0x006A */ SOUND_UNK_6A, // Same thing as the previous but with an inverse wave. +/* 0x006B */ SOUND_VOICE_WIZPIG_ENCOUNTER, // "You can't beat me!" +/* 0x006C */ SOUND_VOICE_WIZPIG_DEFEAT, // "Gragh, no! No!" +/* 0x006D */ SOUND_VOICE_WIZPIG_GROAN, +/* 0x006E */ SOUND_VOICE_WIZPIG_SCREAM, +/* 0x006F */ SOUND_ZAP, +/* 0x0070 */ SOUND_ZAP2, +/* 0x0071 */ SOUND_ZAP3, +/* 0x0072 */ SOUND_VOICE_WIZPIG_SCREAM2, +/* 0x0073 */ SOUND_VOICE_KRUNCH_LAUGH, +/* 0x0074 */ SOUND_UNK_74, // More lightning? +/* 0x0075 */ SOUND_VOICE_WIZPIG_SCREAM3, +/* 0x0076 */ SOUND_VOICE_DRUMSTUCK_BWAK, // Chicken noises intensify. +/* 0x0077 */ SOUND_VOICE_BLUEY_GOODBYE, // "Goodbye, Kid!" +/* 0x0078 */ SOUND_VOICE_BANJO_YAHOO, +/* 0x0079 */ SOUND_VOICE_BLUEY_SILVERCOINS2, // "Collect all the silver coins from the snow world" +/* 0x007A */ SOUND_CAR_REV, // Selecting the car in the menu, and the initial revs at the start. +/* 0x007B */ SOUND_UNK_7B, +/* 0x007C */ SOUND_UNK_7C, +/* 0x007D */ SOUND_UNK_7D, +/* 0x007E */ SOUND_UNK_7E, +/* 0x007F */ SOUND_UNK_7F, +/* 0x0080 */ SOUND_UNK_80, +/* 0x0081 */ SOUND_UNK_81, +/* 0x0082 */ SOUND_UNK_82, +/* 0x0083 */ SOUND_UNK_83, +/* 0x0084 */ SOUND_UNK_84, +/* 0x0085 */ SOUND_VOICE_BLUEY_TROPHY_CHALLENGE, // "Now try the trophy challenge" +/* 0x0086 */ SOUND_VOICE_BLUEY_AMULET, // "You've won a piece of the amulet" +/* 0x0087 */ SOUND_VOICE_KRUNCH_SELECT, // "My name's Krunch" +/* 0x0088 */ SOUND_VOICE_BUMPER_SELECT, // "My name's Bumper" +/* 0x0089 */ SOUND_VOICE_TIPTUP_SELECT, // "Hey, it's Tiptup" +/* 0x008A */ SOUND_VOICE_CONKER_SELECT, // "I'm Conker" +/* 0x008B */ SOUND_VOICE_TIMBER_SELECT, // "Timber" +/* 0x008C */ SOUND_VOICE_BANJO_SELECT, // "I'm Banjo" +/* 0x008D */ SOUND_VOICE_DRUMSTICK_SELECT, // "My name's Drumstick" +/* 0x008E */ SOUND_VOICE_PIPSY_SELECT, // "I'm Pipsy" +/* 0x008F */ SOUND_VOICE_TT_SELECT, // I'm T.T +/* 0x0090 */ SOUND_VOICE_DIDDY_SELECT, // "I'm Diddy" +/* 0x0091 */ SOUND_VOICE_BLUEY_RETRY, // "You can come back, whenever you're ready" +/* 0x0092 */ SOUND_VOICE_BLUEY_NEVERMIND, // "Ah, nevermind kid." +/* 0x0093 */ SOUND_VOICE_KRUNCH_EHH, +/* 0x0094 */ SOUND_VOICE_BUMPER_UHH, +/* 0x0095 */ SOUND_VOICE_TIPTUP_AHH, +/* 0x0096 */ SOUND_VOICE_CONKER_AHH, +/* 0x0097 */ SOUND_VOICE_TIMBER_RAGH, +/* 0x0098 */ SOUND_VOICE_BANJO_WOAH, +/* 0x0099 */ SOUND_VOICE_DRUMSTICK_WAH, +/* 0x009A */ SOUND_VOICE_PIPSY_UHOH, +/* 0x009B */ SOUND_VOICE_TT_WOAH, +/* 0x009C */ SOUND_VOICE_DIDDY_WOAH, +/* 0x009D */ SOUND_VOICE_BLUEY_SILVERCOINS3, // "Collect 8 from each level and win" +/* 0x009E */ SOUND_VOICE_BLUEY_SILVERCOINS4, // "Then come back and see me" +/* 0x009F */ SOUND_SHIELD, +/* 0x00A0 */ SOUND_COLLECT_ITEM, +/* 0x00A1 */ SOUND_COLLECT_ITEM_TIER2, +/* 0x00A2 */ SOUND_COLLECT_ITEM_TIER3, +/* 0x00A3 */ SOUND_VOICE_TRICKY_WOAH, +/* 0x00A4 */ SOUND_VOICE_TRICKY_WOAH2, // Same as the last +/* 0x00A5 */ SOUND_VOICE_TRICKY_HM, +/* 0x00A6 */ SOUND_VOICE_TRICKY_HMMM, +/* 0x00A7 */ SOUND_VOICE_BLUEY_EH, +/* 0x00A8 */ SOUND_VOICE_BLUEY_OHNO, +/* 0x00A9 */ SOUND_FLUTTERING, // idk +/* 0x00AA */ SOUND_PLANE_ENGINE, +/* 0x00AB */ SOUND_BOING, +/* 0x00AC */ SOUND_STOMP2, +/* 0x00AD */ SOUND_STOMP3, +/* 0x00AE */ SOUND_BOUNCE, +/* 0x00AF */ SOUND_UNK_AF, // sounds just like UNK5 +/* 0x00B0 */ SOUND_FOOTSTEP, +/* 0x00B1 */ SOUND_UNK_B1, // Very low pitch something +/* 0x00B2 */ SOUND_MENU_PICK, +/* 0x00B3 */ SOUND_VOICE_WIZPIG_LAUGH_SHORT2, +/* 0x00B4 */ SOUND_VOICE_WIZPIG_LAUGH_SHORT3, +/* 0x00B5 */ SOUND_VOICE_WIZPIG_HA, +/* 0x00B6 */ SOUND_VOICE_WIZPIG_H2, +/* 0x00B7 */ SOUND_VOICE_BLUEY_HAHA, +/* 0x00B8 */ SOUND_VOICE_BLUEY_HAHA2, +/* 0x00B9 */ SOUND_VOICE_BLUEY_SILVERCOINS1, // "Now try my new challenge" +/* 0x00BA */ SOUND_VOICE_TRICKY_ENCOUNTER1, // "Now I challenge you to a race" +/* 0x00BB */ SOUND_VOICE_TRICKY_SILVERCOINS1, // "Now try my new challenge" +/* 0x00BC */ SOUND_VOICE_TRICKY_SILVERCOINS2, // "Collect all the silver coins from the dino domain." +/* 0x00BD */ SOUND_VOICE_TRICKY_GOODTRY, // "Good one, kid" +/* 0x00BE */ SOUND_VOICE_TRICKY_NEVERMIND, // "Maybe next time." +/* 0x00BF */ SOUND_VOICE_TRICKY_RETRY, // "Come back whenever you're ready." +/* 0x00C0 */ SOUND_VOICE_TRICKY_SILVERCOINS6, // "Then come back and see me" +/* 0x00C1 */ SOUND_VOICE_TRICKY_TROPHY1, // "Well done kid" +/* 0x00C2 */ SOUND_VOICE_TRICKY_TROPHY2, // "You've earned a piece of the amulet" +/* 0x00C3 */ SOUND_VOICE_TRICKY_TROPHY3, // "Now try the trophy challenge" +/* 0x00C4 */ SOUND_VOICE_TRICKY_TROPHY4, // "See ya later" +/* 0x00C5 */ SOUND_VOICE_TRICKY_SILVERCOINS4, // "You must find 8 from each level" +/* 0x00C6 */ SOUND_VOICE_TRICKY_SILVERCOINS5, // "and win" +/* 0x00C7 */ SOUND_VOICE_TRICKY_REMATCH1, // "Fantastic" +/* 0x00C8 */ SOUND_VOICE_TRICKY_REMATCH2, // "If you can beat me again" +/* 0x00C9 */ SOUND_VOICE_TRICKY_REMATCH3, // "I'll give you a special prize" +/* 0x00CA */ SOUND_VOICE_SMOKEY_ENCOUNTER1, // "Hahahaha!" +/* 0x00CB */ SOUND_VOICE_SMOKEY_ENCOUNTER2, // "Now I challenge you to a race!" +/* 0x00CC */ SOUND_VOICE_SMOKEY_SILVERCOINS1, // "Now try my new challenge" +/* 0x00CD */ SOUND_VOICE_SMOKEY_SILVERCOINS2, // "Collect all the silver coins from my world" +/* 0x00CE */ SOUND_VOICE_SMOKEY_GOODTRY, // "Excellent" +/* 0x00CF */ SOUND_VOICE_SMOKEY_SILVERCOINS3, // "You must find 8 from each level and win" +/* 0x00D0 */ SOUND_VOICE_SMOKEY_SILVERCOINS4, // "Then come back and see me" +/* 0x00D1 */ SOUND_UNK_D1, +/* 0x00D2 */ SOUND_VOICE_SMOKEY_BADLUCK, // "Bad luck" +/* 0x00D3 */ SOUND_VOICE_SMOKEY_RETRY, // "Try again whenever you're ready" +/* 0x00D4 */ SOUND_VOICE_SMOKEY_TROPHY1, // "You have earned a piece of the amulet" +/* 0x00D5 */ SOUND_VOICE_SMOKEY_TROPHY2, // "Now try the trophy challenge" +/* 0x00D6 */ SOUND_VOICE_SMOKEY_TROPHY3, // "Goodbye" +/* 0x00D7 */ SOUND_VOICE_SMOKEY_REMATCH2, // "If you can beat me again" +/* 0x00D8 */ SOUND_VOICE_SMOKEY_REMATCH3, // "I'll give you a special prize" +/* 0x00D9 */ SOUND_VOICE_BUBBLER_ENCOUNTER1, // "Well done!" +/* 0x00DA */ SOUND_VOICE_BUBBLER_ENCOUNTER2, // "Now I challenge you to a race!" +/* 0x00DB */ SOUND_VOICE_BUBBLER_SILVERCOINS1, // "Try my new challenge" +/* 0x00DC */ SOUND_VOICE_BUBBLER_SILVERCOINS2, // "Collect all the silver coins from my world." +/* 0x00DD */ SOUND_VOICE_BUBBLER_SILVERCOINS3, // "Find 8 from each level and win" +/* 0x00DE */ SOUND_VOICE_BUBBLER_BADLUCK, // "Tough luck, kid" +/* 0x00DF */ SOUND_VOICE_BUBBLER_BADLUCK2, // "Maybe next time" +/* 0x00E0 */ SOUND_VOICE_BUBBLER_RETRY, // "Come back whenever you're ready" +/* 0x00E1 */ SOUND_VOICE_BUBBLER_TROPHY1, // "Well done, shrimp" +/* 0x00E2 */ SOUND_VOICE_BUBBLER_TROPHY2, // "You have earned a piece of the amulet" +/* 0x00E3 */ SOUND_VOICE_BUBBLER_TROPHY3, // "Now try the trophy challenge" +/* 0x00E4 */ SOUND_VOICE_BUBBLER_TROPHY4, // "Goodbye" +/* 0x00E5 */ SOUND_VOICE_BUBBLER_REMATCH2, // "If you can beat me again" +/* 0x00E6 */ SOUND_VOICE_BUBBLER_REMATCH3, // "I'll give you a special prize" +/* 0x00E7 */ SOUND_VOICE_BUBBLER_SILVERCOINS4, // "Then return to me" +/* 0x00E8 */ SOUND_VOICE_BUBBLER_HAHA, +/* 0x00E9 */ SOUND_VOICE_BLUEY_ENCOUNTER1, // "Well done" +/* 0x00EA */ SOUND_VOICE_BLUEY_ENCOUNTER2, // "Now I challenge you to a race" +/* 0x00EB */ SOUND_MENU_PICK2, +/* 0x00EC */ SOUND_MENU_PICK3, +/* 0x00ED */ SOUND_UNK_ED, +/* 0x00EE */ SOUND_UNK_EE, +/* 0x00EF */ SOUND_SELECT2, +/* 0x00F0 */ SOUND_VOICE_TRICKY_WOAH3, +/* 0x00F1 */ SOUND_VOICE_TRICKY_WOAH4, +/* 0x00F2 */ SOUND_VOICE_SMOKEY_EH, +/* 0x00F3 */ SOUND_VOICE_SMOKEY_HEH, +/* 0x00F4 */ SOUND_VOICE_BLUEY_EH2, +/* 0x00F5 */ SOUND_VOICE_BLUEY_OHNO2, +/* 0x00F6 */ SOUND_VOICE_TRICKY_LAUGH, +/* 0x00F7 */ SOUND_VOICE_TRICKY_LAUGH2, +/* 0x00F8 */ SOUND_VOICE_SMOKEY_HAH, +/* 0x00F9 */ SOUND_VOICE_SMOKEY_LAUGH, +/* 0x00FA */ SOUND_VOICE_BLUEY_HAHA3, +/* 0x00FB */ SOUND_VOICE_BLUEY_HAHA4, +/* 0x00FC */ SOUND_UNK_FC, +/* 0x00FD */ SOUND_CROWD, +/* 0x00FE */ SOUND_MENU_PICK4, +/* 0x00FF */ SOUND_UNK_FF, +/* 0x0100 */ SOUND_VOICE_TT_LAP2, +/* 0x0101 */ SOUND_VOICE_TT_FINAL_LAP, +/* 0x0102 */ SOUND_VOICE_TT_FINISH, +/* 0x0103 */ SOUND_UNK_103, // Sounds like car engines driving past +/* 0x0104 */ SOUND_UNK_104, // Continuous sound, not sure what it is +/* 0x0105 */ SOUND_VOICE_TT_DIDDY_KONG_RACING, // title drop +/* 0x0106 */ SOUND_VOICE_TT_PRESS_START, +/* 0x0107 */ SOUND_ZIP_PAD_BOOST, +/* 0x0108 */ SOUND_UNK_108, +/* 0x0109 */ SOUND_UNK_109, +/* 0x010A */ SOUND_UNK_10A, +/* 0x010B */ SOUND_STOMP4, +/* 0x010C */ SOUND_STOMP5, +/* 0x010D */ SOUND_INTRO_KIDS2, +/* 0x010E */ SOUND_INTRO_PLANE2, +/* 0x010F */ SOUND_VOICE_TAJ_HELLO, // "Hello, friend" +/* 0x0110 */ SOUND_WHOOSH4, +/* 0x0111 */ SOUND_VOICE_TAJ_BYE, // "Byebye for now" +/* 0x0112 */ SOUND_VOICE_TAJ_ALAKAZOOM, +/* 0x0113 */ SOUND_CYMBAL, +/* 0x0114 */ SOUND_SELECT3, +/* 0x0115 */ SOUND_VOICE_TT_ANCIENT_LAKE, +/* 0x0116 */ SOUND_VOICE_TT_BOULDER_CANYON, +/* 0x0117 */ SOUND_VOICE_TT_CRESCENT_ISLAND, +/* 0x0118 */ SOUND_VOICE_TT_DARKMOON_CAVERNS, +/* 0x0119 */ SOUND_VOICE_TT_EVERFROST_PEAK, +/* 0x011A */ SOUND_VOICE_TT_FOSSIL_CANYON, +/* 0x011B */ SOUND_VOICE_TT_FROSTY_VILLAGE, +/* 0x011C */ SOUND_VOICE_TT_GREENWOOD_VILLAGE, +/* 0x011D */ SOUND_VOICE_TT_HOT_TOP_VOLCANO, +/* 0x011E */ SOUND_VOICE_TT_HAUNTED_WOODS, +/* 0x011F */ SOUND_VOICE_TT_JUNGLE_FALLS, +/* 0x0120 */ SOUND_VOICE_TT_PIRATE_LAGOON, +/* 0x0121 */ SOUND_VOICE_TT_SNOWBALL_VALLEY, +/* 0x0122 */ SOUND_VOICE_TT_SPACEDUST_VALLEY, +/* 0x0123 */ SOUND_VOICE_TT_SPACEPORT_ALPHA, +/* 0x0124 */ SOUND_VOICE_TT_TREASURE_CAVES, +/* 0x0125 */ SOUND_VOICE_TT_STAR_CITY, +/* 0x0126 */ SOUND_VOICE_TT_WALRUS_COVE, +/* 0x0127 */ SOUND_VOICE_TT_WINDMILL_PLAINS, +/* 0x0128 */ SOUND_VOICE_TT_DINO_DOMAIN, +/* 0x0129 */ SOUND_VOICE_TT_DRAGON_FOREST, +/* 0x012A */ SOUND_VOICE_TT_FUTURE_FUN_LAND, +/* 0x012B */ SOUND_VOICE_TT_ICICLE_PYRAMID, +/* 0x012C */ SOUND_VOICE_TT_SHERBET_ISLAND, +/* 0x012D */ SOUND_VOICE_TT_SNOWFLAKE_MOUNTAIN, +/* 0x012E */ SOUND_VOICE_TT_SMOKEY_CASTLE, +/* 0x012F */ SOUND_VOICE_TT_TROPHY_RACE, +/* 0x0130 */ SOUND_VOICE_TT_WHALE_BAY, +/* 0x0131 */ SOUND_CAR_REV2, +/* 0x0132 */ SOUND_VOICE_TT_SNORE, +/* 0x0133 */ SOUND_LASER_GUN, +/* 0x0134 */ SOUND_NYOOM2, +/* 0x0135 */ SOUND_NYOOM3, +/* 0x0136 */ SOUND_HOMING_ROCKET, +/* 0x0137 */ SOUND_INCOMING_ROCKET, +/* 0x0138 */ SOUND_BOUNCE2, +/* 0x0139 */ SOUND_WHEE, +/* 0x013A */ SOUND_MAGNET_HUM, +/* 0x013B */ SOUND_TYRE_SCREECH, +/* 0x013C */ SOUND_TWANG, +/* 0x013D */ SOUND_UNK_13D, // Unsure +/* 0x013E */ SOUND_VOICE_TT_POWERUP, +/* 0x013F */ SOUND_SPLAT, +/* 0x0140 */ SOUND_PLOP2, +/* 0x0141 */ SOUND_VOICE_TT_INTRO, // "Hi there, I'm T.T!" +/* 0x0142 */ SOUND_VOICE_TT_SEE_YOU, // "See you there" +/* 0x0143 */ SOUND_VOICE_TT_OK, +/* 0x0144 */ SOUND_VOICE_TT_LAP_RECORD, +/* 0x0145 */ SOUND_VOICE_TT_RACE_RECORD, +/* 0x0146 */ SOUND_UNK_146, +/* 0x0147 */ SOUND_VOICE_TT_GO_FOR_IT, +/* 0x0148 */ SOUND_VOICE_TT_KEEP_GOING, +/* 0x0149 */ SOUND_VOICE_TT_YOU_CAN_DO_THIS, +/* 0x014A */ SOUND_UNK_14A, +/* 0x014B */ SOUND_VOICE_TT_OH_NO, +/* 0x014C */ SOUND_VOICE_TT_TOO_BAD, +/* 0x014D */ SOUND_VOICE_TT_UNLUCKY, +/* 0x014E */ SOUND_VOICE_TT_NOT_AGAIN, +/* 0x014F */ SOUND_TING_HIGHER, // Even higher than high. +/* 0x0150 */ SOUND_TING_HIGHEST, // Truly the tingiest ting of them all. +/* 0x0151 */ SOUND_SPLOINK2, +/* 0x0152 */ SOUND_BUBBLE, // The sound of pure rage, embodied. +/* 0x0153 */ SOUND_VOICE_TT_DARKWATER_BEACH, +/* 0x0154 */ SOUND_VOICE_TT_FIRE_MOUNTAIN, +/* 0x0155 */ SOUND_POP, +/* 0x0156 */ SOUND_HORN_KRUNCH, +/* 0x0157 */ SOUND_HORN_BUMPER, +/* 0x0158 */ SOUND_HORN_TIPTUP, +/* 0x0159 */ SOUND_HORN_CONKER, +/* 0x015A */ SOUND_HORN_TIMBER, +/* 0x015B */ SOUND_HORN_BANJO, +/* 0x015C */ SOUND_HORN_DRUMSTICK, +/* 0x015D */ SOUND_HORN_PIPSY, +/* 0x015E */ SOUND_HORN_TT, +/* 0x015F */ SOUND_HORN_DIDDY, +/* 0x0160 */ SOUND_HORN_UNUSED1, +/* 0x0161 */ SOUND_HORN_UNUSED2, +/* 0x0162 */ SOUND_VOICE_KRUNCH_POSITIVE1, +/* 0x0163 */ SOUND_VOICE_BUMPER_POSITIVE1, +/* 0x0164 */ SOUND_VOICE_TIPTUP_POSITIVE1, +/* 0x0165 */ SOUND_VOICE_CONKER_POSITIVE1, +/* 0x0166 */ SOUND_VOICE_TIMBER_POSITIVE1, +/* 0x0167 */ SOUND_VOICE_BANJO_POSITIVE1, +/* 0x0168 */ SOUND_VOICE_DRUMSTICK_POSITIVE1, +/* 0x0169 */ SOUND_VOICE_PIPSY_POSITIVE1, +/* 0x016A */ SOUND_VOICE_TT_POSITIVE1, +/* 0x016B */ SOUND_VOICE_DIDDY_POSITIVE1, +/* 0x016C */ SOUND_VOICE_UNUSED1_POSITIVE1, +/* 0x016D */ SOUND_VOICE_UNUSED2_POSITIVE1, +/* 0x016E */ SOUND_VOICE_KRUNCH_POSITIVE2, +/* 0x016F */ SOUND_VOICE_BUMPER_POSITIVE2, +/* 0x0170 */ SOUND_VOICE_TIPTUP_POSITIVE2, +/* 0x0171 */ SOUND_VOICE_CONKER_POSITIVE2, +/* 0x0172 */ SOUND_VOICE_TIMBER_POSITIVE2, +/* 0x0173 */ SOUND_VOICE_BANJO_POSITIVE2, +/* 0x0174 */ SOUND_VOICE_DRUMSTICK_POSITIVE2, +/* 0x0175 */ SOUND_VOICE_PIPSY_POSITIVE2, +/* 0x0176 */ SOUND_VOICE_TT_POSITIVE2, +/* 0x0177 */ SOUND_VOICE_DIDDY_POSITIVE2, +/* 0x0178 */ SOUND_VOICE_UNUSED1_POSITIVE2, +/* 0x0179 */ SOUND_VOICE_UNUSED2_POSITIVE2, +/* 0x017A */ SOUND_VOICE_KRUNCH_POSITIVE3, +/* 0x017B */ SOUND_VOICE_BUMPER_POSITIVE3, +/* 0x017C */ SOUND_VOICE_TIPTUP_POSITIVE3, +/* 0x017D */ SOUND_VOICE_CONKER_POSITIVE3, +/* 0x017E */ SOUND_VOICE_TIMBER_POSITIVE3, +/* 0x017F */ SOUND_VOICE_BANJO_POSITIVE3, +/* 0x0180 */ SOUND_VOICE_DRUMSTICK_POSITIVE3, +/* 0x0181 */ SOUND_VOICE_PIPSY_POSITIVE3, +/* 0x0182 */ SOUND_VOICE_TT_POSITIVE3, +/* 0x0183 */ SOUND_VOICE_DIDDY_POSITIVE3, +/* 0x0184 */ SOUND_VOICE_UNUSED1_POSITIVE3, +/* 0x0185 */ SOUND_VOICE_UNUSED2_POSITIVE3, +/* 0x0186 */ SOUND_VOICE_KRUNCH_POSITIVE4, +/* 0x0187 */ SOUND_VOICE_BUMPER_POSITIVE4, +/* 0x0188 */ SOUND_VOICE_TIPTUP_POSITIVE4, +/* 0x0189 */ SOUND_VOICE_CONKER_POSITIVE4, +/* 0x018A */ SOUND_VOICE_TIMBER_POSITIVE4, +/* 0x018B */ SOUND_VOICE_BANJO_POSITIVE4, +/* 0x018C */ SOUND_VOICE_DRUMSTICK_POSITIVE4, +/* 0x018D */ SOUND_VOICE_PIPSY_POSITIVE4, +/* 0x018E */ SOUND_VOICE_TT_POSITIVE4, +/* 0x018F */ SOUND_VOICE_DIDDY_POSITIVE4, +/* 0x0190 */ SOUND_VOICE_UNUSED1_POSITIVE4, +/* 0x0191 */ SOUND_VOICE_UNUSED2_POSITIVE4, +/* 0x0192 */ SOUND_VOICE_KRUNCH_POSITIVE5, +/* 0x0193 */ SOUND_VOICE_BUMPER_POSITIVE5, +/* 0x0194 */ SOUND_VOICE_TIPTUP_POSITIVE5, +/* 0x0195 */ SOUND_VOICE_CONKER_POSITIVE5, +/* 0x0196 */ SOUND_VOICE_TIMBER_POSITIVE5, +/* 0x0197 */ SOUND_VOICE_BANJO_POSITIVE5, +/* 0x0198 */ SOUND_VOICE_DRUMSTICK_POSITIVE5, +/* 0x0199 */ SOUND_VOICE_PIPSY_POSITIVE5, +/* 0x019A */ SOUND_VOICE_TT_POSITIVE5, +/* 0x019B */ SOUND_VOICE_DIDDY_POSITIVE5, +/* 0x019C */ SOUND_VOICE_UNUSED1_POSITIVE5, +/* 0x019D */ SOUND_VOICE_UNUSED2_POSITIVE5, +/* 0x019E */ SOUND_VOICE_KRUNCH_POSITIVE6, +/* 0x019F */ SOUND_VOICE_BUMPER_POSITIVE6, +/* 0x01A0 */ SOUND_VOICE_TIPTUP_POSITIVE6, +/* 0x01A1 */ SOUND_VOICE_CONKER_POSITIVE6, +/* 0x01A2 */ SOUND_VOICE_TIMBER_POSITIVE6, +/* 0x01A3 */ SOUND_VOICE_BANJO_POSITIVE6, +/* 0x01A4 */ SOUND_VOICE_DRUMSTICK_POSITIVE6, +/* 0x01A5 */ SOUND_VOICE_PIPSY_POSITIVE6, +/* 0x01A6 */ SOUND_VOICE_TT_POSITIVE6, +/* 0x01A7 */ SOUND_VOICE_DIDDY_POSITIVE6, +/* 0x01A8 */ SOUND_VOICE_UNUSED1_POSITIVE6, +/* 0x01A9 */ SOUND_VOICE_UNUSED2_POSITIVE6, +/* 0x01AA */ SOUND_VOICE_KRUNCH_POSITIVE7, +/* 0x01AB */ SOUND_VOICE_BUMPER_POSITIVE7, +/* 0x01AC */ SOUND_VOICE_TIPTUP_POSITIVE7, +/* 0x01AD */ SOUND_VOICE_CONKER_POSITIVE7, +/* 0x01AE */ SOUND_VOICE_TIMBER_POSITIVE7, +/* 0x01AF */ SOUND_VOICE_BANJO_POSITIVE7, +/* 0x01B0 */ SOUND_VOICE_DRUMSTICK_POSITIVE7, +/* 0x01B1 */ SOUND_VOICE_PIPSY_POSITIVE7, +/* 0x01B2 */ SOUND_VOICE_TT_POSITIVE7, +/* 0x01B3 */ SOUND_VOICE_DIDDY_POSITIVE7, +/* 0x01B4 */ SOUND_VOICE_UNUSED1_POSITIVE7, +/* 0x01B5 */ SOUND_VOICE_UNUSED2_POSITIVE7, +/* 0x01B6 */ SOUND_VOICE_KRUNCH_POSITIVE8, +/* 0x01B7 */ SOUND_VOICE_BUMPER_POSITIVE8, +/* 0x01B8 */ SOUND_VOICE_TIPTUP_POSITIVE8, +/* 0x01B9 */ SOUND_VOICE_CONKER_POSITIVE8, +/* 0x01BA */ SOUND_VOICE_TIMBER_POSITIVE8, +/* 0x01BB */ SOUND_VOICE_BANJO_POSITIVE8, +/* 0x01BC */ SOUND_VOICE_DRUMSTICK_POSITIVE8, +/* 0x01BD */ SOUND_VOICE_PIPSY_POSITIVE8, +/* 0x01BE */ SOUND_VOICE_TT_POSITIVE8, +/* 0x01BF */ SOUND_VOICE_DIDDY_POSITIVE8, +/* 0x01C0 */ SOUND_VOICE_UNUSED1_POSITIVE8, +/* 0x01C1 */ SOUND_VOICE_UNUSED2_POSITIVE8, +/* 0x01C2 */ SOUND_VOICE_KRUNCH_NEGATIVE1, +/* 0x01C3 */ SOUND_VOICE_BUMPER_NEGATIVE1, +/* 0x01C4 */ SOUND_VOICE_TIPTUP_NEGATIVE1, +/* 0x01C5 */ SOUND_VOICE_CONKER_NEGATIVE1, +/* 0x01C6 */ SOUND_VOICE_TIMBER_NEGATIVE1, +/* 0x01C7 */ SOUND_VOICE_BANJO_NEGATIVE1, +/* 0x01C8 */ SOUND_VOICE_DRUMSTICK_NEGATIVE1, +/* 0x01C9 */ SOUND_VOICE_PIPSY_NEGATIVE1, +/* 0x01CA */ SOUND_VOICE_TT_NEGATIVE1, +/* 0x01CB */ SOUND_VOICE_DIDDY_NEGATIVE1, +/* 0x01CC */ SOUND_VOICE_UNUSED1_NEGATIVE1, +/* 0x01CD */ SOUND_VOICE_UNUSED2_NEGATIVE1, +/* 0x01CE */ SOUND_VOICE_KRUNCH_NEGATIVE2, +/* 0x01CF */ SOUND_VOICE_BUMPER_NEGATIVE2, +/* 0x01D0 */ SOUND_VOICE_TIPTUP_NEGATIVE2, +/* 0x01D1 */ SOUND_VOICE_CONKER_NEGATIVE2, +/* 0x01D2 */ SOUND_VOICE_TIMBER_NEGATIVE2, +/* 0x01D3 */ SOUND_VOICE_BANJO_NEGATIVE2, +/* 0x01D4 */ SOUND_VOICE_DRUMSTICK_NEGATIVE2, +/* 0x01D5 */ SOUND_VOICE_PIPSY_NEGATIVE2, +/* 0x01D6 */ SOUND_VOICE_TT_NEGATIVE2, +/* 0x01D7 */ SOUND_VOICE_DIDDY_NEGATIVE2, +/* 0x01D8 */ SOUND_VOICE_UNUSED1_NEGATIVE2, +/* 0x01D9 */ SOUND_VOICE_UNUSED2_NEGATIVE2, +/* 0x01DA */ SOUND_VOICE_KRUNCH_NEGATIVE3, +/* 0x01DB */ SOUND_VOICE_BUMPER_NEGATIVE3, +/* 0x01DC */ SOUND_VOICE_TIPTUP_NEGATIVE3, +/* 0x01DD */ SOUND_VOICE_CONKER_NEGATIVE3, +/* 0x01DE */ SOUND_VOICE_TIMBER_NEGATIVE3, +/* 0x01DF */ SOUND_VOICE_BANJO_NEGATIVE3, +/* 0x01E0 */ SOUND_VOICE_DRUMSTICK_NEGATIVE3, +/* 0x01E1 */ SOUND_VOICE_PIPSY_NEGATIVE3, +/* 0x01E2 */ SOUND_VOICE_TT_NEGATIVE3, +/* 0x01E3 */ SOUND_VOICE_DIDDY_NEGATIVE3, +/* 0x01E4 */ SOUND_VOICE_UNUSED1_NEGATIVE3, +/* 0x01E5 */ SOUND_VOICE_UNUSED2_NEGATIVE3, +/* 0x01E6 */ SOUND_VOICE_KRUNCH_NEGATIVE4, +/* 0x01E7 */ SOUND_VOICE_BUMPER_NEGATIVE4, +/* 0x01E8 */ SOUND_VOICE_TIPTUP_NEGATIVE4, +/* 0x01E9 */ SOUND_VOICE_CONKER_NEGATIVE4, +/* 0x01EA */ SOUND_VOICE_TIMBER_NEGATIVE4, +/* 0x01EB */ SOUND_VOICE_BANJO_NEGATIVE4, +/* 0x01EC */ SOUND_VOICE_DRUMSTICK_NEGATIVE4, +/* 0x01ED */ SOUND_VOICE_PIPSY_NEGATIVE4, +/* 0x01EE */ SOUND_VOICE_TT_NEGATIVE4, +/* 0x01EF */ SOUND_VOICE_DIDDY_NEGATIVE4, +/* 0x01F0 */ SOUND_VOICE_UNUSED1_NEGATIVE4, +/* 0x01F1 */ SOUND_VOICE_UNUSED2_NEGATIVE4, +/* 0x01F2 */ SOUND_VOICE_KRUNCH_NEGATIVE5, +/* 0x01F3 */ SOUND_VOICE_BUMPER_NEGATIVE5, +/* 0x01F4 */ SOUND_VOICE_TIPTUP_NEGATIVE5, +/* 0x01F5 */ SOUND_VOICE_CONKER_NEGATIVE5, +/* 0x01F6 */ SOUND_VOICE_TIMBER_NEGATIVE5, +/* 0x01F7 */ SOUND_VOICE_BANJO_NEGATIVE5, +/* 0x01F8 */ SOUND_VOICE_DRUMSTICK_NEGATIVE5, +/* 0x01F9 */ SOUND_VOICE_PIPSY_NEGATIVE5, +/* 0x01FA */ SOUND_VOICE_TT_NEGATIVE5, +/* 0x01FB */ SOUND_VOICE_DIDDY_NEGATIVE5, +/* 0x01FC */ SOUND_VOICE_UNUSED1_NEGATIVE5, +/* 0x01FD */ SOUND_VOICE_UNUSED2_NEGATIVE5, +/* 0x01FE */ SOUND_VOICE_KRUNCH_NEGATIVE6, +/* 0x01FF */ SOUND_VOICE_BUMPER_NEGATIVE6, +/* 0x0200 */ SOUND_VOICE_TIPTUP_NEGATIVE6, +/* 0x0201 */ SOUND_VOICE_CONKER_NEGATIVE6, +/* 0x0202 */ SOUND_VOICE_TIMBER_NEGATIVE6, +/* 0x0203 */ SOUND_VOICE_BANJO_NEGATIVE6, +/* 0x0204 */ SOUND_VOICE_DRUMSTICK_NEGATIVE6, +/* 0x0205 */ SOUND_VOICE_PIPSY_NEGATIVE6, +/* 0x0206 */ SOUND_VOICE_TT_NEGATIVE6, +/* 0x0207 */ SOUND_VOICE_DIDDY_NEGATIVE6, +/* 0x0208 */ SOUND_VOICE_UNUSED1_NEGATIVE6, +/* 0x0209 */ SOUND_VOICE_UNUSED2_NEGATIVE6, +/* 0x020A */ SOUND_VOICE_KRUNCH_NEGATIVE7, +/* 0x020B */ SOUND_VOICE_BUMPER_NEGATIVE7, +/* 0x020C */ SOUND_VOICE_TIPTUP_NEGATIVE7, +/* 0x020D */ SOUND_VOICE_CONKER_NEGATIVE7, +/* 0x020E */ SOUND_VOICE_TIMBER_NEGATIVE7, +/* 0x020F */ SOUND_VOICE_BANJO_NEGATIVE7, +/* 0x0210 */ SOUND_VOICE_DRUMSTICK_NEGATIVE7, +/* 0x0211 */ SOUND_VOICE_PIPSY_NEGATIVE7, +/* 0x0212 */ SOUND_VOICE_TT_NEGATIVE7, +/* 0x0213 */ SOUND_VOICE_DIDDY_NEGATIVE7, +/* 0x0214 */ SOUND_VOICE_UNUSED1_NEGATIVE7, +/* 0x0215 */ SOUND_VOICE_UNUSED2_NEGATIVE7, +/* 0x0216 */ SOUND_VOICE_KRUNCH_NEGATIVE8, +/* 0x0217 */ SOUND_VOICE_BUMPER_NEGATIVE8, +/* 0x0218 */ SOUND_VOICE_TIPTUP_NEGATIVE8, +/* 0x0219 */ SOUND_VOICE_CONKER_NEGATIVE8, +/* 0x021A */ SOUND_VOICE_TIMBER_NEGATIVE8, +/* 0x021B */ SOUND_VOICE_BANJO_NEGATIVE8, +/* 0x021C */ SOUND_VOICE_DRUMSTICK_NEGATIVE8, // Sounds kind of profane ngl +/* 0x021D */ SOUND_VOICE_PIPSY_NEGATIVE8, +/* 0x021E */ SOUND_VOICE_TT_NEGATIVE8, +/* 0x021F */ SOUND_VOICE_DIDDY_NEGATIVE8, +/* 0x0220 */ SOUND_VOICE_BLUEY_REMATCH4, // "If you can beat me again..." +/* 0x0221 */ SOUND_VOICE_BLUEY_TROPHY2, // "Goodbye kid" +/* 0x0222 */ SOUND_UNK_222, // I'm guessing rolling snowballs +/* 0x0223 */ SOUND_UNK_223, // The sound of hitting something +/* 0x0224 */ SOUND_UNK_224, // Same +/* 0x0225 */ SOUND_VOICE_TRICKY_OW, +/* 0x0226 */ SOUND_VOICE_TRICKY_OW2, +/* 0x0227 */ SOUND_VOICE_SMOKEY_HM, +/* 0x0228 */ SOUND_VOICE_SMOKEY_HM2, +/* 0x0229 */ SOUND_VOICE_BLUEY_AIEE, +/* 0x022A */ SOUND_VOICE_BLUEY_OHNO3, +/* 0x022B */ SOUND_VOICE_BOSS_LAUGH, // Don't recognise it +/* 0x022C */ SOUND_VOICE_BOSS_LAUGH2, // Yeah +/* 0x022D */ SOUND_VOICE_BLUEY_EH3, +/* 0x022E */ SOUND_VOICE_TT_GAME_STATUS, +/* 0x022F */ SOUND_VOICE_TT_OKAY, +/* 0x0230 */ SOUND_VOICE_TT_TIME_TRIAL_OFF, +/* 0x0231 */ SOUND_VOICE_TT_TIME_TRIAL_ON, +/* 0x0232 */ SOUND_NITRO_LEVEL3_CHARGE, +/* 0x0233 */ SOUND_NITRO_LEVEL3_BOOST, +/* 0x0234 */ SOUND_VOICE_TAJ_SELECT_VEHICLE, +/* 0x0235 */ SOUND_VOICE_TAJ_ABRAKADABRA, +/* 0x0236 */ SOUND_VOICE_TAJ_ALAKAZAM, +/* 0x0237 */ SOUND_VOICE_TAJ_ALAKAZOOM2, +/* 0x0238 */ SOUND_VOICE_TAJ_MENUBACK, // "Can I help you further?" +/* 0x0239 */ SOUND_VOICE_TAJ_CHALLENGE_MENU, // "Select the challenge of your choice" +/* 0x023A */ SOUND_VOICE_TAJ_MENUBACK2, // "Will that be all?" +/* 0x023B */ SOUND_VOICE_BRONTO_ROAR, +/* 0x023C */ SOUND_WHOOSH5, +/* 0x023D */ SOUND_COLLECT_BALLOON, +/* 0x023E */ SOUND_RAIN, +/* 0x023F */ SOUND_THUNDER, +/* 0x0240 */ SOUND_ZAP4, +/* 0x0241 */ SOUND_MENU_BACK3, +/* 0x0242 */ SOUND_VOICE_BUBBLER_OW, +/* 0x0243 */ SOUND_VOICE_BUBBLER_AUGH, +/* 0x0244 */ SOUND_VOICE_BUBBLER_HOHO, +/* 0x0245 */ SOUND_VOICE_BUBBLER_HOHO2, +/* 0x0246 */ SOUND_VOICE_BUBBLER_AW, +/* 0x0247 */ SOUND_VOICE_BUBBLER_OW2, +/* 0x0248 */ SOUND_VOICE_BUBBLER_AUGH2, +/* 0x0249 */ SOUND_DRAWBRIDGE_BELL, +/* 0x024A */ SOUND_BUBBLE_RISE, +/* 0x024B */ SOUND_VOICE_TT_BEAT_MY_TIME, // "Now try beat my time" +/* 0x024C */ SOUND_VOICE_TT_WELL_THEN, +/* 0x024D */ SOUND_VOICE_TT_TRY_ANOTHER_TRACK, // "Now try another track" +/* 0x024E */ SOUND_VOICE_TT_BEAT_ALL_TIMES, // "You've beaten all my times" +/* 0x024F */ SOUND_VOICE_TT_UNLOCKED, // "Now you can pick me" +/* 0x0250 */ SOUND_VOICE_TAJ_CHALLENGE_RACE, // "I challenge you to a race" +/* 0x0251 */ SOUND_UNK_251, +/* 0x0252 */ SOUND_UNK_252, +/* 0x0253 */ SOUND_UNK_253, +/* 0x0254 */ SOUND_UNK_254, +/* 0x0255 */ SOUND_UNK_255, +/* 0x0256 */ SOUND_UNK_256, +/* 0x0257 */ SOUND_UNK_257, +/* 0x0258 */ SOUND_UNK_258, +/* 0x0259 */ SOUND_UNK_259, +/* 0x025A */ SOUND_UNK_25A, +/* 0x025B */ SOUND_UNK_25B, +/* 0x025C */ SOUND_UNK_25C, +/* 0x025D */ SOUND_UNK_25D, +/* 0x025E */ SOUND_UNK_25E, +/* 0x025F */ SOUND_UNK_25F, +/* 0x0260 */ SOUND_UNK_260, +/* 0x0261 */ SOUND_UNK_261, +/* 0x0262 */ SOUND_UNK_262, +/* 0x0263 */ SOUND_UNK_263, +/* 0x0264 */ SOUND_UNK_264, +/* 0x0265 */ SOUND_UNK_265, +/* 0x0266 */ SOUND_UNK_266, +/* 0x0267 */ SOUND_UNK_267, +/* 0x0268 */ SOUND_UNK_268, +/* 0x0269 */ SOUND_UNK_269, +/* 0x026A */ SOUND_UNK_26A, +/* 0x026B */ SOUND_UNK_26B, +/* 0x026C */ SOUND_UNK_26C, +/* 0x026D */ SOUND_UNK_26D, +/* 0x026E */ SOUND_UNK_26E, +/* 0x026F */ SOUND_UNK_26F, +/* 0x0270 */ SOUND_UNK_270, +/* 0x0271 */ SOUND_UNK_271, +/* 0x0272 */ SOUND_UNK_272, +/* 0x0273 */ SOUND_UNK_273, +/* 0x0274 */ SOUND_UNK_274, +/* 0x0275 */ SOUND_UNK_275, +/* 0x0276 */ SOUND_UNK_276, +/* 0x0277 */ SOUND_UNK_277, +/* 0x0278 */ SOUND_UNK_278, +/* 0x0279 */ SOUND_UNK_279, +/* 0x027A */ SOUND_UNK_27A, +/* 0x027B */ SOUND_UNK_27B, +/* 0x027C */ SOUND_UNK_27C, +/* 0x027D */ SOUND_UNK_27D, +/* 0x027E */ SOUND_UNK_27E, + // Trying to play 27F onwards will incur a crash. +/* 0x027F */ NUM_SOUND_IDS }; #endif diff --git a/include/structs.h b/include/structs.h index b807eb87..cbc078e8 100644 --- a/include/structs.h +++ b/include/structs.h @@ -6,10 +6,20 @@ #include "types.h" #include "enums.h" +// Stolen from PD +// This hacky structure allows coords to be accessed using +// coord->x, coord->y and coord->z, but also as +// coord->f[0], coord->f[1] and coord->f[2]. +// In some places code only matches when using the float array. typedef struct Vec3f { - f32 x; - f32 y; - f32 z; + union { + struct { + f32 x; + f32 y; + f32 z; + }; + f32 f[3]; + }; } Vec3f; /* Size: 0x20 bytes */ @@ -213,12 +223,11 @@ typedef struct PulsatingLightData { /* Size: 0xC4 bytes */ typedef struct LevelHeader { - /* 0x00 */ s8 world; + /* 0x00 */ u8 world; /* 0x01 */ u8 unk1; /* 0x02 */ s8 unk2; /* 0x03 */ u8 unk3; - /* 0x04 */ u8 unk4[4]; - + /* 0x04 */ s8 unk4[4]; /* 0x08 */ f32 course_height; /* 0x0C */ u8 padC[0x14]; @@ -282,15 +291,18 @@ typedef struct LevelHeader { /* 0xB0 */ s16 unkB0; /* 0xB2 */ u8 unkB2; /* 0xB3 */ u8 voiceLimit; - /* 0xB3 */ u8 unkB4; - /* 0xB3 */ u8 unkB5; - /* 0xB3 */ u8 unkB6; - /* 0xB3 */ u8 unkB7; - /* 0xB4 */ u8 padB8[0x2]; + /* 0xB4 */ u8 unkB4; + /* 0xB5 */ u8 unkB5; + /* 0xB6 */ u8 unkB6; + /* 0xB7 */ u8 unkB7; + /* 0xB8 */ s8 unkB8; + /* 0xB9 */ u8 unkB9; /* 0xBA */ s16 unkBA; + /* 0xBC */ u8 unkBC; + /* 0xBD */ u8 unkBD; /* 0xBE */ u8 unkBE; - /* 0xBE */ u8 unkBF; - /* 0xBE */ u8 unkC0; + /* 0xBF */ u8 unkBF; + /* 0xC0 */ u8 unkC0; /* 0xC1 */ u8 unkC1; /* 0xC2 */ u8 unkC2; /* 0xC3 */ u8 unkC3; @@ -385,7 +397,7 @@ typedef struct TriangleBatchInfo { /* Size: 8 bytes */ typedef struct ObjectModel_44 { /* 0x00 */ s32 *anim; -/* 0x04 */ s32 unk4; +/* 0x04 */ s32 unk4; // Number of frames in animation? } ObjectModel_44; typedef struct ObjectModel { @@ -408,6 +420,8 @@ typedef struct ObjectModel { /* 0x40 */ s32 *unk40; /* 0x44 */ ObjectModel_44 *animations; /* 0x48 */ s16 numberOfAnimations; +/* 0x4A */ u8 pad4A[6]; +/* 0x50 */ s16 unk50; } ObjectModel; /* Size: 0x44 bytes */ @@ -465,7 +479,12 @@ typedef struct LevelModel { /* 0x20 */ s32 unk20; //spriteIndex? u8 pad24[0x14]; /* 0x38 */ u32 minimapColor; - u8 pad3C[0xC]; +/* 0x3C */ s16 unk3C; +/* 0x3E */ s16 unk3E; +/* 0x40 */ s16 unk40; +/* 0x42 */ s16 unk42; +/* 0x44 */ s16 unk44; +/* 0x46 */ s16 unk46; /* 0x48 */ s32 modelSize; } LevelModel; @@ -524,7 +543,9 @@ typedef struct ObjectHeader { s8 unk58; u8 pad59; /* 0x5A */ s8 unk5A; - u8 pad5B[0x5]; + u8 pad5B[0x2]; + /* 0x5D */ u8 unk5D; //Misc Asset index? + /* 0x5E */ u8 pad5E[0x2]; /* 0x60 */ char internalName[16]; /* 0x70 */ u8 unk70; /* 0x71 */ u8 unk71; @@ -810,13 +831,14 @@ typedef struct Object_Exit { /* 0x14 */ s8 unk14; } Object_Exit; +/* Size: 0x224 - 548 bytes */ typedef struct Object_Racer { /* 0x000 */ s16 playerIndex; // -1 = AI Controlled, 0 to 3 = Object controlled /* 0x002 */ u8 unk2; /* 0x003 */ s8 characterId; // Affects minimap color, horn, voice, etc. /* 0x004 */ s32 unk4; /* 0x008 */ f32 forwardVel; - /* 0x00C */ s32 unkC; + /* 0x00C */ f32 unkC; /* 0x010 */ s32 unk10; /* 0x014 */ s32 unk14; /* 0x018 */ s32 unk18; @@ -840,9 +862,9 @@ typedef struct Object_Racer { /* 0x05C */ f32 prev_x_position; /* 0x060 */ f32 prev_y_position; /* 0x064 */ f32 prev_z_position; - /* 0x068 */ f32 unk68; - /* 0x06C */ f32 unk6C; - /* 0x070 */ f32 unk70; + /* 0x068 */ f32 unk68; // xPos + /* 0x06C */ f32 unk6C; // yPos + /* 0x070 */ f32 unk70; // zPos /* 0x074 */ f32 unk74; /* 0x078 */ f32 carBobX; /* 0x07C */ f32 carBobY; @@ -868,10 +890,10 @@ typedef struct Object_Racer { /* 0x0CC */ f32 unkCC; /* 0x0D0 */ f32 unkD0; /* 0x0D4 */ s32 unkD4; - /* 0x0D8 */ f32 unkD8[3]; - /* 0x0E4 */ f32 unkE4[3]; - /* 0x0F0 */ f32 unkF0[3]; - /* 0x0FC */ f32 unkFC[3]; + /* 0x0D8 */ Vec3f unkD8; + /* 0x0E4 */ Vec3f unkE4; + /* 0x0F0 */ Vec3f unkF0; + /* 0x0FC */ Vec3f unkFC; /* 0x108 */ struct Object *unk108; /* 0x10C */ s32 unk10C; /* 0x110 */ s32 unk110; @@ -906,7 +928,7 @@ typedef struct Object_Racer { /* 0x174 */ s8 balloon_level; /* 0x175 */ s8 unk175; /* 0x176 */ s16 unk176; - /* 0x178 */ s32 *unk178; + /* 0x178 */ u8 *unk178; /* 0x17C */ s32 shieldSoundMask; /* 0x180 */ s32 unk180; // Soundmask for banana pickup, whether that's the only use I do not yet know. /* 0x184 */ s8 unk184; @@ -933,8 +955,7 @@ typedef struct Object_Racer { /* 0x1A6 */ s16 z_rotation_vel; /* 0x1A8 */ s16 unk1A8; /* 0x1AA */ u16 unk1AA; - /* 0x1AC */ u8 unk1AC; - /* 0x1AD */ u8 unk1AD; + /* 0x1AC */ s16 unk1AC; /* 0x1AE */ s16 unk1AE; /* 0x1B0 */ s16 unk1B0; /* 0x1B2 */ s16 unk1B2; @@ -1007,7 +1028,7 @@ typedef struct Object_Racer { /* 0x204 */ s16 unk204; /* 0x206 */ s16 unk206; /* 0x208 */ s16 unk208; - /* 0x20A */ s8 unk20A; + /* 0x20A */ u8 unk20A; /* 0x20B */ s8 unk20B; /* 0x20C */ u8 throttleReleased; /* 0x20D */ u8 unk20D; @@ -1174,6 +1195,16 @@ typedef struct Object_8001B7A8 { /* 0x112 */ s16 unk112; } Object_8001B7A8; +typedef struct Object_64_80021400 { + /* 0x00 */ u8 pad[0x2A]; + /* 0x2A */ s16 unk2A; +} Object_64_80021400; + +typedef struct Object_80021400_64 { + /* 0x000 */ u8 pad[0x64]; + /* 0x064 */ struct Object_64_80021400 *obj64; +} Object_80021400_64; + typedef struct Object_64 { union { Object_LaserGun laser_gun; @@ -1217,12 +1248,19 @@ typedef struct Object_64 { Object_Bridge_WhaleRamp bridge_whale_ramp; Object_80011AD0 obj80011AD0; Object_8001B7A8 obj8001B7A8; + Object_80021400_64 obj80021400_64; }; } Object_64; typedef struct Object_68 { - u8 pad00[0x20]; - s8 unk20; + /* 0x00 */ union { + ObjectModel *objModel; + TextureHeader *texHeader; + }; + /* 0x04 */ u8 pad04[12]; + /* 0x10 */ s16 unk10; + /* 0x14 */ u8 pad14[14]; + /* 0x20 */ s8 unk20; } Object_68; /* Size: 0x20 bytes */ @@ -1309,6 +1347,7 @@ typedef struct Object { /* 0x0074 */ u32 unk74; union { + /* 0x0078 */ ObjectTransform *trans78; /* 0x0078 */ s32 unk78; /* 0x0078 */ f32 unk78f; }; @@ -1405,7 +1444,7 @@ typedef struct Object { // Unused typedef struct GhostHeaderChecksum { - u8 levelID; + u8 levelID; u8 vehicleID; // 0 = Car, 1 = Hovercraft, 2 = Plane } GhostHeaderChecksum; diff --git a/src/camera.c b/src/camera.c index 7fc7558a..6a9f88f5 100644 --- a/src/camera.c +++ b/src/camera.c @@ -117,10 +117,12 @@ s8 D_80120D14; u8 D_80120D15; s32 D_80120D18; s32 D_80120D1C; -s32 D_80120D20[2]; -s32 D_80120D28[6]; -s32 D_80120D40[6]; -u16 perspNorm[12]; +s32 D_80120D20; +s32 D_80120D24; +f32 D_80120D28[6]; +f32 D_80120D40[6]; +f32 D_80120D58[5]; +u16 perspNorm; Matrix *D_80120D70[6]; Mtx *D_80120D88[6]; Matrix D_80120DA0[5]; @@ -159,7 +161,7 @@ void func_80065EA0(void) { D_80120D14 = 0; D_80120CE4 = 0; D_80120D1C = 0; - D_80120D20[0] = 0; + D_80120D20 = 0; gNumberOfViewports = 0; D_80120D0C = 0; D_80120D18 = 0; @@ -170,7 +172,7 @@ void func_80065EA0(void) { if ((D_B0000578 & 0xFFFF) != 0x8965) { D_800DD060 = 1; } - guPerspectiveF(D_80120EE0, &perspNorm[10], CAMERA_DEFAULT_FOV, CAMERA_ASPECT, CAMERA_NEAR, CAMERA_FAR, CAMERA_SCALE); + guPerspectiveF(D_80120EE0, &perspNorm, CAMERA_DEFAULT_FOV, CAMERA_ASPECT, CAMERA_NEAR, CAMERA_FAR, CAMERA_SCALE); func_8006F870(D_80120EE0, D_80120FE0); gCurCamFOV = CAMERA_DEFAULT_FOV; } @@ -211,7 +213,7 @@ UNUSED f32 get_current_camera_fov(void) { void update_camera_fov(f32 camFieldOfView) { if (CAMERA_MIN_FOV < camFieldOfView && camFieldOfView < CAMERA_MAX_FOV && camFieldOfView != gCurCamFOV) { gCurCamFOV = camFieldOfView; - guPerspectiveF(D_80120EE0, &perspNorm[10], camFieldOfView, CAMERA_ASPECT, CAMERA_NEAR, CAMERA_FAR, CAMERA_SCALE); + guPerspectiveF(D_80120EE0, &perspNorm, camFieldOfView, CAMERA_ASPECT, CAMERA_NEAR, CAMERA_FAR, CAMERA_SCALE); func_8006F870(&D_80120EE0, &D_80120FE0); } } @@ -220,12 +222,11 @@ void update_camera_fov(f32 camFieldOfView) { * Unused function that recalculates the perspective matrix. */ UNUSED void calculate_camera_perspective(void) { - guPerspectiveF(D_80120EE0, &perspNorm[10], CAMERA_DEFAULT_FOV, CAMERA_ASPECT, CAMERA_NEAR, CAMERA_FAR, CAMERA_SCALE); + guPerspectiveF(D_80120EE0, &perspNorm, CAMERA_DEFAULT_FOV, CAMERA_ASPECT, CAMERA_NEAR, CAMERA_FAR, CAMERA_SCALE); func_8006F870(&D_80120EE0, &D_80120FE0); } -/* Unused? */ -Matrix *func_80066204(void) { +UNUSED Matrix *func_80066204(void) { return &D_801210A0; } @@ -721,7 +722,7 @@ GLOBAL_ASM("asm/non_matchings/camera/func_80067A3C.s") void func_80067D3C(Gfx **dlist, UNUSED Mtx **mats) { s32 temp; - gSPPerspNormalize((*dlist)++, perspNorm[10]); + gSPPerspNormalize((*dlist)++, perspNorm); temp = D_80120CE4; if (D_80120D14 != 0) { @@ -856,21 +857,27 @@ GLOBAL_ASM("asm/non_matchings/camera/func_80068BF4.s") GLOBAL_ASM("asm/non_matchings/camera/func_80068FA8.s") GLOBAL_ASM("asm/non_matchings/camera/func_80069484.s") GLOBAL_ASM("asm/non_matchings/camera/func_80069790.s") -GLOBAL_ASM("asm/non_matchings/camera/func_800699E4.s") -#ifdef NON_MATCHING +UNUSED void func_800699E4(f32 *arg0, f32 *arg1, f32 *arg2) { + *arg0 = D_80120D28[D_80120D20]; + *arg1 = D_80120D40[D_80120D20]; + *arg2 = D_80120D58[D_80120D20]; +} + void func_80069A40(Gfx **dlist) { - D_80120D20[0]--; + D_80120D20--; D_80120D1C--; + + // Fakematch? + { s32 temp = D_80120D20; if ((temp && temp) != 0){} } + if (D_80120D1C > 0) { gSPMatrix((*dlist)++, OS_PHYSICAL_TO_K0(D_80120D88[D_80120D1C]), G_MTX_DKR_INDEX_1); - return; } - gDkrInsertMatrix((*dlist)++, G_MWO_MATRIX_XX_XY_I, 0); + else { + gDkrInsertMatrix((*dlist)++, G_MWO_MATRIX_XX_XY_I, 0); + } } -#else -GLOBAL_ASM("asm/non_matchings/camera/func_80069A40.s") -#endif UNUSED void func_80069ACC(f32 arg0, f32 arg1, f32 arg2) { D_80120AC0[D_80120CE4].trans.x_position += arg0; diff --git a/src/camera.h b/src/camera.h index 0e9024eb..dcd324ea 100644 --- a/src/camera.h +++ b/src/camera.h @@ -96,6 +96,10 @@ extern u8 D_800DD2F8[8]; extern s16 gButtonMask; +extern f32 D_80120D58[5]; +extern f32 D_80120D40[6]; +extern f32 D_80120D28[6]; + //TODO: Figure out where these functions live: unknown_070110? void func_8006F870(Matrix *, Matrix *); //unknown_070110 void func_800705F8(Matrix *, f32, f32, f32); //From unknown_070110 diff --git a/src/game.c b/src/game.c index 3b5459eb..cce9a195 100644 --- a/src/game.c +++ b/src/game.c @@ -719,6 +719,8 @@ void func_8006BFC8(s8 *arg0) { phi_s0 = arg0[phi_s0]; + // Check if CHEAT_ULTIMATE_AI is active + // This check works because a << 6 will but a 1 in the sign bit making it negative if ((get_filtered_cheats() << 6) < 0) { phi_s0 = 9; } @@ -753,27 +755,29 @@ s8 func_8006C19C(void) { return D_800DD318; } -void func_8006C1AC(s32 arg0, s32 arg1, s32 arg2, s32 arg3) { - D_801211C8[D_800DD328++] = arg0; - D_801211C8[D_800DD328++] = arg1; - D_801211C8[D_800DD328++] = arg2; - D_801211C8[D_800DD328++] = arg3; +// Push a stack onto D_801211C8 +void func_8006C1AC(s32 levelId, s32 entranceId, s32 vehicleId, s32 cutsceneId) { + D_801211C8[D_800DD328++] = levelId; + D_801211C8[D_800DD328++] = entranceId; + D_801211C8[D_800DD328++] = vehicleId; + D_801211C8[D_800DD328++] = cutsceneId; } -void func_8006C22C(s32 *arg0, s32 *arg1, s32 *arg2, s32 *arg3) { +// Pop a stack from D_801211C8 +void func_8006C22C(s32 *levelId, s32 *entranceId, s32 *vehicleId, s32 *cutsceneId) { s16 temp_v1; D_800DD328--; - *arg3 = D_801211C8[D_800DD328]; + *cutsceneId = D_801211C8[D_800DD328]; D_800DD328--; temp_v1 = D_801211C8[D_800DD328]; D_800DD328--; - *arg1 = D_801211C8[D_800DD328]; + *entranceId = D_801211C8[D_800DD328]; D_800DD328--; - *arg0 = D_801211C8[D_800DD328]; + *levelId = D_801211C8[D_800DD328]; if (temp_v1 != -1) { - *arg2 = temp_v1; + *vehicleId = temp_v1; } D_800DD32C = 1; @@ -1775,8 +1779,7 @@ void func_8006E994(Settings *settings) { settings->wizpigAmulet = 0; } -// Unused? -void func_8006EA58(void) { +UNUSED void func_8006EA58(void) { func_8006E770(gSettingsPtr, 3); func_8006E994(gSettingsPtr); } diff --git a/src/game.h b/src/game.h index 6ebd5f59..257edc00 100644 --- a/src/game.h +++ b/src/game.h @@ -107,8 +107,8 @@ void func_8006BFC8(s8 *arg0); void func_8006C164(void); TempStruct5 *func_8006C18C(void); s8 func_8006C19C(void); -void func_8006C1AC(s32 arg0, s32 arg1, s32 arg2, s32 arg3); -void func_8006C22C(s32 *arg0, s32 *arg1, s32 *arg2, s32 *arg3); +void func_8006C1AC(s32 levelId, s32 entranceId, s32 vehicleId, s32 cutsceneId); +void func_8006C22C(s32 *levelId, s32 *entranceId, s32 *vehicleId, s32 *cutsceneId); void func_8006C2E4(void); s16 func_8006C2F0(void); s32 func_8006C300(void); diff --git a/src/menu.c b/src/menu.c index 6a92d014..e4ba06f6 100644 --- a/src/menu.c +++ b/src/menu.c @@ -5374,7 +5374,7 @@ s32 menu_5_loop(s32 updateRate) { sp20 = FALSE; if (!is_time_trial_enabled()) { if (sp1C == 1) { - if (settings->worldId == 5 || (settings->bosses & (1 << settings->worldId))) { + if (settings->worldId == WORLD_FUTURE_FUN_LAND || (settings->bosses & (1 << settings->worldId))) { sp20 = TRUE; } } @@ -5924,25 +5924,23 @@ s32 compress_filename_string(char *filename, s32 length) { // Not matching, but functionally equivalent. // Trims the trailing end of the string, so that spaces won't show up at the end. -s32 trim_filename_string(u8 *input, u8 *output) { +void trim_filename_string(char *input, char *output) { s32 numSpaces, numSpacesProcessed; while (*input != '\0') { numSpaces = 0; numSpacesProcessed = 0; if (*input == ' ') { - u8 *temp = input; - temp++; + input++; numSpaces++; - while (*temp == ' ') { - temp++; + while (*input == ' ') { + input++; numSpaces++; } - if (*temp == '\0') { - break; - } - while (numSpacesProcessed < numSpaces) { - *(output++) = *(input++); - numSpacesProcessed++; + if (*input != '\0') { + while (numSpacesProcessed < numSpaces) { + *(output++) = *(input++); + numSpacesProcessed++; + } } } else { *(output++) = *(input++); @@ -6001,7 +5999,7 @@ void menu_trophy_race_round_init(void) { s8 *levelIds; settings = get_settings(); - levelIds = (s8 *)get_misc_asset(MISC_ASSET_UNK1A); // Returns level ids array. + levelIds = (s8 *)get_misc_asset(ASSET_MISC_TRACKS_MENU_IDS); // Returns level ids array. if (gTrophyRaceRound == 0) { for (i = 0; i < 8; i++) { @@ -6042,7 +6040,7 @@ void draw_trophy_race_text(UNUSED s32 updateRate) { u8 *levelName; s8 *levelIds; - levelIds = (s8 *)get_misc_asset(MISC_ASSET_UNK1A); + levelIds = (s8 *)get_misc_asset(ASSET_MISC_TRACKS_MENU_IDS); if (osTvType == TV_TYPE_PAL) { yPos = 18; } else { @@ -6069,7 +6067,7 @@ s32 menu_trophy_race_round_loop(s32 updateRate) { s16 temp_a2; s32 temp; - trackMenuIds = (s8 *)get_misc_asset(MISC_ASSET_UNK1A); //tracks_menu_ids + trackMenuIds = (s8 *)get_misc_asset(ASSET_MISC_TRACKS_MENU_IDS); //tracks_menu_ids if (D_800E0980 != 0) { D_800E0980 -= updateRate; if (D_800E0980 <= 0) { diff --git a/src/menu.h b/src/menu.h index cd54ccbc..36bf7156 100644 --- a/src/menu.h +++ b/src/menu.h @@ -829,7 +829,7 @@ void func_80090918(s32 updateRate); void render_track_select_setup_ui(s32 updateRate); void func_80092188(s32 updateRate); void func_8008E4EC(void); -s32 trim_filename_string(u8 *input, u8 *output); +void trim_filename_string(char *input, char *output); void menu_trophy_race_round_init(void); void menu_ghost_data_init(void); void update_controller_sticks(void); diff --git a/src/object_functions.c b/src/object_functions.c index 7de02c51..e302a158 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -23,6 +23,8 @@ #include "game_ui.h" #include "waves.h" #include "unknown_003260.h" +#include "objects.h" +#include "math_util.h" /************ .data ************/ @@ -208,16 +210,8 @@ typedef struct Object80033F60_4C_64 { s16 unk204; } Object80033F60_4C_64; -s32 func_80011560(void); -void func_80011570(Object*, f32, f32, f32); -void func_8003FC44(f32, f32, f32, s32, s32, f32, s32); -s16 arctan2_f(f32, f32); -void play_sound_global(u16, s32 *); -void func_800AFC3C(Object *, s32); -void gParticlePtrList_addObject(Object *); - void obj_loop_fireball_octoweapon(Object *obj, s32 speed) { - Object *obj78; + ObjectTransform *trans78; Object_4C *obj4C; f32 sp7C; Object80033F60_4C_64 *obj4C_obj64; @@ -227,7 +221,7 @@ void obj_loop_fireball_octoweapon(Object *obj, s32 speed) { s32 *temp; f32 sp4C[7]; - obj78 = (Object*)obj->unk78; + trans78 = obj->trans78; sp7C = speed; if (osTvType == TV_TYPE_PAL) { @@ -239,9 +233,9 @@ void obj_loop_fireball_octoweapon(Object *obj, s32 speed) { obj->segment.trans.y_position = 0.0f; obj->segment.trans.z_position = 0.0f; func_80011560(); - func_80011570(obj, obj78->segment.trans.x_position, obj78->segment.trans.y_position, obj78->segment.trans.z_position); + func_80011570(obj, trans78->x_position, trans78->y_position, trans78->z_position); } else { - phi_f2 = (obj78->segment.trans.x_position - obj->segment.trans.x_position) * 0.1; + phi_f2 = (trans78->x_position - obj->segment.trans.x_position) * 0.1; if (phi_f2 > 10.0) { phi_f2 = 10.0f; } @@ -249,7 +243,7 @@ void obj_loop_fireball_octoweapon(Object *obj, s32 speed) { phi_f2 = -10.0f; } obj->segment.x_velocity += (phi_f2 - obj->segment.x_velocity) * 0.125 * sp7C; - phi_f2 = (obj78->segment.trans.y_position - obj->segment.trans.y_position) * 0.1; + phi_f2 = (trans78->y_position - obj->segment.trans.y_position) * 0.1; if (phi_f2 > 10.0) { phi_f2 = 10.0f; } @@ -257,7 +251,7 @@ void obj_loop_fireball_octoweapon(Object *obj, s32 speed) { phi_f2 = -10.0f; } obj->segment.y_velocity += (phi_f2 - obj->segment.y_velocity) * 0.125 * sp7C; - phi_f2 = (obj78->segment.trans.z_position - obj->segment.trans.z_position) * 0.1; + phi_f2 = (trans78->z_position - obj->segment.trans.z_position) * 0.1; if (phi_f2 > 10.0) { phi_f2 = 10.0f; } @@ -355,10 +349,6 @@ void obj_init_laserbolt(Object *obj, UNUSED LevelObjectEntry_Laserbolt *entry) { obj->unk4C->unk11 = 0; } -void func_80031130(s32, f32*, f32*, s32); -void func_80031600(f32*, f32*, f32*, s8*, s32, s8*); -void func_8003FC44(f32 arg0, f32 arg1, f32 arg2, s32 arg3, s32 arg4, f32 arg5, s32 arg6); - typedef struct Object_7C_80034860 { u8 pad0[0xC]; s16 unkC; @@ -449,20 +439,15 @@ void obj_loop_torch_mist(Object *obj, s32 speed) { void obj_init_effectbox(UNUSED Object *obj, UNUSED LevelObjectEntry_EffectBox *entry) { } -#ifdef NON_EQUIVALENT - -// Has regalloc & stack issues. - -f32 cosine_s(s16); -f32 sine_s(s16); -Object **get_object_struct_array(s32 *count); +#ifdef NON_MATCHING +// Has regalloc issues void obj_loop_effectbox(Object *obj, s32 speed) { Object **objList; - Object_3C_80034B74 *obj3C; Object_EffectBox *curObj64; - s32 i; s32 numberOfObjects; + Object_3C_80034B74 *obj3C; + s32 i; f32 xDiff; f32 yDiff; f32 zDiff; @@ -472,8 +457,6 @@ void obj_loop_effectbox(Object *obj, s32 speed) { f32 temp3; f32 temp4; f32 temp5; - f32 tempf0; - u8 new_var2; obj3C = obj->segment.unk3C_a.unk3C; objList = get_object_struct_array(&numberOfObjects); @@ -487,26 +470,18 @@ void obj_loop_effectbox(Object *obj, s32 speed) { xDiff = objList[i]->segment.trans.x_position - obj->segment.trans.x_position; yDiff = objList[i]->segment.trans.y_position - obj->segment.trans.y_position; zDiff = objList[i]->segment.trans.z_position - obj->segment.trans.z_position; - if (((-temp3) < yDiff) && (yDiff < temp3)) - { + if ((-temp3 < yDiff) && (yDiff < temp3)) { temp5 = (xDiff * temp0) + (zDiff * temp1); - if (((-temp2) < temp5) && (temp5 < temp2)) - { - temp5 = ((-xDiff) * temp1) + (zDiff * temp0); - if (((-temp4) < (((-xDiff) * temp1) + (zDiff * temp0))) && (temp5 < temp4)) - { - temp5 = temp3 / 2; + if ((-temp2 < temp5) && (temp5 < temp2)) { + temp5 = (-xDiff * temp1) + (zDiff * temp0); + if ((-temp4 < temp5) && (temp5 < temp4)) { curObj64 = &objList[i]->unk64->effect_box; curObj64->unk1FE = obj3C->unkC; curObj64->unk1FF = obj3C->unkD; - if ((temp5 < yDiff) && (curObj64->unk1FE == 1)) - { - new_var2 = curObj64->unk1FF; - tempf0 = (new_var2 & 0xFF) * ((f32) (1.0 - ((yDiff - temp5) / temp5))); - curObj64->unk1FF = new_var2 * ((f32) (1.0 - ((yDiff - temp5) / temp5))); - if (tempf0 < 0.0f) - { - } + temp5 = temp3 / 2; + if ((temp5 < yDiff) && (curObj64->unk1FE == 1)) { + temp5 = (1.0 - ((yDiff - temp5) / temp5)); + curObj64->unk1FF *= temp5; } } } @@ -1040,7 +1015,7 @@ void obj_init_animator(Object *obj, LevelObjectEntry_Animator *entry, s32 arg2) s16 segmentBatchCount; obj64 = &obj->unk64->animator; - levelModel = func_8002C7C4(); + levelModel = get_current_level_model(); obj64->batchId = entry->unk8; obj64->xSpeedFactor = entry->unk9; obj64->ySpeedFactor = entry->unkA; @@ -1100,7 +1075,7 @@ void obj_loop_animator(Object* obj, s32 speed) { segmentId = obj64->segmentId; if (obj64->segmentId != -1) { - levelModel = func_8002C7C4(); + levelModel = get_current_level_model(); levelModelSegment = &levelModel->segments[segmentId]; batchId = obj64->batchId; triangleBatchInfo = &levelModelSegment->batches[batchId]; @@ -1773,15 +1748,10 @@ void obj_init_goldenballoon(Object *obj, LevelObjectEntry_GoldenBalloon *entry) } } - -#ifdef NON_EQUIVALENT - -// Has regalloc issues. - void obj_loop_goldenballoon(Object *obj, s32 speed) { - s32 padding[1]; Object_3C *obj3C; Object_4C *obj4C; + Object_Racer *racer; Object_GoldenBalloon *obj64; Settings *settings; s32 flag; @@ -1789,15 +1759,16 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { Object *racerObj; f32 sp2C; f32 speedf; - s32 someBool; + s32 isPirated; sp2C = speed; if (osTvType == TV_TYPE_PAL) { sp2C *= 1.2; } - someBool = FALSE; - if ((*(s32*)0xA0000284) != 0x240B17D7) { - someBool = TRUE; + isPirated = FALSE; + // AntiPiracy check. Seems to set a flag that prevents collecting balloons. + if (IO_READ(0x284) != 0x240B17D7) { + isPirated = TRUE; } speedf = sp2C; settings = get_settings(); @@ -1822,29 +1793,30 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { obj->segment.unk38.half.lower = 255; } obj4C = obj->unk4C; - if ((obj4C->unk13 < 45) && (someBool == FALSE)) { + if ((obj4C->unk13 < 45) && (isPirated == FALSE)) { racerObj = obj4C->unk0; - if (racerObj && (racerObj->segment.header->behaviorId == 1) && (racerObj->unk64->racer.playerIndex == 0)) { - settings->balloonsPtr[settings->worldId]++; - if (settings->worldId != 0) { - settings->balloonsPtr[0]++; + if ((racerObj && (racerObj->segment.header->behaviorId == 1))) { + racer = &racerObj->unk64->racer; + if (racer->playerIndex == PLAYER_ONE) { + settings->balloonsPtr[settings->worldId]++; + if(isPirated == 1) { } + if (settings->worldId != 0) { + settings->balloonsPtr[0]++; + } + settings->courseFlagsPtr[settings->courseId] |= flag; + if (&obj->segment){ } + play_sound_spatial(SOUND_COLLECT_BALLOON, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, NULL); + obj->unk7C.word = 16; + obj->unk74 = 2; + obj->segment.trans.unk6 |= 0x4000; + func_800AFC3C(obj, speed); } - settings->courseFlagsPtr[settings->courseId] |= flag; - play_sound_spatial(573, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, NULL); - obj->unk7C.word = 16; - obj->unk74 = 2; - obj->segment.trans.unk6 |= 0x4000; - func_800AFC3C(obj, speed); } } obj64 = &obj->unk64->golden_balloon; obj->segment.unk3B = 0; obj64->unk14 = 0.0f; - if (obj->segment.unk38.half.lower < 255) { - speedf = 0.0f; - } else { - speedf = 1.0f; - } + speedf = (obj->segment.unk38.half.lower < 255) ? 0 : 1; if (obj64->unkD == 255) { obj64->unkD = func_8001C524(obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 0); if (obj64->unkD != 255) { @@ -1860,11 +1832,6 @@ void obj_loop_goldenballoon(Object *obj, s32 speed) { } } - -#else -GLOBAL_ASM("asm/non_matchings/unknown_032760/obj_loop_goldenballoon.s") -#endif - void obj_init_door(Object *obj, LevelObjectEntry_Door *entry) { Object_Door *obj64; f32 phi_f0; @@ -2380,7 +2347,7 @@ void obj_init_texscroll(Object *obj, LevelObjectEntry_TexScroll *entry, s32 arg2 s16 numberOfTexturesInLevel; obj64 = &obj->unk64->tex_scroll; - levelModel = func_8002C7C4(); + levelModel = get_current_level_model(); obj64->unk0 = entry->unk8; if (obj64->unk0 < 0) { obj64->unk0 = 0; diff --git a/src/objects.c b/src/objects.c index a15b0282..6bdeb6a7 100644 --- a/src/objects.c +++ b/src/objects.c @@ -16,6 +16,8 @@ #include "game.h" #include "racer.h" #include "particles.h" +#include "printf.h" +#include "unknown_0255E0.h" /************ .data ************/ @@ -182,7 +184,7 @@ s8 D_8011AE00; s8 D_8011AE01; s8 gIsNonCarRacers; s8 gIsSilverCoinRace; -u32 *D_8011AE08[16]; +Object *D_8011AE08[16]; s32 (*D_8011AE48)[8]; // Unknown number of entries. u8 (*D_8011AE4C)[8]; // Unknown number of entries. s32 D_8011AE50; @@ -497,34 +499,37 @@ s32 normalise_time(s32 timer) { GLOBAL_ASM("asm/non_matchings/objects/func_8000C8F8.s") +// Reset all values of D_8011AE08 to NULL void func_8000CBC0(void) { s32 i; //Required to be one line to match - for (i = 0; i < 16; i++) { D_8011AE08[i] = NULL; } + for (i = 0; i < ARRAY_COUNT(D_8011AE08); i++) { D_8011AE08[i] = NULL; } } -void func_8000CBF0(Object *arg0, s32 arg1) { - if (D_8011AE08[arg1] == NULL) { - D_8011AE08[arg1] = arg0; +// Set the object value for the given index if it's not already set +void func_8000CBF0(Object *obj, s32 index) { + if (D_8011AE08[index] == NULL) { + D_8011AE08[index] = obj; } else { - if(D_8011AE08[arg1]){} + if(D_8011AE08[index]){} } } -s32 func_8000CC20(u32 *arg0) { +// Set the next available value in D_8011AE08, and return it's index value. -1 if it's not set. +s32 func_8000CC20(Object *obj) { s32 i; - s32 phi_v1; + s32 NextFreeIndex; - phi_v1 = -1; - for (i = 0; i < 0x10; i++) { - if (D_8011AE08[i] == 0) { - phi_v1 = i; - i = 0x10; + NextFreeIndex = -1; + for (i = 0; i < ARRAY_COUNT(D_8011AE08); i++) { + if (D_8011AE08[i] == NULL) { + NextFreeIndex = i; + i = ARRAY_COUNT(D_8011AE08); // Why not just break? } } - if (phi_v1 != -1) { - D_8011AE08[phi_v1] = arg0; + if (NextFreeIndex != -1) { + D_8011AE08[NextFreeIndex] = obj; } - return phi_v1; + return NextFreeIndex; } // Has a jump table @@ -859,7 +864,38 @@ GLOBAL_ASM("asm/non_matchings/objects/gParticlePtrList_flush.s") GLOBAL_ASM("asm/non_matchings/objects/func_800101AC.s") GLOBAL_ASM("asm/non_matchings/objects/func_80010994.s") + +#ifdef NON_EQUIVALENT +void func_80011134(Object *arg0, s32 arg1) { + s32 sp5C; + ObjectModel *temp_s3; + TriangleBatchInfo *temp_s4; + TriangleBatchInfo *var_s0; + TextureHeader *var_t5; + s16 temp_s5; + s32 var_s1; + u8 temp_v0; + + temp_s3 = arg0->unk68[arg0->segment.unk3A]->objModel; + temp_s5 = temp_s3->unk50; + temp_s4 = temp_s3->batches; + for (var_s1 = 0; temp_s5 > 0 && var_s1 < temp_s3->numberOfBatches; var_s1++) { + var_s0 = &temp_s4[var_s1]; + if (var_s0->flags & 0x10000) { //Texture is animated + temp_v0 = var_s0->textureIndex; + if (temp_v0 != 0xFF) { + var_t5 = temp_s3->textures[temp_v0].texture; + sp5C = var_s0->unk7 << 6; + func_8007EF80(var_t5, temp_s4[var_s1].flags, &sp5C, arg1); + var_s0->unk7 = sp5C >> 6; + } + } + } +} +#else GLOBAL_ASM("asm/non_matchings/objects/func_80011134.s") +#endif + GLOBAL_ASM("asm/non_matchings/objects/func_80011264.s") void func_80011390(void) { @@ -891,7 +927,93 @@ s32 func_80011560(void) { //! @bug The developers probably intended this to be a // No return value! } -GLOBAL_ASM("asm/non_matchings/objects/func_80011570.s") +s32 func_80011570(Object *obj, f32 xPos, f32 yPos, f32 zPos) { + UNUSED f32 unused; + f32 test1, test2, test3, test4, test5, test6; + f32 newXPos; + f32 newYPos; + f32 newZPos; + LevelModel *levelModel; + LevelModelSegmentBoundingBox *box; + s32 var_a0; + s32 var_v1; + s32 intXPos, intYPos, intZPos; + + levelModel = get_current_level_model(); + newXPos = obj->segment.trans.x_position + xPos; + newYPos = obj->segment.trans.y_position + yPos; + newZPos = obj->segment.trans.z_position + zPos; + if (levelModel == NULL) { + D_800DC848 = 0; + return 0; + } + var_v1 = 0; + test1 = (levelModel->unk3E + 1000.0); + if (newXPos > test1) { + var_v1 = 1; + } + test2 = (levelModel->unk3C - 1000.0); + if (obj->segment.trans.x_position < test2) { + var_v1 = 1; + } + if (1) { } if (1) { } if (1) { } + test3 = (levelModel->unk42 + 3000.0); + if (obj->segment.trans.y_position > test3) { + var_v1 = 1; + } + test4 = (levelModel->unk40 - 500.00); + if (obj->segment.trans.y_position < test4) { + var_v1 = 1; + } + test5 = (levelModel->unk46 + 1000.0); + if (obj->segment.trans.z_position > test5) { + var_v1 = 1; + } + test6 = (levelModel->unk44 - 1000.0); + if (obj->segment.trans.z_position < test6) { + var_v1 = 1; + } + if (D_800DC848 != 0) { + var_v1 = 0; + } + + D_800DC848 = 0; + if (var_v1 != 0) { + obj->segment.unk2C.half.lower = -1; + return 1; + } + + obj->segment.trans.x_position = newXPos; + obj->segment.trans.y_position = newYPos; + obj->segment.trans.z_position = newZPos; + box = func_8002A2DC(obj->segment.unk2C.half.lower); + + //For some reason the XYZ positions are converted into integers for the next section + intXPos = newXPos, intYPos = newYPos, intZPos = newZPos; + + if (box == NULL) { + obj->segment.unk2C.half.lower = get_level_segment_index_from_position(intXPos, intYPos, intZPos); + return 0; + } else { + var_a0 = 0; + if ((box->x2 < intXPos) || (intXPos < box->x1)) { + var_a0 = 1; + } + if ((box->y2 < intYPos) || (intYPos < box->y1)) { + var_a0 = 1; + } + if ((box->z2 < intZPos) || (intZPos < box->z1)) { + var_a0 = 1; + } + if (var_a0 != 0) { + var_v1 = get_level_segment_index_from_position(intXPos, intYPos, intZPos); + if (var_v1 != -1) { + obj->segment.unk2C.half.lower = var_v1; + } + } + } + return 0; +} #ifdef NON_EQUIVALENT void func_80011960(Object *arg0, s32 arg2, u32 arg3, Object_64 *arg4, @@ -996,7 +1118,7 @@ void func_80012D5C(Gfx **dlist, Mtx **mats, VertexList **verts, Object *object) } void func_80012E28(Object *this) { - s32 unused1; + UNUSED s32 unused1; Object_Racer *sp_20; f32 tmp_f2; f32 sp_1c; @@ -1042,7 +1164,7 @@ GLOBAL_ASM("asm/non_matchings/objects/func_80012F94.s") void render_object(Object *this) { func_80012F94(this); if (this->segment.trans.unk6 & 0x8000) { - func_800B3740(this, &D_8011AE8C, &D_8011AE90, &D_8011AE94, 32768); + func_800B3740(this, &D_8011AE8C, &D_8011AE90, &D_8011AE94, 0x8000); } else { if (this->segment.header->modelType == OBJECT_MODEL_TYPE_3D_MODEL) render_3d_model(this); @@ -1223,7 +1345,24 @@ s32 func_8001B650(void) { return D_800DC738 == 0; } -GLOBAL_ASM("asm/non_matchings/objects/func_8001B668.s") +s32 func_8001B668(s32 arg0) { + s16 sp2E; + s16 sp2C; + s32 temp_v0; + s32 sp24; + + sp24 = func_800599A8(); + if ((func_8006BD88() != sp24) || (D_800DC728 != D_8011AE82)) { + temp_v0 = func_800599B8(arg0, func_8006BD88(), D_8011AE82, &sp2E, &sp2C); + if (temp_v0 == 0) { + D_800DC728 = D_8011AE82; + D_800DC72C = sp2E; + D_800DC724 = sp2C; + } + return temp_v0; + } + return func_800599B8(arg0, func_8006BD88(), D_8011AE82, NULL, NULL); +} s32 func_8001B738(s32 controllerIndex) { return func_80059B7C(controllerIndex, func_800599A8(), D_800DC728, D_800DC72C, D_800DC724); @@ -1548,7 +1687,22 @@ s32 func_800210CC(s8 arg0) { GLOBAL_ASM("asm/non_matchings/objects/func_80021104.s") GLOBAL_ASM("asm/non_matchings/objects/func_8002125C.s") -GLOBAL_ASM("asm/non_matchings/objects/func_80021400.s") + +void func_80021400(s32 arg0) { + s32 i; + arg0 &= 0xFF; //? + + + for (i = 0; i < D_8011AE78 && (arg0 != (D_8011AE74[i]->unk7C.word & 0xFF)); i++) {} + + if (i < D_8011AE78) { + if (D_8011AE74[i]->unk64 != NULL) { + if (D_8011AE74[i]->unk64->obj80021400_64.obj64->unk2A < 0) { + D_8011AE74[i]->unk64->obj80021400_64.obj64->unk2A = 1; + } + } + } +} s8 func_800214C4(void) { return D_8011AD22[1 - D_8011AD20[1]]; @@ -1556,8 +1710,37 @@ s8 func_800214C4(void) { GLOBAL_ASM("asm/non_matchings/objects/func_800214E4.s") GLOBAL_ASM("asm/non_matchings/objects/func_80021600.s") -GLOBAL_ASM("asm/non_matchings/objects/catmull_rom_interpolation.s") -GLOBAL_ASM("asm/non_matchings/objects/func_8002263C.s") + +f32 catmull_rom_interpolation(f32 *arg0, s32 arg1, f32 arg2) { + f32 ret; + f32 temp3, temp2, temp; + + temp = (-0.5 * arg0[arg1]) + ( 1.5 * arg0[arg1 + 1]) + (-1.5 * arg0[arg1 + 2]) + ( 0.5 * arg0[arg1 + 3]); + temp2 = ( 1.0 * arg0[arg1]) + (-2.5 * arg0[arg1 + 1]) + ( 2.0 * arg0[arg1 + 2]) + (-0.5 * arg0[arg1 + 3]); + temp3 = (arg0[arg1 + 2] * 0.5) + ( 0.0 * arg0[arg1 + 1]) + (-0.5 * arg0[arg1]) + ( 0.0 * arg0[arg1 + 3]); + + ret = (1.0 * arg0[arg1 + 1]); + ret = (((((temp * arg2) + temp2) * arg2) + temp3) * arg2) + ret; + + return ret; +} + +// Exact same code as above, but it returns something in arg3 +f32 func_8002263C(f32 *arg0, s32 arg1, f32 arg2, f32 *arg3) { + f32 ret; + f32 temp3, temp2, temp; + + temp = (-0.5 * arg0[arg1]) + ( 1.5 * arg0[arg1 + 1]) + (-1.5 * arg0[arg1 + 2]) + ( 0.5 * arg0[arg1 + 3]); + temp2 = ( 1.0 * arg0[arg1]) + (-2.5 * arg0[arg1 + 1]) + ( 2.0 * arg0[arg1 + 2]) + (-0.5 * arg0[arg1 + 3]); + temp3 = (arg0[arg1 + 2] * 0.5) + ( 0.0 * arg0[arg1 + 1]) + (-0.5 * arg0[arg1]) + ( 0.0 * arg0[arg1 + 3]); + + ret = (1.0 * arg0[arg1 + 1]); + *arg3 = (((temp * 3 * arg2) + (2 * temp2)) * arg2) + temp3; + ret = (((((temp * arg2) + temp2) * arg2) + temp3) * arg2) + ret; + + return ret; +} + GLOBAL_ASM("asm/non_matchings/objects/func_8002277C.s") f32 lerp(f32 *arg0, u32 arg1, f32 arg2) { diff --git a/src/objects.h b/src/objects.h index 94150679..55a331a9 100644 --- a/src/objects.h +++ b/src/objects.h @@ -138,7 +138,7 @@ void func_8000C460(void); void func_8000C604(void); s32 normalise_time(s32 timer); void func_8000CBC0(void); -s32 func_8000CC20(u32 *arg0); +s32 func_8000CC20(Object *arg0); u32 func_8000E0B0(void); void func_8000E128(void); s8 func_8000E138(); @@ -235,8 +235,12 @@ s16 *func_80024594(s32 *arg0, s32 *arg1); void func_800245B4(s16 arg0); void func_80012E28(Object *this); f32 catmull_rom_interpolation(f32*, s32, f32); +f32 func_8002263C(f32 *, s32, f32, f32 *); s32 func_80031F88(Object*, s32); s16 func_8001C418(f32 yPos); +void func_80021400(s32 arg0); +s32 func_8001B668(s32 arg0); +s32 func_80011570(Object *obj, f32 xPos, f32 yPos, f32 zPos); //Non Matching void calc_dynamic_lighting_for_object_1(Object *, ObjectModel *, s16, Object *, f32, f32); @@ -250,12 +254,14 @@ s32 func_80014814(s32 *); void func_80015348(s32, s32); Object *spawn_object(void *entry, s32); s32 func_8001F460(Object*, s32, Object*); -void func_80011570(Object *, f32, f32, f32); s32 func_80016DE8(f32, f32, f32, f32, s32, unk80042178 *); void func_8001BF20(void); +void func_8000B750(Object *arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4); void func_80022E18(s32); /* extern */ void func_80018CE0(Object* obj, f32 xPos, f32 yPos, f32 zPos, s32 updateRate); /* extern */ s32 func_800185E4(s8, Object* obj, f32 xPos, f32 yPos, f32 zPos, f32* checkpointDistance, u8*); /* extern */ Object *func_8001B7A8(Object *arg0, s32 arg1, f32 *arg2); +void func_80011134(Object *, s32); +void func_800113CC(Object *, s32, s32, s32, s32); #endif diff --git a/src/particles.h b/src/particles.h index 6cc5ef78..bcbd36e1 100644 --- a/src/particles.h +++ b/src/particles.h @@ -136,6 +136,6 @@ void func_800AF404(s32 arg0); // Non Matching void func_800AFC3C(Object *, s32); // Non Matching void init_particle_assets(void); // Non Matching void func_800AE728(s32 arg0, s32 arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5); // Non Matching -void func_800AF714(Object*, s32, f32); // Non matching +void func_800AF714(Object*, s32); // Non matching #endif diff --git a/src/printf.c b/src/printf.c index c8313acb..c39818df 100644 --- a/src/printf.c +++ b/src/printf.c @@ -9,6 +9,7 @@ #include "stdarg.h" #include "textures_sprites.h" #include "stdio.h" +#include "objects.h" /************ .data ************/ @@ -74,7 +75,24 @@ GLOBAL_ASM("asm/non_matchings/printf/func_800B3240.s") GLOBAL_ASM("asm/non_matchings/printf/func_800B3358.s") GLOBAL_ASM("asm/non_matchings/printf/func_800B34B0.s") GLOBAL_ASM("asm/non_matchings/printf/func_800B3564.s") -GLOBAL_ASM("asm/non_matchings/printf/func_800B3678.s") + +UNUSED void func_800B3678(Gfx **arg0, Mtx **arg1, VertexList **arg2) { + UNUSED s32 pad; + UNUSED s32 pad2; + Object **temp_s0; + s32 sp38; + s32 sp34; + + temp_s0 = func_8000E988(&sp38, &sp34); + for (; sp38 < sp34; sp38++) { + if (temp_s0[sp38]->segment.trans.unk6 & 0x8000) { + if ((s32) temp_s0[sp38]->segment.header & 0x8000) { + func_800B3740(temp_s0[sp38], arg0, arg1, arg2, 0); + } + } + } +} + GLOBAL_ASM("asm/non_matchings/printf/func_800B3740.s") GLOBAL_ASM("asm/non_matchings/printf/func_800B3E64.s") GLOBAL_ASM("asm/non_matchings/printf/func_800B4488.s") diff --git a/src/printf.h b/src/printf.h index 4f2a17b3..2d1f31b6 100644 --- a/src/printf.h +++ b/src/printf.h @@ -2,6 +2,7 @@ #define _PRINTF_H_ #include "types.h" +#include "structs.h" #include @@ -41,5 +42,6 @@ void set_render_printf_background_colour(u8 red, u8 green, u8 blue, u8 alpha); void set_render_printf_position(u16 xpos, u16 ypos); // Non Matching s32 render_printf(const char *format, ...); // Non Matching void print_debug_strings(Gfx **arg0); // Non Matching +void func_800B3740(Object *, Gfx **, Mtx **, VertexList **, s32); // Non Matching #endif diff --git a/src/racer.c b/src/racer.c index 647b541d..b6bf8ba9 100644 --- a/src/racer.c +++ b/src/racer.c @@ -129,7 +129,7 @@ s16 D_800DCDB0[16] = { }; // Checksum count for obj_loop_goldenballoon -s32 gObjLoopGoldenBalloonChecksum = 42391; +s32 gObjLoopGoldenBalloonChecksum = 0xA597; s16 D_800DCDD4[4] = { 0, 0, 0x32, -1 @@ -154,9 +154,9 @@ s8 D_8011D504; ObjectCamera *gCameraObject; UNUSED s32 D_8011D50C; ObjectTransform D_8011D510; -s32 gCurrentRacerInput; -s32 gCurrentButtonsPressed; -s32 gCurrentButtonsReleased; +u32 gCurrentRacerInput; +u32 gCurrentButtonsPressed; +u32 gCurrentButtonsReleased; s32 gCurrentStickX; s32 gCurrentStickY; s32 D_8011D53C; // Set to 0 and only 0. Checked for being 1, but never true. @@ -355,11 +355,11 @@ struct TempStruct2 { }; void func_80045128(struct TempStruct2 *header) { - struct Object_Racer *obj; + Object_Racer *obj; s32 i; for (i = 0; i < 4; i++) { - obj = (struct Object_Racer *) header->unk0[i]->unk64; + obj = (Object_Racer *) header->unk0[i]->unk64; D_8011D588[i] = obj->unk193; if (obj->unk1CF != 0) { D_8011D588[i] |= 0x40; @@ -1044,18 +1044,18 @@ void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *racer) { tempRacer->unkC4 = 0.5f; if (1); tempRacer->unk196 = tempRacer->unk1A0; - tempRacer->unkD8[0] = obj->segment.trans.x_position; - tempRacer->unkD8[1] = obj->segment.trans.y_position + 30.0f; - tempRacer->unkD8[2] = obj->segment.trans.z_position; - tempRacer->unkE4[0] = obj->segment.trans.x_position; - tempRacer->unkE4[1] = obj->segment.trans.y_position + 30.0f; - tempRacer->unkE4[2] = obj->segment.trans.z_position; - tempRacer->unkF0[0] = obj->segment.trans.x_position; - tempRacer->unkF0[1] = obj->segment.trans.y_position + 30.0f; - tempRacer->unkF0[2] = obj->segment.trans.z_position; - tempRacer->unkFC[0] = obj->segment.trans.x_position; - tempRacer->unkFC[1] = obj->segment.trans.y_position + 30.0f; - tempRacer->unkFC[2] = obj->segment.trans.z_position; + tempRacer->unkD8.x = obj->segment.trans.x_position; + tempRacer->unkD8.y = obj->segment.trans.y_position + 30.0f; + tempRacer->unkD8.z = obj->segment.trans.z_position; + tempRacer->unkE4.x = obj->segment.trans.x_position; + tempRacer->unkE4.y = obj->segment.trans.y_position + 30.0f; + tempRacer->unkE4.z = obj->segment.trans.z_position; + tempRacer->unkF0.x = obj->segment.trans.x_position; + tempRacer->unkF0.y = obj->segment.trans.y_position + 30.0f; + tempRacer->unkF0.z = obj->segment.trans.z_position; + tempRacer->unkFC.x = obj->segment.trans.x_position; + tempRacer->unkFC.y = obj->segment.trans.y_position + 30.0f; + tempRacer->unkFC.z = obj->segment.trans.z_position; tempRacer->prev_x_position = obj->segment.trans.x_position; tempRacer->prev_y_position = obj->segment.trans.y_position; tempRacer->prev_z_position = obj->segment.trans.z_position; @@ -1629,7 +1629,7 @@ void update_player_racer(Object* obj, s32 updateRate) { tempRacer->unk150 = NULL; } tempRacer->unk1FE = -1; - func_8004F77C((unk8004F77C* ) tempRacer); + func_8004F77C(tempRacer); if (tempRacer->unk20E) { if (tempRacer->unk210 > updateRate) { tempRacer->unk210 -= updateRate; @@ -1654,16 +1654,16 @@ void update_player_racer(Object* obj, s32 updateRate) { } } -void func_8004F77C(unk8004F77C *arg0) { +void func_8004F77C(Object_Racer *racer) { s32 temp; - arg0->flags &= ~0x80; + racer->unk20A &= ~0x80; if ((gCurrentRacerInput & B_BUTTON)) { - arg0->flags |= 0x80; + racer->unk20A |= 0x80; } - temp = arg0->flags & 0xF; - if ((arg0->flags & 0xC0)) { + temp = racer->unk20A & 0xF; + if ((racer->unk20A & 0xC0)) { temp++; if (temp >= 3) { temp = 2; @@ -1675,7 +1675,7 @@ void func_8004F77C(unk8004F77C *arg0) { } } - arg0->flags = (arg0->flags & 0xFFF0) | temp; + racer->unk20A = (racer->unk20A & 0xFFF0) | temp; } GLOBAL_ASM("asm/non_matchings/racer/func_8004F7F4.s") @@ -2701,7 +2701,7 @@ void func_80055A84(Object *obj, Object_Racer *racer, s32 updateRate) { sp74 = 0; flags = 0; if (racer->playerIndex != PLAYER_COMPUTER || racer->unk1D7 < 5) { - flags = func_80017248(obj, 1, &sp74, racer->unkD8, tempPos, &sp40, &surface); + flags = func_80017248(obj, 1, &sp74, &racer->unkD8, tempPos, &sp40, &surface); } if (flags & 0x80) { D_8011D548 = tempPos[0] - obj->segment.trans.x_position; @@ -2712,9 +2712,9 @@ void func_80055A84(Object *obj, Object_Racer *racer, s32 updateRate) { if (flags && tempPos[1] < obj->segment.trans.y_position - 4.0) { shouldSquish = 1; } - func_80031130(1, &racer->unkD8[0], tempPos, racer->unk1D6); + func_80031130(1, &racer->unkD8.x, tempPos, racer->unk1D6); sp74 = 0; - racer->unk1E3 = func_80031600(racer->unkD8 , tempPos, &sp40, &surface, 1, &sp74); + racer->unk1E3 = func_80031600(&racer->unkD8.x, tempPos, &sp40, &surface, 1, &sp74); racer->unk1E4 = flags; racer->unk1E3 |= flags; racer->unk1E2 = 0; @@ -2730,16 +2730,16 @@ void func_80055A84(Object *obj, Object_Racer *racer, s32 updateRate) { } } for (i = 0; i < 3; i++) { - racer->unkD8[i] = tempPos[i]; + racer->unkD8.f[i] = tempPos[i]; } racer->wheel_surfaces[0] = surface; i = 1; racer->wheel_surfaces[1] = surface; racer->wheel_surfaces[2] = surface; racer->wheel_surfaces[3] = surface; - obj->segment.trans.x_position = racer->unkD8[0]; - obj->segment.trans.y_position = racer->unkD8[1]; - obj->segment.trans.z_position = racer->unkD8[2]; + obj->segment.trans.x_position = racer->unkD8.x; + obj->segment.trans.y_position = racer->unkD8.y; + obj->segment.trans.z_position = racer->unkD8.z; if (racer->unk1E2) { func_8002ACD4(&xTemp, &yTemp, &zTemp); angleX = cosine_s(-obj->segment.trans.y_rotation); @@ -3629,8 +3629,547 @@ void racer_enter_door(Object_Racer* racer, s32 updateRate) { } } -GLOBAL_ASM("asm/non_matchings/racer/func_8005A6F0.s") +void func_8005A6F0(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateRateF) { + s32 var_t2; // sp9C + Object **objects; + s32 renderContext; //sp94 + s32 countOfObjects; //sp90 + f32 xPos; //sp8C + f32 yPos; //sp88 + f32 zPos; //sp84 + f32 sp80; //sp80 + Object *playerOneObj; + f32 var_fv1; //sp78 + Object *playerTwoObj; + LevelHeader *levelHeader; //sp70 + s32 temp_v0_10; + f32 temp_f0; + unknown8011AECC *temp_v0_9; + Object_Racer *tempRacer; + f32 temp_fv1_2; + + gCurrentPlayerIndex = -1; + renderContext = get_render_context(); + levelHeader = get_current_level_header(); + if (racer->unk1F6 > 0) { + racer->unk1F6 -= updateRate; + } else { + racer->unk1F6 = 0; + } + if (gRaceStartTimer != 0) { + racer->unk1C6 = get_random_number_from_range(-60, 60) + 120; + } + if (racer->unk18C > 0) { + racer->unk18C -= updateRate; + } else { + racer->unk18C = 0; + } + gCurrentRacerMiscAssetPtr = (f32 *)get_misc_asset(MISC_RACER_WEIGHT); + gCurrentRacerWeightStat = gCurrentRacerMiscAssetPtr[racer->characterId] * 0.45; + if (racer->unk204 > 0) { + gCurrentRacerWeightStat = -0.02f; + } + gCurrentRacerMiscAssetPtr = (f32 *)get_misc_asset(MISC_RACER_HANDLING); + gCurrentRacerHandlingStat = gCurrentRacerMiscAssetPtr[racer->characterId]; + gCurrentRacerMiscAssetPtr = (f32 *)get_misc_asset(MISC_ASSET_UNK0B); + D_8011D574 = gCurrentRacerMiscAssetPtr[racer->characterId]; + xPos = obj->segment.trans.x_position; + yPos = obj->segment.trans.y_position; + zPos = obj->segment.trans.z_position; + + if (racer->unk1B2 > 0) { + racer->unk1B2 -= updateRate; + if (racer->unk1B2 < 0) { + racer->unk1B2 = 0; + } + } + + racer->unk1E7++; + + if ( + func_8002341C() || + func_80023568() || + racer->unk1D6 == 4 || + D_8011D544 > 120.0f || + gRaceStartTimer != 0 || + (levelHeader->race_type & RACETYPE_CHALLENGE_BATTLE) + ) { + racer->unk201 = 30; + } + + var_fv1 = 1000000; + if (racer->unk201 == 0) { + objects = get_object_struct_array(&countOfObjects); + playerOneObj = playerTwoObj = NULL; + for (var_t2 = 0; var_t2 < countOfObjects; var_t2++) { + tempRacer = &objects[var_t2]->unk64->racer; + if (tempRacer->playerIndex == PLAYER_ONE) { + playerOneObj = objects[var_t2]; + } + if (tempRacer->playerIndex == PLAYER_TWO) { + playerTwoObj = objects[var_t2]; + } + } + if (playerOneObj != NULL) { + var_fv1 = playerOneObj->segment.trans.x_position - obj->segment.trans.x_position; + temp_f0 = playerOneObj->segment.trans.z_position - obj->segment.trans.z_position; + var_fv1 = (var_fv1 * var_fv1) + (temp_f0 * temp_f0); + } + if ((playerTwoObj != NULL) && (var_fv1 >= 160000.0)) { + var_fv1 = playerTwoObj->segment.trans.x_position - obj->segment.trans.x_position; + temp_f0 = playerTwoObj->segment.trans.z_position - obj->segment.trans.z_position; + var_fv1 = (var_fv1 * var_fv1) + (temp_f0 * temp_f0); + } + } + if (racer->unk204 > 0) { + racer->unk204 -= updateRate; + racer->velocity *= 0.8f; + } + if (racer->unk206 > 0) { + racer->unk18A = racer->unk206; + racer->unk206 -= updateRate; + } + if ((racer->unk201 == 0) && (var_fv1 < 160000.0)) { + racer->unk201 = 30; + } + if (racer->unk201 != 0) { + func_80044170(obj, racer, updateRate); + if (!(gCurrentRacerInput & A_BUTTON)) { + racer->throttleReleased = 1; + } + if (racer->unk1FE == 3) { + gCurrentRacerWeightStat *= ((f32)racer->unk1FF / 256); + } + if (racer->unk1FE == 1) { + gCurrentRacerWeightStat -= ((gCurrentRacerWeightStat * racer->unk1FF) / 128); + if (racer->unk204 > 0) { + gCurrentRacerWeightStat = -gCurrentRacerWeightStat; + } + gCurrentStickY = 60; + } + if (racer->unk1FE == 2) { + racer->unk84 += ((((cosine_s(racer->unk1FF << 8) * 4) - racer->unk84) * 0.0625 * updateRateF)); + racer->unk88 += ((((sine_s (racer->unk1FF << 8) * 4) - racer->unk88) * 0.0625 * updateRateF)); + } else { + racer->unk84 -= racer->unk84 * 0.0625 * updateRateF; + racer->unk88 -= racer->unk88 * 0.0625 * updateRateF; + } + gCurrentRacerHandlingStat = 1; + gCurrentRacerMiscAssetPtr = (f32 *)get_misc_asset(MISC_ASSET_UNK21); + D_8011D568 = (f32 *)get_misc_asset(obj->segment.header->unk5D); + if ((obj->segment.y_velocity < 4.0) && ((racer->unk1E2 >= 3) || (racer->buoyancy != 0.0))) { + racer->unk1F1 = 0; + } + if (racer->unk175 != 0) { + func_80056E2C(obj, racer, updateRate); + } + if (racer->unk1D6 != 1) { + racer->unk1E5 = 0; + racer->buoyancy = 0; + D_8011D5AE = 0; + } else { + D_8011D5AE = func_8002B0F4(obj->segment.unk2C.half.lower, obj->segment.trans.x_position, obj->segment.trans.z_position, &D_8011D5B0); + } + func_8002ACC8(0); + if ((racer->unk148 != NULL) || (gRaceStartTimer != 0) || (racer->unk204 > 0)) { + gCurrentStickX = 0; + gCurrentStickY = 0; + gCurrentRacerInput = 0; + gCurrentButtonsReleased = 0; + gCurrentButtonsPressed = 0; + } + // The case statements break must be on the same line as the function call in order to match + switch (racer->unk1D6) { + case 0: func_8004F7F4(updateRate, updateRateF, obj, racer); break; + case 4: func_8004CC20(updateRate, updateRateF, obj, racer); break; + case 1: func_80046524(updateRate, updateRateF, obj, racer); break; + case 2: func_80049794(updateRate, updateRateF, obj, racer); break; + case 3: /* fall through */ + case 10:func_8004D95C(updateRate, updateRateF, obj, racer); break; + case 5: func_8005C364(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case 6: func_8005D0D0(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case 7: /* fall through */ + case 8: func_8005D820(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentStickX, &gRaceStartTimer); break; + case 11:func_8005E4C0(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case 12:func_8005EA90(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + case 13:func_8005F310(updateRate, updateRateF, obj, racer, &gCurrentRacerInput, &gCurrentButtonsPressed, &gRaceStartTimer); break; + } + if (renderContext != DRAW_MENU) { + func_800050D0(obj, gCurrentButtonsPressed, gCurrentRacerInput, updateRate); + } + sp80 = racer->checkpoint_distance; + countOfObjects = racer->unk192; + var_t2 = func_800185E4(racer->unk192, obj, xPos, yPos, zPos, &racer->checkpoint_distance, &racer->unk1C8); + if (var_t2 == -100) { + func_8005C270(racer); + } + temp_v0_9 = func_8001BA1C(racer->unk192, racer->unk1C8); + if (temp_v0_9->unk36[racer->unk1CA] == 5) { + racer->unk201 = 30; + if (racer->unk1E5 != 0) { + racer->unk1C8 = 1; + } + } + if (temp_v0_9->unk36[racer->unk1CA] == 6) { + racer->unk193 = levelHeader->laps + 1; + } + if (temp_v0_9->unk36[racer->unk1CA] == 4) { + if (racer->velocity < -4.0) { + racer->velocity *= 0.9; + } + } + if (var_t2 == 0) { + if (temp_v0_9->unk36[racer->unk1CA] == 2) { + racer->unk1C8 = 1; + } + temp_v0_10 = func_8001BA64(); + racer->unk192++; + if (racer->unk192 >= temp_v0_10) { + racer->unk192 = 0; + if (racer->unk190 > 0) { + if (racer->unk193 < 120) { + racer->unk193++; + } + } + } + if (racer->unk190 < ((levelHeader->laps + 3) * temp_v0_10)) { + racer->unk190++; + } + racer->unk1A8 = 10000; + } else { + if ((racer->playerIndex == -1) && (sp80 < racer->checkpoint_distance)) { + racer->checkpoint_distance = sp80; + } + racer->unk1A8 = var_t2; + } + racer->unk68 = obj->segment.trans.x_position; + racer->unk6C = obj->segment.trans.y_position; + racer->unk70 = obj->segment.trans.z_position; + } else { + func_8005B818(obj, racer, updateRate, updateRateF); + if (renderContext != DRAW_MENU) { + func_800050D0(obj, gCurrentButtonsPressed, gCurrentRacerInput, updateRate); + } + } + if (racer->unk175 == 0) { + if (racer->unk178 != NULL) { + func_8000488C(racer->unk178); + racer->unk178 = NULL; + } + } + func_80018CE0(obj, xPos, yPos, zPos, updateRate); + if (racer->unk188 > 0) { + func_800576E0(obj, racer, racer->unk188); + } + if (racer->unk148 != NULL) { + racer->unk148 = NULL; + racer->velocity = 0.0f; + racer->lateral_velocity = 0.0f; + } + if (racer->stretch_height <= racer->stretch_height_cap) { + temp_fv1_2 = 0.02f; + } else { + temp_fv1_2 = -0.02f; + } + racer->stretch_height = (racer->stretch_height + ((((racer->stretch_height_cap - racer->stretch_height) * 0.125) + temp_fv1_2) * updateRateF)); + if (((temp_fv1_2 < 0.0f) && (racer->stretch_height <= racer->stretch_height_cap)) || ((temp_fv1_2 > 0.0f) && (racer->stretch_height_cap <= racer->stretch_height))) { + racer->stretch_height = racer->stretch_height_cap; + racer->stretch_height_cap = 1.0f; + } + var_t2 = ((racer->unk16C - racer->unk16A) * updateRate) >> 3; + CLAMP(var_t2, -0x800, 0x800) + if (D_800DCB54 != 0) { + racer->unk16A += D_800DCB54; + } else { + racer->unk16A += var_t2; + } + if (racer->shieldTimer > 0) { + if (racer->shieldTimer >= 61) { + if (racer->shieldSoundMask != 0) { + update_spatial_audio_position(racer->shieldSoundMask, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position); + } else if (racer->unk118 != 0) { + func_80009558(SOUND_SHIELD, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, 1, &racer->shieldSoundMask); + } + } else { + if (racer->shieldSoundMask != 0) { + func_800096F8(racer->shieldSoundMask); + racer->shieldSoundMask = 0; + } + } + racer->shieldTimer -= updateRate; + if (racer->shieldTimer <= 0) { + racer->shieldType = 0; + } + } + if (racer->soundMask != 0) { + update_spatial_audio_position(racer->soundMask, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position); + } + D_8011D584 = 0; + if ((racer->unk150 != NULL) && (gRaceStartTimer == 0)) { + s8 *temp; + racer->unk150->segment.trans.x_position = obj->segment.trans.x_position; + temp = (s8 *)get_misc_asset(MISC_ASSET_UNK00); + racer->unk150->segment.trans.y_position = obj->segment.trans.y_position + temp[racer->characterId]; + racer->unk150->segment.trans.z_position = obj->segment.trans.z_position; + racer->unk150->segment.trans.scale = obj->segment.unk30 / 265.0f; + if (obj->segment.unk30 < 1500.0) { + racer->unk150->segment.trans.unk6 |= 0x4000; + } + if (racer->unk150->segment.trans.scale < 1.0) { + racer->unk150->segment.trans.scale = 1.0f; + } + racer->unk150 = NULL; + } + racer->unk1FE = 0xFF; + func_8004F77C(racer); +} + +#ifdef NON_EQUIVALENT +//WIP +void func_8005B818(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateRateF) { + s32 sp11C; + f32 sp100; + f32 spEC; + f32 spC0; //s32? + f32 spD8; + f32 spBC; //s32? + f32 spB8; + f32 spAC; //s32? + f32 spA8; //s32? + f32 spA4; //struct? + f32 sp9C; + f32 sp98; + f32 sp94; + f32 sp8C; //What sets this? + LevelHeader *levelHeader; //sp80 + f32 *sp70; + f32 *var_t0; //struct? + f32 *var_a2; + f32 *var_a3; + f32 *var_t1; + f32 *var_v1; + f32 temp_f0_4; + f32 temp_f0_5; + f32 temp_f12; + f32 temp_f12_2; + f32 temp_f24; + f32 temp_f24_3; + f32 temp_f26; + f32 temp_f28; + f32 var_f12; + f32 var_f12_2; + f32 var_f22; + f32 var_f26; + f32 var_f28; + s16 temp_v0_4; + s32 var_a0; + s32 var_s0; + s32 var_s2; + s32 var_v0; + s8 temp_v0_3; + unknown8011AECC *temp_v0_2; + s32 i; + + gCurrentRacerMiscAssetPtr = get_misc_asset(MISC_ASSET_UNK21); + levelHeader = get_current_level_header(); + sp11C = func_8001BA64(); + if (sp11C != 0) { + racer->unk1C9 = 0; + racer->unk1F5 = 0; + racer->attackType = 0; + racer->lateral_velocity = 0; + sp94 = 20.0f; + if (racer->unk124 < -20.0f) { + racer->unk124 = -20.0f; + } + if (racer->unk124 > sp94) { + racer->unk124 = sp94; + } + var_f12 = sqrtf(((racer->unk124 * 0.025) + 0.595) / 0.004); + var_v1 = &sp100; + if (racer->boostTimer != 0) { + var_f12 *= 1.3; + } + var_a2 = &spEC; + if (racer->unk1D6 == 1) { + var_v0 = (racer->unk1BE & 0xFFFF) - (racer->unk1C2 & 0xFFFF); + if (var_v0 >= 0x8001) { + var_v0 += 0xFFFF0001; + } + if (var_v0 < -0x8000) { + var_v0 += 0xFFFF; + } + if (var_v0 < 0) { + var_v0 = -var_v0; + } + var_v0 -= 200; + if (var_v0 < 0) { + var_v0 = 0; + } + sp94 = (f32)var_v0 / 150.0; + var_f12_2 = var_f12 - sp94; + if (var_f12_2 < 2.0) { + var_f12_2 = 2.0f; + } + if (racer->velocity < -var_f12_2) { + racer->velocity = -var_f12_2; + } else { + racer->velocity += ((-var_f12_2 - racer->velocity) * 0.125); + } + } else { + racer->velocity += ((-var_f12 - racer->velocity) * 0.25); + } + var_a3 = &spD8; + var_a0 = racer->unk192 - 2; + var_t1 = &spB8; + if (var_a0 < 0) { + var_a0 += sp11C; + } + var_t0 = &spA4; + if (var_a0 >= sp11C) { + var_a0 -= sp11C; + } + for (i = 0; i < 1; i++) { + temp_v0_2 = func_8001BA1C(var_a0, racer->unk1C8); + var_v1[i] = temp_v0_2->unk10; + var_a2[i] = temp_v0_2->unk14; + var_a3[i] = temp_v0_2->unk18; + var_t1[i] = temp_v0_2->unk2E[racer->unk1CA]; + var_t0[i] = temp_v0_2->unk32[racer->unk1CA]; + var_v1[i] += ((temp_v0_2->unk1C * temp_v0_2->unk8 * temp_v0_2->unk2E[racer->unk1CA])); + var_a2[i] += ((temp_v0_2->unk1C * temp_v0_2->unk32[racer->unk1CA])); + var_a3[i] += ((temp_v0_2->unk1C * -temp_v0_2->unk0 * temp_v0_2->unk2E[racer->unk1CA])); + var_a0++; + if (var_a0 == sp11C) { + var_a0 = 0; + } + } + + if (racer->velocity < 0.0f) { + racer->velocity = -racer->velocity; + } + var_s2 = 0; + if (racer->unkAC == 0.0) { + racer->unkAC = 0.01f; + } + for (var_s0 = 0; var_s0 < 2; var_s0++) { + var_f22 = ((1.0 - racer->checkpoint_distance) + (racer->unkAC * updateRateF)); + if (var_f22 >= 1.0) { + var_s2 = 1; + var_f22--; + } + temp_f26 = func_8002263C(&sp100, var_s2, var_f22, &sp9C); + temp_f24 = func_8002263C(&spEC, var_s2, var_f22, &sp98); + temp_f28 = func_8002263C(&spD8, var_s2, var_f22, &sp94); + temp_f26 -= racer->unk68; + temp_f24 -= racer->unk6C; + temp_f28 -= racer->unk70; + if (var_s0 == 0) { + var_s2 = 0; + temp_f12 = sqrtf((temp_f26 * temp_f26) + (temp_f24 * temp_f24) + (temp_f28 * temp_f28)) / updateRateF; + if (temp_f12 != 0) { + racer->unkAC *= (sp8C / temp_f12); + } else { + var_s0 = -1; + racer->unkAC += 0.01; + } + } + } + racer->unk68 += temp_f26; + racer->unk6C += temp_f24; + racer->unk70 += temp_f28; + var_f26 = racer->unk68 - obj->segment.trans.x_position; + var_f28 = racer->unk70 - obj->segment.trans.z_position; + temp_f24_3 = racer->unk6C - obj->segment.trans.y_position; + temp_f12_2 = sqrtf((var_f26 * var_f26) + (var_f28 * var_f28)) / updateRateF; + if (temp_f12_2 > 35.0) { + temp_f0_4 = (35.0 / temp_f12_2); + var_f26 *= temp_f0_4; + var_f28 *= temp_f0_4; + } + racer->checkpoint_distance = (1 - var_f22); + if (var_s2 != 0) { + racer->unk192 += 1; + if (racer->unk192 >= sp11C) { + racer->unk192 = 0; + if (racer->unk190 > 0) { + temp_v0_3 = racer->unk193; + if (temp_v0_3 < 0x78) { + racer->unk193 = temp_v0_3 + 1; + } + } + } + temp_v0_4 = racer->unk190; + if (temp_v0_4 < ((levelHeader->laps + 3) * sp11C)) { + racer->unk190 = temp_v0_4 + 1; + } + racer->unk1A8 = 10000; + } else { + racer->unk1A8 = racer->checkpoint_distance * 100; + } + if (racer->boostTimer > 0) { + racer->boostTimer -= updateRate; + } else { + racer->boostTimer = 0; + } + racer->unk1BA = (((spC0 - spBC) * var_f22) + spBC); + racer->unk1BC = (((spAC - spA8) * var_f22) + spA8); + temp_f0_5 = sqrtf((sp9C * sp9C) + (sp94 * sp94)); + if (temp_f0_5 != 0) { + sp9C /= temp_f0_5; + sp94 /= temp_f0_5; + sp98 /= temp_f0_5; + racer->unk1A0 = arctan2_f(sp9C, sp94) - 0x8000; + obj->segment.trans.y_rotation = racer->unk1A0; + obj->segment.trans.x_rotation = arctan2_f(sp98, 1.0f); + } + racer->unk1C2 = racer->unk1BE; + racer->unk1C4 = racer->unk1C0; + racer->unk1BE = racer->unk1A0; + racer->unk1C0 = obj->segment.trans.x_rotation; + if (func_80011570(obj, var_f26, temp_f24_3, var_f28)) { + obj->segment.trans.x_position += var_f26; + obj->segment.trans.y_position += temp_f24_3; + obj->segment.trans.z_position += var_f28; + } + if (temp_f12_2 < 20.0) { + obj->segment.y_velocity = -1.0f; + obj->segment.x_velocity = var_f26 / updateRateF; + obj->segment.z_velocity = var_f28 / updateRateF; + } + func_80042D20(obj, racer, updateRate); + func_80055EC0(obj, racer, updateRate); + racer->unk1E5 = 0; + obj->unk4C->x_position = obj->segment.trans.x_position; + obj->unk4C->y_position = obj->segment.trans.y_position; + obj->unk4C->z_position = obj->segment.trans.z_position; + racer->drift_direction = 0; + racer->y_rotation_vel = 0; + racer->z_rotation_vel = 0; + racer->unk1D2 = 0; + racer->carBobX = 0.0f; + racer->carBobY = 0.0f; + racer->carBobZ = 0.0f; + obj->segment.y_velocity = 0.0f; + racer->unkD8.x = obj->segment.trans.x_position; + racer->unkD8.y = obj->segment.trans.y_position; + racer->unkD8.z = obj->segment.trans.z_position; + racer->unkE4.x = obj->segment.trans.x_position; + racer->unkE4.y = obj->segment.trans.y_position; + racer->unkE4.z = obj->segment.trans.z_position; + racer->unkF0.x = obj->segment.trans.x_position; + racer->unkF0.y = obj->segment.trans.y_position; + racer->unkF0.z = obj->segment.trans.z_position; + racer->unkFC.x = obj->segment.trans.x_position; + racer->unkFC.y = obj->segment.trans.y_position; + racer->unkFC.z = obj->segment.trans.z_position; + obj->unk74 = 0; + func_800AF714(obj, updateRate); + } +} +#else GLOBAL_ASM("asm/non_matchings/racer/func_8005B818.s") +#endif // This gets called if an anti-piracy checksum fails in func_8005F850. /** diff --git a/src/racer.h b/src/racer.h index ef5d907b..868f1cbf 100644 --- a/src/racer.h +++ b/src/racer.h @@ -97,11 +97,6 @@ typedef struct ObjectCamera { /* 0x003F */ u8 unk3F; } ObjectCamera; -typedef struct unk8004F77C { - u8 unk0[0x20A]; - u8 flags; -} unk8004F77C; - /* Unknown Size */ typedef struct unk8005234C { u8 unk0[0x16C]; @@ -189,6 +184,22 @@ extern s16 D_800DCDD4[4]; extern ObjectTransform D_8011D510; extern s32 gCurrentStickX; +extern s32 gRaceStartTimer; +extern s32 gCurrentStickY; +extern f32 gCurrentRacerWeightStat; +extern u32 gCurrentRacerInput; +extern f32 gCurrentRacerHandlingStat; +extern f32 *gCurrentRacerMiscAssetPtr; +extern s32 gCurrentPlayerIndex; +extern u32 gCurrentButtonsPressed; +extern u32 gCurrentButtonsReleased; +extern s8 D_8011D5AE; +extern s8 D_8011D584; +extern f32 D_8011D574; +extern f32 *D_8011D568; +extern f32 D_8011D544; + +extern struct TempStruct8 **D_8011D5B0; s32 get_random_number_from_range(s32, s32); //? void func_8006FC30(Matrix, ObjectTransform *); // asm func @@ -198,7 +209,7 @@ s32 func_80044450(s32 cap); void func_8004C0A0(s32 updateRate, Object *obj, Object_Racer *racer); void func_8004C140(Object *obj, Object_Racer *racer); void func_8004D95C(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer); -void func_8004F77C(unk8004F77C *arg0); +void func_8004F77C(Object_Racer *arg0); s32 func_80052188(void); void func_800521B8(s32 arg0); void func_8005234C(Object_Racer *racer); @@ -255,6 +266,8 @@ void racer_enter_door(Object_Racer *racer, s32 updateRate); void func_8005250C(Object* obj, Object_Racer* racer, s32 updateRate); void func_8005492C(Object* obj, Object_Racer* racer, s32 updateRate, f32 updateRateF); f32 func_800494E0(Object* obj1, Object_Racer* racer, f32 *pos, s8 arg3, s32 updateRate, s32 arg5, f32 arg6); +void func_8005A6F0(Object* obj, Object_Racer* racer, s32 updateRate, f32 updateRateF); +void func_80042D20(Object *, Object_Racer *, s32); //Non Matching void set_ghost_position_and_rotation(Object *obj); @@ -263,9 +276,8 @@ void func_80055EC0(Object *obj, Object_Racer *racer, s32); void func_80054FD0(Object *obj, Object_Racer *racer, s32); void func_80053750(Object *obj, Object_Racer *racer, f32); void func_80052D7C(Object *obj, Object_Racer *racer, s32, f32); -s32 func_80017248(void*, s32, s32*, void*, f32*, s32*, s8* surface); +s32 func_80017248(void*, s32, s32*, Vec3f*, f32*, s32*, s8* surface); void func_80059BF0(Object* obj, s32 updateRate); -void func_8005A6F0(Object* obj, Object_Racer* racer, s32 updateRate, f32 updateRateF); /* extern */ void func_80059208(Object* obj, Object_Racer* racer, s32 updateRate); /* extern */ void func_8004F7F4(s32 updateRate, f32 updateRateF, Object* obj, Object_Racer* racer); /* extern */ void func_80046524(s32 updateRate, f32 updateRateF, Object* obj, Object_Racer* racer); /* extern */ @@ -276,5 +288,6 @@ void func_800452A0(Object *obj, Object_Racer *racer, s32 updateRate); void func_80045C48(Object *obj, Object_Racer *racer, s32 updateRate); void func_80056E2C(Object *obj, Object_Racer *racer, s32 updateRate); Object* func_8005698C(Object_Racer* racer, Object* obj, f32* arg2); +void func_8005B818(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateRateF); #endif diff --git a/src/unknown_005740.c b/src/unknown_005740.c index 907afbd2..a6d1c547 100644 --- a/src/unknown_005740.c +++ b/src/unknown_005740.c @@ -24,10 +24,10 @@ s32 D_80119C44; s32 **D_80119C48; s32 D_80119C4C; s32 D_80119C50[2]; -s32 D_80119C58; -s32 D_80119C5C; +s32 D_80119C58; //Struct of size in func_8000A184 = 0x180 = 384 bytes +s32 D_80119C5C; //Struct of size in func_8000A184 = 0x180 = 384 bytes Likely the same as above s32 D_80119C60[670]; -s32 D_8011A6D8; +s32 D_8011A6D8; //unk8011A6D8[] s32 D_8011A6DC; s32 D_8011A6E0[334]; s32 D_8011AC18; @@ -57,4 +57,22 @@ UNUSED u8 func_80007F94(void) { return D_800DC6D0; } -GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80007FA4.s") +f32 func_80007FA4(f32 arg0) { + f32 temp_f0; + f32 temp_f12; + f32 var_f14; + f32 var_f2; + s32 var_v0; + + var_f2 = 0.0f; + temp_f0 = -1.0f; + arg0 = (arg0 - 1.0f) / (1.0f + arg0); + var_f14 = arg0; + temp_f12 = arg0 * arg0; + for (var_v0 = 1; (var_f2 - temp_f0) > 0.001; var_v0 += 2) { + temp_f0 = var_f2; + var_f2 += var_f14 / var_v0; + var_f14 *= temp_f12; + } + return var_f2 * 2; +} diff --git a/src/unknown_005740.h b/src/unknown_005740.h index eac2262d..5d5c93f2 100644 --- a/src/unknown_005740.h +++ b/src/unknown_005740.h @@ -14,6 +14,9 @@ extern s32 **D_80119C48; extern s32 D_80119C50[2]; -void func_800050D0(Object* obj, u32 buttonsPressed, s32 carInput, s32 updateRate); /* extern */ +void func_800050D0(Object* obj, u32 buttonsPressed, u32 carInput, s32 updateRate); /* extern */ + +f32 func_80007FA4(f32 arg0); +void func_80006AC8(Object *); #endif diff --git a/src/unknown_008C40.c b/src/unknown_008C40.c index 4201314b..11501ab7 100644 --- a/src/unknown_008C40.c +++ b/src/unknown_008C40.c @@ -135,6 +135,7 @@ s32 func_800092A8(f32 inX, f32 inY, f32 inZ, floatXYZVals *floatXYZ, f32 *outX, } // Another function related to playing sound. +// Play Sound at position? GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80009558.s") GLOBAL_ASM("asm/non_matchings/unknown_005740/func_800095E8.s") #if 0 @@ -164,7 +165,32 @@ GLOBAL_ASM("asm/non_matchings/unknown_005740/func_8000974C.s") GLOBAL_ASM("asm/non_matchings/unknown_005740/func_800098A4.s") GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80009968.s") GLOBAL_ASM("asm/non_matchings/unknown_005740/func_800099EC.s") -GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80009AB4.s") + +s32 func_80009AB4(u8 arg0) { + s32 ret; + s32 i; + unk8011A6D8 *levelHeader; + unk8011A6D8_04 *var_a2; //Probably a Vec3f + + ret = 1; + levelHeader = &D_8011A6D8[arg0]; + var_a2 = &levelHeader->unk4; + + if (levelHeader->unkB8 <= 0) { + return 0; + } + + for (i = 0; i < levelHeader->unkB8; i++, var_a2++) { + if ((var_a2->unk0 == -100000.0) || + (var_a2->unk0 + 1 == -100000.0) || + (var_a2->unk0 + 2 == -100000.0)) { + ret = 0; + } + } + + return ret; +} + GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80009B7C.s") GLOBAL_ASM("asm/non_matchings/unknown_005740/func_80009D6C.s") GLOBAL_ASM("asm/non_matchings/unknown_005740/func_8000A184.s") diff --git a/src/unknown_008C40.h b/src/unknown_008C40.h index 36cf3ac1..58bc1abb 100644 --- a/src/unknown_008C40.h +++ b/src/unknown_008C40.h @@ -14,6 +14,24 @@ typedef struct floatXYZVals { f32 z2; } floatXYZVals; +/* Size: 0x0C / 12 bytes - Possibly just a Vec3f? */ +typedef struct unk8011A6D8_04 { + /* 0x00 */ f32 unk0; + /* 0x04 */ f32 unk4; + /* 0x08 */ f32 unk8; +} unk8011A6D8_04; + +/* Size: 0xC0 / 192 bytes - Thought it was a LevelHeader, but that didn't match other usages */ +typedef struct unk8011A6D8 { + /* 0x00 */ u8 pad0[0x04]; + /* 0x04 */ unk8011A6D8_04 *unk4; + /* 0x05 */ u8 pad05[0xB0]; + /* 0xB8 */ s8 unkB8; + /* 0xB9 */ u8 padB9[0x07]; +} unk8011A6D8; + +extern unk8011A6D8 D_8011A6D8[]; + extern s32 *D_80119C44; void func_80008168(void); void func_800096F8(s32); diff --git a/src/unknown_0255E0.c b/src/unknown_0255E0.c index 1fa20cfa..1213f406 100644 --- a/src/unknown_0255E0.c +++ b/src/unknown_0255E0.c @@ -1015,7 +1015,7 @@ void func_8002C71C(LevelModelSegment *segment) { segment->unk32 = numVerts; } -LevelModel *func_8002C7C4(void) { +LevelModel *get_current_level_model(void) { return gCurrentLevelModel; } diff --git a/src/unknown_0255E0.h b/src/unknown_0255E0.h index 8e2d9403..567a6b99 100644 --- a/src/unknown_0255E0.h +++ b/src/unknown_0255E0.h @@ -4,6 +4,7 @@ #include "types.h" #include "structs.h" #include "f3ddkr.h" +#include "racer.h" /* Size: 0x8 bytes */ typedef struct unknown800DC874 { @@ -101,7 +102,7 @@ void func_8002ACC8(s32 arg0); s32 func_8002ACD4(f32 *arg0, f32 *arg1, f32 *arg2); s32 func_8002B9BC(Object *obj, f32 *arg1, f32 *arg2, s32 arg3); void func_8002C71C(LevelModelSegment *segment); -LevelModel *func_8002C7C4(void); +LevelModel *get_current_level_model(void); void func_80030750(s32 arg0, s16 *arg1, s16 *arg2, s8 *arg3, s8 *arg4, s8 *arg5); void func_800307BC(s32 arg0); void func_80030838(s32 arg0, s32 arg1); @@ -126,7 +127,7 @@ Gfx *func_8002581C(u8 *segmentIds, s32 numberOfSegments, s32 currentViewportInde s32 func_80027568(void); void func_8002C954(LevelModelSegment*, LevelModelSegmentBoundingBox*, s32); s32 func_8002CC30(LevelModelSegment*); -s8 func_8002B0F4(s16, f32 xPos, f32 zPos, s32*); /* extern */ +s8 func_8002B0F4(s16, f32 xPos, f32 zPos, struct TempStruct8**); /* extern */ void func_80013DCC(Gfx **arg0, Vertex **arg1, Vertex **arg2, Object *arg3); s8 func_8002AD08(f32 yPos, f32* waterHeight, s32*); /* extern */ diff --git a/src/unknown_05CEF0.c b/src/unknown_05CEF0.c index 07ebd9c7..91708467 100644 --- a/src/unknown_05CEF0.c +++ b/src/unknown_05CEF0.c @@ -10,14 +10,30 @@ #include "objects.h" #include "unknown_005740.h" #include "unknown_008C40.h" +#include "menu.h" +#include "game.h" +#include "particles.h" +#include "math_util.h" /************ .data ************/ -s16 D_800DCDE0[16] = { - 0x022B, 0x00A3, 0x00A4, 0x00B3, - 0x00B4, 0x00F0, 0x00F1, 0x00F6, - 0x00F7, 0x0225, 0x0226, 0x002E, - 0x002F, 0x0030, 0x0000, 0x0000, +u16 D_800DCDE0[16] = { + SOUND_VOICE_BOSS_LAUGH, + SOUND_VOICE_TRICKY_WOAH, + SOUND_VOICE_TRICKY_WOAH2, + SOUND_VOICE_WIZPIG_LAUGH_SHORT2, + SOUND_VOICE_WIZPIG_LAUGH_SHORT3, + SOUND_VOICE_TRICKY_WOAH3, + SOUND_VOICE_TRICKY_WOAH4, + SOUND_VOICE_TRICKY_LAUGH, + SOUND_VOICE_TRICKY_LAUGH2, + SOUND_VOICE_TRICKY_OW, + SOUND_VOICE_TRICKY_OW2, + SOUND_VOICE_CONKER_YEHAHA, + SOUND_VOICE_TIMBER_WOW, + SOUND_WHOOSH2, + SOUND_UNK00, + SOUND_UNK00 }; /*******************************/ @@ -27,7 +43,7 @@ s16 D_800DCDE0[16] = { f32 D_8011D5C0; s8 D_8011D5C4; u16 *D_8011D5C8; -s32 D_8011D5CC; +s8 D_8011D5CC; /******************************/ @@ -44,9 +60,165 @@ void func_8005C2F0(Object *object, unk8005C2F0 *arg1) { D_8011D5C4 = 0; } -GLOBAL_ASM("asm/non_matchings/unknown_05CEF0/func_8005C364.s") +#ifdef NON_MATCHING +// Regalloc differences +void func_8005C364(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer) { + s16 sp56; + s16 sp54; + s16 sp52; + Object_Racer *temp_s0; + f32 temp_f14; + s32 var_at; + s32 var_v1; + f32 temp_f20; + s32 var_a1; + Object_68 *temp_v0_2; + Object *temp_v0_4; -void func_8005CA78(s32 arg0) { + func_8005CA78(D_800DCDE0); + *buttonsPressed &= ~R_TRIG; + *input &= ~R_TRIG; + sp56 = obj->segment.unk3B; + sp54 = obj->segment.unk18; + sp52 = racer->unk16A; + if (racer->raceStatus == STATUS_FINISHED) { + func_80021400(130); + racer->raceStatus++; + } + var_v1 = *startTimer; + if ((racer->playerIndex == PLAYER_COMPUTER) && (*startTimer != 100)) { + *startTimer -= 15; + if (*startTimer < 0) { + if (D_8011D5CC == 0) { + var_v1 = *startTimer; + func_8005CB04(0); + racer->boostTimer = 5; + } + D_8011D5CC = 1; + *startTimer = 0; + *input |= A_BUTTON; + } else { + D_8011D5CC = 0; + } + } + func_8004F7F4(updateRate, updateRateF, obj, racer); + *startTimer = var_v1; + racer->lateral_velocity = 0.0f; + racer->unk16A = sp52; + obj->segment.unk3B = sp56; + obj->segment.unk18 = sp54; + if ((racer->attackType != ATTACK_NONE) && (obj->segment.unk3B != 3)) { + racer->unk1CD = obj->segment.unk3B; + obj->segment.unk3B = 3; + obj->segment.y_velocity += 7.5; + func_8005CB04(1); + play_sound_global(SOUND_EXPLOSION, NULL); + func_80069F28(12.0f); + racer->velocity *= 0.3; + racer->unkC = 0.0f; + } + racer->attackType = ATTACK_NONE; + if (racer->unk148 != NULL) { + temp_f20 = obj->segment.x_velocity * obj->segment.x_velocity; + temp_f14 = obj->segment.z_velocity * obj->segment.z_velocity; + racer->velocity = -sqrtf((temp_f20 * temp_f20) + (temp_f14 * temp_f14)); + } + temp_v0_2 = *obj->unk68; + temp_f20 = ((temp_v0_2->objModel->animations[obj->segment.unk3B].unk4 * 16) - 17); + if (obj->segment.unk3B != 3) { + if (racer->velocity < -2.0) { + obj->segment.unk3B = 1; + racer->unkC -= racer->velocity * updateRateF * 0.5; + } else if ((racer->velocity < -0.1) || (racer->velocity > 0.1)) { + obj->segment.unk3B = 2; + racer->unkC -= racer->velocity * updateRateF * 2; + } else { + obj->segment.unk3B = 0; + racer->unkC += (f64) updateRateF; + } + } else { + racer->unkC += (2.0 * (f64) updateRateF); + } + while (racer->unkC < 0.0f) { + racer->unkC += temp_f20; + temp_v0_2->unk10 = -1; + } + while (temp_f20 < racer->unkC) { + racer->unkC -= temp_f20; + temp_v0_2->unk10 = -1; + } + if ((temp_v0_2->unk10 == -1) && (obj->segment.unk3B == 3)) { + obj->segment.unk3B = racer->unk1CD; + } + sp54 = obj->segment.unk18; + obj->segment.unk18 = racer->unkC; + obj->unk74 = 0; + if (obj->segment.unk3B == 1) { + func_800113CC(obj, 2, sp54, 172, 173); + obj->unk74 |= 3; + } + func_800AFC3C(obj, updateRate); + func_8005D048(obj, racer, 120); + + switch(obj->segment.unk3B) { + case 1: + var_a1 = 0x2500; + break; + case 2: + var_a1 = 0x100; + break; + default: + var_a1 = 0x1500; + break; + } + + temp_v0_4 = get_object_struct(0); + temp_f20 = temp_v0_4->segment.trans.x_position - obj->segment.trans.x_position; + temp_f14 = temp_v0_4->segment.trans.z_position - obj->segment.trans.z_position; + if (sqrtf((temp_f20 * temp_f20) + (temp_f14 * temp_f14)) < 700.0) { + var_v1 = (arctan2_f(temp_f20, temp_f14) - (obj->segment.trans.y_rotation & 0xFFFF)) + 0x8000; + if (var_v1 >= 0x8001) { + var_v1 += 0xFFFF0001; + } + if (var_v1 < -0x8000) { + var_v1 += 0xFFFF; + } + var_at = var_v1 < -var_a1; + if (var_a1 < var_v1) { + var_v1 = var_a1; + var_at = var_v1 < -var_a1; + } + if (var_at != 0) { + var_v1 = -var_a1; + } + racer->unk16C = var_v1; + } + if ((obj->segment.unk3B == 1) && ((racer->unk1E7 & 0x1F) < 10)) { + racer->unk16C >>= 1; + } + temp_s0 = (Object_Racer *)temp_v0_4->unk64; + if (D_8011D5C0 < temp_v0_4->segment.trans.y_position) { + D_8011D5C0 = temp_v0_4->segment.trans.y_position; + } + if ((temp_v0_4->segment.trans.y_position + 400.0) < D_8011D5C0) { + if (!func_800C018C() && is_in_two_player_adventure()) { + func_8006F398(); + } + func_8006F140(1); + } + if ((obj == temp_v0_4->unk4C->unk0) && (temp_v0_4->unk4C->unk14 & 8) && (obj->segment.unk3B == 1)) { + temp_s0->attackType = ATTACK_SQUISHED; + } + if ((temp_s0->raceStatus != STATUS_RACING) && (D_8011D5C4 == 0)) { + D_8011D5C4 = 1; + func_8005CB68(temp_s0, &D_8011D5C4); + } +} +#else +GLOBAL_ASM("asm/non_matchings/unknown_05CEF0/func_8005C364.s") +#endif + +void func_8005CA78(u16 *arg0) { D_8011D5C8 = arg0; } @@ -68,14 +240,151 @@ void func_8005CB04(s32 arg0) { play_sound_global(D_8011D5C8[arg0], 0); } -GLOBAL_ASM("asm/non_matchings/unknown_05CEF0/func_8005CB68.s") +#ifdef NON_EQUIVALENT +// This looks like it's just some stack and regalloc differences, but I can't be certain it's NON_MATCHING yet. +// This function looks like it sets up the animation sequences +void func_8005CB68(Object_Racer *racer, s8 *arg1) { + Settings *settings; + s8 arg1_ret; + s8 *miscAsset68; + s32 bossId; + s32 racerUnk1AC; + s8 *miscAsset67; + s32 miscAsset68Byte5; + s32 miscAsset68Byte6; + s32 miscAsset68Byte7; + s8 miscAsset67CourseByte; + s32 var_t1; + s32 i; -void func_8005D048(Object *object, unk8005D048 *arg1, s32 arg2) { + arg1_ret = *arg1; + settings = get_settings(); + bossId = (1 << settings->worldId); + if (!miscAsset67CourseByte){} + /* + ASSET_MISC_68[] = + ASSET_LEVELNAME_DINODOMAINTROPHYANIM, + ASSET_LEVELNAME_SHERBETISLANDTROPHYANIM + ASSET_LEVELNAME_SNOWFLAKEMOUNTAINTROPHYANIM, + ASSET_LEVELNAME_DRAGONFORESTTROPHYANIM, + ASSET_LEVELNAME_WIZPIGMOUTHSEQUENCE, + ASSET_LEVELNAME_PARTYSEQUENCE, + ASSET_LEVELNAME_LASTBIT, + ASSET_LEVELNAME_LASTBITB + */ + miscAsset68 = (s8 *)get_misc_asset(ASSET_MISC_68); //8 bytes - 2F 31 30 32 2A 38 3F 40 - LevelIds for the world animations? + miscAsset68Byte5 = miscAsset68[5]; //0x38 - 56 - ASSET_LEVELNAME_PARTYSEQUENCE? + miscAsset68Byte6 = miscAsset68[6]; //0x3F - 63 - ASSET_LEVELNAME_LASTBIT? + miscAsset68Byte7 = miscAsset68[7]; //0x40 - 64 - ASSET_LEVELNAME_LASTBITB? + miscAsset67 = (s8 *)get_misc_asset(ASSET_MISC_67); //20 bytes - course id's array with world id index? + for (i = 0; settings->courseId != miscAsset67[i]; i += 2) { + if ((miscAsset67CourseByte && miscAsset67CourseByte) && miscAsset67CourseByte) {} + } + miscAsset67CourseByte = miscAsset67[i + 1]; + racerUnk1AC = racer->unk1AC; + if (arg1_ret == 1) { + if (racerUnk1AC == 1) { + play_music(SEQUENCE_BATTLE_VICTORY); + } else { + play_music(SEQUENCE_BATTLE_LOSE); + } + if ((settings->worldId == WORLD_CENTRAL_AREA) || (settings->worldId == WORLD_FUTURE_FUN_LAND)) { + if (racerUnk1AC == 1) { + settings->bosses |= bossId; + settings->courseFlagsPtr[settings->courseId] |= 2; + } + if (settings->worldId == WORLD_CENTRAL_AREA) { + if (racerUnk1AC == 1) { + func_8006C1AC(-2, 0, 0, 0); + func_8006C1AC(miscAsset68Byte5, 0, -1, 0); + func_8006C1AC(miscAsset67CourseByte, 0, -1, 1); + } else { + func_8006C1AC(-10, 0, 0, 0); + func_8006C1AC(miscAsset67CourseByte, 0, -1, 2); + } + } else if (racerUnk1AC == 1) { + set_eeprom_settings_value(1); //Set Adventure Two Unlocked + func_8006C1AC(-2, 0, 0, 0); + func_8006C1AC(miscAsset68Byte7, 0, -1, 0); + func_8006C1AC(miscAsset68Byte6, 0, -1, 0); + func_8006C1AC(miscAsset67CourseByte, 0, -1, 1); + } else { + func_8006C1AC(-10, 0, 0, 0); + func_8006C1AC(miscAsset67CourseByte, 0, -1, 2); + } + if (racerUnk1AC == 1) { + func_8006F140(4); + } else { + func_8006F140(3); + } + arg1_ret++; + *arg1 = arg1_ret; + return; + } + if (settings->courseFlagsPtr[settings->courseId] & 2) { + if (racerUnk1AC == 1) { + func_8006F140(4); + func_8000E128(); + } else { + func_8006F140(3); + if (is_in_two_player_adventure()) { + func_8006F398(); + } + } + arg1_ret++; + *arg1 = arg1_ret; + return; + } + if (racerUnk1AC == 1) { + settings->courseFlagsPtr[settings->courseId] |= 2; + if (!(settings->bosses & bossId)) { + settings->bosses |= bossId; + func_8006C1AC(-1, 0, 0, 0); + func_8006C1AC(miscAsset67CourseByte, 4, -1, 4); + } else if (!(settings->bosses & (bossId << 6))) { + settings->bosses |= bossId << 6; + var_t1 = 0; + if ((settings->worldId > 0) && (settings->worldId < 5)) { + var_t1 = settings->wizpigAmulet + 1; + if (var_t1 >= 5) { + var_t1 = 4; + } + settings->wizpigAmulet = var_t1; + } + if (var_t1 != 0) { + func_8006C1AC(-1, 0, 0, 0); + func_8006C1AC(ASSET_LEVELNAME_WIZPIGAMULETSEQUENCE, 0, -1, settings->wizpigAmulet - 1); + func_8006C1AC(miscAsset67CourseByte, 6, -1, 6); + } else { + func_8006C1AC(-1, 0, 0, 0); + func_8006C1AC(miscAsset67CourseByte, 4, -1, 4); + } + } else { + func_8006C1AC(-1, 0, 0, 0); + func_8006C1AC(miscAsset67CourseByte, 4, -1, 4); + } + func_8006F140(4); + func_8000E128(); + } else { + func_8006C1AC(-10, 0, 0, 0); + func_8006C1AC(miscAsset67CourseByte, 5, -1, 5); + func_8006F140(3); + } + arg1_ret++; + func_8006EC48(get_save_file_index()); + } + *arg1 = arg1_ret; +} +#else +GLOBAL_ASM("asm/non_matchings/unknown_05CEF0/func_8005CB68.s") +#endif + +void func_8005D048(Object *object, Object_Racer *arg1, s32 arg2) { Object *sp1C = get_object_struct(0); - arg1->unk1F7 = 0xFF; + arg1->transparency = 0xFF; if (!func_8001139C()) { if ((object->segment.unk30 + arg2) < sp1C->segment.unk30) { - arg1->unk1F7 = 0x40; + arg1->transparency = 0x40; } } } diff --git a/src/unknown_05CEF0.h b/src/unknown_05CEF0.h index 42ba6bdb..e2fb2888 100644 --- a/src/unknown_05CEF0.h +++ b/src/unknown_05CEF0.h @@ -12,21 +12,19 @@ typedef struct unk8005C2F0 { s32 unk118; } unk8005C2F0; -/* Unknown size */ -typedef struct unk8005D048 { - u8 pad0[0x1F7]; - u8 unk1F7; -} unk8005D048; - -extern s16 D_800DCDE0[16]; +extern u16 D_800DCDE0[16]; +extern f32 D_8011D5C0; +extern s8 D_8011D5C4; +extern s8 D_8011D5CC; s32 get_random_number_from_range(s32, s32); //? void func_8005C2F0(Object *object, unk8005C2F0 *arg1); -void func_8005CA78(s32 arg0); +void func_8005CA78(u16 *arg0); void func_8005CA84(f32 x, f32 y, f32 z, s32 arg3); void func_8005CB04(s32 arg0); -void func_8005D048(Object *object, unk8005D048 *arg1, s32 arg2); -void func_8005C364(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, s32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ +void func_8005D048(Object *object, Object_Racer *arg1, s32 arg2); +void func_8005CB68(Object_Racer *racer, s8 *arg1); // Non Matching +void func_8005C364(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ #endif diff --git a/src/unknown_05DCD0.h b/src/unknown_05DCD0.h index 09b2b0a6..d6f58a38 100644 --- a/src/unknown_05DCD0.h +++ b/src/unknown_05DCD0.h @@ -8,7 +8,7 @@ extern s16 D_800DCE00[16]; extern s16 D_800DCE20[16]; -void func_8005D820(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, s32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ -void func_8005D0D0(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, s32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ +void func_8005D820(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, s32 *currentStickX, s32 *startTimer); /* extern */ +void func_8005D0D0(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ #endif diff --git a/src/unknown_05F0C0.h b/src/unknown_05F0C0.h index a56d9b50..4b5a6a7e 100644 --- a/src/unknown_05F0C0.h +++ b/src/unknown_05F0C0.h @@ -6,6 +6,6 @@ extern s16 D_800DCE40[16]; -void func_8005E4C0(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, s32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ +void func_8005E4C0(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ #endif diff --git a/src/unknown_05F690.h b/src/unknown_05F690.h index 81ef2c38..8e0be470 100644 --- a/src/unknown_05F690.h +++ b/src/unknown_05F690.h @@ -6,6 +6,6 @@ extern s16 D_800DCE60[14]; -void func_8005EA90(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, s32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ +void func_8005EA90(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ #endif diff --git a/src/unknown_05FF10.c b/src/unknown_05FF10.c index 90533028..b8435576 100644 --- a/src/unknown_05FF10.c +++ b/src/unknown_05FF10.c @@ -5,15 +5,31 @@ #include "types.h" #include "macros.h" +#include "racer.h" +#include "unknown_05CEF0.h" +#include "objects.h" +#include "audio.h" +#include "camera.h" +#include "particles.h" /************ .data ************/ //sSoundEffectsPool index values? s16 D_800DCE80[14] = { - 0x022C, 0x00A5, 0x00A6, 0x0057, - 0x0051, 0x006D, 0x0052, 0x00F8, - 0x00F9, 0x0227, 0x0228, 0x002E, - 0x002F, 0x0030, + SOUND_VOICE_BOSS_LAUGH2, + SOUND_VOICE_TRICKY_HM, + SOUND_VOICE_TRICKY_HMMM, + SOUND_VOICE_WIZPIG_LAUGH4, + SOUND_VOICE_WIZPIG_LAUGH2, + SOUND_VOICE_WIZPIG_GROAN, + SOUND_VOICE_WIZPIG_LAUGH3, + SOUND_VOICE_SMOKEY_HAH, + SOUND_VOICE_SMOKEY_LAUGH, + SOUND_VOICE_SMOKEY_HM, + SOUND_VOICE_SMOKEY_HM2, + SOUND_VOICE_CONKER_YEHAHA, + SOUND_VOICE_TIMBER_WOW, + SOUND_WHOOSH2 }; /*******************************/ @@ -25,4 +41,124 @@ s8 D_8011D611; /******************************/ +#ifdef NON_EQUIVALENT +// Seems to be mostly regalloc and stack differences +void func_8005F310(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer) { + s16 sp3E; + s16 sp3C; + s16 sp3A; + Object *tempObj; + Object_64 *obj64; + Object_68 *obj68; + f32 zVelSquared; + f32 xVelSquared; + f32 temp_f2_3; + + func_8005CA78(D_800DCE80); + racer->unk1EC = 0; + sp3E = obj->segment.unk3B; + sp3C = obj->segment.unk18; + sp3A = racer->unk16A; + if ((racer->velocity < 0.3) && (racer->velocity > -0.3)) { + *buttonsPressed = 0; + } + if (racer->raceStatus == STATUS_FINISHED && func_80023568()) { + func_80021400(130); + racer->raceStatus++; + } + if (*startTimer == 100) { + D_8011D610 = 0; + } + racer->unk1F5 = 0; + if (racer->playerIndex == -1) { + if (*startTimer != 100) { + *startTimer -= 30; + if (*startTimer < 0) { + if (D_8011D611 == 0) { + func_8005CB04(0); + } + D_8011D611 = 1; + *startTimer = 0; + *input |= A_BUTTON; + } else { + D_8011D611 = 0; + } + } + } + racer->unk1D6 = 10; + func_80049794(updateRate, updateRateF, obj, racer); + racer->unk1D6 = racer->unk1D7; + obj->unk74 = 0; + racer->unk16A = sp3A; + obj->segment.unk3B = sp3E; + obj->segment.unk18 = sp3C; + if ((racer->attackType != ATTACK_NONE) && (obj->segment.unk3B != 1)) { + func_8005CB04(1); + play_sound_global(SOUND_EXPLOSION, NULL); + func_80069F28(12.0f); + obj->segment.x_velocity *= 0.4; + obj->segment.z_velocity *= 0.4; + obj->segment.unk3B = 1; + racer->unkC = 0; + obj->segment.y_velocity += 4.0; + } + racer->attackType = ATTACK_NONE; + if (racer->unk148 != NULL) { + xVelSquared = obj->segment.x_velocity * obj->segment.x_velocity; + zVelSquared = obj->segment.z_velocity * obj->segment.z_velocity; + racer->velocity = -sqrtf((xVelSquared * xVelSquared) + (zVelSquared * zVelSquared)); + if (racer->velocity > -0.5) { + racer->velocity = 0; + obj->segment.x_velocity = 0; + obj->segment.y_velocity = 0; + obj->segment.z_velocity = 0; + } + } + racer->unkC += (updateRateF * 2.0); + obj68 = obj->unk68[0]; + temp_f2_3 = ((obj68->objModel->animations[obj->segment.unk3B].unk4 * 16) - 17); + while (temp_f2_3 <= racer->unkC) { + racer->unkC -= temp_f2_3; + obj68->unk10 = -1; + } + while (racer->unkC <= 0) { + racer->unkC += temp_f2_3; + obj68->unk10 = -1; + } + if ((obj->segment.unk3B == 1) && (obj68->unk10 == -1)) { + obj->segment.unk3B = 0; + racer->unkC = 0; + } + obj->unk74 = 0; + obj->segment.unk18 = racer->unkC; + func_800AF714(obj, updateRate); + func_8005D048(obj, racer, 40); + if (*startTimer != 100) { + tempObj = func_8000BF44(-1); + if (tempObj != NULL) { + tempObj->unk78 = 0; + obj64 = tempObj->unk64; + if (obj64 != NULL) { + // This part here is HIHGLY suspicious, and probably wrong. + // It's probably an unidentified unk64 struct. + // Though it could actually be effect box once we add some defined attributes. + obj64->effect_box.pad0[0x72] += updateRate; + obj64->effect_box.pad0[0x70] = 2; + obj64->racer.unk74 = 1.0f; + func_8000B750(obj, -1, 2, 1, 1); + } + } + } + tempObj = get_object_struct(0); + obj64 = tempObj->unk64; + if ((obj == tempObj->unk4C->unk0) && (tempObj->unk4C->unk14 & 8) && (obj->segment.unk3B == 1)) { + obj64->racer.attackType = ATTACK_SQUISHED; + } + if ((obj64->racer.raceStatus != STATUS_RACING) && (D_8011D610 == 0)) { + D_8011D610 = 1; + func_8005CB68(obj64, &D_8011D610); + } +} +#else GLOBAL_ASM("asm/non_matchings/unknown_05FF10/func_8005F310.s") +#endif diff --git a/src/unknown_05FF10.h b/src/unknown_05FF10.h index ca4d9354..f6f1602d 100644 --- a/src/unknown_05FF10.h +++ b/src/unknown_05FF10.h @@ -7,6 +7,6 @@ extern s16 D_800DCE80[14]; //Nonmatching -void func_8005F310(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, s32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ +void func_8005F310(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *racer, u32 *input, u32 *buttonsPressed, s32 *startTimer); /* extern */ #endif diff --git a/tools/python/diff.py b/tools/python/diff.py index c5d167b4..1c036381 100644 --- a/tools/python/diff.py +++ b/tools/python/diff.py @@ -201,11 +201,11 @@ if __name__ == "__main__": ) parser.add_argument( "-s", - "--stop-jr-ra", - dest="stop_jrra", + "--stop-at-ret", + dest="stop_at_ret", action="store_true", - help="""Stop disassembling at the first 'jr ra'. Some functions have - multiple return points, so use with care!""", + help="""Stop disassembling at the first return instruction. + Some functions have multiple return points, so use with care!""", ) parser.add_argument( "-i", @@ -376,7 +376,9 @@ class ProjectSettings: objdump_flags: List[str] build_command: List[str] map_format: str - mw_build_dir: str + build_dir: str + ms_map_address_offset: int + ms_ignore_missing_objfile: int baseimg: Optional[str] myimg: Optional[str] mapfile: Optional[str] @@ -384,6 +386,7 @@ class ProjectSettings: source_extensions: List[str] show_line_numbers_default: bool disassemble_all: bool + reg_categories: Dict[str, int] @dataclass @@ -415,10 +418,11 @@ class Config: show_branches: bool show_line_numbers: bool show_source: bool - stop_jrra: bool + stop_at_ret: bool ignore_large_imms: bool ignore_addr_diffs: bool algorithm: str + reg_categories: Dict[str, int] # Score options score_stack_differences = True @@ -445,9 +449,12 @@ def create_project_settings(settings: Dict[str, Any]) -> ProjectSettings: objdump_executable=get_objdump_executable(settings.get("objdump_executable")), objdump_flags=settings.get("objdump_flags", []), map_format=settings.get("map_format", "gnu"), - mw_build_dir=settings.get("mw_build_dir", "build/"), + ms_map_address_offset=settings.get("ms_map_address_offset", 0), + ms_ignore_missing_objfile=settings.get("ms_ignore_missing_objfile", True), + build_dir=settings.get("build_dir", settings.get("mw_build_dir", "build/")), show_line_numbers_default=settings.get("show_line_numbers_default", True), disassemble_all=settings.get("disassemble_all", False), + reg_categories=settings.get("reg_categories", {}), ) @@ -502,10 +509,11 @@ def create_config(args: argparse.Namespace, project: ProjectSettings) -> Config: show_branches=args.show_branches, show_line_numbers=show_line_numbers, show_source=args.show_source or args.source_old_binutils, - stop_jrra=args.stop_jrra, + stop_at_ret=args.stop_at_ret, ignore_large_imms=args.ignore_large_imms, ignore_addr_diffs=args.ignore_addr_diffs, algorithm=args.algorithm, + reg_categories=project.reg_categories, ) @@ -563,6 +571,7 @@ class BasicFormat(enum.Enum): IMMEDIATE = enum.auto() STACK = enum.auto() REGISTER = enum.auto() + REGISTER_CATEGORY = enum.auto() DELAY_SLOT = enum.auto() DIFF_CHANGE = enum.auto() DIFF_ADD = enum.auto() @@ -716,6 +725,7 @@ class AnsiFormatter(Formatter): BasicFormat.IMMEDIATE: Fore.LIGHTBLUE_EX, BasicFormat.STACK: Fore.YELLOW, BasicFormat.REGISTER: Fore.YELLOW, + BasicFormat.REGISTER_CATEGORY: Fore.LIGHTYELLOW_EX, BasicFormat.DELAY_SLOT: Fore.LIGHTBLACK_EX, BasicFormat.DIFF_CHANGE: Fore.LIGHTBLUE_EX, BasicFormat.DIFF_ADD: Fore.GREEN, @@ -1001,7 +1011,7 @@ def maybe_get_objdump_source_flags(config: Config) -> List[str]: flags.append("--source") if not config.source_old_binutils: - flags.append("--source-comment=¦ ") + flags.append("--source-comment=│ ") if config.inlines: flags.append("--inlines") @@ -1067,6 +1077,25 @@ def preprocess_objdump_out( return out +def search_build_objects(objname: str, project: ProjectSettings) -> Optional[str]: + objfiles = [ + os.path.join(dirpath, f) + for dirpath, _, filenames in os.walk(project.build_dir) + for f in filenames + if f == objname + ] + if len(objfiles) > 1: + all_objects = "\n".join(objfiles) + fail( + f"Found multiple objects of the same name {objname} in {project.build_dir}, " + f"cannot determine which to diff against: \n{all_objects}" + ) + if len(objfiles) == 1: + return objfiles[0] + + return None + + def search_map_file( fn_name: str, project: ProjectSettings, config: Config ) -> Tuple[Optional[str], Optional[int]]: @@ -1095,7 +1124,7 @@ def search_map_file( ram = int(tokens[1], 0) rom = int(tokens[5], 0) ram_to_rom = rom - ram - if line.endswith(" " + fn_name): + if line.endswith(" " + fn_name) or f" {fn_name} = 0x" in line: ram = int(line.split()[0], 0) if cur_objfile is not None and ram_to_rom is not None: cands.append((cur_objfile, ram + ram_to_rom)) @@ -1110,16 +1139,14 @@ def search_map_file( return cands[0] elif project.map_format == "mw": find = re.findall( - re.compile( - # ram elf rom - r" \S+ \S+ (\S+) (\S+) . " - + re.escape(fn_name) - + r"(?: \(entry of " - + re.escape(config.diff_section) - + r"\))? \t" - # object name - + "(\S+)" - ), + # ram elf rom alignment + r" \S+ \S+ (\S+) (\S+) +\S+ " + + re.escape(fn_name) + + r"(?: \(entry of " + + re.escape(config.diff_section) + + r"\))? \t" + # object name + + "(\S+)", contents, ) if len(find) > 1: @@ -1127,27 +1154,56 @@ def search_map_file( if len(find) == 1: rom = int(find[0][1], 16) objname = find[0][2] - # The metrowerks linker map format does not contain the full object path, - # so we must complete it manually. - objfiles = [ - os.path.join(dirpath, f) - for dirpath, _, filenames in os.walk(project.mw_build_dir) - for f in filenames - if f == objname - ] - if len(objfiles) > 1: - all_objects = "\n".join(objfiles) - fail( - f"Found multiple objects of the same name {objname} in {project.mw_build_dir}, " - f"cannot determine which to diff against: \n{all_objects}" - ) - if len(objfiles) == 1: - objfile = objfiles[0] - # TODO Currently the ram-rom conversion only works for diffing ELF - # executables, but it would likely be more convenient to diff DOLs. - # At this time it is recommended to always use -o when running the diff - # script as this mode does not make use of the ram-rom conversion. + objfile = search_build_objects(objname, project) + + # TODO Currently the ram-rom conversion only works for diffing ELF + # executables, but it would likely be more convenient to diff DOLs. + # At this time it is recommended to always use -o when running the diff + # script as this mode does not make use of the ram-rom conversion. + if objfile is not None: return objfile, rom + elif project.map_format == "ms": + load_address_find = re.search( + r"Preferred load address is ([0-9a-f]+)", + contents, + ) + if not load_address_find: + fail(f"Couldn't find module load address in map file.") + load_address = int(load_address_find.group(1), 16) + + diff_segment_find = re.search( + r"([0-9a-f]+):[0-9a-f]+ [0-9a-f]+H " + re.escape(config.diff_section), + contents, + ) + if not diff_segment_find: + fail(f"Couldn't find segment for section in map file.") + diff_segment = diff_segment_find.group(1) + + find = re.findall( + r" (?:" + + re.escape(diff_segment) + + r")\S+\s+(?:" + + re.escape(fn_name) + + r")\s+\S+ ... \S+", + contents, + ) + if len(find) > 1: + fail(f"Found multiple occurrences of function {fn_name} in map file.") + if len(find) == 1: + names_find = re.search(r"(\S+) ... (\S+)", find[0]) + assert names_find is not None + fileofs = ( + int(names_find.group(1), 16) + - load_address + + project.ms_map_address_offset + ) + objname = names_find.group(2) + objfile = search_build_objects(objname, project) + + if objfile is not None: + return (objfile, fileofs) + elif project.ms_ignore_missing_objfile: + return (objname, fileofs) else: fail(f"Linker map format {project.map_format} unrecognised.") return None, None @@ -1393,8 +1449,13 @@ class AsmProcessor: def __init__(self, config: Config) -> None: self.config = config - def process_reloc(self, row: str, prev: str) -> str: - return prev + def pre_process( + self, mnemonic: str, args: str, next_row: Optional[str] + ) -> Tuple[str, str]: + return mnemonic, args + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + return prev, None def normalize(self, mnemonic: str, row: str) -> str: """This should be called exactly once for each line.""" @@ -1410,15 +1471,22 @@ class AsmProcessor: def post_process(self, lines: List["Line"]) -> None: return + def is_end_of_function(self, mnemonic: str, args: str) -> bool: + return False + class AsmProcessorMIPS(AsmProcessor): - def process_reloc(self, row: str, prev: str) -> str: + def __init__(self, config: Config) -> None: + super().__init__(config) + self.seen_jr_ra = False + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: arch = self.config.arch if "R_MIPS_NONE" in row or "R_MIPS_JALR" in row: # GNU as emits no-op relocations immediately after real ones when # assembling with -mabi=64. Return without trying to parse 'imm' as an # integer. - return prev + return prev, None before, imm, after = parse_relocated_line(prev) repl = row.split()[-1] + reloc_addend_from_imm(imm, before, self.config.arch) if "R_MIPS_LO16" in row: @@ -1443,20 +1511,57 @@ class AsmProcessorMIPS(AsmProcessor): repl = f"%call16({repl})" else: assert False, f"unknown relocation type '{row}' for line '{prev}'" - return before + repl + after + return before + repl + after, repl + + def is_end_of_function(self, mnemonic: str, args: str) -> bool: + if self.seen_jr_ra: + return True + if mnemonic == "jr" and args == "ra": + self.seen_jr_ra = True + return False class AsmProcessorPPC(AsmProcessor): - def process_reloc(self, row: str, prev: str) -> str: + def pre_process( + self, mnemonic: str, args: str, next_row: Optional[str] + ) -> Tuple[str, str]: + + if next_row and "R_PPC_EMB_SDA21" in next_row: + # With sda21 relocs, the linker transforms `r0` into `r2`/`r13`, and + # we may encounter this in either pre-transformed or post-transformed + # versions depending on if the .o file comes from compiler output or + # from disassembly. Normalize, to make sure both forms are treated as + # equivalent. + + args = args.replace("(r2)", "(0)") + args = args.replace("(r13)", "(0)") + args = args.replace(",r2,", ",0,") + args = args.replace(",r13,", ",0,") + + # We want to convert li and lis with an sda21 reloc, + # because the r0 to r2/r13 transformation results in + # turning an li/lis into an addi/addis with r2/r13 arg + # our preprocessing normalizes all versions to addi with a 0 arg + if mnemonic in {"li", "lis"}: + mnemonic = mnemonic.replace("li", "addi") + args_parts = args.split(",") + args = args_parts[0] + ",0," + args_parts[1] + + return mnemonic, args + + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: arch = self.config.arch assert any( - r in row for r in ["R_PPC_REL24", "R_PPC_ADDR16", "R_PPC_EMB_SDA21"] + r in row + for r in ["R_PPC_REL24", "R_PPC_ADDR16", "R_PPC_EMB_SDA21", "R_PPC_REL14"] ), f"unknown relocation type '{row}' for line '{prev}'" before, imm, after = parse_relocated_line(prev) repl = row.split()[-1] if "R_PPC_REL24" in row: # function calls pass + if "R_PPC_REL14" in row: + pass elif "R_PPC_ADDR16_HI" in row: # absolute hi of addr repl = f"{repl}@h" @@ -1474,17 +1579,26 @@ class AsmProcessorPPC(AsmProcessor): if int(repl.split("+")[1], 16) > 0x70000000: repl = repl.split("+")[0] elif "R_PPC_EMB_SDA21" in row: - # small data area - pass - return before + repl + after + # sda21 relocations; r2/r13 --> 0 swaps are performed in pre_process + repl = f"{repl}@sda21" + + return before + repl + after, repl + + def is_end_of_function(self, mnemonic: str, args: str) -> bool: + return mnemonic == "blr" class AsmProcessorARM32(AsmProcessor): - def process_reloc(self, row: str, prev: str) -> str: + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: arch = self.config.arch + if "R_ARM_ABS32" in row and not prev.startswith(".word"): + # Don't crash on R_ARM_ABS32 relocations incorrectly applied to code. + # (We may want to do something more fancy here that actually shows the + # related symbol, but this serves as a stop-gap.) + return prev, None before, imm, after = parse_relocated_line(prev) repl = row.split()[-1] + reloc_addend_from_imm(imm, before, self.config.arch) - return before + repl + after + return before + repl + after, repl def _normalize_arch_specific(self, mnemonic: str, row: str) -> str: if self.config.ignore_addr_diffs: @@ -1568,6 +1682,51 @@ class AsmProcessorAArch64(AsmProcessor): return row +class AsmProcessorI686(AsmProcessor): + def process_reloc(self, row: str, prev: str) -> Tuple[str, Optional[str]]: + repl = row.split()[-1] + mnemonic, args = prev.split(maxsplit=1) + + addr_imm = re.search(r"(? bool: + return mnemonic == "ret" + + @dataclass class ArchSettings: name: str @@ -1580,6 +1739,7 @@ class ArchSettings: re_reloc: Pattern[str] branch_instructions: Set[str] instructions_with_address_immediates: Set[str] + jump_instructions: Set[str] = field(default_factory=set) forbidden: Set[str] = field(default_factory=lambda: set(string.ascii_letters + "_")) arch_flags: List[str] = field(default_factory=list) branch_likely_instructions: Set[str] = field(default_factory=set) @@ -1616,6 +1776,18 @@ MIPS_BRANCH_INSTRUCTIONS = MIPS_BRANCH_LIKELY_INSTRUCTIONS.union( } ) +MIPS_JUMP_ADDR_INSTRUCTIONS = { + "jal", + "j", +} +MIPS_JUMP_REG_INSTRUCTIONS = { + "jalr", + "jr", +} +MIPS_JUMP_INSTRUCTIONS = set.union( + MIPS_JUMP_ADDR_INSTRUCTIONS, MIPS_JUMP_REG_INSTRUCTIONS +) + ARM32_PREFIXES = {"b", "bl"} ARM32_CONDS = { "", @@ -1692,6 +1864,76 @@ PPC_BRANCH_INSTRUCTIONS = { "bgt-", } +I686_BRANCH_INSTRUCTIONS = { + "call", + "jmp", + "ljmp", + "ja", + "jae", + "jb", + "jbe", + "jc", + "jcxz", + "jecxz", + "jrcxz", + "je", + "jg", + "jge", + "jl", + "jle", + "jna", + "jnae", + "jnb", + "jnbe", + "jnc", + "jne", + "jng", + "jnge", + "jnl", + "jnle", + "jno", + "jnp", + "jns", + "jnz", + "jo", + "jp", + "jpe", + "jpo", + "js", + "jz", + "ja", + "jae", + "jb", + "jbe", + "jc", + "je", + "jz", + "jg", + "jge", + "jl", + "jle", + "jna", + "jnae", + "jnb", + "jnbe", + "jnc", + "jne", + "jng", + "jnge", + "jnl", + "jnle", + "jno", + "jnp", + "jns", + "jnz", + "jo", + "jp", + "jpe", + "jpo", + "js", + "jz", +} + MIPS_SETTINGS = ArchSettings( name="mips", re_int=re.compile(r"[0-9]+"), @@ -1709,13 +1951,18 @@ MIPS_SETTINGS = ArchSettings( arch_flags=["-m", "mips:4300"], branch_likely_instructions=MIPS_BRANCH_LIKELY_INSTRUCTIONS, branch_instructions=MIPS_BRANCH_INSTRUCTIONS, - instructions_with_address_immediates=MIPS_BRANCH_INSTRUCTIONS.union({"jal", "j"}), - delay_slot_instructions=MIPS_BRANCH_INSTRUCTIONS.union({"j", "jal", "jr", "jalr"}), + jump_instructions=MIPS_JUMP_INSTRUCTIONS, + instructions_with_address_immediates=set.union( + MIPS_BRANCH_INSTRUCTIONS, MIPS_JUMP_ADDR_INSTRUCTIONS + ), + delay_slot_instructions=set.union(MIPS_BRANCH_INSTRUCTIONS, MIPS_JUMP_INSTRUCTIONS), proc=AsmProcessorMIPS, ) MIPSEL_SETTINGS = replace(MIPS_SETTINGS, name="mipsel", big_endian=False) +MIPS_ARCH_NAMES = {"mips", "mipsel"} + ARM32_SETTINGS = ArchSettings( name="arm32", re_int=re.compile(r"[0-9]+"), @@ -1764,16 +2011,47 @@ PPC_SETTINGS = ArchSettings( name="ppc", re_int=re.compile(r"[0-9]+"), re_comment=re.compile(r"(<.*>|//.*$)"), - re_reg=re.compile(r"\$?\b([rf][0-9]+)\b"), + # r1 not included + re_reg=re.compile(r"\$?\b([rf](?:[02-9]|[1-9][0-9]+)|f1)\b"), re_sprel=re.compile(r"(?<=,)(-?[0-9]+|-?0x[0-9a-f]+)\(r1\)"), re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"), - re_imm=re.compile(r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(r1)|[^@]*@(ha|h|lo)"), + re_imm=re.compile( + r"(\b|-)([0-9]+|0x[0-9a-fA-F]+)\b(?!\(r1)|[^ \t,]+@(l|ha|h|sda21)" + ), re_reloc=re.compile(r"R_PPC_"), + arch_flags=["-m", "powerpc", "-M", "broadway"], branch_instructions=PPC_BRANCH_INSTRUCTIONS, instructions_with_address_immediates=PPC_BRANCH_INSTRUCTIONS.union({"bl"}), proc=AsmProcessorPPC, ) +I686_SETTINGS = ArchSettings( + name="i686", + re_int=re.compile(r"[0-9]+"), + re_comment=re.compile(r"<.*>"), + # Includes: + # - (e)a-d(x,l,h) + # - (e)s,d,b(i,p)(l) + # - cr0-7 + # - x87 st + # - MMX, SSE vector registers + # - cursed registers: eal ebl ebh edl edh... + re_reg=re.compile( + r"\%?\b(e?(([sd]i|[sb]p)l?|[abcd][xhl])|[cdesfg]s|cr[0-7]|x?mm[0-7]|st)\b" + ), + re_large_imm=re.compile(r"-?[1-9][0-9]{2,}|-?0x[0-9a-f]{3,}"), + re_sprel=re.compile(r"-?(0x[0-9a-f]+|[0-9]+)(?=\((%ebp|%esi)\))"), + re_imm=re.compile(r"-?(0x[0-9a-f]+|[0-9]+)"), + re_reloc=re.compile(r"R_386_"), + # The x86 architecture has a variable instruction length. The raw bytes of + # an instruction as displayed by objdump can line wrap if it's long enough. + # This destroys the objdump output processor logic, so we avoid this. + arch_flags=["-m", "i386", "--no-show-raw-insn"], + branch_instructions=I686_BRANCH_INSTRUCTIONS, + instructions_with_address_immediates=I686_BRANCH_INSTRUCTIONS.union({"mov"}), + proc=AsmProcessorI686, +) + ARCH_SETTINGS = [ MIPS_SETTINGS, MIPSEL_SETTINGS, @@ -1781,6 +2059,7 @@ ARCH_SETTINGS = [ ARMEL_SETTINGS, AARCH64_SETTINGS, PPC_SETTINGS, + I686_SETTINGS, ] @@ -1852,6 +2131,7 @@ class Line: original: str normalized_original: str scorable_line: str + symbol: Optional[str] = None line_num: Optional[int] = None branch_target: Optional[int] = None data_pool_addr: Optional[int] = None @@ -1907,10 +2187,8 @@ def process(dump: str, config: Config) -> List[Line]: if not re.match(r"^\s+[0-9a-f]+:\s+", row): # This regex is conservative, and assumes the file path does not contain "weird" - # characters like colons, tabs, or angle brackets. - if re.match( - r"^[^ \t<>:][^\t<>:]*:[0-9]+( \(discriminator [0-9]+\))?$", row - ): + # characters like tabs or angle brackets. + if re.match(r"^[^ \t<>][^\t<>]*:[0-9]+( \(discriminator [0-9]+\))?$", row): source_filename, _, tail = row.rpartition(":") source_line_num = int(tail.partition(" ")[0]) source_lines.append(row) @@ -1930,9 +2208,14 @@ def process(dump: str, config: Config) -> List[Line]: line_num_str = row.split(":")[0] row = row.rstrip() tabs = row.split("\t") - row = "\t".join(tabs[2:]) line_num = eval_line_num(line_num_str.strip()) + # TODO: use --no-show-raw-insn for all arches + if arch.name == "i686": + row = "\t".join(tabs[1:]) + else: + row = "\t".join(tabs[2:]) + if line_num in data_refs: refs = data_refs[line_num] ref_str = "; ".join( @@ -1954,8 +2237,12 @@ def process(dump: str, config: Config) -> List[Line]: else: # powerpc-eabi-objdump doesn't use tabs row_parts = [part.lstrip() for part in row.split(" ", 1)] + mnemonic = row_parts[0].strip() - args = row_parts[1] if len(row_parts) >= 2 else "" + args = row_parts[1].strip() if len(row_parts) >= 2 else "" + + next_line = lines[i] if i < len(lines) else None + mnemonic, args = processor.pre_process(mnemonic, args, next_line) row = mnemonic + "\t" + args.replace("\t", " ") addr = "" @@ -1973,14 +2260,28 @@ def process(dump: str, config: Config) -> List[Line]: # immediates. original = row + symbol = None while i < len(lines): reloc_row = lines[i] if re.search(arch.re_reloc, reloc_row): - original = processor.process_reloc(reloc_row, original) + original, reloc_symbol = processor.process_reloc(reloc_row, original) + if reloc_symbol is not None: + symbol = reloc_symbol else: break i += 1 + is_text_relative_j = False + if ( + arch.name in MIPS_ARCH_NAMES + and mnemonic == "j" + and symbol is not None + and symbol.startswith(".text") + ): + symbol = None + original = row + is_text_relative_j = True + normalized_original = processor.normalize(mnemonic, original) scorable_line = normalized_original @@ -2006,8 +2307,14 @@ def process(dump: str, config: Config) -> List[Line]: row = normalize_imms(row, arch) branch_target = None - if mnemonic in arch.branch_instructions: - branch_target = int(row_parts[1].strip().split(",")[-1], 16) + if mnemonic in arch.branch_instructions or is_text_relative_j: + x86_longjmp = re.search(r"\*(.*)\(", args) + if x86_longjmp: + capture = x86_longjmp.group(1) + if capture != "": + branch_target = int(capture, 16) + else: + branch_target = int(args.split(",")[-1], 16) output.append( Line( @@ -2016,6 +2323,7 @@ def process(dump: str, config: Config) -> List[Line]: original=original, normalized_original=normalized_original, scorable_line=scorable_line, + symbol=symbol, line_num=line_num, branch_target=branch_target, data_pool_addr=data_pool_addr, @@ -2028,9 +2336,7 @@ def process(dump: str, config: Config) -> List[Line]: num_instr += 1 source_lines = [] - if config.stop_jrra and mnemonic == "jr" and row_parts[1].strip() == "ra": - stop_after_delay_slot = True - elif stop_after_delay_slot: + if config.stop_at_ret and processor.is_end_of_function(mnemonic, args): break processor.post_process(output) @@ -2045,9 +2351,44 @@ def normalize_stack(row: str, arch: ArchSettings) -> str: return re.sub(arch.re_sprel, "addr(sp)", row) -def imm_matches_everything(row: str, arch: ArchSettings) -> bool: - # (this should probably be arch-specific) - return "(." in row +def check_for_symbol_mismatch( + old_line: Line, new_line: Line, symbol_map: Dict[str, str] +) -> bool: + + assert old_line.symbol is not None + assert new_line.symbol is not None + + if new_line.symbol.startswith("%hi"): + return False + + if old_line.symbol not in symbol_map: + symbol_map[old_line.symbol] = new_line.symbol + return False + elif symbol_map[old_line.symbol] == new_line.symbol: + return False + + return True + + +def field_matches_any_symbol(field: str, arch: ArchSettings) -> bool: + if arch.name == "ppc": + if "..." in field: + return True + + parts = field.rsplit("@", 1) + if len(parts) == 2 and parts[1] in {"l", "h", "ha", "sda21"}: + field = parts[0] + + return re.fullmatch((r"^@\d+$"), field) is not None + + if arch.name in MIPS_ARCH_NAMES: + return "." in field + + # Example: ".text+0x34" + if arch.name == "arm32": + return "." in field + + return False def split_off_address(line: str) -> Tuple[str, str]: @@ -2126,69 +2467,80 @@ def diff_lines( return ret +def diff_sameline( + old_line: Line, new_line: Line, config: Config, symbol_map: Dict[str, str] +) -> Tuple[int, int, bool]: + + old = old_line.scorable_line + new = new_line.scorable_line + if old == new: + return (0, 0, False) + + num_stack_penalties = 0 + num_regalloc_penalties = 0 + has_symbol_mismatch = False + + ignore_last_field = False + if config.score_stack_differences: + oldsp = re.search(config.arch.re_sprel, old) + newsp = re.search(config.arch.re_sprel, new) + if oldsp and newsp: + oldrel = int(oldsp.group(1) or "0", 0) + newrel = int(newsp.group(1) or "0", 0) + num_stack_penalties += abs(oldrel - newrel) + ignore_last_field = True + + # Probably regalloc difference, or signed vs unsigned + + # Compare each field in order + new_parts, old_parts = new.split(None, 1), old.split(None, 1) + newfields, oldfields = new_parts[1].split(","), old_parts[1].split(",") + if ignore_last_field: + newfields = newfields[:-1] + oldfields = oldfields[:-1] + else: + # If the last field has a parenthesis suffix, e.g. "0x38(r7)" + # we split that part out to make it a separate field + # however, we don't split if it has a proceeding %hi/%lo e.g."%lo(.data)" or "%hi(.rodata + 0x10)" + re_paren = re.compile(r"(? int: # This logic is copied from `scorer.py` from the decomp permuter project # https://github.com/simonlindholm/decomp-permuter/blob/main/src/scorer.py - score = 0 + num_stack_penalties = 0 + num_regalloc_penalties = 0 + num_reordering_penalties = 0 + num_insertion_penalties = 0 + num_deletion_penalties = 0 deletions = [] insertions = [] - def lo_hi_match(old: str, new: str) -> bool: - # TODO: Make this arch-independent, like `imm_matches_everything()` - old_lo = old.find("%lo") - old_hi = old.find("%hi") - new_lo = new.find("%lo") - new_hi = new.find("%hi") - - if old_lo != -1 and new_lo != -1: - old_idx = old_lo - new_idx = new_lo - elif old_hi != -1 and new_hi != -1: - old_idx = old_hi - new_idx = new_hi - else: - return False - - if old[:old_idx] != new[:new_idx]: - return False - - old_inner = old[old_idx + 4 : -1] - new_inner = new[new_idx + 4 : -1] - return old_inner.startswith(".") or new_inner.startswith(".") - - def diff_sameline(old: str, new: str) -> None: - nonlocal score - if old == new: - return - - if lo_hi_match(old, new): - return - - ignore_last_field = False - if config.score_stack_differences: - oldsp = re.search(config.arch.re_sprel, old) - newsp = re.search(config.arch.re_sprel, new) - if oldsp and newsp: - oldrel = int(oldsp.group(1) or "0", 0) - newrel = int(newsp.group(1) or "0", 0) - score += abs(oldrel - newrel) * config.penalty_stackdiff - ignore_last_field = True - - # Probably regalloc difference, or signed vs unsigned - - # Compare each field in order - newfields, oldfields = new.split(","), old.split(",") - if ignore_last_field: - newfields = newfields[:-1] - oldfields = oldfields[:-1] - for nf, of in zip(newfields, oldfields): - if nf != of: - score += config.penalty_regalloc - # Penalize any extra fields - score += abs(len(newfields) - len(oldfields)) * config.penalty_regalloc - def diff_insert(line: str) -> None: # Reordering or totally different codegen. # Defer this until later when we can tell. @@ -2218,7 +2570,9 @@ def score_diff_lines( if max_index is not None and index > max_index: break if line1 and line2 and line1.mnemonic == line2.mnemonic: - diff_sameline(line1.scorable_line, line2.scorable_line) + sp, rp, _ = diff_sameline(line1, line2, config, symbol_map) + num_stack_penalties += sp + num_regalloc_penalties += rp else: if line1: diff_delete(line1.scorable_line) @@ -2231,13 +2585,17 @@ def score_diff_lines( ins = insertions_co[item] dels = deletions_co[item] common = min(ins, dels) - score += ( - (ins - common) * config.penalty_insertion - + (dels - common) * config.penalty_deletion - + config.penalty_reordering * common - ) + num_insertion_penalties += ins - common + num_deletion_penalties += dels - common + num_reordering_penalties += common - return score + return ( + num_stack_penalties * config.penalty_stackdiff + + num_regalloc_penalties * config.penalty_regalloc + + num_reordering_penalties * config.penalty_reordering + + num_insertion_penalties * config.penalty_insertion + + num_deletion_penalties * config.penalty_deletion + ) @dataclass(frozen=True) @@ -2275,6 +2633,7 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff: arch = config.arch fmt = config.formatter output: List[OutputLine] = [] + symbol_map: Dict[str, str] = {} sc1 = symbol_formatter("base-reg", 0) sc2 = symbol_formatter("my-reg", 0) @@ -2300,7 +2659,6 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff: lines2 = trim_nops(lines2, arch) diffed_lines = diff_lines(lines1, lines2, config.algorithm) - max_score = len(lines1) * config.penalty_deletion line_num_base = -1 line_num_offset = 0 @@ -2385,7 +2743,17 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff: if normalize_imms(branchless1, arch) == normalize_imms( branchless2, arch ): - if imm_matches_everything(branchless2, arch): + ( + stack_penalties, + regalloc_penalties, + has_symbol_mismatch, + ) = diff_sameline(line1, line2, config, symbol_map) + + if ( + regalloc_penalties == 0 + and stack_penalties == 0 + and not has_symbol_mismatch + ): # ignore differences due to %lo(.rodata + ...) vs symbol out1 = out1.reformat(BasicFormat.NONE) out2 = out2.reformat(BasicFormat.NONE) @@ -2410,8 +2778,19 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff: else: # reg differences and maybe imm as well out1, out2 = format_fields(arch.re_reg, out1, out2, sc1, sc2) - line_color1 = line_color2 = sym_color = BasicFormat.REGISTER - line_prefix = "r" + cats = config.reg_categories + if cats and any( + cats.get(of.group()) != cats.get(nf.group()) + for (of, nf) in zip( + out1.finditer(arch.re_reg), out2.finditer(arch.re_reg) + ) + ): + sym_color = BasicFormat.REGISTER_CATEGORY + line_prefix = "R" + else: + sym_color = BasicFormat.REGISTER + line_prefix = "r" + line_color1 = line_color2 = sym_color if same_target: address_imm_fmt = BasicFormat.NONE @@ -2478,7 +2857,7 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff: pass else: # File names and function names - if source_line and source_line[0] != "¦": + if source_line and source_line[0] != "│": line_format = BasicFormat.SOURCE_FILENAME # Function names if source_line.endswith("():"): @@ -2536,8 +2915,10 @@ def do_diff(lines1: List[Line], lines2: List[Line], config: Config) -> Diff: ) ) - score = score_diff_lines(diffed_lines, config) output = output[config.skip_lines :] + + score = score_diff_lines(diffed_lines, config, symbol_map) + max_score = len(lines1) * config.penalty_deletion return Diff(lines=output, score=score, max_score=max_score) @@ -2774,10 +3155,12 @@ class Display: meta, diff_lines = align_diffs(last_diff_output, diff_output, self.config) output = self.config.formatter.table(meta, diff_lines) + refresh_key = ( [line.key2 for line in diff_output.lines], diff_output.score, ) + return (output, refresh_key) def run_less( diff --git a/tools/python/score.py b/tools/python/score.py index 872c5e77..f4e9d09a 100644 --- a/tools/python/score.py +++ b/tools/python/score.py @@ -30,7 +30,7 @@ for folder in ASM_FOLDERS: BUILD_DIRECTORY = './build/us_1.0' SRC_DIRECTORY = './src' LIB_SRC_DIRECTORY = './lib/src' -FUNCTION_REGEX = r'^(?