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

2390 lines
73 KiB
Python
Executable File

//////////////////////////////////////////////////////////////////////////////////////////
// //
// SCRIPT NAME : magdemo2.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 bKillScript
INT iJSkipStage
STRUCT Z_SKIP_DATA
INT iSelectedStage
INT iCurrentStage
BOOL bDoSkip
MissionStageMenuTextStruct SkipMenuStruct[4]
ENDSTRUCT
Z_SKIP_DATA sZSkipData
// Script data
ENUM MD_STAGE_ENUM
MD_STAGE_CREATE_INITIAL_SCENE = 0,
MD_STAGE_FRANKLIN_BASEJUMP,
MD_STAGE_TREVOR_DIVING,
MD_STAGE_MICHAEL_WALK_AROUND_CITY,
MD_STAGE_FRA2,
MD_STAGE_RESET,
MD_STAGE_CLEANUP
ENDENUM
MD_STAGE_ENUM eMDStage
INT iControl = 0
BOOL bHintCam_Set = FALSE
BOOL bHintCam_Required = FALSE
BOOL bHintCam_Active = FALSE
VECTOR vHintCamCoord
VECTOR vHintCamArea1,vHintCamArea2
FLOAT fHintCamArea
CHASE_HINT_CAM_STRUCT localChaseHintCamStruct
MODEL_NAMES eStoredModel
INT missionCandidateID = NO_CANDIDATE_ID
BOOL bSafeToProgress
BOOL bFBI4LoadSceneStart
INT iNewLoadSceneStage
BOOL bAudioScene_MikeWalk
BOOL bAudioScene_TrevWake
BOOL bAudioScene_TrevBoat
BOOL bAudioScene_TrevDive
BOOL bAudioGroup_Ranger
BOOL bAudioGroup_Tourbus
INT iNavBlockID
INT iWindSound = -1
BOOL bTriggerSpaceRangerDialogue = FALSE
// FRANKLIN STAGE
//BLIP_INDEX blipTitanPlane
VEHICLE_INDEX viBaseJumpTitan
PED_INDEX piBaseJumpTitanPilot
VEHICLE_INDEX viRanger
//MICHAEL STAGE
VEHICLE_INDEX viClosestCar, viClosestCarPrev
VEHICLE_INDEX viSuperD, viVoltic
PED_INDEX piClosestCarDriver
PED_INDEX piClosestCarDriver2
// TREVOR STAGE
BOOL bRelGroupSetup
REL_GROUP_HASH sharkGroup
BLIP_INDEX blipSharks[10]
INT iBlippedSharks
BLIP_INDEX blipBoat
BLIP_INDEX blipDiverPed
//BLIP_INDEX blipSharkLocation
//BLIP_INDEX blipWreckLocation
BLIP_INDEX blipWreckDiveLocation
PED_INDEX piDiverPed
PED_INDEX piDiverPed2
BOOL bTrevorScubaOutfitPreloaded
BOOL bUnderwaterMusic
INT iSoundID_Breathing = -1
SEQUENCE_INDEX seqDiverDelay
BOOL bModelRequest_Cargo
BOOL bModelRequest_Pilot
BOOL bModelRequest_Steve, bModelRequest_Franklin
BOOL bModelRequest_Driver
BOOL bAnimRequest_Dive, bAnimRequest_Swim
// FRANKLIN 2 STAGE
BOOL bReplayFRA2
TEXT_LABEL_15 sMissionName = "franklin2"
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 CLEAR_AUDIO_SCENES()
// Michael
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WALK_THROUGH_VINEWOOD")
STOP_AUDIO_SCENE("MAG_2_WALK_THROUGH_VINEWOOD")
bAudioScene_MikeWalk = FALSE
ENDIF
// Trevor
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WAKE_UP")
STOP_AUDIO_SCENE("MAG_2_WAKE_UP")
bAudioScene_TrevWake = FALSE
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_DRIVE_DINGHY")
STOP_AUDIO_SCENE("MAG_2_DRIVE_DINGHY")
bAudioScene_TrevBoat = FALSE
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_SCUBA_DIVE")
STOP_AUDIO_SCENE("MAG_2_SCUBA_DIVE")
bAudioScene_TrevDive = 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_FRANKLIN_BASEJUMP,
MD_STAGE_TREVOR_DIVING,
MD_STAGE_MICHAEL_WALK_AROUND_CITY,
MD_STAGE_FRA2,
MD_STAGE_RESET,
MD_STAGE_CLEANUP
*/
// Cleanup Franklin stage
IF ENUM_TO_INT(eMDStage) >= ENUM_TO_INT(MD_STAGE_FRANKLIN_BASEJUMP)
// IF DOES_BLIP_EXIST(blipTitanPlane)
// REMOVE_BLIP(blipTitanPlane)
// ENDIF
IF DOES_ENTITY_EXIST(viBaseJumpTitan)
DELETE_VEHICLE(viBaseJumpTitan)
ENDIF
IF DOES_ENTITY_EXIST(piBaseJumpTitanPilot)
DELETE_PED(piBaseJumpTitanPilot)
ENDIF
REMOVE_VEHICLE_RECORDING(2, "MAGDEMOTITAN")
IF DOES_ENTITY_EXIST(viRanger)
AND IS_VEHICLE_DRIVEABLE(viRanger)
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(viRanger)
viRanger = NULL
ENDIF
// Cleanup wind sound when we jump
IF iWindSound != -1
PRINTLN("MAGDEMO: Stopping sound Helicopter_Wind")
STOP_SOUND(iWindSound)
iWindSound = -1
ENDIF
CLEANUP_MODEL_ASSET(CARGOPLANE, bModelRequest_Cargo)
CLEANUP_MODEL_ASSET(S_M_M_PILOT_01, bModelRequest_Pilot)
ENDIF
// Cleanup Trevor stage
IF ENUM_TO_INT(eMDStage) >= ENUM_TO_INT(MD_STAGE_MICHAEL_WALK_AROUND_CITY)
INT iBlip
REPEAT COUNT_OF(blipSharks) iBlip
IF DOES_BLIP_EXIST(blipSharks[iBlip])
REMOVE_BLIP(blipSharks[iBlip])
ENDIF
ENDREPEAT
iBlippedSharks = 0
IF DOES_ENTITY_EXIST(piDiverPed)
DELETE_PED(piDiverPed)
ENDIF
IF DOES_ENTITY_EXIST(piDiverPed2)
DELETE_PED(piDiverPed2)
ENDIF
IF DOES_BLIP_EXIST(blipDiverPed)
REMOVE_BLIP(blipDiverPed)
ENDIF
IF DOES_BLIP_EXIST(blipWreckDiveLocation)
REMOVE_BLIP(blipWreckDiveLocation)
ENDIF
IF DOES_BLIP_EXIST(blipBoat)
REMOVE_BLIP(blipBoat)
ENDIF
// IF DOES_BLIP_EXIST(blipSharkLocation)
// REMOVE_BLIP(blipSharkLocation)
// ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_SCUBA_DIVE")
STOP_AUDIO_SCENE("MAG_2_SCUBA_DIVE")
bAudioScene_TrevDive = FALSE
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WAKE_UP")
STOP_AUDIO_SCENE("MAG_2_WAKE_UP")
bAudioScene_TrevWake = FALSE
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_DRIVE_DINGHY")
STOP_AUDIO_SCENE("MAG_2_DRIVE_DINGHY")
bAudioScene_TrevBoat = FALSE
ENDIF
IF bTrevorScubaOutfitPreloaded
RELEASE_PED_PRELOAD_PROP_DATA(PLAYER_PED_ID())
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
bTrevorScubaOutfitPreloaded = FALSE
ENDIF
IF bUnderwaterMusic
IF NOT HAS_SOUND_FINISHED(iSoundID_Breathing)
STOP_SOUND(iSoundID_Breathing)
ENDIF
TRIGGER_MUSIC_EVENT("MG2_STOP")
bUnderwaterMusic = FALSE
ENDIF
RELEASE_SCRIPT_AUDIO_BANK()
CLEANUP_MODEL_ASSET(IG_STEVEHAINS, bModelRequest_Steve)
CLEANUP_ANIM_ASSET("missheistchem2", bAnimRequest_Dive)
CLEANUP_ANIM_ASSET("SWIMMING@scuba", bAnimRequest_Swim)
ENDIF
// Cleanup Michael stage
IF ENUM_TO_INT(eMDStage) >= ENUM_TO_INT(MD_STAGE_FRA2)
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WALK_THROUGH_VINEWOOD")
STOP_AUDIO_SCENE("MAG_2_WALK_THROUGH_VINEWOOD")
bAudioScene_MikeWalk = FALSE
ENDIF
IF DOES_ENTITY_EXIST(piClosestCarDriver)
DELETE_PED(piClosestCarDriver)
ENDIF
IF DOES_ENTITY_EXIST(piClosestCarDriver2)
DELETE_PED(piClosestCarDriver2)
ENDIF
IF DOES_ENTITY_EXIST(viSuperD)
DELETE_VEHICLE(viSuperD)
SET_MODEL_AS_NO_LONGER_NEEDED(SUPERD)
ENDIF
IF DOES_ENTITY_EXIST(viVoltic)
DELETE_VEHICLE(viVoltic)
SET_MODEL_AS_NO_LONGER_NEEDED(VOLTIC)
ENDIF
CLEANUP_MODEL_ASSET(PLAYER_ONE, bModelRequest_Franklin)
CLEANUP_MODEL_ASSET(G_M_Y_BALLASOUT_01, bModelRequest_Driver)
bTriggerSpaceRangerDialogue = FALSE
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
INT iExitBoatStage
INT iBoatSceneID
VECTOR vScenePos, vSceneRot
VEHICLE_INDEX viPlayerBoat
CAMERA_INDEX ciUnderwaterCam
PROC UPDATE_EXIT_BOAT_CAM()
SWITCH iExitBoatStage
CASE 0
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
IF NOT IS_AUDIO_SCENE_ACTIVE("MAG_2_SCUBA_DIVE")
START_AUDIO_SCENE("MAG_2_SCUBA_DIVE")
bAudioScene_TrevDive = TRUE
ENDIF
iExitBoatStage = 7
ELIF eMDStage = MD_STAGE_TREVOR_DIVING
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
AND IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
LOAD_ANIM_ASSET("missheistchem2", bAnimRequest_Dive)
LOAD_ANIM_ASSET("SWIMMING@scuba", bAnimRequest_Swim)
PRELOAD_OUTFIT(PLAYER_PED_ID(), OUTFIT_P2_SCUBA_WATER)
bTrevorScubaOutfitPreloaded = TRUE
iExitBoatStage++
ENDIF
BREAK
CASE 1
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
AND IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y)
AND LOAD_ANIM_ASSET("missheistchem2", bAnimRequest_Dive)
AND LOAD_ANIM_ASSET("SWIMMING@scuba", bAnimRequest_Swim)
viPlayerBoat = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID(), TRUE)
iExitBoatStage++
SETTIMERA(0)
ENDIF
BREAK
CASE 2
IF TIMERA() > 1250
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND DOES_ENTITY_EXIST(viPlayerBoat)
AND IS_VEHICLE_DRIVEABLE(viPlayerBoat)
//vBoatCoords = GET_ENTITY_COORDS(viPlayerBoat)
//fBoatHead = GET_ENTITY_HEADING(viPlayerBoat)
SET_ENTITY_COORDS(viPlayerBoat, <<3114.312, -401.92, 0.5>>)
SET_ENTITY_HEADING(viPlayerBoat, RAD_TO_DEG(0.840))
SET_BOAT_ANCHOR(viPlayerBoat, TRUE)
// Cut the cam to under the water
IF NOT DOES_CAM_EXIST(ciUnderwaterCam)
ciUnderwaterCam = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE)
ENDIF
SET_CAM_ACTIVE(ciUnderwaterCam, TRUE)
SET_CAM_PARAMS(ciUnderwaterCam,<<3123.315186,-406.689240,-5.353999>>,<<19.894205,12.873194,79.032074>>,50.000000, 0)
SET_CAM_PARAMS(ciUnderwaterCam,<<3124.211670,-406.338837,-2.572298>>,<<1.050243,12.873191,83.351349>>,50.000000, 6000)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
// Dress the player and put in dive position
SET_PED_MAX_TIME_UNDERWATER(PLAYER_PED_ID(), 100000000.00)
SET_PED_DIES_IN_WATER(PLAYER_PED_ID(), FALSE)
SET_ENABLE_SCUBA(player_ped_id(), true)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P2_SCUBA_WATER, FALSE)
RELEASE_PED_PRELOAD_PROP_DATA(PLAYER_PED_ID())
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
bTrevorScubaOutfitPreloaded = FALSE
vScenePos = <<0.0, 0.0, 0.0>>
vSceneRot = <<0.0, 0.0, 0.0>>
iBoatSceneID = CREATE_SYNCHRONIZED_SCENE(vScenePos, vSceneRot)
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iBoatSceneID, "missheistchem2", "Boat_Dive_Exit_Player", INSTANT_BLEND_IN, WALK_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, rbf_none, NORMAL_BLEND_IN)
ATTACH_SYNCHRONIZED_SCENE_TO_ENTITY(iBoatSceneID, viPlayerBoat, 0)
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WAKE_UP")
STOP_AUDIO_SCENE("MAG_2_WAKE_UP")
bAudioScene_TrevWake = FALSE
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_DRIVE_DINGHY")
STOP_AUDIO_SCENE("MAG_2_DRIVE_DINGHY")
bAudioScene_TrevBoat = FALSE
ENDIF
iExitBoatStage++
ENDIF
BREAK
CASE 3
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBoatSceneID)
IF GET_SYNCHRONIZED_SCENE_PHASE(iBoatSceneID) >= 0.5
IF NOT IS_AUDIO_SCENE_ACTIVE("MAG_2_SCUBA_DIVE")
START_AUDIO_SCENE("MAG_2_SCUBA_DIVE")
bAudioScene_TrevDive = TRUE
ENDIF
iExitBoatStage++
ENDIF
ENDIF
BREAK
CASE 4
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBoatSceneID)
IF GET_SYNCHRONIZED_SCENE_PHASE(iBoatSceneID) >= 0.8
// interp back to gameplay
//STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP(FALSE)
RENDER_SCRIPT_CAMS(FALSE, TRUE, DEFAULT_INTERP_TO_FROM_GAME)
//RENDER_SCRIPT_CAMS(FALSE, FALSE)
//SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
IF DOES_CAM_EXIST(ciUnderwaterCam)
DESTROY_CAM(ciUnderwaterCam)
ENDIF
iExitBoatStage++
ENDIF
ENDIF
BREAK
CASE 5
IF IS_SYNCHRONIZED_SCENE_RUNNING(iBoatSceneID)
IF GET_SYNCHRONIZED_SCENE_PHASE(iBoatSceneID) >= 0.99
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_PED_TASKS(PLAYER_PED_ID())
SEQUENCE_INDEX seq
OPEN_SEQUENCE_TASK(seq)
TASK_PLAY_ANIM(NULL, "SWIMMING@scuba", "dive_run", walk_BLEND_IN, walk_BLEND_OUT, 1000, AF_LOOPING | AF_NOT_INTERRUPTABLE | AF_FORCE_START)
TASK_FORCE_MOTION_STATE(null, enum_to_int(MS_diving_swim))
TASK_GO_STRAIGHT_TO_COORD(NULL, <<3159.7, -371.8, -13.0>>, PEDMOVE_RUN, -1)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seq)
CLEAR_SEQUENCE_TASK(seq)
SETTIMERA(0)
CLEANUP_ANIM_ASSET("missheistchem2", bAnimRequest_Dive)
CLEANUP_ANIM_ASSET("SWIMMING@scuba", bAnimRequest_Swim)
iExitBoatStage++
ENDIF
ENDIF
ENDIF
BREAK
CASE 6
IF TIMERA() > 3500
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_PED_TASKS(PLAYER_PED_ID())
iExitBoatStage++
ENDIF
ENDIF
BREAK
CASE 7
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND NOT IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_SCUBA_DIVE")
STOP_AUDIO_SCENE("MAG_2_SCUBA_DIVE")
bAudioScene_TrevDive = FALSE
ENDIF
iExitBoatStage = 0
ENDIF
BREAK
ENDSWITCH
IF iExitBoatStage > 2
AND iExitBoatStage < 5
HIDE_HUD_AND_RADAR_THIS_FRAME()
ENDIF
ENDPROC
PROC SET_MAGDEMO_SCENE()
// IMPORTANT
// These need to be in sync with the scene setup in PRIVATE_SetClockTimeForSwitchScene()
SWITCH eMDStage
CASE MD_STAGE_CREATE_INITIAL_SCENE
CASE MD_STAGE_FRANKLIN_BASEJUMP
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
UNLOAD_ALL_CLOUD_HATS()
SET_CLOCK_TIME(7, 0, 0)
g_bMagDemoBJStarted = TRUE
BREAK
CASE MD_STAGE_TREVOR_DIVING
SET_WEATHER_TYPE_NOW_PERSIST("SMOG")
UNLOAD_ALL_CLOUD_HATS()
SET_CLOCK_TIME(18, 0, 0)
BREAK
CASE MD_STAGE_MICHAEL_WALK_AROUND_CITY
SET_WEATHER_TYPE_NOW_PERSIST("SMOG")
UNLOAD_ALL_CLOUD_HATS()
SET_CLOCK_TIME(22, 0, 0)
BREAK
CASE MD_STAGE_FRA2
SET_WEATHER_TYPE_NOW_PERSIST("SMOG")
UNLOAD_ALL_CLOUD_HATS()
IF g_iMagDemoVariation = 1
SET_CLOCK_TIME(22, 0, 0)
ELSE
SET_CLOCK_TIME(18, 0, 0)
ENDIF
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_FRANKLIN_BASEJUMP PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_FRANKLIN_BASEJUMP)") BREAK
CASE MD_STAGE_MICHAEL_WALK_AROUND_CITY PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_MICHAEL_WALK_AROUND_CITY)") BREAK
CASE MD_STAGE_TREVOR_DIVING PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_TREVOR_DIVING)") BREAK
CASE MD_STAGE_FRA2 PRINTLN("MAGDEMO: SET_MD_STAGE(MD_STAGE_FRA2)") 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
iJSkipStage = 0
// Set the new Z-Skip stage
IF eStage = MD_STAGE_CREATE_INITIAL_SCENE
OR eStage = MD_STAGE_FRANKLIN_BASEJUMP
sZSkipData.iCurrentStage = 0 // "Franklin in helicopter"
ELIF eStage = MD_STAGE_TREVOR_DIVING
sZSkipData.iCurrentStage = 1 // "Trevor diving"
ELIF eStage = MD_STAGE_MICHAEL_WALK_AROUND_CITY
sZSkipData.iCurrentStage = 2 // "Michael walking around city"
ELIF eStage = MD_STAGE_FRA2
sZSkipData.iCurrentStage = 3 // "FRA2"
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
bReplayFRA2 = FALSE
g_bMagDemoBJReady = FALSE
g_bMagDemoBJStarted = FALSE
g_bMagDemoREPapDone = 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_savedGlobals.sRandomEventData.iREVariationComplete[RE_PAPARAZZI] = 0
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_ALLOW_RANDOM_EVENTS, TRUE)
// 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, FALSE)
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE)
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, FALSE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, FALSE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, TRUE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, FALSE)
// Update all player stats
SETUP_DEFAULT_PLAYER_STATS()
UPDATE_ALL_PLAYER_STAT_SETTINGS(GET_CURRENT_PLAYER_PED_ENUM())
REACTIVATE_ALL_OBJECT_BRAINS_THAT_ARE_WAITING_TILL_OUT_OF_RANGE()
REACTIVATE_ALL_WORLD_BRAINS_THAT_ARE_WAITING_TILL_OUT_OF_RANGE()
CLEAR_AUDIO_SCENES()
SET_DEBUG_CAM_ACTIVE(FALSE)
SET_RANDOM_TRAINS(FALSE) //740410
SCRIPT_OVERRIDES_WIND_TYPES(FALSE, "", "")
BYPASS_CELLPHONE_CAMERA_DEFAULT_SAVE_ROUTINE(TRUE)
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
FORCE_CLEANUP(FORCE_CLEANUP_FLAG_MAGDEMO)
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDPROC
PROC DO_STAGE_CREATE_INITIAL_SCENE()
// Keep screen faded out until we display prompt
IF iControl < 6
IF NOT IS_SCREEN_FADED_OUT()
IF NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(2500)
ENDIF
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("MISSION_FAILED_SCENE")
START_AUDIO_SCENE("MISSION_FAILED_SCENE")
ENDIF
ENDIF
SWITCH iControl
CASE 0
IF IS_SCREEN_FADED_OUT()
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)
START_AUDIO_SCENE("MISSION_FAILED_SCENE")
CLEAR_AREA(<<-1368.1553, 4299.1650, 1.4856>>, 250.0, TRUE, FALSE)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1368.1553, 4299.1650, 1.4856>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 61.0253)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
VECTOR vDir
vDir = NORMALISE_VECTOR(GET_OFFSET_FROM_COORD_AND_HEADING_IN_WORLD_COORDS(<<-1368.1553, 4299.1650, 1.4856>>, 61.0253, <<0,1,0>>) - <<-1368.1553, 4299.1650, 1.4856>>)
NEW_LOAD_SCENE_START(<<-1368.1553, 4299.1650, 1.4856>>, vDir, 1800.0)
SETTIMERA(0)
iControl++
ENDIF
ENDIF
BREAK
CASE 1
IF IS_NEW_LOAD_SCENE_ACTIVE()
IF IS_NEW_LOAD_SCENE_LOADED()
OR TIMERA() > 20000
NEW_LOAD_SCENE_STOP()
iControl++
ENDIF
ELSE
iControl++
ENDIF
BREAK
CASE 2
SET_INITIAL_MAGDEMO_GAME_STATE()
iControl++
BREAK
CASE 3
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND SET_CURRENT_SELECTOR_PED(SELECTOR_PED_FRANKLIN, TRUE)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
SET_PED_DEFAULT_COMPONENT_VARIATION(PLAYER_PED_ID())
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_TORSO, 11, 2)
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_FEET, 11, 0)
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_LEG, 8, 0) //#1271807
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL, 14, 0)
CLEAR_ALL_PED_PROPS(PLAYER_PED_ID())
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)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
iControl++
ENDIF
BREAK
CASE 4
REQUEST_SCRIPT("bj")
IF HAS_SCRIPT_LOADED("bj")
IF REQUEST_MISSION_LAUNCH(missionCandidateID, MCTID_MUST_LAUNCH, MISSION_TYPE_MINIGAME, TRUE) = MCRET_ACCEPTED
BJ_LAUNCHER_ARGS bjLauncherArgs
g_savedGlobals.sBasejumpData.iLaunchRank = 10 // The 1K
START_NEW_SCRIPT_WITH_ARGS("bj", bjLauncherArgs, SIZE_OF(bjLauncherArgs), MISSION_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED("bj")
iControl++
ENDIF
ENDIF
BREAK
CASE 5
// Wait for basejumping script to give us the green light
IF g_bMagDemoBJReady
iControl++
ENDIF
BREAK
CASE 6
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: Playing sound Helicopter_Wind")
iWindSound = GET_SOUND_ID()
PLAY_SOUND_FRONTEND(iWindSound, "Helicopter_Wind", "BASEJUMPS_SOUNDS")
SET_MD_STAGE(MD_STAGE_FRANKLIN_BASEJUMP)
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC
PROC DO_STAGE_STAGE_FRANKLIN_BASEJUMP()
// Add park ranger to the mix group when it's available
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF NOT DOES_ENTITY_EXIST(viRanger)
VEHICLE_INDEX nearbyVehs[5]
INT iNearbyVehs = GET_PED_NEARBY_VEHICLES(PLAYER_PED_ID(), nearbyVehs)
INT iVeh
REPEAT iNearbyVehs iVeh
IF DOES_ENTITY_EXIST(nearbyVehs[iVeh])
AND IS_VEHICLE_DRIVEABLE(nearbyVehs[iVeh])
AND GET_ENTITY_MODEL(nearbyVehs[iVeh]) = PRANGER
ADD_ENTITY_TO_AUDIO_MIX_GROUP(nearbyVehs[iVeh], "MAG_2_RANGER_CAR_GROUP")
viRanger = nearbyVehs[iVeh]
PRINTLN("MAGDEMO: viRanger added to MAG_2_RANGER_CAR_GROUP (GET_PED_NEARBY_VEHICLES)")
ENDIF
ENDREPEAT
ENDIF
IF NOT DOES_ENTITY_EXIST(viRanger)
VEHICLE_INDEX nearbyVeh
nearbyVeh = GET_CLOSEST_VEHICLE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 100.0, PRANGER, VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_BOATS_ONLY)
IF DOES_ENTITY_EXIST(nearbyVeh)
AND IS_VEHICLE_DRIVEABLE(nearbyVeh)
AND GET_ENTITY_MODEL(nearbyVeh) = PRANGER
ADD_ENTITY_TO_AUDIO_MIX_GROUP(nearbyVeh, "MAG_2_RANGER_CAR_GROUP")
viRanger = nearbyVeh
PRINTLN("MAGDEMO: viRanger added to MAG_2_RANGER_CAR_GROUP (GET_CLOSEST_VEHICLE)")
ENDIF
ENDIF
ENDIF
// Cleanup wind sound when we jump
IF iWindSound != -1
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_Y)
PRINTLN("MAGDEMO: Stopping sound Helicopter_Wind")
STOP_SOUND(iWindSound)
iWindSound = -1
ENDIF
ENDIF
SWITCH iControl
CASE 0
// Set up - TODO
// 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)
REQUEST_VEHICLE_RECORDING(2, "MAGDEMOTITAN")
LOAD_MODEL_ASSET(CARGOPLANE, bModelRequest_Cargo)
LOAD_MODEL_ASSET(S_M_M_PILOT_01, bModelRequest_Pilot)
iControl++
BREAK
CASE 1
IF HAS_VEHICLE_RECORDING_BEEN_LOADED(2, "MAGDEMOTITAN")
AND HAS_MODEL_LOADED(CARGOPLANE)
AND HAS_MODEL_LOADED(S_M_M_PILOT_01)
iControl++
ENDIF
BREAK
CASE 2
IF IS_PED_IN_PARACHUTE_FREE_FALL(PLAYER_PED_ID())
viBaseJumpTitan = CREATE_VEHICLE(CARGOPLANE, GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(2, 0.0, "MAGDEMOTITAN"))
piBaseJumpTitanPilot = CREATE_PED_INSIDE_VEHICLE(viBaseJumpTitan, PEDTYPE_MISSION, S_M_M_PILOT_01)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(piBaseJumpTitanPilot, TRUE)
START_PLAYBACK_RECORDED_VEHICLE(viBaseJumpTitan, 2, "MAGDEMOTITAN")
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(viBaseJumpTitan, 26000.0)
SET_ENTITY_LOD_DIST(viBaseJumpTitan, 4000)
SET_VEHICLE_LOD_MULTIPLIER(viBaseJumpTitan, 100.0)
SET_VEHICLE_ENGINE_ON(viBaseJumpTitan, TRUE, TRUE)
// blipTitanPlane = CREATE_BLIP_FOR_VEHICLE(viBaseJumpTitan, FALSE, TRUE)
iControl++
ENDIF
BREAK
CASE 3
// Wait for the basejump script to end
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("bj")) = 0
Mission_Over(missionCandidateID)
missionCandidateID = NO_CANDIDATE_ID
iControl++
ENDIF
BREAK
CASE 4
// Wait for player to switch to Michael
IF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_TREVOR)
AND NOT IS_PLAYER_PED_SWITCH_IN_PROGRESS()
// IF DOES_BLIP_EXIST(blipTitanPlane)
// REMOVE_BLIP(blipTitanPlane)
// ENDIF
IF DOES_ENTITY_EXIST(viBaseJumpTitan)
DELETE_VEHICLE(viBaseJumpTitan)
ENDIF
IF DOES_ENTITY_EXIST(piBaseJumpTitanPilot)
DELETE_PED(piBaseJumpTitanPilot)
ENDIF
REMOVE_VEHICLE_RECORDING(2, "MAGDEMOTITAN")
CLEANUP_MODEL_ASSET(CARGOPLANE, bModelRequest_Cargo)
CLEANUP_MODEL_ASSET(S_M_M_PILOT_01, bModelRequest_Pilot)
CLEAR_HINT_CAM()
SET_MD_STAGE(MD_STAGE_TREVOR_DIVING)
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
IF iControl = 3
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-1368.1553, 4299.1650, 1.4856>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 61.0253)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
ELIF iControl = 4
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_TREVOR) //, PR_TYPE_AMBIENT)
ENDIF
ENDIF
#ENDIF
ENDPROC
VECTOR vBlipDiveLocation = <<3096.9629, -401.3707, 0.0>>
//VECTOR vBlipWreckLocation = <<3181.4639, -345.3424, -31.1768>>
BOOL bBoatBlipCreated
BOOL bSharksSpotted = FALSE
PROC DO_STAGE_TREVOR_DIVING()
// Blip the boat then the dive location
IF NOT DOES_BLIP_EXIST(blipBoat)
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
AND NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
AND NOT bBoatBlipCreated
PED_VEH_DATA_STRUCT sVehData
VECTOR vTemp
FLOAT fTemp
IF GET_PLAYER_VEH_POSITION_FOR_SCENE(CHAR_TREVOR, PR_SCENE_T_NAKED_ISLAND, sVehData, vTemp, fTemp, vTemp, fTemp)
VEHICLE_INDEX nearbyVehs[5]
INT iNearbyVehs = GET_PED_NEARBY_VEHICLES(PLAYER_PED_ID(), nearbyVehs)
INT iVeh
REPEAT iNearbyVehs iVeh
IF DOES_ENTITY_EXIST(nearbyVehs[iVeh])
AND IS_VEHICLE_DRIVEABLE(nearbyVehs[iVeh])
AND GET_ENTITY_MODEL(nearbyVehs[iVeh]) = sVehData.model
blipBoat = CREATE_BLIP_FOR_VEHICLE(nearbyVehs[iVeh], FALSE, FALSE)
bBoatBlipCreated = TRUE
SET_VEHICLE_RADIO_ENABLED(nearbyVehs[iVeh], FALSE)
SET_VEH_RADIO_STATION(nearbyVehs[iVeh], "RADIO_06_COUNTRY")
SET_CUSTOM_RADIO_TRACK_LIST("RADIO_06_COUNTRY", "MAGDEMO2_RADIO_DINGHY", TRUE)
iVeh = iNearbyVehs+1//Bail
ENDIF
ENDREPEAT
ENDIF
ELSE
IF IS_PED_INJURED(PLAYER_PED_ID())
OR IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF NOT IS_AUDIO_SCENE_ACTIVE("MAG_2_DRIVE_DINGHY")
START_AUDIO_SCENE("MAG_2_DRIVE_DINGHY")
bAudioScene_TrevBoat = TRUE
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MAG_2_WAKE_UP")
STOP_AUDIO_SCENE("MAG_2_WAKE_UP")
bAudioScene_TrevWake = FALSE
ENDIF
IF DOES_BLIP_EXIST(blipBoat)
REMOVE_BLIP(blipBoat)
VEHICLE_INDEX vehID = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(vehID)
AND IS_VEHICLE_DRIVEABLE(vehID)
SET_VEHICLE_RADIO_ENABLED(vehID, TRUE)
ENDIF
blipWreckDiveLocation = CREATE_BLIP_FOR_COORD(vBlipDiveLocation)
SET_BLIP_ROUTE(blipWreckDiveLocation, FALSE)
ENDIF
ENDIF
ENDIF
// Blip the sharks
IF eMDStage = MD_STAGE_TREVOR_DIVING
AND NOT IS_PLAYER_SWITCH_IN_PROGRESS()
IF NOT bRelGroupSetup
TEXT_LABEL_15 sRelGroup
sRelGroup = "SHARKPET"
ADD_RELATIONSHIP_GROUP(sRelGroup, sharkGroup)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, sharkGroup)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, sharkGroup, RELGROUPHASH_PLAYER)
bRelGroupSetup = TRUE
ENDIF
// Make all sharks friendly
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
PED_INDEX nearbyPeds[10]
INT iNearbyPeds = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), nearbyPeds)
INT iPed
REPEAT iNearbyPeds iPed
IF DOES_ENTITY_EXIST(nearbyPeds[iPed])
AND NOT IS_PED_INJURED(nearbyPeds[iPed])
IF GET_ENTITY_MODEL(nearbyPeds[iPed]) = A_C_SHARKTIGER
AND GET_PED_RELATIONSHIP_GROUP_HASH(nearbyPeds[iPed]) != sharkGroup
AND IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
//AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), nearbyPeds[iPed]) < 150.0
PRINTLN("MAGDEMO: Processing shark, ped_index=", NATIVE_TO_INT(nearbyPeds[iPed]))
SET_PED_RELATIONSHIP_GROUP_HASH(nearbyPeds[iPed], sharkGroup)
IF iBlippedSharks < COUNT_OF(blipSharks)-1
blipSharks[iBlippedSharks] = CREATE_BLIP_FOR_PED(nearbyPeds[iPed], FALSE)
SET_BLIP_ROUTE(blipSharks[iBlippedSharks], FALSE)
iBlippedSharks++
ENDIF
// IF DOES_BLIP_EXIST(blipSharkLocation)
// REMOVE_BLIP(blipSharkLocation)
// ENDIF
IF DOES_BLIP_EXIST(blipDiverPed)
REMOVE_BLIP(blipDiverPed)
ENDIF
ENDIF
IF bSharksSpotted = FALSE
IF IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), nearbyPeds[iPed]) < 30.0
IF GET_ENTITY_MODEL(nearbyPeds[iPed]) = A_C_SHARKTIGER
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(PLAYER_PED_ID(), "DROWNING","WAVELOAD_PAIN_TREVOR", SPEECH_PARAMS_FORCE_FRONTEND)
bSharksSpotted = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDREPEAT
ENDIF
ELSE
IF iBlippedSharks > 0
INT iBlip
REPEAT COUNT_OF(blipSharks) iBlip
IF DOES_BLIP_EXIST(blipSharks[iBlip])
REMOVE_BLIP(blipSharks[iBlip])
ENDIF
ENDREPEAT
iBlippedSharks = 0
ENDIF
ENDIF
// Manage music
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND REQUEST_SCRIPT_AUDIO_BANK("Underwater")
IF IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
AND NOT IS_PLAYER_PED_SWITCH_IN_PROGRESS()
IF NOT bUnderwaterMusic
TRIGGER_MUSIC_EVENT("MG2_DIVE")
iSoundID_Breathing = GET_SOUND_ID()
PLAY_SOUND_FROM_ENTITY(iSoundID_Breathing, "UW_Rebreather", PLAYER_PED_ID())
bUnderwaterMusic = TRUE
ENDIF
ELSE
IF bUnderwaterMusic
IF NOT HAS_SOUND_FINISHED(iSoundID_Breathing)
STOP_SOUND(iSoundID_Breathing)
ENDIF
TRIGGER_MUSIC_EVENT("MG2_STOP")
bUnderwaterMusic = FALSE
ENDIF
ENDIF
ENDIF
// Hold the end of the switch spline
IF IS_PLAYER_PED_SWITCH_IN_PROGRESS()
IF bTrevorScubaOutfitPreloaded
RELEASE_PED_PRELOAD_PROP_DATA(PLAYER_PED_ID())
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
bTrevorScubaOutfitPreloaded = FALSE
ENDIF
ENDIF
VECTOR vStartPosition
SWITCH iControl
CASE 0
IF NOT DOES_BLIP_EXIST(blipBoat)
bBoatBlipCreated = FALSE
ENDIF
SET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT, CAM_VIEW_MODE_THIRD_PERSON_MEDIUM)
CLEANUP_PREVIOUS_STAGE_ASSETS()
IF NOT IS_AUDIO_SCENE_ACTIVE("MAG_2_WAKE_UP")
START_AUDIO_SCENE("MAG_2_WAKE_UP")
bAudioScene_TrevWake = TRUE
ENDIF
// 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)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// We're now going to give the outfit in script
SET_AUTO_GIVE_SCUBA_GEAR_WHEN_EXIT_VEHICLE(PLAYER_ID(), FALSE)
ENDIF
SET_PED_MAX_TIME_UNDERWATER(PLAYER_PED_ID(), 1000000.0)
SET_PED_DIES_IN_WATER(PLAYER_PED_ID(), FALSE)
SET_ENABLE_SCUBA(PLAYER_PED_ID(), TRUE)
//Request assets
REQUEST_WAYPOINT_RECORDING("MAGDEMODIVE2")
REQUEST_WAYPOINT_RECORDING("MAGDEMODIVE3")
LOAD_MODEL_ASSET(IG_STEVEHAINS, bModelRequest_Steve)
REQUEST_SCRIPT_AUDIO_BANK("Underwater")
bSharksSpotted = FALSE
iControl++
BREAK
CASE 1
//Wait for assets to load
IF GET_IS_WAYPOINT_RECORDING_LOADED("MAGDEMODIVE3")
AND GET_IS_WAYPOINT_RECORDING_LOADED("MAGDEMODIVE2")
AND HAS_MODEL_LOADED(IG_STEVEHAINS)
iControl++
ENDIF
BREAK
CASE 2
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vBlipDiveLocation, <<30.0, 30.0, 30.0>>)
AND IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
IF DOES_BLIP_EXIST(blipWreckDiveLocation)
REMOVE_BLIP(blipWreckDiveLocation)
// blipWreckLocation = CREATE_BLIP_FOR_COORD(vBlipWreckLocation)
// SET_BLIP_COLOUR(blipWreckLocation, BLIP_COLOUR_GREEN)
ENDIF
ENDIF
//When trevor gets close to the boatwreck spawn the diver.
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<3158.247803,-222.377258,-51.817005>>, <<3197.752197,-433.242889,-3.360249>>, 131.000000, FALSE, FALSE)
AND NOT IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
AND IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
AND NOT DOES_BLIP_EXIST(blipWreckDiveLocation)
// IF DOES_BLIP_EXIST(blipWreckLocation)
// REMOVE_BLIP(blipWreckLocation)
// ENDIF
WAYPOINT_RECORDING_GET_COORD("MAGDEMODIVE3", 7, vStartPosition)
piDiverPed = CREATE_PED(PEDTYPE_MISSION, IG_STEVEHAINS, vStartPosition)
WAYPOINT_RECORDING_GET_COORD("MAGDEMODIVE2", 0, vStartPosition)
piDiverPed2 = CREATE_PED(PEDTYPE_MISSION, IG_STEVEHAINS, vStartPosition)
blipDiverPed = CREATE_BLIP_FOR_PED(piDiverPed, FALSE)
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,2), 1, 0, 0) //(hair)
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,3), 2, 0, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,4), 1, 0, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,5), 0, 0, 0) //(hand)
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,6), 1, 0, 0) //(feet)
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,7), 0, 0, 0) //(teef)
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,8), 1, 0, 0) //(accs)
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,9), 1, 0, 0) //(task)
SET_PED_COMPONENT_VARIATION(piDiverPed, INT_TO_ENUM(PED_COMPONENT,10), 0, 0, 0) //(decl)
SET_PED_PROP_INDEX(piDiverPed, INT_TO_ENUM(PED_PROP_POSITION,1), 1, 0)
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,2), 1, 0, 0) //(hair)
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,3), 2, 0, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,4), 1, 0, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,5), 0, 0, 0) //(hand)
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,6), 1, 0, 0) //(feet)
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,7), 0, 0, 0) //(teef)
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,8), 1, 0, 0) //(accs)
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,9), 1, 0, 0) //(task)
SET_PED_COMPONENT_VARIATION(piDiverPed2, INT_TO_ENUM(PED_COMPONENT,10), 0, 0, 0) //(decl)
SET_PED_PROP_INDEX(piDiverPed2, INT_TO_ENUM(PED_PROP_POSITION,1), 1, 0)
SET_PED_MAX_TIME_UNDERWATER(piDiverPed, 1000000.0)
SET_PED_DIES_IN_WATER(piDiverPed, FALSE)
SET_ENABLE_SCUBA(piDiverPed, TRUE)
SET_PED_STEERS_AROUND_PEDS(piDiverPed, FALSE)
SET_PED_NAME_DEBUG(piDiverPed, "piDiverPed")
TASK_FOLLOW_WAYPOINT_RECORDING(piDiverPed, "MAGDEMODIVE3", 7, EWAYPOINT_USE_TIGHTER_TURN_SETTINGS)
SET_PED_MAX_TIME_UNDERWATER(piDiverPed2, 1000000.0)
SET_PED_DIES_IN_WATER(piDiverPed2, FALSE)
SET_ENABLE_SCUBA(piDiverPed2, TRUE)
SET_PED_STEERS_AROUND_PEDS(piDiverPed2, FALSE)
SET_PED_STEERS_AROUND_PEDS(piDiverPed2, FALSE)
SET_PED_NAME_DEBUG(piDiverPed2, "piDiverPed2")
OPEN_SEQUENCE_TASK(seqDiverDelay)
TASK_PAUSE(NULL, 500)
TASK_FOLLOW_WAYPOINT_RECORDING(NULL, "MAGDEMODIVE2", 0, EWAYPOINT_USE_TIGHTER_TURN_SETTINGS)
CLOSE_SEQUENCE_TASK(seqDiverDelay)
TASK_PERFORM_SEQUENCE(piDiverPed2, seqDiverDelay)
CLEAR_SEQUENCE_TASK(seqDiverDelay)
iControl++
ENDIF
BREAK
CASE 3
RESET_PLAYER_STAMINA(PLAYER_ID())
IF IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), <<3161.642578,-298.652344,-15.723236>>, <<3096.343994,-167.582458,-29.656219>>, 46.750000)
IF iBlippedSharks = 0
// blipSharkLocation = CREATE_BLIP_FOR_COORD(<<3114.1111, -190.8658, -31.0156>>)
// SET_BLIP_COLOUR(blipSharkLocation, BLIP_COLOUR_GREEN)
IF DOES_BLIP_EXIST(blipDiverPed)
REMOVE_BLIP(blipDiverPed)
ENDIF
ENDIF
iControl++
ENDIF
BREAK
CASE 4
RESET_PLAYER_STAMINA(PLAYER_ID())
//Cleanup
IF NOT IS_PED_SWIMMING_UNDER_WATER(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(piDiverPed)
DELETE_PED(piDiverPed)
ENDIF
IF DOES_ENTITY_EXIST(piDiverPed2)
DELETE_PED(piDiverPed2)
ENDIF
IF DOES_BLIP_EXIST(blipDiverPed)
REMOVE_BLIP(blipDiverPed)
ENDIF
// IF DOES_BLIP_EXIST(blipWreckLocation)
// REMOVE_BLIP(blipWreckLocation)
// ENDIF
IF DOES_BLIP_EXIST(blipBoat)
REMOVE_BLIP(blipBoat)
ENDIF
// IF DOES_BLIP_EXIST(blipSharkLocation)
// REMOVE_BLIP(blipSharkLocation)
// ENDIF
CLEANUP_MODEL_ASSET(IG_STEVEHAINS, bModelRequest_Steve)
iControl++
ENDIF
BREAK
CASE 5
// nothing to do.
BREAK
ENDSWITCH
// Wait for player to switch to Michael
IF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_MICHAEL)
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
CLEAR_HINT_CAM()
SET_MD_STAGE(MD_STAGE_MICHAEL_WALK_AROUND_CITY)
ENDIF
#IF IS_DEBUG_BUILD
VECTOR vWarpCoords[3]
FLOAT fHeading[3]
// Next to boat
vWarpCoords[0] = <<2793.1936, -1433.4767, -0.5368>>
fHeading[0] = 155.1430
// Above sunken ship
vWarpCoords[1] = <<3268.8042, -437.3923, 5.5>>
fHeading[1] = 353.9825
// In water
vWarpCoords[2] = <<3220.5657, -357.8888, -36.1978>>
fHeading[2] = 253.1632
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF iJSkipStage = 0
IF IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
iJSkipStage++
ENDIF
ELIF iJSkipStage = 1
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vWarpCoords[iJSkipStage], FALSE) < 10.0
OR NOT IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
iJSkipStage++
ENDIF
ELIF iJSkipStage = 2
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vWarpCoords[iJSkipStage]) < 10.0
iJSkipStage++
ENDIF
ENDIF
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
IF iJSkipStage = 0
VEHICLE_INDEX tempVeh = GET_CLOSEST_VEHICLE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 100.0, DUMMY_MODEL_FOR_SCRIPT, VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_BOATS_ONLY)
IF DOES_ENTITY_EXIST(tempVeh)
AND IS_VEHICLE_DRIVEABLE(tempVeh)
AND IS_THIS_MODEL_A_BOAT(GET_ENTITY_MODEL(tempVeh))
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), tempVeh, VS_DRIVER)
ENDIF
ELIF iJSkipStage = 1
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
VEHICLE_INDEX tempVeh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(tempVeh)
AND IS_VEHICLE_DRIVEABLE(tempVeh)
SET_ENTITY_COORDS(tempVeh, vWarpCoords[iJSkipStage], TRUE, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(tempVeh)
SET_ENTITY_HEADING(tempVeh, fHeading[iJSkipStage])
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
ENDIF
ENDIF
ELIF iJSkipStage = 2
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), vWarpCoords[iJSkipStage])
SET_ENTITY_HEADING(PLAYER_PED_ID(), fHeading[iJSkipStage])
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
ELSE
iControl = 5
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_MICHAEL) //, PR_TYPE_AMBIENT)
ENDIF
ENDIF
#ENDIF
ENDPROC
//BLIP_INDEX blipClosestCar
PROC DO_STAGE_MICHAEL_WALK_AROUND_CITY()
// Add park ranger to the mix group when it's available
IF bTriggerSpaceRangerDialogue
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
PED_INDEX nearbyPeds[10]
INT iNearbyPeds = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), nearbyPeds)
INT iPed
REPEAT iNearbyPeds iPed
IF DOES_ENTITY_EXIST(nearbyPeds[iPed])
AND NOT IS_PED_INJURED(nearbyPeds[iPed])
IF GET_ENTITY_MODEL(nearbyPeds[iPed]) = U_M_Y_RSRanger_01
AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), nearbyPeds[iPed]) < 5.0
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(nearbyPeds[iPed], "PBSH_AXAA", "SPACERANGER", "SPEECH_PARAMS_FORCE")
bTriggerSpaceRangerDialogue = FALSE
iPed = iNearbyPeds+1// Bail
ENDIF
ENDIF
ENDREPEAT
ENDIF
SWITCH iControl
CASE 0
SET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT, CAM_VIEW_MODE_THIRD_PERSON_NEAR)
CLEANUP_PREVIOUS_STAGE_ASSETS()
bSafeToProgress = FALSE
// Set characters we can switch to
IF g_iMagDemoVariation = 1
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)
ELSE
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)
INCRAMENT_Pause_Outro_Count()
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("MAG_2_WALK_THROUGH_VINEWOOD")
START_AUDIO_SCENE("MAG_2_WALK_THROUGH_VINEWOOD")
bAudioScene_MikeWalk = TRUE
ENDIF
// Set up - TODO
bTriggerSpaceRangerDialogue = TRUE
REQUEST_MODEL(SUPERD)
REQUEST_MODEL(VOLTIC)
LOAD_MODEL_ASSET(G_M_Y_BALLASOUT_01, bModelRequest_Driver)
iControl++
BREAK
CASE 1
IF HAS_MODEL_LOADED(SUPERD)
AND HAS_MODEL_LOADED(VOLTIC)
AND LOAD_MODEL_ASSET(G_M_Y_BALLASOUT_01, bModelRequest_Driver)
IF NOT DOES_ENTITY_EXIST(viSuperD)
viSuperD = CREATE_VEHICLE(SUPERD, <<374.5235, 159.3893, 102.0563>>, 340.6834)
SET_VEHICLE_ENGINE_ON(viSuperD,true,true)
piClosestCarDriver = CREATE_PED_INSIDE_VEHICLE(viSuperD, PEDTYPE_MISSION, G_M_Y_BALLASOUT_01)
viClosestCar = viSuperD
viVoltic = CREATE_VEHICLE(VOLTIC, <<387.8163, 210.5225, 102.0972>>, 161.3396)
SET_VEHICLE_ENGINE_ON(viVoltic,true,true)
piClosestCarDriver2 = CREATE_PED_INSIDE_VEHICLE(viVoltic, PEDTYPE_MISSION, G_M_Y_BALLASOUT_01)
SET_VEHICLE_RADIO_ENABLED(viVoltic, TRUE)
SET_VEHICLE_RADIO_LOUD(viVoltic, TRUE)
//SET_VEH_RADIO_STATION(viClosestCar, "RADIO_03_HIPHOP_NEW")
TASK_VEHICLE_DRIVE_TO_COORD(piClosestCarDriver2, viVoltic, <<484.2128, 87.5613, 96.0259>>, 7.5, DRIVINGSTYLE_NORMAL, SUPERD, DRIVINGMODE_STOPFORCARS, 2.0, 5.0)
SETTIMERA(0)
CLEANUP_MODEL_ASSET(G_M_Y_BALLASOUT_01, bModelRequest_Driver)
ENDIF
IF NOT IS_PLAYER_SWITCH_IN_PROGRESS()
AND NOT Is_Player_Timetable_Scene_In_Progress()
IF NOT IS_ENTITY_DEAD(viSuperD)
SET_VEHICLE_RADIO_ENABLED(viSuperD, TRUE)
SET_VEHICLE_RADIO_LOUD(viSuperD, TRUE)
//SET_VEH_RADIO_STATION(viClosestCar, "RADIO_03_HIPHOP_NEW")
TASK_VEHICLE_DRIVE_WANDER(piClosestCarDriver, viSuperD, 7.0, DRIVINGMODE_STOPFORCARS)
SETTIMERA(0)
LOAD_MODEL_ASSET(PLAYER_ONE, bModelRequest_Franklin) //#1271792
iControl++
ENDIF
ENDIF
ENDIF
BREAK
CASE 2
IF DOES_ENTITY_EXIST(viClosestCar)
AND TIMERA() > 5000
AND viClosestCarPrev <> viClosestCar
AND (IS_VEHICLE_DRIVEABLE(viClosestCar) AND GET_IS_VEHICLE_ENGINE_RUNNING(viClosestCar))
AND GET_ENTITY_MODEL(viClosestCar) <> TAXI
SET_VEHICLE_RADIO_ENABLED(viClosestCar, TRUE)
SET_VEHICLE_RADIO_LOUD(viClosestCar, TRUE)
viClosestCarPrev = viClosestCar
SETTIMERA(0)
ELSE
//SET_VEHICLE_AS_NO_LONGER_NEEDED(viClosestCar)
//SET_PED_AS_NO_LONGER_NEEDED(piClosestCarDriver)
// REMOVE_BLIP(blipClosestCar)
viClosestCar = GET_CLOSEST_VEHICLE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 26.6, DUMMY_MODEL_FOR_SCRIPT, VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES)
// blipClosestCar= CREATE_BLIP_FOR_VEHICLE(viClosestCar)
ENDIF
//is what you want
//you can optionally control the station via SET_VEH_RADIO_STATION
//but SET_VEHICLE_RADIO_LOUD will ensure it gets a radio station, and will play it a little louder than normal
// Delete the voltic and superd when they get out of range
// -SUPERD
IF DOES_ENTITY_EXIST(viSuperD)
AND IS_VEHICLE_DRIVEABLE(viSuperD)
AND DOES_ENTITY_EXIST(piClosestCarDriver)
AND NOT IS_PED_INJURED(piClosestCarDriver)
AND IS_ENTITY_IN_ANGLED_AREA(viSuperD, <<391.999237,306.042023,101.397812>>, <<450.516998,285.500183,107.205986>>, 43.437500)
DELETE_PED(piClosestCarDriver)
DELETE_VEHICLE(viSuperD)
SET_MODEL_AS_NO_LONGER_NEEDED(SUPERD)
ENDIF
// -VOLTIC
IF DOES_ENTITY_EXIST(viVoltic)
AND IS_VEHICLE_DRIVEABLE(viVoltic)
AND DOES_ENTITY_EXIST(piClosestCarDriver2)
AND NOT IS_PED_INJURED(piClosestCarDriver2)
AND IS_ENTITY_IN_ANGLED_AREA(viVoltic, <<501.130402,107.262054,94.584984>>, <<485.152954,71.751945,102.145523>>, 36.250000)
DELETE_PED(piClosestCarDriver2)
DELETE_VEHICLE(viVoltic)
SET_MODEL_AS_NO_LONGER_NEEDED(VOLTIC)
ENDIF
CLEANUP_MODEL_ASSET(G_M_Y_BALLASOUT_01, bModelRequest_Driver)
// Wait for player to switch to Franklin
IF NOT bSafeToProgress
IF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_MICHAEL)
AND NOT IS_PLAYER_PED_SWITCH_IN_PROGRESS()
bSafeToProgress = TRUE
ENDIF
ELIF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_FRANKLIN)
OR IS_PLAYER_PED_SWITCH_IN_PROGRESS()
CLEAR_HINT_CAM()
SET_MD_STAGE(MD_STAGE_FRA2)
IF DOES_ENTITY_EXIST(piClosestCarDriver)
DELETE_PED(piClosestCarDriver)
ENDIF
IF DOES_ENTITY_EXIST(piClosestCarDriver2)
DELETE_PED(piClosestCarDriver2)
ENDIF
IF DOES_ENTITY_EXIST(viSuperD)
DELETE_VEHICLE(viSuperD)
SET_MODEL_AS_NO_LONGER_NEEDED(SUPERD)
ENDIF
IF DOES_ENTITY_EXIST(viVoltic)
DELETE_VEHICLE(viVoltic)
SET_MODEL_AS_NO_LONGER_NEEDED(VOLTIC)
ENDIF
CLEAR_HINT_CAM()
SET_MD_STAGE(MD_STAGE_FRA2)
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
VECTOR vWarpCoords[4]
FLOAT fHeading[4]
// Pamela Drake
vWarpCoords[0] = <<381.7144, 157.2653, 102.1663>>
fHeading[0] = 181.7842
// Vinewoord Blvrd
vWarpCoords[1] = <<358.4988, 160.7451, 102.0595>>
fHeading[1] = 72.3215
// Impotent Rage
vWarpCoords[2] = <<309.0139, 175.9244, 102.9660>>
fHeading[2] = 39.0201
// Celeb
vWarpCoords[3] = <<266.9224, 149.1344, 103.5237>>
fHeading[3] = 160.7408
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF (iJSkipStage < COUNT_OF(vWarpCoords))
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vWarpCoords[iJSkipStage]) < 10.0
iJSkipStage++
ENDIF
ENDIF
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
IF (iJSkipStage < COUNT_OF(vWarpCoords))
SET_ENTITY_COORDS(PLAYER_PED_ID(), vWarpCoords[iJSkipStage])
SET_ENTITY_HEADING(PLAYER_PED_ID(), fHeading[iJSkipStage])
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
ELIF g_bMagDemoREPapDone
iControl = 2
INCRAMENT_Pause_Outro_Count()
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_FRANKLIN) //, PR_TYPE_AMBIENT)
ENDIF
ENDIF
#ENDIF
ENDPROC
PROC DO_STAGE_FRA2()
SWITCH iControl
CASE 0
CLEANUP_PREVIOUS_STAGE_ASSETS()
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, TRUE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, TRUE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, TRUE)
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE)
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE)
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, TRUE)
iControl++
BREAK
CASE 1
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sMissionName)) = 0
REQUEST_SCRIPT(sMissionName)
IF HAS_SCRIPT_LOADED(sMissionName)
IF REQUEST_MISSION_LAUNCH(missionCandidateID, MCTID_MUST_LAUNCH, MISSION_TYPE_STORY, TRUE) = MCRET_ACCEPTED
g_bMagDemoFRA2Passed = FALSE
g_bMagDemoFRA2Ready = FALSE
START_NEW_SCRIPT(sMissionName, MISSION_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sMissionName)
iControl++
ENDIF
ENDIF
ELSE
iControl++
ENDIF
BREAK
CASE 2
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sMissionName)) = 0
bReplayFRA2 = (NOT g_bMagDemoFRA2Passed)
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
PROC DO_STAGE_FBI4()
SWITCH iControl
CASE 0
CLEANUP_PREVIOUS_STAGE_ASSETS()
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_M, TRUE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_F, TRUE)
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_PLAYER_PED_INTRODUCED_T, TRUE)
SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE)
SET_PLAYER_PED_AVAILABLE(CHAR_FRANKLIN, TRUE)
SET_PLAYER_PED_AVAILABLE(CHAR_TREVOR, TRUE)
// Set stored data for Trevor
SETUP_DEFAULT_PLAYER_VARIATIONS(CHAR_TREVOR)
g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_TREVOR].iDrawableVariation[PED_COMP_TORSO] = 0
g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_TREVOR].iDrawableVariation[PED_COMP_LEG] = 0
g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_TREVOR].iDrawableVariation[PED_COMP_FEET] = 0
g_sLastStoredPlayerPedClothes[CHAR_TREVOR] = g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_TREVOR]
bFBI4LoadSceneStart = TRUE
iNewLoadSceneStage = 0
iControl++
BREAK
CASE 1
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sMissionName)) = 0
REQUEST_SCRIPT(sMissionName)
IF HAS_SCRIPT_LOADED(sMissionName)
IF REQUEST_MISSION_LAUNCH(missionCandidateID, MCTID_MUST_LAUNCH, MISSION_TYPE_STORY, TRUE) = MCRET_ACCEPTED
g_bMagDemoFRA2Passed = FALSE
g_bMagDemoFRA2Ready = FALSE
START_NEW_SCRIPT(sMissionName, MISSION_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sMissionName)
iControl++
ENDIF
ENDIF
ELSE
iControl++
ENDIF
BREAK
CASE 2
IF bFBI4LoadSceneStart
IF iNewLoadSceneStage = 0
IF NOT IS_NEW_LOAD_SCENE_ACTIVE()
AND NOT IS_PLAYER_SWITCH_IN_PROGRESS()
PRINTLN("MAGDEMO: Starting new load scene for FBI4 [1]")
NEW_LOAD_SCENE_START_SPHERE(<<1376.7286, -2079.4268, 50.9983>>, 400.0)
iNewLoadSceneStage++
ENDIF
ELIF iNewLoadSceneStage = 1
IF IS_CUTSCENE_PLAYING()
iNewLoadSceneStage++
ENDIF
ELIF iNewLoadSceneStage = 2
IF NOT IS_CUTSCENE_PLAYING()
PRINTLN("MAGDEMO: Stopping new load scene for FBI4 [1]")
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
bFBI4LoadSceneStart = FALSE
ENDIF
ENDIF
ENDIF
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sMissionName)) = 0
bReplayFRA2 = (NOT g_bMagDemoFRA2Passed)
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())
RELEASE_PED_PRELOAD_PROP_DATA(PLAYER_PED_ID())
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
ENDIF
CLEAR_HINT_CAM()
missionCandidateID = NO_CANDIDATE_ID
eStoredModel = DUMMY_MODEL_FOR_SCRIPT
g_bMagDemoFBI2Retry = FALSE
g_bMagDemoFRA2Retry = FALSE
g_bMagdemoTakingOverSwitch = FALSE
g_bMagdemoDoTakeOverSwitch = FALSE
IF iWindSound != -1
PRINTLN("MAGDEMO: Stopping sound Helicopter_Wind")
STOP_SOUND(iWindSound)
iWindSound = -1
ENDIF
IF bRelGroupSetup
REMOVE_RELATIONSHIP_GROUP(sharkGroup)
bRelGroupSetup = FALSE
ENDIF
// 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
//g_bMagDemoActive = FALSE
REMOVE_NAVMESH_BLOCKING_OBJECT(iNavBlockID)
// 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
BYPASS_CELLPHONE_CAMERA_DEFAULT_SAVE_ROUTINE(FALSE)
TERMINATE_THIS_THREAD()
ENDIF
ENDPROC
PROC DO_STAGE_RESET()
IF bFBI4LoadSceneStart
PRINTLN("MAGDEMO: Stopping new load scene for FBI4 [1]")
IF IS_NEW_LOAD_SCENE_ACTIVE()
NEW_LOAD_SCENE_STOP()
ENDIF
bFBI4LoadSceneStart = FALSE
ENDIF
// Fade out and then delete all assets
IF NOT IS_SCREEN_FADED_OUT()
IF NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(2500)
START_AUDIO_SCENE("MISSION_FAILED_SCENE")
ENDIF
// Only process when player is alive
ELIF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEANUP_PREVIOUS_STAGE_ASSETS()
CLEANUP_SCRIPT(FALSE)
SET_MD_STAGE(MD_STAGE_CREATE_INITIAL_SCENE)
// Failed FRA2 so retry
IF bReplayFRA2
#IF IS_DEBUG_BUILD
OR (sZSkipData.bDoSkip AND (sZSkipData.iSelectedStage = 3) AND g_iMagDemoVariation = 0) // "FRA2"
#ENDIF
PRINTSTRING("test one")PRINTNL()
VECTOR vPlayerCoord, vPlayerCreateCoord, vLoadSceneCoord
FLOAT fPlayerCoord, fPlayerCreateCoord
MODEL_NAMES ePlayerVehModel
IF g_iMagDemoVariation = 1 //FBI4
vPlayerCoord = <<1376.7286, -2079.4268, 50.9983>>
fPlayerCoord = 15.5269
vLoadSceneCoord = vPlayerCoord + (<<-768.1193, 5323.7915, 75.8220>> - <<-766.7336, 5324.4829, 73.7515>>)
vPlayerCreateCoord = <<1381.4761, -2072.2507, 50.9983>>
fPlayerCreateCoord = 38.3348
ePlayerVehModel = TRASH
ELSE //FRANKLIN2
vPlayerCoord = <<-766.7336, 5324.4829, 73.7515>>
fPlayerCoord = 256.4759
vLoadSceneCoord = <<-768.1193, 5323.7915, 75.8220>>
vPlayerCreateCoord = <<-760.3937, 5322.8789, 73.3588>>
fPlayerCreateCoord = 261.4380
ePlayerVehModel = BUFFALO2
ENDIF
SET_INITIAL_MAGDEMO_GAME_STATE()
g_bMagDemoFRA2Retry = TRUE
// Set up the fra2 scene
// --------
// --------
// --------
// --------
// --------
// --------
WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_FRANKLIN, TRUE)
PRINTSTRING("test one.one - wait on creating franklin")PRINTNL()
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDWHILE
// Fade in and give control back
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_AREA(vPlayerCoord, 500.0, TRUE, TRUE)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), vPlayerCoord)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fPlayerCoord)
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P1_DEFAULT, FALSE)
ENDIF
NEW_LOAD_SCENE_START(vLoadSceneCoord, <<-6.0072, -0.0000, -96.6791>>, 500.0)
WHILE NOT IS_NEW_LOAD_SCENE_LOADED()
PRINTSTRING("test one.two - wait on loadscene [")PRINTVECTOR(vLoadSceneCoord)PRINTSTRING("]")PRINTNL()
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDWHILE
NEW_LOAD_SCENE_STOP()
IF (ePlayerVehModel = BUFFALO2)
VEHICLE_INDEX vehID
WHILE NOT CREATE_PLAYER_VEHICLE(vehID, CHAR_FRANKLIN, vPlayerCreateCoord, fPlayerCreateCoord, TRUE, VEHICLE_TYPE_CAR)
PRINTSTRING("test one.three = wait on creating vehicle")PRINTNL()
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDWHILE
IF DOES_ENTITY_EXIST(vehID)
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_VEHICLE_ON_GROUND_PROPERLY(vehID)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehID)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehID)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
ENDIF
ENDIF
REQUEST_SCRIPT(sMissionName)
WHILE NOT HAS_SCRIPT_LOADED(sMissionName)
PRINTSTRING("test one.four - wait on starting mission script")PRINTNL()
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDWHILE
WHILE REQUEST_MISSION_LAUNCH(missionCandidateID, MCTID_MUST_LAUNCH, MISSION_TYPE_STORY, TRUE) != MCRET_ACCEPTED
PRINTSTRING("test one.five - wait on registering mission")PRINTNL()
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDWHILE
g_bMagDemoFRA2Passed = FALSE
g_bMagDemoFRA2Ready = FALSE
START_NEW_SCRIPT(sMissionName, MISSION_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sMissionName)
// Wait for the mission script to give us to all clear
WHILE NOT g_bMagDemoFRA2Ready
PRINTSTRING("test one.six - wait on g_bMagDemoFRA2Ready")PRINTNL()
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDWHILE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
ENDIF
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_MD_STAGE(MD_STAGE_FRA2)
#IF IS_DEBUG_BUILD
sZSkipData.bDoSkip = FALSE
#ENDIF
PRINTSTRING("test two")PRINTNL()
// 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) // "Franklin basejumping scene"
PRINTSTRING("test three")PRINTNL()
// Let the initial scene set this one up
SET_MD_STAGE(MD_STAGE_CREATE_INITIAL_SCENE)
ELIF (sZSkipData.iSelectedStage = 1) // "Trevor diving"
PRINTSTRING("test five")PRINTNL()
WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_TREVOR, TRUE)
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDWHILE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PED_DEFAULT_COMPONENT_VARIATION(PLAYER_PED_ID())
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_TORSO, 16, 0)
SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_LEG, 22, 0)
CLEAR_ALL_PED_PROPS(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<2803.9402, -1441.6550, 0.2566>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 60.2669)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
ENDIF
SET_MD_STAGE(MD_STAGE_TREVOR_DIVING)
// Create the dead peds
g_eRecentlySelectedScene = PR_SCENE_T_NAKED_ISLAND
REQUEST_SCRIPT("player_scene_t_tie")
WHILE NOT HAS_SCRIPT_LOADED("player_scene_t_tie")
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDWHILE
START_NEW_SCRIPT("player_scene_t_tie", FRIEND_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED("player_scene_t_tie")
// Create the boat
PED_VEH_DATA_STRUCT sVehData
VECTOR vTemp
FLOAT fTemp
VEHICLE_INDEX tempVeh
IF GET_PLAYER_VEH_POSITION_FOR_SCENE(CHAR_TREVOR, PR_SCENE_T_NAKED_ISLAND, sVehData, vTemp, fTemp, vTemp, fTemp)
REQUEST_MODEL(sVehData.model)
WHILE NOT HAS_MODEL_LOADED(sVehData.model)
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDWHILE
tempVeh = CREATE_VEHICLE(sVehData.model,
<<2785.829,-1433.771,0.506>>, //<<2793.1936, -1433.4767, -0.5368>>,
60.1532, //155.1434,
FALSE, FALSE)
SET_VEHICLE_ON_GROUND_PROPERLY(tempVeh)
SET_VEHICLE_COLOURS(tempVeh, 0, 0)
SET_VEHICLE_RADIO_ENABLED(tempVeh, TRUE)
SET_VEH_RADIO_STATION(tempVeh, "RADIO_06_COUNTRY")
SET_VEHICLE_EXTRA_COLOURS(tempVeh, 0, 0)
SET_MODEL_AS_NO_LONGER_NEEDED(sVehData.model)
ENDIF
// Fade in and give control back
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// Make sure player gets the scuba gear
SET_AUTO_GIVE_SCUBA_GEAR_WHEN_EXIT_VEHICLE(PLAYER_ID(), TRUE)
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
IF DOES_ENTITY_EXIST(tempVeh)
SET_VEHICLE_AS_NO_LONGER_NEEDED(tempVeh)
ENDIF
PRINTSTRING("test six")PRINTNL()
ELIF (sZSkipData.iSelectedStage = 2) // "Michael walking around city"
OR (sZSkipData.iSelectedStage = 3 AND g_iMagDemoVariation = 1) // "FBI4"
PRINTSTRING("test four")PRINTNL()
WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_MICHAEL, TRUE)
WAIT(0)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
ENDWHILE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_BLACK_SUIT, FALSE)
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<389.0900, 178.8800, 102.1781>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 146.8972)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
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_MICHAEL_WALK_AROUND_CITY)
IF (sZSkipData.iSelectedStage = 3 AND g_iMagDemoVariation = 1) // "FBI4"
SET_MD_STAGE(MD_STAGE_FRA2)
INCRAMENT_Pause_Outro_Count()
MAKE_PLAYER_PED_SWITCH_REQUEST(CHAR_FRANKLIN) //, PR_TYPE_AMBIENT)
ENDIF
ENDIF
sZSkipData.bDoSkip = FALSE
#ENDIF
ENDIF
PRINTSTRING("test seven")PRINTNL()
SET_MAGDEMO_SCENE()
PRINTSTRING("test eight")PRINTNL()
ENDIF
ENDPROC
#IF IS_DEBUG_BUILD
INT iDebugStage
PROC SETUP_MAGDEMO_WIDGETS()
START_WIDGET_GROUP("MAGDEMO 2")
ADD_WIDGET_BOOL("Kill script", bKillScript)
ADD_WIDGET_INT_READ_ONLY("Stage", iDebugStage)
ADD_WIDGET_INT_READ_ONLY("Stage control", iControl)
ADD_WIDGET_BOOL("bAudioScene_MikeWalk", bAudioScene_MikeWalk)
ADD_WIDGET_BOOL("bAudioScene_TrevWake", bAudioScene_TrevWake)
ADD_WIDGET_BOOL("bAudioScene_TrevBoat", bAudioScene_TrevBoat)
ADD_WIDGET_BOOL("bAudioScene_TrevDive", bAudioScene_TrevDive)
ADD_WIDGET_BOOL("bAudioGroup_Ranger", bAudioGroup_Ranger)
ADD_WIDGET_BOOL("bAudioGroup_Tourbus", bAudioGroup_Tourbus)
STOP_WIDGET_GROUP()
sZSkipData.SkipMenuStruct[0].sTxtLabel = "Franklin base jumping"
sZSkipData.SkipMenuStruct[1].sTxtLabel = "Trevor diving"
sZSkipData.SkipMenuStruct[2].sTxtLabel = "Michael walking around city"
IF g_iMagDemoVariation = 1
sZSkipData.SkipMenuStruct[3].sTxtLabel = "FBI4"
ELSE
sZSkipData.SkipMenuStruct[3].sTxtLabel = "FRA2"
ENDIF
ENDPROC
PROC MAINTAIN_MAGDEMO_WIDGETS()
iDebugStage = ENUM_TO_INT(eMDStage)
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 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_TYPE(MISSION_TYPE_STORY)
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
IF LAUNCH_MISSION_STAGE_MENU(sZSkipData.SkipMenuStruct, sZSkipData.iSelectedStage, sZSkipData.iCurrentStage, FALSE, "MAGDEMO 2", FALSE)
sZSkipData.bDoSkip = TRUE
SET_MD_STAGE(MD_STAGE_RESET)
ENDIF
ENDIF
ENDPROC
#ENDIF
SCRIPT
/*
NOTES
-runscript=magdemo2
startup.sc checks if the magdemo2 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 2 SCRIPT")
PRINTLN("...variation=", g_iMagDemoVariation)
bAudioScene_MikeWalk = bAudioScene_MikeWalk
bAudioScene_TrevWake = bAudioScene_TrevWake
bAudioScene_TrevBoat = bAudioScene_TrevBoat
bAudioScene_TrevDive = bAudioScene_TrevDive
bAudioGroup_Ranger = bAudioGroup_Ranger
bAudioGroup_Tourbus = bAudioGroup_Tourbus
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
IF g_iMagDemoVariation = 1
sMissionName = "fbi4"
ELSE
sMissionName = "franklin2"
ENDIF
iNavBlockID = ADD_NAVMESH_BLOCKING_OBJECT( <<257.373, 154.617, 104.466>>, <<5.025, 2.9, 3.175>>, -0.351, FALSE )
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_SHARK, RELGROUPHASH_PLAYER)
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
////////////////////////////////////////////////////////////////
/// FRANKLIN BASE JUMPING
CASE MD_STAGE_FRANKLIN_BASEJUMP
DO_STAGE_STAGE_FRANKLIN_BASEJUMP()
BREAK
////////////////////////////////////////////////////////////////
/// TREVOR WAKES ON BEACH THEN GOES DIVING
CASE MD_STAGE_TREVOR_DIVING
DO_STAGE_TREVOR_DIVING()
BREAK
////////////////////////////////////////////////////////////////
/// MICHAEL EXITS RESTAURANT AND WALKS AROUND CITY
CASE MD_STAGE_MICHAEL_WALK_AROUND_CITY
DO_STAGE_MICHAEL_WALK_AROUND_CITY()
BREAK
////////////////////////////////////////////////////////////////
/// TRIGGER FRA2 MISSION
CASE MD_STAGE_FRA2
IF g_iMagDemoVariation = 1
DO_STAGE_FBI4()
ELSE
DO_STAGE_FRA2()
ENDIF
BREAK
////////////////////////////////////////////////////////////////
/// RESET
CASE MD_STAGE_RESET
DO_STAGE_RESET()
BREAK
////////////////////////////////////////////////////////////////
/// CLEANUP
CASE MD_STAGE_CLEANUP
CLEANUP_SCRIPT(TRUE)
BREAK
ENDSWITCH
UPDATE_EXIT_BOAT_CAM()
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()
// #1249237
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE, FALSE)
SUPRESS_RANDOM_EVENT_THIS_FRAME(RC_COP_PURSUE_VEHICLE_FLEE_SPAWNED, FALSE)
WAIT(0)
ENDWHILE
ENDSCRIPT
#ENDIF