From bbd14984a2c61a773e29f321b214e2644ce28930 Mon Sep 17 00:00:00 2001 From: Maciek Baron <1668712+MaciekBaron@users.noreply.github.com> Date: Fri, 4 Jul 2025 22:18:42 +0100 Subject: [PATCH] Backport (de)acceleration code documentation (#414) Co-authored-by: MegaMech --- src/code_80005FD0.c | 56 +++++++-------- src/code_8003DC40.c | 12 ++-- src/effects.c | 40 +++++------ src/effects.h | 2 +- src/main.c | 4 +- src/player_controller.c | 152 ++++++++++++++++++++-------------------- src/player_controller.h | 20 +++--- src/spawn_players.c | 4 +- src/spawn_players.h | 2 +- 9 files changed, 146 insertions(+), 146 deletions(-) diff --git a/src/code_80005FD0.c b/src/code_80005FD0.c index c05617ee4..3e1143088 100644 --- a/src/code_80005FD0.c +++ b/src/code_80005FD0.c @@ -973,13 +973,13 @@ void func_80007D04(s32 playerId, Player* player) { if (val2 > 400 && val1 >= 6) { player->effects &= ~0x200000; - player_accelerate(player); + player_accelerate_alternative(player); D_801634C0[playerId] = 4; return; } } else { player->effects |= 0x200000; - player_accelerate(player); + player_accelerate_alternative(player); D_801634C0[playerId] = 3; return; } @@ -1025,19 +1025,19 @@ void func_80007D04(s32 playerId, Player* player) { if (temp_t2 < temp_t1) { player->effects |= 0x200000; - player_accelerate(player); + player_accelerate_alternative(player); D_801634C0[playerId] = 1; } else if (temp_t2 < (temp_t1 + var_v0 + 0x32)) { player->effects &= ~0x200000; - player_accelerate(player); + player_accelerate_alternative(player); D_801634C0[playerId] = 3; } else if (D_801631E0[playerId] == 0) { player->effects &= ~0x200000; - player_accelerate(player); + player_accelerate_alternative(player); D_801634C0[playerId] = 2; } else { player->effects &= ~0x200000; - player_decelerate(player, 1.0f); + player_decelerate_alternative(player, 1.0f); D_801634C0[playerId] = -1; } } @@ -1054,35 +1054,35 @@ void func_80007FA4(s32 arg0, Player* player, f32 arg2) { if (arg0 == 3) { if ((temp_f12 < 25.0f) && (D_80163410[arg0] < 5)) { D_80163410[arg0] = 4; - (arg2 < ((2.0 * 18.0) / 216.0)) ? func_80038BE4(player, 1) : player_decelerate(player, 1.0f); + (arg2 < ((2.0 * 18.0) / 216.0)) ? func_80038BE4(player, 1) : player_decelerate_alternative(player, 1.0f); } else if ((temp_f12 < 3600.0f) && (D_80163410[arg0] < 4)) { D_80163410[arg0] = 3; - (arg2 < ((5.0 * 18.0) / 216.0)) ? func_80038BE4(player, 1) : player_decelerate(player, 5.0f); + (arg2 < ((5.0 * 18.0) / 216.0)) ? func_80038BE4(player, 1) : player_decelerate_alternative(player, 5.0f); } else { - (arg2 < ((20.0 * 18.0) / 216.0)) ? func_80038BE4(player, 10) : player_decelerate(player, 1.0f); + (arg2 < ((20.0 * 18.0) / 216.0)) ? func_80038BE4(player, 10) : player_decelerate_alternative(player, 1.0f); } } else { if ((temp_f12 < 25.0f) && (D_80163410[arg0] < 5)) { D_80163410[arg0] = 4; test = 2; - (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 1) : player_decelerate(player, 1.0f); + (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 1) : player_decelerate_alternative(player, 1.0f); } else if ((temp_f12 < 4900.0f) && (D_80163410[arg0] < 4)) { D_80163410[arg0] = 3; test = 5; - (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 1) : player_decelerate(player, 15.0f); + (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 1) : player_decelerate_alternative(player, 15.0f); } else if ((temp_f12 < 22500.0f) && (D_80163410[arg0] < 3)) { D_80163410[arg0] = 2; test = 20; - (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 5) : player_decelerate(player, 1.0f); + (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 5) : player_decelerate_alternative(player, 1.0f); } else if ((temp_f12 < 90000.0f) && (D_80163410[arg0] < 2)) { D_80163410[arg0] = 1; test = 30; - (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 6) : player_decelerate(player, 1.0f); + (arg2 < ((test * 18.0) / 216.0)) ? func_80038BE4(player, 6) : player_decelerate_alternative(player, 1.0f); } else if (D_80163410[arg0] == 0) { test = 35; - (arg2 < (((test ^ 0) * 18.0) / 216.0)) ? func_80038BE4(player, 2) : player_decelerate(player, 1.0f); + (arg2 < (((test ^ 0) * 18.0) / 216.0)) ? func_80038BE4(player, 2) : player_decelerate_alternative(player, 1.0f); } else { - player_decelerate(player, 1.0f); + player_decelerate_alternative(player, 1.0f); } } } @@ -1100,7 +1100,7 @@ void regulate_cpu_speed(s32 playerId, f32 targetSpeed, Player* player) { if (IsPodiumCeremony()) { func_80007FA4(playerId, player, var_f2); } else if ((bStopAICrossing[playerId] == 1) && !(player->effects & (STAR_EFFECT | BOO_EFFECT))) { - player_decelerate(player, 10.0f); + player_decelerate_alternative(player, 10.0f); if (player->currentSpeed == 0.0) { player->velocity[0] = 0.0f; player->velocity[2] = 0.0f; @@ -1120,34 +1120,34 @@ void regulate_cpu_speed(s32 playerId, f32 targetSpeed, Player* player) { } if (var_f2 < var_f0) { player->effects &= ~0x00200000; - player_accelerate(player); + player_accelerate_alternative(player); } else if (player->type & 0x800) { if (var_f2 < targetSpeed) { player->effects &= ~0x00200000; - player_accelerate(player); + player_accelerate_alternative(player); } else { player->effects &= ~0x00200000; - player_decelerate(player, 1.0f); + player_decelerate_alternative(player, 1.0f); } } else if ((D_801631E0[playerId] == 1) && (D_80163330[playerId] != 1)) { if (func_800088D8(playerId, gLapCountByPlayerId[playerId], gGPCurrentRaceRankByPlayerIdDup[playerId]) == 1) { player->effects |= 0x200000; - player_accelerate(player); + player_accelerate_alternative(player); } else { player->effects &= ~0x00200000; - player_decelerate(player, 1.0f); + player_decelerate_alternative(player, 1.0f); } } else { var_a1 = 1; switch (gSpeedCPUBehaviour[playerId]) { /* switch 1; irregular */ case SPEED_CPU_BEHAVIOUR_FAST: /* switch 1 */ player->effects &= ~0x00200000; - player_accelerate(player); + player_accelerate_alternative(player); break; case SPEED_CPU_BEHAVIOUR_MAX: /* switch 1 */ player->effects |= 0x200000; - player_accelerate(player); + player_accelerate_alternative(player); break; case SPEED_CPU_BEHAVIOUR_SLOW: /* switch 1 */ if (((var_f2 / 18.0f) * 216.0f) > 20.0f) { @@ -1163,23 +1163,23 @@ void regulate_cpu_speed(s32 playerId, f32 targetSpeed, Player* player) { if (var_a1 != 1) { if (var_f2 < targetSpeed) { if ((gDemoMode == 1) && (!IsPodiumCeremony())) { - player_accelerate(player); + player_accelerate_alternative(player); } else if (D_80163330[playerId] == 1) { func_80007D04(playerId, player); } else if (func_800088D8(playerId, gLapCountByPlayerId[playerId], gGPCurrentRaceRankByPlayerIdDup[playerId]) == 1) { player->effects |= 0x200000; - player_accelerate(player); + player_accelerate_alternative(player); } else { player->effects &= ~0x00200000; - player_decelerate(player, 1.0f); + player_decelerate_alternative(player, 1.0f); } } else { player->effects &= ~0x00200000; if (targetSpeed > 1.0f) { - player_decelerate(player, 2.0f); + player_decelerate_alternative(player, 2.0f); } else { - player_decelerate(player, 5.0f); + player_decelerate_alternative(player, 5.0f); } } } diff --git a/src/code_8003DC40.c b/src/code_8003DC40.c index 093c5b2ef..47fcf98c5 100644 --- a/src/code_8003DC40.c +++ b/src/code_8003DC40.c @@ -69,7 +69,7 @@ void func_8003E048(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4 if (player->collision.orientationVector[1] <= 0.8829f) { arg3[0] = ((player->unk_206 / 182) * 0xB4); arg3[2] = (-(player->slopeAccel / 182) * 0xB4); - player_decelerate(player, 4.0f); + player_decelerate_alternative(player, 4.0f); player->unk_DAC = 0.5f; if ((player->effects & BOOST_EFFECT) != 0) { remove_boost_effect(player); @@ -96,7 +96,7 @@ void func_8003E37C(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4 arg3[0] = ((player->unk_206 / 182) * 0xB4); arg3[2] = (-(player->slopeAccel / 182) * 0xB4); if (((player->speed / 18.0f) * 216.0f) >= 8.0f) { - player_decelerate(player, 5.0f); + player_decelerate_alternative(player, 5.0f); } player->unk_DAC = 0.5f; if ((player->effects & BOOST_EFFECT) != 0) { @@ -123,7 +123,7 @@ void func_8003E6EC(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4 if (player->collision.orientationVector[1] <= 0.8829f) { arg3[0] = ((player->unk_206 / 182) * 0xB4); arg3[2] = (-(player->slopeAccel / 182) * 0xB4); - player_decelerate(player, 4.0f); + player_decelerate_alternative(player, 4.0f); func_8003DC40(player); } else if ((((player->speed / 18.0f) * 216.0f) > 20.0f) || ((player->effects & 0x10000) == 0x10000)) { arg3[0] = ((player->unk_206 / 182) * 0x32); @@ -144,7 +144,7 @@ void func_8003E9EC(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4 if (player->collision.orientationVector[1] <= 0.8357f) { arg3[0] = ((player->unk_206 / 182) * 0x78); arg3[2] = (-(player->slopeAccel / 182) * 0xB4); - player_decelerate(player, 4.0f); + player_decelerate_alternative(player, 4.0f); func_8003DC40(player); } else { if ((((player->speed / 18.0f) * 216.0f) > 20.0f) || ((player->effects & 0x10000) == 0x10000)) { @@ -178,7 +178,7 @@ void func_8003EE2C(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4 if (player->collision.orientationVector[1] <= 0.8357f) { arg3[0] = ((player->unk_206 / 182) * 0x78); arg3[2] = (-(player->slopeAccel / 182) * 0xB4); - player_decelerate(player, 4.0f); + player_decelerate_alternative(player, 4.0f); func_8003DC40(player); } else if ((((player->speed / 18.0f) * 216.0f) > 20.0f) || ((player->effects & 0x10000) == 0x10000)) { arg3[0] = ((player->unk_206 / 182) * 0x32); @@ -202,7 +202,7 @@ void func_8003F138(Player* player, Vec3f arg1, Vec3f arg2, Vec3f arg3, f32* arg4 if (player->collision.orientationVector[1] <= 0.8357f) { arg3[0] = ((player->unk_206 / 182) * 0xC8); arg3[2] = (-(player->slopeAccel / 182) * 0xC8); - player_decelerate(player, 4.0f); + player_decelerate_alternative(player, 4.0f); player->unk_DAC = 0.5f; arg3[0] = 0; } else if ((((player->speed / 18.0f) * 216.0f) > 20.0f) || ((player->effects & 0x10000) == 0x10000)) { diff --git a/src/effects.c b/src/effects.c index 1f972ad67..da9b8b659 100644 --- a/src/effects.c +++ b/src/effects.c @@ -221,7 +221,7 @@ void func_8008C528(Player* player, s8 arg1) { void func_8008C62C(Player* player, s8 arg1) { - player_decelerate(player, 5.0f); + player_decelerate_alternative(player, 5.0f); player->unk_0A8 += (s16) 0xA0; player->unk_042 += (s16) 0x71C; if (player->unk_0A8 >= 0x2000) { @@ -255,8 +255,8 @@ void func_8008C6D0(Player* player, s8 arg1) { player->unk_042 = 0; } -void func_8008C73C(Player* player, s8 arg1) { - clean_effect(player, arg1); +void func_8008C73C(Player* player, s8 playerIndex) { + clean_effect(player, playerIndex); if (((player->effects & 0x80) != 0x80) && ((player->effects & 0x40) != 0x40)) { player->effects &= ~0x10; @@ -270,22 +270,22 @@ void func_8008C73C(Player* player, s8 arg1) { // clang-format off player->unk_0C0 = 0; player->unk_07C = 0; player->unk_078 = 0; player->unk_0AE = player->rotation[1]; player->unk_0B2 = 2; // clang-format on - D_80165190[0][arg1] = 1; - D_80165190[1][arg1] = 1; - D_80165190[2][arg1] = 1; - D_80165190[3][arg1] = 1; - D_80165280[arg1] = player->currentSpeed; - gTimerBoostTripleACombo[arg1] = 0; - gIsPlayerTripleAButtonCombo[arg1] = false; - gCountASwitch[arg1] = 0; - gFrameSinceLastACombo[arg1] = 0; - D_8018D920[arg1] = 0; + D_80165190[0][playerIndex] = 1; + D_80165190[1][playerIndex] = 1; + D_80165190[2][playerIndex] = 1; + D_80165190[3][playerIndex] = 1; + gPlayerCurrentSpeed[playerIndex] = player->currentSpeed; + gTimerBoostTripleACombo[playerIndex] = 0; + gIsPlayerTripleAButtonCombo[playerIndex] = false; + gCountASwitch[playerIndex] = 0; + gFrameSinceLastACombo[playerIndex] = 0; + D_8018D920[playerIndex] = 0; if (((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_INVISIBLE_OR_BOMB) != PLAYER_INVISIBLE_OR_BOMB)) { - func_800C90F4(arg1, (player->characterId * 0x10) + 0x29008003); + func_800C90F4(playerIndex, (player->characterId * 0x10) + 0x29008003); } else { - play_cpu_sound_effect(arg1, player); + play_cpu_sound_effect(playerIndex, player); } } } @@ -323,15 +323,15 @@ void func_8008C9EC(Player* player, s8 arg1) { player->unk_206 = 0; player->slopeAccel = 0; if ((player->unk_046 & 0x40) == 0x40) { - player_decelerate(player, 100.0f); + player_decelerate_alternative(player, 100.0f); } else { if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) { - player_decelerate(player, 1.0f); + player_decelerate_alternative(player, 1.0f); } else { - player_decelerate(player, 4.0f); + player_decelerate_alternative(player, 4.0f); } if (!(player->type & PLAYER_HUMAN)) { - player_decelerate(player, 30.0f); + player_decelerate_alternative(player, 30.0f); } } if ((player->effects & 0x80) == 0x80) { @@ -893,7 +893,7 @@ void apply_lightning_effect(Player* player, s8 arg1) { D_80165190[3][arg1] = 1; } } - player_decelerate(player, 1.0f); + player_decelerate_alternative(player, 1.0f); } else { player->unk_0B0 += 1; player->unk_08C = (f32) ((f64) player->unk_08C * 0.6); diff --git a/src/effects.h b/src/effects.h index d89adb9db..99b80ecc5 100644 --- a/src/effects.h +++ b/src/effects.h @@ -141,7 +141,7 @@ extern f32 D_800E3790[]; extern f32 D_800E37D0[]; extern f32 D_800E37F0[]; extern s16 D_80165190[4][8]; -extern f32 D_80165280[]; +extern f32 gPlayerCurrentSpeed[]; extern s32 gFrameSinceLastACombo[]; #endif diff --git a/src/main.c b/src/main.c index b2590c291..0db07e4e0 100644 --- a/src/main.c +++ b/src/main.c @@ -756,7 +756,7 @@ void process_game_tick(void) { } func_802909F0(); evaluate_collision_for_players_and_actors(); - func_800382DC(); + handle_a_press_for_all_players_during_race(); } @@ -768,7 +768,7 @@ void process_game_tick(void) { //if (CVarGetInteger("gFreecam", 0) == true) { // freecam(gFreecamCamera, gPlayerOneCopy, 0); //} else { - + //func_8001EE98(gPlayerOneCopy, camera1, 0); //} diff --git a/src/player_controller.c b/src/player_controller.c index bfb791f11..421581d06 100644 --- a/src/player_controller.c +++ b/src/player_controller.c @@ -1883,7 +1883,7 @@ void func_8002C954(Player* player, s8 playerId, Vec3f arg2) { player->unk_256 = 0; } if ((player->slopeAccel >= 0) && (((player->speed / 18.0f) * 216.0f) > 5.0f)) { - player_decelerate(player, 18.0f); + player_decelerate_alternative(player, 18.0f); } if ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) { xdist = gPlayerLastVelocity[playerId][0] - arg2[0]; @@ -1947,7 +1947,7 @@ void apply_effect(Player* player, s8 arg1, s8 arg2) { apply_boo_effect(player, arg1); } if (((player->effects & 0x20000000) == 0x20000000) && (player->unk_228 >= 0x64)) { - player_decelerate(player, 4.0f); + player_decelerate_alternative(player, 4.0f); } if (((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40)) { func_8008C9EC(player, arg1); @@ -1969,7 +1969,7 @@ void apply_effect(Player* player, s8 arg1, s8 arg2) { } if ((player->effects & 0x800000) == 0x800000) { func_8008D8B4(player, arg1); - player_decelerate(player, 10.0f); + player_decelerate_alternative(player, 10.0f); } if (gRaceState != RACE_FINISHED) { if (player->soundEffects & 0x04000000) { @@ -2547,13 +2547,13 @@ void func_8002E594(Player* player, UNUSED Camera* camera, s8 screenId, s8 player if (sp74 < 0.0f) { func_8003F734(player, sp48, sp54, &sp74, &spD0, &spCC, &spC8); func_8002C954(player, playerId, sp54); - player_decelerate(player, 6.0f); + player_decelerate_alternative(player, 6.0f); } sp74 = player->collision.surfaceDistance[1]; if (sp74 < 0.0f) { func_8003FBAC(player, sp48, sp54, &sp74, &spD0, &spCC, &spC8); func_8002C954(player, playerId, sp54); - player_decelerate(player, 6.0f); + player_decelerate_alternative(player, 6.0f); } sp74 = player->collision.surfaceDistance[0]; if (sp74 >= 0.0f) { @@ -3199,7 +3199,7 @@ void detect_triple_a_combo_a_pressed(Player* player) { } } -void player_accelerate(Player* player) { +void player_accelerate_alternative(Player* player) { s32 player_index; player_index = get_player_index_for_player(player); @@ -3312,7 +3312,7 @@ void player_accelerate(Player* player) { } } -void player_decelerate(Player* player, f32 speed) { +void player_decelerate_alternative(Player* player, f32 speed) { s32 player_index; player_index = get_player_index_for_player(player); @@ -3491,7 +3491,7 @@ void func_800323E4(Player* player) { player->effects |= 1; // This check will never be true, why is it here? if ((player->effects & 0x20) == 0x20) { - player_decelerate(player, 1.0f); + player_decelerate_alternative(player, 1.0f); player->unk_20C = var_f2; } else { if ((s32) player->tyres[BACK_RIGHT].surfaceType < 0xF) { @@ -3511,24 +3511,24 @@ void func_800323E4(Player* player) { } if (gIsPlayerTripleBButtonCombo[var_v1] == true) { if (player->unk_20C >= 2.0f) { - player_decelerate(player, (1.0f - var_f2) * 5.0f); + player_decelerate_alternative(player, (1.0f - var_f2) * 5.0f); } else { - player_decelerate(player, (1.0f - var_f2) * 3.0f); + player_decelerate_alternative(player, (1.0f - var_f2) * 3.0f); } } else { if (((player->speed / 18.0f) * 216.0f) <= 20.0f) { - player_decelerate(player, (1.0f - var_f2) * 4.0f); + player_decelerate_alternative(player, (1.0f - var_f2) * 4.0f); } if (player->unk_20C >= 2.0f) { - player_decelerate(player, (1.0f - var_f2) * 2.5); + player_decelerate_alternative(player, (1.0f - var_f2) * 2.5); } else { - player_decelerate(player, (1.0f - var_f2) * 1.2); + player_decelerate_alternative(player, (1.0f - var_f2) * 1.2); } } } } -void func_80032700(Player* player) { +void player_accelerate_during_start_sequence(Player* player) { s32 temp_v0; s32 var_v0; s32 test; @@ -3584,8 +3584,8 @@ void func_80032700(Player* player) { player->unk_098 = (player->currentSpeed * player->currentSpeed) / 25.0f; } -void func_80032CB0(Player* player, f32 arg1) { - player->currentSpeed -= arg1; +void player_decelerate_during_start_sequence(Player* player, f32 speedReduction) { + player->currentSpeed -= speedReduction; if (player->currentSpeed <= 0.0f) { player->currentSpeed = 0.0f; } @@ -3603,7 +3603,7 @@ void func_80032CB0(Player* player, f32 arg1) { player->unk_098 = (player->currentSpeed * player->currentSpeed) / 25.0f; } -void func_80032D94(Player* player) { +void player_accelerate(Player* player) { UNUSED s32 player_index; player_index = get_player_index_for_player(player); @@ -3643,8 +3643,8 @@ void func_80032D94(Player* player) { player->unk_098 = (player->currentSpeed * player->currentSpeed) / 25.0f; } -void func_80033280(Player* player, f32 arg1) { - player->currentSpeed -= arg1; +void player_decelerate(Player* player, f32 speedReduction) { + player->currentSpeed -= speedReduction; if (player->currentSpeed <= 0.0f) { player->currentSpeed = 0.0f; } @@ -3654,54 +3654,54 @@ void func_80033280(Player* player, f32 arg1) { player->unk_098 = (player->currentSpeed * player->currentSpeed) / 25.0f; } -void func_800332E8(Player* player, s32 arg1) { - if ((D_80165280[arg1] >= 0.0) && (D_80165280[arg1] < ((f64) player->topSpeed * 0.1))) { - D_80165280[arg1] += gKartAccelerationTables[player->characterId][0] * 3.2; +void player_accelerate_global(Player* player, s32 playerIndex) { + if ((gPlayerCurrentSpeed[playerIndex] >= 0.0) && (gPlayerCurrentSpeed[playerIndex] < ((f64) player->topSpeed * 0.1))) { + gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][0] * 3.2; } - if (((player->topSpeed * 0.1) <= D_80165280[arg1]) && (D_80165280[arg1] < (player->topSpeed * 0.2))) { - D_80165280[arg1] += gKartAccelerationTables[player->characterId][1] * 3.2; + if (((player->topSpeed * 0.1) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] < (player->topSpeed * 0.2))) { + gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][1] * 3.2; } - if (((player->topSpeed * 0.2) <= D_80165280[arg1]) && (D_80165280[arg1] < (player->topSpeed * 0.3))) { - D_80165280[arg1] += gKartAccelerationTables[player->characterId][2] * 3.2; + if (((player->topSpeed * 0.2) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] < (player->topSpeed * 0.3))) { + gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][2] * 3.2; } - if (((player->topSpeed * 0.3) <= D_80165280[arg1]) && (D_80165280[arg1] < (player->topSpeed * 0.4))) { - D_80165280[arg1] += gKartAccelerationTables[player->characterId][3] * 3.2; + if (((player->topSpeed * 0.3) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] < (player->topSpeed * 0.4))) { + gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][3] * 3.2; } - if (((player->topSpeed * 0.4) <= D_80165280[arg1]) && (D_80165280[arg1] < (player->topSpeed * 0.5))) { - D_80165280[arg1] += gKartAccelerationTables[player->characterId][4] * 3.2; + if (((player->topSpeed * 0.4) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] < (player->topSpeed * 0.5))) { + gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][4] * 3.2; } - if (((player->topSpeed * 0.5) <= D_80165280[arg1]) && (D_80165280[arg1] < (player->topSpeed * 0.6))) { - D_80165280[arg1] += gKartAccelerationTables[player->characterId][5] * 3.2; + if (((player->topSpeed * 0.5) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] < (player->topSpeed * 0.6))) { + gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][5] * 3.2; } - if (((player->topSpeed * 0.6) <= D_80165280[arg1]) && (D_80165280[arg1] < (player->topSpeed * 0.7))) { - D_80165280[arg1] += gKartAccelerationTables[player->characterId][6] * 3.2; + if (((player->topSpeed * 0.6) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] < (player->topSpeed * 0.7))) { + gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][6] * 3.2; } - if (((player->topSpeed * 0.7) <= D_80165280[arg1]) && (D_80165280[arg1] < (player->topSpeed * 0.8))) { - D_80165280[arg1] += gKartAccelerationTables[player->characterId][7] * 2.8; + if (((player->topSpeed * 0.7) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] < (player->topSpeed * 0.8))) { + gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][7] * 2.8; } - if (((player->topSpeed * 0.8) <= D_80165280[arg1]) && (D_80165280[arg1] < (player->topSpeed * 0.9))) { - D_80165280[arg1] += gKartAccelerationTables[player->characterId][8] * 2.8; + if (((player->topSpeed * 0.8) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] < (player->topSpeed * 0.9))) { + gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][8] * 2.8; } - if (((player->topSpeed * 0.9) <= D_80165280[arg1]) && (D_80165280[arg1] <= (player->topSpeed * 1.0))) { - D_80165280[arg1] += gKartAccelerationTables[player->characterId][9] * 2.8; + if (((player->topSpeed * 0.9) <= gPlayerCurrentSpeed[playerIndex]) && (gPlayerCurrentSpeed[playerIndex] <= (player->topSpeed * 1.0))) { + gPlayerCurrentSpeed[playerIndex] += gKartAccelerationTables[player->characterId][9] * 2.8; } player->unk_044 |= 0x20; - if (D_80165280[arg1] < 0.0f) { - D_80165280[arg1] = 0.0f; + if (gPlayerCurrentSpeed[playerIndex] < 0.0f) { + gPlayerCurrentSpeed[playerIndex] = 0.0f; } - player->unk_098 = (D_80165280[arg1] * D_80165280[arg1]) / 25.0f; + player->unk_098 = (gPlayerCurrentSpeed[playerIndex] * gPlayerCurrentSpeed[playerIndex]) / 25.0f; } -void func_800337CC(Player* player, f32 arg1, s32 arg2) { +void player_decelerate_global(Player* player, f32 speedReduction, s32 playerIndex) { player->unk_044 &= ~0x20; - D_80165280[arg2] -= arg1; - if (D_80165280[arg2] <= 0.0f) { - D_80165280[arg2] = 0.0f; + gPlayerCurrentSpeed[playerIndex] -= speedReduction; + if (gPlayerCurrentSpeed[playerIndex] <= 0.0f) { + gPlayerCurrentSpeed[playerIndex] = 0.0f; } - if (player->topSpeed <= D_80165280[arg2]) { - D_80165280[arg2] = player->topSpeed; + if (player->topSpeed <= gPlayerCurrentSpeed[playerIndex]) { + gPlayerCurrentSpeed[playerIndex] = player->topSpeed; } - player->unk_098 = (D_80165280[arg2] * D_80165280[arg2]) / 25.0f; + player->unk_098 = (gPlayerCurrentSpeed[playerIndex] * gPlayerCurrentSpeed[playerIndex]) / 25.0f; } void func_80033850(Player* player, f32 arg1) { @@ -4519,13 +4519,13 @@ void func_80037CFC(Player* player, struct Controller* controller, s8 arg2) { } if ((player->unk_044 & 1) != 1) { if (controller->button & A_BUTTON) { - player_accelerate(player); + player_accelerate_alternative(player); detect_triple_a_combo_a_pressed(player); } else { if (gModeSelection == BATTLE) { - player_decelerate(player, 2.0f); + player_decelerate_alternative(player, 2.0f); } else { - player_decelerate(player, 1.0f); + player_decelerate_alternative(player, 1.0f); } detect_triple_a_combo_a_released(player); } @@ -4555,9 +4555,9 @@ void func_80037CFC(Player* player, struct Controller* controller, s8 arg2) { } else { if ((player->effects & 0x4000) == 0x4000) { if (controller->button & A_BUTTON) { - player_accelerate(player); + player_accelerate_alternative(player); } else { - player_decelerate(player, 5.0f); + player_decelerate_alternative(player, 5.0f); } } if (((((player->effects & 0x80) == 0x80) || ((player->effects & 0x40) == 0x40)) || @@ -4565,24 +4565,24 @@ void func_80037CFC(Player* player, struct Controller* controller, s8 arg2) { ((player->effects & HIT_BY_ITEM_EFFECT) == HIT_BY_ITEM_EFFECT)) { if (controller->button & A_BUTTON) { detect_triple_a_combo_a_pressed(player); - func_800332E8(player, arg2); + player_accelerate_global(player, arg2); return; } detect_triple_a_combo_a_released(player); - func_800337CC(player, 5.0f, arg2); + player_decelerate_global(player, 5.0f, arg2); } } } -void func_800381AC(Player* player, struct Controller* controller, s8 arg2) { +void handle_a_press_for_player_during_race(Player* player, struct Controller* controller, s8 arg2) { if (((player->type & PLAYER_EXISTS) == PLAYER_EXISTS) && ((player->type & PLAYER_HUMAN) == PLAYER_HUMAN) && ((player->type & PLAYER_CPU) != PLAYER_CPU)) { if ((player->type & PLAYER_START_SEQUENCE) != PLAYER_START_SEQUENCE) { if (((player->unk_0CA & 2) == 2) || ((player->unk_0CA & 8) == 8)) { if (controller->button & A_BUTTON) { - func_80032D94(player); + player_accelerate(player); } else { - func_80033280(player, 5.0f); + player_decelerate(player, 5.0f); } } else { func_80037CFC(player, controller, arg2); @@ -4595,15 +4595,15 @@ void func_800381AC(Player* player, struct Controller* controller, s8 arg2) { } } if (controller->button & A_BUTTON) { - func_80032700(player); + player_accelerate_during_start_sequence(player); } else { - func_80032CB0(player, 5.0f); + player_decelerate_during_start_sequence(player, 5.0f); } } } } -void func_800382DC(void) { +void handle_a_press_for_all_players_during_race(void) { u16 temp_v0_3; u16 temp_v0_4; u16 temp_v0_5; @@ -4613,31 +4613,31 @@ void func_800382DC(void) { case SCREEN_MODE_1P: switch (gModeSelection) { case GRAND_PRIX: - func_800381AC(gPlayerOne, gControllerOne, 0); + handle_a_press_for_player_during_race(gPlayerOne, gControllerOne, 0); return; case TIME_TRIALS: if (D_8015F890 != 1) { - func_800381AC(gPlayerOne, gControllerOne, 0); + handle_a_press_for_player_during_race(gPlayerOne, gControllerOne, 0); temp_v0_3 = gPlayerTwo->type; if (((temp_v0_3 & 0x100) == 0x100) && ((temp_v0_3 & 0x800) != 0x800)) { - func_800381AC(gPlayerTwo, gControllerSix, 1); + handle_a_press_for_player_during_race(gPlayerTwo, gControllerSix, 1); } temp_v0_4 = gPlayerThree->type; if (((temp_v0_4 & 0x100) == 0x100) && ((temp_v0_4 & 0x800) != 0x800)) { - func_800381AC(gPlayerThree, gControllerSeven, 2); + handle_a_press_for_player_during_race(gPlayerThree, gControllerSeven, 2); return; } } else { if ((gPlayerOne->type & 0x800) != 0x800) { - func_800381AC(gPlayerOne, gControllerEight, 0); + handle_a_press_for_player_during_race(gPlayerOne, gControllerEight, 0); } temp_v0_5 = gPlayerTwo->type; if (((temp_v0_5 & 0x100) == 0x100) && ((temp_v0_5 & 0x800) != 0x800)) { - func_800381AC(gPlayerTwo, gControllerSix, 1); + handle_a_press_for_player_during_race(gPlayerTwo, gControllerSix, 1); } temp_v0_6 = gPlayerThree->type; if (((temp_v0_6 & 0x100) == 0x100) && ((temp_v0_6 & 0x800) != 0x800)) { - func_800381AC(gPlayerThree, gControllerSeven, 2); + handle_a_press_for_player_during_race(gPlayerThree, gControllerSeven, 2); return; } return; @@ -4648,15 +4648,15 @@ void func_800382DC(void) { break; case SCREEN_MODE_2P_SPLITSCREEN_HORIZONTAL: case SCREEN_MODE_2P_SPLITSCREEN_VERTICAL: - func_800381AC(gPlayerOne, gControllerOne, 0); - func_800381AC(gPlayerTwo, gControllerTwo, 1); + handle_a_press_for_player_during_race(gPlayerOne, gControllerOne, 0); + handle_a_press_for_player_during_race(gPlayerTwo, gControllerTwo, 1); return; case SCREEN_MODE_3P_4P_SPLITSCREEN: - func_800381AC(gPlayerOne, gControllerOne, 0); - func_800381AC(gPlayerTwo, gControllerTwo, 1); - func_800381AC(gPlayerThree, gControllerThree, 2); + handle_a_press_for_player_during_race(gPlayerOne, gControllerOne, 0); + handle_a_press_for_player_during_race(gPlayerTwo, gControllerTwo, 1); + handle_a_press_for_player_during_race(gPlayerThree, gControllerThree, 2); if (gPlayerCountSelection1 == 4) { - func_800381AC(gPlayerFour, gControllerFour, 3); + handle_a_press_for_player_during_race(gPlayerFour, gControllerFour, 3); } break; } diff --git a/src/player_controller.h b/src/player_controller.h index d8d60356c..57bb03395 100644 --- a/src/player_controller.h +++ b/src/player_controller.h @@ -73,17 +73,17 @@ f32 func_80030150(Player*, s8); void func_80030A34(Player*); void detect_triple_a_combo_a_released(Player*); void detect_triple_a_combo_a_pressed(Player*); -void player_accelerate(Player*); -void player_decelerate(Player*, f32); +void player_accelerate_alternative(Player*); +void player_decelerate_alternative(Player*, f32); void detect_triple_b_combo_b_released(Player*); void detect_triple_b_combo_b_pressed(Player*); void func_800323E4(Player*); -void func_80032700(Player*); -void func_80032CB0(Player*, f32); -void func_80032D94(Player*); -void func_80033280(Player*, f32); -void func_800332E8(Player*, s32); -void func_800337CC(Player*, f32, s32); +void player_accelerate_during_start_sequence(Player*); +void player_decelerate_during_start_sequence(Player*, f32); +void player_accelerate(Player*); +void player_decelerate(Player*, f32); +void player_accelerate_global(Player*, s32); +void player_decelerate_global(Player*, f32, s32); void func_80033850(Player*, f32); void func_80033884(Player*, s32*, s32*, s32, s32, s32, s32); void func_80033940(Player*, s32*, s32, s32, f32); @@ -104,8 +104,8 @@ void func_80037A4C(Player*, Vec3f, Vec3f); void func_80037BB4(Player* player, Vec3f); void func_80037CFC(Player*, struct Controller*, s8); -void func_800381AC(Player*, struct Controller*, s8); -void func_800382DC(void); +void handle_a_press_for_player_during_race(Player*, struct Controller*, s8); +void handle_a_press_for_all_players_during_race(void); s16 func_80038534(struct Controller*); s16 func_800388B0(struct Controller*); void func_80038BE4(Player*, s16); diff --git a/src/spawn_players.c b/src/spawn_players.c index 816e6566b..30fe754b7 100644 --- a/src/spawn_players.c +++ b/src/spawn_players.c @@ -32,7 +32,7 @@ f32 D_80165210[8]; f32 D_80165230[8]; UNUSED f32 D_80165250[8]; s16 D_80165270[8]; -f32 D_80165280[8]; +f32 gPlayerCurrentSpeed[8]; f32 D_801652A0[8]; s32 D_801652C0[8]; s32 D_801652E0[8]; @@ -303,7 +303,7 @@ void spawn_player(Player* player, s8 playerIndex, f32 startingRow, f32 startingC gPlayerLastVelocity[playerIndex][0] = 0.0f; gPlayerLastVelocity[playerIndex][1] = 0.0f; gPlayerLastVelocity[playerIndex][2] = 0.0f; - D_80165280[playerIndex] = 0.0f; + gPlayerCurrentSpeed[playerIndex] = 0.0f; D_801652A0[playerIndex] = 0.0f; gPlayerIsThrottleActive[playerIndex] = 0; D_80165400[playerIndex] = 0; diff --git a/src/spawn_players.h b/src/spawn_players.h index dc5baa0e0..e0c474bd4 100644 --- a/src/spawn_players.h +++ b/src/spawn_players.h @@ -28,7 +28,7 @@ void func_8003DB5C(void); extern f32 D_80165210[]; extern f32 D_80165230[]; extern s16 D_80165270[]; -extern f32 D_80165280[]; +extern f32 gPlayerCurrentSpeed[]; extern f32 D_801652A0[]; extern s32 D_801652C0[]; extern s32 D_801652E0[];