Backport (de)acceleration code documentation (#414)

Co-authored-by: MegaMech <MegaMech@users.noreply.github.com>
This commit is contained in:
Maciek Baron
2025-07-04 22:18:42 +01:00
committed by GitHub
parent 3585aa7ae4
commit bbd14984a2
9 changed files with 146 additions and 146 deletions
+28 -28
View File
@@ -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);
}
}
}
+6 -6
View File
@@ -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)) {
+20 -20
View File
@@ -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);
+1 -1
View File
@@ -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
+2 -2
View File
@@ -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);
//}
+76 -76
View File
@@ -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;
}
+10 -10
View File
@@ -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);
+2 -2
View File
@@ -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;
+1 -1
View File
@@ -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[];