diff --git a/README.md b/README.md index be0b65ce..111a5575 100644 --- a/README.md +++ b/README.md @@ -7,7 +7,7 @@ Currently, only the US 1.0 version (SHA1 = 0cb115d8716dbbc2922fda38e533b9fe63bb9 As of March 6, 2025, this is our current score: -    Decomp progress: 72.44% +    Decomp progress: 72.88%     Documentation progress: 49.99% @@ -128,29 +128,29 @@ s32 is_drumstick_unlocked(void) { As of March 6, 2025, this is our current score: ``` - =============================================== - ADVENTURE ONE (ASM -> C Decompilation) - ---- 72.44% Complete (75.60% NON_MATCHING) ---- - # Decompiled functions: 1816 - # GLOBAL_ASM remaining: 125 - # NON_MATCHING functions: 15 - # NON_EQUIVALENT WIP functions: 43 - ----------------- Game Status ----------------- - Balloons: 35/47, Keys: 4/4, Trophies: 3/5 - T.T. Amulets: 3/4, Wizpig Amulets: 3/4 - ----------------------------------------------- - We are racing the dragon boss Smokey. (Lap 3/3) - =============================================== - ADVENTURE TWO (Cleanup & Documentation) - --------------- 49.99% Complete --------------- - # Documented functions: 1091 - # Undocumented remaining: 556 - ----------------- Game Status ----------------- - Balloons: 24/47, Keys: 3/4, Trophies: 2/5 - T.T. Amulets: 2/4, Wizpig Amulets: 2/4 - ----------------------------------------------- - We are racing in Pirate Lagoon. (Lap 3/3) - =============================================== +========================================================== + ADVENTURE ONE (ASM -> C Decompilation) + --------- 72.88% Complete (76.05% NON_MATCHING) ---------- + # Decompiled functions: 1817 + # GLOBAL_ASM remaining: 124 + # NON_MATCHING functions: 15 + # NON_EQUIVALENT WIP functions: 43 + ---------------------- Game Status ----------------------- + Balloons: 35/47, Keys: 4/4, Trophies: 3/5 + T.T. Amulets: 3/4, Wizpig Amulets: 3/4 + ---------------------------------------------------------- + We are collecting bananas in Smokey Castle. (1/10 Bananas) + ========================================================== + ADVENTURE TWO (Cleanup & Documentation) + -------------------- 49.99% Complete --------------------- + # Documented functions: 1091 + # Undocumented remaining: 556 + ---------------------- Game Status ----------------------- + Balloons: 24/47, Keys: 3/4, Trophies: 2/5 + T.T. Amulets: 2/4, Wizpig Amulets: 2/4 + ---------------------------------------------------------- + We are racing in Pirate Lagoon. (Lap 3/3) + ========================================================== ``` diff --git a/asm/non_matchings/racer/func_8004F7F4.s b/asm/non_matchings/racer/func_8004F7F4.s deleted file mode 100644 index 640a21aa..00000000 --- a/asm/non_matchings/racer/func_8004F7F4.s +++ /dev/null @@ -1,1075 +0,0 @@ -.late_rodata -glabel D_800E6600 -.double 0.065 -glabel D_800E6608 -.double 0.3 -glabel D_800E6610 -.double 0.1 -glabel D_800E6618 -.double 0.3 -glabel D_800E6620 -.double 0.1 -glabel D_800E6628 -.double 0.004 -glabel D_800E6630 -.double 0.65 - -.text -glabel func_8004F7F4 -/* 0503F4 8004F7F4 27BDFF40 */ addiu $sp, $sp, -0xc0 -/* 0503F8 8004F7F8 AFBF002C */ sw $ra, 0x2c($sp) -/* 0503FC 8004F7FC AFB10028 */ sw $s1, 0x28($sp) -/* 050400 8004F800 AFB00024 */ sw $s0, 0x24($sp) -/* 050404 8004F804 AFA400C0 */ sw $a0, 0xc0($sp) -/* 050408 8004F808 AFA500C4 */ sw $a1, 0xc4($sp) -/* 05040C 8004F80C A3A00053 */ sb $zero, 0x53($sp) -/* 050410 8004F810 80EE01D2 */ lb $t6, 0x1d2($a3) -/* 050414 8004F814 00E08025 */ move $s0, $a3 -/* 050418 8004F818 11C00008 */ beqz $t6, .L8004F83C -/* 05041C 8004F81C 00C08825 */ move $s1, $a2 -/* 050420 8004F820 3C048012 */ lui $a0, %hi(gCurrentRacerInput) # $a0, 0x8012 -/* 050424 8004F824 2484D528 */ addiu $a0, %lo(gCurrentRacerInput) # addiu $a0, $a0, -0x2ad8 -/* 050428 8004F828 8C8F0000 */ lw $t7, ($a0) -/* 05042C 8004F82C 3C01FFFF */ lui $at, (0xFFFF7FFF >> 16) # lui $at, 0xffff -/* 050430 8004F830 34217FFF */ ori $at, (0xFFFF7FFF & 0xFFFF) # ori $at, $at, 0x7fff -/* 050434 8004F834 01E1C024 */ and $t8, $t7, $at -/* 050438 8004F838 AC980000 */ sw $t8, ($a0) -.L8004F83C: -/* 05043C 8004F83C 3C198012 */ lui $t9, %hi(gCurrentPlayerIndex) # $t9, 0x8012 -/* 050440 8004F840 8F39D55C */ lw $t9, %lo(gCurrentPlayerIndex)($t9) -/* 050444 8004F844 3C048012 */ lui $a0, %hi(gCurrentRacerInput) # $a0, 0x8012 -/* 050448 8004F848 2401FFFF */ li $at, -1 -/* 05044C 8004F84C 13210005 */ beq $t9, $at, .L8004F864 -/* 050450 8004F850 2484D528 */ addiu $a0, %lo(gCurrentRacerInput) # addiu $a0, $a0, -0x2ad8 -/* 050454 8004F854 820801D8 */ lb $t0, 0x1d8($s0) -/* 050458 8004F858 00003025 */ move $a2, $zero -/* 05045C 8004F85C 11000008 */ beqz $t0, .L8004F880 -/* 050460 8004F860 00003825 */ move $a3, $zero -.L8004F864: -/* 050464 8004F864 8FA600C0 */ lw $a2, 0xc0($sp) -/* 050468 8004F868 8FA700C4 */ lw $a3, 0xc4($sp) -/* 05046C 8004F86C 02202025 */ move $a0, $s1 -/* 050470 8004F870 0C015044 */ jal update_onscreen_AI_racer -/* 050474 8004F874 02002825 */ move $a1, $s0 -/* 050478 8004F878 100003B2 */ b .L80050744 -/* 05047C 8004F87C 8FBF002C */ lw $ra, 0x2c($sp) -.L8004F880: -/* 050480 8004F880 820901D4 */ lb $t1, 0x1d4($s0) -/* 050484 8004F884 3C038012 */ lui $v1, %hi(gCurrentButtonsPressed) # $v1, 0x8012 -/* 050488 8004F888 1120000D */ beqz $t1, .L8004F8C0 -/* 05048C 8004F88C 2463D52C */ addiu $v1, %lo(gCurrentButtonsPressed) # addiu $v1, $v1, -0x2ad4 -/* 050490 8004F890 8C6A0000 */ lw $t2, ($v1) -/* 050494 8004F894 2401DFEF */ li $at, -8209 -/* 050498 8004F898 01415824 */ and $t3, $t2, $at -/* 05049C 8004F89C AC6B0000 */ sw $t3, ($v1) -/* 0504A0 8004F8A0 820201D4 */ lb $v0, 0x1d4($s0) -/* 0504A4 8004F8A4 00000000 */ nop -/* 0504A8 8004F8A8 18400004 */ blez $v0, .L8004F8BC -/* 0504AC 8004F8AC 244D0004 */ addiu $t5, $v0, 4 -/* 0504B0 8004F8B0 244CFFFC */ addiu $t4, $v0, -4 -/* 0504B4 8004F8B4 10000002 */ b .L8004F8C0 -/* 0504B8 8004F8B8 A20C01D4 */ sb $t4, 0x1d4($s0) -.L8004F8BC: -/* 0504BC 8004F8BC A20D01D4 */ sb $t5, 0x1d4($s0) -.L8004F8C0: -/* 0504C0 8004F8C0 8C8E0000 */ lw $t6, ($a0) -/* 0504C4 8004F8C4 00001825 */ move $v1, $zero -/* 0504C8 8004F8C8 31CF4000 */ andi $t7, $t6, 0x4000 -/* 0504CC 8004F8CC 11E0000D */ beqz $t7, .L8004F904 -/* 0504D0 8004F8D0 02002025 */ move $a0, $s0 -/* 0504D4 8004F8D4 820201E6 */ lb $v0, 0x1e6($s0) -/* 0504D8 8004F8D8 00000000 */ nop -/* 0504DC 8004F8DC 10400009 */ beqz $v0, .L8004F904 -/* 0504E0 8004F8E0 00000000 */ nop -/* 0504E4 8004F8E4 000218C0 */ sll $v1, $v0, 3 -/* 0504E8 8004F8E8 00621823 */ subu $v1, $v1, $v0 -/* 0504EC 8004F8EC 000318C0 */ sll $v1, $v1, 3 -/* 0504F0 8004F8F0 00621821 */ addu $v1, $v1, $v0 -/* 0504F4 8004F8F4 000318C0 */ sll $v1, $v1, 3 -/* 0504F8 8004F8F8 00621823 */ subu $v1, $v1, $v0 -/* 0504FC 8004F8FC 10000001 */ b .L8004F904 -/* 050500 8004F900 000318C0 */ sll $v1, $v1, 3 -.L8004F904: -/* 050504 8004F904 921801FE */ lbu $t8, 0x1fe($s0) -/* 050508 8004F908 00000000 */ nop -/* 05050C 8004F90C 17000006 */ bnez $t8, .L8004F928 -/* 050510 8004F910 8FA500C0 */ lw $a1, 0xc0($sp) -/* 050514 8004F914 8E390074 */ lw $t9, 0x74($s1) -/* 050518 8004F918 00000000 */ nop -/* 05051C 8004F91C 37280400 */ ori $t0, $t9, 0x400 -/* 050520 8004F920 AE280074 */ sw $t0, 0x74($s1) -/* 050524 8004F924 8FA500C0 */ lw $a1, 0xc0($sp) -.L8004F928: -/* 050528 8004F928 0C014214 */ jal apply_vehicle_rotation_offset -/* 05052C 8004F92C AFA30010 */ sw $v1, 0x10($sp) -/* 050530 8004F930 8FA600C4 */ lw $a2, 0xc4($sp) -/* 050534 8004F934 02202025 */ move $a0, $s1 -/* 050538 8004F938 0C014DD4 */ jal func_80053750 -/* 05053C 8004F93C 02002825 */ move $a1, $s0 -/* 050540 8004F940 8FA600C0 */ lw $a2, 0xc0($sp) -/* 050544 8004F944 02202025 */ move $a0, $s1 -/* 050548 8004F948 0C014871 */ jal handle_racer_head_turning -/* 05054C 8004F94C 02002825 */ move $a1, $s0 -/* 050550 8004F950 3C018012 */ lui $at, %hi(D_8011D550) # $at, 0x8012 -/* 050554 8004F954 A420D550 */ sh $zero, %lo(D_8011D550)($at) -/* 050558 8004F958 3C018012 */ lui $at, %hi(gCurrentCarSteerVel) # $at, 0x8012 -/* 05055C 8004F95C AC20D554 */ sw $zero, %lo(gCurrentCarSteerVel)($at) -/* 050560 8004F960 3C018012 */ lui $at, %hi(D_8011D558) # $at, 0x8012 -/* 050564 8004F964 AC20D558 */ sw $zero, %lo(D_8011D558)($at) -/* 050568 8004F968 C624000C */ lwc1 $f4, 0xc($s1) -/* 05056C 8004F96C 00000000 */ nop -/* 050570 8004F970 E7A400A8 */ swc1 $f4, 0xa8($sp) -/* 050574 8004F974 C6260010 */ lwc1 $f6, 0x10($s1) -/* 050578 8004F978 00000000 */ nop -/* 05057C 8004F97C E7A600A4 */ swc1 $f6, 0xa4($sp) -/* 050580 8004F980 C6280014 */ lwc1 $f8, 0x14($s1) -/* 050584 8004F984 00000000 */ nop -/* 050588 8004F988 E7A800A0 */ swc1 $f8, 0xa0($sp) -/* 05058C 8004F98C 820201E6 */ lb $v0, 0x1e6($s0) -/* 050590 8004F990 00000000 */ nop -/* 050594 8004F994 10400068 */ beqz $v0, .L8004FB38 -/* 050598 8004F998 00000000 */ nop -/* 05059C 8004F99C 04410013 */ bgez $v0, .L8004F9EC -/* 0505A0 8004F9A0 3C068012 */ lui $a2, %hi(gCurrentStickX) # $a2, 0x8012 -/* 0505A4 8004F9A4 24C6D534 */ addiu $a2, %lo(gCurrentStickX) # addiu $a2, $a2, -0x2acc -/* 0505A8 8004F9A8 8CC90000 */ lw $t1, ($a2) -/* 0505AC 8004F9AC 8FAB00C0 */ lw $t3, 0xc0($sp) -/* 0505B0 8004F9B0 2921001A */ slti $at, $t1, 0x1a -/* 0505B4 8004F9B4 1420000D */ bnez $at, .L8004F9EC -/* 0505B8 8004F9B8 00000000 */ nop -/* 0505BC 8004F9BC 860A016E */ lh $t2, 0x16e($s0) -/* 0505C0 8004F9C0 00000000 */ nop -/* 0505C4 8004F9C4 014B6021 */ addu $t4, $t2, $t3 -/* 0505C8 8004F9C8 A60C016E */ sh $t4, 0x16e($s0) -/* 0505CC 8004F9CC 8602016E */ lh $v0, 0x16e($s0) -/* 0505D0 8004F9D0 00000000 */ nop -/* 0505D4 8004F9D4 0441001C */ bgez $v0, .L8004FA48 -/* 0505D8 8004F9D8 00000000 */ nop -/* 0505DC 8004F9DC A600016E */ sh $zero, 0x16e($s0) -/* 0505E0 8004F9E0 8602016E */ lh $v0, 0x16e($s0) -/* 0505E4 8004F9E4 10000019 */ b .L8004FA4C -/* 0505E8 8004F9E8 44825000 */ mtc1 $v0, $f10 -.L8004F9EC: -/* 0505EC 8004F9EC 3C068012 */ lui $a2, %hi(gCurrentStickX) # $a2, 0x8012 -/* 0505F0 8004F9F0 18400012 */ blez $v0, .L8004FA3C -/* 0505F4 8004F9F4 24C6D534 */ addiu $a2, %lo(gCurrentStickX) # addiu $a2, $a2, -0x2acc -/* 0505F8 8004F9F8 8CCD0000 */ lw $t5, ($a2) -/* 0505FC 8004F9FC 8FAF00C0 */ lw $t7, 0xc0($sp) -/* 050600 8004FA00 29A1FFE7 */ slti $at, $t5, -0x19 -/* 050604 8004FA04 1020000D */ beqz $at, .L8004FA3C -/* 050608 8004FA08 00000000 */ nop -/* 05060C 8004FA0C 860E016E */ lh $t6, 0x16e($s0) -/* 050610 8004FA10 00000000 */ nop -/* 050614 8004FA14 01CFC023 */ subu $t8, $t6, $t7 -/* 050618 8004FA18 A618016E */ sh $t8, 0x16e($s0) -/* 05061C 8004FA1C 8602016E */ lh $v0, 0x16e($s0) -/* 050620 8004FA20 00000000 */ nop -/* 050624 8004FA24 18400008 */ blez $v0, .L8004FA48 -/* 050628 8004FA28 00000000 */ nop -/* 05062C 8004FA2C A600016E */ sh $zero, 0x16e($s0) -/* 050630 8004FA30 8602016E */ lh $v0, 0x16e($s0) -/* 050634 8004FA34 10000005 */ b .L8004FA4C -/* 050638 8004FA38 44825000 */ mtc1 $v0, $f10 -.L8004FA3C: -/* 05063C 8004FA3C A600016E */ sh $zero, 0x16e($s0) -/* 050640 8004FA40 8602016E */ lh $v0, 0x16e($s0) -/* 050644 8004FA44 00000000 */ nop -.L8004FA48: -/* 050648 8004FA48 44825000 */ mtc1 $v0, $f10 -.L8004FA4C: -/* 05064C 8004FA4C 44802000 */ mtc1 $zero, $f4 -/* 050650 8004FA50 46805420 */ cvt.s.w $f16, $f10 -/* 050654 8004FA54 3C0142A0 */ li $at, 0x42A00000 # 80.000000 -/* 050658 8004FA58 44814000 */ mtc1 $at, $f8 -/* 05065C 8004FA5C E7B000B8 */ swc1 $f16, 0xb8($sp) -/* 050660 8004FA60 C7B200B8 */ lwc1 $f18, 0xb8($sp) -/* 050664 8004FA64 02202025 */ move $a0, $s1 -/* 050668 8004FA68 4604903C */ c.lt.s $f18, $f4 -/* 05066C 8004FA6C 00000000 */ nop -/* 050670 8004FA70 45000003 */ bc1f .L8004FA80 -/* 050674 8004FA74 00000000 */ nop -/* 050678 8004FA78 46009187 */ neg.s $f6, $f18 -/* 05067C 8004FA7C E7A600B8 */ swc1 $f6, 0xb8($sp) -.L8004FA80: -/* 050680 8004FA80 C7AA00B8 */ lwc1 $f10, 0xb8($sp) -/* 050684 8004FA84 00000000 */ nop -/* 050688 8004FA88 460A403C */ c.lt.s $f8, $f10 -/* 05068C 8004FA8C 00000000 */ nop -/* 050690 8004FA90 45000009 */ bc1f .L8004FAB8 -/* 050694 8004FA94 00000000 */ nop -/* 050698 8004FA98 0C015C12 */ jal racer_play_sound -/* 05069C 8004FA9C 2405001C */ li $a1, 28 -/* 0506A0 8004FAA0 821901E6 */ lb $t9, 0x1e6($s0) -/* 0506A4 8004FAA4 3C068012 */ lui $a2, %hi(gCurrentStickX) # $a2, 0x8012 -/* 0506A8 8004FAA8 00194023 */ negu $t0, $t9 -/* 0506AC 8004FAAC 24C6D534 */ addiu $a2, %lo(gCurrentStickX) # addiu $a2, $a2, -0x2acc -/* 0506B0 8004FAB0 A20801DB */ sb $t0, 0x1db($s0) -/* 0506B4 8004FAB4 A20001E6 */ sb $zero, 0x1e6($s0) -.L8004FAB8: -/* 0506B8 8004FAB8 8CC30000 */ lw $v1, ($a2) -/* 0506BC 8004FABC 00000000 */ nop -/* 0506C0 8004FAC0 28610033 */ slti $at, $v1, 0x33 -/* 0506C4 8004FAC4 14200004 */ bnez $at, .L8004FAD8 -/* 0506C8 8004FAC8 2861FFCE */ slti $at, $v1, -0x32 -/* 0506CC 8004FACC 24030032 */ li $v1, 50 -/* 0506D0 8004FAD0 ACC30000 */ sw $v1, ($a2) -/* 0506D4 8004FAD4 2861FFCE */ slti $at, $v1, -0x32 -.L8004FAD8: -/* 0506D8 8004FAD8 10200003 */ beqz $at, .L8004FAE8 -/* 0506DC 8004FADC 00000000 */ nop -/* 0506E0 8004FAE0 2403FFCE */ li $v1, -50 -/* 0506E4 8004FAE4 ACC30000 */ sw $v1, ($a2) -.L8004FAE8: -/* 0506E8 8004FAE8 18600005 */ blez $v1, .L8004FB00 -/* 0506EC 8004FAEC 00000000 */ nop -/* 0506F0 8004FAF0 820B01E6 */ lb $t3, 0x1e6($s0) -/* 0506F4 8004FAF4 00000000 */ nop -/* 0506F8 8004FAF8 1D600006 */ bgtz $t3, .L8004FB14 -/* 0506FC 8004FAFC 00036083 */ sra $t4, $v1, 2 -.L8004FB00: -/* 050700 8004FB00 820201E6 */ lb $v0, 0x1e6($s0) -/* 050704 8004FB04 04610007 */ bgez $v1, .L8004FB24 -/* 050708 8004FB08 00026900 */ sll $t5, $v0, 4 -/* 05070C 8004FB0C 04410004 */ bgez $v0, .L8004FB20 -/* 050710 8004FB10 00036083 */ sra $t4, $v1, 2 -.L8004FB14: -/* 050714 8004FB14 ACCC0000 */ sw $t4, ($a2) -/* 050718 8004FB18 820201E6 */ lb $v0, 0x1e6($s0) -/* 05071C 8004FB1C 01801825 */ move $v1, $t4 -.L8004FB20: -/* 050720 8004FB20 00026900 */ sll $t5, $v0, 4 -.L8004FB24: -/* 050724 8004FB24 01A26823 */ subu $t5, $t5, $v0 -/* 050728 8004FB28 000D6880 */ sll $t5, $t5, 2 -/* 05072C 8004FB2C 006D7021 */ addu $t6, $v1, $t5 -/* 050730 8004FB30 10000002 */ b .L8004FB3C -/* 050734 8004FB34 ACCE0000 */ sw $t6, ($a2) -.L8004FB38: -/* 050738 8004FB38 A600016E */ sh $zero, 0x16e($s0) -.L8004FB3C: -/* 05073C 8004FB3C 8FA600C4 */ lw $a2, 0xc4($sp) -/* 050740 8004FB40 02002025 */ move $a0, $s0 -/* 050744 8004FB44 0C015E6C */ jal handle_base_steering -/* 050748 8004FB48 00002825 */ move $a1, $zero -/* 05074C 8004FB4C 02202025 */ move $a0, $s1 -/* 050750 8004FB50 0C015D7B */ jal func_800575EC -/* 050754 8004FB54 02002825 */ move $a1, $s0 -/* 050758 8004FB58 02202025 */ move $a0, $s1 -/* 05075C 8004FB5C 0C014D71 */ jal func_800535C4 -/* 050760 8004FB60 02002825 */ move $a1, $s0 -/* 050764 8004FB64 0C014D99 */ jal handle_car_velocity_control -/* 050768 8004FB68 02002025 */ move $a0, $s0 -/* 05076C 8004FB6C 8FA600C0 */ lw $a2, 0xc0($sp) -/* 050770 8004FB70 02202025 */ move $a0, $s1 -/* 050774 8004FB74 0C0157B0 */ jal handle_racer_items -/* 050778 8004FB78 02002825 */ move $a1, $s0 -/* 05077C 8004FB7C 8FA600C0 */ lw $a2, 0xc0($sp) -/* 050780 8004FB80 02202025 */ move $a0, $s1 -/* 050784 8004FB84 0C014FA7 */ jal racer_attack_handler_car -/* 050788 8004FB88 02002825 */ move $a1, $s0 -/* 05078C 8004FB8C 820F01DB */ lb $t7, 0x1db($s0) -/* 050790 8004FB90 00000000 */ nop -/* 050794 8004FB94 11E00008 */ beqz $t7, .L8004FBB8 -/* 050798 8004FB98 00000000 */ nop -/* 05079C 8004FB9C 8FA600C0 */ lw $a2, 0xc0($sp) -/* 0507A0 8004FBA0 8FA700C4 */ lw $a3, 0xc4($sp) -/* 0507A4 8004FBA4 02202025 */ move $a0, $s1 -/* 0507A8 8004FBA8 0C014AD9 */ jal racer_spinout_car -/* 0507AC 8004FBAC 02002825 */ move $a1, $s0 -/* 0507B0 8004FBB0 10000010 */ b .L8004FBF4 -/* 0507B4 8004FBB4 8E02001C */ lw $v0, 0x1c($s0) -.L8004FBB8: -/* 0507B8 8004FBB8 821801E2 */ lb $t8, 0x1e2($s0) -/* 0507BC 8004FBBC 8FA600C0 */ lw $a2, 0xc0($sp) -/* 0507C0 8004FBC0 1B000008 */ blez $t8, .L8004FBE4 -/* 0507C4 8004FBC4 02202025 */ move $a0, $s1 -/* 0507C8 8004FBC8 8FA600C0 */ lw $a2, 0xc0($sp) -/* 0507CC 8004FBCC 8FA700C4 */ lw $a3, 0xc4($sp) -/* 0507D0 8004FBD0 02202025 */ move $a0, $s1 -/* 0507D4 8004FBD4 0C01428A */ jal func_80050A28 -/* 0507D8 8004FBD8 02002825 */ move $a1, $s0 -/* 0507DC 8004FBDC 10000005 */ b .L8004FBF4 -/* 0507E0 8004FBE0 8E02001C */ lw $v0, 0x1c($s0) -.L8004FBE4: -/* 0507E4 8004FBE4 8FA700C4 */ lw $a3, 0xc4($sp) -/* 0507E8 8004FBE8 0C014B5F */ jal update_car_velocity_offground -/* 0507EC 8004FBEC 02002825 */ move $a1, $s0 -/* 0507F0 8004FBF0 8E02001C */ lw $v0, 0x1c($s0) -.L8004FBF4: -/* 0507F4 8004FBF4 00000000 */ nop -/* 0507F8 8004FBF8 10400004 */ beqz $v0, .L8004FC0C -/* 0507FC 8004FBFC 00000000 */ nop -/* 050800 8004FC00 0C001223 */ jal sound_stop -/* 050804 8004FC04 00402025 */ move $a0, $v0 -/* 050808 8004FC08 AE00001C */ sw $zero, 0x1c($s0) -.L8004FC0C: -/* 05080C 8004FC0C C60000C0 */ lwc1 $f0, 0xc0($s0) -/* 050810 8004FC10 44808000 */ mtc1 $zero, $f16 -/* 050814 8004FC14 00000000 */ nop -/* 050818 8004FC18 46008032 */ c.eq.s $f16, $f0 -/* 05081C 8004FC1C 00000000 */ nop -/* 050820 8004FC20 45010018 */ bc1t .L8004FC84 -/* 050824 8004FC24 00000000 */ nop -/* 050828 8004FC28 821901D7 */ lb $t9, 0x1d7($s0) -/* 05082C 8004FC2C 2401000B */ li $at, 11 -/* 050830 8004FC30 13210014 */ beq $t9, $at, .L8004FC84 -/* 050834 8004FC34 3C014024 */ li $at, 0x40240000 # 2.562500 -/* 050838 8004FC38 44819800 */ mtc1 $at, $f19 -/* 05083C 8004FC3C 44809000 */ mtc1 $zero, $f18 -/* 050840 8004FC40 46000121 */ cvt.d.s $f4, $f0 -/* 050844 8004FC44 46322181 */ sub.d $f6, $f4, $f18 -/* 050848 8004FC48 3C01800E */ lui $at, %hi(D_800E6600 + 4) # $at, 0x800e -/* 05084C 8004FC4C 46203220 */ cvt.s.d $f8, $f6 -/* 050850 8004FC50 C4316600 */ lwc1 $f17, %lo(D_800E6600)($at) -/* 050854 8004FC54 C4306604 */ lwc1 $f16, %lo(D_800E6600 + 4)($at) -/* 050858 8004FC58 460042A1 */ cvt.d.s $f10, $f8 -/* 05085C 8004FC5C 46305102 */ mul.d $f4, $f10, $f16 -/* 050860 8004FC60 C7B200C4 */ lwc1 $f18, 0xc4($sp) -/* 050864 8004FC64 E7A800B8 */ swc1 $f8, 0xb8($sp) -/* 050868 8004FC68 460091A1 */ cvt.d.s $f6, $f18 -/* 05086C 8004FC6C C62A0020 */ lwc1 $f10, 0x20($s1) -/* 050870 8004FC70 46262202 */ mul.d $f8, $f4, $f6 -/* 050874 8004FC74 46005421 */ cvt.d.s $f16, $f10 -/* 050878 8004FC78 46288480 */ add.d $f18, $f16, $f8 -/* 05087C 8004FC7C 46209120 */ cvt.s.d $f4, $f18 -/* 050880 8004FC80 E6240020 */ swc1 $f4, 0x20($s1) -.L8004FC84: -/* 050884 8004FC84 0C01AF6C */ jal get_current_level_header -/* 050888 8004FC88 00000000 */ nop -/* 05088C 8004FC8C C60A00C0 */ lwc1 $f10, 0xc0($s0) -/* 050890 8004FC90 44803800 */ mtc1 $zero, $f7 -/* 050894 8004FC94 44803000 */ mtc1 $zero, $f6 -/* 050898 8004FC98 46005421 */ cvt.d.s $f16, $f10 -/* 05089C 8004FC9C 46303032 */ c.eq.d $f6, $f16 -/* 0508A0 8004FCA0 00000000 */ nop -/* 0508A4 8004FCA4 45010004 */ bc1t .L8004FCB8 -/* 0508A8 8004FCA8 00000000 */ nop -/* 0508AC 8004FCAC 80480002 */ lb $t0, 2($v0) -/* 0508B0 8004FCB0 00000000 */ nop -/* 0508B4 8004FCB4 15000005 */ bnez $t0, .L8004FCCC -.L8004FCB8: -/* 0508B8 8004FCB8 3C098012 */ lui $t1, %hi(gCurrentSurfaceType) # $t1, 0x8012 -/* 0508BC 8004FCBC 8129D581 */ lb $t1, %lo(gCurrentSurfaceType)($t1) -/* 0508C0 8004FCC0 2401000A */ li $at, 10 -/* 0508C4 8004FCC4 1521004F */ bne $t1, $at, .L8004FE04 -/* 0508C8 8004FCC8 00000000 */ nop -.L8004FCCC: -/* 0508CC 8004FCCC 920A01F0 */ lbu $t2, 0x1f0($s0) -/* 0508D0 8004FCD0 02202025 */ move $a0, $s1 -/* 0508D4 8004FCD4 1140000A */ beqz $t2, .L8004FD00 -/* 0508D8 8004FCD8 02002825 */ move $a1, $s0 -/* 0508DC 8004FCDC 3C01800E */ lui $at, %hi(D_800E6608 + 4) # $at, 0x800e -/* 0508E0 8004FCE0 C60800A8 */ lwc1 $f8, 0xa8($s0) -/* 0508E4 8004FCE4 C4256608 */ lwc1 $f5, %lo(D_800E6608)($at) -/* 0508E8 8004FCE8 C424660C */ lwc1 $f4, %lo(D_800E6608 + 4)($at) -/* 0508EC 8004FCEC 460044A1 */ cvt.d.s $f18, $f8 -/* 0508F0 8004FCF0 46249281 */ sub.d $f10, $f18, $f4 -/* 0508F4 8004FCF4 462051A0 */ cvt.s.d $f6, $f10 -/* 0508F8 8004FCF8 10000009 */ b .L8004FD20 -/* 0508FC 8004FCFC E60600A8 */ swc1 $f6, 0xa8($s0) -.L8004FD00: -/* 050900 8004FD00 3C01800E */ lui $at, %hi(D_800E6610 + 4) # $at, 0x800e -/* 050904 8004FD04 C61000A8 */ lwc1 $f16, 0xa8($s0) -/* 050908 8004FD08 C4336610 */ lwc1 $f19, %lo(D_800E6610)($at) -/* 05090C 8004FD0C C4326614 */ lwc1 $f18, %lo(D_800E6610 + 4)($at) -/* 050910 8004FD10 46008221 */ cvt.d.s $f8, $f16 -/* 050914 8004FD14 46324101 */ sub.d $f4, $f8, $f18 -/* 050918 8004FD18 462022A0 */ cvt.s.d $f10, $f4 -/* 05091C 8004FD1C E60A00A8 */ swc1 $f10, 0xa8($s0) -.L8004FD20: -/* 050920 8004FD20 27AB00B4 */ addiu $t3, $sp, 0xb4 -/* 050924 8004FD24 AFAB0010 */ sw $t3, 0x10($sp) -/* 050928 8004FD28 27A600B8 */ addiu $a2, $sp, 0xb8 -/* 05092C 8004FD2C 0C016420 */ jal set_position_goal_from_path -/* 050930 8004FD30 27A700B0 */ addiu $a3, $sp, 0xb0 -/* 050934 8004FD34 920C01F0 */ lbu $t4, 0x1f0($s0) -# Used to access D_800E6620 and D_800E6620 + 4. -/* 050938 8004FD38 3C01800E */ lui $at, %hi(D_800E6620) # $at, 0x800e -/* 05093C 8004FD3C 1180000A */ beqz $t4, .L8004FD68 -/* 050940 8004FD40 00000000 */ nop -# Used to access D_800E6618 and D_800E6618 + 4. -/* 050944 8004FD44 3C01800E */ lui $at, %hi(D_800E6618) # $at, 0x800e -/* 050948 8004FD48 C60600A8 */ lwc1 $f6, 0xa8($s0) -/* 05094C 8004FD4C C4296618 */ lwc1 $f9, %lo(D_800E6618)($at) -/* 050950 8004FD50 C428661C */ lwc1 $f8, %lo(D_800E6618 + 4)($at) -/* 050954 8004FD54 46003421 */ cvt.d.s $f16, $f6 -/* 050958 8004FD58 46288480 */ add.d $f18, $f16, $f8 -/* 05095C 8004FD5C 46209120 */ cvt.s.d $f4, $f18 -/* 050960 8004FD60 10000008 */ b .L8004FD84 -/* 050964 8004FD64 E60400A8 */ swc1 $f4, 0xa8($s0) -.L8004FD68: -/* 050968 8004FD68 C60A00A8 */ lwc1 $f10, 0xa8($s0) -/* 05096C 8004FD6C C4316620 */ lwc1 $f17, %lo(D_800E6620)($at) -/* 050970 8004FD70 C4306624 */ lwc1 $f16, %lo(D_800E6620 + 4)($at) -/* 050974 8004FD74 460051A1 */ cvt.d.s $f6, $f10 -/* 050978 8004FD78 46303200 */ add.d $f8, $f6, $f16 -/* 05097C 8004FD7C 462044A0 */ cvt.s.d $f18, $f8 -/* 050980 8004FD80 E61200A8 */ swc1 $f18, 0xa8($s0) -.L8004FD84: -/* 050984 8004FD84 C7A400B8 */ lwc1 $f4, 0xb8($sp) -/* 050988 8004FD88 C62A000C */ lwc1 $f10, 0xc($s1) -/* 05098C 8004FD8C C7B000B4 */ lwc1 $f16, 0xb4($sp) -/* 050990 8004FD90 460A2181 */ sub.s $f6, $f4, $f10 -/* 050994 8004FD94 E7A600B8 */ swc1 $f6, 0xb8($sp) -/* 050998 8004FD98 C6280014 */ lwc1 $f8, 0x14($s1) -/* 05099C 8004FD9C 46063102 */ mul.s $f4, $f6, $f6 -/* 0509A0 8004FDA0 46088481 */ sub.s $f18, $f16, $f8 -/* 0509A4 8004FDA4 E7B200B4 */ swc1 $f18, 0xb4($sp) -/* 0509A8 8004FDA8 46129282 */ mul.s $f10, $f18, $f18 -/* 0509AC 8004FDAC 0C0326B4 */ jal sqrtf -/* 0509B0 8004FDB0 460A2300 */ add.s $f12, $f4, $f10 -/* 0509B4 8004FDB4 C7B000B8 */ lwc1 $f16, 0xb8($sp) -/* 0509B8 8004FDB8 C7A600B4 */ lwc1 $f6, 0xb4($sp) -/* 0509BC 8004FDBC 46008203 */ div.s $f8, $f16, $f0 -/* 0509C0 8004FDC0 3C014080 */ li $at, 0x40800000 # 4.000000 -/* 0509C4 8004FDC4 44811000 */ mtc1 $at, $f2 -/* 0509C8 8004FDC8 E7A000B0 */ swc1 $f0, 0xb0($sp) -/* 0509CC 8004FDCC 3C014118 */ li $at, 0x41180000 # 9.500000 -/* 0509D0 8004FDD0 240D0001 */ li $t5, 1 -/* 0509D4 8004FDD4 46003483 */ div.s $f18, $f6, $f0 -/* 0509D8 8004FDD8 46024102 */ mul.s $f4, $f8, $f2 -/* 0509DC 8004FDDC E7A800B8 */ swc1 $f8, 0xb8($sp) -/* 0509E0 8004FDE0 44813000 */ mtc1 $at, $f6 -/* 0509E4 8004FDE4 E7B200B4 */ swc1 $f18, 0xb4($sp) -/* 0509E8 8004FDE8 E624001C */ swc1 $f4, 0x1c($s1) -/* 0509EC 8004FDEC C7AA00B4 */ lwc1 $f10, 0xb4($sp) -/* 0509F0 8004FDF0 E6260020 */ swc1 $f6, 0x20($s1) -/* 0509F4 8004FDF4 46025402 */ mul.s $f16, $f10, $f2 -/* 0509F8 8004FDF8 E6300024 */ swc1 $f16, 0x24($s1) -/* 0509FC 8004FDFC 10000007 */ b .L8004FE1C -/* 050A00 8004FE00 A20D01F0 */ sb $t5, 0x1f0($s0) -.L8004FE04: -/* 050A04 8004FE04 820E01E2 */ lb $t6, 0x1e2($s0) -/* 050A08 8004FE08 00000000 */ nop -/* 050A0C 8004FE0C 29C10003 */ slti $at, $t6, 3 -/* 050A10 8004FE10 14200002 */ bnez $at, .L8004FE1C -/* 050A14 8004FE14 00000000 */ nop -/* 050A18 8004FE18 A20001F0 */ sb $zero, 0x1f0($s0) -.L8004FE1C: -/* 050A1C 8004FE1C 8E0F0148 */ lw $t7, 0x148($s0) -/* 050A20 8004FE20 00000000 */ nop -/* 050A24 8004FE24 15E00005 */ bnez $t7, .L8004FE3C -/* 050A28 8004FE28 00000000 */ nop -/* 050A2C 8004FE2C 8FA600C0 */ lw $a2, 0xc0($sp) -/* 050A30 8004FE30 02202025 */ move $a0, $s1 -/* 050A34 8004FE34 0C014943 */ jal func_8005250C -/* 050A38 8004FE38 02002825 */ move $a1, $s0 -.L8004FE3C: -/* 050A3C 8004FE3C 860501A2 */ lh $a1, 0x1a2($s0) -/* 050A40 8004FE40 3C188012 */ lui $t8, %hi(gCurrentCarSteerVel) # $t8, 0x8012 -/* 050A44 8004FE44 8F18D554 */ lw $t8, %lo(gCurrentCarSteerVel)($t8) -/* 050A48 8004FE48 30B9FFFF */ andi $t9, $a1, 0xffff -/* 050A4C 8004FE4C 34018001 */ li $at, 32769 -/* 050A50 8004FE50 03191823 */ subu $v1, $t8, $t9 -/* 050A54 8004FE54 0061082A */ slt $at, $v1, $at -/* 050A58 8004FE58 8FA900C0 */ lw $t1, 0xc0($sp) -/* 050A5C 8004FE5C 14200003 */ bnez $at, .L8004FE6C -/* 050A60 8004FE60 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 050A64 8004FE64 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 050A68 8004FE68 00611821 */ addu $v1, $v1, $at -.L8004FE6C: -/* 050A6C 8004FE6C 28618000 */ slti $at, $v1, -0x8000 -/* 050A70 8004FE70 10200002 */ beqz $at, .L8004FE7C -/* 050A74 8004FE74 3401FFFF */ li $at, 65535 -/* 050A78 8004FE78 00611821 */ addu $v1, $v1, $at -.L8004FE7C: -/* 050A7C 8004FE7C 00034083 */ sra $t0, $v1, 2 -/* 050A80 8004FE80 290102EF */ slti $at, $t0, 0x2ef -/* 050A84 8004FE84 14200002 */ bnez $at, .L8004FE90 -/* 050A88 8004FE88 01001825 */ move $v1, $t0 -/* 050A8C 8004FE8C 240302EE */ li $v1, 750 -.L8004FE90: -/* 050A90 8004FE90 2861FD12 */ slti $at, $v1, -0x2ee -/* 050A94 8004FE94 10200002 */ beqz $at, .L8004FEA0 -/* 050A98 8004FE98 00000000 */ nop -/* 050A9C 8004FE9C 2403FD12 */ li $v1, -750 -.L8004FEA0: -/* 050AA0 8004FEA0 00690019 */ multu $v1, $t1 -/* 050AA4 8004FEA4 860C01A0 */ lh $t4, 0x1a0($s0) -/* 050AA8 8004FEA8 3C0F8012 */ lui $t7, %hi(D_8011D558) # $t7, 0x8012 -/* 050AAC 8004FEAC 3C048012 */ lui $a0, %hi(D_8011D550) # $a0, 0x8012 -/* 050AB0 8004FEB0 00005012 */ mflo $t2 -/* 050AB4 8004FEB4 00AA5821 */ addu $t3, $a1, $t2 -/* 050AB8 8004FEB8 A60B01A2 */ sh $t3, 0x1a2($s0) -/* 050ABC 8004FEBC 860D01A2 */ lh $t5, 0x1a2($s0) -/* 050AC0 8004FEC0 00000000 */ nop -/* 050AC4 8004FEC4 018D7021 */ addu $t6, $t4, $t5 -/* 050AC8 8004FEC8 A62E0000 */ sh $t6, ($s1) -/* 050ACC 8004FECC 860201A6 */ lh $v0, 0x1a6($s0) -/* 050AD0 8004FED0 8DEFD558 */ lw $t7, %lo(D_8011D558)($t7) -/* 050AD4 8004FED4 8FB900C0 */ lw $t9, 0xc0($sp) -/* 050AD8 8004FED8 01E2C023 */ subu $t8, $t7, $v0 -/* 050ADC 8004FEDC 03190019 */ multu $t8, $t9 -/* 050AE0 8004FEE0 860B01A4 */ lh $t3, 0x1a4($s0) -/* 050AE4 8004FEE4 00004012 */ mflo $t0 -/* 050AE8 8004FEE8 00084903 */ sra $t1, $t0, 4 -/* 050AEC 8004FEEC 00495021 */ addu $t2, $v0, $t1 -/* 050AF0 8004FEF0 A60A01A6 */ sh $t2, 0x1a6($s0) -/* 050AF4 8004FEF4 860C01A6 */ lh $t4, 0x1a6($s0) -/* 050AF8 8004FEF8 00000000 */ nop -/* 050AFC 8004FEFC 016C6821 */ addu $t5, $t3, $t4 -/* 050B00 8004FF00 A62D0004 */ sh $t5, 4($s1) -/* 050B04 8004FF04 9484D550 */ lhu $a0, %lo(D_8011D550)($a0) -/* 050B08 8004FF08 00000000 */ nop -/* 050B0C 8004FF0C 10800024 */ beqz $a0, .L8004FFA0 -/* 050B10 8004FF10 3C0E8012 */ lui $t6, %hi(gCurrentPlayerIndex) # $t6, 0x8012 -/* 050B14 8004FF14 8DCED55C */ lw $t6, %lo(gCurrentPlayerIndex)($t6) -/* 050B18 8004FF18 2401FFFF */ li $at, -1 -/* 050B1C 8004FF1C 11C1000F */ beq $t6, $at, .L8004FF5C -/* 050B20 8004FF20 2401010C */ li $at, 268 -/* 050B24 8004FF24 1081000D */ beq $a0, $at, .L8004FF5C -/* 050B28 8004FF28 260F021C */ addiu $t7, $s0, 0x21c -/* 050B2C 8004FF2C 8E25000C */ lw $a1, 0xc($s1) -/* 050B30 8004FF30 8E260010 */ lw $a2, 0x10($s1) -/* 050B34 8004FF34 8E270014 */ lw $a3, 0x14($s1) -/* 050B38 8004FF38 0C0007AA */ jal sound_play_spatial -/* 050B3C 8004FF3C AFAF0010 */ sw $t7, 0x10($sp) -/* 050B40 8004FF40 3C048012 */ lui $a0, %hi(D_8011D550) # $a0, 0x8012 -/* 050B44 8004FF44 3C068012 */ lui $a2, %hi(D_8011D553) # $a2, 0x8012 -/* 050B48 8004FF48 90C6D553 */ lbu $a2, %lo(D_8011D553)($a2) -/* 050B4C 8004FF4C 9484D550 */ lhu $a0, %lo(D_8011D550)($a0) -/* 050B50 8004FF50 8E05021C */ lw $a1, 0x21c($s0) -/* 050B54 8004FF54 0C0007EE */ jal sound_volume_set_relative -/* 050B58 8004FF58 00000000 */ nop -.L8004FF5C: -/* 050B5C 8004FF5C 3C188012 */ lui $t8, %hi(D_8011D552) # $t8, 0x8012 -/* 050B60 8004FF60 9718D552 */ lhu $t8, %lo(D_8011D552)($t8) -/* 050B64 8004FF64 3C01800E */ lui $at, %hi(D_800E6628 + 4) # $at, 0x800e -/* 050B68 8004FF68 2719FFD8 */ addiu $t9, $t8, -0x28 -/* 050B6C 8004FF6C 44999000 */ mtc1 $t9, $f18 -/* 050B70 8004FF70 C42B6628 */ lwc1 $f11, %lo(D_800E6628)($at) -/* 050B74 8004FF74 46809220 */ cvt.s.w $f8, $f18 -/* 050B78 8004FF78 C42A662C */ lwc1 $f10, %lo(D_800E6628 + 4)($at) -/* 050B7C 8004FF7C 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 -/* 050B80 8004FF80 46004121 */ cvt.d.s $f4, $f8 -/* 050B84 8004FF84 462A2402 */ mul.d $f16, $f4, $f10 -/* 050B88 8004FF88 44813800 */ mtc1 $at, $f7 -/* 050B8C 8004FF8C 44803000 */ mtc1 $zero, $f6 -/* 050B90 8004FF90 A20001E0 */ sb $zero, 0x1e0($s0) -/* 050B94 8004FF94 46303481 */ sub.d $f18, $f6, $f16 -/* 050B98 8004FF98 46209220 */ cvt.s.d $f8, $f18 -/* 050B9C 8004FF9C E6080090 */ swc1 $f8, 0x90($s0) -.L8004FFA0: -/* 050BA0 8004FFA0 920801F0 */ lbu $t0, 0x1f0($s0) -/* 050BA4 8004FFA4 00000000 */ nop -/* 050BA8 8004FFA8 1500001D */ bnez $t0, .L80050020 -/* 050BAC 8004FFAC 00000000 */ nop -/* 050BB0 8004FFB0 860901A0 */ lh $t1, 0x1a0($s0) -/* 050BB4 8004FFB4 8E0A010C */ lw $t2, 0x10c($s0) -/* 050BB8 8004FFB8 3C058012 */ lui $a1, %hi(gCurrentRacerTransform) # $a1, 0x8012 -/* 050BBC 8004FFBC 24A5D510 */ addiu $a1, %lo(gCurrentRacerTransform) # addiu $a1, $a1, -0x2af0 -/* 050BC0 8004FFC0 44800000 */ mtc1 $zero, $f0 -/* 050BC4 8004FFC4 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 050BC8 8004FFC8 44812000 */ mtc1 $at, $f4 -/* 050BCC 8004FFCC 012A5821 */ addu $t3, $t1, $t2 -/* 050BD0 8004FFD0 A4AB0000 */ sh $t3, ($a1) -/* 050BD4 8004FFD4 A4A00002 */ sh $zero, 2($a1) -/* 050BD8 8004FFD8 A4A00004 */ sh $zero, 4($a1) -/* 050BDC 8004FFDC 27A40060 */ addiu $a0, $sp, 0x60 -/* 050BE0 8004FFE0 E4A0000C */ swc1 $f0, 0xc($a1) -/* 050BE4 8004FFE4 E4A00010 */ swc1 $f0, 0x10($a1) -/* 050BE8 8004FFE8 E4A00014 */ swc1 $f0, 0x14($a1) -/* 050BEC 8004FFEC 0C01BF9D */ jal object_transform_to_matrix_2 -/* 050BF0 8004FFF0 E4A40008 */ swc1 $f4, 8($a1) -/* 050BF4 8004FFF4 8E050030 */ lw $a1, 0x30($s0) -/* 050BF8 8004FFF8 8E07002C */ lw $a3, 0x2c($s0) -/* 050BFC 8004FFFC 262C001C */ addiu $t4, $s1, 0x1c -/* 050C00 80050000 27AD00BC */ addiu $t5, $sp, 0xbc -/* 050C04 80050004 262E0024 */ addiu $t6, $s1, 0x24 -/* 050C08 80050008 AFAE0018 */ sw $t6, 0x18($sp) -/* 050C0C 8005000C AFAD0014 */ sw $t5, 0x14($sp) -/* 050C10 80050010 AFAC0010 */ sw $t4, 0x10($sp) -/* 050C14 80050014 27A40060 */ addiu $a0, $sp, 0x60 -/* 050C18 80050018 0C01BD93 */ jal guMtxXFMF -/* 050C1C 8005001C 24060000 */ li $a2, 0 -.L80050020: -/* 050C20 80050020 820F0175 */ lb $t7, 0x175($s0) -/* 050C24 80050024 00000000 */ nop -/* 050C28 80050028 11E00007 */ beqz $t7, .L80050048 -/* 050C2C 8005002C 3C018012 */ lui $at, %hi(gRacerMagnetVelX) # $at, 0x8012 -/* 050C30 80050030 C42AD578 */ lwc1 $f10, %lo(gRacerMagnetVelX)($at) -/* 050C34 80050034 3C018012 */ lui $at, %hi(gRacerMagnetVelZ) # $at, 0x8012 -/* 050C38 80050038 E62A001C */ swc1 $f10, 0x1c($s1) -/* 050C3C 8005003C C426D57C */ lwc1 $f6, %lo(gRacerMagnetVelZ)($at) -/* 050C40 80050040 00000000 */ nop -/* 050C44 80050044 E6260024 */ swc1 $f6, 0x24($s1) -.L80050048: -/* 050C48 80050048 8E180148 */ lw $t8, 0x148($s0) -/* 050C4C 8005004C 8FA600C4 */ lw $a2, 0xc4($sp) -/* 050C50 80050050 17000072 */ bnez $t8, .L8005021C -/* 050C54 80050054 02202025 */ move $a0, $s1 -/* 050C58 80050058 C630001C */ lwc1 $f16, 0x1c($s1) -/* 050C5C 8005005C 3C088012 */ lui $t0, %hi(gRacerInputBlocked) # $t0, 0x8012 -/* 050C60 80050060 E7B000B8 */ swc1 $f16, 0xb8($sp) -/* 050C64 80050064 C6320024 */ lwc1 $f18, 0x24($s1) -/* 050C68 80050068 C7A800B8 */ lwc1 $f8, 0xb8($sp) -/* 050C6C 8005006C E7B200B4 */ swc1 $f18, 0xb4($sp) -/* 050C70 80050070 821901D2 */ lb $t9, 0x1d2($s0) -/* 050C74 80050074 3C01800E */ lui $at, %hi(D_800E6630 + 4) # $at, 0x800e -/* 050C78 80050078 13200009 */ beqz $t9, .L800500A0 -/* 050C7C 8005007C 00000000 */ nop -/* 050C80 80050080 C604011C */ lwc1 $f4, 0x11c($s0) -/* 050C84 80050084 C7A600B4 */ lwc1 $f6, 0xb4($sp) -/* 050C88 80050088 46044280 */ add.s $f10, $f8, $f4 -/* 050C8C 8005008C E7AA00B8 */ swc1 $f10, 0xb8($sp) -/* 050C90 80050090 C6100120 */ lwc1 $f16, 0x120($s0) -/* 050C94 80050094 00000000 */ nop -/* 050C98 80050098 46103480 */ add.s $f18, $f6, $f16 -/* 050C9C 8005009C E7B200B4 */ swc1 $f18, 0xb4($sp) -.L800500A0: -/* 050CA0 800500A0 8108D584 */ lb $t0, %lo(gRacerInputBlocked)($t0) -/* 050CA4 800500A4 C7A800B8 */ lwc1 $f8, 0xb8($sp) -/* 050CA8 800500A8 1100003C */ beqz $t0, .L8005019C -/* 050CAC 800500AC 00000000 */ nop -/* 050CB0 800500B0 C7A800B8 */ lwc1 $f8, 0xb8($sp) -/* 050CB4 800500B4 C4236630 */ lwc1 $f3, %lo(D_800E6630)($at) -/* 050CB8 800500B8 C4226634 */ lwc1 $f2, %lo(D_800E6630 + 4)($at) -/* 050CBC 800500BC 46004121 */ cvt.d.s $f4, $f8 -/* 050CC0 800500C0 46222282 */ mul.d $f10, $f4, $f2 -/* 050CC4 800500C4 C7B000B4 */ lwc1 $f16, 0xb4($sp) -/* 050CC8 800500C8 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 050CCC 800500CC 460084A1 */ cvt.d.s $f18, $f16 -/* 050CD0 800500D0 46229202 */ mul.d $f8, $f18, $f2 -/* 050CD4 800500D4 462051A0 */ cvt.s.d $f6, $f10 -/* 050CD8 800500D8 44813800 */ mtc1 $at, $f7 -/* 050CDC 800500DC E7A600B8 */ swc1 $f6, 0xb8($sp) -/* 050CE0 800500E0 44803000 */ mtc1 $zero, $f6 -/* 050CE4 800500E4 46204120 */ cvt.s.d $f4, $f8 -/* 050CE8 800500E8 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 050CEC 800500EC E7A400B4 */ swc1 $f4, 0xb4($sp) -/* 050CF0 800500F0 C60A002C */ lwc1 $f10, 0x2c($s0) -/* 050CF4 800500F4 00000000 */ nop -/* 050CF8 800500F8 46005021 */ cvt.d.s $f0, $f10 -/* 050CFC 800500FC 4626003C */ c.lt.d $f0, $f6 -/* 050D00 80050100 44805000 */ mtc1 $zero, $f10 -/* 050D04 80050104 45010008 */ bc1t .L80050128 -/* 050D08 80050108 00000000 */ nop -/* 050D0C 8005010C 44816800 */ mtc1 $at, $f13 -/* 050D10 80050110 44806000 */ mtc1 $zero, $f12 -/* 050D14 80050114 00000000 */ nop -/* 050D18 80050118 4620603C */ c.lt.d $f12, $f0 -/* 050D1C 8005011C 00000000 */ nop -/* 050D20 80050120 45000008 */ bc1f .L80050144 -/* 050D24 80050124 00000000 */ nop -.L80050128: -/* 050D28 80050128 46220402 */ mul.d $f16, $f0, $f2 -/* 050D2C 8005012C 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 050D30 80050130 44816800 */ mtc1 $at, $f13 -/* 050D34 80050134 44806000 */ mtc1 $zero, $f12 -/* 050D38 80050138 462084A0 */ cvt.s.d $f18, $f16 -/* 050D3C 8005013C 10000004 */ b .L80050150 -/* 050D40 80050140 E612002C */ swc1 $f18, 0x2c($s0) -.L80050144: -/* 050D44 80050144 44804000 */ mtc1 $zero, $f8 -/* 050D48 80050148 00000000 */ nop -/* 050D4C 8005014C E608002C */ swc1 $f8, 0x2c($s0) -.L80050150: -/* 050D50 80050150 C6040030 */ lwc1 $f4, 0x30($s0) -/* 050D54 80050154 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 050D58 80050158 44815800 */ mtc1 $at, $f11 -/* 050D5C 8005015C 46002021 */ cvt.d.s $f0, $f4 -/* 050D60 80050160 462A003C */ c.lt.d $f0, $f10 -/* 050D64 80050164 00000000 */ nop -/* 050D68 80050168 45010005 */ bc1t .L80050180 -/* 050D6C 8005016C 00000000 */ nop -/* 050D70 80050170 4620603C */ c.lt.d $f12, $f0 -/* 050D74 80050174 00000000 */ nop -/* 050D78 80050178 45000005 */ bc1f .L80050190 -/* 050D7C 8005017C 00000000 */ nop -.L80050180: -/* 050D80 80050180 46220182 */ mul.d $f6, $f0, $f2 -/* 050D84 80050184 46203420 */ cvt.s.d $f16, $f6 -/* 050D88 80050188 1000000C */ b .L800501BC -/* 050D8C 8005018C E6100030 */ swc1 $f16, 0x30($s0) -.L80050190: -/* 050D90 80050190 44809000 */ mtc1 $zero, $f18 -/* 050D94 80050194 10000009 */ b .L800501BC -/* 050D98 80050198 E6120030 */ swc1 $f18, 0x30($s0) -.L8005019C: -/* 050D9C 8005019C C6040084 */ lwc1 $f4, 0x84($s0) -/* 050DA0 800501A0 C7A600B4 */ lwc1 $f6, 0xb4($sp) -/* 050DA4 800501A4 46044280 */ add.s $f10, $f8, $f4 -/* 050DA8 800501A8 E7AA00B8 */ swc1 $f10, 0xb8($sp) -/* 050DAC 800501AC C6100088 */ lwc1 $f16, 0x88($s0) -/* 050DB0 800501B0 00000000 */ nop -/* 050DB4 800501B4 46103480 */ add.s $f18, $f6, $f16 -/* 050DB8 800501B8 E7B200B4 */ swc1 $f18, 0xb4($sp) -.L800501BC: -/* 050DBC 800501BC C7A000C4 */ lwc1 $f0, 0xc4($sp) -/* 050DC0 800501C0 C7A800B8 */ lwc1 $f8, 0xb8($sp) -/* 050DC4 800501C4 C62A0020 */ lwc1 $f10, 0x20($s1) -/* 050DC8 800501C8 46004102 */ mul.s $f4, $f8, $f0 -/* 050DCC 800501CC C7B000B4 */ lwc1 $f16, 0xb4($sp) -/* 050DD0 800501D0 02202025 */ move $a0, $s1 -/* 050DD4 800501D4 46005182 */ mul.s $f6, $f10, $f0 -/* 050DD8 800501D8 44052000 */ mfc1 $a1, $f4 -/* 050DDC 800501DC 46008482 */ mul.s $f18, $f16, $f0 -/* 050DE0 800501E0 44063000 */ mfc1 $a2, $f6 -/* 050DE4 800501E4 44079000 */ mfc1 $a3, $f18 -/* 050DE8 800501E8 0C00455C */ jal move_object -/* 050DEC 800501EC 00000000 */ nop -/* 050DF0 800501F0 10400006 */ beqz $v0, .L8005020C -/* 050DF4 800501F4 3C098012 */ lui $t1, %hi(gCurrentPlayerIndex) # $t1, 0x8012 -/* 050DF8 800501F8 8D29D55C */ lw $t1, %lo(gCurrentPlayerIndex)($t1) -/* 050DFC 800501FC 2401FFFF */ li $at, -1 -/* 050E00 80050200 11210002 */ beq $t1, $at, .L8005020C -/* 050E04 80050204 240A0001 */ li $t2, 1 -/* 050E08 80050208 A3AA0053 */ sb $t2, 0x53($sp) -.L8005020C: -/* 050E0C 8005020C 3C028012 */ lui $v0, %hi(gCurrentPlayerIndex) # $v0, 0x8012 -/* 050E10 80050210 8C42D55C */ lw $v0, %lo(gCurrentPlayerIndex)($v0) -/* 050E14 80050214 10000007 */ b .L80050234 -/* 050E18 80050218 2401FFFF */ li $at, -1 -.L8005021C: -/* 050E1C 8005021C 0C0141D5 */ jal racer_approach_object -/* 050E20 80050220 02002825 */ move $a1, $s0 -/* 050E24 80050224 3C028012 */ lui $v0, %hi(gCurrentPlayerIndex) # $v0, 0x8012 -/* 050E28 80050228 8C42D55C */ lw $v0, %lo(gCurrentPlayerIndex)($v0) -/* 050E2C 8005022C 00000000 */ nop -/* 050E30 80050230 2401FFFF */ li $at, -1 -.L80050234: -/* 050E34 80050234 14410007 */ bne $v0, $at, .L80050254 -/* 050E38 80050238 02202025 */ move $a0, $s1 -/* 050E3C 8005023C 8FA600C0 */ lw $a2, 0xc0($sp) -/* 050E40 80050240 02202025 */ move $a0, $s1 -/* 050E44 80050244 0C0156A1 */ jal onscreen_ai_racer_physics -/* 050E48 80050248 02002825 */ move $a1, $s0 -/* 050E4C 8005024C 10000005 */ b .L80050264 -/* 050E50 80050250 3C013F80 */ lui $at, 0x3f80 -.L80050254: -/* 050E54 80050254 8FA600C0 */ lw $a2, 0xc0($sp) -/* 050E58 80050258 0C0153F4 */ jal func_80054FD0 -/* 050E5C 8005025C 02002825 */ move $a1, $s0 -/* 050E60 80050260 3C013F80 */ li $at, 0x3F800000 # 1.000000 -.L80050264: -/* 050E64 80050264 44814000 */ mtc1 $at, $f8 -/* 050E68 80050268 C7A400C4 */ lwc1 $f4, 0xc4($sp) -/* 050E6C 8005026C C7B000A8 */ lwc1 $f16, 0xa8($sp) -/* 050E70 80050270 46044283 */ div.s $f10, $f8, $f4 -/* 050E74 80050274 3C018012 */ lui $at, %hi(D_8011D548) # $at, 0x8012 -/* 050E78 80050278 C428D548 */ lwc1 $f8, %lo(D_8011D548)($at) -/* 050E7C 8005027C 3C018012 */ lui $at, %hi(D_8011D54C) # $at, 0x8012 -/* 050E80 80050280 3C058012 */ lui $a1, %hi(gCurrentRacerTransform) # $a1, 0x8012 -/* 050E84 80050284 24A5D510 */ addiu $a1, %lo(gCurrentRacerTransform) # addiu $a1, $a1, -0x2af0 -/* 050E88 80050288 44800000 */ mtc1 $zero, $f0 -/* 050E8C 8005028C 27A40060 */ addiu $a0, $sp, 0x60 -/* 050E90 80050290 E7AA00BC */ swc1 $f10, 0xbc($sp) -/* 050E94 80050294 C626000C */ lwc1 $f6, 0xc($s1) -/* 050E98 80050298 00000000 */ nop -/* 050E9C 8005029C 46103481 */ sub.s $f18, $f6, $f16 -/* 050EA0 800502A0 C6100084 */ lwc1 $f16, 0x84($s0) -/* 050EA4 800502A4 46089101 */ sub.s $f4, $f18, $f8 -/* 050EA8 800502A8 460A2182 */ mul.s $f6, $f4, $f10 -/* 050EAC 800502AC C7A400A4 */ lwc1 $f4, 0xa4($sp) -/* 050EB0 800502B0 46103481 */ sub.s $f18, $f6, $f16 -/* 050EB4 800502B4 E7B200B8 */ swc1 $f18, 0xb8($sp) -/* 050EB8 800502B8 C6280010 */ lwc1 $f8, 0x10($s1) -/* 050EBC 800502BC C6320014 */ lwc1 $f18, 0x14($s1) -/* 050EC0 800502C0 46044181 */ sub.s $f6, $f8, $f4 -/* 050EC4 800502C4 460A3402 */ mul.s $f16, $f6, $f10 -/* 050EC8 800502C8 E6300020 */ swc1 $f16, 0x20($s1) -/* 050ECC 800502CC C7A800A0 */ lwc1 $f8, 0xa0($sp) -/* 050ED0 800502D0 C426D54C */ lwc1 $f6, %lo(D_8011D54C)($at) -/* 050ED4 800502D4 46089101 */ sub.s $f4, $f18, $f8 -/* 050ED8 800502D8 C7B000BC */ lwc1 $f16, 0xbc($sp) -/* 050EDC 800502DC 46062281 */ sub.s $f10, $f4, $f6 -/* 050EE0 800502E0 C6080088 */ lwc1 $f8, 0x88($s0) -/* 050EE4 800502E4 46105482 */ mul.s $f18, $f10, $f16 -/* 050EE8 800502E8 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 050EEC 800502EC 44813000 */ mtc1 $at, $f6 -/* 050EF0 800502F0 46089101 */ sub.s $f4, $f18, $f8 -/* 050EF4 800502F4 E7A400B4 */ swc1 $f4, 0xb4($sp) -/* 050EF8 800502F8 8E0C010C */ lw $t4, 0x10c($s0) -/* 050EFC 800502FC 860B01A0 */ lh $t3, 0x1a0($s0) -/* 050F00 80050300 00000000 */ nop -/* 050F04 80050304 016C6821 */ addu $t5, $t3, $t4 -/* 050F08 80050308 000D7023 */ negu $t6, $t5 -/* 050F0C 8005030C A4AE0000 */ sh $t6, ($a1) -/* 050F10 80050310 862F0002 */ lh $t7, 2($s1) -/* 050F14 80050314 00000000 */ nop -/* 050F18 80050318 000FC023 */ negu $t8, $t7 -/* 050F1C 8005031C A4B80002 */ sh $t8, 2($a1) -/* 050F20 80050320 86390004 */ lh $t9, 4($s1) -/* 050F24 80050324 E4A0000C */ swc1 $f0, 0xc($a1) -/* 050F28 80050328 00194023 */ negu $t0, $t9 -/* 050F2C 8005032C A4A80004 */ sh $t0, 4($a1) -/* 050F30 80050330 E4A00010 */ swc1 $f0, 0x10($a1) -/* 050F34 80050334 E4A00014 */ swc1 $f0, 0x14($a1) -/* 050F38 80050338 0C01BF9D */ jal object_transform_to_matrix_2 -/* 050F3C 8005033C E4A60008 */ swc1 $f6, 8($a1) -/* 050F40 80050340 8FA500B8 */ lw $a1, 0xb8($sp) -/* 050F44 80050344 8FA700B4 */ lw $a3, 0xb4($sp) -/* 050F48 80050348 27A900AC */ addiu $t1, $sp, 0xac -/* 050F4C 8005034C 27AA00BC */ addiu $t2, $sp, 0xbc -/* 050F50 80050350 27AB00B0 */ addiu $t3, $sp, 0xb0 -/* 050F54 80050354 AFAB0018 */ sw $t3, 0x18($sp) -/* 050F58 80050358 AFAA0014 */ sw $t2, 0x14($sp) -/* 050F5C 8005035C AFA90010 */ sw $t1, 0x10($sp) -/* 050F60 80050360 27A40060 */ addiu $a0, $sp, 0x60 -/* 050F64 80050364 0C01BD93 */ jal guMtxXFMF -/* 050F68 80050368 24060000 */ li $a2, 0 -/* 050F6C 8005036C 820201D2 */ lb $v0, 0x1d2($s0) -/* 050F70 80050370 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 050F74 80050374 44816800 */ mtc1 $at, $f13 -/* 050F78 80050378 44806000 */ mtc1 $zero, $f12 -/* 050F7C 8005037C 1040000B */ beqz $v0, .L800503AC -/* 050F80 80050380 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 050F84 80050384 8FAC00C0 */ lw $t4, 0xc0($sp) -/* 050F88 80050388 00000000 */ nop -/* 050F8C 8005038C 004C6823 */ subu $t5, $v0, $t4 -/* 050F90 80050390 A20D01D2 */ sb $t5, 0x1d2($s0) -/* 050F94 80050394 820E01D2 */ lb $t6, 0x1d2($s0) -/* 050F98 80050398 00000000 */ nop -/* 050F9C 8005039C 05C10046 */ bgez $t6, .L800504B8 -/* 050FA0 800503A0 00000000 */ nop -/* 050FA4 800503A4 10000044 */ b .L800504B8 -/* 050FA8 800503A8 A20001D2 */ sb $zero, 0x1d2($s0) -.L800503AC: -/* 050FAC 800503AC C60A002C */ lwc1 $f10, 0x2c($s0) -/* 050FB0 800503B0 C7B000B0 */ lwc1 $f16, 0xb0($sp) -/* 050FB4 800503B4 44812800 */ mtc1 $at, $f5 -/* 050FB8 800503B8 46105481 */ sub.s $f18, $f10, $f16 -/* 050FBC 800503BC 3C01BFE0 */ li $at, 0xBFE00000 # -1.750000 -/* 050FC0 800503C0 E7B200BC */ swc1 $f18, 0xbc($sp) -/* 050FC4 800503C4 C7A800BC */ lwc1 $f8, 0xbc($sp) -/* 050FC8 800503C8 00000000 */ nop -/* 050FCC 800503CC 46004021 */ cvt.d.s $f0, $f8 -/* 050FD0 800503D0 4620603C */ c.lt.d $f12, $f0 -/* 050FD4 800503D4 00000000 */ nop -/* 050FD8 800503D8 4500000A */ bc1f .L80050404 -/* 050FDC 800503DC 00000000 */ nop -/* 050FE0 800503E0 C604002C */ lwc1 $f4, 0x2c($s0) -/* 050FE4 800503E4 462C0281 */ sub.d $f10, $f0, $f12 -/* 050FE8 800503E8 460021A1 */ cvt.d.s $f6, $f4 -/* 050FEC 800503EC 462A3401 */ sub.d $f16, $f6, $f10 -/* 050FF0 800503F0 462084A0 */ cvt.s.d $f18, $f16 -/* 050FF4 800503F4 E612002C */ swc1 $f18, 0x2c($s0) -/* 050FF8 800503F8 C7A800BC */ lwc1 $f8, 0xbc($sp) -/* 050FFC 800503FC 00000000 */ nop -/* 051000 80050400 46004021 */ cvt.d.s $f0, $f8 -.L80050404: -/* 051004 80050404 44802000 */ mtc1 $zero, $f4 -/* 051008 80050408 00000000 */ nop -/* 05100C 8005040C 4624003C */ c.lt.d $f0, $f4 -/* 051010 80050410 00000000 */ nop -/* 051014 80050414 45000007 */ bc1f .L80050434 -/* 051018 80050418 00000000 */ nop -/* 05101C 8005041C C606002C */ lwc1 $f6, 0x2c($s0) -/* 051020 80050420 462C0400 */ add.d $f16, $f0, $f12 -/* 051024 80050424 460032A1 */ cvt.d.s $f10, $f6 -/* 051028 80050428 46305481 */ sub.d $f18, $f10, $f16 -/* 05102C 8005042C 46209220 */ cvt.s.d $f8, $f18 -/* 051030 80050430 E608002C */ swc1 $f8, 0x2c($s0) -.L80050434: -/* 051034 80050434 C6040030 */ lwc1 $f4, 0x30($s0) -/* 051038 80050438 C7A600AC */ lwc1 $f6, 0xac($sp) -/* 05103C 8005043C 44819800 */ mtc1 $at, $f19 -/* 051040 80050440 46062281 */ sub.s $f10, $f4, $f6 -/* 051044 80050444 E7AA00BC */ swc1 $f10, 0xbc($sp) -/* 051048 80050448 C7B000BC */ lwc1 $f16, 0xbc($sp) -/* 05104C 8005044C 00000000 */ nop -/* 051050 80050450 46008021 */ cvt.d.s $f0, $f16 -/* 051054 80050454 4620603C */ c.lt.d $f12, $f0 -/* 051058 80050458 00000000 */ nop -/* 05105C 8005045C 4500000A */ bc1f .L80050488 -/* 051060 80050460 00000000 */ nop -/* 051064 80050464 C6120030 */ lwc1 $f18, 0x30($s0) -/* 051068 80050468 462C0101 */ sub.d $f4, $f0, $f12 -/* 05106C 8005046C 46009221 */ cvt.d.s $f8, $f18 -/* 051070 80050470 46244181 */ sub.d $f6, $f8, $f4 -/* 051074 80050474 462032A0 */ cvt.s.d $f10, $f6 -/* 051078 80050478 E60A0030 */ swc1 $f10, 0x30($s0) -/* 05107C 8005047C C7B000BC */ lwc1 $f16, 0xbc($sp) -/* 051080 80050480 00000000 */ nop -/* 051084 80050484 46008021 */ cvt.d.s $f0, $f16 -.L80050488: -/* 051088 80050488 44809000 */ mtc1 $zero, $f18 -/* 05108C 8005048C 00000000 */ nop -/* 051090 80050490 4632003C */ c.lt.d $f0, $f18 -/* 051094 80050494 00000000 */ nop -/* 051098 80050498 45000007 */ bc1f .L800504B8 -/* 05109C 8005049C 00000000 */ nop -/* 0510A0 800504A0 C6080030 */ lwc1 $f8, 0x30($s0) -/* 0510A4 800504A4 462C0180 */ add.d $f6, $f0, $f12 -/* 0510A8 800504A8 46004121 */ cvt.d.s $f4, $f8 -/* 0510AC 800504AC 46262281 */ sub.d $f10, $f4, $f6 -/* 0510B0 800504B0 46205420 */ cvt.s.d $f16, $f10 -/* 0510B4 800504B4 E6100030 */ swc1 $f16, 0x30($s0) -.L800504B8: -/* 0510B8 800504B8 820F01D3 */ lb $t7, 0x1d3($s0) -/* 0510BC 800504BC 3C18800E */ lui $t8, %hi(gNumViewports) # $t8, 0x800e -/* 0510C0 800504C0 15E00043 */ bnez $t7, .L800505D0 -/* 0510C4 800504C4 00000000 */ nop -/* 0510C8 800504C8 8F18CB98 */ lw $t8, %lo(gNumViewports)($t8) -/* 0510CC 800504CC 00000000 */ nop -/* 0510D0 800504D0 2B010002 */ slti $at, $t8, 2 -/* 0510D4 800504D4 1020003E */ beqz $at, .L800505D0 -/* 0510D8 800504D8 00000000 */ nop -/* 0510DC 800504DC 0C0078A7 */ jal get_misc_asset -/* 0510E0 800504E0 24040014 */ li $a0, 20 -/* 0510E4 800504E4 82030203 */ lb $v1, 0x203($s0) -/* 0510E8 800504E8 82190002 */ lb $t9, 2($s0) -/* 0510EC 800504EC 30690004 */ andi $t1, $v1, 4 -/* 0510F0 800504F0 3C013FE0 */ li $at, 0x3FE00000 # 1.750000 -/* 0510F4 800504F4 00095083 */ sra $t2, $t1, 2 -/* 0510F8 800504F8 44816800 */ mtc1 $at, $f13 -/* 0510FC 800504FC 25430010 */ addiu $v1, $t2, 0x10 -/* 051100 80050500 44806000 */ mtc1 $zero, $f12 -/* 051104 80050504 28610011 */ slti $at, $v1, 0x11 -/* 051108 80050508 001941C0 */ sll $t0, $t9, 7 -/* 05110C 8005050C 14200012 */ bnez $at, .L80050558 -/* 051110 80050510 01022021 */ addu $a0, $t0, $v0 -/* 051114 80050514 908B0070 */ lbu $t3, 0x70($a0) -/* 051118 80050518 240D0001 */ li $t5, 1 -/* 05111C 8005051C 1D600009 */ bgtz $t3, .L80050544 -/* 051120 80050520 00000000 */ nop -/* 051124 80050524 C4880074 */ lwc1 $f8, 0x74($a0) -/* 051128 80050528 44809800 */ mtc1 $zero, $f19 -/* 05112C 8005052C 44809000 */ mtc1 $zero, $f18 -/* 051130 80050530 46004121 */ cvt.d.s $f4, $f8 -/* 051134 80050534 4624903C */ c.lt.d $f18, $f4 -/* 051138 80050538 00000000 */ nop -/* 05113C 8005053C 45000024 */ bc1f .L800505D0 -/* 051140 80050540 00000000 */ nop -.L80050544: -/* 051144 80050544 8E2C0074 */ lw $t4, 0x74($s1) -/* 051148 80050548 006D7004 */ sllv $t6, $t5, $v1 -/* 05114C 8005054C 018E7825 */ or $t7, $t4, $t6 -/* 051150 80050550 1000001F */ b .L800505D0 -/* 051154 80050554 AE2F0074 */ sw $t7, 0x74($s1) -.L80050558: -/* 051158 80050558 90820070 */ lbu $v0, 0x70($a0) -/* 05115C 8005055C 24010002 */ li $at, 2 -/* 051160 80050560 1441000E */ bne $v0, $at, .L8005059C -/* 051164 80050564 28410002 */ slti $at, $v0, 2 -/* 051168 80050568 C4860074 */ lwc1 $f6, 0x74($a0) -/* 05116C 8005056C 24190001 */ li $t9, 1 -/* 051170 80050570 460032A1 */ cvt.d.s $f10, $f6 -/* 051174 80050574 462C503C */ c.lt.d $f10, $f12 -/* 051178 80050578 00000000 */ nop -/* 05117C 8005057C 45000007 */ bc1f .L8005059C -/* 051180 80050580 28410002 */ slti $at, $v0, 2 -/* 051184 80050584 8E380074 */ lw $t8, 0x74($s1) -/* 051188 80050588 00794004 */ sllv $t0, $t9, $v1 -/* 05118C 8005058C 03084825 */ or $t1, $t8, $t0 -/* 051190 80050590 1000000F */ b .L800505D0 -/* 051194 80050594 AE290074 */ sw $t1, 0x74($s1) -/* 051198 80050598 28410002 */ slti $at, $v0, 2 -.L8005059C: -/* 05119C 8005059C 1020000C */ beqz $at, .L800505D0 -/* 0511A0 800505A0 00000000 */ nop -/* 0511A4 800505A4 44808000 */ mtc1 $zero, $f16 -/* 0511A8 800505A8 C4880074 */ lwc1 $f8, 0x74($a0) -/* 0511AC 800505AC 240B0001 */ li $t3, 1 -/* 0511B0 800505B0 4608803C */ c.lt.s $f16, $f8 -/* 0511B4 800505B4 00000000 */ nop -/* 0511B8 800505B8 45000005 */ bc1f .L800505D0 -/* 0511BC 800505BC 00000000 */ nop -/* 0511C0 800505C0 8E2A0074 */ lw $t2, 0x74($s1) -/* 0511C4 800505C4 006B6804 */ sllv $t5, $t3, $v1 -/* 0511C8 800505C8 014D6025 */ or $t4, $t2, $t5 -/* 0511CC 800505CC AE2C0074 */ sw $t4, 0x74($s1) -.L800505D0: -/* 0511D0 800505D0 3C0E8012 */ lui $t6, %hi(gCurrentPlayerIndex) # $t6, 0x8012 -/* 0511D4 800505D4 8DCED55C */ lw $t6, %lo(gCurrentPlayerIndex)($t6) -/* 0511D8 800505D8 2401FFFF */ li $at, -1 -/* 0511DC 800505DC 11C10030 */ beq $t6, $at, .L800506A0 -/* 0511E0 800505E0 3C0F800E */ lui $t7, %hi(gNumViewports) # $t7, 0x800e -/* 0511E4 800505E4 8DEFCB98 */ lw $t7, %lo(gNumViewports)($t7) -/* 0511E8 800505E8 00000000 */ nop -/* 0511EC 800505EC 29E10002 */ slti $at, $t7, 2 -/* 0511F0 800505F0 1020002B */ beqz $at, .L800506A0 -/* 0511F4 800505F4 3C014160 */ li $at, 0x41600000 # 14.000000 -/* 0511F8 800505F8 44819000 */ mtc1 $at, $f18 -/* 0511FC 800505FC C60000C0 */ lwc1 $f0, 0xc0($s0) -/* 051200 80050600 00002025 */ move $a0, $zero -/* 051204 80050604 4600903C */ c.lt.s $f18, $f0 -/* 051208 80050608 3C0140C0 */ lui $at, 0x40c0 -/* 05120C 8005060C 4500000A */ bc1f .L80050638 -/* 051210 80050610 00000000 */ nop -/* 051214 80050614 0C01BE53 */ jal get_random_number_from_range -/* 051218 80050618 24050001 */ li $a1, 1 -/* 05121C 8005061C 10400020 */ beqz $v0, .L800506A0 -/* 051220 80050620 00000000 */ nop -/* 051224 80050624 8E390074 */ lw $t9, 0x74($s1) -/* 051228 80050628 3C010030 */ li $at, 0x00300000 # 0.000000 -/* 05122C 8005062C 0321C025 */ or $t8, $t9, $at -/* 051230 80050630 1000001B */ b .L800506A0 -/* 051234 80050634 AE380074 */ sw $t8, 0x74($s1) -.L80050638: -/* 051238 80050638 44812000 */ mtc1 $at, $f4 -/* 05123C 8005063C 3C01C008 */ li $at, 0xC0080000 # -2.125000 -/* 051240 80050640 4604003C */ c.lt.s $f0, $f4 -/* 051244 80050644 00000000 */ nop -/* 051248 80050648 45000015 */ bc1f .L800506A0 -/* 05124C 8005064C 00000000 */ nop -/* 051250 80050650 C606002C */ lwc1 $f6, 0x2c($s0) -/* 051254 80050654 44815800 */ mtc1 $at, $f11 -/* 051258 80050658 44805000 */ mtc1 $zero, $f10 -/* 05125C 8005065C 46003021 */ cvt.d.s $f0, $f6 -/* 051260 80050660 4620503C */ c.lt.d $f10, $f0 -/* 051264 80050664 00000000 */ nop -/* 051268 80050668 4500000D */ bc1f .L800506A0 -/* 05126C 8005066C 00000000 */ nop -/* 051270 80050670 462C003C */ c.lt.d $f0, $f12 -/* 051274 80050674 00002025 */ move $a0, $zero -/* 051278 80050678 45000009 */ bc1f .L800506A0 -/* 05127C 8005067C 00000000 */ nop -/* 051280 80050680 0C01BE53 */ jal get_random_number_from_range -/* 051284 80050684 24050001 */ li $a1, 1 -/* 051288 80050688 10400005 */ beqz $v0, .L800506A0 -/* 05128C 8005068C 00000000 */ nop -/* 051290 80050690 8E280074 */ lw $t0, 0x74($s1) -/* 051294 80050694 3C01000C */ lui $at, 0xc -/* 051298 80050698 01014825 */ or $t1, $t0, $at -/* 05129C 8005069C AE290074 */ sw $t1, 0x74($s1) -.L800506A0: -/* 0512A0 800506A0 820B01D6 */ lb $t3, 0x1d6($s0) -/* 0512A4 800506A4 8FA500C0 */ lw $a1, 0xc0($sp) -/* 0512A8 800506A8 29610005 */ slti $at, $t3, 5 -/* 0512AC 800506AC 10200004 */ beqz $at, .L800506C0 -/* 0512B0 800506B0 8FA700C4 */ lw $a3, 0xc4($sp) -/* 0512B4 800506B4 0C02BDC5 */ jal func_800AF714 -/* 0512B8 800506B8 02202025 */ move $a0, $s1 -/* 0512BC 800506BC 8FA700C4 */ lw $a3, 0xc4($sp) -.L800506C0: -/* 0512C0 800506C0 02202025 */ move $a0, $s1 -/* 0512C4 800506C4 02002825 */ move $a1, $s0 -/* 0512C8 800506C8 0C01602D */ jal second_racer_camera_update -/* 0512CC 800506CC 00003025 */ move $a2, $zero -/* 0512D0 800506D0 3C0A800E */ lui $t2, %hi(gNumViewports) # $t2, 0x800e -/* 0512D4 800506D4 8D4ACB98 */ lw $t2, %lo(gNumViewports)($t2) -/* 0512D8 800506D8 24010001 */ li $at, 1 -/* 0512DC 800506DC 15410013 */ bne $t2, $at, .L8005072C -/* 0512E0 800506E0 83AC0053 */ lb $t4, 0x53($sp) -/* 0512E4 800506E4 C608002C */ lwc1 $f8, 0x2c($s0) -/* 0512E8 800506E8 3C01C008 */ li $at, 0xC0080000 # -2.125000 -/* 0512EC 800506EC 44818800 */ mtc1 $at, $f17 -/* 0512F0 800506F0 44808000 */ mtc1 $zero, $f16 -/* 0512F4 800506F4 460044A1 */ cvt.d.s $f18, $f8 -/* 0512F8 800506F8 4632803C */ c.lt.d $f16, $f18 -/* 0512FC 800506FC 00000000 */ nop -/* 051300 80050700 4500000A */ bc1f .L8005072C -/* 051304 80050704 83AC0053 */ lb $t4, 0x53($sp) -/* 051308 80050708 0C01BAA4 */ jal get_settings -/* 05130C 8005070C 00000000 */ nop -/* 051310 80050710 904D0049 */ lbu $t5, 0x49($v0) -/* 051314 80050714 24010025 */ li $at, 37 -/* 051318 80050718 11A10004 */ beq $t5, $at, .L8005072C -/* 05131C 8005071C 83AC0053 */ lb $t4, 0x53($sp) -/* 051320 80050720 0C00A3E8 */ jal set_anti_aliasing -/* 051324 80050724 24040001 */ li $a0, 1 -/* 051328 80050728 83AC0053 */ lb $t4, 0x53($sp) -.L8005072C: -/* 05132C 8005072C 02202025 */ move $a0, $s1 -/* 051330 80050730 11800004 */ beqz $t4, .L80050744 -/* 051334 80050734 8FBF002C */ lw $ra, 0x2c($sp) -/* 051338 80050738 0C008C34 */ jal func_800230D0 -/* 05133C 8005073C 02002825 */ move $a1, $s0 -/* 051340 80050740 8FBF002C */ lw $ra, 0x2c($sp) -.L80050744: -/* 051344 80050744 8FB00024 */ lw $s0, 0x24($sp) -/* 051348 80050748 8FB10028 */ lw $s1, 0x28($sp) -/* 05134C 8005074C 03E00008 */ jr $ra -/* 051350 80050750 27BD00C0 */ addiu $sp, $sp, 0xc0 - diff --git a/include/structs.h b/include/structs.h index 1b0021db..f92a3349 100644 --- a/include/structs.h +++ b/include/structs.h @@ -1393,7 +1393,7 @@ typedef struct Object_Racer { /* 0x216 */ u8 unk216; /* 0x217 */ u8 unk217; /* 0x218 */ s32 weaponSoundMask; - /* 0x21C */ s32 unk21C; + /* 0x21C */ SoundMask *unk21C; /* 0x220 */ s32 unk220; } Object_Racer; diff --git a/src/racer.c b/src/racer.c index f4399800..910fee0f 100644 --- a/src/racer.c +++ b/src/racer.c @@ -138,9 +138,8 @@ s32 gRaceStartTimer; f32 D_8011D544; // Starts are 300, then counts down when the race starts. Usage currently unknown. f32 D_8011D548; f32 D_8011D54C; -s16 D_8011D550; -s8 D_8011D552; -s8 D_8011D553; +u16 D_8011D550; +u16 D_8011D552; s32 gCurrentCarSteerVel; s32 D_8011D558; s32 gCurrentPlayerIndex; @@ -990,7 +989,7 @@ void func_80046524(s32 updateRate, f32 updateRateF, Object *obj, Object_Racer *r if (racer->groundedWheels) { if (gRaceStartTimer != 100 && racer->playerIndex != PLAYER_COMPUTER && racer->trickType >= 6) { sound_play(SOUND_BOUNCE, &racer->unk21C); - sound_volume_set_relative(SOUND_BOUNCE, (void *) racer->unk21C, (racer->trickType * 2) + 50); + sound_volume_set_relative(SOUND_BOUNCE, racer->unk21C, (racer->trickType * 2) + 50); } } else if (racer->approachTarget == NULL) { racer_play_sound(obj, SOUND_UNK_AF); @@ -2112,7 +2111,7 @@ void obj_init_racer(Object *obj, LevelObjectEntry_Racer *racer) { tempRacer->bananaSoundMask = NULL; tempRacer->weaponSoundMask = NULL; tempRacer->unk220 = 0; - tempRacer->unk21C = 0; + tempRacer->unk21C = NULL; if (tempRacer->playerIndex != PLAYER_COMPUTER && gTajInteractStatus == TAJ_WANDER) { set_active_camera(player); gCameraObject = (ObjectCamera *) get_active_camera_segment_no_cutscenes(); @@ -2742,7 +2741,295 @@ void set_racer_tail_lights(Object_Racer *racer) { racer->lightFlags = (racer->lightFlags & 0xFFF0) | lightTimer; } -GLOBAL_ASM("asm/non_matchings/racer/func_8004F7F4.s") +// Car vehicle logic. +void func_8004F7F4(s32 updateRate, f32 updateRateF, Object *racerObj, Object_Racer *racer) { + f32 spBC; + f32 spB8; + f32 spB4; + f32 spB0; + f32 spAC; + f32 spA8; + f32 spA4; + f32 spA0; + f32 sp60[4 * 4]; + LevelHeader *currentLevelHeader; + Asset20 *asset20; + s32 var_v1; + s8 playerObjectHasMoved; + s32 objectMoved; + + playerObjectHasMoved = FALSE; + if (racer->unk1D2 != 0) { + gCurrentRacerInput &= ~A_BUTTON; + } + if (gCurrentPlayerIndex == PLAYER_COMPUTER || racer->raceFinished) { + update_onscreen_AI_racer(racerObj, racer, updateRate, updateRateF); + } else { + if (racer->unk1D4 != 0) { + gCurrentButtonsPressed &= ~(Z_TRIG | R_TRIG); + if (racer->unk1D4 > 0) { + racer->unk1D4 -= 4; + } else { + racer->unk1D4 += 4; + } + } + if (gCurrentRacerInput & B_BUTTON && racer->drift_direction != 0) { + var_v1 = racer->drift_direction * 3640; + } else { + var_v1 = 0; + } + if (racer->unk1FE == 0) { + racerObj->particleEmitFlags |= PARTICLE_VEL_Z; + } + apply_vehicle_rotation_offset(racer, updateRate, 0, 0, var_v1); + func_80053750(racerObj, racer, updateRateF); + handle_racer_head_turning(racerObj, racer, updateRate); + D_8011D550 = 0; + gCurrentCarSteerVel = 0; + D_8011D558 = 0; + spA8 = racerObj->segment.trans.x_position; + spA4 = racerObj->segment.trans.y_position; + spA0 = racerObj->segment.trans.z_position; + if (racer->drift_direction != 0) { + if (racer->drift_direction < 0 && gCurrentStickX >= 26) { + racer->unk16E += updateRate; + if (racer->unk16E < 0) { + racer->unk16E = 0; + } + } else if (racer->drift_direction > 0 && gCurrentStickX <= -26) { + racer->unk16E -= updateRate; + if (racer->unk16E > 0) { + racer->unk16E = 0; + } + } else { + racer->unk16E = 0; + } + spB8 = racer->unk16E; + if (spB8 < 0.0f) { + spB8 = -spB8; + } + if (spB8 > 80.0f) { + racer_play_sound(racerObj, SOUND_CAR_BRAKE); + racer->spinout_timer = -racer->drift_direction; + racer->drift_direction = 0; + } + if (gCurrentStickX > 50) { + gCurrentStickX = 50; + } + if (gCurrentStickX < -50) { + gCurrentStickX = -50; + } + if ((gCurrentStickX > 0 && racer->drift_direction > 0) || + (gCurrentStickX < 0 && racer->drift_direction < 0)) { + gCurrentStickX >>= 2; + } + gCurrentStickX += (racer->drift_direction * 60); + } else { + racer->unk16E = 0; + } + handle_base_steering(racer, 0, updateRateF); + func_800575EC(racerObj, racer); + func_800535C4(racerObj, racer); + handle_car_velocity_control(racer); + handle_racer_items(racerObj, racer, updateRate); + racer_attack_handler_car(racerObj, racer, updateRate); + if (racer->spinout_timer != 0) { + racer_spinout_car(racerObj, racer, updateRate, updateRateF); + } else if (racer->groundedWheels > 0) { + func_80050A28(racerObj, racer, updateRate, updateRateF); + } else { + update_car_velocity_offground(racerObj, racer, updateRate, updateRateF); + } + if (racer->unk1C != 0) { + sound_stop((u8 *) racer->unk1C); + racer->unk1C = 0; + } + if (racer->buoyancy != 0.0f && racer->vehicleIDPrev != VEHICLE_BUBBLER) { + spB8 = racer->buoyancy - 10.0; + racerObj->segment.y_velocity += spB8 * 0.065 * updateRateF; + } + currentLevelHeader = get_current_level_header(); + if ((racer->buoyancy != 0.0 && currentLevelHeader->unk2 != 0) || gCurrentSurfaceType == SURFACE_FROZEN_WATER) { + if (racer->unk1F0 != 0) { + racer->checkpoint_distance -= 0.3; + } else { + racer->checkpoint_distance -= 0.1; + } + set_position_goal_from_path(racerObj, racer, &spB8, &spB0, &spB4); + if (racer->unk1F0 != 0) { + racer->checkpoint_distance += 0.3; + } else { + racer->checkpoint_distance += 0.1; + } + spB8 -= racerObj->segment.trans.x_position; + spB4 -= racerObj->segment.trans.z_position; + spB0 = sqrtf((spB8 * spB8) + (spB4 * spB4)); + spB8 /= spB0; + spB4 /= spB0; + racerObj->segment.x_velocity = spB8 * 4.0f; + racerObj->segment.z_velocity = spB4 * 4.0f; + racerObj->segment.y_velocity = 9.5f; + racer->unk1F0 = 1; + } else if (racer->groundedWheels >= 3) { + racer->unk1F0 = 0; + } + if (racer->approachTarget == NULL) { + func_8005250C(racerObj, racer, updateRate); + } + + var_v1 = gCurrentCarSteerVel - (racer->y_rotation_vel & 0xFFFF); + if (var_v1 > 0x8000) { + var_v1 -= 0xFFFF; + } + if (var_v1 < -0x8000) { + var_v1 += 0xFFFF; + } + var_v1 >>= 2; + if (var_v1 > 0x2EE) { + var_v1 = 0x2EE; + } + if (var_v1 < -0x2EE) { + var_v1 = -0x2EE; + } + racer->y_rotation_vel += (var_v1 * updateRate); + racerObj->segment.trans.rotation.s[0] = racer->steerVisualRotation + racer->y_rotation_vel; + racer->z_rotation_vel += (((D_8011D558 - racer->z_rotation_vel) * updateRate) >> 4); + racerObj->segment.trans.rotation.s[2] = racer->x_rotation_vel + racer->z_rotation_vel; + if (D_8011D550) { + if (gCurrentPlayerIndex != PLAYER_COMPUTER && D_8011D550 != SOUND_STOMP5) { + sound_play_spatial(D_8011D550, racerObj->segment.trans.x_position, racerObj->segment.trans.y_position, + racerObj->segment.trans.z_position, &racer->unk21C); + sound_volume_set_relative(D_8011D550, racer->unk21C, D_8011D552); + } + racer->stretch_height_cap = (1.0 - ((f32) (D_8011D552 - 40) * 0.004)); + racer->trickType = 0; + } + if (racer->unk1F0 == 0) { + gCurrentRacerTransform.rotation.s[0] = racer->steerVisualRotation + racer->unk10C; + gCurrentRacerTransform.rotation.s[1] = 0; + gCurrentRacerTransform.rotation.s[2] = 0; + gCurrentRacerTransform.x_position = 0.0f; + gCurrentRacerTransform.y_position = 0.0f; + gCurrentRacerTransform.z_position = 0.0f; + gCurrentRacerTransform.scale = 1.0f; + object_transform_to_matrix_2(sp60, &gCurrentRacerTransform); + guMtxXFMF(sp60, racer->lateral_velocity, 0.0f, racer->velocity, &racerObj->segment.x_velocity, &spBC, + &racerObj->segment.z_velocity); + } + if (racer->magnetTimer != 0) { + racerObj->segment.x_velocity = gRacerMagnetVelX; + racerObj->segment.z_velocity = gRacerMagnetVelZ; + } + if (racer->approachTarget == NULL) { + spB8 = racerObj->segment.x_velocity; + spB4 = racerObj->segment.z_velocity; + if (racer->unk1D2 != 0) { + spB8 += racer->unk11C; + spB4 += racer->unk120; + } + if (gRacerInputBlocked != 0) { + spB8 *= 0.65; + spB4 *= 0.65; + if (racer->velocity < -0.5 || racer->velocity > 0.5) { + racer->velocity *= 0.65; + } else { + racer->velocity = 0.0f; + } + if (racer->lateral_velocity < -0.5 || racer->lateral_velocity > 0.5) { + racer->lateral_velocity *= 0.65; + } else { + racer->lateral_velocity = 0.0f; + } + } else { + spB8 += racer->unk84; + spB4 += racer->unk88; + } + objectMoved = move_object(racerObj, spB8 * updateRateF, racerObj->segment.y_velocity * updateRateF, + spB4 * updateRateF); + if (objectMoved && gCurrentPlayerIndex != PLAYER_COMPUTER) { + playerObjectHasMoved = TRUE; + } + } else { + racer_approach_object(racerObj, racer, updateRateF); + } + if (gCurrentPlayerIndex == PLAYER_COMPUTER) { + onscreen_ai_racer_physics(racerObj, racer, updateRate); + } else { + func_80054FD0(racerObj, racer, updateRate); + } + spBC = 1.0f / updateRateF; + spB8 = (((racerObj->segment.trans.x_position - spA8) - D_8011D548) * spBC) - racer->unk84; + racerObj->segment.y_velocity = (racerObj->segment.trans.y_position - spA4) * spBC; + spB4 = (((racerObj->segment.trans.z_position - spA0) - D_8011D54C) * spBC) - racer->unk88; + gCurrentRacerTransform.rotation.s[0] = -(racer->steerVisualRotation + racer->unk10C); + gCurrentRacerTransform.rotation.s[1] = -racerObj->segment.trans.rotation.s[1]; + gCurrentRacerTransform.rotation.s[2] = -racerObj->segment.trans.rotation.s[2]; + gCurrentRacerTransform.x_position = 0.0f; + gCurrentRacerTransform.y_position = 0.0f; + gCurrentRacerTransform.z_position = 0.0f; + gCurrentRacerTransform.scale = 1.0f; + object_transform_to_matrix_2(sp60, &gCurrentRacerTransform); + guMtxXFMF(sp60, spB8, 0.0f, spB4, &spAC, &spBC, &spB0); + if (racer->unk1D2 != 0) { + racer->unk1D2 -= updateRate; + if (racer->unk1D2 < 0) { + racer->unk1D2 = 0; + } + } else { + spBC = racer->velocity - spB0; + if (spBC > 0.5) { + racer->velocity -= spBC - 0.5; + } + if (spBC < -0.5) { + racer->velocity -= spBC + 0.5; + } + spBC = racer->lateral_velocity - spAC; + if (spBC > 0.5) { + racer->lateral_velocity -= spBC - 0.5; + } + if (spBC < -0.5) { + racer->lateral_velocity -= spBC + 0.5; + } + } + if (racer->boostTimer == 0 && gNumViewports < 2) { + asset20 = (Asset20 *) get_misc_asset(ASSET_MISC_20); + asset20 = &asset20[racer->racerIndex]; + var_v1 = ((racer->boostType & EMPOWER_BOOST) >> 2) + 0x10; + if (var_v1 > 0x10) { + if (asset20->unk70 > 0 || asset20->unk74 > 0.0) { + racerObj->particleEmitFlags |= 1 << var_v1; + } + } else { + if (asset20->unk70 == 2 && asset20->unk74 < 0.5) { + racerObj->particleEmitFlags |= 1 << var_v1; + } else if (asset20->unk70 < 2 && asset20->unk74 > 0.0f) { + racerObj->particleEmitFlags |= 1 << var_v1; + } + } + } + if (gCurrentPlayerIndex != PLAYER_COMPUTER && gNumViewports < 2) { + if (racer->buoyancy > 14.0f) { + if (get_random_number_from_range(0, 1) != 0) { + racerObj->particleEmitFlags |= PARTICLE_COLOURVEL_RED | PARTICLE_COLOURVEL_GREEN; + } + } else if (racer->buoyancy < 6.0f) { + if (racer->velocity > -3.0 && racer->velocity < 0.5 && get_random_number_from_range(0, 1) != 0) { + racerObj->particleEmitFlags |= PARTICLE_UNK00040000 | PARTICLE_FORWARDVEL; + } + } + } + if (racer->vehicleID < VEHICLE_TRICKY) { + func_800AF714(racerObj, updateRate); + } + second_racer_camera_update(racerObj, racer, 0, updateRateF); + if (gNumViewports == 1 && racer->velocity > -3.0 && get_settings()->courseId != ASSET_LEVEL_WIZPIG1) { + set_anti_aliasing(TRUE); + } + if (playerObjectHasMoved) { + func_800230D0(racerObj, racer); + } + } +} /** * At this point, control is taken away from the player. @@ -2857,7 +3144,7 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR f32 topSpeed; // 78 s32 i; - sp58 = 0; + sp58 = FALSE; // Set the square value of the current forward velocity velSquare = racer->velocity * racer->velocity; if (racer->velocity < 0.0f) { @@ -2943,7 +3230,7 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR if (gNumViewports < FOUR_PLAYERS) { obj->particleEmitFlags |= 0x2000 | 0x1000 | 0x800 | 0x400; } else { - sp58 = 1; + sp58 = TRUE; } racer->y_rotation_vel += updateRate * 0x600 * racer->drifting; if (racer->drifting > 0) { @@ -2971,7 +3258,7 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR obj->particleEmitFlags |= 0x2000 | 0x800; } } else { - sp58 = 1; + sp58 = TRUE; } } // Decide which way to drift when the R button is held @@ -3009,7 +3296,7 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR // sounds for drifting and sliding if (!(racer->y_rotation_vel <= 0x1800 && racer->y_rotation_vel >= -0x1800 && racer->drift_direction == 0 && racer->drifting == 0 && racer->unk1FB == 0)) { - sp60 = 1; + sp60 = TRUE; if (racer->unk1FB != 0 && racer->raceFinished == FALSE) { rumble_set(racer->playerIndex, RUMBLE_TYPE_0); } @@ -3283,7 +3570,7 @@ void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR if (gDialogueCameraAngle != 0) { surfaceTraction = 0.0f; } - if (racer->brake < 0.9 && racer->vehicleIDPrev < 5 && gRaceStartTimer == 0) { + if (racer->brake < 0.9 && racer->vehicleIDPrev < VEHICLE_TRICKY && gRaceStartTimer == 0) { if (racer->pitch < 0.0) { velocityDiff = -racer->pitch; velocityDiff -= 0.3; @@ -6773,7 +7060,7 @@ void func_8005B818(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR if (racer->boostTimer != 0) { var_f12 *= 1.3; } - + if (racer->vehicleID == VEHICLE_HOVERCRAFT) { i = (racer->unk1BE & 0xFFFF) - (racer->unk1C2 & 0xFFFF); if (i >= 0x8001) { @@ -6855,7 +7142,8 @@ void func_8005B818(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateR var_f28 -= racer->unk70; if (j == 0) { checkpointSplineIdx = 0; - checkpointPositionOffset = sqrtf((var_f24 * var_f24) + (var_f26 * var_f26) + (var_f28 * var_f28)) / updateRateF; + checkpointPositionOffset = + sqrtf((var_f24 * var_f24) + (var_f26 * var_f26) + (var_f28 * var_f28)) / updateRateF; if (checkpointPositionOffset != 0.0f) { racer->unkAC *= (tempRacerVelocity / checkpointPositionOffset); } else { diff --git a/src/racer.h b/src/racer.h index 1f890b61..904ccb24 100644 --- a/src/racer.h +++ b/src/racer.h @@ -234,13 +234,13 @@ void timetrial_ghost_write(Object *obj, s32 updateRate); void func_80046524(s32 updateRate, f32 updateRateF, Object* obj, Object_Racer* racer); void func_80053750(Object *objRacer, Object_Racer *racer, f32 updateRateF); void func_80054FD0(Object *racerObj, Object_Racer *racer, s32 updateRate); +void func_8004F7F4(s32 updateRate, f32 updateRateF, Object* racerObj, Object_Racer* racer); /* extern */ //Non Matching s32 set_ghost_position_and_rotation(Object *obj); void update_car_velocity_offground(Object *obj, Object_Racer *racer, s32, f32); s32 func_80017248(void*, s32, s32*, Vec3f*, f32*, f32*, s8* surface); void func_80059208(Object* obj, Object_Racer* racer, s32 updateRate); /* extern */ -void func_8004F7F4(s32 updateRate, f32 updateRateF, Object* obj, Object_Racer* racer); /* extern */ void func_80049794(s32 updateRate, f32 updateRateF, Object* obj, Object_Racer* racer); /* extern */ void func_8004CC20(s32 updateRate, f32 updateRateF, Object* obj, Object_Racer* racer); /* extern */ void func_8004447C(Object *obj, Object_Racer *racer, s32 updateRate); @@ -249,5 +249,6 @@ void func_80045C48(Object *obj, Object_Racer *racer, s32 updateRate); void racer_activate_magnet(Object *obj, Object_Racer *racer, s32 updateRate); Object *func_8005698C(Object *racerObj, Object_Racer *racer, f32 *outDistance); void func_8005B818(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateRateF); +void func_80050A28(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateRateF); #endif