From f1f2f9791ff34f274b57e4198e82b38938f248d1 Mon Sep 17 00:00:00 2001 From: Dominik Peters Date: Thu, 6 Mar 2025 15:06:08 +0100 Subject: [PATCH] match: func_8005B818 (#472) * partial match: func_8005B818 * refac: add UNUSED to unused variables, rename them to padX * partial match: increase match score of func_8005B818 by assigning and then using a variable * match: func_8005B818 * chore: update README with score * Apply suggestions from code review Co-authored-by: Ryan Myers --------- Co-authored-by: Ryan Myers --- README.md | 16 +- asm/non_matchings/racer/func_8005B818.s | 711 ------------------------ src/racer.c | 442 +++++++-------- 3 files changed, 224 insertions(+), 945 deletions(-) delete mode 100644 asm/non_matchings/racer/func_8005B818.s diff --git a/README.md b/README.md index a0f10d10..be0b65ce 100644 --- a/README.md +++ b/README.md @@ -5,9 +5,9 @@ This repo contains a work-in-progress decompilation of Diddy Kong Racing for the Currently, only the US 1.0 version (SHA1 = 0cb115d8716dbbc2922fda38e533b9fe63bb9670) of the game is supported. US 1.1, EU 1.0, EU 1.1, and JP are not supported at this time. -As of March 5, 2025, this is our current score: +As of March 6, 2025, this is our current score: -    Decomp progress: 72.14% +    Decomp progress: 72.44%     Documentation progress: 49.99% @@ -126,20 +126,20 @@ s32 is_drumstick_unlocked(void) { ``` -As of March 5th, 2025, this is our current score: +As of March 6, 2025, this is our current score: ``` =============================================== ADVENTURE ONE (ASM -> C Decompilation) - ---- 72.14% Complete (75.30% NON_MATCHING) ---- - # Decompiled functions: 1815 - # GLOBAL_ASM remaining: 126 + ---- 72.44% Complete (75.60% NON_MATCHING) ---- + # Decompiled functions: 1816 + # GLOBAL_ASM remaining: 125 # NON_MATCHING functions: 15 - # NON_EQUIVALENT WIP functions: 44 + # 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 2/3) + We are racing the dragon boss Smokey. (Lap 3/3) =============================================== ADVENTURE TWO (Cleanup & Documentation) --------------- 49.99% Complete --------------- diff --git a/asm/non_matchings/racer/func_8005B818.s b/asm/non_matchings/racer/func_8005B818.s deleted file mode 100644 index b479c678..00000000 --- a/asm/non_matchings/racer/func_8005B818.s +++ /dev/null @@ -1,711 +0,0 @@ -.late_rodata -glabel D_800E69C0 -.double 0.025 -glabel D_800E69C8 -.double 0.595 -glabel D_800E69D0 -.double 0.004 -glabel D_800E69D8 -.double 1.3 -glabel D_800E69E0 -.double 150.0 -glabel D_800E69E8 -.float 0.01 -.word 0 # Padding -glabel D_800E69F0 -.double 0.01 -glabel D_800E69F8 -.double 35.0 - -.text -glabel func_8005B818 -/* 05C418 8005B818 27BDFED8 */ addiu $sp, $sp, -0x128 -/* 05C41C 8005B81C AFB30050 */ sw $s3, 0x50($sp) -/* 05C420 8005B820 E7BE003C */ swc1 $f30, 0x3c($sp) -/* 05C424 8005B824 4487F000 */ mtc1 $a3, $f30 -/* 05C428 8005B828 00809825 */ move $s3, $a0 -/* 05C42C 8005B82C AFBF0054 */ sw $ra, 0x54($sp) -/* 05C430 8005B830 AFB10048 */ sw $s1, 0x48($sp) -/* 05C434 8005B834 00A08825 */ move $s1, $a1 -/* 05C438 8005B838 AFB2004C */ sw $s2, 0x4c($sp) -/* 05C43C 8005B83C AFB00044 */ sw $s0, 0x44($sp) -/* 05C440 8005B840 E7BF0038 */ swc1 $f31, 0x38($sp) -/* 05C444 8005B844 E7BD0030 */ swc1 $f29, 0x30($sp) -/* 05C448 8005B848 E7BC0034 */ swc1 $f28, 0x34($sp) -/* 05C44C 8005B84C E7BB0028 */ swc1 $f27, 0x28($sp) -/* 05C450 8005B850 E7BA002C */ swc1 $f26, 0x2c($sp) -/* 05C454 8005B854 E7B90020 */ swc1 $f25, 0x20($sp) -/* 05C458 8005B858 E7B80024 */ swc1 $f24, 0x24($sp) -/* 05C45C 8005B85C E7B70018 */ swc1 $f23, 0x18($sp) -/* 05C460 8005B860 E7B6001C */ swc1 $f22, 0x1c($sp) -/* 05C464 8005B864 E7B50010 */ swc1 $f21, 0x10($sp) -/* 05C468 8005B868 E7B40014 */ swc1 $f20, 0x14($sp) -/* 05C46C 8005B86C AFA60130 */ sw $a2, 0x130($sp) -/* 05C470 8005B870 0C0078A7 */ jal get_misc_asset -/* 05C474 8005B874 24040021 */ li $a0, 33 -/* 05C478 8005B878 3C018012 */ lui $at, %hi(gCurrentRacerMiscAssetPtr) # $at, 0x8012 -/* 05C47C 8005B87C 0C01AF6C */ jal get_current_level_header -/* 05C480 8005B880 AC22D564 */ sw $v0, %lo(gCurrentRacerMiscAssetPtr)($at) -/* 05C484 8005B884 0C006E99 */ jal get_checkpoint_count -/* 05C488 8005B888 AFA20080 */ sw $v0, 0x80($sp) -/* 05C48C 8005B88C 10400260 */ beqz $v0, .L8005C210 -/* 05C490 8005B890 AFA2011C */ sw $v0, 0x11c($sp) -/* 05C494 8005B894 44802000 */ mtc1 $zero, $f4 -/* 05C498 8005B898 3C0141A0 */ li $at, 0x41A00000 # 20.000000 -/* 05C49C 8005B89C 44811000 */ mtc1 $at, $f2 -/* 05C4A0 8005B8A0 A22001C9 */ sb $zero, 0x1c9($s1) -/* 05C4A4 8005B8A4 A22001F5 */ sb $zero, 0x1f5($s1) -/* 05C4A8 8005B8A8 A2200187 */ sb $zero, 0x187($s1) -/* 05C4AC 8005B8AC E6240030 */ swc1 $f4, 0x30($s1) -/* 05C4B0 8005B8B0 3C01C1A0 */ li $at, 0xC1A00000 # -20.000000 -/* 05C4B4 8005B8B4 E7A20094 */ swc1 $f2, 0x94($sp) -/* 05C4B8 8005B8B8 C6200124 */ lwc1 $f0, 0x124($s1) -/* 05C4BC 8005B8BC 44813000 */ mtc1 $at, $f6 -/* 05C4C0 8005B8C0 3C01800E */ lui $at, %hi(D_800E69C0 + 4) # $at, 0x800e -/* 05C4C4 8005B8C4 4606003C */ c.lt.s $f0, $f6 -/* 05C4C8 8005B8C8 00000000 */ nop -/* 05C4CC 8005B8CC 45000005 */ bc1f .L8005B8E4 -/* 05C4D0 8005B8D0 00000000 */ nop -/* 05C4D4 8005B8D4 46001207 */ neg.s $f8, $f2 -/* 05C4D8 8005B8D8 E6280124 */ swc1 $f8, 0x124($s1) -/* 05C4DC 8005B8DC C6200124 */ lwc1 $f0, 0x124($s1) -/* 05C4E0 8005B8E0 00000000 */ nop -.L8005B8E4: -/* 05C4E4 8005B8E4 C7AA0094 */ lwc1 $f10, 0x94($sp) -/* 05C4E8 8005B8E8 00000000 */ nop -/* 05C4EC 8005B8EC 4600503C */ c.lt.s $f10, $f0 -/* 05C4F0 8005B8F0 00000000 */ nop -/* 05C4F4 8005B8F4 45000004 */ bc1f .L8005B908 -/* 05C4F8 8005B8F8 00000000 */ nop -/* 05C4FC 8005B8FC E62A0124 */ swc1 $f10, 0x124($s1) -/* 05C500 8005B900 C6200124 */ lwc1 $f0, 0x124($s1) -/* 05C504 8005B904 00000000 */ nop -.L8005B908: -/* 05C508 8005B908 C42569C0 */ lwc1 $f5, %lo(D_800E69C0)($at) -/* 05C50C 8005B90C C42469C4 */ lwc1 $f4, %lo(D_800E69C0 + 4)($at) -/* 05C510 8005B910 460004A1 */ cvt.d.s $f18, $f0 -/* 05C514 8005B914 46249182 */ mul.d $f6, $f18, $f4 -/* 05C518 8005B918 3C01800E */ lui $at, %hi(D_800E69C8 + 4) # $at, 0x800e -/* 05C51C 8005B91C C42969C8 */ lwc1 $f9, %lo(D_800E69C8)($at) -/* 05C520 8005B920 C42869CC */ lwc1 $f8, %lo(D_800E69C8 + 4)($at) -/* 05C524 8005B924 3C01800E */ lui $at, %hi(D_800E69D0 + 4) # $at, 0x800e -/* 05C528 8005B928 C43369D0 */ lwc1 $f19, %lo(D_800E69D0)($at) -/* 05C52C 8005B92C C43269D4 */ lwc1 $f18, %lo(D_800E69D0 + 4)($at) -/* 05C530 8005B930 46283280 */ add.d $f10, $f6, $f8 -/* 05C534 8005B934 00000000 */ nop -/* 05C538 8005B938 46325103 */ div.d $f4, $f10, $f18 -/* 05C53C 8005B93C 0C0326B4 */ jal sqrtf -/* 05C540 8005B940 46202320 */ cvt.s.d $f12, $f4 -/* 05C544 8005B944 822E01D3 */ lb $t6, 0x1d3($s1) -/* 05C548 8005B948 46000306 */ mov.s $f12, $f0 -/* 05C54C 8005B94C 11C00007 */ beqz $t6, .L8005B96C -/* 05C550 8005B950 27A30100 */ addiu $v1, $sp, 0x100 -/* 05C554 8005B954 3C01800E */ lui $at, %hi(D_800E69D8 + 4) # $at, 0x800e -/* 05C558 8005B958 C42969D8 */ lwc1 $f9, %lo(D_800E69D8)($at) -/* 05C55C 8005B95C C42869DC */ lwc1 $f8, %lo(D_800E69D8 + 4)($at) -/* 05C560 8005B960 460001A1 */ cvt.d.s $f6, $f0 -/* 05C564 8005B964 46283282 */ mul.d $f10, $f6, $f8 -/* 05C568 8005B968 46205320 */ cvt.s.d $f12, $f10 -.L8005B96C: -/* 05C56C 8005B96C 822F01D6 */ lb $t7, 0x1d6($s1) -/* 05C570 8005B970 24010001 */ li $at, 1 -/* 05C574 8005B974 15E1003F */ bne $t7, $at, .L8005BA74 -/* 05C578 8005B978 27A600EC */ addiu $a2, $sp, 0xec -/* 05C57C 8005B97C 863801BE */ lh $t8, 0x1be($s1) -/* 05C580 8005B980 862A01C2 */ lh $t2, 0x1c2($s1) -/* 05C584 8005B984 3319FFFF */ andi $t9, $t8, 0xffff -/* 05C588 8005B988 314BFFFF */ andi $t3, $t2, 0xffff -/* 05C58C 8005B98C 032B1023 */ subu $v0, $t9, $t3 -/* 05C590 8005B990 34018001 */ li $at, 32769 -/* 05C594 8005B994 0041082A */ slt $at, $v0, $at -/* 05C598 8005B998 14200003 */ bnez $at, .L8005B9A8 -/* 05C59C 8005B99C 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 05C5A0 8005B9A0 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 05C5A4 8005B9A4 00411021 */ addu $v0, $v0, $at -.L8005B9A8: -/* 05C5A8 8005B9A8 28418000 */ slti $at, $v0, -0x8000 -/* 05C5AC 8005B9AC 10200002 */ beqz $at, .L8005B9B8 -/* 05C5B0 8005B9B0 3401FFFF */ li $at, 65535 -/* 05C5B4 8005B9B4 00411021 */ addu $v0, $v0, $at -.L8005B9B8: -/* 05C5B8 8005B9B8 04410002 */ bgez $v0, .L8005B9C4 -/* 05C5BC 8005B9BC 00000000 */ nop -/* 05C5C0 8005B9C0 00021023 */ negu $v0, $v0 -.L8005B9C4: -/* 05C5C4 8005B9C4 2442FF38 */ addiu $v0, $v0, -0xc8 -/* 05C5C8 8005B9C8 04410002 */ bgez $v0, .L8005B9D4 -/* 05C5CC 8005B9CC 00000000 */ nop -/* 05C5D0 8005B9D0 00001025 */ move $v0, $zero -.L8005B9D4: -/* 05C5D4 8005B9D4 44829000 */ mtc1 $v0, $f18 -/* 05C5D8 8005B9D8 3C01800E */ lui $at, %hi(D_800E69E0 + 4) # $at, 0x800e -/* 05C5DC 8005B9DC 46809120 */ cvt.s.w $f4, $f18 -/* 05C5E0 8005B9E0 C42969E0 */ lwc1 $f9, %lo(D_800E69E0)($at) -/* 05C5E4 8005B9E4 C42869E4 */ lwc1 $f8, %lo(D_800E69E0 + 4)($at) -/* 05C5E8 8005B9E8 460021A1 */ cvt.d.s $f6, $f4 -/* 05C5EC 8005B9EC 00000000 */ nop -/* 05C5F0 8005B9F0 46283283 */ div.d $f10, $f6, $f8 -/* 05C5F4 8005B9F4 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 05C5F8 8005B9F8 44812800 */ mtc1 $at, $f5 -/* 05C5FC 8005B9FC 44802000 */ mtc1 $zero, $f4 -/* 05C600 8005BA00 3C014000 */ li $at, 0x40000000 # 2.000000 -/* 05C604 8005BA04 462053A0 */ cvt.s.d $f14, $f10 -/* 05C608 8005BA08 460E6301 */ sub.s $f12, $f12, $f14 -/* 05C60C 8005BA0C E7AE0094 */ swc1 $f14, 0x94($sp) -/* 05C610 8005BA10 460064A1 */ cvt.d.s $f18, $f12 -/* 05C614 8005BA14 4624903C */ c.lt.d $f18, $f4 -/* 05C618 8005BA18 00000000 */ nop -/* 05C61C 8005BA1C 45000003 */ bc1f .L8005BA2C -/* 05C620 8005BA20 00000000 */ nop -/* 05C624 8005BA24 44816000 */ mtc1 $at, $f12 -/* 05C628 8005BA28 00000000 */ nop -.L8005BA2C: -/* 05C62C 8005BA2C C620002C */ lwc1 $f0, 0x2c($s1) -/* 05C630 8005BA30 46006087 */ neg.s $f2, $f12 -/* 05C634 8005BA34 4602003C */ c.lt.s $f0, $f2 -/* 05C638 8005BA38 3C013FC0 */ li $at, 0x3FC00000 # 1.500000 -/* 05C63C 8005BA3C 45000003 */ bc1f .L8005BA4C -/* 05C640 8005BA40 00000000 */ nop -/* 05C644 8005BA44 10000017 */ b .L8005BAA4 -/* 05C648 8005BA48 E622002C */ swc1 $f2, 0x2c($s1) -.L8005BA4C: -/* 05C64C 8005BA4C 46001181 */ sub.s $f6, $f2, $f0 -/* 05C650 8005BA50 44815800 */ mtc1 $at, $f11 -/* 05C654 8005BA54 44805000 */ mtc1 $zero, $f10 -/* 05C658 8005BA58 46003221 */ cvt.d.s $f8, $f6 -/* 05C65C 8005BA5C 462A4482 */ mul.d $f18, $f8, $f10 -/* 05C660 8005BA60 46000121 */ cvt.d.s $f4, $f0 -/* 05C664 8005BA64 46322180 */ add.d $f6, $f4, $f18 -/* 05C668 8005BA68 46203220 */ cvt.s.d $f8, $f6 -/* 05C66C 8005BA6C 1000000D */ b .L8005BAA4 -/* 05C670 8005BA70 E628002C */ swc1 $f8, 0x2c($s1) -.L8005BA74: -/* 05C674 8005BA74 C620002C */ lwc1 $f0, 0x2c($s1) -/* 05C678 8005BA78 46006287 */ neg.s $f10, $f12 -/* 05C67C 8005BA7C 46005101 */ sub.s $f4, $f10, $f0 -/* 05C680 8005BA80 3C013FD0 */ li $at, 0x3FD00000 # 1.625000 -/* 05C684 8005BA84 44813800 */ mtc1 $at, $f7 -/* 05C688 8005BA88 44803000 */ mtc1 $zero, $f6 -/* 05C68C 8005BA8C 460024A1 */ cvt.d.s $f18, $f4 -/* 05C690 8005BA90 46269202 */ mul.d $f8, $f18, $f6 -/* 05C694 8005BA94 460002A1 */ cvt.d.s $f10, $f0 -/* 05C698 8005BA98 46285100 */ add.d $f4, $f10, $f8 -/* 05C69C 8005BA9C 462024A0 */ cvt.s.d $f18, $f4 -/* 05C6A0 8005BAA0 E632002C */ swc1 $f18, 0x2c($s1) -.L8005BAA4: -/* 05C6A4 8005BAA4 82240192 */ lb $a0, 0x192($s1) -/* 05C6A8 8005BAA8 27A700D8 */ addiu $a3, $sp, 0xd8 -/* 05C6AC 8005BAAC 2484FFFE */ addiu $a0, $a0, -2 -/* 05C6B0 8005BAB0 04810004 */ bgez $a0, .L8005BAC4 -/* 05C6B4 8005BAB4 27A900B8 */ addiu $t1, $sp, 0xb8 -/* 05C6B8 8005BAB8 8FA2011C */ lw $v0, 0x11c($sp) -/* 05C6BC 8005BABC 00000000 */ nop -/* 05C6C0 8005BAC0 00822021 */ addu $a0, $a0, $v0 -.L8005BAC4: -/* 05C6C4 8005BAC4 8FA2011C */ lw $v0, 0x11c($sp) -/* 05C6C8 8005BAC8 27A800A4 */ addiu $t0, $sp, 0xa4 -/* 05C6CC 8005BACC 0082082A */ slt $at, $a0, $v0 -/* 05C6D0 8005BAD0 14200002 */ bnez $at, .L8005BADC -/* 05C6D4 8005BAD4 27B000B8 */ addiu $s0, $sp, 0xb8 -/* 05C6D8 8005BAD8 00822023 */ subu $a0, $a0, $v0 -.L8005BADC: -/* 05C6DC 8005BADC 922501C8 */ lbu $a1, 0x1c8($s1) -/* 05C6E0 8005BAE0 AFA90070 */ sw $t1, 0x70($sp) -/* 05C6E4 8005BAE4 AFA8006C */ sw $t0, 0x6c($sp) -/* 05C6E8 8005BAE8 AFA70074 */ sw $a3, 0x74($sp) -/* 05C6EC 8005BAEC AFA60078 */ sw $a2, 0x78($sp) -/* 05C6F0 8005BAF0 AFA40120 */ sw $a0, 0x120($sp) -/* 05C6F4 8005BAF4 0C006E87 */ jal find_next_checkpoint_node -/* 05C6F8 8005BAF8 AFA3007C */ sw $v1, 0x7c($sp) -/* 05C6FC 8005BAFC 8FA3007C */ lw $v1, 0x7c($sp) -/* 05C700 8005BB00 C4460010 */ lwc1 $f6, 0x10($v0) -/* 05C704 8005BB04 8FA40120 */ lw $a0, 0x120($sp) -/* 05C708 8005BB08 8FA60078 */ lw $a2, 0x78($sp) -/* 05C70C 8005BB0C 8FA70074 */ lw $a3, 0x74($sp) -/* 05C710 8005BB10 8FA8006C */ lw $t0, 0x6c($sp) -/* 05C714 8005BB14 8FA90070 */ lw $t1, 0x70($sp) -/* 05C718 8005BB18 E4660000 */ swc1 $f6, ($v1) -/* 05C71C 8005BB1C C44A0014 */ lwc1 $f10, 0x14($v0) -/* 05C720 8005BB20 24840001 */ addiu $a0, $a0, 1 -/* 05C724 8005BB24 E4CA0000 */ swc1 $f10, ($a2) -/* 05C728 8005BB28 C4480018 */ lwc1 $f8, 0x18($v0) -/* 05C72C 8005BB2C 24630004 */ addiu $v1, $v1, 4 -/* 05C730 8005BB30 E4E80000 */ swc1 $f8, ($a3) -/* 05C734 8005BB34 822C01CA */ lb $t4, 0x1ca($s1) -/* 05C738 8005BB38 24C60004 */ addiu $a2, $a2, 4 -/* 05C73C 8005BB3C 004C6821 */ addu $t5, $v0, $t4 -/* 05C740 8005BB40 81AE002E */ lb $t6, 0x2e($t5) -/* 05C744 8005BB44 24E70004 */ addiu $a3, $a3, 4 -/* 05C748 8005BB48 448E2000 */ mtc1 $t6, $f4 -/* 05C74C 8005BB4C 25080004 */ addiu $t0, $t0, 4 -/* 05C750 8005BB50 468024A0 */ cvt.s.w $f18, $f4 -/* 05C754 8005BB54 E5320000 */ swc1 $f18, ($t1) -/* 05C758 8005BB58 822F01CA */ lb $t7, 0x1ca($s1) -/* 05C75C 8005BB5C 00000000 */ nop -/* 05C760 8005BB60 004FC021 */ addu $t8, $v0, $t7 -/* 05C764 8005BB64 830A0032 */ lb $t2, 0x32($t8) -/* 05C768 8005BB68 00000000 */ nop -/* 05C76C 8005BB6C 448A3000 */ mtc1 $t2, $f6 -/* 05C770 8005BB70 00000000 */ nop -/* 05C774 8005BB74 468032A0 */ cvt.s.w $f10, $f6 -/* 05C778 8005BB78 E50AFFFC */ swc1 $f10, -4($t0) -/* 05C77C 8005BB7C 823901CA */ lb $t9, 0x1ca($s1) -/* 05C780 8005BB80 C448001C */ lwc1 $f8, 0x1c($v0) -/* 05C784 8005BB84 00595821 */ addu $t3, $v0, $t9 -/* 05C788 8005BB88 816C002E */ lb $t4, 0x2e($t3) -/* 05C78C 8005BB8C C4440008 */ lwc1 $f4, 8($v0) -/* 05C790 8005BB90 448C3000 */ mtc1 $t4, $f6 -/* 05C794 8005BB94 46044482 */ mul.s $f18, $f8, $f4 -/* 05C798 8005BB98 C464FFFC */ lwc1 $f4, -4($v1) -/* 05C79C 8005BB9C 468032A0 */ cvt.s.w $f10, $f6 -/* 05C7A0 8005BBA0 460A9202 */ mul.s $f8, $f18, $f10 -/* 05C7A4 8005BBA4 46082180 */ add.s $f6, $f4, $f8 -/* 05C7A8 8005BBA8 E466FFFC */ swc1 $f6, -4($v1) -/* 05C7AC 8005BBAC 822D01CA */ lb $t5, 0x1ca($s1) -/* 05C7B0 8005BBB0 C452001C */ lwc1 $f18, 0x1c($v0) -/* 05C7B4 8005BBB4 004D7021 */ addu $t6, $v0, $t5 -/* 05C7B8 8005BBB8 81CF0032 */ lb $t7, 0x32($t6) -/* 05C7BC 8005BBBC C4C6FFFC */ lwc1 $f6, -4($a2) -/* 05C7C0 8005BBC0 448F5000 */ mtc1 $t7, $f10 -/* 05C7C4 8005BBC4 00000000 */ nop -/* 05C7C8 8005BBC8 46805120 */ cvt.s.w $f4, $f10 -/* 05C7CC 8005BBCC 46049202 */ mul.s $f8, $f18, $f4 -/* 05C7D0 8005BBD0 46083280 */ add.s $f10, $f6, $f8 -/* 05C7D4 8005BBD4 E4CAFFFC */ swc1 $f10, -4($a2) -/* 05C7D8 8005BBD8 823801CA */ lb $t8, 0x1ca($s1) -/* 05C7DC 8005BBDC C4440000 */ lwc1 $f4, ($v0) -/* 05C7E0 8005BBE0 00585021 */ addu $t2, $v0, $t8 -/* 05C7E4 8005BBE4 8159002E */ lb $t9, 0x2e($t2) -/* 05C7E8 8005BBE8 C452001C */ lwc1 $f18, 0x1c($v0) -/* 05C7EC 8005BBEC 44995000 */ mtc1 $t9, $f10 -/* 05C7F0 8005BBF0 46002187 */ neg.s $f6, $f4 -/* 05C7F4 8005BBF4 46069202 */ mul.s $f8, $f18, $f6 -/* 05C7F8 8005BBF8 C4E6FFFC */ lwc1 $f6, -4($a3) -/* 05C7FC 8005BBFC 46805120 */ cvt.s.w $f4, $f10 -/* 05C800 8005BC00 46044482 */ mul.s $f18, $f8, $f4 -/* 05C804 8005BC04 46123280 */ add.s $f10, $f6, $f18 -/* 05C808 8005BC08 E4EAFFFC */ swc1 $f10, -4($a3) -/* 05C80C 8005BC0C 8FAB011C */ lw $t3, 0x11c($sp) -/* 05C810 8005BC10 00000000 */ nop -/* 05C814 8005BC14 148B0002 */ bne $a0, $t3, .L8005BC20 -/* 05C818 8005BC18 00000000 */ nop -/* 05C81C 8005BC1C 00002025 */ move $a0, $zero -.L8005BC20: -/* 05C820 8005BC20 1510FFAE */ bne $t0, $s0, .L8005BADC -/* 05C824 8005BC24 25290004 */ addiu $t1, $t1, 4 -/* 05C828 8005BC28 C628002C */ lwc1 $f8, 0x2c($s1) -/* 05C82C 8005BC2C 44803000 */ mtc1 $zero, $f6 -/* 05C830 8005BC30 E7A8008C */ swc1 $f8, 0x8c($sp) -/* 05C834 8005BC34 C7A4008C */ lwc1 $f4, 0x8c($sp) -/* 05C838 8005BC38 44805800 */ mtc1 $zero, $f11 -/* 05C83C 8005BC3C 4606203C */ c.lt.s $f4, $f6 -/* 05C840 8005BC40 4480A000 */ mtc1 $zero, $f20 -/* 05C844 8005BC44 45000003 */ bc1f .L8005BC54 -/* 05C848 8005BC48 00000000 */ nop -/* 05C84C 8005BC4C 46002487 */ neg.s $f18, $f4 -/* 05C850 8005BC50 E7B2008C */ swc1 $f18, 0x8c($sp) -.L8005BC54: -/* 05C854 8005BC54 C62800AC */ lwc1 $f8, 0xac($s1) -/* 05C858 8005BC58 44805000 */ mtc1 $zero, $f10 -/* 05C85C 8005BC5C 460041A1 */ cvt.d.s $f6, $f8 -/* 05C860 8005BC60 46265032 */ c.eq.d $f10, $f6 -/* 05C864 8005BC64 00009025 */ move $s2, $zero -/* 05C868 8005BC68 45000004 */ bc1f .L8005BC7C -/* 05C86C 8005BC6C 3C01800E */ lui $at, %hi(D_800E69E8) # $at, 0x800e -/* 05C870 8005BC70 C42469E8 */ lwc1 $f4, %lo(D_800E69E8)($at) -/* 05C874 8005BC74 00000000 */ nop -/* 05C878 8005BC78 E62400AC */ swc1 $f4, 0xac($s1) -.L8005BC7C: -/* 05C87C 8005BC7C 3C013FF0 */ li $at, 0x3FF00000 # 1.875000 -/* 05C880 8005BC80 4481A800 */ mtc1 $at, $f21 -/* 05C884 8005BC84 00008025 */ move $s0, $zero -.L8005BC88: -/* 05C888 8005BC88 C62600AC */ lwc1 $f6, 0xac($s1) -/* 05C88C 8005BC8C C63200A8 */ lwc1 $f18, 0xa8($s1) -/* 05C890 8005BC90 461E3102 */ mul.s $f4, $f6, $f30 -/* 05C894 8005BC94 46009221 */ cvt.d.s $f8, $f18 -/* 05C898 8005BC98 27A40100 */ addiu $a0, $sp, 0x100 -/* 05C89C 8005BC9C 27A7009C */ addiu $a3, $sp, 0x9c -/* 05C8A0 8005BCA0 4628A281 */ sub.d $f10, $f20, $f8 -/* 05C8A4 8005BCA4 460024A1 */ cvt.d.s $f18, $f4 -/* 05C8A8 8005BCA8 46325200 */ add.d $f8, $f10, $f18 -/* 05C8AC 8005BCAC 462045A0 */ cvt.s.d $f22, $f8 -/* 05C8B0 8005BCB0 4600B0A1 */ cvt.d.s $f2, $f22 -/* 05C8B4 8005BCB4 4622A03E */ c.le.d $f20, $f2 -/* 05C8B8 8005BCB8 00000000 */ nop -/* 05C8BC 8005BCBC 45000004 */ bc1f .L8005BCD0 -/* 05C8C0 8005BCC0 00000000 */ nop -/* 05C8C4 8005BCC4 46341181 */ sub.d $f6, $f2, $f20 -/* 05C8C8 8005BCC8 24120001 */ li $s2, 1 -/* 05C8CC 8005BCCC 462035A0 */ cvt.s.d $f22, $f6 -.L8005BCD0: -/* 05C8D0 8005BCD0 4406B000 */ mfc1 $a2, $f22 -/* 05C8D4 8005BCD4 0C00898F */ jal cubic_spline_interpolation -/* 05C8D8 8005BCD8 02402825 */ move $a1, $s2 -/* 05C8DC 8005BCDC 4406B000 */ mfc1 $a2, $f22 -/* 05C8E0 8005BCE0 46000686 */ mov.s $f26, $f0 -/* 05C8E4 8005BCE4 27A400EC */ addiu $a0, $sp, 0xec -/* 05C8E8 8005BCE8 02402825 */ move $a1, $s2 -/* 05C8EC 8005BCEC 0C00898F */ jal cubic_spline_interpolation -/* 05C8F0 8005BCF0 27A70098 */ addiu $a3, $sp, 0x98 -/* 05C8F4 8005BCF4 4406B000 */ mfc1 $a2, $f22 -/* 05C8F8 8005BCF8 46000606 */ mov.s $f24, $f0 -/* 05C8FC 8005BCFC 27A400D8 */ addiu $a0, $sp, 0xd8 -/* 05C900 8005BD00 02402825 */ move $a1, $s2 -/* 05C904 8005BD04 0C00898F */ jal cubic_spline_interpolation -/* 05C908 8005BD08 27A70094 */ addiu $a3, $sp, 0x94 -/* 05C90C 8005BD0C C6240068 */ lwc1 $f4, 0x68($s1) -/* 05C910 8005BD10 C62A006C */ lwc1 $f10, 0x6c($s1) -/* 05C914 8005BD14 C6320070 */ lwc1 $f18, 0x70($s1) -/* 05C918 8005BD18 4604D681 */ sub.s $f26, $f26, $f4 -/* 05C91C 8005BD1C 460AC601 */ sub.s $f24, $f24, $f10 -/* 05C920 8005BD20 16000020 */ bnez $s0, .L8005BDA4 -/* 05C924 8005BD24 46120701 */ sub.s $f28, $f0, $f18 -/* 05C928 8005BD28 461AD202 */ mul.s $f8, $f26, $f26 -/* 05C92C 8005BD2C 00009025 */ move $s2, $zero -/* 05C930 8005BD30 4618C182 */ mul.s $f6, $f24, $f24 -/* 05C934 8005BD34 00000000 */ nop -/* 05C938 8005BD38 461CE282 */ mul.s $f10, $f28, $f28 -/* 05C93C 8005BD3C 46064100 */ add.s $f4, $f8, $f6 -/* 05C940 8005BD40 0C0326B4 */ jal sqrtf -/* 05C944 8005BD44 460A2300 */ add.s $f12, $f4, $f10 -/* 05C948 8005BD48 00000000 */ nop -/* 05C94C 8005BD4C 461E0303 */ div.s $f12, $f0, $f30 -/* 05C950 8005BD50 44809000 */ mtc1 $zero, $f18 -/* 05C954 8005BD54 C7A6008C */ lwc1 $f6, 0x8c($sp) -/* 05C958 8005BD58 3C01800E */ lui $at, %hi(D_800E69F0 + 4) # $at, 0x800e -/* 05C95C 8005BD5C 460C9032 */ c.eq.s $f18, $f12 -/* 05C960 8005BD60 00000000 */ nop -/* 05C964 8005BD64 45010007 */ bc1t .L8005BD84 -/* 05C968 8005BD68 00000000 */ nop -/* 05C96C 8005BD6C 460C3103 */ div.s $f4, $f6, $f12 -/* 05C970 8005BD70 C62800AC */ lwc1 $f8, 0xac($s1) -/* 05C974 8005BD74 00000000 */ nop -/* 05C978 8005BD78 46044282 */ mul.s $f10, $f8, $f4 -/* 05C97C 8005BD7C 10000009 */ b .L8005BDA4 -/* 05C980 8005BD80 E62A00AC */ swc1 $f10, 0xac($s1) -.L8005BD84: -/* 05C984 8005BD84 C63200AC */ lwc1 $f18, 0xac($s1) -/* 05C988 8005BD88 C42969F0 */ lwc1 $f9, %lo(D_800E69F0)($at) -/* 05C98C 8005BD8C C42869F4 */ lwc1 $f8, %lo(D_800E69F0 + 4)($at) -/* 05C990 8005BD90 460091A1 */ cvt.d.s $f6, $f18 -/* 05C994 8005BD94 46283100 */ add.d $f4, $f6, $f8 -/* 05C998 8005BD98 2410FFFF */ li $s0, -1 -/* 05C99C 8005BD9C 462022A0 */ cvt.s.d $f10, $f4 -/* 05C9A0 8005BDA0 E62A00AC */ swc1 $f10, 0xac($s1) -.L8005BDA4: -/* 05C9A4 8005BDA4 26100001 */ addiu $s0, $s0, 1 -/* 05C9A8 8005BDA8 2A010002 */ slti $at, $s0, 2 -/* 05C9AC 8005BDAC 1420FFB6 */ bnez $at, .L8005BC88 -/* 05C9B0 8005BDB0 00000000 */ nop -/* 05C9B4 8005BDB4 C6320068 */ lwc1 $f18, 0x68($s1) -/* 05C9B8 8005BDB8 C628006C */ lwc1 $f8, 0x6c($s1) -/* 05C9BC 8005BDBC C62A0070 */ lwc1 $f10, 0x70($s1) -/* 05C9C0 8005BDC0 461A9180 */ add.s $f6, $f18, $f26 -/* 05C9C4 8005BDC4 46184100 */ add.s $f4, $f8, $f24 -/* 05C9C8 8005BDC8 E6260068 */ swc1 $f6, 0x68($s1) -/* 05C9CC 8005BDCC 461C5480 */ add.s $f18, $f10, $f28 -/* 05C9D0 8005BDD0 E624006C */ swc1 $f4, 0x6c($s1) -/* 05C9D4 8005BDD4 E6320070 */ swc1 $f18, 0x70($s1) -/* 05C9D8 8005BDD8 C668000C */ lwc1 $f8, 0xc($s3) -/* 05C9DC 8005BDDC C6260068 */ lwc1 $f6, 0x68($s1) -/* 05C9E0 8005BDE0 C6320070 */ lwc1 $f18, 0x70($s1) -/* 05C9E4 8005BDE4 46083681 */ sub.s $f26, $f6, $f8 -/* 05C9E8 8005BDE8 C6660014 */ lwc1 $f6, 0x14($s3) -/* 05C9EC 8005BDEC 461AD202 */ mul.s $f8, $f26, $f26 -/* 05C9F0 8005BDF0 C66A0010 */ lwc1 $f10, 0x10($s3) -/* 05C9F4 8005BDF4 C624006C */ lwc1 $f4, 0x6c($s1) -/* 05C9F8 8005BDF8 46069701 */ sub.s $f28, $f18, $f6 -/* 05C9FC 8005BDFC 460A2601 */ sub.s $f24, $f4, $f10 -/* 05CA00 8005BE00 461CE102 */ mul.s $f4, $f28, $f28 -/* 05CA04 8005BE04 4600B0A1 */ cvt.d.s $f2, $f22 -/* 05CA08 8005BE08 E7A20064 */ swc1 $f2, 0x64($sp) -/* 05CA0C 8005BE0C E7A30060 */ swc1 $f3, 0x60($sp) -/* 05CA10 8005BE10 0C0326B4 */ jal sqrtf -/* 05CA14 8005BE14 46044300 */ add.s $f12, $f8, $f4 -/* 05CA18 8005BE18 00000000 */ nop -/* 05CA1C 8005BE1C 461E0303 */ div.s $f12, $f0, $f30 -/* 05CA20 8005BE20 3C01800E */ lui $at, %hi(D_800E69F8 + 4) # $at, 0x800e -/* 05CA24 8005BE24 C43169F8 */ lwc1 $f17, %lo(D_800E69F8)($at) -/* 05CA28 8005BE28 C43069FC */ lwc1 $f16, %lo(D_800E69F8 + 4)($at) -/* 05CA2C 8005BE2C C7A30060 */ lwc1 $f3, 0x60($sp) -/* 05CA30 8005BE30 C7A20064 */ lwc1 $f2, 0x64($sp) -/* 05CA34 8005BE34 00000000 */ nop -/* 05CA38 8005BE38 4622A481 */ sub.d $f18, $f20, $f2 -/* 05CA3C 8005BE3C 460063A1 */ cvt.d.s $f14, $f12 -/* 05CA40 8005BE40 462E803C */ c.lt.d $f16, $f14 -/* 05CA44 8005BE44 E7AC0090 */ swc1 $f12, 0x90($sp) -/* 05CA48 8005BE48 45000008 */ bc1f .L8005BE6C -/* 05CA4C 8005BE4C 462091A0 */ cvt.s.d $f6, $f18 -/* 05CA50 8005BE50 00000000 */ nop -/* 05CA54 8005BE54 462E8283 */ div.d $f10, $f16, $f14 -/* 05CA58 8005BE58 46205020 */ cvt.s.d $f0, $f10 -/* 05CA5C 8005BE5C 4600D682 */ mul.s $f26, $f26, $f0 -/* 05CA60 8005BE60 00000000 */ nop -/* 05CA64 8005BE64 4600E702 */ mul.s $f28, $f28, $f0 -/* 05CA68 8005BE68 00000000 */ nop -.L8005BE6C: -/* 05CA6C 8005BE6C 12400024 */ beqz $s2, .L8005BF00 -/* 05CA70 8005BE70 E62600A8 */ swc1 $f6, 0xa8($s1) -/* 05CA74 8005BE74 822C0192 */ lb $t4, 0x192($s1) -/* 05CA78 8005BE78 00000000 */ nop -/* 05CA7C 8005BE7C 258D0001 */ addiu $t5, $t4, 1 -/* 05CA80 8005BE80 A22D0192 */ sb $t5, 0x192($s1) -/* 05CA84 8005BE84 8FAF011C */ lw $t7, 0x11c($sp) -/* 05CA88 8005BE88 822E0192 */ lb $t6, 0x192($s1) -/* 05CA8C 8005BE8C 00000000 */ nop -/* 05CA90 8005BE90 01CF082A */ slt $at, $t6, $t7 -/* 05CA94 8005BE94 1420000C */ bnez $at, .L8005BEC8 -/* 05CA98 8005BE98 8FB90080 */ lw $t9, 0x80($sp) -/* 05CA9C 8005BE9C 86380190 */ lh $t8, 0x190($s1) -/* 05CAA0 8005BEA0 A2200192 */ sb $zero, 0x192($s1) -/* 05CAA4 8005BEA4 1B000008 */ blez $t8, .L8005BEC8 -/* 05CAA8 8005BEA8 8FB90080 */ lw $t9, 0x80($sp) -/* 05CAAC 8005BEAC 82220193 */ lb $v0, 0x193($s1) -/* 05CAB0 8005BEB0 00000000 */ nop -/* 05CAB4 8005BEB4 28410078 */ slti $at, $v0, 0x78 -/* 05CAB8 8005BEB8 10200002 */ beqz $at, .L8005BEC4 -/* 05CABC 8005BEBC 244A0001 */ addiu $t2, $v0, 1 -/* 05CAC0 8005BEC0 A22A0193 */ sb $t2, 0x193($s1) -.L8005BEC4: -/* 05CAC4 8005BEC4 8FB90080 */ lw $t9, 0x80($sp) -.L8005BEC8: -/* 05CAC8 8005BEC8 8FAD011C */ lw $t5, 0x11c($sp) -/* 05CACC 8005BECC 832B004B */ lb $t3, 0x4b($t9) -/* 05CAD0 8005BED0 86220190 */ lh $v0, 0x190($s1) -/* 05CAD4 8005BED4 256C0003 */ addiu $t4, $t3, 3 -/* 05CAD8 8005BED8 018D0019 */ multu $t4, $t5 -/* 05CADC 8005BEDC 24182710 */ li $t8, 10000 -/* 05CAE0 8005BEE0 244F0001 */ addiu $t7, $v0, 1 -/* 05CAE4 8005BEE4 00007012 */ mflo $t6 -/* 05CAE8 8005BEE8 004E082A */ slt $at, $v0, $t6 -/* 05CAEC 8005BEEC 10200002 */ beqz $at, .L8005BEF8 -/* 05CAF0 8005BEF0 00000000 */ nop -/* 05CAF4 8005BEF4 A62F0190 */ sh $t7, 0x190($s1) -.L8005BEF8: -/* 05CAF8 8005BEF8 10000011 */ b .L8005BF40 -/* 05CAFC 8005BEFC A63801A8 */ sh $t8, 0x1a8($s1) -.L8005BF00: -/* 05CB00 8005BF00 3C0142C8 */ li $at, 0x42C80000 # 100.000000 -/* 05CB04 8005BF04 44812000 */ mtc1 $at, $f4 -/* 05CB08 8005BF08 C62800A8 */ lwc1 $f8, 0xa8($s1) -/* 05CB0C 8005BF0C 00000000 */ nop -/* 05CB10 8005BF10 46044282 */ mul.s $f10, $f8, $f4 -/* 05CB14 8005BF14 444AF800 */ cfc1 $t2, $31 -/* 05CB18 8005BF18 00000000 */ nop -/* 05CB1C 8005BF1C 35410003 */ ori $at, $t2, 3 -/* 05CB20 8005BF20 38210002 */ xori $at, $at, 2 -/* 05CB24 8005BF24 44C1F800 */ ctc1 $at, $31 -/* 05CB28 8005BF28 00000000 */ nop -/* 05CB2C 8005BF2C 460054A4 */ cvt.w.s $f18, $f10 -/* 05CB30 8005BF30 44199000 */ mfc1 $t9, $f18 -/* 05CB34 8005BF34 44CAF800 */ ctc1 $t2, $31 -/* 05CB38 8005BF38 A63901A8 */ sh $t9, 0x1a8($s1) -/* 05CB3C 8005BF3C 00000000 */ nop -.L8005BF40: -/* 05CB40 8005BF40 822201D3 */ lb $v0, 0x1d3($s1) -/* 05CB44 8005BF44 8FAB0130 */ lw $t3, 0x130($sp) -/* 05CB48 8005BF48 18400003 */ blez $v0, .L8005BF58 -/* 05CB4C 8005BF4C 004B6023 */ subu $t4, $v0, $t3 -/* 05CB50 8005BF50 10000002 */ b .L8005BF5C -/* 05CB54 8005BF54 A22C01D3 */ sb $t4, 0x1d3($s1) -.L8005BF58: -/* 05CB58 8005BF58 A22001D3 */ sb $zero, 0x1d3($s1) -.L8005BF5C: -/* 05CB5C 8005BF5C C7A600C0 */ lwc1 $f6, 0xc0($sp) -/* 05CB60 8005BF60 C7A800BC */ lwc1 $f8, 0xbc($sp) -/* 05CB64 8005BF64 00000000 */ nop -/* 05CB68 8005BF68 46083101 */ sub.s $f4, $f6, $f8 -/* 05CB6C 8005BF6C 46162282 */ mul.s $f10, $f4, $f22 -/* 05CB70 8005BF70 46085480 */ add.s $f18, $f10, $f8 -/* 05CB74 8005BF74 444DF800 */ cfc1 $t5, $31 -/* 05CB78 8005BF78 00000000 */ nop -/* 05CB7C 8005BF7C 35A10003 */ ori $at, $t5, 3 -/* 05CB80 8005BF80 38210002 */ xori $at, $at, 2 -/* 05CB84 8005BF84 44C1F800 */ ctc1 $at, $31 -/* 05CB88 8005BF88 00000000 */ nop -/* 05CB8C 8005BF8C 460091A4 */ cvt.w.s $f6, $f18 -/* 05CB90 8005BF90 440E3000 */ mfc1 $t6, $f6 -/* 05CB94 8005BF94 44CDF800 */ ctc1 $t5, $31 -/* 05CB98 8005BF98 A62E01BA */ sh $t6, 0x1ba($s1) -/* 05CB9C 8005BF9C C7AA00A8 */ lwc1 $f10, 0xa8($sp) -/* 05CBA0 8005BFA0 C7A400AC */ lwc1 $f4, 0xac($sp) -/* 05CBA4 8005BFA4 00000000 */ nop -/* 05CBA8 8005BFA8 460A2201 */ sub.s $f8, $f4, $f10 -/* 05CBAC 8005BFAC 46164482 */ mul.s $f18, $f8, $f22 -/* 05CBB0 8005BFB0 460A9180 */ add.s $f6, $f18, $f10 -/* 05CBB4 8005BFB4 444FF800 */ cfc1 $t7, $31 -/* 05CBB8 8005BFB8 00000000 */ nop -/* 05CBBC 8005BFBC 35E10003 */ ori $at, $t7, 3 -/* 05CBC0 8005BFC0 38210002 */ xori $at, $at, 2 -/* 05CBC4 8005BFC4 44C1F800 */ ctc1 $at, $31 -/* 05CBC8 8005BFC8 00000000 */ nop -/* 05CBCC 8005BFCC 46003124 */ cvt.w.s $f4, $f6 -/* 05CBD0 8005BFD0 44182000 */ mfc1 $t8, $f4 -/* 05CBD4 8005BFD4 44CFF800 */ ctc1 $t7, $31 -/* 05CBD8 8005BFD8 A63801BC */ sh $t8, 0x1bc($s1) -/* 05CBDC 8005BFDC C7A8009C */ lwc1 $f8, 0x9c($sp) -/* 05CBE0 8005BFE0 C7AA0094 */ lwc1 $f10, 0x94($sp) -/* 05CBE4 8005BFE4 46084482 */ mul.s $f18, $f8, $f8 -/* 05CBE8 8005BFE8 00000000 */ nop -/* 05CBEC 8005BFEC 460A5182 */ mul.s $f6, $f10, $f10 -/* 05CBF0 8005BFF0 0C0326B4 */ jal sqrtf -/* 05CBF4 8005BFF4 46069300 */ add.s $f12, $f18, $f6 -/* 05CBF8 8005BFF8 44802000 */ mtc1 $zero, $f4 -/* 05CBFC 8005BFFC C7AC009C */ lwc1 $f12, 0x9c($sp) -/* 05CC00 8005C000 46040032 */ c.eq.s $f0, $f4 -/* 05CC04 8005C004 C7AE0094 */ lwc1 $f14, 0x94($sp) -/* 05CC08 8005C008 45010015 */ bc1t .L8005C060 -/* 05CC0C 8005C00C 00000000 */ nop -/* 05CC10 8005C010 C7A80098 */ lwc1 $f8, 0x98($sp) -/* 05CC14 8005C014 46006303 */ div.s $f12, $f12, $f0 -/* 05CC18 8005C018 00000000 */ nop -/* 05CC1C 8005C01C 46007383 */ div.s $f14, $f14, $f0 -/* 05CC20 8005C020 E7AC009C */ swc1 $f12, 0x9c($sp) -/* 05CC24 8005C024 46004283 */ div.s $f10, $f8, $f0 -/* 05CC28 8005C028 E7AE0094 */ swc1 $f14, 0x94($sp) -/* 05CC2C 8005C02C 0C01C1D4 */ jal arctan2_f -/* 05CC30 8005C030 E7AA0098 */ swc1 $f10, 0x98($sp) -/* 05CC34 8005C034 24018000 */ li $at, -32768 -/* 05CC38 8005C038 00415021 */ addu $t2, $v0, $at -/* 05CC3C 8005C03C A62A01A0 */ sh $t2, 0x1a0($s1) -/* 05CC40 8005C040 863901A0 */ lh $t9, 0x1a0($s1) -/* 05CC44 8005C044 3C013F80 */ li $at, 0x3F800000 # 1.000000 -/* 05CC48 8005C048 A6790000 */ sh $t9, ($s3) -/* 05CC4C 8005C04C C7AC0098 */ lwc1 $f12, 0x98($sp) -/* 05CC50 8005C050 44817000 */ mtc1 $at, $f14 -/* 05CC54 8005C054 0C01C1D4 */ jal arctan2_f -/* 05CC58 8005C058 00000000 */ nop -/* 05CC5C 8005C05C A6620002 */ sh $v0, 2($s3) -.L8005C060: -/* 05CC60 8005C060 862B01BE */ lh $t3, 0x1be($s1) -/* 05CC64 8005C064 862C01C0 */ lh $t4, 0x1c0($s1) -/* 05CC68 8005C068 862D01A0 */ lh $t5, 0x1a0($s1) -/* 05CC6C 8005C06C A62B01C2 */ sh $t3, 0x1c2($s1) -/* 05CC70 8005C070 A62C01C4 */ sh $t4, 0x1c4($s1) -/* 05CC74 8005C074 A62D01BE */ sh $t5, 0x1be($s1) -/* 05CC78 8005C078 866E0002 */ lh $t6, 2($s3) -/* 05CC7C 8005C07C 4405D000 */ mfc1 $a1, $f26 -/* 05CC80 8005C080 4406C000 */ mfc1 $a2, $f24 -/* 05CC84 8005C084 4407E000 */ mfc1 $a3, $f28 -/* 05CC88 8005C088 02602025 */ move $a0, $s3 -/* 05CC8C 8005C08C 0C00455C */ jal move_object -/* 05CC90 8005C090 A62E01C0 */ sh $t6, 0x1c0($s1) -/* 05CC94 8005C094 1040000A */ beqz $v0, .L8005C0C0 -/* 05CC98 8005C098 3C014034 */ li $at, 0x40340000 # 2.812500 -/* 05CC9C 8005C09C C672000C */ lwc1 $f18, 0xc($s3) -/* 05CCA0 8005C0A0 C6640010 */ lwc1 $f4, 0x10($s3) -/* 05CCA4 8005C0A4 C66A0014 */ lwc1 $f10, 0x14($s3) -/* 05CCA8 8005C0A8 461A9180 */ add.s $f6, $f18, $f26 -/* 05CCAC 8005C0AC 46182200 */ add.s $f8, $f4, $f24 -/* 05CCB0 8005C0B0 E666000C */ swc1 $f6, 0xc($s3) -/* 05CCB4 8005C0B4 461C5480 */ add.s $f18, $f10, $f28 -/* 05CCB8 8005C0B8 E6680010 */ swc1 $f8, 0x10($s3) -/* 05CCBC 8005C0BC E6720014 */ swc1 $f18, 0x14($s3) -.L8005C0C0: -/* 05CCC0 8005C0C0 C7A60090 */ lwc1 $f6, 0x90($sp) -/* 05CCC4 8005C0C4 44814800 */ mtc1 $at, $f9 -/* 05CCC8 8005C0C8 44804000 */ mtc1 $zero, $f8 -/* 05CCCC 8005C0CC 46003121 */ cvt.d.s $f4, $f6 -/* 05CCD0 8005C0D0 4628203C */ c.lt.d $f4, $f8 -/* 05CCD4 8005C0D4 02602025 */ move $a0, $s3 -/* 05CCD8 8005C0D8 45000009 */ bc1f .L8005C100 -/* 05CCDC 8005C0DC 00000000 */ nop -/* 05CCE0 8005C0E0 461ED283 */ div.s $f10, $f26, $f30 -/* 05CCE4 8005C0E4 3C01BF80 */ li $at, 0xBF800000 # -1.000000 -/* 05CCE8 8005C0E8 44819000 */ mtc1 $at, $f18 -/* 05CCEC 8005C0EC 00000000 */ nop -/* 05CCF0 8005C0F0 E6720020 */ swc1 $f18, 0x20($s3) -/* 05CCF4 8005C0F4 461EE183 */ div.s $f6, $f28, $f30 -/* 05CCF8 8005C0F8 E66A001C */ swc1 $f10, 0x1c($s3) -/* 05CCFC 8005C0FC E6660024 */ swc1 $f6, 0x24($s3) -.L8005C100: -/* 05CD00 8005C100 8FA60130 */ lw $a2, 0x130($sp) -/* 05CD04 8005C104 0C010B48 */ jal func_80042D20 -/* 05CD08 8005C108 02202825 */ move $a1, $s1 -/* 05CD0C 8005C10C 8FA60130 */ lw $a2, 0x130($sp) -/* 05CD10 8005C110 02602025 */ move $a0, $s3 -/* 05CD14 8005C114 0C0157B0 */ jal handle_racer_items -/* 05CD18 8005C118 02202825 */ move $a1, $s1 -/* 05CD1C 8005C11C A22001E5 */ sb $zero, 0x1e5($s1) -/* 05CD20 8005C120 C664000C */ lwc1 $f4, 0xc($s3) -/* 05CD24 8005C124 8E6F004C */ lw $t7, 0x4c($s3) -/* 05CD28 8005C128 44809000 */ mtc1 $zero, $f18 -/* 05CD2C 8005C12C E5E40004 */ swc1 $f4, 4($t7) -/* 05CD30 8005C130 C6680010 */ lwc1 $f8, 0x10($s3) -/* 05CD34 8005C134 8E78004C */ lw $t8, 0x4c($s3) -/* 05CD38 8005C138 44803000 */ mtc1 $zero, $f6 -/* 05CD3C 8005C13C E7080008 */ swc1 $f8, 8($t8) -/* 05CD40 8005C140 C66A0014 */ lwc1 $f10, 0x14($s3) -/* 05CD44 8005C144 8E6A004C */ lw $t2, 0x4c($s3) -/* 05CD48 8005C148 44802000 */ mtc1 $zero, $f4 -/* 05CD4C 8005C14C E54A000C */ swc1 $f10, 0xc($t2) -/* 05CD50 8005C150 44804000 */ mtc1 $zero, $f8 -/* 05CD54 8005C154 A22001E6 */ sb $zero, 0x1e6($s1) -/* 05CD58 8005C158 A62001A2 */ sh $zero, 0x1a2($s1) -/* 05CD5C 8005C15C A62001A6 */ sh $zero, 0x1a6($s1) -/* 05CD60 8005C160 A22001D2 */ sb $zero, 0x1d2($s1) -/* 05CD64 8005C164 E6320078 */ swc1 $f18, 0x78($s1) -/* 05CD68 8005C168 E626007C */ swc1 $f6, 0x7c($s1) -/* 05CD6C 8005C16C E6240080 */ swc1 $f4, 0x80($s1) -/* 05CD70 8005C170 C66A000C */ lwc1 $f10, 0xc($s3) -/* 05CD74 8005C174 E6680020 */ swc1 $f8, 0x20($s3) -/* 05CD78 8005C178 E62A00D8 */ swc1 $f10, 0xd8($s1) -/* 05CD7C 8005C17C C6720010 */ lwc1 $f18, 0x10($s3) -/* 05CD80 8005C180 02602025 */ move $a0, $s3 -/* 05CD84 8005C184 E63200DC */ swc1 $f18, 0xdc($s1) -/* 05CD88 8005C188 C6660014 */ lwc1 $f6, 0x14($s3) -/* 05CD8C 8005C18C 00000000 */ nop -/* 05CD90 8005C190 E62600E0 */ swc1 $f6, 0xe0($s1) -/* 05CD94 8005C194 C664000C */ lwc1 $f4, 0xc($s3) -/* 05CD98 8005C198 00000000 */ nop -/* 05CD9C 8005C19C E62400E4 */ swc1 $f4, 0xe4($s1) -/* 05CDA0 8005C1A0 C6680010 */ lwc1 $f8, 0x10($s3) -/* 05CDA4 8005C1A4 00000000 */ nop -/* 05CDA8 8005C1A8 E62800E8 */ swc1 $f8, 0xe8($s1) -/* 05CDAC 8005C1AC C66A0014 */ lwc1 $f10, 0x14($s3) -/* 05CDB0 8005C1B0 00000000 */ nop -/* 05CDB4 8005C1B4 E62A00EC */ swc1 $f10, 0xec($s1) -/* 05CDB8 8005C1B8 C672000C */ lwc1 $f18, 0xc($s3) -/* 05CDBC 8005C1BC 00000000 */ nop -/* 05CDC0 8005C1C0 E63200F0 */ swc1 $f18, 0xf0($s1) -/* 05CDC4 8005C1C4 C6660010 */ lwc1 $f6, 0x10($s3) -/* 05CDC8 8005C1C8 00000000 */ nop -/* 05CDCC 8005C1CC E62600F4 */ swc1 $f6, 0xf4($s1) -/* 05CDD0 8005C1D0 C6640014 */ lwc1 $f4, 0x14($s3) -/* 05CDD4 8005C1D4 00000000 */ nop -/* 05CDD8 8005C1D8 E62400F8 */ swc1 $f4, 0xf8($s1) -/* 05CDDC 8005C1DC C668000C */ lwc1 $f8, 0xc($s3) -/* 05CDE0 8005C1E0 00000000 */ nop -/* 05CDE4 8005C1E4 E62800FC */ swc1 $f8, 0xfc($s1) -/* 05CDE8 8005C1E8 C66A0010 */ lwc1 $f10, 0x10($s3) -/* 05CDEC 8005C1EC 00000000 */ nop -/* 05CDF0 8005C1F0 E62A0100 */ swc1 $f10, 0x100($s1) -/* 05CDF4 8005C1F4 C6720014 */ lwc1 $f18, 0x14($s3) -/* 05CDF8 8005C1F8 00000000 */ nop -/* 05CDFC 8005C1FC E6320104 */ swc1 $f18, 0x104($s1) -/* 05CE00 8005C200 AE600074 */ sw $zero, 0x74($s3) -/* 05CE04 8005C204 8FA50130 */ lw $a1, 0x130($sp) -/* 05CE08 8005C208 0C02BDC5 */ jal func_800AF714 -/* 05CE0C 8005C20C 00000000 */ nop -.L8005C210: -/* 05CE10 8005C210 8FBF0054 */ lw $ra, 0x54($sp) -/* 05CE14 8005C214 C7B50010 */ lwc1 $f21, 0x10($sp) -/* 05CE18 8005C218 C7B40014 */ lwc1 $f20, 0x14($sp) -/* 05CE1C 8005C21C C7B70018 */ lwc1 $f23, 0x18($sp) -/* 05CE20 8005C220 C7B6001C */ lwc1 $f22, 0x1c($sp) -/* 05CE24 8005C224 C7B90020 */ lwc1 $f25, 0x20($sp) -/* 05CE28 8005C228 C7B80024 */ lwc1 $f24, 0x24($sp) -/* 05CE2C 8005C22C C7BB0028 */ lwc1 $f27, 0x28($sp) -/* 05CE30 8005C230 C7BA002C */ lwc1 $f26, 0x2c($sp) -/* 05CE34 8005C234 C7BD0030 */ lwc1 $f29, 0x30($sp) -/* 05CE38 8005C238 C7BC0034 */ lwc1 $f28, 0x34($sp) -/* 05CE3C 8005C23C C7BF0038 */ lwc1 $f31, 0x38($sp) -/* 05CE40 8005C240 C7BE003C */ lwc1 $f30, 0x3c($sp) -/* 05CE44 8005C244 8FB00044 */ lw $s0, 0x44($sp) -/* 05CE48 8005C248 8FB10048 */ lw $s1, 0x48($sp) -/* 05CE4C 8005C24C 8FB2004C */ lw $s2, 0x4c($sp) -/* 05CE50 8005C250 8FB30050 */ lw $s3, 0x50($sp) -/* 05CE54 8005C254 03E00008 */ jr $ra -/* 05CE58 8005C258 27BD0128 */ addiu $sp, $sp, 0x128 - diff --git a/src/racer.c b/src/racer.c index a6a6ef18..f4399800 100644 --- a/src/racer.c +++ b/src/racer.c @@ -6720,252 +6720,242 @@ void update_AI_racer(Object *obj, Object_Racer *racer, s32 updateRate, f32 updat set_racer_tail_lights(racer); } -#ifdef NON_EQUIVALENT -// WIP void func_8005B818(Object *obj, Object_Racer *racer, s32 updateRate, f32 updateRateF) { - s32 sp11C; - f32 sp100; - f32 spEC; - f32 spC0; // s32? - f32 spD8; - f32 spBC; // s32? - f32 spB8; - f32 spAC; // s32? - f32 spA8; // s32? - f32 spA4; // struct? + f32 temp_f0; + s32 checkpointIdx; + s32 checkpointCount; + CheckpointNode *checkpoint; + UNUSED f32 pad0; + f32 var_f28; + f32 checkpointX[4]; + s32 j; + f32 checkpointY[4]; + f32 var_f12; + f32 checkpointZ[4]; + s32 checkpointSplineIdx; + f32 checkpointDistance; + UNUSED f32 pad1; + UNUSED f32 pad2; + f32 spB8[4]; + f32 var_f26; + f32 spA4[4]; + UNUSED f32 pad3; f32 sp9C; f32 sp98; f32 sp94; - f32 sp8C; // What sets this? - LevelHeader *levelHeader; // sp80 - f32 *sp70; - f32 *var_t0; // struct? - f32 *var_a2; - f32 *var_a3; - f32 *var_t1; - f32 *var_v1; - f32 temp_f0_4; - f32 temp_f0_5; - f32 temp_f12; - f32 temp_f12_2; - f32 temp_f24; - f32 temp_f24_3; - f32 temp_f26; - f32 temp_f28; - f32 var_f12; - f32 var_f12_2; - f32 var_f22; - f32 var_f26; - f32 var_f28; - s16 temp_v0_4; - s32 var_a0; - s32 var_s0; - s32 var_s2; - s32 var_v0; - s8 temp_v0_3; - CheckpointNode *checkpoint; + f32 checkpointPositionOffset; + f32 tempRacerVelocity; + f32 var_f24; s32 i; + LevelHeader *levelHeader; - gCurrentRacerMiscAssetPtr = get_misc_asset(ASSET_MISC_RACERACCELERATION_UNKNOWN0); + gCurrentRacerMiscAssetPtr = (f32 *) get_misc_asset(ASSET_MISC_RACERACCELERATION_UNKNOWN0); levelHeader = get_current_level_header(); - sp11C = get_checkpoint_count(); - if (sp11C != 0) { - racer->unk1C9 = 0; - racer->zipperDirCorrection = 0; - racer->attackType = ATTACK_NONE; - racer->lateral_velocity = 0; - sp94 = 20.0f; - if (racer->unk124 < -20.0f) { - racer->unk124 = -20.0f; + checkpointCount = get_checkpoint_count(); + if (checkpointCount == 0) { + return; + } + + racer->unk1C9 = 0; + racer->zipperDirCorrection = 0; + racer->attackType = ATTACK_NONE; + racer->lateral_velocity = 0; + sp94 = 20.0f; + if (racer->unk124 < -sp94) { + racer->unk124 = -sp94; + } + + if (racer->unk124 > sp94) { + racer->unk124 = sp94; + } + + var_f12 = sqrtf(((racer->unk124 * 0.025) + 0.595) / 0.004); + if (racer->boostTimer != 0) { + var_f12 *= 1.3; + } + + if (racer->vehicleID == VEHICLE_HOVERCRAFT) { + i = (racer->unk1BE & 0xFFFF) - (racer->unk1C2 & 0xFFFF); + if (i >= 0x8001) { + i += 0xFFFF0001; } - if (racer->unk124 > sp94) { - racer->unk124 = sp94; + + if (i < -0x8000) { + i += 0xFFFF; } - var_f12 = sqrtf(((racer->unk124 * 0.025) + 0.595) / 0.004); - var_v1 = &sp100; - if (racer->boostTimer != 0) { - var_f12 *= 1.3; + + if (i < 0) { + i = -i; } - var_a2 = &spEC; - if (racer->vehicleID == VEHICLE_HOVERCRAFT) { - var_v0 = (racer->unk1BE & 0xFFFF) - (racer->unk1C2 & 0xFFFF); - if (var_v0 >= 0x8001) { - var_v0 += 0xFFFF0001; - } - if (var_v0 < -0x8000) { - var_v0 += 0xFFFF; - } - if (var_v0 < 0) { - var_v0 = -var_v0; - } - var_v0 -= 200; - if (var_v0 < 0) { - var_v0 = 0; - } - sp94 = (f32) var_v0 / 150.0; - var_f12_2 = var_f12 - sp94; - if (var_f12_2 < 2.0) { - var_f12_2 = 2.0f; - } - if (racer->velocity < -var_f12_2) { - racer->velocity = -var_f12_2; - } else { - racer->velocity += ((-var_f12_2 - racer->velocity) * 0.125); - } + + i -= 200; + if (i < 0) { + i = 0; + } + sp94 = (f32) i / 150.0; + var_f12 -= sp94; + if (var_f12 < 2.0) { + var_f12 = 2.0f; + } + + if (racer->velocity < -var_f12) { + racer->velocity = -var_f12; } else { - racer->velocity += ((-var_f12 - racer->velocity) * 0.25); + racer->velocity += ((-var_f12 - racer->velocity) * 0.125); } - var_a3 = &spD8; - var_a0 = racer->checkpoint - 2; - var_t1 = &spB8; - if (var_a0 < 0) { - var_a0 += sp11C; + } else { + racer->velocity += ((-var_f12 - racer->velocity) * 0.25); + } + + checkpointIdx = racer->checkpoint - 2; + if (checkpointIdx < 0) { + checkpointIdx += checkpointCount; + } + + if (checkpointIdx >= checkpointCount) { + checkpointIdx -= checkpointCount; + } + + for (i = 0; i < 5; i++) { + checkpoint = find_next_checkpoint_node(checkpointIdx, racer->unk1C8); + checkpointX[i] = checkpoint->x; + checkpointY[i] = checkpoint->y; + checkpointZ[i] = checkpoint->z; + spB8[i] = checkpoint->unk2E[racer->unk1CA]; + spA4[i] = checkpoint->unk32[racer->unk1CA]; + checkpointX[i] += ((checkpoint->scale * checkpoint->rotationZFrac * checkpoint->unk2E[racer->unk1CA])); + checkpointY[i] += ((checkpoint->scale * checkpoint->unk32[racer->unk1CA])); + checkpointZ[i] += ((checkpoint->scale * -checkpoint->rotationXFrac * checkpoint->unk2E[racer->unk1CA])); + checkpointIdx++; + if (checkpointIdx == checkpointCount) { + checkpointIdx = 0; } - var_t0 = &spA4; - if (var_a0 >= sp11C) { - var_a0 -= sp11C; + } + + tempRacerVelocity = racer->velocity; + if (tempRacerVelocity < 0.0f) { + tempRacerVelocity = -tempRacerVelocity; + } + checkpointSplineIdx = 0; + if (racer->unkAC == 0.0) { + racer->unkAC = 0.01f; + } + j = 0; + do { + checkpointDistance = (1.0 - racer->checkpoint_distance) + (racer->unkAC * updateRateF); + if (checkpointDistance >= 1.0) { + checkpointSplineIdx = 1; + checkpointDistance -= 1.0; } - for (i = 0; i < 1; i++) { - checkpoint = find_next_checkpoint_node(var_a0, racer->unk1C8); - var_v1[i] = checkpoint->x; - var_a2[i] = checkpoint->y; - var_a3[i] = checkpoint->z; - var_t1[i] = checkpoint->unk2E[racer->unk1CA]; - var_t0[i] = checkpoint->unk32[racer->unk1CA]; - var_v1[i] += ((checkpoint->scale * checkpoint->rotationZFrac * checkpoint->unk2E[racer->unk1CA])); - var_a2[i] += ((checkpoint->scale * checkpoint->unk32[racer->unk1CA])); - var_a3[i] += ((checkpoint->scale * -checkpoint->rotationXFrac * checkpoint->unk2E[racer->unk1CA])); - var_a0++; - if (var_a0 == sp11C) { - var_a0 = 0; + var_f24 = cubic_spline_interpolation(checkpointX, checkpointSplineIdx, checkpointDistance, &sp9C); + var_f26 = cubic_spline_interpolation(checkpointY, checkpointSplineIdx, checkpointDistance, &sp98); + var_f28 = cubic_spline_interpolation(checkpointZ, checkpointSplineIdx, checkpointDistance, &sp94); + var_f24 -= racer->unk68; + var_f26 -= racer->unk6C; + var_f28 -= racer->unk70; + if (j == 0) { + checkpointSplineIdx = 0; + checkpointPositionOffset = sqrtf((var_f24 * var_f24) + (var_f26 * var_f26) + (var_f28 * var_f28)) / updateRateF; + if (checkpointPositionOffset != 0.0f) { + racer->unkAC *= (tempRacerVelocity / checkpointPositionOffset); + } else { + j = -1; + racer->unkAC += 0.01; + } + } + j++; + } while (j < 2); + racer->unk68 += var_f24; + racer->unk6C += var_f26; + racer->unk70 += var_f28; + var_f24 = racer->unk68 - obj->segment.trans.x_position; + var_f26 = racer->unk6C - obj->segment.trans.y_position; + var_f28 = racer->unk70 - obj->segment.trans.z_position; + checkpointPositionOffset = sqrtf((var_f24 * var_f24) + (var_f28 * var_f28)) / updateRateF; + if (checkpointPositionOffset > 35.0) { + temp_f0 = (35.0 / checkpointPositionOffset); + var_f24 *= temp_f0; + var_f28 *= temp_f0; + } + racer->checkpoint_distance = (1.0 - checkpointDistance); + if (checkpointSplineIdx != 0) { + racer->checkpoint++; + if (racer->checkpoint >= checkpointCount) { + racer->checkpoint = 0; + if (racer->courseCheckpoint > 0) { + if (racer->lap < 120) { + racer->lap++; + } } } - if (racer->velocity < 0.0f) { - racer->velocity = -racer->velocity; + if (racer->courseCheckpoint < ((levelHeader->laps + 3) * checkpointCount)) { + racer->courseCheckpoint++; } - var_s2 = 0; - if (racer->unkAC == 0.0) { - racer->unkAC = 0.01f; - } - for (var_s0 = 0; var_s0 < 2; var_s0++) { - var_f22 = ((1.0 - racer->checkpoint_distance) + (racer->unkAC * updateRateF)); - if (var_f22 >= 1.0) { - var_s2 = 1; - var_f22--; - } - temp_f26 = cubic_spline_interpolation(&sp100, var_s2, var_f22, &sp9C); - temp_f24 = cubic_spline_interpolation(&spEC, var_s2, var_f22, &sp98); - temp_f28 = cubic_spline_interpolation(&spD8, var_s2, var_f22, &sp94); - temp_f26 -= racer->unk68; - temp_f24 -= racer->unk6C; - temp_f28 -= racer->unk70; - if (var_s0 == 0) { - var_s2 = 0; - temp_f12 = sqrtf((temp_f26 * temp_f26) + (temp_f24 * temp_f24) + (temp_f28 * temp_f28)) / updateRateF; - if (temp_f12 != 0) { - racer->unkAC *= (sp8C / temp_f12); - } else { - var_s0 = -1; - racer->unkAC += 0.01; - } - } - } - racer->unk68 += temp_f26; - racer->unk6C += temp_f24; - racer->unk70 += temp_f28; - var_f26 = racer->unk68 - obj->segment.trans.x_position; - var_f28 = racer->unk70 - obj->segment.trans.z_position; - temp_f24_3 = racer->unk6C - obj->segment.trans.y_position; - temp_f12_2 = sqrtf((var_f26 * var_f26) + (var_f28 * var_f28)) / updateRateF; - if (temp_f12_2 > 35.0) { - temp_f0_4 = (35.0 / temp_f12_2); - var_f26 *= temp_f0_4; - var_f28 *= temp_f0_4; - } - racer->checkpoint_distance = (1 - var_f22); - if (var_s2 != 0) { - racer->checkpoint += 1; - if (racer->checkpoint >= sp11C) { - racer->checkpoint = 0; - if (racer->courseCheckpoint > 0) { - temp_v0_3 = racer->lap; - if (temp_v0_3 < 0x78) { - racer->lap = temp_v0_3 + 1; - } - } - } - temp_v0_4 = racer->courseCheckpoint; - if (temp_v0_4 < ((levelHeader->laps + 3) * sp11C)) { - racer->courseCheckpoint = temp_v0_4 + 1; - } - racer->unk1A8 = 10000; - } else { - racer->unk1A8 = racer->checkpoint_distance * 100; - } - if (racer->boostTimer > 0) { - racer->boostTimer -= updateRate; - } else { - racer->boostTimer = 0; - } - racer->unk1BA = (((spC0 - spBC) * var_f22) + spBC); - racer->unk1BC = (((spAC - spA8) * var_f22) + spA8); - temp_f0_5 = sqrtf((sp9C * sp9C) + (sp94 * sp94)); - if (temp_f0_5 != 0) { - sp9C /= temp_f0_5; - sp94 /= temp_f0_5; - sp98 /= temp_f0_5; - racer->steerVisualRotation = arctan2_f(sp9C, sp94) - 0x8000; - obj->segment.trans.rotation.y_rotation = racer->steerVisualRotation; - obj->segment.trans.rotation.x_rotation = arctan2_f(sp98, 1.0f); - } - racer->unk1C2 = racer->unk1BE; - racer->unk1C4 = racer->unk1C0; - racer->unk1BE = racer->steerVisualRotation; - racer->unk1C0 = obj->segment.trans.rotation.x_rotation; - if (move_object(obj, var_f26, temp_f24_3, var_f28)) { - obj->segment.trans.x_position += var_f26; - obj->segment.trans.y_position += temp_f24_3; - obj->segment.trans.z_position += var_f28; - } - if (temp_f12_2 < 20.0) { - obj->segment.y_velocity = -1.0f; - obj->segment.x_velocity = var_f26 / updateRateF; - obj->segment.z_velocity = var_f28 / updateRateF; - } - func_80042D20(obj, racer, updateRate); - handle_racer_items(obj, racer, updateRate); - racer->waterTimer = 0; - obj->interactObj->x_position = obj->segment.trans.x_position; - obj->interactObj->y_position = obj->segment.trans.y_position; - obj->interactObj->z_position = obj->segment.trans.z_position; - racer->drift_direction = 0; - racer->y_rotation_vel = 0; - racer->z_rotation_vel = 0; - racer->unk1D2 = 0; - racer->carBobX = 0.0f; - racer->carBobY = 0.0f; - racer->carBobZ = 0.0f; - obj->segment.y_velocity = 0.0f; - racer->unkD8.x = obj->segment.trans.x_position; - racer->unkD8.y = obj->segment.trans.y_position; - racer->unkD8.z = obj->segment.trans.z_position; - racer->unkE4.x = obj->segment.trans.x_position; - racer->unkE4.y = obj->segment.trans.y_position; - racer->unkE4.z = obj->segment.trans.z_position; - racer->unkF0.x = obj->segment.trans.x_position; - racer->unkF0.y = obj->segment.trans.y_position; - racer->unkF0.z = obj->segment.trans.z_position; - racer->unkFC.x = obj->segment.trans.x_position; - racer->unkFC.y = obj->segment.trans.y_position; - racer->unkFC.z = obj->segment.trans.z_position; - obj->particleEmitFlags = OBJ_EMIT_OFF; - func_800AF714(obj, updateRate); + racer->unk1A8 = 10000; + } else { + racer->unk1A8 = racer->checkpoint_distance * 100; } + if (racer->boostTimer > 0) { + racer->boostTimer -= updateRate; + } else { + racer->boostTimer = 0; + } + racer->unk1BA = spB8[1] + ((spB8[2] - spB8[1]) * checkpointDistance); + racer->unk1BC = spA4[1] + ((spA4[2] - spA4[1]) * checkpointDistance); + temp_f0 = sqrtf((sp9C * sp9C) + (sp94 * sp94)); + if (temp_f0 != 0.0f) { + sp9C /= temp_f0; + sp98 /= temp_f0; + sp94 /= temp_f0; + racer->steerVisualRotation = arctan2_f(sp9C, sp94) - 0x8000; + obj->segment.trans.rotation.y_rotation = racer->steerVisualRotation; + obj->segment.trans.rotation.x_rotation = arctan2_f(sp98, 1.0f); + } + racer->unk1C2 = racer->unk1BE; + racer->unk1C4 = racer->unk1C0; + racer->unk1BE = racer->steerVisualRotation; + racer->unk1C0 = obj->segment.trans.rotation.x_rotation; + if (move_object(obj, var_f24, var_f26, var_f28)) { + obj->segment.trans.x_position += var_f24; + if (1) {} + obj->segment.trans.y_position += var_f26; + obj->segment.trans.z_position += var_f28; + } + if (checkpointPositionOffset < 20.0) { + obj->segment.x_velocity = var_f24 / updateRateF; + obj->segment.y_velocity = -1.0f; + obj->segment.z_velocity = var_f28 / updateRateF; + } + func_80042D20(obj, racer, updateRate); + handle_racer_items(obj, racer, updateRate); + racer->waterTimer = 0; + obj->interactObj->x_position = obj->segment.trans.x_position; + obj->interactObj->y_position = obj->segment.trans.y_position; + obj->interactObj->z_position = obj->segment.trans.z_position; + racer->drift_direction = 0; + racer->y_rotation_vel = 0; + racer->z_rotation_vel = 0; + racer->unk1D2 = 0; + racer->carBobX = 0.0f; + racer->carBobY = 0.0f; + racer->carBobZ = 0.0f; + obj->segment.y_velocity = 0.0f; + racer->unkD8.x = obj->segment.trans.x_position; + racer->unkD8.y = obj->segment.trans.y_position; + racer->unkD8.z = obj->segment.trans.z_position; + racer->unkE4.x = obj->segment.trans.x_position; + racer->unkE4.y = obj->segment.trans.y_position; + racer->unkE4.z = obj->segment.trans.z_position; + racer->unkF0.x = obj->segment.trans.x_position; + racer->unkF0.y = obj->segment.trans.y_position; + racer->unkF0.z = obj->segment.trans.z_position; + racer->unkFC.x = obj->segment.trans.x_position; + racer->unkFC.y = obj->segment.trans.y_position; + racer->unkFC.z = obj->segment.trans.z_position; + obj->particleEmitFlags = OBJ_EMIT_OFF; + func_800AF714(obj, updateRate); } -#else -GLOBAL_ASM("asm/non_matchings/racer/func_8005B818.s") -#endif #ifdef ANTI_TAMPER // This gets called if an anti-piracy checksum fails in allocate_object_model_pools.