summaryrefslogtreecommitdiff
path: root/src/code_80005FD0.c
diff options
context:
space:
mode:
authorMegaMech <MegaMech@users.noreply.github.com>2023-11-07 20:17:28 -0700
committerGitHub <noreply@github.com>2023-11-07 20:17:28 -0700
commitf75460cb8bb193f76ae2d99afa93e1ea0b26aa2c (patch)
treed6f3c84a36a48751c44606b6149a456cad97aa24 /src/code_80005FD0.c
parentb6abd829d20f8791714c0ae87ddf9e9199a2b758 (diff)
Matches in code_80005D0 (#487)
* Variety of matches
Diffstat (limited to 'src/code_80005FD0.c')
-rw-r--r--src/code_80005FD0.c1215
1 files changed, 487 insertions, 728 deletions
diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c
index ca3819cef..05f527102 100644
--- a/src/code_80005FD0.c
+++ b/src/code_80005FD0.c
@@ -374,6 +374,47 @@ char *D_800ECF3C = "4位の人終了\n";
char *D_800ECF4C = "OGA 表彰 move 終了\n";
char *D_800ECF60 = "OGAWA DEBUG DRAW\n";
+/* end of bss_Main.s imported. Commented out cause need everything prior too.
+ s16 *D_801645E0;
+ s16 D_801645E4_pad[3];
+
+ f32 D_801645E8[4];
+
+ f32 D_801645F8[4];
+
+ s32 D_80164608[4];
+
+ f32 D_80164618[4];
+
+ f32 D_80164628[4];
+
+ f32 D_80164638[4];
+
+ f32 D_80164648[4];
+ f32 D_80164658[4];
+
+ s16 gNearestWaypointByCameraId[4];
+
+ s16 D_80164670[4];
+ s16 D_80164678[4];
+ s16 D_80164680[4];
+ f32 D_80164688[4];
+ f32 D_80164698;
+ f32 D_8016469C;
+ f32 D_801646A0;
+
+ s32 D_801646A4_pad[7];
+
+ s16 D_801646C0[2];
+
+ s32 D_801646C8;
+
+ s16 D_801646CC;
+ //.skip 4
+
+ UnkStruct_46D0 D_801646D0[4];
+*/
+
s16 func_80005FD0(Vec3f arg0, Vec3f arg1) {
s16 temp_ret;
s16 phi_v1;
@@ -525,7 +566,7 @@ void set_places(void) {
f32 temp_f0;
s32 sp80[8];
s32 a_really_cool_variable_name;
- s32 stackPadding1;
+ UNUSED s32 pad;
s32 var_t4;
s32 playerId;
s32 temp_a0;
@@ -611,7 +652,7 @@ void set_places(void) {
void func_800070F4(void) {
f32 temp_f0;
- s32 stackPadding;
+ UNUSED s32 pad;
s32 sp50[8];
s32 temp_a0;
s32 temp_t2_2;
@@ -758,94 +799,89 @@ s32 func_80007BF8(u16 arg0, u16 arg1, u16 arg2, u16 arg3, u16 arg4) {
return var_v1;
}
-#ifdef MIPS_TO_C
-//generated by m2c commit bece1d6db17040749f77dbbd090363cc6fb926f9
-extern s16 D_801631E0;
-extern u16 D_80163344;
+#ifdef NON_MATCHING // Likely func equiv
+// https://decomp.me/scratch/Te4u1
+
+extern u16 D_80163344[];
extern s16 D_80163478;
-extern ? D_801634C0;
+extern s16 D_801634C0[];
void func_80007D04(s32 playerId, Player *player) {
- s32 sp1C;
- s16 *var_at;
s16 temp_t1;
s16 temp_t2;
- s16 temp_v1;
- s16 var_t5;
- s32 temp_v0;
- s32 temp_v1_2;
s32 var_v0;
-
- temp_v1 = D_80163478;
- temp_t1 = D_80164450[temp_v1];
+ temp_t1 = D_80164450[D_80163478];
temp_t2 = D_80164450[playerId];
+
if (gGPCurrentRaceRankByPlayerId[playerId] < 2) {
- if (((s16) (temp_t2 - temp_t1) >= 0x191) && ((s16)gGPCurrentRaceRankByPlayerId[temp_v1] >= 6)) {
+ s16 val1 = gGPCurrentRaceRankByPlayerId[D_80163478];
+ s16 val2 = temp_t2 - temp_t1;
+
+ if (val2 > 400 && val1 >= 6) {
player->effects &= ~0x200000;
player_speed(player);
- var_t5 = 4;
- var_at = &D_801634C0 + (playerId * 2);
- } else {
- switch (gCCSelection) { /* irregular */
- case CC_50:
- var_v0 = 0;
- if (playerId == D_80163344) {
- var_v0 = 0x14;
- }
- break;
- case CC_100:
- var_v0 = 8;
- if (playerId == D_80163344) {
- var_v0 = 0x18;
- }
- break;
- case CC_150:
- var_v0 = 0x12;
- if (playerId == D_80163344) {
- var_v0 = 0x24;
- }
- break;
- case CC_EXTRA:
- var_v0 = 8;
- if (playerId == D_80163344) {
- var_v0 = 0x18;
- }
- break;
- default:
- var_v0 = 0;
- break;
- }
- if (temp_t2 < temp_t1) {
- player->effects |= 0x200000;
- player_speed(player);
- *(&D_801634C0 + (playerId * 2)) = 1;
- } else {
- temp_v0 = playerId * 2;
- if (temp_t2 < (temp_t1 + var_v0 + 0x32)) {
- player->effects &= ~0x200000;
- player_speed(player);
- *(&D_801634C0 + (playerId * 2)) = 3;
- } else if (*(&D_801631E0 + temp_v0) == 0) {
- player->effects &= ~0x200000;
- sp1C = temp_v0;
- player_speed(player);
- *(&D_801634C0 + temp_v0) = 2;
- } else {
- player->effects &= ~0x200000;
- sp1C = temp_v0;
- func_80031F48(player, 1.0f);
- var_t5 = -1;
- var_at = &D_801634C0 + temp_v0;
- }
- }
+ D_801634C0[playerId] = 4;
+ return;
}
- *var_at = var_t5;
} else {
player->effects |= 0x200000;
player_speed(player);
- *(&D_801634C0 + (playerId * 2)) = 3;
+ D_801634C0[playerId] = 3;
+ return;
+ }
+
+ // Something wrong here. Maybe needs
+ // var_v0 = 0;
+ switch (gCCSelection) {
+ case 0:
+ var_v0 = 0;
+ if (playerId == D_80163344[0]) {
+ var_v0 = 0x14;
+ }
+ break;
+ case 1:
+ var_v0 = 8;
+ if (playerId == D_80163344[0]) {
+ var_v0 = 0x18;
+ }
+ break;
+ case 2:
+ var_v0 = 0x12;
+ if (playerId == D_80163344[0]) {
+ var_v0 = 0x24;
+ }
+ break;
+ case 3:
+ var_v0 = 8;
+ if (playerId == D_80163344[0]) {
+ var_v0 = 0x18;
+ }
+ break;
+ default:
+ var_v0 = 0;
+ break;
+ }
+
+ if (temp_t2 < temp_t1) {
+ player->effects |= 0x200000;
+ player_speed(player);
+ D_801634C0[playerId] = 1;
+
+ } else if (temp_t2 < (temp_t1 + var_v0 + 0x32)) {
+ player->effects &= ~0x200000;
+ player_speed(player);
+ D_801634C0[playerId] = 3;
+ } else if (D_801631E0[playerId] == 0) {
+ player->effects &= ~0x200000;
+ player_speed(player);
+ D_801634C0[playerId] = 2;
+ } else {
+ player->effects &= ~0x200000;
+ func_80031F48(player, 1.0f);
+ D_801634C0[playerId] = -1;
}
}
+
#else
GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80007D04.s")
#endif
@@ -1404,8 +1440,6 @@ void func_800090F0(s32 playerId, Player *player) {
}
}
-extern f32 D_8016344C;
-
/**
* Helps calculate time since player last touched finishline.
**/
@@ -2530,15 +2564,12 @@ void func_8000B95C(s32 playerId, u16 waypointIndex, s32 pathIndex) {
}
void func_8000BA14(u16 waypointIndex, f32 arg1, f32 arg2, s16 pathIndex) {
- s32 stackPadding0;
- s32 stackPadding1;
- s32 stackPadding2;
- s32 stackPadding3;
+ UNUSED s32 pad[4];
f32 waypointOneX;
f32 waypointOneZ;
f32 waypointTwoX;
f32 waypointTwoZ;
- s32 stackPadding4;
+ UNUSED s32 pad2;
f32 xdiff;
f32 zdiff;
f32 distance;
@@ -3164,16 +3195,10 @@ GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8000D438.s")
#ifdef NON_MATCHING
// Something about the handling of D_80162FA0 is really off, can't figure out what
s16 func_8000D6D0(Vec3f arg0, s16 *waypointIndex, f32 arg2, f32 arg3, s16 pathIndex, s16 arg5) {
- s32 stackPadding0;
- s32 stackPadding1;
- s32 stackPadding2;
- s32 stackPadding3;
+ UNUSED s32 pad[4];
s16 waypoint2;
s16 waypoint1;
- s32 stackPadding4;
- s32 stackPadding5;
- s32 stackPadding6;
- s32 stackPadding7;
+ UNUSED s32 pad2[4];
f32 distance;
f32 temp_f20;
f32 temp_f22;
@@ -3228,17 +3253,10 @@ GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8000D6D0.s")
#ifdef NON_MATCHING
// Something about the handling of D_80162FA0 is really off, can't figure out what
s16 func_8000D940(f32 *arg0, s16 *waypointIndex, f32 arg2, f32 arg3, s16 pathIndex) {
- s32 stackPadding0;
- s32 stackPadding1;
- s32 stackPadding2;
- s32 stackPadding3;
+ UNUSED s32 pad[4];
s16 waypoint2;
s16 waypoint1;
- s32 stackPadding4;
- s32 stackPadding5;
- s32 stackPadding6;
- s32 stackPadding7;
- s32 stackPadding8;
+ UNUSED s32 pad2[4];
f32 distance;
f32 temp_f20;
f32 temp_f22;
@@ -3252,7 +3270,7 @@ s16 func_8000D940(f32 *arg0, s16 *waypointIndex, f32 arg2, f32 arg3, s16 pathInd
f32 ydiff;
f32 zdiff;
Vec3f sp54;
- s32 stackPadding9;
+ UNUSED s32 pad3;
TrackWaypoint *path;
sp54[0] = arg0[0];
@@ -3873,18 +3891,13 @@ void func_8000EF20(void) {
}
void func_8000F0E0(void) {
- D_80164670[0] = 0;
- D_80164678[0] = 0;
- D_80164672 = 0;
- D_8016467A = 0;
- D_80164674 = 0;
- D_8016467C = 0;
- D_80164676 = 0;
- D_8016467E = 0;
+ s32 i;
+ for (i = 0; i < 4; i++) {
+ D_80164670[i] = 0;
+ D_80164678[i] = 0;
+ }
}
-extern u16 D_80163348[];
-
void func_8000F124(void) {
s32 var_a1;
s32 i, j;
@@ -3929,19 +3942,6 @@ void func_8000F2BC(TrackWaypoint *arg0, size_t size) {
bzero((void *) arg0, size * sizeof(TrackWaypoint));
}
-struct _struct_D_800DD9D0_0x10 {
- /* 0x00 */ u16 unk0;
- /* 0x02 */ u16 unk2;
- /* 0x04 */ u16 unk4;
- /* 0x06 */ u16 unk6;
- /* 0x08 */ u16 unk8;
- /* 0x0A */ char padA[6];
-}; // size 0x10
-extern uintptr_t *D_80163598;
-
-// An array of 21 items. The final element is for podium ceremony.
-extern struct _struct_D_800DD9D0_0x10 D_800DD9D0[];
-
// Appears to allocate memory for each course.
void func_8000F2DC(void) {
@@ -4016,51 +4016,6 @@ void func_8000F2DC(void) {
func_8000EEDC();
}
-extern s16 D_80162F10[];
-extern s16 D_80162F50[];
-extern s16 D_80162FF8[];
-extern s16 D_80163010[];
-extern f32 D_80163028[];
-extern s16 D_80163050[];
-extern f32 D_80163090[];
-extern u16 D_80163258[];
-extern u16 D_80163270[];
-extern s16 D_80163346[];
-extern s32 D_801630B8[];
-extern s16 D_801630E8[];
-extern s32 D_80163100[];
-extern s32 D_80163128[];
-extern s32 D_80163150[];
-extern f32 D_80163178[];
-extern f32 D_801631A0[];
-extern s32 D_801631CC;
-extern s16 D_801631F8[];
-extern f32 D_80163210[];
-extern s32 D_80163288[];
-extern u16 D_80163330[]; // static?
-extern u16 D_80163344[];
-extern u16 D_8016334C[];
-extern s16 D_80163350[];
-extern s32 D_80163378;
-extern s16 D_80163380[];
-extern s16 D_80163398[];
-extern s16 D_801633B0[];
-extern s16 D_801633C8[];
-extern s16 D_801633F8[];
-extern f32 D_80163450[];
-extern s16 D_801634C0[];
-extern s16 D_801634EC;
-extern s32 D_801634F0;
-extern s32 D_801634F4;
-extern s16 D_80164358;
-extern s16 D_8016435A;
-extern s16 D_8016435C;
-//extern ? D_80164448;
-extern s16 D_80164538[];
-extern f32 D_80164698;
-extern f32 D_8016469C;
-extern f32 D_801646A0;
-extern f32 D_800DCAA0[];
// static f32 D_800DCAA0[21] = {
// 0.3f,
// 0.3f,
@@ -4092,7 +4047,7 @@ void func_8000F628(void) {
s32 i;
Test *var_s5;
s32 temp_v1;
- s32 pad;
+ UNUSED s32 pad;
for (i = 0; i < NUM_PLAYERS; i++) {
Player *player = &gPlayerOne[i];
@@ -4244,9 +4199,6 @@ void func_8000F628(void) {
func_80011A5C();
}
-extern uintptr_t gCoursePathTable[20][4];
-extern uintptr_t D_800DC8D0[20][4];
-
// @arg index from 0 to 3.
// Processes course path by index.
@@ -4259,7 +4211,7 @@ void func_800100F0(s32 pathIndex) {
TrackWaypoint *path;
s32 var_v0;
s32 sp24;
- s32 pad[2];
+ UNUSED s32 pad[2];
s16 bInvalidPath;
s32 i;
@@ -4348,7 +4300,7 @@ void func_80010218(s32 pathIndex) {
f32 func_80010480(s32 pathIndex, u16 waypointIndex) {
f32 temp_f10_2;
f32 temp_f8;
- UNUSED f32 stackPadding;
+ UNUSED f32 pad;
TrackWaypoint *pathWaypoints;
f32 x1;
f32 z1;
@@ -4512,194 +4464,140 @@ void func_80010E6C(s32 pathIndex) {
}
}
-f32 func_80010F40(f32 arg0, f32 arg1, f32 arg2, UNUSED s32 arg3) {
+f32 func_80010F40(f32 arg0, f32 arg1, f32 arg2, UNUSED s32 arg3, UNUSED s32 arg4) {
arg1 = func_802AE1C0(arg0, 2000.0f, arg2);
func_802ADDC8(&D_80162E70, 1.0f, arg0, arg1, arg2);
return arg1;
}
-f32 func_80010FA0(f32 arg0, f32 arg1, f32 arg2, UNUSED s32 arg3) {
+f32 func_80010FA0(f32 arg0, f32 arg1, f32 arg2, UNUSED s32 arg3, UNUSED s32 arg4) {
arg1 = func_802AE1C0(arg0, (f32) ((f64) arg1 + 30.0), arg2);
func_802ADDC8(&D_80162E70, 10.0f, arg0, arg1, arg2);
return arg1;
}
-#ifdef MIPS_TO_C
-//generated by m2c commit bece1d6db17040749f77dbbd090363cc6fb926f9
-s16 gCurrentCourseId; /* unable to generate initializer */
-
-s32 func_80011014(TrackWaypoint *arg0, TrackWaypoint *arg1, s32 arg2, s32 arg3) {
- f32 spE0;
- f32 spDC;
- f32 spD8;
- f32 spD4;
- f32 spD0;
- f32 spCC;
- f32 spC0;
- f32 spB8;
- f32 spAC;
- f32 sp94;
- s32 sp84;
- f64 sp78;
- f32 temp_f0;
- f32 temp_f0_5;
- f32 temp_f12;
- f32 temp_f14;
- f32 temp_f14_2;
- f32 temp_f14_3;
- f32 temp_f16;
- f32 temp_f18;
- f32 temp_f20;
- f32 temp_f20_2;
- f32 temp_f22;
- f32 temp_f22_2;
- f32 temp_f22_3;
- f32 temp_f24;
+/**
+ * @return's the number of items processed.
+*/
+s32 func_80011014(TrackWaypoint *pathDest, TrackWaypoint *path, s32 numPathPoints, s32 pathIndex) {
f32 temp_f24_2;
- f32 temp_f26;
- f32 temp_f26_2;
- f32 temp_f2;
- f32 temp_f2_2;
f32 temp_f2_3;
- f32 var_f0;
f32 var_f20_2;
- f32 var_f28;
+ f32 x1;
+ f32 z1;
+ f32 x2;
+ f32 z2;
+ f32 x3;
+ f32 z3;
+ f32 x1_2;
+ f32 z1_3;
+ f32 temp_f20;
f32 var_f30;
- f64 temp_f0_2;
- f64 temp_f0_3;
- f64 temp_f0_4;
- f64 temp_f2_4;
- f64 var_f0_2;
- f64 var_f20;
- s16 temp_v0_2;
- s32 temp_a2;
+ f32 temp_f22;
+ f32 temp_f16;
+ s32 i;
+
+ f32 j;
s32 var_s0;
- s32 var_s3;
- TrackWaypoint *temp_a0;
- TrackWaypoint *temp_v0;
- TrackWaypoint *temp_v1;
- TrackWaypoint *var_s1;
+ f32 var_f28;
- temp_f22 = (f32) arg1->posZ;
+ TrackWaypoint *point1;
+ TrackWaypoint *point2;
+ TrackWaypoint *point3;
+ f32 temp;
+ TrackWaypoint *dest;
var_f30 = 0.0f;
- var_s1 = arg0;
- temp_f20 = (f32) arg1->posX;
var_s0 = 0;
- var_f28 = func_80010F40(temp_f20, 2000.0f, temp_f22, (s32) gCurrentCourseId, /* extra? */ 0);
- var_s3 = 0;
- if (arg2 > 0) {
- sp78 = (f64) 0.0f;
- spC0 = temp_f20;
- spB8 = temp_f22;
- do {
- temp_a2 = var_s3 + 1;
- temp_v0 = &arg1[var_s3 % arg2];
- temp_v1 = &arg1[temp_a2 % arg2];
- temp_a0 = &arg1[(s32) (var_s3 + 2) % arg2];
- temp_f26 = (f32) temp_v0->posX;
- temp_f14 = (f32) temp_v0->posZ;
- temp_f20_2 = (f32) temp_v1->posX;
- temp_f22_2 = (f32) temp_v1->posZ;
- spD0 = (f32) temp_a0->posX;
- temp_f0 = temp_f20_2 - temp_f26;
- spDC = temp_f14;
- temp_f2 = temp_f22_2 - temp_f14;
- sp84 = temp_a2;
- spAC = 0.0f;
- spCC = (f32) temp_a0->posZ;
- temp_f24 = sqrtf((temp_f0 * temp_f0) + (temp_f2 * temp_f2));
- temp_f2_2 = spD0 - temp_f20_2;
- spD8 = temp_f20_2;
- spD4 = temp_f22_2;
- temp_f14_2 = spCC - temp_f22_2;
- spE0 = temp_f26;
- sp94 = (f32) (0.05 / (f64) (sqrtf((temp_f2_2 * temp_f2_2) + (temp_f14_2 * temp_f14_2)) + temp_f24));
- if (sp78 <= 1.0) {
- var_f20 = (f64) spAC;
- do {
- temp_f0_2 = 1.0 - var_f20;
- temp_f2_3 = (f32) (temp_f0_2 * 0.5 * temp_f0_2);
- temp_f14_3 = (f32) ((temp_f0_2 * var_f20) + 0.5);
- temp_f16 = (f32) (var_f20 * 0.5 * var_f20);
- temp_f24_2 = (temp_f2_3 * spE0) + (temp_f14_3 * spD8) + (temp_f16 * spD0);
- temp_f18 = temp_f24_2 - spC0;
- temp_f26_2 = (temp_f2_3 * spDC) + (temp_f14_3 * spD4) + (temp_f16 * spCC);
- temp_f22_3 = temp_f26_2 - spB8;
- var_f30 += sqrtf((temp_f18 * temp_f18) + (temp_f22_3 * temp_f22_3));
- spC0 = temp_f24_2;
- spB8 = temp_f26_2;
- if ((var_f30 > 20.0f) || ((var_s3 == 0) && (var_f20 == 0.0))) {
- if (gIsMirrorMode != 0) {
- temp_f12 = -temp_f24_2;
- var_s1->posX = (s16) (s32) temp_f12;
- var_f0 = func_80010FA0(temp_f12, var_f28, temp_f26_2, (s32) gCurrentCourseId, /* extra? */ var_s0);
+ temp_f20 = (f32) path[0].posX;
+ temp_f22 = (f32) path[0].posZ;
+ var_f28 = func_80010F40(temp_f20, 2000.0f, temp_f22, gCurrentCourseId, 0);
+
+ for (i = 0; i < numPathPoints; i++) {
+ point1 = &path[i % numPathPoints];
+ point2 = &path[(i + 1) % numPathPoints];
+ point3 = &path[(s32) (i + 2) % numPathPoints];
+ x1 = (f32) point1->posX;
+ z1 = (f32) point1->posZ;
+ x2 = (f32) point2->posX;
+ z2 = (f32) point2->posZ;
+ x3 = (f32) point3->posX;
+ z3 = (f32) point3->posZ;
+
+ temp = 0.05 / (sqrtf(((x2 - x1) * (x2 - x1)) + ((z2 - z1) * (z2 - z1))) + (sqrtf(((x3 - x2) * (x3 - x2)) + ((z3 - z2) * (z3 - z2)))));
+
+ for (j = 0.0f; j <= 1.0 ; j += temp) {
+
+ temp_f2_3 = (f32) ((1.0 - j) * 0.5 * (1.0 - j));
+ z1_3 = (f32) (((1.0 - j) * j) + 0.5);
+ temp_f16 = (f32) (j * 0.5 * j);
+
+ temp_f24_2 = (temp_f2_3 * x1) + (z1_3 * x2) + (temp_f16 * x3);
+ x1_2 = (temp_f2_3 * z1) + (z1_3 * z2) + (temp_f16 * z3);
+
+ var_f30 += sqrtf(((temp_f24_2 - temp_f20) * (temp_f24_2 - temp_f20)) + ((x1_2 - temp_f22) * (x1_2 - temp_f22)));
+
+ temp_f20 = temp_f24_2;
+ temp_f22 = x1_2;
+
+ if ((var_f30 > 20.0f) || ((i == 0) && (j == 0.0))) {
+ if (gIsMirrorMode) {
+ //temp_f12 = -temp_f24_2;
+ pathDest->posX = (s16) -temp_f24_2;
+ var_f20_2 = func_80010FA0(-temp_f24_2, var_f28, x1_2, gCurrentCourseId, var_s0);
+ } else {
+ pathDest->posX = (s16) temp_f24_2;
+ var_f20_2 = func_80010FA0(temp_f24_2, var_f28, x1_2, gCurrentCourseId, var_s0);
+ }
+
+
+ pathDest->posZ = (s16) temp_f22;
+ pathDest->trackSegment = func_802ABD40(D_80162E70.unk3A);
+
+ if (var_f20_2 < -500.0) {
+ var_f20_2 = var_f28;
+ } else {
+
+ switch (gCurrentCourseId) {
+ case 13:
+ if (var_f20_2 < (var_f28 - 15.0)) {
+ var_f20_2 = (f32) var_f28 - 15.0;
+ }
+ break;
+ case 14:
+ if ((var_s0 >= 1140) && (var_s0 <= 1152)) {
+ var_f20_2 = var_f28;
} else {
- var_s1->posX = (s16) (s32) temp_f24_2;
- var_f0 = func_80010FA0(temp_f24_2, var_f28, temp_f26_2, (s32) gCurrentCourseId, /* extra? */ var_s0);
+ if (var_f20_2 < (var_f28 - 10.0)) {
+ var_f20_2 = (f32) (var_f28 - 4.0);
+ }
}
- var_f20_2 = var_f0;
- var_s1->posZ = (s16) (s32) temp_f26_2;
- var_s1->trackSegment = func_802ABD40(D_80162E70.unk3A);
- temp_f2_4 = (f64) var_f20_2;
- if (temp_f2_4 < -500.0) {
+ break;
+ case 18:
+ if ((var_s0 > 204) && (var_s0 < 220)) {
var_f20_2 = var_f28;
} else {
- temp_v0_2 = gCurrentCourseId;
- switch (temp_v0_2) { /* irregular */
- case 13:
- var_f0_2 = (f64) var_f28 - 15.0;
- if (temp_f2_4 < var_f0_2) {
-block_29:
- var_f20_2 = (f32) var_f0_2;
- }
- break;
- case 14:
- if ((var_s0 >= 0x474) && (var_s0 < 0x481)) {
- var_f20_2 = var_f28;
- } else {
- temp_f0_3 = (f64) var_f28;
- if (temp_f2_4 < (temp_f0_3 - 10.0)) {
- var_f20_2 = (f32) (temp_f0_3 - 4.0);
- }
- }
- break;
- case 18:
- if ((var_s0 >= 0xCD) && (var_s0 < 0xDC)) {
- var_f20_2 = var_f28;
- } else {
- temp_f0_4 = (f64) var_f28;
- if (temp_f2_4 < (temp_f0_4 - 10.0)) {
- var_f20_2 = (f32) (temp_f0_4 - 4.0);
- }
- }
- break;
- default:
- var_f0_2 = (f64) var_f28 - 10.0;
- if (temp_f2_4 < var_f0_2) {
- goto block_29;
- }
- break;
+ if (var_f20_2 < (var_f28 - 10.0)) {
+ var_f20_2 = (f32) (var_f28 - 4.0);
}
}
- var_f30 = 0.0f;
- var_f28 = var_f20_2;
- var_s1 += 8;
- var_s0 += 1;
- var_s1->unk-6 = (s16) (s32) var_f20_2;
+ break;
+ default:
+ if (var_f20_2 < (var_f28 - 10.0)) {
+ var_f20_2 = (f32) var_f28 - 10.0;
+ }
+ break;
}
- temp_f0_5 = spAC + sp94;
- var_f20 = (f64) temp_f0_5;
- spAC = temp_f0_5;
- } while (var_f20 <= 1.0);
+ }
+ var_f28 = var_f20_2;
+ pathDest->posY = (s16) (s32) var_f20_2;
+ var_f30 = 0.0f;
+ pathDest++;
+ var_s0 += 1;
}
- var_s3 = sp84;
- } while (var_s3 != arg2);
+ }
}
return var_s0;
}
-#else
-GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80011014.s")
-#endif
// Returns number of waypoints processed.
s32 process_path_data(TrackWaypoint *dest, TrackWaypoint *src) {
@@ -4732,143 +4630,79 @@ s32 process_path_data(TrackWaypoint *dest, TrackWaypoint *src) {
return var_v1;
}
-#ifdef MIPS_TO_C
-//generated by mips_to_c commit 3c3b0cede1a99430bfd3edf8d385802b94f91307
-extern f64 D_800ED078;
-
-// blank memory segmented waypoints waypoint size
-s32 func_8001168C(s16 *arg0, void *arg1, s32 arg2) {
- f32 spC8;
- f32 spC4;
- f32 spC0;
- f32 spBC;
- f32 spB8;
- f32 spB4;
- f32 spA8;
- f32 spA0;
- f32 sp94;
- f32 sp84;
- f32 sp7C;
- f64 sp68;
- f32 temp_f0;
- f32 temp_f0_3;
- f32 temp_f14;
- f32 temp_f14_2;
+s32 func_8001168C(PathNoY *pathDest, TrackWaypoint *pathSrc, s32 numWaypoints) {
f32 temp_f14_3;
- f32 temp_f16;
f32 temp_f16_2;
- f32 temp_f18;
- f32 temp_f18_2;
- f32 temp_f20;
- f32 temp_f20_2;
- f32 temp_f22;
+ s32 pad;
+
+ f32 x1;
+ f32 z1;
+ f32 x2;
+ f32 z2;
+ f32 x3;
+ f32 z3;
+
+
+ s32 pad2;
f32 temp_f24;
+
+ f32 spA8;
f32 temp_f26;
- f32 temp_f2;
- f32 temp_f2_2;
+ f32 spA0;
+
f32 temp_f2_3;
- f32 temp_f6;
- f64 temp_f0_2;
- f64 temp_f20_3;
- s16 *temp_s0;
- s32 temp_s5;
- void *temp_a0;
- void *temp_v0;
- void *temp_v1;
- s32 phi_s2;
- f64 phi_f20;
- s16 *phi_s0;
- s32 phi_s1;
- s16 *phi_s0_2;
- s16 *phi_s0_3;
- s32 phi_s1_2;
- s32 phi_s1_3;
- s32 phi_s1_4;
- s32 phi_s1_5;
-
- sp84 = 0.0f;
- spA8 = arg1->unk0;
- spA0 = arg1->unk4;
- phi_s2 = 0;
- phi_s1 = 0;
- phi_s0_2 = arg0;
- phi_s1_3 = 0;
- if (arg2 > 0) {
- sp68 = 0.0f;
- do {
- temp_s5 = phi_s2 + 1;
- temp_v0 = ((phi_s2 % arg2) * 8) + arg1;
- temp_v1 = ((temp_s5 % arg2) * 8) + arg1;
- temp_a0 = (((phi_s2 + 2) % arg2) * 8) + arg1;
- temp_f14 = temp_v0->unk0;
- temp_f16 = temp_v0->unk4;
- temp_f18 = temp_v1->unk0;
- temp_f20 = temp_v1->unk4;
- spB8 = temp_a0->unk0;
- temp_f0 = temp_f18 - temp_f14;
- spBC = temp_f20;
- temp_f2 = temp_f20 - temp_f16;
- spC0 = temp_f18;
- spC4 = temp_f16;
- spC8 = temp_f14;
- sp94 = 0.0f;
- spB4 = temp_a0->unk4;
- temp_f2_2 = spB8 - spC0;
- temp_f20_2 = sqrtf((temp_f0 * temp_f0) + (temp_f2 * temp_f2));
- temp_f14_2 = spB4 - spBC;
- sp7C = D_800ED078 / (sqrtf((temp_f2_2 * temp_f2_2) + (temp_f14_2 * temp_f14_2)) + temp_f20_2);
- phi_s0 = phi_s0_2;
- phi_s1_2 = phi_s1_3;
- phi_s1_5 = phi_s1_3;
- if (sp68 <= 1.0) {
- phi_f20 = sp94;
- do {
- temp_f0_2 = 1.0 - phi_f20;
- temp_f2_3 = temp_f0_2 * 0.5 * temp_f0_2;
- temp_f14_3 = (temp_f0_2 * phi_f20) + 0.5;
- temp_f16_2 = phi_f20 * 0.5 * phi_f20;
- temp_f24 = (temp_f2_3 * spC8) + (temp_f14_3 * spC0) + (temp_f16_2 * spB8);
- temp_f18_2 = temp_f24 - spA8;
- temp_f26 = (temp_f2_3 * spC4) + (temp_f14_3 * spBC) + (temp_f16_2 * spB4);
- temp_f22 = temp_f26 - spA0;
- temp_f6 = sp84 + sqrtf((temp_f18_2 * temp_f18_2) + (temp_f22 * temp_f22));
- spA8 = temp_f24;
- spA0 = temp_f26;
- sp84 = temp_f6;
- phi_s0_3 = phi_s0;
- phi_s1_4 = phi_s1_5;
- if ((temp_f6 > 20.0f) || ((phi_s2 == 0) && (phi_f20 == 0.0))) {
- phi_s1_4 = phi_s1_5 + 1;
- if (gIsMirrorMode != 0) {
- *phi_s0 = -temp_f24;
- } else {
- *phi_s0 = temp_f24;
- }
- temp_s0 = phi_s0 + 4;
- temp_s0->unk-2 = temp_f26;
- sp84 = 0.0f;
- phi_s0_3 = temp_s0;
- }
- temp_f0_3 = sp94 + sp7C;
- temp_f20_3 = temp_f0_3;
- sp94 = temp_f0_3;
- phi_f20 = temp_f20_3;
- phi_s0 = phi_s0_3;
- phi_s1_2 = phi_s1_4;
- phi_s0_2 = phi_s0_3;
- phi_s1_5 = phi_s1_4;
- } while (temp_f20_3 <= 1.0);
- }
- phi_s2 = temp_s5;
- phi_s1 = phi_s1_2;
- phi_s1_3 = phi_s1_2;
- } while (temp_s5 != arg2);
- }
- return phi_s1;
+
+ TrackWaypoint *point1;
+ f32 j;
+ TrackWaypoint *point2;
+ TrackWaypoint *point3;
+ s32 i;
+ f32 temp_f6 = 0.0f;
+ s32 count;
+ f32 sp7C;
+
+ spA8 = pathSrc[0].posX;
+ spA0 = pathSrc[0].posZ;
+ count = 0;
+
+ for (i = 0; i < numWaypoints; i++) {
+ point1 = &pathSrc[((i % numWaypoints))];
+ point2 = &pathSrc[(((i + 1) % numWaypoints))];
+ point3 = &pathSrc[(((i + 2) % numWaypoints))];
+ x1 = point1->posX;
+ z1 = point1->posZ;
+ x2 = point2->posX;
+ z2 = point2->posZ;
+ x3 = point3->posX;
+ z3 = point3->posZ;
+
+ sp7C = 0.05 / (sqrtf(((x2 - x1) * (x2 - x1)) + ((z2 - z1) * (z2 - z1))) + sqrtf(((x3 - x2) * (x3 - x2)) + ((z3 - z2) * (z3 - z2))));
+
+ for (j = 0.0f; j <= 1.0; j += sp7C) {
+ temp_f2_3 = (1.0 - j) * 0.5 * (1.0 - j);
+ temp_f14_3 = ((1.0 - j) * j) + 0.5;
+ temp_f16_2 = j * 0.5 * j;
+
+ temp_f24 = (temp_f2_3 * x1) + (temp_f14_3 * x2) + (temp_f16_2 * x3);
+ temp_f26 = (temp_f2_3 * z1) + (temp_f14_3 * z2) + (temp_f16_2 * z3);
+ temp_f6 += sqrtf(((temp_f24 - spA8) * (temp_f24 - spA8)) + ((temp_f26 - spA0) * (temp_f26 - spA0)));
+ spA8 = temp_f24;
+ spA0 = temp_f26;
+ if ((temp_f6 > 20.0f) || ((i == 0) && (j == 0.0))) {
+ if (gIsMirrorMode) {
+ pathDest->x = (s16) -spA8;
+ } else {
+ pathDest->x = (s16) spA8;
+ }
+ pathDest->z = spA0;
+ count += 1;
+ pathDest++;
+ temp_f6 = 0.0f;
+ }
+ }
+ }
+ return count;
}
-#else
-GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_8001168C.s")
-#endif
void func_80011A5C(void) {
s32 i;
@@ -5136,7 +4970,7 @@ void func_80012190(void) {
void func_80012220(VehicleStuff *vehicle) {
f32 origXPos;
- UNUSED f32 stackPadding;
+ UNUSED f32 pad;
f32 origZPos;
origXPos = vehicle->position[0];
@@ -5213,14 +5047,14 @@ void init_course_vehicles(void) {
break;
case COURSE_DK_JUNGLE:
for(loopIndex = 0; loopIndex < NUM_PADDLE_WHEEL_BOATS; loopIndex++) {
- tempPaddleWheelBoat = &D_801637C0[loopIndex];
+ tempPaddleWheelBoat = &gFerries[loopIndex];
if(tempPaddleWheelBoat->isActive == 1) {
origXPos = tempPaddleWheelBoat->position[0];
origZPos = tempPaddleWheelBoat->position[2];
- tempPaddleWheelBoat->yRotation = func_8000DBAC(tempPaddleWheelBoat->position, &tempPaddleWheelBoat->waypointIndex, tempPaddleWheelBoat->someMultiplier);
+ tempPaddleWheelBoat->rotY = func_8000DBAC(tempPaddleWheelBoat->position, &tempPaddleWheelBoat->waypointIndex, tempPaddleWheelBoat->someMultiplier);
tempPaddleWheelBoat->velocity[0] = tempPaddleWheelBoat->position[0] - origXPos;
tempPaddleWheelBoat->velocity[2] = tempPaddleWheelBoat->position[2] - origZPos;
- vec3s_set(paddleWheelBoatRot, 0, tempPaddleWheelBoat->yRotation, 0);
+ vec3s_set(paddleWheelBoatRot, 0, tempPaddleWheelBoat->rotY, 0);
tempPaddleWheelBoat->actorIndex = addActorToEmptySlot(tempPaddleWheelBoat->position, paddleWheelBoatRot, tempPaddleWheelBoat->velocity, ACTOR_PADDLE_WHEEL_BOAT);
}
}
@@ -5272,8 +5106,8 @@ void func_80012780(TrainCarStuff *trainCar, s16 *arg1, u16 arg2) {
*/
void func_800127E0(void) {
u16 waypointOffset;
- TrainCarStuff * ptr1;
- s32 * ptr2;
+ TrainCarStuff *ptr1;
+ s32 *ptr2;
s32 i;
s32 j;
@@ -5352,7 +5186,7 @@ void func_80012A48(TrainCarStuff *trainCar, s16 arg1) {
}
void func_80012AC0(void) {
- s32 pad[3];
+ UNUSED s32 pad[3];
f32 temp_f20;
TrainCarStuff *car;
u16 temp_s0;
@@ -5535,9 +5369,9 @@ void func_800132F4(void) {
s32 i;
TrackWaypoint *temp_a2;
u16 temp;
- for (i = 0; i < 1; i++) {
+ for (i = 0; i < NUM_PADDLE_WHEEL_BOATS; i++) {
temp = i * 0xB4;
- var_a1 = &D_801637C0[i];
+ var_a1 = &gFerries[i];
temp_a2 = &D_80163598[temp];
var_a1->position[0] = (f32) temp_a2->posX;
var_a1->position[1] = (f32) D_80162EB2;
@@ -5559,136 +5393,110 @@ void func_800132F4(void) {
// fakematch
temp_a2 = &D_80163598[temp];
var_a1->someMultiplier = 1.6666666f;
- var_a1->yRotation = 0;
+ var_a1->rotY = 0;
}
D_801630FC = 0;
}
-#ifdef MIPS_TO_C
-//generated by m2c commit 08138748803d75e73e4a94bb0c619a273754ee9c on Oct-10-2023
-extern s32 D_80163598;
-extern s32 D_8016359C;
-
void func_800133C4(void) {
- f32 sp9C;
- f32 sp98;
- f32 sp94;
- f32 sp90;
- f32 sp8C;
- f32 sp88;
- f32 sp80;
- f32 sp7C;
- f32 sp78;
- PaddleWheelBoatStuff *var_s0;
- f32 *temp_s1;
- f32 *temp_s2;
- f32 temp_f0_3;
+ PaddleWheelBoatStuff *ferry;
+ TrackWaypoint *waypoint;
+ s32 i;
+ struct Actor *ferryActor;
f32 temp_f26;
f32 temp_f28;
f32 temp_f30;
- f64 temp_f0;
- f64 temp_f0_2;
s16 temp_a1;
+ s32 temp;
s16 var_v1;
- s32 temp_v0;
- s32 var_s3;
- struct Actor *temp_v0_3;
- void *temp_v0_2;
-
+ Vec3f sp94;
+ Vec3f sp88;
+ UNUSED s32 pad;
+ Vec3f sp78;
+ s32 pad2;
D_801630FC += 1;
- var_s0 = D_801637C0;
- var_s3 = 0;
- do {
- temp_s2 = var_s0->position;
- if (var_s0->isActive == (s16) 1) {
- temp_f26 = var_s0->position[0];
- temp_f28 = var_s0->position[1];
- temp_f30 = var_s0->position[2];
- func_8000DBAC(temp_s2, &var_s0->waypointIndex, var_s0->someMultiplier);
- temp_v0 = func_800061DC(temp_s2, 2000.0f, var_s0->someFlags);
- var_s0->someFlags = temp_v0;
- if ((((s16) D_801630FC % 10) == 0) && (temp_v0 != 0)) {
- sp78 = (f32) ((f64) var_s0->position[0] - 30.0);
- sp7C = (f32) ((f64) var_s0->position[1] + 180.0);
- sp80 = (f32) ((f64) var_s0->position[2] + 45.0);
- func_80006114(&sp78, temp_s2, var_s0->yRotation);
- func_80075A6C(var_s3, &sp78, 1.1f);
- sp78 = (f32) ((f64) var_s0->position[0] + 30.0);
- sp7C = (f32) ((f64) var_s0->position[1] + 180.0);
- sp80 = (f32) ((f64) var_s0->position[2] + 45.0);
- func_80006114(&sp78, temp_s2, var_s0->yRotation);
- func_80075A6C(var_s3, &sp78, 1.1f);
- }
- if (random_int(0x0064U) == 0) {
- temp_s1 = var_s0->velocity;
- if (random_int(2U) == 0) {
- func_800C98B8(temp_s2, temp_s1, 0x19018047U);
+ for (i = 0; i < NUM_PADDLE_WHEEL_BOATS; i++) {
+ ferry = &gFerries[i];
+ if (ferry->isActive == 1) {
+ temp_f26 = ferry->position[0];
+ temp_f28 = ferry->position[1];
+ temp_f30 = ferry->position[2];
+ func_8000DBAC(ferry->position, &ferry->waypointIndex, ferry->someMultiplier);
+ ferry->someFlags = func_800061DC(ferry->position, 2000.0f, ferry->someFlags);
+ if ((((s16) D_801630FC % 10) == 0) && (ferry->someFlags != 0)) {
+ sp78[0] = (f32) ((f64) ferry->position[0] - 30.0);
+ sp78[1] = (f32) ((f64) ferry->position[1] + 180.0);
+ sp78[2] = (f32) ((f64) ferry->position[2] + 45.0);
+ func_80006114(sp78, ferry->position, ferry->rotY);
+ func_80075A6C(i, sp78, 1.1f);
+ sp78[0] = (f32) ((f64) ferry->position[0] + 30.0);
+ sp78[1] = (f32) ((f64) ferry->position[1] + 180.0);
+ sp78[2] = (f32) ((f64) ferry->position[2] + 45.0);
+ func_80006114(sp78, ferry->position, ferry->rotY);
+ func_80075A6C(i, sp78, 1.1f);
+ }
+ if (random_int(100) == 0) {
+ if (random_int(2) == 0) {
+ func_800C98B8(ferry->position, ferry->velocity, 0x19018047U);
} else {
- func_800C98B8(temp_s2, temp_s1, 0x19018048U);
+ func_800C98B8(ferry->position, ferry->velocity, 0x19018048U);
}
}
- sp94 = temp_f26;
- sp98 = temp_f28;
- sp9C = temp_f30;
- temp_v0_2 = (((s32) ((u16) var_s0->waypointIndex + 5) % (s32) D_8016359C) * 4) + D_80163598;
- sp88 = (f32) temp_v0_2->unk0;
- sp8C = (f32) D_80162EB0;
- sp90 = (f32) temp_v0_2->unk2;
- temp_a1 = func_80005FD0(&sp94, &sp88) - var_s0->yRotation;
- var_v1 = temp_a1;
- if (temp_a1 < 0) {
- var_v1 = temp_a1 * -1;
+ sp94[0] = temp_f26;
+ sp94[1] = temp_f28;
+ sp94[2] = temp_f30;
+ waypoint = (TrackWaypoint *) &D_80163598[(ferry->waypointIndex + 5) % D_8016359C];
+ sp88[0] = (f32) waypoint->posX;
+ sp88[1] = (f32) D_80162EB0;
+ sp88[2] = (f32) waypoint->posY;
+ temp_a1 = func_80005FD0(sp94, sp88);
+ temp = temp_a1 - ferry->rotY;
+ var_v1 = temp;
+ if (var_v1 < 0) {
+ var_v1 = -var_v1;
}
if (var_v1 >= 0x1771) {
- temp_f0 = (f64) var_s0->someMultiplier;
- if (temp_f0 > 0.2) {
- var_s0->someMultiplier = (f32) (temp_f0 - 0.04);
+ if (ferry->someMultiplier > 0.2) {
+ ferry->someMultiplier -= 0.04;
}
if (var_v1 >= 0x3D) {
var_v1 = 0x003C;
}
} else {
- temp_f0_2 = (f64) var_s0->someMultiplier;
- if (temp_f0_2 < 2.0) {
- var_s0->someMultiplier = (f32) (temp_f0_2 + 0.02);
+ if (ferry->someMultiplier < 2.0) {
+ ferry->someMultiplier += 0.02;
}
if (var_v1 >= 0x1F) {
var_v1 = 0x001E;
}
}
- if (temp_a1 >= 0x8000) {
- var_s0->yRotation -= var_v1;
- } else if (temp_a1 > 0) {
- var_s0->yRotation += var_v1;
- } else if (temp_a1 < -0x7FFF) {
- var_s0->yRotation += var_v1;
- } else if (temp_a1 < 0) {
- var_s0->yRotation -= var_v1;
- }
- temp_f0_3 = var_s0->position[0];
- var_s0->velocity[0] = temp_f0_3 - temp_f26;
- var_s0->velocity[1] = var_s0->position[1] - temp_f28;
- var_s0->velocity[2] = var_s0->position[2] - temp_f30;
- temp_v0_3 = &gActorList[var_s0->actorIndex];
- temp_v0_3->pos[0] = temp_f0_3;
- temp_v0_3->pos[1] = var_s0->position[1];
- temp_v0_3->pos[2] = var_s0->position[2];
+ if (temp >= 0x8000) {
+ ferry->rotY -= var_v1;
+ } else if (temp > 0) {
+ ferry->rotY += var_v1;
+ } else if (temp < -0x7FFF) {
+ ferry->rotY += var_v1;
+ } else if (temp < 0) {
+ ferry->rotY -= var_v1;
+ }
+ ferry->velocity[0] = ferry->position[0] - temp_f26;
+ ferry->velocity[1] = ferry->position[1] - temp_f28;
+ ferry->velocity[2] = ferry->position[2] - temp_f30;
+ ferryActor = &gActorList[ferry->actorIndex];
+ ferryActor->pos[0] = ferry->position[0];
+ ferryActor->pos[1] = ferry->position[1];
+ ferryActor->pos[2] = ferry->position[2];
if (gIsMirrorMode != 0) {
- temp_v0_3->rot[1] = -var_s0->yRotation;
+ ferryActor->rot[1] = -ferry->rotY;
} else {
- temp_v0_3->rot[1] = var_s0->yRotation;
+ ferryActor->rot[1] = ferry->rotY;
}
- temp_v0_3->velocity[0] = var_s0->velocity[0];
- temp_v0_3->velocity[1] = var_s0->velocity[1];
- temp_v0_3->velocity[2] = var_s0->velocity[2];
+ ferryActor->velocity[0] = ferry->velocity[0];
+ ferryActor->velocity[1] = ferry->velocity[1];
+ ferryActor->velocity[2] = ferry->velocity[2];
}
- var_s3 += 1;
- var_s0 += 0x2C;
- } while (var_s3 != 1);
+ }
}
-#else
-GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_800133C4.s")
-#endif
void func_80013854(Player *player) {
s32 someIndex;
@@ -5705,7 +5513,7 @@ void func_80013854(Player *player) {
playerY = player->pos[1];
playerZ = player->pos[2];
for (someIndex = 0; someIndex < NUM_PADDLE_WHEEL_BOATS; someIndex++) {
- tempPaddleWheelBoat = &D_801637C0[someIndex];
+ tempPaddleWheelBoat = &gFerries[someIndex];
if (tempPaddleWheelBoat->isActive == 1) {
x_diff = playerX - tempPaddleWheelBoat->position[0];
y_diff = playerY - tempPaddleWheelBoat->position[1];
@@ -5743,7 +5551,7 @@ void func_800139E4(f32 arg0, f32 arg1, s32 arg2, s32 arg3, VehicleStuff *vehicle
veh->velocity[2] = 0.0f;
veh->someFlags = 0;
veh->someFlagsTheSequel = 0;
- if (gModeSelection == 1) {
+ if (gModeSelection == TIME_TRIALS) {
veh->someType = (i % 3);
} else {
veh->someType = random_int(3);
@@ -5862,168 +5670,140 @@ void func_80013D20(VehicleStuff *vehicle) {
vehicleActor->velocity[2] = vehicle->velocity[2];
}
-#ifdef MIPS_TO_C
-//generated by m2c commit 08138748803d75e73e4a94bb0c619a273754ee9c on Oct-10-2023
-extern ? D_80163270;
-
void func_80013F7C(s32 playerId, Player *player, VehicleStuff *vehicle, f32 arg3, f32 arg4, s32 arg5, u32 arg6) {
- f32 spC4;
- f32 spC0;
- f32 spBC;
- u32 spA8;
- u16 *sp9C;
- f32 *sp84;
- VehicleStuff *var_s0;
f32 temp_f12;
f32 temp_f14;
f32 temp_f22;
- f32 temp_f24;
- f64 temp_f0;
- f64 temp_f0_2;
- f64 temp_f0_3;
- f64 temp_f0_4;
- f64 temp_f0_5;
- f64 temp_f0_6;
- f64 temp_f20;
- s32 temp_s2;
- s32 temp_s7;
- s32 temp_v0_4;
- s32 var_fp;
- s8 temp_v0_3;
- s8 temp_v0_5;
- u16 temp_v0;
- u16 temp_v0_2;
- u16 temp_v1;
- u16 temp_v1_2;
- u16 var_s1;
- u32 var_a2;
+
+ s32 i;
+
+ f32 spC4;
+ f32 spC0;
+ f32 spBC;
- temp_s7 = playerId * 2;
- var_s0 = vehicle;
- if (((D_801631E0[playerId] != 1) || ((temp_v0 = player->type, ((temp_v0 & 0x4000) != 0)) && !(temp_v0 & 0x1000))) && !(player->effects & 0x01000000)) {
+ if (((D_801631E0[playerId] != 1) || ((
+ ((player->type & PLAYER_HUMAN) != 0)) && !(player->type & PLAYER_CPU))) && !(player->effects & 0x01000000)) {
+
spC4 = player->pos[0];
- var_fp = 0;
spC0 = player->pos[1];
spBC = player->pos[2];
- if (arg5 > 0) {
- do {
- temp_f12 = var_s0->position[0];
- temp_f14 = var_s0->position[2];
- temp_f20 = (f64) (spC4 - temp_f12);
- temp_f22 = spC0 - var_s0->position[1];
- temp_f24 = spBC - temp_f14;
- if ((temp_f20 > -100.0) && (temp_f20 < 100.0)) {
- temp_f0 = (f64) temp_f22;
- if ((temp_f0 > -20.0) && (temp_f0 < 20.0)) {
- temp_f0_2 = (f64) temp_f24;
- if ((temp_f0_2 > -100.0) && (temp_f0_2 < 100.0) && (func_80006018(temp_f12, temp_f14, var_s0->velocity[0], var_s0->velocity[2], arg3, arg4, spC4, spBC) == (s32) 1U)) {
+
+ for (i = 0; i < arg5; i++) {
+ temp_f12 = spC4 - vehicle->position[0];
+ temp_f22 = spC0 - vehicle->position[1];
+ temp_f14 = spBC - vehicle->position[2];
+
+ if (((temp_f12) > -100.0) && ((temp_f12) < 100.0)) {
+ if ((temp_f22 > -20.0) && (temp_f22 < 20.0)) {
+
+ if (((temp_f14) > -100.0) && ((temp_f14) < 100.0)) {
+ if (func_80006018(vehicle->position[0], vehicle->position[2], vehicle->velocity[0], vehicle->velocity[2], arg3, arg4, spC4, spBC) == (s32) 1) {
player->statusEffects |= REVERSE_EFFECT;
+ }
}
}
}
- temp_v0_2 = player->type;
- if ((temp_v0_2 & 0x4000) && !(temp_v0_2 & 0x1000)) {
- temp_s2 = 1 << playerId;
- if ((temp_f20 > -300.0) && (temp_f20 < 300.0) && (temp_f0_3 = (f64) temp_f22, (temp_f0_3 > -20.0)) && (temp_f0_3 < 20.0) && (temp_f0_4 = (f64) temp_f24, (temp_f0_4 > -300.0)) && (temp_f0_4 < 300.0)) {
- if ((D_801631C8 > 0) && (var_s0->someFlags == 0)) {
+ if ((player->type & PLAYER_HUMAN) && !(player->type & PLAYER_CPU)) {
+ if (((temp_f12) > -300.0) && ((temp_f12) < 300.0) && (
+ (temp_f22 > -20.0)) && (temp_f22 < 20.0) && (((temp_f14) > -300.0)) && ((temp_f14) < 300.0)) {
+ if ((D_801631C8 > 0) && (vehicle->someFlags == 0)) {
D_801631C8 -= 1;
- var_s0->someFlags |= temp_s2;
- func_800C9D80(var_s0->position, var_s0->velocity, arg6);
+ vehicle->someFlags |= (1 << playerId);
+ func_800C9D80(vehicle->position, vehicle->velocity, arg6);
}
} else {
- temp_v0_3 = var_s0->someFlags;
- if (temp_v0_3 != 0) {
- var_s0->someFlags = temp_v0_3 & ~temp_s2;
- if (var_s0->someFlags == 0) {
+ if (vehicle->someFlags != 0) {
+ vehicle->someFlags &= ~(1 << playerId);
+ if (vehicle->someFlags == 0) {
D_801631C8 += 1;
- func_800C9EF4(var_s0->position, arg6);
+ func_800C9EF4(vehicle->position, arg6);
}
}
}
- if ((temp_f20 > -200.0) && (temp_f20 < 200.0) && (temp_f0_5 = (f64) temp_f22, (temp_f0_5 > -20.0)) && (temp_f0_5 < 20.0) && (temp_f0_6 = (f64) temp_f24, (temp_f0_6 > -200.0)) && (temp_f0_6 < 200.0)) {
- if (!(var_s0->someFlagsTheSequel & temp_s2)) {
- var_s1 = 0;
- switch (D_8016347A) { /* irregular */
+
+ if (((temp_f12) > -200.0) && ((temp_f12) < 200.0) && ((temp_f22 > -20.0)) && (temp_f22 < 20.0) && (
+ ((temp_f14) > -200.0)) && ((temp_f14) < 200.0)) {
+ if (!(vehicle->someFlagsTheSequel & ((1 << playerId)))) {
+
+ s32 var_s1 = 0;
+ u16 path = gWaypointCountByPathIndex[0];
+ s32 t1;
+ s32 t2;
+
+ switch (D_8016347A) {
case 0:
- sp9C = temp_s7 + &D_80163270;
- temp_v0_4 = func_80007BF8(var_s0->waypointIndex, gNearestWaypointByPlayerId[playerId], 0x000AU, 0U, (u16) (s32) *gWaypointCountByPathIndex);
- temp_v1 = *sp9C;
- if ((temp_v1 == 0) && (temp_v0_4 > 0) && (player->unk_094 < var_s0->someMultiplier)) {
+ t1 = func_80007BF8(vehicle->waypointIndex, gNearestWaypointByPlayerId[playerId], 10, 0, path);
+ if ((D_80163270[playerId] == 0) && (t1 > 0) && (player->unk_094 < vehicle->someMultiplier)) {
var_s1 = 1;
}
- if ((temp_v1 == 1) && (temp_v0_4 > 0)) {
+ if ((D_80163270[playerId] == 1) && (t1 > 0)) {
var_s1 = 1;
}
break;
case 1:
- if (func_80007BF8(var_s0->waypointIndex, gNearestWaypointByPlayerId[playerId], 0U, 0x000AU, (u16) (s32) *gWaypointCountByPathIndex) > 0) {
- if (random_int(2U) == 0) {
- temp_v1_2 = *(&D_80163270 + temp_s7);
- if (temp_v1_2 == 0) {
+ t2 = func_80007BF8(vehicle->waypointIndex, gNearestWaypointByPlayerId[playerId], 0, 10, path);
+ if (t2 > 0) {
+ if (random_int(2) == 0) {
+ //temp_v1_2 = D_80163270[playerId];
+ if (D_80163270[playerId] == 0) {
var_s1 = 1;
}
- if ((temp_v1_2 == 1) && (player->unk_094 < var_s0->someMultiplier)) {
+ if ((D_80163270[playerId] == 1) && (player->unk_094 < vehicle->someMultiplier)) {
var_s1 = 1;
}
} else {
- var_s0->someFlagsTheSequel |= temp_s2;
+ vehicle->someFlagsTheSequel |= ((1 << playerId));
}
}
break;
}
if (var_s1 == 1) {
- var_a2 = 0x1901703B;
- sp84 = var_s0->velocity;
- switch (arg6) { /* switch 1; irregular */
- case 0x51018005: /* switch 1 */
- spA8 = 0x1901703B;
+
+ u32 var_a2 = 0x1901703B;
+
+ switch (arg6) {
+ case 0x51018005:
var_a2 = 0x1901703B;
- if (random_int(4U) == 0) {
+ if (random_int(4) == 0) {
var_a2 = 0x1901703C;
}
break;
- case 0x51018002: /* switch 1 */
- if (random_int(2U) != 0) {
+ case 0x51018002:
+ if (random_int(2) != 0) {
var_a2 = 0x1901703D;
} else {
var_a2 = 0x1901703E;
}
break;
- case 0x51018003: /* switch 1 */
- if (random_int(2U) != 0) {
+ case 0x51018003:
+ if (random_int(2) != 0) {
var_a2 = 0x1901703F;
} else {
var_a2 = 0x19017040;
}
break;
- case 0x51018004: /* switch 1 */
- if (random_int(2U) != 0) {
+ case 0x51018004:
+ if (random_int(2) != 0) {
var_a2 = 0x19017041;
} else {
var_a2 = 0x19017042;
}
break;
}
- var_s0->someFlagsTheSequel |= temp_s2;
- func_800C98B8(var_s0->position, sp84, var_a2);
+ vehicle->someFlagsTheSequel |= ((1 << playerId));
+ func_800C98B8(vehicle->position, vehicle->velocity, var_a2);
}
}
} else {
- temp_v0_5 = var_s0->someFlagsTheSequel;
- if (temp_v0_5 & temp_s2) {
- var_s0->someFlagsTheSequel = temp_v0_5 & ~temp_s2;
+ if (vehicle->someFlagsTheSequel & ((1 << playerId))) {
+ vehicle->someFlagsTheSequel &= ~((1 << playerId));
}
}
}
- var_fp += 1;
- var_s0 += 0x34;
- } while (var_fp != arg5);
- }
+ vehicle++;
+ }
}
}
-#else
-GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80013F7C.s")
-#endif
f32 func_800145A8(s16 arg0, f32 arg1, s16 arg2) {
if (arg2 < 0x28A) {
@@ -6208,47 +5988,43 @@ void func_80014D30(s32 cameraId, s32 pathIndex) {
func_802ADDC8(&cameras[cameraId].unk_54, 10.0f, (f32) temp_v0->posX, (f32) temp_v0->posY + 30.0f, (f32) temp_v0->posZ);
}
-#ifdef MIPS_TO_C
+#ifdef NEEDS_BSS
//generated by m2c commit 08138748803d75e73e4a94bb0c619a273754ee9c on Oct-10-2023
-extern s32 D_80163238;
-extern ? D_80164680;
-extern ? D_801646C0;
+//extern s32 D_80163238;
+//extern ? D_80164680;
+//extern ? D_801646C0;
extern s32 D_801646C8;
-extern ? D_801646D0;
-void func_80014DE4(s32 arg0) {
- s16 *temp_v1;
- s16 temp_a2;
- s32 temp_v0;
- void *temp_a2_2;
- temp_v0 = arg0 * 2;
+
+extern UnkStruct_46D0 D_801646D0[]; // size of 8
+
+void func_80014DE4(s32 arg0) {
+ UnkStruct_46D0 *temp_v1;
+ // s32 temp_v0;
+ //temp_v0 = arg0 * 2;
D_801646CC = 0;
- temp_v1 = &D_80164678[arg0];
- *temp_v1 = D_80164670[arg0];
+ D_80164678[arg0] = D_80164670[arg0];
if ((gModeSelection != 1) && ((gCupCourseSelection == 0) || (gDemoMode == (u16) 1))) {
- goto block_8;
- }
- temp_a2 = *temp_v1;
- if ((temp_a2 != 0) && (temp_a2 != (s16) 1) && (temp_a2 != 2) && (temp_a2 != 3)) {
-block_8:
- *temp_v1 = 0;
+ D_80164678[arg0] = 0;
+ } else if ((D_80164678[arg0] != 0) && (D_80164678[arg0] != (s16) 1) && (D_80164678[arg0] != 2) && (D_80164678[arg0] != 3)) {
+ D_80164678[arg0] = 0;
}
- *(&D_80164680 + temp_v0) = -1;
+ D_80164680[arg0] = -1;
D_80163238 = 0;
- *(&D_801646C0 + temp_v0) = 0;
+ D_801646C0[arg0] = 0;
D_801646C8 = 0;
- temp_a2_2 = (arg0 * 8) + &D_801646D0;
- temp_a2_2->unk0 = 0;
- temp_a2_2->unk2 = 0;
- temp_a2_2->unk4 = 0;
+ temp_v1 = &D_801646D0[arg0];
+ temp_v1->unk0 = 0;
+ temp_v1->unk2 = 0;
+ temp_v1->unk4 = 0;
if ((gModeSelection == 1) && (D_8018EDFC == 0)) {
- *temp_v1 = 0;
+ D_80164678[arg0] = 0;
+ }
+
+ for (i = 0 ; i < i++) {
+ gNearestWaypointByCameraId[i] = 0;
}
- *gNearestWaypointByCameraId = 0;
- *gNearestWaypointByCameraId = 0;
- *gNearestWaypointByCameraId = 0;
- *gNearestWaypointByCameraId = 0;
}
#else
GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80014DE4.s")
@@ -6461,21 +6237,13 @@ void func_80015544(s32 playerId, f32 arg1, s32 cameraId, s32 pathIndex) {
void func_8001577C(Camera *camera, s32 arg1, s32 arg2, s32 cameraId) {
s16 cameraWaypoint;
s16 playerWaypoint;
- s32 stackPadding0;
+ UNUSED s32 pad;
f32 xdiff;
f32 ydiff;
f32 zdiff;
- s32 stackPadding1;
+ UNUSED s32 pad2;
s32 playerId;
- s32 stackPadding2;
- s32 stackPadding3;
- s32 stackPadding4;
- s32 stackPadding5;
- s32 stackPadding6;
- s32 stackPadding7;
- s32 stackPadding8;
- s32 stackPadding9;
- s32 stackPaddingA;
+ s32 pad3[9];
Player *player;
s32 waypointDiff;
s32 pathIndex;
@@ -7184,7 +6952,7 @@ GLOBAL_ASM("asm/non_matchings/code_80005FD0/func_80017054.s")
void func_80017720(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) {
Camera* camera = cameras + cameraId;
- s32 pad;
+ UNUSED s32 pad;
D_80164688[cameraId] = D_80163068[playerId];
gNearestWaypointByCameraId[cameraId] = gNearestWaypointByPlayerId[playerId] + 3;
@@ -7817,22 +7585,13 @@ void func_80019118(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) {
void func_8001933C(Camera *camera, s32 arg1, s32 arg2, s32 cameraId) {
s16 cameraWaypoint;
s16 playerWaypoint;
- s32 stackPadding0;
+ UNUSED s32 pad;
f32 xdiff;
f32 ydiff;
f32 zdiff;
- s32 stackPadding1;
+ UNUSED s32 pad2;
s32 playerId;
- s32 stackPadding4;
- s32 stackPadding5;
- s32 stackPadding6;
- s32 stackPadding7;
- s32 stackPadding8;
- s32 stackPadding9;
- s32 stackPaddingA;
- s32 stackPaddingB;
- s32 stackPaddingC;
- s32 stackPaddingD;
+ UNUSED s32 pad3[10];
Player *player;
TrackWaypoint *waypoint;
s32 pathIndex;
@@ -7891,7 +7650,7 @@ void func_8001969C(s32 playerId, f32 arg1, s32 cameraId, s16 pathIndex) {
}
void func_80019760(Camera *camera, s32 arg1, s32 arg2, s32 cameraId) {
- s32 stackPadding[2];
+ UNUSED s32 pad[2];
f32 xdiff;
f32 ydiff;
f32 zdiff;
@@ -8081,7 +7840,7 @@ void func_80019E58(void) {
func_80019890(0, 0);
D_80164670[0] = D_80164678[0];
D_80164678[0] = 1;
- D_80164682 = 9;
+ D_80164680[1] = 9;
func_80019890(0, 1);
D_80164670[1] = D_80164678[1];
D_80164678[1] = 0;
@@ -8221,7 +7980,7 @@ s32 func_8001A310(s32 arg0, s32 arg1) {
}
void func_8001A348(s32 cameraId, f32 arg1, s32 arg2) {
- s32 stackPadding;
+ UNUSED s32 pad;
s32 playerId;
playerId = cameras[cameraId].playerId;