diff options
| author | MegaMech <MegaMech@users.noreply.github.com> | 2023-11-07 20:17:28 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2023-11-07 20:17:28 -0700 |
| commit | f75460cb8bb193f76ae2d99afa93e1ea0b26aa2c (patch) | |
| tree | d6f3c84a36a48751c44606b6149a456cad97aa24 /src | |
| parent | b6abd829d20f8791714c0ae87ddf9e9199a2b758 (diff) | |
Matches in code_80005D0 (#487)
* Variety of matches
Diffstat (limited to 'src')
| -rw-r--r-- | src/camera.c | 10 | ||||
| -rw-r--r-- | src/code_80005FD0.c | 1215 | ||||
| -rw-r--r-- | src/code_80005FD0.h | 86 |
3 files changed, 569 insertions, 742 deletions
diff --git a/src/camera.c b/src/camera.c index ac771d37d..6cd1c5841 100644 --- a/src/camera.c +++ b/src/camera.c @@ -18,17 +18,17 @@ f32 D_800DDB30[] = { 0.4f, 0.6f, 0.275f, 0.3f }; +// Future BSS section, replaces unknown amount of stuff in bss_8001C4D0.s +// f32 D_80164A30; +// s32 D_80164A2C; +// f32 D_8016524C; <- could maybe, maybe be part of spawn_players' bss stuff? + Camera cameras[4]; Camera *camera1 = &cameras[0]; Camera *camera2 = &cameras[1]; Camera *camera3 = &cameras[2]; Camera *camera4 = &cameras[3]; -// Future BSS section, replaces unknown amount of stuff in bss_8001C4D0.s -// f32 D_80164A30; -// s32 D_80164A2C; -// f32 D_8016524C; <- could maybe, maybe be part of spawn_players' bss stuff? - extern f32 D_80164498[]; extern s16 D_80164678[]; extern f32 D_801649D8[]; // f32[4] 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; diff --git a/src/code_80005FD0.h b/src/code_80005FD0.h index 447dc11a1..a7e6f1a89 100644 --- a/src/code_80005FD0.h +++ b/src/code_80005FD0.h @@ -49,6 +49,14 @@ typedef struct { extern D_801642D8_entry D_801642D8[]; +typedef struct { + u16 unk0; + u16 unk2; + u16 unk4; + u16 unk6; +} UnkStruct_46D0; + + /* Function Prototypes */ void func_80012190(void); void func_8000BA14(u16, f32, f32, s16); @@ -128,12 +136,16 @@ void func_800107C4(s32); s16 func_80010CB0(s32, s32); void func_80010DBC(s32); void func_80010E6C(s32); -f32 func_80010F40(f32, f32, f32, s32); -f32 func_80010FA0(f32, f32, f32, s32); +f32 func_80010F40(f32, f32, f32, s32, s32); +f32 func_80010FA0(f32, f32, f32, s32, s32); -u16 func_80011014(TrackWaypoint *, TrackWaypoint *, s32, s32); +s32 func_80011014(TrackWaypoint *, TrackWaypoint *, s32, s32); s32 process_path_data(TrackWaypoint*, TrackWaypoint*); -s32 func_8001168C(void*, void*, s32); +typedef struct { + s16 x; + s16 z; +} PathNoY; +s32 func_8001168C(PathNoY*, TrackWaypoint*, s32); void func_80011A5C(void); void func_80011AB8(s32); void func_80011AE4(s32); @@ -232,13 +244,73 @@ extern s16 D_8016347A; // Suspected to be the "width" of each waypoint. See data_0DD0A0_1.s extern f32 D_800DCA4C[]; +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; + +extern uintptr_t gCoursePathTable[20][4]; +extern uintptr_t D_800DC8D0[20][4]; +// An array of 21 items. The final element is for podium ceremony. +extern struct _struct_D_800DD9D0_0x10 D_800DD9D0[]; +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 s16 D_80164538[]; +extern f32 D_80164698; +extern f32 D_8016469C; +extern f32 D_801646A0; +extern f32 D_800DCAA0[]; + + // See bss_80005FD0.s extern Collision D_80162E70; extern s16 D_80162EB0; extern s16 D_80162FCC; extern f32 D_80162FA0[]; extern f32 gCourseCompletionPercentByRank[8]; // D_80162FD8 - +extern u16 D_80163348[]; extern s16 D_80164378[]; extern s32 D_801643E0[]; extern struct unexpiredActors gUnexpiredActorsList[]; @@ -258,11 +330,7 @@ extern s16 D_80164672; extern s16 D_80164674; extern s16 D_80164676; extern s16 D_80164678[]; // Size 4? Is the three below this fake? -extern s16 D_8016467A; -extern s16 D_8016467C; -extern s16 D_8016467E; extern s16 D_80164680[]; -extern s16 D_80164682; extern f32 D_80164688[]; extern s16 D_801646C0[]; extern s16 D_801646CC; |
