Fix APC/BIGAPC wheels when player wasted equivalent cop car in previous race

This commit is contained in:
Bartosz Kurczyński 2024-12-16 20:08:12 +01:00
parent a5dfa782a4
commit c0c91bbb61
2 changed files with 35 additions and 0 deletions

View File

@ -1891,9 +1891,17 @@ void LoadCar(char* pCar_name, tDriver pDriver, tCar_spec* pCar_spec, int pOwner,
int vertex_total;
if (pDriver == eDriver_local_human) {
#if defined(DETHRACE_FIX_BUGS)
// Player's APC/BIGAPC wheels got stuck if the equivalent cop car was wasted in previous race
if (strcmp(gProgram_state.car_name, pCar_name) == 0 &&
strcmp(gProgram_state.car_name, "APC.TXT") != 0 &&
strcmp(gProgram_state.car_name, "BIGAPC.TXT") != 0)
return;
#else
if (strcmp(gProgram_state.car_name, pCar_name) == 0) {
return;
}
#endif
if (gProgram_state.car_name[0] != '\0') {
DisposeCar(&gProgram_state.current_car, gProgram_state.current_car.index);
ClearOutStorageSpace(&gOur_car_storage_space);

View File

@ -29,6 +29,7 @@
#include "utility.h"
#include "world.h"
#include <stdlib.h>
#include <string.h>
// GLOBAL: CARM95 0x00509a60
int gLast_wrong_checkpoint;
@ -500,6 +501,10 @@ void DoGame(void) {
int second_select_race;
int first_summary_done;
int i;
#if defined(DETHRACE_FIX_BUGS)
// Player's APC/BIGAPC wheels got stuck if the equivalent cop car was wasted in previous race
int power_up_levels[3];
#endif
gAbandon_game = 0;
gDisallow_abandon_race = 0;
@ -538,6 +543,28 @@ void DoGame(void) {
DoNewGameAnimation();
StartLoadingScreen();
if (gNet_mode == eNet_mode_none) {
#if defined(DETHRACE_FIX_BUGS)
// Player's APC/BIGAPC wheels got stuck if the equivalent cop car was wasted in previous race
if(strcmp(gProgram_state.car_name, "APC.TXT") == 0 ||
strcmp(gProgram_state.car_name, "BIGAPC.TXT") == 0) {
AboutToLoadFirstCar();
SwitchToRealResolution();
for (i = 0; i < COUNT_OF(power_up_levels); i++) {
power_up_levels[i] = gProgram_state.current_car.power_up_levels[i];
}
LoadCar(gOpponents[gProgram_state.cars_available[gCurrent_car_index]].car_file_name,
eDriver_local_human,
&gProgram_state.current_car,
gProgram_state.cars_available[gCurrent_car_index],
gProgram_state.player_name[gProgram_state.frank_or_anniness],
&gOur_car_storage_space);
for (i = 0; i < COUNT_OF(power_up_levels); i++) {
gProgram_state.current_car.power_up_levels[i] = power_up_levels[i];
}
SwitchToLoresMode();
SetCarStorageTexturingLevel(&gOur_car_storage_space, GetCarTexturingLevel(), eCTL_full);
}
#endif
LoadOpponentsCars(&gCurrent_race);
} else {
if (gCurrent_net_game->options.random_car_choice