Files
gtav-src/script/dev_ng/singleplayer/scripts/marketing/magdemo.sc
T
2025-09-29 00:52:08 +02:00

2111 lines
73 KiB
Python
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
//////////////////////////////////////////////////////////////////////////////////////////
// //
// SCRIPT NAME : magdemo.sc //
// AUTHOR : Kenneth Ross //
// DESCRIPTION : //
// //
//////////////////////////////////////////////////////////////////////////////////////////
// Do nothing in release mode
#IF IS_FINAL_BUILD
SCRIPT
ENDSCRIPT
#ENDIF
#IF IS_DEBUG_BUILD
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_streaming.sch"
USING "commands_event.sch"
USING "commands_brains.sch"
USING "commands_cutscene.sch"
USING "player_ped_public.sch"
USING "selector_public.sch"
USING "respawn_location_private.sch"
USING "flow_reset_GAME.sch"
USING "script_blip.sch"
USING "chase_hint_cam.sch"
USING "select_mission_stage.sch"
USING "player_ped_scenes.sch"
USING "family_public.sch"
// Widget data
BOOL bDisplayStreetNames
BOOL bDisplayAreaNames
BOOL bKillScript
STRUCT Z_SKIP_DATA
INT iSelectedStage
INT iCurrentStage
BOOL bDoSkip
MissionStageMenuTextStruct SkipMenuStruct[5]
ENDSTRUCT
Z_SKIP_DATA sZSkipData
// Script data
ENUM MD_STAGE_ENUM
MD_STAGE_CREATE_INITIAL_SCENE = 0,
MD_STAGE_MICHAEL_DRIVE,
MD_STAGE_TREVOR_DRIVE,
MD_STAGE_FRANKLIN_DRIVE,
MD_STAGE_FBI2,
MD_STAGE_RESET,
MD_STAGE_CLEANUP
ENDENUM
MD_STAGE_ENUM eMDStage
INT iControl = 0
VEHICLE_INDEX vehID_MichaelBike, vehID_MichaelCar, vehID_FranklinCar, vehID_FranklinHeli, vehID_TrevorsCar, vehID_TrevorsQuad, vehID_TrevorsRebel
VEHICLE_INDEX vehID_Police[3]
PED_INDEX pedID_Cop[3]
PICKUP_INDEX pickupID_PetrolTank
BOOL bGPSRouteSet = FALSE
BOOL bLowerRoofOnVehEntry = FALSE
INT iLoungerCamInterpDuration = 4000
BOOL bHintCam_Set = FALSE
BOOL bHintCam_Required = FALSE
BOOL bHintCam_Active = FALSE
VECTOR vHintCamCoord
VECTOR vHintCamArea1,vHintCamArea2
FLOAT fHintCamArea
BOOL bModelRequest_Scorcher
BOOL bModelRequest_Rebel
BOOL bModelRequest_Ninef2
BOOL bModelRequest_Maverick
BOOL bModelRequest_Blazer
BOOL bModelRequest_Bodhi2
BOOL bModelRequest_Tailgater
BOOL bModelRequest_Police
BOOL bModelRequest_Michael
BOOL bModelRequest_Trevor
BOOL bModelRequest_Franklin
BOOL bModelRequest_Dave
BOOL bModelRequest_Cop
BOOL bModelRequest_MimeHat
BOOL bAnimRequest_Lounger
BOOL bAudioRequest_Lounger
BOOL bRadioSetup_Ninef2, bRadioTurnedOn_Ninef2
BOOL bRadioSetup_Bodhi2, bRadioSetup_Blazer
BOOL bRadioSetup_Sentinel2, bRadioTurnedOn_Sentinel2
INT iRadioTurnOnTimer_Ninef2
INT iRadioTurnOnDelay_Ninef2 = 1000
BOOL bRequestedFBI2Cutscene
BOOL bReplayFBI2
BOOL bGardenAudioSceneStarted
BOOL bMichaelBikeAudioSceneStarted, bMichaelBikeAudioSceneCleared
BOOL bPoliceCreated, bPoliceTaskGiven, bPoliceAudioSetup
BOOL bPedWallReset
BOOL bPedWallSet
BOOL bHidingBinBag
BOOL bTurnedOffTrevorRoads
VECTOR vCopCoord[3]
FLOAT fCopHeading[3]
INT missionCandidateID = NO_CANDIDATE_ID
CHASE_HINT_CAM_STRUCT localChaseHintCamStruct
SCENARIO_BLOCKING_INDEX scenarioBlockID_fbi2, scenarioBlockID_trevorDrive
MODEL_NAMES eStoredModel
OBJECT_INDEX objID_MimeHat
FUNC BOOL LOAD_MODEL_ASSET(MODEL_NAMES eModel, BOOL &bRequestFlag)
REQUEST_MODEL(eModel)
#IF IS_DEBUG_BUILD
IF NOT bRequestFlag
PRINTLN("MAGDEMO: LOAD_MODEL_ASSET(", GET_MODEL_NAME_FOR_DEBUG(eModel), ")")
ENDIF
#ENDIF
bRequestFlag = TRUE
RETURN HAS_MODEL_LOADED(eModel)
ENDFUNC
PROC CLEANUP_MODEL_ASSET(MODEL_NAMES eModel, BOOL &bRequestFlag)
IF bRequestFlag
#IF IS_DEBUG_BUILD
PRINTLN("MAGDEMO: CLEANUP_MODEL_ASSET(", GET_MODEL_NAME_FOR_DEBUG(eModel), ")")
#ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(eModel)
bRequestFlag = FALSE
ENDIF
ENDPROC
FUNC BOOL LOAD_ANIM_ASSET(STRING sAnimDict, BOOL &bRequestFlag)
REQUEST_ANIM_DICT(sAnimDict)
bRequestFlag = TRUE
RETURN HAS_ANIM_DICT_LOADED(sAnimDict)
ENDFUNC
PROC CLEANUP_ANIM_ASSET(STRING sAnimDict, BOOL &bRequestFlag)
IF bRequestFlag
REMOVE_ANIM_DICT(sAnimDict)
bRequestFlag = FALSE
ENDIF
ENDPROC
FUNC BOOL LOAD_AUDIO_ASSET(STRING sAudioBank, BOOL &bRequestFlag)
bRequestFlag = TRUE
RETURN REQUEST_SCRIPT_AUDIO_BANK(sAudioBank)
ENDFUNC
PROC CLEANUP_AUDIO_ASSET(STRING sAudioBank, BOOL &bRequestFlag)
IF bRequestFlag
RELEASE_NAMED_SCRIPT_AUDIO_BANK(sAudioBank)
bRequestFlag = FALSE
ENDIF
ENDPROC
PROC CLEANUP_PREVIOUS_STAGE_ASSETS()
// Do a hard cleanup of all previous assets
// Note, this should only be called when we have switched cahracter and are processing the next stage.
/*
MD_STAGE_CREATE_INITIAL_SCENE = 0,
MD_STAGE_MICHAEL_DRIVE,
MD_STAGE_TREVOR_DRIVE,
MD_STAGE_FRANKLIN_DRIVE,
MD_STAGE_FBI2,
MD_STAGE_RESET,
MD_STAGE_CLEANUP
*/
// Cleanup Michael stage
IF ENUM_TO_INT(eMDStage) >= ENUM_TO_INT(MD_STAGE_TREVOR_DRIVE)
CLEANUP_AUDIO_ASSET("Magdemo_Sunlounger", bAudioRequest_Lounger)
PRINTLN("MAGDEMO: Stopping audio scene MAGDEMO_MICHAEL_GARDEN_SCENE")
STOP_AUDIO_SCENE("MAGDEMO_MICHAEL_GARDEN_SCENE")
bGardenAudioSceneStarted = FALSE
PRINTLN("MAGDEMO: Stopping audio scene MAGDEMO_MICHAEL_BIKE_SCENE")
STOP_AUDIO_SCENE("MAGDEMO_MICHAEL_BIKE_SCENE")
bMichaelBikeAudioSceneStarted = FALSE
bMichaelBikeAudioSceneCleared = FALSE
// Scorcher
IF DOES_ENTITY_EXIST(vehID_MichaelBike)
IF NOT DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vehID_MichaelBike)
SET_ENTITY_AS_MISSION_ENTITY(vehID_MichaelBike, FALSE, TRUE)
ENDIF
DELETE_VEHICLE(vehID_MichaelBike)
ENDIF
ENDIF
// Cleanup Trevor stage
IF ENUM_TO_INT(eMDStage) >= ENUM_TO_INT(MD_STAGE_FRANKLIN_DRIVE)
// Bodhi2
IF DOES_ENTITY_EXIST(vehID_TrevorsCar)
IF NOT DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vehID_TrevorsCar)
SET_ENTITY_AS_MISSION_ENTITY(vehID_TrevorsCar, FALSE, TRUE)
ENDIF
DELETE_VEHICLE(vehID_TrevorsCar)
ENDIF
// Quad
IF DOES_ENTITY_EXIST(vehID_TrevorsQuad)
IF NOT DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vehID_TrevorsQuad)
SET_ENTITY_AS_MISSION_ENTITY(vehID_TrevorsQuad, FALSE, TRUE)
ENDIF
DELETE_VEHICLE(vehID_TrevorsQuad)
ENDIF
// Rebel
IF DOES_ENTITY_EXIST(vehID_TrevorsRebel)
IF NOT DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vehID_TrevorsRebel)
SET_ENTITY_AS_MISSION_ENTITY(vehID_TrevorsRebel, FALSE, TRUE)
ENDIF
DELETE_VEHICLE(vehID_TrevorsRebel)
ENDIF
// Jerry can
IF DOES_PICKUP_EXIST(pickupID_PetrolTank)
REMOVE_PICKUP(pickupID_PetrolTank)
ENDIF
// End of trevor drive
PRINTLN("MAGDEMO: Turning on roads for end of Trevor stage")
SET_ROADS_IN_ANGLED_AREA(<<1440.352417,3672.524658,10.284130>>, <<415.225677,3596.012695,59.100624>>, 250.0, FALSE, TRUE)
//SET_VEHICLE_DENSITY_MULTIPLIER(1.0)
bTurnedOffTrevorRoads = FALSE
ENDIF
// Cleanup Franklin stage
IF ENUM_TO_INT(eMDStage) >= ENUM_TO_INT(MD_STAGE_FBI2)
// Ninef2
IF DOES_ENTITY_EXIST(vehID_FranklinCar)
IF NOT DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vehID_FranklinCar)
SET_ENTITY_AS_MISSION_ENTITY(vehID_FranklinCar, FALSE, TRUE)
ENDIF
DELETE_VEHICLE(vehID_FranklinCar)
ENDIF
// Maverick
IF DOES_ENTITY_EXIST(vehID_FranklinHeli)
IF NOT DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vehID_FranklinHeli)
SET_ENTITY_AS_MISSION_ENTITY(vehID_FranklinHeli, FALSE, TRUE)
ENDIF
DELETE_VEHICLE(vehID_FranklinHeli)
ENDIF
INT iCop
REPEAT 3 iCop
// Cop Ped
IF DOES_ENTITY_EXIST(pedID_Cop[iCop])
IF NOT IS_PED_INJURED(pedID_Cop[iCop])
IF NOT DOES_ENTITY_BELONG_TO_THIS_SCRIPT(pedID_Cop[iCop])
SET_ENTITY_AS_MISSION_ENTITY(pedID_Cop[iCop], FALSE, TRUE)
ENDIF
DELETE_PED(pedID_Cop[iCop])
ENDIF
ENDIF
// Cop Car
IF DOES_ENTITY_EXIST(vehID_Police[iCop])
IF NOT DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vehID_Police[iCop])
SET_ENTITY_AS_MISSION_ENTITY(vehID_Police[iCop], FALSE, TRUE)
ENDIF
DELETE_VEHICLE(vehID_Police[iCop])
ENDIF
ENDREPEAT
// Mime hat
IF DOES_ENTITY_EXIST(objID_MimeHat)
DELETE_OBJECT(objID_MimeHat)
ENDIF
// Cop car sirens
IF IS_AUDIO_SCENE_ACTIVE("MAGDEMO_SIRENS_FRANKLIN")
PRINTLN("MAGDEMO: Stopping audio scene MAGDEMO_SIRENS_FRANKLIN")
STOP_AUDIO_SCENE("MAGDEMO_SIRENS_FRANKLIN")
ENDIF
ENDIF
ENDPROC
PROC SET_HINT_CAM(VECTOR vCoord, VECTOR vArea1, VECTOR vArea2, FLOAT fWidth)
vHintCamCoord = vCoord
vHintCamArea1 = vArea1
vHintCamArea2 = vArea2
fHintCamArea = fWidth
bHintCam_Set = TRUE
ENDPROC
PROC CLEAR_HINT_CAM()
bHintCam_Set = FALSE
ENDPROC
PROC UPDATE_HINT_CAM()
bHintCam_Required = FALSE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF bHintCam_Set
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vHintCamArea1, vHintCamArea2, fHintCamArea)
//AND IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_CIN_CAM)
bHintCam_Required = TRUE
ENDIF
ENDIF
ENDIF
IF bHintCam_Required
CONTROL_COORD_CHASE_HINT_CAM_ANY_MEANS(localChaseHintCamStruct, vHintCamCoord)
bHintCam_Active = TRUE
ELIF bHintCam_Active
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
bHintCam_Active = FALSE
ENDIF
ENDPROC
PROC SET_MAGDEMO_SCENE()
SWITCH eMDStage
CASE MD_STAGE_CREATE_INITIAL_SCENE
CASE MD_STAGE_MICHAEL_DRIVE
// Scene 1 - micheal
// Extra sunny 14:00
// cirrocumulus cloud hat
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
UNLOAD_ALL_CLOUD_HATS()
LOAD_CLOUD_HAT("cirrocumulus") //LOAD_CLOUD_HAT("Cirrus") //#740433
SET_CLOCK_TIME(14, 0, 0) //SET_CLOCK_TIME(11, 0, 0) //#740433
SCRIPT_OVERRIDES_WIND_TYPES(TRUE, "WEATHER_TYPES_MAGDEMO_MICHAEL", "WEATHER_TYPES_MAGDEMO_MICHAEL")
BREAK
CASE MD_STAGE_TREVOR_DRIVE
// Scene 2 - trevor
// Smog 11:00
// Clear cloud hat
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
UNLOAD_ALL_CLOUD_HATS()
LOAD_CLOUD_HAT("Cirrus")
SET_CLOCK_TIME(19, 0, 0)
SCRIPT_OVERRIDES_WIND_TYPES(TRUE, "WEATHER_TYPES_MAGDEMO_TREVOR", "WEATHER_TYPES_MAGDEMO_TREVOR")
BREAK
CASE MD_STAGE_FRANKLIN_DRIVE
// Scene 3 - franklin
// Overcast 09:00
// Horizon cloud hat
SET_WEATHER_TYPE_NOW_PERSIST("OVERCAST")
UNLOAD_ALL_CLOUD_HATS()
LOAD_CLOUD_HAT("RAIN")
SET_CLOCK_TIME(9, 0, 0)
SCRIPT_OVERRIDES_WIND_TYPES(TRUE, "WEATHER_TYPES_MAGDEMO_FRANKLIN", "WEATHER_TYPES_MAGDEMO_FRANKLIN")
BREAK
CASE MD_STAGE_FBI2
// Scene 4 fbi2
// Smog 19:30 20:00
// Wispy cloud hat
SET_WEATHER_TYPE_NOW_PERSIST("SMOG")
UNLOAD_ALL_CLOUD_HATS()
LOAD_CLOUD_HAT("Wispy")
SET_CLOCK_TIME(19, 45, 0)
SCRIPT_OVERRIDES_WIND_TYPES(FALSE, "", "")
BREAK
ENDSWITCH
PAUSE_CLOCK(TRUE)
ENDPROC
/// PURPOSE: Ensure the player is invincible and will not fly through windscreens
PROC UPDATE_PLAYER_PED_STATES()
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
eStoredModel = DUMMY_MODEL_FOR_SCRIPT
ELIF GET_ENTITY_MODEL(PLAYER_PED_ID()) != eStoredModel
SET_ENTITY_PROOFS(PLAYER_PED_ID(), TRUE, TRUE, TRUE, TRUE, TRUE)
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_WillFlyThroughWindscreen, FALSE)
SET_WANTED_LEVEL_MULTIPLIER(0)
SET_MAX_WANTED_LEVEL(0)
eStoredModel = GET_ENTITY_MODEL(PLAYER_PED_ID())
PRINTLN("MAGDEMO: UPDATE_PLAYER_PED_STATES() - States updated")
ENDIF
ENDIF
ENDPROC
PROC SET_MD_STAGE(MD_STAGE_ENUM eStage)
SWITCH eStage
CASE MD_STAGE_CREATE_INITIAL_SCENE PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_CREATE_INITIAL_SCENE)") BREAK
CASE MD_STAGE_MICHAEL_DRIVE PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_MICHAEL_DRIVE)") BREAK
CASE MD_STAGE_TREVOR_DRIVE PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_TREVOR_DRIVE)") BREAK
CASE MD_STAGE_FRANKLIN_DRIVE PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_FRANKLIN_DRIVE)") BREAK
CASE MD_STAGE_FBI2 PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_FBI2)") BREAK
CASE MD_STAGE_RESET PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_RESET)") BREAK
CASE MD_STAGE_CLEANUP PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_CLEANUP)") BREAK
ENDSWITCH
eMDStage = eStage
iControl = 0
#IF IS_DEBUG_BUILD
// Set the new Z-Skip stage
IF eStage = MD_STAGE_CREATE_INITIAL_SCENE
sZSkipData.iCurrentStage = 0 // "Michael at poolside"
ELIF eStage = MD_STAGE_MICHAEL_DRIVE
sZSkipData.iCurrentStage = 1 // "Michael on bicycle"
ELIF eStage = MD_STAGE_TREVOR_DRIVE
sZSkipData.iCurrentStage = 2 // "Trevor in trailer"
ELIF eStage = MD_STAGE_FRANKLIN_DRIVE
sZSkipData.iCurrentStage = 3 // "Franklin at muscle beach"
ELIF eStage = MD_STAGE_FBI2
sZSkipData.iCurrentStage = 4 // "FBI2"
ENDIF
#ENDIF
ENDPROC
FUNC BOOL IS_MAGDEMO_SAFE_TO_PROCEED()
IF NOT IS_PAUSE_MENU_ACTIVE()
AND IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC SET_INITIAL_MAGDEMO_GAME_STATE()
g_bMagDemoActive = TRUE
g_bMagDemoKillFamilySceneM = TRUE
bReplayFBI2 = FALSE
bPoliceTaskGiven = FALSE
bPoliceCreated = FALSE
bPoliceAudioSetup = FALSE
g_bUseCharacterFilters = TRUE
UPDATE_PLAYER_PED_TIMECYCLE_MODIFIER()
g_savedGlobals.sFlow.isGameflowActive = TRUE
RESET_GAMEFLOW()
g_savedGlobals.sFlow.isGameflowActive = FALSE
g_bTaxiHailingIsDisabled = TRUE
// g_bUseProtoTypeCamSpline = TRUE
// g_bUseProtoTypeCamStreaming = TRUE
#IF IS_DEBUG_BUILD
g_bDrawLiteralSceneString = FALSE
#ENDIF
// Initialise Michaels family timetable events
g_eCurrentFamilyEvent[FM_MICHAEL_SON] = NO_FAMILY_EVENTS
INITIALISE_EVENT_FOR_THIS_FAMILY_MEMBER(FM_MICHAEL_SON)
g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = NO_FAMILY_EVENTS
INITIALISE_EVENT_FOR_THIS_FAMILY_MEMBER(FM_MICHAEL_DAUGHTER)
g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = NO_FAMILY_EVENTS
INITIALISE_EVENT_FOR_THIS_FAMILY_MEMBER(FM_MICHAEL_WIFE)
g_eCurrentFamilyEvent[FM_MICHAEL_MEXMAID] = NO_FAMILY_EVENTS
INITIALISE_EVENT_FOR_THIS_FAMILY_MEMBER(FM_MICHAEL_MEXMAID)
g_eCurrentFamilyEvent[FM_MICHAEL_GARDENER] = NO_FAMILY_EVENTS
INITIALISE_EVENT_FOR_THIS_FAMILY_MEMBER(FM_MICHAEL_GARDENER)
// Unlock secirity random event
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_RE_SECV1)
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_RE_SECV4)
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_RE_SECV5)
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_RE_SECV6)
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_RE_SECV7)
// Unlock savehouses
Set_Savehouse_Respawn_Available(SAVEHOUSE_MICHAEL_BH, TRUE)
Set_Savehouse_Respawn_Available(SAVEHOUSE_FRANKLIN_SC, TRUE)
Set_Savehouse_Respawn_Available(SAVEHOUSE_TREVOR_CS, TRUE)
// Set characters we can switch to
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE)
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, FALSE)
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, FALSE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, TRUE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, FALSE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, FALSE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(NINEF2, TRUE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(UTILLITRUCK2, TRUE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(UTILLITRUCK3, TRUE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(FBI2, TRUE)
// Limit radio station selection to 4.
SET_AUDIO_FLAG("LimitAmbientRadioStations", TRUE)
// Fix for bug #814560 - Hiding bin bags as they have no alpha, causing them to pop
IF NOT bHidingBinBag
PRINTLN("MAGDEMO: Hiding model 'prop_rub_binbag_03b'")
CREATE_MODEL_HIDE(<<1927.89, 3925.41, 31.42>>, 5.0, INT_TO_ENUM(MODEL_NAMES, HASH("prop_rub_binbag_03b")), TRUE)
bHidingBinBag = TRUE
ENDIF
// Cleanup audio scenes
IF IS_AUDIO_SCENE_ACTIVE("MAGDEMO_MICHAEL_GARDEN_SCENE")
PRINTLN("MAGDEMO: Stopping audio scene MAGDEMO_MICHAEL_GARDEN_SCENE")
STOP_AUDIO_SCENE("MAGDEMO_MICHAEL_GARDEN_SCENE")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MAGDEMO_MICHAEL_BIKE_SCENE")
PRINTLN("MAGDEMO: Stopping audio scene MAGDEMO_MICHAEL_BIKE_SCENE")
STOP_AUDIO_SCENE("MAGDEMO_MICHAEL_BIKE_SCENE")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MAGDEMO_SIRENS_FRANKLIN")
PRINTLN("MAGDEMO: Stopping audio scene MAGDEMO_SIRENS_FRANKLIN")
STOP_AUDIO_SCENE("MAGDEMO_SIRENS_FRANKLIN")
ENDIF
REACTIVATE_ALL_OBJECT_BRAINS_THAT_ARE_WAITING_TILL_OUT_OF_RANGE()
REACTIVATE_ALL_WORLD_BRAINS_THAT_ARE_WAITING_TILL_OUT_OF_RANGE()
SET_DEBUG_CAM_ACTIVE(FALSE)
SET_RANDOM_TRAINS(FALSE) //740410
SCRIPT_OVERRIDES_WIND_TYPES(FALSE, "", "")
SET_DOOR_STATE(DOORNAME_M_MANSION_R_L1, DOORSTATE_LOCKED)
SET_DOOR_STATE(DOORNAME_M_MANSION_R_R1, DOORSTATE_LOCKED)
WAIT(0)
WAIT(0)
WAIT(0)
FORCE_CLEANUP(FORCE_CLEANUP_FLAG_MAGDEMO)
WAIT(0)
WAIT(0)
WAIT(0)
// Blocking areas
scenarioBlockID_fbi2 = ADD_SCENARIO_BLOCKING_AREA(<<1321.17, -2143.95, -10>>, <<1468.61, -2001.32, 110>>)
// - Hill outside Michaels mansion
SET_PED_PATHS_IN_AREA(<< -881.7, 86.3, 45.5 >>, << -839.7, 216.2, 82.6 >>, FALSE)
SET_PED_PATHS_IN_AREA(<< -881.6, 0.4, 31.8 >>, << -819.5, 96.4, 68.9 >>, FALSE)
SET_PED_PATHS_IN_AREA(<< -845.9, -76.4, 20.3 >>, << -771.6, 38.8, 58.4 >>, FALSE)
// - End of Trevor drive
scenarioBlockID_trevorDrive = ADD_SCENARIO_BLOCKING_AREA(<< 883.5, 3581.7, 19.0 >>, << 1041.2, 3678.1, 50.2 >>)
// - Muscle beach
SET_PED_PATHS_IN_AREA(<< -1177.2, -1523.7, 0 >>, << -1168.4, -1518.2, 10 >>, FALSE)
SET_PED_PATHS_IN_AREA(<< -1180.9, -1526.9, 0 >>, << -1172.3, -1521.4, 10 >>, FALSE)
SET_PED_PATHS_IN_AREA(<< -1185.4, -1530.3, 0 >>, << -1176.8, -1524.6, 10 >>, FALSE)
SET_PED_PATHS_IN_AREA(<< -1189.7, -1533.0, 0 >>, << -1181.1, -1527.6, 10 >>, FALSE)
SET_PED_PATHS_IN_AREA(<< -1193.9, -1535.8, 0 >>, << -1185.3, -1530.4, 10 >>, FALSE)
SET_PED_PATHS_IN_AREA(<< -1198.1, -1538.8, 0 >>, << -1189.4, -1533.3, 10 >>, FALSE)
SET_PED_PATHS_IN_AREA(<< -1197.2, -1541.7, 0 >>, << -1192.5, -1536.7, 10 >>, FALSE)
ENDPROC
PROC DO_STAGE_CREATE_INITIAL_SCENE()
SWITCH iControl
CASE 0
IF NOT IS_SCREEN_FADED_OUT()
IF NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(1000)
START_AUDIO_SCENE("MISSION_FAILED_SCENE")
ENDIF
ELSE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
START_AUDIO_SCENE("MISSION_FAILED_SCENE")
CLEAR_AREA(<< -779.3461, 185.2559, 71.8350 >>, 250.0, TRUE, FALSE)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), << -779.3461, 185.2559, 71.8350 >>)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
NEW_LOAD_SCENE_START(<< -779.3461, 185.2559, 71.8350 >>, << 0.12, -0.99, 0.08 >>, 1800.0)
iControl++
ENDIF
ENDIF
BREAK
CASE 1
IF IS_NEW_LOAD_SCENE_ACTIVE()
IF IS_NEW_LOAD_SCENE_LOADED()
NEW_LOAD_SCENE_STOP()
iControl++
ENDIF
ELSE
iControl++
ENDIF
BREAK
CASE 2
IF LOAD_MODEL_ASSET(SCORCHER, bModelRequest_Scorcher)
AND LOAD_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), bModelRequest_Michael)
AND LOAD_ANIM_ASSET("SWITCH@MICHAEL@SUNLOUNGER", bAnimRequest_Lounger)
AND LOAD_AUDIO_ASSET("Magdemo_Sunlounger", bAudioRequest_Lounger)
iControl++
ENDIF
BREAK
CASE 3
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("initial")) = 0 // Wait for all the controller scripts to be intialised before we proceed (required for runscript command line param)
SET_INITIAL_MAGDEMO_GAME_STATE()
// Michael at poolside
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
SET_CURRENT_SELECTOR_PED(SELECTOR_PED_MICHAEL, FALSE)
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT , OUTFIT_P0_YOGA, FALSE)
//SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT , OUTFIT_DEFAULT, FALSE)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(), FALSE)
TASK_PLAY_ANIM_ADVANCED(PLAYER_PED_ID(), "SWITCH@MICHAEL@SUNLOUNGER", "SunLounger_Idle",
<< -780.694, 187.325, 72.8351 >>, //<< -780.704, 187.322, 72.827 >>,
<< 0.000, 0.000, 166.320 >>, //<< 0.000, 0.000, 166.500 >>,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_OVERRIDE_PHYSICS | AF_EXTRACT_INITIAL_OFFSET | AF_TURN_OFF_COLLISION | AF_NOT_INTERRUPTABLE | AF_LOOPING)
// Michaels bike in garage
IF DOES_ENTITY_EXIST(vehID_MichaelBike)
DELETE_VEHICLE(vehID_MichaelBike)
ENDIF
vehID_MichaelBike = CREATE_VEHICLE(SCORCHER,<< -810.8484, 189.7630, 71.4785 >>, 131.0119, FALSE, FALSE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehID_MichaelBike)
SET_VEHICLE_COLOURS(vehID_MichaelBike, 29, 3)
CLEANUP_MODEL_ASSET(SCORCHER, bModelRequest_Scorcher)
CLEANUP_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), bModelRequest_Michael)
iControl++
ENDIF
BREAK
CASE 4
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(0)
ENDIF
DRAW_RECT(0.5, 0.5, 1.0, 1.0, 0, 0, 0, 255)
IF IS_SCREEN_FADED_IN()
SET_TEXT_SCALE(0.5, 0.5)
SET_TEXT_CENTRE(TRUE)
DISPLAY_TEXT(0.5, 0.4, "MD_TITLE_1")
IF IS_MAGDEMO_SAFE_TO_PROCEED()
SET_MAGDEMO_SCENE()
DO_SCREEN_FADE_OUT(0)
DO_SCREEN_FADE_IN(1000)
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
PRINTLN("MAGDEMO: Starting audio scene MAGDEMO_MICHAEL_GARDEN_SCENE")
START_AUDIO_SCENE("MAGDEMO_MICHAEL_GARDEN_SCENE") // Kill this when we enter the house
bGardenAudioSceneStarted = TRUE
SET_GAMEPLAY_CAM_RELATIVE_HEADING(25.694843)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-8.558015)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
SET_FOLLOW_PED_CAM_THIS_UPDATE("FOLLOW_PED_ON_LOUNGER_CAMERA", iLoungerCamInterpDuration)
iControl++
ENDIF
ENDIF
BREAK
CASE 5
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
IF (g_Cellphone.PhoneDS <> PDS_DISABLED)
DISABLE_CELLPHONE(TRUE)
ENDIF
// Continue to update the lounger cam until we blend into the get up anim
SET_FOLLOW_PED_CAM_THIS_UPDATE("FOLLOW_PED_ON_LOUNGER_CAMERA", iLoungerCamInterpDuration)
IF IS_SCREEN_FADED_IN()
AND NOT IS_PAUSE_MENU_ACTIVE()
INT iLeftX, iLeftY, iRightX, iRightY
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS(iLeftX, iLeftY, iRightX, iRightY)
IF iLeftY < -64
TASK_PLAY_ANIM_ADVANCED(PLAYER_PED_ID(), "SWITCH@MICHAEL@SUNLOUNGER", "SunLounger_GetUp",
<< -780.694, 187.325, 72.8351 >>, //<< -780.704, 187.322, 72.827 >>,
<< 0.000, 0.000, 166.320 >>, //<< 0.000, 0.000, 166.500 >>,
NORMAL_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1,
AF_OVERRIDE_PHYSICS | AF_TURN_OFF_COLLISION |
AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE)
iControl++
ENDIF
ENDIF
ENDIF
BREAK
CASE 6
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
IF (g_Cellphone.PhoneDS <> PDS_DISABLED)
DISABLE_CELLPHONE(TRUE)
ENDIF
BOOL bAnimComplete
INT iLeftX, iLeftY, iRightX, iRightY
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS( iLeftX, iLeftY, iRightX, iRightY)
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "SWITCH@MICHAEL@SUNLOUNGER", "SunLounger_GetUp")
SET_PED_DESIRED_HEADING(PLAYER_PED_ID(), GET_ENTITY_HEADING(PLAYER_PED_ID()))
FLOAT fStartPhase
/* old, relies on anim tag
FLOAT fEndPhase
IF FIND_ANIM_EVENT_PHASE("SWITCH@MICHAEL@SUNLOUNGER", "SunLounger_GetUp", "WalkInterruptible", fStartPhase, fEndPhase)
//fStartPhase: 0.6150
*/
/* new, relies on phase time */
fStartPhase = 0.617 //0.6150
FLOAT fPlayerGetupAnimCurrentTime
fPlayerGetupAnimCurrentTime = GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(),
"SWITCH@MICHAEL@SUNLOUNGER", "SunLounger_GetUp")
IF (fPlayerGetupAnimCurrentTime >= fStartPhase)
/* * */
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), "SWITCH@MICHAEL@SUNLOUNGER", "SunLounger_GetUp") >= fStartPhase
IF iLeftX < -64 OR iLeftX > 64 // Left/Right
OR iLeftY < -64 OR iLeftY > 64 // Forwards/Backwards
SET_ENTITY_ANIM_BLEND_OUT_SPEED(PLAYER_PED_ID(),
"SunLounger_GetUp",
"SWITCH@MICHAEL@SUNLOUNGER",
REALLY_SLOW_BLEND_OUT)
CLEAR_PED_TASKS(PLAYER_PED_ID())
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(),
PEDMOVEBLENDRATIO_WALK,
5000)
bAnimComplete = TRUE
ENDIF
ENDIF
ENDIF
ELSE
CLEAR_PED_TASKS(PLAYER_PED_ID())
bAnimComplete = TRUE
ENDIF
IF bAnimComplete
CLEANUP_ANIM_ASSET("SWITCH@MICHAEL@SUNLOUNGER", bAnimRequest_Lounger)
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_IDLE, TRUE)
DISABLE_CELLPHONE(FALSE)
SET_MD_STAGE(MD_STAGE_MICHAEL_DRIVE)
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC DO_STAGE_STAGE_MICHAEL_DRIVE()
SWITCH iControl
CASE 0
// Fix for bug #750345 - The sky shifts a few seconds into the magdemo
// - We only get to this stage from the lounger stage so no need to set time again.
//SET_MAGDEMO_SCENE()
// Set characters we can switch to
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE)
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, FALSE)
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, TRUE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, TRUE)
CLEAR_GPS_MULTI_ROUTE()
START_GPS_MULTI_ROUTE(HUD_COLOUR_OBJECTIVE_ROUTE, TRUE)
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -867.0273, 147.1164, 61.4276 >>) // Codor Drive
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -851.6210, 40.6316, 47.2088 >>) // Spanish Avenue
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -821.6188, -13.7117, 38.9218 >>) // Caesar Place
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -835.8494, -80.5153, 36.7526 >>) // Portaolla Drive
SET_GPS_MULTI_ROUTE_RENDER(TRUE)
bGPSRouteSet = TRUE
//SET_HINT_CAM(<< -852.10, -60.87, 38.36 >>, <<-896.800293,-117.732574,36.968113>>, <<-778.729492,-54.647026,46.905807>>, 52.937500)
iControl++
BREAK
CASE 1
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// Manage Amandas vehicle created by the timetable
VEHICLE_INDEX vehSentinel2
INT iFlags
iFlags = VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_GROUP_MEMBERS|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_A_PLAYER|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_A_DEAD_OR_DYING_PED|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_WITH_PEDS_ENTERING_OR_EXITING|VEHICLE_SEARCH_FLAG_ALLOW_VEHICLE_OCCUPANTS_TO_BE_PERFORMING_A_SCRIPTED_TASK
vehSentinel2 = GET_CLOSEST_VEHICLE(<< -826.2563, 177.8511, 70.1881 >>, 10.0, SENTINEL2, iFlags)
IF DOES_ENTITY_EXIST(vehSentinel2)
AND IS_VEHICLE_DRIVEABLE(vehSentinel2)
// Set the radio station
IF NOT bRadioSetup_Sentinel2
PRINTLN("MAGDEMO: Setting up SENTINEL2 radio")
SET_VEH_RADIO_STATION(vehSentinel2, "RADIO_02_POP")
FREEZE_RADIO_STATION("RADIO_02_POP")
//SET_RADIO_TRACK("RADIO_02_POP", "RADIO_02_POP_MAG_DEMO_LOOP_POP")
SET_VEHICLE_RADIO_LOUD(vehSentinel2, TRUE)
bRadioSetup_Sentinel2 = TRUE
bRadioTurnedOn_Sentinel2 = FALSE
// Turn on the radio when Amandas gets in the vehicle
ELIF NOT bRadioTurnedOn_Sentinel2
IF GET_IS_VEHICLE_ENGINE_RUNNING(vehSentinel2)
IF NOT IS_PED_INJURED(GET_PED_IN_VEHICLE_SEAT(vehSentinel2, VS_DRIVER))
PRINTLN("MAGDEMO: Turning on SENTINEL2 radio")
//SET_RADIO_AUTO_UNFREEZE(TRUE) // This is player vehicle only
UNFREEZE_RADIO_STATION("RADIO_02_POP")
bRadioTurnedOn_Sentinel2 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
// Clear gps when player reaches destination
IF bGPSRouteSet
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << -835.8494, -80.5153, 36.7526 >>, <<LOCATE_SIZE_ANY_MEANS, LOCATE_SIZE_ANY_MEANS, LOCATE_SIZE_ANY_MEANS>>)
CLEAR_GPS_MULTI_ROUTE()
SET_GPS_MULTI_ROUTE_RENDER(FALSE)
bGPSRouteSet = FALSE
ENDIF
ENDIF
// Clear the audio scene when Michael enters the house
IF bGardenAudioSceneStarted
IF GET_ROOM_KEY_FROM_ENTITY(PLAYER_PED_ID()) != 0
PRINTLN("MAGDEMO: Stopping audio scene MAGDEMO_MICHAEL_GARDEN_SCENE")
STOP_AUDIO_SCENE("MAGDEMO_MICHAEL_GARDEN_SCENE")
bGardenAudioSceneStarted = FALSE
ENDIF
ENDIF
// Start audio scene when Michael gets on his bike
IF NOT bMichaelBikeAudioSceneStarted
AND NOT bMichaelBikeAudioSceneCleared
IF DOES_ENTITY_EXIST(vehID_MichaelBike)
AND IS_VEHICLE_DRIVEABLE(vehID_MichaelBike)
AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehID_MichaelBike)
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-813.113892,190.087921,71.316238>>, <<-810.811523,184.379974,74.666481>>, 7.812500)
PRINTLN("MAGDEMO: Starting audio scene MAGDEMO_MICHAEL_BIKE_SCENE")
START_AUDIO_SCENE("MAGDEMO_MICHAEL_BIKE_SCENE")
bMichaelBikeAudioSceneStarted = TRUE
ENDIF
ENDIF
ENDIF
// Clear the audio scene when we start to switch to Trevor
IF bMichaelBikeAudioSceneStarted
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
PRINTLN("MAGDEMO: Stopping audio scene MAGDEMO_MICHAEL_BIKE_SCENE")
STOP_AUDIO_SCENE("MAGDEMO_MICHAEL_BIKE_SCENE")
bMichaelBikeAudioSceneStarted = FALSE
bMichaelBikeAudioSceneCleared = TRUE
ENDIF
ENDIF
// Wait for player to switch to Trevor
IF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_TREVOR)
AND NOT IS_PLAYER_PED_SWITCH_IN_PROGRESS()
bGPSRouteSet = FALSE
CLEAR_HINT_CAM()
CLEAR_GPS_MULTI_ROUTE()
SET_GPS_MULTI_ROUTE_RENDER(FALSE)
SET_MD_STAGE(MD_STAGE_TREVOR_DRIVE)
ENDIF
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
iControl = 1
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_TREVOR) //, PR_TYPE_AMBIENT)
ENDIF
#ENDIF
ENDPROC
PROC DO_STAGE_TREVOR_DRIVE()
SWITCH iControl
CASE 0
CLEANUP_PREVIOUS_STAGE_ASSETS()
SET_MAGDEMO_SCENE()
// Set characters we can switch to
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE)
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE)
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, FALSE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, TRUE)
IF LOAD_MODEL_ASSET(REBEL, bModelRequest_Rebel)
IF DOES_ENTITY_EXIST(vehID_TrevorsRebel)
DELETE_VEHICLE(vehID_TrevorsRebel)
ENDIF
CLEAR_AREA(<< 899.3571, 3653.0366, 32.3460 >>, 50.0, TRUE)
vehID_TrevorsRebel = CREATE_VEHICLE(REBEL, << 899.3571, 3653.0366, 32.3460 >>, 271.1189, FALSE, FALSE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehID_TrevorsRebel)
SET_VEHICLE_COLOURS(vehID_TrevorsRebel, 128, 0)
SET_VEHICLE_EXTRA_COLOURS(vehID_TrevorsRebel, 23, 0)
SET_VEHICLE_DIRT_LEVEL(vehID_TrevorsRebel, 15.0)
CLEAR_GPS_MULTI_ROUTE()
START_GPS_MULTI_ROUTE(HUD_COLOUR_OBJECTIVE_ROUTE, TRUE)
ADD_POINT_TO_GPS_MULTI_ROUTE(<< 1997.9603, 3835.7959, 31.3112 >>) // Marina Drive
ADD_POINT_TO_GPS_MULTI_ROUTE(<< 1959.2478, 3904.3870, 31.3785 >>) // Algonquin Blvd
ADD_POINT_TO_GPS_MULTI_ROUTE(<< 1816.0470, 3944.7961, 32.5367 >>) // Niland Ave
ADD_POINT_TO_GPS_MULTI_ROUTE(<< 1707.3000, 3900.7368, 33.8820 >>) // Armadillo Ave
ADD_POINT_TO_GPS_MULTI_ROUTE(<< 1589.1426, 3791.5486, 33.8437 >>) // Panorama Drive
ADD_POINT_TO_GPS_MULTI_ROUTE(<< 1380.3497, 3682.6082, 32.6357 >>) // Lesbos Lane
ADD_POINT_TO_GPS_MULTI_ROUTE(<< 1011.7350, 3633.9250, 31.5949 >>) // Meringue Lane
ADD_POINT_TO_GPS_MULTI_ROUTE(<< 895.0152, 3636.4546, 31.7189 >>) // Alamo Sea
SET_GPS_MULTI_ROUTE_RENDER(TRUE)
bGPSRouteSet = TRUE
// Make sure Trevor has a pistol with ammo
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_PISTOL)
SET_PED_AMMO(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, 999)
ELSE
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, 999, FALSE, FALSE)
ENDIF
ENDIF
// Create jerry can pickup
INT iPlacementFlags
iPlacementFlags = 0
SET_BIT(iPlacementFlags, enum_to_int(PLACEMENT_FLAG_SNAP_TO_GROUND))
SET_BIT(iPlacementFlags, enum_to_int(PLACEMENT_FLAG_UPRIGHT))
IF DOES_PICKUP_EXIST(pickupID_PetrolTank)
REMOVE_PICKUP(pickupID_PetrolTank)
ENDIF
pickupID_PetrolTank = CREATE_PICKUP_ROTATE(PICKUP_WEAPON_PETROLCAN, << 903.22, 3657.42, 31.61 >>, <<0,0,115>>, iPlacementFlags)
iControl++
ENDIF
BREAK
CASE 1
// Manage Trevors vehicle created by the switch
VEHICLE_INDEX vehBodhi2
INT iFlags
iFlags = VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_GROUP_MEMBERS|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_A_PLAYER|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_A_DEAD_OR_DYING_PED|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_WITH_PEDS_ENTERING_OR_EXITING|VEHICLE_SEARCH_FLAG_ALLOW_VEHICLE_OCCUPANTS_TO_BE_PERFORMING_A_SCRIPTED_TASK
vehBodhi2 = GET_CLOSEST_VEHICLE(<< 1982.8469, 3807.0891, 31.1713 >>, 10.0, BODHI2, iFlags)
IF DOES_ENTITY_EXIST(vehBodhi2)
AND IS_VEHICLE_DRIVEABLE(vehBodhi2)
// Set the radio station
IF NOT bRadioSetup_Bodhi2
PRINTLN("MAGDEMO: Setting up BODHI2 radio")
SET_INITIAL_PLAYER_STATION("RADIO_01_CLASS_ROCK")
FREEZE_RADIO_STATION("RADIO_01_CLASS_ROCK")
//SET_RADIO_TRACK("RADIO_01_CLASS_ROCK", "RADIO_01_CLASS_ROCK_MAG_DEMO_LOOP_ROCK")
SET_RADIO_AUTO_UNFREEZE(TRUE)
SET_ENTITY_AS_MISSION_ENTITY(vehBodhi2, TRUE, TRUE)
vehID_TrevorsCar = vehBodhi2
bRadioSetup_Bodhi2 = TRUE
ENDIF
ENDIF
VEHICLE_INDEX vehBlazer
INT iFlags2
iFlags2 = VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_GROUP_MEMBERS|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_A_PLAYER|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_A_DEAD_OR_DYING_PED|VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_WITH_PEDS_ENTERING_OR_EXITING|VEHICLE_SEARCH_FLAG_ALLOW_VEHICLE_OCCUPANTS_TO_BE_PERFORMING_A_SCRIPTED_TASK
vehBlazer = GET_CLOSEST_VEHICLE(<< 1981.93, 3829.35, 31.89 >>, 10.0, Blazer, iFlags2)
IF DOES_ENTITY_EXIST(vehBlazer)
AND IS_VEHICLE_DRIVEABLE(vehBlazer)
// Set the radio station
IF NOT bRadioSetup_Blazer
// PRINTLN("MAGDEMO: Setting up Blazer radio")
// SET_INITIAL_PLAYER_STATION("RADIO_01_CLASS_ROCK")
// FREEZE_RADIO_STATION("RADIO_01_CLASS_ROCK")
// SET_RADIO_TRACK("RADIO_01_CLASS_ROCK", "RADIO_01_CLASS_ROCK_MAG_DEMO_LOOP_ROCK")
// SET_RADIO_AUTO_UNFREEZE(TRUE)
SET_ENTITY_AS_MISSION_ENTITY(vehBlazer, TRUE, TRUE)
vehID_TrevorsQuad = vehBlazer
bRadioSetup_Blazer = TRUE
ENDIF
ENDIF
// Clear gps when player reaches destination
IF bGPSRouteSet
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << 895.0152, 3636.4546, 31.7189 >>, <<LOCATE_SIZE_ANY_MEANS, LOCATE_SIZE_ANY_MEANS, LOCATE_SIZE_ANY_MEANS>>)
CLEAR_GPS_MULTI_ROUTE()
SET_GPS_MULTI_ROUTE_RENDER(FALSE)
bGPSRouteSet = FALSE
ENDIF
ENDIF
// Turn off the roads when we get to the jerry can area and suppress help text
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), << 903.22, 3657.42, 31.61 >>) < 130
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_HELP_TEXT)
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("PU_HLP")
CLEAR_HELP()
PRINTLN("MAGDEMO: Clearing help text PU_HLP")
ENDIF
IF NOT bTurnedOffTrevorRoads
PRINTLN("MAGDEMO: Turning off roads for end of Trevor stage")
SET_ROADS_IN_ANGLED_AREA(<<1440.352417,3672.524658,10.284130>>, <<415.225677,3596.012695,59.100624>>, 250.0, FALSE, TRUE)
//SET_VEHICLE_DENSITY_MULTIPLIER(0.0)
bTurnedOffTrevorRoads = TRUE
ENDIF
ENDIF
ENDIF
// Wait for player to switch to Franklin
IF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_FRANKLIN)
AND NOT IS_PLAYER_PED_SWITCH_IN_PROGRESS()
bGPSRouteSet = FALSE
CLEAR_GPS_MULTI_ROUTE()
SET_GPS_MULTI_ROUTE_RENDER(FALSE)
CLEAR_HINT_CAM()
SET_MD_STAGE(MD_STAGE_FRANKLIN_DRIVE)
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
iControl = 1
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_FRANKLIN) //, PR_TYPE_AMBIENT)
ENDIF
#ENDIF
ENDPROC
PROC DO_STAGE_FRANKLIN_DRIVE()
SWITCH iControl
CASE 0
CLEANUP_PREVIOUS_STAGE_ASSETS()
SET_MAGDEMO_SCENE()
// Set characters we can switch to
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE)
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, FALSE)
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, FALSE)
REQUEST_VEHICLE_RECORDING(001, "scene_m_fbi2_")
IF LOAD_MODEL_ASSET(NINEF2, bModelRequest_Ninef2)
AND LOAD_MODEL_ASSET(PROP_BUSKER_HAT_01, bModelRequest_MimeHat)
// Franklins car outside muscle beach juice bar
IF DOES_ENTITY_EXIST(vehID_FranklinCar)
DELETE_VEHICLE(vehID_FranklinCar)
ENDIF
vehID_FranklinCar = CREATE_VEHICLE(NINEF2, << -1189.5853, -1530.3488, 3.3942 >>, 306.7344, FALSE, FALSE)
SET_VEHICLE_COLOURS(vehID_FranklinCar, 38, 38)
SET_VEHICLE_EXTRA_COLOURS(vehID_FranklinCar, 37, 0)
SET_VEHICLE_TYRES_CAN_BURST(vehID_FranklinCar, FALSE)
SET_DISABLE_VEHICLE_PETROL_TANK_FIRES(vehID_FranklinCar, TRUE)
RAISE_CONVERTIBLE_ROOF(vehID_FranklinCar, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehID_FranklinCar)
bLowerRoofOnVehEntry = TRUE
// Radio station
bRadioSetup_Ninef2 = FALSE
// Mime hat
objID_MimeHat = CREATE_OBJECT(PROP_BUSKER_HAT_01, << -1203.84, -1547.44, 3.29 >>, FALSE, FALSE)
CLEANUP_MODEL_ASSET(NINEF2, bModelRequest_Ninef2)
CLEANUP_MODEL_ASSET(PROP_BUSKER_HAT_01, bModelRequest_MimeHat)
CLEAR_GPS_MULTI_ROUTE()
START_GPS_MULTI_ROUTE(HUD_COLOUR_OBJECTIVE_ROUTE, TRUE)
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -1180.6521, -1525.1920, 3.3951 >>) // Goma St
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -1162.4807, -1469.4825, 3.3640 >>) // Magellan Ave
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -1163.1174, -1413.8507, 3.7935 >>) // Aguja St
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -1117.6749, -1386.2495, 4.1312 >>) // Bay City Avenue
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -1069.4630, -1355.6085, 4.1434 >>) // Goma St
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -1011.1686, -1270.0898, 5.0311 >>) // Palomino Ave
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -737.4883, -1106.3109, 10.1622 >>) // S Rockford Drive
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -630.4440, -914.2029, 23.1145 >>) // Streetname missing
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -617.4307, -866.2444, 24.0506 >>) // Vespucci Blvd
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -466.3704, -845.9417, 29.4671 >>) // Calais Av
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -338.9257, -858.3804, 30.5959 >>) // Los Puerta Fwy
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -224.9029, -880.0365, 28.9778 >>) // Peaceful St
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -164.6611, -850.4457, 29.0890 >>) // Alta St
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -104.3242, -681.2265, 34.1526 >>) // San Andreas Ave
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -73.0694, -596.5261, 35.3148 >>) // Pillbox Hill
ADD_POINT_TO_GPS_MULTI_ROUTE(<< -104.6129, -610.6462, 35.0561 >>) // Pillbox Hill
SET_GPS_MULTI_ROUTE_RENDER(TRUE)
bGPSRouteSet = TRUE
SET_HINT_CAM(<< 722.11, 1194.88, 324.72 >>, <<-75.158951,-588.093567,35.313877>>, <<10.122264,-339.821533,47.310104>>, 94.562500)
// Unlock secirity random event
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_RE_SECV1)
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_RE_SECV4)
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_RE_SECV5)
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_RE_SECV6)
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL(CP_RE_SECV7)
iControl++
ENDIF
BREAK
CASE 1
// Manage Franklins vehicle created by this script
IF DOES_ENTITY_EXIST(vehID_FranklinCar)
AND IS_VEHICLE_DRIVEABLE(vehID_FranklinCar)
// Set the radio station
IF NOT bRadioSetup_Ninef2
PRINTLN("MAGDEMO: Setting up NINEF2 radio")
SET_INITIAL_PLAYER_STATION("RADIO_15_MOTOWN")
FREEZE_RADIO_STATION("RADIO_15_MOTOWN")
SET_RADIO_AUTO_UNFREEZE(FALSE)
//SET_RADIO_TRACK("RADIO_15_MOTOWN", "RADIO_15_MOTOWN_MAG_DEMO_LOOP_MOTT")
bRadioSetup_Ninef2 = TRUE
bRadioTurnedOn_Ninef2 = FALSE
iRadioTurnOnTimer_Ninef2 = -1
// Turn on the radio when Franklin gets in the vehicle
ELIF NOT bRadioTurnedOn_Ninef2
IF GET_IS_VEHICLE_ENGINE_RUNNING(vehID_FranklinCar)
IF NOT IS_PED_INJURED(GET_PED_IN_VEHICLE_SEAT(vehID_FranklinCar, VS_DRIVER))
IF iRadioTurnOnTimer_Ninef2 = -1
iRadioTurnOnTimer_Ninef2 = GET_GAME_TIMER()
ELIF (GET_GAME_TIMER() - iRadioTurnOnTimer_Ninef2) > iRadioTurnOnDelay_Ninef2
PRINTLN("MAGDEMO: Turning on NINEF2 radio")
UNFREEZE_RADIO_STATION("RADIO_15_MOTOWN")
bRadioTurnedOn_Ninef2 = TRUE
ENDIF
ELSE
iRadioTurnOnTimer_Ninef2 = -1
ENDIF
ENDIF
ENDIF
// Keep engine health above 400
IF GET_VEHICLE_ENGINE_HEALTH(vehID_FranklinCar) < 400
SET_VEHICLE_ENGINE_HEALTH(vehID_FranklinCar, 450)
ENDIF
ENDIF
// Clear gps when player reaches destination
IF bGPSRouteSet
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << -63.8986, -567.1836, 37.3575 >>, <<LOCATE_SIZE_ANY_MEANS, LOCATE_SIZE_ANY_MEANS, LOCATE_SIZE_ANY_MEANS>>)
CLEAR_GPS_MULTI_ROUTE()
SET_GPS_MULTI_ROUTE_RENDER(FALSE)
bGPSRouteSet = FALSE
ENDIF
ENDIF
// Lower the roof of the ninef on entry
IF bLowerRoofOnVehEntry
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND IS_VEHICLE_DRIVEABLE(vehID_FranklinCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehID_FranklinCar)
IF GET_IS_VEHICLE_ENGINE_RUNNING(vehID_FranklinCar)
IF GET_PED_IN_VEHICLE_SEAT(vehID_FranklinCar, VS_DRIVER) = PLAYER_PED_ID()
IF GET_CONVERTIBLE_ROOF_STATE(vehID_FranklinCar) = CRS_RAISED
LOWER_CONVERTIBLE_ROOF(vehID_FranklinCar, FALSE)
bLowerRoofOnVehEntry = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// Create the Police car that passes us when we pass the Secuirty Van random event
IF NOT bPoliceCreated
vCopCoord[0] = << -311.2928, -846.2677, 31.3261 >> fCopHeading[0] = 79.1191
vCopCoord[1] = << -300.1753, -848.3715, 31.3886 >> fCopHeading[1] = 79.2345
vCopCoord[2] = << -289.2143, -850.4190, 31.3895 >> fCopHeading[2] = 79.0697
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vCopCoord[0]) < 400
IF LOAD_MODEL_ASSET(POLICE, bModelRequest_Police)
AND LOAD_MODEL_ASSET(S_M_Y_Cop_01, bModelRequest_Cop)
INT iCop
REPEAT 3 iCop
IF DOES_ENTITY_EXIST(vehID_Police[iCop])
DELETE_VEHICLE(vehID_Police[iCop])
ENDIF
vehID_Police[iCop] = CREATE_VEHICLE(POLICE, vCopCoord[iCop], fCopHeading[iCop], FALSE, FALSE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehID_Police[iCop])
SET_VEHICLE_DOORS_LOCKED(vehID_Police[iCop], VEHICLELOCK_CANNOT_ENTER)
FREEZE_ENTITY_POSITION(vehID_Police[iCop], TRUE)
SET_VEHICLE_SIREN(vehID_Police[iCop], TRUE)
pedID_Cop[iCop] = CREATE_PED_INSIDE_VEHICLE(vehID_Police[iCop], PEDTYPE_COP, S_M_Y_COP_01, VS_DRIVER, FALSE, FALSE)
SET_PED_DEFAULT_COMPONENT_VARIATION(pedID_Cop[iCop])
ENDREPEAT
CLEANUP_MODEL_ASSET(POLICE, bModelRequest_Police)
CLEANUP_MODEL_ASSET(S_M_Y_Cop_01, bModelRequest_Cop)
bPoliceCreated = TRUE
bPoliceTaskGiven = FALSE
bPoliceAudioSetup = FALSE
ENDIF
ENDIF
ELIF NOT bPoliceAudioSetup
INT iCop
REPEAT 3 iCop
IF DOES_ENTITY_EXIST(vehID_Police[iCop])
AND IS_VEHICLE_DRIVEABLE(vehID_Police[iCop])
PRINTLN("MAGDEMO: Adding cop vehicle , ", iCop, " to audio mix group MAGDEMO_SIRENS_FRANKLIN_MIXGROUP")
ADD_ENTITY_TO_AUDIO_MIX_GROUP(vehID_Police[iCop], "MAGDEMO_SIRENS_FRANKLIN_MIXGROUP")
ENDIF
ENDREPEAT
IF NOT IS_AUDIO_SCENE_ACTIVE("MAGDEMO_SIRENS_FRANKLIN")
PRINTLN("MAGDEMO: Starting audio scene MAGDEMO_SIRENS_FRANKLIN")
START_AUDIO_SCENE("MAGDEMO_SIRENS_FRANKLIN")
ENDIF
bPoliceAudioSetup = TRUE
ELIF NOT bPoliceTaskGiven
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND NOT IS_PED_INJURED(pedID_Cop[0])
AND IS_VEHICLE_DRIVEABLE(vehID_Police[0])
AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(vehID_Police[0])) < 200
PRINTLN("MAGDEMO: Tasking cop peds to drive to target")
CLEAR_AREA(vCopCoord[0], 25.0, TRUE)
INT iCop
REPEAT 3 iCop
IF NOT IS_PED_INJURED(pedID_Cop[iCop])
AND IS_VEHICLE_DRIVEABLE(vehID_Police[iCop])
FREEZE_ENTITY_POSITION(vehID_Police[iCop], FALSE)
CLEAR_PED_TASKS(pedID_Cop[iCop])
TASK_VEHICLE_MISSION_COORS_TARGET(pedID_Cop[iCop], vehID_Police[iCop], << -831.7271, -832.5468, 18.5985 >>, MISSION_GOTO, 30.0, DRIVINGMODE_AVOIDCARS, -1, -1, TRUE)
// Boost speed
SET_VEHICLE_FORWARD_SPEED(vehID_Police[iCop], 30.0 - (iCop*5.0))
ENDIF
ENDREPEAT
bPoliceTaskGiven = TRUE
ENDIF
ENDIF
// Create Maverick for interal demo
IF NOT DOES_ENTITY_EXIST(vehID_FranklinHeli)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<10.209121,-575.036804,36.644875>>, <<-37.664272,-558.832642,45.459064>>, 26.625000)
IF LOAD_MODEL_ASSET(MAVERICK, bModelRequest_Maverick)
IF DOES_ENTITY_EXIST(vehID_FranklinHeli)
DELETE_VEHICLE(vehID_FranklinHeli)
ENDIF
vehID_FranklinHeli = CREATE_VEHICLE(MAVERICK, << -12.0208, -568.7522, 36.7434 >>, 281.7917, FALSE, FALSE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehID_FranklinHeli)
CLEANUP_MODEL_ASSET(MAVERICK, bModelRequest_Maverick)
ENDIF
ENDIF
ENDIF
ENDIF
// Pre-stream the fbi2 cutscene when we're near the end of the drive
IF NOT bRequestedFBI2Cutscene
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), << -104.6129, -610.6462, 35.0561 >>) < 100
//PRINTLN("MAGDEMO: Requesting FBI2 cutscene 'fbi_2_mcs_1'")
//bRequestedFBI2Cutscene = TRUE
//REQUEST_CUTSCENE("fbi_2_mcs_1")
ENDIF
ENDIF
ENDIF
// Wait for player to switch to Michael
IF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_MICHAEL)
AND NOT IS_PLAYER_PED_SWITCH_IN_PROGRESS()
bGPSRouteSet = FALSE
CLEAR_GPS_MULTI_ROUTE()
SET_GPS_MULTI_ROUTE_RENDER(FALSE)
CLEAR_HINT_CAM()
SET_MD_STAGE(MD_STAGE_FBI2)
ENDIF
BREAK
ENDSWITCH
IF NOT bPedWallReset
// Set ped walla when the sync scene starts
IF NOT bPedWallSet
IF IS_PLAYER_SWITCH_IN_PROGRESS()
AND IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Exit_SynchSceneID)
AND GET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Exit_SynchSceneID) < 0.18
// Wait for it to get to the correct stage.
ELSE
PRINTLN("MAGDEMO: Setting ped walla density yo 0.85")
SET_PED_WALLA_DENSITY(0.85, 1.0)
bPedWallSet = TRUE
ENDIF
ENDIF
// Reset ped walla when player gets in vehicle
IF bPedWallSet
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(vehID_FranklinCar)
AND IS_VEHICLE_DRIVEABLE(vehID_FranklinCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehID_FranklinCar)
PRINTLN("MAGDEMO: Resetting ped walla density")
SET_PED_WALLA_DENSITY(0.5, 0.0)
bPedWallSet = FALSE
bPedWallReset = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
iControl = 1
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_MICHAEL) //, PR_TYPE_AMBIENT)
ENDIF
#ENDIF
ENDPROC
PROC DO_STAGE_FBI2()
TEXT_LABEL_15 sMissionName = "fbi2"
SWITCH iControl
CASE 0
CLEANUP_PREVIOUS_STAGE_ASSETS()
SET_MAGDEMO_SCENE()
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
VEHICLE_INDEX tempVeh
tempVeh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(tempVeh)
AND IS_VEHICLE_DRIVEABLE(tempVeh)
IF GET_ENTITY_MODEL(tempVeh) = TAILGATER
g_sMagDemoFBI2Entities.blip = CREATE_BLIP_FOR_COORD(<<1366.83, -2029.61, 51.04>>, TRUE)
g_sMagDemoFBI2Entities.bBlipActive = TRUE
SETTIMERA(0)
iControl++
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE 1
IF TIMERA() > 2000
REQUEST_SCRIPT(sMissionName)
IF HAS_SCRIPT_LOADED(sMissionName)
IF REQUEST_MISSION_LAUNCH(missionCandidateID, MCTID_MUST_LAUNCH, MISSION_TYPE_STORY) = MCRET_ACCEPTED
THREADID threadMission
threadMission = START_NEW_SCRIPT(sMissionName, MISSION_STACK_SIZE)
IF bRequestedFBI2Cutscene
IF HAS_THIS_CUTSCENE_LOADED("fbi_2_mcs_1")
SET_SCRIPT_CAN_START_CUTSCENE(threadMission)
ENDIF
ENDIF
bRequestedFBI2Cutscene = FALSE
SET_SCRIPT_AS_NO_LONGER_NEEDED(sMissionName)
iControl++
ENDIF
ENDIF
ENDIF
BREAK
CASE 2
IF DOES_BLIP_EXIST(g_sMagDemoFBI2Entities.blip)
IF NOT g_sMagDemoFBI2Entities.bBlipActive
REMOVE_BLIP(g_sMagDemoFBI2Entities.blip)
ENDIF
ENDIF
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("fbi2")) = 0
//bReplayFBI2 = (NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FBI_2))
bReplayFBI2 = (NOT HAS_THIS_SCRIPT_BEEN_REGISTERED_IN_COMPLETION_PERCENTAGE_TOTAL(CP_FBI2))
missionCandidateID = NO_CANDIDATE_ID
g_savedGlobals.sFlow.isGameflowActive = TRUE
RESET_GAMEFLOW()
g_savedGlobals.sFlow.isGameflowActive = FALSE
SET_MD_STAGE(MD_STAGE_RESET)
ENDIF
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE: Cleans up all script assets and states.
PROC CLEANUP_SCRIPT(BOOL bTerminateScript)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
ENDIF
IF DOES_ENTITY_EXIST(vehID_MichaelBike)
DELETE_VEHICLE(vehID_MichaelBike)
ENDIF
IF DOES_ENTITY_EXIST(vehID_MichaelCar)
IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vehID_MichaelCar)
DELETE_VEHICLE(vehID_MichaelCar)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(vehID_FranklinCar)
DELETE_VEHICLE(vehID_FranklinCar)
ENDIF
IF DOES_ENTITY_EXIST(vehID_FranklinHeli)
DELETE_VEHICLE(vehID_FranklinHeli)
ENDIF
IF DOES_ENTITY_EXIST(vehID_TrevorsCar)
DELETE_VEHICLE(vehID_TrevorsCar)
ENDIF
IF DOES_ENTITY_EXIST(vehID_TrevorsQuad)
DELETE_VEHICLE(vehID_TrevorsQuad)
ENDIF
IF DOES_ENTITY_EXIST(vehID_TrevorsRebel)
DELETE_VEHICLE(vehID_TrevorsRebel)
ENDIF
INT iCop
REPEAT 3 iCop
IF DOES_ENTITY_EXIST(pedID_Cop[iCop])
DELETE_PED(pedID_Cop[iCop])
ENDIF
IF DOES_ENTITY_EXIST(vehID_Police[iCop])
DELETE_VEHICLE(vehID_Police[iCop])
ENDIF
ENDREPEAT
IF DOES_ENTITY_EXIST(g_pScene_buddy)
AND NOT IS_PED_INJURED(g_pScene_buddy)
SET_ENTITY_AS_MISSION_ENTITY(g_pScene_buddy, TRUE, TRUE)
IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(g_pScene_buddy)
DELETE_PED(g_pScene_buddy)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(objID_MimeHat)
DELETE_OBJECT(objID_MimeHat)
ENDIF
IF DOES_PICKUP_EXIST(pickupID_PetrolTank)
REMOVE_PICKUP(pickupID_PetrolTank)
ENDIF
IF bRequestedFBI2Cutscene
REMOVE_CUTSCENE()
bRequestedFBI2Cutscene = FALSE
ENDIF
// Cop car sirens
IF IS_AUDIO_SCENE_ACTIVE("MAGDEMO_SIRENS_FRANKLIN")
PRINTLN("MAGDEMO: Stopping audio scene MAGDEMO_SIRENS_FRANKLIN")
STOP_AUDIO_SCENE("MAGDEMO_SIRENS_FRANKLIN")
ENDIF
// End of trevor drive
PRINTLN("MAGDEMO: Turning on roads for end of Trevor stage")
SET_ROADS_IN_ANGLED_AREA(<<1440.352417,3672.524658,10.284130>>, <<415.225677,3596.012695,59.100624>>, 250.0, FALSE, TRUE)
//SET_VEHICLE_DENSITY_MULTIPLIER(1.0)
bTurnedOffTrevorRoads = FALSE
CLEAR_GPS_MULTI_ROUTE()
SET_GPS_MULTI_ROUTE_RENDER(FALSE)
bGPSRouteSet = FALSE
CLEAR_HINT_CAM()
CLEANUP_MODEL_ASSET(SCORCHER, bModelRequest_Scorcher)
CLEANUP_MODEL_ASSET(NINEF2, bModelRequest_Ninef2)
CLEANUP_MODEL_ASSET(MAVERICK, bModelRequest_Maverick)
CLEANUP_MODEL_ASSET(BLAZER, bModelRequest_Blazer)
CLEANUP_MODEL_ASSET(BODHI2, bModelRequest_Bodhi2)
CLEANUP_MODEL_ASSET(REBEL, bModelRequest_Rebel)
CLEANUP_MODEL_ASSET(TAILGATER, bModelRequest_Tailgater)
CLEANUP_MODEL_ASSET(POLICE, bModelRequest_Police)
CLEANUP_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), bModelRequest_Michael)
CLEANUP_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_TREVOR), bModelRequest_Trevor)
CLEANUP_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN), bModelRequest_Franklin)
CLEANUP_MODEL_ASSET(GET_NPC_PED_MODEL(CHAR_DAVE), bModelRequest_Dave)
CLEANUP_MODEL_ASSET(S_M_Y_Cop_01, bModelRequest_Cop)
CLEANUP_MODEL_ASSET(PROP_BUSKER_HAT_01, bModelRequest_MimeHat)
CLEANUP_ANIM_ASSET("SWITCH@MICHAEL@SUNLOUNGER", bAnimRequest_Lounger)
CLEANUP_AUDIO_ASSET("Magdemo_Sunlounger", bAudioRequest_Lounger)
missionCandidateID = NO_CANDIDATE_ID
// Reset radio flags
bRadioSetup_Ninef2 = FALSE
bRadioTurnedOn_Ninef2 = FALSE
bRadioSetup_Bodhi2 = FALSE
bRadioSetup_Blazer = FALSE
bRadioSetup_Sentinel2 = FALSE
bRadioTurnedOn_Sentinel2 = FALSE
eStoredModel = DUMMY_MODEL_FOR_SCRIPT
IF DOES_BLIP_EXIST(g_sMagDemoFBI2Entities.blip)
REMOVE_BLIP(g_sMagDemoFBI2Entities.blip)
ENDIF
g_sMagDemoFBI2Entities.bBlipActive = FALSE
g_bMagDemoFBI2Retry = FALSE
SET_PED_WALLA_DENSITY(0.5, 0.0)
bPedWallSet = FALSE
bPedWallReset = FALSE
// Ending magdemo so ensure gameplay can resume
IF bTerminateScript
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
ENDIF
// Fix for bug #814560 - Hiding bin bags as they have no alpha, causing them to pop
IF bHidingBinBag
REMOVE_MODEL_HIDE(<<1927.89, 3925.41, 31.42>>, 5.0, INT_TO_ENUM(MODEL_NAMES, HASH("prop_rub_binbag_03b")), TRUE)
bHidingBinBag = FALSE
ENDIF
// Unblock areas
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockID_fbi2)
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockID_trevorDrive)
// - Hill outside Michaels mansion
SET_PED_PATHS_IN_AREA(<< -881.7, 86.3, 45.5 >>, << -839.7, 216.2, 82.6 >>, TRUE)
SET_PED_PATHS_IN_AREA(<< -881.6, 0.4, 31.8 >>, << -819.5, 96.4, 68.9 >>, TRUE)
SET_PED_PATHS_IN_AREA(<< -845.9, -76.4, 20.3 >>, << -771.6, 38.8, 58.4 >>, TRUE)
// - Muscle beach
SET_PED_PATHS_IN_AREA(<< -1177.2, -1523.7, 0 >>, << -1168.4, -1518.2, 10 >>, TRUE)
SET_PED_PATHS_IN_AREA(<< -1180.9, -1526.9, 0 >>, << -1172.3, -1521.4, 10 >>, TRUE)
SET_PED_PATHS_IN_AREA(<< -1185.4, -1530.3, 0 >>, << -1176.8, -1524.6, 10 >>, TRUE)
SET_PED_PATHS_IN_AREA(<< -1189.7, -1533.0, 0 >>, << -1181.1, -1527.6, 10 >>, TRUE)
SET_PED_PATHS_IN_AREA(<< -1193.9, -1535.8, 0 >>, << -1185.3, -1530.4, 10 >>, TRUE)
SET_PED_PATHS_IN_AREA(<< -1198.1, -1538.8, 0 >>, << -1189.4, -1533.3, 10 >>, TRUE)
SET_PED_PATHS_IN_AREA(<< -1197.2, -1541.7, 0 >>, << -1192.5, -1536.7, 10 >>, TRUE)
g_bMagDemoActive = FALSE
// Reset flags
g_bTaxiHailingIsDisabled = FALSE
DO_SCREEN_FADE_IN(1000)
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
SET_WANTED_LEVEL_MULTIPLIER(1)
SET_MAX_WANTED_LEVEL(5)
PAUSE_CLOCK(FALSE)
SCRIPT_OVERRIDES_WIND_TYPES(FALSE, "", "")
SET_RANDOM_TRAINS(TRUE) //740410
SET_VEHICLE_MODEL_IS_SUPPRESSED(NINEF2, FALSE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(UTILLITRUCK2, FALSE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(UTILLITRUCK3, FALSE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(FBI2, FALSE)
TERMINATE_THIS_THREAD()
ENDIF
ENDPROC
PROC DO_STAGE_RESET()
// Fade out and then delete all assets
IF NOT IS_SCREEN_FADED_OUT()
IF NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(1000)
START_AUDIO_SCENE("MISSION_FAILED_SCENE")
ENDIF
// Only process when player is alive
ELIF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEANUP_SCRIPT(FALSE)
SET_MD_STAGE(MD_STAGE_CREATE_INITIAL_SCENE)
// Failed FBI2 so retry
IF bReplayFBI2
#IF IS_DEBUG_BUILD
OR (sZSkipData.bDoSkip AND (sZSkipData.iSelectedStage = 4)) // "FBI2"
#ENDIF
SET_INITIAL_MAGDEMO_GAME_STATE()
g_bMagDemoFBI2Retry = TRUE
// Set up the fbi2 scene
// --------
// --------
// --------
// --------
// --------
// --------
PED_REQUEST_SCENE_ENUM eScene = PR_SCENE_Ma_FBI1end //PR_SCENE_M_MD_FBI2
// SCENE COORDS
VECTOR vCreateCoords //coord to place the player in the scene
FLOAT fCreateHead //heading of the player for the scene
TEXT_LABEL_31 tRoom //room name for the scene if in an interior (not needed for FBI2)
GET_PLAYER_PED_POSITION_FOR_SCENE(eScene, vCreateCoords, fCreateHead, tRoom)
// SCENE ASSETS
PED_SCENE_STRUCT sPedScene
PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene
sPedScene.eScene = eScene
SETUP_PLAYER_TIMETABLE_FOR_SCENE(sPedScene, sPassedScene)
//SCENE VEHICLE
PED_VEH_DATA_STRUCT sVehData //veh data struct for creating the vehicle. But as its the player car this shouldnt be needed
VECTOR vVehCoordsOffset //<<0,0,0>> for scene as Player is in the vehicle
FLOAT fVehHeadOffset
VECTOR vDriveOffset //where player will drive the vehicle to
FLOAT fDriveSpeed //how fast the player will drive the vehicle
GET_PLAYER_VEH_POSITION_FOR_SCENE(CHAR_MICHAEL, eScene, sVehData, vVehCoordsOffset, fVehHeadOffset, vDriveOffset, fDriveSpeed)
WHILE NOT LOAD_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), bModelRequest_Michael)
OR NOT LOAD_MODEL_ASSET(TAILGATER, bModelRequest_Tailgater)
OR NOT LOAD_MODEL_ASSET(GET_NPC_PED_MODEL(CHAR_DAVE), bModelRequest_Dave)
WAIT(0)
ENDWHILE
WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_MICHAEL, FALSE)
WAIT(0)
ENDWHILE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT , OUTFIT_P0_DEFAULT, FALSE)
ENDIF
CREATE_PLAYER_VEHICLE(vehID_MichaelCar, CHAR_MICHAEL,
vCreateCoords+vVehCoordsOffset, fCreateHead+fVehHeadOffset,
FALSE, VEHICLE_TYPE_CAR)
SET_VEHICLE_ON_GROUND_PROPERLY(vehID_MichaelCar)
SET_VEH_RADIO_STATION(vehID_MichaelCar, "RADIO_01_CLASS_ROCK")
FREEZE_RADIO_STATION("RADIO_01_CLASS_ROCK")
//SET_RADIO_TRACK("RADIO_01_CLASS_ROCK", "MAG_DEMO_ADULT_EDUCATION")
SET_RADIO_AUTO_UNFREEZE(TRUE)
// #746924
// Can you please turn the radio off for Michael's car now
SET_VEHICLE_RADIO_ENABLED(vehID_MichaelCar, FALSE)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehID_MichaelCar)
TASK_VEHICLE_DRIVE_TO_COORD(PLAYER_PED_ID(), vehID_MichaelCar,
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehID_MichaelCar, vDriveOffset),
fDriveSpeed, DRIVINGSTYLE_NORMAL, GET_ENTITY_MODEL(vehID_MichaelCar),
DRIVINGMODE_AVOIDCARS, 4.0, 30)
SET_VEHICLE_FORWARD_SPEED(vehID_MichaelCar, fDriveSpeed)
ENDIF
WHILE NOT CREATE_NPC_PED_INSIDE_VEHICLE(g_pScene_buddy, CHAR_DAVE, vehID_MichaelCar, VS_FRONT_RIGHT, FALSE)
WAIT(0)
ENDWHILE
IF NOT IS_PED_INJURED(g_pScene_buddy)
SET_ENTITY_AS_MISSION_ENTITY(g_pScene_buddy)
SET_PED_CAN_BE_TARGETTED(g_pScene_buddy, FALSE)
SET_PED_RELATIONSHIP_GROUP_HASH(g_pScene_buddy, RELGROUPHASH_PLAYER)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(g_pScene_buddy, TRUE)
ENDIF
CLEANUP_MODEL_ASSET(TAILGATER, bModelRequest_Tailgater)
CLEANUP_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), bModelRequest_Michael)
CLEANUP_MODEL_ASSET(GET_NPC_PED_MODEL(CHAR_DAVE), bModelRequest_Dave)
g_sMagDemoFBI2Entities.bCreated = TRUE
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(eScene, sPlayerTimetableAdditional_script)
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableAdditional_script)) <= 0
REQUEST_SCRIPT(sPlayerTimetableAdditional_script)
WHILE NOT HAS_SCRIPT_LOADED(sPlayerTimetableAdditional_script)
WAIT(0)
ENDWHILE
START_NEW_SCRIPT(sPlayerTimetableAdditional_script, FRIEND_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableAdditional_script)
g_sMagDemoFBI2Entities.bCreated = FALSE
WHILE NOT g_sMagDemoFBI2Entities.bCreated
printstring("waiting on g_sMagDemoFBI2Entities.bCreated...")
printnl()
WAIT(0)
ENDWHILE
ENDIF
ENDIF
// --------
// --------
// --------
// --------
// --------
// --------
// Fade in and give control back
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 200.00, TRUE, TRUE)
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(1000)
ENDIF
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
ENDIF
SET_MD_STAGE(MD_STAGE_FBI2)
#IF IS_DEBUG_BUILD
sZSkipData.bDoSkip = FALSE
#ENDIF
// Set up the scene if we have used the Z-Skip menu
#IF IS_DEBUG_BUILD
ELIF sZSkipData.bDoSkip
SET_INITIAL_MAGDEMO_GAME_STATE()
IF (sZSkipData.iSelectedStage = 0) // "Initial scene"
// Let the initial scene set this one up
SET_MD_STAGE(MD_STAGE_CREATE_INITIAL_SCENE)
ELIF (sZSkipData.iSelectedStage = 1) // "Michael on bicycle"
WHILE NOT LOAD_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), bModelRequest_Michael)
OR NOT LOAD_MODEL_ASSET(SCORCHER, bModelRequest_Scorcher)
WAIT(0)
ENDWHILE
WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_MICHAEL, FALSE)
WAIT(0)
ENDWHILE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT , OUTFIT_P0_YOGA, FALSE)
ENDIF
IF DOES_ENTITY_EXIST(vehID_MichaelBike)
DELETE_VEHICLE(vehID_MichaelBike)
ENDIF
vehID_MichaelBike = CREATE_VEHICLE(SCORCHER,<< -810.8484, 189.7630, 71.4785 >>, 131.0119, FALSE, FALSE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehID_MichaelBike)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehID_MichaelBike)
ENDIF
CLEANUP_MODEL_ASSET(SCORCHER, bModelRequest_Scorcher)
CLEANUP_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), bModelRequest_Michael)
// Fade in and give control back
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 200.00, TRUE, TRUE)
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(1000)
ENDIF
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
ENDIF
SET_MD_STAGE(MD_STAGE_MICHAEL_DRIVE)
ELIF (sZSkipData.iSelectedStage = 2) // "Trevor in trailer"
WHILE NOT LOAD_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_TREVOR), bModelRequest_Trevor)
OR NOT LOAD_MODEL_ASSET(BLAZER, bModelRequest_Blazer)
OR NOT LOAD_MODEL_ASSET(BODHI2, bModelRequest_Bodhi2)
OR NOT LOAD_MODEL_ASSET(REBEL, bModelRequest_Rebel)
WAIT(0)
ENDWHILE
WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_TREVOR, FALSE)
WAIT(0)
ENDWHILE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P2_DEFAULT, FALSE)
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P2_SWEAT_PANTS, FALSE)
SET_ENTITY_COORDS(PLAYER_PED_ID(), << 1972.5209, 3816.7981, 33.4337 >>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 210.9937)
ENDIF
IF DOES_ENTITY_EXIST(vehID_TrevorsCar)
DELETE_VEHICLE(vehID_TrevorsCar)
ENDIF
CREATE_PLAYER_VEHICLE(vehID_TrevorsCar, CHAR_TREVOR, << 1982.8802, 3807.0273, 31.2023 >>, 299.7608, FALSE, VEHICLE_TYPE_CAR)
SET_VEHICLE_ON_GROUND_PROPERLY(vehID_TrevorsCar)
IF DOES_ENTITY_EXIST(vehID_TrevorsQuad)
DELETE_VEHICLE(vehID_TrevorsQuad)
ENDIF
vehID_TrevorsQuad = CREATE_VEHICLE(BLAZER, << 1981.9261, 3829.3467, 31.3876 >>, 262.5776, FALSE, FALSE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehID_TrevorsQuad)
CLEANUP_MODEL_ASSET(BODHI2, bModelRequest_Bodhi2)
CLEANUP_MODEL_ASSET(BLAZER, bModelRequest_Blazer)
CLEANUP_MODEL_ASSET(REBEL, bModelRequest_Rebel)
CLEANUP_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_TREVOR), bModelRequest_Trevor)
// Fade in and give control back
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 200.00, TRUE, TRUE)
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(1000)
ENDIF
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
ENDIF
SET_MD_STAGE(MD_STAGE_TREVOR_DRIVE)
ELIF (sZSkipData.iSelectedStage = 3) // "Franklin at muscle beach"
WHILE NOT LOAD_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN), bModelRequest_Franklin)
WAIT(0)
ENDWHILE
WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_FRANKLIN, FALSE)
WAIT(0)
ENDWHILE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P1_DEFAULT, FALSE)
SET_ENTITY_COORDS(PLAYER_PED_ID(), << -1174.7980, -1573.3339, 4.3630 >>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 172.9187)
ENDIF
CLEANUP_MODEL_ASSET(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN), bModelRequest_Franklin)
SET_MD_STAGE(MD_STAGE_FRANKLIN_DRIVE)
// Fade in and give control back
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 200.00, TRUE, TRUE)
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_IN(1000)
ENDIF
STOP_AUDIO_SCENE("MISSION_FAILED_SCENE")
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
ENDIF
ENDIF
sZSkipData.bDoSkip = FALSE
#ENDIF
ENDIF
SET_MAGDEMO_SCENE()
ENDIF
ENDPROC
#IF IS_DEBUG_BUILD
PROC SETUP_MAGDEMO_WIDGETS()
START_WIDGET_GROUP("MAGDEMO")
ADD_WIDGET_BOOL("Display street names", bDisplayStreetNames)
ADD_WIDGET_BOOL("Display area names", bDisplayAreaNames)
ADD_WIDGET_INT_SLIDER("Ninef2 - Radio Delay (ms)", iRadioTurnOnDelay_Ninef2, 0, 10000, 100)
ADD_WIDGET_BOOL("Ninef2 - Setup", bRadioSetup_Ninef2)
ADD_WIDGET_BOOL("Kill script", bKillScript)
STOP_WIDGET_GROUP()
sZSkipData.SkipMenuStruct[0].sTxtLabel = "Michael sitting by the pool"
sZSkipData.SkipMenuStruct[1].sTxtLabel = "Michael on bicycle"
sZSkipData.SkipMenuStruct[2].sTxtLabel = "Trevor in trailer"
sZSkipData.SkipMenuStruct[3].sTxtLabel = "Franklin at muscle beach"
sZSkipData.SkipMenuStruct[4].sTxtLabel = "FBI2"
ENDPROC
PROC MAINTAIN_MAGDEMO_WIDGETS()
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)
IF NOT IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE()
IF GET_HASH_KEY(GET_NAME_OF_SCRIPT_TO_AUTOMATICALLY_START()) != GET_HASH_KEY(GET_THIS_SCRIPT_NAME())
SET_MD_STAGE(MD_STAGE_CLEANUP)
ENDIF
ENDIF
ENDIF
IF bDisplayStreetNames
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_STREET_NAME)
ENDIF
IF bDisplayAreaNames
SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_AREA_NAME)
ENDIF
IF bKillScript
SET_MD_STAGE(MD_STAGE_CLEANUP)
ENDIF
IF eMDStage != MD_STAGE_RESET
AND eMDStage != MD_STAGE_CLEANUP
AND NOT IS_CURRENTLY_ON_MISSION_OF_ANY_TYPE()
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
AND IS_PLAYER_CONTROL_ON(PLAYER_ID())
IF LAUNCH_MISSION_STAGE_MENU(sZSkipData.SkipMenuStruct, sZSkipData.iSelectedStage, sZSkipData.iCurrentStage, FALSE, "MAGDEMO", FALSE)
sZSkipData.bDoSkip = TRUE
SET_MD_STAGE(MD_STAGE_RESET)
ENDIF
ENDIF
ENDPROC
#ENDIF
SCRIPT
/*
NOTES
-runscript=magdemo
startup.sc checks if the magdemo has been specificed and sets the g_bMagDemoActive to TRUE.
It then requests and starts this script once main_persistent.sc has been started.
main.sc no longer fades the game in if g_bMagDemoActive is set to TRUE.
player_controller.sc no longer sets a random character on startup if g_bMagDemoActive is set to TRUE.
- DO_STAGE_CREATE_INITIAL_SCENE()
This proc must wait for initial.sc to terminate for the force cleanup to be successful.
*/
PRINTLN("LAUNCHING MAGDEMO SCRIPT")
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_DEBUG_MENU)
CLEANUP_SCRIPT(TRUE)
ENDIF
#IF IS_DEBUG_BUILD
SETUP_MAGDEMO_WIDGETS()
#ENDIF
WHILE TRUE
#IF IS_DEBUG_BUILD
MAINTAIN_MAGDEMO_WIDGETS()
#ENDIF
SWITCH eMDStage
////////////////////////////////////////////////////////////////
/// CREATE INITIAL SCENE
CASE MD_STAGE_CREATE_INITIAL_SCENE
DO_STAGE_CREATE_INITIAL_SCENE()
BREAK
////////////////////////////////////////////////////////////////
/// MICHAEL DRIVES DOWN STREET TO ROCKFORD HILLS SIGN
CASE MD_STAGE_MICHAEL_DRIVE
DO_STAGE_STAGE_MICHAEL_DRIVE()
BREAK
////////////////////////////////////////////////////////////////
/// TREVOR DRIVES AROUND SANDY SHORES TO A LIQUOR SIGN
CASE MD_STAGE_TREVOR_DRIVE
DO_STAGE_TREVOR_DRIVE()
BREAK
////////////////////////////////////////////////////////////////
/// FRANKLIN DRIVES AROUND THE CITY TOWARD VINEWOOD
CASE MD_STAGE_FRANKLIN_DRIVE
DO_STAGE_FRANKLIN_DRIVE()
BREAK
////////////////////////////////////////////////////////////////
/// TRIGGER FBI2 MISSION
CASE MD_STAGE_FBI2
DO_STAGE_FBI2()
BREAK
////////////////////////////////////////////////////////////////
/// RESET
CASE MD_STAGE_RESET
DO_STAGE_RESET()
BREAK
////////////////////////////////////////////////////////////////
/// CLEANUP
CASE MD_STAGE_CLEANUP
CLEANUP_SCRIPT(TRUE)
BREAK
ENDSWITCH
UPDATE_HINT_CAM()
UPDATE_PLAYER_PED_STATES()
// #826620 block shocking events throughout entire magdemo
SUPPRESS_SHOCKING_EVENT_TYPE_NEXT_FRAME(SHOCKING_EVENT_AFFECTS_OTHERS)
SUPPRESS_SHOCKING_EVENT_TYPE_NEXT_FRAME(SHOCKING_EVENT_POTENTIALLY_DANGEROUS)
SUPPRESS_SHOCKING_EVENT_TYPE_NEXT_FRAME(SHOCKING_EVENT_SERIOUS_DANGER)
// #739576 always suppress scenario exits
SUPPRESS_NORMAL_SCENARIO_EXITS_NEXT_FRAME()
// #725141
SUPPRESS_SCENARIO_ATTRACTION_NEXT_FRAME()
// #728489
SUPPRESS_BREAKOUT_SCENARIO_EXITS_NEXT_FRAME()
// #831289 and #824566
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_PED_PURSUE_WHEN_HIT_BY_CAR, FALSE)
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_PED_STEAL_VEHICLE, FALSE)
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_PED_JAY_WALK_LIGHTS, FALSE)
//SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_ON_FOOT_FROM_VEHICLE, FALSE)
//SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_ON_FOOT, FALSE)
//SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_VEHICLE_WARNING, FALSE)
//SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_VEHICLE_FLEE, FALSE)
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_VEHICLE_DRIVING_FAST, FALSE)
// #834333
SUPPRESS_AGITATION_EVENTS_NEXT_FRAME()
WAIT(0)
ENDWHILE
ENDSCRIPT
#ENDIF