#ifndef _RACESTRT_H_
#define _RACESTRT_H_
#include "brender/br_types.h"
#include "dr_types.h"
extern int gGrid_number_colour[4];
extern int gJust_bought_part;
extern tU32 gLast_host_query;
extern br_pixelmap* gDead_car;
extern int gFade_away_parts_shop;
extern tU32 gDare_start_time;
extern int gRefund_rate;
extern int gSwap_grid_2;
extern int gSwap_grid_1;
extern int gChange_race_net_mode;
extern tParts_category gPart_category;
extern tU32 gNet_synch_start;
extern tNet_game_details* gChoose_car_net_game;
extern int gPart_index;
extern int gChallenger_index__racestrt; // suffix added to avoid duplicate symbol
extern tGrid_draw gDraw_grid_status;
extern tNet_sequence_type gNet_race_sequence__racestrt; // suffix added to avoid duplicate symbol
extern br_pixelmap* gTaken_image;
extern int gGrid_number_x_coords[31];
extern int gGrid_transition_stage;
extern int gGrid_y_adjust;
extern br_pixelmap* gBullet_image;
extern br_pixelmap* gDeceased_image;
extern int gBest_pos_available;
extern int gChallenger_position;
extern int gOpponent_index;
extern int gChallenge_time;
extern int gOriginal_position;
extern int gCurrent_race_index;
extern tInterface_spec* gStart_interface_spec;
extern int gCurrent_car_index;
extern int gOur_starting_position;
void DrawRaceList(int pOffset);
void MoveRaceList(int pFrom, int pTo, tS32 pTime_to_move);
int UpRace(int* pCurrent_choice, int* pCurrent_mode);
int DownRace(int* pCurrent_choice, int* pCurrent_mode);
int ClickOnRace(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int UpClickRace(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int DownClickRace(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
void StartChangeRace(void);
int ChangeRace(int* pRace_index, int pNet_mode, tNet_sequence_type pNet_race_sequence);
void DoChangeRace(void);
void DrawCar(int pCurrent_choice, int pCurrent_mode);
void SetCarFlic(void);
int UpCar(int* pCurrent_choice, int* pCurrent_mode);
int DownCar(int* pCurrent_choice, int* pCurrent_mode);
int UpClickCar(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int DownClickCar(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int ChangeCarGoAhead(int* pCurrent_choice, int* pCurrent_mode);
int ChangeCar(int pNet_mode, int* pCar_index, tNet_game_details* pNet_game);
void DoChangeCar(void);
int PartsShopRecommended(void);
void CalcPartPrice(int pCategory, int pIndex, int* pPrice, int* pCost);
int BuyPart(int pCategory, int pIndex);
void DoAutoParts(void);
void DrawPartsLabel(void);
void ErasePartsText(int pTotal_as_well);
void DrawPartsText(void);
void SetPartsImage(void);
int GetPartsMax(void);
void CalcPartsIndex(void);
void DoExchangePart(void);
int PartsShopGoAhead(int* pCurrent_choice, int* pCurrent_mode);
int UpPart(int* pCurrent_choice, int* pCurrent_mode);
int DownPart(int* pCurrent_choice, int* pCurrent_mode);
int UpClickPart(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int DownClickPart(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int PartsArrowsOn(int* pCurrent_choice, int* pCurrent_mode);
int PartsArrowsOff(int* pCurrent_choice, int* pCurrent_mode);
void StartPartsShop(void);
int DonePartsShop(int pCurrent_choice, int pCurrent_mode, int pGo_ahead, int pEscaped, int pTimed_out);
void DrawPartsShop(int pCurrent_choice, int pCurrent_mode);
void DoPartsShop(int pFade_away);
int AutoPartsDone(int pCurrent_choice, int pCurrent_mode, int pGo_ahead, int pEscaped, int pTimed_out);
tSO_result DoAutoPartsShop(void);
void SetOpponentFlic(void);
void DrawSceneyMappyInfoVieweyThing(void);
void DismissSceneyMappyInfoVieweyThing(void);
int SelectRaceDone(int pCurrent_choice, int pCurrent_mode, int pGo_ahead, int pEscaped, int pTimed_out);
int StartRaceGoAhead(int* pCurrent_choice, int* pCurrent_mode);
int TryToMoveToArrows(int* pCurrent_choice, int* pCurrent_mode);
int UpOpponent(int* pCurrent_choice, int* pCurrent_mode);
int DownOpponent(int* pCurrent_choice, int* pCurrent_mode);
int UpClickOpp(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int DownClickOpp(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
void SelectRaceStart(void);
int SuggestRace(void);
void SelectRaceDraw(int pCurrent_choice, int pCurrent_mode);
tSO_result DoSelectRace(int* pSecond_time_around);
void DrawGridCar(int pX, int pY, br_pixelmap* pImage);
void DrawGrid(int pOffset, int pDraw_it);
void MoveGrid(int pFrom, int pTo, tS32 pTime_to_move);
int CalcGridOffset(int pPosition);
void GridDraw(int pCurrent_choice, int pCurrent_mode);
void ActuallySwapOrder(int pFirst_index, int pSecond_index);
void DoGridTransition(int pFirst_index, int pSecond_index);
void ChallengeStart(void);
int CheckNextStage(int* pCurrent_choice, int* pCurrent_mode);
int ChallengeDone(int pCurrent_choice, int pCurrent_mode, int pGo_ahead, int pEscaped, int pTimed_out);
void DoChallengeScreen(void);
int GridDone(int pCurrent_choice, int pCurrent_mode, int pGo_ahead, int pEscaped, int pTimed_out);
void GridStart(void);
int GridMoveLeft(int* pCurrent_choice, int* pCurrent_mode);
int GridMoveRight(int* pCurrent_choice, int* pCurrent_mode);
int GridClickCar(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int GridClickNumbers(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int GridClickLeft(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int GridClickRight(int* pCurrent_choice, int* pCurrent_mode, int pX_offset, int pY_offset);
int CheckChallenge(int* pCurrent_choice, int* pCurrent_mode);
int FindBestPos(int pOur_rank);
int SortGridFunction(const void* pFirst_one, const void* pSecond_one);
void SortOpponents(void);
tSO_result DoGridPosition(void);
void CheckPlayersAreResponding(void);
void NetSynchStartStart(void);
// Suffix added to avoid duplicate symbol
void DrawAnItem__racestrt(int pX, int pY_index, int pFont_index, char* pText);
void NetSynchStartDraw(int pCurrent_choice, int pCurrent_mode);
int NetSynchStartDone(int pCurrent_choice, int pCurrent_mode, int pGo_ahead, int pEscaped, int pTimed_out);
int NetSynchStartGoAhead(int* pCurrent_choice, int* pCurrent_mode);
int ExitWhenReady(int* pCurrent_choice, int* pCurrent_mode);
tSO_result NetSynchRaceStart2(tNet_synch_mode pMode);
tSO_result NetSynchRaceStart(void);
#endif