diff --git a/asm/non_matchings/racer/func_80052388.s b/asm/non_matchings/racer/func_80052388.s deleted file mode 100644 index a52fc1d4..00000000 --- a/asm/non_matchings/racer/func_80052388.s +++ /dev/null @@ -1,110 +0,0 @@ -glabel func_80052388 -/* 052F88 80052388 27BDFFD8 */ addiu $sp, $sp, -0x28 -/* 052F8C 8005238C AFBF0014 */ sw $ra, 0x14($sp) -/* 052F90 80052390 AFA70034 */ sw $a3, 0x34($sp) -/* 052F94 80052394 C486000C */ lwc1 $f6, 0xc($a0) -/* 052F98 80052398 C4C4000C */ lwc1 $f4, 0xc($a2) -/* 052F9C 8005239C C48A0014 */ lwc1 $f10, 0x14($a0) -/* 052FA0 800523A0 46062301 */ sub.s $f12, $f4, $f6 -/* 052FA4 800523A4 C4C80014 */ lwc1 $f8, 0x14($a2) -/* 052FA8 800523A8 460C6402 */ mul.s $f16, $f12, $f12 -/* 052FAC 800523AC 460A4381 */ sub.s $f14, $f8, $f10 -/* 052FB0 800523B0 C7A60034 */ lwc1 $f6, 0x34($sp) -/* 052FB4 800523B4 00001825 */ move $v1, $zero -/* 052FB8 800523B8 460E7482 */ mul.s $f18, $f14, $f14 -/* 052FBC 800523BC 46128100 */ add.s $f4, $f16, $f18 -/* 052FC0 800523C0 4606203C */ c.lt.s $f4, $f6 -/* 052FC4 800523C4 00000000 */ nop -/* 052FC8 800523C8 4500004D */ bc1f .L80052500 -/* 052FCC 800523CC 8FBF0014 */ lw $ra, 0x14($sp) -/* 052FD0 800523D0 AFA40028 */ sw $a0, 0x28($sp) -/* 052FD4 800523D4 AFA5002C */ sw $a1, 0x2c($sp) -/* 052FD8 800523D8 AFA60030 */ sw $a2, 0x30($sp) -/* 052FDC 800523DC E7AC0020 */ swc1 $f12, 0x20($sp) -/* 052FE0 800523E0 0C01C1D4 */ jal func_80070750 -/* 052FE4 800523E4 E7AE001C */ swc1 $f14, 0x1c($sp) -/* 052FE8 800523E8 8FA40028 */ lw $a0, 0x28($sp) -/* 052FEC 800523EC 34018000 */ li $at, 32768 -/* 052FF0 800523F0 848E0000 */ lh $t6, ($a0) -/* 052FF4 800523F4 8FA5002C */ lw $a1, 0x2c($sp) -/* 052FF8 800523F8 31CFFFFF */ andi $t7, $t6, 0xffff -/* 052FFC 800523FC 004F1823 */ subu $v1, $v0, $t7 -/* 053000 80052400 00611821 */ addu $v1, $v1, $at -/* 053004 80052404 34018001 */ li $at, 32769 -/* 053008 80052408 8FA60030 */ lw $a2, 0x30($sp) -/* 05300C 8005240C C7AC0020 */ lwc1 $f12, 0x20($sp) -/* 053010 80052410 C7AE001C */ lwc1 $f14, 0x1c($sp) -/* 053014 80052414 0061082A */ slt $at, $v1, $at -/* 053018 80052418 14200003 */ bnez $at, .L80052428 -/* 05301C 8005241C 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 053020 80052420 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 053024 80052424 00611821 */ addu $v1, $v1, $at -.L80052428: -/* 053028 80052428 28618000 */ slti $at, $v1, -0x8000 -/* 05302C 8005242C 10200002 */ beqz $at, .L80052438 -/* 053030 80052430 3401FFFF */ li $at, 65535 -/* 053034 80052434 00611821 */ addu $v1, $v1, $at -.L80052438: -/* 053038 80052438 28613001 */ slti $at, $v1, 0x3001 -/* 05303C 8005243C 14200003 */ bnez $at, .L8005244C -/* 053040 80052440 2861D000 */ slti $at, $v1, -0x3000 -/* 053044 80052444 24033000 */ li $v1, 12288 -/* 053048 80052448 2861D000 */ slti $at, $v1, -0x3000 -.L8005244C: -/* 05304C 8005244C 10200002 */ beqz $at, .L80052458 -/* 053050 80052450 00000000 */ nop -/* 053054 80052454 2403D000 */ li $v1, -12288 -.L80052458: -/* 053058 80052458 80B801E7 */ lb $t8, 0x1e7($a1) -/* 05305C 8005245C A4A3016C */ sh $v1, 0x16c($a1) -/* 053060 80052460 3319003F */ andi $t9, $t8, 0x3f -/* 053064 80052464 2B21001F */ slti $at, $t9, 0x1f -/* 053068 80052468 10200002 */ beqz $at, .L80052474 -/* 05306C 8005246C 00000000 */ nop -/* 053070 80052470 A4A0016C */ sh $zero, 0x16c($a1) -.L80052474: -/* 053074 80052474 8CC50064 */ lw $a1, 0x64($a2) -/* 053078 80052478 AFA40028 */ sw $a0, 0x28($sp) -/* 05307C 8005247C 0C01C1D4 */ jal func_80070750 -/* 053080 80052480 AFA5002C */ sw $a1, 0x2c($sp) -/* 053084 80052484 8FA40028 */ lw $a0, 0x28($sp) -/* 053088 80052488 34018001 */ li $at, 32769 -/* 05308C 8005248C 84880000 */ lh $t0, ($a0) -/* 053090 80052490 8FA5002C */ lw $a1, 0x2c($sp) -/* 053094 80052494 3109FFFF */ andi $t1, $t0, 0xffff -/* 053098 80052498 00491823 */ subu $v1, $v0, $t1 -/* 05309C 8005249C 0061082A */ slt $at, $v1, $at -/* 0530A0 800524A0 14200003 */ bnez $at, .L800524B0 -/* 0530A4 800524A4 3C01FFFF */ lui $at, (0xFFFF0001 >> 16) # lui $at, 0xffff -/* 0530A8 800524A8 34210001 */ ori $at, (0xFFFF0001 & 0xFFFF) # ori $at, $at, 1 -/* 0530AC 800524AC 00611821 */ addu $v1, $v1, $at -.L800524B0: -/* 0530B0 800524B0 28618000 */ slti $at, $v1, -0x8000 -/* 0530B4 800524B4 10200002 */ beqz $at, .L800524C0 -/* 0530B8 800524B8 3401FFFF */ li $at, 65535 -/* 0530BC 800524BC 00611821 */ addu $v1, $v1, $at -.L800524C0: -/* 0530C0 800524C0 28613001 */ slti $at, $v1, 0x3001 -/* 0530C4 800524C4 14200003 */ bnez $at, .L800524D4 -/* 0530C8 800524C8 2861D000 */ slti $at, $v1, -0x3000 -/* 0530CC 800524CC 24033000 */ li $v1, 12288 -/* 0530D0 800524D0 2861D000 */ slti $at, $v1, -0x3000 -.L800524D4: -/* 0530D4 800524D4 10200002 */ beqz $at, .L800524E0 -/* 0530D8 800524D8 00000000 */ nop -/* 0530DC 800524DC 2403D000 */ li $v1, -12288 -.L800524E0: -/* 0530E0 800524E0 80AA01E7 */ lb $t2, 0x1e7($a1) -/* 0530E4 800524E4 A4A3016C */ sh $v1, 0x16c($a1) -/* 0530E8 800524E8 314B001F */ andi $t3, $t2, 0x1f -/* 0530EC 800524EC 2961000A */ slti $at, $t3, 0xa -/* 0530F0 800524F0 10200002 */ beqz $at, .L800524FC -/* 0530F4 800524F4 24030001 */ li $v1, 1 -/* 0530F8 800524F8 A4A0016C */ sh $zero, 0x16c($a1) -.L800524FC: -/* 0530FC 800524FC 8FBF0014 */ lw $ra, 0x14($sp) -.L80052500: -/* 053100 80052500 27BD0028 */ addiu $sp, $sp, 0x28 -/* 053104 80052504 03E00008 */ jr $ra -/* 053108 80052508 00601025 */ move $v0, $v1 - diff --git a/include/structs.h b/include/structs.h index 67834438..0c9d6018 100644 --- a/include/structs.h +++ b/include/structs.h @@ -413,7 +413,7 @@ typedef struct LevelModelSegment { /* 0x1E */ s16 numberOfTriangles; /* 0x20 */ s16 numberOfBatches; u8 pad22[0x09]; -/* 0x2B */ s8 unk2B; +/* 0x2B */ s8 unk2B; u8 pad2C[4]; /* 0x30 */ s16 unk30; /* 0x32 */ s16 unk32; @@ -454,7 +454,7 @@ typedef struct LevelModel { u8 pad1C[4]; /* 0x20 */ s32 unk20; //spriteIndex? u8 pad24[0x14]; -/* 0x38 */ u32 minimapColor; +/* 0x38 */ u32 minimapColor; u8 pad3C[0xC]; /* 0x48 */ s32 modelSize; } LevelModel; @@ -836,7 +836,9 @@ typedef struct Object_Racer { /* 0x162 */ s16 unk162; /* 0x164 */ s16 unk164; /* 0x166 */ s16 unk166; - /* 0x168 */ u8 pad168[0xA]; + /* 0x168 */ u8 pad168[0x4]; + /* 0x166 */ s16 unk16C; + /* 0x168 */ u8 pad16E[0x4]; /* 0x172 */ u8 balloon_type; /* 0x173 */ u8 balloon_quantity; /* 0x174 */ u8 balloon_level; @@ -877,7 +879,8 @@ typedef struct Object_Racer { /* 0x1E2 */ s8 unk1E2; /* 0x1E3 */ u8 pad1E3[0x3]; /* 0x1E6 */ s8 drift_direction; - /* 0x1E7 */ u8 pad1E7[0x6]; + /* 0x1E7 */ s8 unk1E7; + /* 0x1E8 */ u8 pad1E8[0x5]; /* 0x1ED */ s8 squish_timer; /* 0x1EE */ u8 pad1EE[0x1]; /* 0x1EF */ u8 boost_sound; diff --git a/src/racer.c b/src/racer.c index bda42913..6acca83f 100644 --- a/src/racer.c +++ b/src/racer.c @@ -576,7 +576,58 @@ void func_8005234C(unk8005234C *arg0) { } } -GLOBAL_ASM("asm/non_matchings/racer/func_80052388.s") +extern s16 func_80070750(f32 y, f32 x); + +s32 func_80052388(Object* obj1, Object_Racer* arg1, Object* obj2, f32 distance) { + s32 rotation; + f32 diffX; + f32 diffZ; + s32 ret = FALSE; + + diffX = obj2->segment.trans.x_position - obj1->segment.trans.x_position; + diffZ = obj2->segment.trans.z_position - obj1->segment.trans.z_position; + if ((diffX * diffX) + (diffZ * diffZ) < distance) { + rotation = (func_80070750(diffX, diffZ) - (obj1->segment.trans.y_rotation & 0xFFFF)) + 0x8000; + if (rotation > 0x8000) { + rotation += 0xFFFF0001; + } + if (rotation < -0x8000) { + rotation += 0xFFFF; + } + if (rotation > 0x3000) { + rotation = 0x3000; + } + if (rotation < -0x3000) { + rotation = -0x3000; + } + arg1->unk16C = rotation; + if ((arg1->unk1E7 & 0x3F) < 0x1F) { + arg1->unk16C = 0; + } + arg1 = (struct Object_Racer *) obj2->unk64; + rotation = func_80070750(diffX, diffZ) - (obj1->segment.trans.y_rotation & 0xFFFF); + if (rotation > 0x8000) { + rotation += 0xFFFF0001; + } + if (rotation < -0x8000) { + rotation += 0xFFFF; + } + if (rotation > 0x3000) { + rotation = 0x3000; + } + if (rotation < -0x3000) { + rotation = -0x3000; + } + arg1->unk16C = rotation; + if (ret) {} + ret = TRUE; + if ((arg1->unk1E7 & 0x1F) < 0xA) { + arg1->unk16C = 0; + } + } + return ret; +} + GLOBAL_ASM("asm/non_matchings/racer/func_8005250C.s") // action seems to be 1 when you're reversing, if you hit the horn, it's 4, and if you introduce yourself to a brick wall, it's 3 then 6.