Files
2025-09-29 00:52:08 +02:00

160 lines
5.4 KiB
XML
Executable File

// offroad_globals.sch
USING "script_maths.sch"
ENUM OFFROADRACE_BIT_FLAGS
OFFROAD_F_WonCurrentRace = BIT0, // This is temporarily set when the race setup needs to tell the controller that we won the race. (BIT0)
OFFROAD_F_Race5Won = BIT1,
OFFROAD_F_Race8Won = BIT2,
OFFROAD_F_Race9Won = BIT3,
OFFROAD_F_Race10Won = BIT4,
OFFROAD_F_Race11Won = BIT5,
OFFROAD_F_Race12Won = BIT6,
OFFROAD_F_Race13Won = BIT7
ENDENUM
#IF IS_DEBUG_BUILD
INT g_ORR_DebugLaunchWarpTime = 0
#ENDIF
/// PURPOSE: Indices to our races.
/// EACH TIME YOU DEFINE A NEW ONE, ADD IT TO THE FUNC BELOW
ENUM OFFROAD_RACE_INDEX
OFFROAD_RACE_NONE = -1,
OFFROAD_RACE_CANYON_CLIFFS = 0,
OFFROAD_RACE_RIDGE_RUN,
OFFROAD_RACE_MINEWARD_SPIRAL,
OFFROAD_RACE_VALLEY_TRAIL,
OFFROAD_RACE_LAKESIDE_SPLASH,
OFFROAD_RACE_ECO_FRIENDLY,
OFFROAD_RACE13,
NUM_OFFROAD_RACES
ENDENUM
STRUCT RACE_LAUNCH_DATA
OFFROAD_RACE_INDEX raceToLaunch
VECTOR raceStartLoc
PED_INDEX Racer[5]
VEHICLE_INDEX RaceVehicle[5]
PED_INDEX Loaner
VEHICLE_INDEX LoanerVehicle
ENDSTRUCT
STRUCT OffroadSaved
INT iBitFlags
OFFROAD_RACE_INDEX eCurrentRace
INT iBestRank[NUM_OFFROAD_RACES]
FLOAT fBestTime[NUM_OFFROAD_RACES]
INT iRacePlaceEarned
INT iRaceBestPlaces[NUM_OFFROAD_RACES]
ENDSTRUCT
// We don't have any save data yet... I kind just need this function.
FUNC VECTOR OFFROAD_RACE_GET_LOC_FOR_INDEX(OFFROAD_RACE_INDEX raceIndex)
// Make sure it's valid.
IF (raceIndex >= NUM_OFFROAD_RACES) OR (raceIndex <= OFFROAD_RACE_NONE)
//DEBUG_MESSAGE("You're asking for a race location out of range. Returning <<0,0,0>>!!")
RETURN <<0,0,0>>
ENDIF
// Get the race loc for that index.
SWITCH (raceIndex)
CASE OFFROAD_RACE_CANYON_CLIFFS
RETURN <<-1939.4829, 4443.9526, 37.3474>> // Canyon Cliffs - 1 in menu.
CASE OFFROAD_RACE_RIDGE_RUN
RETURN <<-516.9256, 2008.0140, 204.0998>> // Ridge Run - 2 in menu.
CASE OFFROAD_RACE_VALLEY_TRAIL
RETURN <<-223.6755, 4224.6436, 43.7304>> // Valley Trail - 3 in menu.
CASE OFFROAD_RACE_LAKESIDE_SPLASH
RETURN <<1606.5785, 3841.1882, 33.2931>> // Lakeside Splash - 4 in menu.
CASE OFFROAD_RACE_ECO_FRIENDLY
RETURN <<2037.6644, 2137.3862, 92.7095>> // Eco Friendly - 5 in menu.
CASE OFFROAD_RACE_MINEWARD_SPIRAL
RETURN <<2996.7759, 2774.0850, 43.2600>> // Mineward Spiral - 6 in menu.
// CASE OFFROAD_RACE13
// RETURN << 1222.9738, 2373.2100, 64.7099 >> // Construction Course - 7 in menu.
// BREAK
ENDSWITCH
//DEBUG_MESSAGE("You're asking for a race location and the index hasn't been assigned a point. Returning <<0,0,0>>!!")
RETURN <<0, 0, 0>>
ENDFUNC
/// PURPOSE:
/// Returns the OFFROAD_RACE_INDEX that the player is nearest to.
/// PARAMS:
/// vCurLoc - Player's current location
/// RETURNS:
/// OFFROAD_RACE_INDEX that we're closest to.
FUNC OFFROAD_RACE_INDEX GET_RACE_INDEX_BY_POSITION(VECTOR vCurLoc, VECTOR & vRaceStartLoc)
// We'll return this.
OFFROAD_RACE_INDEX eRetInd = OFFROAD_RACE_CANYON_CLIFFS
// STORE ALL RACE LOCATIONS HERE:
VECTOR raceLocs[NUM_OFFROAD_RACES]
raceLocs[OFFROAD_RACE_CANYON_CLIFFS] = OFFROAD_RACE_GET_LOC_FOR_INDEX(OFFROAD_RACE_CANYON_CLIFFS)
raceLocs[OFFROAD_RACE_RIDGE_RUN] = OFFROAD_RACE_GET_LOC_FOR_INDEX(OFFROAD_RACE_RIDGE_RUN)
raceLocs[OFFROAD_RACE_VALLEY_TRAIL] = OFFROAD_RACE_GET_LOC_FOR_INDEX(OFFROAD_RACE_VALLEY_TRAIL)
raceLocs[OFFROAD_RACE_LAKESIDE_SPLASH] = OFFROAD_RACE_GET_LOC_FOR_INDEX(OFFROAD_RACE_LAKESIDE_SPLASH)
raceLocs[OFFROAD_RACE_ECO_FRIENDLY] = OFFROAD_RACE_GET_LOC_FOR_INDEX(OFFROAD_RACE_ECO_FRIENDLY)
raceLocs[OFFROAD_RACE_MINEWARD_SPIRAL] = OFFROAD_RACE_GET_LOC_FOR_INDEX(OFFROAD_RACE_MINEWARD_SPIRAL)
raceLocs[OFFROAD_RACE13] = OFFROAD_RACE_GET_LOC_FOR_INDEX(OFFROAD_RACE13)
// We assume first = closest. We'll figure it out later.
FLOAT fClosestDist = VDIST2(vCurLoc, raceLocs[0])
INT index = 0
FLOAT fDist = 0.0
FOR index = 1 TO (ENUM_TO_INT(NUM_OFFROAD_RACES) - 1)
fDist = VDIST2(vCurLoc, raceLocs[index])
IF (fDist < fClosestDist)
// Found a closer one!
eRetInd = INT_TO_ENUM(OFFROAD_RACE_INDEX, index)
fClosestDist = fDist
ENDIF
ENDFOR
// Return the closest one we found.
vRaceStartLoc = raceLocs[eRetInd]
RETURN eRetInd
ENDFUNC
/// PURPOSE:
/// Given the race index, returns the bit flag for "won race" and the static blip for this race.
PROC GET_RACE_BITFLAG_AND_STATIC_BLIP(OFFROAD_RACE_INDEX eRaceIndex, OFFROADRACE_BIT_FLAGS & eWonFlag, STATIC_BLIP_NAME_ENUM & eStaticBlipEnum)
IF (eRaceIndex = OFFROAD_RACE_CANYON_CLIFFS)
eWonFlag = OFFROAD_F_Race5Won
eStaticBlipEnum = STATIC_BLIP_MINIGAME_OFFROAD_RACE5
ELIF (eRaceIndex = OFFROAD_RACE_RIDGE_RUN)
eWonFlag = OFFROAD_F_Race8Won
eStaticBlipEnum = STATIC_BLIP_MINIGAME_OFFROAD_RACE8
ELIF (eRaceIndex = OFFROAD_RACE_VALLEY_TRAIL)
eWonFlag = OFFROAD_F_Race9Won
eStaticBlipEnum = STATIC_BLIP_MINIGAME_OFFROAD_RACE9
ELIF (eRaceIndex = OFFROAD_RACE_LAKESIDE_SPLASH)
eWonFlag = OFFROAD_F_Race10Won
eStaticBlipEnum = STATIC_BLIP_MINIGAME_OFFROAD_RACE10
ELIF (eRaceIndex = OFFROAD_RACE_ECO_FRIENDLY)
eWonFlag = OFFROAD_F_Race11Won
eStaticBlipEnum = STATIC_BLIP_MINIGAME_OFFROAD_RACE11
ELIF (eRaceIndex = OFFROAD_RACE_MINEWARD_SPIRAL)
eWonFlag = OFFROAD_F_Race12Won
eStaticBlipEnum = STATIC_BLIP_MINIGAME_OFFROAD_RACE12
ENDIF
ENDPROC