#include "main.h"
#include <stdlib.h>
#include "controls.h"
#include "cutscene.h"
#include "drmem.h"
#include "errors.h"
#include "globvars.h"
#include "globvrpb.h"
#include "graphics.h"
#include "harness/config.h"
#include "harness/trace.h"
#include "init.h"
#include "input.h"
#include "loading.h"
#include "loadsave.h"
#include "network.h"
#include "pd/sys.h"
#include "s3/s3.h"
#include "sound.h"
#include "structur.h"
#include "utility.h"
// IDA: void __cdecl QuitGame()
void QuitGame(void) {
LOG_TRACE("()");
if (harness_game_info.mode == eGame_carmageddon_demo || harness_game_info.mode == eGame_splatpack_demo || harness_game_info.mode == eGame_splatpack_xmas_demo) {
DoDemoGoodbye();
}
gProgram_state.racing = 0;
SaveOptions();
if (gNet_mode != eNet_mode_none) {
NetLeaveGame(gCurrent_net_game);
}
ShutdownNetIfRequired();
if (gSound_available) {
DRS3ShutDown();
}
if (gBr_initialized) {
ClearEntireScreen();
}
PDRevertPalette();
StopMusic();
PDShutdownSystem();
CloseDiagnostics();
}
// IDA: tU32 __cdecl TrackCount(br_actor *pActor, tU32 *pCount)
tU32 TrackCount(br_actor* pActor, tU32* pCount) {
//unsigned int x; // Pierre-Marie Baty -- unused variable
//unsigned int z; // Pierre-Marie Baty -- unused variable
//int ad; // Pierre-Marie Baty -- unused variable
//float e; // Pierre-Marie Baty -- unused variable
LOG_TRACE("(%p, %p)", pActor, pCount);
NOT_IMPLEMENTED();
}
// IDA: void __cdecl CheckNumberOfTracks()
void CheckNumberOfTracks(void) {
//tU32 track_count; // Pierre-Marie Baty -- unused variable
LOG_TRACE("()");
NOT_IMPLEMENTED();
}
// IDA: void __usercall ServiceTheGame(int pRacing@<EAX>)
void ServiceTheGame(int pRacing) {
CheckMemory();
if (!pRacing) {
CyclePollKeys();
}
PollKeys();
if (PDServiceSystem(gFrame_period)) {
QuitGame();
}
if (!pRacing) {
CheckSystemKeys(0);
}
if (!pRacing && gSound_enabled) {
if (gProgram_state.cockpit_on && gProgram_state.cockpit_image_index >= 0) {
S3Service(1, 2);
} else {
S3Service(0, 2);
}
}
NetService(pRacing);
}
// IDA: void __cdecl ServiceGame()
void ServiceGame(void) {
ServiceTheGame(0);
}
// IDA: void __cdecl ServiceGameInRace()
void ServiceGameInRace(void) {
LOG_TRACE("()");
ServiceTheGame(1);
CheckKevKeys();
}
// IDA: void __usercall GameMain(int pArgc@<EAX>, char **pArgv@<EDX>)
void GameMain(int pArgc, char** pArgv) {
tPath_name CD_dir;
PDSetFileVariables();
PDBuildAppPath(gApplication_path);
OpenDiagnostics();
strcat(gApplication_path
, "DATA");
UsePathFileToDetermineIfFullInstallation();
if (!gCD_fully_installed && GetCDPathFromPathsTxtFile(CD_dir) && !PDCheckDriveExists(CD_dir)) {
PDInitialiseSystem();
fprintf(stderr
, "Can't find the Carmageddon CD\n");
}
InitialiseDeathRace(pArgc, pArgv);
DoProgram();
QuitGame();
}