141 lines
5.7 KiB
Scheme
Executable File
141 lines
5.7 KiB
Scheme
Executable File
//////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// SCRIPT NAME : trains_control_public.sch //
|
|
// AUTHOR : Rob Bray //
|
|
// DESCRIPTION : Script functions to control trains //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
USING "commands_vehicle.sch"
|
|
USING "commands_script.sch"
|
|
USING "globals.sch"
|
|
|
|
CONST_INT EXILE3_LAST_CARRIAGE 40
|
|
CONST_INT EXILE3_NUMBER_CRASHED_CARRIAGES 10
|
|
CONST_INT EXILE3_NUMBER_CONTAINERS 1
|
|
|
|
|
|
ENUM TRAIN_LINE_ENUM
|
|
TRAIN_LINE_MAIN = 0,
|
|
TRAIN_LINE_QUARRY,
|
|
TRAIN_LINE_CAR_STEAL_SETPIECE,
|
|
TRAIN_LINE_METRO,
|
|
TRAIN_LINE_FIRST_HOOD_SETPIECE,
|
|
TRAIN_LINE_SECOND_HOOD_SETPIECE,
|
|
TRAIN_LINE_SECOND_FAME_OR_SHAME_SETPIECE,
|
|
TRAIN_LINE_DOWNTOWN_SETPIECE,
|
|
TRAIN_LINE_THIRD_HOOD_SETPIECE,
|
|
TRAIN_LINE_PROLOGUE,
|
|
TRAIN_LINE_JEWEL_HEIST_SETPIECE,
|
|
TRAIN_LINE_PROLOGUE_2,
|
|
|
|
TRAIN_LINE_COUNT
|
|
ENDENUM
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
FUNC STRING GET_TRAIN_LINE_DEBUG_STRING_FROM_ID(TRAIN_LINE_ENUM trainLine)
|
|
SWITCH trainLine
|
|
CASE TRAIN_LINE_MAIN RETURN "MAIN" BREAK
|
|
CASE TRAIN_LINE_QUARRY RETURN "QUARRY" BREAK
|
|
CASE TRAIN_LINE_CAR_STEAL_SETPIECE RETURN "CAR_STEAL_SETPIECE" BREAK
|
|
CASE TRAIN_LINE_METRO RETURN "METRO" BREAK
|
|
CASE TRAIN_LINE_FIRST_HOOD_SETPIECE RETURN "FIRST_HOOD_SETPIECE" BREAK
|
|
CASE TRAIN_LINE_SECOND_HOOD_SETPIECE RETURN "SECOND_HOOD_SETPIECE" BREAK
|
|
CASE TRAIN_LINE_SECOND_FAME_OR_SHAME_SETPIECE RETURN "SECOND_FAME_OR_SHAME_SETPIECE" BREAK
|
|
CASE TRAIN_LINE_DOWNTOWN_SETPIECE RETURN "DOWNTOWN_SETPIECE" BREAK
|
|
CASE TRAIN_LINE_THIRD_HOOD_SETPIECE RETURN "THIRD_HOOD_SETPIECE" BREAK
|
|
CASE TRAIN_LINE_PROLOGUE RETURN "PROLOGUE" BREAK
|
|
CASE TRAIN_LINE_JEWEL_HEIST_SETPIECE RETURN "JEWEL_HEIST_SETPIECE" BREAK
|
|
CASE TRAIN_LINE_PROLOGUE_2 RETURN "TRAIN_LINE_PROLOGUE_2" BREAK
|
|
ENDSWITCH
|
|
SCRIPT_ASSERT("GET_TRAIN_LINE_DEBUG_STRING_FROM_ID: Missing debug string for train line enum.")
|
|
RETURN "NULL"
|
|
ENDFUNC
|
|
#ENDIF
|
|
|
|
|
|
//Request a line changes state.
|
|
PROC SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_ENUM trainLine, BOOL bActive)
|
|
CPRINTLN(DEBUG_SYSTEM, "<TRAINS> Script ", GET_THIS_SCRIPT_NAME(), " requested line ", GET_TRAIN_LINE_DEBUG_STRING_FROM_ID(trainLine), " be set to ", PICK_STRING(bActive, "ACTIVE", "NOT-ACTIVE"), ".")
|
|
|
|
IF bActive
|
|
SET_BIT(g_iTrainLineActiveBitset, ENUM_TO_INT(trainLine))
|
|
ELSE
|
|
CLEAR_BIT(g_iTrainLineActiveBitset, ENUM_TO_INT(trainLine))
|
|
ENDIF
|
|
g_bTrainLinesChangedFlag = TRUE
|
|
ENDPROC
|
|
|
|
|
|
//Set the state of a specific line this frame and log the change.
|
|
PROC SET_TRAIN_LINE_ACTIVE(INT iTrainLine, BOOL bActive)
|
|
SWITCH_TRAIN_TRACK(iTrainLine, bActive)
|
|
|
|
CPRINTLN(DEBUG_SYSTEM, "<TRAINS> Line ", GET_TRAIN_LINE_DEBUG_STRING_FROM_ID(INT_TO_ENUM(TRAIN_LINE_ENUM, iTrainLine)), " changed state to ", PICK_STRING(bActive, "ACTIVE", "NOT-ACTIVE"), ".")
|
|
ENDPROC
|
|
|
|
|
|
//Maintain requests to change train line states.
|
|
PROC MAINTAIN_TRAIN_LINE_ACTIVATION()
|
|
IF GET_INDEX_OF_CURRENT_LEVEL() = LEVEL_GTA5
|
|
IF g_bTrainLinesChangedFlag
|
|
INT i
|
|
REPEAT TRAIN_LINE_COUNT i
|
|
SET_TRAIN_LINE_ACTIVE(i, IS_BIT_SET(g_iTrainLineActiveBitset, i))
|
|
ENDREPEAT
|
|
g_bTrainLinesChangedFlag = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
//Setup default train line states as SP starts.
|
|
PROC Initialise_Train_Lines_On_SP_Startup()
|
|
IF GET_INDEX_OF_CURRENT_LEVEL() = LEVEL_GTA5
|
|
CPRINTLN(DEBUG_SYSTEM, "<TRAINS> Initialising base train lines states SP startup.")
|
|
|
|
DELETE_ALL_TRAINS()
|
|
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_MAIN, TRUE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_QUARRY, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_CAR_STEAL_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_METRO, TRUE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_FIRST_HOOD_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_SECOND_HOOD_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_SECOND_FAME_OR_SHAME_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_DOWNTOWN_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_THIRD_HOOD_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_PROLOGUE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_JEWEL_HEIST_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_PROLOGUE_2, FALSE)
|
|
|
|
SET_TRAIN_TRACK_SPAWN_FREQUENCY(0, 120000)
|
|
SET_RANDOM_TRAINS(TRUE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
//Cleanup train line states as SP ends.
|
|
PROC Cleanup_Train_Lines_On_SP_End()
|
|
IF GET_INDEX_OF_CURRENT_LEVEL() = LEVEL_GTA5
|
|
CPRINTLN(DEBUG_SYSTEM, "<TRAINS> Clearing all train line states on SP cleanup.")
|
|
|
|
DELETE_ALL_TRAINS()
|
|
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_MAIN, TRUE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_QUARRY, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_CAR_STEAL_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_METRO, TRUE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_FIRST_HOOD_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_SECOND_HOOD_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_SECOND_FAME_OR_SHAME_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_DOWNTOWN_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_THIRD_HOOD_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_PROLOGUE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_JEWEL_HEIST_SETPIECE, FALSE)
|
|
SCRIPT_SET_TRAIN_LINE_ACTIVE(TRAIN_LINE_PROLOGUE_2, FALSE)
|
|
ENDIF
|
|
ENDPROC
|
|
|