From 519ff3c09c06fccd6f247980a08fc992022096a6 Mon Sep 17 00:00:00 2001 From: Fazana <52551480+FazanaJ@users.noreply.github.com> Date: Fri, 20 May 2022 20:37:55 +0100 Subject: [PATCH] Further matches + bit of labelling (#228) * match func_80058D5C * minor cosmetic tweak * what is to crush the spirit of somebody but to discover more unions * dont mind me just switching computers * remove a tempstruct * temp thing * match func_80054110 * Delete func_80054110.s * racer.c cleanup * Update math_util.h * Update racer.c * added CLAMP and WRAP macros * Update math_util.h * match func_80055A84 * he * match func_80057A40 * we do a little labelling * match update_camera_loop * match update_camera_hovercraft * Update structs.h * pain. * Update README.md * Update racer.c * like this? --- README.md | 46 +- asm/non_matchings/racer/func_80048E64.s | 446 ----- asm/non_matchings/racer/func_8004D590.s | 254 --- asm/non_matchings/racer/func_80054110.s | 568 ------ asm/non_matchings/racer/func_80055A84.s | 292 --- asm/non_matchings/racer/func_80057A40.s | 454 ----- asm/non_matchings/racer/func_80058D5C.s | 126 -- .../{func_800581E8.s => update_camera_car.s} | 2 +- ...{func_8004C2B0.s => update_camera_plane.s} | 2 +- include/enums.h | 11 + include/math_util.h | 24 +- include/structs.h | 73 +- src/game_ui.c | 5 +- src/object_functions.c | 2 +- src/particles.h | 1 + src/racer.c | 1637 +++++++++++++---- src/racer.h | 102 +- 17 files changed, 1458 insertions(+), 2587 deletions(-) delete mode 100644 asm/non_matchings/racer/func_80048E64.s delete mode 100644 asm/non_matchings/racer/func_8004D590.s delete mode 100644 asm/non_matchings/racer/func_80054110.s delete mode 100644 asm/non_matchings/racer/func_80055A84.s delete mode 100644 asm/non_matchings/racer/func_80057A40.s delete mode 100644 asm/non_matchings/racer/func_80058D5C.s rename asm/non_matchings/racer/{func_800581E8.s => update_camera_car.s} (99%) rename asm/non_matchings/racer/{func_8004C2B0.s => update_camera_plane.s} (99%) diff --git a/README.md b/README.md index 00a65c1b..d5c470b2 100755 --- a/README.md +++ b/README.md @@ -115,29 +115,29 @@ s32 is_drumstick_unlocked(void) { As of April 29th, 2022, this is our current score: ``` - ===================================================================== - ADVENTURE ONE (ASM -> C Decompilation) - -------------------------- 23.68% Complete -------------------------- - # Decompiled functions: 1131 - # GLOBAL_ASM remaining: 648 - # NON_MATCHING functions: 8 - # NON_EQUIVALENT WIP functions: 104 - ---------------------------- Game Status ---------------------------- - Balloons: 12/47, Keys: 1/4, Trophies: 0/5 - T.T. Amulets: 1/4, Wizpig Amulets: 1/4 - --------------------------------------------------------------------- - We are participating in the Trophy Race of Dino Domain. (Round Three) - ===================================================================== - ADVENTURE TWO (Cleanup & Documentation) - -------------------------- 2.99% Complete -------------------------- - # Documented functions: 147 - # Undocumented remaining: 1632 - ---------------------------- Game Status ---------------------------- - Balloons: 1/47, Keys: 0/4, Trophies: 0/5 - T.T. Amulets: 0/4, Wizpig Amulets: 0/4 - --------------------------------------------------------------------- - We are collecting the second balloon on Timber's Island. - ===================================================================== + ======================================================= + ADVENTURE ONE (ASM -> C Decompilation) + ------------------- 24.58% Complete ------------------- + # Decompiled functions: 1137 + # GLOBAL_ASM remaining: 642 + # NON_MATCHING functions: 8 + # NON_EQUIVALENT WIP functions: 106 + --------------------- Game Status --------------------- + Balloons: 12/47, Keys: 1/4, Trophies: 1/5 + T.T. Amulets: 1/4, Wizpig Amulets: 1/4 + ------------------------------------------------------- + We are racing Taj in the Car Challenge. (Lap 1/3) + ======================================================= + ADVENTURE TWO (Cleanup & Documentation) + ------------------- 3.43% Complete ------------------- + # Documented functions: 152 + # Undocumented remaining: 1627 + --------------------- Game Status --------------------- + Balloons: 2/47, Keys: 0/4, Trophies: 0/5 + T.T. Amulets: 0/4, Wizpig Amulets: 0/4 + ------------------------------------------------------- + We are collecting the third balloon on Timber's Island. + ======================================================= ``` --- diff --git a/asm/non_matchings/racer/func_80048E64.s b/asm/non_matchings/racer/func_80048E64.s deleted file mode 100644 index aaddd28f..00000000 --- a/asm/non_matchings/racer/func_80048E64.s +++ /dev/null @@ -1,446 +0,0 @@ -.late_rodata -glabel D_800E6498 -.double 65.0 - -.text -glabel func_80048E64 -/* 049A64 80048E64 27BDFFA0 */ addiu $sp, $sp, -0x60 -/* 049A68 80048E68 3C014325 */ li $at, 0x43250000 # 165.000000 -/* 049A6C 80048E6C 44817000 */ mtc1 $at, $f14 -/* 049A70 80048E70 3C014282 */ li $at, 0x42820000 # 65.000000 -/* 049A74 80048E74 44819000 */ mtc1 $at, $f18 -/* 049A78 80048E78 AFBF001C */ sw $ra, 0x1c($sp) -/* 049A7C 80048E7C 240E0400 */ li $t6, 1024 -/* 049A80 80048E80 AFB00018 */ sw $s0, 0x18($sp) -/* 049A84 80048E84 E7AC0060 */ swc1 $f12, 0x60($sp) -/* 049A88 80048E88 AFA50064 */ sw $a1, 0x64($sp) -/* 049A8C 80048E8C AFAE0024 */ sw $t6, 0x24($sp) -/* 049A90 80048E90 AFA60068 */ sw $a2, 0x68($sp) -/* 049A94 80048E94 E7AE0048 */ swc1 $f14, 0x48($sp) -/* 049A98 80048E98 0C019884 */ jal get_viewport_count -/* 049A9C 80048E9C E7B20044 */ swc1 $f18, 0x44($sp) -/* 049AA0 80048EA0 24060001 */ li $a2, 1 -/* 049AA4 80048EA4 8FA70068 */ lw $a3, 0x68($sp) -/* 049AA8 80048EA8 C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 049AAC 80048EAC C7B20044 */ lwc1 $f18, 0x44($sp) -/* 049AB0 80048EB0 14460008 */ bne $v0, $a2, .L80048ED4 -/* 049AB4 80048EB4 3C108012 */ lui $s0, %hi(gCameraObject) # $s0, 0x8012 -/* 049AB8 80048EB8 3C014348 */ li $at, 0x43480000 # 200.000000 -/* 049ABC 80048EBC 44817000 */ mtc1 $at, $f14 -/* 049AC0 80048EC0 3C01424C */ li $at, 0x424C0000 # 51.000000 -/* 049AC4 80048EC4 44819000 */ mtc1 $at, $f18 -/* 049AC8 80048EC8 240F0280 */ li $t7, 640 -/* 049ACC 80048ECC 10000008 */ b .L80048EF0 -/* 049AD0 80048ED0 AFAF0024 */ sw $t7, 0x24($sp) -.L80048ED4: -/* 049AD4 80048ED4 28410002 */ slti $at, $v0, 2 -/* 049AD8 80048ED8 14200005 */ bnez $at, .L80048EF0 -/* 049ADC 80048EDC 3C014302 */ li $at, 0x43020000 # 130.000000 -/* 049AE0 80048EE0 44817000 */ mtc1 $at, $f14 -/* 049AE4 80048EE4 3C014248 */ li $at, 0x42480000 # 50.000000 -/* 049AE8 80048EE8 44819000 */ mtc1 $at, $f18 -/* 049AEC 80048EEC 00000000 */ nop -.L80048EF0: -/* 049AF0 80048EF0 2610D508 */ addiu $s0, %lo(gCameraObject) # addiu $s0, $s0, -0x2af8 -/* 049AF4 80048EF4 8E050000 */ lw $a1, ($s0) -/* 049AF8 80048EF8 C4F000B8 */ lwc1 $f16, 0xb8($a3) -/* 049AFC 80048EFC 90A2003B */ lbu $v0, 0x3b($a1) -/* 049B00 80048F00 C4EC0008 */ lwc1 $f12, 8($a3) -/* 049B04 80048F04 10460007 */ beq $v0, $a2, .L80048F24 -/* 049B08 80048F08 24010002 */ li $at, 2 -/* 049B0C 80048F0C 10410009 */ beq $v0, $at, .L80048F34 -/* 049B10 80048F10 24010003 */ li $at, 3 -/* 049B14 80048F14 1041000F */ beq $v0, $at, .L80048F54 -/* 049B18 80048F18 3C014254 */ lui $at, 0x4254 -/* 049B1C 80048F1C 1000001A */ b .L80048F88 -/* 049B20 80048F20 80F801E4 */ lb $t8, 0x1e4($a3) -.L80048F24: -/* 049B24 80048F24 3C01420C */ li $at, 0x420C0000 # 35.000000 -/* 049B28 80048F28 44812000 */ mtc1 $at, $f4 -/* 049B2C 80048F2C 10000015 */ b .L80048F84 -/* 049B30 80048F30 46047380 */ add.s $f14, $f14, $f4 -.L80048F34: -/* 049B34 80048F34 3C01420C */ li $at, 0x420C0000 # 35.000000 -/* 049B38 80048F38 44813000 */ mtc1 $at, $f6 -/* 049B3C 80048F3C 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 049B40 80048F40 44814000 */ mtc1 $at, $f8 -/* 049B44 80048F44 46067381 */ sub.s $f14, $f14, $f6 -/* 049B48 80048F48 1000000E */ b .L80048F84 -/* 049B4C 80048F4C 46089481 */ sub.s $f18, $f18, $f8 -/* 049B50 80048F50 3C014254 */ li $at, 0x42540000 # 53.000000 -.L80048F54: -/* 049B54 80048F54 44815000 */ mtc1 $at, $f10 -/* 049B58 80048F58 3C0140A0 */ li $at, 0x40A00000 # 5.000000 -/* 049B5C 80048F5C 44812000 */ mtc1 $at, $f4 -/* 049B60 80048F60 3C013FD0 */ li $at, 0x3FD00000 # 1.625000 -/* 049B64 80048F64 44814800 */ mtc1 $at, $f9 -/* 049B68 80048F68 44804000 */ mtc1 $zero, $f8 -/* 049B6C 80048F6C 460061A1 */ cvt.d.s $f6, $f12 -/* 049B70 80048F70 460A7381 */ sub.s $f14, $f14, $f10 -/* 049B74 80048F74 44808000 */ mtc1 $zero, $f16 -/* 049B78 80048F78 46283282 */ mul.d $f10, $f6, $f8 -/* 049B7C 80048F7C 46049481 */ sub.s $f18, $f18, $f4 -/* 049B80 80048F80 46205320 */ cvt.s.d $f12, $f10 -.L80048F84: -/* 049B84 80048F84 80F801E4 */ lb $t8, 0x1e4($a3) -.L80048F88: -/* 049B88 80048F88 00000000 */ nop -/* 049B8C 80048F8C 1700002D */ bnez $t8, .L80049044 -/* 049B90 80048F90 00000000 */ nop -/* 049B94 80048F94 8FB90064 */ lw $t9, 0x64($sp) -/* 049B98 80048F98 8FA90024 */ lw $t1, 0x24($sp) -/* 049B9C 80048F9C 87220002 */ lh $v0, 2($t9) -/* 049BA0 80048FA0 34018001 */ li $at, 32769 -/* 049BA4 80048FA4 18400008 */ blez $v0, .L80048FC8 -/* 049BA8 80048FA8 00000000 */ nop -/* 049BAC 80048FAC 2442F9E4 */ addiu $v0, $v0, -0x61c -/* 049BB0 80048FB0 04410003 */ bgez $v0, .L80048FC0 -/* 049BB4 80048FB4 00024043 */ sra $t0, $v0, 1 -/* 049BB8 80048FB8 00001025 */ move $v0, $zero -/* 049BBC 80048FBC 00024043 */ sra $t0, $v0, 1 -.L80048FC0: -/* 049BC0 80048FC0 10000005 */ b .L80048FD8 -/* 049BC4 80048FC4 01001025 */ move $v0, $t0 -.L80048FC8: -/* 049BC8 80048FC8 2442061C */ addiu $v0, $v0, 0x61c -/* 049BCC 80048FCC 18400002 */ blez $v0, .L80048FD8 -/* 049BD0 80048FD0 00000000 */ nop -/* 049BD4 80048FD4 00001025 */ move $v0, $zero -.L80048FD8: -/* 049BD8 80048FD8 84A40002 */ lh $a0, 2($a1) -/* 049BDC 80048FDC 01221023 */ subu $v0, $t1, $v0 -/* 049BE0 80048FE0 308AFFFF */ andi $t2, $a0, 0xffff -/* 049BE4 80048FE4 004A1823 */ subu $v1, $v0, $t2 -/* 049BE8 80048FE8 0061082A */ slt $at, $v1, $at -/* 049BEC 80048FEC 14200003 */ bnez $at, .L80048FFC -/* 049BF0 80048FF0 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 049BF4 80048FF4 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 049BF8 80048FF8 00611821 */ addu $v1, $v1, $at -.L80048FFC: -/* 049BFC 80048FFC 28618000 */ slti $at, $v1, -0x8000 -/* 049C00 80049000 10200002 */ beqz $at, .L8004900C -/* 049C04 80049004 3401FFFF */ li $at, 65535 -/* 049C08 80049008 00611821 */ addu $v1, $v1, $at -.L8004900C: -/* 049C0C 8004900C 444BF800 */ cfc1 $t3, $31 -/* 049C10 80049010 C7A40060 */ lwc1 $f4, 0x60($sp) -/* 049C14 80049014 35610003 */ ori $at, $t3, 3 -/* 049C18 80049018 38210002 */ xori $at, $at, 2 -/* 049C1C 8004901C 44C1F800 */ ctc1 $at, $31 -/* 049C20 80049020 00000000 */ nop -/* 049C24 80049024 460021A4 */ cvt.w.s $f6, $f4 -/* 049C28 80049028 440C3000 */ mfc1 $t4, $f6 -/* 049C2C 8004902C 44CBF800 */ ctc1 $t3, $31 -/* 049C30 80049030 006C0019 */ multu $v1, $t4 -/* 049C34 80049034 00006812 */ mflo $t5 -/* 049C38 80049038 000D7103 */ sra $t6, $t5, 4 -/* 049C3C 8004903C 008E7821 */ addu $t7, $a0, $t6 -/* 049C40 80049040 A4AF0002 */ sh $t7, 2($a1) -.L80049044: -/* 049C44 80049044 AFA70068 */ sw $a3, 0x68($sp) -/* 049C48 80049048 E7AC0028 */ swc1 $f12, 0x28($sp) -/* 049C4C 8004904C E7AE0048 */ swc1 $f14, 0x48($sp) -/* 049C50 80049050 E7B0002C */ swc1 $f16, 0x2c($sp) -/* 049C54 80049054 0C019884 */ jal get_viewport_count -/* 049C58 80049058 E7B20044 */ swc1 $f18, 0x44($sp) -/* 049C5C 8004905C 8FA70068 */ lw $a3, 0x68($sp) -/* 049C60 80049060 44805800 */ mtc1 $zero, $f11 -/* 049C64 80049064 C4E0002C */ lwc1 $f0, 0x2c($a3) -/* 049C68 80049068 44805000 */ mtc1 $zero, $f10 -/* 049C6C 8004906C 46000221 */ cvt.d.s $f8, $f0 -/* 049C70 80049070 462A403C */ c.lt.d $f8, $f10 -/* 049C74 80049074 C7AC0028 */ lwc1 $f12, 0x28($sp) -/* 049C78 80049078 C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 049C7C 8004907C C7B0002C */ lwc1 $f16, 0x2c($sp) -/* 049C80 80049080 C7B20044 */ lwc1 $f18, 0x44($sp) -/* 049C84 80049084 45000013 */ bc1f .L800490D4 -/* 049C88 80049088 3C0141F0 */ lui $at, 0x41f0 -/* 049C8C 8004908C 46100102 */ mul.s $f4, $f0, $f16 -/* 049C90 80049090 3C0140C0 */ li $at, 0x40C00000 # 6.000000 -/* 049C94 80049094 44814000 */ mtc1 $at, $f8 -/* 049C98 80049098 3C01800E */ lui $at, %hi(D_800E6498 + 4) # $at, 0x800e -/* 049C9C 8004909C 46002187 */ neg.s $f6, $f4 -/* 049CA0 800490A0 46083082 */ mul.s $f2, $f6, $f8 -/* 049CA4 800490A4 C42B6498 */ lwc1 $f11, %lo(D_800E6498)($at) -/* 049CA8 800490A8 C42A649C */ lwc1 $f10, %lo(D_800E6498 + 4)($at) -/* 049CAC 800490AC 3C014282 */ li $at, 0x42820000 # 65.000000 -/* 049CB0 800490B0 46001121 */ cvt.d.s $f4, $f2 -/* 049CB4 800490B4 4624503C */ c.lt.d $f10, $f4 -/* 049CB8 800490B8 00000000 */ nop -/* 049CBC 800490BC 45000003 */ bc1f .L800490CC -/* 049CC0 800490C0 00000000 */ nop -/* 049CC4 800490C4 44811000 */ mtc1 $at, $f2 -/* 049CC8 800490C8 00000000 */ nop -.L800490CC: -/* 049CCC 800490CC 46027381 */ sub.s $f14, $f14, $f2 -/* 049CD0 800490D0 3C0141F0 */ li $at, 0x41F00000 # 30.000000 -.L800490D4: -/* 049CD4 800490D4 44813000 */ mtc1 $at, $f6 -/* 049CD8 800490D8 3C188012 */ lui $t8, %hi(D_8011D540) # $t8, 0x8012 -/* 049CDC 800490DC 46066202 */ mul.s $f8, $f12, $f6 -/* 049CE0 800490E0 8F18D540 */ lw $t8, %lo(D_8011D540)($t8) -/* 049CE4 800490E4 00000000 */ nop -/* 049CE8 800490E8 17000014 */ bnez $t8, .L8004913C -/* 049CEC 800490EC 46087380 */ add.s $f14, $f14, $f8 -/* 049CF0 800490F0 24040024 */ li $a0, 36 -/* 049CF4 800490F4 AFA70068 */ sw $a3, 0x68($sp) -/* 049CF8 800490F8 E7AE0048 */ swc1 $f14, 0x48($sp) -/* 049CFC 800490FC 0C00322D */ jal func_8000C8B4 -/* 049D00 80049100 E7B20044 */ swc1 $f18, 0x44($sp) -/* 049D04 80049104 8FA70068 */ lw $a3, 0x68($sp) -/* 049D08 80049108 C7AE0048 */ lwc1 $f14, 0x48($sp) -/* 049D0C 8004910C 80E301D3 */ lb $v1, 0x1d3($a3) -/* 049D10 80049110 C7B20044 */ lwc1 $f18, 0x44($sp) -/* 049D14 80049114 0043082A */ slt $at, $v0, $v1 -/* 049D18 80049118 10200004 */ beqz $at, .L8004912C -/* 049D1C 8004911C 3C01C1F0 */ li $at, 0xC1F00000 # -30.000000 -/* 049D20 80049120 44817000 */ mtc1 $at, $f14 -/* 049D24 80049124 10000005 */ b .L8004913C -/* 049D28 80049128 00000000 */ nop -.L8004912C: -/* 049D2C 8004912C 18600003 */ blez $v1, .L8004913C -/* 049D30 80049130 3C014334 */ li $at, 0x43340000 # 180.000000 -/* 049D34 80049134 44817000 */ mtc1 $at, $f14 -/* 049D38 80049138 00000000 */ nop -.L8004913C: -/* 049D3C 8004913C 3C198012 */ lui $t9, %hi(D_8011D540) # $t9, 0x8012 -/* 049D40 80049140 8F39D540 */ lw $t9, %lo(D_8011D540)($t9) -/* 049D44 80049144 00000000 */ nop -/* 049D48 80049148 2B210051 */ slti $at, $t9, 0x51 -/* 049D4C 8004914C 14200007 */ bnez $at, .L8004916C -/* 049D50 80049150 00000000 */ nop -/* 049D54 80049154 8E080000 */ lw $t0, ($s0) -/* 049D58 80049158 00000000 */ nop -/* 049D5C 8004915C E50E001C */ swc1 $f14, 0x1c($t0) -/* 049D60 80049160 8E090000 */ lw $t1, ($s0) -/* 049D64 80049164 00000000 */ nop -/* 049D68 80049168 E5320020 */ swc1 $f18, 0x20($t1) -.L8004916C: -/* 049D6C 8004916C 8E050000 */ lw $a1, ($s0) -/* 049D70 80049170 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 -/* 049D74 80049174 C4A0001C */ lwc1 $f0, 0x1c($a1) -/* 049D78 80049178 44816800 */ mtc1 $at, $f13 -/* 049D7C 8004917C 46007101 */ sub.s $f4, $f14, $f0 -/* 049D80 80049180 44806000 */ mtc1 $zero, $f12 -/* 049D84 80049184 460021A1 */ cvt.d.s $f6, $f4 -/* 049D88 80049188 462C3202 */ mul.d $f8, $f6, $f12 -/* 049D8C 8004918C 460002A1 */ cvt.d.s $f10, $f0 -/* 049D90 80049190 46285100 */ add.d $f4, $f10, $f8 -/* 049D94 80049194 462021A0 */ cvt.s.d $f6, $f4 -/* 049D98 80049198 E4A6001C */ swc1 $f6, 0x1c($a1) -/* 049D9C 8004919C 8E050000 */ lw $a1, ($s0) -/* 049DA0 800491A0 00000000 */ nop -/* 049DA4 800491A4 C4A20020 */ lwc1 $f2, 0x20($a1) -/* 049DA8 800491A8 00000000 */ nop -/* 049DAC 800491AC 46029201 */ sub.s $f8, $f18, $f2 -/* 049DB0 800491B0 46004121 */ cvt.d.s $f4, $f8 -/* 049DB4 800491B4 462C2182 */ mul.d $f6, $f4, $f12 -/* 049DB8 800491B8 460012A1 */ cvt.d.s $f10, $f2 -/* 049DBC 800491BC 46265200 */ add.d $f8, $f10, $f6 -/* 049DC0 800491C0 46204120 */ cvt.s.d $f4, $f8 -/* 049DC4 800491C4 E4A40020 */ swc1 $f4, 0x20($a1) -/* 049DC8 800491C8 8E0A0000 */ lw $t2, ($s0) -/* 049DCC 800491CC 8FAC0024 */ lw $t4, 0x24($sp) -/* 049DD0 800491D0 854B0002 */ lh $t3, 2($t2) -/* 049DD4 800491D4 AFA70068 */ sw $a3, 0x68($sp) -/* 049DD8 800491D8 016C2023 */ subu $a0, $t3, $t4 -/* 049DDC 800491DC 00046C00 */ sll $t5, $a0, 0x10 -/* 049DE0 800491E0 0C01C1F1 */ jal cosine_s -/* 049DE4 800491E4 000D2403 */ sra $a0, $t5, 0x10 -/* 049DE8 800491E8 8E0F0000 */ lw $t7, ($s0) -/* 049DEC 800491EC E7A00034 */ swc1 $f0, 0x34($sp) -/* 049DF0 800491F0 8FB90024 */ lw $t9, 0x24($sp) -/* 049DF4 800491F4 85F80002 */ lh $t8, 2($t7) -/* 049DF8 800491F8 00000000 */ nop -/* 049DFC 800491FC 03192023 */ subu $a0, $t8, $t9 -/* 049E00 80049200 00044400 */ sll $t0, $a0, 0x10 -/* 049E04 80049204 0C01C1FE */ jal sine_s -/* 049E08 80049208 00082403 */ sra $a0, $t0, 0x10 -/* 049E0C 8004920C 8E050000 */ lw $a1, ($s0) -/* 049E10 80049210 C7A60034 */ lwc1 $f6, 0x34($sp) -/* 049E14 80049214 C4AA001C */ lwc1 $f10, 0x1c($a1) -/* 049E18 80049218 C4A40020 */ lwc1 $f4, 0x20($a1) -/* 049E1C 8004921C 46065202 */ mul.s $f8, $f10, $f6 -/* 049E20 80049220 8FA70068 */ lw $a3, 0x68($sp) -/* 049E24 80049224 340B8000 */ li $t3, 32768 -/* 049E28 80049228 84EA0196 */ lh $t2, 0x196($a3) -/* 049E2C 8004922C 46002282 */ mul.s $f10, $f4, $f0 -/* 049E30 80049230 016A2023 */ subu $a0, $t3, $t2 -/* 049E34 80049234 00046400 */ sll $t4, $a0, 0x10 -/* 049E38 80049238 000C2403 */ sra $a0, $t4, 0x10 -/* 049E3C 8004923C 460A4480 */ add.s $f18, $f8, $f10 -/* 049E40 80049240 0C01C1F1 */ jal cosine_s -/* 049E44 80049244 E7B20044 */ swc1 $f18, 0x44($sp) -/* 049E48 80049248 8E0E0000 */ lw $t6, ($s0) -/* 049E4C 8004924C 8FA70068 */ lw $a3, 0x68($sp) -/* 049E50 80049250 C5C6001C */ lwc1 $f6, 0x1c($t6) -/* 049E54 80049254 34188000 */ li $t8, 32768 -/* 049E58 80049258 46060102 */ mul.s $f4, $f0, $f6 -/* 049E5C 8004925C E7A40040 */ swc1 $f4, 0x40($sp) -/* 049E60 80049260 84EF0196 */ lh $t7, 0x196($a3) -/* 049E64 80049264 00000000 */ nop -/* 049E68 80049268 030F2023 */ subu $a0, $t8, $t7 -/* 049E6C 8004926C 0004CC00 */ sll $t9, $a0, 0x10 -/* 049E70 80049270 0C01C1FE */ jal sine_s -/* 049E74 80049274 00192403 */ sra $a0, $t9, 0x10 -/* 049E78 80049278 3C0B8012 */ lui $t3, %hi(D_8011D586) # $t3, 0x8012 -/* 049E7C 8004927C 856BD586 */ lh $t3, %lo(D_8011D586)($t3) -/* 049E80 80049280 8E090000 */ lw $t1, ($s0) -/* 049E84 80049284 448B5000 */ mtc1 $t3, $f10 -/* 049E88 80049288 3C014120 */ li $at, 0x41200000 # 10.000000 -/* 049E8C 8004928C 44817000 */ mtc1 $at, $f14 -/* 049E90 80049290 468051A0 */ cvt.s.w $f6, $f10 -/* 049E94 80049294 C528001C */ lwc1 $f8, 0x1c($t1) -/* 049E98 80049298 3C014620 */ li $at, 0x46200000 # 10240.000000 -/* 049E9C 8004929C 44812000 */ mtc1 $at, $f4 -/* 049EA0 800492A0 46080402 */ mul.s $f16, $f0, $f8 -/* 049EA4 800492A4 00000000 */ nop -/* 049EA8 800492A8 46043203 */ div.s $f8, $f6, $f4 -/* 049EAC 800492AC 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 -/* 049EB0 800492B0 44813800 */ mtc1 $at, $f7 -/* 049EB4 800492B4 44803000 */ mtc1 $zero, $f6 -/* 049EB8 800492B8 8FA70068 */ lw $a3, 0x68($sp) -/* 049EBC 800492BC 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 049EC0 800492C0 460042A1 */ cvt.d.s $f10, $f8 -/* 049EC4 800492C4 462A3101 */ sub.d $f4, $f6, $f10 -/* 049EC8 800492C8 C4E60038 */ lwc1 $f6, 0x38($a3) -/* 049ECC 800492CC 462020A0 */ cvt.s.d $f2, $f4 -/* 049ED0 800492D0 C7A80040 */ lwc1 $f8, 0x40($sp) -/* 049ED4 800492D4 460E3282 */ mul.s $f10, $f6, $f14 -/* 049ED8 800492D8 00000000 */ nop -/* 049EDC 800492DC 46025102 */ mul.s $f4, $f10, $f2 -/* 049EE0 800492E0 46044181 */ sub.s $f6, $f8, $f4 -/* 049EE4 800492E4 E7A60040 */ swc1 $f6, 0x40($sp) -/* 049EE8 800492E8 C4EA0040 */ lwc1 $f10, 0x40($a3) -/* 049EEC 800492EC C4E60030 */ lwc1 $f6, 0x30($a3) -/* 049EF0 800492F0 460E5202 */ mul.s $f8, $f10, $f14 -/* 049EF4 800492F4 44815000 */ mtc1 $at, $f10 -/* 049EF8 800492F8 C4EC00C8 */ lwc1 $f12, 0xc8($a3) -/* 049EFC 800492FC 3C013FD0 */ li $at, 0x3FD00000 # 1.625000 -/* 049F00 80049300 46024102 */ mul.s $f4, $f8, $f2 -/* 049F04 80049304 44813800 */ mtc1 $at, $f7 -/* 049F08 80049308 84E40196 */ lh $a0, 0x196($a3) -/* 049F0C 8004930C 460A3082 */ mul.s $f2, $f6, $f10 -/* 049F10 80049310 46048401 */ sub.s $f16, $f16, $f4 -/* 049F14 80049314 44803000 */ mtc1 $zero, $f6 -/* 049F18 80049318 24844000 */ addiu $a0, $a0, 0x4000 -/* 049F1C 8004931C 46026201 */ sub.s $f8, $f12, $f2 -/* 049F20 80049320 00045400 */ sll $t2, $a0, 0x10 -/* 049F24 80049324 46004121 */ cvt.d.s $f4, $f8 -/* 049F28 80049328 46262282 */ mul.d $f10, $f4, $f6 -/* 049F2C 8004932C 46006221 */ cvt.d.s $f8, $f12 -/* 049F30 80049330 000A2403 */ sra $a0, $t2, 0x10 -/* 049F34 80049334 462A4101 */ sub.d $f4, $f8, $f10 -/* 049F38 80049338 462021A0 */ cvt.s.d $f6, $f4 -/* 049F3C 8004933C E4E600C8 */ swc1 $f6, 0xc8($a3) -/* 049F40 80049340 0C01C1F1 */ jal cosine_s -/* 049F44 80049344 E7B0003C */ swc1 $f16, 0x3c($sp) -/* 049F48 80049348 8FA70068 */ lw $a3, 0x68($sp) -/* 049F4C 8004934C 8FA20064 */ lw $v0, 0x64($sp) -/* 049F50 80049350 C4E800C8 */ lwc1 $f8, 0xc8($a3) -/* 049F54 80049354 C7A40040 */ lwc1 $f4, 0x40($sp) -/* 049F58 80049358 46080082 */ mul.s $f2, $f0, $f8 -/* 049F5C 8004935C C44A000C */ lwc1 $f10, 0xc($v0) -/* 049F60 80049360 8E0D0000 */ lw $t5, ($s0) -/* 049F64 80049364 C7B20044 */ lwc1 $f18, 0x44($sp) -/* 049F68 80049368 46045180 */ add.s $f6, $f10, $f4 -/* 049F6C 8004936C C7B0003C */ lwc1 $f16, 0x3c($sp) -/* 049F70 80049370 46023200 */ add.s $f8, $f6, $f2 -/* 049F74 80049374 44803000 */ mtc1 $zero, $f6 -/* 049F78 80049378 E5A8000C */ swc1 $f8, 0xc($t5) -/* 049F7C 8004937C 8E050000 */ lw $a1, ($s0) -/* 049F80 80049380 C44A0010 */ lwc1 $f10, 0x10($v0) -/* 049F84 80049384 C4AC0010 */ lwc1 $f12, 0x10($a1) -/* 049F88 80049388 46125100 */ add.s $f4, $f10, $f18 -/* 049F8C 8004938C 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 049F90 80049390 46046081 */ sub.s $f2, $f12, $f4 -/* 049F94 80049394 3C0E8012 */ lui $t6, %hi(D_8011D53C) # $t6, 0x8012 -/* 049F98 80049398 4602303C */ c.lt.s $f6, $f2 -/* 049F9C 8004939C 00000000 */ nop -/* 049FA0 800493A0 45000007 */ bc1f .L800493C0 -/* 049FA4 800493A4 00000000 */ nop -/* 049FA8 800493A8 44815800 */ mtc1 $at, $f11 -/* 049FAC 800493AC 44805000 */ mtc1 $zero, $f10 -/* 049FB0 800493B0 46001221 */ cvt.d.s $f8, $f2 -/* 049FB4 800493B4 462A4102 */ mul.d $f4, $f8, $f10 -/* 049FB8 800493B8 10000018 */ b .L8004941C -/* 049FBC 800493BC 462020A0 */ cvt.s.d $f2, $f4 -.L800493C0: -/* 049FC0 800493C0 8DCED53C */ lw $t6, %lo(D_8011D53C)($t6) -/* 049FC4 800493C4 24010001 */ li $at, 1 -/* 049FC8 800493C8 15C10007 */ bne $t6, $at, .L800493E8 -/* 049FCC 800493CC 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 049FD0 800493D0 44814800 */ mtc1 $at, $f9 -/* 049FD4 800493D4 44804000 */ mtc1 $zero, $f8 -/* 049FD8 800493D8 460011A1 */ cvt.d.s $f6, $f2 -/* 049FDC 800493DC 46283282 */ mul.d $f10, $f6, $f8 -/* 049FE0 800493E0 10000007 */ b .L80049400 -/* 049FE4 800493E4 462050A0 */ cvt.s.d $f2, $f10 -.L800493E8: -/* 049FE8 800493E8 3C013FD0 */ li $at, 0x3FD00000 # 1.625000 -/* 049FEC 800493EC 44813800 */ mtc1 $at, $f7 -/* 049FF0 800493F0 44803000 */ mtc1 $zero, $f6 -/* 049FF4 800493F4 46001121 */ cvt.d.s $f4, $f2 -/* 049FF8 800493F8 46262202 */ mul.d $f8, $f4, $f6 -/* 049FFC 800493FC 462040A0 */ cvt.s.d $f2, $f8 -.L80049400: -/* 04A000 80049400 80F801D3 */ lb $t8, 0x1d3($a3) -/* 04A004 80049404 00000000 */ nop -/* 04A008 80049408 13000004 */ beqz $t8, .L8004941C -/* 04A00C 8004940C 00000000 */ nop -/* 04A010 80049410 46001021 */ cvt.d.s $f0, $f2 -/* 04A014 80049414 46200280 */ add.d $f10, $f0, $f0 -/* 04A018 80049418 462050A0 */ cvt.s.d $f2, $f10 -.L8004941C: -/* 04A01C 8004941C 46026101 */ sub.s $f4, $f12, $f2 -/* 04A020 80049420 3C198012 */ lui $t9, %hi(D_8011D540) # $t9, 0x8012 -/* 04A024 80049424 E4A40010 */ swc1 $f4, 0x10($a1) -/* 04A028 80049428 8E0F0000 */ lw $t7, ($s0) -/* 04A02C 8004942C 00000000 */ nop -/* 04A030 80049430 A5E00004 */ sh $zero, 4($t7) -/* 04A034 80049434 8F39D540 */ lw $t9, %lo(D_8011D540)($t9) -/* 04A038 80049438 00000000 */ nop -/* 04A03C 8004943C 13200005 */ beqz $t9, .L80049454 -/* 04A040 80049440 00000000 */ nop -/* 04A044 80049444 C4460010 */ lwc1 $f6, 0x10($v0) -/* 04A048 80049448 8E080000 */ lw $t0, ($s0) -/* 04A04C 8004944C 46123200 */ add.s $f8, $f6, $f18 -/* 04A050 80049450 E5080010 */ swc1 $f8, 0x10($t0) -.L80049454: -/* 04A054 80049454 84E40196 */ lh $a0, 0x196($a3) -/* 04A058 80049458 E7B0003C */ swc1 $f16, 0x3c($sp) -/* 04A05C 8004945C 24844000 */ addiu $a0, $a0, 0x4000 -/* 04A060 80049460 00044C00 */ sll $t1, $a0, 0x10 -/* 04A064 80049464 00092403 */ sra $a0, $t1, 0x10 -/* 04A068 80049468 0C01C1FE */ jal sine_s -/* 04A06C 8004946C AFA70068 */ sw $a3, 0x68($sp) -/* 04A070 80049470 8FAA0064 */ lw $t2, 0x64($sp) -/* 04A074 80049474 C7B0003C */ lwc1 $f16, 0x3c($sp) -/* 04A078 80049478 C54A0014 */ lwc1 $f10, 0x14($t2) -/* 04A07C 8004947C 8E0C0000 */ lw $t4, ($s0) -/* 04A080 80049480 46105100 */ add.s $f4, $f10, $f16 -/* 04A084 80049484 8FA70068 */ lw $a3, 0x68($sp) -/* 04A088 80049488 E5840014 */ swc1 $f4, 0x14($t4) -/* 04A08C 8004948C 8E0E0000 */ lw $t6, ($s0) -/* 04A090 80049490 84ED0196 */ lh $t5, 0x196($a3) -/* 04A094 80049494 00000000 */ nop -/* 04A098 80049498 A5CD0000 */ sh $t5, ($t6) -/* 04A09C 8004949C 8E050000 */ lw $a1, ($s0) -/* 04A0A0 800494A0 00000000 */ nop -/* 04A0A4 800494A4 C4AC000C */ lwc1 $f12, 0xc($a1) -/* 04A0A8 800494A8 C4AE0010 */ lwc1 $f14, 0x10($a1) -/* 04A0AC 800494AC 8CA60014 */ lw $a2, 0x14($a1) -/* 04A0B0 800494B0 0C00A7C6 */ jal get_level_segment_index_from_position -/* 04A0B4 800494B4 00000000 */ nop -/* 04A0B8 800494B8 2401FFFF */ li $at, -1 -/* 04A0BC 800494BC 10410005 */ beq $v0, $at, .L800494D4 -/* 04A0C0 800494C0 8FBF001C */ lw $ra, 0x1c($sp) -/* 04A0C4 800494C4 8E180000 */ lw $t8, ($s0) -/* 04A0C8 800494C8 00000000 */ nop -/* 04A0CC 800494CC A7020034 */ sh $v0, 0x34($t8) -/* 04A0D0 800494D0 8FBF001C */ lw $ra, 0x1c($sp) -.L800494D4: -/* 04A0D4 800494D4 8FB00018 */ lw $s0, 0x18($sp) -/* 04A0D8 800494D8 03E00008 */ jr $ra -/* 04A0DC 800494DC 27BD0060 */ addiu $sp, $sp, 0x60 - diff --git a/asm/non_matchings/racer/func_8004D590.s b/asm/non_matchings/racer/func_8004D590.s deleted file mode 100644 index 10ab160e..00000000 --- a/asm/non_matchings/racer/func_8004D590.s +++ /dev/null @@ -1,254 +0,0 @@ -glabel func_8004D590 -/* 04E190 8004D590 3C0142F0 */ li $at, 0x42F00000 # 120.000000 -/* 04E194 8004D594 3C028012 */ lui $v0, %hi(D_8011D540) # $v0, 0x8012 -/* 04E198 8004D598 44810000 */ mtc1 $at, $f0 -/* 04E19C 8004D59C 8C42D540 */ lw $v0, %lo(D_8011D540)($v0) -/* 04E1A0 8004D5A0 27BDFF58 */ addiu $sp, $sp, -0xa8 -/* 04E1A4 8004D5A4 2841003D */ slti $at, $v0, 0x3d -/* 04E1A8 8004D5A8 AFBF002C */ sw $ra, 0x2c($sp) -/* 04E1AC 8004D5AC AFB00028 */ sw $s0, 0x28($sp) -/* 04E1B0 8004D5B0 E7AC00A8 */ swc1 $f12, 0xa8($sp) -/* 04E1B4 8004D5B4 AFA500AC */ sw $a1, 0xac($sp) -/* 04E1B8 8004D5B8 14200009 */ bnez $at, .L8004D5E0 -/* 04E1BC 8004D5BC 46000386 */ mov.s $f14, $f0 -/* 04E1C0 8004D5C0 244EFFC4 */ addiu $t6, $v0, -0x3c -/* 04E1C4 8004D5C4 448E2000 */ mtc1 $t6, $f4 -/* 04E1C8 8004D5C8 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 04E1CC 8004D5CC 468021A0 */ cvt.s.w $f6, $f4 -/* 04E1D0 8004D5D0 44814000 */ mtc1 $at, $f8 -/* 04E1D4 8004D5D4 00000000 */ nop -/* 04E1D8 8004D5D8 46083282 */ mul.s $f10, $f6, $f8 -/* 04E1DC 8004D5DC 460A0380 */ add.s $f14, $f0, $f10 -.L8004D5E0: -/* 04E1E0 8004D5E0 84CF01A0 */ lh $t7, 0x1a0($a2) -/* 04E1E4 8004D5E4 34188000 */ li $t8, 32768 -/* 04E1E8 8004D5E8 030FC823 */ subu $t9, $t8, $t7 -/* 04E1EC 8004D5EC A4D90196 */ sh $t9, 0x196($a2) -/* 04E1F0 8004D5F0 E7AE0094 */ swc1 $f14, 0x94($sp) -/* 04E1F4 8004D5F4 0C019884 */ jal get_viewport_count -/* 04E1F8 8004D5F8 AFA600B0 */ sw $a2, 0xb0($sp) -/* 04E1FC 8004D5FC 24040001 */ li $a0, 1 -/* 04E200 8004D600 C7AE0094 */ lwc1 $f14, 0x94($sp) -/* 04E204 8004D604 14440004 */ bne $v0, $a0, .L8004D618 -/* 04E208 8004D608 3C108012 */ lui $s0, %hi(gCameraObject) # $s0, 0x8012 -/* 04E20C 8004D60C 3C014320 */ li $at, 0x43200000 # 160.000000 -/* 04E210 8004D610 44817000 */ mtc1 $at, $f14 -/* 04E214 8004D614 00000000 */ nop -.L8004D618: -/* 04E218 8004D618 2610D508 */ addiu $s0, %lo(gCameraObject) # addiu $s0, $s0, -0x2af8 -/* 04E21C 8004D61C 8E020000 */ lw $v0, ($s0) -/* 04E220 8004D620 44804000 */ mtc1 $zero, $f8 -/* 04E224 8004D624 9043003B */ lbu $v1, 0x3b($v0) -/* 04E228 8004D628 00000000 */ nop -/* 04E22C 8004D62C 14830004 */ bne $a0, $v1, .L8004D640 -/* 04E230 8004D630 3C01420C */ li $at, 0x420C0000 # 35.000000 -/* 04E234 8004D634 44818000 */ mtc1 $at, $f16 -/* 04E238 8004D638 00000000 */ nop -/* 04E23C 8004D63C 46107380 */ add.s $f14, $f14, $f16 -.L8004D640: -/* 04E240 8004D640 14830004 */ bne $a0, $v1, .L8004D654 -/* 04E244 8004D644 3C01420C */ li $at, 0x420C0000 # 35.000000 -/* 04E248 8004D648 44819000 */ mtc1 $at, $f18 -/* 04E24C 8004D64C 00000000 */ nop -/* 04E250 8004D650 46127381 */ sub.s $f14, $f14, $f18 -.L8004D654: -/* 04E254 8004D654 C440001C */ lwc1 $f0, 0x1c($v0) -/* 04E258 8004D658 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 -/* 04E25C 8004D65C 46007101 */ sub.s $f4, $f14, $f0 -/* 04E260 8004D660 44814800 */ mtc1 $at, $f9 -/* 04E264 8004D664 460021A1 */ cvt.d.s $f6, $f4 -/* 04E268 8004D668 46283282 */ mul.d $f10, $f6, $f8 -/* 04E26C 8004D66C 46000421 */ cvt.d.s $f16, $f0 -/* 04E270 8004D670 3C058012 */ lui $a1, %hi(D_8011D510) # $a1, 0x8012 -/* 04E274 8004D674 340A8000 */ li $t2, 32768 -/* 04E278 8004D678 24A5D510 */ addiu $a1, %lo(D_8011D510) # addiu $a1, $a1, -0x2af0 -/* 04E27C 8004D67C 462A8480 */ add.d $f18, $f16, $f10 -/* 04E280 8004D680 44801000 */ mtc1 $zero, $f2 -/* 04E284 8004D684 46209120 */ cvt.s.d $f4, $f18 -/* 04E288 8004D688 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 04E28C 8004D68C E444001C */ swc1 $f4, 0x1c($v0) -/* 04E290 8004D690 8E020000 */ lw $v0, ($s0) -/* 04E294 8004D694 44813000 */ mtc1 $at, $f6 -/* 04E298 8004D698 84490000 */ lh $t1, ($v0) -/* 04E29C 8004D69C 27A40048 */ addiu $a0, $sp, 0x48 -/* 04E2A0 8004D6A0 01495823 */ subu $t3, $t2, $t1 -/* 04E2A4 8004D6A4 A4AB0000 */ sh $t3, ($a1) -/* 04E2A8 8004D6A8 844C0002 */ lh $t4, 2($v0) -/* 04E2AC 8004D6AC A4A00004 */ sh $zero, 4($a1) -/* 04E2B0 8004D6B0 000C6823 */ negu $t5, $t4 -/* 04E2B4 8004D6B4 A4AD0002 */ sh $t5, 2($a1) -/* 04E2B8 8004D6B8 E4A2000C */ swc1 $f2, 0xc($a1) -/* 04E2BC 8004D6BC E4A20010 */ swc1 $f2, 0x10($a1) -/* 04E2C0 8004D6C0 E4A20014 */ swc1 $f2, 0x14($a1) -/* 04E2C4 8004D6C4 0C01BF0C */ jal func_8006FC30 -/* 04E2C8 8004D6C8 E4A60008 */ swc1 $f6, 8($a1) -/* 04E2CC 8004D6CC 8E0E0000 */ lw $t6, ($s0) -/* 04E2D0 8004D6D0 44801000 */ mtc1 $zero, $f2 -/* 04E2D4 8004D6D4 8DC7001C */ lw $a3, 0x1c($t6) -/* 04E2D8 8004D6D8 27B80090 */ addiu $t8, $sp, 0x90 -/* 04E2DC 8004D6DC 27AF008C */ addiu $t7, $sp, 0x8c -/* 04E2E0 8004D6E0 27B90088 */ addiu $t9, $sp, 0x88 -/* 04E2E4 8004D6E4 44051000 */ mfc1 $a1, $f2 -/* 04E2E8 8004D6E8 44061000 */ mfc1 $a2, $f2 -/* 04E2EC 8004D6EC AFB90018 */ sw $t9, 0x18($sp) -/* 04E2F0 8004D6F0 AFAF0014 */ sw $t7, 0x14($sp) -/* 04E2F4 8004D6F4 AFB80010 */ sw $t8, 0x10($sp) -/* 04E2F8 8004D6F8 0C01BD93 */ jal guMtxXFMF -/* 04E2FC 8004D6FC 27A40048 */ addiu $a0, $sp, 0x48 -/* 04E300 8004D700 8FA200AC */ lw $v0, 0xac($sp) -/* 04E304 8004D704 C7B00090 */ lwc1 $f16, 0x90($sp) -/* 04E308 8004D708 C448000C */ lwc1 $f8, 0xc($v0) -/* 04E30C 8004D70C 8E0A0000 */ lw $t2, ($s0) -/* 04E310 8004D710 46104280 */ add.s $f10, $f8, $f16 -/* 04E314 8004D714 24040800 */ li $a0, 2048 -/* 04E318 8004D718 E54A000C */ swc1 $f10, 0xc($t2) -/* 04E31C 8004D71C C7A4008C */ lwc1 $f4, 0x8c($sp) -/* 04E320 8004D720 C4520010 */ lwc1 $f18, 0x10($v0) -/* 04E324 8004D724 8E090000 */ lw $t1, ($s0) -/* 04E328 8004D728 46049180 */ add.s $f6, $f18, $f4 -/* 04E32C 8004D72C E5260010 */ swc1 $f6, 0x10($t1) -/* 04E330 8004D730 C7B00088 */ lwc1 $f16, 0x88($sp) -/* 04E334 8004D734 C4480014 */ lwc1 $f8, 0x14($v0) -/* 04E338 8004D738 8E0B0000 */ lw $t3, ($s0) -/* 04E33C 8004D73C 46104280 */ add.s $f10, $f8, $f16 -/* 04E340 8004D740 0C01C1F1 */ jal cosine_s -/* 04E344 8004D744 E56A0014 */ swc1 $f10, 0x14($t3) -/* 04E348 8004D748 8E0C0000 */ lw $t4, ($s0) -/* 04E34C 8004D74C 44801000 */ mtc1 $zero, $f2 -/* 04E350 8004D750 C592001C */ lwc1 $f18, 0x1c($t4) -/* 04E354 8004D754 27AD0090 */ addiu $t5, $sp, 0x90 -/* 04E358 8004D758 46120102 */ mul.s $f4, $f0, $f18 -/* 04E35C 8004D75C 27AE008C */ addiu $t6, $sp, 0x8c -/* 04E360 8004D760 27B80088 */ addiu $t8, $sp, 0x88 -/* 04E364 8004D764 44051000 */ mfc1 $a1, $f2 -/* 04E368 8004D768 44062000 */ mfc1 $a2, $f4 -/* 04E36C 8004D76C 44071000 */ mfc1 $a3, $f2 -/* 04E370 8004D770 AFB80018 */ sw $t8, 0x18($sp) -/* 04E374 8004D774 AFAE0014 */ sw $t6, 0x14($sp) -/* 04E378 8004D778 AFAD0010 */ sw $t5, 0x10($sp) -/* 04E37C 8004D77C 0C01BD93 */ jal guMtxXFMF -/* 04E380 8004D780 27A40048 */ addiu $a0, $sp, 0x48 -/* 04E384 8004D784 8E020000 */ lw $v0, ($s0) -/* 04E388 8004D788 C7A80090 */ lwc1 $f8, 0x90($sp) -/* 04E38C 8004D78C C446000C */ lwc1 $f6, 0xc($v0) -/* 04E390 8004D790 34088001 */ li $t0, 32769 -/* 04E394 8004D794 46083400 */ add.s $f16, $f6, $f8 -/* 04E398 8004D798 E450000C */ swc1 $f16, 0xc($v0) -/* 04E39C 8004D79C 8E020000 */ lw $v0, ($s0) -/* 04E3A0 8004D7A0 C7B2008C */ lwc1 $f18, 0x8c($sp) -/* 04E3A4 8004D7A4 C44A0010 */ lwc1 $f10, 0x10($v0) -/* 04E3A8 8004D7A8 00000000 */ nop -/* 04E3AC 8004D7AC 46125100 */ add.s $f4, $f10, $f18 -/* 04E3B0 8004D7B0 E4440010 */ swc1 $f4, 0x10($v0) -/* 04E3B4 8004D7B4 8E020000 */ lw $v0, ($s0) -/* 04E3B8 8004D7B8 C7A80088 */ lwc1 $f8, 0x88($sp) -/* 04E3BC 8004D7BC C4460014 */ lwc1 $f6, 0x14($v0) -/* 04E3C0 8004D7C0 00000000 */ nop -/* 04E3C4 8004D7C4 46083400 */ add.s $f16, $f6, $f8 -/* 04E3C8 8004D7C8 E4500014 */ swc1 $f16, 0x14($v0) -/* 04E3CC 8004D7CC 8FAF00AC */ lw $t7, 0xac($sp) -/* 04E3D0 8004D7D0 8E020000 */ lw $v0, ($s0) -/* 04E3D4 8004D7D4 85E40004 */ lh $a0, 4($t7) -/* 04E3D8 8004D7D8 84460004 */ lh $a2, 4($v0) -/* 04E3DC 8004D7DC 00042023 */ negu $a0, $a0 -/* 04E3E0 8004D7E0 3099FFFF */ andi $t9, $a0, 0xffff -/* 04E3E4 8004D7E4 30CAFFFF */ andi $t2, $a2, 0xffff -/* 04E3E8 8004D7E8 032A1823 */ subu $v1, $t9, $t2 -/* 04E3EC 8004D7EC 0068082A */ slt $at, $v1, $t0 -/* 04E3F0 8004D7F0 14200003 */ bnez $at, .L8004D800 -/* 04E3F4 8004D7F4 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 04E3F8 8004D7F8 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 04E3FC 8004D7FC 00611821 */ addu $v1, $v1, $at -.L8004D800: -/* 04E400 8004D800 28618000 */ slti $at, $v1, -0x8000 -/* 04E404 8004D804 10200002 */ beqz $at, .L8004D810 -/* 04E408 8004D808 3401FFFF */ li $at, 65535 -/* 04E40C 8004D80C 00611821 */ addu $v1, $v1, $at -.L8004D810: -/* 04E410 8004D810 4449F800 */ cfc1 $t1, $31 -/* 04E414 8004D814 C7AA00A8 */ lwc1 $f10, 0xa8($sp) -/* 04E418 8004D818 35210003 */ ori $at, $t1, 3 -/* 04E41C 8004D81C 38210002 */ xori $at, $at, 2 -/* 04E420 8004D820 44C1F800 */ ctc1 $at, $31 -/* 04E424 8004D824 00000000 */ nop -/* 04E428 8004D828 460054A4 */ cvt.w.s $f18, $f10 -/* 04E42C 8004D82C 44059000 */ mfc1 $a1, $f18 -/* 04E430 8004D830 44C9F800 */ ctc1 $t1, $31 -/* 04E434 8004D834 00650019 */ multu $v1, $a1 -/* 04E438 8004D838 00005812 */ mflo $t3 -/* 04E43C 8004D83C 000B6103 */ sra $t4, $t3, 4 -/* 04E440 8004D840 00CC6821 */ addu $t5, $a2, $t4 -/* 04E444 8004D844 A44D0004 */ sh $t5, 4($v0) -/* 04E448 8004D848 8FAE00AC */ lw $t6, 0xac($sp) -/* 04E44C 8004D84C 8E020000 */ lw $v0, ($s0) -/* 04E450 8004D850 85C40002 */ lh $a0, 2($t6) -/* 04E454 8004D854 84470002 */ lh $a3, 2($v0) -/* 04E458 8004D858 00042023 */ negu $a0, $a0 -/* 04E45C 8004D85C 30F8FFFF */ andi $t8, $a3, 0xffff -/* 04E460 8004D860 00981823 */ subu $v1, $a0, $t8 -/* 04E464 8004D864 0068082A */ slt $at, $v1, $t0 -/* 04E468 8004D868 14200003 */ bnez $at, .L8004D878 -/* 04E46C 8004D86C 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 04E470 8004D870 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 04E474 8004D874 00611821 */ addu $v1, $v1, $at -.L8004D878: -/* 04E478 8004D878 28618000 */ slti $at, $v1, -0x8000 -/* 04E47C 8004D87C 10200002 */ beqz $at, .L8004D888 -/* 04E480 8004D880 3401FFFF */ li $at, 65535 -/* 04E484 8004D884 00611821 */ addu $v1, $v1, $at -.L8004D888: -/* 04E488 8004D888 00650019 */ multu $v1, $a1 -/* 04E48C 8004D88C 00007812 */ mflo $t7 -/* 04E490 8004D890 000FC903 */ sra $t9, $t7, 4 -/* 04E494 8004D894 00F95021 */ addu $t2, $a3, $t9 -/* 04E498 8004D898 A44A0002 */ sh $t2, 2($v0) -/* 04E49C 8004D89C 8FA900B0 */ lw $t1, 0xb0($sp) -/* 04E4A0 8004D8A0 8E0C0000 */ lw $t4, ($s0) -/* 04E4A4 8004D8A4 852B0196 */ lh $t3, 0x196($t1) -/* 04E4A8 8004D8A8 00000000 */ nop -/* 04E4AC 8004D8AC A58B0000 */ sh $t3, ($t4) -/* 04E4B0 8004D8B0 8E020000 */ lw $v0, ($s0) -/* 04E4B4 8004D8B4 00000000 */ nop -/* 04E4B8 8004D8B8 C44C000C */ lwc1 $f12, 0xc($v0) -/* 04E4BC 8004D8BC C44E0010 */ lwc1 $f14, 0x10($v0) -/* 04E4C0 8004D8C0 8C460014 */ lw $a2, 0x14($v0) -/* 04E4C4 8004D8C4 0C00A7C6 */ jal get_level_segment_index_from_position -/* 04E4C8 8004D8C8 00000000 */ nop -/* 04E4CC 8004D8CC 2401FFFF */ li $at, -1 -/* 04E4D0 8004D8D0 10410004 */ beq $v0, $at, .L8004D8E4 -/* 04E4D4 8004D8D4 00000000 */ nop -/* 04E4D8 8004D8D8 8E0D0000 */ lw $t5, ($s0) -/* 04E4DC 8004D8DC 00000000 */ nop -/* 04E4E0 8004D8E0 A5A20034 */ sh $v0, 0x34($t5) -.L8004D8E4: -/* 04E4E4 8004D8E4 8E0E0000 */ lw $t6, ($s0) -/* 04E4E8 8004D8E8 8FAF00B0 */ lw $t7, 0xb0($sp) -/* 04E4EC 8004D8EC 85D80000 */ lh $t8, ($t6) -/* 04E4F0 8004D8F0 00000000 */ nop -/* 04E4F4 8004D8F4 A5F80196 */ sh $t8, 0x196($t7) -/* 04E4F8 8004D8F8 8E020000 */ lw $v0, ($s0) -/* 04E4FC 8004D8FC 00000000 */ nop -/* 04E500 8004D900 C444000C */ lwc1 $f4, 0xc($v0) -/* 04E504 8004D904 C4460024 */ lwc1 $f6, 0x24($v0) -/* 04E508 8004D908 00000000 */ nop -/* 04E50C 8004D90C 46062200 */ add.s $f8, $f4, $f6 -/* 04E510 8004D910 E448000C */ swc1 $f8, 0xc($v0) -/* 04E514 8004D914 8E020000 */ lw $v0, ($s0) -/* 04E518 8004D918 00000000 */ nop -/* 04E51C 8004D91C C4500010 */ lwc1 $f16, 0x10($v0) -/* 04E520 8004D920 C44A0028 */ lwc1 $f10, 0x28($v0) -/* 04E524 8004D924 00000000 */ nop -/* 04E528 8004D928 460A8480 */ add.s $f18, $f16, $f10 -/* 04E52C 8004D92C E4520010 */ swc1 $f18, 0x10($v0) -/* 04E530 8004D930 8E020000 */ lw $v0, ($s0) -/* 04E534 8004D934 00000000 */ nop -/* 04E538 8004D938 C4440014 */ lwc1 $f4, 0x14($v0) -/* 04E53C 8004D93C C446002C */ lwc1 $f6, 0x2c($v0) -/* 04E540 8004D940 00000000 */ nop -/* 04E544 8004D944 46062200 */ add.s $f8, $f4, $f6 -/* 04E548 8004D948 E4480014 */ swc1 $f8, 0x14($v0) -/* 04E54C 8004D94C 8FBF002C */ lw $ra, 0x2c($sp) -/* 04E550 8004D950 8FB00028 */ lw $s0, 0x28($sp) -/* 04E554 8004D954 03E00008 */ jr $ra -/* 04E558 8004D958 27BD00A8 */ addiu $sp, $sp, 0xa8 - diff --git a/asm/non_matchings/racer/func_80054110.s b/asm/non_matchings/racer/func_80054110.s deleted file mode 100644 index 78125c11..00000000 --- a/asm/non_matchings/racer/func_80054110.s +++ /dev/null @@ -1,568 +0,0 @@ -.late_rodata -glabel D_800E67C8 -.double 0.3 -glabel D_800E67D0 -.double 0.1 -glabel D_800E67D8 -.double 0.3 -glabel D_800E67E0 -.double 0.1 - -.text -glabel func_80054110 -/* 054D10 80054110 27BDFF50 */ addiu $sp, $sp, -0xb0 -/* 054D14 80054114 AFBF002C */ sw $ra, 0x2c($sp) -/* 054D18 80054118 AFB10028 */ sw $s1, 0x28($sp) -/* 054D1C 8005411C AFB00024 */ sw $s0, 0x24($sp) -/* 054D20 80054120 AFA600B8 */ sw $a2, 0xb8($sp) -/* 054D24 80054124 AFA700BC */ sw $a3, 0xbc($sp) -/* 054D28 80054128 C484000C */ lwc1 $f4, 0xc($a0) -/* 054D2C 8005412C 3C018012 */ lui $at, %hi(gCurrentCarSteerVel) # $at, 0x8012 -/* 054D30 80054130 E7A40098 */ swc1 $f4, 0x98($sp) -/* 054D34 80054134 C4860010 */ lwc1 $f6, 0x10($a0) -/* 054D38 80054138 00808825 */ move $s1, $a0 -/* 054D3C 8005413C E7A60094 */ swc1 $f6, 0x94($sp) -/* 054D40 80054140 C4880014 */ lwc1 $f8, 0x14($a0) -/* 054D44 80054144 AC20D554 */ sw $zero, %lo(gCurrentCarSteerVel)($at) -/* 054D48 80054148 00A08025 */ move $s0, $a1 -/* 054D4C 8005414C 3C018012 */ lui $at, %hi(D_8011D558) # $at, 0x8012 -/* 054D50 80054150 00A02025 */ move $a0, $a1 -/* 054D54 80054154 AC20D558 */ sw $zero, %lo(D_8011D558)($at) -/* 054D58 80054158 00002825 */ move $a1, $zero -/* 054D5C 8005415C 00E03025 */ move $a2, $a3 -/* 054D60 80054160 0C015E6C */ jal func_800579B0 -/* 054D64 80054164 E7A80090 */ swc1 $f8, 0x90($sp) -/* 054D68 80054168 0C014D99 */ jal handle_car_velocity_control -/* 054D6C 8005416C 02002025 */ move $a0, $s0 -/* 054D70 80054170 02202025 */ move $a0, $s1 -/* 054D74 80054174 0C015D7B */ jal func_800575EC -/* 054D78 80054178 02002825 */ move $a1, $s0 -/* 054D7C 8005417C 8FA600B8 */ lw $a2, 0xb8($sp) -/* 054D80 80054180 02202025 */ move $a0, $s1 -/* 054D84 80054184 0C0157B0 */ jal func_80055EC0 -/* 054D88 80054188 02002825 */ move $a1, $s0 -/* 054D8C 8005418C 8FA600B8 */ lw $a2, 0xb8($sp) -/* 054D90 80054190 02202025 */ move $a0, $s1 -/* 054D94 80054194 0C014FA7 */ jal func_80053E9C -/* 054D98 80054198 02002825 */ move $a1, $s0 -/* 054D9C 8005419C 820E01DB */ lb $t6, 0x1db($s0) -/* 054DA0 800541A0 00000000 */ nop -/* 054DA4 800541A4 11C00008 */ beqz $t6, .L800541C8 -/* 054DA8 800541A8 00000000 */ nop -/* 054DAC 800541AC 8FA600B8 */ lw $a2, 0xb8($sp) -/* 054DB0 800541B0 8FA700BC */ lw $a3, 0xbc($sp) -/* 054DB4 800541B4 02202025 */ move $a0, $s1 -/* 054DB8 800541B8 0C014AD9 */ jal func_80052B64 -/* 054DBC 800541BC 02002825 */ move $a1, $s0 -/* 054DC0 800541C0 10000010 */ b .L80054204 -/* 054DC4 800541C4 8FA500B8 */ lw $a1, 0xb8($sp) -.L800541C8: -/* 054DC8 800541C8 820F01E2 */ lb $t7, 0x1e2($s0) -/* 054DCC 800541CC 8FA600B8 */ lw $a2, 0xb8($sp) -/* 054DD0 800541D0 19E00008 */ blez $t7, .L800541F4 -/* 054DD4 800541D4 02202025 */ move $a0, $s1 -/* 054DD8 800541D8 8FA600B8 */ lw $a2, 0xb8($sp) -/* 054DDC 800541DC 8FA700BC */ lw $a3, 0xbc($sp) -/* 054DE0 800541E0 02202025 */ move $a0, $s1 -/* 054DE4 800541E4 0C01524B */ jal func_8005492C -/* 054DE8 800541E8 02002825 */ move $a1, $s0 -/* 054DEC 800541EC 10000005 */ b .L80054204 -/* 054DF0 800541F0 8FA500B8 */ lw $a1, 0xb8($sp) -.L800541F4: -/* 054DF4 800541F4 8FA700BC */ lw $a3, 0xbc($sp) -/* 054DF8 800541F8 0C014B5F */ jal func_80052D7C -/* 054DFC 800541FC 02002825 */ move $a1, $s0 -/* 054E00 80054200 8FA500B8 */ lw $a1, 0xb8($sp) -.L80054204: -/* 054E04 80054204 02002025 */ move $a0, $s0 -/* 054E08 80054208 00003025 */ move $a2, $zero -/* 054E0C 8005420C 00003825 */ move $a3, $zero -/* 054E10 80054210 0C014214 */ jal apply_vehicle_rotation_offset -/* 054E14 80054214 AFA00010 */ sw $zero, 0x10($sp) -/* 054E18 80054218 0C01AF6C */ jal get_current_level_header -/* 054E1C 8005421C 00000000 */ nop -/* 054E20 80054220 C61000C0 */ lwc1 $f16, 0xc0($s0) -/* 054E24 80054224 44805800 */ mtc1 $zero, $f11 -/* 054E28 80054228 44805000 */ mtc1 $zero, $f10 -/* 054E2C 8005422C 460084A1 */ cvt.d.s $f18, $f16 -/* 054E30 80054230 46325032 */ c.eq.d $f10, $f18 -/* 054E34 80054234 00000000 */ nop -/* 054E38 80054238 45010004 */ bc1t .L8005424C -/* 054E3C 8005423C 00000000 */ nop -/* 054E40 80054240 80580002 */ lb $t8, 2($v0) -/* 054E44 80054244 00000000 */ nop -/* 054E48 80054248 17000005 */ bnez $t8, .L80054260 -.L8005424C: -/* 054E4C 8005424C 3C198012 */ lui $t9, %hi(D_8011D581) # $t9, 0x8012 -/* 054E50 80054250 8339D581 */ lb $t9, %lo(D_8011D581)($t9) -/* 054E54 80054254 2401000A */ li $at, 10 -/* 054E58 80054258 1721004F */ bne $t9, $at, .L80054398 -/* 054E5C 8005425C 00000000 */ nop -.L80054260: -/* 054E60 80054260 920801F0 */ lbu $t0, 0x1f0($s0) -/* 054E64 80054264 02202025 */ move $a0, $s1 -/* 054E68 80054268 1100000A */ beqz $t0, .L80054294 -/* 054E6C 8005426C 02002825 */ move $a1, $s0 -/* 054E70 80054270 3C01800E */ lui $at, %hi(D_800E67C8 + 4) # $at, 0x800e -/* 054E74 80054274 C60400A8 */ lwc1 $f4, 0xa8($s0) -/* 054E78 80054278 C42967C8 */ lwc1 $f9, %lo(D_800E67C8)($at) -/* 054E7C 8005427C C42867CC */ lwc1 $f8, %lo(D_800E67C8 + 4)($at) -/* 054E80 80054280 460021A1 */ cvt.d.s $f6, $f4 -/* 054E84 80054284 46283401 */ sub.d $f16, $f6, $f8 -/* 054E88 80054288 462082A0 */ cvt.s.d $f10, $f16 -/* 054E8C 8005428C 10000009 */ b .L800542B4 -/* 054E90 80054290 E60A00A8 */ swc1 $f10, 0xa8($s0) -.L80054294: -/* 054E94 80054294 3C01800E */ lui $at, %hi(D_800E67D0 + 4) # $at, 0x800e -/* 054E98 80054298 C61200A8 */ lwc1 $f18, 0xa8($s0) -/* 054E9C 8005429C C42767D0 */ lwc1 $f7, %lo(D_800E67D0)($at) -/* 054EA0 800542A0 C42667D4 */ lwc1 $f6, %lo(D_800E67D0 + 4)($at) -/* 054EA4 800542A4 46009121 */ cvt.d.s $f4, $f18 -/* 054EA8 800542A8 46262201 */ sub.d $f8, $f4, $f6 -/* 054EAC 800542AC 46204420 */ cvt.s.d $f16, $f8 -/* 054EB0 800542B0 E61000A8 */ swc1 $f16, 0xa8($s0) -.L800542B4: -/* 054EB4 800542B4 27A900A4 */ addiu $t1, $sp, 0xa4 -/* 054EB8 800542B8 AFA90010 */ sw $t1, 0x10($sp) -/* 054EBC 800542BC 27A600A8 */ addiu $a2, $sp, 0xa8 -/* 054EC0 800542C0 0C016420 */ jal func_80059080 -/* 054EC4 800542C4 27A700A0 */ addiu $a3, $sp, 0xa0 -/* 054EC8 800542C8 920A01F0 */ lbu $t2, 0x1f0($s0) -# Used to access D_800E67E0 and D_800E67E0 + 4. -/* 054ECC 800542CC 3C01800E */ lui $at, %hi(D_800E67E0) # $at, 0x800e -/* 054ED0 800542D0 1140000A */ beqz $t2, .L800542FC -/* 054ED4 800542D4 00000000 */ nop -# Used to access D_800E67D8 and D_800E67D8 + 4. -/* 054ED8 800542D8 3C01800E */ lui $at, %hi(D_800E67D8) # $at, 0x800e -/* 054EDC 800542DC C60A00A8 */ lwc1 $f10, 0xa8($s0) -/* 054EE0 800542E0 C42567D8 */ lwc1 $f5, %lo(D_800E67D8)($at) -/* 054EE4 800542E4 C42467DC */ lwc1 $f4, %lo(D_800E67D8 + 4)($at) -/* 054EE8 800542E8 460054A1 */ cvt.d.s $f18, $f10 -/* 054EEC 800542EC 46249180 */ add.d $f6, $f18, $f4 -/* 054EF0 800542F0 46203220 */ cvt.s.d $f8, $f6 -/* 054EF4 800542F4 10000008 */ b .L80054318 -/* 054EF8 800542F8 E60800A8 */ swc1 $f8, 0xa8($s0) -.L800542FC: -/* 054EFC 800542FC C61000A8 */ lwc1 $f16, 0xa8($s0) -/* 054F00 80054300 C43367E0 */ lwc1 $f19, %lo(D_800E67E0)($at) -/* 054F04 80054304 C43267E4 */ lwc1 $f18, %lo(D_800E67E0 + 4)($at) -/* 054F08 80054308 460082A1 */ cvt.d.s $f10, $f16 -/* 054F0C 8005430C 46325100 */ add.d $f4, $f10, $f18 -/* 054F10 80054310 462021A0 */ cvt.s.d $f6, $f4 -/* 054F14 80054314 E60600A8 */ swc1 $f6, 0xa8($s0) -.L80054318: -/* 054F18 80054318 C7A800A8 */ lwc1 $f8, 0xa8($sp) -/* 054F1C 8005431C C630000C */ lwc1 $f16, 0xc($s1) -/* 054F20 80054320 C7B200A4 */ lwc1 $f18, 0xa4($sp) -/* 054F24 80054324 46104281 */ sub.s $f10, $f8, $f16 -/* 054F28 80054328 E7AA00A8 */ swc1 $f10, 0xa8($sp) -/* 054F2C 8005432C C6240014 */ lwc1 $f4, 0x14($s1) -/* 054F30 80054330 460A5202 */ mul.s $f8, $f10, $f10 -/* 054F34 80054334 46049181 */ sub.s $f6, $f18, $f4 -/* 054F38 80054338 E7A600A4 */ swc1 $f6, 0xa4($sp) -/* 054F3C 8005433C 46063402 */ mul.s $f16, $f6, $f6 -/* 054F40 80054340 0C0326B4 */ jal sqrtf -/* 054F44 80054344 46104300 */ add.s $f12, $f8, $f16 -/* 054F48 80054348 C7B200A8 */ lwc1 $f18, 0xa8($sp) -/* 054F4C 8005434C C7AA00A4 */ lwc1 $f10, 0xa4($sp) -/* 054F50 80054350 46009103 */ div.s $f4, $f18, $f0 -/* 054F54 80054354 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 054F58 80054358 44811000 */ mtc1 $at, $f2 -/* 054F5C 8005435C E7A000A0 */ swc1 $f0, 0xa0($sp) -/* 054F60 80054360 3C014118 */ li $at, 0x41180000 # 9.500000 -/* 054F64 80054364 240B0001 */ li $t3, 1 -/* 054F68 80054368 46005183 */ div.s $f6, $f10, $f0 -/* 054F6C 8005436C 46022202 */ mul.s $f8, $f4, $f2 -/* 054F70 80054370 E7A400A8 */ swc1 $f4, 0xa8($sp) -/* 054F74 80054374 44815000 */ mtc1 $at, $f10 -/* 054F78 80054378 E7A600A4 */ swc1 $f6, 0xa4($sp) -/* 054F7C 8005437C E628001C */ swc1 $f8, 0x1c($s1) -/* 054F80 80054380 C7B000A4 */ lwc1 $f16, 0xa4($sp) -/* 054F84 80054384 E62A0020 */ swc1 $f10, 0x20($s1) -/* 054F88 80054388 46028482 */ mul.s $f18, $f16, $f2 -/* 054F8C 8005438C E6320024 */ swc1 $f18, 0x24($s1) -/* 054F90 80054390 10000007 */ b .L800543B0 -/* 054F94 80054394 A20B01F0 */ sb $t3, 0x1f0($s0) -.L80054398: -/* 054F98 80054398 820C01E2 */ lb $t4, 0x1e2($s0) -/* 054F9C 8005439C 00000000 */ nop -/* 054FA0 800543A0 29810003 */ slti $at, $t4, 3 -/* 054FA4 800543A4 14200002 */ bnez $at, .L800543B0 -/* 054FA8 800543A8 00000000 */ nop -/* 054FAC 800543AC A20001F0 */ sb $zero, 0x1f0($s0) -.L800543B0: -/* 054FB0 800543B0 A220003B */ sb $zero, 0x3b($s1) -/* 054FB4 800543B4 860D01A2 */ lh $t5, 0x1a2($s0) -/* 054FB8 800543B8 3C018012 */ lui $at, %hi(D_8011D570) # $at, 0x8012 -/* 054FBC 800543BC 000D7023 */ negu $t6, $t5 -/* 054FC0 800543C0 000E7A03 */ sra $t7, $t6, 8 -/* 054FC4 800543C4 448F3000 */ mtc1 $t7, $f6 -/* 054FC8 800543C8 C428D570 */ lwc1 $f8, %lo(D_8011D570)($at) -/* 054FCC 800543CC 46803120 */ cvt.s.w $f4, $f6 -/* 054FD0 800543D0 24190028 */ li $t9, 40 -/* 054FD4 800543D4 02002025 */ move $a0, $s0 -/* 054FD8 800543D8 46082403 */ div.s $f16, $f4, $f8 -/* 054FDC 800543DC 4458F800 */ cfc1 $t8, $31 -/* 054FE0 800543E0 00000000 */ nop -/* 054FE4 800543E4 37010003 */ ori $at, $t8, 3 -/* 054FE8 800543E8 38210002 */ xori $at, $at, 2 -/* 054FEC 800543EC 44C1F800 */ ctc1 $at, $31 -/* 054FF0 800543F0 00000000 */ nop -/* 054FF4 800543F4 460084A4 */ cvt.w.s $f18, $f16 -/* 054FF8 800543F8 44029000 */ mfc1 $v0, $f18 -/* 054FFC 800543FC 44D8F800 */ ctc1 $t8, $31 -/* 055000 80054400 03221023 */ subu $v0, $t9, $v0 -/* 055004 80054404 04410003 */ bgez $v0, .L80054414 -/* 055008 80054408 2841004A */ slti $at, $v0, 0x4a -/* 05500C 8005440C 00001025 */ move $v0, $zero -/* 055010 80054410 2841004A */ slti $at, $v0, 0x4a -.L80054414: -/* 055014 80054414 14200002 */ bnez $at, .L80054420 -/* 055018 80054418 00000000 */ nop -/* 05501C 8005441C 24020049 */ li $v0, 73 -.L80054420: -/* 055020 80054420 0C0148D3 */ jal func_8005234C -/* 055024 80054424 A6220018 */ sh $v0, 0x18($s1) -/* 055028 80054428 860401A2 */ lh $a0, 0x1a2($s0) -/* 05502C 8005442C 3C088012 */ lui $t0, %hi(gCurrentCarSteerVel) # $t0, 0x8012 -/* 055030 80054430 8D08D554 */ lw $t0, %lo(gCurrentCarSteerVel)($t0) -/* 055034 80054434 3089FFFF */ andi $t1, $a0, 0xffff -/* 055038 80054438 34018001 */ li $at, 32769 -/* 05503C 8005443C 01091023 */ subu $v0, $t0, $t1 -/* 055040 80054440 0041082A */ slt $at, $v0, $at -/* 055044 80054444 8FAB00B8 */ lw $t3, 0xb8($sp) -/* 055048 80054448 14200003 */ bnez $at, .L80054458 -/* 05504C 8005444C 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 055050 80054450 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 055054 80054454 00411021 */ addu $v0, $v0, $at -.L80054458: -/* 055058 80054458 28418000 */ slti $at, $v0, -0x8000 -/* 05505C 8005445C 10200002 */ beqz $at, .L80054468 -/* 055060 80054460 3401FFFF */ li $at, 65535 -/* 055064 80054464 00411021 */ addu $v0, $v0, $at -.L80054468: -/* 055068 80054468 00025083 */ sra $t2, $v0, 2 -/* 05506C 8005446C 294102EF */ slti $at, $t2, 0x2ef -/* 055070 80054470 14200002 */ bnez $at, .L8005447C -/* 055074 80054474 01401025 */ move $v0, $t2 -/* 055078 80054478 240202EE */ li $v0, 750 -.L8005447C: -/* 05507C 8005447C 2841FD12 */ slti $at, $v0, -0x2ee -/* 055080 80054480 10200002 */ beqz $at, .L8005448C -/* 055084 80054484 00000000 */ nop -/* 055088 80054488 2402FD12 */ li $v0, -750 -.L8005448C: -/* 05508C 8005448C 004B0019 */ multu $v0, $t3 -/* 055090 80054490 860E01A0 */ lh $t6, 0x1a0($s0) -/* 055094 80054494 3C198012 */ lui $t9, %hi(D_8011D558) # $t9, 0x8012 -/* 055098 80054498 3C058012 */ lui $a1, %hi(D_8011D510) # $a1, 0x8012 -/* 05509C 8005449C 24A5D510 */ addiu $a1, %lo(D_8011D510) # addiu $a1, $a1, -0x2af0 -/* 0550A0 800544A0 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0550A4 800544A4 00006012 */ mflo $t4 -/* 0550A8 800544A8 008C6821 */ addu $t5, $a0, $t4 -/* 0550AC 800544AC A60D01A2 */ sh $t5, 0x1a2($s0) -/* 0550B0 800544B0 860F01A2 */ lh $t7, 0x1a2($s0) -/* 0550B4 800544B4 27A40050 */ addiu $a0, $sp, 0x50 -/* 0550B8 800544B8 01CFC021 */ addu $t8, $t6, $t7 -/* 0550BC 800544BC A6380000 */ sh $t8, ($s1) -/* 0550C0 800544C0 860301A6 */ lh $v1, 0x1a6($s0) -/* 0550C4 800544C4 8F39D558 */ lw $t9, %lo(D_8011D558)($t9) -/* 0550C8 800544C8 8FA900B8 */ lw $t1, 0xb8($sp) -/* 0550CC 800544CC 03234023 */ subu $t0, $t9, $v1 -/* 0550D0 800544D0 01090019 */ multu $t0, $t1 -/* 0550D4 800544D4 860D01A4 */ lh $t5, 0x1a4($s0) -/* 0550D8 800544D8 00005012 */ mflo $t2 -/* 0550DC 800544DC 000A5903 */ sra $t3, $t2, 4 -/* 0550E0 800544E0 006B6021 */ addu $t4, $v1, $t3 -/* 0550E4 800544E4 A60C01A6 */ sh $t4, 0x1a6($s0) -/* 0550E8 800544E8 860E01A6 */ lh $t6, 0x1a6($s0) -/* 0550EC 800544EC 00000000 */ nop -/* 0550F0 800544F0 01AE7821 */ addu $t7, $t5, $t6 -/* 0550F4 800544F4 A62F0004 */ sh $t7, 4($s1) -/* 0550F8 800544F8 921801F0 */ lbu $t8, 0x1f0($s0) -/* 0550FC 800544FC 00000000 */ nop -/* 055100 80054500 17000019 */ bnez $t8, .L80054568 -/* 055104 80054504 00000000 */ nop -/* 055108 80054508 861901A0 */ lh $t9, 0x1a0($s0) -/* 05510C 8005450C 8E08010C */ lw $t0, 0x10c($s0) -/* 055110 80054510 44800000 */ mtc1 $zero, $f0 -/* 055114 80054514 44815000 */ mtc1 $at, $f10 -/* 055118 80054518 03284821 */ addu $t1, $t9, $t0 -/* 05511C 8005451C A4A90000 */ sh $t1, ($a1) -/* 055120 80054520 A4A00002 */ sh $zero, 2($a1) -/* 055124 80054524 A4A00004 */ sh $zero, 4($a1) -/* 055128 80054528 E4A0000C */ swc1 $f0, 0xc($a1) -/* 05512C 8005452C E4A00010 */ swc1 $f0, 0x10($a1) -/* 055130 80054530 E4A00014 */ swc1 $f0, 0x14($a1) -/* 055134 80054534 0C01BF9D */ jal func_8006FE74 -/* 055138 80054538 E4AA0008 */ swc1 $f10, 8($a1) -/* 05513C 8005453C 8E050030 */ lw $a1, 0x30($s0) -/* 055140 80054540 8E07002C */ lw $a3, 0x2c($s0) -/* 055144 80054544 262A001C */ addiu $t2, $s1, 0x1c -/* 055148 80054548 27AB00AC */ addiu $t3, $sp, 0xac -/* 05514C 8005454C 262C0024 */ addiu $t4, $s1, 0x24 -/* 055150 80054550 AFAC0018 */ sw $t4, 0x18($sp) -/* 055154 80054554 AFAB0014 */ sw $t3, 0x14($sp) -/* 055158 80054558 AFAA0010 */ sw $t2, 0x10($sp) -/* 05515C 8005455C 27A40050 */ addiu $a0, $sp, 0x50 -/* 055160 80054560 0C01BD93 */ jal guMtxXFMF -/* 055164 80054564 24060000 */ li $a2, 0 -.L80054568: -/* 055168 80054568 820D0175 */ lb $t5, 0x175($s0) -/* 05516C 8005456C 3C018012 */ lui $at, %hi(D_8011D578) # $at, 0x8012 -/* 055170 80054570 11A00007 */ beqz $t5, .L80054590 -/* 055174 80054574 02202025 */ move $a0, $s1 -/* 055178 80054578 C426D578 */ lwc1 $f6, %lo(D_8011D578)($at) -/* 05517C 8005457C 3C018012 */ lui $at, %hi(D_8011D57C) # $at, 0x8012 -/* 055180 80054580 E626001C */ swc1 $f6, 0x1c($s1) -/* 055184 80054584 C424D57C */ lwc1 $f4, %lo(D_8011D57C)($at) -/* 055188 80054588 00000000 */ nop -/* 05518C 8005458C E6240024 */ swc1 $f4, 0x24($s1) -.L80054590: -/* 055190 80054590 8E0E0148 */ lw $t6, 0x148($s0) -/* 055194 80054594 8FA600BC */ lw $a2, 0xbc($sp) -/* 055198 80054598 15C00029 */ bnez $t6, .L80054640 -/* 05519C 8005459C 00000000 */ nop -/* 0551A0 800545A0 C628001C */ lwc1 $f8, 0x1c($s1) -/* 0551A4 800545A4 00000000 */ nop -/* 0551A8 800545A8 E7A800A8 */ swc1 $f8, 0xa8($sp) -/* 0551AC 800545AC C6300024 */ lwc1 $f16, 0x24($s1) -/* 0551B0 800545B0 C7B200A8 */ lwc1 $f18, 0xa8($sp) -/* 0551B4 800545B4 E7B000A4 */ swc1 $f16, 0xa4($sp) -/* 0551B8 800545B8 820F01D2 */ lb $t7, 0x1d2($s0) -/* 0551BC 800545BC 00000000 */ nop -/* 0551C0 800545C0 11E00009 */ beqz $t7, .L800545E8 -/* 0551C4 800545C4 00000000 */ nop -/* 0551C8 800545C8 C60A011C */ lwc1 $f10, 0x11c($s0) -/* 0551CC 800545CC C7A400A4 */ lwc1 $f4, 0xa4($sp) -/* 0551D0 800545D0 460A9180 */ add.s $f6, $f18, $f10 -/* 0551D4 800545D4 E7A600A8 */ swc1 $f6, 0xa8($sp) -/* 0551D8 800545D8 C6080120 */ lwc1 $f8, 0x120($s0) -/* 0551DC 800545DC 00000000 */ nop -/* 0551E0 800545E0 46082400 */ add.s $f16, $f4, $f8 -/* 0551E4 800545E4 E7B000A4 */ swc1 $f16, 0xa4($sp) -.L800545E8: -/* 0551E8 800545E8 C7B200A8 */ lwc1 $f18, 0xa8($sp) -/* 0551EC 800545EC C60A0084 */ lwc1 $f10, 0x84($s0) -/* 0551F0 800545F0 C7A400A4 */ lwc1 $f4, 0xa4($sp) -/* 0551F4 800545F4 460A9180 */ add.s $f6, $f18, $f10 -/* 0551F8 800545F8 C7A000BC */ lwc1 $f0, 0xbc($sp) -/* 0551FC 800545FC E7A600A8 */ swc1 $f6, 0xa8($sp) -/* 055200 80054600 C6080088 */ lwc1 $f8, 0x88($s0) -/* 055204 80054604 46003482 */ mul.s $f18, $f6, $f0 -/* 055208 80054608 46082400 */ add.s $f16, $f4, $f8 -/* 05520C 8005460C 02202025 */ move $a0, $s1 -/* 055210 80054610 E7B000A4 */ swc1 $f16, 0xa4($sp) -/* 055214 80054614 C62A0020 */ lwc1 $f10, 0x20($s1) -/* 055218 80054618 44059000 */ mfc1 $a1, $f18 -/* 05521C 8005461C 46005102 */ mul.s $f4, $f10, $f0 -/* 055220 80054620 00000000 */ nop -/* 055224 80054624 46008202 */ mul.s $f8, $f16, $f0 -/* 055228 80054628 44062000 */ mfc1 $a2, $f4 -/* 05522C 8005462C 44074000 */ mfc1 $a3, $f8 -/* 055230 80054630 0C00455C */ jal func_80011570 -/* 055234 80054634 00000000 */ nop -/* 055238 80054638 10000003 */ b .L80054648 -/* 05523C 8005463C 00000000 */ nop -.L80054640: -/* 055240 80054640 0C0141D5 */ jal func_80050754 -/* 055244 80054644 02002825 */ move $a1, $s0 -.L80054648: -/* 055248 80054648 3C188012 */ lui $t8, %hi(D_8011D55C) # $t8, 0x8012 -/* 05524C 8005464C 8F18D55C */ lw $t8, %lo(D_8011D55C)($t8) -/* 055250 80054650 2401FFFF */ li $at, -1 -/* 055254 80054654 1701000B */ bne $t8, $at, .L80054684 -/* 055258 80054658 8FA600B8 */ lw $a2, 0xb8($sp) -/* 05525C 8005465C 0C008D5A */ jal func_80023568 -/* 055260 80054660 00000000 */ nop -/* 055264 80054664 14400006 */ bnez $v0, .L80054680 -/* 055268 80054668 02202025 */ move $a0, $s1 -/* 05526C 8005466C 8FA600B8 */ lw $a2, 0xb8($sp) -/* 055270 80054670 0C0156A1 */ jal func_80055A84 -/* 055274 80054674 02002825 */ move $a1, $s0 -/* 055278 80054678 10000006 */ b .L80054694 -/* 05527C 8005467C 82190201 */ lb $t9, 0x201($s0) -.L80054680: -/* 055280 80054680 8FA600B8 */ lw $a2, 0xb8($sp) -.L80054684: -/* 055284 80054684 02202025 */ move $a0, $s1 -/* 055288 80054688 0C0153F4 */ jal func_80054FD0 -/* 05528C 8005468C 02002825 */ move $a1, $s0 -/* 055290 80054690 82190201 */ lb $t9, 0x201($s0) -.L80054694: -/* 055294 80054694 00000000 */ nop -/* 055298 80054698 17200003 */ bnez $t9, .L800546A8 -/* 05529C 8005469C 00000000 */ nop -/* 0552A0 800546A0 10000008 */ b .L800546C4 -/* 0552A4 800546A4 AE200074 */ sw $zero, 0x74($s1) -.L800546A8: -/* 0552A8 800546A8 820801D6 */ lb $t0, 0x1d6($s0) -/* 0552AC 800546AC 8FA500B8 */ lw $a1, 0xb8($sp) -/* 0552B0 800546B0 29010005 */ slti $at, $t0, 5 -/* 0552B4 800546B4 10200004 */ beqz $at, .L800546C8 -/* 0552B8 800546B8 8FA600BC */ lw $a2, 0xbc($sp) -/* 0552BC 800546BC 0C02BDC5 */ jal func_800AF714 -/* 0552C0 800546C0 02202025 */ move $a0, $s1 -.L800546C4: -/* 0552C4 800546C4 8FA600BC */ lw $a2, 0xbc($sp) -.L800546C8: -/* 0552C8 800546C8 02202025 */ move $a0, $s1 -/* 0552CC 800546CC 0C014DD4 */ jal func_80053750 -/* 0552D0 800546D0 02002825 */ move $a1, $s0 -/* 0552D4 800546D4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 0552D8 800546D8 44813000 */ mtc1 $at, $f6 -/* 0552DC 800546DC C7B200BC */ lwc1 $f18, 0xbc($sp) -/* 0552E0 800546E0 C7B00098 */ lwc1 $f16, 0x98($sp) -/* 0552E4 800546E4 46123283 */ div.s $f10, $f6, $f18 -/* 0552E8 800546E8 3C018012 */ lui $at, %hi(D_8011D548) # $at, 0x8012 -/* 0552EC 800546EC C426D548 */ lwc1 $f6, %lo(D_8011D548)($at) -/* 0552F0 800546F0 3C018012 */ lui $at, %hi(D_8011D54C) # $at, 0x8012 -/* 0552F4 800546F4 3C058012 */ lui $a1, %hi(D_8011D510) # $a1, 0x8012 -/* 0552F8 800546F8 24A5D510 */ addiu $a1, %lo(D_8011D510) # addiu $a1, $a1, -0x2af0 -/* 0552FC 800546FC 44800000 */ mtc1 $zero, $f0 -/* 055300 80054700 27A40050 */ addiu $a0, $sp, 0x50 -/* 055304 80054704 E7AA00AC */ swc1 $f10, 0xac($sp) -/* 055308 80054708 C624000C */ lwc1 $f4, 0xc($s1) -/* 05530C 8005470C 00000000 */ nop -/* 055310 80054710 46102201 */ sub.s $f8, $f4, $f16 -/* 055314 80054714 C6100084 */ lwc1 $f16, 0x84($s0) -/* 055318 80054718 46064481 */ sub.s $f18, $f8, $f6 -/* 05531C 8005471C 460A9102 */ mul.s $f4, $f18, $f10 -/* 055320 80054720 C7B20094 */ lwc1 $f18, 0x94($sp) -/* 055324 80054724 46102201 */ sub.s $f8, $f4, $f16 -/* 055328 80054728 E7A800A8 */ swc1 $f8, 0xa8($sp) -/* 05532C 8005472C C6260010 */ lwc1 $f6, 0x10($s1) -/* 055330 80054730 C6280014 */ lwc1 $f8, 0x14($s1) -/* 055334 80054734 46123101 */ sub.s $f4, $f6, $f18 -/* 055338 80054738 460A2402 */ mul.s $f16, $f4, $f10 -/* 05533C 8005473C E6300020 */ swc1 $f16, 0x20($s1) -/* 055340 80054740 C7A60090 */ lwc1 $f6, 0x90($sp) -/* 055344 80054744 C424D54C */ lwc1 $f4, %lo(D_8011D54C)($at) -/* 055348 80054748 46064481 */ sub.s $f18, $f8, $f6 -/* 05534C 8005474C C7B000AC */ lwc1 $f16, 0xac($sp) -/* 055350 80054750 46049281 */ sub.s $f10, $f18, $f4 -/* 055354 80054754 C6060088 */ lwc1 $f6, 0x88($s0) -/* 055358 80054758 46105202 */ mul.s $f8, $f10, $f16 -/* 05535C 8005475C 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 055360 80054760 44812000 */ mtc1 $at, $f4 -/* 055364 80054764 46064481 */ sub.s $f18, $f8, $f6 -/* 055368 80054768 E7B200A4 */ swc1 $f18, 0xa4($sp) -/* 05536C 8005476C 8E0A010C */ lw $t2, 0x10c($s0) -/* 055370 80054770 860901A0 */ lh $t1, 0x1a0($s0) -/* 055374 80054774 00000000 */ nop -/* 055378 80054778 012A5821 */ addu $t3, $t1, $t2 -/* 05537C 8005477C 000B6023 */ negu $t4, $t3 -/* 055380 80054780 A4AC0000 */ sh $t4, ($a1) -/* 055384 80054784 862D0002 */ lh $t5, 2($s1) -/* 055388 80054788 00000000 */ nop -/* 05538C 8005478C 000D7023 */ negu $t6, $t5 -/* 055390 80054790 A4AE0002 */ sh $t6, 2($a1) -/* 055394 80054794 862F0004 */ lh $t7, 4($s1) -/* 055398 80054798 E4A0000C */ swc1 $f0, 0xc($a1) -/* 05539C 8005479C 000FC023 */ negu $t8, $t7 -/* 0553A0 800547A0 A4B80004 */ sh $t8, 4($a1) -/* 0553A4 800547A4 E4A00010 */ swc1 $f0, 0x10($a1) -/* 0553A8 800547A8 E4A00014 */ swc1 $f0, 0x14($a1) -/* 0553AC 800547AC 0C01BF9D */ jal func_8006FE74 -/* 0553B0 800547B0 E4A40008 */ swc1 $f4, 8($a1) -/* 0553B4 800547B4 8FA500A8 */ lw $a1, 0xa8($sp) -/* 0553B8 800547B8 8FA700A4 */ lw $a3, 0xa4($sp) -/* 0553BC 800547BC 27B9009C */ addiu $t9, $sp, 0x9c -/* 0553C0 800547C0 27A800AC */ addiu $t0, $sp, 0xac -/* 0553C4 800547C4 27A900A0 */ addiu $t1, $sp, 0xa0 -/* 0553C8 800547C8 AFA90018 */ sw $t1, 0x18($sp) -/* 0553CC 800547CC AFA80014 */ sw $t0, 0x14($sp) -/* 0553D0 800547D0 AFB90010 */ sw $t9, 0x10($sp) -/* 0553D4 800547D4 27A40050 */ addiu $a0, $sp, 0x50 -/* 0553D8 800547D8 0C01BD93 */ jal guMtxXFMF -/* 0553DC 800547DC 24060000 */ li $a2, 0 -/* 0553E0 800547E0 820201D2 */ lb $v0, 0x1d2($s0) -/* 0553E4 800547E4 C7B000A0 */ lwc1 $f16, 0xa0($sp) -/* 0553E8 800547E8 1040000B */ beqz $v0, .L80054818 -/* 0553EC 800547EC 00000000 */ nop -/* 0553F0 800547F0 8FAA00B8 */ lw $t2, 0xb8($sp) -/* 0553F4 800547F4 00000000 */ nop -/* 0553F8 800547F8 004A5823 */ subu $t3, $v0, $t2 -/* 0553FC 800547FC A20B01D2 */ sb $t3, 0x1d2($s0) -/* 055400 80054800 820C01D2 */ lb $t4, 0x1d2($s0) -/* 055404 80054804 00000000 */ nop -/* 055408 80054808 05810044 */ bgez $t4, .L8005491C -/* 05540C 8005480C 8FBF002C */ lw $ra, 0x2c($sp) -/* 055410 80054810 10000041 */ b .L80054918 -/* 055414 80054814 A20001D2 */ sb $zero, 0x1d2($s0) -.L80054818: -/* 055418 80054818 C60A002C */ lwc1 $f10, 0x2c($s0) -/* 05541C 8005481C 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 055420 80054820 46105201 */ sub.s $f8, $f10, $f16 -/* 055424 80054824 44811800 */ mtc1 $at, $f3 -/* 055428 80054828 E7A800AC */ swc1 $f8, 0xac($sp) -/* 05542C 8005482C C7A600AC */ lwc1 $f6, 0xac($sp) -/* 055430 80054830 44801000 */ mtc1 $zero, $f2 -/* 055434 80054834 46003021 */ cvt.d.s $f0, $f6 -/* 055438 80054838 4620103C */ c.lt.d $f2, $f0 -/* 05543C 8005483C 44806000 */ mtc1 $zero, $f12 -/* 055440 80054840 4500000A */ bc1f .L8005486C -/* 055444 80054844 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 055448 80054848 C612002C */ lwc1 $f18, 0x2c($s0) -/* 05544C 8005484C 46220281 */ sub.d $f10, $f0, $f2 -/* 055450 80054850 46009121 */ cvt.d.s $f4, $f18 -/* 055454 80054854 462A2401 */ sub.d $f16, $f4, $f10 -/* 055458 80054858 46208220 */ cvt.s.d $f8, $f16 -/* 05545C 8005485C E608002C */ swc1 $f8, 0x2c($s0) -/* 055460 80054860 C7A600AC */ lwc1 $f6, 0xac($sp) -/* 055464 80054864 00000000 */ nop -/* 055468 80054868 46003021 */ cvt.d.s $f0, $f6 -.L8005486C: -/* 05546C 8005486C 44816800 */ mtc1 $at, $f13 -/* 055470 80054870 00000000 */ nop -/* 055474 80054874 462C003C */ c.lt.d $f0, $f12 -/* 055478 80054878 00000000 */ nop -/* 05547C 8005487C 45000007 */ bc1f .L8005489C -/* 055480 80054880 00000000 */ nop -/* 055484 80054884 C612002C */ lwc1 $f18, 0x2c($s0) -/* 055488 80054888 46220280 */ add.d $f10, $f0, $f2 -/* 05548C 8005488C 46009121 */ cvt.d.s $f4, $f18 -/* 055490 80054890 462A2401 */ sub.d $f16, $f4, $f10 -/* 055494 80054894 46208220 */ cvt.s.d $f8, $f16 -/* 055498 80054898 E608002C */ swc1 $f8, 0x2c($s0) -.L8005489C: -/* 05549C 8005489C C6060030 */ lwc1 $f6, 0x30($s0) -/* 0554A0 800548A0 C7B2009C */ lwc1 $f18, 0x9c($sp) -/* 0554A4 800548A4 00000000 */ nop -/* 0554A8 800548A8 46123101 */ sub.s $f4, $f6, $f18 -/* 0554AC 800548AC E7A400AC */ swc1 $f4, 0xac($sp) -/* 0554B0 800548B0 C7AA00AC */ lwc1 $f10, 0xac($sp) -/* 0554B4 800548B4 00000000 */ nop -/* 0554B8 800548B8 46005021 */ cvt.d.s $f0, $f10 -/* 0554BC 800548BC 4620103C */ c.lt.d $f2, $f0 -/* 0554C0 800548C0 00000000 */ nop -/* 0554C4 800548C4 4500000A */ bc1f .L800548F0 -/* 0554C8 800548C8 00000000 */ nop -/* 0554CC 800548CC C6100030 */ lwc1 $f16, 0x30($s0) -/* 0554D0 800548D0 46220181 */ sub.d $f6, $f0, $f2 -/* 0554D4 800548D4 46008221 */ cvt.d.s $f8, $f16 -/* 0554D8 800548D8 46264481 */ sub.d $f18, $f8, $f6 -/* 0554DC 800548DC 46209120 */ cvt.s.d $f4, $f18 -/* 0554E0 800548E0 E6040030 */ swc1 $f4, 0x30($s0) -/* 0554E4 800548E4 C7AA00AC */ lwc1 $f10, 0xac($sp) -/* 0554E8 800548E8 00000000 */ nop -/* 0554EC 800548EC 46005021 */ cvt.d.s $f0, $f10 -.L800548F0: -/* 0554F0 800548F0 462C003C */ c.lt.d $f0, $f12 -/* 0554F4 800548F4 00000000 */ nop -/* 0554F8 800548F8 45000008 */ bc1f .L8005491C -/* 0554FC 800548FC 8FBF002C */ lw $ra, 0x2c($sp) -/* 055500 80054900 C6100030 */ lwc1 $f16, 0x30($s0) -/* 055504 80054904 46220180 */ add.d $f6, $f0, $f2 -/* 055508 80054908 46008221 */ cvt.d.s $f8, $f16 -/* 05550C 8005490C 46264481 */ sub.d $f18, $f8, $f6 -/* 055510 80054910 46209120 */ cvt.s.d $f4, $f18 -/* 055514 80054914 E6040030 */ swc1 $f4, 0x30($s0) -.L80054918: -/* 055518 80054918 8FBF002C */ lw $ra, 0x2c($sp) -.L8005491C: -/* 05551C 8005491C 8FB00024 */ lw $s0, 0x24($sp) -/* 055520 80054920 8FB10028 */ lw $s1, 0x28($sp) -/* 055524 80054924 03E00008 */ jr $ra -/* 055528 80054928 27BD00B0 */ addiu $sp, $sp, 0xb0 - diff --git a/asm/non_matchings/racer/func_80055A84.s b/asm/non_matchings/racer/func_80055A84.s deleted file mode 100644 index 74946648..00000000 --- a/asm/non_matchings/racer/func_80055A84.s +++ /dev/null @@ -1,292 +0,0 @@ -glabel func_80055A84 -/* 056684 80055A84 27BDFF80 */ addiu $sp, $sp, -0x80 -/* 056688 80055A88 AFBF002C */ sw $ra, 0x2c($sp) -/* 05668C 80055A8C AFB10028 */ sw $s1, 0x28($sp) -/* 056690 80055A90 AFB00024 */ sw $s0, 0x24($sp) -/* 056694 80055A94 AFA60088 */ sw $a2, 0x88($sp) -/* 056698 80055A98 3C018012 */ lui $at, %hi(D_8011D4F0) # $at, 0x8012 -/* 05669C 80055A9C C420D4F0 */ lwc1 $f0, %lo(D_8011D4F0)($at) -/* 0566A0 80055AA0 C4840010 */ lwc1 $f4, 0x10($a0) -/* 0566A4 80055AA4 00A08025 */ move $s0, $a1 -/* 0566A8 80055AA8 4604003C */ c.lt.s $f0, $f4 -/* 0566AC 80055AAC 00808825 */ move $s1, $a0 -/* 0566B0 80055AB0 45000002 */ bc1f .L80055ABC -/* 0566B4 80055AB4 00000000 */ nop -/* 0566B8 80055AB8 E4800010 */ swc1 $f0, 0x10($a0) -.L80055ABC: -/* 0566BC 80055ABC 0C0078A7 */ jal get_misc_asset -/* 0566C0 80055AC0 24040038 */ li $a0, 56 -/* 0566C4 80055AC4 240EFFFF */ li $t6, -1 -/* 0566C8 80055AC8 A3AE003F */ sb $t6, 0x3f($sp) -/* 0566CC 80055ACC 820F01D7 */ lb $t7, 0x1d7($s0) -/* 0566D0 80055AD0 44800000 */ mtc1 $zero, $f0 -/* 0566D4 80055AD4 000FC080 */ sll $t8, $t7, 2 -/* 0566D8 80055AD8 0058C821 */ addu $t9, $v0, $t8 -/* 0566DC 80055ADC C7260000 */ lwc1 $f6, ($t9) -/* 0566E0 80055AE0 3C018012 */ lui $at, %hi(D_8011D548) # $at, 0x8012 -/* 0566E4 80055AE4 E7A60040 */ swc1 $f6, 0x40($sp) -/* 0566E8 80055AE8 C628000C */ lwc1 $f8, 0xc($s1) -/* 0566EC 80055AEC 00001825 */ move $v1, $zero -/* 0566F0 80055AF0 E7A80048 */ swc1 $f8, 0x48($sp) -/* 0566F4 80055AF4 C62A0010 */ lwc1 $f10, 0x10($s1) -/* 0566F8 80055AF8 00000000 */ nop -/* 0566FC 80055AFC E7AA004C */ swc1 $f10, 0x4c($sp) -/* 056700 80055B00 C6240014 */ lwc1 $f4, 0x14($s1) -/* 056704 80055B04 E420D548 */ swc1 $f0, %lo(D_8011D548)($at) -/* 056708 80055B08 3C018012 */ lui $at, %hi(D_8011D54C) # $at, 0x8012 -/* 05670C 80055B0C AFA00074 */ sw $zero, 0x74($sp) -/* 056710 80055B10 E420D54C */ swc1 $f0, %lo(D_8011D54C)($at) -/* 056714 80055B14 E7A40050 */ swc1 $f4, 0x50($sp) -/* 056718 80055B18 86090000 */ lh $t1, ($s0) -/* 05671C 80055B1C 2401FFFF */ li $at, -1 -/* 056720 80055B20 15210006 */ bne $t1, $at, .L80055B3C -/* 056724 80055B24 27AB0048 */ addiu $t3, $sp, 0x48 -/* 056728 80055B28 820A01D7 */ lb $t2, 0x1d7($s0) -/* 05672C 80055B2C 00000000 */ nop -/* 056730 80055B30 29410005 */ slti $at, $t2, 5 -/* 056734 80055B34 1020000C */ beqz $at, .L80055B68 -/* 056738 80055B38 27AB0048 */ addiu $t3, $sp, 0x48 -.L80055B3C: -/* 05673C 80055B3C 27AC0040 */ addiu $t4, $sp, 0x40 -/* 056740 80055B40 27AD003F */ addiu $t5, $sp, 0x3f -/* 056744 80055B44 AFAD0018 */ sw $t5, 0x18($sp) -/* 056748 80055B48 AFAC0014 */ sw $t4, 0x14($sp) -/* 05674C 80055B4C AFAB0010 */ sw $t3, 0x10($sp) -/* 056750 80055B50 02202025 */ move $a0, $s1 -/* 056754 80055B54 24050001 */ li $a1, 1 -/* 056758 80055B58 27A60074 */ addiu $a2, $sp, 0x74 -/* 05675C 80055B5C 0C005C92 */ jal func_80017248 -/* 056760 80055B60 260700D8 */ addiu $a3, $s0, 0xd8 -/* 056764 80055B64 00401825 */ move $v1, $v0 -.L80055B68: -/* 056768 80055B68 306E0080 */ andi $t6, $v1, 0x80 -/* 05676C 80055B6C 11C0000E */ beqz $t6, .L80055BA8 -/* 056770 80055B70 260500D8 */ addiu $a1, $s0, 0xd8 -/* 056774 80055B74 C7A60048 */ lwc1 $f6, 0x48($sp) -/* 056778 80055B78 C628000C */ lwc1 $f8, 0xc($s1) -/* 05677C 80055B7C 3C018012 */ lui $at, %hi(D_8011D548) # $at, 0x8012 -/* 056780 80055B80 46083281 */ sub.s $f10, $f6, $f8 -/* 056784 80055B84 C7A40050 */ lwc1 $f4, 0x50($sp) -/* 056788 80055B88 E42AD548 */ swc1 $f10, %lo(D_8011D548)($at) -/* 05678C 80055B8C C6260014 */ lwc1 $f6, 0x14($s1) -/* 056790 80055B90 3C018012 */ lui $at, %hi(D_8011D54C) # $at, 0x8012 -/* 056794 80055B94 46062201 */ sub.s $f8, $f4, $f6 -/* 056798 80055B98 E428D54C */ swc1 $f8, %lo(D_8011D54C)($at) -/* 05679C 80055B9C 2401FF7F */ li $at, -129 -/* 0567A0 80055BA0 00617824 */ and $t7, $v1, $at -/* 0567A4 80055BA4 01E01825 */ move $v1, $t7 -.L80055BA8: -/* 0567A8 80055BA8 1060000E */ beqz $v1, .L80055BE4 -/* 0567AC 80055BAC 00004025 */ move $t0, $zero -/* 0567B0 80055BB0 C7AA004C */ lwc1 $f10, 0x4c($sp) -/* 0567B4 80055BB4 C6260010 */ lwc1 $f6, 0x10($s1) -/* 0567B8 80055BB8 3C014010 */ li $at, 0x40100000 # 2.250000 -/* 0567BC 80055BBC 46005121 */ cvt.d.s $f4, $f10 -/* 0567C0 80055BC0 44805000 */ mtc1 $zero, $f10 -/* 0567C4 80055BC4 44815800 */ mtc1 $at, $f11 -/* 0567C8 80055BC8 46003221 */ cvt.d.s $f8, $f6 -/* 0567CC 80055BCC 462A4181 */ sub.d $f6, $f8, $f10 -/* 0567D0 80055BD0 4626203C */ c.lt.d $f4, $f6 -/* 0567D4 80055BD4 00000000 */ nop -/* 0567D8 80055BD8 45000002 */ bc1f .L80055BE4 -/* 0567DC 80055BDC 00000000 */ nop -/* 0567E0 80055BE0 24080001 */ li $t0, 1 -.L80055BE4: -/* 0567E4 80055BE4 820701D6 */ lb $a3, 0x1d6($s0) -/* 0567E8 80055BE8 A3A8003E */ sb $t0, 0x3e($sp) -/* 0567EC 80055BEC AFA50038 */ sw $a1, 0x38($sp) -/* 0567F0 80055BF0 AFA30070 */ sw $v1, 0x70($sp) -/* 0567F4 80055BF4 24040001 */ li $a0, 1 -/* 0567F8 80055BF8 0C00C44C */ jal func_80031130 -/* 0567FC 80055BFC 27A60048 */ addiu $a2, $sp, 0x48 -/* 056800 80055C00 8FA40038 */ lw $a0, 0x38($sp) -/* 056804 80055C04 24180001 */ li $t8, 1 -/* 056808 80055C08 27B90074 */ addiu $t9, $sp, 0x74 -/* 05680C 80055C0C AFA00074 */ sw $zero, 0x74($sp) -/* 056810 80055C10 AFB90014 */ sw $t9, 0x14($sp) -/* 056814 80055C14 AFB80010 */ sw $t8, 0x10($sp) -/* 056818 80055C18 27A50048 */ addiu $a1, $sp, 0x48 -/* 05681C 80055C1C 27A60040 */ addiu $a2, $sp, 0x40 -/* 056820 80055C20 0C00C580 */ jal func_80031600 -/* 056824 80055C24 27A7003F */ addiu $a3, $sp, 0x3f -/* 056828 80055C28 8FA30070 */ lw $v1, 0x70($sp) -/* 05682C 80055C2C 83A8003E */ lb $t0, 0x3e($sp) -/* 056830 80055C30 A20201E3 */ sb $v0, 0x1e3($s0) -/* 056834 80055C34 820901E3 */ lb $t1, 0x1e3($s0) -/* 056838 80055C38 A20301E4 */ sb $v1, 0x1e4($s0) -/* 05683C 80055C3C 01235025 */ or $t2, $t1, $v1 -/* 056840 80055C40 A20A01E3 */ sb $t2, 0x1e3($s0) -/* 056844 80055C44 820B01E3 */ lb $t3, 0x1e3($s0) -/* 056848 80055C48 A20001E2 */ sb $zero, 0x1e2($s0) -/* 05684C 80055C4C 11600005 */ beqz $t3, .L80055C64 -/* 056850 80055C50 02001825 */ move $v1, $s0 -/* 056854 80055C54 240C000F */ li $t4, 15 -/* 056858 80055C58 240D0004 */ li $t5, 4 -/* 05685C 80055C5C A20C01E3 */ sb $t4, 0x1e3($s0) -/* 056860 80055C60 A20D01E2 */ sb $t5, 0x1e2($s0) -.L80055C64: -/* 056864 80055C64 1100000C */ beqz $t0, .L80055C98 -/* 056868 80055C68 27A20048 */ addiu $v0, $sp, 0x48 -/* 05686C 80055C6C 8FAE0074 */ lw $t6, 0x74($sp) -/* 056870 80055C70 00000000 */ nop -/* 056874 80055C74 11C00009 */ beqz $t6, .L80055C9C -/* 056878 80055C78 27A40054 */ addiu $a0, $sp, 0x54 -/* 05687C 80055C7C 820F01ED */ lb $t7, 0x1ed($s0) -/* 056880 80055C80 24180004 */ li $t8, 4 -/* 056884 80055C84 15E00003 */ bnez $t7, .L80055C94 -/* 056888 80055C88 2419003C */ li $t9, 60 -/* 05688C 80055C8C 10000002 */ b .L80055C98 -/* 056890 80055C90 A2180187 */ sb $t8, 0x187($s0) -.L80055C94: -/* 056894 80055C94 A21901ED */ sb $t9, 0x1ed($s0) -.L80055C98: -/* 056898 80055C98 27A40054 */ addiu $a0, $sp, 0x54 -.L80055C9C: -/* 05689C 80055C9C C4480000 */ lwc1 $f8, ($v0) -/* 0568A0 80055CA0 24420004 */ addiu $v0, $v0, 4 -/* 0568A4 80055CA4 0044082B */ sltu $at, $v0, $a0 -/* 0568A8 80055CA8 24630004 */ addiu $v1, $v1, 4 -/* 0568AC 80055CAC 1420FFFB */ bnez $at, .L80055C9C -/* 0568B0 80055CB0 E46800D4 */ swc1 $f8, 0xd4($v1) -/* 0568B4 80055CB4 83A9003F */ lb $t1, 0x3f($sp) -/* 0568B8 80055CB8 C60A00D8 */ lwc1 $f10, 0xd8($s0) -/* 0568BC 80055CBC A20901DC */ sb $t1, 0x1dc($s0) -/* 0568C0 80055CC0 83AA003F */ lb $t2, 0x3f($sp) -/* 0568C4 80055CC4 27A40068 */ addiu $a0, $sp, 0x68 -/* 0568C8 80055CC8 A20A01DD */ sb $t2, 0x1dd($s0) -/* 0568CC 80055CCC 83AB003F */ lb $t3, 0x3f($sp) -/* 0568D0 80055CD0 27A50064 */ addiu $a1, $sp, 0x64 -/* 0568D4 80055CD4 A20B01DE */ sb $t3, 0x1de($s0) -/* 0568D8 80055CD8 83AC003F */ lb $t4, 0x3f($sp) -/* 0568DC 80055CDC 00000000 */ nop -/* 0568E0 80055CE0 A20C01DF */ sb $t4, 0x1df($s0) -/* 0568E4 80055CE4 E62A000C */ swc1 $f10, 0xc($s1) -/* 0568E8 80055CE8 C60400DC */ lwc1 $f4, 0xdc($s0) -/* 0568EC 80055CEC 00000000 */ nop -/* 0568F0 80055CF0 E6240010 */ swc1 $f4, 0x10($s1) -/* 0568F4 80055CF4 C60600E0 */ lwc1 $f6, 0xe0($s0) -/* 0568F8 80055CF8 00000000 */ nop -/* 0568FC 80055CFC E6260014 */ swc1 $f6, 0x14($s1) -/* 056900 80055D00 820D01E2 */ lb $t5, 0x1e2($s0) -/* 056904 80055D04 00000000 */ nop -/* 056908 80055D08 11A00046 */ beqz $t5, .L80055E24 -/* 05690C 80055D0C 00000000 */ nop -/* 056910 80055D10 0C00AB35 */ jal func_8002ACD4 -/* 056914 80055D14 27A60060 */ addiu $a2, $sp, 0x60 -/* 056918 80055D18 86240000 */ lh $a0, ($s1) -/* 05691C 80055D1C 00000000 */ nop -/* 056920 80055D20 00042023 */ negu $a0, $a0 -/* 056924 80055D24 00047400 */ sll $t6, $a0, 0x10 -/* 056928 80055D28 0C01C1F1 */ jal cosine_s -/* 05692C 80055D2C 000E2403 */ sra $a0, $t6, 0x10 -/* 056930 80055D30 86240000 */ lh $a0, ($s1) -/* 056934 80055D34 E7A00058 */ swc1 $f0, 0x58($sp) -/* 056938 80055D38 00042023 */ negu $a0, $a0 -/* 05693C 80055D3C 0004C400 */ sll $t8, $a0, 0x10 -/* 056940 80055D40 0C01C1FE */ jal sine_s -/* 056944 80055D44 00182403 */ sra $a0, $t8, 0x10 -/* 056948 80055D48 C7B00068 */ lwc1 $f16, 0x68($sp) -/* 05694C 80055D4C C7A20058 */ lwc1 $f2, 0x58($sp) -/* 056950 80055D50 46008202 */ mul.s $f8, $f16, $f0 -/* 056954 80055D54 C7B20060 */ lwc1 $f18, 0x60($sp) -/* 056958 80055D58 C7AE0064 */ lwc1 $f14, 0x64($sp) -/* 05695C 80055D5C 46029282 */ mul.s $f10, $f18, $f2 -/* 056960 80055D60 00000000 */ nop -/* 056964 80055D64 46028102 */ mul.s $f4, $f16, $f2 -/* 056968 80055D68 460A4300 */ add.s $f12, $f8, $f10 -/* 05696C 80055D6C 46009182 */ mul.s $f6, $f18, $f0 -/* 056970 80055D70 46062481 */ sub.s $f18, $f4, $f6 -/* 056974 80055D74 0C01C1D4 */ jal arctan2_f -/* 056978 80055D78 E7B20060 */ swc1 $f18, 0x60($sp) -/* 05697C 80055D7C 00021C00 */ sll $v1, $v0, 0x10 -/* 056980 80055D80 00034C03 */ sra $t1, $v1, 0x10 -/* 056984 80055D84 00091823 */ negu $v1, $t1 -/* 056988 80055D88 28612000 */ slti $at, $v1, 0x2000 -/* 05698C 80055D8C 10200004 */ beqz $at, .L80055DA0 -/* 056990 80055D90 2861E001 */ slti $at, $v1, -0x1fff -/* 056994 80055D94 14200002 */ bnez $at, .L80055DA0 -/* 056998 80055D98 00000000 */ nop -/* 05699C 80055D9C A60301A4 */ sh $v1, 0x1a4($s0) -.L80055DA0: -/* 0569A0 80055DA0 C7AC0060 */ lwc1 $f12, 0x60($sp) -/* 0569A4 80055DA4 C7AE0064 */ lwc1 $f14, 0x64($sp) -/* 0569A8 80055DA8 0C01C1D4 */ jal arctan2_f -/* 0569AC 80055DAC 00000000 */ nop -/* 0569B0 80055DB0 00021C00 */ sll $v1, $v0, 0x10 -/* 0569B4 80055DB4 00035403 */ sra $t2, $v1, 0x10 -/* 0569B8 80055DB8 000A1823 */ negu $v1, $t2 -/* 0569BC 80055DBC 28612000 */ slti $at, $v1, 0x2000 -/* 0569C0 80055DC0 10200004 */ beqz $at, .L80055DD4 -/* 0569C4 80055DC4 2861E001 */ slti $at, $v1, -0x1fff -/* 0569C8 80055DC8 14200002 */ bnez $at, .L80055DD4 -/* 0569CC 80055DCC 00000000 */ nop -/* 0569D0 80055DD0 A6230002 */ sh $v1, 2($s1) -.L80055DD4: -/* 0569D4 80055DD4 820B01D6 */ lb $t3, 0x1d6($s0) -/* 0569D8 80055DD8 24010004 */ li $at, 4 -/* 0569DC 80055DDC 15610011 */ bne $t3, $at, .L80055E24 -/* 0569E0 80055DE0 00000000 */ nop -/* 0569E4 80055DE4 86240002 */ lh $a0, 2($s1) -/* 0569E8 80055DE8 34018001 */ li $at, 32769 -/* 0569EC 80055DEC 308CFFFF */ andi $t4, $a0, 0xffff -/* 0569F0 80055DF0 006C1023 */ subu $v0, $v1, $t4 -/* 0569F4 80055DF4 0041082A */ slt $at, $v0, $at -/* 0569F8 80055DF8 14200003 */ bnez $at, .L80055E08 -/* 0569FC 80055DFC 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 056A00 80055E00 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 056A04 80055E04 00411021 */ addu $v0, $v0, $at -.L80055E08: -/* 056A08 80055E08 28418000 */ slti $at, $v0, -0x8000 -/* 056A0C 80055E0C 10200002 */ beqz $at, .L80055E18 -/* 056A10 80055E10 3401FFFF */ li $at, 65535 -/* 056A14 80055E14 00411021 */ addu $v0, $v0, $at -.L80055E18: -/* 056A18 80055E18 00026883 */ sra $t5, $v0, 2 -/* 056A1C 80055E1C 008D7021 */ addu $t6, $a0, $t5 -/* 056A20 80055E20 A62E0002 */ sh $t6, 2($s1) -.L80055E24: -/* 056A24 80055E24 820201D6 */ lb $v0, 0x1d6($s0) -/* 056A28 80055E28 24010004 */ li $at, 4 -/* 056A2C 80055E2C 1041001F */ beq $v0, $at, .L80055EAC -/* 056A30 80055E30 24010002 */ li $at, 2 -/* 056A34 80055E34 1041001D */ beq $v0, $at, .L80055EAC -/* 056A38 80055E38 2401000A */ li $at, 10 -/* 056A3C 80055E3C 1041001B */ beq $v0, $at, .L80055EAC -/* 056A40 80055E40 24010007 */ li $at, 7 -/* 056A44 80055E44 1041001A */ beq $v0, $at, .L80055EB0 -/* 056A48 80055E48 8FBF002C */ lw $ra, 0x2c($sp) -/* 056A4C 80055E4C 860201A4 */ lh $v0, 0x1a4($s0) -/* 056A50 80055E50 240F3400 */ li $t7, 13312 -/* 056A54 80055E54 28413401 */ slti $at, $v0, 0x3401 -/* 056A58 80055E58 14200004 */ bnez $at, .L80055E6C -/* 056A5C 80055E5C 2418CC00 */ li $t8, -13312 -/* 056A60 80055E60 A60F01A4 */ sh $t7, 0x1a4($s0) -/* 056A64 80055E64 860201A4 */ lh $v0, 0x1a4($s0) -/* 056A68 80055E68 00000000 */ nop -.L80055E6C: -/* 056A6C 80055E6C 2841CC00 */ slti $at, $v0, -0x3400 -/* 056A70 80055E70 10200002 */ beqz $at, .L80055E7C -/* 056A74 80055E74 24193400 */ li $t9, 13312 -/* 056A78 80055E78 A61801A4 */ sh $t8, 0x1a4($s0) -.L80055E7C: -/* 056A7C 80055E7C 86240002 */ lh $a0, 2($s1) -/* 056A80 80055E80 2409CC00 */ li $t1, -13312 -/* 056A84 80055E84 28813401 */ slti $at, $a0, 0x3401 -/* 056A88 80055E88 14200005 */ bnez $at, .L80055EA0 -/* 056A8C 80055E8C 2881CC00 */ slti $at, $a0, -0x3400 -/* 056A90 80055E90 A6390002 */ sh $t9, 2($s1) -/* 056A94 80055E94 86240002 */ lh $a0, 2($s1) -/* 056A98 80055E98 00000000 */ nop -/* 056A9C 80055E9C 2881CC00 */ slti $at, $a0, -0x3400 -.L80055EA0: -/* 056AA0 80055EA0 10200003 */ beqz $at, .L80055EB0 -/* 056AA4 80055EA4 8FBF002C */ lw $ra, 0x2c($sp) -/* 056AA8 80055EA8 A6290002 */ sh $t1, 2($s1) -.L80055EAC: -/* 056AAC 80055EAC 8FBF002C */ lw $ra, 0x2c($sp) -.L80055EB0: -/* 056AB0 80055EB0 8FB00024 */ lw $s0, 0x24($sp) -/* 056AB4 80055EB4 8FB10028 */ lw $s1, 0x28($sp) -/* 056AB8 80055EB8 03E00008 */ jr $ra -/* 056ABC 80055EBC 27BD0080 */ addiu $sp, $sp, 0x80 - diff --git a/asm/non_matchings/racer/func_80057A40.s b/asm/non_matchings/racer/func_80057A40.s deleted file mode 100644 index dc468afe..00000000 --- a/asm/non_matchings/racer/func_80057A40.s +++ /dev/null @@ -1,454 +0,0 @@ -.late_rodata -glabel jpt_800E68D0 -.word L80057BBC, L80057BE4, L80057CD0, L80057C0C, L80057C34, L80057C5C, L80057C84, L80057CAC -glabel D_800E68F0 -.double 91.75 -glabel D_800E68F8 -.double 90.0 -glabel D_800E6900 -.double 48.5 -glabel D_800E6908 -.double 0.95 - -.text -glabel func_80057A40 -/* 058640 80057A40 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 058644 80057A44 3C0E8012 */ lui $t6, %hi(gActivePlayerButtonPress) # $t6, 0x8012 -/* 058648 80057A48 8DCED52C */ lw $t6, %lo(gActivePlayerButtonPress)($t6) -/* 05864C 80057A4C AFA5003C */ sw $a1, 0x3c($sp) -/* 058650 80057A50 31CF0008 */ andi $t7, $t6, 8 -/* 058654 80057A54 AFBF0014 */ sw $ra, 0x14($sp) -/* 058658 80057A58 AFA40038 */ sw $a0, 0x38($sp) -/* 05865C 80057A5C AFA60040 */ sw $a2, 0x40($sp) -/* 058660 80057A60 11E00037 */ beqz $t7, .L80057B40 -/* 058664 80057A64 AFA5003C */ sw $a1, 0x3c($sp) -/* 058668 80057A68 0C028064 */ jal func_800A0190 -/* 05866C 80057A6C AFA5003C */ sw $a1, 0x3c($sp) -/* 058670 80057A70 10400033 */ beqz $v0, .L80057B40 -/* 058674 80057A74 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 058678 80057A78 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 05867C 80057A7C 8CE20000 */ lw $v0, ($a3) -/* 058680 80057A80 00000000 */ nop -/* 058684 80057A84 9058003B */ lbu $t8, 0x3b($v0) -/* 058688 80057A88 00000000 */ nop -/* 05868C 80057A8C 27190001 */ addiu $t9, $t8, 1 -/* 058690 80057A90 A059003B */ sb $t9, 0x3b($v0) -/* 058694 80057A94 8CE20000 */ lw $v0, ($a3) -/* 058698 80057A98 00000000 */ nop -/* 05869C 80057A9C 9045003B */ lbu $a1, 0x3b($v0) -/* 0586A0 80057AA0 00000000 */ nop -/* 0586A4 80057AA4 28A10004 */ slti $at, $a1, 4 -/* 0586A8 80057AA8 14200007 */ bnez $at, .L80057AC8 -/* 0586AC 80057AAC 8FA9003C */ lw $t1, 0x3c($sp) -/* 0586B0 80057AB0 A040003B */ sb $zero, 0x3b($v0) -/* 0586B4 80057AB4 8CE80000 */ lw $t0, ($a3) -/* 0586B8 80057AB8 00000000 */ nop -/* 0586BC 80057ABC 9105003B */ lbu $a1, 0x3b($t0) -/* 0586C0 80057AC0 00000000 */ nop -/* 0586C4 80057AC4 8FA9003C */ lw $t1, 0x3c($sp) -.L80057AC8: -/* 0586C8 80057AC8 2401FFFF */ li $at, -1 -/* 0586CC 80057ACC 85240000 */ lh $a0, ($t1) -/* 0586D0 80057AD0 00000000 */ nop -/* 0586D4 80057AD4 10810009 */ beq $a0, $at, .L80057AFC -/* 0586D8 80057AD8 00000000 */ nop -/* 0586DC 80057ADC 0C019818 */ jal func_80066060 -/* 0586E0 80057AE0 00000000 */ nop -/* 0586E4 80057AE4 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 0586E8 80057AE8 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 0586EC 80057AEC 8CEA0000 */ lw $t2, ($a3) -/* 0586F0 80057AF0 00000000 */ nop -/* 0586F4 80057AF4 9145003B */ lbu $a1, 0x3b($t2) -/* 0586F8 80057AF8 00000000 */ nop -.L80057AFC: -/* 0586FC 80057AFC 10A00006 */ beqz $a1, .L80057B18 -/* 058700 80057B00 24040068 */ li $a0, 104 -/* 058704 80057B04 24010001 */ li $at, 1 -/* 058708 80057B08 10A10007 */ beq $a1, $at, .L80057B28 -/* 05870C 80057B0C 24040069 */ li $a0, 105 -/* 058710 80057B10 10000009 */ b .L80057B38 -/* 058714 80057B14 2404006A */ li $a0, 106 -.L80057B18: -/* 058718 80057B18 0C000741 */ jal func_80001D04 -/* 05871C 80057B1C 00002825 */ move $a1, $zero -/* 058720 80057B20 10000008 */ b .L80057B44 -/* 058724 80057B24 8FA6003C */ lw $a2, 0x3c($sp) -.L80057B28: -/* 058728 80057B28 0C000741 */ jal func_80001D04 -/* 05872C 80057B2C 00002825 */ move $a1, $zero -/* 058730 80057B30 10000004 */ b .L80057B44 -/* 058734 80057B34 8FA6003C */ lw $a2, 0x3c($sp) -.L80057B38: -/* 058738 80057B38 0C000741 */ jal func_80001D04 -/* 05873C 80057B3C 00002825 */ move $a1, $zero -.L80057B40: -/* 058740 80057B40 8FA6003C */ lw $a2, 0x3c($sp) -.L80057B44: -/* 058744 80057B44 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 058748 80057B48 80CB01D8 */ lb $t3, 0x1d8($a2) -/* 05874C 80057B4C 24010001 */ li $at, 1 -/* 058750 80057B50 15610008 */ bne $t3, $at, .L80057B74 -/* 058754 80057B54 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 058758 80057B58 8CE20000 */ lw $v0, ($a3) -/* 05875C 80057B5C 24010005 */ li $at, 5 -/* 058760 80057B60 844C0036 */ lh $t4, 0x36($v0) -/* 058764 80057B64 240D0007 */ li $t5, 7 -/* 058768 80057B68 11810002 */ beq $t4, $at, .L80057B74 -/* 05876C 80057B6C 00000000 */ nop -/* 058770 80057B70 A44D0036 */ sh $t5, 0x36($v0) -.L80057B74: -/* 058774 80057B74 8CCE0108 */ lw $t6, 0x108($a2) -/* 058778 80057B78 8CE20000 */ lw $v0, ($a3) -/* 05877C 80057B7C 11C00004 */ beqz $t6, .L80057B90 -/* 058780 80057B80 240F0003 */ li $t7, 3 -/* 058784 80057B84 A44F0036 */ sh $t7, 0x36($v0) -/* 058788 80057B88 8CE20000 */ lw $v0, ($a3) -/* 05878C 80057B8C 00000000 */ nop -.L80057B90: -/* 058790 80057B90 94580036 */ lhu $t8, 0x36($v0) -/* 058794 80057B94 00000000 */ nop -/* 058798 80057B98 2F010008 */ sltiu $at, $t8, 8 -/* 05879C 80057B9C 1020004C */ beqz $at, .L80057CD0 -/* 0587A0 80057BA0 0018C080 */ sll $t8, $t8, 2 -/* 0587A4 80057BA4 3C01800E */ lui $at, %hi(jpt_800E68D0) # $at, 0x800e -/* 0587A8 80057BA8 00380821 */ addu $at, $at, $t8 -/* 0587AC 80057BAC 8C3868D0 */ lw $t8, %lo(jpt_800E68D0)($at) -/* 0587B0 80057BB0 00000000 */ nop -/* 0587B4 80057BB4 03000008 */ jr $t8 -/* 0587B8 80057BB8 00000000 */ nop -glabel L80057BBC -/* 0587BC 80057BBC C7AC0040 */ lwc1 $f12, 0x40($sp) -/* 0587C0 80057BC0 8FA50038 */ lw $a1, 0x38($sp) -/* 0587C4 80057BC4 0C01607A */ jal func_800581E8 -/* 0587C8 80057BC8 AFA6003C */ sw $a2, 0x3c($sp) -/* 0587CC 80057BCC 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 0587D0 80057BD0 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 0587D4 80057BD4 8CE20000 */ lw $v0, ($a3) -/* 0587D8 80057BD8 8FA6003C */ lw $a2, 0x3c($sp) -/* 0587DC 80057BDC 1000003C */ b .L80057CD0 -/* 0587E0 80057BE0 00000000 */ nop -glabel L80057BE4 -/* 0587E4 80057BE4 C7AC0040 */ lwc1 $f12, 0x40($sp) -/* 0587E8 80057BE8 8FA50038 */ lw $a1, 0x38($sp) -/* 0587EC 80057BEC 0C0130AC */ jal func_8004C2B0 -/* 0587F0 80057BF0 AFA6003C */ sw $a2, 0x3c($sp) -/* 0587F4 80057BF4 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 0587F8 80057BF8 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 0587FC 80057BFC 8CE20000 */ lw $v0, ($a3) -/* 058800 80057C00 8FA6003C */ lw $a2, 0x3c($sp) -/* 058804 80057C04 10000032 */ b .L80057CD0 -/* 058808 80057C08 00000000 */ nop -glabel L80057C0C -/* 05880C 80057C0C C7AC0040 */ lwc1 $f12, 0x40($sp) -/* 058810 80057C10 8FA50038 */ lw $a1, 0x38($sp) -/* 058814 80057C14 0C0163D1 */ jal func_80058F44 -/* 058818 80057C18 AFA6003C */ sw $a2, 0x3c($sp) -/* 05881C 80057C1C 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 058820 80057C20 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 058824 80057C24 8CE20000 */ lw $v0, ($a3) -/* 058828 80057C28 8FA6003C */ lw $a2, 0x3c($sp) -/* 05882C 80057C2C 10000028 */ b .L80057CD0 -/* 058830 80057C30 00000000 */ nop -glabel L80057C34 -/* 058834 80057C34 C7AC0040 */ lwc1 $f12, 0x40($sp) -/* 058838 80057C38 8FA50038 */ lw $a1, 0x38($sp) -/* 05883C 80057C3C 0C012399 */ jal func_80048E64 -/* 058840 80057C40 AFA6003C */ sw $a2, 0x3c($sp) -/* 058844 80057C44 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 058848 80057C48 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 05884C 80057C4C 8CE20000 */ lw $v0, ($a3) -/* 058850 80057C50 8FA6003C */ lw $a2, 0x3c($sp) -/* 058854 80057C54 1000001E */ b .L80057CD0 -/* 058858 80057C58 00000000 */ nop -glabel L80057C5C -/* 05885C 80057C5C C7AC0040 */ lwc1 $f12, 0x40($sp) -/* 058860 80057C60 8FA50038 */ lw $a1, 0x38($sp) -/* 058864 80057C64 0C0162E1 */ jal func_80058B84 -/* 058868 80057C68 AFA6003C */ sw $a2, 0x3c($sp) -/* 05886C 80057C6C 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 058870 80057C70 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 058874 80057C74 8CE20000 */ lw $v0, ($a3) -/* 058878 80057C78 8FA6003C */ lw $a2, 0x3c($sp) -/* 05887C 80057C7C 10000014 */ b .L80057CD0 -/* 058880 80057C80 00000000 */ nop -glabel L80057C84 -/* 058884 80057C84 C7AC0040 */ lwc1 $f12, 0x40($sp) -/* 058888 80057C88 8FA50038 */ lw $a1, 0x38($sp) -/* 05888C 80057C8C 0C013564 */ jal func_8004D590 -/* 058890 80057C90 AFA6003C */ sw $a2, 0x3c($sp) -/* 058894 80057C94 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 058898 80057C98 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 05889C 80057C9C 8CE20000 */ lw $v0, ($a3) -/* 0588A0 80057CA0 8FA6003C */ lw $a2, 0x3c($sp) -/* 0588A4 80057CA4 1000000A */ b .L80057CD0 -/* 0588A8 80057CA8 00000000 */ nop -glabel L80057CAC -/* 0588AC 80057CAC C7AC0040 */ lwc1 $f12, 0x40($sp) -/* 0588B0 80057CB0 8FA50038 */ lw $a1, 0x38($sp) -/* 0588B4 80057CB4 0C016357 */ jal func_80058D5C -/* 0588B8 80057CB8 AFA6003C */ sw $a2, 0x3c($sp) -/* 0588BC 80057CBC 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 0588C0 80057CC0 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 0588C4 80057CC4 8CE20000 */ lw $v0, ($a3) -/* 0588C8 80057CC8 8FA6003C */ lw $a2, 0x3c($sp) -/* 0588CC 80057CCC 00000000 */ nop -.L80057CD0: -glabel L80057CD0 -/* 0588D0 80057CD0 3C038012 */ lui $v1, %hi(D_8011D586) # $v1, 0x8012 -/* 0588D4 80057CD4 3C01800E */ lui $at, %hi(D_800E68F0 + 4) # $at, 0x800e -/* 0588D8 80057CD8 2463D586 */ addiu $v1, %lo(D_8011D586) # addiu $v1, $v1, -0x2a7a -/* 0588DC 80057CDC C42168F0 */ lwc1 $f1, %lo(D_800E68F0)($at) -/* 0588E0 80057CE0 C42068F4 */ lwc1 $f0, %lo(D_800E68F0 + 4)($at) -/* 0588E4 80057CE4 84790000 */ lh $t9, ($v1) -/* 0588E8 80057CE8 3C01800E */ lui $at, %hi(D_800E68F8 + 4) # $at, 0x800e -/* 0588EC 80057CEC 44992000 */ mtc1 $t9, $f4 -/* 0588F0 80057CF0 C42D68F8 */ lwc1 $f13, %lo(D_800E68F8)($at) -/* 0588F4 80057CF4 C42C68FC */ lwc1 $f12, %lo(D_800E68F8 + 4)($at) -/* 0588F8 80057CF8 468021A0 */ cvt.s.w $f6, $f4 -/* 0588FC 80057CFC 8FA80038 */ lw $t0, 0x38($sp) -/* 058900 80057D00 3C014620 */ li $at, 0x46200000 # 10240.000000 -/* 058904 80057D04 44814000 */ mtc1 $at, $f8 -/* 058908 80057D08 C4D20038 */ lwc1 $f18, 0x38($a2) -/* 05890C 80057D0C C50A000C */ lwc1 $f10, 0xc($t0) -/* 058910 80057D10 46083383 */ div.s $f14, $f6, $f8 -/* 058914 80057D14 46009121 */ cvt.d.s $f4, $f18 -/* 058918 80057D18 46240182 */ mul.d $f6, $f0, $f4 -/* 05891C 80057D1C 46005421 */ cvt.d.s $f16, $f10 -/* 058920 80057D20 C4CA0050 */ lwc1 $f10, 0x50($a2) -/* 058924 80057D24 00000000 */ nop -/* 058928 80057D28 460054A1 */ cvt.d.s $f18, $f10 -/* 05892C 80057D2C 46326102 */ mul.d $f4, $f12, $f18 -/* 058930 80057D30 46268200 */ add.d $f8, $f16, $f6 -/* 058934 80057D34 C446000C */ lwc1 $f6, 0xc($v0) -/* 058938 80057D38 46244400 */ add.d $f16, $f8, $f4 -/* 05893C 80057D3C 460032A1 */ cvt.d.s $f10, $f6 -/* 058940 80057D40 462A8481 */ sub.d $f18, $f16, $f10 -/* 058944 80057D44 460070A1 */ cvt.d.s $f2, $f14 -/* 058948 80057D48 46229202 */ mul.d $f8, $f18, $f2 -/* 05894C 80057D4C 46204120 */ cvt.s.d $f4, $f8 -/* 058950 80057D50 E4440024 */ swc1 $f4, 0x24($v0) -/* 058954 80057D54 8FA90038 */ lw $t1, 0x38($sp) -/* 058958 80057D58 C4CA0040 */ lwc1 $f10, 0x40($a2) -/* 05895C 80057D5C C5260014 */ lwc1 $f6, 0x14($t1) -/* 058960 80057D60 460054A1 */ cvt.d.s $f18, $f10 -/* 058964 80057D64 46320202 */ mul.d $f8, $f0, $f18 -/* 058968 80057D68 46003421 */ cvt.d.s $f16, $f6 -/* 05896C 80057D6C C4C60058 */ lwc1 $f6, 0x58($a2) -/* 058970 80057D70 8CE20000 */ lw $v0, ($a3) -/* 058974 80057D74 460032A1 */ cvt.d.s $f10, $f6 -/* 058978 80057D78 462A6482 */ mul.d $f18, $f12, $f10 -/* 05897C 80057D7C 46288100 */ add.d $f4, $f16, $f8 -/* 058980 80057D80 C4480014 */ lwc1 $f8, 0x14($v0) -/* 058984 80057D84 46322400 */ add.d $f16, $f4, $f18 -/* 058988 80057D88 460041A1 */ cvt.d.s $f6, $f8 -/* 05898C 80057D8C 46268281 */ sub.d $f10, $f16, $f6 -/* 058990 80057D90 46225102 */ mul.d $f4, $f10, $f2 -/* 058994 80057D94 462024A0 */ cvt.s.d $f18, $f4 -/* 058998 80057D98 E452002C */ swc1 $f18, 0x2c($v0) -/* 05899C 80057D9C E7AE0034 */ swc1 $f14, 0x34($sp) -/* 0589A0 80057DA0 E7A2001C */ swc1 $f2, 0x1c($sp) -/* 0589A4 80057DA4 0C00EB2B */ jal func_8003ACAC -/* 0589A8 80057DA8 E7A30018 */ swc1 $f3, 0x18($sp) -/* 0589AC 80057DAC 3C078012 */ lui $a3, %hi(gCameraObject) # $a3, 0x8012 -/* 0589B0 80057DB0 24E7D508 */ addiu $a3, %lo(gCameraObject) # addiu $a3, $a3, -0x2af8 -/* 0589B4 80057DB4 3C01800E */ lui $at, %hi(D_800E6900 + 4) # $at, 0x800e -/* 0589B8 80057DB8 8CE20000 */ lw $v0, ($a3) -/* 0589BC 80057DBC C4316900 */ lwc1 $f17, %lo(D_800E6900)($at) -/* 0589C0 80057DC0 C4306904 */ lwc1 $f16, %lo(D_800E6900 + 4)($at) -/* 0589C4 80057DC4 C44A0010 */ lwc1 $f10, 0x10($v0) -/* 0589C8 80057DC8 46000221 */ cvt.d.s $f8, $f0 -/* 0589CC 80057DCC 46304180 */ add.d $f6, $f8, $f16 -/* 0589D0 80057DD0 C7A30018 */ lwc1 $f3, 0x18($sp) -/* 0589D4 80057DD4 46005121 */ cvt.d.s $f4, $f10 -/* 0589D8 80057DD8 46243481 */ sub.d $f18, $f6, $f4 -/* 0589DC 80057DDC C7A2001C */ lwc1 $f2, 0x1c($sp) -/* 0589E0 80057DE0 C7AE0034 */ lwc1 $f14, 0x34($sp) -/* 0589E4 80057DE4 46229202 */ mul.d $f8, $f18, $f2 -/* 0589E8 80057DE8 3C0E8012 */ lui $t6, %hi(D_8011D540) # $t6, 0x8012 -/* 0589EC 80057DEC 3C038012 */ lui $v1, %hi(D_8011D586) # $v1, 0x8012 -/* 0589F0 80057DF0 2463D586 */ addiu $v1, %lo(D_8011D586) # addiu $v1, $v1, -0x2a7a -/* 0589F4 80057DF4 24182800 */ li $t8, 10240 -/* 0589F8 80057DF8 46204420 */ cvt.s.d $f16, $f8 -/* 0589FC 80057DFC 3C088012 */ lui $t0, %hi(D_8011D583) # $t0, 0x8012 -/* 058A00 80057E00 E4500028 */ swc1 $f16, 0x28($v0) -/* 058A04 80057E04 8CE20000 */ lw $v0, ($a3) -/* 058A08 80057E08 00000000 */ nop -/* 058A0C 80057E0C 844A0002 */ lh $t2, 2($v0) -/* 058A10 80057E10 00000000 */ nop -/* 058A14 80057E14 000A5823 */ negu $t3, $t2 -/* 058A18 80057E18 448B5000 */ mtc1 $t3, $f10 -/* 058A1C 80057E1C 00000000 */ nop -/* 058A20 80057E20 468051A0 */ cvt.s.w $f6, $f10 -/* 058A24 80057E24 460E3102 */ mul.s $f4, $f6, $f14 -/* 058A28 80057E28 444CF800 */ cfc1 $t4, $31 -/* 058A2C 80057E2C 00000000 */ nop -/* 058A30 80057E30 35810003 */ ori $at, $t4, 3 -/* 058A34 80057E34 38210002 */ xori $at, $at, 2 -/* 058A38 80057E38 44C1F800 */ ctc1 $at, $31 -/* 058A3C 80057E3C 00000000 */ nop -/* 058A40 80057E40 460024A4 */ cvt.w.s $f18, $f4 -/* 058A44 80057E44 440D9000 */ mfc1 $t5, $f18 -/* 058A48 80057E48 44CCF800 */ ctc1 $t4, $31 -/* 058A4C 80057E4C A44D0038 */ sh $t5, 0x38($v0) -/* 058A50 80057E50 8CE20000 */ lw $v0, ($a3) -/* 058A54 80057E54 00000000 */ nop -/* 058A58 80057E58 C448000C */ lwc1 $f8, 0xc($v0) -/* 058A5C 80057E5C C4500024 */ lwc1 $f16, 0x24($v0) -/* 058A60 80057E60 00000000 */ nop -/* 058A64 80057E64 46104280 */ add.s $f10, $f8, $f16 -/* 058A68 80057E68 E44A000C */ swc1 $f10, 0xc($v0) -/* 058A6C 80057E6C 8CE20000 */ lw $v0, ($a3) -/* 058A70 80057E70 00000000 */ nop -/* 058A74 80057E74 C4460028 */ lwc1 $f6, 0x28($v0) -/* 058A78 80057E78 C4440030 */ lwc1 $f4, 0x30($v0) -/* 058A7C 80057E7C C4480010 */ lwc1 $f8, 0x10($v0) -/* 058A80 80057E80 46043480 */ add.s $f18, $f6, $f4 -/* 058A84 80057E84 46124400 */ add.s $f16, $f8, $f18 -/* 058A88 80057E88 E4500010 */ swc1 $f16, 0x10($v0) -/* 058A8C 80057E8C 8CE20000 */ lw $v0, ($a3) -/* 058A90 80057E90 00000000 */ nop -/* 058A94 80057E94 C44A0014 */ lwc1 $f10, 0x14($v0) -/* 058A98 80057E98 C446002C */ lwc1 $f6, 0x2c($v0) -/* 058A9C 80057E9C 00000000 */ nop -/* 058AA0 80057EA0 46065100 */ add.s $f4, $f10, $f6 -/* 058AA4 80057EA4 E4440014 */ swc1 $f4, 0x14($v0) -/* 058AA8 80057EA8 8DCED540 */ lw $t6, %lo(D_8011D540)($t6) -/* 058AAC 80057EAC 00000000 */ nop -/* 058AB0 80057EB0 15C0001D */ bnez $t6, .L80057F28 -/* 058AB4 80057EB4 00000000 */ nop -/* 058AB8 80057EB8 846F0000 */ lh $t7, ($v1) -/* 058ABC 80057EBC 3C01800E */ lui $at, %hi(D_800E6908 + 4) # $at, 0x800e -/* 058AC0 80057EC0 15E00019 */ bnez $t7, .L80057F28 -/* 058AC4 80057EC4 00000000 */ nop -/* 058AC8 80057EC8 8CE20000 */ lw $v0, ($a3) -/* 058ACC 80057ECC C4216908 */ lwc1 $f1, %lo(D_800E6908)($at) -/* 058AD0 80057ED0 C4480024 */ lwc1 $f8, 0x24($v0) -/* 058AD4 80057ED4 C420690C */ lwc1 $f0, %lo(D_800E6908 + 4)($at) -/* 058AD8 80057ED8 460044A1 */ cvt.d.s $f18, $f8 -/* 058ADC 80057EDC 46209402 */ mul.d $f16, $f18, $f0 -/* 058AE0 80057EE0 462082A0 */ cvt.s.d $f10, $f16 -/* 058AE4 80057EE4 E44A0024 */ swc1 $f10, 0x24($v0) -/* 058AE8 80057EE8 8CE20000 */ lw $v0, ($a3) -/* 058AEC 80057EEC 00000000 */ nop -/* 058AF0 80057EF0 C4460028 */ lwc1 $f6, 0x28($v0) -/* 058AF4 80057EF4 00000000 */ nop -/* 058AF8 80057EF8 46003121 */ cvt.d.s $f4, $f6 -/* 058AFC 80057EFC 46202202 */ mul.d $f8, $f4, $f0 -/* 058B00 80057F00 462044A0 */ cvt.s.d $f18, $f8 -/* 058B04 80057F04 E4520028 */ swc1 $f18, 0x28($v0) -/* 058B08 80057F08 8CE20000 */ lw $v0, ($a3) -/* 058B0C 80057F0C 00000000 */ nop -/* 058B10 80057F10 C450002C */ lwc1 $f16, 0x2c($v0) -/* 058B14 80057F14 00000000 */ nop -/* 058B18 80057F18 460082A1 */ cvt.d.s $f10, $f16 -/* 058B1C 80057F1C 46205182 */ mul.d $f6, $f10, $f0 -/* 058B20 80057F20 46203120 */ cvt.s.d $f4, $f6 -/* 058B24 80057F24 E444002C */ swc1 $f4, 0x2c($v0) -.L80057F28: -/* 058B28 80057F28 84640000 */ lh $a0, ($v1) -/* 058B2C 80057F2C 00000000 */ nop -/* 058B30 80057F30 28811401 */ slti $at, $a0, 0x1401 -/* 058B34 80057F34 14200002 */ bnez $at, .L80057F40 -/* 058B38 80057F38 00801025 */ move $v0, $a0 -/* 058B3C 80057F3C 03041023 */ subu $v0, $t8, $a0 -.L80057F40: -/* 058B40 80057F40 28410601 */ slti $at, $v0, 0x601 -/* 058B44 80057F44 14200002 */ bnez $at, .L80057F50 -/* 058B48 80057F48 00000000 */ nop -/* 058B4C 80057F4C 24020600 */ li $v0, 1536 -.L80057F50: -/* 058B50 80057F50 8108D583 */ lb $t0, %lo(D_8011D583)($t0) -/* 058B54 80057F54 0002C903 */ sra $t9, $v0, 4 -/* 058B58 80057F58 11000018 */ beqz $t0, .L80057FBC -/* 058B5C 80057F5C 27220004 */ addiu $v0, $t9, 4 -/* 058B60 80057F60 4449F800 */ cfc1 $t1, $31 -/* 058B64 80057F64 C7A80040 */ lwc1 $f8, 0x40($sp) -/* 058B68 80057F68 35210003 */ ori $at, $t1, 3 -/* 058B6C 80057F6C 38210002 */ xori $at, $at, 2 -/* 058B70 80057F70 44C1F800 */ ctc1 $at, $31 -/* 058B74 80057F74 3C018012 */ lui $at, %hi(D_8011D586) # $at, 0x8012 -/* 058B78 80057F78 460044A4 */ cvt.w.s $f18, $f8 -/* 058B7C 80057F7C 240C2800 */ li $t4, 10240 -/* 058B80 80057F80 44059000 */ mfc1 $a1, $f18 -/* 058B84 80057F84 44C9F800 */ ctc1 $t1, $31 -/* 058B88 80057F88 00A20019 */ multu $a1, $v0 -/* 058B8C 80057F8C 00005012 */ mflo $t2 -/* 058B90 80057F90 008A5821 */ addu $t3, $a0, $t2 -/* 058B94 80057F94 A42BD586 */ sh $t3, %lo(D_8011D586)($at) -/* 058B98 80057F98 84640000 */ lh $a0, ($v1) -/* 058B9C 80057F9C 00000000 */ nop -/* 058BA0 80057FA0 28812801 */ slti $at, $a0, 0x2801 -/* 058BA4 80057FA4 14200019 */ bnez $at, .L8005800C -/* 058BA8 80057FA8 00000000 */ nop -/* 058BAC 80057FAC A46C0000 */ sh $t4, ($v1) -/* 058BB0 80057FB0 84640000 */ lh $a0, ($v1) -/* 058BB4 80057FB4 10000016 */ b .L80058010 -/* 058BB8 80057FB8 8CE20000 */ lw $v0, ($a3) -.L80057FBC: -/* 058BBC 80057FBC 444DF800 */ cfc1 $t5, $31 -/* 058BC0 80057FC0 C7B00040 */ lwc1 $f16, 0x40($sp) -/* 058BC4 80057FC4 35A10003 */ ori $at, $t5, 3 -/* 058BC8 80057FC8 38210002 */ xori $at, $at, 2 -/* 058BCC 80057FCC 44C1F800 */ ctc1 $at, $31 -/* 058BD0 80057FD0 3C018012 */ lui $at, %hi(D_8011D586) # $at, 0x8012 -/* 058BD4 80057FD4 460082A4 */ cvt.w.s $f10, $f16 -/* 058BD8 80057FD8 44055000 */ mfc1 $a1, $f10 -/* 058BDC 80057FDC 44CDF800 */ ctc1 $t5, $31 -/* 058BE0 80057FE0 00A20019 */ multu $a1, $v0 -/* 058BE4 80057FE4 00007012 */ mflo $t6 -/* 058BE8 80057FE8 008E7823 */ subu $t7, $a0, $t6 -/* 058BEC 80057FEC A42FD586 */ sh $t7, %lo(D_8011D586)($at) -/* 058BF0 80057FF0 84640000 */ lh $a0, ($v1) -/* 058BF4 80057FF4 00000000 */ nop -/* 058BF8 80057FF8 04810004 */ bgez $a0, .L8005800C -/* 058BFC 80057FFC 00000000 */ nop -/* 058C00 80058000 A4600000 */ sh $zero, ($v1) -/* 058C04 80058004 84640000 */ lh $a0, ($v1) -/* 058C08 80058008 00000000 */ nop -.L8005800C: -/* 058C0C 8005800C 8CE20000 */ lw $v0, ($a3) -.L80058010: -/* 058C10 80058010 3C013FE8 */ li $at, 0x3FE80000 # 1.812500 -/* 058C14 80058014 84580000 */ lh $t8, ($v0) -/* 058C18 80058018 00000000 */ nop -/* 058C1C 8005801C 0304C823 */ subu $t9, $t8, $a0 -/* 058C20 80058020 A4590000 */ sh $t9, ($v0) -/* 058C24 80058024 8CE20000 */ lw $v0, ($a3) -/* 058C28 80058028 00000000 */ nop -/* 058C2C 8005802C 8048003A */ lb $t0, 0x3a($v0) -/* 058C30 80058030 00000000 */ nop -/* 058C34 80058034 01054823 */ subu $t1, $t0, $a1 -/* 058C38 80058038 A049003A */ sb $t1, 0x3a($v0) -/* 058C3C 8005803C 8CE20000 */ lw $v0, ($a3) -/* 058C40 80058040 00000000 */ nop -/* 058C44 80058044 8043003A */ lb $v1, 0x3a($v0) -/* 058C48 80058048 00000000 */ nop -/* 058C4C 8005804C 04610016 */ bgez $v1, .L800580A8 -/* 058C50 80058050 8FBF0014 */ lw $ra, 0x14($sp) -/* 058C54 80058054 44810800 */ mtc1 $at, $f1 -/* 058C58 80058058 44800000 */ mtc1 $zero, $f0 -/* 058C5C 8005805C 00000000 */ nop -/* 058C60 80058060 246A0005 */ addiu $t2, $v1, 5 -.L80058064: -/* 058C64 80058064 A04A003A */ sb $t2, 0x3a($v0) -/* 058C68 80058068 8CE20000 */ lw $v0, ($a3) -/* 058C6C 8005806C 00000000 */ nop -/* 058C70 80058070 C4460030 */ lwc1 $f6, 0x30($v0) -/* 058C74 80058074 00000000 */ nop -/* 058C78 80058078 46003107 */ neg.s $f4, $f6 -/* 058C7C 8005807C 46002221 */ cvt.d.s $f8, $f4 -/* 058C80 80058080 46204482 */ mul.d $f18, $f8, $f0 -/* 058C84 80058084 46209420 */ cvt.s.d $f16, $f18 -/* 058C88 80058088 E4500030 */ swc1 $f16, 0x30($v0) -/* 058C8C 8005808C 8CE20000 */ lw $v0, ($a3) -/* 058C90 80058090 00000000 */ nop -/* 058C94 80058094 8043003A */ lb $v1, 0x3a($v0) -/* 058C98 80058098 00000000 */ nop -/* 058C9C 8005809C 0460FFF1 */ bltz $v1, .L80058064 -/* 058CA0 800580A0 246A0005 */ addiu $t2, $v1, 5 -/* 058CA4 800580A4 8FBF0014 */ lw $ra, 0x14($sp) -.L800580A8: -/* 058CA8 800580A8 27BD0038 */ addiu $sp, $sp, 0x38 -/* 058CAC 800580AC 03E00008 */ jr $ra -/* 058CB0 800580B0 00000000 */ nop - diff --git a/asm/non_matchings/racer/func_80058D5C.s b/asm/non_matchings/racer/func_80058D5C.s deleted file mode 100644 index e3986778..00000000 --- a/asm/non_matchings/racer/func_80058D5C.s +++ /dev/null @@ -1,126 +0,0 @@ -glabel func_80058D5C -/* 05995C 80058D5C 27BDFFC8 */ addiu $sp, $sp, -0x38 -/* 059960 80058D60 AFBF001C */ sw $ra, 0x1c($sp) -/* 059964 80058D64 AFB00018 */ sw $s0, 0x18($sp) -/* 059968 80058D68 E7AC0038 */ swc1 $f12, 0x38($sp) -/* 05996C 80058D6C AFA60040 */ sw $a2, 0x40($sp) -/* 059970 80058D70 80CF01D0 */ lb $t7, 0x1d0($a2) -/* 059974 80058D74 00A03825 */ move $a3, $a1 -/* 059978 80058D78 00A02025 */ move $a0, $a1 -/* 05997C 80058D7C 27A50034 */ addiu $a1, $sp, 0x34 -/* 059980 80058D80 AFA7003C */ sw $a3, 0x3c($sp) -/* 059984 80058D84 0C006F75 */ jal func_8001BDD4 -/* 059988 80058D88 AFAF0034 */ sw $t7, 0x34($sp) -/* 05998C 80058D8C 8FA7003C */ lw $a3, 0x3c($sp) -/* 059990 80058D90 14400007 */ bnez $v0, .L80058DB0 -/* 059994 80058D94 00402025 */ move $a0, $v0 -/* 059998 80058D98 3C108012 */ lui $s0, %hi(gCameraObject) # $s0, 0x8012 -/* 05999C 80058D9C 2610D508 */ addiu $s0, %lo(gCameraObject) # addiu $s0, $s0, -0x2af8 -/* 0599A0 80058DA0 8E190000 */ lw $t9, ($s0) -/* 0599A4 80058DA4 24180005 */ li $t8, 5 -/* 0599A8 80058DA8 10000062 */ b .L80058F34 -/* 0599AC 80058DAC A7380036 */ sh $t8, 0x36($t9) -.L80058DB0: -/* 0599B0 80058DB0 8FA80034 */ lw $t0, 0x34($sp) -/* 0599B4 80058DB4 8FA90040 */ lw $t1, 0x40($sp) -/* 0599B8 80058DB8 3C108012 */ lui $s0, %hi(gCameraObject) # $s0, 0x8012 -/* 0599BC 80058DBC A12801D0 */ sb $t0, 0x1d0($t1) -/* 0599C0 80058DC0 2610D508 */ addiu $s0, %lo(gCameraObject) # addiu $s0, $s0, -0x2af8 -/* 0599C4 80058DC4 8E0A0000 */ lw $t2, ($s0) -/* 0599C8 80058DC8 C484000C */ lwc1 $f4, 0xc($a0) -/* 0599CC 80058DCC 00000000 */ nop -/* 0599D0 80058DD0 E544000C */ swc1 $f4, 0xc($t2) -/* 0599D4 80058DD4 8E0B0000 */ lw $t3, ($s0) -/* 0599D8 80058DD8 C4860010 */ lwc1 $f6, 0x10($a0) -/* 0599DC 80058DDC 00000000 */ nop -/* 0599E0 80058DE0 E5660010 */ swc1 $f6, 0x10($t3) -/* 0599E4 80058DE4 8E0C0000 */ lw $t4, ($s0) -/* 0599E8 80058DE8 C4880014 */ lwc1 $f8, 0x14($a0) -/* 0599EC 80058DEC 00000000 */ nop -/* 0599F0 80058DF0 E5880014 */ swc1 $f8, 0x14($t4) -/* 0599F4 80058DF4 8E030000 */ lw $v1, ($s0) -/* 0599F8 80058DF8 C4E40010 */ lwc1 $f4, 0x10($a3) -/* 0599FC 80058DFC C4720010 */ lwc1 $f18, 0x10($v1) -/* 059A00 80058E00 C4F0000C */ lwc1 $f16, 0xc($a3) -/* 059A04 80058E04 C46A000C */ lwc1 $f10, 0xc($v1) -/* 059A08 80058E08 46049181 */ sub.s $f6, $f18, $f4 -/* 059A0C 80058E0C 46105081 */ sub.s $f2, $f10, $f16 -/* 059A10 80058E10 E7A60028 */ swc1 $f6, 0x28($sp) -/* 059A14 80058E14 C4EA0014 */ lwc1 $f10, 0x14($a3) -/* 059A18 80058E18 C4680014 */ lwc1 $f8, 0x14($v1) -/* 059A1C 80058E1C 46021402 */ mul.s $f16, $f2, $f2 -/* 059A20 80058E20 460A4381 */ sub.s $f14, $f8, $f10 -/* 059A24 80058E24 E7A2002C */ swc1 $f2, 0x2c($sp) -/* 059A28 80058E28 E7AE0024 */ swc1 $f14, 0x24($sp) -/* 059A2C 80058E2C 460E7482 */ mul.s $f18, $f14, $f14 -/* 059A30 80058E30 0C0326B4 */ jal sqrtf -/* 059A34 80058E34 46128300 */ add.s $f12, $f16, $f18 -/* 059A38 80058E38 444DF800 */ cfc1 $t5, $31 -/* 059A3C 80058E3C C7A2002C */ lwc1 $f2, 0x2c($sp) -/* 059A40 80058E40 35A10003 */ ori $at, $t5, 3 -/* 059A44 80058E44 38210002 */ xori $at, $at, 2 -/* 059A48 80058E48 44C1F800 */ ctc1 $at, $31 -/* 059A4C 80058E4C C7AE0024 */ lwc1 $f14, 0x24($sp) -/* 059A50 80058E50 46001124 */ cvt.w.s $f4, $f2 -/* 059A54 80058E54 E7A00020 */ swc1 $f0, 0x20($sp) -/* 059A58 80058E58 44CDF800 */ ctc1 $t5, $31 -/* 059A5C 80058E5C 44042000 */ mfc1 $a0, $f4 -/* 059A60 80058E60 00000000 */ nop -/* 059A64 80058E64 444EF800 */ cfc1 $t6, $31 -/* 059A68 80058E68 00000000 */ nop -/* 059A6C 80058E6C 35C10003 */ ori $at, $t6, 3 -/* 059A70 80058E70 38210002 */ xori $at, $at, 2 -/* 059A74 80058E74 44C1F800 */ ctc1 $at, $31 -/* 059A78 80058E78 00000000 */ nop -/* 059A7C 80058E7C 460071A4 */ cvt.w.s $f6, $f14 -/* 059A80 80058E80 44053000 */ mfc1 $a1, $f6 -/* 059A84 80058E84 44CEF800 */ ctc1 $t6, $31 -/* 059A88 80058E88 0C01C19B */ jal func_8007066C -/* 059A8C 80058E8C 00000000 */ nop -/* 059A90 80058E90 4448F800 */ cfc1 $t0, $31 -/* 059A94 80058E94 8E190000 */ lw $t9, ($s0) -/* 059A98 80058E98 340F8000 */ li $t7, 32768 -/* 059A9C 80058E9C 01E2C023 */ subu $t8, $t7, $v0 -/* 059AA0 80058EA0 35010003 */ ori $at, $t0, 3 -/* 059AA4 80058EA4 38210002 */ xori $at, $at, 2 -/* 059AA8 80058EA8 A7380000 */ sh $t8, ($t9) -/* 059AAC 80058EAC C7A80028 */ lwc1 $f8, 0x28($sp) -/* 059AB0 80058EB0 44C1F800 */ ctc1 $at, $31 -/* 059AB4 80058EB4 C7B00020 */ lwc1 $f16, 0x20($sp) -/* 059AB8 80058EB8 460042A4 */ cvt.w.s $f10, $f8 -/* 059ABC 80058EBC 44C8F800 */ ctc1 $t0, $31 -/* 059AC0 80058EC0 44045000 */ mfc1 $a0, $f10 -/* 059AC4 80058EC4 00000000 */ nop -/* 059AC8 80058EC8 4449F800 */ cfc1 $t1, $31 -/* 059ACC 80058ECC 00000000 */ nop -/* 059AD0 80058ED0 35210003 */ ori $at, $t1, 3 -/* 059AD4 80058ED4 38210002 */ xori $at, $at, 2 -/* 059AD8 80058ED8 44C1F800 */ ctc1 $at, $31 -/* 059ADC 80058EDC 00000000 */ nop -/* 059AE0 80058EE0 460084A4 */ cvt.w.s $f18, $f16 -/* 059AE4 80058EE4 44059000 */ mfc1 $a1, $f18 -/* 059AE8 80058EE8 44C9F800 */ ctc1 $t1, $31 -/* 059AEC 80058EEC 0C01C19B */ jal func_8007066C -/* 059AF0 80058EF0 00000000 */ nop -/* 059AF4 80058EF4 8E0A0000 */ lw $t2, ($s0) -/* 059AF8 80058EF8 00000000 */ nop -/* 059AFC 80058EFC A5420002 */ sh $v0, 2($t2) -/* 059B00 80058F00 8E0B0000 */ lw $t3, ($s0) -/* 059B04 80058F04 00000000 */ nop -/* 059B08 80058F08 A5600004 */ sh $zero, 4($t3) -/* 059B0C 80058F0C 8E030000 */ lw $v1, ($s0) -/* 059B10 80058F10 8FAC0040 */ lw $t4, 0x40($sp) -/* 059B14 80058F14 C46C000C */ lwc1 $f12, 0xc($v1) -/* 059B18 80058F18 8C660014 */ lw $a2, 0x14($v1) -/* 059B1C 80058F1C C58E003C */ lwc1 $f14, 0x3c($t4) -/* 059B20 80058F20 0C00A7C6 */ jal get_level_segment_index_from_position -/* 059B24 80058F24 00000000 */ nop -/* 059B28 80058F28 8E0D0000 */ lw $t5, ($s0) -/* 059B2C 80058F2C 00000000 */ nop -/* 059B30 80058F30 A5A20034 */ sh $v0, 0x34($t5) -.L80058F34: -/* 059B34 80058F34 8FBF001C */ lw $ra, 0x1c($sp) -/* 059B38 80058F38 8FB00018 */ lw $s0, 0x18($sp) -/* 059B3C 80058F3C 03E00008 */ jr $ra -/* 059B40 80058F40 27BD0038 */ addiu $sp, $sp, 0x38 - diff --git a/asm/non_matchings/racer/func_800581E8.s b/asm/non_matchings/racer/update_camera_car.s similarity index 99% rename from asm/non_matchings/racer/func_800581E8.s rename to asm/non_matchings/racer/update_camera_car.s index 81ea8432..80806caf 100644 --- a/asm/non_matchings/racer/func_800581E8.s +++ b/asm/non_matchings/racer/update_camera_car.s @@ -5,7 +5,7 @@ glabel D_800E6918 .double 1.3 .text -glabel func_800581E8 +glabel update_camera_car /* 058DE8 800581E8 27BDFF98 */ addiu $sp, $sp, -0x68 /* 058DEC 800581EC 3C0142F0 */ li $at, 0x42F00000 # 120.000000 /* 058DF0 800581F0 44818000 */ mtc1 $at, $f16 diff --git a/asm/non_matchings/racer/func_8004C2B0.s b/asm/non_matchings/racer/update_camera_plane.s similarity index 99% rename from asm/non_matchings/racer/func_8004C2B0.s rename to asm/non_matchings/racer/update_camera_plane.s index 3e614576..88ba7de3 100644 --- a/asm/non_matchings/racer/func_8004C2B0.s +++ b/asm/non_matchings/racer/update_camera_plane.s @@ -12,7 +12,7 @@ glabel D_800E6578 .double 0.2 .text -glabel func_8004C2B0 +glabel update_camera_plane /* 04CEB0 8004C2B0 3C014348 */ li $at, 0x43480000 # 200.000000 /* 04CEB4 8004C2B4 44810000 */ mtc1 $at, $f0 /* 04CEB8 8004C2B8 3C0142F0 */ li $at, 0x42F00000 # 120.000000 diff --git a/include/enums.h b/include/enums.h index 048c97d6..de27cf2c 100644 --- a/include/enums.h +++ b/include/enums.h @@ -11,6 +11,17 @@ typedef enum Vehicle { NUMBER_OF_VEHICLE_TYPES } Vehicle; +typedef enum CameraMode { + CAMERA_CAR, + CAMERA_PLANE, + CAMERA_UNUSED, + CAMERA_FIXED, + CAMERA_HOVERCRAFT, + CAMERA_FINISH_CHALLENGE, + CAMERA_LOOP, + CAMERA_FINISH_RACE +} CameraMode; + typedef enum Language { LANGUAGE_ENGLISH, LANGUAGE_GERMAN, diff --git a/include/math_util.h b/include/math_util.h index ece8f218..b34b498d 100644 --- a/include/math_util.h +++ b/include/math_util.h @@ -4,8 +4,26 @@ #include "types.h" #include "structs.h" -extern s16 arctan2_f(f32 y, f32 x); -extern f32 sine_s(s16 angle); -extern f32 cosine_s(s16 angle); +/** + * Keeps the value within the range. + */ +#define CLAMP(x, low, high) { \ + if ((x) > (high)) (x) = (high); \ + if ((x) < (low)) (x) = (low); \ +} +/** + * Allows an arbitrary range the number can wrap around. + * Often used for angles, to keep them within s16 bounds while stored in an s32. + */ +#define WRAP(x, low, high) { \ + if ((x) > (high)) (x) -= ((high) * 2) - 1; \ + if ((x) < (low)) (x) += ((high) * 2) - 1; \ +} + +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*, s32, s32*); #endif // MATH_UTIL_H diff --git a/include/structs.h b/include/structs.h index d0b9a54e..eb92488d 100644 --- a/include/structs.h +++ b/include/structs.h @@ -209,7 +209,7 @@ typedef struct PulsatingLightData { typedef struct LevelHeader { /* 0x00 */ s8 world; /* 0x01 */ u8 unk1; - /* 0x02 */ u8 unk2; + /* 0x02 */ s8 unk2; /* 0x03 */ u8 unk3; /* 0x04 */ u8 unk4[4]; @@ -219,7 +219,9 @@ typedef struct LevelHeader { /* 0x20 */ s32 *unk20; - /* 0x24 */ u8 pad24[0x10]; + /* 0x24 */ u8 pad24[6]; + /* 0x2A */ u8 unk2A; + /* 0x2B */ u8 pad2B[9]; /* 0x34 */ s16 geometry; /* 0x36 */ s16 collectables; // Objects such as bananas, balloons, etc. @@ -512,7 +514,8 @@ typedef struct ObjectHeader { /* 0x55 */ s8 numberOfModelIds; // size of array pointed by Object->unk68 u8 pad56; /* 0x57 */ s8 unk57; - u8 pad58[0x2]; + s8 unk58; + u8 pad59; /* 0x5A */ s8 unk5A; u8 pad5B[0x5]; /* 0x60 */ char internalName[16]; @@ -805,11 +808,11 @@ typedef struct Object_Racer { /* 0x002 */ u8 unk2; /* 0x003 */ s8 characterId; // Affects minimap color, horn, voice, etc. /* 0x004 */ s32 unk4; - /* 0x008 */ s32 unk8; + /* 0x008 */ f32 unk8; /* 0x00C */ s32 unkC; - /* 0x010 */ s32 unk10; - /* 0x014 */ s32 unk14; - /* 0x018 */ s32 unk18; + /* 0x010 */ f32 unk10; + /* 0x014 */ f32 unk14; + /* 0x018 */ f32 unk18; /* 0x01C */ s32 unk1C; /* 0x020 */ s32 unk20; /* 0x024 */ s32 unk24; @@ -833,7 +836,7 @@ typedef struct Object_Racer { /* 0x068 */ s32 unk68; /* 0x06C */ s32 unk6C; /* 0x070 */ s32 unk70; - /* 0x074 */ s32 unk74; + /* 0x074 */ f32 unk74; /* 0x078 */ f32 unk78; /* 0x07C */ f32 unk7C; /* 0x080 */ f32 unk80; @@ -858,31 +861,23 @@ typedef struct Object_Racer { /* 0x0CC */ f32 unkCC; /* 0x0D0 */ f32 unkD0; /* 0x0D4 */ s32 unkD4; - /* 0x0D8 */ f32 unkD8; - /* 0x0DC */ f32 unkDC; - /* 0x0E0 */ f32 unkE0; - /* 0x0E4 */ f32 unkE4; - /* 0x0E8 */ f32 unkE8; - /* 0x0EC */ f32 unkEC; - /* 0x0F0 */ f32 unkF0; - /* 0x0F4 */ f32 unkF4; - /* 0x0F8 */ f32 unkF8; - /* 0x0FC */ f32 unkFC; - /* 0x100 */ f32 unk100; - /* 0x104 */ f32 unk104; + /* 0x0D8 */ f32 unkD8[3]; + /* 0x0E4 */ f32 unkE4[3]; + /* 0x0F0 */ f32 unkF0[3]; + /* 0x0FC */ f32 unkFC[3]; /* 0x108 */ s32 unk108; /* 0x10C */ s32 unk10C; /* 0x110 */ s32 unk110; /* 0x114 */ s32 unk114; /* 0x118 */ s32 unk118; - /* 0x11C */ s32 unk11C; - /* 0x120 */ s32 unk120; + /* 0x11C */ f32 unk11C; + /* 0x120 */ f32 unk120; /* 0x124 */ f32 unk124; /* 0x128 */ u32 lap_times[3]; /* 0x134 */ s32 unk134; /* 0x138 */ s32 unk138; /* 0x13C */ s32 unk13C; - /* 0x140 */ s32 unk140; + /* 0x140 */ struct Object *unk140; /* 0x144 */ struct Object *held_obj; /* 0x148 */ struct Object *unk148; /* 0x14C */ struct Object *unk14C; @@ -899,29 +894,33 @@ typedef struct Object_Racer { /* 0x166 */ s16 unk16C; // As for these, they seem to affect the turning direction of the racer's head. /* 0x16E */ s16 unk16E; /* 0x170 */ s16 unk170; - /* 0x172 */ u8 balloon_type; - /* 0x173 */ u8 balloon_quantity; - /* 0x174 */ u8 balloon_level; - /* 0x175 */ u8 unk175; + /* 0x172 */ s8 balloon_type; + /* 0x173 */ s8 balloon_quantity; + /* 0x174 */ s8 balloon_level; + /* 0x175 */ s8 unk175; /* 0x176 */ s16 unk176; /* 0x178 */ s32 unk178; /* 0x17C */ s32 unk17C; /* 0x180 */ s32 unk180; - /* 0x184 */ s8 pad184; + /* 0x184 */ s8 unk184; /* 0x185 */ s8 bananas; /* 0x186 */ u8 unk186; /* 0x187 */ s8 unk187; - /* 0x188 */ s32 unk188; + /* 0x188 */ s8 unk188; + /* 0x189 */ s8 unk189; + /* 0x18A */ s8 unk18A; + /* 0x18B */ s8 unk18B; /* 0x18C */ s16 unk18C; /* 0x18E */ s16 unk18E; - /* 0x190 */ u16 unk190; - /* 0x192 */ u8 unk192; + /* 0x190 */ s16 unk190; + /* 0x192 */ s8 unk192; /* 0x193 */ s8 unk193; /* 0x194 */ s8 unk194; /* 0x195 */ s8 unk195; /* 0x196 */ s16 unk196; /* 0x198 */ s32 unk198; - /* 0x19C */ s32 unk19C; + /* 0x19C */ s16 unk19C; + /* 0x19E */ s16 unk19E; /* 0x1A0 */ s16 unk1A0; /* 0x1A2 */ s16 unk1A2; /* 0x1A4 */ s16 unk1A4; @@ -947,20 +946,20 @@ typedef struct Object_Racer { /* 0x1CD */ u8 unk1CD; /* 0x1CE */ u8 unk1CE; /* 0x1CF */ s8 unk1CF; - /* 0x1D0 */ u8 unk1D0; + /* 0x1D0 */ s8 spectateCamID; /* 0x1D1 */ u8 unk1D1; - /* 0x1D2 */ u8 unk1D2; + /* 0x1D2 */ s8 unk1D2; /* 0x1D3 */ s8 unk1D3; /* 0x1D4 */ u8 unk1D4; /* 0x1D5 */ u8 unk1D5; /* 0x1D6 */ s8 unk1D6; /* 0x1D7 */ s8 unk1D7; - /* 0x1D8 */ s8 unk1D8; + /* 0x1D8 */ s8 raceStatus; /* 0x1D9 */ u8 unk1D9; /* 0x1DA */ u8 unk1DA; /* 0x1DB */ s8 spinout_timer; /* 0x1DC */ u8 wheel_surfaces[4]; - /* 0x1E0 */ u8 unk1E0; + /* 0x1E0 */ s8 unk1E0; /* 0x1E1 */ s8 unk1E1; /* 0x1E2 */ s8 unk1E2; /* 0x1E3 */ s8 unk1E3; @@ -1005,7 +1004,7 @@ typedef struct Object_Racer { /* 0x20D */ u8 unk20D; /* 0x20E */ s16 unk20E; /* 0x210 */ s8 unk210; - /* 0x211 */ u8 unk211; + /* 0x211 */ s8 unk211; /* 0x212 */ u8 unk212; /* 0x213 */ s8 unk213; /* 0x214 */ s8 unk214; diff --git a/src/game_ui.c b/src/game_ui.c index a4f9bc72..b73e1c0c 100644 --- a/src/game_ui.c +++ b/src/game_ui.c @@ -10,6 +10,7 @@ #include "game.h" #include "audio.h" #include "textures_sprites.h" +#include "racer.h" extern u32 osTvType; @@ -285,7 +286,7 @@ void func_800A0DC0(s32 arg0, Object *arg1, s32 arg2) { func_800A4C44(temp, arg2); func_800A3884(arg1, arg2); - if (D_80127188 != 0 && temp->unk1D8 == 0) { + if (D_80127188 != 0 && temp->raceStatus == STATUS_RACING) { func_800A47A0(temp, arg2); } @@ -298,7 +299,7 @@ GLOBAL_ASM("asm/non_matchings/game_ui/func_800A1248.s") void func_800A1428(s32 arg0, Object *arg1, s32 arg2) { Object_Racer *temp = &arg1->unk64->racer; - if (temp->unk1D8 == 0) { + if (temp->raceStatus == STATUS_RACING) { func_80068508(1); func_800A3CE4(arg0, arg2); func_800A7520(arg1, arg2); diff --git a/src/object_functions.c b/src/object_functions.c index 97fbdd57..b804adb9 100644 --- a/src/object_functions.c +++ b/src/object_functions.c @@ -876,7 +876,7 @@ void obj_loop_groundzipper(Object *obj, UNUSED s32 speed) { if (racerObj64->unk20C) { racerObj64->unk203 |= 4; } - if (racerObj64->unk1D8 == 0) { + if (racerObj64->raceStatus == STATUS_RACING) { func_80072348(racerObj64->playerIndex, 8); } } diff --git a/src/particles.h b/src/particles.h index afd0335b..6cc5ef78 100644 --- a/src/particles.h +++ b/src/particles.h @@ -136,5 +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 #endif diff --git a/src/racer.c b/src/racer.c index e8dd172f..7d8844c7 100644 --- a/src/racer.c +++ b/src/racer.c @@ -23,6 +23,12 @@ #define MAX_NUMBER_OF_GHOST_NODES 360 +/** + * This file features extensive use of CLAMP and WRAP. + * CLAMP will keep the value within the two ranges. + * WRAP will "overflow" the value. Used to keep angles within s16 bounds. + */ + /************ .data ************/ s32 gObjLoopGoldenBalloonLength = 0x310; @@ -136,7 +142,7 @@ const char D_800E62A0[] = "Back\n"; /************ .bss ************/ -s32 D_8011D4F0[2]; +f32 D_8011D4F0[2]; s32 D_8011D4F8[3]; s32 D_8011D504; ObjectCamera *gCameraObject; @@ -150,8 +156,8 @@ s32 gCurrentStickY; s32 D_8011D53C; s32 D_8011D540; f32 D_8011D544; -s32 D_8011D548; -s32 D_8011D54C; +f32 D_8011D548; +f32 D_8011D54C; s16 D_8011D550; s8 D_8011D552; s8 D_8011D553; @@ -163,10 +169,10 @@ s16 D_8011D562; s32 D_8011D564; s32 D_8011D568; s32 D_8011D56C; -s32 D_8011D570; -s32 D_8011D574; -s32 D_8011D578; -s32 D_8011D57C; +f32 D_8011D570; +f32 D_8011D574; +f32 D_8011D578; +f32 D_8011D57C; s8 D_8011D580; s8 D_8011D581; s8 D_8011D582; @@ -193,23 +199,7 @@ s16 D_8011D5B8; GLOBAL_ASM("asm/non_matchings/racer/func_80042D20.s") -typedef struct Object_64_Unknown5 { - u8 pad0[0x88]; - u8 unk89; - u8 pad90[0xE9]; - s8 unk172; - s8 unk173; - s8 unk174; - u8 pad175[0x5E]; - s8 unk1D3; -} Object_64_Unknown5; - -typedef struct TempStruct5 { - s8 pad0[8]; - s8 unk8[4][4]; -} TempStruct5; - -void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 arg2) { +void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 updateRate) { TempStruct5 *temp_v0; s8 *test; s8 phi_a0; @@ -232,7 +222,7 @@ void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 arg2) { D_8011D5BB = 1; } if (!(gCurrentCarInput & A_BUTTON)) { - D_8011D5BA += arg2; + D_8011D5BA += updateRate; } } else { D_8011D5BB = 0; @@ -280,7 +270,7 @@ void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 arg2) { } // Might be the main loop for the AI racers. -void func_80044170(Object *arg0, Object_Racer *arg1, s32 arg2) { +void func_80044170(Object *obj, Object_Racer *racer, s32 updateRate) { s32 raceType; raceType = get_current_level_race_type(); @@ -288,51 +278,50 @@ void func_80044170(Object *arg0, Object_Racer *arg1, s32 arg2) { switch (raceType) { case RACETYPE_CHALLENGE_BATTLE: case RACETYPE_CHALLENGE_BANANAS: - func_8004447C(arg0, arg1, arg2); + func_8004447C(obj, racer, updateRate); break; case RACETYPE_CHALLENGE_EGGS: - func_800452A0(arg0, arg1, arg2); + func_800452A0(obj, racer, updateRate); break; default: - // last argument was required for match, might not really exist - func_80045C48(arg0, arg1, arg2, raceType); + func_80045C48(obj, racer, updateRate); break; } - if (arg1->unk214 == 0 && arg1->velocity < -0.5) { - arg1->unk215 -= arg2; - if (arg1->unk215 < 0) { - arg1->unk215 = 0; + if (racer->unk214 == 0 && racer->velocity < -0.5) { + racer->unk215 -= updateRate; + if (racer->unk215 < 0) { + racer->unk215 = 0; } } - if (arg1->velocity > -1.0 && arg1->unk214 == 0 && D_8011D540 == 0 && D_8011D544 == 0.0f && arg1->unk1E2 != 0 && arg1->unk215 == 0) { - arg1->unk213 += arg2; + if (racer->velocity > -1.0 && racer->unk214 == 0 && !D_8011D540 && D_8011D544 == 0.0f && racer->unk1E2 && racer->unk215 == 0) { + racer->unk213 += updateRate; - if (arg1->unk213 > 60) { - arg1->unk213 = 0; - arg1->unk214 = 60; - arg1->unk215 = 120; + if (racer->unk213 > 60) { + racer->unk213 = 0; + racer->unk214 = 60; + racer->unk215 = 120; - if ((raceType & RACETYPE_CHALLENGE) == 0) { - arg1->unk1CA = (arg1->unk1CA + 1) & 3; + if (!(raceType & RACETYPE_CHALLENGE)) { + racer->unk1CA = (racer->unk1CA + 1) & 3; } else if (raceType == RACETYPE_CHALLENGE_BATTLE || raceType == RACETYPE_CHALLENGE_BANANAS) { - if (arg1->unk1CE != 0xFF) { - arg1->unk154 = func_8001D214(arg1->unk1CE); + if (racer->unk1CE != 0xFF) { + racer->unk154 = func_8001D214(racer->unk1CE); } } } } else { - arg1->unk214 -= arg2; - arg1->unk213 = 0; + racer->unk214 -= updateRate; + racer->unk213 = 0; - if (arg1->unk214 < 0) { - arg1->unk214 = 0; + if (racer->unk214 < 0) { + racer->unk214 = 0; } } // Kick it into reverse. - if (arg1->unk214 != 0) { + if (racer->unk214 != 0) { gCurrentStickX *= -1; gCurrentCarInput &= ~A_BUTTON; gCurrentStickY = -50; @@ -340,29 +329,17 @@ void func_80044170(Object *arg0, Object_Racer *arg1, s32 arg2) { } // Cap stick inputs. - if (gCurrentStickX > 75) { - gCurrentStickX = 75; - } - - if (gCurrentStickX < -75) { - gCurrentStickX = -75; - } - - if (gCurrentStickY > 75) { - gCurrentStickY = 75; - } - - if (gCurrentStickY < -75) { - gCurrentStickY = -75; - } + CLAMP(gCurrentStickX, -75, 75); + CLAMP(gCurrentStickY, -75, 75); } -s32 func_80044450(s32 arg0) { - return get_random_number_from_range(0, 99) < arg0; +s32 func_80044450(s32 cap) { + return get_random_number_from_range(0, 99) < cap; } GLOBAL_ASM("asm/non_matchings/racer/func_8004447C.s") +// Still don't know what this really is. struct TempStruct2 { Object *unk0[4]; u8 pad10[0x1BF]; @@ -389,7 +366,145 @@ GLOBAL_ASM("asm/non_matchings/racer/func_800452A0.s") GLOBAL_ASM("asm/non_matchings/racer/func_80045C48.s") GLOBAL_ASM("asm/non_matchings/racer/func_80046524.s") GLOBAL_ASM("asm/non_matchings/racer/func_80048C7C.s") -GLOBAL_ASM("asm/non_matchings/racer/func_80048E64.s") + +/** + * Handles the camera movement when the player is driving a hovercraft. + * Since the hovercraft has very floaty controls, the camera movement is much slower to compensate. + */ +void update_camera_hovercraft(f32 updateRate, Object *obj, Object_Racer *racer) { + f32 yVel; + s32 numViewports; + u8 tempZoom; + f32 tempVel_3; + s32 pad; + f32 phi_f14 = 165.0f; + f32 phi_f18 = 65.0f; + f32 xVel; + f32 zVel; + f32 yOffset; + f32 sp34; + f32 extraOffset; + f32 brakeVar; + f32 baseSpeed; + s32 sp24 = 0x400; + s32 delta; + s32 angle; + s32 segmentIndex; + s32 tempAngle; + f32 anotherVel; + + delta = (s32) updateRate; + // Place the camera a bit closer with 2+ players to help visibility. + numViewports = get_viewport_count(); + if (numViewports == 1) { + phi_f14 = 200.0f; + phi_f18 = 51.0f; + sp24 = 0x280; + } else if (numViewports > 1) { + phi_f14 = 130.0f; + phi_f18 = 50.0f; + } + brakeVar = racer->brake; + tempZoom = gCameraObject->zoom; + baseSpeed = racer->unk8; + switch (gCameraObject->zoom) { + case 1: + phi_f14 += 35.0f; + break; + case 2: + phi_f14 -= 35.0f; + phi_f18 -= 10.0f; + break; + case 3: + phi_f14 -= 53.0f; + phi_f18 -= 5.0f; + baseSpeed *= 0.250; + brakeVar = 0.0f; + break; + } + if (racer->unk1E4 == 0) { + angle = (obj->segment.trans.x_rotation); + if (angle > 0) { + angle -= 0x61C; + if (angle < 0) { + angle = 0; + } + angle >>= 1; + } else { + angle += 0x61C; + if (angle > tempZoom * 0) { + angle = 0; + } + } + angle = sp24 - angle; + tempAngle = angle - (u16) gCameraObject->trans.x_rotation; + WRAP(tempAngle, -0x8000, 0x8000); + gCameraObject->trans.x_rotation += (tempAngle * delta) >> 4; + } + get_viewport_count(); + if (racer->velocity < 0.0) { + yVel = -(racer->velocity * brakeVar) * 6.0f; + if (racer->velocity); + if (yVel > 65.0) { + yVel = 65.0f; + } + phi_f14 -= yVel; + } + phi_f14 += baseSpeed * 30.0f; + if (D_8011D540 == 0) { + if (func_8000C8B4(36) < racer->unk1D3) { + phi_f14 = -30.0f; + } else if (racer->unk1D3 > 0) { + phi_f14 = 180.0f; + } + } + if (D_8011D540 > 80) { + gCameraObject->unk1C = phi_f14; + gCameraObject->unk20 = phi_f18; + } + gCameraObject->unk1C += (phi_f14 - gCameraObject->unk1C) * 0.125; + gCameraObject->unk20 += (phi_f18 - gCameraObject->unk20) * 0.125; + sp34 = cosine_s(gCameraObject->trans.x_rotation - sp24); + phi_f18 = sine_s(gCameraObject->trans.x_rotation - sp24); + phi_f18 = (gCameraObject->unk1C * sp34) + (gCameraObject->unk20 * phi_f18); + xVel = cosine_s(-racer->unk196 + 0x8000) * gCameraObject->unk1C; + zVel = sine_s(-racer->unk196 + 0x8000) * gCameraObject->unk1C; + yVel = (1.0 - (D_8011D586 / 10240.0f)); + xVel -= racer->ox1 * 10.0f * yVel; + zVel -= racer->oz1 * 10.0f * yVel; + yVel = racer->lateral_velocity * 2; + racer->unkC8 -= (racer->unkC8 - yVel) * 0.25; + yVel = cosine_s(racer->unk196 + 0x4000) * racer->unkC8; + gCameraObject->trans.x_position = obj->segment.trans.x_position + xVel + yVel; + yVel = gCameraObject->trans.y_position - (obj->segment.trans.y_position + phi_f18); + if (yVel > 0.0f) { + yVel *= 0.5; + } else { + if (D_8011D53C == 1) { + yVel *= 0.5; + } else { + yVel *= 0.25; + } + if (racer->unk1D3 != 0) { + yVel *= 2.0; + } + } + gCameraObject->trans.y_position -= yVel; + gCameraObject->trans.z_rotation = 0; + if (D_8011D540) { + gCameraObject->trans.y_position = obj->segment.trans.y_position + phi_f18; + } + + // Unused function call that wasn't fully optimised out. + sine_s(racer->unk196 + 0x4000); + gCameraObject->trans.z_position = obj->segment.trans.z_position + zVel; + gCameraObject->trans.y_rotation = racer->unk196; + segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, gCameraObject->trans.y_position, gCameraObject->trans.z_position); + if (segmentIndex != -1) { + gCameraObject->unk34 = segmentIndex; + } +} + GLOBAL_ASM("asm/non_matchings/racer/func_800494E0.s") GLOBAL_ASM("asm/non_matchings/racer/func_80049794.s") @@ -408,8 +523,8 @@ void func_8004C0A0(s32 arg0, Object *planeObj, Object_Racer *planeObj64) { if (phi_v0 < 0) { phi_v0 = 0; } - if (phi_v0 >= 0x4A) { - phi_v0 = 0x49; + if (phi_v0 > 73) { + phi_v0 = 73; } temp_v1 = phi_v0 - planeObj->segment.unk18; phi_v0 = 0; @@ -429,81 +544,354 @@ void func_8004C0A0(s32 arg0, Object *planeObj, Object_Racer *planeObj64) { } } -void func_8004C140(Object *obj, Object_Racer *obj64) { - s8 phi_v1; +void func_8004C140(Object *obj, Object_Racer *racer) { + s8 bananas; s8 temp; - if (obj64->playerIndex == -1) { - phi_v1 = 0; + if (racer->playerIndex == PLAYER_COMPUTER) { + bananas = 0; } else { - phi_v1 = obj64->bananas; + bananas = racer->bananas; } - temp = obj64->unk187; - if (temp == 0 || obj64->unk18E > 0) { - obj64->unk187 = 0; + temp = racer->unk187; + if (temp == 0 || racer->unk18E > 0) { + racer->unk187 = 0; return; } if (temp != 4) { - func_800576E0(obj, obj64, 2); + func_800576E0(obj, racer, 2); } - obj64->unk18C = 360; - if (obj64->unk1C9 == 8) { - obj64->unk1C9 = 0; + racer->unk18C = 360; + if (racer->unk1C9 == 8) { + racer->unk1C9 = 0; } - if (obj64->unk1D6 < 5) { + if (racer->unk1D6 < 5) { func_800570B8(obj, 450, 8, 129); - switch (obj64->unk187) { + switch (racer->unk187) { case 1: case 2: - if (phi_v1 != 0) { - obj64->spinout_timer = 40; + if (bananas != 0) { + racer->spinout_timer = 40; } else { - obj64->spinout_timer = 60; + racer->spinout_timer = 60; } break; case 3: - if (phi_v1 != 0) { - obj64->spinout_timer = 40; + if (bananas != 0) { + racer->spinout_timer = 40; } else { - obj64->spinout_timer = 60; + racer->spinout_timer = 60; } break; case 6: - obj64->unk204 = 120; + racer->unk204 = 120; obj->segment.x_velocity *= 0.7; obj->segment.z_velocity *= 0.7; break; } - obj64->unk187 = 0; + racer->unk187 = 0; } } -GLOBAL_ASM("asm/non_matchings/racer/func_8004C2B0.s") -GLOBAL_ASM("asm/non_matchings/racer/func_8004CC20.s") -GLOBAL_ASM("asm/non_matchings/racer/func_8004D590.s") -void func_8004D95C(s32 arg0, s32 arg1, Object *obj, Object_Racer *obj64) { +#ifdef NON_EQUIVALENT +void update_camera_plane(f32 updateRate, Object* obj, Object_Racer* racer) { + s32 segmentIndex; + f32 baseSpeed; + f32 tempVel; + f32 yOffset; + f32 yVel; + s32 angle; + f32 temp_f16; + f32 baseFloat1 = 120.0f; + s32 angleVel; + f32 xOffset; + f32 zOffset; + f32 baseFloat2 = 45.0f; + f32 phi_f14; + f32 brakeVar = 0.0f; + s32 numViewports; + f32 baseFloat3; + s32 delta; + + delta = (s32) updateRate; + temp_f16 = D_8011D4F0[0]; + temp_f16 = 200.0f - (obj->segment.trans.y_position + (-temp_f16)); + if (temp_f16 < 0.0f) { + temp_f16 = 0.0f; + } + if (temp_f16 > 200.0f) { + temp_f16 = 200.0f; + } + numViewports = get_viewport_count(); + if (numViewports == 1) { + baseFloat2 = 180.0f; + baseFloat1 = 50.0f; + } else if (numViewports > 1) { + baseFloat2 = 110.0f; + baseFloat1 = 42.0f; + } + if (((!(gCurrentCarInput & 0x10)) || racer->unk1E2 < 3) && !racer->unk1F5) { + angle = (-racer->unk1A0 - (racer->unk196 & 0xFFFF)) + 0x8000; + if (angle > 0x8000) { + angle -= 0xFFFF; + } + angle = angle; + if (angle < -0x8000) { + angle += 0xFFFF; + } + if (racer->camera_zoom < 0.4) { + racer->camera_zoom += 0.005; + } else { + racer->camera_zoom = 0.4f; + } + angleVel = angle * racer->camera_zoom; + if (angleVel > 0x200) { + angleVel = 0x200; + } + if (angleVel < -0x200) { + angleVel = -0x200; + } + angleVel *= delta; + if (angle < 0 && angleVel < angle) { + angleVel = angle; + } + if (angle > 0 && angle < angleVel) { + angleVel = angle; + } + racer->unk196 += angleVel; + } else { + racer->camera_zoom = 0.0f; + } + if (D_8011D586) { + racer->unk196 = 0x8000 - racer->unk1A0; + } + if (racer->unk1E0 == 2 || racer->unk1E0 == -2) { + angle = 0; + } else { + angle = obj->segment.trans.x_rotation; + if (angle > 0x3000) { + angle = 0x3000; + } + if (angle < -0x3000) { + angle = -0x3000; + } + } + angle = -(angle - ((s32) (temp_f16 * 10.0f))); + angle = angle - ((u16) gCameraObject->trans.x_rotation); + if (angle > 0x8000) { + angle -= 0xFFFF; + } + if (angle < -0x8000) { + angle += 0xFFFF; + } + gCameraObject->trans.x_rotation += ((angle * delta) >> 4); + brakeVar = racer->brake; + baseSpeed = racer->unk8; + switch (gCameraObject->zoom) { + case 1: + baseFloat2 += 35.0f; + break; + case 2: + baseFloat1 -= 10.0f; + baseFloat2 -= 35.0f; + break; + case 3: + baseFloat2 -= 53.0f; + baseFloat1 -= 5.0f; + baseSpeed *= 0.25; + brakeVar = 0.0f; + break; + } + if (numViewports < 2) { + phi_f14 = baseSpeed * 60.0f; + phi_f14 = baseFloat2 + phi_f14; + } else { + phi_f14 = baseSpeed * 30.0f; + phi_f14 = baseFloat2 + phi_f14; + } + if (racer->velocity < 0.0 && !racer->unk1E2) { + tempVel = -(racer->velocity * brakeVar); + tempVel = tempVel * 6.0f; + if (65.0 < tempVel) { + tempVel = 65.0f; + } + if (yOffset); + phi_f14 -= tempVel; + } + if (!D_8011D540) { + if (func_8000C8B4(36) < racer->unk1D3) { + phi_f14 = -30.0f; + } else if (racer->unk1D3 > 0) { + phi_f14 = 180.0f; + } + } + if (D_8011D540 > 80) { + gCameraObject->unk1C = phi_f14; + gCameraObject->unk20 = baseFloat1; + } + gCameraObject->unk1C += (phi_f14 - gCameraObject->unk1C) * 0.125; + gCameraObject->unk20 += (baseFloat1 - gCameraObject->unk20) * 0.125; + phi_f14 = cosine_s(gCameraObject->trans.x_rotation - 0x400); + xOffset = sine_s(gCameraObject->trans.x_rotation - 0x400); + baseFloat3 = phi_f14; + baseFloat2 = (gCameraObject->unk1C * baseFloat3) - (gCameraObject->unk20 * xOffset); + baseFloat1 = ((gCameraObject->unk1C) * (gCameraObject->unk1C)); + baseFloat1 += (gCameraObject->unk20 * baseFloat3); + xOffset = cosine_s(0x8000 - racer->unk196) * baseFloat2; + zOffset = sine_s(0x8000 - racer->unk196) * baseFloat2; + yVel = cosine_s(racer->unk196 + 0x4000) * 3.0f; + yVel = yVel * racer->lateral_velocity; + gCameraObject->trans.x_position = (obj->segment.trans.x_position + xOffset) + yVel; + temp_f16 = obj->segment.trans.y_position; + yOffset = gCameraObject->trans.y_position - (temp_f16 + baseFloat1); + if (racer->unk1E0 == 1 || racer->unk1E0 == -1) { + racer->unk74 = 8.0; + } + if (racer->unk1E0 == 2 || racer->unk1E0 == -2) { + racer->unk74 = 8.0; + } + if (racer->unk74 > 2.0) { + racer->unk74 -= 0.2; + } else { + racer->unk74 = 2.0; + } + yVel = racer->unk74; + yVel = (yOffset * updateRate) / yVel; + if (yVel > 0.0f && yOffset < yVel) { + yVel = yOffset; + } + if (yVel < 0.0f && yVel < yOffset) { + yVel = yOffset; + } + gCameraObject->trans.y_position -= yVel; + gCameraObject->trans.z_position = zOffset + obj->segment.trans.z_position + (-sine_s(racer->unk196 + 0x4000) * 3.0f * racer->lateral_velocity); + gCameraObject->trans.y_rotation = racer->unk196; + if (racer->unk1E0 || D_8011D586) { + angle = -(u16) gCameraObject->trans.z_rotation; + if (angle > 0x8000) { + angle -= 0xFFFF; + } + if (angle < -0x8000) { + angle += 0xFFFF; + } + gCameraObject->trans.z_rotation += angle >> 2; + } else { + angle = (u16) gCameraObject->trans.z_rotation; + angle = angle + (-(racer->unk1A4 >> 4)); + if (angle > 0x8000) { + angle -= 0xFFFF; + } + if (angle < -0x8000) { + angle += 0xFFFF; + } + gCameraObject->trans.z_rotation += angle >> 3; + } + tempVel = gCameraObject->trans.x_position; + segmentIndex = get_level_segment_index_from_position(tempVel, gCameraObject->trans.y_position, gCameraObject->trans.z_position); + if (segmentIndex != -1) { + gCameraObject->unk34 = segmentIndex; + } + racer->unk196 = gCameraObject->trans.y_rotation; +} +#else +GLOBAL_ASM("asm/non_matchings/racer/update_camera_plane.s") +#endif + + +GLOBAL_ASM("asm/non_matchings/racer/func_8004CC20.s") + +/** + * Handles the camera movement when the player is on a loop-the-loop. + * This happens in Walrus Cove and Darkmoon Caverns. + * The camera's rotation follows the players exactly, in order to stay levelled. + */ +void update_camera_loop(f32 updateRate, Object* obj, Object_Racer* racer) { + s32 delta; + UNUSED f32 pad; + s32 segmentIndex; + s32 angle; + f32 zoom; + f32 xVel; + f32 yVel; + f32 zVel; + Matrix mtx; + s32 angleDiff; + + delta = (s32) updateRate; + zoom = 120.0f; + if (D_8011D540 >= 0x3D) { + zoom += ((f32) (D_8011D540 - 0x3C) * 4.0f); + } + racer->unk196 = 0x8000 - racer->unk1A0; + if (get_viewport_count() == 1) { + zoom = 160.0f; + } + // A little bit of indecisiveness. + if (gCameraObject->zoom == ZOOM_FAR) { + zoom += 35.0f; + } + if (gCameraObject->zoom == ZOOM_FAR) { + zoom -= 35.0f; + } + gCameraObject->unk1C += (zoom - gCameraObject->unk1C) * 0.125; + D_8011D510.y_rotation = -gCameraObject->trans.y_rotation + 0x8000; + D_8011D510.x_rotation = -gCameraObject->trans.x_rotation; + D_8011D510.z_rotation = 0; + D_8011D510.x_position = 0.0f; + D_8011D510.y_position = 0.0f; + D_8011D510.z_position = 0.0f; + D_8011D510.scale = 1.0f; + func_8006FC30(mtx, &D_8011D510); + guMtxXFMF(mtx, 0.0f, 0.0f, gCameraObject->unk1C, &xVel, &yVel, &zVel); + gCameraObject->trans.x_position = obj->segment.trans.x_position + xVel; + gCameraObject->trans.y_position = obj->segment.trans.y_position + yVel; + gCameraObject->trans.z_position = obj->segment.trans.z_position + zVel; + guMtxXFMF(mtx, 0.0f, cosine_s(0x800) * gCameraObject->unk1C, 0.0f, &xVel, &yVel, &zVel); + gCameraObject->trans.x_position += xVel; + gCameraObject->trans.y_position += yVel; + gCameraObject->trans.z_position += zVel; + angleDiff = (u16) (-obj->segment.trans.z_rotation); + angle = angleDiff - ((u16) gCameraObject->trans.z_rotation); + WRAP(angle, -0x8000, 0x8000); + gCameraObject->trans.z_rotation += ((angle * delta) >> 4); + angleDiff = -obj->segment.trans.x_rotation; + angle = angleDiff - (u16) gCameraObject->trans.x_rotation; + WRAP(angle, -0x8000, 0x8000); + gCameraObject->trans.x_rotation += ((angle * delta) >> 4); + gCameraObject->trans.y_rotation = racer->unk196; + segmentIndex = get_level_segment_index_from_position(gCameraObject->trans.x_position, gCameraObject->trans.y_position, gCameraObject->trans.z_position); + if (segmentIndex != -1) { + gCameraObject->unk34 = segmentIndex; + } + racer->unk196 = gCameraObject->trans.y_rotation; + gCameraObject->trans.x_position += gCameraObject->x_velocity; + gCameraObject->trans.y_position += gCameraObject->y_velocity; + gCameraObject->trans.z_position += gCameraObject->z_velocity; +} + +void func_8004D95C(s32 arg0, s32 arg1, Object *obj, Object_Racer *racer) { s16 sp26; - if (obj64->unk118 != 0) { + if (racer->unk118 != 0) { func_80006AC8(obj); } - if ((func_8002341C() != 0) && (obj64->unk1D6 == 0xA)) { + if (func_8002341C() && racer->unk1D6 == 10) { obj->unk4C->unk14 = 0; } sp26 = obj->segment.unk18; - obj64->unk1D6 = 0xA; - func_80049794(arg0, arg1, obj, obj64); - obj64->unk1D6 = obj64->unk1D7; + racer->unk1D6 = 10; + func_80049794(arg0, arg1, obj, racer); + racer->unk1D6 = racer->unk1D7; obj->segment.unk3B = 0; - if (obj64->unk1D6 == 0xA) { - if (obj64->unk154 != NULL) { - obj64->unk154->segment.trans.x_position = obj->segment.trans.x_position; - obj64->unk154->segment.trans.y_position = obj->segment.trans.y_position; - obj64->unk154->segment.trans.z_position = obj->segment.trans.z_position; - obj64->unk154->segment.unk2C.half.lower = obj->segment.unk2C.half.lower; - obj64->unk154->segment.trans.y_rotation = obj->segment.trans.y_rotation; - obj64->unk154->segment.trans.x_rotation = obj->segment.trans.x_rotation; - obj64->unk154->segment.trans.z_rotation = obj->segment.trans.z_rotation; + if (racer->unk1D6 == 10) { + if (racer->unk154 != NULL) { + racer->unk154->segment.trans.x_position = obj->segment.trans.x_position; + racer->unk154->segment.trans.y_position = obj->segment.trans.y_position; + racer->unk154->segment.trans.z_position = obj->segment.trans.z_position; + racer->unk154->segment.unk2C.half.lower = obj->segment.unk2C.half.lower; + racer->unk154->segment.trans.y_rotation = obj->segment.trans.y_rotation; + racer->unk154->segment.trans.x_rotation = obj->segment.trans.x_rotation; + racer->unk154->segment.trans.z_rotation = obj->segment.trans.z_rotation; obj->segment.unk3B = 0; obj->segment.unk18 = sp26 + arg0; func_80061C0C(obj); @@ -515,17 +903,17 @@ void func_8004D95C(s32 arg0, s32 arg1, Object *obj, Object_Racer *obj64) { * Initialise the basic properties of each racer object. If it's tied to a human player, * will also initialise a camera object. */ -void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *arg1) { +void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *racer) { Object_Racer *tempObj; ActivePlayers player; s32 i; D_8011D53C = 0; tempObj = (struct Object_Racer *) obj->unk64; - obj->segment.trans.y_rotation = arg1->unkC; - obj->segment.trans.x_rotation = arg1->unkA; - obj->segment.trans.z_rotation = arg1->unk8; - player = arg1->unkE; + obj->segment.trans.y_rotation = racer->unkC; + obj->segment.trans.x_rotation = racer->unkA; + obj->segment.trans.z_rotation = racer->unk8; + player = racer->unkE; tempObj->unk194 = 0; tempObj->stretch_height = 1.0f; tempObj->stretch_height_cap = 1.0f; @@ -544,18 +932,18 @@ void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *arg1) { tempObj->unkC4 = 0.5f; if (1); tempObj->unk196 = tempObj->unk1A0; - tempObj->unkD8 = obj->segment.trans.x_position; - tempObj->unkDC = obj->segment.trans.y_position + 30.0f; - tempObj->unkE0 = obj->segment.trans.z_position; - tempObj->unkE4 = obj->segment.trans.x_position; - tempObj->unkE8 = obj->segment.trans.y_position + 30.0f; - tempObj->unkEC = obj->segment.trans.z_position; - tempObj->unkF0 = obj->segment.trans.x_position; - tempObj->unkF4 = obj->segment.trans.y_position + 30.0f; - tempObj->unkF8 = obj->segment.trans.z_position; - tempObj->unkFC = obj->segment.trans.x_position; - tempObj->unk100 = obj->segment.trans.y_position + 30.0f; - tempObj->unk104 = obj->segment.trans.z_position; + tempObj->unkD8[0] = obj->segment.trans.x_position; + tempObj->unkD8[1] = obj->segment.trans.y_position + 30.0f; + tempObj->unkD8[2] = obj->segment.trans.z_position; + tempObj->unkE4[0] = obj->segment.trans.x_position; + tempObj->unkE4[1] = obj->segment.trans.y_position + 30.0f; + tempObj->unkE4[2] = obj->segment.trans.z_position; + tempObj->unkF0[0] = obj->segment.trans.x_position; + tempObj->unkF0[1] = obj->segment.trans.y_position + 30.0f; + tempObj->unkF0[2] = obj->segment.trans.z_position; + tempObj->unkFC[0] = obj->segment.trans.x_position; + tempObj->unkFC[1] = obj->segment.trans.y_position + 30.0f; + tempObj->unkFC[2] = obj->segment.trans.z_position; tempObj->prev_x_position = obj->segment.trans.x_position; tempObj->prev_y_position = obj->segment.trans.y_position; tempObj->prev_z_position = obj->segment.trans.z_position; @@ -580,7 +968,7 @@ void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *arg1) { gCameraObject->trans.z_rotation = 0; gCameraObject->trans.x_rotation = 0x400; gCameraObject->trans.y_rotation = tempObj->unk196; - gCameraObject->unk36 = 0; + gCameraObject->mode = CAMERA_CAR; gCameraObject->unk3C = 0xFF; gCameraObject->unk3D = 0xFF; gCameraObject->unk3E = 0xFF; @@ -610,7 +998,7 @@ void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *arg1) { // This needs to be on one line to match. for (i = 0; i < 4; i++) { D_8011D58C[i] = 0; } if (1); if (1); // Also critical to match. - func_80043ECC(0, 0, 0); + func_80043ECC(0, NULL, 0); D_8011D583 = i; D_8011D585 = 0; tempObj->unk20A = 0; @@ -644,7 +1032,7 @@ void func_8004F77C(unk8004F77C *arg0) { GLOBAL_ASM("asm/non_matchings/racer/func_8004F7F4.s") -void func_80050754(Object *obj, Object_Racer *racer, f32 arg2) { +void func_80050754(Object *obj, Object_Racer *racer, f32 divisor) { f32 diffX; f32 diffY; f32 diffZ; @@ -660,9 +1048,9 @@ void func_80050754(Object *obj, Object_Racer *racer, f32 arg2) { obj->segment.trans.z_rotation = racer->unk148->segment.trans.z_rotation; racer->unk1A4 = obj->segment.trans.z_rotation; racer->unk1A0 = obj->segment.trans.y_rotation; - obj->segment.x_velocity = diffX / arg2; - obj->segment.y_velocity = diffY / arg2; - obj->segment.z_velocity = diffZ / arg2; + obj->segment.x_velocity = diffX / divisor; + obj->segment.y_velocity = diffY / divisor; + obj->segment.z_velocity = diffZ / divisor; racer->velocity = 0.0f; racer->unk1F2 = 0; racer->lateral_velocity = 0.0f; @@ -677,14 +1065,9 @@ void apply_vehicle_rotation_offset(Object_Racer *obj, s32 max, s16 yRotation, s1 s32 tempAngle; if (!obj->unk1F1) { - tempAngle = yRotation - (obj->y_rotation_offset & 0xFFFF); + tempAngle = yRotation - (u16) obj->y_rotation_offset; obj->unk166 = xRotation; - if (tempAngle > 0x8000) { - tempAngle += 0xFFFF0001; - } - if (tempAngle < -0x8000) { - tempAngle += 0xFFFF; - } + WRAP(tempAngle, -0x8000, 0x8000); if (tempAngle > 0) { diff = max * 0x600; if (diff < tempAngle) { @@ -698,13 +1081,8 @@ void apply_vehicle_rotation_offset(Object_Racer *obj, s32 max, s16 yRotation, s1 } obj->y_rotation_offset += tempAngle; } - tempAngle = xRotation - (obj->x_rotation_offset & 0xFFFF); - if (tempAngle > 0x8000) { - tempAngle = tempAngle + 0xFFFF0001; - } - if (tempAngle < -0x8000) { - tempAngle = tempAngle + 0xFFFF; - } + tempAngle = xRotation - (u16) obj->x_rotation_offset; + WRAP(tempAngle, -0x8000, 0x8000); if (tempAngle > 0) { diff = max * 0x600; if (diff < tempAngle) { @@ -718,13 +1096,8 @@ void apply_vehicle_rotation_offset(Object_Racer *obj, s32 max, s16 yRotation, s1 } obj->x_rotation_offset += tempAngle; } - tempAngle = zRotation - (obj->z_rotation_offset & 0xFFFF); - if (tempAngle > 0x8000) { - tempAngle = tempAngle + 0xFFFF0001; - } - if (tempAngle < -0x8000) { - tempAngle = tempAngle + 0xFFFF; - } + tempAngle = zRotation - (u16) obj->z_rotation_offset; + WRAP(tempAngle, -0x8000, 0x8000); if (tempAngle > 0) { diff = max * 0x600; if (diff < tempAngle) { @@ -759,11 +1132,11 @@ void func_800521B8(s32 arg0) { D_8011D582 = arg0; } -void func_800521C4(Object *obj, Object_Racer *racer, s32 arg2) { +void func_800521C4(Object *obj, Object_Racer *racer, UNUSED s32 arg2) { Object *tempObj; s8 foundObj; - s32 sp24; - s32 temp_f10; + f32 distance; + s32 tempVel; foundObj = 0; if (func_80023568()) { @@ -771,45 +1144,45 @@ void func_800521C4(Object *obj, Object_Racer *racer, s32 arg2) { foundObj = func_80052388(obj, racer, tempObj, 160000.0f); } if (!foundObj) { - tempObj = func_8001B7A8(racer, 1, &sp24); + tempObj = func_8001B7A8(racer, 1, &distance); if (tempObj && !D_8011D540) { foundObj = func_80052388(obj, racer, tempObj, 160000.0f); } } if (!foundObj) { - tempObj = func_8001B7A8(racer, -1, &sp24); + tempObj = func_8001B7A8(racer, -1, &distance); if (tempObj && !D_8011D540) { foundObj = func_80052388(obj, racer, tempObj, 30000.0f); } } if (!foundObj) { if ((racer->unk1E7 & 0x1F) < 2) { - temp_f10 = racer->velocity * 1280.0f; + tempVel = racer->velocity * 1280.0f; - if (temp_f10 < 0) { - temp_f10 = -temp_f10; + if (tempVel < 0) { + tempVel = -tempVel; } - if (temp_f10 > 0x2800) { - temp_f10 = 0x2800; + if (tempVel > 0x2800) { + tempVel = 0x2800; } - temp_f10 = 0x2800 - temp_f10; + tempVel = 0x2800 - tempVel; - racer->unk16C = get_random_number_from_range(-temp_f10, temp_f10); + racer->unk16C = get_random_number_from_range(-tempVel, tempVel); } } } // Ran by the AI. Seems to be direction related of some sorts. -void func_8005234C(unk8005234C *arg0) { - arg0->unk16C -= arg0->unk16C >> 3; - if (arg0->unk16C >= -9 && arg0->unk16C < 10) { // Deadzone? - arg0->unk16C = 0; +void func_8005234C(Object_Racer *racer) { + racer->unk16C -= racer->unk16C >> 3; + if (racer->unk16C >= -9 && racer->unk16C < 10) { // Deadzone? + racer->unk16C = 0; } } -s32 func_80052388(Object *obj1, Object_Racer *arg1, Object *obj2, f32 distance) { +s32 func_80052388(Object *obj1, Object_Racer *racer, Object *obj2, f32 distance) { s32 rotation; f32 diffX; f32 diffZ; @@ -819,41 +1192,21 @@ s32 func_80052388(Object *obj1, Object_Racer *arg1, Object *obj2, f32 distance) diffZ = obj2->segment.trans.z_position - obj1->segment.trans.z_position; if ((diffX * diffX) + (diffZ * diffZ) < distance) { rotation = (arctan2_f(diffX, diffZ) - (obj1->segment.trans.y_rotation & 0xFFFF)) + 0x8000; - if (rotation > 0x8000) { - rotation += 0xFFFF0001; + WRAP(rotation, -0x8000, 0x8000); + CLAMP(rotation, -0x3000, 0x3000); + racer->unk16C = rotation; + if ((racer->unk1E7 & 0x3F) < 0x1F) { + racer->unk16C = 0; } - if (rotation < -0x8000) { - rotation += 0xFFFF; - } - if (rotation > 0x3000) { - rotation = 0x3000; - } - if (rotation < -0x3000) { - rotation = -0x3000; - } - arg1->unk16C = rotation; - if ((arg1->unk1E7 & 0x3F) < 0x1F) { - arg1->unk16C = 0; - } - arg1 = (struct Object_Racer *) obj2->unk64; + racer = (struct Object_Racer *) obj2->unk64; rotation = arctan2_f(diffX, diffZ) - (obj1->segment.trans.y_rotation & 0xFFFF); - if (rotation > 0x8000) { - rotation += 0xFFFF0001; - } - if (rotation < -0x8000) { - rotation += 0xFFFF; - } - if (rotation > 0x3000) { - rotation = 0x3000; - } - if (rotation < -0x3000) { - rotation = -0x3000; - } - arg1->unk16C = rotation; + WRAP(rotation, -0x8000, 0x8000); + CLAMP(rotation, -0x3000, 0x3000); + racer->unk16C = rotation; if (ret) {} ret = TRUE; - if ((arg1->unk1E7 & 0x1F) < 0xA) { - arg1->unk16C = 0; + if ((racer->unk1E7 & 0x1F) < 0xA) { + racer->unk16C = 0; } } return ret; @@ -861,63 +1214,63 @@ s32 func_80052388(Object *obj1, Object_Racer *arg1, Object *obj2, f32 distance) GLOBAL_ASM("asm/non_matchings/racer/func_8005250C.s") -void func_80052988(Object *arg0, Object_Racer *arg1, s32 action, s32 arg3, s32 duration, s32 arg5, s32 arg6, s32 arg7) { +void func_80052988(Object *obj, Object_Racer *racer, s32 action, s32 arg3, s32 duration, s32 arg5, s32 arg6, s32 arg7) { arg5 *= arg7; if ((D_8011D55C == -1) && (action >= 3)) { - arg0->segment.unk3B = 0; - arg1->unk1F2 = 0; - } else if (arg0->segment.unk3B == 0) { + obj->segment.unk3B = 0; + racer->unk1F2 = 0; + } else if (obj->segment.unk3B == 0) { if (arg6 & 1) { - if (arg0->segment.unk18 >= 41) { - arg0->segment.unk18 -= arg7 * 4; - if (arg0->segment.unk18 < 41) { - arg0->segment.unk3B = action; - arg0->segment.unk18 = arg3; + if (obj->segment.unk18 >= 41) { + obj->segment.unk18 -= arg7 * 4; + if (obj->segment.unk18 < 41) { + obj->segment.unk3B = action; + obj->segment.unk18 = arg3; } } else { - arg0->segment.unk18 += arg7 * 4; - if (arg0->segment.unk18 >= 40) { - arg0->segment.unk3B = action; - arg0->segment.unk18 = arg3; + obj->segment.unk18 += arg7 * 4; + if (obj->segment.unk18 >= 40) { + obj->segment.unk3B = action; + obj->segment.unk18 = arg3; } } } else { - arg0->segment.unk3B = action; - arg0->segment.unk18 = arg3; - arg1->unk1F3 &= ~0x80; + obj->segment.unk3B = action; + obj->segment.unk18 = arg3; + racer->unk1F3 &= ~0x80; } - } else if (arg0->segment.unk3B == action) { + } else if (obj->segment.unk3B == action) { if (arg6 & 2) { - if (arg1->unk1F3 & 0x80) { - arg0->segment.unk18 -= arg5; - if (arg0->segment.unk18 <= 0) { - arg0->segment.unk3B = 0; - arg1->unk1F2 = 0; - arg0->segment.unk18 = 40; - arg1->unk1F3 = 0; + if (racer->unk1F3 & 0x80) { + obj->segment.unk18 -= arg5; + if (obj->segment.unk18 <= 0) { + obj->segment.unk3B = 0; + racer->unk1F2 = 0; + obj->segment.unk18 = 40; + racer->unk1F3 = 0; } } else { - arg0->segment.unk18 += arg5; - if (arg0->segment.unk18 >= duration) { - arg0->segment.unk18 = duration - 1; - if ((arg6 & 4) == 0) { - arg1->unk1F3 |= 0x80; + obj->segment.unk18 += arg5; + if (obj->segment.unk18 >= duration) { + obj->segment.unk18 = duration - 1; + if (!(arg6 & 4)) { + racer->unk1F3 |= 0x80; } } } } else { - arg0->segment.unk18 += arg5; - if (arg0->segment.unk18 >= duration) { - arg0->segment.unk3B = 0; - arg1->unk1F2 = 0; - arg0->segment.unk18 = 40; - arg1->unk1F3 = 0; + obj->segment.unk18 += arg5; + if (obj->segment.unk18 >= duration) { + obj->segment.unk3B = 0; + racer->unk1F2 = 0; + obj->segment.unk18 = 40; + racer->unk1F3 = 0; } } } else { - arg0->segment.unk18 = arg3; - arg0->segment.unk3B = action; + obj->segment.unk18 = arg3; + obj->segment.unk3B = action; } } @@ -928,9 +1281,9 @@ GLOBAL_ASM("asm/non_matchings/racer/func_80052D7C.s") * Handle the steering input of all cars. * It takes the speed of the car, creating a curve for the rotational velocity to scale with. */ -void handle_car_steering(Object_Racer *obj) { +void handle_car_steering(Object_Racer *racer) { s32 velScale; - f32 vel = obj->velocity; + f32 vel = racer->velocity; // Stay positive :) if (vel < 0.0) { @@ -943,15 +1296,15 @@ void handle_car_steering(Object_Racer *obj) { if (vel < 0.0) { vel = 0.0f; } - if (obj->drift_direction != 0) { + if (racer->drift_direction != 0) { velScale = vel * 68.0f; } else { velScale = vel * 58.0f; } // Set the steering velocity based on the car's steering value, scaled with the temp forward velocity value. - gCurrentCarSteerVel -= (obj->unk1E1 * velScale); + gCurrentCarSteerVel -= (racer->unk1E1 * velScale); // If the car is reversing, then flip the steering. - if (obj->velocity > 0.0f) { + if (racer->velocity > 0.0f) { gCurrentCarSteerVel = -gCurrentCarSteerVel; } } @@ -974,42 +1327,292 @@ void func_800535C4(unk800535C4 *arg0, unk800535C4_2 *arg1) { /** * Adjusts the throttle and brake application for all cars, based off the input. */ -void handle_car_velocity_control(Object_Racer *car) { - if (car->throttle > 0.0) { - car->throttle -= 0.1; +void handle_car_velocity_control(Object_Racer *racer) { + if (racer->throttle > 0.0) { + racer->throttle -= 0.1; } if (gCurrentCarInput & A_BUTTON) { - car->throttle = 1.0f; + racer->throttle = 1.0f; } if (gCurrentCarInput & B_BUTTON) { - if (car->brake < 1.0) { - car->brake += 0.2; + if (racer->brake < 1.0) { + racer->brake += 0.2; } } else { //! @bug Will cause a negative brake value resulting in higher velocity - if (car->brake > 0.05) { - car->brake -= 0.1; + if (racer->brake > 0.05) { + racer->brake -= 0.1; } } } GLOBAL_ASM("asm/non_matchings/racer/func_80053750.s") GLOBAL_ASM("asm/non_matchings/racer/func_80053E9C.s") -GLOBAL_ASM("asm/non_matchings/racer/func_80054110.s") + +void func_80054110(Object *obj, Object_Racer *racer, s32 updateRate, f32 arg3) { + f32 tempVel; + f32 xVel; + f32 zVel; + f32 yVel; + f32 hVel; + f32 tempX; + f32 tempY; + f32 tempZ; + Matrix mtx; + LevelHeader *header; + s32 angle; + s32 tempAngle; + + tempX = obj->segment.trans.x_position; + tempY = obj->segment.trans.y_position; + tempZ = obj->segment.trans.z_position; + gCurrentCarSteerVel = 0; + D_8011D558 = 0; + func_800579B0(racer, 0, arg3); + handle_car_velocity_control(racer); + func_800575EC(obj, racer); + func_80055EC0(obj, racer, updateRate); + func_80053E9C(obj, racer, updateRate); + if (racer->spinout_timer) { + func_80052B64(obj, racer, updateRate, arg3); // Sbinalla + } else if (racer->unk1E2 > 0) { + func_8005492C(obj, racer, updateRate, arg3); + } else { + func_80052D7C(obj, racer, updateRate, arg3); + } + apply_vehicle_rotation_offset(racer, updateRate, 0, 0, 0); + header = get_current_level_header(); + if ((racer->unkC0 != 0.0 && header->unk2) || D_8011D581 == 10) { + if (racer->unk1F0) { + racer->checkpoint_distance -= 0.3; + } else { + racer->checkpoint_distance -= 0.1; + } + func_80059080(obj, racer, &xVel, &yVel, &zVel); + if (racer->unk1F0) { + racer->checkpoint_distance += 0.3; + } else { + racer->checkpoint_distance += 0.1; + } + xVel -= obj->segment.trans.x_position; + zVel -= obj->segment.trans.z_position; + yVel = sqrtf((xVel * xVel) + (zVel * zVel)); + xVel /= yVel; + zVel /= yVel; + obj->segment.x_velocity = xVel * 4.0f; + obj->segment.z_velocity = zVel * 4.0f; + obj->segment.y_velocity = 9.5f; + racer->unk1F0 = 1; + } else if (racer->unk1E2 > 2) { + racer->unk1F0 = 0; + } + obj->segment.unk3B = 0; + tempAngle = ((-racer->unk1A2 >> 8) / D_8011D570); + tempAngle = 40 - tempAngle; + if (tempAngle < 0) { + tempAngle = 0; + } + if (tempAngle > 73) { + tempAngle = 73; + } + obj->segment.unk18 = tempAngle; + func_8005234C(racer); + angle = gCurrentCarSteerVel - (u16) racer->unk1A2; + WRAP(angle, -0x8000, 0x8000); + angle >>= 2; + CLAMP(angle, -0x2EE, 0x2EE); + racer->unk1A2 += (angle * updateRate); + obj->segment.trans.y_rotation = racer->unk1A0 + racer->unk1A2; + racer->unk1A6 += ((D_8011D558 - racer->unk1A6) * updateRate) >> 4; + obj->segment.trans.z_rotation = racer->unk1A4 + racer->unk1A6; + if (!racer->unk1F0) { + D_8011D510.y_rotation = racer->unk1A0 + racer->unk10C; + D_8011D510.x_rotation = 0; + D_8011D510.z_rotation = 0; + D_8011D510.x_position = 0.0f; + D_8011D510.y_position = 0.0f; + D_8011D510.z_position = 0.0f; + D_8011D510.scale = 1.0f; + func_8006FE74(&mtx, &D_8011D510); + guMtxXFMF(mtx, racer->lateral_velocity, 0.0f, racer->velocity, &obj->segment.x_velocity, &tempVel, &obj->segment.z_velocity); + } + if (racer->unk175) { + obj->segment.x_velocity = D_8011D578; + obj->segment.z_velocity = D_8011D57C; + } + if (!racer->unk148) { + xVel = obj->segment.x_velocity; + zVel = obj->segment.z_velocity; + if (racer->unk1D2) { + xVel += racer->unk11C; + zVel += racer->unk120; + } + xVel += racer->unk84; + zVel += racer->unk88; + func_80011570(obj, xVel * arg3, obj->segment.y_velocity * arg3, zVel * arg3); + } else { + func_80050754(obj, racer, arg3); + } + if (D_8011D55C == -1 && !func_80023568()) { + func_80055A84(obj, racer, updateRate); + } else { + func_80054FD0(obj, racer, updateRate); + } + if (!racer->unk201) { + obj->unk74 = 0; + } else if (racer->unk1D6 < 5) { + func_800AF714(obj, updateRate); + } + func_80053750(obj, racer, arg3); + tempVel = 1.0f / arg3; + xVel = (((obj->segment.trans.x_position - tempX) - D_8011D548) * tempVel) - racer->unk84; + obj->segment.y_velocity = (obj->segment.trans.y_position - tempY) * tempVel; + zVel = (((obj->segment.trans.z_position - tempZ) - D_8011D54C) * tempVel) - racer->unk88; + D_8011D510.y_rotation = -(racer->unk1A0 + racer->unk10C); + D_8011D510.x_rotation = -obj->segment.trans.x_rotation; + D_8011D510.z_rotation = -obj->segment.trans.z_rotation; + D_8011D510.x_position = 0.0f; + D_8011D510.y_position = 0.0f; + D_8011D510.z_position = 0.0f; + D_8011D510.scale = 1.0f; + func_8006FE74(&mtx, &D_8011D510); + guMtxXFMF(mtx, xVel, 0.0f, zVel, &hVel, &tempVel, &yVel); + if (racer->unk1D2) { + racer->unk1D2 -= updateRate; + if (racer->unk1D2 < 0) { + racer->unk1D2 = 0; + } + } else { + tempVel = racer->velocity - yVel; + if (tempVel > 0.5) { + racer->velocity -= tempVel - 0.5; + } + if (tempVel < -0.5) { + racer->velocity -= tempVel + 0.5; + } + tempVel = racer->lateral_velocity - hVel; + if (tempVel && tempVel) {} + if (tempVel > 0.5) { + racer->lateral_velocity -= tempVel - 0.5; + } + if (tempVel < -0.5) { + racer->lateral_velocity -= tempVel + 0.5; + } + } +} + GLOBAL_ASM("asm/non_matchings/racer/func_8005492C.s") GLOBAL_ASM("asm/non_matchings/racer/func_80054FD0.s") -GLOBAL_ASM("asm/non_matchings/racer/func_80055A84.s") + +void func_80055A84(Object *obj, Object_Racer *racer, s32 updateRate) { + f32 angleZ; + f32 distance; + s32 sp74; + s32 flags; + s32 temp_v1_2; + f32 tempX; + f32 tempY; + f32 tempZ; + s32 xRot; + f32 angleX; + f32 *temp_v0; + f32 tempPos[3]; + s32 i; + f32 sp40; + s8 sp3F; + s8 shouldSquish; + + if (D_8011D4F0[0] < obj->segment.trans.y_position) { + obj->segment.trans.y_position = D_8011D4F0[0]; + } + temp_v0 =(f32 *) get_misc_asset(56); + sp3F = -1; + sp40 = temp_v0[racer->unk1D7]; + tempPos[0] = obj->segment.trans.x_position; + tempPos[1] = obj->segment.trans.y_position; + tempPos[2] = obj->segment.trans.z_position; + D_8011D548 = 0.0f; + D_8011D54C = 0.0f; + sp74 = 0; + flags = 0; + if (racer->playerIndex != PLAYER_COMPUTER || racer->unk1D7 < 5) { + flags = func_80017248(obj, 1, &sp74, racer->unkD8, tempPos, &sp40, &sp3F); + } + if (flags & 0x80) { + D_8011D548 = tempPos[0] - obj->segment.trans.x_position; + D_8011D54C = tempPos[2] - obj->segment.trans.z_position; + flags &= ~0x80; + } + shouldSquish = 0; + if (flags && tempPos[1] < obj->segment.trans.y_position - 4.0) { + shouldSquish = 1; + } + func_80031130(1, &racer->unkD8[0], tempPos, racer->unk1D6); + sp74 = 0; + racer->unk1E3 = func_80031600(racer->unkD8 , tempPos, &sp40, &sp3F, 1, &sp74); + racer->unk1E4 = flags; + racer->unk1E3 |= flags; + racer->unk1E2 = 0; + if (racer->unk1E3) { + racer->unk1E3 = 15; + racer->unk1E2 = 4; + } + if (shouldSquish && sp74) { + if (racer->squish_timer == 0) { + racer->unk187 = 4; + } else { + racer->squish_timer = 60; + } + } + for (i = 0; i < 3; i++) { + racer->unkD8[i] = tempPos[i]; + } + racer->wheel_surfaces[0] = sp3F; + i = 1; + racer->wheel_surfaces[1] = sp3F; + racer->wheel_surfaces[2] = sp3F; + racer->wheel_surfaces[3] = sp3F; + obj->segment.trans.x_position = racer->unkD8[0]; + obj->segment.trans.y_position = racer->unkD8[1]; + obj->segment.trans.z_position = racer->unkD8[2]; + if (racer->unk1E2) { + func_8002ACD4(&tempX, &tempY, &tempZ); + angleX = cosine_s(-obj->segment.trans.y_rotation); + angleZ = sine_s(-obj->segment.trans.y_rotation); + distance = (tempX * angleZ) + (tempZ * angleX); + tempZ = (tempX * angleX) - (tempZ * angleZ); + temp_v1_2 = -(s16)(u16)arctan2_f(distance, tempY); + if (temp_v1_2 < 0x2000 && temp_v1_2 > -0x2000) { + racer->unk1A4 = temp_v1_2; + } + xRot = -(s16)(u16)arctan2_f(tempZ, tempY); + if ((xRot < 0x2000) && (xRot > -0x2000)) { + obj->segment.trans.x_rotation = xRot; + } + if (racer->unk1D6 == 4) { + if (1) + xRot -= (u16) obj->segment.trans.x_rotation; + WRAP(xRot, -0x8000, 0x8000); + obj->segment.trans.x_rotation += xRot >> 2; + } + } + if (racer->unk1D6 != 4 && racer->unk1D6 != 2 && racer->unk1D6 != 10 && racer->unk1D6 != 7) { + CLAMP(racer->unk1A4, -0x3400, 0x3400); + CLAMP(obj->segment.trans.x_rotation, -0x3400, 0x3400); + } +} + GLOBAL_ASM("asm/non_matchings/racer/func_80055EC0.s") -void play_char_horn_sound(Object *obj, Object_Racer *obj64) { +void play_char_horn_sound(Object *obj, Object_Racer *racer) { if (get_filtered_cheats() & CHEAT_HORN_CHEAT) { // Play character voice instead of horn. func_800570B8(obj, 0x162, 8, 0x82); } else { // Play character's horn sound - func_80057048(obj, obj64->characterId + 0x156); + func_80057048(obj, racer->characterId + 0x156); } } @@ -1017,8 +1620,8 @@ GLOBAL_ASM("asm/non_matchings/racer/func_8005698C.s") GLOBAL_ASM("asm/non_matchings/racer/func_80056E2C.s") void func_80057048(Object *obj, s32 arg1) { - Object_Racer *obj64 = &obj->unk64->racer; - if (D_8011D55C != -1 && obj64->unk108 == 0) { + Object_Racer *racer = &obj->unk64->racer; + if (D_8011D55C != -1 && racer->unk108 == 0) { func_80001EA8(arg1, obj->segment.trans.x_position, obj->segment.trans.y_position, obj->segment.trans.z_position, NULL); } } @@ -1056,7 +1659,7 @@ void func_800570B8(Object *obj, s32 arg1, s32 arg2, s32 arg3) { } } -f32 func_80057220(Object* arg0, Object_Racer* arg1) { +f32 func_80057220(Object *obj, Object_Racer *racer) { f32 speedMultiplier; s32 temp_v1; f32 bananas; @@ -1065,15 +1668,15 @@ f32 func_80057220(Object* arg0, Object_Racer* arg1) { s32 sp28; speedMultiplier = 1.0f; - if (D_8011D540 != 0) { + if (D_8011D540) { speedMultiplier = 0.0f; } sp28 = func_800113AC(); if (D_8011D540); - if ((D_8011D540 > 0) && (D_8011D540 < 30) && (!arg1->unk1F4)) { + if (D_8011D540 > 0 && D_8011D540 < 30 && !racer->unk1F4) { temp_v1 = D_8011D540 - 14; if (gActivePlayerButtonPress & A_BUTTON) { - if ((temp_v1 < 0) && (sp28 >= 0)) { + if (temp_v1 < 0 && sp28 >= 0) { temp_v1 = 0; } if (temp_v1 < 0) { @@ -1087,57 +1690,57 @@ f32 func_80057220(Object* arg0, Object_Racer* arg1) { } phi_a1 = 24 - temp_v1; - arg1->unk1D3 = func_8000C8B4(phi_a1 >> 1); + racer->unk1D3 = func_8000C8B4(phi_a1 >> 1); if (phi_a1 == 24) { - func_80057048(arg0, 34); - arg1->unk1D3 = func_8000C8B4(20); + func_80057048(obj, 34); + racer->unk1D3 = func_8000C8B4(20); } - if ((s32) arg1->unk1D3 < func_8000C8B4(20)) { - arg1->unk203 = 0; - } else if ((s32) arg1->unk1D3 < func_8000C8B4(35)) { - arg1->unk203 = 1; + if (racer->unk1D3 < func_8000C8B4(20)) { + racer->unk203 = 0; + } else if (racer->unk1D3 < func_8000C8B4(35)) { + racer->unk203 = 1; } else { - arg1->unk203 = 2; + racer->unk203 = 2; } - arg1->boost_sound |= 1; + racer->boost_sound |= 1; D_8011D560 = 7; - D_8011D585 = arg1->unk1D3; + D_8011D585 = racer->unk1D3; } - if ((arg1->playerIndex == -1) && (!arg1->unk1CC || (arg1->unk1CC == 1 && D_8011D585))) { + if ((racer->playerIndex == PLAYER_COMPUTER) && (!racer->unk1CC || (racer->unk1CC == 1 && D_8011D585))) { if (D_8011D585) { - arg1->unk1D3 = D_8011D585; + racer->unk1D3 = D_8011D585; } else { - arg1->unk1D3 = func_8000C8B4(5); + racer->unk1D3 = func_8000C8B4(5); } - if (arg1->unk1D3 < func_8000C8B4(20)) { - arg1->unk203 = 0; - } else if (arg1->unk1D3 < func_8000C8B4(35)) { - arg1->unk203 = 1; + if (racer->unk1D3 < func_8000C8B4(20)) { + racer->unk203 = 0; + } else if (racer->unk1D3 < func_8000C8B4(35)) { + racer->unk203 = 1; } else { - arg1->unk203 = 2; + racer->unk203 = 2; } } } - if (arg1->unk1D3 && !D_8011D540 && sp28 && !arg1->unk1D8) { - func_80072348(arg1->playerIndex, 6); + if (racer->unk1D3 && !D_8011D540 && sp28 && racer->raceStatus == STATUS_RACING) { + func_80072348(racer->playerIndex, 6); } if ((D_8011D540 < 80) && gActivePlayerButtonPress & A_BUTTON) { - arg1->unk1F4 = 1U; + racer->unk1F4 = 1; } - if (D_8011D540 == 0) { - if ((arg1->boost_sound & 1) != 0) { - arg1->boost_sound = (u8) (arg1->boost_sound & 0xFFFE); - func_800570B8(arg0, 354, 8, 130); - func_80057048(arg0, 33); + if (!D_8011D540) { + if (racer->boost_sound & 1) { + racer->boost_sound = racer->boost_sound & 0xFFFE; + func_800570B8(obj, 354, 8, 130); + func_80057048(obj, 33); } } - if ((arg1->boost_sound & 2) != 0) { - arg1->boost_sound = (u8) (arg1->boost_sound & 0xFFFD); + if (racer->boost_sound & 2) { + racer->boost_sound = racer->boost_sound & 0xFFFD; } - bananas = arg1->bananas; + bananas = racer->bananas; // Cheats only apply to human players. - if (arg1->playerIndex == PLAYER_COMPUTER) { - bananas = arg1->unk124; + if (racer->playerIndex == PLAYER_COMPUTER) { + bananas = racer->unk124; } else { if (bananas > 10.0) { // Cap the banana speed boost to 10 if the unlimited bananas cheat is not enabled. @@ -1162,7 +1765,7 @@ f32 func_80057220(Object* arg0, Object_Racer* arg1) { return speedMultiplier; } -void func_800575EC(Object *obj, Object_Racer *obj64) { +void func_800575EC(Object *obj, Object_Racer *racer) { Matrix mf; D_8011D510.y_rotation = obj->segment.trans.y_rotation; @@ -1173,18 +1776,18 @@ void func_800575EC(Object *obj, Object_Racer *obj64) { D_8011D510.z_position = 0.0f; D_8011D510.scale = 1.0f; func_8006FC30(mf, &D_8011D510); - guMtxXFMF(mf, 0.0f, 0.0f, 1.0f, &obj64->ox1, &obj64->oy1, &obj64->oz1); - guMtxXFMF(mf, 0.0f, 1.0f, 0.0f, &obj64->ox2, &obj64->oy2, &obj64->oz2); - guMtxXFMF(mf, 1.0f, 0.0f, 0.0f, &obj64->ox3, &obj64->oy3, &obj64->oz3); + guMtxXFMF(mf, 0.0f, 0.0f, 1.0f, &racer->ox1, &racer->oy1, &racer->oz1); + guMtxXFMF(mf, 0.0f, 1.0f, 0.0f, &racer->ox2, &racer->oy2, &racer->oz2); + guMtxXFMF(mf, 1.0f, 0.0f, 0.0f, &racer->ox3, &racer->oy3, &racer->oz3); } GLOBAL_ASM("asm/non_matchings/racer/func_800576E0.s") -void func_800579B0(unk800579B0 *arg0, UNUSED s32 arg1, f32 arg2) { +void func_800579B0(Object_Racer *racer, UNUSED s32 arg1, f32 updateRate) { s32 temp, temp2; - temp = gCurrentStickX - arg0->unk1E1; - temp2 = (s32)((f64)((f32)temp * arg2) * 0.125); + temp = gCurrentStickX - racer->unk1E1; + temp2 = (temp * updateRate) * 0.125; if (temp != 0 && temp2 == 0) { if (temp > 0) { @@ -1195,21 +1798,124 @@ void func_800579B0(unk800579B0 *arg0, UNUSED s32 arg1, f32 arg2) { } } - arg0->unk1E1 = arg0->unk1E1 + temp2; + racer->unk1E1 += temp2; } -GLOBAL_ASM("asm/non_matchings/racer/func_80057A40.s") +void func_80057A40(Object *obj, Object_Racer *racer, f32 updateRate) { + f32 temp_f14; + s32 delta; + s32 angle; -void func_800580B4(Object *obj, Object_Racer *obj64, s32 arg2, f32 arg3) { + if (gActivePlayerButtonPress & U_CBUTTONS && func_800A0190()) { + gCameraObject->zoom++; + if (gCameraObject->zoom > ZOOM_VERY_CLOSE) { + gCameraObject->zoom = ZOOM_MEDIUM; + } + if (racer->playerIndex != PLAYER_COMPUTER) { + func_80066060(racer->playerIndex, gCameraObject->zoom); + } + switch (gCameraObject->zoom) { + case ZOOM_MEDIUM: + func_80001D04(104, 0); + break; + case ZOOM_FAR: + func_80001D04(105, 0); + break; + default: + func_80001D04(106, 0); + break; + } + } + if (racer->raceStatus == STATUS_FINISHED && gCameraObject->mode != CAMERA_FINISH_CHALLENGE) { + gCameraObject->mode = CAMERA_FINISH_RACE; + } + if (racer->unk108) { + gCameraObject->mode = CAMERA_FIXED; + } + // Set the camera behaviour based on current mode. + switch (gCameraObject->mode) { + default: + break; + case CAMERA_CAR: + // Driving a car. + update_camera_car(updateRate, obj, racer); + break; + case CAMERA_PLANE: + // Flying a plane. + update_camera_plane(updateRate, obj, racer); + break; + case CAMERA_FIXED: + // Fixes the camera in place, continuing to look at the player. Used when entering doors. + update_camera_fixed(updateRate, obj, racer); + break; + case CAMERA_HOVERCRAFT: + // Driving a hovercraft. + update_camera_hovercraft(updateRate, obj, racer); + break; + case CAMERA_FINISH_CHALLENGE: + // When you finish a challenge, the camera will rotate around the player, or around a set path, if the player's been KO'd. + update_camera_finish_challenge(updateRate, obj, racer); + break; + case CAMERA_LOOP: + // Used for loop-the-loops. Follows the face direction of the player exactly, the standard camera modes do not. + update_camera_loop(updateRate, obj, racer); + break; + case CAMERA_FINISH_RACE: + // When you finish a race, the camera will go into a more cinematic mode, following the player. + update_camera_finish_race(updateRate, obj, racer); + break; + } + temp_f14 = D_8011D586 / 10240.0f; + gCameraObject->x_velocity = (((obj->segment.trans.x_position + (91.75 * racer->ox1) + (90.0 * racer->ox3)) - gCameraObject->trans.x_position) * temp_f14); + gCameraObject->z_velocity = (((obj->segment.trans.z_position + (91.75 * racer->oz1) + (90.0 * racer->oz3)) - gCameraObject->trans.z_position) * temp_f14); + gCameraObject->y_velocity = (((func_8003ACAC() + 48.5) - gCameraObject->trans.y_position) * temp_f14); + gCameraObject->unk38 = -gCameraObject->trans.x_rotation * temp_f14; + gCameraObject->trans.x_position += gCameraObject->x_velocity; + gCameraObject->trans.y_position += gCameraObject->y_velocity + gCameraObject->unk30; + gCameraObject->trans.z_position += gCameraObject->z_velocity; + if (!D_8011D540 && !D_8011D586) { + gCameraObject->x_velocity = gCameraObject->x_velocity * 0.95; + gCameraObject->y_velocity = gCameraObject->y_velocity * 0.95; + gCameraObject->z_velocity = gCameraObject->z_velocity * 0.95; + } + angle = D_8011D586; + if (angle > 0x1400) { + angle = 0x2800 - D_8011D586; + } + if (angle > 0x600) { + angle = 0x600; + } + angle = ((angle >> 4) + 4); + delta = updateRate; + if (D_8011D583) { + D_8011D586 += (delta * angle); + if (D_8011D586 > 0x2800) { + D_8011D586 = 0x2800; + } + } else { + D_8011D586 -= (delta * angle); + if (D_8011D586 < 0) { + D_8011D586 = 0; + } + } + gCameraObject->trans.y_rotation -= D_8011D586; + gCameraObject->unk3A -= delta; + while (gCameraObject->unk3A < 0) { + gCameraObject->unk3A += 5; + gCameraObject->unk30 = -gCameraObject->unk30 * 0.75; + } +} + +void func_800580B4(Object *obj, Object_Racer *racer, s32 mode, f32 arg3) { f32 xPos, yPos, zPos; - if ((D_8011D55C != -1) && (obj64->unk1D8 != 1)) { - if (arg2 != gCameraObject->unk36) { - func_80057A40(obj, obj64, arg3); + if ((D_8011D55C != -1) && (racer->raceStatus != STATUS_FINISHED)) { + if (mode != gCameraObject->mode) { + func_80057A40(obj, racer, arg3); xPos = gCameraObject->trans.x_position; yPos = gCameraObject->trans.y_position; zPos = gCameraObject->trans.z_position; - gCameraObject->unk36 = arg2; - func_80057A40(obj, obj64, arg3); + gCameraObject->mode = mode; + func_80057A40(obj, racer, arg3); if (D_8011D540 == 0 && D_8011D582 == 0) { gCameraObject->x_velocity = xPos - gCameraObject->trans.x_position; gCameraObject->y_velocity = yPos - (gCameraObject->trans.y_position + gCameraObject->unk30); @@ -1219,9 +1925,215 @@ void func_800580B4(Object *obj, Object_Racer *obj64, s32 arg2, f32 arg3) { } } -GLOBAL_ASM("asm/non_matchings/racer/func_800581E8.s") +#ifdef NON_EQUIVALENT +void update_camera_car(f32 updateRate, Object *obj, Object_Racer *racer) { + s64 pad; + s32 segmentIndex; + f32 sp54 = 120.0f; + f32 baseDistance = 120.0f; + f32 yVel = 50.0f; + f32 temp_f16; + f32 sineOffset; + f32 baseSpeed; + f32 lateralOffset; + s32 angle; + f32 cosOffset; + s32 angleVel; + f32 xOffset; + f32 yOffset; + f32 zOffset; + f32 brakeVar; + f32 tempVel; + s32 baseAngle = 0x400; + s32 newAngle; + s32 numViewports; + s32 tempAngle; + s32 delta = (s32) updateRate; -void func_80058B84(f32 arg0, Object* obj, Object_Racer* arg2) { + numViewports = get_viewport_count(); + if (numViewports == 1) { + baseDistance = 192.0f; + baseAngle = 0x200; + } else if (numViewports > 2) { + baseDistance = 100.0f; + yVel = 40.0f; + } + numViewports = func_80023568(); + if (numViewports == 1 || numViewports == 4) { + baseDistance = 144.0f; + yVel = 110.0f; + if (gCameraObject->zoom == ZOOM_VERY_CLOSE) { + baseDistance += 30.0f; + } + baseAngle = 0xD00; + } + angle = racer->unk19E >> 3; + racer->unk196 = (-racer->unk1A0 - racer->unk19E) + 0x8000; + if (angle > 0x400) { + angle = 0x400; + } + if (angle < -0x400) { + angle = -0x400; + } + angle = angle * delta; + angleVel = angle; + if (angleVel > 0 && angleVel < racer->unk19E) { + racer->unk19E -= angleVel; + } + if (angleVel < 0) { + if (racer->unk19E < angleVel) { + racer->unk19E -= angleVel; + } + } + brakeVar = racer->brake; + baseSpeed = racer->unk8; + switch (gCameraObject->zoom) { + case 1: + baseDistance += 35.0f; + break; + case 2: + baseDistance -= 35.0f; + yVel -= 10.0f; + break; + case 3: + baseDistance -= 53.0f; + yVel -= 5.0f; + brakeVar = 0.0f; + baseSpeed *= 0.25; + break; + } + if (racer->unk1E2 > 2 || racer->unk1E5 != 0) { + angle = (obj->segment.trans.x_rotation); + if (angle > 0) { + angle -= 0x71C; + if (angle < 0) { + angle = 0; + } + angle >>= 1; + } else { + angle += 0x71C; + if (angle > 0) { + angle = 0; + } + } + angle = baseAngle - angle; + tempAngle = angle - (u16) gCameraObject->trans.x_rotation; + if (tempAngle > 0x8000) { + tempAngle -= 0xFFFF; + } + if (tempAngle < -0x8000) { + tempAngle += 0xFFFF; + } + gCameraObject->trans.x_rotation += (tempAngle * delta) >> 4; + } + if (racer->velocity < 0.0) { + tempVel = 6.0f; + if (racer->drift_direction) { + tempVel = 3.0f; + } + tempVel = -(racer->velocity * brakeVar) * tempVel; + if (65.0 < tempVel) { + tempVel = 65.0f; + } + baseDistance -= tempVel; + } + if (!racer->drift_direction) { + baseDistance += baseSpeed * 60.0f; + } else { + baseDistance += baseSpeed * 30.0f; + } + if (D_8011D540 == 0) { + if (func_8000C8B4(0x24) < racer->unk1D3) { + baseDistance = -30.0f; + } else if (racer->unk1D3 > 0) { + baseDistance = 180.0f; + } + } + if (D_8011D540 > 80) { + gCameraObject->unk1C = baseDistance; + gCameraObject->unk20 = yVel; + } + gCameraObject->unk1C += (baseDistance - gCameraObject->unk1C) * 0.125; + gCameraObject->unk20 += (yVel - gCameraObject->unk20) * 0.125; + cosOffset = cosine_s(gCameraObject->trans.x_rotation - baseAngle); + sineOffset = sine_s(gCameraObject->trans.x_rotation - baseAngle); + lateralOffset = gCameraObject->unk1C; + lateralOffset = (lateralOffset * sineOffset) - (gCameraObject->unk20 * cosOffset); + yVel = (gCameraObject->unk1C * cosOffset) + (gCameraObject->unk20 * sineOffset); + sineOffset = cosine_s(-racer->unk196 + 0x8000) * lateralOffset; + cosOffset = sine_s(-racer->unk196 + 0x8000) * lateralOffset; + baseDistance = 0.0f; + if (gCurrentCarInput & 0x8000) { + baseDistance = racer->lateral_velocity * 1.3; + if (baseDistance > 0.0f) { + baseDistance -= 1.5; + if (baseDistance < 0.0f) { + baseDistance = 0.0f; + } + } else { + baseDistance += 1.5; + if (baseDistance > 0.0f) { + baseDistance = 0.0f; + } + } + } + if (racer->drift_direction) { + baseDistance = -(f32) racer->drift_direction * 12.0f; + } + racer->unkC8 += (baseDistance - racer->unkC8) * 0.125; + if (racer->spinout_timer) { + racer->camera_zoom -= racer->camera_zoom * 0.25; + } else { + racer->camera_zoom += (10.0 - racer->camera_zoom) * 0.25; + } + xOffset = obj->segment.trans.x_position - (racer->ox1 * racer->camera_zoom); + yOffset = obj->segment.trans.y_position - (racer->oy1 * racer->camera_zoom); + zOffset = obj->segment.trans.z_position - (racer->oz1 * racer->camera_zoom); + tempVel = cosine_s(racer->unk196 + 0x4000) * racer->unkC8; + baseDistance = xOffset + tempVel; + gCameraObject->trans.x_position = sineOffset + baseDistance; + yOffset += yVel; + temp_f16 = (gCameraObject->trans.y_position - yOffset) * 0.25; + if (temp_f16 < -2.0) { + gCameraObject->trans.y_position -= temp_f16 + 2.0; + } + gCameraObject->trans.y_position -= temp_f16 * 0.25; + if (temp_f16 > 0.0f || D_8011D540) { + gCameraObject->trans.y_position = yOffset; + } + gCameraObject->trans.z_position = zOffset + (-sine_s(racer->unk196 + 0x4000) * racer->unkC8) + cosOffset; + gCameraObject->trans.y_rotation = racer->unk196; + newAngle = gCameraObject->trans.z_rotation; + if ((racer->drift_direction && racer->brake > 0.0) || D_8011D586) { + newAngle = 0; + } + angle = obj->segment.trans.z_rotation; + angleVel = (newAngle + angle) >> 4; + gCameraObject->trans.z_rotation -= angleVel; + if (gCameraObject->trans.z_rotation > 0x2000) { + gCameraObject->trans.z_rotation = 0x2000; + } + if (gCameraObject->trans.z_rotation < -0x2000) { + gCameraObject->trans.z_rotation = -0x2000; + } + gCameraObject->trans.y_position -= racer->unkC8 * cosine_s(gCameraObject->trans.z_rotation); + lateralOffset = (yOffset = gCameraObject->trans.x_position); + segmentIndex = get_level_segment_index_from_position(lateralOffset, gCameraObject->trans.y_position, gCameraObject->trans.z_position); + if (segmentIndex != -1) { + gCameraObject->unk34 = segmentIndex; + } + racer->unk196 = gCameraObject->trans.y_rotation; +} +#else +GLOBAL_ASM("asm/non_matchings/racer/update_camera_car.s") +#endif + +/** + * Handles the camera movement when the player has finished a challenge. + * If the player still exists, it will follow and rotate around the player. + * Otherwise, it will follow a set path while rotating. + */ +void update_camera_finish_challenge(UNUSED f32 updateRate, Object *obj, Object_Racer *racer) { s32 levelSeg; f32 temp_f12; f32 zOffset; @@ -1247,41 +2159,60 @@ void func_80058B84(f32 arg0, Object* obj, Object_Racer* arg2) { if (levelSeg != -1) { gCameraObject->unk34 = levelSeg; } - arg2->unk196 = gCameraObject->trans.y_rotation; + racer->unk196 = gCameraObject->trans.y_rotation; } -GLOBAL_ASM("asm/non_matchings/racer/func_80058D5C.s") +/** + * Handles the camera movement when the player has finished the race. + * Uses a more cinematic approach to following the player, using pre-existing points in the track to look from. + */ +void update_camera_finish_race(UNUSED f32 updateRate, Object *obj, Object_Racer *racer) { + s32 cameraID; + Object *tempObj; + f32 xDiff; + f32 yDiff; + f32 zDiff; + f32 distance; -void func_80058F44(f32 arg0, struct Object *arg1, struct Object *arg2) -{ - s32 temp_f4; - f32 diffX; - f32 diffZ; - temp_f4 = (s32) arg0; - diffX = gCameraObject->trans.x_position - arg1->segment.trans.x_position; - diffZ = gCameraObject->trans.z_position - arg1->segment.trans.z_position; - gCameraObject->trans.y_rotation += ((((-func_8007066C((s32) diffX, (s32) diffZ)) - - gCameraObject->trans.y_rotation) + 0x8000) * temp_f4) >> 4; - gCameraObject->trans.z_rotation -= (((s32) (gCameraObject->trans.z_rotation * temp_f4)) >> 4); + cameraID = racer->spectateCamID; + tempObj = func_8001BDD4(obj, &cameraID); + if (!tempObj) { + gCameraObject->mode = CAMERA_FINISH_CHALLENGE; + return; + } + racer->spectateCamID = cameraID; + gCameraObject->trans.x_position = tempObj->segment.trans.x_position; + gCameraObject->trans.y_position = tempObj->segment.trans.y_position; + gCameraObject->trans.z_position = tempObj->segment.trans.z_position; + xDiff = gCameraObject->trans.x_position - obj->segment.trans.x_position; + yDiff = gCameraObject->trans.y_position - obj->segment.trans.y_position; + zDiff = gCameraObject->trans.z_position - obj->segment.trans.z_position; + distance = sqrtf((xDiff * xDiff) + (zDiff * zDiff)); + gCameraObject->trans.y_rotation = (s16) (0x8000 - func_8007066C((s32) xDiff, (s32) zDiff)); + gCameraObject->trans.x_rotation = func_8007066C((s32) yDiff, (s32) distance); + gCameraObject->trans.z_rotation = 0; + gCameraObject->unk34 = get_level_segment_index_from_position(gCameraObject->trans.x_position, racer->oy1, gCameraObject->trans.z_position); +} + +/** + * Stops the camera in place when set, while still pointing in the direction of the player. + * Used when entering doors. + */ +void update_camera_fixed(f32 updateRate, struct Object *obj, struct Object_Racer *racer) { + s32 delta; + f32 xDiff; + f32 zDiff; + delta = (s32) updateRate; + xDiff = gCameraObject->trans.x_position - obj->segment.trans.x_position; + zDiff = gCameraObject->trans.z_position - obj->segment.trans.z_position; + gCameraObject->trans.y_rotation += ((((-func_8007066C((s32) xDiff, (s32) zDiff)) - + gCameraObject->trans.y_rotation) + 0x8000) * delta) >> 4; + gCameraObject->trans.z_rotation -= (((s32) (gCameraObject->trans.z_rotation * delta)) >> 4); gCameraObject->unk34 = get_level_segment_index_from_position(gCameraObject->trans.x_position, - arg2->segment.unk3C_a.unk3C_f, gCameraObject->trans.z_position); + racer->oy1, gCameraObject->trans.z_position); } -typedef struct Object_64_80059080 { - u8 pad0[0x10]; - f32 unk10; - f32 unk14; - f32 unk18; - u8 pad1C[0x8C]; - f32 unkA8; - u8 padAC[0xE6]; - s8 unk192; - u8 pad196[0x35]; - u8 unk1C8; - u8 pad1C9[3]; -} Object_64_80059080; - -void func_80059080(s32 arg0, struct Object_64_80059080 *arg1, f32 *arg2, f32 *arg3, f32 *arg4) { +void func_80059080(UNUSED Object *obj, Object_Racer *racer, f32 *xVel, f32 *yVel, f32 *zVel) { unknown8011AECC *temp_v0_2; s32 splinePos; s32 destReached; @@ -1295,17 +2226,17 @@ void func_80059080(s32 arg0, struct Object_64_80059080 *arg1, f32 *arg2, f32 *ar splineEnd = func_8001BA64(); if (splineEnd) { - magnitude = 1.0 - arg1->unkA8; + magnitude = 1.0 - racer->checkpoint_distance; if (magnitude < 0.0f) { magnitude = 0.0f; } - if (arg1->unk192) {} - splinePos = arg1->unk192 - 2; + if (racer->unk192) {} + splinePos = racer->unk192 - 2; if (splinePos < 0) { splinePos += splineEnd; } for (i = 0; i < 5; i++) { - temp_v0_2 = func_8001BA1C(splinePos, arg1->unk1C8); + temp_v0_2 = func_8001BA1C(splinePos, racer->unk1C8); splineX[i] = temp_v0_2->unk10; splineY[i] = temp_v0_2->unk14; splineZ[i] = temp_v0_2->unk18; @@ -1319,9 +2250,9 @@ void func_80059080(s32 arg0, struct Object_64_80059080 *arg1, f32 *arg2, f32 *ar destReached = 1; magnitude -= 1.0; } - *arg2 = catmull_rom_interpolation(splineX, destReached, magnitude); - *arg3 = catmull_rom_interpolation(splineY, destReached, magnitude); - *arg4 = catmull_rom_interpolation(splineZ, destReached, magnitude); + *xVel = catmull_rom_interpolation(splineX, destReached, magnitude); + *yVel = catmull_rom_interpolation(splineY, destReached, magnitude); + *zVel = catmull_rom_interpolation(splineZ, destReached, magnitude); } } @@ -1463,18 +2394,18 @@ void antipiracy_modify_surface_traction_table(void) { gSurfaceTractionTable[0] = 0.05f; } -void func_8005C270(unk8005C270 *arg0) { +void func_8005C270(Object_Racer *racer) { s32 temp = func_8001BA64(); - arg0->unk192--; - if (arg0->unk192 < 0) { - arg0->unk192 += temp; - if (arg0->unk193 > 0) { - arg0->unk193--; + racer->unk192--; + if (racer->unk192 < 0) { + racer->unk192 += temp; + if (racer->unk193 > 0) { + racer->unk193--; } } - if (arg0->unk190 >= -31999) { - arg0->unk190--; + if (racer->unk190 > -0x7D00) { + racer->unk190--; } } diff --git a/src/racer.h b/src/racer.h index 3be4f778..0421c684 100644 --- a/src/racer.h +++ b/src/racer.h @@ -3,6 +3,7 @@ #include "types.h" #include "structs.h" +#include "level_object_entries.h" typedef enum ActivePlayers { PLAYER_COMPUTER = -1, @@ -12,6 +13,18 @@ typedef enum ActivePlayers { PLAYER_FOUR } ActivePlayers; +typedef enum RaceStatus { + STATUS_RACING, + STATUS_FINISHED +} RaceStatus; + +typedef enum CameraZoom { + ZOOM_MEDIUM, + ZOOM_FAR, + ZOOM_CLOSE, + ZOOM_VERY_CLOSE +} CameraZoom; + typedef struct ObjectCamera { /* 0x0014 */ ObjectTransform trans; /* 0x0018 */ f32 unk18; @@ -22,10 +35,10 @@ typedef struct ObjectCamera { /* 0x002C */ f32 z_velocity; /* 0x0030 */ f32 unk30; /* 0x0034 */ s16 unk34; - /* 0x0036 */ s16 unk36; + /* 0x0036 */ s16 mode; /* 0x0038 */ s16 unk38; - /* 0x003A */ u8 unk3A; - /* 0x003B */ u8 unk3B; + /* 0x003A */ s8 unk3A; + /* 0x003B */ u8 zoom; /* 0x003C */ u8 unk3C; /* 0x003D */ u8 unk3D; /* 0x003E */ u8 unk3E; @@ -43,6 +56,23 @@ typedef struct unk8005234C { s16 unk16C; } unk8005234C; +// Also fairly certain this is NOT Object_Racer. +typedef struct Object_64_Unknown5 { + u8 pad0[0x88]; + u8 unk89; + u8 pad90[0xE9]; + s8 unk172; + s8 unk173; + s8 unk174; + u8 pad175[0x5E]; + s8 unk1D3; +} Object_64_Unknown5; + +typedef struct TempStruct5 { + s8 pad0[8]; + s8 unk8[4][4]; +} TempStruct5; + typedef struct Object_64_80053478 { u8 unk0[0x2C]; f32 unk2C; // Forward Velocity? @@ -82,14 +112,7 @@ typedef struct unk800579B0 { s8 unk1E1; } unk800579B0; -/* Unknown Size */ -typedef struct unk8005C270 { - u8 unk0[0x190]; - s16 unk190; - s8 unk192; - s8 unk193; -} unk8005C270; - +extern ObjectCamera *gCameraObject; extern s32 gObjLoopGoldenBalloonLength; extern s16 D_800DCB54; extern s32 D_800DCB58; @@ -140,24 +163,24 @@ s32 get_random_number_from_range(s32, s32); //? void func_8006FC30(Matrix, ObjectTransform *); // asm func void func_8006FE74(Matrix *, ObjectTransform *); // Non Matching ? -s32 func_80044450(s32 arg0); +s32 func_80044450(s32 cap); void func_8004C0A0(s32 arg0, Object *planeObj, Object_Racer *planeObj64); -void func_8004C140(Object *obj, Object_Racer *obj64); -void func_8004D95C(s32 arg0, s32 arg1, Object *obj, Object_Racer *obj64); +void func_8004C140(Object *obj, Object_Racer *racer); +void func_8004D95C(s32 arg0, s32 arg1, Object *obj, Object_Racer *racer); void func_8004F77C(unk8004F77C *arg0); s32 func_80052188(void); void func_800521B8(s32 arg0); -void func_8005234C(unk8005234C *arg0); -void func_80052988(Object *arg0, Object_Racer *arg1, s32 arg2, s32 arg3, s32 arg4, s32 arg5, s32 arg6, s32 arg7); -void handle_car_steering(Object_Racer *obj); +void func_8005234C(Object_Racer *racer); +void func_80052988(Object *obj, Object_Racer *arg1, s32 action, s32 arg3, s32 duration, s32 arg5, s32 arg6, s32 arg7); +void handle_car_steering(Object_Racer *racer); void func_800535C4(unk800535C4 *arg0, unk800535C4_2 *arg1); -void handle_car_velocity_control(Object_Racer *obj); -void play_char_horn_sound(Object *obj, Object_Racer *obj64); +void handle_car_velocity_control(Object_Racer *racer); +void play_char_horn_sound(Object *obj, Object_Racer *racer); void func_80057048(Object *obj, s32 arg1); void func_800570A4(Object *obj, s32 arg1, s32 arg2); -void func_800575EC(Object *obj, Object_Racer *obj64); -void func_800579B0(unk800579B0 *arg0, s32 arg1, f32 arg2); -void func_800580B4(Object *obj, Object_Racer *obj64, s32 arg2, f32 arg3); +void func_800575EC(Object *obj, Object_Racer *racer); +void func_800579B0(Object_Racer *racer, s32 arg1, f32 updateRate); +void func_800580B4(Object *obj, Object_Racer *racer, s32 mode, f32 arg3); void get_timestamp_from_frames(s32 frameCount, s32 *minutes, s32 *seconds, s32 *hundredths); void func_800598D0(void); void func_80059944(void); @@ -172,12 +195,39 @@ void func_8005A3B0(void); void func_8005A3C0(void); void func_8005A3D0(void); void antipiracy_modify_surface_traction_table(void); -s32 func_80052388(Object *obj1, Object_Racer *arg1, Object *obj2, f32 distance); +s32 func_80052388(Object *obj1, Object_Racer *racer, Object *obj2, f32 distance); +void func_80055A84(Object *obj, Object_Racer *racer, s32 arg2); +void func_8005C270(Object_Racer *racer); +f32 func_80057220(Object *obj, Object_Racer *racer); +void func_800570B8(Object *obj, s32 arg1, s32 arg2, s32 arg3); +void apply_vehicle_rotation_offset(Object_Racer *obj, s32 max, s16 yRotation, s16 xRotation, s16 zRotation); +void func_80059080(Object *obj, Object_Racer *racer, f32 *velX, f32 *velY, f32 *velZ); +void func_80054110(Object *obj, Object_Racer *racer, s32 updateRate, f32 arg3); +void update_camera_hovercraft(f32 updateRate, Object *obj, Object_Racer *racer); +void update_camera_plane(f32 updateRate, Object *obj, Object_Racer *racer); +void update_camera_loop(f32 updateRate, Object *obj, Object_Racer *racer); +void update_camera_car(f32 updateRate, Object *obj, Object_Racer *racer); +void update_camera_finish_challenge(f32 arg0, Object *obj, Object_Racer *racer); +void update_camera_finish_race(f32 arg0, Object *obj, Object_Racer *racer); +void update_camera_fixed(f32 arg0, struct Object *obj, Object_Racer *racer); +void func_800521C4(Object *obj, Object_Racer *racer, s32 arg2); +void func_80050754(Object *obj, Object_Racer *racer, f32 divisor); +void obj_init_racer(Object *obj, LevelObjectEntry_CharacterFlag *racer); +void func_80044170(Object *obj, Object_Racer *racer, s32 updateRate); +void func_80043ECC(s32 arg0, Object_64_Unknown5 *arg1, s32 updateRate); +void func_80055A84(Object *obj, Object_Racer *racer, s32 updateRate); +void func_80057A40(Object *obj, Object_Racer *racer, f32 updateRate); //Non Matching void set_ghost_position_and_rotation(Object *obj); -void func_800570B8(Object *obj, s32 arg1, s32 arg2, s32 arg3); -void func_800576E0(Object *obj, Object_Racer *obj64, s32 arg2); -void func_80057A40(Object *obj, Object_Racer *obj64, f32 arg2); +void func_800576E0(Object *obj, Object_Racer *racer, s32 arg2); +void func_80055EC0(Object *obj, Object_Racer *racer, s32); +void func_80054FD0(Object *obj, Object_Racer *racer, s32); +void func_8005492C(Object *obj, Object_Racer *racer, s32, f32); +void func_80053E9C(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); +void func_80052B64(Object *obj, Object_Racer *racer, s32, f32); +s32 func_80017248(void*, s32, s32*, void*, f32*, s32*, s8*); #endif