1920 lines
58 KiB
Python
Executable File
1920 lines
58 KiB
Python
Executable File
//╒═════════════════════════════════════════════════════════════════════════════╕
|
|
//│ Author: Ste Kerrigan Date: 15/03/11 │
|
|
//╞═════════════════════════════════════════════════════════════════════════════╡
|
|
//│ │
|
|
//│ FBI4 Mission Intro Cutscene Script │
|
|
//│ │
|
|
//╘═════════════════════════════════════════════════════════════════════════════╛
|
|
|
|
//Compile out Title Update changes to header functions.
|
|
//Must be before includes.
|
|
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
|
|
USING "clearmissionarea.sch"
|
|
|
|
USING "commands_script.sch"
|
|
USING "commands_graphics.sch"
|
|
USING "commands_camera.sch"
|
|
USING "commands_cutscene.sch"
|
|
|
|
USING "flow_public_core_override.sch"
|
|
USING "flow_help_public.sch"
|
|
USING "script_misc.sch"
|
|
USING "replay_public.sch"
|
|
|
|
USING "RC_helper_functions.sch"
|
|
USING "commands_recording.sch"
|
|
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
USING "select_mission_stage.sch"
|
|
USING "shared_debug.sch"
|
|
|
|
CONST_INT MAX_SKIP_MENU_LENGTH 1
|
|
INT i_debug_jump_stage
|
|
MissionStageMenuTextStruct s_skip_menu[MAX_SKIP_MENU_LENGTH]
|
|
#ENDIF
|
|
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : Template.sc
|
|
// AUTHOR : Ste Kerrigan
|
|
// DESCRIPTION :
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
|
|
//----------------------
|
|
// CHECKPOINTS
|
|
//----------------------
|
|
|
|
|
|
//-----------------------
|
|
// CONSTANTS
|
|
//-----------------------
|
|
|
|
|
|
|
|
ENUM MISSION_PED_ENUM
|
|
ANDREAS = 0,
|
|
DAVE,
|
|
STEVE,
|
|
MIKE,
|
|
TREV,
|
|
FRANK,
|
|
|
|
NUM_PEDS
|
|
ENDENUM
|
|
|
|
ENUM MISSION_CAR_ENUM
|
|
MIKE_CAR = 0,
|
|
FRANK_CAR,
|
|
TREV_CAR,
|
|
GENERIC_CAR,
|
|
|
|
NUM_CARS
|
|
ENDENUM
|
|
|
|
/// --------------------------------------------------
|
|
/// ENUMS
|
|
/// -------------------------------------------
|
|
|
|
/// PURPOSE: Mission states
|
|
ENUM MISSION_STATE
|
|
MS_SET_UP = 0, //0
|
|
MS_INTRO, //1
|
|
MS_LEAVE_AREA,
|
|
MS_FAILED //3
|
|
ENDENUM
|
|
|
|
/// PURPOSE:
|
|
/// Internal state machine states for mission state
|
|
ENUM STAGE_STATES
|
|
SS_INIT,
|
|
SS_ACTIVE,
|
|
SS_CLEANUP,
|
|
SS_SKIPPED
|
|
ENDENUM
|
|
|
|
/// PURPOSE: Mission requirements used for loading
|
|
/// and creating mission assets
|
|
ENUM MISSION_REQ
|
|
RQ_NONE,
|
|
RQ_TEXT,
|
|
RQ_CUTSCENE,
|
|
RQ_MIKE,
|
|
RQ_FRANK,
|
|
RQ_TREV,
|
|
RQ_STEVE,
|
|
RQ_ANDREAS,
|
|
RQ_DAVE,
|
|
RQ_DAVES_PHONE,
|
|
RQ_MIKE_CAR,
|
|
RQ_FRANK_CAR,
|
|
RQ_TREV_CAR
|
|
ENDENUM
|
|
|
|
/// PURPOSE: Fail reason enums for picking correct fail reason
|
|
ENUM FAILED_REASONS
|
|
FR_NONE,
|
|
FR_MIKE_KILLED,
|
|
FR_MIKE_THREATENED
|
|
ENDENUM
|
|
|
|
|
|
ENUM MIKE_STATES
|
|
MSS_NULL,
|
|
MSS_WAIT_SMOKE,
|
|
MSS_SMOKE,
|
|
MSS_WAIT_PHONE,
|
|
MSS_PHONE,
|
|
MSS_IDLE
|
|
ENDENUM
|
|
|
|
MIKE_STATES eMikeState = MSS_NULL
|
|
|
|
///MISSION PED STATES
|
|
MISSION_STATE eMissionState = MS_SET_UP //track what MISSION stage we are at
|
|
STAGE_STATES eState = SS_INIT //Internal state tracking for mission stages
|
|
enumCharacterList eStartedPlayer
|
|
//*****************************************************************************
|
|
// :STRUCTS:
|
|
//*****************************************************************************
|
|
|
|
|
|
//****************************************************************************************************
|
|
// : MISSION FLOW VARIABLES :
|
|
//****************************************************************************************************
|
|
|
|
//mission flow
|
|
INT iMissionState = 0 //Used in skips and checkpoints
|
|
BOOL bJumpSkip = FALSE //flag for if current MISSION state should clean up and move to the next state
|
|
|
|
//Fail vars
|
|
STRING sFailReason = NULL //String to display when mission is failed
|
|
|
|
//Cutscene
|
|
BOOL bLoadingFinCutscene = FALSE
|
|
|
|
//ScriptCamera
|
|
CAMERA_INDEX camMain //Script camera used in place holder cutscenes
|
|
|
|
VECTOR vSafeVec = <<0,0,0>> //safe vector used when a proper position isnt needed
|
|
|
|
//PEDS
|
|
PED_INDEX piPeds[NUM_PEDS]
|
|
VEHICLE_INDEX viCars[NUM_CARS]
|
|
|
|
//Object
|
|
OBJECT_INDEX oiDavesPhone
|
|
|
|
INT iMissionTimer = -1
|
|
|
|
INT iDialogueTimer = -1
|
|
|
|
INT iMikeTimer = -1
|
|
|
|
structPedsForConversation s_conversation_peds //conversation struct
|
|
|
|
|
|
/// ===============| DIALOGUE |======================
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Resets all variables used in flow
|
|
PROC RESET_ALL()
|
|
|
|
ENDPROC
|
|
|
|
|
|
BOOL bRegisteredFrank = FALSE
|
|
BOOL bRegisteredTrev = FALSE
|
|
///
|
|
///
|
|
/// DEBUG ONLY MISSION STUFF ------------------------------------------------------------
|
|
///
|
|
///
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
BOOL bShowDebugText = TRUE
|
|
WIDGET_GROUP_ID widgetGroup
|
|
BOOL bForceFail = FALSE
|
|
/// PURPOSE:
|
|
/// Prints a string to a TTY Channel
|
|
/// PARAMS:
|
|
/// s - The string to print
|
|
/// ddc - The debug channel to print to
|
|
PROC SK_PRINT(String s, DEBUG_CHANNELS ddc = DEBUG_MISSION)
|
|
IF bShowDebugText
|
|
CPRINTLN(ddc, s)
|
|
PRINTNL()
|
|
PRINTNL()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Prints a string and an int to a TTY Channel
|
|
/// PARAMS:
|
|
/// s - The string to print
|
|
/// i - the int to print
|
|
/// ddc - the debug channel to print to
|
|
PROC SK_PRINT_INT(String s, INT i, DEBUG_CHANNELS ddc = DEBUG_MISSION)
|
|
IF bShowDebugText
|
|
CPRINTLN(ddc, s,i)
|
|
PRINTNL()
|
|
PRINTNL()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Prints a string and a Float to a TTY Channel
|
|
/// PARAMS:
|
|
/// s - the string to print
|
|
/// f - the float to print
|
|
/// ddc - the debug channel
|
|
PROC SK_PRINT_FLOAT(String s, FLOAT f, DEBUG_CHANNELS ddc = DEBUG_MISSION)
|
|
IF bShowDebugText
|
|
CPRINTLN(ddc, s,f)
|
|
PRINTNL()
|
|
PRINTNL()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets up a widget for this mission
|
|
PROC SETUP_FOR_RAGE_WIDGETS()
|
|
widgetGroup = START_WIDGET_GROUP("CURRENT Mission Widgets")
|
|
START_WIDGET_GROUP("Debug")
|
|
ADD_WIDGET_BOOL("Toggle Debug spew", bShowDebugText)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Force Mission Fail")
|
|
ADD_WIDGET_BOOL("Force Fail", bForceFail)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
STOP_WIDGET_GROUP()
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Deletes the mission widget
|
|
PROC CLEANUP_OBJECT_WIDGETS()
|
|
IF DOES_WIDGET_GROUP_EXIST(widgetGroup)
|
|
DELETE_WIDGET_GROUP(widgetGroup)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks for any updates needed for the widgets
|
|
PROC UPDATE_RAG_WIDGETS()
|
|
|
|
IF bForceFail
|
|
eMissionState = MS_FAILED
|
|
eState = SS_INIT
|
|
bForceFail = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
#ENDIF
|
|
|
|
///
|
|
///
|
|
/// GENERAL HELP FUNCTIONS
|
|
///
|
|
///
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Set a peds position and heading safely ie check its ok then move it and set its heading
|
|
/// PARAMS:
|
|
/// index - The ped to move
|
|
/// pos - The position to move it to
|
|
/// dir - The Heading to set
|
|
PROC SET_PED_POS(PED_INDEX index, VECTOR pos, FLOAT dir)
|
|
IF IS_PED_UNINJURED(index)
|
|
CLEAR_PED_TASKS(index)
|
|
ENDIF
|
|
|
|
SAFE_TELEPORT_ENTITY(index, pos, dir)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Requests a model and waits for it to load
|
|
/// PARAMS:
|
|
/// _modname - The name of the model to load
|
|
/// _debugstring - used to debug
|
|
/// i - used to debug
|
|
/// RETURNS:
|
|
/// TRUE when the model is loaded
|
|
FUNC BOOL REQUEST_AND_CHECK_MODEL(MODEL_NAMES _modname, STRING _debugstring, INT i = 0)
|
|
|
|
|
|
REQUEST_MODEL(_modname)
|
|
IF NOT Is_String_Null_Or_Empty(_debugstring)
|
|
AND i <> -1
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT_INT(_debugstring, i)
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_MODEL_LOADED(_modname)
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("MODEL LOADED")
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
/// PURPOSE:
|
|
/// Unloads a model - Sets it as no longer needed
|
|
/// PARAMS:
|
|
/// _modname - The model to unload
|
|
PROC UNLOAD_MODEL(MODEL_NAMES _modname, BOOL bCheckLoaded = TRUE)
|
|
IF bCheckLoaded
|
|
IF HAS_MODEL_LOADED(_modname)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(_modname)
|
|
ENDIF
|
|
ELSE
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(_modname)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Spawns a ped and returns true if it was succesful. Requests the model and unloads it
|
|
/// PARAMS:
|
|
/// pedindex - The PED_INDEX to write the newly create ped to
|
|
/// model - The model to load and use to create the ped
|
|
/// pos - The position the ped should be created
|
|
/// dir - The heading the ped should have when created
|
|
/// bUnloadAfterSpawn - If true we unload the model after spawning the ped
|
|
/// bFreeze - if true we freeze the ped after spawning
|
|
/// bTempEvents - if true we block temp events
|
|
/// bTargetable - if false we set the ped to not be targetted
|
|
/// RETURNS:
|
|
/// TRUE if the ped was created
|
|
FUNC BOOL SPAWN_PED(PED_INDEX &pedindex, MODEL_NAMES model, VECTOR pos, FLOAT dir, BOOL bUnloadAfterSpawn = TRUE, BOOL bFreeze = FALSE, BOOL bTempEvents = TRUE, BOOL bTargetable = TRUE)
|
|
IF NOT DOES_ENTITY_EXIST(pedindex)
|
|
IF REQUEST_AND_CHECK_MODEL(model,"Loading")
|
|
pedindex = CREATE_PED(PEDTYPE_MISSION, model, pos, dir)
|
|
//SET_PED_DEFAULT_COMPONENT_VARIATION(pedindex)
|
|
IF IS_PED_UNINJURED(pedindex)
|
|
#IF IS_DEBUG_BUILD SK_PRINT("PED CREATED !") #ENDIF
|
|
IF bFreeze
|
|
FREEZE_ENTITY_POSITION(pedindex, TRUE)
|
|
ENDIF
|
|
|
|
IF bTempEvents
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedindex, bTempEvents)
|
|
ENDIF
|
|
|
|
IF NOT bTargetable
|
|
SET_PED_CAN_BE_TARGETTED(pedindex, bTargetable)
|
|
ENDIF
|
|
|
|
|
|
IF bUnloadAfterSpawn
|
|
UNLOAD_MODEL(model)
|
|
ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_PED_UNINJURED(pedindex)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Spawns a vehicle and returns true if it was succesful - why does the is mission entity check return true
|
|
/// no matter what the out come of said check?
|
|
/// PARAMS:
|
|
/// vehicleindex - The VEHICLE_INDEX to write the newly create vehicle to
|
|
/// model - The model to load and use to create the vehicle
|
|
/// pos - The position the vehicle should be created
|
|
/// dir - The heading the vehicle should have when created
|
|
/// RETURNS:
|
|
/// TRUE if the vehicle was created
|
|
FUNC BOOL SPAWN_VEHICLE(VEHICLE_INDEX &vehicleindex, MODEL_NAMES model, VECTOR pos, FLOAT dir, BOOL bUnloadAfterSpawn = TRUE)
|
|
IF NOT DOES_ENTITY_EXIST(vehicleindex)
|
|
IF REQUEST_AND_CHECK_MODEL(model,"Loading")
|
|
vehicleindex = CREATE_VEHICLE(model, pos, dir)
|
|
|
|
IF DOES_ENTITY_EXIST(vehicleindex)
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(vehicleindex)
|
|
SET_ENTITY_AS_MISSION_ENTITY(vehicleindex)
|
|
ENDIF
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(model, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vehicleindex)
|
|
IF bUnloadAfterSpawn
|
|
UNLOAD_MODEL(model)
|
|
ENDIF
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_VEHICLE_OK(vehicleindex)
|
|
SET_ENTITY_COORDS(vehicleindex, pos)
|
|
SET_ENTITY_HEADING(vehicleindex, dir)
|
|
ENDIF
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(vehicleindex)
|
|
SET_ENTITY_AS_MISSION_ENTITY(vehicleindex)
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Spawns a ped inside a vehicle
|
|
/// PARAMS:
|
|
/// pedindex - The index to write the newly created ped back to (ref)
|
|
/// Car - The vehicle to create the ped in
|
|
/// modelName - The model of the ped to create
|
|
/// seat - the seat to create the ped in
|
|
/// bUnloadAfterSpawn - should we unload the ped model after creation
|
|
/// RETURNS:
|
|
/// TRUE if the ped was spawned correctly
|
|
FUNC BOOL SPAWN_PED_IN_VEHICLE(PED_INDEX &pedindex, VEHICLE_INDEX Car, MODEL_NAMES modelName, VEHICLE_SEAT seat = VS_DRIVER, BOOL bUnloadAfterSpawn = TRUE)
|
|
IF IS_VEHICLE_OK(Car)
|
|
IF NOT DOES_ENTITY_EXIST(pedindex)
|
|
IF REQUEST_AND_CHECK_MODEL(modelName,"Loading")
|
|
pedindex = CREATE_PED_INSIDE_VEHICLE(Car, PEDTYPE_MISSION, modelName, seat)
|
|
|
|
IF DOES_ENTITY_EXIST(pedindex)
|
|
IF bUnloadAfterSpawn
|
|
UNLOAD_MODEL(modelName)
|
|
ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ELSE
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
///-----------------------------------------------------------------------------------
|
|
/// MISSION FUNCTIONS
|
|
///-----------------------------------------------------------------------------------
|
|
|
|
PROC REQUEST_VARIATIONS()
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
#IF IS_DEBUG_BUILD SK_PRINT("CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY") #ENDIF
|
|
switch get_current_player_ped_enum()
|
|
case CHAR_MICHAEL
|
|
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID())
|
|
ENDIF
|
|
break
|
|
|
|
case CHAR_FRANKLIN
|
|
IF IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[MIKE])
|
|
AND IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[TREV])
|
|
AND IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Michael", g_sTriggerSceneAssets.ped[MIKE])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("trevor", g_sTriggerSceneAssets.ped[TREV])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Franklin", PLAYER_PED_ID())
|
|
ENDIF
|
|
break
|
|
|
|
case CHAR_TREVOR
|
|
IF IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[MIKE])
|
|
AND IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("trevor", PLAYER_PED_ID())
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Michael", g_sTriggerSceneAssets.ped[MIKE])
|
|
ENDIF
|
|
break
|
|
|
|
ENDSWITCH
|
|
|
|
IF IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[ANDREAS])
|
|
AND IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[DAVE])
|
|
AND IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[STEVE])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Andreas_Sanchez", g_sTriggerSceneAssets.ped[ANDREAS])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Dave_FBI", g_sTriggerSceneAssets.ped[DAVE])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("steve_FBI", g_sTriggerSceneAssets.ped[STEVE])
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Turn off the ambient services
|
|
PROC SERVICES_TOGGLE(BOOL bOn)
|
|
|
|
//Wanted
|
|
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, bOn)
|
|
ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, bOn)
|
|
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, bOn)
|
|
ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, bOn)
|
|
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, bOn)
|
|
|
|
IF bOn
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
ELSE
|
|
SET_MAX_WANTED_LEVEL(0)
|
|
SET_WANTED_LEVEL_MULTIPLIER(0)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Fail
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Called when the player has failed
|
|
/// deletes blips and clears the screen of text and conversations are ended
|
|
/// PARAMS:
|
|
/// fail - An Enum of the fail reason used in a switch statment to pick the correct text to display
|
|
PROC MISSION_FAILED(FAILED_REASONS fail = FR_NONE)
|
|
|
|
CLEAR_PRINTS()
|
|
KILL_ANY_CONVERSATION()
|
|
|
|
SWITCH fail
|
|
CASE FR_NONE
|
|
|
|
BREAK
|
|
|
|
CASE FR_MIKE_KILLED
|
|
sFailReason = "CMN_MDIED"
|
|
BREAK
|
|
|
|
CASE FR_MIKE_THREATENED
|
|
sFailReason = "INT_THREAT"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
eMissionState = MS_FAILED
|
|
eState = SS_INIT
|
|
|
|
ENDPROC
|
|
|
|
///-----------------------------------------------------------------------------------
|
|
/// STATE MACHINES
|
|
///-----------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Sets up a stage requirment via a switch using an ENUM
|
|
/// Stage requirements include the hunter the saleform or the mission text etc.
|
|
/// PARAMS:
|
|
/// missionReq - The Enum of the required mission element e.g. RQ_TEXT
|
|
/// pos - The position the thing is spawned at - if no position is required the use vSafeVec
|
|
/// If spawning multiple things at once then have the postions already in the switch statement
|
|
/// as calling this func multiple times wont work as well with the other function that calls it
|
|
/// dir - This is the heading or direction you want the thing to face when spawned. Defaults to
|
|
/// 0.0
|
|
/// RETURNS:
|
|
/// TRUE when the thing required is created/loaded/setup or whatever.
|
|
///
|
|
FUNC BOOL SETUP_STAGE_REQUIREMENTS(MISSION_REQ missionReq,VECTOR pos, FLOAT dir=0.0)
|
|
SWITCH missionReq
|
|
CASE RQ_NONE
|
|
IF ARE_VECTORS_ALMOST_EQUAL(pos, vSafeVec)
|
|
AND dir = 0.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE RQ_CUTSCENE
|
|
IF NOT IS_REPLAY_IN_PROGRESS()
|
|
IF HAS_CUTSCENE_LOADED()
|
|
#IF IS_DEBUG_BUILD SK_PRINT("HAS_CUTSCENE_LOADED()") #ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
IF eStartedPlayer = CHAR_FRANKLIN
|
|
REQUEST_CUTSCENE_WITH_PLAYBACK_LIST("FBI_4_INT", cs_section_4|cs_section_5| cs_section_6|CS_SECTION_7)
|
|
ELIF eStartedPlayer = CHAR_TREVOR
|
|
REQUEST_CUTSCENE_WITH_PLAYBACK_LIST("FBI_4_INT", cs_section_3 | cs_section_4| cs_section_5| cs_section_6|CS_SECTION_7)
|
|
ELSE
|
|
REQUEST_CUTSCENE("FBI_4_INT")
|
|
ENDIF
|
|
ELSE
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD SK_PRINT("HAS_CUTSCENE_LOADED() FAILED") #ENDIF
|
|
BREAK
|
|
|
|
CASE RQ_MIKE
|
|
IF eStartedPlayer = CHAR_MICHAEL
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[3])
|
|
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[3], TRUE, TRUE)
|
|
piPeds[MIKE] = g_sTriggerSceneAssets.ped[3]
|
|
|
|
IF IS_PED_UNINJURED(piPeds[MIKE])
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_MIKE")
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_MIKE FAILED")
|
|
#ENDIF
|
|
ELSE
|
|
IF CREATE_PLAYER_PED_ON_FOOT(piPeds[MIKE], CHAR_MICHAEL, <<1982.1981, 3818.9526, 31.4232>>, 215.9222, FALSE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE RQ_FRANK
|
|
// IF IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[FRANK])
|
|
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[FRANK], TRUE, TRUE)
|
|
// piPeds[FRANK] = g_sTriggerSceneAssets.ped[FRANK]
|
|
//
|
|
// IF IS_PED_UNINJURED(piPeds[FRANK])
|
|
// #IF IS_DEBUG_BUILD
|
|
// SK_PRINT("RQ_FRANK")
|
|
// #ENDIF
|
|
RETURN TRUE
|
|
// ENDIF
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// SK_PRINT("RQ_FRANK FAILED")
|
|
// #ENDIF
|
|
// ENDIF
|
|
BREAK
|
|
|
|
CASE RQ_TREV
|
|
IF eStartedPlayer = CHAR_MICHAEL
|
|
RETURN TRUE
|
|
ELIF eStartedPlayer = CHAR_TREVOR
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[4])
|
|
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[4], TRUE, TRUE)
|
|
piPeds[TREV] = g_sTriggerSceneAssets.ped[4]
|
|
|
|
IF IS_PED_UNINJURED(piPeds[TREV])
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_TREV")
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_TREV FAILED")
|
|
#ENDIF
|
|
ELSE
|
|
IF CREATE_PLAYER_PED_ON_FOOT(piPeds[TREV], CHAR_TREVOR, <<1982.1981, 3818.9526, 31.4232>>, 215.9222, FALSE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE RQ_STEVE
|
|
IF IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[2])
|
|
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[2], TRUE, TRUE)
|
|
piPeds[STEVE] = g_sTriggerSceneAssets.ped[2]
|
|
|
|
IF IS_PED_UNINJURED(piPeds[STEVE])
|
|
SET_PED_PROP_INDEX(piPeds[STEVE], ANCHOR_EYES, 0)
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_STEVE")
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_STEVE FAILED")
|
|
#ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE RQ_ANDREAS
|
|
IF IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[0])
|
|
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[0], TRUE, TRUE)
|
|
piPeds[ANDREAS] = g_sTriggerSceneAssets.ped[0]
|
|
|
|
IF IS_PED_UNINJURED(piPeds[ANDREAS])
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_ANDREAS")
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_ANDREAS FAILED")
|
|
#ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE RQ_DAVE
|
|
IF IS_PED_UNINJURED(g_sTriggerSceneAssets.ped[1])
|
|
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[1], TRUE, TRUE)
|
|
piPeds[DAVE] = g_sTriggerSceneAssets.ped[1]
|
|
|
|
IF IS_PED_UNINJURED(piPeds[DAVE])
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_DAVE")
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_DAVE FAILED")
|
|
#ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE RQ_DAVES_PHONE
|
|
IF eStartedPlayer != CHAR_MICHAEL
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_ALIVE(g_sTriggerSceneAssets.object[0])
|
|
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.object[0], TRUE, TRUE)
|
|
oiDavesPhone = g_sTriggerSceneAssets.object[0]
|
|
|
|
IF IS_ENTITY_ALIVE(oiDavesPhone)
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_DAVES_PHONE")
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_DAVES_PHONE FAILED")
|
|
#ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE RQ_MIKE_CAR
|
|
// IF IS_VEHICLE_OK(g_sTriggerSceneAssets.veh[0])
|
|
// SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.veh[0], TRUE, TRUE)
|
|
// viCars[MIKE_CAR] = g_sTriggerSceneAssets.veh[0]
|
|
//
|
|
// IF IS_VEHICLE_OK(viCars[MIKE_CAR])
|
|
// #IF IS_DEBUG_BUILD
|
|
// SK_PRINT("RQ_MIKE_CAR")
|
|
// #ENDIF
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// SK_PRINT("RQ_MIKE_CAR FAILED")
|
|
// #ENDIF
|
|
// ELSE
|
|
// #IF IS_DEBUG_BUILD
|
|
// SK_PRINT("RQ_MIKE_CAR")
|
|
// #ENDIF
|
|
RETURN TRUE
|
|
// ENDIF
|
|
BREAK
|
|
CASE RQ_FRANK_CAR
|
|
IF CREATE_PLAYER_VEHICLE(viCars[FRANK_CAR], CHAR_FRANKLIN, <<1379.6998, -2056.0024, 50.9983>>, 231.3996)
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_FRANK_CAR")
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_FRANK_CAR FAILED")
|
|
#ENDIF
|
|
BREAK
|
|
CASE RQ_TREV_CAR
|
|
IF IS_VEHICLE_OK(g_sTriggerSceneAssets.veh[1])
|
|
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.veh[1], TRUE, TRUE)
|
|
viCars[TREV_CAR] = g_sTriggerSceneAssets.veh[1]
|
|
|
|
IF IS_VEHICLE_OK(viCars[TREV_CAR])
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_TREV_CAR")
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_TREV_CAR FAILED")
|
|
#ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("RQ_TREV_CAR")
|
|
#ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DO_SETUP_FOR_AGENTS()
|
|
IF SETUP_STAGE_REQUIREMENTS(RQ_STEVE, vSafeVec)
|
|
AND SETUP_STAGE_REQUIREMENTS(RQ_ANDREAS, vSafeVec)
|
|
AND SETUP_STAGE_REQUIREMENTS(RQ_DAVE, vSafeVec)
|
|
AND SETUP_STAGE_REQUIREMENTS(RQ_DAVES_PHONE, vSafeVec)
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DO_SETUP_FOR_PLAYER_MIKE()
|
|
IF CREATE_PLAYER_PED_ON_FOOT(piPeds[TREV], CHAR_TREVOR, <<1377.1952, -2103.5322, 53.4723>>, 215.9222, FALSE, FALSE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
FUNC BOOL DO_SETUP_FOR_PLAYER_TREV()
|
|
IF SETUP_STAGE_REQUIREMENTS(RQ_MIKE, vSafeVec)
|
|
AND SETUP_STAGE_REQUIREMENTS(RQ_MIKE_CAR, vSafeVec)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
FUNC BOOL DO_SETUP_FOR_PLAYER_FRANK()
|
|
IF SETUP_STAGE_REQUIREMENTS(RQ_MIKE, vSafeVec)
|
|
AND SETUP_STAGE_REQUIREMENTS(RQ_TREV, vSafeVec)
|
|
AND SETUP_STAGE_REQUIREMENTS(RQ_MIKE_CAR, vSafeVec)
|
|
AND SETUP_STAGE_REQUIREMENTS(RQ_TREV_CAR, vSafeVec)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL PICK_AND_LOAD_FOR_PLAYER()
|
|
SWITCH GET_PLAYER_PED_ENUM(PLAYER_PED_ID())
|
|
CASE CHAR_MICHAEL
|
|
IF DO_SETUP_FOR_PLAYER_MIKE()
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CHAR_FRANKLIN
|
|
IF DO_SETUP_FOR_PLAYER_FRANK()
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CHAR_TREVOR
|
|
IF DO_SETUP_FOR_PLAYER_TREV()
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC SWITCH_PLAYER_TO_TREV()
|
|
IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_TREVOR
|
|
SELECTOR_PED_STRUCT sSelector
|
|
|
|
sSelector.pedID[SELECTOR_PED_TREVOR] = piPeds[TREV]
|
|
sSelector.pedID[SELECTOR_PED_MICHAEL] = piPeds[MIKE]
|
|
sSelector.pedID[SELECTOR_PED_FRANKLIN] = piPeds[FRANK]
|
|
|
|
|
|
IF eStartedPlayer != CHAR_TREVOR
|
|
MAKE_SELECTOR_PED_SELECTION(sSelector, SELECTOR_PED_TREVOR)
|
|
IF TAKE_CONTROL_OF_SELECTOR_PED(sSelector, TRUE, TRUE, TCF_CLEAR_TASK_INTERRUPT_CHECKS)
|
|
#IF IS_DEBUG_BUILD SK_PRINT("TAKE_CONTROL_OF_SELECTOR_PED(sSelector)") #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Used to setup a mission stage(or state if you call it that) Uses a switch statement to pick which
|
|
/// set of SETUP_STAGE_REQUIREMENTS() to call. It checks to see if all the stage requirements are
|
|
/// setup and then does any other setup needed. such as setting the players position or switching a
|
|
/// bool to true or false etc.
|
|
/// Handles setting up stuff needed after a Z or p skip first then the normal setup takes place
|
|
/// PARAMS:
|
|
/// eStage - The mission state/stage that needs setting up
|
|
/// bJumped - Wether or not the state/stage has been jumped to using Z or P skips
|
|
/// RETURNS:
|
|
/// TRUE if everything required for a stage is loaded properly
|
|
FUNC BOOL SETUP_MISSION_STAGE(MISSION_STATE eStage, BOOL bJumped = FALSE)
|
|
SWITCH eStage
|
|
CASE MS_SET_UP
|
|
IF bJumped //If we have jumped to this stage set up everything that might of been cleared buy the jump to funtions
|
|
bJumpSkip = FALSE // everything has been setup that is not key to this stage but is required to carry the mission on from this stage so reset the jump flag
|
|
RC_END_Z_SKIP()
|
|
ELSE
|
|
IF SETUP_STAGE_REQUIREMENTS(RQ_CUTSCENE, vSafeVec)
|
|
IF NOT IS_REPLAY_IN_PROGRESS()
|
|
IF DO_SETUP_FOR_AGENTS()
|
|
AND PICK_AND_LOAD_FOR_PLAYER()
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(GET_PLAYER_PED_MODEL(CHAR_TREVOR))
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN))
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(GET_PLAYER_PED_MODEL(CHAR_MICHAEL))
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("MS_SET_UP")
|
|
#ENDIF
|
|
MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_MISSION_FBI_4_INTRO)
|
|
RETURN TRUE //all mission stage requirements set up return true and activate stage
|
|
ENDIF
|
|
ELSE
|
|
RETURN TRUE //all mission stage requirements set up return true and activate stage
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("MS_SET_UP, FAILED")
|
|
#ENDIF
|
|
BREAK
|
|
|
|
CASE MS_INTRO
|
|
IF bJumped //If we have jumped to this stage set up everything that might of been cleared buy the jump to funtions
|
|
IF SETUP_MISSION_STAGE(MS_SET_UP)
|
|
bJumpSkip = FALSE // everything has been setup that is not key to this stage but is required to carry the mission on from this stage so reset the jump flag
|
|
RC_END_Z_SKIP()
|
|
ENDIF
|
|
ELSE
|
|
REQUEST_ADDITIONAL_TEXT("FBIINT", MISSION_TEXT_SLOT)
|
|
IF HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
|
|
IF eStartedPlayer != CHAR_TREVOR
|
|
REQUEST_MODEL(BODHI2)
|
|
REQUEST_MODEL(BAGGER)
|
|
IF HAS_MODEL_LOADED(BODHI2)
|
|
AND HAS_MODEL_LOADED(BAGGER)
|
|
RETURN TRUE //all mission stage requirements set up return true and activate stage
|
|
ENDIF
|
|
ELSE
|
|
REQUEST_MODEL(BAGGER)
|
|
IF HAS_MODEL_LOADED(BAGGER)
|
|
RETURN TRUE //all mission stage requirements set up return true and activate stage
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("MS_INTRO, FAILED")
|
|
#ENDIF
|
|
BREAK
|
|
|
|
CASE MS_LEAVE_AREA
|
|
IF bJumped //If we have jumped to this stage set up everything that might of been cleared buy the jump to funtions
|
|
IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_TREVOR
|
|
IF CREATE_PLAYER_PED_ON_FOOT(piPeds[TREV], CHAR_TREVOR, <<1377.1952, -2103.5322, 53.4723>>, 215.9222, FALSE, FALSE)
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<1423.14331, -2040.78406, 45.99826>>, <<1345.54712, -2093.60181, 120.02565>>, 79.30, <<1399.7205, -2057.4124, 50.9981>>, 324.4025 , GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
|
|
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
|
|
piPeds[MIKE] = PLAYER_PED_ID()
|
|
SWITCH_PLAYER_TO_TREV()
|
|
SET_PED_POS(piPeds[MIKE], <<1391.7767, -2071.4766, 50.9982>>, 35.6553)
|
|
ELSE
|
|
piPeds[FRANK] = PLAYER_PED_ID()
|
|
SWITCH_PLAYER_TO_TREV()
|
|
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(piPeds[MIKE], CHAR_MICHAEL, <<1391.7767, -2071.4766, 50.9982>>, 35.6553, FALSE, FALSE)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDIF
|
|
|
|
MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_MISSION_FBI_4_INTRO)
|
|
ENDIF
|
|
ELSE
|
|
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(piPeds[MIKE], CHAR_MICHAEL, <<1391.7767, -2071.4766, 50.9982>>, 35.6553, FALSE, FALSE)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDIF
|
|
|
|
IF CREATE_PLAYER_VEHICLE(viCars[TREV_CAR], CHAR_TREVOR, <<1382.499878,-2068.988037,51.967495>>, 13.785377)
|
|
REQUEST_ADDITIONAL_TEXT("FBIINT", MISSION_TEXT_SLOT)
|
|
IF HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
|
|
bJumpSkip = FALSE // everything has been setup that is not key to this stage but is required to carry the mission on from this stage so reset the jump flag
|
|
END_REPLAY_SETUP(viCars[TREV_CAR])
|
|
RC_END_Z_SKIP()
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
RETURN TRUE //all mission stage requirements set up return true and activate stage
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
SK_PRINT("MS_LEAVE_AREA, FAILED")
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
// ===========================================================================================================
|
|
// Termination
|
|
// ===========================================================================================================
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Cleanup
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Standard delete all function used the wait for fail state
|
|
/// Safe deletes all peds, props and vehicles
|
|
PROC DELETE_ALL()
|
|
INT i
|
|
FOR i = ENUM_TO_INT(ANDREAS) TO ENUM_TO_INT(FRANK)
|
|
IF piPeds[i] != PLAYER_PED_ID()
|
|
#IF IS_DEBUG_BUILD SK_PRINT_INT("DELETED === ", i) #ENDIF
|
|
SAFE_DELETE_PED(piPeds[i])
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
FOR i = ENUM_TO_INT(MIKE_CAR) TO (ENUM_TO_INT(NUM_CARS)-1)
|
|
#IF IS_DEBUG_BUILD SK_PRINT_INT("DELETED VEHICLE === ", i) #ENDIF
|
|
IF ENUM_TO_INT(TREV_CAR) <> i
|
|
SAFE_DELETE_VEHICLE(viCars[i])
|
|
ELSE
|
|
SAFE_RELEASE_VEHICLE(viCars[i])
|
|
ENDIF
|
|
ENDFOR
|
|
ENDPROC
|
|
|
|
PROC RELEASE_ALL()
|
|
INT i
|
|
FOR i = ENUM_TO_INT(ANDREAS) TO ENUM_TO_INT(FRANK)
|
|
IF piPeds[i] != PLAYER_PED_ID()
|
|
#IF IS_DEBUG_BUILD SK_PRINT_INT("RELEASED === ", i) #ENDIF
|
|
SAFE_RELEASE_PED(piPeds[i])
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
FOR i = ENUM_TO_INT(MIKE_CAR) TO (ENUM_TO_INT(NUM_CARS)-1)
|
|
#IF IS_DEBUG_BUILD SK_PRINT_INT("RELEASED VEHICLE === ", i) #ENDIF
|
|
SAFE_RELEASE_VEHICLE(viCars[i])
|
|
ENDFOR
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Deletes all mission entities and any other clean up
|
|
/// This is used to clear the mission when P or Z skipping
|
|
PROC CLEANUP(BOOL bDelAll = TRUE)
|
|
IF bDelAll
|
|
#IF IS_DEBUG_BUILD SK_PRINT("CLEANUP = DEL ALL") #ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD SK_PRINT("CLEANUP = RELEASE ") #ENDIF
|
|
ENDIF
|
|
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
CLEAR_PRINTS()
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
IF bDelAll
|
|
DELETE_ALL()
|
|
ELSE
|
|
RELEASE_ALL()
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(camMain)
|
|
RENDER_SCRIPT_CAMS(FALSE,FALSE)
|
|
DESTROY_CAM(camMain)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Cleans up mission entities, releases the entity to be cleaned up by population
|
|
/// and will give a suitable task to the peds before clean up
|
|
PROC Script_Cleanup()
|
|
SERVICES_TOGGLE(TRUE)
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
|
|
SET_ALL_RANDOM_PEDS_FLEE(PLAYER_ID(), FALSE)
|
|
CLEANUP(FALSE)
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
//***************************************
|
|
// :MISSION FLOW FUNC:
|
|
//***************************************
|
|
//PURPOSE: Advances or reverses the mission stage
|
|
PROC NEXT_STAGE( BOOL bReverse = FALSE)
|
|
iMissionState = ENUM_TO_INT(eMissionState)
|
|
IF NOT bReverse
|
|
eMissionState = INT_TO_ENUM(MISSION_STATE, (iMissionState + 1))
|
|
ELSE
|
|
IF iMissionState > 0
|
|
eMissionState = INT_TO_ENUM(MISSION_STATE, (iMissionState - 1))
|
|
ENDIF
|
|
ENDIF
|
|
eState = SS_INIT
|
|
ENDPROC
|
|
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Pass
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Pass function calls cleanup and termination
|
|
/// if the player debug passes this function warps him to the end
|
|
/// of the chasem, it will then complete
|
|
PROC Script_Passed(BOOL paramSeamlessMissionPass = FALSE, BOOL paramHidePassScreen = FALSE)
|
|
CLEAR_PRINTS()
|
|
KILL_ANY_CONVERSATION()
|
|
|
|
Mission_Flow_Mission_Passed(paramSeamlessMissionPass, paramHidePassScreen)
|
|
Script_Cleanup()
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Fail
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Waits for the screen to fade out then updates failed reason
|
|
PROC FAILED_WAIT_FOR_FADE()
|
|
SWITCH eState
|
|
CASE SS_INIT
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
#IF IS_DEBUG_BUILD SK_PRINT("Init fail") #ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sFailReason)
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON(sFailReason)
|
|
ELSE
|
|
MISSION_FLOW_MISSION_FAILED()
|
|
ENDIF
|
|
|
|
eState = SS_ACTIVE
|
|
BREAK
|
|
|
|
CASE SS_ACTIVE
|
|
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
|
|
// Do a check here to see if we need to warp the player at all
|
|
// (only set the fail warp locations if we can't leave the player where he was)
|
|
//
|
|
|
|
#IF IS_DEBUG_BUILD SK_PRINT("Failed") #ENDIF
|
|
DELETE_ALL()
|
|
Script_Cleanup()
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD SK_PRINT("waiting fail screen") #ENDIF
|
|
// not finished fading out
|
|
// you may want to handle dialogue etc here.
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
|
|
//------------------------------------------------------------------------------------
|
|
// MISSION STATES
|
|
//------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Jumps the mission to a specific stage
|
|
/// PARAMS:
|
|
/// stage - The state to jump to
|
|
PROC JUMP_TO_STAGE(MISSION_STATE stage)
|
|
RC_START_Z_SKIP()
|
|
bJumpSkip = TRUE //Tells the mission stage setup function that we have just jumped and special setup is required
|
|
eMissionState = stage
|
|
IF eMissionState = MS_SET_UP
|
|
#IF IS_DEBUG_BUILD SK_PRINT("eMission state = MSS_SETUP GOING TO INTRO ") #ENDIF
|
|
eMissionState = MS_SET_UP
|
|
ENDIF
|
|
// bLoadingFinCutscene = FALSE
|
|
eState = SS_INIT
|
|
CLEANUP() //delete everything
|
|
ENDPROC
|
|
|
|
|
|
///PURPOSE:
|
|
/// Initiate the mission and load the things needed
|
|
/// for the immediate gameplay
|
|
/// The skip menu is initialsed here
|
|
/// And if a replay is being done then we init and load assests for the check point
|
|
PROC INITMISSION()
|
|
SWITCH eState
|
|
CASE SS_INIT
|
|
//DO_SCREEN_FADE_OUT(0)
|
|
// #IF IS_DEBUG_BUILD
|
|
// SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE (TRUE)
|
|
// #ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD SK_PRINT("INIT MISSION - THIS WILL LOOP") #ENDIF
|
|
|
|
IF SETUP_MISSION_STAGE(eMissionState)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
s_skip_menu[0].sTxtLabel = "MS_INTRO"
|
|
#ENDIF
|
|
|
|
IF IS_VEHICLE_OK(viCars[TREV_CAR])
|
|
SET_VEHICLE_DOORS_LOCKED(viCars[TREV_CAR], VEHICLELOCK_UNLOCKED)
|
|
ENDIF
|
|
|
|
|
|
SERVICES_TOGGLE(FALSE)
|
|
|
|
|
|
IF IS_REPLAY_IN_PROGRESS()
|
|
JUMP_TO_STAGE(MS_LEAVE_AREA)
|
|
ELSE
|
|
IF IS_REPEAT_PLAY_ACTIVE()
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK()
|
|
ENDIF
|
|
|
|
eState = SS_CLEANUP
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
#IF IS_DEBUG_BUILD SK_PRINT("CLEANEDUP INIT MISSION") #ENDIF
|
|
NEXT_STAGE()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
|
|
PROC REG_PEDS_FOR_SCENE()
|
|
IF IS_PED_UNINJURED(piPeds[ANDREAS])
|
|
AND IS_PED_UNINJURED(piPeds[DAVE])
|
|
AND IS_PED_UNINJURED(piPeds[STEVE])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(piPeds[ANDREAS], "Andreas_Sanchez", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(piPeds[DAVE], "Dave_FBI", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(piPeds[STEVE], "steve_FBI", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
IF IS_ENTITY_ALIVE(oiDavesPhone)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(oiDavesPhone, "DaveNortons_Phone", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH GET_CURRENT_PLAYER_PED_ENUM()
|
|
|
|
CASE CHAR_MICHAEL
|
|
piPeds[MIKE] = PLAYER_PED_ID()
|
|
REGISTER_ENTITY_FOR_CUTSCENE(piPeds[FRANK], "Franklin", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_FRANKLIN))
|
|
IF IS_PED_UNINJURED(piPeds[TREV])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(piPeds[TREV], "trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_TREVOR))
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(viCars[TREV_CAR], "trevors_car", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, BODHI2, CEO_IS_CASCADE_SHADOW_FOCUS_ENTITY_DURING_EXIT)
|
|
BREAK
|
|
|
|
CASE CHAR_FRANKLIN
|
|
IF IS_PED_UNINJURED(piPeds[MIKE])
|
|
AND IS_PED_UNINJURED(piPeds[TREV])
|
|
AND IS_VEHICLE_OK(viCars[TREV_CAR])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(piPeds[MIKE], "michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(piPeds[TREV], "trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
piPeds[FRANK] = PLAYER_PED_ID()
|
|
// IF NOT IS_ENTITY_A_MISSION_ENTITY(piPeds[FRANK])
|
|
// SET_ENTITY_AS_MISSION_ENTITY(piPeds[FRANK], TRUE, TRUE)
|
|
// ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(viCars[TREV_CAR], "trevors_car", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, BODHI2, CEO_IS_CASCADE_SHADOW_FOCUS_ENTITY_DURING_EXIT)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CHAR_TREVOR
|
|
IF IS_PED_UNINJURED(piPeds[MIKE])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(piPeds[MIKE], "michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_MICHAEL))
|
|
REGISTER_ENTITY_FOR_CUTSCENE(piPeds[FRANK], "Franklin", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_FRANKLIN))
|
|
|
|
IF IS_VEHICLE_OK(GET_PLAYERS_LAST_VEHICLE())
|
|
enumCharacterList playercar
|
|
playercar = GET_PLAYER_PED_PERSONAL_VEHICLE_BELONGS_TO(GET_PLAYERS_LAST_VEHICLE())
|
|
IF playercar = CHAR_TREVOR
|
|
viCars[TREV_CAR]= GET_PLAYERS_LAST_VEHICLE()
|
|
#IF IS_DEBUG_BUILD SK_PRINT("Vehicle is owned by TREV") #ENDIF
|
|
SET_ENTITY_AS_MISSION_ENTITY(viCars[TREV_CAR], TRUE, TRUE)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(viCars[TREV_CAR], "trevors_car", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, BODHI2, CEO_IS_CASCADE_SHADOW_FOCUS_ENTITY_DURING_EXIT)
|
|
ELSE
|
|
REGISTER_ENTITY_FOR_CUTSCENE(viCars[TREV_CAR], "trevors_car", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, BODHI2, CEO_IS_CASCADE_SHADOW_FOCUS_ENTITY_DURING_EXIT)
|
|
ENDIF
|
|
ELSE
|
|
REGISTER_ENTITY_FOR_CUTSCENE(viCars[TREV_CAR], "trevors_car", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, BODHI2, CEO_IS_CASCADE_SHADOW_FOCUS_ENTITY_DURING_EXIT)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
|
|
PROC MARK_START_CAR_AS_VEH_GEN(VECTOR pos, FLOAT dir)
|
|
VEHICLE_INDEX veh = GET_PLAYERS_LAST_VEHICLE()
|
|
IF DOES_ENTITY_EXIST(veh)
|
|
IF IS_VEHICLE_DRIVEABLE(veh)
|
|
CPRINTLN(DEBUG_MISSION, "Setting snapshop vehicle as vehicle get for prep ", GET_THIS_SCRIPT_NAME())
|
|
SET_MISSION_VEHICLE_GEN_VEHICLE(veh, pos, dir)
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, " vehicle not drivable ", GET_THIS_SCRIPT_NAME())
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "vehicle doesnt exist ", GET_THIS_SCRIPT_NAME())
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// State for the mocap at the safe
|
|
PROC MOCAP_INTRO()
|
|
INT iCutTime = GET_CUTSCENE_TIME()
|
|
IF eState = SS_ACTIVE
|
|
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY()
|
|
AND bLoadingFinCutscene
|
|
AND NOT bJumpSkip
|
|
AND iCutTime < 157323
|
|
#IF IS_DEBUG_BUILD SK_PRINT_INT("Player skiped cutscene at time = ", iCutTime) #ENDIF
|
|
// eState = SS_SKIPPED
|
|
ELSE
|
|
IF GET_CUTSCENE_TIME() > 157323
|
|
SET_CUTSCENE_CAN_BE_SKIPPED(FALSE)
|
|
#IF IS_DEBUG_BUILD SK_PRINT_INT("cutscene at time = ", iCutTime) #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Load everything for the next stage while the cutscene is playing
|
|
IF NOT bLoadingFinCutscene
|
|
IF SETUP_MISSION_STAGE(MS_INTRO, bJumpSkip)
|
|
bLoadingFinCutscene = TRUE //loading done
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH eState
|
|
CASE SS_INIT
|
|
CLEAR_PRINTS()
|
|
IF CAN_PLAYER_START_CUTSCENE(TRUE)
|
|
#IF IS_DEBUG_BUILD SK_PRINT("CAN_PLAYER_START_CUTSCENE(TRUE)") #ENDIF
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
IF IS_PED_UNINJURED(piPeds[STEVE])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("steve_FBI", piPeds[STEVE])
|
|
SET_CUTSCENE_PED_PROP_VARIATION("steve_FBI", ANCHOR_EYES, 0)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(piPeds[FRANK])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Franklin", piPeds[FRANK])
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(piPeds[TREV])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("trevor", piPeds[TREV])
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(piPeds[MIKE])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("michael", piPeds[MIKE])
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF RC_IS_CUTSCENE_OK_TO_START()
|
|
#IF IS_DEBUG_BUILD SK_PRINT("RC_IS_CUTSCENE_OK_TO_START()") #ENDIF
|
|
|
|
REG_PEDS_FOR_SCENE()
|
|
|
|
START_CUTSCENE(CUTSCENE_PLAYER_FP_FLASH_TREVOR)
|
|
|
|
SET_VEHICLE_MODEL_PLAYER_WILL_EXIT_SCENE(GET_PLAYER_VEH_MODEL(CHAR_TREVOR))
|
|
|
|
IF IS_VEHICLE_OK(viCars[TREV_CAR])
|
|
SET_VEHICLE_USE_CUTSCENE_WHEEL_COMPRESSION(viCars[TREV_CAR])
|
|
ENDIF
|
|
WAIT(0)
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.5)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.5)
|
|
|
|
VECTOR vRespotVeh, vLargeRespotVeh
|
|
FLOAT fRespotVeh, fLargeRespotVeh
|
|
|
|
vLargeRespotVeh = <<1368.7412, -2068.1438, 51.0552>>
|
|
fLargeRespotVeh = 163.6238
|
|
SWITCH GET_CURRENT_PLAYER_PED_ENUM()
|
|
CASE CHAR_MICHAEL
|
|
|
|
IF IS_REPLAY_START_VEHICLE_UNDER_SIZE_LIMIT(GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
vRespotVeh = <<1388.0695, -2057.9080, 50.9983>>
|
|
fRespotVeh = 263.5418
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<1423.14331, -2040.78406, 45.99826>>, <<1345.54712, -2093.60181, 120.02565>>, 79.30, vRespotVeh, fRespotVeh , GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
MARK_START_CAR_AS_VEH_GEN(vRespotVeh, fRespotVeh)
|
|
ELSE
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<1423.14331, -2040.78406, 45.99826>>, <<1345.54712, -2093.60181, 120.02565>>, 79.30, vLargeRespotVeh, fLargeRespotVeh)
|
|
MARK_START_CAR_AS_VEH_GEN(vLargeRespotVeh, fLargeRespotVeh)
|
|
ENDIF
|
|
viCars[MIKE_CAR] = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_OK(viCars[MIKE_CAR])
|
|
SET_ENTITY_AS_MISSION_ENTITY(viCars[MIKE_CAR])
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CHAR_FRANKLIN
|
|
IF IS_REPLAY_START_VEHICLE_UNDER_SIZE_LIMIT(GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
vRespotVeh = <<1379.6998, -2056.0024, 50.9983>>
|
|
fRespotVeh = 231.3996
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<1423.14331, -2040.78406, 45.99826>>, <<1345.54712, -2093.60181, 120.02565>>, 79.30, vRespotVeh, fRespotVeh , GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
// MARK_START_CAR_AS_VEH_GEN(vRespotVeh, fRespotVeh)
|
|
ELSE
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<1423.14331, -2040.78406, 45.99826>>, <<1345.54712, -2093.60181, 120.02565>>, 79.30, vLargeRespotVeh, fLargeRespotVeh)
|
|
// MARK_START_CAR_AS_VEH_GEN(vLargeRespotVeh, fLargeRespotVeh)
|
|
ENDIF
|
|
viCars[FRANK_CAR] = GET_PLAYERS_LAST_VEHICLE()
|
|
IF IS_VEHICLE_OK(viCars[FRANK_CAR])
|
|
SET_ENTITY_AS_MISSION_ENTITY(viCars[FRANK_CAR])
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE CHAR_TREVOR
|
|
IF NOT IS_VEHICLE_OK(viCars[TREV_CAR])
|
|
IF IS_REPLAY_START_VEHICLE_UNDER_SIZE_LIMIT(GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
vRespotVeh = <<1382.499878,-2068.988037,51.967495>>
|
|
fRespotVeh = 13.785377
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<1423.14331, -2040.78406, 45.99826>>, <<1345.54712, -2093.60181, 120.02565>>, 79.30, vLargeRespotVeh, fLargeRespotVeh , GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
// MARK_START_CAR_AS_VEH_GEN(vRespotVeh, fRespotVeh)
|
|
ELSE
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<1423.14331, -2040.78406, 45.99826>>, <<1345.54712, -2093.60181, 120.02565>>, 79.30, vLargeRespotVeh, fLargeRespotVeh)
|
|
// MARK_START_CAR_AS_VEH_GEN(vLargeRespotVeh, fLargeRespotVeh)
|
|
ENDIF
|
|
// viCars[TREV_CAR] = GET_PLAYERS_LAST_VEHICLE()
|
|
// IF IS_VEHICLE_OK(viCars[TREV_CAR])
|
|
// SET_ENTITY_AS_MISSION_ENTITY(viCars[TREV_CAR])
|
|
// ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
RC_START_CUTSCENE_MODE(<<-1046.6174, -516.3990, 35.0386>>)
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME, FALSE)
|
|
|
|
|
|
#IF IS_DEBUG_BUILD SK_PRINT("INIT MOCAP_INTRO") #ENDIF
|
|
eState = SS_ACTIVE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_ACTIVE
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.1)
|
|
|
|
IF eStartedPlayer != CHAR_FRANKLIN
|
|
IF NOT bRegisteredFrank
|
|
IF NOT IS_PED_UNINJURED(piPeds[FRANK])
|
|
IF DOES_CUTSCENE_ENTITY_EXIST("Franklin")
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Franklin"))
|
|
#IF IS_DEBUG_BUILD SK_PRINT("GET_CUTSCENE_SECTION_PLAYING REGISTERED FRANK") #ENDIF
|
|
piPeds[FRANK] = GET_PED_INDEX_FROM_ENTITY_INDEX( GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Franklin"))
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_CUTSCENE_SECTION_PLAYING() = 4
|
|
bRegisteredFrank = SETUP_STAGE_REQUIREMENTS(RQ_FRANK_CAR, vSafeVec)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PED_UNINJURED(piPeds[TREV])
|
|
SWITCH_PLAYER_TO_TREV()
|
|
ENDIF
|
|
|
|
IF NOT IS_VEHICLE_OK(viCars[TREV_CAR])
|
|
IF NOT bRegisteredTrev
|
|
IF DOES_CUTSCENE_ENTITY_EXIST("trevors_car")
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("trevors_car"))
|
|
viCars[TREV_CAR] = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX( GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("trevors_car"))
|
|
SET_VEHICLE_USE_CUTSCENE_WHEEL_COMPRESSION(viCars[TREV_CAR])
|
|
#IF IS_DEBUG_BUILD SK_PRINT("GET_CUTSCENE_SECTION_PLAYING REGISTERED TREV") #ENDIF
|
|
bRegisteredTrev = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT bRegisteredTrev
|
|
IF IS_VEHICLE_OK(viCars[TREV_CAR])
|
|
bRegisteredTrev = TRUE
|
|
SET_VEHICLE_USE_CUTSCENE_WHEEL_COMPRESSION(viCars[TREV_CAR])
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Andreas_Sanchez")
|
|
#IF IS_DEBUG_BUILD SK_PRINT("ANDREAS' EXIT STATE") #ENDIF
|
|
SAFE_DELETE_PED(piPeds[ANDREAS])
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Dave_FBI")
|
|
#IF IS_DEBUG_BUILD SK_PRINT("DAVEs EXIT STATE") #ENDIF
|
|
SAFE_DELETE_PED(piPeds[DAVE])
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("steve_FBI")
|
|
#IF IS_DEBUG_BUILD SK_PRINT("STEVEs EXIT STATE") #ENDIF
|
|
SAFE_DELETE_PED(piPeds[STEVE])
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("DaveNortons_Phone")
|
|
#IF IS_DEBUG_BUILD SK_PRINT("DaveNortons_Phone EXIT STATE") #ENDIF
|
|
SAFE_DELETE_OBJECT(oiDavesPhone)
|
|
ENDIF
|
|
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
#IF IS_DEBUG_BUILD SK_PRINT("Michael's EXIT STATE") #ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor")
|
|
#IF IS_DEBUG_BUILD SK_PRINT("Trevor's EXIT STATE") #ENDIF
|
|
IF IS_VEHICLE_OK(viCars[TREV_CAR])
|
|
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), viCars[TREV_CAR])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
SET_VEHICLE_DOOR_SHUT(viCars[TREV_CAR], SC_DOOR_FRONT_LEFT)
|
|
ENDIF
|
|
// SAFE_DELETE_VEHICLE(viCars[TREV_CAR])
|
|
// DELETE_ALL_SCRIPT_CREATED_PLAYER_VEHICLES(CHAR_TREVOR)
|
|
// SAFE_DELETE_PED(piPeds[TREV])
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin")
|
|
#IF IS_DEBUG_BUILD SK_PRINT("Franklin's EXIT STATE") #ENDIF
|
|
IF NOT bRegisteredFrank
|
|
IF DOES_CUTSCENE_ENTITY_EXIST("Franklin")
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Franklin"))
|
|
#IF IS_DEBUG_BUILD SK_PRINT("GET_CUTSCENE_SECTION_PLAYING REGISTERED FRANK") #ENDIF
|
|
piPeds[FRANK] = GET_PED_INDEX_FROM_ENTITY_INDEX( GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Franklin"))
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
SAFE_DELETE_PED(piPeds[FRANK])
|
|
ENDIF
|
|
|
|
IF iCutTime >= 166500
|
|
SAFE_DELETE_VEHICLE(viCars[FRANK_CAR])
|
|
DELETE_ALL_SCRIPT_CREATED_PLAYER_VEHICLES(CHAR_FRANKLIN)
|
|
ENDIF
|
|
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
#IF IS_DEBUG_BUILD SK_PRINT("CAMERA's EXIT STATE") #ENDIF
|
|
IF eStartedPlayer != CHAR_TREVOR
|
|
PLAY_SOUND_FRONTEND(-1, "Hit_1", "LONG_PLAYER_SWITCH_SOUNDS")
|
|
ANIMPOSTFX_PLAY("SwitchSceneTrevor", 0, FALSE)
|
|
ENDIF
|
|
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(-40.8422)
|
|
// SET_GAMEPLAY_CAM_RELATIVE_PITCH(-2.8838)
|
|
ENDIF
|
|
|
|
IF NOT IS_CUTSCENE_PLAYING()
|
|
AND bLoadingFinCutscene
|
|
SET_CUTSCENE_CAN_BE_SKIPPED(TRUE)
|
|
eState = SS_CLEANUP
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
STOP_GAMEPLAY_HINT()
|
|
IF iMissionTimer = -1
|
|
iMissionTimer = GET_GAME_TIMER()
|
|
ELIF ( GET_GAME_TIMER() - iMissionTimer) > 1000
|
|
bLoadingFinCutscene = FALSE
|
|
RC_END_CUTSCENE_MODE()
|
|
#IF IS_DEBUG_BUILD SK_PRINT("CLEANEDUP MOCAP_INTRO") #ENDIF
|
|
NEXT_STAGE()
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_SKIPPED
|
|
#IF IS_DEBUG_BUILD SK_PRINT("SKIPPED") #ENDIF
|
|
IF IS_CUTSCENE_PLAYING()
|
|
IF NOT bRegisteredTrev
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("trevors_car")
|
|
IF DOES_CUTSCENE_ENTITY_EXIST("trevors_car")
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("trevors_car"))
|
|
#IF IS_DEBUG_BUILD SK_PRINT("GET_CUTSCENE_SECTION_PLAYING REGISTERED TREV") #ENDIF
|
|
viCars[TREV_CAR] = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX( GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("trevors_car"))
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT bRegisteredFrank
|
|
IF DOES_CUTSCENE_ENTITY_EXIST("Franklin")
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Franklin"))
|
|
#IF IS_DEBUG_BUILD SK_PRINT("GET_CUTSCENE_SECTION_PLAYING REGISTERED FRANK") #ENDIF
|
|
piPeds[FRANK] = GET_PED_INDEX_FROM_ENTITY_INDEX( GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Franklin"))
|
|
bRegisteredFrank = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
|
|
SAFE_DELETE_VEHICLE(viCars[FRANK_CAR])
|
|
DELETE_ALL_SCRIPT_CREATED_PLAYER_VEHICLES(CHAR_FRANKLIN)
|
|
|
|
IF bRegisteredFrank
|
|
SAFE_DELETE_PED(piPeds[FRANK])
|
|
ENDIF
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(-27.6467)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-5.1166)
|
|
eState = SS_CLEANUP
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
FUNC BOOL HAS_PLAYER_BUMPED_MIKE()
|
|
IF IS_ENTITY_TOUCHING_ENTITY(piPeds[MIKE], PLAYER_PED_ID())
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
PROC START_NEW_SCENARIO(STRING rio, MIKE_STATES state)
|
|
CLEAR_PED_TASKS(piPeds[MIKE])
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(rio)
|
|
TASK_START_SCENARIO_IN_PLACE(piPeds[MIKE], rio, 1000, TRUE)
|
|
ENDIF
|
|
eMikeState = state
|
|
iMikeTimer = -1
|
|
ENDPROC
|
|
|
|
|
|
PROC WAIT_TO_UPDATE(INT iStateTime, STRING rio, MIKE_STATES state)
|
|
IF iMikeTimer != -1
|
|
IF (GET_GAME_TIMER() - iMikeTimer) > iStateTime
|
|
START_NEW_SCENARIO(rio, state)
|
|
ENDIF
|
|
ELSE
|
|
iMikeTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC MIKE_STATE()
|
|
|
|
IF iDialogueTimer = -1
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
iDialogueTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
ELSE
|
|
IF (GET_GAME_TIMER() - iDialogueTimer) > 12000
|
|
IF CREATE_CONVERSATION(s_conversation_peds, "FBIPRAU", "FBI4_INT_M", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
|
|
iDialogueTimer = -1
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH eMikeState
|
|
CASE MSS_WAIT_SMOKE
|
|
WAIT_TO_UPDATE(2000, "WORLD_HUMAN_SMOKING", MSS_SMOKE)
|
|
BREAK
|
|
|
|
CASE MSS_SMOKE
|
|
WAIT_TO_UPDATE(40000, "", MSS_WAIT_PHONE)
|
|
BREAK
|
|
|
|
CASE MSS_WAIT_PHONE
|
|
WAIT_TO_UPDATE(6000, "WORLD_HUMAN_STAND_MOBILE", MSS_PHONE)
|
|
BREAK
|
|
|
|
CASE MSS_PHONE
|
|
WAIT_TO_UPDATE(40000, "", MSS_IDLE)
|
|
BREAK
|
|
|
|
CASE MSS_IDLE
|
|
WAIT_TO_UPDATE(6000, "WORLD_HUMAN_STAND_IMPATIENT", MSS_WAIT_SMOKE)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC LEAVE_AREA()
|
|
|
|
SWITCH eState
|
|
CASE SS_INIT
|
|
IF SETUP_MISSION_STAGE(eMissionState, bJumpSkip)
|
|
#IF IS_DEBUG_BUILD SK_PRINT("INIT LEAVE_AREA") #ENDIF
|
|
iMissionTimer = GET_GAME_TIMER()
|
|
IF IS_PED_UNINJURED(piPeds[MIKE])
|
|
ADD_PED_FOR_DIALOGUE(s_conversation_peds, 0, piPeds[MIKE], "MICHAEL")
|
|
START_NEW_SCENARIO("WORLD_HUMAN_SMOKING", MSS_SMOKE)
|
|
SET_PED_PRIMARY_LOOKAT(piPeds[MIKE], PLAYER_PED_ID())
|
|
ENDIF
|
|
eState = SS_ACTIVE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_ACTIVE
|
|
IF IS_PED_UNINJURED(piPeds[MIKE])
|
|
MIKE_STATE()
|
|
IF HAS_PLAYER_BUMPED_MIKE()
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(piPeds[MIKE])
|
|
TASK_SMART_FLEE_PED(piPeds[MIKE], PLAYER_PED_ID(), 500, -1)
|
|
SET_PED_KEEP_TASK(piPeds[MIKE], TRUE)
|
|
MISSION_FAILED(FR_MIKE_THREATENED)
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_BULLET_IN_AREA(<<1393.96460, -2070.81079, 50.99826>>, 18.48)
|
|
OR IS_PROJECTILE_IN_AREA(<<1402.48901, -2056.89648, 50.0>>, <<1389.38367, -2082.86694, 61>>)
|
|
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(piPeds[MIKE], PLAYER_PED_ID())
|
|
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(piPeds[MIKE])
|
|
TASK_SMART_FLEE_PED(piPeds[MIKE], PLAYER_PED_ID(), 500, -1)
|
|
SET_PED_KEEP_TASK(piPeds[MIKE], TRUE)
|
|
MISSION_FAILED(FR_MIKE_THREATENED)
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_THIS_PRINT_BEING_DISPLAYED("INT_LEAVE")
|
|
PRINT_NOW("INT_LEAVE", 60000, 0)
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), <<1392.9344, -2072.4121, 50.9982>>, 180)
|
|
eState = SS_CLEANUP
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
#IF IS_DEBUG_BUILD SK_PRINT("CLEANEDUP LEAVE_AREA") #ENDIF
|
|
Script_Passed()
|
|
BREAK
|
|
|
|
CASE SS_SKIPPED
|
|
RC_END_Z_SKIP()
|
|
eState = SS_CLEANUP
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
|
|
|
|
///DEBUG KEYS
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
/// PURPOSE: Check for Forced Pass or Fail
|
|
PROC DEBUG_Check_Debug_Keys()
|
|
|
|
// Check for Pass
|
|
IF eState = SS_ACTIVE
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
|
|
KILL_ANY_CONVERSATION()
|
|
CLEAR_PRINTS()
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
Script_Passed()
|
|
ENDIF
|
|
|
|
// Check for Fail
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
|
|
KILL_ANY_CONVERSATION()
|
|
CLEAR_PRINTS()
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
MISSION_FAILED(FR_NONE)
|
|
ENDIF
|
|
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J))
|
|
KILL_ANY_CONVERSATION()
|
|
CLEAR_PRINTS()
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
|
|
RC_START_Z_SKIP()
|
|
eState = SS_SKIPPED
|
|
ENDIF
|
|
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P))
|
|
AND eMissionState <> MS_SET_UP
|
|
//Work out which stage we want to reach based on the current stage
|
|
iMissionState = ENUM_TO_INT(eMissionState)
|
|
|
|
IF iMissionState > 0
|
|
MISSION_STATE e_stage = INT_TO_ENUM(MISSION_STATE, iMissionState - 1)
|
|
JUMP_TO_STAGE(e_stage)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF LAUNCH_MISSION_STAGE_MENU(s_skip_menu, i_debug_jump_stage)
|
|
#IF IS_DEBUG_BUILD SK_PRINT_INT("Z DEBUG Initial pick = ", i_debug_jump_stage) #ENDIF
|
|
// IF i_debug_jump_stage >= 3
|
|
// SWITCH i_debug_jump_stage
|
|
// CASE 3 //MS_RETURN_TO_STUDIO
|
|
// i_debug_jump_stage = 4
|
|
// BREAK
|
|
//
|
|
// CASE 4 //MS_OUTRO
|
|
// i_debug_jump_stage = 5
|
|
// BREAK
|
|
//
|
|
// ENDSWITCH
|
|
// ELSE
|
|
i_debug_jump_stage++
|
|
// ENDIF
|
|
SK_PRINT_INT("Z DEBUG ACTUAL STATE = ", i_debug_jump_stage)
|
|
|
|
MISSION_STATE e_stage = INT_TO_ENUM(MISSION_STATE, i_debug_jump_stage)
|
|
JUMP_TO_STAGE(e_stage)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
|
|
PROC CHECK_MIKE_ALIVE()
|
|
IF NOT IS_PED_UNINJURED(piPeds[MIKE])
|
|
MISSION_FAILED(FR_MIKE_KILLED)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Holds functions that moniter for the player failing
|
|
PROC CHECK_FOR_FAIL()
|
|
IF NOT bJumpSkip
|
|
AND eMissionState <> MS_FAILED
|
|
IF eMissionState > MS_INTRO
|
|
CHECK_MIKE_ALIVE()
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
SCRIPT
|
|
|
|
SET_MISSION_FLAG(TRUE)
|
|
|
|
|
|
// Setup callback when player is killed, arrested or goes to multiplayer
|
|
IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU))
|
|
IF GET_CAUSE_OF_MOST_RECENT_FORCE_CLEANUP() != FORCE_CLEANUP_FLAG_PLAYER_KILLED_OR_ARRESTED
|
|
PRINTSTRING("FORCE CLEAN UP") PRINTNL()
|
|
sFailReason = NULL
|
|
Mission_Flow_Mission_Force_Cleanup()
|
|
Script_Cleanup()
|
|
ELSE
|
|
IF eMissionState != MS_FAILED
|
|
PRINTSTRING("Silent pass mission player was killed or was arrested") PRINTNL()
|
|
Script_Passed(TRUE, TRUE)
|
|
ELSE
|
|
PRINTSTRING("FORCE CLEAN UP") PRINTNL()
|
|
sFailReason = NULL
|
|
Mission_Flow_Mission_Force_Cleanup()
|
|
Script_Cleanup()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SETUP_FOR_RAGE_WIDGETS()
|
|
#ENDIF
|
|
|
|
eStartedPlayer = GET_CURRENT_PLAYER_PED_ENUM()
|
|
IF IS_REPLAY_IN_PROGRESS()
|
|
START_REPLAY_SETUP(<<1377.1952, -2103.5322, 53.4723>>, 215.9222)
|
|
ENDIF
|
|
// Loop within here until the mission passes or fails
|
|
WHILE(TRUE)
|
|
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_BPINT")
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
CHECK_FOR_FAIL()
|
|
SWITCH eMissionState
|
|
|
|
CASE MS_SET_UP
|
|
INITMISSION()
|
|
BREAK
|
|
|
|
CASE MS_INTRO
|
|
MOCAP_INTRO()
|
|
BREAK
|
|
|
|
CASE MS_LEAVE_AREA
|
|
LEAVE_AREA()
|
|
BREAK
|
|
|
|
CASE MS_FAILED
|
|
FAILED_WAIT_FOR_FADE()
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF eMissionState <> MS_FAILED
|
|
#IF IS_DEBUG_BUILD
|
|
// Check debug completion/failure
|
|
DEBUG_Check_Debug_Keys()
|
|
UPDATE_RAG_WIDGETS()
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
|
|
ENDWHILE
|
|
// Script should never reach here. Always terminate with cleanup function.
|
|
ENDSCRIPT
|