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

13157 lines
488 KiB
Python
Executable File

//
//
// Author: Ben Barclay Date: 03/08/2011
//
//
//
//
// Martin 1 - Vinewood Babylon
//
// Snipe a plane as Michael, chase it as Trevor, then meet at the
// barn, where Trevor has kidnapped the wife.
//
// * Step
// * By
// * Step
// * Instructions
//
// Gameplay elements introduced:
// Vehicle Introduced:
// Location:
// Notes:
//
//
//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
// COMMAND HEADERS
using "rage_builtins.sch"
using "globals.sch"
using "script_heist.sch"
using "commands_misc.sch"
using "commands_pad.sch"
using "commands_script.sch"
using "commands_player.sch"
using "commands_streaming.sch"
using "commands_vehicle.sch"
using "commands_camera.sch"
using "commands_path.sch"
using "commands_fire.sch"
using "commands_graphics.sch"
using "commands_object.sch"
using "script_player.sch"
using "script_debug.sch"
using "streamed_scripts.sch"
using "selector_public.sch"
using "model_enums.sch"
using "dialogue_public.sch"
using "player_ped_public.sch"
USING "flow_public_core_override.sch"
USING "commands_audio.sch"
USING "commands_clock.sch"
USING "commands_debug.sch"
USING "commands_hud.sch"
USING "commands_ped.sch"
USING "commands_task.sch"
USING "commands_interiors.sch"
USING "chase_hint_cam.sch" CHASE_HINT_CAM_STRUCT localChaseHintCamStruct
USING "script_misc.sch"
USING "remote_sniper_public.sch"
USING "commands_entity.sch"
using "script_blips.sch"
USING "select_mission_stage.sch"
USING "locates_public.sch"
USING "replay_public.sch"
USING "commands_cutscene.sch"
USING "cutscene_public.sch"
USING "mission_stat_public.sch"
USING "script_ped.sch"
USING "CompletionPercentage_public.sch"
USING "flow_public_GAME.sch"
USING "clearMissionArea.sch"
USING "timelapse.sch"
USING "player_ped_scenes.sch"
USING "spline_cam_edit.sch"
USING "achievement_public.sch"
USING "cheat_controller_public.sch"
USING "push_in_public.sch"
USING "script_misc.sch"
USING "commands_recording.sch"
#IF IS_DEBUG_BUILD
USING "shared_debug.sch"
USING "script_debug.sch"
#ENDIF
// CONSTANTS
CONST_INT TOTAL_NUMBER_OF_TRAFFIC_CARS 175
CONST_INT TOTAL_NUMBER_OF_PARKED_CARS 15
CONST_INT TOTAL_NUMBER_OF_SET_PIECE_CARS 35
CONST_INT MAX_NUMBER_OF_TRAFFIC_CARS_PLAYING_BACK 12
CONST_INT MAX_NUMBER_OF_SET_PIECE_CARS_PLAYING_BACK 14
CONST_INT MAX_NUMBER_OF_PARKED_CARS_PLAYING_BACK 6
USING "traffic.sch"
// VALUES
CONST_INT NUMBER_OF_RECORDINGS 20
CONST_INT NUMBER_OF_DIALOGUE 20
CONST_INT NUMBER_OF_SET_PIECES 20
CONST_INT iRecNo 294
// ENUMS
// MISSION CONTROL
ENUM MISSION_STAGE
STAGE_INIT_MISSION =0,
STAGE_DRIVE_TO_OBSERVATORY,
STAGE_SHOOT_PLANE,
STAGE_CUTSCENE_PLANE_DESCENT,
STAGE_CHASE_PLANE,
STAGE_KILL_PASSENGERS,
STAGE_CUTSCENE_PLANE_CRASH,
STAGE_DESTROY_SNIPER,
STAGE_END_CUTSCENE,
PASSED_MISSION
ENDENUM
MISSION_STAGE eMissionStage
ENUM MISSION_TEXT
TEXT_SNIPE_HELP_1,
TEXT_SNIPE_HELP_2,
TEXT_LOCATE_TARGETS,
TEXT_THERMAL_HELP,
TEXT_DRIVE,
TEXT_CROSS_HELP,
TEXT_OFF_ROAD,
TEXT_JUMP_BUS,
TEXT_JUMP_TRAIN,
TEXT_FALL_CLIFF,
TEXT_FALL1,
TEXT_FALL2,
TEXT_FALL3,
TEXT_FALL4,
TEXT_FALL5,
TEXT_END1,
TEXT_END2,
TEXT_CRASH,
TEXT_FMC1,
TEXT_FMC2,
TEXT_FMC3,
TEXT_FMC4,
TEXT_FMC5
ENDENUM
// COORDINATES AND HEADINGS
// STRUCTS
SELECTOR_CAM_STRUCT sCamDetails
REMOTE_SNIPER_DATA sSniperData
SELECTOR_PED_STRUCT sSelectorPeds
structPedsForConversation structConvoPeds
// VARIABLES
structTimelapse sTimelapse
// FLAGS
BOOL bScriptInProgress = TRUE
BOOL bStageSetup
BOOL bStartRecordingTool
BOOL bTriggerRecording[NUMBER_OF_RECORDINGS]
BOOL bRightEngineShot
BOOL bDoRightEngineCut
BOOL assetsRequested
BOOL bTriggerFX[10]
BOOl bTextTriggered[100]
BOOL bSetPiece[NUMBER_OF_SET_PIECES]
BOOL bSetPieceUnloaded[NUMBER_OF_SET_PIECES]
BOOL bDoingJumpCutscene
BOOL bDoneSlowMoJump
BOOL btimeScaleBackToNormal
BOOL bHasUsedHintCam
BOOL PlayerCanDoJump
BOOL modelsRequested
BOOL doneGetBackOnBikeText
BOOL doneChaseAfterPlaneText
BOOL doneTakeDownPlaneWarning
BOOL playerDoneTrainJump
BOOL bCutsceneActive
BOOL broughtlandingGearOut
BOOL Bikeplaybackstopped
BOOL PlaneOnfireSoundStopped
BOOL bMissionFailed
BOOL doneChatS1_Jump3
BOOL floatingHelp1Done
BOOL DumpModelRequested
BOOL DumpSetPieceCreated
BOOL DumpPlaybackStarted
BOOL DumpSetpieceSwitchedToAI
BOOL bCutsceneDone
BOOL FellOffBikeStatDone
BOOL screenFadedInFromReplay
BOOL cinematicCamDeactivated
BOOL hasSniperBeenSetToActive
BOOL playerHasTakenTaxi
BOOL RemoteSniperNeedsUpdated
BOOL DamageEnginesTextDone
BOOL interactiveMusicStarted
BOOL interactiveMusicStarted2
BOOL preparedInteractiveMusic2
BOOL IsPedPointingPlayingAnim
BOOL IsPedPointingSetup
BOOL IsPedPointingPlayingAnim2
BOOL IsPedPointingPlayingAnim3
BOOL IsPedPointingSetup2
BOOL IsPedPointingSetup3
BOOL IsParkedCarSetup
BOOL hasIsStreamPlaying
BOOL startInteractiveMusic2
BOOL doneHeadLook[6]
BOOL PlayerOnBike
BOOL EndCutRequested
BOOL bPlaneShotSceneStreamLoaded
BOOL bPlaneShotSceneStreamStarted
BOOL sniperCreated
BOOL PlayerIsNowTrevor
BOOL trainModelsRequested
BOOL busRequested
BOOL HaulerRequested
BOOL PatriotRequested
BOOL BallerRequested
BOOL DilettanteRequested
BOOL TornadoRequested
BOOL Bus2Requested
BOOL bCutsceneStarted
BOOL S1_CLIFF_CHAT_DONE
BOOL S1_FMC4_CHAT_DONE
BOOL S1_FALL5_CHAT_DONE
BOOL S1_JUMP2_CHAT_DONE
BOOL S1_FALL4_CHAT_DONE
BOOL S1_FMC3_CHAT_DONE
BOOL S1_FALL3_CHAT_DONE
BOOL S1_FALL2_CHAT_DONE
BOOL S1_FMC2_CHAT_DONE
BOOL S1_FALL1_CHAT_DONE
BOOL S1_JUMP1_CHAT_DONE
BOOL S1_OROAD_CHAT_DONE
BOOL S1_FMC1_CHAT_DONE
BOOL VanMoved
BOOL bMissionFailedToSlow
BOOL DoneHelp[3]
BOOL doneSnipe8Text
BOOL doneLoseCopsText
BOOL doneSnipe7Text
BOOL doneSnipe5Text
BOOL vehiclesMovedForStart
//BOOL planeFrozen
BOOL safetyTimeScaleBackToNormalSet
BOOL missionCanFail
BOOL doneSnipe8Text2
BOOL IsPedPointingPlayingAnim4
BOOL IsPedPointingSetup4
BOOL requestedCrashStream
BOOL crashStreamStarted
BOOL DoneHorn1
BOOL DoneHorn2
BOOL DoneHorn3
BOOL CutsceneRequested
BOOL IPLSwapped
BOOL hasNumberPlateBeenSet
BOOL playerStartedAsMichael
BOOL bDoneJumpCutscene
BOOL camsCleanedUp
BOOL doneGameCamShake
BOOL doneChatGun
BOOL doneKillPedGodText
BOOL CombatTaskGiven
BOOL CombatTaskRequired
BOOL DoneChatChange2
BOOL doneChatWreck
BOOL doneWreckHelpText
BOOL HintCamActivated
BOOL trevExitTaskGiven
BOOL MikeExitTaskGiven
BOOL bVanDoorsLocked
//BOOL todStopped
BOOL vanFrozen
//BOOL pourGasTaskGiven
//BOOL weaponSwapped
//BOOL createdGasTrail
BOOL cutsceneSkipped
BOOL timelapseRequired
BOOL driveTaskCancelled
BOOL doneGetOffChat
BOOL camsKilled
BOOL TaskToLeaveCar
BOOL sniperVanBlipRouteSet
BOOL pedHelmetRemoved
//BOOL startedLoadScene
BOOL collisionTurnedOnForPlane
BOOL ringToneStarted
BOOL ringToneStopped
BOOL HavierMoved
BOOL CheckPointVehOveridden
BOOL bloodAdded
BOOL doneS1_HEAD
BOOL doneS1_ATVAN
BOOL doneS1_ATVAN2
BOOL doneS1_BIKE
BOOL MikeEarPieceGiven
BOOL doneS1_JUMP4
BOOL doneS1_ATTACK
BOOL S1_FMC5_CHAT_DONE
BOOL S1_TRAILER_CHAT_DONE
BOOL barrelSetUp
BOOL PilotComponentsGiven
BOOL bSniperIsBeingReplayed
BOOL playersCarMoved
BOOL lightsTurnedOn
BOOL vanNeedsToBeExploded
BOOL vehicleFalling
BOOL bStartCoordsGrabbed
BOOL bEndCoordsGrabbed
BOOL doneGetBackInVanText
BOOL blipSetToRed
BOOL nonTempEventsSetup
BOOL RadarBack
BOOL AnimForPed0Skipped
BOOL AnimForPed1Skipped
BOOL bCutsceneBeingSkipped
BOOL TrevLookTaskGiven
BOOL bClearedAreaForCutscene
BOOL bVideoRecordingDone
BOOL bCamNearClipSet
BOOL bPilotDeleted
BOOL bCamViewModeChanged
// VECTORS
VECTOR vSniperStartPos = <<-893.0, -446.2, 173.1>>//<< -880.7526, -447.4006, 150.5476 >>
VECTOR vDriveToPoint = << -411.5472, 1175.3082, 324.5601 >>
VECTOR vBFChaseStartCoords = << -390.1234, 1226.1991, 324.6426 >>
VECTOR vEngineOffset1 = << 1.6631, -3.2729, 0.7426 >>
VECTOR vTitanSlideRot = <<-15.000, -30.000, -20.000>>
VECTOR vTitanCrashCoords = << 2813.8667, 4679.4482, 44.9295 >>
VECTOR vImpact
VECTOR vObservatoryRoadMin = << -526.6754, 1145.1808, 307.5816 >>
VECTOR vObservatoryRoadMax = << -276.3485, 1305.7333, 336.9266 >>
VECTOR vSportsCarRoadMin = << 253.4966, 2206.1792, 34.6447 >>
VECTOR vSportsCarRoadMax = << 709.9940, 2627.1787, 129.6453 >>
VECTOR playersCoords
VECTOR truckCoords
VECTOR VECTOR_ZERO = <<0.0, 0.0, 0.0>>
VECTOR vplayerCoords
VECTOR vFallingStartCoords
VECTOR vFallingEndCoords
//VECTOR vOffset = <<-0.4, 5.7, 0.05>>
//VECTOR vHavierCoords
// FLOAT
CONST_FLOAT fMissionRestartHeading 220.4202
CONST_FLOAT fBFChaseStartHeading 328.7128
CONST_FLOAT fCarSpawnHeading 18.7639
FLOAT f_sniper_heading = 255.9889 /*166.0019*/
FLOAT fRecordingTime
FLOAT fPlaybackSpeed
FLOAT fCrossScreenPositionX[2]
Float fCrossScreenPositionY[2]
FLOAT fMainPlaybackSpeed
FLOAT fTimeScale
FLOAT fGroundz
//FLOAT fpitch
//FLOAT fHavierZ
FLOAT fHavierHeading
// INTS
INT iCounter = 0
INT iGetOnBikeTextTimer = 0
INT iLoadingScreenTimer = 0
INT iShotTimer = 0
INT iStageSection = 0
INT iMiniCutStage = 0
INT icutsceneStage = 0
INT iSeePlaneChatTimer = 0
INT PlaneOnFireSoundID
INT PlaneShotSoundID
INT iLeftDoor
INT iRightDoor
INT iHornTimer
INT iMoveStageOnTimer = 0
INT iNumberOfHits = 0
INT iEffectTimer
INT iTrevDeletedTimer
INT iMissChatTimer
INT iHelpChatTimer
INT iKillChatTimer
INT iGetOffCarChatTimer
INT iFallingTimer
INT iskipCutsceneStage = 0
INT iAnimTaskTime
// SYNC SCENES
INT BarrellSyncScene
//INT LeavingJetSyncScene
// TOD
//TIMEOFDAY sTimeHour
// SCALEFORM
SCALEFORM_INDEX sfSniperLoading
SCALEFORM_RETURN_INDEX sfReturnBool
// STRINGS
STRING FailReason
// PEDS
PED_INDEX pedPilot
//PED_INDEX pedTarget
PED_INDEX RandomDriver[8]
PED_INDEX DumpSetPieceDriver
PED_INDEX PointingPed[4]
PED_INDEX CSTrev
PED_INDEX PedPatricia
PED_INDEX endGuy[2]
// ENTITYS
ENTITY_INDEX TrevsCarEntity
ENTITY_INDEX TrevsEntity
ENTITY_INDEX CutPatricia
//ENTITY_INDEX CSMike
// VEHICLES
VEHICLE_INDEX vehTitan
VEHICLE_INDEX vehBike
VEHICLE_INDEX PlayerCar
VEHICLE_INDEX MichaelsCar
VEHICLE_INDEX vehTrain
VEHICLE_INDEX vehBus
VEHICLE_INDEX vehTruck
VEHICLE_INDEX vehVan
VEHICLE_INDEX vehBaller
VEHICLE_INDEX vehDilettante
VEHICLE_INDEX vehBobcat
VEHICLE_INDEX vehTornado
VEHICLE_INDEX vehBus2
VEHICLE_INDEX ParkedCar
VEHICLE_INDEX SniperVan
VEHICLE_INDEX vehBiff
VEHICLE_INDEX DumpSetPiece
VEHICLE_INDEX PlayerStatCar
VEHICLE_INDEX TrevCutsceneCar
VEHICLE_INDEX ParkedCarAtStart
VEHICLE_INDEX vehCutBike
VEHICLE_SNAPSHOT TrevsStartCar
//VEHICLE_GEN_NAME_ENUM MichaelsCarEnum
// OBJECTS
//OBJECT_INDEX ObjCrashedPlane
OBJECT_INDEX RemoteSniper
OBJECT_INDEX objBriefcase
OBJECT_INDEX ObjTitan
OBJECT_INDEX ObjEndBarrel
OBJECT_INDEX objTrevsPhone
// SCENARIOS
SCENARIO_BLOCKING_INDEX AirstripBlockingArea
SCENARIO_BLOCKING_INDEX CropFieldBlockingArea1
SCENARIO_BLOCKING_INDEX PoliceBikeBlockingArea
SCENARIO_BLOCKING_INDEX BarnBlockingArea
SCENARIO_BLOCKING_INDEX SeatNextToVanBlockingArea
SCENARIO_BLOCKING_INDEX MartinHouseMainScenarioBlockingArea
SCENARIO_BLOCKING_INDEX PlaneBlockingArea
// SEQUENCES
SEQUENCE_INDEX seqSequence
// WEAPONS
// PARTICLE ID
PTFX_ID ptfxEngine[11]
// Scene ID
// STRUCTS
BUILDING_DATA_STRUCT PlaneCrashTrench
PUSH_IN_DATA pushInData
// Sound ID
// BLIPS
BLIP_INDEX blipObj
BLIP_INDEX blipLocate
BLIP_INDEX bikeBlip
BLIP_INDEX BlipTrevor
BLIP_INDEX BlipMartinHouse
BLIP_INDEX BlipSniperVan
BLIP_INDEX endGuyBlip[2]
// CAMERAS
CAMERA_INDEX camInit
CAMERA_INDEX camDest
CAMERA_INDEX camAnim
CAMERA_INDEX camStatic
CAMERA_INDEX BulletCam
// GROUPS
// MODEL NAMES
// DEBUG
#IF IS_DEBUG_BUILD
// WIDGET_GROUP_ID widgetDebug
// BOOL bUberRecord = FALSE
// BOOL bGnarly = FALSE
// INT iGnarlyStyle = 0
// FLOAT pos0x = 2402.6060
// FLOAT pos0y = 3963.0063
// FLOAT pos0z = 35.8270
// FLOAT lookat0x = 0.0
// FLOAT lookat0y = 0.0
// FLOAT lookat0z = 0.0
// FLOAT fov0 = 45.0
//
// FLOAT pos1x = 0.0
// FLOAT pos1y = 0.0
// FLOAT pos1z = 0.0
// FLOAT lookat1x = 0.0
// FLOAT lookat1y = 0.0
// FLOAT lookat1z = 0.0
// FLOAT fov1 = 45.0
CONST_INT MAX_SKIP_MENU_LENGTH 10
// BOOL doneGetBackOnBikeHelpText
BOOL PSkip
BOOL JSkip
INT iReturnStage // mission stage to jump to
MissionStageMenuTextStruct SkipMenuStruct[MAX_SKIP_MENU_LENGTH] // struct containing the debug menu
STRING sMissionName = "Martin 1 - Vinewood Babylon"
INT iTrevorTrackPlaneConvoDelay = 10000
INT iDGTitanCrashRecording1StartNode = 3
FLOAT fDGTitanCrashRecording1Time = 1000.0
FLOAT fDGTitanCrashRecording1Speed = 0.8
// FLOAT fDirY, fDirZ, fScale, fDirX
#ENDIF
// SAFE WAIT
//PURPOSE: Performs a wait and a failcheck so that there are no deathcheck problems
PROC safeWait(INT iWaitTime)
WAIT(iWaitTime)
ENDPROC
// CUTSCENE
// FUNCTIONS
//PURPOSE: Performs actions required to start all cutscenes
PROC doStartCutscene(BOOL bClearPlayerTasks = TRUE, BOOL bAnimatedCam = FALSE)
IF NOT bCutsceneStarted
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
IF NOT bAnimatedCam
camInit = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE)
camDest = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE)
SET_CAM_COORD(camInit, <<1,1,1>>)
ELSE
camAnim = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", FALSE)
SET_CAM_COORD(camAnim, <<1,1,1>>)
ENDIF
DISPLAY_HUD(FALSE)
DISPLAY_RADAR(FALSE)
SET_WIDESCREEN_BORDERS(TRUE, 500)
IF bClearPlayerTasks
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_CLEAR_TASKS)
ELSE
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
ENDIF
HIDE_PED_WEAPON_FOR_SCRIPTED_CUTSCENE(PLAYER_PED_ID(), TRUE)
ENDIF
SETTIMERB(0)
bCutsceneStarted = TRUE
ENDIF
ENDPROC
//PURPOSE: Performs actions required to end all cutscenes
PROC doEndCutscene(BOOL bClearPlayerTasks = TRUE, BOOL bRenderScriptCams = TRUE)
IF bCutsceneStarted
DISPLAY_HUD(TRUE)
DISPLAY_RADAR(TRUE)
SET_WIDESCREEN_BORDERS(FALSE, 500)
IF IS_PLAYER_PLAYING(PLAYER_ID())
IF DOES_CAM_EXIST(camInit)
SET_CAM_ACTIVE(camInit, FALSE)
DESTROY_CAM (camInit)
ENDIF
IF DOES_CAM_EXIST(camDest)
SET_CAM_ACTIVE(camDest, FALSE)
DESTROY_CAM (camDest)
ENDIF
IF DOES_CAM_EXIST(camAnim)
SET_CAM_ACTIVE(camAnim, FALSE)
DESTROY_CAM (camAnim)
ENDIF
IF bRenderScriptCams
RENDER_SCRIPT_CAMS(FALSE, FALSE)
ENDIF
STOP_GAMEPLAY_CAM_SHAKING(TRUE)
IF bClearPlayerTasks
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
HIDE_PED_WEAPON_FOR_SCRIPTED_CUTSCENE(PLAYER_PED_ID(), FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
bCutsceneStarted = FALSE
ENDIF
ENDIF
ENDPROC
//PURPOSE: Checks if the cutscene is ready to skip
FUNC BOOL ReadyToSkipCutscene()
IF TIMERB() > 1000
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
//PURPOSE: Shakes both cameras at the same time
PROC doCamShake(STRING ShakeName, FLOAT fAmplitudeScalar = 1.0)
SHAKE_CAM(camInit, ShakeName, fAmplitudeScalar)
SHAKE_CAM(camDest, ShakeName, fAmplitudeScalar)
ENDPROC
//PURPOSE: Changes shake amplitude
PROC setCamShakeAmp(FLOAT fAmplitudeScalar = 1.0)
SET_CAM_SHAKE_AMPLITUDE(camInit, fAmplitudeScalar)
SET_CAM_SHAKE_AMPLITUDE(camDest, fAmplitudeScalar)
ENDPROC
//PURPOSE: Stops both cams shaking
PROC stopCamShake(BOOL bStopImmediately = FALSE)
IF DOES_CAM_EXIST(camInit)
STOP_CAM_SHAKING(camInit, bStopImmediately)
ENDIF
IF DOES_CAM_EXIST(camDest)
STOP_CAM_SHAKING(camDest, bStopImmediately)
ENDIF
ENDPROC
//PURPOSE: Moves a camera between Init and Dest, for as long as duration
PROC doTwoPointCam( VECTOR camInitCoord, VECTOR camInitRot, FLOAT camInitFOV, VECTOR camDestCoord, VECTOR camDestRot, FLOAT camDestFOV, INT duration, CAMERA_GRAPH_TYPE GraphTypePo = GRAPH_TYPE_LINEAR, CAMERA_GRAPH_TYPE GraphTypeRo = GRAPH_TYPE_LINEAR)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DETACH_CAM(camInit)
STOP_CAM_POINTING(camInit)
SET_CAM_COORD(camInit, camInitCoord)
SET_CAM_ROT(camInit, camInitRot)
SET_CAM_FOV(camInit, camInitFOV)
SET_CAM_ACTIVE(camDest, FALSE)
SET_CAM_ACTIVE(camInit, TRUE)
DETACH_CAM(camDest)
STOP_CAM_POINTING(camDest)
SET_CAM_COORD(camDest, camDestCoord)
SET_CAM_ROT(camDest, camDestRot)
SET_CAM_FOV(camDest, camDestFOV)
SET_CAM_ACTIVE(camDest, TRUE)
SET_CAM_ACTIVE(camInit, TRUE)
SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, duration, GraphTypePo, GraphTypeRo)
ENDPROC
//PURPOSE: Moves a camera between Init and Dest, for as long as duration, whilst looking at objLookAt
PROC doTwoPointEntityCam( ENTITY_INDEX entLookAt,
VECTOR camInitCoord, VECTOR camInitOffset, FLOAT camInitFOV,
VECTOR camDestCoord, VECTOR camDestOffset, FLOAT camDestFOV,
INT duration, CAMERA_GRAPH_TYPE GraphType = GRAPH_TYPE_LINEAR)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DETACH_CAM(camInit)
STOP_CAM_POINTING(camInit)
SET_CAM_COORD(camInit, camInitCoord)
POINT_CAM_AT_ENTITY(camInit, entLookAt, camInitOffset)
SET_CAM_FOV(camInit, camInitFOV)
SET_CAM_ACTIVE(camDest, FALSE)
SET_CAM_ACTIVE(camInit, TRUE)
DETACH_CAM(camDest)
STOP_CAM_POINTING(camDest)
SET_CAM_COORD(camDest, camDestCoord)
POINT_CAM_AT_ENTITY(camDest, entLookAt, camDestOffset)
SET_CAM_FOV(camDest, camDestFOV)
SET_CAM_ACTIVE(camDest, TRUE)
SET_CAM_ACTIVE(camInit, TRUE)
SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, duration, GraphType, GraphType)
ENDPROC
//PURPOSE: Moves a camera between Init and Dest, for as long as duration, looking at LookAt
PROC doTwoPointCoordCam(VECTOR camInitCoord, VECTOR camInitLookAt, FLOAT camInitFOV,
VECTOR camDestCoord, VECTOR camDestLookAt, FLOAT camDestFOV,
INT duration, CAMERA_GRAPH_TYPE GraphType = GRAPH_TYPE_LINEAR)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DETACH_CAM(camInit)
STOP_CAM_POINTING(camInit)
SET_CAM_COORD(camInit, camInitCoord)
POINT_CAM_AT_COORD(camInit, camInitLookAt)
SET_CAM_FOV(camInit, camInitFOV)
SET_CAM_ACTIVE(camDest, FALSE)
SET_CAM_ACTIVE(camInit, TRUE)
DETACH_CAM(camDest)
STOP_CAM_POINTING(camDest)
SET_CAM_COORD(camDest, camDestCoord)
POINT_CAM_AT_COORD(camDest, camDestLookAt)
SET_CAM_FOV(camDest, camDestFOV)
SET_CAM_ACTIVE(camDest, TRUE)
SET_CAM_ACTIVE(camInit, TRUE)
SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, duration, GraphType, GraphType)
ENDPROC
//PURPOSE: Moves a camera that's attached to a vehicle between Init and Dest, for as long as duration
PROC doTwoAttachLookAtVehicleCam( VEHICLE_INDEX vehSubject,
VECTOR camInitCoord, VECTOR camInitLookAt, FLOAT camInitFOV,
VECTOR camDestCoord, VECTOR camDestLookAt, FLOAT camDestFOV,
INT duration, CAMERA_GRAPH_TYPE GraphType = GRAPH_TYPE_LINEAR)
IF NOT IS_ENTITY_DEAD(vehSubject)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DETACH_CAM(camInit)
STOP_CAM_POINTING(camInit)
ATTACH_CAM_TO_ENTITY(camInit, vehSubject, camInitCoord)
POINT_CAM_AT_ENTITY(camInit, vehSubject, camInitLookAt)
SET_CAM_FOV(camInit, camInitFOV)
SET_CAM_ACTIVE(camDest, FALSE)
SET_CAM_ACTIVE(camInit, TRUE)
DETACH_CAM(camDest)
STOP_CAM_POINTING(camDest)
ATTACH_CAM_TO_ENTITY(camDest, vehSubject, camDestCoord)
POINT_CAM_AT_ENTITY(camDest, vehSubject, camDestLookAt)
SET_CAM_FOV(camDest, camDestFOV)
SET_CAM_ACTIVE(camDest, TRUE)
SET_CAM_ACTIVE(camInit, TRUE)
SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, duration, GraphType, GraphType)
ENDIF
ENDPROC
//PURPOSE: Moves a camera that's attached to a vehicle between Init and Dest, for as long as duration
PROC doTwoAttachLookAtEntityCam( ENTITY_INDEX entSubject,
VECTOR camInitCoord, VECTOR camInitLookAt, FLOAT camInitFOV,
VECTOR camDestCoord, VECTOR camDestLookAt, FLOAT camDestFOV,
INT duration)
IF NOT IS_ENTITY_DEAD(entSubject)
DETACH_CAM(camInit)
STOP_CAM_POINTING(camInit)
ATTACH_CAM_TO_ENTITY(camInit, entSubject, camInitCoord)
POINT_CAM_AT_ENTITY(camInit, entSubject, camInitLookAt)
SET_CAM_FOV(camInit, camInitFOV)
SET_CAM_ACTIVE(camDest, FALSE)
SET_CAM_ACTIVE(camInit, TRUE)
DETACH_CAM(camDest)
STOP_CAM_POINTING(camDest)
ATTACH_CAM_TO_ENTITY(camDest, entSubject, camDestCoord)
POINT_CAM_AT_ENTITY(camDest, entSubject, camDestLookAt)
SET_CAM_FOV(camDest, camDestFOV)
SET_CAM_ACTIVE(camDest, TRUE)
SET_CAM_ACTIVE(camInit, TRUE)
SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, duration, GRAPH_TYPE_LINEAR, GRAPH_TYPE_LINEAR)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
ENDIF
ENDPROC
//PURPOSE: Moves a camera that's attached to a vehicle between Init and Dest, for as long as duration
PROC doTwoAttachEntityLookAtOtherEntityCam( ENTITY_INDEX entAttach, ENTITY_INDEX entLookAt,
VECTOR camInitCoord, VECTOR camInitLookAt, FLOAT camInitFOV,
VECTOR camDestCoord, VECTOR camDestLookAt, FLOAT camDestFOV,
INT duration)
IF NOT IS_ENTITY_DEAD(entAttach)
AND NOT IS_ENTITY_DEAD(entLookAt)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DETACH_CAM(camInit)
STOP_CAM_POINTING(camInit)
ATTACH_CAM_TO_ENTITY(camInit, entAttach, camInitCoord)
POINT_CAM_AT_ENTITY(camInit, entLookAt, camInitLookAt)
SET_CAM_FOV(camInit, camInitFOV)
SET_CAM_ACTIVE(camDest, FALSE)
SET_CAM_ACTIVE(camInit, TRUE)
DETACH_CAM(camDest)
STOP_CAM_POINTING(camDest)
ATTACH_CAM_TO_ENTITY(camDest, entAttach, camDestCoord)
POINT_CAM_AT_ENTITY(camDest, entLookAt, camDestLookAt)
SET_CAM_FOV(camDest, camDestFOV)
SET_CAM_ACTIVE(camDest, TRUE)
SET_CAM_ACTIVE(camInit, TRUE)
SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, duration, GRAPH_TYPE_LINEAR, GRAPH_TYPE_LINEAR)
ENDIF
ENDPROC
// SAFE FADE
PROC fadeOutAndWait(INT iTime = DEFAULT_FADE_TIME)
IF IS_SCREEN_FADED_IN()
OR IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_OUT(iTime)
ENDIF
WHILE IS_SCREEN_FADING_OUT()
WAIT(0)
PRINTSTRING("SOLOMON1_WAITING_30") PRINTNL()
ENDWHILE
ENDPROC
PROC fadeInAndWait(INT iTime = DEFAULT_FADE_TIME)
IF IS_SCREEN_FADED_OUT()
OR IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_IN(iTime)
ENDIF
WHILE IS_SCREEN_FADING_IN()
WAIT(0)
PRINTSTRING("SOLOMON1_WAITING_31") PRINTNL()
ENDWHILE
ENDPROC
// _
// | |
// ___ _ __ __| |
// / _ \ '_ \ / _` |
//| __/ | | | (_| |
// \___|_| |_|\__,_| end common functions for David (POST FAILCHECK)
// LOADING
// MARTIN SWITCH CAMS
/*#IF IS_DEBUG_BUILD
WIDGET_GROUP_ID widgetDebug
#ENDIF*/
ENUM MARTIN_SWITCH_CAM_STATE
SWITCH_CAM_IDLE,
SWITCH_CAM_START_SPLINE1,
SWITCH_CAM_PLAYING_SPLINE1,
SWITCH_CAM_START_SPLINE2,
SWITCH_CAM_PLAYING_SPLINE2,
SWITCH_CAM_WAITING_FOR_PLAYER_CONTROL,
SWITCH_CAM_RETURN_TO_GAMEPLAY
ENDENUM
MARTIN_SWITCH_CAM_STATE eSwitchCamState = SWITCH_CAM_IDLE
SWITCH_CAM_STRUCT scsPlaneShotScene
SWITCH_CAM_STRUCT scsPlaneToBike
STRING strAnimDictCamShake = "shake_cam_all@"
BOOL bCamShakeAnimDictRequested = FALSE
BOOL bPlaneShotSceneStarted = FALSE
BOOL bPlaneShotSceneFinished = FALSE
BOOL bPlaneEngineExplosionStarted = FALSE
BOOL bPlaneEnginePreSmokeStarted = FALSE
BOOL bPlaneEnginePreSmokeStopped = FALSE
BOOL bPlanePilotConvoStarted = FALSE
BOOL bMichaelShotPlaneConvoStarted = FALSE
BOOL bTrevorLookAtPlaneStarted = FALSE
BOOL bChaseMusicStarted = FALSE
BOOL bBikeRecordingStopped = FALSE
BOOL hasEffectStarted
BOOL doneHelp1
BOOL doneHelp2
BOOL bEffectTriggered
BOOL subStream1Loaded
BOOL subStream2Loaded
BOOL BulletCamActive
BOOL doneS1_SEE
BOOL doneS1_LEAD
BOOL doneS1_LOOK
BOOL PlaneSlowedDown
BOOL TimeToCreatePlane
BOOL landingGearPutAway
INT iPlaneShotSceneDelay = 250
INT iPlaneEngineExplosionDelay = 1000
INT iPlaneEnginePreSmokeOnDelay = 1500
INT iPlaneEnginePreSmokeOffDelay = 2000
INT iPlaneEngineSmokeDelay = 3000
INT iPlanePilotConvoDelay = 2500
INT iMichaelShotPlaneConvoDelay = 5000
FLOAT fDGTitanEntryRecording1Time = 9000.00
FLOAT fDGTitanEntryRecording1Speed = 0.7
INT iDGTitanCrashRecording2StartNode = 3
FLOAT fDGTitanCrashRecording2Time = 25700.00
FLOAT fDGTitanCrashRecording2Speed = 0.6
FLOAT fDGTitanCrashRecording3Time = 30000.00
FLOAT fDGTitanCrashRecording3Speed = 0.6
FLOAT fBB_SOL_JETRecordingTime = 16500.0
FLOAT fBB_SOL_JETRecordingSpeed = 0.4
BOOL bDGTitanCrashRecording2Started = FALSE
FLOAT fDGBFReadyRecordingTime = 2800.000
INT iTrevorLookAtPlaneDelay = 1750
//INT iTrevorLookAtPlaneDuration = 500
INT iBikeRecordingStoppedDelay = 2000
INT iWooshSoundID = -1
FLOAT fWooshStartPhase = 0.243
FLOAT fWooshStopPhase = 0.756
BOOL bWooshStarted = FALSE
BOOL bWooshStopped = FALSE
VECTOR vPlaneEngineExplosionOffset = <<0.0, 1.5, 0.0>>
VECTOR vPlaneEngineExplosionRot = <<-90.0, 0.0, 0.0>>
FLOAT fPlaneEngineExplosionScale = 4.0
/*FLOAT fPlaneFlyByShakeStartPhase = 0.55
FLOAT fPlaneFlyByShakeStopPhase = 0.6
FLOAT fPlaneFlyByShakeScale = 5.0
BOOL bPlaneFlyByShakeStarted = FALSE
BOOL bPlaneFlyByShakeStopped = FALSE*/
FLOAT fPlanceSceneFX1StartPhase = 0.243
//FLOAT fPlanceSceneFX2StartPhase = 0.573
BOOL bPlaneSceneFX1Started = FALSE
BOOL bPlaneSceneFX2Started = FALSE
PROC SETUP_SPLINE_CAM_NODE_ARRAY_PLANE_SHOT_SCENE(SWITCH_CAM_STRUCT &thisSwitchCam, VEHICLE_INDEX &viPlane)
CDEBUG3LN(DEBUG_MISSION, "SETUP_SPLINE_CAM_NODE_ARRAY_PLANE_SHOT_SCENE")
IF NOT thisSwitchCam.bInitialized
//--- Start of Cam Data ---
thisSwitchCam.nodes[0].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[0].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[0].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[0].iNodeTime = 0
thisSwitchCam.nodes[0].vNodePos = <<2.8408, 12.3731, 0.1466>>
thisSwitchCam.nodes[0].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[0].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[0].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[0].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[0].vNodeDir = <<2.2061, -0.0863, 0.6487>>
thisSwitchCam.nodes[0].bPointAtEntity = TRUE
thisSwitchCam.nodes[0].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[0].bAttachOffsetIsRelative = TRUE
thisSwitchCam.nodes[0].fNodeFOV = 25.0000
thisSwitchCam.nodes[0].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[0].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[0].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[0].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[0].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[0].fNodeCamShake = 0.1000
thisSwitchCam.nodes[0].iCamEaseType = 0
thisSwitchCam.nodes[0].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[0].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[0].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[0].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[0].fTimeScale = 1.0000
thisSwitchCam.nodes[0].iTimeScaleEaseType = 0
thisSwitchCam.nodes[0].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[0].bFlashEnabled = FALSE
thisSwitchCam.nodes[0].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[0].fMinExposure = 0.0000
thisSwitchCam.nodes[0].fMaxExposure = 0.0000
thisSwitchCam.nodes[0].iRampUpDuration = 0
thisSwitchCam.nodes[0].iRampDownDuration = 0
thisSwitchCam.nodes[0].iHoldDuration = 0
thisSwitchCam.nodes[0].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[0].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[0].bUseCustomDOF = FALSE
thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[1].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[1].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[1].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[1].iNodeTime = 600
thisSwitchCam.nodes[1].vNodePos = <<2.7632, 10.8777, 0.2020>>
thisSwitchCam.nodes[1].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[1].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[1].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[1].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[1].vNodeDir = <<2.1944, -0.0942, 0.5753>>
thisSwitchCam.nodes[1].bPointAtEntity = TRUE
thisSwitchCam.nodes[1].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[1].bAttachOffsetIsRelative = TRUE
thisSwitchCam.nodes[1].fNodeFOV = 25.0000
thisSwitchCam.nodes[1].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[1].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[1].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[1].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[1].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[1].fNodeCamShake = 2.0000
thisSwitchCam.nodes[1].iCamEaseType = 0
thisSwitchCam.nodes[1].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[1].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[1].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[1].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[1].fTimeScale = 1.0000
thisSwitchCam.nodes[1].iTimeScaleEaseType = 0
thisSwitchCam.nodes[1].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[1].bFlashEnabled = FALSE
thisSwitchCam.nodes[1].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[1].fMinExposure = 0.0000
thisSwitchCam.nodes[1].fMaxExposure = 0.0000
thisSwitchCam.nodes[1].iRampUpDuration = 0
thisSwitchCam.nodes[1].iRampDownDuration = 0
thisSwitchCam.nodes[1].iHoldDuration = 0
thisSwitchCam.nodes[1].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[1].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[1].bUseCustomDOF = FALSE
thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[2].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[2].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[2].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[2].iNodeTime = 2500
thisSwitchCam.nodes[2].vNodePos = <<2.5059, 7.8159, 0.3064>>
thisSwitchCam.nodes[2].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[2].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[2].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[2].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[2].vNodeDir = <<1.9644, -0.1365, 0.1968>>
thisSwitchCam.nodes[2].bPointAtEntity = TRUE
thisSwitchCam.nodes[2].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[2].bAttachOffsetIsRelative = TRUE
thisSwitchCam.nodes[2].fNodeFOV = 25.0000
thisSwitchCam.nodes[2].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[2].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[2].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[2].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[2].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[2].fNodeCamShake = 1.0000
thisSwitchCam.nodes[2].iCamEaseType = 0
thisSwitchCam.nodes[2].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[2].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[2].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[2].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[2].fTimeScale = 1.0000
thisSwitchCam.nodes[2].iTimeScaleEaseType = 0
thisSwitchCam.nodes[2].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[2].bFlashEnabled = FALSE
thisSwitchCam.nodes[2].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[2].fMinExposure = 0.0000
thisSwitchCam.nodes[2].fMaxExposure = 0.0000
thisSwitchCam.nodes[2].iRampUpDuration = 0
thisSwitchCam.nodes[2].iRampDownDuration = 0
thisSwitchCam.nodes[2].iHoldDuration = 0
thisSwitchCam.nodes[2].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[2].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[2].bUseCustomDOF = FALSE
thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[3].bIsCamCutNode = TRUE
thisSwitchCam.nodes[4].SwitchCamType = SWITCH_ENTITY_ATTACHED_CAM
thisSwitchCam.nodes[4].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[4].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[4].iNodeTime = 0
thisSwitchCam.nodes[4].vNodePos = <<2.5600, 74.1566, 3.0641>>
thisSwitchCam.nodes[4].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[4].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[4].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[4].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[4].vNodeDir = <<-8.3390, 0.0002, -175.0362>>
thisSwitchCam.nodes[4].bPointAtEntity = FALSE
thisSwitchCam.nodes[4].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[4].bAttachOffsetIsRelative = TRUE
thisSwitchCam.nodes[4].fNodeFOV = 30.0000
thisSwitchCam.nodes[4].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[4].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[4].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[4].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[4].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[4].fNodeCamShake = 1.0000
thisSwitchCam.nodes[4].iCamEaseType = 2
thisSwitchCam.nodes[4].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[4].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[4].bCamEaseForceLinear = TRUE
thisSwitchCam.nodes[4].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[4].fTimeScale = 1.0000
thisSwitchCam.nodes[4].iTimeScaleEaseType = 0
thisSwitchCam.nodes[4].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[4].bFlashEnabled = FALSE
thisSwitchCam.nodes[4].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[4].fMinExposure = 0.0000
thisSwitchCam.nodes[4].fMaxExposure = 0.0000
thisSwitchCam.nodes[4].iRampUpDuration = 0
thisSwitchCam.nodes[4].iRampDownDuration = 0
thisSwitchCam.nodes[4].iHoldDuration = 0
thisSwitchCam.nodes[4].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[4].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[4].bUseCustomDOF = FALSE
thisSwitchCam.nodes[4].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[4].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[4].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[5].SwitchCamType = SWITCH_ENTITY_ATTACHED_CAM
thisSwitchCam.nodes[5].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[5].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[5].iNodeTime = 3000
thisSwitchCam.nodes[5].vNodePos = <<3.8913, -5.8747, 0.5965>>
thisSwitchCam.nodes[5].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[5].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[5].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[5].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[5].vNodeDir = <<-3.5100, -0.1071, -176.1688>>
thisSwitchCam.nodes[5].bPointAtEntity = FALSE
thisSwitchCam.nodes[5].bPointAtOffsetIsRelative = FALSE
thisSwitchCam.nodes[5].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[5].fNodeFOV = 30.0000
thisSwitchCam.nodes[5].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[5].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[5].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[5].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[5].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[5].fNodeCamShake = 1.0000
thisSwitchCam.nodes[5].iCamEaseType = 0
thisSwitchCam.nodes[5].fCamEaseScaler = 1.0000
thisSwitchCam.nodes[5].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[5].bCamEaseForceLinear = TRUE
thisSwitchCam.nodes[5].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[5].fTimeScale = 1.0000
thisSwitchCam.nodes[5].iTimeScaleEaseType = 0
thisSwitchCam.nodes[5].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[5].bFlashEnabled = FALSE
thisSwitchCam.nodes[5].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[5].fMinExposure = 0.0000
thisSwitchCam.nodes[5].fMaxExposure = 0.0000
thisSwitchCam.nodes[5].iRampUpDuration = 0
thisSwitchCam.nodes[5].iRampDownDuration = 0
thisSwitchCam.nodes[5].iHoldDuration = 0
thisSwitchCam.nodes[5].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[5].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[5].bUseCustomDOF = FALSE
thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[6].bIsCamCutNode = TRUE
thisSwitchCam.nodes[7].SwitchCamType = SWITCH_ENTITY_ATTACHED_CAM
thisSwitchCam.nodes[7].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[7].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[7].iNodeTime = 0
thisSwitchCam.nodes[7].vNodePos = <<16.2416, -41.4694, -2.3709>>
thisSwitchCam.nodes[7].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[7].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[7].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[7].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[7].vNodeDir = <<3.0180, -0.2268, 9.4804>>
thisSwitchCam.nodes[7].bPointAtEntity = FALSE
thisSwitchCam.nodes[7].bPointAtOffsetIsRelative = FALSE
thisSwitchCam.nodes[7].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[7].fNodeFOV = 45.0000
thisSwitchCam.nodes[7].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[7].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[7].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[7].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[7].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[7].fNodeCamShake = 1.0000
thisSwitchCam.nodes[7].iCamEaseType = 0
thisSwitchCam.nodes[7].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[7].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[7].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[7].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[7].fTimeScale = 1.0000
thisSwitchCam.nodes[7].iTimeScaleEaseType = 0
thisSwitchCam.nodes[7].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[7].bFlashEnabled = FALSE
thisSwitchCam.nodes[7].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[7].fMinExposure = 0.0000
thisSwitchCam.nodes[7].fMaxExposure = 0.0000
thisSwitchCam.nodes[7].iRampUpDuration = 0
thisSwitchCam.nodes[7].iRampDownDuration = 0
thisSwitchCam.nodes[7].iHoldDuration = 0
thisSwitchCam.nodes[7].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[7].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[7].bUseCustomDOF = FALSE
thisSwitchCam.nodes[7].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[7].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[7].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[8].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[8].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[8].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[8].iNodeTime = 3000
thisSwitchCam.nodes[8].vNodePos = <<12.4154, -42.9466, -6.2632>>
thisSwitchCam.nodes[8].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[8].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[8].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[8].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[8].vNodeDir = <<0.5307, -0.4107, 6.1259>>
thisSwitchCam.nodes[8].bPointAtEntity = FALSE
thisSwitchCam.nodes[8].bPointAtOffsetIsRelative = FALSE
thisSwitchCam.nodes[8].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[8].fNodeFOV = 45.0000
thisSwitchCam.nodes[8].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[8].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[8].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[8].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[8].NodeCamShakeType = CAM_SHAKE_MEDIUM
thisSwitchCam.nodes[8].fNodeCamShake = 1.0000
thisSwitchCam.nodes[8].iCamEaseType = 0
thisSwitchCam.nodes[8].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[8].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[8].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[8].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[8].fTimeScale = 1.0000
thisSwitchCam.nodes[8].iTimeScaleEaseType = 0
thisSwitchCam.nodes[8].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[8].bFlashEnabled = FALSE
thisSwitchCam.nodes[8].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[8].fMinExposure = 0.0000
thisSwitchCam.nodes[8].fMaxExposure = 0.0000
thisSwitchCam.nodes[8].iRampUpDuration = 0
thisSwitchCam.nodes[8].iRampDownDuration = 0
thisSwitchCam.nodes[8].iHoldDuration = 0
thisSwitchCam.nodes[8].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[8].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[8].bUseCustomDOF = FALSE
thisSwitchCam.nodes[8].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[8].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[8].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.iNumNodes = 9
thisSwitchCam.iCamSwitchFocusNode = 0
thisSwitchCam.bSplineNoSmoothing = FALSE
thisSwitchCam.bAddGameplayCamAsLastNode = FALSE
thisSwitchCam.iGameplayNodeBlendDuration = 0
//--- End of Cam Data ---
thisSwitchCam.strOutputStructName = "thisSwitchCam"
thisSwitchCam.strOutputFileName = "CameraInfo_Martin1_PlaneShotScene.txt"
thisSwitchCam.strXMLFileName = "CameraInfo_Martin1_PlaneShotScene.xml"
thisSwitchCam.bInitialized = TRUE
ENDIF
thisSwitchCam.viVehicles[0] = viPlane
ENDPROC
PROC SETUP_SPLINE_CAM_NODE_ARRAY_PLANE_TO_BIKE(SWITCH_CAM_STRUCT &thisSwitchCam, VEHICLE_INDEX &vi1, VEHICLE_INDEX &vi2)
CDEBUG3LN(DEBUG_MISSION, "SETUP_SPLINE_CAM_NODE_ARRAY_PLANE_TO_BIKE")
IF NOT thisSwitchCam.bInitialized
//--- Start of Cam Data ---
thisSwitchCam.nodes[0].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[0].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[0].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[0].iNodeTime = 0
thisSwitchCam.nodes[0].vNodePos = <<9.5194, 42.6350, -0.8512>>
thisSwitchCam.nodes[0].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[0].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[0].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[0].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[0].vNodeDir = <<7.8905, -0.0652, 5.4872>>
thisSwitchCam.nodes[0].bPointAtEntity = TRUE
thisSwitchCam.nodes[0].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[0].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[0].fNodeFOV = 30.0000
thisSwitchCam.nodes[0].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[0].iNodeToClone = 0
thisSwitchCam.nodes[0].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[0].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[0].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[0].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[0].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[0].fNodeCamShake = 1.0000
thisSwitchCam.nodes[0].iCamEaseType = 0
thisSwitchCam.nodes[0].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[0].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[0].bCamEaseForceLinear = TRUE
thisSwitchCam.nodes[0].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[0].fTimeScale = 1.0000
thisSwitchCam.nodes[0].iTimeScaleEaseType = 0
thisSwitchCam.nodes[0].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[0].bFlashEnabled = FALSE
thisSwitchCam.nodes[0].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[0].fMinExposure = 0.0000
thisSwitchCam.nodes[0].fMaxExposure = 0.0000
thisSwitchCam.nodes[0].iRampUpDuration = 0
thisSwitchCam.nodes[0].iRampDownDuration = 0
thisSwitchCam.nodes[0].iHoldDuration = 0
thisSwitchCam.nodes[0].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[0].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[0].bUseCustomDOF = FALSE
thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[1].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[1].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[1].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[1].iNodeTime = 1000
thisSwitchCam.nodes[1].vNodePos = <<14.4904, 30.6943, -3.5751>> // <<11.0786, 20.6597, -2.9302>>
thisSwitchCam.nodes[1].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[1].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[1].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[1].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[1].vNodeDir = <<2.4470, -0.7788, 2.6008>> // <<6.6681, 18.7737, 5.0256>>
thisSwitchCam.nodes[1].bPointAtEntity = TRUE
thisSwitchCam.nodes[1].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[1].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[1].fNodeFOV = 24.5 // 30.0000
thisSwitchCam.nodes[1].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[1].iNodeToClone = 0
thisSwitchCam.nodes[1].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[1].fNodeTimePostFXBlendTime = 2.0000
thisSwitchCam.nodes[1].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[1].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[1].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[1].fNodeCamShake = 1.0000
thisSwitchCam.nodes[1].iCamEaseType = 0
thisSwitchCam.nodes[1].fCamEaseScaler = 1.0000
thisSwitchCam.nodes[1].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[1].bCamEaseForceLinear = TRUE
thisSwitchCam.nodes[1].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[1].fTimeScale = 0.9000
thisSwitchCam.nodes[1].iTimeScaleEaseType = 0
thisSwitchCam.nodes[1].fTimeScaleEaseScaler = 0.8000
thisSwitchCam.nodes[1].bFlashEnabled = FALSE
thisSwitchCam.nodes[1].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[1].fMinExposure = 0.0000
thisSwitchCam.nodes[1].fMaxExposure = 0.0000
thisSwitchCam.nodes[1].iRampUpDuration = 0
thisSwitchCam.nodes[1].iRampDownDuration = 0
thisSwitchCam.nodes[1].iHoldDuration = 0
thisSwitchCam.nodes[1].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[1].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[1].bUseCustomDOF = FALSE
thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[2].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[2].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[2].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[2].iNodeTime = 900
thisSwitchCam.nodes[2].vNodePos = <<16.7361, 31.1127, -5.2246>> // <<10.8295, 19.1224, -5.0878>>
thisSwitchCam.nodes[2].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[2].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[2].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[2].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[2].vNodeDir = <<1.5855, -0.5112, 1.9870>> // <<7.4407, 17.9167, 2.6567>>
thisSwitchCam.nodes[2].bPointAtEntity = TRUE
thisSwitchCam.nodes[2].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[2].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[2].fNodeFOV = 24.5 // 30.0000
thisSwitchCam.nodes[2].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[2].iNodeToClone = 0
thisSwitchCam.nodes[2].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[2].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[2].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[2].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[2].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[2].fNodeCamShake = 1.0000
thisSwitchCam.nodes[2].iCamEaseType = 2
thisSwitchCam.nodes[2].fCamEaseScaler = 1.0000
thisSwitchCam.nodes[2].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[2].bCamEaseForceLinear = TRUE
thisSwitchCam.nodes[2].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[2].fTimeScale = 0.3000
thisSwitchCam.nodes[2].iTimeScaleEaseType = 0
thisSwitchCam.nodes[2].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[2].bFlashEnabled = FALSE
thisSwitchCam.nodes[2].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[2].fMinExposure = 0.0000
thisSwitchCam.nodes[2].fMaxExposure = 0.0000
thisSwitchCam.nodes[2].iRampUpDuration = 0
thisSwitchCam.nodes[2].iRampDownDuration = 0
thisSwitchCam.nodes[2].iHoldDuration = 0
thisSwitchCam.nodes[2].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[2].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[2].bUseCustomDOF = FALSE
thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[3].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[3].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[3].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[3].iNodeTime = 600
thisSwitchCam.nodes[3].vNodePos = <<24.6776, 34.6530, -18.4241>> // <<24.3269, 32.4904, -40.9953>>
thisSwitchCam.nodes[3].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[3].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[3].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[3].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[3].vNodeDir = <<23.3133, 36.4863, 3.5606>> // <<42.9828, 33.9844, -7.5523>>
thisSwitchCam.nodes[3].bPointAtEntity = TRUE
thisSwitchCam.nodes[3].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[3].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[3].fNodeFOV = 24.5 // 30.0000
thisSwitchCam.nodes[3].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[3].iNodeToClone = 0
thisSwitchCam.nodes[3].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[3].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[3].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[3].fNodeMotionBlur = 1.0000
thisSwitchCam.nodes[3].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[3].fNodeCamShake = 1.0000
thisSwitchCam.nodes[3].iCamEaseType = 0
thisSwitchCam.nodes[3].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[3].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[3].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[3].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[3].fTimeScale = 1.0000
thisSwitchCam.nodes[3].iTimeScaleEaseType = 0
thisSwitchCam.nodes[3].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[3].bFlashEnabled = FALSE
thisSwitchCam.nodes[3].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[3].fMinExposure = 0.0000
thisSwitchCam.nodes[3].fMaxExposure = 0.0000
thisSwitchCam.nodes[3].iRampUpDuration = 50
thisSwitchCam.nodes[3].iRampDownDuration = 50
thisSwitchCam.nodes[3].iHoldDuration = 100
thisSwitchCam.nodes[3].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[3].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[3].bUseCustomDOF = FALSE
thisSwitchCam.nodes[3].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[3].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[3].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[4].bIsCamCutNode = TRUE
thisSwitchCam.nodes[5].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[5].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[5].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[5].iNodeTime = 0
thisSwitchCam.nodes[5].vNodePos = <<0.9194, 2.7878, 6.4911>>
thisSwitchCam.nodes[5].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[5].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[5].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[5].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[5].vNodeDir = <<13.0044, 0.0000, 142.8329>>
thisSwitchCam.nodes[5].bPointAtEntity = FALSE
thisSwitchCam.nodes[5].bPointAtOffsetIsRelative = FALSE
thisSwitchCam.nodes[5].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[5].fNodeFOV = 40.0 // 50.0000
thisSwitchCam.nodes[5].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[5].iNodeToClone = 0
thisSwitchCam.nodes[5].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[5].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[5].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[5].fNodeMotionBlur = 1.0000
thisSwitchCam.nodes[5].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[5].fNodeCamShake = 0.0000
thisSwitchCam.nodes[5].iCamEaseType = 0
thisSwitchCam.nodes[5].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[5].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[5].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[5].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[5].fTimeScale = 1.0000
thisSwitchCam.nodes[5].iTimeScaleEaseType = 0
thisSwitchCam.nodes[5].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[5].bFlashEnabled = FALSE
thisSwitchCam.nodes[5].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[5].fMinExposure = 0.0000
thisSwitchCam.nodes[5].fMaxExposure = 0.0000
thisSwitchCam.nodes[5].iRampUpDuration = 0
thisSwitchCam.nodes[5].iRampDownDuration = 0
thisSwitchCam.nodes[5].iHoldDuration = 0
thisSwitchCam.nodes[5].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[5].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[5].bUseCustomDOF = FALSE
thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[6].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[6].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[6].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[6].iNodeTime = 600
thisSwitchCam.nodes[6].vNodePos = <<2.1044, 3.4443, 0.9265>>
thisSwitchCam.nodes[6].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[6].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[6].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[6].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[6].vNodeDir = <<0.1714, 0.3040, 1.6840>>
thisSwitchCam.nodes[6].bPointAtEntity = TRUE
thisSwitchCam.nodes[6].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[6].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[6].fNodeFOV = 40.0 // 50.0000
thisSwitchCam.nodes[6].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[6].iNodeToClone = 0
thisSwitchCam.nodes[6].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[6].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[6].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[6].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[6].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[6].fNodeCamShake = 0.75 // 0.0000
thisSwitchCam.nodes[6].iCamEaseType = 0
thisSwitchCam.nodes[6].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[6].fCamNodeVelocityScale = -0.4000
thisSwitchCam.nodes[6].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[6].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[6].fTimeScale = 1.0000
thisSwitchCam.nodes[6].iTimeScaleEaseType = 0
thisSwitchCam.nodes[6].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[6].bFlashEnabled = FALSE
thisSwitchCam.nodes[6].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[6].fMinExposure = 0.0000
thisSwitchCam.nodes[6].fMaxExposure = 0.0000
thisSwitchCam.nodes[6].iRampUpDuration = 0
thisSwitchCam.nodes[6].iRampDownDuration = 0
thisSwitchCam.nodes[6].iHoldDuration = 0
thisSwitchCam.nodes[6].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[6].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[6].bUseCustomDOF = FALSE
thisSwitchCam.nodes[6].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[6].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[6].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[7].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[7].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[7].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[7].iNodeTime = 700
thisSwitchCam.nodes[7].vNodePos = <<1.3806, 2.0677, 0.2982>>
thisSwitchCam.nodes[7].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[7].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[7].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[7].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[7].vNodeDir = <<-0.1853, 0.2172, 0.6513>>
thisSwitchCam.nodes[7].bPointAtEntity = TRUE
thisSwitchCam.nodes[7].bPointAtOffsetIsRelative = TRUE
thisSwitchCam.nodes[7].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[7].fNodeFOV = 40.0 // 50.0000
thisSwitchCam.nodes[7].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[7].iNodeToClone = 0
thisSwitchCam.nodes[7].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[7].fNodeTimePostFXBlendTime = 1.0000
thisSwitchCam.nodes[7].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[7].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[7].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[7].fNodeCamShake = 0.75 // 0.0000
thisSwitchCam.nodes[7].iCamEaseType = 0
thisSwitchCam.nodes[7].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[7].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[7].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[7].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[7].fTimeScale = 1.0000
thisSwitchCam.nodes[7].iTimeScaleEaseType = 0
thisSwitchCam.nodes[7].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[7].bFlashEnabled = FALSE
thisSwitchCam.nodes[7].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[7].fMinExposure = 0.0000
thisSwitchCam.nodes[7].fMaxExposure = 0.0000
thisSwitchCam.nodes[7].iRampUpDuration = 0
thisSwitchCam.nodes[7].iRampDownDuration = 0
thisSwitchCam.nodes[7].iHoldDuration = 0
thisSwitchCam.nodes[7].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[7].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[7].bUseCustomDOF = FALSE
thisSwitchCam.nodes[7].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[7].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[7].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.nodes[8].SwitchCamType = SWITCH_CAM_OLD_SYSTEM
thisSwitchCam.nodes[8].iForceCamPointAtEntityIndex = -1
thisSwitchCam.nodes[8].bIsGameplayCamCopy = FALSE
thisSwitchCam.nodes[8].iNodeTime = 300
thisSwitchCam.nodes[8].vNodePos = <<1.3811, 1.8374, 0.2559>>
thisSwitchCam.nodes[8].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[8].fNodeOffsetDist = 0.0000
thisSwitchCam.nodes[8].fNodeVerticleOffset = 0.0000
thisSwitchCam.nodes[8].bAttachToOriginPed = FALSE
thisSwitchCam.nodes[8].vNodeDir = <<8.5434, 0.0000, 137.2264>>
thisSwitchCam.nodes[8].bPointAtEntity = FALSE
thisSwitchCam.nodes[8].bPointAtOffsetIsRelative = FALSE
thisSwitchCam.nodes[8].bAttachOffsetIsRelative = FALSE
thisSwitchCam.nodes[8].fNodeFOV = 40.0 // 50.0000
thisSwitchCam.nodes[8].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>>
thisSwitchCam.nodes[8].iNodeToClone = 0
thisSwitchCam.nodes[8].NodeTimePostFX_Type = NO_EFFECT
thisSwitchCam.nodes[8].fNodeTimePostFXBlendTime = 0.0000
thisSwitchCam.nodes[8].fNodeTimePostFXTimeOffset = 0.0000
thisSwitchCam.nodes[8].fNodeMotionBlur = 0.0000
thisSwitchCam.nodes[8].NodeCamShakeType = CAM_SHAKE_DEFAULT
thisSwitchCam.nodes[8].fNodeCamShake = 0.75 // 0.0000
thisSwitchCam.nodes[8].iCamEaseType = 0
thisSwitchCam.nodes[8].fCamEaseScaler = 0.0000
thisSwitchCam.nodes[8].fCamNodeVelocityScale = 0.0000
thisSwitchCam.nodes[8].bCamEaseForceLinear = FALSE
thisSwitchCam.nodes[8].bCamEaseForceLevel = FALSE
thisSwitchCam.nodes[8].fTimeScale = 1.0000
thisSwitchCam.nodes[8].iTimeScaleEaseType = 0
thisSwitchCam.nodes[8].fTimeScaleEaseScaler = 0.0000
thisSwitchCam.nodes[8].bFlashEnabled = FALSE
thisSwitchCam.nodes[8].SCFE_FlashEffectUsed = SCFE_CODE_FLASH
thisSwitchCam.nodes[8].fMinExposure = 0.0000
thisSwitchCam.nodes[8].fMaxExposure = 0.0000
thisSwitchCam.nodes[8].iRampUpDuration = 0
thisSwitchCam.nodes[8].iRampDownDuration = 0
thisSwitchCam.nodes[8].iHoldDuration = 0
thisSwitchCam.nodes[8].fFlashNodePhaseOffset = 0.0000
thisSwitchCam.nodes[8].bIsLowDetailNode = FALSE
thisSwitchCam.nodes[8].bUseCustomDOF = FALSE
thisSwitchCam.nodes[8].NodeDOF_Info.fDOF_NearDOF = 0.0000
thisSwitchCam.nodes[8].NodeDOF_Info.fDOF_FarDOF = 0.0000
thisSwitchCam.nodes[8].NodeDOF_Info.fDOF_EffectStrength = 0.0000
thisSwitchCam.iNumNodes = 9
thisSwitchCam.iCamSwitchFocusNode = 4
thisSwitchCam.fSwitchSoundAudioStartPhase = -1.0000
thisSwitchCam.fSwitchSoundAudioEndPhase = -1.0000
// thisSwitchCam.bSwitchSoundPlayOpeningPulse = TRUE
// thisSwitchCam.bSwitchSoundPlayMoveLoop = TRUE
// thisSwitchCam.bSwitchSoundPlayExitPulse = TRUE
thisSwitchCam.bSplineNoSmoothing = FALSE
thisSwitchCam.bAddGameplayCamAsLastNode = FALSE
thisSwitchCam.iGameplayNodeBlendDuration = 0
//--- End of Cam Data ---
thisSwitchCam.strOutputStructName = "thisSwitchCam"
thisSwitchCam.strOutputFileName = "CameraInfo_Martin1_JetToBike.txt"
thisSwitchCam.strXMLFileName = "CameraInfo_Martin1_JetToBike.xml"
thisSwitchCam.bInitialized = TRUE
ENDIF
thisSwitchCam.viVehicles[0] = vi1
thisSwitchCam.viVehicles[1] = vi2
ENDPROC
#IF IS_DEBUG_BUILD
PROC CREATE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS(WIDGET_GROUP_ID wgidWidget)
CDEBUG3LN(DEBUG_MISSION, "CREATE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS")
SET_CURRENT_WIDGET_GROUP(wgidWidget)
START_WIDGET_GROUP("Custom Switch Cameras - Extra Tunables -")
START_WIDGET_GROUP("Plane Shot Scene")
ADD_WIDGET_INT_SLIDER("Plane Shot Scene Delay (after player has shot)", iPlaneShotSceneDelay, 0, 5000, 100)
ADD_WIDGET_INT_SLIDER("Plane Engine Explosion Delay", iPlaneEngineExplosionDelay, 0, 30000, 100)
ADD_WIDGET_INT_SLIDER("Plane Engine Pre Smoke On Delay", iPlaneEnginePreSmokeOnDelay, 0, 30000, 100)
ADD_WIDGET_INT_SLIDER("Plane Engine Pre Smoke Off Delay", iPlaneEnginePreSmokeOffDelay, 0, 30000, 100)
ADD_WIDGET_INT_SLIDER("Plane Engine Smoke Delay", iPlaneEngineSmokeDelay, 0, 30000, 100)
ADD_WIDGET_INT_SLIDER("Plane Pilot Convo Delay", iPlanePilotConvoDelay, 0, 30000, 100)
ADD_WIDGET_INT_SLIDER("Michael Shot Plane Convo Delay", iMichaelShotPlaneConvoDelay, 0, 30000, 100)
ADD_WIDGET_INT_SLIDER("Trevor Track Plane Convo Delay", iTrevorTrackPlaneConvoDelay, 0, 30000, 100)
START_WIDGET_GROUP("DGTitanEntry 1 Recording")
ADD_WIDGET_FLOAT_SLIDER("Recording Playback Time", fDGTitanEntryRecording1Time, 0.0, 999999.0, 100.0)
ADD_WIDGET_FLOAT_SLIDER("Recording Playback Speed", fDGTitanEntryRecording1Speed, 0.0, 5.0, 0.1)
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("DGTitanCrash 1 Recording")
ADD_WIDGET_INT_SLIDER("Recording Start Node", iDGTitanCrashRecording1StartNode, 0, 20, 1)
ADD_WIDGET_FLOAT_SLIDER("Recording Playback Time", fDGTitanCrashRecording1Time, 0.0, 999999.0, 100.0)
ADD_WIDGET_FLOAT_SLIDER("Recording Playback Speed", fDGTitanCrashRecording1Speed, 0.0, 5.0, 0.1)
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("DGTitanCrash 2 Recording")
ADD_WIDGET_INT_SLIDER("Recording Start Node", iDGTitanCrashRecording2StartNode, 0, 20, 1)
ADD_WIDGET_FLOAT_SLIDER("Recording Playback Time", fDGTitanCrashRecording2Time, 0.0, 999999.0, 100.0)
ADD_WIDGET_FLOAT_SLIDER("Recording Playback Speed", fDGTitanCrashRecording2Speed, 0.0, 5.0, 0.1)
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("DGTitanCrash 3 Recording")
ADD_WIDGET_FLOAT_SLIDER("Recording Playback Time", fDGTitanCrashRecording3Time, 0.0, 999999.0, 100.0)
ADD_WIDGET_FLOAT_SLIDER("Recording Playback Speed", fDGTitanCrashRecording3Speed, 0.0, 5.0, 0.1)
STOP_WIDGET_GROUP()
/*START_WIDGET_GROUP("Plane Fly By Shake")
ADD_WIDGET_FLOAT_SLIDER("Start Phase", fPlaneFlyByShakeStartPhase, 0.0, 1.0, 0.01)
ADD_WIDGET_FLOAT_SLIDER("Stop Phase", fPlaneFlyByShakeStopPhase, 0.0, 1.0, 0.01)
ADD_WIDGET_FLOAT_SLIDER("Shake Scale", fPlaneFlyByShakeScale, 0.0, 10.0, 0.01)
STOP_WIDGET_GROUP()*/
START_WIDGET_GROUP("Engine Explosion PTFX")
ADD_WIDGET_VECTOR_SLIDER("Offset", vPlaneEngineExplosionOffset, -10.0, 10.0, 0.1)
ADD_WIDGET_VECTOR_SLIDER("Rotation", vPlaneEngineExplosionRot, -360.0, 360.0, 1.0)
ADD_WIDGET_FLOAT_SLIDER("Scale", fPlaneEngineExplosionScale, 0.0, 10.0, 0.1)
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("Plane To Bike")
START_WIDGET_GROUP("Plane Recording")
ADD_WIDGET_FLOAT_SLIDER("Plane Recording Playback Time", fBB_SOL_JETRecordingTime, 0.0, 999999.0, 100.0)
ADD_WIDGET_FLOAT_SLIDER("Plane Recording Playback Speed", fBB_SOL_JETRecordingSpeed, 0.0, 5.0, 0.1)
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("Bike Recording")
ADD_WIDGET_FLOAT_SLIDER("Bike Recording Playback Time", fDGBFReadyRecordingTime, 0.0, 999999.0, 100.0)
STOP_WIDGET_GROUP()
ADD_WIDGET_INT_SLIDER("Give Player Control Back Delay", iBikeRecordingStoppedDelay, 0, 999999, 100)
ADD_WIDGET_INT_SLIDER("Trevor Look At Plane Delay", iTrevorLookAtPlaneDelay, 0, 999999, 100)
//ADD_WIDGET_INT_SLIDER("Trevor Look At Plane Duration", iTrevorLookAtPlaneDuration, 0, 999999, 100)
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
CLEAR_CURRENT_WIDGET_GROUP(wgidWidget)
ENDPROC
#ENDIF
FUNC BOOL IS_ENTITY_ALIVE(ENTITY_INDEX mEntity)
IF DOES_ENTITY_EXIST(mEntity)
IF NOT IS_ENTITY_DEAD(mEntity)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_PLAYER_TRYING_TO_DRIVE()
//CDEBUG3LN(DEBUG_MISSION, "IS_PLAYER_TRYING_TO_DRIVE")
INT iLX, iLY, iRX, iRY
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS_UNBOUND(iLX, iLY, iRX, iRY)
IF iLX > 0.5
OR iLX < -0.5
OR iLY > 0.5
OR iLY < -0.5
RETURN TRUE
ENDIF
IF IS_DISABLED_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_ACCELERATE)
OR IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_VEH_ACCELERATE)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
INT iSwitchTime
INT iTransitionTime
BOOL bDonePushIn
FUNC BOOL HANDLE_PLANE_SHOT_SWITCH_CAM(SWITCH_CAM_STRUCT &thisSwitchCam1, SWITCH_CAM_STRUCT &thisSwitchCam2)
//CDEBUG3LN(DEBUG_MISSION, "HANDLE_PLANE_SHOT_SWITCH_CAM")
INT iCurrentNode
FLOAT fCamPhase
SWITCH eSwitchCamState
CASE SWITCH_CAM_IDLE
//CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_IDLE")
BREAK
CASE SWITCH_CAM_START_SPLINE1
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_START_SPLINE1")
SET_GAME_PAUSES_FOR_STREAMING(FALSE)
DESTROY_ALL_CAMS()
SETUP_SPLINE_CAM_NODE_ARRAY_PLANE_SHOT_SCENE(thisSwitchCam1, vehTitan)
CREATE_SPLINE_CAM(thisSwitchCam1)
//recording starts here. Need to pause until recording is started
SET_CAM_SPLINE_NODE_EXTRA_FLAGS(thisSwitchCam1.ciSpline, iDGTitanCrashRecording2StartNode + 1, CAM_SPLINE_NODE_FORCE_PAUSE)
SET_CAM_ACTIVE(thisSwitchCam1.ciSpline, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
SET_WIDESCREEN_BORDERS(TRUE, 500)
//Start plane recording "DGTitanEntry"
IF DOES_ENTITY_EXIST(vehTitan)
IF NOT IS_ENTITY_DEAD(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
CDEBUG3LN(DEBUG_MISSION, "Starting DGTitanEntry 1 Recording...")
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
STOP_PLAYBACK_RECORDED_VEHICLE(vehTitan)
ENDIF
START_PLAYBACK_RECORDED_VEHICLE(vehTitan, 294, "DGTitanEntry")
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, fDGTitanEntryRecording1Time)
SET_PLAYBACK_SPEED(vehTitan, fDGTitanEntryRecording1Speed)
FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehTitan)
ENDIF
ENDIF
ENDIF
bDGTitanCrashRecording2Started = FALSE
bTrevorLookAtPlaneStarted = FALSE
bPlaneSceneFX1Started = FALSE
bPlaneSceneFX2Started = FALSE
bWooshStarted = FALSE
bWooshStopped = FALSE
bDonePushIn = FALSE
eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE1
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE1")
FALLTHRU
CASE SWITCH_CAM_PLAYING_SPLINE1
//CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE1")
IF IS_CAM_ACTIVE(thisSwitchCam1.ciSpline)
iCurrentNode = iCurrentNode
iCurrentNode = UPDATE_SPLINE_CAM(thisSwitchCam1)
fCamPhase = GET_CAM_SPLINE_PHASE(thisSwitchCam1.ciSpline)
/*IF NOT bPlaneFlyByShakeStarted
IF GET_CAM_SPLINE_PHASE(thisSwitchCam1.ciSpline) >= fPlaneFlyByShakeStartPhase
CDEBUG3LN(DEBUG_MISSION, "Starting Plane Fly By Shake...")
SHAKE_CAM(thisSwitchCam1.ciSpline, "SKY_DIVING_SHAKE", fPlaneFlyByShakeScale)
bPlaneFlyByShakeStarted = TRUE
ENDIF
ENDIF
IF NOT bPlaneFlyByShakeStopped
IF GET_CAM_SPLINE_PHASE(thisSwitchCam1.ciSpline) >= fPlaneFlyByShakeStopPhase
CDEBUG3LN(DEBUG_MISSION, "Stopped Plane Fly By Shake...")
STOP_CAM_SHAKING(thisSwitchCam1.ciSpline, TRUE)
bPlaneFlyByShakeStopped = TRUE
ENDIF
ENDIF*/
//Start plane recording "DGTitanCrash"
IF NOT bDGTitanCrashRecording2Started
IF IS_CAM_SPLINE_PAUSED(thisSwitchCam1.ciSpline)
SET_CAM_SPLINE_NODE_EXTRA_FLAGS(thisSwitchCam1.ciSpline, iDGTitanCrashRecording2StartNode + 1, CAM_SPLINE_NODE_FORCE_NONE)
IF DOES_ENTITY_EXIST(vehTitan)
IF NOT IS_ENTITY_DEAD(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
CDEBUG3LN(DEBUG_MISSION, "Starting DGTitanCrash 2 Recording...")
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
STOP_PLAYBACK_RECORDED_VEHICLE(vehTitan)
ENDIF
START_PLAYBACK_RECORDED_VEHICLE(vehTitan, iRecNo, "DGTitanCrash")
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, fDGTitanCrashRecording2Time)
SET_PLAYBACK_SPEED(vehTitan, fDGTitanCrashRecording2Speed)
FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehTitan)
ENDIF
ENDIF
ENDIF
bDGTitanCrashRecording2Started = TRUE
ENDIF
ENDIF
IF fCamPhase >= 1.0
SET_TIME_SCALE(1.0)
IF DOES_CAM_EXIST(thisSwitchCam1.ciSpline)
IF IS_CAM_ACTIVE(thisSwitchCam1.ciSpline)
DESTROY_CAM(thisSwitchCam1.ciSpline)
ENDIF
ENDIF
DESTROY_ALL_CAMS()
eSwitchCamState = SWITCH_CAM_START_SPLINE2
ELSE
RETURN FALSE
ENDIF
ELSE
RETURN FALSE
ENDIF
FALLTHRU
CASE SWITCH_CAM_START_SPLINE2
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_START_SPLINE2")
RESET_PUSH_IN(pushInData)
FILL_PUSH_IN_DATA(pushInData, vehBike, CHAR_TREVOR, 1.3, PUSH_IN_INTERP_TIME, PUSH_IN_CUT_TIME, PUSH_IN_POSTFX_TIME, PUSH_IN_SPEED_UP_TIME)
SET_PUSH_IN_DIRECTION_MODIFIER(pushInData, <<22,0,5>>)
//Activate a video recording from this point for 7 seconds into the past so it will show players final snipe and start of cutscene.
REPLAY_RECORD_BACK_FOR_TIME(8.0)
SETUP_SPLINE_CAM_NODE_ARRAY_PLANE_TO_BIKE(thisSwitchCam2, vehTitan, vehBike)
CREATE_SPLINE_CAM(thisSwitchCam2)
SET_CAM_ACTIVE(thisSwitchCam2.ciSpline, TRUE)
//Start bike recording
IF DOES_ENTITY_EXIST(vehBike)
IF NOT IS_ENTITY_DEAD(vehBike)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBike)
STOP_PLAYBACK_RECORDED_VEHICLE(vehBike)
ENDIF
START_PLAYBACK_RECORDED_VEHICLE(vehBike, iRecNo, "DGBFReady")
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehBike, fDGBFReadyRecordingTime)
FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehBike)
ENDIF
ENDIF
//Start plane recording "DGTitanCrash"
IF DOES_ENTITY_EXIST(vehTitan)
IF NOT IS_ENTITY_DEAD(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
CDEBUG3LN(DEBUG_MISSION, "Starting DGTitanCrash 3 Recording...")
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
STOP_PLAYBACK_RECORDED_VEHICLE(vehTitan)
ENDIF
START_PLAYBACK_RECORDED_VEHICLE(vehTitan, iRecNo, "DGTitanCrash")
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, fDGTitanCrashRecording3Time)
SET_PLAYBACK_SPEED(vehTitan, fDGTitanCrashRecording3Speed)
FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehTitan)
ENDIF
ENDIF
ENDIF
iTransitionTime = -1
iSwitchTime = GET_GAME_TIMER()
SETTIMERA(0)
eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE2
FALLTHRU
CASE SWITCH_CAM_PLAYING_SPLINE2
CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE2")
PRINTSTRING("time = ") PRINTINT(GET_GAME_TIMER() - iSwitchTime) PRINTNL()
IF IS_CAM_ACTIVE(thisSwitchCam2.ciSpline)
iCurrentNode = UPDATE_SPLINE_CAM(thisSwitchCam2)
fCamPhase = GET_CAM_SPLINE_PHASE(thisSwitchCam2.ciSpline)
IF NOT bWooshStarted
IF fCamPhase >= fWooshStartPhase
iWooshSoundID = GET_SOUND_ID()
PLAY_SOUND_FRONTEND(iWooshSoundID, "In", "SHORT_PLAYER_SWITCH_SOUND_SET")
bWooshStarted = TRUE
ENDIF
ENDIF
IF NOT bWooshStopped
IF fCamPhase >= fWooshStopPhase
STOP_SOUND(iWooshSoundID)
bWooshStopped = TRUE
ENDIF
ENDIF
// bug 2004541
IF NOT bPlaneSceneFX2Started
IF GET_GAME_TIMER() >= iSwitchTime + 1565
PRINTLN("Plane Scene FX2 Started...")
ANIMPOSTFX_PLAY("SwitchShortTrevorMid", 0, FALSE)
PLAY_SOUND_FRONTEND(-1, "Hit_In", "PLAYER_SWITCH_CUSTOM_SOUNDSET") // added in, switch SFX weren't playing before.
bPlaneSceneFX2Started = TRUE
ENDIF
ENDIF
//Trevor look at the plane
IF NOT bTrevorLookAtPlaneStarted
IF TIMERA() > iTrevorLookAtPlaneDelay
IF bPlaneShotSceneStreamLoaded = TRUE
STOP_STREAM()
bPlaneShotSceneStreamLoaded = FALSE
ENDIF
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
// CLEAR_PED_TASKS(PLAYER_PED_ID())
TASK_LOOK_AT_COORD(PLAYER_PED_ID(), (<<-393, 1223, 329>>), 2000, SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH) //iTrevorLookAtPlaneDuration
PRINTSTRING("TASK_LOOK_AT_COORD being triggered") PRINTNL()
ENDIF
ENDIF
TRIGGER_MUSIC_EVENT("SOL1_FRANKLIN_STARTS")
PRINTSTRING("SOL1_FRANKLIN_STARTS being triggered") PRINTNL()
bTrevorLookAtPlaneStarted = TRUE
ENDIF
ENDIF
//FX
IF NOT bPlaneSceneFX1Started
IF fCamPhase >= fPlanceSceneFX1StartPhase
PRINTLN("Plane Scene FX1 Started...")
ANIMPOSTFX_PLAY("SwitchShortMichaelIn", 0, FALSE)
// url:bugstar:2057569
PLAY_SOUND_FRONTEND(-1,"Hit_Out","PLAYER_SWITCH_CUSTOM_SOUNDSET")
iTransitionTime = GET_GAME_TIMER() + 200
bPlaneSceneFX1Started = TRUE
ENDIF
ENDIF
// url:bugstar:2057569
IF iTransitionTime != -1
AND GET_GAME_TIMER() >= iTransitionTime
PRINTLN("Transition SFX triggered...")
PLAY_SOUND_FRONTEND(-1,"Short_Transition_In","PLAYER_SWITCH_CUSTOM_SOUNDSET")
iTransitionTime = -1
ENDIF
// bug 2004541
// IF NOT bPlaneSceneFX2Started
// IF fCamPhase >= fPlanceSceneFX2StartPhase
// CDEBUG3LN(DEBUG_MISSION, "Plane Scene FX2 Started...")
// ANIMPOSTFX_PLAY("SwitchShortTrevorMid", 0, FALSE)
// bPlaneSceneFX2Started = TRUE
// ENDIF
// ENDIF
IF fCamPhase >= 1.0
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_BIKE) <> CAM_VIEW_MODE_FIRST_PERSON
bDonePushIn = TRUE
ELSE
bDonePushIn = HANDLE_PUSH_IN(pushInData, TRUE, TRUE, TRUE, FALSE, FALSE)
ENDIF
IF bDonePushIn
SET_TIME_SCALE(1.0)
IF DOES_CAM_EXIST(thisSwitchCam2.ciSpline)
IF IS_CAM_ACTIVE(thisSwitchCam2.ciSpline)
DESTROY_CAM(thisSwitchCam2.ciSpline)
ENDIF
ENDIF
DESTROY_ALL_CAMS()
RENDER_SCRIPT_CAMS(FALSE, FALSE)
STOP_SOUND(iWooshSoundID)
//Start plane recording "BB_SOL_JET"
IF DOES_ENTITY_EXIST(vehTitan)
IF NOT IS_ENTITY_DEAD(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
CDEBUG3LN(DEBUG_MISSION, "Starting BB_SOL_JET Recording...")
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
STOP_PLAYBACK_RECORDED_VEHICLE(vehTitan)
ENDIF
START_PLAYBACK_RECORDED_VEHICLE(vehTitan, 1, "BB_SOL_JET")
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, fBB_SOL_JETRecordingTime)
SET_PLAYBACK_SPEED(vehTitan, fBB_SOL_JETRecordingSpeed)
//FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehTitan)
REMOVE_VEHICLE_RECORDING(iRecNo, "DGTitanCrash")
ENDIF
ENDIF
ENDIF
// IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
// IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
// TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
// ENDIF
// ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_FACIAL_IDLE_ANIM_OVERRIDE(PLAYER_PED_ID())
ENDIF
REMOVE_ANIM_DICT(strAnimDictCamShake)
DISPLAY_HUD(TRUE)
DISPLAY_RADAR(TRUE)
SET_WIDESCREEN_BORDERS(FALSE, 500)
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
eSwitchCamState = SWITCH_CAM_IDLE
RETURN TRUE
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
//PURPOSE: Sets values for variables that cannot be set during creation
PROC SetupArrays()
iStageSection = 0
iMiniCutStage = 0
#IF IS_DEBUG_BUILD
SkipMenuStruct[0].sTxtLabel = "Initialise Mission"
SkipMenuStruct[1].sTxtLabel = "Stage: Drive to Observatory"
SkipMenuStruct[2].sTxtLabel = "Stage: Shoot Down Plane"
SkipMenuStruct[3].sTxtLabel = "Cutscene: Plane Starts Descent"
SkipMenuStruct[4].sTxtLabel = "Stage: Chase Plane"
SkipMenuStruct[5].sTxtLabel = "Stage: Kill Passengers"
SkipMenuStruct[6].sTxtLabel = "CUTSCENE - Plane crash"
SkipMenuStruct[7].sTxtLabel = "Stage: Destroy sniper"
SkipMenuStruct[8].sTxtLabel = "CUTSCENE - End"
SkipMenuStruct[9].sTxtLabel = "Passed Mission"
#ENDIF
ENDPROC
//PURPOSE: Requests resources to load before checkpoint script can start
PROC doCheckpointRequestLoad
ENDPROC
//PURPOSE: Returns true if all requested resources have loaded before checkpoint script can start
FUNC BOOL hasCheckpointRequestLoaded
RETURN TRUE
ENDFUNC
// CUTSCENE
//PURPOSE: Moves a camera that's attached to a vehicle between Init and Dest, for as long as duration
PROC doChaseCam( ENTITY_INDEX entTarget, ENTITY_INDEX entChaser,
VECTOR camInitCoord, VECTOR camInitLookAt, FLOAT camInitFOV,
VECTOR camDestCoord, VECTOR camDestLookAt, FLOAT camDestFOV,
INT duration)
IF NOT IS_ENTITY_DEAD(entTarget)
AND NOT IS_ENTITY_DEAD(entChaser)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DETACH_CAM(camInit)
STOP_CAM_POINTING(camInit)
ATTACH_CAM_TO_ENTITY(camInit, entTarget, camInitCoord)
POINT_CAM_AT_ENTITY(camInit, entTarget, camInitLookAt)
SET_CAM_FOV(camInit, camInitFOV)
SET_CAM_ACTIVE(camDest, FALSE)
SET_CAM_ACTIVE(camInit, TRUE)
DETACH_CAM(camDest)
STOP_CAM_POINTING(camDest)
ATTACH_CAM_TO_ENTITY(camDest, entTarget, camDestCoord)
POINT_CAM_AT_ENTITY(camDest, entChaser, camDestLookAt)
SET_CAM_FOV(camDest, camDestFOV)
SET_CAM_ACTIVE(camDest, TRUE)
SET_CAM_ACTIVE(camInit, TRUE)
SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, duration, GRAPH_TYPE_SIN_ACCEL_DECEL, GRAPH_TYPE_SIN_ACCEL_DECEL)
ENDIF
ENDPROC
// TIDY UP
PROC TidyUpPed(PED_INDEX pedTidy, BOOL bImmediately = FALSE)
IF DOES_ENTITY_EXIST(pedTidy)
IF bImmediately
/*IF NOT IS_ENTITY_DEAD(pedTidy)
IF IS_ENTITY_ATTACHED(pedTidy)
DETACH_ENTITY(pedTidy, FALSE)
ENDIF
ENDIF*/
IF NOT IS_ENTITY_DEAD(pedTidy)
SET_ENTITY_AS_MISSION_ENTITY(pedTidy)
ENDIF
DELETE_PED(pedTidy)
ELSE
SET_PED_AS_NO_LONGER_NEEDED(pedTidy)
ENDIF
ENDIF
ENDPROC
PROC TidyUpVehicle(VEHICLE_INDEX vehTidy, BOOL bImmediately = FALSE)
IF DOES_ENTITY_EXIST(vehTidy)
IF bImmediately
IF NOT IS_ENTITY_DEAD(vehTidy)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehTidy)
SET_ENTITY_COORDS(PLAYER_PED_ID(), GET_ENTITY_COORDS(vehTidy) + <<2,0,0>>)
ENDIF
ENDIF
ENDIF
IF NOT IS_ENTITY_DEAD(vehTidy)
IF IS_ENTITY_ATTACHED(vehTidy)
DETACH_ENTITY(vehTidy, FALSE)
ENDIF
ENDIF
SET_ENTITY_AS_MISSION_ENTITY(vehTidy)
DELETE_VEHICLE(vehTidy)
ELSE
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehTidy)
ENDIF
ENDIF
ENDPROC
PROC TidyUpObject(OBJECT_INDEX objTidy, BOOL bImmediately = FALSE)
IF DOES_ENTITY_EXIST(objTidy)
IF bImmediately
IF NOT IS_ENTITY_DEAD(objTidy)
IF IS_ENTITY_ATTACHED(objTidy)
DETACH_ENTITY(objTidy, FALSE)
ENDIF
ENDIF
SET_ENTITY_AS_MISSION_ENTITY(objTidy)
DELETE_OBJECT(objTidy)
ELSE
SET_OBJECT_AS_NO_LONGER_NEEDED(objTidy)
ENDIF
ENDIF
ENDPROC
// CLEANUP PROCEDURES
//Removes all blips
PROC REMOVE_BLIPS()
IF DOES_BLIP_EXIST(blipObj)
REMOVE_BLIP(blipObj)
ENDIF
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
IF DOES_BLIP_EXIST(bikeBlip)
REMOVE_BLIP(bikeBlip)
ENDIF
IF DOES_BLIP_EXIST(BlipTrevor)
REMOVE_BLIP(BlipTrevor)
ENDIF
IF DOES_BLIP_EXIST(BlipMartinHouse)
REMOVE_BLIP(BlipMartinHouse)
ENDIF
IF DOES_BLIP_EXIST(BlipSniperVan)
REMOVE_BLIP(BlipSniperVan)
ENDIF
IF DOES_BLIP_EXIST(endGuyBlip[0])
REMOVE_BLIP(endGuyBlip[0])
ENDIF
IF DOES_BLIP_EXIST(endGuyBlip[1])
REMOVE_BLIP(endGuyBlip[1])
ENDIF
ENDPROC
//PURPOSE: Stops dispatch types from spawning.
PROC ALLOW_DISPATCH(DISPATCH_TYPE dispatchType, BOOL bAllow)
BLOCK_DISPATCH_SERVICE_RESOURCE_CREATION(dispatchType, (NOT bAllow))
ENABLE_DISPATCH_SERVICE(dispatchType, bAllow)
ENDPROC
//PURPOSE: Deletes or removes all elements of the script
PROC MissionTidyUp()
#IF IS_DEBUG_BUILD
IF NOT HAS_CUTSCENE_FINISHED()
STOP_CUTSCENE()
WHILE NOT HAS_CUTSCENE_FINISHED()
WAIT(0)
PRINTSTRING("SOLOMON1_WAITING_32") PRINTNL()
ENDWHILE
ENDIF
#ENDIF
SET_INTERIOR_CAPPED_ON_EXIT(INTERIOR_V_RANCH, TRUE)
SET_PLAYER_PED_DATA_IN_CUTSCENES()
SET_AUDIO_FLAG("AllowScriptedSpeechInSlowMo", false)
//STOP the audio scene for chasing the plane
IF PlaneOnfireSoundStopped = FALSE
STOP_SOUND(PlaneonfireSoundID)
PlaneOnfireSoundStopped = TRUE
ENDIF
DISABLE_CHEAT(CHEAT_TYPE_SPAWN_VEHICLE, FALSE)
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1367.5, 1122.5, 111.4>>, <<1377.8, 1138.7, 117.5>>, TRUE, TRUE)
SET_MAX_WANTED_LEVEL(5)
//Return vehicle generators to normal
DISABLE_VEHICLE_GEN_ON_MISSION(FALSE)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_FACIAL_IDLE_ANIM_OVERRIDE(PLAYER_PED_ID())
SET_PED_HELMET(PLAYER_PED_ID(), TRUE)
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_DRIVE_TO_OBSERVATORY")
STOP_AUDIO_SCENE("MARTIN_1_DRIVE_TO_OBSERVATORY")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_SNIPER_CAMERA")
STOP_AUDIO_SCENE("MARTIN_1_SNIPER_CAMERA")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_PLANE_CHASE_SCENE")
STOP_AUDIO_SCENE("MARTIN_1_PLANE_CHASE_SCENE")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_MAIN")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_MAIN")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_JUMP_01")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_JUMP_01")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_TRAIN_SCENE")
STOP_AUDIO_SCENE("MARTIN_1_TRAIN_SCENE")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_JUMP_TRAIN")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_JUMP_TRAIN")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_DUMP_TRUCK")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_DUMP_TRUCK")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_PLANE_CRASH")
STOP_AUDIO_SCENE("MARTIN_1_PLANE_CRASH")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_DRIVE_BACK")
STOP_AUDIO_SCENE("MARTIN_1_DRIVE_BACK")
ENDIF
IF DOES_BLIP_EXIST(endGuyBlip[0])
REMOVE_BLIP(endGuyBlip[0])
ENDIF
IF DOES_BLIP_EXIST(endGuyBlip[1])
REMOVE_BLIP(endGuyBlip[1])
ENDIF
IF DOES_BLIP_EXIST(blipObj)
REMOVE_BLIP(blipObj)
ENDIF
STOP_GAMEPLAY_HINT()
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
SET_TIME_SCALE(1.0)
SET_ROADS_IN_AREA(<<105.7, 1683, 230>>, <<-11.8, 1818.4, 207>>, TRUE)
SET_ROADS_IN_AREA(<<-9.5, 1758.3, 235.3>>, <<134.5, 1638.3, 222.5>>, TRUE)
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<2299.7, 4870.2, 39>>, <<2307.0, 4894.2, 45>>, TRUE)
SET_CINEMATIC_BUTTON_ACTIVE(TRUE)
SET_STUNT_JUMPS_CAN_TRIGGER(TRUE)
SET_GAME_PAUSES_FOR_STREAMING(TRUE)
REMOVE_BLIPS()
CANCEL_MUSIC_EVENT("SOL1_START")
CANCEL_MUSIC_EVENT("SOL1_VEH")
CANCEL_MUSIC_EVENT("SOL1_SNIPER_READY")
CANCEL_MUSIC_EVENT("SOL1_APP_ACTIVE")
CANCEL_MUSIC_EVENT("SOL1_ENGINE_HIT")
CANCEL_MUSIC_EVENT("SOL1_FRANKLIN_STARTS")
CANCEL_MUSIC_EVENT("SOL1_AIR_TRAFFIC")
CANCEL_MUSIC_EVENT("SOL1_BUS_JUMP")
CANCEL_MUSIC_EVENT("SOL1_TRAIN_JUMP")
CANCEL_MUSIC_EVENT("SOL1_ALMOST_CRASHED")
CANCEL_MUSIC_EVENT("SOL1_DRIVE_TO_OBS_RT")
CANCEL_MUSIC_EVENT("SOL1_SHOOT_PLANE_RT")
CANCEL_MUSIC_EVENT("SOL1_CHASE_PLANE_RT")
IF IS_DOOR_REGISTERED_WITH_SYSTEM(iLeftDoor)
REMOVE_DOOR_FROM_SYSTEM(iLeftDoor)
ENDIF
IF IS_DOOR_REGISTERED_WITH_SYSTEM(iRightDoor)
REMOVE_DOOR_FROM_SYSTEM(iRightDoor)
ENDIF
REMOVE_SCENARIO_BLOCKING_AREA(AirstripBlockingArea)
REMOVE_SCENARIO_BLOCKING_AREA(CropFieldBlockingArea1)
REMOVE_SCENARIO_BLOCKING_AREA(PoliceBikeBlockingArea)
REMOVE_SCENARIO_BLOCKING_AREA(BarnBlockingArea)
REMOVE_SCENARIO_BLOCKING_AREA(SeatNextToVanBlockingArea)
REMOVE_SCENARIO_BLOCKING_AREA(MartinHouseMainScenarioBlockingArea)
REMOVE_SCENARIO_BLOCKING_AREA(PlaneBlockingArea)
CLEANUP_REMOTE_SNIPER(sSniperData)
doEndCutscene()
STOP_GAMEPLAY_CAM_SHAKING(TRUE)
SET_WIDESCREEN_BORDERS(FALSE, 0)
IF IS_PLAYER_PLAYING(PLAYER_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDIF
//re-enable all the police for the chase section
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE, TRUE)
ALLOW_DISPATCH(DT_POLICE_HELICOPTER, TRUE)
ALLOW_DISPATCH(DT_POLICE_VEHICLE_REQUEST, TRUE)
ALLOW_DISPATCH(DT_POLICE_ROAD_BLOCK, TRUE)
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, TRUE)
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, TRUE)
ALLOW_DISPATCH(DT_SWAT_AUTOMOBILE, TRUE)
ALLOW_DISPATCH(DT_SWAT_HELICOPTER, TRUE)
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE)
SET_MAX_WANTED_LEVEL(5)
SET_RANDOM_TRAINS(TRUE)
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling SET_RANDOM_TRAINS(TRUE).")
g_bDisableNoirLensEffect = FALSE
ENDPROC
PROC MissionCleanup()
MissionTidyUp()
UNREGISTER_SCRIPT_WITH_AUDIO()
TERMINATE_THIS_THREAD()
ENDPROC
//PURPOSE: Performs necessary actions for player completing the mission, then calls cleanup
PROC MissionPassed()
fadeInAndWait()
//B* 1831413: Disable player switch if on a replay
IF NOT IS_REPEAT_PLAY_ACTIVE()
Trigger_Specific_Switch_And_Wait(PR_SCENE_F_WALKCHOP_a)
ENDIF
AWARD_ACHIEVEMENT_FOR_MISSION(ACH02) // [AG] - A Fair Day's Pay
TRIGGER_MUSIC_EVENT("SOL1_END")
Mission_Flow_Mission_Passed()
//Display generic pass text - "Mission Passed"
// runGodText(Asset.godPass, TRUE, TRUE, FALSE)
// Trigger_Specific_Switch_And_Wait(PR_SCENE_F_TAUNT)
MissionCleanup()
ENDPROC
//PURPOSE: Performs necessary actions for player failing the mission, then calls cleanup
PROC MissionFailed()
// check if we need to respawn the player in a different position,
// if so call MISSION_FLOW_SET_FAIL_WARP_LOCATION() + SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION here
MissionCleanup() // must only take 1 frame and terminate the thread
ENDPROC
/// PURPOSE:
/// Sets bMissionFailed to be True so that we start fading for screen to fade out
/// Sets the fail reason string and calls the flow mission failed function.
/// This tells the replay controller to start displaying the fail reason + fading
/// (If bMissionFailed is already true, this function doesn't do anything- as we're already waiting for fail fade to finish)
/// PARAMS:
/// sFailReason - text label of the fail reason
PROC SetMissionFailed(String sFailReason)
IF bMissionFailed = FALSE
//Give pilot task to fly plane if he is still in the air
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF DOES_ENTITY_EXIST(pedPilot)
IF NOT IS_PED_INJURED(pedPilot)
IF IS_PED_IN_VEHICLE(pedPilot, vehTitan)
IF IS_ENTITY_IN_AIR(vehTitan)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehTitan, FALSE)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
STOP_PLAYBACK_RECORDED_VEHICLE(vehTitan)
ENDIF
CLEAR_PED_TASKS(pedPilot)
TASK_PLANE_MISSION(pedPilot, vehTitan, NULL, NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, <<0,0,100>>), MISSION_GOTO, 30, 1, GET_ENTITY_HEADING(vehTitan), ROUND(GET_ENTITY_HEIGHT_ABOVE_GROUND(vehTitan)), ROUND(GET_ENTITY_HEIGHT_ABOVE_GROUND(vehTitan)))
SET_PED_KEEP_TASK(pedPilot, TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
FailReason = sFailReason
KILL_ANY_CONVERSATION()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CLEAR_PRINTS()
TRIGGER_MUSIC_EVENT("SOL1_FAIL")
MISSION_FLOW_MISSION_FAILED_WITH_REASON(FailReason)
bMissionFailed = TRUE
ENDIF
ENDPROC
// FAIL PROCEDURES
//PURPOSE: Checks if the user has failed a level stage
PROC FailCheck()
SWITCH eMissionStage
CASE STAGE_DRIVE_TO_OBSERVATORY
//Fail if player tries to get in a taxi at this stage in the mission
// IF iStageSection > 2
// IF playerHasTakenTaxi = FALSE
// IF IS_PED_IN_ANY_TAXI(PLAYER_PED_ID())
// SetMissionFailed("BFFLOST") //Trevor lost the plane.
// ENDIF
// ENDIF
// ENDIF
//Fail if Trev dies
IF DOES_ENTITY_EXIST(CSTrev)
IF IS_PED_INJURED(CSTrev)
SetMissionFailed("M1_FAIL3") //~s~Trevor died.
ENDIF
ENDIF
//Fail if Trevors car is destroyed.
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF NOT IS_VEHICLE_DRIVEABLE(TrevCutsceneCar, TRUE)
SetMissionFailed("M1_FAIL5") //~s~Trevor's car was destroyed.
ENDIF
ENDIF
//Fail if the van is destroyed
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_ENTITY_ON_FIRE(SniperVan)
SetMissionFailed("M1_FAIL1") //~s~The remote sniper was destroyed.
ENDIF
IF NOT IS_VEHICLE_DRIVEABLE(SniperVan)
FREEZE_ENTITY_POSITION(SniperVan, FALSE)
SetMissionFailed("M1_FAIL1") //~s~The remote sniper was destroyed.
ENDIF
ENDIF
BREAK
CASE STAGE_SHOOT_PLANE
//Fail if player takes too long to snipe the plane
IF bMissionFailedToSlow = FALSE
IF bStageSetup = TRUE
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF NOT bDoRightEngineCut
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
// PRINTSTRING("plane recording is at ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehTitan)) PRINTNL()
IF GET_TIME_POSITION_IN_RECORDING(vehTitan) > 33269
bMissionFailedToSlow = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF bMissionFailedToSlow = TRUE
SetMissionFailed("2SLOW") //~r~The plane got too close to the airport.
ENDIF
BREAK
CASE STAGE_CHASE_PLANE
//Fail if player gets too far away from the plane
IF bStageSetup = TRUE
IF NOT IS_ENTITY_DEAD(vehTitan)
AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
// PRINTSTRING("Distance between player and plane is ") PRINTFLOAT(GET_DISTANCE_BETWEEN_ENTITIES(vehTitan, PLAYER_PED_ID())) PRINTNL()
IF GET_DISTANCE_BETWEEN_ENTITIES(vehTitan, PLAYER_PED_ID()) > 750
SetMissionFailed("BFFLOST") //~r~You lost the target.
ENDIF
ENDIF
//If the van is destroyed
IF DOES_ENTITY_EXIST(SniperVan)
IF NOT IS_VEHICLE_DRIVEABLE(SniperVan)
FREEZE_ENTITY_POSITION(SniperVan, FALSE)
SetMissionFailed("M1_FAIL1") //~s~The remote sniper was destroyed.
ENDIF
ENDIF
//If michael is killed
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
IF IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
SetMissionFailed("M1_FAIL4") //~s~Michael died.
ENDIF
ENDIF
ENDIF
BREAK
CASE STAGE_KILL_PASSENGERS
IF bStageSetup = TRUE
//Fail if player gets too far away from the plane
IF DOES_ENTITY_EXIST(ObjTitan)
IF GET_DISTANCE_BETWEEN_ENTITIES(ObjTitan, PLAYER_PED_ID()) > 400
SetMissionFailed("BFFLOST") //~r~You lost the target.
ENDIF
ENDIF
ENDIF
BREAK
CASE STAGE_DESTROY_SNIPER
//Fail if you get too far from the van
IF iStageSection > 1
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SniperVan)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), SniperVan) > 300
SetMissionFailed("M1_FAIL2") //~s~Michael abandoned the van.
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
//Should be called every frame to ensure game fades out and fails.
IF bMissionFailed = TRUE
IF eMissionStage = STAGE_SHOOT_PLANE
// IF DOES_ENTITY_EXIST(SniperVan)
// IF IS_VEHICLE_DRIVEABLE(SniperVan)
// IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SniperVan)
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), SniperVan)
// ENDIF
// ENDIF
// ENDIF
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
// SET_REMOTE_SNIPER_ACTIVE(sSniperData,FALSE)
//
// CLEANUP_REMOTE_SNIPER(sSniperData)
// //Set the flag to stop drawing the sniper hud to the screen now.
// RemoteSniperNeedsUpdated = FALSE
ENDIF
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
SET_REMOTE_SNIPER_ACTIVE(sSniperData,FALSE)
CLEANUP_REMOTE_SNIPER(sSniperData)
//Set the flag to stop drawing the sniper hud to the screen now.
RemoteSniperNeedsUpdated = FALSE
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
IF DOES_ENTITY_EXIST(CSTrev)
DELETE_PED(CSTrev)
ENDIF
ENDIF
MissionFailed()
ENDIF
ENDIF
ENDPROC
// INITIALISING
// GENERAL
PROC ADD_ALL_PEDS_TO_DIALOGUE()
SWITCH eMissionStage
CASE STAGE_CUTSCENE_PLANE_DESCENT
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
IF DOES_ENTITY_EXIST(pedPilot)
ADD_PED_FOR_DIALOGUE(structConvoPeds, 4, pedPilot, "Solomon1Pilot")
ENDIF
//Null should be added for the Sol1Tower
ADD_PED_FOR_DIALOGUE(structConvoPeds, 5, NULL, "Sol1Tower")
BREAK
CASE STAGE_CHASE_PLANE
//Player should be added for Trev
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, PLAYER_PED_ID(), "TREVOR")
ENDIF
//Null should be added for Michael
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, NULL, "MICHAEL")
//pedPilot should be added for the pilot
IF DOES_ENTITY_EXIST(pedPilot)
ADD_PED_FOR_DIALOGUE(structConvoPeds, 4, pedPilot, "Solomon1Pilot")
ENDIF
//Null should be added for the Sol1Tower
ADD_PED_FOR_DIALOGUE(structConvoPeds, 5, NULL, "Sol1Tower")
BREAK
CASE STAGE_CUTSCENE_PLANE_CRASH
//Player should be added for Trev
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, PLAYER_PED_ID(), "TREVOR")
ENDIF
//Null should be added for Michael
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, NULL, "MICHAEL")
BREAK
CASE STAGE_DESTROY_SNIPER
//Player should be added for Michael
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ELSE
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], "MICHAEL")
ENDIF
ENDIF
ENDIF
//Null should be added for Trevor
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
BREAK
ENDSWITCH
ENDPROC
//#IF IS_DEBUG_BUILD
//PROC PRINT_VEHICLE_RECORD_TIME(VEHICLE_INDEX veh)
// IF IS_VEHICLE_DRIVEABLE(veh)
// IF IS_RECORDING_GOING_ON_FOR_VEHICLE(veh) AND bRecordingStarted = FALSE
// PRINTNL()PRINTNL()
// PRINTSTRING("VEH - START TIME:")PRINTFLOAT(fRecordingTime)PRINTNL()
// PRINTNL()PRINTNL()
// bRecordingStarted = TRUE
// ENDIF
// ENDIF
//ENDPROC
//#ENDIF
PROC RECORDING_TOOL()
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
fRecordingTime = GET_TIME_POSITION_IN_RECORDING(vehTitan)
PRINTFLOAT(fRecordingTime)PRINTNL()
ENDIF
IF bStartRecordingTool = FALSE
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
//START_PLAYBACK_RECORDED_VEHICLE(vehTarget,295,"Heli")
//SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTarget,0)
//SET_PLAYBACK_SPEED(vehTarget,1.0)
ENDIF
bStartRecordingTool = TRUE
ENDIF
IF bTriggerRecording[0] = FALSE
bTriggerRecording[0] = TRUE
ENDIF
//PRINT_VEHICLE_RECORD_TIME(vehFrontBodyguard)
//TRIGGER BACK BODYGUARD
ENDPROC
////DEBUG ONLY
//#IF IS_DEBUG_BUILD
//PROC RESTORE_PLAYER_POSITION()
//
// VECTOR vCurrentPosition
// FLOAT fHeading
//
// IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// IF IS_VEHICLE_DRIVEABLE(vehBike)
// IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehBike)
// IF doneGetBackOnBikeHelpText = FALSE
// CLEAR_HELP(TRUE)
// PRINT_HELP_FOREVER("BFHELPTXT9")
// //DEBUG ONLY Hold ~INPUT_COVER~ and press ~INPUT_HUD_SPECIAL~ to get back on bike.
// doneGetBackOnBikeHelpText = TRUE
// ENDIF
// ELSE
// IF doneGetBackOnBikeHelpText = TRUE
// CLEAR_HELP(TRUE)
// doneGetBackOnBikeHelpText = FALSE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//
// IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_COVER)
// IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_HUD_SPECIAL)
// vCurrentPosition = GET_ENTITY_COORDS(PLAYER_PED_ID())
// fHeading = GET_ENTITY_HEADING(vehTitan)
// SET_ENTITY_COORDS(vehBike, vCurrentPosition)
// SET_ENTITY_HEADING(vehBike, fHeading)
// SET_VEHICLE_ON_GROUND_PROPERLY(vehBike)
// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehBike)
// ENDIF
//
// ENDIF
//ENDPROC
//#ENDIF
//Infinite clips ftw beacause only noobs reload.
PROC INFINITE_AMMO_NO_RELOAD()
INT iAmmo
INT iMaxAmmo
GET_AMMO_IN_CLIP(PLAYER_PED_ID(),WEAPONTYPE_ASSAULTRIFLE,iAmmo)
iMaxAmmo = GET_MAX_AMMO_IN_CLIP(PLAYER_PED_ID(),WEAPONTYPE_ASSAULTRIFLE)
IF iAmmo < 2
SET_AMMO_IN_CLIP(PLAYER_PED_ID(),WEAPONTYPE_ASSAULTRIFLE,iMaxAmmo)
ENDIF
ENDPROC
FUNC BOOL HAS_TEXT_BEEN_TRIGGERED(MISSION_TEXT e_text)
IF bTextTriggered[ENUM_TO_INT(e_text)]
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC MARK_TEXT_AS_TRIGGERED(MISSION_TEXT e_text)
bTextTriggered[ENUM_TO_INT(e_text)] = TRUE
ENDPROC
PROC DIALOGUE()
IF S1_FMC1_CHAT_DONE = FALSE
IF fRecordingTime > 13662
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_FMC1", CONV_PRIORITY_MEDIUM)
//We're plugged in to the Air Traffic Control channel. Keep me updated.
//Okey doke.
TRIGGER_MUSIC_EVENT("SOL1_AIR_TRAFFIC")
S1_FMC1_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_OROAD_CHAT_DONE = FALSE
IF fRecordingTime > 23659
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
// IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-254.383347,1558.426514,327.312714>>, <<-289.239960,1495.801147,342.381317>>, 26.000000)
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-253.2, 1556.2, 335.9>>) < 10
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_OROAD", CONV_PRIORITY_MEDIUM)
PREPARE_MUSIC_EVENT("SOL1_BUS_JUMP")
//Plane ain't following the road - got to go cross-country.
//Got to take this off-road, if I'm staying with the plane.
S1_OROAD_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_JUMP1_CHAT_DONE = FALSE
IF fRecordingTime > 24701
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1.431795,1704.114014,217.402771>>, <<-89.146202,1637.338379,276.547119>>, 26.000000)
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_JUMP1", CONV_PRIORITY_MEDIUM)
//You think I can clear two lanes of traffic?
//There's a small jump coming up.
S1_JUMP1_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_FALL1_CHAT_DONE = FALSE
IF fRecordingTime > 30963
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_FALL1", CONV_PRIORITY_MEDIUM)
//This is flight November Niner Charlie Echo. Our engine number two has blown.
//Roger November Niner Charlie Echo. Fly heading two four zero. Say your souls on board.
S1_FALL1_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_FMC2_CHAT_DONE = FALSE
IF fRecordingTime > 37858
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehTitan) < 125
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_FMC2", CONV_PRIORITY_MEDIUM)
//The guy is fighting it, but he going down.
//Good. Stay on him. We need the black box.
S1_FMC2_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_FALL2_CHAT_DONE = FALSE
IF fRecordingTime > 40402
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_FALL2", CONV_PRIORITY_MEDIUM)
//Flight November Niner Charlie Echo. Say your souls on board?
//Three souls on board. Engine two totally lost. All hydraulics lost. All hydraulic systems are gone.
S1_FALL2_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_FALL3_CHAT_DONE = FALSE
IF fRecordingTime > 46889
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_FALL3", CONV_PRIORITY_MEDIUM)
//Roger November Niner Charlie Echo. Where are you putting her down?
//We're not going to make the runway. Going to have to ditch this son of a bitch and hope for the best.
S1_FALL3_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_FMC3_CHAT_DONE = FALSE
IF fRecordingTime > 53000
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehTitan) < 125
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_FMC3", CONV_PRIORITY_MEDIUM)
//How you doing out there. You still got him?
//I'm on him. He's passed the airfield. Landing ain't gonna be pretty.
S1_FMC3_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_FALL4_CHAT_DONE = FALSE
IF fRecordingTime > 60000
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_FALL4", CONV_PRIORITY_MEDIUM)
//Where are you putting it down? Can you make The Alamo Sea Air Field?
//Can't pull it round. Going to have to put it down in a field somewhere.
PREPARE_MUSIC_EVENT("SOL1_TRAIN_JUMP")
S1_FALL4_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_JUMP2_CHAT_DONE = FALSE
IF fRecordingTime > 71768
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1496.083618,3259.302246,34.684143>>, <<1526.860107,3337.125000,45.199547>>, 40.000000)
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_JUMP2", CONV_PRIORITY_MEDIUM)
//There's a small matter of having to jump a moving train.
//Can't go round the train, gotta go over it.
IF IS_VEHICLE_DRIVEABLE(vehTrain)
PLAY_SOUND_FROM_ENTITY(-1,"SUBWAY_TRAIN_HORNS_AIR_HORN",vehTrain)
ENDIF
S1_JUMP2_CHAT_DONE = TRUE
ENDIF
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1538.228516,3252.864746,34.075874>>, <<1526.860107,3337.125000,45.199547>>, 40.000000)
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_JUMP2", CONV_PRIORITY_MEDIUM)
//Fuck! I'm gonna hit this jump!
IF IS_VEHICLE_DRIVEABLE(vehTrain)
PLAY_SOUND_FROM_ENTITY(-1,"SUBWAY_TRAIN_HORNS_AIR_HORN",vehTrain)
ENDIF
S1_JUMP2_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_FALL5_CHAT_DONE = FALSE
IF fRecordingTime > 76555
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_FALL5", CONV_PRIORITY_MEDIUM)
//We have no hydraulic systems. No elevator control. Very little aileron control. Serious doubts of making a landing strip. Need to ditch.
//Roger November Niner Charlie Echo. Have you lost manual flight control systems? Pull your slats.
S1_FALL5_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_TRAILER_CHAT_DONE = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<1970, 3815, 34>>) < 60
AND fRecordingTime > 84000
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehTitan) < 125
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_TRAILER", CONV_PRIORITY_MEDIUM)
//Ron, you better be working!
//How's business, Ronald?
S1_TRAILER_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_FMC4_CHAT_DONE = FALSE
IF fRecordingTime > 90000
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehTitan) < 125
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_FMC4", CONV_PRIORITY_MEDIUM)
//Okay, this guy's going down any minute.
//Good. Let's hope he don't take out some poor farmer while he's at it.
//Only thing they farm out here is methamphetamine.
//Trevor Philips country.
//God, I miss it out here. You got to come stay sometime.
//You know what - I'm alright.
S1_FMC4_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_CLIFF_CHAT_DONE = FALSE
IF fRecordingTime > 103000
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_CLIFF", CONV_PRIORITY_MEDIUM)
//Losing altitude rapidly. I'm going to have to bring it down in dirt. God help us.
//Roger November Niner Charlie Echo. What is your status?
//God help us!
TRIGGER_MUSIC_EVENT("SOL1_ALMOST_CRASHED")
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_PLANE_CRASH")
START_AUDIO_SCENE("MARTIN_1_PLANE_CRASH")
ENDIF
S1_CLIFF_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF S1_FMC5_CHAT_DONE = FALSE
IF fRecordingTime > 117262
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_FMC5", CONV_PRIORITY_MEDIUM)
//They're in the dirt.
//Get the files, and if the cousin made it, take him out.
//Sure thing, but seriously bro - coming all the way out here, we gotta get paid.
//Just do the job, I'll get us paid down the road.
S1_FMC5_CHAT_DONE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
//PURPOSE: Handles the player looking at the plane at certain points in the chase.
PROC HANDLE_PLAYER_LOOKING_AT_PLANE()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF doneHeadLook[0] = FALSE
IF fRecordingTime > 17960
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), vehTitan, 3000, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
PRINTSTRING("TASK_LOOK_AT_ENTITY CALLED FOR PLAYER TO LOOK AT PLANE") PRINTNL()
doneHeadLook[0] = TRUE
ENDIF
ENDIF
IF doneHeadLook[1] = FALSE
IF fRecordingTime > 29010
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), vehTitan, 3000, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
PRINTSTRING("TASK_LOOK_AT_ENTITY CALLED FOR PLAYER TO LOOK AT PLANE") PRINTNL()
doneHeadLook[1] = TRUE
ENDIF
ENDIF
IF doneHeadLook[2] = FALSE
IF fRecordingTime > 55700
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), vehTitan, 3000, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
PRINTSTRING("TASK_LOOK_AT_ENTITY CALLED FOR PLAYER TO LOOK AT PLANE") PRINTNL()
doneHeadLook[2] = TRUE
ENDIF
ENDIF
IF doneHeadLook[3] = FALSE
IF fRecordingTime > 65565
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), vehTitan, 3000, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
PRINTSTRING("TASK_LOOK_AT_ENTITY CALLED FOR PLAYER TO LOOK AT PLANE") PRINTNL()
doneHeadLook[3] = TRUE
ENDIF
ENDIF
IF doneHeadLook[4] = FALSE
IF fRecordingTime > 104000
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), vehTitan, 3000, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
PRINTSTRING("TASK_LOOK_AT_ENTITY CALLED FOR PLAYER TO LOOK AT PLANE") PRINTNL()
doneHeadLook[4] = TRUE
ENDIF
ENDIF
IF doneHeadLook[5] = FALSE
IF fRecordingTime > 110000
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), vehTitan, 3000, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
PRINTSTRING("TASK_LOOK_AT_ENTITY CALLED FOR PLAYER TO LOOK AT PLANE") PRINTNL()
doneHeadLook[5] = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
//PURPOSE: Handles all the set piece vehicles during the chase
PROC SET_PIECES()
//Set peice train for jump over train tracks
IF trainModelsRequested = FALSE
IF fRecordingTime > 60000
REQUEST_MODEL(FREIGHT)
REQUEST_MODEL(FREIGHTCAR)
REQUEST_MODEL(FREIGHTCONT2)
trainModelsRequested = TRUE
ENDIF
ENDIF
IF trainModelsRequested = TRUE
IF bSetPiece[0] = FALSE
IF fRecordingTime > 65173
REQUEST_MODEL(FREIGHT)
REQUEST_MODEL(FREIGHTCAR)
REQUEST_MODEL(FREIGHTCONT2)
IF HAS_MODEL_LOADED(FREIGHT)
AND HAS_MODEL_LOADED(FREIGHTCAR)
AND HAS_MODEL_LOADED(FREIGHTCONT2)
vehTrain = CREATE_MISSION_TRAIN(22, <<1800.49, 3504.19, 37.9>>, TRUE)
PRINTSTRING("TRAIN TRIGGERED")PRINTNL()
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_TRAIN_SCENE")
START_AUDIO_SCENE("MARTIN_1_TRAIN_SCENE")
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(FREIGHT)
SET_MODEL_AS_NO_LONGER_NEEDED(FREIGHTCAR)
SET_MODEL_AS_NO_LONGER_NEEDED(FREIGHTCONT2)
bSetPiece[0] = TRUE
ELSE
PRINTSTRING("Waiting on models loading for the train") PRINTNL()
ENDIF
ENDIF
ELSE
IF DOES_ENTITY_EXIST(vehTrain)
IF NOT IS_ENTITY_DEAD(vehTrain)
SET_TRAIN_SPEED(vehTrain, fPlaybackSpeed*33.3)
IF fRecordingTime > 90000
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehTrain) > 250
AND NOT IS_ENTITY_ON_SCREEN(vehTrain)
SET_MISSION_TRAIN_AS_NO_LONGER_NEEDED(vehTrain)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Set peice truck for bottom of hill
IF g_bSetPieceCrossoverHasBeenSeen = FALSE
IF HaulerRequested = FALSE
IF fRecordingTime > 21000
REQUEST_MODEL(HAULER)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_TRK")
HaulerRequested = TRUE
ENDIF
ENDIF
IF HaulerRequested = TRUE
IF bSetPiece[1] = FALSE
REQUEST_MODEL(HAULER)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_TRK")
IF HAS_MODEL_LOADED(HAULER)
AND HAS_MODEL_LOADED(A_M_Y_BUSINESS_01)
AND HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNo, "BB_SOL_TRK")
IF fRecordingTime > 26640
vehTruck = CREATE_VEHICLE(HAULER, << 716.3976, 2266.2209, 49.7731 >>, 31.2793)
START_PLAYBACK_RECORDED_VEHICLE(vehTruck, iRecNo, "BB_SOL_TRK")
PRINTSTRING("TRUCK TRIGGERED")PRINTNL()
ADD_ENTITY_TO_AUDIO_MIX_GROUP(vehTruck, "MARTIN_1_PASSING_TRUCKS_GROUP")
IF IS_VEHICLE_DRIVEABLE(vehTruck)
RandomDriver[0] = CREATE_PED_INSIDE_VEHICLE(vehTruck, PEDTYPE_MISSION, A_M_Y_BUSINESS_01)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(RandomDriver[0], TRUE)
SET_PED_KEEP_TASK(RandomDriver[0], TRUE)
SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[0])
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(HAULER)
bSetPiece[1] = TRUE
ENDIF
ELSE
PRINTSTRING("Waiting for Hauler model to load") PRINTNL()
ENDIF
ELSE
IF DOES_ENTITY_EXIST(vehTruck)
IF IS_VEHICLE_DRIVEABLE(vehTruck)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTruck)
IF GET_TIME_POSITION_IN_RECORDING(vehTruck) > 15500
g_bSetPieceCrossoverHasBeenSeen = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(vehTruck)
IF IS_VEHICLE_DRIVEABLE(vehTruck)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTruck)
// PRINTSTRING("Truck playback time is ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehTruck)) PRINTNL()
SET_PLAYBACK_SPEED(vehTruck, fPlaybackSpeed)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehBike)
IF IS_ENTITY_TOUCHING_ENTITY(vehTruck, vehBike)
STOP_PLAYBACK_RECORDED_VEHICLE(vehTruck)
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF bSetPieceUnloaded[1] = FALSE
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_TRK")
bSetPieceUnloaded[1] = TRUE
ENDIF
IF GET_DISTANCE_BETWEEN_ENTITIES(vehTruck, PLAYER_PED_ID()) > 150
AND NOT IS_ENTITY_ON_SCREEN(vehTruck)
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vehTruck)
IF DOES_ENTITY_EXIST(RandomDriver[0])
DELETE_PED(RandomDriver[0])
ENDIF
DELETE_VEHICLE(vehTruck)
ENDIF
ENDIF
ENDIF
ENDIF
//Set peice van for bottom of hill
IF PatriotRequested = FALSE
IF fRecordingTime > 29000
REQUEST_MODEL(PATRIOT)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_VAN")
PatriotRequested = TRUE
ENDIF
ENDIF
IF PatriotRequested = TRUE
IF bSetPiece[2] = FALSE
REQUEST_MODEL(PATRIOT)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_VAN")
IF HAS_MODEL_LOADED(PATRIOT)
AND HAS_MODEL_LOADED(A_M_Y_BUSINESS_01)
AND HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNo, "BB_SOL_VAN")
IF fRecordingTime > 34302
vehVan = CREATE_VEHICLE(PATRIOT, << 381.9736, 2468.7913, 45.1115 >>, 264.3281)
START_PLAYBACK_RECORDED_VEHICLE(vehVan, iRecNo, "BB_SOL_VAN")
ADD_ENTITY_TO_AUDIO_MIX_GROUP(vehVan, "MARTIN_1_PASSING_TRUCKS_GROUP")
IF IS_VEHICLE_DRIVEABLE(vehVan)
RandomDriver[1] = CREATE_PED_INSIDE_VEHICLE(vehVan, PEDTYPE_MISSION, A_M_Y_BUSINESS_01)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(RandomDriver[1], TRUE)
SET_PED_KEEP_TASK(RandomDriver[1], TRUE)
SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[1])
ENDIF
PRINTSTRING("VAN TRIGGERED")PRINTNL()
SET_MODEL_AS_NO_LONGER_NEEDED(PATRIOT)
bSetPiece[2] = TRUE
ENDIF
ELSE
PRINTSTRING("Waiting for Patriot model to load") PRINTNL()
ENDIF
ELSE
IF DOES_ENTITY_EXIST(vehVan)
IF IS_VEHICLE_DRIVEABLE(vehVan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehVan)
// PRINTSTRING("Van playback time is ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehVan)) PRINTNL()
SET_PLAYBACK_SPEED(vehVan, fPlaybackSpeed)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehBike)
IF IS_ENTITY_TOUCHING_ENTITY(vehVan, vehBike)
STOP_PLAYBACK_RECORDED_VEHICLE(vehVan)
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF bSetPieceUnloaded[2] = FALSE
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_VAN")
bSetPieceUnloaded[2] = TRUE
ENDIF
IF GET_DISTANCE_BETWEEN_ENTITIES(vehVan, PLAYER_PED_ID()) > 150
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vehVan)
IF DOES_ENTITY_EXIST(RandomDriver[1])
DELETE_PED(RandomDriver[1])
ENDIF
DELETE_VEHICLE(vehVan)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Set piece bus for jump over road.
IF busRequested = FALSE
IF fRecordingTime > 20000
REQUEST_MODEL(BUS)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_BUS")
busRequested = TRUE
ENDIF
ENDIF
IF busRequested = TRUE
IF bSetPiece[3] = FALSE
REQUEST_MODEL(BUS)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_BUS")
IF HAS_MODEL_LOADED(BUS)
AND HAS_MODEL_LOADED(A_M_Y_BUSINESS_01)
AND HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNo, "BB_SOL_BUS")
IF fRecordingTime > 25650
SET_ROADS_IN_AREA(<<105.7, 1683, 230>>, <<-11.8, 1818.4, 207>>, FALSE)
vehBus = CREATE_VEHICLE(BUS, << 143.1083, 1650.0073, 227.9803 >>, 32.0527)
START_PLAYBACK_RECORDED_VEHICLE(vehBus, iRecNo, "BB_SOL_BUS")
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehBus, 4000)
IF IS_VEHICLE_DRIVEABLE(vehBus)
RandomDriver[2] = CREATE_PED_INSIDE_VEHICLE(vehBus, PEDTYPE_MISSION, A_M_Y_BUSINESS_01)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(RandomDriver[2], TRUE)
SET_PED_KEEP_TASK(RandomDriver[2], TRUE)
SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[2])
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(BUS)
bSetPiece[3] = TRUE
ENDIF
ELSE
PRINTSTRING("Waiting on bus models loading") PRINTNL()
ENDIF
ELSE
IF DOES_ENTITY_EXIST(vehBus)
IF IS_VEHICLE_DRIVEABLE(vehBus)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBus)
// PRINTSTRING("Bus playback time is ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehBus)) PRINTNL()
SET_PLAYBACK_SPEED(vehBus, fPlaybackSpeed*2.5)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehBike)
IF IS_ENTITY_TOUCHING_ENTITY(vehBus, vehBike)
STOP_PLAYBACK_RECORDED_VEHICLE(vehBus)
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF bSetPieceUnloaded[3] = FALSE
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_BUS")
bSetPieceUnloaded[3] = TRUE
ENDIF
IF GET_DISTANCE_BETWEEN_ENTITIES(vehBus, PLAYER_PED_ID()) > 150
AND NOT IS_ENTITY_ON_SCREEN(vehBus)
SET_ROADS_IN_AREA(<<105.7, 1683, 230>>, <<-11.8, 1818.4, 207>>, TRUE)
IF DOES_ENTITY_EXIST(RandomDriver[2])
DELETE_PED(RandomDriver[2])
ENDIF
DELETE_VEHICLE(vehBus)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Set peice baller just driving along road as traffic
IF BallerRequested = FALSE
IF fRecordingTime > 37000
REQUEST_MODEL(BALLER)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_BLR")
BallerRequested = TRUE
ENDIF
ENDIF
IF BallerRequested = TRUE
IF bSetPiece[4] = FALSE
REQUEST_MODEL(BALLER)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_BLR")
IF HAS_MODEL_LOADED(BALLER)
AND HAS_MODEL_LOADED(A_M_Y_BUSINESS_01)
AND HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNo, "BB_SOL_BLR")
IF fRecordingTime > 42784
vehBaller = CREATE_VEHICLE(BALLER, << 961.7518, 2697.2954, 39.2009 >>, 85.8753)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehBaller, TRUE)
START_PLAYBACK_RECORDED_VEHICLE(vehBaller, iRecNo, "BB_SOL_BLR")
// SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehBaller, 4000)
PRINTSTRING("BALLER TRIGGERED")PRINTNL()
IF IS_VEHICLE_DRIVEABLE(vehBaller)
RandomDriver[3] = CREATE_PED_INSIDE_VEHICLE(vehBaller, PEDTYPE_MISSION, A_M_Y_BUSINESS_01)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(RandomDriver[3], TRUE)
SET_PED_KEEP_TASK(RandomDriver[3], TRUE)
SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[3])
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(BALLER)
bSetPiece[4] = TRUE
ENDIF
ELSE
PRINTSTRING("Waiting on bus models loading") PRINTNL()
ENDIF
ELSE
IF DOES_ENTITY_EXIST(vehBaller)
IF IS_VEHICLE_DRIVEABLE(vehBaller)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBaller)
// PRINTSTRING("Baller playback time is ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehBaller)) PRINTNL()
SET_PLAYBACK_SPEED(vehBaller, fPlaybackSpeed*1.5)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF GET_DISTANCE_BETWEEN_ENTITIES(vehBaller, PLAYER_PED_ID()) < 80
CHANGE_PLAYBACK_TO_USE_AI_AND_KEEP_SPEED(vehBaller)
ENDIF
IF fRecordingTime > 62784
AND NOT IS_ENTITY_ON_SCREEN(vehBaller)
STOP_PLAYBACK_RECORDED_VEHICLE(vehBaller)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehBaller)
SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[3])
REMOVE_VEHICLE_RECORDING(294, "BB_SOL_BLR")
ENDIF
ENDIF
ELSE
IF bSetPieceUnloaded[4] = FALSE
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_BLR")
bSetPieceUnloaded[4] = TRUE
ENDIF
IF GET_DISTANCE_BETWEEN_ENTITIES(vehBaller, PLAYER_PED_ID()) > 150
AND NOT IS_ENTITY_ON_SCREEN(vehBaller)
IF DOES_ENTITY_EXIST(RandomDriver[3])
DELETE_PED(RandomDriver[3])
ENDIF
DELETE_VEHICLE(vehBaller)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Set peice Dilettante just driving along road as traffic
IF DilettanteRequested = FALSE
IF fRecordingTime > 33000
REQUEST_MODEL(DILETTANTE)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_DIL")
DilettanteRequested = TRUE
ENDIF
ENDIF
IF DilettanteRequested = TRUE
IF bSetPiece[5] = FALSE
REQUEST_MODEL(DILETTANTE)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_DIL")
IF HAS_MODEL_LOADED(DILETTANTE)
AND HAS_MODEL_LOADED(A_M_Y_BUSINESS_01)
AND HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNo, "BB_SOL_DIL")
IF fRecordingTime > 38832
vehDilettante = CREATE_VEHICLE(DILETTANTE, << 1373.6660, 2691.5361, 36.6655 >>, 101.0761)
START_PLAYBACK_RECORDED_VEHICLE(vehDilettante, iRecNo, "BB_SOL_DIL")
// SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehDilettante, 4000)
PRINTSTRING("DILETTANTE TRIGGERED")PRINTNL()
IF IS_VEHICLE_DRIVEABLE(vehDilettante)
RandomDriver[4] = CREATE_PED_INSIDE_VEHICLE(vehDilettante, PEDTYPE_MISSION, A_M_Y_BUSINESS_01)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(RandomDriver[4], TRUE)
SET_PED_KEEP_TASK(RandomDriver[4], TRUE)
SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[4])
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(DILETTANTE)
bSetPiece[5] = TRUE
ENDIF
ELSE
PRINTSTRING("Waiting on Dilettante models loading") PRINTNL()
ENDIF
ELSE
IF DOES_ENTITY_EXIST(vehDilettante)
IF IS_VEHICLE_DRIVEABLE(vehDilettante)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehDilettante)
// PRINTSTRING("DILETTANTE playback time is ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehDilettante)) PRINTNL()
SET_PLAYBACK_SPEED(vehDilettante, fPlaybackSpeed)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF GET_DISTANCE_BETWEEN_ENTITIES(vehDilettante, PLAYER_PED_ID()) < 80
CHANGE_PLAYBACK_TO_USE_AI_AND_KEEP_SPEED(vehDilettante)
ENDIF
ENDIF
IF fRecordingTime > 58832
AND NOT IS_ENTITY_ON_SCREEN(vehDilettante)
STOP_PLAYBACK_RECORDED_VEHICLE(vehDilettante)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehDilettante)
SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[4])
REMOVE_VEHICLE_RECORDING(294, "BB_SOL_DIL")
ENDIF
ELSE
IF bSetPieceUnloaded[5] = FALSE
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_DIL")
bSetPieceUnloaded[5] = TRUE
ENDIF
IF GET_DISTANCE_BETWEEN_ENTITIES(vehDilettante, PLAYER_PED_ID()) > 150
AND NOT IS_ENTITY_ON_SCREEN(vehDilettante)
IF DOES_ENTITY_EXIST(RandomDriver[4])
DELETE_PED(RandomDriver[4])
ENDIF
DELETE_VEHICLE(vehDilettante)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// //Set peice Bobcat just driving along road as traffic
// IF bSetPiece[6] = FALSE
// IF fRecordingTime > 34000
// REQUEST_MODEL(BOBCATXL)
// REQUEST_MODEL(A_M_Y_BUSINESS_01)
// REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_BOB")
//
// IF HAS_MODEL_LOADED(BOBCATXL)
// AND HAS_MODEL_LOADED(A_M_Y_BUSINESS_01)
// AND HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNo, "BB_SOL_BOB")
// IF fRecordingTime > 39253
// vehBobcat = CREATE_VEHICLE(BOBCATXL, << 1407.9412, 2702.5293, 36.5625 >>, 106.5234)
// START_PLAYBACK_RECORDED_VEHICLE(vehBobcat, iRecNo, "BB_SOL_BOB")
// // SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehBobcat, 4000)
// PRINTSTRING("BOBCAT TRIGGERED")PRINTNL()
//
// IF IS_VEHICLE_DRIVEABLE(vehBobcat)
// RandomDriver[5] = CREATE_PED_INSIDE_VEHICLE(vehBobcat, PEDTYPE_MISSION, A_M_Y_BUSINESS_01)
// SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(RandomDriver[5], TRUE)
// SET_PED_KEEP_TASK(RandomDriver[5], TRUE)
// SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[5])
// ENDIF
//
// SET_MODEL_AS_NO_LONGER_NEEDED(BOBCATXL)
// bSetPiece[6] = TRUE
// ENDIF
// ELSE
// PRINTSTRING("Waiting on Bobcat models loading") PRINTNL()
// ENDIF
// ELSE
// IF DOES_ENTITY_EXIST(vehBobcat)
// IF IS_VEHICLE_DRIVEABLE(vehBobcat)
// IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBobcat)
// // PRINTSTRING("BOBCAT playback time is ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehBobcat)) PRINTNL()
// SET_PLAYBACK_SPEED(vehBobcat, fPlaybackSpeed*1.1)
// IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// IF GET_DISTANCE_BETWEEN_ENTITIES(vehBobcat, PLAYER_PED_ID()) < 80
// CHANGE_PLAYBACK_TO_USE_AI_AND_KEEP_SPEED(vehBobcat)
// ENDIF
// ENDIF
// IF fRecordingTime > 59253
// AND NOT IS_ENTITY_ON_SCREEN(vehBobcat)
// STOP_PLAYBACK_RECORDED_VEHICLE(vehBobcat)
// SET_VEHICLE_AS_NO_LONGER_NEEDED(vehBobcat)
// SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[5])
// REMOVE_VEHICLE_RECORDING(294, "BB_SOL_BOB")
// ENDIF
// ELSE
// IF bSetPieceUnloaded[6] = FALSE
// REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_BOB")
// bSetPieceUnloaded[6] = TRUE
// ENDIF
// IF GET_DISTANCE_BETWEEN_ENTITIES(vehBobcat, PLAYER_PED_ID()) > 150
// IF DOES_ENTITY_EXIST(RandomDriver[5])
// DELETE_PED(RandomDriver[5])
// ENDIF
// DELETE_VEHICLE(vehBobcat)
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
//Set peice Tornado just driving along road as traffic
IF TornadoRequested = FALSE
IF fRecordingTime > 77000
REQUEST_MODEL(TORNADO3)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_TOR")
TornadoRequested = TRUE
ENDIF
ENDIF
IF TornadoRequested = TRUE
IF bSetPiece[7] = FALSE
IF HAS_MODEL_LOADED(TORNADO3)
AND HAS_MODEL_LOADED(A_M_Y_BUSINESS_01)
AND HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNo, "BB_SOL_TOR")
IF fRecordingTime > 82241
vehTornado = CREATE_VEHICLE(TORNADO3, << 1890.7859, 3826.8328, 31.3937 >>, 208.6624)
START_PLAYBACK_RECORDED_VEHICLE(vehTornado, iRecNo, "BB_SOL_TOR")
PRINTSTRING("TORNADO TRIGGERED")PRINTNL()
IF IS_VEHICLE_DRIVEABLE(vehTornado)
RandomDriver[6] = CREATE_PED_INSIDE_VEHICLE(vehTornado, PEDTYPE_MISSION, A_M_Y_BUSINESS_01)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(RandomDriver[6], TRUE)
SET_PED_KEEP_TASK(RandomDriver[6], TRUE)
SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[6])
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(TORNADO3)
bSetPiece[7] = TRUE
ENDIF
ELSE
PRINTSTRING("Waiting on Tornado models loading") PRINTNL()
ENDIF
ELSE
IF DOES_ENTITY_EXIST(vehTornado)
IF IS_VEHICLE_DRIVEABLE(vehTornado)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTornado)
// PRINTSTRING("TORNADO playback time is ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehTornado)) PRINTNL()
SET_PLAYBACK_SPEED(vehTornado, fPlaybackSpeed*1.5)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehBike)
IF IS_ENTITY_TOUCHING_ENTITY(vehTornado, vehBike)
STOP_PLAYBACK_RECORDED_VEHICLE(vehTornado)
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF bSetPieceUnloaded[7] = FALSE
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_TOR")
bSetPieceUnloaded[7] = TRUE
ENDIF
IF GET_DISTANCE_BETWEEN_ENTITIES(vehTornado, PLAYER_PED_ID()) > 150
IF DOES_ENTITY_EXIST(RandomDriver[6])
DELETE_PED(RandomDriver[6])
ENDIF
DELETE_VEHICLE(vehTornado)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Set peice Bus2 just driving along road as traffic
IF Bus2Requested = FALSE
IF fRecordingTime > 89000
REQUEST_MODEL(BUS)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_BUS2")
Bus2Requested = TRUE
ENDIF
ENDIF
IF Bus2Requested = TRUE
IF bSetPiece[8] = FALSE
REQUEST_MODEL(BUS)
REQUEST_MODEL(A_M_Y_BUSINESS_01)
REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_BUS2")
IF HAS_MODEL_LOADED(BUS)
AND HAS_MODEL_LOADED(A_M_Y_BUSINESS_01)
AND HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNo, "BB_SOL_BUS2")
IF fRecordingTime > 94000
vehBus2 = CREATE_VEHICLE(BUS, << 2501.2251, 4119.9131, 37.4645 >>, 153.5773)
START_PLAYBACK_RECORDED_VEHICLE(vehBus2, iRecNo, "BB_SOL_BUS2")
// SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehBus2, 4000)
PRINTSTRING("BUS2 TRIGGERED")PRINTNL()
IF IS_VEHICLE_DRIVEABLE(vehBus2)
RandomDriver[7] = CREATE_PED_INSIDE_VEHICLE(vehBus2, PEDTYPE_MISSION, A_M_Y_BUSINESS_01)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(RandomDriver[7], TRUE)
SET_PED_KEEP_TASK(RandomDriver[7], TRUE)
SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[7])
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(BUS)
SET_MODEL_AS_NO_LONGER_NEEDED(A_M_Y_BUSINESS_01)
bSetPiece[8] = TRUE
ENDIF
ELSE
PRINTSTRING("Waiting on Bus2 models loading") PRINTNL()
ENDIF
ELSE
IF DOES_ENTITY_EXIST(vehBus2)
IF IS_VEHICLE_DRIVEABLE(vehBus2)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBus2)
// PRINTSTRING("BUS2 playback time is ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehBus2)) PRINTNL()
SET_PLAYBACK_SPEED(vehBus2, fPlaybackSpeed*1.2)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF GET_DISTANCE_BETWEEN_ENTITIES(vehBus2, PLAYER_PED_ID()) < 80
CHANGE_PLAYBACK_TO_USE_AI_AND_KEEP_SPEED(vehBus2)
ENDIF
ENDIF
IF fRecordingTime > 110000
AND NOT IS_ENTITY_ON_SCREEN(vehBus2)
STOP_PLAYBACK_RECORDED_VEHICLE(vehBus2)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehBus2)
SET_PED_AS_NO_LONGER_NEEDED(RandomDriver[7])
REMOVE_VEHICLE_RECORDING(294, "BB_SOL_BUS2")
ENDIF
ELSE
IF bSetPieceUnloaded[8] = FALSE
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_BUS2")
bSetPieceUnloaded[8] = TRUE
ENDIF
IF GET_DISTANCE_BETWEEN_ENTITIES(vehBus2, PLAYER_PED_ID()) > 150
IF DOES_ENTITY_EXIST(RandomDriver[7])
DELETE_PED(RandomDriver[7])
ENDIF
DELETE_VEHICLE(vehBus2)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Set piece of DUMP truck at the water.
IF DumpModelRequested = FALSE
IF fRecordingTime > 65000
REQUEST_MODEL(DUMP)
REQUEST_MODEL(S_M_Y_CONSTRUCT_01)
REQUEST_VEHICLE_RECORDING(294, "BB_SOL_DMP")
DumpModelRequested = TRUE
ENDIF
ELSE
IF DumpSetPieceCreated = FALSE
IF fRecordingTime > 70000
IF HAS_MODEL_LOADED(DUMP)
AND HAS_MODEL_LOADED(S_M_Y_CONSTRUCT_01)
AND HAS_VEHICLE_RECORDING_BEEN_LOADED(294, "BB_SOL_DMP")
//Create Truck
DumpSetPiece = CREATE_VEHICLE(DUMP, << 2229.2375, 3861.1123, 32.4406 >>, 66.3172)
SET_MODEL_AS_NO_LONGER_NEEDED(DUMP)
SET_VEHICLE_MODEL_IS_SUPPRESSED(DUMP, TRUE)
//Create truck driver
DumpSetPieceDriver = CREATE_PED_INSIDE_VEHICLE(DumpSetPiece, PEDTYPE_MISSION, S_M_Y_CONSTRUCT_01)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(DumpSetPieceDriver, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_CONSTRUCT_01)
ADD_ENTITY_TO_AUDIO_MIX_GROUP(DumpSetPiece, "MARTIN_1_DUMP_TRUCK_GROUP")
DumpSetPieceCreated = TRUE
ELSE
PRINTSTRING("Waiting for DUMP and S_M_Y_CONSTRUCT_01 models and recording loading") PRINTNL()
ENDIF
ENDIF
ELSE
IF DumpPlaybackStarted = FALSE
IF fRecordingTime > 79600
IF IS_VEHICLE_DRIVEABLE(DumpSetPiece)
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(DumpSetPiece)
START_PLAYBACK_RECORDED_VEHICLE(DumpSetPiece, 294, "BB_SOL_DMP")
DumpPlaybackStarted = TRUE
ENDIF
ENDIF
ENDIF
ELSE
//Start audio scene once truck is in view and stop once player has passed it
IF DOES_ENTITY_EXIST(DumpSetPiece)
IF IS_VEHICLE_DRIVEABLE(DumpSetPiece)
IF fRecordingTime > 90000
playersCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
truckCoords = GET_ENTITY_COORDS(DumpSetPiece)
IF playersCoords.x < truckCoords.x
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_DUMP_TRUCK")
START_AUDIO_SCENE("MARTIN_1_CHASE_DUMP_TRUCK")
ENDIF
ELSE
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_DUMP_TRUCK")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_DUMP_TRUCK")
ENDIF
ENDIF
ENDIF
ELSE
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_DUMP_TRUCK")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_DUMP_TRUCK")
ENDIF
ENDIF
ELSE
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_DUMP_TRUCK")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_DUMP_TRUCK")
ENDIF
ENDIF
IF DumpSetpieceSwitchedToAI = FALSE
IF IS_VEHICLE_DRIVEABLE(DumpSetPiece)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(DumpSetPiece)
SET_PLAYBACK_SPEED(DumpSetPiece, fPlaybackSpeed*1.2)
// PRINTSTRING("DUMP SETPIECE RECORDING TIME IS ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(DumpSetPiece)) PRINTNL()
IF GET_TIME_POSITION_IN_RECORDING(DumpSetPiece) > 52843
CHANGE_PLAYBACK_TO_USE_AI_AND_KEEP_SPEED(DumpSetPiece)
DumpSetpieceSwitchedToAI = TRUE
ENDIF
IF fRecordingTime > 100000
AND NOT IS_ENTITY_ON_SCREEN(DumpSetPiece)
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(DumpSetPiece)
STOP_PLAYBACK_RECORDED_VEHICLE(DumpSetPiece)
SET_VEHICLE_AS_NO_LONGER_NEEDED(DumpSetPiece)
SET_PED_AS_NO_LONGER_NEEDED(DumpSetPieceDriver)
REMOVE_VEHICLE_RECORDING(294, "BB_SOL_DMP")
ENDIF
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(DumpSetPiece)
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(DumpSetPiece)
REMOVE_VEHICLE_RECORDING(294, "BB_SOL_DMP")
IF IS_VEHICLE_DRIVEABLE(DumpSetPiece)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), DumpSetPiece) > 150
AND NOT IS_ENTITY_ON_SCREEN(DumpSetPiece)
IF DOES_ENTITY_EXIST(DumpSetPieceDriver)
DELETE_PED(DumpSetPieceDriver)
ENDIF
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(DumpSetPiece)
DELETE_VEHICLE(DumpSetPiece)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Set piece of guy pointing at the plane as it passes over head.
IF fRecordingTime > 45000
IF IsParkedCarSetup = FALSE
REQUEST_MODEL(BOBCATXL)
IF HAS_MODEL_LOADED(BOBCATXL)
IF NOT DOES_ENTITY_EXIST(ParkedCar)
ParkedCar = CREATE_VEHICLE(BOBCATXL, <<754.9153, 2688.4556, 39.1427>>, 301.6810)
SET_ENTITY_LOAD_COLLISION_FLAG(ParkedCar, TRUE)
SET_VEHICLE_DOOR_OPEN(ParkedCar, SC_DOOR_FRONT_LEFT)
SET_MODEL_AS_NO_LONGER_NEEDED(BOBCATXL)
IsParkedCarSetup = TRUE
ENDIF
ENDIF
ENDIF
IF IsPedPointingSetup = FALSE
REQUEST_MODEL(S_M_Y_BARMAN_01)
REQUEST_ANIM_DICT("missmartin1@pointing_sky1@base")
IF HAS_MODEL_LOADED(S_M_Y_BARMAN_01)
IF NOT DOES_ENTITY_EXIST(PointingPed[0])
PointingPed[0] = CREATE_PED(PEDTYPE_MISSION, S_M_Y_BARMAN_01, <<755.7743, 2691.3401, 39.0932>>, 260.5786)
SET_ENTITY_LOAD_COLLISION_FLAG(PointingPed[0], TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_BARMAN_01)
IsPedPointingSetup = TRUE
ENDIF
ENDIF
ENDIF
IF IsPedPointingPlayingAnim = FALSE
IF IsPedPointingSetup = TRUE
IF HAS_ANIM_DICT_LOADED("missmartin1@pointing_sky1@base")
IF fRecordingTime > 50000
IF NOT IS_PED_INJURED(PointingPed[0])
IF NOT IS_ENTITY_PLAYING_ANIM(PointingPed[0], "missmartin1@pointing_sky1@base", "base")
TASK_PLAY_ANIM(PointingPed[0], "missmartin1@pointing_sky1@base", "base")
IsPedPointingPlayingAnim = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_ENTITY_EXIST(PointingPed[0])
IF NOT IS_PED_INJURED(PointingPed[0])
IF NOT IS_ENTITY_PLAYING_ANIM(PointingPed[0], "missmartin1@pointing_sky1@base", "base")
IF fRecordingTime > 52000
IF IS_VEHICLE_DRIVEABLE(ParkedCar)
TASK_ENTER_VEHICLE(PointingPed[0], ParkedCar)
SET_PED_KEEP_TASK(PointingPed[0], TRUE)
SET_PED_AS_NO_LONGER_NEEDED(PointingPed[0])
SET_VEHICLE_AS_NO_LONGER_NEEDED(ParkedCar)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//DO another set piece of a guy looking and pointing
IF fRecordingTime > 75000
IF IsPedPointingSetup3 = FALSE
REQUEST_MODEL(A_M_M_TRAMP_01)
REQUEST_ANIM_DICT("missmartin1@pointing_sky1@base")
IF HAS_MODEL_LOADED(A_M_M_TRAMP_01)
IF NOT DOES_ENTITY_EXIST(PointingPed[1])
PointingPed[1] = CREATE_PED(PEDTYPE_MISSION, A_M_M_TRAMP_01, <<1663.0045, 3602.3420, 34.5846>>, 308.4162)
SET_ENTITY_LOAD_COLLISION_FLAG(PointingPed[1], TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(A_M_M_TRAMP_01)
IsPedPointingSetup3 = TRUE
ENDIF
ENDIF
ENDIF
IF IsPedPointingPlayingAnim3 = FALSE
IF IsPedPointingSetup3 = TRUE
IF HAS_ANIM_DICT_LOADED("missmartin1@pointing_sky1@base")
IF fRecordingTime > 78000
IF NOT IS_PED_INJURED(PointingPed[1])
IF NOT IS_ENTITY_PLAYING_ANIM(PointingPed[1], "missmartin1@pointing_sky1@base", "base")
TASK_PLAY_ANIM(PointingPed[1], "missmartin1@pointing_sky1@base", "base")
IsPedPointingPlayingAnim3 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_ENTITY_EXIST(PointingPed[1])
IF NOT IS_PED_INJURED(PointingPed[1])
IF NOT IS_ENTITY_PLAYING_ANIM(PointingPed[1], "missmartin1@pointing_sky1@base", "base")
OR fRecordingTime > 99000
SET_PED_AS_NO_LONGER_NEEDED(PointingPed[1])
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//DO another set piece of a guy looking and pointing
IF fRecordingTime > 100000
IF IsPedPointingSetup2 = FALSE
REQUEST_MODEL(S_M_Y_BARMAN_01)
REQUEST_ANIM_DICT("missmartin1@pointing_sky1@base")
IF HAS_MODEL_LOADED(S_M_Y_BARMAN_01)
IF NOT DOES_ENTITY_EXIST(PointingPed[2])
PointingPed[2] = CREATE_PED(PEDTYPE_MISSION, S_M_Y_BARMAN_01, <<2672.2710, 4338.6265, 44.4309>>, 354.9540)
SET_ENTITY_LOAD_COLLISION_FLAG(PointingPed[2], TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_BARMAN_01)
IsPedPointingSetup2 = TRUE
ENDIF
ENDIF
ENDIF
IF IsPedPointingPlayingAnim2 = FALSE
IF IsPedPointingSetup2 = TRUE
IF HAS_ANIM_DICT_LOADED("missmartin1@pointing_sky1@base")
IF fRecordingTime > 105000
IF NOT IS_PED_INJURED(PointingPed[2])
IF NOT IS_ENTITY_PLAYING_ANIM(PointingPed[2], "missmartin1@pointing_sky1@base", "base")
TASK_PLAY_ANIM(PointingPed[2], "missmartin1@pointing_sky1@base", "base")
IsPedPointingPlayingAnim2 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_ENTITY_EXIST(PointingPed[2])
IF NOT IS_PED_INJURED(PointingPed[2])
IF NOT IS_ENTITY_PLAYING_ANIM(PointingPed[2], "missmartin1@pointing_sky1@base", "base")
SET_PED_AS_NO_LONGER_NEEDED(PointingPed[2])
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//DO another set piece of a guy looking and pointing
IF fRecordingTime > 109000
IF IsPedPointingSetup4 = FALSE
REQUEST_MODEL(S_M_M_LatHandy_01)
REQUEST_ANIM_DICT("missmartin1@pointing_sky1@base")
IF HAS_MODEL_LOADED(S_M_M_LatHandy_01)
IF NOT DOES_ENTITY_EXIST(PointingPed[3])
PointingPed[3] = CREATE_PED(PEDTYPE_MISSION, S_M_M_LatHandy_01, <<2825.1704, 4616.9258, 45.5896>>, 14.0262)
SET_ENTITY_LOAD_COLLISION_FLAG(PointingPed[3], TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_M_LatHandy_01)
IsPedPointingSetup4 = TRUE
ENDIF
ENDIF
ENDIF
IF IsPedPointingPlayingAnim4 = FALSE
IF IsPedPointingSetup4 = TRUE
IF HAS_ANIM_DICT_LOADED("missmartin1@pointing_sky1@base")
IF fRecordingTime > 113000
IF NOT IS_PED_INJURED(PointingPed[3])
IF NOT IS_ENTITY_PLAYING_ANIM(PointingPed[3], "missmartin1@pointing_sky1@base", "base")
TASK_PLAY_ANIM(PointingPed[3], "missmartin1@pointing_sky1@base", "base")
IsPedPointingPlayingAnim4 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_ENTITY_EXIST(PointingPed[3])
IF NOT IS_PED_INJURED(PointingPed[3])
IF NOT IS_ENTITY_PLAYING_ANIM(PointingPed[3], "missmartin1@pointing_sky1@base", "base")
SET_PED_AS_NO_LONGER_NEEDED(PointingPed[3])
REMOVE_ANIM_DICT("missmartin1@pointing_sky1@base")
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// IF fRecordingTime > 65173
// IF bSetPiece[4] = FALSE
// FOR iCounter = 0 TO 1
// IF DOES_ENTITY_EXIST(vehFeltzer[iCounter])
// SET_VEHICLE_AS_NO_LONGER_NEEDED(vehFeltzer[iCounter])
// ENDIF
// ENDFOR
// IMMEDIATELY_UNLOAD_NEED_LIST_VEHICLE_RECORDING(Asset.recLeftCross, iRecNo)
// IMMEDIATELY_UNLOAD_NEED_LIST_VEHICLE_RECORDING(Asset.recRightCross, iRecNo)
// bSetPiece[4] = TRUE
// ENDIF
// ENDIF
ENDPROC
//Purpose skip to a specified time in
PROC SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(VEHICLE_INDEX veh, FLOAT fDGTime,BOOL bDGPausePlayback = FALSE)
FLOAT fTemp
IF IS_VEHICLE_DRIVEABLE(veh)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(veh)
fTemp = GET_TIME_POSITION_IN_RECORDING(veh)
fTemp = fTemp * - 1
// PRINTSTRING("fTemp is:")PRINTFLOAT(fTemp)PRINTNL()
fDGTime = fTemp + fDGTime
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(veh,fDGTime)
// PRINTSTRING("Skipping Playback forward to:")PRINTFLOAT(fDGTime)PRINTNL()
IF bDGPausePlayback = TRUE
PAUSE_PLAYBACK_RECORDED_VEHICLE(veh)
ENDIF
ELSE
SCRIPT_ASSERT("NO PLAYBACK ON SELECTED VEHICLE- CANNOT SKIP TIME IN RECORDING")
ENDIF
ELSE
SCRIPT_ASSERT("VEHICLE NOT DRIVABLE - CANNOT SKIP TIME IN RECORDING")
ENDIF
ENDPROC
PROC setPlaneCrashed()
IF DOES_ENTITY_EXIST(pedPilot)
IF NOT IS_ENTITY_DEAD(pedPilot)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF NOT IS_PED_IN_VEHICLE(pedPilot, vehTitan)
SET_PED_INTO_VEHICLE(pedPilot, vehTitan)
ENDIF
ENDIF
SET_ENTITY_HEALTH(pedPilot, 0)
ENDIF
ENDIF
FREEZE_ENTITY_POSITION(vehTitan, FALSE)
SET_ENTITY_VELOCITY(vehTitan, <<0, 0, 0>>)
//SET_VEHICLE_ENGINE_HEALTH(vehTitan, -1000.0)
//SET_ENTITY_HEALTH(vehTitan, 0)
SET_VEHICLE_DOORS_LOCKED(vehTitan, VEHICLELOCK_LOCKED)
SET_ENTITY_COORDS(vehTitan, vTitanCrashCoords)
SET_ENTITY_ROTATION(vehTitan, vTitanSlideRot)
SET_VEHICLE_DOOR_OPEN(vehTitan, SC_DOOR_FRONT_LEFT)
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(vehTitan)
FREEZE_ENTITY_POSITION(vehTitan, TRUE)
SET_ENTITY_COLLISION(vehTitan, TRUE)
ENDPROC
// DEBUG PROCEDURES
#IF IS_DEBUG_BUILD
//PURPOSE: Moniters for any keyboard inputs that would alter the mission(debug pass etc)
PROC Debug_Options()
IF IS_KEYBOARD_KEY_PRESSED(KEY_S)
eMissionStage = PASSED_MISSION
ENDIF
IF IS_KEYBOARD_KEY_PRESSED(KEY_F)
PREPARE_MUSIC_EVENT("SOL1_FAIL")
SetMissionFailed("")
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
JSkip = TRUE
ELSE
JSkip = FALSE
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)
PSkip = TRUE
ELSE
PSkip = FALSE
ENDIF
ENDPROC
//FLOAT f_debug_thermal_x_modifier = 0.0
//FLOAT f_debug_thermal_y_modifier = 0.0
//PROC CREATE_WIDGETS()
// widgetDebug = START_WIDGET_GROUP("Remote sniping mission")
// //ADD_WIDGET_FLOAT_SLIDER("Thermal x modifier", f_debug_thermal_x_modifier, 0.001, 100.0, 0.001)
// //ADD_WIDGET_FLOAT_SLIDER("Thermal y modifier", f_debug_thermal_y_modifier, 0.001, 100.0, 0.001)
// START_WIDGET_GROUP("Uber Recording")
// ADD_WIDGET_BOOL("Commence the uber recorder?", bUberRecord)
// ADD_WIDGET_BOOL("GNARLY SHAKE CAM!?!", bGnarly)
// ADD_WIDGET_INT_SLIDER("GNARLY SHAKE CAM!?!", iGnarlyStyle,0,2,1)
// STOP_WIDGET_GROUP()
// START_WIDGET_GROUP("Camera 0")
// ADD_WIDGET_FLOAT_SLIDER("Pos0 X", pos0x, -10000.0, 10000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("Pos0 Y", pos0y, -10000.0, 10000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("Pos0 Z", pos0z, -10000.0, 10000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("Lookat0 X", lookat0x, -1000.0, 1000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("Lookat0 Y", lookat0y, -1000.0, 1000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("Lookat0 Z", lookat0z, -1000.0, 1000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("FOV0", fov0, 0.0, 1000.0, 0.001)
// STOP_WIDGET_GROUP()
// START_WIDGET_GROUP("Camera 1")
// ADD_WIDGET_FLOAT_SLIDER("Pos1 X", pos1x, -10000.0, 10000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("Pos1 Y", pos1y, -10000.0, 10000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("Pos1 Z", pos1z, -10000.0, 10000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("Lookat1 X", lookat1x, -1000.0, 1000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("Lookat1 Y", lookat1y, -1000.0, 1000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("Lookat1 Z", lookat1z, -1000.0, 1000.0, 0.001)
// ADD_WIDGET_FLOAT_SLIDER("FOV1", fov1, 0.0, 1000.0, 0.001)
// STOP_WIDGET_GROUP()
// STOP_WIDGET_GROUP()
// SET_LOCATES_HEADER_WIDGET_GROUP(widgetDebug)
//ENDPROC
//
////PURPOSE: Updates debug widgets
//PROC UPDATE_WIDGETS()
// IF bUberRecord
// /*IF eMissionStage <> UBER_RECORD
// bStageSetup = FALSE
// eMissionStage = UBER_RECORD
// ENDIF*/
// bDoingJumpCutscene = TRUE
// bDoneJumpCutscene = FALSE
// iMiniCutStage = 0
// bUberRecord = FALSE
// ENDIF
//ENDPROC
//
//PROC DESTROY_WIDGETS()
// IF DOES_WIDGET_GROUP_EXIST(widgetDebug)
// DELETE_WIDGET_GROUP(widgetDebug)
// ENDIF
//ENDPROC
#ENDIF
//PURPOSE: Delete's all entities to be used for skipping
PROC DELETE_EVERYTHING()
// CUTSCENE
IF IS_CUTSCENE_ACTIVE()
STOP_CUTSCENE_IMMEDIATELY()
ENDIF
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE)
SET_MAX_WANTED_LEVEL(5)
REMOVE_CUTSCENE()
RENDER_SCRIPT_CAMS(FALSE, FALSE)
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
SET_TIME_SCALE(1.0)
//Move player out of any vehicle before it gets deleted
IF NOT IS_REPLAY_BEING_SET_UP()
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
ENDIF
// AUDIO
IF PlaneOnfireSoundStopped = FALSE
STOP_SOUND(PlaneonfireSoundID)
PlaneOnfireSoundStopped = TRUE
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_DRIVE_TO_OBSERVATORY")
STOP_AUDIO_SCENE("MARTIN_1_DRIVE_TO_OBSERVATORY")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_SNIPER_CAMERA")
STOP_AUDIO_SCENE("MARTIN_1_SNIPER_CAMERA")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_PLANE_CHASE_SCENE")
STOP_AUDIO_SCENE("MARTIN_1_PLANE_CHASE_SCENE")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_MAIN")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_MAIN")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_JUMP_01")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_JUMP_01")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_TRAIN_SCENE")
STOP_AUDIO_SCENE("MARTIN_1_TRAIN_SCENE")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_JUMP_TRAIN")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_JUMP_TRAIN")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_DUMP_TRUCK")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_DUMP_TRUCK")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_PLANE_CRASH")
STOP_AUDIO_SCENE("MARTIN_1_PLANE_CRASH")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_DRIVE_BACK")
STOP_AUDIO_SCENE("MARTIN_1_DRIVE_BACK")
ENDIF
CANCEL_MUSIC_EVENT("SOL1_START")
CANCEL_MUSIC_EVENT("SOL1_VEH")
CANCEL_MUSIC_EVENT("SOL1_SNIPER_READY")
CANCEL_MUSIC_EVENT("SOL1_APP_ACTIVE")
CANCEL_MUSIC_EVENT("SOL1_ENGINE_HIT")
CANCEL_MUSIC_EVENT("SOL1_FRANKLIN_STARTS")
CANCEL_MUSIC_EVENT("SOL1_AIR_TRAFFIC")
CANCEL_MUSIC_EVENT("SOL1_BUS_JUMP")
CANCEL_MUSIC_EVENT("SOL1_TRAIN_JUMP")
CANCEL_MUSIC_EVENT("SOL1_ALMOST_CRASHED")
CANCEL_MUSIC_EVENT("SOL1_DRIVE_TO_OBS_RT")
CANCEL_MUSIC_EVENT("SOL1_SHOOT_PLANE_RT")
CANCEL_MUSIC_EVENT("SOL1_CHASE_PLANE_RT")
STOP_STREAM()
hasIsStreamPlaying = FALSE
// PTFX
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[0])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[0])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[1])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[1])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[2])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[2])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[3])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[3])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[4])
REMOVE_PARTICLE_FX(ptfxEngine[4])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[5])
REMOVE_PARTICLE_FX(ptfxEngine[5])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[6])
REMOVE_PARTICLE_FX(ptfxEngine[6])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[7])
REMOVE_PARTICLE_FX(ptfxEngine[7])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[8])
REMOVE_PARTICLE_FX(ptfxEngine[8])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[9])
REMOVE_PARTICLE_FX(ptfxEngine[9])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[10])
REMOVE_PARTICLE_FX(ptfxEngine[10])
ENDIF
// OBJECTS
IF DOES_ENTITY_EXIST(RemoteSniper)
DELETE_OBJECT(RemoteSniper)
ENDIF
IF DOES_ENTITY_EXIST(ObjTitan)
DELETE_OBJECT(ObjTitan)
ENDIF
IF DOES_ENTITY_EXIST(objTrevsPhone)
DELETE_OBJECT(objTrevsPhone)
ENDIF
IF DOES_ENTITY_EXIST(ObjEndBarrel)
DELETE_OBJECT(ObjEndBarrel)
ENDIF
// PEDS
IF DOES_ENTITY_EXIST(pedPilot)
DELETE_PED(pedPilot)
ENDIF
// IF DOES_ENTITY_EXIST(pedTarget)
// DELETE_PED(pedTarget)
// ENDIF
IF DOES_ENTITY_EXIST(DumpSetPieceDriver)
DELETE_PED(DumpSetPieceDriver)
ENDIF
IF DOES_ENTITY_EXIST(CSTrev)
DELETE_PED(CSTrev)
ENDIF
IF DOES_ENTITY_EXIST(PedPatricia)
DELETE_PED(PedPatricia)
ENDIF
IF DOES_ENTITY_EXIST(endGuy[0])
DELETE_PED(endGuy[0])
ENDIF
IF DOES_ENTITY_EXIST(endGuy[1])
DELETE_PED(endGuy[1])
ENDIF
FOR iCounter = 0 TO 3
IF DOES_ENTITY_EXIST(PointingPed[iCounter])
DELETE_PED(PointingPed[iCounter])
ENDIF
ENDFOR
FOR iCounter = 0 TO 7
IF DOES_ENTITY_EXIST(RandomDriver[iCounter])
DELETE_PED(RandomDriver[iCounter])
ENDIF
ENDFOR
// ENTITYS
IF DOES_ENTITY_EXIST(TrevsCarEntity)
DELETE_ENTITY(TrevsCarEntity)
ENDIF
IF DOES_ENTITY_EXIST(TrevsEntity)
DELETE_ENTITY(TrevsEntity)
ENDIF
IF DOES_ENTITY_EXIST(CutPatricia)
DELETE_ENTITY(CutPatricia)
ENDIF
// VEHICLES
IF DOES_ENTITY_EXIST(vehTitan)
DELETE_VEHICLE(vehTitan)
ENDIF
IF DOES_ENTITY_EXIST(vehBike)
DELETE_VEHICLE(vehBike)
ENDIF
IF DOES_ENTITY_EXIST(PlayerCar)
DELETE_VEHICLE(PlayerCar)
ENDIF
IF DOES_ENTITY_EXIST(vehTrain)
DELETE_MISSION_TRAIN(vehTrain)
ENDIF
IF DOES_ENTITY_EXIST(vehBus)
DELETE_VEHICLE(vehBus)
ENDIF
IF DOES_ENTITY_EXIST(vehTruck)
DELETE_VEHICLE(vehTruck)
ENDIF
IF DOES_ENTITY_EXIST(vehVan)
DELETE_VEHICLE(vehVan)
ENDIF
IF DOES_ENTITY_EXIST(vehBaller)
DELETE_VEHICLE(vehBaller)
ENDIF
IF DOES_ENTITY_EXIST(vehDilettante)
DELETE_VEHICLE(vehDilettante)
ENDIF
IF DOES_ENTITY_EXIST(vehBobcat)
DELETE_VEHICLE(vehBobcat)
ENDIF
IF DOES_ENTITY_EXIST(vehTornado)
DELETE_VEHICLE(vehTornado)
ENDIF
IF DOES_ENTITY_EXIST(vehBus2)
DELETE_VEHICLE(vehBus2)
ENDIF
IF DOES_ENTITY_EXIST(ParkedCar)
DELETE_VEHICLE(ParkedCar)
ENDIF
IF DOES_ENTITY_EXIST(SniperVan)
DELETE_VEHICLE(SniperVan)
ENDIF
IF DOES_ENTITY_EXIST(vehBiff)
DELETE_VEHICLE(vehBiff)
ENDIF
IF DOES_ENTITY_EXIST(DumpSetPiece)
DELETE_VEHICLE(DumpSetPiece)
ENDIF
IF DOES_ENTITY_EXIST(PlayerStatCar)
DELETE_VEHICLE(PlayerStatCar)
ENDIF
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
DELETE_VEHICLE(TrevCutsceneCar)
ENDIF
IF DOES_ENTITY_EXIST(ParkedCarAtStart)
DELETE_VEHICLE(ParkedCarAtStart)
ENDIF
IF DOES_ENTITY_EXIST(vehCutBike)
DELETE_VEHICLE(vehCutBike)
ENDIF
//Return vehicle generators to normal
DISABLE_VEHICLE_GEN_ON_MISSION(FALSE)
// VEHICLE RECORDINGS
REMOVE_VEHICLE_RECORDING(294, "DGTitanEntry")
REMOVE_VEHICLE_RECORDING(iRecNo, "DGTitanCrash")
REMOVE_VEHICLE_RECORDING(iRecNo, "DGBFReady")
REMOVE_VEHICLE_RECORDING(1, "BB_SOL_JET")
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_TRK")
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_VAN")
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_BUS")
REMOVE_VEHICLE_RECORDING(294, "BB_SOL_BLR")
REMOVE_VEHICLE_RECORDING(294, "BB_SOL_DIL")
REMOVE_VEHICLE_RECORDING(294, "BB_SOL_BOB")
REMOVE_VEHICLE_RECORDING(iRecNo, "BB_SOL_TOR")
REMOVE_VEHICLE_RECORDING(294, "BB_SOL_BUS2")
REMOVE_VEHICLE_RECORDING(294, "BB_SOL_DMP")
// ANIM DICTS
REMOVE_ANIM_DICT("missmartin1@pointing_sky1@base")
REMOVE_ANIM_DICT("missmartin1@exit_plane")
REMOVE_ANIM_DICT("COMBAT@DAMAGE@WRITHEIDLE_A")
REMOVE_ANIM_DICT("COMBAT@DAMAGE@WRITHEIDLE_B")
// TEXT
FOR iCounter = 0 TO 99
bTextTriggered[iCounter] = FALSE
ENDFOR
// DOORS
IF IS_DOOR_REGISTERED_WITH_SYSTEM(iLeftDoor)
REMOVE_DOOR_FROM_SYSTEM(iLeftDoor)
ENDIF
IF IS_DOOR_REGISTERED_WITH_SYSTEM(iRightDoor)
REMOVE_DOOR_FROM_SYSTEM(iRightDoor)
ENDIF
// CAMS
IF DOES_CAM_EXIST(camDest)
DESTROY_CAM(camDest)
ENDIF
IF DOES_CAM_EXIST(camInit)
DESTROY_CAM(camInit)
ENDIF
IF DOES_CAM_EXIST(camAnim)
DESTROY_CAM(camAnim)
ENDIF
// REMOTE SNIPER
SET_REMOTE_SNIPER_ACTIVE(sSniperData,FALSE)
CLEANUP_REMOTE_SNIPER(sSniperData)
//Set the flag to stop drawing the sniper hud to the screen now.
RemoteSniperNeedsUpdated = FALSE
CLEAR_AREA(<<1388.6, 1150.0, 114>>, 70, TRUE)
ENDPROC
//PURPOSE: Requests and loads everything required for the missionstage
PROC REQUEST_AND_LOAD_EVERYTHING()
REQUEST_PTFX_ASSET()
WHILE NOT HAS_PTFX_ASSET_LOADED()
PRINTSTRING("Waiting for PTFX asset to load") PRINTNL()
WAIT(0)
ENDWHILE
MartinHouseMainScenarioBlockingArea = ADD_SCENARIO_BLOCKING_AREA(<<1333, 1095, 137>>, <<1438.9, 1197, 109>>)
SWITCH eMissionStage
CASE STAGE_INIT_MISSION
IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_TREVOR
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
IF IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
REQUEST_MODEL(GET_REPLAY_START_VEHICLE_MODEL())
WHILE NOT HAS_MODEL_LOADED(GET_REPLAY_START_VEHICLE_MODEL())
PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
IF IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
REQUEST_MODEL(GET_REPLAY_START_VEHICLE_MODEL())
WHILE NOT HAS_MODEL_LOADED(GET_REPLAY_START_VEHICLE_MODEL())
PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
// IF NOT IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
// OR NOT IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
// OR NOT IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_START_VEHICLE_MODEL())
// OR NOT IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
// OR NOT IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
// REQUEST_MODEL(BODHI2)
// WHILE NOT HAS_MODEL_LOADED(BODHI2)
// PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
// WAIT(0)
// ENDWHILE
// ENDIF
ENDIF
ENDIF
IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
//Check for Michael's car existing from start
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
IF IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
REQUEST_MODEL(GET_REPLAY_START_VEHICLE_MODEL())
WHILE NOT HAS_MODEL_LOADED(GET_REPLAY_START_VEHICLE_MODEL())
PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
IF IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
REQUEST_MODEL(GET_REPLAY_START_VEHICLE_MODEL())
WHILE NOT HAS_MODEL_LOADED(GET_REPLAY_START_VEHICLE_MODEL())
PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
ENDIF
// //Request trev's car
// REQUEST_MODEL(BODHI2)
// WHILE NOT HAS_MODEL_LOADED(BODHI2)
// PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
// WAIT(0)
// ENDWHILE
ENDIF
//Request and load the model for the parked car at the side of the house
REQUEST_MODEL(FUSILADE)
WHILE NOT HAS_MODEL_LOADED(FUSILADE)
PRINTSTRING("waiting for fusilade model to load") PRINTNL()
WAIT(0)
ENDWHILE
BREAK
CASE STAGE_DRIVE_TO_OBSERVATORY
IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_TREVOR
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
IF IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
REQUEST_MODEL(GET_REPLAY_START_VEHICLE_MODEL())
WHILE NOT HAS_MODEL_LOADED(GET_REPLAY_START_VEHICLE_MODEL())
PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
IF IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
REQUEST_MODEL(GET_REPLAY_START_VEHICLE_MODEL())
WHILE NOT HAS_MODEL_LOADED(GET_REPLAY_START_VEHICLE_MODEL())
PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
// IF NOT IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
// OR NOT IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
// OR NOT IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_START_VEHICLE_MODEL())
// OR NOT IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
// OR NOT IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
// REQUEST_MODEL(BODHI2)
// WHILE NOT HAS_MODEL_LOADED(BODHI2)
// PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
// WAIT(0)
// ENDWHILE
// ENDIF
ELSE
// REQUEST_MODEL(BODHI2)
// WHILE NOT HAS_MODEL_LOADED(BODHI2)
// PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
// WAIT(0)
// ENDWHILE
ENDIF
ENDIF
IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
//Check for Michael's car existing from start
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
IF IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
REQUEST_MODEL(GET_REPLAY_START_VEHICLE_MODEL())
WHILE NOT HAS_MODEL_LOADED(GET_REPLAY_START_VEHICLE_MODEL())
PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
IF IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
REQUEST_MODEL(GET_REPLAY_START_VEHICLE_MODEL())
WHILE NOT HAS_MODEL_LOADED(GET_REPLAY_START_VEHICLE_MODEL())
PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
ENDIF
// //Request trev's car
// REQUEST_MODEL(BODHI2)
// WHILE NOT HAS_MODEL_LOADED(BODHI2)
// PRINTSTRING("Waiting for checkpoint vehicle model loading") PRINTNL()
// WAIT(0)
// ENDWHILE
ENDIF
//Request and load the model for the parked car at the side of the house
REQUEST_MODEL(FUSILADE)
WHILE NOT HAS_MODEL_LOADED(FUSILADE)
PRINTSTRING("waiting for fusilade model to load") PRINTNL()
WAIT(0)
ENDWHILE
BREAK
CASE STAGE_SHOOT_PLANE
IF IS_REPLAY_BEING_SET_UP()
NEW_LOAD_SCENE_START(<<-892, -446, 173>>, <<0,0,-103>>, 3000)
ENDIF
REQUEST_REMOTE_SNIPER_ASSETS(sSniperData)
REQUEST_MODEL(BURRITO3)
REQUEST_MODEL(P_RCSS_FOLDED)
REQUEST_VEHICLE_RECORDING(294, "DGTitanEntry")
WHILE NOT HAS_MODEL_LOADED(BURRITO3)
OR NOT HAS_MODEL_LOADED(P_RCSS_FOLDED)
OR NOT HAVE_REMOTE_SNIPER_ASSETS_LOADED(sSniperData)
OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(294, "DGTitanEntry")
PRINTSTRING("Waiting for models to laod for STAGE_SHOOT_PLANE") PRINTNL()
WAIT(0)
ENDWHILE
BREAK
CASE STAGE_CUTSCENE_PLANE_DESCENT
REQUEST_MODEL(SHAMAL)
REQUEST_MODEL(BURRITO3)
REQUEST_MODEL(P_RCSS_FOLDED)
REQUEST_MODEL(S_M_M_PILOT_01)
REQUEST_VEHICLE_RECORDING(294, "DGTitanEntry")
REQUEST_VEHICLE_RECORDING(294, "DGBFReady")
REQUEST_VEHICLE_RECORDING(1, "BB_SOL_JET")
REQUEST_VEHICLE_RECORDING(iRecNo, "DGTitanCrash")
WHILE NOT HAS_MODEL_LOADED(SHAMAL)
OR NOT HAS_MODEL_LOADED(BURRITO3)
OR NOT HAS_MODEL_LOADED(P_RCSS_FOLDED)
OR NOT HAS_MODEL_LOADED(S_M_M_PILOT_01)
OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(294, "DGTitanEntry")
OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(294, "DGBFReady")
OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(1, "BB_SOL_JET")
OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNo, "DGTitanCrash")
PRINTSTRING("Waiting for models to laod for STAGE_CUTSCENE_PLANE_DESCENT") PRINTNL()
WAIT(0)
ENDWHILE
WHILE NOT LOAD_STREAM("MARTIN_1_LEAR_JET_SHOT_DOWN_MASTER")
PRINTSTRING("Waiting for audio stream MARTIN_1_LEAR_JET_SHOT_DOWN_MASTER loading") PRINTNL()
WAIT(0)
ENDWHILE
BREAK
CASE STAGE_CHASE_PLANE
REQUEST_MODEL(SANCHEZ)
REQUEST_MODEL(SHAMAL)
REQUEST_MODEL(S_M_M_PILOT_01)
REQUEST_PLAYER_PED_MODEL(CHAR_TREVOR)
REQUEST_VEHICLE_RECORDING(1, "BB_SOL_JET")
REQUEST_VEHICLE_RECORDING(294, "DGBFReady")
// PRELOAD_STORED_PLAYER_PED_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
WHILE NOT HAS_MODEL_LOADED(SANCHEZ)
OR NOT HAS_MODEL_LOADED(SHAMAL)
OR NOT HAS_MODEL_LOADED(S_M_M_PILOT_01)
OR NOT HAS_PLAYER_PED_MODEL_LOADED(CHAR_TREVOR)
OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(1, "BB_SOL_JET")
OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(294, "DGBFReady")
PRINTSTRING("Waiting for models to laod for STAGE_CHASE_PLANE") PRINTNL()
WAIT(0)
ENDWHILE
BREAK
CASE STAGE_KILL_PASSENGERS
IF GET_BUILDING_DATA(PlaneCrashTrench, BUILDINGNAME_IPL_PLANE_CRASH_TRENCH)
SET_BUILDING_STATE(BUILDINGNAME_IPL_PLANE_CRASH_TRENCH, BUILDINGSTATE_DESTROYED)
ENDIF
// REQUEST_MODEL(SHAMAL)
REQUEST_MODEL(SANCHEZ)
REQUEST_MODEL(S_M_M_PILOT_01)
REQUEST_MODEL(G_M_Y_MEXGANG_01)
REQUEST_MODEL(G_M_Y_MEXGOON_02)
REQUEST_MODEL(PROP_SHAMAL_CRASH)
REQUEST_ANIM_DICT("missmartin1@exit_plane")
REQUEST_ANIM_DICT("missmartin1@leadinoutmartin_1_dead_pilot")
// WHILE NOT HAS_MODEL_LOADED(SHAMAL)
WHILE NOT HAS_MODEL_LOADED(SANCHEZ)
OR NOT HAS_MODEL_LOADED(S_M_M_PILOT_01)
OR NOT HAS_MODEL_LOADED(G_M_Y_MEXGANG_01)
OR NOT HAS_MODEL_LOADED(G_M_Y_MEXGOON_02)
OR NOT HAS_MODEL_LOADED(PROP_SHAMAL_CRASH)
OR NOT HAS_ANIM_DICT_LOADED("missmartin1@exit_plane")
OR NOT HAS_ANIM_DICT_LOADED("missmartin1@leadinoutmartin_1_dead_pilot")
PRINTSTRING("Waiting for models to laod for STAGE_CUTSCENE_PLANE_CRASH") PRINTNL()
WAIT(0)
ENDWHILE
//Request and load checkpoint vehicle if on a replay
IF IS_REPLAY_IN_PROGRESS()
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
IF NOT IS_THIS_MODEL_A_HELI(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
AND NOT IS_THIS_MODEL_A_PLANE(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
WHILE NOT HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
PRINTSTRING("Waiting for replay checkpoint vehicle loading")
WAIT(0)
ENDWHILE
ENDIF
ENDIF
ENDIF
BREAK
CASE STAGE_CUTSCENE_PLANE_CRASH
REQUEST_CUTSCENE("Martin_1_mcs_1")
REQUEST_MODEL(SANCHEZ)
REQUEST_MODEL(PROP_SHAMAL_CRASH)
REQUEST_MODEL(S_M_M_PILOT_01)
WHILE NOT HAS_MODEL_LOADED(SANCHEZ)
OR NOT HAS_MODEL_LOADED(PROP_SHAMAL_CRASH)
OR NOT HAS_MODEL_LOADED(S_M_M_PILOT_01)
OR NOT HAS_CUTSCENE_LOADED()
PRINTSTRING("Waiting for models to laod for STAGE_CUTSCENE_PLANE_CRASH") PRINTNL()
WAIT(0)
ENDWHILE
IF GET_BUILDING_DATA(PlaneCrashTrench, BUILDINGNAME_IPL_PLANE_CRASH_TRENCH)
SET_BUILDING_STATE(BUILDINGNAME_IPL_PLANE_CRASH_TRENCH, BUILDINGSTATE_DESTROYED)
ENDIF
BREAK
CASE STAGE_DESTROY_SNIPER
REQUEST_MODEL(BURRITO3)
REQUEST_MODEL(P_RCSS_FOLDED)
REQUEST_MODEL(GET_PLAYER_VEH_MODEL(CHAR_MICHAEL, VEHICLE_TYPE_CAR))
WHILE NOT HAS_MODEL_LOADED(BURRITO3)
OR NOT HAS_MODEL_LOADED(P_RCSS_FOLDED)
OR NOT HAS_MODEL_LOADED(GET_PLAYER_VEH_MODEL(CHAR_MICHAEL, VEHICLE_TYPE_CAR))
PRINTSTRING("Waiting for vehicle recording and model to load") PRINTNL()
WAIT(0)
ENDWHILE
//Request and load checkpoint vehicle if on a replay
IF IS_REPLAY_IN_PROGRESS()
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
IF NOT IS_THIS_MODEL_A_HELI(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
AND NOT IS_THIS_MODEL_A_PLANE(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
WHILE NOT HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
PRINTSTRING("Waiting for replay checkpoint vehicle loading")
WAIT(0)
ENDWHILE
ENDIF
ENDIF
ENDIF
BREAK
CASE STAGE_END_CUTSCENE
REQUEST_ANIM_DICT("missmartin1@leadinoutmartin_1_ext")
WHILE NOT HAS_ANIM_DICT_LOADED("missmartin1@leadinoutmartin_1_ext")
PRINTSTRING("Waiting for anim dict to load") PRINTNL()
WAIT(0)
ENDWHILE
BREAK
ENDSWITCH
ENDPROC
PROC manageSkip()
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
DELETE_EVERYTHING()
REMOVE_BLIPS()
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
REQUEST_AND_LOAD_EVERYTHING()
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
g_bDisableNoirLensEffect = FALSE
SWITCH eMissionStage
CASE STAGE_INIT_MISSION
IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_MICHAEL
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, <<1392.3302, 1141.6107, 113.4430>>, 91.8877)
WAIT(0)
PRINTSTRING("SOLOMON1_WAITING_42") PRINTNL()
ENDWHILE
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds)
ENDIF
IF NOT IS_REPLAY_BEING_SET_UP()
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<1386.8092, 1142.3643, 113.3340>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 82.7671)
ENDIF
TRIGGER_MUSIC_EVENT("SOL1_DRIVE_TO_OBS_RT")
IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_TREVOR
IF NOT DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
IF IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
CREATE_VEHICLE_FOR_REPLAY(TrevCutsceneCar, <<1360.3199, 1166.0765, 112.4975>>, 181.0991, FALSE, FALSE, FALSE, FALSE, FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_START_VEHICLE_MODEL())
ENDIF
IF IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
CREATE_VEHICLE_FOR_REPLAY(TrevCutsceneCar, <<1371.1974, 1146.6389, 112.7587>>, 177.6714, FALSE, FALSE, FALSE, FALSE, FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_START_VEHICLE_MODEL())
ENDIF
ELSE
WHILE NOT CREATE_PLAYER_VEHICLE(TrevCutsceneCar, CHAR_TREVOR, <<1371.1974, 1146.6389, 112.7587>>, 177.6714)
PRINTSTRING("waiting on trevs car being created") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
ENDIF
ENDIF
IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
IF IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
CREATE_VEHICLE_FOR_REPLAY(PlayerCar, <<1360.3199, 1166.0765, 112.4975>>, 181.0991, FALSE, FALSE, FALSE, FALSE, FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_START_VEHICLE_MODEL())
ENDIF
IF IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
CREATE_VEHICLE_FOR_REPLAY(PlayerCar, <<1372.0696, 1131.5979, 112.8844>>, 19.2193, FALSE, FALSE, FALSE, FALSE, FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_START_VEHICLE_MODEL())
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(TrevCutsceneCar)
WHILE NOT CREATE_PLAYER_VEHICLE(TrevCutsceneCar, CHAR_TREVOR, <<1371.1974, 1146.6389, 112.7587>>, 177.6714)
PRINTSTRING("waiting on trevs car being created 1") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
ENDIF
//Create Trevor
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(CSTrev, CHAR_TREVOR, <<1386.1703, 1141.1138, 113.3340>>, 87.7877)
PRINTSTRING("Creating Trevor") PRINTNL()
WAIT(0)
ENDWHILE
// IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_TORSO, 0, 4)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_LEG, 18, 0)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_HAND, 0, 0)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_FEET, 16, 0)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_SPECIAL, 0, 0)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_SPECIAL2, 0, 0)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_DECL, 0, 0)
// ENDIF
//Task Trev to walk to his car/heli and drive off
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
SET_VEHICLE_DOORS_LOCKED(TrevCutsceneCar, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
OPEN_SEQUENCE_TASK(seqSequence)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(CSTrev, TRUE)
TASK_ENTER_VEHICLE(NULL, TrevCutsceneCar, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_WALK)
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, NULL, <<1360.3199, 1166.0765, 170>>, MISSION_GOTO, 20, 20, -1, 70, 60, -1)
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, PLAYER_PED_ID(), <<0,0,0>>, MISSION_FLEE, 40, -1, -1, 100, 90)
ENDIF
IF NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, GET_ENTITY_COORDS(PLAYER_PED_ID()), MISSION_FLEE, 30, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, -1, -1)
ENDIF
CLOSE_SEQUENCE_TASK(seqSequence)
TASK_PERFORM_SEQUENCE(CSTrev, seqSequence)
CLEAR_SEQUENCE_TASK(seqSequence)
FORCE_PED_AI_AND_ANIMATION_UPDATE(CSTrev)
ENDIF
ENDIF
//Parked car at side of house
IF NOT DOES_ENTITY_EXIST(ParkedCarAtStart)
ParkedCarAtStart = CREATE_VEHICLE(FUSILADE, <<1404.8268, 1118.4050, 113.8380>>, 90.5742)
SET_VEHICLE_COLOURS(ParkedCarAtStart, 112, 112)
SET_MODEL_AS_NO_LONGER_NEEDED(FUSILADE)
ENDIF
BREAK
CASE STAGE_DRIVE_TO_OBSERVATORY
IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_MICHAEL
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, <<1392.3302, 1141.6107, 113.4430>>, 91.8877)
WAIT(0)
PRINTSTRING("SOLOMON1_WAITING_43") PRINTNL()
ENDWHILE
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, FALSE)
ENDIF
IF NOT IS_REPLAY_BEING_SET_UP()
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<1386.8092, 1142.3643, 113.3340>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 82.7671)
ENDIF
TRIGGER_MUSIC_EVENT("SOL1_DRIVE_TO_OBS_RT")
IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_TREVOR
IF NOT DOES_ENTITY_EXIST(PlayerCar)
WHILE NOT CREATE_PLAYER_VEHICLE(PlayerCar, CHAR_MICHAEL, <<1372.0696, 1131.5979, 112.8844>>, 19.2193, TRUE, VEHICLE_TYPE_CAR)
PRINTSTRING("waiting on michaels car being created for replay") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
IF NOT DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
IF IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
CREATE_VEHICLE_FOR_REPLAY(TrevCutsceneCar, <<1360.3199, 1166.0765, 112.4975>>, 181.0991, FALSE, FALSE, FALSE, FALSE, FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_START_VEHICLE_MODEL())
ENDIF
IF IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
CREATE_VEHICLE_FOR_REPLAY(TrevCutsceneCar, <<1371.1974, 1146.6389, 112.7587>>, 177.6714, FALSE, FALSE, FALSE, FALSE, FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_START_VEHICLE_MODEL())
ENDIF
ELSE
WHILE NOT CREATE_PLAYER_VEHICLE(TrevCutsceneCar, CHAR_TREVOR, <<1371.1974, 1146.6389, 112.7587>>, 177.6714)
PRINTSTRING("waiting on trevs car being created 2") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
ENDIF
ENDIF
IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
IF IS_THIS_MODEL_A_HELI(GET_REPLAY_START_VEHICLE_MODEL())
CREATE_VEHICLE_FOR_REPLAY(PlayerCar, <<1360.3199, 1166.0765, 112.4975>>, 181.0991, FALSE, FALSE, FALSE, FALSE, FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_START_VEHICLE_MODEL())
ENDIF
IF IS_THIS_MODEL_A_CAR(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BIKE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_START_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_START_VEHICLE_MODEL())
CREATE_VEHICLE_FOR_REPLAY(PlayerCar, <<1372.0696, 1131.5979, 112.8844>>, 19.2193, FALSE, FALSE, FALSE, FALSE, FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_START_VEHICLE_MODEL())
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(TrevCutsceneCar)
WHILE NOT CREATE_PLAYER_VEHICLE(TrevCutsceneCar, CHAR_TREVOR, <<1371.1974, 1146.6389, 112.7587>>, 177.6714)
PRINTSTRING("waiting on trevs car being created 3") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
ENDIF
//Create Trevor
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(CSTrev, CHAR_TREVOR, <<1386.1703, 1141.1138, 113.3340>>, 87.7877)
PRINTSTRING("Creating Trevor") PRINTNL()
WAIT(0)
ENDWHILE
// IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_TORSO, 0, 4)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_LEG, 18, 0)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_HAND, 0, 0)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_FEET, 16, 0)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_SPECIAL, 0, 0)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_SPECIAL2, 0, 0)
// SET_PED_COMPONENT_VARIATION(CSTrev, PED_COMP_DECL, 0, 0)
// ENDIF
//Task Trev to walk to his car/heli and drive off
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
SET_VEHICLE_DOORS_LOCKED(TrevCutsceneCar, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
OPEN_SEQUENCE_TASK(seqSequence)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(CSTrev, TRUE)
TASK_ENTER_VEHICLE(NULL, TrevCutsceneCar, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_WALK)
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, NULL, <<1360.3199, 1166.0765, 170>>, MISSION_GOTO, 20, 20, -1, 70, 60, -1)
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, PLAYER_PED_ID(), <<0,0,0>>, MISSION_FLEE, 40, -1, -1, 100, 90)
ENDIF
IF NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, GET_ENTITY_COORDS(PLAYER_PED_ID()), MISSION_FLEE, 30, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, -1, -1)
ENDIF
CLOSE_SEQUENCE_TASK(seqSequence)
TASK_PERFORM_SEQUENCE(CSTrev, seqSequence)
CLEAR_SEQUENCE_TASK(seqSequence)
FORCE_PED_AI_AND_ANIMATION_UPDATE(CSTrev)
ENDIF
ENDIF
//Parked car at side of house
IF NOT DOES_ENTITY_EXIST(ParkedCarAtStart)
ParkedCarAtStart = CREATE_VEHICLE(FUSILADE, <<1404.8268, 1118.4050, 113.8380>>, 90.5742)
SET_VEHICLE_COLOURS(ParkedCarAtStart, 112, 112)
ENDIF
BREAK
CASE STAGE_SHOOT_PLANE
CLEAR_AREA(vSniperStartPos, 5, TRUE)
CREATE_REMOTE_SNIPER(sSniperData, vSniperStartPos, f_sniper_heading)
LOCK_REMOTE_SNIPER_ROTATION(sSniperData, TRUE, -179, -70)
LOCK_REMOTE_SNIPER_PITCH(sSniperData, -5, 20)
SET_REMOTE_SNIPER_ACTIVE(sSniperData, TRUE)
SET_REMOTE_SNIPER_ALLOW_QUIT(sSniperData, FALSE)
IF NOT DOES_ENTITY_EXIST(SniperVan)
SniperVan = CREATE_VEHICLE(BURRITO3, <<-363.5190, 1142.1714, 323.0888>>, 11.2577)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_LEFT, FALSE, TRUE)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_RIGHT, FALSE, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(SniperVan, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(SniperVan)
SET_VEHICLE_COLOURS(SniperVan, 0,0)
SET_VEHICLE_DIRT_LEVEL(SniperVan, 10)
SET_MODEL_AS_NO_LONGER_NEEDED(BURRITO3)
SET_VEHICLE_DISABLE_TOWING(SniperVan, TRUE)
RemoteSniper = CREATE_OBJECT(P_RCSS_FOLDED, <<-363.5190, 1142.1714, 323.0888>>)
ATTACH_ENTITY_TO_ENTITY(RemoteSniper, SniperVan, 0, << 0, -1.2, -0.3 >>, <<0,0,0>>)
SET_MODEL_AS_NO_LONGER_NEEDED(P_RCSS_FOLDED)
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_MICHAEL
WHILE NOT CREATE_PLAYER_PED_INSIDE_VEHICLE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, SniperVan)
WAIT(0)
PRINTSTRING("SOLOMON1_WAITING_43") PRINTNL()
ENDWHILE
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, FALSE)
ENDIF
IF NOT IS_REPLAY_BEING_SET_UP()
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SniperVan)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), SniperVan)
ENDIF
ENDIF
ENDIF
ENDIF
TRIGGER_MUSIC_EVENT("SOL1_SHOOT_PLANE_RT")
BREAK
CASE STAGE_CUTSCENE_PLANE_DESCENT
IF NOT bCamShakeAnimDictRequested
REQUEST_ANIM_DICT(strAnimDictCamShake)
bCamShakeAnimDictRequested = TRUE
ENDIF
IF NOT DOES_ENTITY_EXIST(SniperVan)
SniperVan = CREATE_VEHICLE(BURRITO3, <<138.8186, 1389.2057, 253.1271>>, 253.6382)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_LEFT, FALSE, TRUE)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_RIGHT, FALSE, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(SniperVan, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(SniperVan)
SET_VEHICLE_COLOURS(SniperVan, 0,0)
SET_VEHICLE_DIRT_LEVEL(SniperVan, 10)
SET_VEHICLE_DISABLE_TOWING(SniperVan, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(BURRITO3)
RemoteSniper = CREATE_OBJECT(P_RCSS_FOLDED, <<-363.5190, 1142.1714, 323.0888>>)
ATTACH_ENTITY_TO_ENTITY(RemoteSniper, SniperVan, 0, << 0, -1.2, -0.3 >>, <<0,0,0>>)
SET_MODEL_AS_NO_LONGER_NEEDED(P_RCSS_FOLDED)
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
WHILE NOT CREATE_PLAYER_PED_INSIDE_VEHICLE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, SniperVan)
WAIT(0)
PRINTSTRING("SOLOMON1_WAITING_49") PRINTNL()
ENDWHILE
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, FALSE)
ENDIF
IF NOT IS_REPLAY_BEING_SET_UP()
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SniperVan)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), SniperVan)
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(vehTitan)
vehTitan = CREATE_VEHICLE(SHAMAL, << -1638.6176, -2734.4397, 12.8201 >>, 327.2515)
CONTROL_LANDING_GEAR(vehTitan, LGC_RETRACT_INSTANT)
SET_ENTITY_INVINCIBLE(vehTitan, TRUE)
SET_VEHICLE_LIVERY(vehTitan, 1)
SET_MODEL_AS_NO_LONGER_NEEDED(SHAMAL)
SET_VEHICLE_ENGINE_ON(vehTitan, TRUE, TRUE)
ENDIF
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
START_PLAYBACK_RECORDED_VEHICLE(vehTitan, 294, "DGTitanEntry")
SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, 5000)
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(pedPilot)
pedPilot = CREATE_PED_INSIDE_VEHICLE(vehTitan, PEDTYPE_MISSION, S_M_M_PILOT_01)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HEAD, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_LEG, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_JBIB, 0, 0)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_M_PILOT_01)
ENDIF
//Load the camera's for the cutscene
SETUP_SPLINE_CAM_NODE_ARRAY_PLANE_SHOT_SCENE(scsPlaneShotScene, vehTitan)
SETUP_SPLINE_CAM_NODE_ARRAY_PLANE_TO_BIKE(scsPlaneToBike, vehTitan, vehBike)
WHILE NOT HAS_ANIM_DICT_LOADED(strAnimDictCamShake)
PRINTSTRING("waiting for camera's to load") PRINTNL()
WAIT(0)
ENDWHILE
// REQUEST_REMOTE_SNIPER_ASSETS(sSniperData)
// WHILE NOT HAVE_REMOTE_SNIPER_ASSETS_LOADED(sSniperData)
// WAIT(0)
// PRINTSTRING("SOLOMON1_WAITING_50") PRINTNL()
// ENDWHILE
// CLEAR_AREA(vSniperStartPos, 5, TRUE)
// CREATE_REMOTE_SNIPER(sSniperData, vSniperStartPos, f_sniper_heading)
//
// SET_REMOTE_SNIPER_ACTIVE(sSniperData, TRUE)
BREAK
CASE STAGE_CHASE_PLANE
IF NOT DOES_ENTITY_EXIST(vehBike)
vehBike = CREATE_VEHICLE(SANCHEZ,vBFChaseStartCoords, fBFChaseStartHeading)
ENDIF
SET_VEHICLE_ENGINE_ON(vehBike, TRUE, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(SANCHEZ)
IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_TREVOR
WHILE NOT CREATE_PLAYER_PED_INSIDE_VEHICLE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], CHAR_TREVOR, vehBike)
WAIT(0)
PRINTSTRING("SOLOMON1_WAITING_49") PRINTNL()
ENDWHILE
// IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_TORSO, 0, 4)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_LEG, 18, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_HAND, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_FEET, 16, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_SPECIAL, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_SPECIAL2, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_DECL, 0, 0)
// ENDIF
SET_PED_COMP_ITEM_CURRENT_SP(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], COMP_TYPE_PROPS, PROPS_P1_HEADSET)
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, FALSE)
ENDIF
IF NOT IS_REPLAY_BEING_SET_UP()
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehBike)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehBike)
ENDIF
ENDIF
ENDIF
// GIVE_PED_HELMET(PLAYER_PED_ID(), FALSE)
IF NOT DOES_ENTITY_EXIST(vehTitan)
vehTitan = CREATE_VEHICLE(SHAMAL, << -1638.6176, -2734.4397, 12.8201 >>, 327.2515)
CONTROL_LANDING_GEAR(vehTitan, LGC_RETRACT_INSTANT)
SET_ENTITY_INVINCIBLE(vehTitan, TRUE)
SET_VEHICLE_LIVERY(vehTitan, 1)
START_PLAYBACK_RECORDED_VEHICLE(vehTitan, 1, "BB_SOL_JET")
SET_PLAYBACK_SPEED(vehTitan,0.4)
SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, 13662)
SET_MODEL_AS_NO_LONGER_NEEDED(SHAMAL)
SET_VEHICLE_ENGINE_ON(vehTitan, TRUE, TRUE)
ENDIF
IF NOT DOES_ENTITY_EXIST(pedPilot)
pedPilot = CREATE_PED_INSIDE_VEHICLE(vehTitan, PEDTYPE_MISSION, S_M_M_PILOT_01)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HEAD, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_LEG, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_JBIB, 0, 0)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_M_PILOT_01)
ENDIF
IF IS_VEHICLE_DRIVEABLE(vehBike)
START_PLAYBACK_RECORDED_VEHICLE(vehBike, iRecNo, "DGBFReady")
SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehBike, 18400)
ENDIF
TRIGGER_MUSIC_EVENT("SOL1_CHASE_PLANE_RT")
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
BREAK
CASE STAGE_KILL_PASSENGERS
//Should be still on the sanchez on replay commenting this out for bug 1908651
//Create players car and put him in it.
/*IF IS_REPLAY_IN_PROGRESS()
IF NOT DOES_ENTITY_EXIST(PlayerCar)
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
IF NOT IS_THIS_MODEL_A_HELI(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
AND NOT IS_THIS_MODEL_A_PLANE(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
PlayerCar = CREATE_REPLAY_CHECKPOINT_VEHICLE(<<2776.9570, 4740.3716, 44.9082>>, 341.7251)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
ELSE
PlayerCar = CREATE_VEHICLE(SANCHEZ, <<2776.9570, 4740.3716, 44.9082>>, 341.7251)
ENDIF
ELSE
PlayerCar = CREATE_VEHICLE(SANCHEZ, <<2776.9570, 4740.3716, 44.9082>>, 341.7251)
ENDIF
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(PlayerCar, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(SANCHEZ)
SET_VEHICLE_HAS_STRONG_AXLES(PlayerCar, TRUE)
ENDIF
ELSE*/
IF NOT DOES_ENTITY_EXIST(PlayerCar)
PlayerCar = CREATE_VEHICLE(SANCHEZ, <<2776.9570, 4740.3716, 44.9082>>, 341.7251)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(PlayerCar, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(SANCHEZ)
ENDIF
//ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_TREVOR
WHILE NOT CREATE_PLAYER_PED_INSIDE_VEHICLE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], CHAR_TREVOR, PlayerCar)
WAIT(0)
PRINTSTRING("SOLOMON1_WAITING_61") PRINTNL()
ENDWHILE
// IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_TORSO, 0, 4)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_LEG, 18, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_HAND, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_FEET, 16, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_SPECIAL, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_SPECIAL2, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_DECL, 0, 0)
// ENDIF
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, FALSE)
ENDIF
IF NOT IS_REPLAY_BEING_SET_UP()
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), PlayerCar)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), PlayerCar)
ENDIF
ENDIF
// IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), PlayerCar)
// IF IS_THIS_MODEL_A_BIKE(GET_ENTITY_MODEL(PlayerCar))
// SET_PED_HELMET(PLAYER_PED_ID(), FALSE)
// ENDIF
// ENDIF
SET_VEHICLE_ENGINE_ON(PlayerCar, TRUE, TRUE)
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P1_HEADSET)
//Original location
//ObjTitan = CREATE_OBJECT(PROP_SHAMAL_CRASH, <<2808.3870, 4795.4839, 45.8104>>)
//Creating object at different location for NG
ObjTitan = CREATE_OBJECT_NO_OFFSET(PROP_SHAMAL_CRASH, <<2807.691895, 4796.448730, 47.668404>> )
SET_ENTITY_COLLISION(ObjTitan, FALSE)
SET_ENTITY_ROTATION(ObjTitan, <<-0.000000, -0.000000, -11.340065>> )
SET_ENTITY_QUATERNION(ObjTitan, -0.0162, -0.0524, -0.1071, 0.9927)
SET_ENTITY_INVINCIBLE(ObjTitan, TRUE)
FREEZE_ENTITY_POSITION(ObjTitan, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_SHAMAL_CRASH)
IF NOT DOES_ENTITY_EXIST(pedPilot)
pedPilot = CREATE_PED(PEDTYPE_MISSION, S_M_M_PILOT_01, <<2809.4, 4801.3, 47.7>>, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HEAD, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_LEG, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_JBIB, 0, 0)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedPilot, TRUE)
SET_ENTITY_COORDS(pedPilot, <<2808.3870, 4795.4839, 45.8104>>)
ATTACH_ENTITY_TO_ENTITY(pedPilot, ObjTitan, 0, << -0.54, 5.7, 0.03 >>, <<0,0,0>>)
TASK_PLAY_ANIM(pedPilot, "missmartin1@leadinoutmartin_1_dead_pilot", "dead_pilot_leadin_loop", INSTANT_BLEND_IN,
NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE)
SET_PED_KEEP_TASK(pedPilot, TRUE)
SET_ENTITY_COLLISION(pedPilot, FALSE)
APPLY_PED_BLOOD_SPECIFIC(pedPilot, ENUM_TO_INT(PDZ_HEAD), 0.515, 0.814, 300.781, 0.975, 3, 0.00, "stab")
APPLY_PED_BLOOD_SPECIFIC(pedPilot, ENUM_TO_INT(PDZ_HEAD), 0.633, 0.620, 300.617, 0.262, 1, 0.00, "ShotgunLargeMonolithic")
SET_PED_CAN_BE_TARGETTED(pedPilot, FALSE)
SET_FACIAL_IDLE_ANIM_OVERRIDE(pedPilot, "dead_1")
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_M_PILOT_01)
ENDIF
// vehTitan = CREATE_VEHICLE(SHAMAL, <<2808.3870, 4795.4839, 45.8104>>, 348.6388)
// SET_VEHICLE_DOOR_OPEN(vehTitan, SC_DOOR_FRONT_LEFT, FALSE, TRUE)
// SET_ENTITY_ROTATION(vehTitan, <<-1.2048, -6.1718, -12.3839>>)
// SET_ENTITY_QUATERNION(vehTitan, -0.0162, -0.0524, -0.1071, 0.9927)
// SET_ENTITY_INVINCIBLE(vehTitan, TRUE)
// CONTROL_LANDING_GEAR(vehTitan, LGC_RETRACT_INSTANT)
// SET_MODEL_AS_NO_LONGER_NEEDED(SHAMAL)
// SET_VEHICLE_LIVERY(vehTitan, 1)
// SET_VEHICLE_ENGINE_ON(vehTitan, FALSE, TRUE)
// pedPilot = CREATE_PED_INSIDE_VEHICLE(vehTitan, PEDTYPE_MISSION, S_M_M_PILOT_01)
// SET_ENTITY_HEALTH(pedPilot, 0)
// SET_MODEL_AS_NO_LONGER_NEEDED(S_M_M_PILOT_01)
//Create the 2 passengers
IF NOT DOES_ENTITY_EXIST(endGuy[0])
//Pre NG location
//endGuy[0] = CREATE_PED(PEDTYPE_MISSION, G_M_Y_MEXGANG_01, <<2806.1355, 4801.3262, 46.0759>>, 78.4343)
endGuy[0] = CREATE_PED(PEDTYPE_MISSION, G_M_Y_MEXGANG_01, <<2807.3120, 4802.3140, 46.3392>>, 78.4343)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_HEAD, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_TORSO, 1, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_LEG, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_FEET, 0, 2)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_JBIB, 0, 0)
STOP_PED_WEAPON_FIRING_WHEN_DROPPED(endGuy[0])
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(endGuy[0], TRUE)
GIVE_WEAPON_TO_PED(endGuy[0], WEAPONTYPE_PISTOL, 100)
APPLY_PED_BLOOD_BY_ZONE(endGuy[0], ENUM_TO_INT(PDZ_HEAD), 0.360, 0.710, "ShotgunSmall")
SET_PED_SPHERE_DEFENSIVE_AREA(endGuy[0], GET_ENTITY_COORDS(endGuy[0]), 10)
SET_PED_COMBAT_ATTRIBUTES(endGuy[0], CA_CAN_CHARGE, TRUE)
//PRE NG ANIM LOCATION
//TASK_PLAY_ANIM_ADVANCED(endGuy[0], "missmartin1@exit_plane", "exit_plane_guy_b", <<2808.3870, 4795.4839, 47.4224>>, <<0,0,-0.21>>, NORMAL_BLEND_IN, INSTANT_BLEND_OUT, -1,AF_EXTRACT_INITIAL_OFFSET)
TASK_PLAY_ANIM_ADVANCED(endGuy[0], "missmartin1@exit_plane", "exit_plane_guy_b", <<2804.3113, 4798.0303, 46.7273>>, <<0,0,-0.21>>, NORMAL_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET)
iAnimTaskTime = GET_GAME_TIMER()
// LeavingJetSyncScene = CREATE_SYNCHRONIZED_SCENE(<<2808.3870, 4795.4839, 47.4224>>, <<0,0,-0.21>>)
// TASK_SYNCHRONIZED_SCENE(endGuy[0], LeavingJetSyncScene, "missmartin1@exit_plane", "exit_plane_guy_b", INSTANT_BLEND_IN, INSTANT_BLEND_OUT)
ENDIF
// IF NOT DOES_ENTITY_EXIST(endGuy[0])
// IF IS_VEHICLE_DRIVEABLE(vehTitan)
// endGuy[0] = CREATE_PED_INSIDE_VEHICLE(vehTitan, PEDTYPE_MISSION, G_M_Y_MEXGANG_01, VS_FRONT_RIGHT)
// GIVE_WEAPON_TO_PED(endGuy[0], WEAPONTYPE_PISTOL, 100, TRUE)
// OPEN_SEQUENCE_TASK(seqSequence)
// TASK_LEAVE_VEHICLE(NULL, vehTitan, ECF_DONT_CLOSE_DOOR)
//// TASK_COMBAT_PED(NULL, PLAYER_PED_ID())
// CLOSE_SEQUENCE_TASK(seqSequence)
// TASK_PERFORM_SEQUENCE(endGuy[0], seqSequence)
// CLEAR_SEQUENCE_TASK(seqSequence)
// SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(endGuy[0], vehTitan, <<0,0,0>>, 10)
// SET_PED_COMBAT_ATTRIBUTES(endGuy[0], CA_CAN_CHARGE, TRUE)
// ENDIF
// ENDIF
IF NOT DOES_ENTITY_EXIST(endGuy[1])
endGuy[1] = CREATE_PED(PEDTYPE_MISSION, G_M_Y_MEXGOON_02, <<2805.3694, 4799.1553, 46.0390>>, 82.1640)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_HEAD, 0, 1)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_TORSO, 0, 2)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_LEG, 0, 2)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_JBIB, 0, 0)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(endGuy[1], TRUE)
// LeavingJetSyncScene = CREATE_SYNCHRONIZED_SCENE(<<2808.3870, 4795.4839, 47.4224>>, <<0,0,-0.21>>)
// TASK_SYNCHRONIZED_SCENE(endGuy[1], LeavingJetSyncScene, "missmartin1@exit_plane", "exit_plane_guy_a", INSTANT_BLEND_IN, INSTANT_BLEND_OUT)
//PRE NG
//TASK_PLAY_ANIM_ADVANCED(endGuy[1], "missmartin1@exit_plane", "exit_plane_guy_a", <<2808.3870, 4795.4839, 47.4224>>, <<0, 0, -0.21>>, NORMAL_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_HOLD_LAST_FRAME|AF_EXTRACT_INITIAL_OFFSET)
TASK_PLAY_ANIM_ADVANCED(endGuy[1], "missmartin1@exit_plane", "exit_plane_guy_a", <<2806.2720, 4799.6250, 46.5135>>, <<0, 0, 40.0>>, NORMAL_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_HOLD_LAST_FRAME|AF_EXTRACT_INITIAL_OFFSET|AF_NOT_INTERRUPTABLE)
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(G_M_Y_MEXGANG_01)
SET_MODEL_AS_NO_LONGER_NEEDED(G_M_Y_MEXGOON_02)
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_KILL_PASSENGERS")
START_AUDIO_SCENE("MARTIN_1_KILL_PASSENGERS")
ENDIF
TRIGGER_MUSIC_EVENT("SOL1_CRASHED_PLANE_RT")
BREAK
CASE STAGE_CUTSCENE_PLANE_CRASH
vehBike = CREATE_VEHICLE(SANCHEZ,<< 2350.7231, 3925.1118, 34.6029 >>, 298.6736)
SET_VEHICLE_ENGINE_ON(vehBike, TRUE, TRUE)
IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_TREVOR
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], CHAR_TREVOR,<< -450.3808, 1065.3434, 326.5121 >>)
WAIT(0)
PRINTSTRING("SOLOMON1_WAITING_61") PRINTNL()
ENDWHILE
// IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_TORSO, 0, 4)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_LEG, 18, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_HAND, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_FEET, 16, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_SPECIAL, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_SPECIAL2, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_DECL, 0, 0)
// ENDIF
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, FALSE)
ENDIF
// REMOVE_PED_HELMET(PLAYER_PED_ID(), TRUE)
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P1_HEADSET)
ObjTitan = CREATE_OBJECT_NO_OFFSET(PROP_SHAMAL_CRASH, <<2807.691895, 4796.448730, 47.668404>>)
SET_ENTITY_ROTATION(ObjTitan, <<-0.000000, -0.000000, -11.340065>>)
SET_ENTITY_QUATERNION(ObjTitan, -0.0162, -0.0524, -0.1071, 0.9927)
SET_ENTITY_INVINCIBLE(ObjTitan, TRUE)
FREEZE_ENTITY_POSITION(ObjTitan, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_SHAMAL_CRASH)
// pedPilot = CREATE_PED_INSIDE_VEHICLE(vehTitan, PEDTYPE_MISSION, S_M_M_PILOT_01)
// SET_ENTITY_HEALTH(pedPilot, 0)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_M_PILOT_01)
BREAK
CASE STAGE_DESTROY_SNIPER
REMOVE_PTFX_ASSET()
//Set up Michael
IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_MICHAEL
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, <<-365.1108, 1146.2261, 323.6802>>, 212.6341)//<<-370.9615, 1151.7002, 324.3864>>, 225.63827)
PRINTSTRING("Waiting for Michael to be created") PRINTNL()
WAIT(0)
ENDWHILE
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, FALSE)
ENDIF
IF NOT IS_REPLAY_BEING_SET_UP()
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-365.1108, 1146.2261, 323.6802>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 212.6341)
ENDIF
//Create players car.
IF IS_REPLAY_IN_PROGRESS()
IF NOT DOES_ENTITY_EXIST(MichaelsCar)
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
//These 2 commands should clear any previous cars created from before failing mission for bug 1706193
DELETE_ALL_SCRIPT_CREATED_PLAYER_VEHICLES(CHAR_MICHAEL)
DELETE_VEHICLE_GEN_VEHICLES_IN_AREA(<<-386.6838, 1202.5878, 324.6417>>, 20, TRUE)
IF NOT IS_THIS_MODEL_A_HELI(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
AND NOT IS_THIS_MODEL_A_PLANE(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
MichaelsCar = CREATE_REPLAY_CHECKPOINT_VEHICLE(<<-386.6838, 1202.5878, 324.6417>>, 100.5474)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
ENDIF
ENDIF
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(MichaelsCar, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
ENDIF
ENDIF
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
REQUEST_MODEL(PROP_SHAMAL_CRASH)
WHILE NOT HAS_MODEL_LOADED(PROP_SHAMAL_CRASH)
WAIT(0)
ENDWHILE
ObjTitan = CREATE_OBJECT_NO_OFFSET(PROP_SHAMAL_CRASH, <<2807.691895, 4796.448730, 47.668404>> )
SET_ENTITY_COLLISION(ObjTitan, FALSE)
SET_ENTITY_ROTATION(ObjTitan, <<-0.000000, -0.000000, -11.340065>>)
SET_ENTITY_QUATERNION(ObjTitan, -0.0162, -0.0524, -0.1071, 0.9927)
SET_ENTITY_INVINCIBLE(ObjTitan, TRUE)
FREEZE_ENTITY_POSITION(ObjTitan, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_SHAMAL_CRASH)
IF GET_BUILDING_DATA(PlaneCrashTrench, BUILDINGNAME_IPL_PLANE_CRASH_TRENCH)
SET_BUILDING_STATE(BUILDINGNAME_IPL_PLANE_CRASH_TRENCH, BUILDINGSTATE_DESTROYED)
ENDIF
BREAK
CASE STAGE_END_CUTSCENE
//Set up a scenario blocking area for the barn area to stop peds spawning in
CLEAR_AREA(<<1216.6, 1852.6, 78.8>>, 60, TRUE)
BarnBlockingArea = ADD_SCENARIO_BLOCKING_AREA(<<1288, 1962.8, 128.4>>, <<1139.2, 1800.8, 59.5>>)
IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
ENDIF
//Set up Michael#
IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_MICHAEL
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, <<1204.7, 1859, 78.2>>, 214.5280)
PRINTSTRING("Waiting for Michael to be created") PRINTNL()
WAIT(0)
ENDWHILE
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds)
ENDIF
IF NOT IS_REPLAY_BEING_SET_UP()
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<1204.7, 1859, 78.2>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 214.5280)
ENDIF
BREAK
CASE PASSED_MISSION
MissionPassed()
BREAK
ENDSWITCH
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDPROC
// NON-Stage FUNCTIONS AND PROCEDURES
// GAMEPLAY
//PROC DUMP_CARGO()
// VECTOR vSpawn
// INT iRandCrate
// INT iRandForce
// OBJECT_INDEX obj
//
// IF fRecordingTime < Asset.skipPlaneDumpStop
// IF bSetPiece[2] = TRUE
// IF TIMERB() > iRand
//
// vSpawn = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan,<<-2,0,0>>)
// iRandCrate = GET_RANDOM_INT_IN_RANGE(0,6)
// iRandForce = GET_RANDOM_INT_IN_RANGE(-3,3)
// iRand = GET_RANDOM_INT_IN_RANGE(1000,2500)
// //PRINTINT(iRand)PRINTNL()
//
// IF iRandCrate = 0
// obj = CREATE_OBJECT(Asset.mnCrate1,vSpawn)
// ENDIF
// IF iRandCrate = 1
// obj = CREATE_OBJECT(Asset.mnCrate2,vSpawn)
// ENDIF
// IF iRandCrate = 2
// obj = CREATE_OBJECT(Asset.mnCrate3,vSpawn)
// ENDIF
// IF iRandCrate = 3
// obj = CREATE_OBJECT(Asset.mnCrate4,vSpawn)
// ENDIF
// IF iRandCrate = 4
// obj = CREATE_OBJECT(Asset.mnCrate5,vSpawn)
// ENDIF
// IF iRandCrate = 5
// obj = CREATE_OBJECT(Asset.mnCrate6,vSpawn)
// ENDIF
//
// IF DOES_ENTITY_HAVE_PHYSICS(obj)
// APPLY_FORCE_TO_ENTITY(obj,APPLY_TYPE_FORCE,<<1,iRandForce,2>>,VECTOR_ZERO,0,TRUE,TRUE,TRUE)
// ENDIF
//
// SETTIMERB(0)
// ENDIF
// ENDIF
// ENDIF
//ENDPROC
PROC HIGHLIGHT_PED_ON_REMOTE_SNIPER_HUD_NO_THERMAL(REMOTE_SNIPER_DATA &SniperData, PED_INDEX &ped)
IF NOT IS_PED_INJURED(ped)
IF WAS_PED_SKELETON_UPDATED(ped)
VECTOR vTopPos, vBottomPos, vLeftPos, vRightPos, vBackPos, vFrontPos
VECTOR vCamPos = GET_CAM_COORD(SniperData.cam_rifle)
VECTOR vCamRot = GET_ENTITY_ROTATION(SniperData.obj_sniper)
//These modifiers are fudged, and are used to make sure the tags are in the right position at any fov level
FLOAT fOffsetModifierX = SniperData.f_current_fov_plus_recoil * 1.345
FLOAT fOffsetModifierY = SniperData.f_current_fov_plus_recoil
//Get a set of coordinates that surround the the current ped
vLeftPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ped, <<0.45, 20.0/*0.0*/, 0.0>>)
vRightPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ped, <<-0.45, 20.0/*0.0*/, 0.0>>)
vBackPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ped, <<0.0, 19.7/*-0.3*/, 0.0>>)
vFrontPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(ped, <<0.0, 20.3/*0.3*/, 0.0>>)
vTopPos = GET_PED_BONE_COORDS(ped, BONETAG_HEAD, <<0.0, 20.0/*0.0*/, 0.0>>) + <<0.0, 0.0, 0.2>>
VECTOR vLeftFootPos = GET_PED_BONE_COORDS(ped, BONETAG_L_FOOT, <<0.0, 0.0, 0.0>>) - <<0.0, 0.0, 0.2>>
VECTOR vRightFootPos = GET_PED_BONE_COORDS(ped, BONETAG_R_FOOT, <<0.0, 0.0, 0.0>>) - <<0.0, 0.0, 0.2>>
IF vLeftFootPos.z < vRightFootPos.z
vBottomPos = vLeftFootPos
ELSE
vBottomPos = vRightFootPos
ENDIF
//Work out the difference between these coords and the current camera position
VECTOR vTopPosDiff = vTopPos - vCamPos
VECTOR vBottomPosDiff = vBottomPos - vCamPos
VECTOR vLeftPosDiff = vLeftPos - vCamPos
VECTOR vRightPosDiff = vRightPos - vCamPos
VECTOR vBackPosDiff = vBackPos - vCamPos
VECTOR vFrontPosDiff = vFrontPos - vCamPos
//Use the differences to work out the angles the camera
//would have to face for these coordinates to be dead centre
FLOAT fLeftHeading = GET_HEADING_FROM_VECTOR_2D(vLeftPosDiff.x, vLeftPosDiff.y)
FLOAT fRightHeading = GET_HEADING_FROM_VECTOR_2D(vRightPosDiff.x, vRightPosDiff.y)
FLOAT fBackHeading = GET_HEADING_FROM_VECTOR_2D(vBackPosDiff.x, vBackPosDiff .y)
FLOAT fFrontHeading = GET_HEADING_FROM_VECTOR_2D(vFrontPosDiff.x, vFrontPosDiff.y)
FLOAT fTopPitch = ATAN2(vTopPosDiff.z, DISTANCE_BETWEEN_COORDS(vTopPos, vCamPos, TRUE, TRUE))
FLOAT fBottomPitch=ATAN2(vBottomPosDiff.z,DISTANCE_BETWEEN_COORDS(vBottomPos, vCamPos,TRUE,TRUE))
//For the box width: need to consider what the heading of the ped is.
//If they're facing side on to the camera the front and back offsets should be used
IF ABSF(fBackHeading - fFrontHeading) > ABSF(fLeftHeading - fRightHeading)
fLeftHeading = fBackHeading
fRightHeading = fFrontHeading
ENDIF
//Convert the differences between the required angles and the current camera angle into screen offsets
FLOAT fXLeftOffset = (fLeftHeading - vCamRot.z) / fOffsetModifierX
FLOAT fXRightOffset = (fRightHeading - vCamRot.z) / fOffsetModifierX
FLOAT fTopYOffset = (fTopPitch - vCamRot.x) / fOffsetModifierY
FLOAT fBottomYOffset = (fBottomPitch - vCamRot.x) / fOffsetModifierY
//These just improve readability of the rectangle calculations
FLOAT fLeftX = 0.5 - fXLeftOffset
FLOAT fRightX = 0.5 - fXRightOffset
FLOAT fTopY = 0.5 - fTopYOffset
FLOAT fBottomY = 0.5 - fBottomYOffset
SET_WIDESCREEN_FORMAT(WIDESCREEN_FORMAT_CENTRE)
//Top and bottom lines
DRAW_RECT((fLeftX + fRightX) / 2.0, fTopY, ABSF(fLeftX - fRightX), 0.002, 255, 0, 0, 128)
DRAW_RECT((fLeftX + fRightX) / 2.0, fBottomY, ABSF(fLeftX - fRightX), 0.002, 255, 0, 0, 128)
//Side lines
DRAW_RECT(fLeftX, (fTopY + fBottomY) / 2.0, 0.002, ABSF(fTopY - fBottomY) + 0.002, 255, 0, 0, 128)
DRAW_RECT(fRightX, (fTopY + fBottomY) / 2.0, 0.002, ABSF(fTopY - fBottomY) + 0.002, 255, 0, 0, 128)
ENDIF
ENDIF
ENDPROC
FUNC BOOL drawPlaneHighlight(REMOTE_SNIPER_DATA &SniperData)
VECTOR vTopPos, vBottomPos, vLeftPos, vRightPos, vBackPos, vFrontPos
VECTOR vCamPos = GET_CAM_COORD(SniperData.cam_rifle)
VECTOR vCamRot = GET_ENTITY_ROTATION(SniperData.obj_sniper)
//These modifiers are fudged, and are used to make sure the tags are in the right position at any fov level
FLOAT fOffsetModifierX = SniperData.f_current_fov_plus_recoil * 1.345
FLOAT fOffsetModifierY = SniperData.f_current_fov_plus_recoil
//Left << -7.2953, 0.0, 0.0 >>
//Right << 7.3825, 0.0, 0.0 >>
//Back << 0.0, -10.7886, 0.0 >>
//Forward << 0.0, 9.0564, 0.0 >>
//Top << 0.0, 0.0, 3.4162 >>
//Bottom << 0.0, 0.0, -1.7393 >>
//Get a set of coordinates that surround the the current ped
vLeftPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, << -7.2953, 0.0, 0.0 >>)
vRightPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, << 7.3825, 0.0, 0.0 >>)
vBackPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, << 0.0, -10.7886, 0.0 >>)
vFrontPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, << 0.0, 9.0564, 0.0 >>)
vTopPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, << 0.0, 0.0, 3.4162 >>)
vBottomPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, << 0.0, 0.0, -1.7393 >>)
//Work out the difference between these coords and the current camera position
VECTOR vTopPosDiff = vTopPos - vCamPos
VECTOR vBottomPosDiff = vBottomPos - vCamPos
VECTOR vLeftPosDiff = vLeftPos - vCamPos
VECTOR vRightPosDiff = vRightPos - vCamPos
VECTOR vBackPosDiff = vBackPos - vCamPos
VECTOR vFrontPosDiff = vFrontPos - vCamPos
//Use the differences to work out the angles the camera
//would have to face for these coordinates to be dead centre
FLOAT fLeftHeading = GET_HEADING_FROM_VECTOR_2D(vLeftPosDiff.x, vLeftPosDiff.y)
FLOAT fRightHeading = GET_HEADING_FROM_VECTOR_2D(vRightPosDiff.x, vRightPosDiff.y)
FLOAT fBackHeading = GET_HEADING_FROM_VECTOR_2D(vBackPosDiff.x, vBackPosDiff .y)
FLOAT fFrontHeading = GET_HEADING_FROM_VECTOR_2D(vFrontPosDiff.x, vFrontPosDiff.y)
FLOAT fTopPitch = ATAN2(vTopPosDiff.z, DISTANCE_BETWEEN_COORDS(vTopPos, vCamPos, TRUE, TRUE))
FLOAT fBottomPitch = ATAN2(vBottomPosDiff.z, DISTANCE_BETWEEN_COORDS(vBottomPos, vCamPos, TRUE, TRUE))
//For the box width: need to consider what the heading of the ped is.
//If they're facing side on to the camera the front and back offsets should be used
IF ABSF(fBackHeading - fFrontHeading) > ABSF(fLeftHeading - fRightHeading)
fLeftHeading = fBackHeading
fRightHeading = fFrontHeading
ENDIF
FLOAT fCamRotZ = vCamRot.z
IF fCamRotZ < 0
fCamRotZ += 360
ENDIF
//Convert the differences between the required angles and the current camera angle into screen offsets
FLOAT fXLeftOffset = (fLeftHeading - fCamRotZ) / fOffsetModifierX
FLOAT fXRightOffset = (fRightHeading - fCamRotZ) / fOffsetModifierX
FLOAT fTopYOffset = (fTopPitch - vCamRot.x) / fOffsetModifierY
FLOAT fBottomYOffset = (fBottomPitch - vCamRot.x) / fOffsetModifierY
//These just improve readability of the rectangle calculations
FLOAT fLeftX = 0.5 - fXLeftOffset
FLOAT fRightX = 0.5 - fXRightOffset
FLOAT fTopY = 0.5 - fTopYOffset
FLOAT fBottomY = 0.5 - fBottomYOffset
SET_WIDESCREEN_FORMAT(WIDESCREEN_FORMAT_CENTRE)
FLOAT fCentreX = (fLeftX + fRightX) / 2.0
FLOAT fCentreY = (fTopY + fBottomY) / 2.0
FLOAT fWidth = ABSF(fLeftX - fRightX)
FLOAT fHeight = ABSF(fTopY - fBottomY)
FLOAT fArea = fWidth * fHeight
FLOAT fSmallestArea = 0.001
IF fArea < fSmallestArea
FLOAT fSquareSecArea = (fSmallestArea/fArea) * (fHeight*fHeight)
FLOAT fNewHeight = SQRT(fSquareSecArea)
FLOAT fNewWidth = fSmallestArea/fNewHeight
fWidth = fNewWidth
fHeight = fNewHeight
fRightX = fCentreX + (fNewWidth/2)
fLeftX = fCentreX - (fNewWidth/2)
fTopY = fCentreY + (fNewHeight/2)
fBottomY = fCentreY - (fNewHeight/2)
ENDIF
IF fArea > 0.01
RETURN FALSE
ELSE
DRAW_RECT(fCentreX, fTopY, fWidth, 0.002, 255, 0, 0, 128,TRUE)
DRAW_RECT(fRightX, fCentreY, 0.002, fHeight, 255, 0, 0, 128,TRUE)
DRAW_RECT(fCentreX, fBottomY, fWidth, 0.002, 255, 0, 0, 128,TRUE)
DRAW_RECT(fLeftX, fCentreY, 0.002, fHeight, 255, 0, 0, 128,TRUE)
RETURN TRUE
ENDIF
ENDFUNC
PROC drawAimSquare(REMOTE_SNIPER_DATA &SniperData, VECTOR vTargetOffset, FLOAT &fOutputX, FLOAT &fOutputY)
VECTOR vTopPos, vBottomPos, vLeftPos, vRightPos, vBackPos, vFrontPos
VECTOR vCamPos = GET_CAM_COORD(SniperData.cam_rifle)
VECTOR vCamRot = GET_ENTITY_ROTATION(SniperData.obj_sniper)
FLOAT fCrossSize = 1.0
FLOAT fDistanceInFront = 30.0
//These modifiers are fudged, and are used to make sure the tags are in the right position at any fov level
FLOAT fOffsetModifierX = SniperData.f_current_fov_plus_recoil * 1.345
FLOAT fOffsetModifierY = SniperData.f_current_fov_plus_recoil
//Get a set of coordinates that surround the the current ped
vLeftPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, <<fCrossSize, fDistanceInFront, 0.0>> + vTargetOffset)
vRightPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, <<-fCrossSize, fDistanceInFront, 0.0>> + vTargetOffset)
vBackPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, <<0.0, fDistanceInFront - fCrossSize, 0.0>> + vTargetOffset)
vFrontPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, <<0.0, fDistanceInFront + fCrossSize, 0.0>> + vTargetOffset)
vTopPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, <<0, fDistanceInFront, fCrossSize>> + vTargetOffset)
vBottomPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehTitan, <<0, fDistanceInFront, -fCrossSize>> + vTargetOffset)
//Work out the difference between these coords and the current camera position
VECTOR vTopPosDiff = vTopPos - vCamPos
VECTOR vBottomPosDiff = vBottomPos - vCamPos
VECTOR vLeftPosDiff = vLeftPos - vCamPos
VECTOR vRightPosDiff = vRightPos - vCamPos
VECTOR vBackPosDiff = vBackPos - vCamPos
VECTOR vFrontPosDiff = vFrontPos - vCamPos
//Use the differences to work out the angles the camera
//would have to face for these coordinates to be dead centre
FLOAT fLeftHeading = GET_HEADING_FROM_VECTOR_2D(vLeftPosDiff.x, vLeftPosDiff.y)
FLOAT fRightHeading = GET_HEADING_FROM_VECTOR_2D(vRightPosDiff.x, vRightPosDiff.y)
FLOAT fBackHeading = GET_HEADING_FROM_VECTOR_2D(vBackPosDiff.x, vBackPosDiff .y)
FLOAT fFrontHeading = GET_HEADING_FROM_VECTOR_2D(vFrontPosDiff.x, vFrontPosDiff.y)
FLOAT fTopPitch = ATAN2(vTopPosDiff.z, DISTANCE_BETWEEN_COORDS(vTopPos, vCamPos, TRUE, TRUE))
FLOAT fBottomPitch = ATAN2(vBottomPosDiff.z, DISTANCE_BETWEEN_COORDS(vBottomPos, vCamPos, TRUE, TRUE))
//For the box width: need to consider what the heading of the ped is.
//If they're facing side on to the camera the front and back offsets should be used
IF ABSF(fBackHeading - fFrontHeading) > ABSF(fLeftHeading - fRightHeading)
fLeftHeading = fBackHeading
fRightHeading = fFrontHeading
ENDIF
FLOAT fCamRotZ = vCamRot.z
IF fCamRotZ < 0
fCamRotZ += 360
ENDIF
//Convert the differences between the required angles and the current camera angle into screen offsets
FLOAT fXLeftOffset = (fLeftHeading - fCamRotZ) / fOffsetModifierX
FLOAT fXRightOffset = (fRightHeading - fCamRotZ) / fOffsetModifierX
FLOAT fTopYOffset = (fTopPitch - vCamRot.x) / fOffsetModifierY
FLOAT fBottomYOffset = (fBottomPitch - vCamRot.x) / fOffsetModifierY
//These just improve readability of the rectangle calculations
FLOAT fLeftX = 0.5 - fXLeftOffset
FLOAT fRightX = 0.5 - fXRightOffset
FLOAT fTopY = 0.5 - fTopYOffset
FLOAT fBottomY = 0.5 - fBottomYOffset
SET_WIDESCREEN_FORMAT(WIDESCREEN_FORMAT_CENTRE)
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD)
FLOAT fWidth = ABSF(fLeftX - fRightX)
FLOAT fHeight = ABSF(fTopY - fBottomY)
fOutputX = (fLeftX + fRightX) / 2.0
fOutputY = (fTopY + fBottomY) / 2.0
//Lines
//DRAW_RECT(fOutputX, fOutputY, ABSF(fLeftX - fRightX), 0.002, 255, 0, 0, 128)
//DRAW_RECT(fOutputX, fOutputY, 0.002, ABSF(fTopY - fBottomY), 255, 0, 0, 128)
DRAW_RECT(fOutputX, fTopY, fWidth, 0.002, 255, 0, 0, 128,TRUE)
DRAW_RECT(fRightX, fOutputY, 0.002, fHeight, 255, 0, 0, 128,TRUE)
DRAW_RECT(fOutputX, fBottomY, fWidth, 0.002, 255, 0, 0, 128,TRUE)
DRAW_RECT(fLeftX, fOutputY, 0.002, fHeight, 255, 0, 0, 128,TRUE)
ENDPROC
PROC RUBBER_BAND_BETWEEN_TWO_ENTITIES( ENTITY_INDEX entChaser, ENTITY_INDEX entTarget, FLOAT fOptimalDis,
FLOAT fMinSpeed = 0.7, FLOAT fMaxSpeed = 1.3)
IF NOT IS_ENTITY_DEAD(entChaser) AND NOT IS_ENTITY_DEAD(GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(entTarget))
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(entTarget))
fMainPlaybackSpeed= ( fOptimalDis /
GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(entChaser),
GET_ENTITY_COORDS(GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(entTarget))))
SET_PLAYBACK_SPEED(GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(entTarget), fMainPlaybackSpeed)
IF fMainPlaybackSpeed> fMaxSpeed
fMainPlaybackSpeed= fMaxSpeed
ENDIF
IF fMainPlaybackSpeed< fMinSpeed
fMainPlaybackSpeed= fMinSpeed
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC VECTOR GET_VEHICLE_ROTATION_LOCAL(VEHICLE_INDEX veh)
VECTOR v_rot = <<0.0, 0.0, 0.0>>
IF IS_VEHICLE_DRIVEABLE(veh)
v_rot = <<GET_ENTITY_PITCH(veh), GET_ENTITY_ROLL(veh), GET_ENTITY_HEADING(veh)>>
ENDIF
RETURN v_rot
ENDFUNC
#IF IS_DEBUG_BUILD
/// PURPOSE:
/// Converts the current position and rotation of the debug cam into an attach and point offset relative to a given vehicle.
/// This is useful for quickly creating cameras that will be attached to/pointed at vehicles.
/// PARAMS:
/// veh - The vehicle to attach to and point at. If NULL, the nearest vehicle will be used
/// b_include_source_info - If TRUE, the proc will also output info about the camera and vehicle's actual position and rotation
PROC OUTPUT_DEBUG_CAM_PARAMS_RELATIVE_TO_VEHICLE(VEHICLE_INDEX veh = NULL, BOOL b_include_source_info = FALSE)
CAMERA_INDEX cam = GET_DEBUG_CAM()
IF DOES_CAM_EXIST(cam)
IF NOT DOES_ENTITY_EXIST(veh)
INT i_search_flags = VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES
i_search_flags |= VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_A_PLAYER
i_search_flags |= VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES
i_search_flags |= VEHICLE_SEARCH_FLAG_RETURN_LAW_ENFORCER_VEHICLES
i_search_flags |= VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_A_DEAD_OR_DYING_PED
i_search_flags |= VEHICLE_SEARCH_FLAG_RETURN_VEHICLES_CONTAINING_GROUP_MEMBERS
i_search_flags |= VEHICLE_SEARCH_FLAG_ALLOW_VEHICLE_OCCUPANTS_TO_BE_PERFORMING_A_SCRIPTED_TASK
veh = GET_CLOSEST_VEHICLE(GET_CAM_COORD(cam), 500.0, DUMMY_MODEL_FOR_SCRIPT, i_search_flags)
ENDIF
IF IS_VEHICLE_DRIVEABLE(veh)
VECTOR vCamPos = GET_CAM_COORD(cam)
VECTOR vCamRot = GET_CAM_ROT(cam)
VECTOR v_veh_rot = GET_VEHICLE_ROTATION_LOCAL(veh)
IF v_veh_rot.z > 180.0
v_veh_rot.z = -180.0 -(180.0 - v_veh_rot.z)
ENDIF
VECTOR v_cam_front_pos = GET_CAM_COORD(cam) + (CONVERT_ROTATION_TO_DIRECTION_VECTOR(GET_CAM_ROT(cam)) * 3.0)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("ATTACH_CAM_TO_ENTITY(cam, veh, ")
SAVE_VECTOR_TO_DEBUG_FILE(GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(veh, vCamPos))
SAVE_STRING_TO_DEBUG_FILE(")")
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("POINT_CAM_AT_ENTITY(cam, veh, ")
SAVE_VECTOR_TO_DEBUG_FILE(GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(veh, v_cam_front_pos))
SAVE_STRING_TO_DEBUG_FILE(")")
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("SET_CAM_FOV(cam, ")
SAVE_FLOAT_TO_DEBUG_FILE(GET_CAM_FOV(cam))
SAVE_STRING_TO_DEBUG_FILE(")")
SAVE_NEWLINE_TO_DEBUG_FILE()
IF b_include_source_info
VECTOR v_veh_pos = GET_ENTITY_COORDS(veh)
SAVE_STRING_TO_DEBUG_FILE("Camera world coords: ")
SAVE_VECTOR_TO_DEBUG_FILE(vCamPos)
SAVE_STRING_TO_DEBUG_FILE(" Camera rotation: ")
SAVE_VECTOR_TO_DEBUG_FILE(vCamRot)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("Vehicle world coords: ")
SAVE_VECTOR_TO_DEBUG_FILE(v_veh_pos)
SAVE_STRING_TO_DEBUG_FILE(" Vehicle rotation: ")
SAVE_VECTOR_TO_DEBUG_FILE(v_veh_rot)
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
ENDIF
ENDIF
ENDPROC
#ENDIF
// Stage FUNCTIONS AND PROCEDURES
//Sets up the end of the mission for skipping to end
PROC SET_UP_MISSION_PASSED()
IF iStageSection = 0
CLEAR_AREA(<<2830.1670, 4743.4956, 46.4952>>, 20, TRUE)
// REQUEST_MODEL(PROP_DEST_PLANE)
// REQUEST_MODEL(CS_SEXTONDANIELS)
// WHILE NOT HAS_MODEL_LOADED(PROP_DEST_PLANE)
// WHILE NOT HAS_MODEL_LOADED(CS_SEXTONDANIELS)
// WAIT(0)
// ENDWHILE
//Create plane
// IF NOT DOES_ENTITY_EXIST(ObjCrashedPlane)
// ObjCrashedPlane = CREATE_OBJECT(PROP_DEST_PLANE, <<2835.90, 4739.27, 43.47>>)
// SET_ENTITY_ROTATION(ObjCrashedPlane, <<0,0,166.34>>)
// ENDIF
//Create Sexton
// IF NOT DOES_ENTITY_EXIST(pedTarget)
// pedTarget = CREATE_PED(PEDTYPE_MISSION, CS_SEXTONDANIELS, << 2836.3191, 4745.7349, 46.8542 >>, 155.3079)
// SET_ENTITY_HEALTH(pedTarget, 0)
// ENDIF
//Move player
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<2830.1670, 4743.4956, 46.4952>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 98.2722)
iStageSection ++
ENDIF
IF iStageSection = 1
LOAD_SCENE(<<2830.1670, 4743.4956, 46.4952>>)
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
MissionPassed()
ENDIF
ENDPROC
//PURPOSE: Initialise Mission
FUNC BOOL stageInitMission()
// SETUP
IF NOT bStageSetup
//Load text slot for mission
REQUEST_ADDITIONAL_TEXT("BFINJEC", MISSION_TEXT_SLOT)
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
PRINTSTRING("Waiting for additional text to load ") PRINTNL()
WAIT(0)
ENDWHILE
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<1367.5, 1122.5, 111.4>>, <<1377.8, 1138.7, 117.5>>, FALSE, FALSE)
SetupArrays()
TOGGLE_STEALTH_RADAR(FALSE)
iStageSection = 0
bStageSetup = TRUE
// UPDATE
ELSE
SWITCH iStageSection
CASE 0
iStageSection++
BREAK
ENDSWITCH
// MOVE STAGE ON
IF iStageSection >= 1
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
bStageSetup = FALSE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
//PURPOSE: Handles Trevor after opening cutscene.
PROC HANDLE_CUTSCENE_TREVOR()
//Make Trev head track Michael
IF iStageSection > 0
IF DOES_ENTITY_EXIST(CSTrev)
IF NOT IS_PED_INJURED(CSTrev)
IF GET_DISTANCE_BETWEEN_ENTITIES(CSTrev, PLAYER_PED_ID()) < 20
IF TrevLookTaskGiven = FALSE
TASK_LOOK_AT_ENTITY(CSTrev, PLAYER_PED_ID(), -1, SLF_DEFAULT, SLF_LOOKAT_HIGH)
TrevLookTaskGiven = TRUE
ENDIF
ELSE
IF TrevLookTaskGiven = TRUE
TASK_CLEAR_LOOK_AT(CSTrev)
TrevLookTaskGiven = FALSE
ENDIF
ENDIF
ENDIF
ELSE
PRINTSTRING("CSTrev doesn't exist") PRINTNL()
ENDIF
ENDIF
//Delete cutscene trev and his car once off screen and far enough away
IF DOES_ENTITY_EXIST(CSTrev)
IF NOT IS_PED_INJURED(CSTrev)
IF GET_DISTANCE_BETWEEN_ENTITIES(CSTrev, PLAYER_PED_ID()) > 100
AND NOT IS_ENTITY_ON_SCREEN(CSTrev)
DELETE_PED(CSTrev)
iTrevDeletedTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ELSE
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF GET_DISTANCE_BETWEEN_ENTITIES(TrevCutsceneCar, PLAYER_PED_ID()) > 100
OR NOT DOES_ENTITY_EXIST(CSTrev)
IF NOT IS_ENTITY_ON_SCREEN(TrevCutsceneCar)
DELETE_VEHICLE(TrevCutsceneCar)
ENDIF
ENDIF
ENDIF
ENDIF
//Give Trev a task to get another car and flee if his car is destroyed
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
AND DOES_ENTITY_EXIST(CSTrev)
IF NOT IS_PED_INJURED(CSTrev)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), CSTrev)
PLAY_PED_AMBIENT_SPEECH(CSTrev, "GENERIC_INSULT_MED", SPEECH_PARAMS_FORCE_NORMAL)
ENDIF
ENDIF
IF NOT IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
IF IS_PED_IN_VEHICLE(CSTrev, TrevCutsceneCar)
TASK_LEAVE_VEHICLE(CSTrev, TrevCutsceneCar)
ENDIF
IF NOT IS_PED_IN_VEHICLE(CSTrev, TrevCutsceneCar)
IF NOT IS_PED_IN_ANY_VEHICLE(CSTrev)
IF DOES_ENTITY_EXIST(GET_CLOSEST_VEHICLE(GET_ENTITY_COORDS(CSTrev), 200, DUMMY_MODEL_FOR_SCRIPT, VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES))
PRINTSTRING("There is a vehicle closer than 200metres") PRINTNL()
IF GET_SCRIPT_TASK_STATUS(CSTrev, SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(CSTrev, SCRIPT_TASK_ENTER_VEHICLE) <> WAITING_TO_START_TASK
TASK_ENTER_VEHICLE(CSTrev, GET_CLOSEST_VEHICLE(GET_ENTITY_COORDS(CSTrev), 200, DUMMY_MODEL_FOR_SCRIPT, VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES), -1, VS_DRIVER, PEDMOVEBLENDRATIO_RUN, ECF_JACK_ANYONE|ECF_RESUME_IF_INTERRUPTED)
ENDIF
ELSE
PRINTSTRING("There is not a vehicle closer than 200metres") PRINTNL()
IF GET_SCRIPT_TASK_STATUS(CSTrev, SCRIPT_TASK_SMART_FLEE_PED) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(CSTrev, SCRIPT_TASK_SMART_FLEE_PED) <> WAITING_TO_START_TASK
TASK_SMART_FLEE_PED(CSTrev, PLAYER_PED_ID(), 150, -1)
ENDIF
ENDIF
ENDIF
IF IS_PED_IN_ANY_VEHICLE(CSTrev)
IF GET_SCRIPT_TASK_STATUS(CSTrev, SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(CSTrev, SCRIPT_TASK_VEHICLE_MISSION) <> WAITING_TO_START_TASK
TASK_VEHICLE_MISSION_PED_TARGET(CSTrev, GET_VEHICLE_PED_IS_IN(CSTrev), PLAYER_PED_ID(), MISSION_FLEE, 40, DRIVINGMODE_AVOIDCARS_RECKLESS, -1, 1, FALSE)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
//PURPOSE: Performs the section where Michael drives to the observatory
FUNC BOOL stageDriveToObservatory()
HANDLE_CUTSCENE_TREVOR()
IF iStageSection > 4
AND iStageSection < 7
IF HAS_SCALEFORM_MOVIE_LOADED(sfSniperLoading)
HIDE_HUD_AND_RADAR_THIS_FRAME()
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD)
DRAW_SCALEFORM_MOVIE_FULLSCREEN(sfSniperLoading,255,255,255,0)
ENDIF
ENDIF
//CLean up the start car at side of the house.
IF bStageSetup
IF DOES_ENTITY_EXIST(ParkedCarAtStart)
IF GET_DISTANCE_BETWEEN_ENTITIES(ParkedCarAtStart, PLAYER_PED_ID()) > 100
SET_VEHICLE_AS_NO_LONGER_NEEDED(ParkedCarAtStart)
ELIF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), ParkedCarAtStart)
SET_VEHICLE_AS_NO_LONGER_NEEDED(ParkedCarAtStart)
ENDIF
ENDIF
ENDIF
// SETUP
IF NOT bStageSetup
PRINTSTRING("MISSION STAGE DRIVE TO OBSERVATORY") PRINTNL()
//Flags
missionCanFail = FALSE
hasSniperBeenSetToActive = FALSE
playerHasTakenTaxi = FALSE
RemoteSniperNeedsUpdated = FALSE
interactiveMusicStarted = FALSE
interactiveMusicStarted2 = FALSE
sniperCreated = FALSE
doneSnipe8Text2 = FALSE
DoneLoseCopsText = FALSE
vanFrozen = FALSE
timelapseRequired = FALSE
driveTaskCancelled = FALSE
doneGetOffChat = FALSE
sniperVanBlipRouteSet = FALSE
doneS1_HEAD = FALSE
doneS1_ATVAN = FALSE
doneS1_ATVAN2 = FALSE
doneS1_BIKE = FALSE
MikeEarPieceGiven = FALSE
nonTempEventsSetup = FALSE
TrevLookTaskGiven = FALSE
bVanDoorsLocked = FALSE
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
CLEAR_PRINTS()
REMOVE_CUTSCENE()
SET_INTERIOR_CAPPED(INTERIOR_V_RANCH, TRUE)
iStageSection = 0
iMoveStageOnTimer = 0
iTrevDeletedTimer = 0
iGetOffCarChatTimer = 0
SeatNextToVanBlockingArea = ADD_SCENARIO_BLOCKING_AREA(<<-358.3, 1130.6, 333.3>>, <<-323.6, 1170.2, 319.6>>)
IF NOT DOES_ENTITY_EXIST(CSTrev)
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
CSTrev = sSelectorPeds.pedID[SELECTOR_PED_TREVOR]
ENDIF
ENDIF
//If screen is faded out do a load scene at players coordinates now and then fade in the screen
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
END_REPLAY_SETUP()
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
IF DOES_ENTITY_EXIST(PlayerCar)
SET_VEHICLE_AS_NO_LONGER_NEEDED(PlayerCar)
ENDIF
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
Store_Vehicle_Snapshot_Only(TrevsStartCar, TrevCutsceneCar, TRUE)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(TrevCutsceneCar, FALSE)
ENDIF
ENDIF
//Give them both earpieces.
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
SET_PED_COMP_ITEM_CURRENT_SP(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], COMP_TYPE_PROPS, PROPS_P1_HEADSET, FALSE)
ENDIF
ENDIF
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P1_HEADSET, FALSE)
missionCanFail = TRUE
bStageSetup = TRUE
// UPDATE
ELSE
// PRINTSTRING("CASE = ") PRINTINT(iStageSection) PRINTNL()
//IF Trev set up for blocking of non temp events
IF nonTempEventsSetup = FALSE
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], TRUE)
nonTempEventsSetup = TRUE
ENDIF
ENDIF
ENDIF
//Create the sniper van once close enough.
IF iStageSection < 2
IF NOT DOES_ENTITY_EXIST(SniperVan)
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vDriveToPoint) < 200
REQUEST_MODEL(BURRITO3)
REQUEST_MODEL(P_RCSS_FOLDED)
IF HAS_MODEL_LOADED(BURRITO3)
AND HAS_MODEL_LOADED(P_RCSS_FOLDED)
SniperVan = CREATE_VEHICLE(BURRITO3, <<-363.5190, 1142.1714, 323.0888>>, 11.2577)
SET_ENTITY_LOAD_COLLISION_FLAG(SniperVan, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(SniperVan)
SET_VEHICLE_UNDRIVEABLE(SniperVan, TRUE)
SET_VEHICLE_COLOURS(SniperVan, 0,0)
SET_VEHICLE_DIRT_LEVEL(SniperVan, 10)
SET_VEHICLE_DISABLE_TOWING(SniperVan, TRUE)
// FREEZE_ENTITY_POSITION(SniperVan, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(BURRITO3)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_LEFT, FALSE, TRUE)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_RIGHT, FALSE, TRUE)
RemoteSniper = CREATE_OBJECT(P_RCSS_FOLDED, <<-363.5190, 1142.1714, 323.0888>>)
ATTACH_ENTITY_TO_ENTITY(RemoteSniper, SniperVan, 0, << 0, -1.2, -0.3 >>, <<0,0,0>>)
SET_MODEL_AS_NO_LONGER_NEEDED(P_RCSS_FOLDED)
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(SniperVan)
SETTIMERB(0)
ENDIF
ENDIF
ELSE
IF TIMERB() < 2000
IF IS_VEHICLE_DRIVEABLE(SniperVan)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_LEFT, FALSE, FALSE)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_RIGHT, FALSE, FALSE)
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(SniperVan)
ENDIF
ENDIF
IF vanFrozen = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vDriveToPoint) < 10
// FREEZE_ENTITY_POSITION(SniperVan, TRUE)
vanFrozen = TRUE
ENDIF
ENDIF
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vDriveToPoint) > 200
IF DOES_ENTITY_EXIST(RemoteSniper)
DELETE_OBJECT(RemoteSniper)
ENDIF
DELETE_VEHICLE(SniperVan)
ENDIF
ENDIF
ENDIF
//Don't allow Trev to drive off if player is standing in his bodhi
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
// PRINTSTRING("car offset is ") PRINTVECTOR(GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(TrevCutsceneCar, GET_CAM_COORD(GET_DEBUG_CAM()))) PRINTNL()
IF DOES_ENTITY_EXIST(CSTrev)
IF NOT IS_PED_INJURED(CSTrev)
IF IS_PED_IN_VEHICLE(CSTrev, TrevCutsceneCar)
IF GET_ENTITY_MODEL(TrevCutsceneCar) = BODHI2
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), CSTrev) < 5
AND NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
vplayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID())
GET_GROUND_Z_FOR_3D_COORD(vplayerCoords, fGroundz)
// PRINTSTRING("vplayerCoords = ") PRINTVECTOR(vplayerCoords) PRINTNL()
IF (IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1371.318848,1149.513306,113.365517>>, <<1371.155762,1145.732544,115.321281>>, 1.500000) AND vplayerCoords.z > 114.2 )
OR (IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), TrevCutsceneCar) AND vplayerCoords.z > (fGroundz + 0.2))
OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(TrevCutsceneCar, <<-0.00188396, -0.300501, 1.24172>>), <<1.5,1.5,2>>)
IF driveTaskCancelled = FALSE
CLEAR_PED_TASKS(CSTrev)
IF NOT IS_VEHICLE_STOPPED(TrevCutsceneCar)
BRING_VEHICLE_TO_HALT(TrevCutsceneCar, 2, 2)
ENDIF
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(CSTrev, TRUE)
IF doneGetOffChat = FALSE
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, CSTrev, "TREVOR")
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "M1_GETOFF", CONV_PRIORITY_MEDIUM)
//Leave it alone, alright?
//Get your own.
//Ain't you got a ride, scumbag?
iGetOffCarChatTimer = GET_GAME_TIMER()
doneGetOffChat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
driveTaskCancelled = TRUE
ENDIF
IF doneGetOffChat = TRUE
IF GET_GAME_TIMER() > (iGetOffCarChatTimer + 8000)
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, CSTrev, "TREVOR")
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "M1_GETOFF", CONV_PRIORITY_MEDIUM)
//Leave it alone, alright?
//Get your own.
//Ain't you got a ride, scumbag?
iGetOffCarChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF driveTaskCancelled = TRUE
TASK_VEHICLE_MISSION_COORS_TARGET(CSTrev, TrevCutsceneCar, GET_ENTITY_COORDS(PLAYER_PED_ID()), MISSION_FLEE, 30, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, -1, -1)
driveTaskCancelled = FALSE
ENDIF
ENDIF
ELSE
IF driveTaskCancelled = TRUE
TASK_VEHICLE_MISSION_COORS_TARGET(CSTrev, TrevCutsceneCar, GET_ENTITY_COORDS(PLAYER_PED_ID()), MISSION_FLEE, 30, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, -1, -1)
driveTaskCancelled = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) != 0
IF DoneLoseCopsText = FALSE
CLEAR_PRINTS()
CLEAR_HELP()
PRINT_NOW("LOSE_WANTED", DEFAULT_GOD_TEXT_TIME, 1)//Lose the cops.
DoneLoseCopsText = TRUE
ENDIF
IF bVanDoorsLocked = FALSE
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
SET_VEHICLE_DOORS_LOCKED(SniperVan, VEHICLELOCK_LOCKED)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(SniperVan, FALSE)
PRINTSTRING("MARTIN 1 : Locking van doors as the player has a wanted level") PRINTNL()
bVanDoorsLocked = TRUE
ENDIF
ENDIF
ENDIF
IF DOES_BLIP_EXIST(BlipSniperVan)
REMOVE_BLIP(BlipSniperVan)
ENDIF
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
ELSE
SWITCH iStageSection
CASE 0
// Set blip and tell player to drive to observatory
IF NOT DOES_BLIP_EXIST(blipLocate)
blipLocate = ADD_BLIP_FOR_COORD(vDriveToPoint)
ENDIF
SET_BLIP_ROUTE(blipLocate, TRUE)
TRIGGER_MUSIC_EVENT("SOL1_START")
PRINT_NOW("BFDRIVE", DEFAULT_GOD_TEXT_TIME, 1)//Go to the ~y~observatory.
iStageSection ++
BREAK
CASE 1
// Set blip and tell player to drive to observatory
IF NOT DOES_BLIP_EXIST(blipLocate)
IF DoneLoseCopsText = TRUE
CLEAR_PRINTS()
DoneLoseCopsText = FALSE
ENDIF
blipLocate = ADD_BLIP_FOR_COORD(vDriveToPoint)
SET_BLIP_ROUTE(blipLocate, TRUE)
ENDIF
//Trigger interactive music when player gets into a vehicle.
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_DRIVE_TO_OBSERVATORY")
START_AUDIO_SCENE("MARTIN_1_DRIVE_TO_OBSERVATORY")
ENDIF
IF interactiveMusicStarted = FALSE
TRIGGER_MUSIC_EVENT("SOL1_VEH")
interactiveMusicStarted = TRUE
ENDIF
ENDIF
//Do headset dialogue
IF doneS1_HEAD = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_HEAD", CONV_PRIORITY_MEDIUM)
//Hey, and let's stay in touch on the headsets.
//You need anything, get me on the headset.
doneS1_HEAD = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Give player his ear piece once he gets into a vehicle
IF MikeEarPieceGiven = FALSE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, PROPS_P1_HEADSET)
MikeEarPieceGiven = TRUE
ENDIF
ENDIF
//Do the dialogue 20 seconds after Trevor has been deleted
IF NOT DOES_ENTITY_EXIST(CSTrev)
AND MikeEarPieceGiven = TRUE
AND GET_GAME_TIMER() > (iTrevDeletedTimer + 30000)
IF doneS1_BIKE = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_BIKE", CONV_PRIORITY_MEDIUM)
//Mike... Mike, you there? I got some poor bastard's dirt bike.
//Okay, well, I ain't at the Observatory yet, start heading that way.
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
doneS1_BIKE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF doneS1_ATVAN = FALSE
AND doneS1_BIKE = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_ATVAN", CONV_PRIORITY_MEDIUM)
//By the way, I know why you took me there, to that guy's house - understood.
//Understood what? That's he's a terrifying psycho, and you might have that in common?
//What is it? We gotta work for him.
//We don't gotta work for anyone, but I read you, man. Loud and clear.
//What're you talking about?
//All that Aztec stuff - those weird little artefacts.
//What?
//The little fertility statues or whatever - guy has trouble getting it up, we'll clear two, three million on those easy.
//We weren't casing the joint. That's not what that was about.
//If we didn't agree a fee on this job, so what'd you mean?
//Okay, the guy lives well. That don't mean we're robbing him, but it does mean he's got the money to pay people who help him.
//When the time comes, he'll do the right thing. If he don't let me handle it.
//You don't get a wife like that without being rich and an asshole, right?
//Huh?
doneS1_ATVAN = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Wrap all this in a check to make sure player is not in a taxi
IF NOT g_bPlayerIsInTaxi
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vDriveToPoint, <<100,100,100>>)
//Save the players car here for STAGE_DESTROY_SNIPER
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
AND NOT IS_PED_IN_ANY_TAXI(PLAYER_PED_ID())
MichaelsCar = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
PRINTSTRING("MichaelsCar grabbed") PRINTNL()
ENDIF
IF IS_PED_IN_ANY_TAXI(PLAYER_PED_ID())
playerHasTakenTaxi = TRUE
ENDIF
//Request assets for cutscene now so no pause occurs
REQUEST_MODEL(SHAMAL)
REQUEST_MODEL(S_M_M_PILOT_01)
REQUEST_PTFX_ASSET()
REQUEST_VEHICLE_RECORDING(294, "DGTitanEntry")
REQUEST_REMOTE_SNIPER_ASSETS(sSniperData)
iStageSection++
ENDIF
ENDIF
ENDIF
BREAK
CASE 2
// IF DOES_ENTITY_EXIST(SniperVan)
// AND DOES_ENTITY_EXIST(RemoteSniper)
//
// ATTACH_ENTITY_TO_ENTITY(RemoteSniper, SniperVan, 0, vOffset, vRot)
//
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_0)
// vOffset.x = (vOffset.x + 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_1)
// vOffset.x = (vOffset.x - 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_2)
// vOffset.y = (vOffset.y + 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_3)
// vOffset.y = (vOffset.y - 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_4)
// vOffset.z = (vOffset.z + 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_5)
// vOffset.z = (vOffset.z - 0.1)
// ENDIF
//
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_6)
// vRot.x = (vRot.x + 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_7)
// vRot.x = (vRot.x - 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_8)
// vRot.y = (vRot.y + 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_9)
// vRot.y = (vRot.y - 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_K)
// vRot.z = (vRot.z + 0.1)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_0)
// vRot.z = (vRot.z - 0.1)
// ENDIF
//
// PRINTSTRING("vOffset = ") PRINTVECTOR(vOffset) PRINTNL()
// PRINTSTRING("vRot = ") PRINTVECTOR(vRot) PRINTNL()
//
// ENDIF
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_LEFT, FALSE, FALSE)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_RIGHT, FALSE, FALSE)
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(SniperVan)
ENDIF
ENDIF
//Do some dialogue of Michael arriving at the Van.
IF doneS1_ATVAN2 = FALSE
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), SniperVan) < 30
KILL_ANY_CONVERSATION()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_ATVAN2", CONV_PRIORITY_MEDIUM)
//Alright, I see the van with the gun in it. You nearby?
//Not far out. Shoot the plane down, and I'll be ready.
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
doneS1_ATVAN2 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Create the remote sniper
IF sniperCreated = FALSE
IF HAVE_REMOTE_SNIPER_ASSETS_LOADED(sSniperData)
CLEAR_AREA(vSniperStartPos, 5, TRUE)
CREATE_REMOTE_SNIPER(sSniperData, vSniperStartPos, f_sniper_heading)
LOCK_REMOTE_SNIPER_ROTATION(sSniperData, TRUE, -179, -70)
LOCK_REMOTE_SNIPER_PITCH(sSniperData, -5, 20)
SET_REMOTE_SNIPER_ALLOW_QUIT(sSniperData, FALSE)
sniperCreated = TRUE
ELSE
PRINTSTRING("Waiting on sniper assets loading") PRINTNL()
ENDIF
ENDIF
//Set up plane and pilot
IF NOT DOES_ENTITY_EXIST(vehTitan)
IF HAS_MODEL_LOADED(SHAMAL)
vehTitan = CREATE_VEHICLE(SHAMAL, << -1638.6176, -2734.4397, 12.8201 >>, 327.2515)
SET_ENTITY_INVINCIBLE(vehTitan, TRUE)
SET_VEHICLE_LIVERY(vehTitan, 1)
SET_MODEL_AS_NO_LONGER_NEEDED(SHAMAL)
SET_VEHICLE_ENGINE_ON(vehTitan, TRUE, TRUE)
CONTROL_LANDING_GEAR(vehTitan, LGC_RETRACT_INSTANT)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF NOT DOES_ENTITY_EXIST(pedPilot)
IF HAS_MODEL_LOADED(S_M_M_PILOT_01)
pedPilot = CREATE_PED_INSIDE_VEHICLE(vehTitan, PEDTYPE_MISSION, S_M_M_PILOT_01)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HEAD, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_LEG, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_JBIB, 0, 0)
SET_ENTITY_INVINCIBLE(pedPilot, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_M_PILOT_01)
ELSE
// PRINTSTRING("Model S_M_M_PILOT_01 has not loaded ") PRINTNL()
ENDIF
ELSE
// PRINTSTRING("pedPilot has been created and exists ") PRINTNL()
ENDIF
ENDIF
ENDIF
//Check flag to see if player took taxi to this stage. If they did then reset flag once they've got out so the flag is reset for fail condition.
IF playerHasTakenTaxi = TRUE
IF NOT IS_PED_IN_ANY_TAXI(PLAYER_PED_ID())
playerHasTakenTaxi = FALSE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(SniperVan)
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
IF NOT DOES_BLIP_EXIST(BlipSniperVan)
IF DoneLoseCopsText = TRUE
CLEAR_PRINTS()
DoneLoseCopsText = FALSE
ENDIF
BlipSniperVan = CREATE_BLIP_FOR_VEHICLE(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
SET_VEHICLE_DOORS_LOCKED(SniperVan, VEHICLELOCK_UNLOCKED)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(SniperVan, TRUE)
PRINTSTRING("MARTIN 1 : Unlocking van doors as the player does not have a wanted level") PRINTNL()
bVanDoorsLocked = FALSE
ENDIF
IF doneSnipe8Text2 = FALSE
PRINT_NOW("SNIPE8", DEFAULT_GOD_TEXT_TIME, 1)//Get in the ~b~van.
doneSnipe8Text2 = TRUE
ENDIF
ENDIF
IF IS_VEHICLE_DRIVEABLE(SniperVan)
IF IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
FREEZE_ENTITY_POSITION(SniperVan, FALSE)
ELSE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SniperVan)
FREEZE_ENTITY_POSITION(SniperVan, TRUE)
ENDIF
ENDIF
ENDIF
IF sniperVanBlipRouteSet = FALSE
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), SniperVan) > 150
SET_BLIP_ROUTE(BlipSniperVan, TRUE)
sniperVanBlipRouteSet = TRUE
ENDIF
ENDIF
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SniperVan)
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_DRIVE_TO_OBSERVATORY")
STOP_AUDIO_SCENE("MARTIN_1_DRIVE_TO_OBSERVATORY")
ENDIF
sfSniperLoading = REQUEST_SCALEFORM_MOVIE("REMOTE_SNIPER_LOADING")
//Start interactive music now for sniper being ready
TRIGGER_MUSIC_EVENT("SOL1_SNIPER_READY")
PREPARE_MUSIC_EVENT("SOL1_APP_ACTIVE")
SET_MAX_WANTED_LEVEL(0)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
iMoveStageOnTimer = GET_GAME_TIMER()
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
iStageSection++
ENDIF
ENDIF
ENDIF
BREAK
CASE 3
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
SET_VEHICLE_ENGINE_ON(SniperVan, FALSE, TRUE)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_LEFT, FALSE, FALSE)
SET_VEHICLE_DOOR_OPEN(SniperVan, SC_DOOR_REAR_RIGHT, FALSE, FALSE)
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(SniperVan)
ENDIF
ENDIF
CLEAR_AREA_OF_PROJECTILES(GET_ENTITY_COORDS(PLAYER_PED_ID()), 20)
//Have a slight pause to make sure that the player is completely inside the van.
IF bMissionFailed = FALSE
IF GET_GAME_TIMER() > (iMoveStageOnTimer + 1500)
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE, DEFAULT, FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
FREEZE_ENTITY_POSITION(SniperVan, TRUE)
ENDIF
ENDIF
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
CLEAR_PRINTS()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
iStageSection++
ENDIF
ENDIF
BREAK
CASE 4
IF DOES_BLIP_EXIST(BlipSniperVan)
REMOVE_BLIP(BlipSniperVan)
ENDIF
//check here if TOD skip is required or not
// IF GET_TIMEOFDAY_HOUR(sTimeHour) > 8
// AND GET_TIMEOFDAY_HOUR(sTimeHour) < 20
WHILE NOT DO_TIMELAPSE(SP_MISSION_MARTIN_1, sTimelapse, FALSE, FALSE, TRUE, TRUE)
timelapseRequired = TRUE
WAIT(0)
ENDWHILE
IF timelapseRequired = FALSE
//Wait for the scaleform movie to load for the loading screen for the sniper app
WHILE NOT HAS_SCALEFORM_MOVIE_LOADED(sfSniperLoading)
PRINTSTRING("Waiting for scaleform movie loading") PRINTNL()
WAIT(0)
ENDWHILE
SETTIMERB(0)
CLEAR_HELP()
CLEAR_PRINTS()
// SET_FRONTEND_RADIO_ACTIVE(FALSE)
iStageSection ++
ELSE
iStageSection = 7
ENDIF
BREAK
CASE 5
//CALL THE METHODS USING
IF HAS_SCALEFORM_MOVIE_LOADED(sfSniperLoading)
IF interactiveMusicStarted2 = FALSE
TRIGGER_MUSIC_EVENT("SOL1_APP_ACTIVE")
SETTIMERB(0)
interactiveMusicStarted2 = TRUE
ENDIF
SET_MULTIHEAD_SAFE(TRUE,TRUE) //Instant blinders
CALL_SCALEFORM_MOVIE_METHOD(sfSniperLoading,"START_LOADING")
SETTIMERA(0)
iLoadingScreenTimer = GET_GAME_TIMER()
PLAY_SOUND_FRONTEND(-1, "SCOPE_UI_MASTER")
iStageSection++
ENDIF
BREAK
CASE 6
PRINTSTRING("timer A = ") PRINTINT(TIMERA()) PRINTNL()
// INT iLeftX, iLeftY, iRightX, iRightY
//
// GET_CONTROL_VALUE_OF_ANALOGUE_STICKS_UNBOUND(iLeftX, iLeftY, iRightX, iRightY)
//
// iLeftX = 0
// iLeftY = 0
// iRightX = 0
// iRightY = 0
IF NOT IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(sfReturnBool)
PRINTSTRING("IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY = FALSE ") PRINTNL()
BEGIN_SCALEFORM_MOVIE_METHOD(sfSniperLoading, "IS_LOAD_ANIM_FINISHED")
sfReturnBool = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE()
ENDIF
//Use this as back up to make sure stage moves on incase scaleform return values break.
IF hasSniperBeenSetToActive = FALSE
IF GET_GAME_TIMER() > iLoadingScreenTimer + 5999
SET_REMOTE_SNIPER_ACTIVE(sSniperData, TRUE)
hasSniperBeenSetToActive = TRUE
ENDIF
ENDIF
IF GET_GAME_TIMER() > iLoadingScreenTimer + 100
RemoteSniperNeedsUpdated = TRUE
ENDIF
IF GET_GAME_TIMER() > iLoadingScreenTimer + 6000
AND hasSniperBeenSetToActive = TRUE
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(sfSniperLoading)
IF DOES_ENTITY_EXIST(MichaelsCar)
IF IS_VEHICLE_DRIVEABLE(MichaelsCar)
CLEAR_AREA(<<-386.6838, 1202.5878, 324.6417>>, 5, TRUE)
SET_ENTITY_COORDS(MichaelsCar, <<-386.6838, 1202.5878, 324.6417>>)
SET_ENTITY_HEADING(MichaelsCar, 100.5474)
SET_MISSION_VEHICLE_GEN_VEHICLE(MichaelsCar, <<-386.6838, 1202.5878, 324.6417>>, 100.5474)
ENDIF
ELSE
PRINTSTRING("MichaelsCar does NOT exist") PRINTNL()
ENDIF
iStageSection ++
ENDIF
BREAK
ENDSWITCH
ENDIF
// CLEANUP
IF iStageSection > 6
AND bMissionFailed = FALSE
IF DOES_BLIP_EXIST(blipLocate)
REMOVE_BLIP(blipLocate)
ENDIF
IF DOES_BLIP_EXIST(BlipSniperVan)
REMOVE_BLIP(BlipSniperVan)
ENDIF
RemoteSniperNeedsUpdated = TRUE
bStageSetup = FALSE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
//PURPOSE: Performs the cutscene which introduces the garage and the three characters
//FUNC BOOL stageCutsceneArrive()
//
//// SETUP
// IF NOT bStageSetup
// Set_Replay_Mid_Mission_Stage(ENUM_TO_INT(STAGE_CUTSCENE_ARRIVE))
// RESET_NEED_LIST()
// SET_ANIM_DICT_AS_NEEDED(Asset.adTorture)
// SET_MODEL_AS_NEEDED(Asset.mnTREVOR)
// SET_MODEL_AS_NEEDED(SANCHEZ)
// SET_MODEL_AS_NEEDED(SHAMAL)
// REQUEST_MODEL(S_M_M_PILOT_01)
// MANAGE_LOADING_NEED_LIST()
//
// doStartCutscene()
//
// SET_ENTITY_HEADING(GET_SELECT_PED(SEL_MICHAEL), 160.4131)
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
//
// ADD_ALL_PEDS_TO_DIALOGUE()
//
// iStageSection = 0
// bCameraShotSetup = FALSE
// bStageSetup = TRUE
//
//// UPDATE
// ELSE
// REQUEST_ADDITIONAL_COLLISION_AT_COORD(<< 614.8568, -629.4142, 303.2502 >>)
// SWITCH iStageSection
// CASE 0
// //SETUP
// IF NOT bCameraShotSetup
// TASK_PLAY_ANIM_ADVANCED(PLAYER_PED_ID(), Asset.adTorture, Asset.animWalk, << -443.787, 1060.879, 327.676 >>, << 0.000, 0.000, 180.000 >>,INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET | AF_OVERRIDE_PHYSICS)
// FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
// doTwoPointCam( << -440.9612, 1056.7878, 328.0601 >>, << -1.0701, 0.0595, 41.0614 >>, 17.7497,<< -440.6522, 1056.4385, 328.0631 >>, << -0.8867, 0.0595, 43.4512 >>, 17.0194, 3000)
// doCamShake(Asset.shakeRoadVib, 0.1)
//
// runConversation("S1_RDY", TRUE, TRUE, FALSE)
// //You got a good view, Michael?
// //I'd say so. You better be ready for this.
// //Michael, the plane's just come into range.
//
// SETTIMERA(0)
//
// //Set up bike AND TREVOR
// WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], CHAR_TREVOR, << 768.7714, 1312.5142, 359.0287 >>, 24.1579)
// SafeWait(0)
// ENDWHILE
//
// SAFE_ADD_PED_FOR_DIALOGUE(GET_SELECT_PED(SEL_TREVOR), 2, "TREVOR")
//
// vehBike = CREATE_VEHICLE(SANCHEZ,<< 768.7714, 1312.5142, 359.0287 >>, 24.1579)
// SET_PED_INTO_VEHICLE(GET_SELECT_PED(SEL_TREVOR), vehBike)
// SET_VEHICLE_ENGINE_ON(vehBike, TRUE, TRUE)
//
// //Set up target plane
// vehTitan = CREATE_VEHICLE(SHAMAL, << -1638.6176, -2734.4397, 12.8201 >>, 327.2515)
// pedPilot = CREATE_PED_INSIDE_VEHICLE(vehTitan, PEDTYPE_MISSION, S_M_M_PILOT_01)
// SET_ENTITY_INVINCIBLE(vehTitan, TRUE)
// CONTROL_LANDING_GEAR(vehTitan, LGC_RETRACT_INSTANT)
//
// bCameraShotSetup = TRUE
//
// //UPDATE
// ELSE
//
// //CLEANUP
// IF TIMERA() > 3000
// iStageSection++
// bCameraShotSetup = FALSE
// ENDIF
// ENDIF
// BREAK
// CASE 1
// //SETUP
// IF NOT bCameraShotSetup
// doTwoPointCam( << -444.1410, 1060.5026, 328.1403 >>, << -4.6504, -0.2752, -156.8803 >>, 45.9326, << -444.1410, 1058.6980, 328.1403 >>, << -7.0790, -0.2752, 176.2011 >>, 45.9326, 6000, GRAPH_TYPE_SIN_ACCEL_DECEL)
//// TASK_PLAY_ANIM_ADVANCED(GET_SELECT_PED(SEL_MICHAEL), Asset.adMovement, Asset.animIdle, << -443.272, 1059.564, 327.668 >>, << 0.000, 0.000, 180.000 >>,INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET | AF_OVERRIDE_PHYSICS)
// FORCE_PED_AI_AND_ANIMATION_UPDATE(GET_SELECT_PED(SEL_MICHAEL))
//
// doCamShake(Asset.shakeRoadVib, 0.1)
//
// SETTIMERA(0)
// bCameraShotSetup = TRUE
//
// //UPDATE
// ELSE
//
// //CLEANUP
// IF TIMERA() > 6000
// iStageSection++
// bCameraShotSetup = FALSE
// ENDIF
// ENDIF
// BREAK
// CASE 2
// //SETUP
// IF NOT bCameraShotSetup
// //LOAD_SCENE(<< 619.0132, -625.1191, 300.9872 >>)
//
// IF IS_VEHICLE_DRIVEABLE(vehTitan)
// START_PLAYBACK_RECORDED_VEHICLE(vehTitan, iRecNo, "DGTitanEntry")
// SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, Asset.skipPlaneEntryStart)
// SET_PLAYBACK_SPEED(vehTitan, 0.6)
//
//// SET_PED_INTO_VEHICLE(PLAYER_PED_ID(),vehTitan,VS_FRONT_RIGHT)
//// SET_ENTITY_VISIBLE(PLAYER_PED_ID(),FALSE)
// ENDIF
//
// doTwoPointCam( << 614.8568, -629.4142, 303.2502 >>, << -10.7105, -0.0621, 100.9647 >>, 32.1174,<< 486.0085, -587.2617, 309.6030 >>, << -09.2317, 0.03570, 114.8343 >>, 31.5067, 4700)
//
// doCamShake(Asset.shakeRoadVib, 0.1)
//
// //Request vehicle recording for plane in next stage here to avoid loading times for it
// REQUEST_VEHICLE_RECORDING(iRecNo, "DGTitanEntry")
//
// SETTIMERA(0)
// bCameraShotSetup = TRUE
//
// //UPDATE
// ELSE
// //PRINTINT(TIMERA())PRINTNL()
//
// //CLEANUP
// IF TIMERA() > 4700
//
// stopCamShake(TRUE)
//
// iStageSection++
// bCameraShotSetup = FALSE
// ENDIF
// ENDIF
// BREAK
// ENDSWITCH
//
//// JSKIP
// IF JSkip
// OR (IS_CUTSCENE_SKIP_BUTTON_PRESSED() AND ReadyToSkipCutscene())
// doEndCutscene()
//
// iStageSection = 3
// ENDIF
//
//// CLEANUP
// IF iStageSection >= 3
//// SET_ENTITY_COORDS(GET_SELECT_PED(SEL_MICHAEL), << -443.2711, 1059.5475, 326.6811 >>)
//// SET_ENTITY_HEADING(GET_SELECT_PED(SEL_MICHAEL), 188.1957)
//// SET_ENTITY_VISIBLE(GET_SELECT_PED(SEL_MICHAEL),TRUE)
//
// stopCamShake(TRUE)
//
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
//
// doEndCutscene()
// bStageSetup = FALSE
// bCameraShotSetup = FALSE
// RETURN TRUE
// ENDIF
// ENDIF
// RETURN FALSE
//ENDFUNC
//PURPOSE: Performs the section where TREVOR tortures the victim for the first time
FUNC BOOL stageShootPlane()
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF landingGearPutAway = FALSE
CONTROL_LANDING_GEAR(vehTitan, LGC_RETRACT_INSTANT)
landingGearPutAway = TRUE
ENDIF
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
// STOP_PLAYBACK_RECORDED_VEHICLE(vehTitan)
// FREEZE_ENTITY_POSITION(vehTitan, TRUE)
PRINTSTRING("plane playback time is ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehTitan)) PRINTNL()
ENDIF
ENDIF
ENDIF
// PRINTSTRING("plane offset is ") PRINTVECTOR(GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(vehTitan, GET_CAM_COORD(GET_DEBUG_CAM()))) PRINTNL()
//Call this everyframe during this section.
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.1)
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() //Fix for bug 2164315
// disable replay cam movement 1978527
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME()
ALLOW_ALTERNATIVE_SCRIPT_CONTROLS_LAYOUT(PLAYER_CONTROL)
//Audio streams
IF bStageSetup
IF iNumberOfHits = 0
IF subStream1Loaded = FALSE
IF LOAD_STREAM("MARTIN_1_LEAR_JET_HIT_1_MASTER")
PRINTSTRING("MARTIN_1_LEAR_JET_HIT_1_MASTER is ready")
subStream1Loaded = TRUE
ENDIF
ENDIF
ENDIF
IF iNumberOfHits = 1
AND hasEffectStarted = TRUE
IF subStream2Loaded = FALSE
IF LOAD_STREAM("MARTIN_1_LEAR_JET_HIT_2_MASTER")
PRINTSTRING("MARTIN_1_LEAR_JET_HIT_2_MASTER is ready")
subStream2Loaded = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
g_bDisableNoirLensEffect = TRUE
// SETUP
IF NOT bStageSetup
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1, "STAGE_SHOOT_PLANE")
PRINTSTRING("MISSION STAGE SHOOT PLANE") PRINTNL()
missionCanFail = FALSE
// RESET_NEED_LIST()
// SET_MODEL_AS_NEEDED(Asset.mnTREVOR)
// SET_MODEL_AS_NEEDED(SANCHEZ)
// SET_MODEL_AS_NEEDED(SHAMAL)
// REQUEST_MODEL(S_M_M_PILOT_01)
// MANAGE_LOADING_NEED_LIST()
// UPDATE_REMOTE_SNIPER(sSniperData)
// SET_FRONTEND_RADIO_ACTIVE(FALSE)
//Request the vehicle recording needed for the cutscene now
REQUEST_VEHICLE_RECORDING(iRecNo, "DGTitanCrash")
SET_PAD_CAN_SHAKE_DURING_CUTSCENE(FALSE)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
// REQUEST_MODEL(PLAYER_TWO)
// REQUEST_MODEL(SANCHEZ)
//
// //Set up bike AND TREVOR
// IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
// WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], CHAR_TREVOR, << 768.7714, 1312.5142, 359.0287 >>, 24.1579)
// SafeWait(0)
// UPDATE_REMOTE_SNIPER(sSniperData)
// PRINTSTRING("SOLOMON1_WAITING_19") PRINTNL()
// ENDWHILE
// ELSE
// IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
// SET_ENTITY_COORDS(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], << 768.7714, 1312.5142, 359.0287 >>)
// SET_ENTITY_HEADING(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], 24.1579)
// ENDIF
// ENDIF
//
// IF NOT DOES_ENTITY_EXIST(vehBike)
// vehBike = CREATE_VEHICLE(SANCHEZ,<< 768.7714, 1312.5142, 359.0287 >>, 24.1579)
// SET_VEHICLE_ENGINE_ON(vehBike, TRUE, TRUE)
// ELSE
// IF IS_VEHICLE_DRIVEABLE(vehBike)
// SET_ENTITY_COORDS(vehBike, << 768.7714, 1312.5142, 359.0287 >>)
// SET_ENTITY_HEADING(vehBike, 24.1579)
// ENDIF
// ENDIF
//
// IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
// IF IS_VEHICLE_DRIVEABLE(vehBike)
// IF NOT IS_PED_IN_VEHICLE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], vehBike)
// SET_PED_INTO_VEHICLE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], vehBike)
// ENDIF
// ENDIF
// ENDIF
//
// //Give TREVOR headset
// SET_PED_HELMET(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], TRUE)
// SET_PED_COMPONENT_ITEM_CURRENT(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], COMP_TYPE_PROPS, PROPS_P1_HEADSET)
//
// SAFE_ADD_PED_FOR_DIALOGUE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], 2, "TREVOR")
CLEAR_AREA(vSniperStartPos, 5, TRUE)
//bDoLeftEngineCut = FALSE
bDoRightEngineCut = FALSE
bRightEngineShot = FALSE
assetsRequested = FALSE
doneTakeDownPlaneWarning = FALSE
floatingHelp1Done = FALSE
screenFadedInFromReplay = FALSE
DamageEnginesTextDone = FALSE
bMissionFailedToSlow = FALSE
doneChatGun = FALSE
bCamShakeAnimDictRequested = FALSE
hasEffectStarted = FALSE
doneHelp1 = FALSE
doneHelp2 = FALSE
subStream1Loaded = FALSE
subStream2Loaded = FALSE
BulletCamActive = FALSE
doneS1_SEE = FALSE
doneS1_LEAD = FALSE
doneS1_LOOK = FALSE
PlaneSlowedDown = FALSE
TimeToCreatePlane = FALSE
landingGearPutAway = FALSE
bCamNearClipSet = FALSE
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
iNumberOfHits = 0
iShotTimer = 0
iSeePlaneChatTimer = 0
iMissChatTimer = GET_GAME_TIMER()
//Clear area of path for TREVOR on bike
CLEAR_AREA(<<-318.28, 1398.18, 351.69>>, 170, TRUE)
CLEAR_AREA(<<-397.8, 1205.1, 324.8>>, 50, TRUE)
ADD_ALL_PEDS_TO_DIALOGUE()
// PREPARE_MUSIC_EVENT("SOL1_ENGINE_HIT")
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_SNIPER_CAMERA")
START_AUDIO_SCENE("MARTIN_1_SNIPER_CAMERA")
ENDIF
IF timelapseRequired = TRUE
SET_TODS_CUTSCENE_RUNNING(sTimelapse, FALSE)
//Use this as back up to make sure stage moves on incase scaleform return values break.
IF hasSniperBeenSetToActive = FALSE
SET_REMOTE_SNIPER_ACTIVE(sSniperData, TRUE)
hasSniperBeenSetToActive = TRUE
ENDIF
RemoteSniperNeedsUpdated = TRUE
ENDIF
RemoteSniperNeedsUpdated = TRUE
// //Move Michael to here so that the area is loaded in for when the plane cutscene is playing.
IF NOT IS_REPLAY_BEING_SET_UP()
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-455.6177, 1083.2539, 326.6815>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 111.0994)
ENDIF
SET_MAX_WANTED_LEVEL(0)
SETTIMERB(0)
// ishotsFired = 0
iMiniCutStage = 0
iStageSection = 0
//If screen is faded out do a load scene at players coordinates now and then fade in the screen
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
IF IS_REPLAY_BEING_SET_UP()
NEW_LOAD_SCENE_STOP()
ENDIF
END_REPLAY_SETUP(SniperVan)
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
//B* 2230206: Activate multihead blinders in case of a fail retry
SET_MULTIHEAD_SAFE(TRUE,TRUE)
missionCanFail = TRUE
bStageSetup = TRUE
// UPDATE
ELSE
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME()
//Load the camera's for the cutscene
IF NOT bCamShakeAnimDictRequested
REQUEST_ANIM_DICT(strAnimDictCamShake)
bCamShakeAnimDictRequested = TRUE
ENDIF
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_LB)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_AIM)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SCRIPT_LB)
SET_CONTROL_SHAKE(PLAYER_CONTROL, 9, 0)
// PRINTSTRING("ishotsFired = ") PRINTINT(ishotsFired) PRINTNL()
SWITCH iStageSection
CASE 0
// UPDATE_REMOTE_SNIPER(sSniperData)
IF screenFadedInFromReplay = FALSE
AND bMissionFailed = FALSE
IF TIMERB() > 1000
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
screenFadedInFromReplay = TRUE
ENDIF
ENDIF
ENDIF
IF GET_PED_LAST_WEAPON_IMPACT_COORD(PLAYER_PED_ID(), vImpact)
// PRINTSTRING("BULLET IMPACT COORDS: ") PRINTVECTOR(vImpact) PRINTNL()
ENDIF
IF NOT bDoRightEngineCut
//start 1st effect
IF iNumberOfHits = 1
IF hasEffectStarted = FALSE
//Call every frame for these cutscene's so that the plane stays in HD
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
REQUEST_VEHICLE_HIGH_DETAIL_MODEL(vehTitan)
ENDIF
ENDIF
IF NOT DOES_CAM_EXIST(BulletCam)
AND GET_GAME_TIMER() > (iShotTimer + 500)
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
CLEAR_HELP()
ENDIF
CLEAR_PRINTS()
BulletCamActive = TRUE
SET_REMOTE_SNIPER_ACTIVE(sSniperData, FALSE)
BulletCam = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE)
SET_CAM_FOV(BulletCam, 22.4)
SHAKE_CAM(BulletCam, "SKY_DIVING_SHAKE", 1.5)
ATTACH_CAM_TO_ENTITY(BulletCam, vehTitan, << 4.88167, 6.58488, 0.16096 >>)
POINT_CAM_AT_ENTITY(BulletCam, vehTitan, << 1.2611, -2.12109, 0.750921 >>)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_BULLET_HITS_PLANE_SCENE")
START_AUDIO_SCENE("MARTIN_1_BULLET_HITS_PLANE_SCENE")
ENDIF
IF subStream1Loaded = TRUE
PLAY_STREAM_FRONTEND()
ENDIF
iEffectTimer = GET_GAME_TIMER()
ENDIF
IF bEffectTriggered = FALSE
IF DOES_CAM_EXIST(BulletCam)
AND GET_GAME_TIMER() > (iEffectTimer + 400)
ptfxEngine[0] = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sol1_plane_smoke",vehTitan,vEngineOffset1,VECTOR_ZERO)
SET_PARTICLE_FX_LOOPED_SCALE(ptfxEngine[0], 2.0)
SET_PARTICLE_FX_LOOPED_EVOLUTION(ptfxEngine[0], "Shot1", 1.0)
iEffectTimer = GET_GAME_TIMER()
REPLAY_RECORD_BACK_FOR_TIME(3.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
bEffectTriggered = TRUE
ENDIF
ENDIF
IF bEffectTriggered = TRUE
AND GET_GAME_TIMER() > (iEffectTimer + 2500)
BulletCamActive = FALSE
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_BULLET_HITS_PLANE_SCENE")
STOP_AUDIO_SCENE("MARTIN_1_BULLET_HITS_PLANE_SCENE")
ENDIF
RENDER_SCRIPT_CAMS(FALSE, FALSE)
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
DESTROY_CAM(BulletCam)
SET_REMOTE_SNIPER_ACTIVE(sSniperData, TRUE)
sSniperData.f_current_sniper_fov = 4
hasEffectStarted = TRUE
PRINT_HELP("M1_HELP3")//~s~The plane will need multiple shots to be taken down.
ENDIF
ENDIF
ENDIF
//start 2nd effect
IF iNumberOfHits = 2
IF hasEffectStarted = FALSE
//Call every frame for these cutscene's so that the plane stays in HD
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
REQUEST_VEHICLE_HIGH_DETAIL_MODEL(vehTitan)
ENDIF
ENDIF
IF NOT DOES_CAM_EXIST(BulletCam)
AND GET_GAME_TIMER() > (iShotTimer + 500)
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
CLEAR_HELP()
ENDIF
CLEAR_PRINTS()
BulletCamActive = TRUE
SET_REMOTE_SNIPER_ACTIVE(sSniperData, FALSE)
BulletCam = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE)
SET_CAM_FOV(BulletCam, 22.4)
SHAKE_CAM(BulletCam, "SKY_DIVING_SHAKE", 1.5)
ATTACH_CAM_TO_ENTITY(BulletCam, vehTitan, << 6.63932, 5.91098, 0.482164 >>)
POINT_CAM_AT_ENTITY(BulletCam, vehTitan, << 1.87226, -2.71828, 0.671346 >>)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
IF subStream2Loaded = TRUE
PLAY_STREAM_FRONTEND()
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_BULLET_HITS_PLANE_SCENE")
START_AUDIO_SCENE("MARTIN_1_BULLET_HITS_PLANE_SCENE")
ENDIF
iEffectTimer = GET_GAME_TIMER()
ENDIF
IF bEffectTriggered = FALSE
IF DOES_CAM_EXIST(BulletCam)
AND GET_GAME_TIMER() > (iEffectTimer + 400)
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[0])
SET_PARTICLE_FX_LOOPED_EVOLUTION(ptfxEngine[0], "Shot2", 1.0)
ENDIF
iEffectTimer = GET_GAME_TIMER()
REPLAY_RECORD_BACK_FOR_TIME(3.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
bEffectTriggered = TRUE
ENDIF
ENDIF
IF bEffectTriggered = TRUE
AND GET_GAME_TIMER() > (iEffectTimer + 2500)
BulletCamActive = FALSE
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_BULLET_HITS_PLANE_SCENE")
STOP_AUDIO_SCENE("MARTIN_1_BULLET_HITS_PLANE_SCENE")
ENDIF
STOP_STREAM()
RENDER_SCRIPT_CAMS(FALSE, FALSE)
DESTROY_CAM(BulletCam)
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
SET_REMOTE_SNIPER_ACTIVE(sSniperData, TRUE)
sSniperData.f_current_sniper_fov = 4
hasEffectStarted = TRUE
ENDIF
ENDIF
ENDIF
//start 3rd effect and move stage on to start cutscene
IF iNumberOfHits = 3
IF hasEffectStarted = FALSE
REPLAY_RECORD_BACK_FOR_TIME(3.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[0])
SET_PARTICLE_FX_LOOPED_EVOLUTION(ptfxEngine[0], "Shot3", 1.0)
ENDIF
hasEffectStarted = TRUE
ENDIF
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
CLEAR_HELP()
ENDIF
bRightEngineShot = TRUE
bDoRightEngineCut = TRUE
iStageSection = 1
//Stats this stops the timer for checking how long it takes the player to shoot down the plane
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED()
ENDIF
IF NOT sSniperData.b_is_sniping
// IF IS_PED_IN_VEHICLE(GET_SELECT_PED(SEL_MICHAEL),vehTitan)
// SET_ENTITY_COORDS(GET_SELECT_PED(SEL_MICHAEL), << -443.2711, 1059.5475, 326.6811 >>)
// SET_ENTITY_HEADING(GET_SELECT_PED(SEL_MICHAEL), 188.1957)
// SET_ENTITY_VISIBLE(GET_SELECT_PED(SEL_MICHAEL),TRUE)
// ENDIF
ELSE
IF assetsRequested = FALSE
PRINTSTRING("assetsRequested = FALSE") PRINTNL()
REQUEST_VEHICLE_RECORDING(1, "BB_SOL_JET")
REQUEST_VEHICLE_RECORDING(294, "DGBFReady")
assetsRequested = TRUE
ENDIF
IF NOT bRightEngineShot
IF bMissionFailed = FALSE
//Do some dialogue from Michael commenting on the guns coolness.
IF doneHelp2 = FALSE
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
PRINT_HELP("M1_HELP2")//~s~Move the rifle with ~INPUTGROUP_LOOK~
doneHelp2 = TRUE
ENDIF
ENDIF
IF doneHelp2 = TRUE
IF doneHelp1 = FALSE
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
PRINT_HELP("M1_HELP1") //~s~Zoom in and out with ~INPUT_SNIPER_ZOOM~.
doneHelp1 = TRUE
ENDIF
ENDIF
ENDIF
IF doneChatGun = FALSE
AND bSniperIsBeingReplayed = FALSE
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_CONTROL", CONV_PRIORITY_MEDIUM)
//T, if you could see this gun, it might convince you Martin Madrazo ain't someone to mess with.
//The fancier the gun, the bigger the pussy who owns it. Now take down the jet.
doneChatGun = TRUE
ENDIF
ENDIF
//Depending if mission is being replayed or not determine how quick to spawn in the plane/
IF TimeToCreatePlane = FALSE
IF bSniperIsBeingReplayed = FALSE
IF TIMERB() > 12500
iSeePlaneChatTimer = GET_GAME_TIMER()
TimeToCreatePlane = TRUE
ENDIF
ELSE
IF TIMERB() > 2500
iSeePlaneChatTimer = GET_GAME_TIMER()
TimeToCreatePlane = TRUE
ENDIF
ENDIF
ENDIF
IF TimeToCreatePlane = TRUE
//Have some dialogue of Michael spotting the jet once it's been created
IF GET_GAME_TIMER() > (iSeePlaneChatTimer + 1500)
IF doneS1_SEE = FALSE
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_ENTITY_ON_SCREEN(vehTitan)
AND iNumberOfHits = 0
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_SEE", CONV_PRIORITY_MEDIUM)
//There it is - out past Downtown.
//I got her - South West of the city.
doneS1_SEE = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF doneS1_LEAD = FALSE
AND doneS1_SEE = TRUE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_LEAD", CONV_PRIORITY_MEDIUM)
//The jet's moving. Got to give a lead.
//Gotta shoot in front to compensate for the speed of the jet.
doneS1_LEAD = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Set up target plane
IF NOT DOES_ENTITY_EXIST(vehTitan)
REQUEST_MODEL(SHAMAL)
REQUEST_MODEL(S_M_M_PILOT_01)
IF HAS_MODEL_LOADED(SHAMAL)
AND HAS_MODEL_LOADED(S_M_M_PILOT_01)
vehTitan = CREATE_VEHICLE(SHAMAL, << -1638.6176, -2734.4397, 12.8201 >>, 327.2515)
SET_VEHICLE_LIVERY(vehTitan, 1)
SET_VEHICLE_ENGINE_ON(vehTitan, TRUE, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(vehTitan, TRUE)
SET_ENTITY_INVINCIBLE(vehTitan, TRUE)
CONTROL_LANDING_GEAR(vehTitan, LGC_RETRACT_INSTANT)
pedPilot = CREATE_PED_INSIDE_VEHICLE(vehTitan, PEDTYPE_MISSION, S_M_M_PILOT_01)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HEAD, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_TORSO, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_LEG, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(pedPilot, PED_COMP_JBIB, 0, 0)
CHECK_PED_WITH_REMOTE_SNIPER(sSniperData, pedPilot)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_M_PILOT_01)
SET_MODEL_AS_NO_LONGER_NEEDED(SHAMAL)
ENDIF
ENDIF
//Create pilot in plane
IF DOES_ENTITY_EXIST(vehTitan)
//Add in a temp blip for the plane here so it can be seen if game is paused on map.Note to be removed once the cutscene starts.
IF NOT DOES_BLIP_EXIST(blipObj)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
blipObj = ADD_BLIP_FOR_ENTITY(vehTitan)
SET_BLIP_AS_FRIENDLY(blipObj, FALSE)
ENDIF
ENDIF
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
START_PLAYBACK_RECORDED_VEHICLE(vehTitan, 294, "DGTitanEntry")
SET_PLAYBACK_SPEED(vehTitan, 0.616)
ENDIF
IF PlaneSlowedDown = FALSE
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
IF GET_TIME_POSITION_IN_RECORDING(vehTitan) > 14136
SET_PLAYBACK_SPEED(vehTitan, 0.55)
PlaneSlowedDown = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Call this every frame after the plane has been created to draw the red target square. Only draw when the bulletcam is not active
IF BulletCamActive = FALSE
drawAimSquare(sSniperData, vEngineOffset1, fCrossScreenPositionX[1], fCrossScreenPositionY[1])
ENDIF
//Have some help text and god text once the plane has been created.
IF floatingHelp1Done = FALSE
PRINT_HELP("BFHELPTXT4")//Aim for the red target calculated to compensate for the distance.
floatingHelp1Done = TRUE
ENDIF
IF DamageEnginesTextDone = FALSE
IF bSniperIsBeingReplayed = FALSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
PRINT_NOW("BFDAMAGE", DEFAULT_GOD_TEXT_TIME, 1)//Shoot the ~r~plane's engine.
DamageEnginesTextDone = TRUE
ENDIF
ELSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
PRINT_NOW("BFDAMAGE", 4000, 1)//Shoot the ~r~plane's engine.
DamageEnginesTextDone = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
//Have some dialogue of Michael looking for the jet
IF bSniperIsBeingReplayed = FALSE
IF doneS1_LOOK = FALSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_LOOK", CONV_PRIORITY_MEDIUM)
//Where is it?
//Looking for it.
//Hold on.
//Can't see it yet.
doneS1_LOOK = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Handle where the traffic is spawned when player is using the sniper.
USE_SCRIPT_CAM_FOR_AMBIENT_POPULATION_ORIGIN_THIS_FRAME(TRUE, TRUE)
IF doneTakeDownPlaneWarning = FALSE
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
IF GET_TIME_POSITION_IN_RECORDING(vehTitan) > 20000
PRINT_NOW("SNIPE4", DEFAULT_GOD_TEXT_TIME, 1)//Take the plane out before it's too late.
doneTakeDownPlaneWarning = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
// PRINTSTRING("Cam fov is ") PRINTFLOAT(GET_FINAL_RENDERED_CAM_FOV()) PRINTNL()
IF bMissionFailedToSlow = FALSE
IF TIMERB() > 1000
//Stats this starts the timer for checking how long it takes the player to shoot down the plane
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(MAR1_PLANE_HIT_TIME)
IF NOT bRightEngineShot //OR NOT bLeftEngineShot
PRINTSTRING("bRightEngineShot = FALSE") PRINTNL()
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_ATTACK)
PRINTSTRING("Bullet being fired") PRINTNL()
//Stats
INFORM_MISSION_STATS_OF_INCREMENT(MAR1_ONE_SHOT)
//Make sure sniper is zoomed in a decent amount before allowing it to hit.
IF GET_FINAL_RENDERED_CAM_FOV() <= 16
AND GET_FINAL_RENDERED_CAM_FOV() > 5
// IF fCrossScreenPositionX[1] > 0.45 AND fCrossScreenPositionX[1] < 0.55
// AND fCrossScreenPositionY[1] > 0.45 AND fCrossScreenPositionY[1] < 0.55
IF fCrossScreenPositionX[1] > 0.49 AND fCrossScreenPositionX[1] < 0.51
AND fCrossScreenPositionY[1] > 0.49 AND fCrossScreenPositionY[1] < 0.51
AND NOT bRightEngineShot
IF GET_GAME_TIMER() > (iShotTimer + 200)
hasEffectStarted = FALSE
bEffectTriggered = FALSE
iShotTimer = GET_GAME_TIMER()
iNumberOfHits ++
ENDIF
ELSE
//Some dialogue if he's missed
IF GET_GAME_TIMER() > (iMissChatTimer + 5000)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_MISS", CONV_PRIORITY_MEDIUM)
//Ah, shit.
//Not good enough.
//That didn't do it.
//Gimme a second.
//It'll go down next time.
//Gonna take another shot.
//Nope.
iMissChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_FINAL_RENDERED_CAM_FOV() <= 5
AND GET_FINAL_RENDERED_CAM_FOV() > 2
// IF fCrossScreenPositionX[1] > 0.45 AND fCrossScreenPositionX[1] < 0.55
// AND fCrossScreenPositionY[1] > 0.45 AND fCrossScreenPositionY[1] < 0.55
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
IF GET_TIME_POSITION_IN_RECORDING(vehTitan) < 18000
IF fCrossScreenPositionX[1] > 0.485 AND fCrossScreenPositionX[1] < 0.515
AND fCrossScreenPositionY[1] > 0.485 AND fCrossScreenPositionY[1] < 0.515
AND NOT bRightEngineShot
IF GET_GAME_TIMER() > (iShotTimer + 200)
hasEffectStarted = FALSE
bEffectTriggered = FALSE
iShotTimer = GET_GAME_TIMER()
iNumberOfHits ++
ENDIF
ELSE
//Some dialogue if he's missed
IF GET_GAME_TIMER() > (iMissChatTimer + 5000)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_MISS", CONV_PRIORITY_MEDIUM)
//Ah, shit.
//Not good enough.
//That didn't do it.
//Gimme a second.
//It'll go down next time.
//Gonna take another shot.
//Nope.
iMissChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ELSE
IF fCrossScreenPositionX[1] > 0.45 AND fCrossScreenPositionX[1] < 0.55
AND fCrossScreenPositionY[1] > 0.45 AND fCrossScreenPositionY[1] < 0.55
AND NOT bRightEngineShot
IF GET_GAME_TIMER() > (iShotTimer + 200)
hasEffectStarted = FALSE
bEffectTriggered = FALSE
iShotTimer = GET_GAME_TIMER()
iNumberOfHits ++
ENDIF
ELSE
//Some dialogue if he's missed
IF GET_GAME_TIMER() > (iMissChatTimer + 5000)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_MISS", CONV_PRIORITY_MEDIUM)
//Ah, shit.
//Not good enough.
//That didn't do it.
//Gimme a second.
//It'll go down next time.
//Gonna take another shot.
//Nope.
iMissChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_FINAL_RENDERED_CAM_FOV() <= 2
AND GET_FINAL_RENDERED_CAM_FOV() >= 1
// IF fCrossScreenPositionX[1] > 0.45 AND fCrossScreenPositionX[1] < 0.55
// AND fCrossScreenPositionY[1] > 0.45 AND fCrossScreenPositionY[1] < 0.55
IF fCrossScreenPositionX[1] > 0.46 AND fCrossScreenPositionX[1] < 0.54
AND fCrossScreenPositionY[1] > 0.46 AND fCrossScreenPositionY[1] < 0.54
AND NOT bRightEngineShot
IF GET_GAME_TIMER() > (iShotTimer + 200)
hasEffectStarted = FALSE
bEffectTriggered = FALSE
iShotTimer = GET_GAME_TIMER()
iNumberOfHits ++
ENDIF
ELSE
//Some dialogue if he's missed
IF GET_GAME_TIMER() > (iMissChatTimer + 5000)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, PLAYER_PED_ID(), "MICHAEL")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, NULL, "TREVOR")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_MISS", CONV_PRIORITY_MEDIUM)
//Ah, shit.
//Not good enough.
//That didn't do it.
//Gimme a second.
//It'll go down next time.
//Gonna take another shot.
//Nope.
iMissChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
// CLEANUP
IF iStageSection >= 1
// UPDATE_REMOTE_SNIPER(sSniperData)
SET_PAD_CAN_SHAKE_DURING_CUTSCENE(TRUE)
bStageSetup = FALSE
SET_MAX_WANTED_LEVEL(5)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
//PURPOSE: Performs the cutscene which introduces the garage and the three characters
FUNC BOOL stageCutscenePlaneDescent()
//Call this everyframe
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.1)
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT)
//Call every frame for these cutscene's so that the plane stays in HD
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
REQUEST_VEHICLE_HIGH_DETAIL_MODEL(vehTitan)
ENDIF
ENDIF
IF IS_PED_WEARING_HELMET(PLAYER_PED_ID())
REMOVE_PED_HELMET(PLAYER_PED_ID(), TRUE)
ENDIF
IF NOT IS_GAMEPLAY_CAM_RENDERING()
REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() //Fix for bug 2176962
ENDIF
//Switch player to Trevor during the cutscene
IF PlayerIsNowTrevor = FALSE
IF NOT DOES_ENTITY_EXIST(vehBike)
REQUEST_MODEL(SANCHEZ)
REQUEST_MODEL(PLAYER_TWO)
IF HAS_MODEL_LOADED(SANCHEZ)
vehBike = CREATE_VEHICLE(SANCHEZ,vBFChaseStartCoords, fBFChaseStartHeading)
SET_VEHICLE_ENGINE_ON(vehBike, TRUE, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(SANCHEZ)
ENDIF
ELSE
//Set up bike AND TREVOR
IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
IF HAS_MODEL_LOADED(PLAYER_TWO)
IF CREATE_PLAYER_PED_INSIDE_VEHICLE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], CHAR_TREVOR, vehBike)
//Give TREVOR headset
// SET_PED_HELMET(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], TRUE)
// GIVE_PED_HELMET(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], FALSE)
// IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_TORSO, 0, 4)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_LEG, 18, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_HAND, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_FEET, 16, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_SPECIAL, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_SPECIAL2, 0, 0)
// SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], PED_COMP_DECL, 0, 0)
// ENDIF
SET_PED_COMP_ITEM_CURRENT_SP(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], COMP_TYPE_PROPS, PROPS_P1_HEADSET)
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, sSelectorPeds.pedID[SELECTOR_PED_TREVOR], "TREVOR")
PRINTSTRING("Trevor created ") PRINTNL()
ENDIF
ENDIF
ELSE
IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_TREVOR)
IF TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds)
//Put Michael into the van
IF DOES_ENTITY_EXIST(SniperVan)
AND DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
IF IS_VEHICLE_DRIVEABLE(SniperVan)
IF NOT IS_PED_IN_VEHICLE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], SniperVan)
SET_PED_INTO_VEHICLE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], SniperVan)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], TRUE)
ENDIF
ENDIF
ENDIF
SET_FACIAL_IDLE_ANIM_OVERRIDE(PLAYER_PED_ID(), "Mood_Angry_1")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 2, PLAYER_PED_ID(), "TREVOR")
ADD_PED_FOR_DIALOGUE(structConvoPeds, 0, NULL, "MICHAEL")
PlayerIsNowTrevor = TRUE
PRINTSTRING("PlayerIsNowTrevor = TRUE ") PRINTNL()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//--------- SETUP ---------
IF NOT bStageSetup
// Set_Replay_Mid_Mission_Stage(ENUM_TO_INT(STAGE_CUTSCENE_PLANE_DESCENT))
PRINTSTRING("MISSION STAGE CUTSCENE PLANE DESCENT") PRINTNL()
missionCanFail = FALSE
//Flags
PlayerIsNowTrevor = FALSE
bPlaneShotSceneStreamStarted= FALSE
modelsRequested = FALSE
iStageSection = 0
//Clear help for cutscene
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
CLEAR_HELP()
ENDIF
IF DOES_BLIP_EXIST(blipObj)
REMOVE_BLIP(blipObj)
ENDIF
//Move Michael to help stream in areas
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-464.7, 1255.5, 317>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 111.0994)
ENDIF
ENDIF
IF IS_VEHICLE_DRIVEABLE(vehTitan)
CONTROL_LANDING_GEAR(vehTitan, LGC_RETRACT_INSTANT)
ENDIF
ADD_ALL_PEDS_TO_DIALOGUE()
CLEAR_HELP()
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_SNIPER_CAMERA")
STOP_AUDIO_SCENE("MARTIN_1_SNIPER_CAMERA")
ENDIF
CLEAR_AREA(<<-401, 1211, 325>>, 70, TRUE)
SET_ROADS_IN_AREA(vObservatoryRoadMin, vObservatoryRoadMax, FALSE)
IF NOT IS_SCREEN_FADED_IN()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//[SP] just fixing compiling issues
modelsrequested = modelsrequested
planeshotsoundid = planeshotsoundid
//[SP] just fixing compiling issues
eSwitchCamState = SWITCH_CAM_START_SPLINE1
bPlaneShotSceneStarted = FALSE
bPlaneShotSceneFinished = FALSE
bPlaneEngineExplosionStarted = FALSE
bPlaneEnginePreSmokeStarted = FALSE
bPlaneEnginePreSmokeStopped = FALSE
bPlanePilotConvoStarted = FALSE
bMichaelShotPlaneConvoStarted = FALSE
bTrevorLookAtPlaneStarted = FALSE
bChaseMusicStarted = FALSE
bBikeRecordingStopped = FALSE
bDGTitanCrashRecording2Started = FALSE
/*bPlaneFlyByShakeStarted = FALSE
bPlaneFlyByShakeStopped = FALSE*/
PREPARE_MUSIC_EVENT("SOL1_FRANKLIN_STARTS")
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[1])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[1])
ENDIF
bTriggerFX[2] = FALSE
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
STOP_STREAM()
SETTIMERB(0)
missionCanFail = TRUE
bStageSetup = TRUE
//--------- UPDATE ---------
ELSE
SWITCH iStageSection
CASE 0
DISABLE_ALL_CONTROLS_FOR_PLAYER_THIS_FRAME()
IF NOT bPlaneShotSceneStreamStarted
IF NOT bPlaneShotSceneStreamLoaded
bPlaneShotSceneStreamLoaded = LOAD_STREAM("MARTIN_1_LEAR_JET_SHOT_DOWN_MASTER")
ENDIF
ENDIF
IF NOT bPlaneShotSceneStarted
AND TIMERB() > iPlaneShotSceneDelay
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CLEAR_PRINTS()
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_SNIPER_CAMERA")
STOP_AUDIO_SCENE("MARTIN_1_SNIPER_CAMERA")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_PLANE_CHASE_SCENE")
START_AUDIO_SCENE("MARTIN_1_PLANE_CHASE_SCENE")
ENDIF
SET_REMOTE_SNIPER_ACTIVE(sSniperData, FALSE)
CLEANUP_REMOTE_SNIPER(sSniperData)
SETTIMERB(0)
bPlaneShotSceneStarted = TRUE
g_bDisableNoirLensEffect = FALSE
ENDIF
IF bPlaneShotSceneStarted
AND NOT bPlaneShotSceneFinished
IF NOT bPlaneShotSceneStreamStarted
IF bPlaneShotSceneStreamLoaded
CDEBUG3LN(DEBUG_MISSION, "Stream is loaded...")
PLAY_STREAM_FRONTEND()
bPlaneShotSceneStreamStarted = TRUE
ELSE
CDEBUG3LN(DEBUG_MISSION, "Stream is NOT loaded!!!")
ENDIF
ENDIF
IF NOT bPlaneEngineExplosionStarted
AND TIMERB() > iPlaneEngineExplosionDelay
IF DOES_ENTITY_EXIST(vehTitan)
IF NOT IS_ENTITY_DEAD(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
CDEBUG3LN(DEBUG_MISSION, "Starting Explosion...")
// Play impact sound and trigger music event
PLAY_SOUND_FROM_ENTITY(PlaneShotSoundID, "SOLOMON_1_JET_SHOT_EXPLODE", vehTitan)
TRIGGER_MUSIC_EVENT("SOL1_ENGINE_HIT")
// Impact and Fire
START_PARTICLE_FX_NON_LOOPED_ON_ENTITY("scr_sol1_sniper_impact", vehTitan, vEngineOffset1 + vPlaneEngineExplosionOffset, vPlaneEngineExplosionRot, fPlaneEngineExplosionScale)
ENDIF
ENDIF
ENDIF
bPlaneEngineExplosionStarted = TRUE
ENDIF
IF NOT bPlaneEnginePreSmokeStarted
AND TIMERB() > iPlaneEnginePreSmokeOnDelay
IF DOES_ENTITY_EXIST(vehTitan)
IF NOT IS_ENTITY_DEAD(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
// Short burst of smoke
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[0])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[0])
ENDIF
ptfxEngine[1] = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sol1_plane_smoke_loop", vehTitan, vEngineOffset1, VECTOR_ZERO)
ENDIF
ENDIF
ENDIF
bPlaneEnginePreSmokeStarted = TRUE
ENDIF
IF NOT bPlaneEnginePreSmokeStopped
AND TIMERB() > iPlaneEnginePreSmokeOffDelay
// Stop short burst of smoke
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[1])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[1])
ENDIF
bPlaneEnginePreSmokeStopped = TRUE
ENDIF
IF NOT bTriggerFX[2]
AND TIMERB() > iPlaneEngineSmokeDelay
IF DOES_ENTITY_EXIST(vehTitan)
IF NOT IS_ENTITY_DEAD(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
CDEBUG3LN(DEBUG_MISSION, "Starting Smoke Trail...")
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[0])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[0])
ENDIF
ptfxEngine[1] = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sol1_plane_smoke_loop", vehTitan, vEngineOffset1, VECTOR_ZERO)
SET_PARTICLE_FX_LOOPED_SCALE(ptfxEngine[1], 2.0)
bTriggerFX[2] = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT bMichaelShotPlaneConvoStarted
AND TIMERB() > iMichaelShotPlaneConvoDelay
CDEBUG3LN(DEBUG_MISSION, "Starting Michael Shot Plane Convo...")
KILL_ANY_CONVERSATION()
CLEAR_PRINTS()
CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_PLANEHIT", CONV_PRIORITY_MEDIUM)
//Plane's coming down, are you on it?
//You see it, plane's coming down, can you stay with it?
REPLAY_RECORD_BACK_FOR_TIME(3.0, 3.0, REPLAY_IMPORTANCE_HIGHEST)
bMichaelShotPlaneConvoStarted = TRUE
ENDIF
IF NOT bPlanePilotConvoStarted
AND TIMERB() > iPlanePilotConvoDelay
CDEBUG3LN(DEBUG_MISSION, "Starting Plane Pilot Convo...")
KILL_ANY_CONVERSATION()
CLEAR_PRINTS()
CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_HIT", CONV_PRIORITY_MEDIUM)
REPLAY_RECORD_BACK_FOR_TIME(3.0, 3.0, REPLAY_IMPORTANCE_HIGHEST)
//Engine's gone!
//Birdstrike!
bPlanePilotConvoStarted = TRUE
ENDIF
/*IF NOT bTrevorTrackPlaneConvoStarted = FALSE
AND TIMERB() > iTrevorTrackPlaneConvoDelay
CDEBUG3LN(DEBUG_MISSION, "Starting Trevor Track Plane Convo...")
KILL_ANY_CONVERSATION()
CLEAR_PRINTS()
CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_SHOT", CONV_PRIORITY_MEDIUM)
//[SP]Assuming there will be dialogue from Trevor
bTrevorTrackPlaneConvoStarted = TRUE
ENDIF*/
IF HANDLE_PLANE_SHOT_SWITCH_CAM(scsPlaneShotScene, scsPlaneToBike)
SETTIMERA(0)
PRINTSTRING("bPlaneShotSceneFinished = TRUE") PRINTNL()
bPlaneShotSceneFinished = TRUE
ELSE
PRINTSTRING("bPlaneShotSceneFinished = FALSE") PRINTNL()
ENDIF
ENDIF
IF bPlaneShotSceneFinished
IF NOT bChaseMusicStarted
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_MAIN")
CDEBUG3LN(DEBUG_MISSION, "Starting Chase Music...")
START_AUDIO_SCENE("MARTIN_1_CHASE_MAIN")
ENDIF
bChaseMusicStarted = TRUE
ENDIF
IF NOT bBikeRecordingStopped
IF IS_PLAYER_TRYING_TO_DRIVE()
OR TIMERA() > iBikeRecordingStoppedDelay
IF DOES_ENTITY_EXIST(vehBike)
IF NOT IS_ENTITY_DEAD(vehBike)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBike)
STOP_PLAYBACK_RECORDED_VEHICLE(vehBike)
ENDIF
ENDIF
ENDIF
IF NOT IS_PLAYER_DEAD(PLAYER_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDIF
iStageSection++
bBikeRecordingStopped = TRUE
ENDIF
ENDIF
ENDIF
BREAK
CASE 1
iStageSection++
BREAK
ENDSWITCH
/*IF TIMERB() > 200
SWITCH iStageSection
CASE 0
//SETUP
IF NOT bCameraShotSetup
CLEAR_PRINTS()
SET_REMOTE_SNIPER_ACTIVE(sSniperData,FALSE)
CLEANUP_REMOTE_SNIPER(sSniperData)
//Set the flag to stop drawing the sniper hud to the screen now.
RemoteSniperNeedsUpdated = FALSE
doStartCutscene()
doTwoAttachLookAtEntityCam( vehTitan,<< 5.0902, 3.5482, 2.0866 >>, vEngineOffset1, 30.9066,<< 4.9543, 3.6008, 1.4026 >>, vEngineOffset1, 30.9066, 2000)
doCamShake("ROAD_VIBRATION_SHAKE", 0.1)
SETTIMERA(0)
bHasJolted = FALSE
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_PLANE_CHASE_SCENE")
START_AUDIO_SCENE("MARTIN_1_PLANE_CHASE_SCENE")
ENDIF
//Start audio stream now
IF bPlaneShotSceneStreamStarted = FALSE
PLAY_STREAM_FRONTEND()
bPlaneShotSceneStreamStarted = TRUE
ENDIF
bCameraShotSetup = TRUE
ELSE
IF bHasJolted = FALSE
doCamShake("JOLT_SHAKE", 2)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
PLAY_SOUND_FROM_ENTITY(PlaneShotSoundID, "SOLOMON_1_JET_SHOT_EXPLODE", vehTitan)
TRIGGER_MUSIC_EVENT("SOL1_ENGINE_HIT")
START_PARTICLE_FX_NON_LOOPED_ON_ENTITY( "scr_sol1_sniper_impact", vehTitan, vEngineOffset1 + <<0,1.5,0>>, <<-90,0,0>>, 4)
ENDIF
bHasJolted = TRUE
ENDIF
IF TIMERA() > 1000
IF bTriggerFX[2] = FALSE
doCamShake("SKY_DIVING_SHAKE", 1.5)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
ptfxEngine[1] = START_PARTICLE_FX_LOOPED_ON_ENTITY( "scr_sol1_plane_smoke_loop", vehTitan,vEngineOffset1,VECTOR_ZERO)
SET_PARTICLE_FX_LOOPED_SCALE(ptfxEngine[1], 2.0)
bTriggerFX[2] = TRUE
ENDIF
ENDIF
ENDIF
IF TIMERA() > 1500
bCameraShotSetup = FALSE
iStageSection++
ENDIF
ENDIF
BREAK
CASE 1
IF NOT bCameraShotSetup
doTwoAttachLookAtEntityCam( vehTitan, << 1.5504, 14.5097, 0.6268 >>, <<0.0, 0.0, 0.0>>, 22.7820, << 2.0504, 14.5097, 0.6268 >>, <<0.0, 0.0, 0.0>>, 22.7820, 2500)
doCamShake("SKY_DIVING_SHAKE", 1.5)
SETTIMERA(0)
bHasJolted = FALSE
KILL_ANY_CONVERSATION()
CLEAR_PRINTS()
CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_HIT", CONV_PRIORITY_MEDIUM)
//What the fuck was that?
IF NOT IS_PED_INJURED(pedPilot)
TASK_LOOK_AT_COORD(pedPilot, vEngineOffset1+<<0,15,0>>, 1000)
ENDIF
bCameraShotSetup = TRUE
ELSE
IF TIMERA() > 2500
bCameraShotSetup = FALSE
iStageSection++
ENDIF
ENDIF
BREAK
CASE 2
IF NOT bCameraShotSetup
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
STOP_PLAYBACK_RECORDED_VEHICLE(vehTitan)
ENDIF
REMOVE_VEHICLE_RECORDING(294, "DGTitanEntry")
START_PLAYBACK_RECORDED_VEHICLE(vehTitan, iRecNo, "DGTitanCrash")
SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, 8405)
SET_PLAYBACK_SPEED(vehTitan,0.6)
ENDIF
//
// //Add particle effects of plane engine on fire for the chase
// IF bTriggerFX[2] = FALSE
// START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sol1_plane_smoke_loop",vehTitan,vEngineOffset1,VECTOR_ZERO)
// bTriggerFX[2] = TRUE
// ENDIF
doTwoPointCam( << -167.9992, -85.6194, 286.6718 >>, << -11.7987, 13.3209, -179.2416 >>, 45.0000, << -179.0338, 45.5796, 260.4149 >>, << -9.2809, 11.0089, -172.1679 >>, 21.0171,3900)
doCamShake("SKY_DIVING_SHAKE", 1.5)
KILL_ANY_CONVERSATION()
CLEAR_PRINTS()
CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_SHOT", CONV_PRIORITY_MEDIUM)
//Im on this motherfucker!
//I got this!
SETTIMERA(0)
bCameraShotSetup = TRUE
//UPDATE
ELSE
//CLEANUP
IF TIMERA() > 3900
iStageSection++
bCameraShotSetup = FALSE
ENDIF
ENDIF
BREAK
CASE 3
//SETUP
IF NOT bCameraShotSetup
SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, 27552)
doTwoPointCam( << -453.9597, 1071.6810, 328.7998 >>, << -2.6154, 0.1738, -174.9520 >>, 30.1916, << -453.7553, 1071.3461, 327.1249 >>, << 26.1871, 0.3835, -179.0974 >>, 35.4347, 4000, GRAPH_TYPE_SIN_ACCEL_DECEL)
doCamShake("ROAD_VIBRATION_SHAKE", 0.1)
SETTIMERA(0)
bCameraShotSetup = TRUE
//UPDATE
ELSE
//Request models for next stage
IF modelsRequested = FALSE
PREPARE_MUSIC_EVENT("SOL1_FRANKLIN_STARTS")
modelsRequested = TRUE
ENDIF
IF TIMERA() > 4000
iStageSection++
bCameraShotSetup = FALSE
ENDIF
ENDIF
BREAK
CASE 4
//SETUP
IF NOT bCameraShotSetup
SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, 30516)
SET_PLAYBACK_SPEED(vehTitan, 0.3)
doTwoPointCam( << -447.6947, 1073.7161, 382.1912 >>, << -20.4731, 0.0955, 5.8696 >>, 28.8050, << -454.5002, 1128.1649, 392.7070 >>, << -37.9954, 10.6115, -31.3539 >>, 28.8050, 3047)
doCamShake("SKY_DIVING_SHAKE", 1.5)
SETTIMERA(0)
IF IS_VEHICLE_DRIVEABLE(vehBike)
START_PLAYBACK_RECORDED_VEHICLE(vehBike, iRecNo, "DGBFReady")
SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehBike, 11829)
ENDIF
TRIGGER_MUSIC_EVENT("SOL1_FRANKLIN_STARTS")
bCameraShotSetup = TRUE
ELSE
IF TIMERA() > 3000
iStageSection++
bCameraShotSetup = FALSE
ENDIF
ENDIF
BREAK
CASE 5
//SETUP
IF NOT bCameraShotSetup
DESTROY_ALL_CAMS()
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
STOP_PLAYBACK_RECORDED_VEHICLE(vehTitan)
ENDIF
REMOVE_VEHICLE_RECORDING(iRecNo, "DGTitanCrash")
START_PLAYBACK_RECORDED_VEHICLE(vehTitan, 1, "BB_SOL_JET")
SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, 13662)
ENDIF
camInit = CREATE_CAMERA(CAMTYPE_SPLINE_DEFAULT, FALSE)
SET_CAM_SPLINE_SMOOTHING_STYLE(camInit, CAM_SPLINE_SLOW_OUT_SMOOTH)
ADD_CAM_SPLINE_NODE_USING_CAMERA(camInit, CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<-408.776764,1181.976563,325.094482>>,<<8.912352,-0.000001,-17.225756>>,40.463402, TRUE), 0, CAM_SPLINE_NODE_SMOOTH_ROT)
ADD_CAM_SPLINE_NODE_USING_CAMERA(camInit, CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<-402.191925,1186.963501,325.682770>>,<<-0.094461,-0.000001,-17.225756>>,43.463402, TRUE), 1700, CAM_SPLINE_NODE_SMOOTH_ROT)
ADD_CAM_SPLINE_NODE_USING_GAMEPLAY_FRAME(camInit, 800, CAM_SPLINE_NODE_SMOOTH_ROT)
SHAKE_CAM(camInit, "HAND_SHAKE", 0.2)
camDest = CREATE_CAMERA(CAMTYPE_SPLINE_DEFAULT, FALSE)
SET_CAM_SPLINE_SMOOTHING_STYLE(camInit, CAM_SPLINE_SLOW_OUT_SMOOTH)
ADD_CAM_SPLINE_NODE(camDest, <<-392.684845,1233.878906,333.615997>>, <<0.0, 0.0, 0.0>>, 0)
ADD_CAM_SPLINE_NODE(camDest, <<-388.822266,1229.930420,326.045013>>, <<0.0, 0.0, 0.0>>, 2000)
POINT_CAM_AT_CAM(camInit, camDest)
SET_CAM_ACTIVE(camDest, TRUE)
SET_CAM_ACTIVE(camInit, TRUE)
SETTIMERA(0)
bCameraShotSetup = TRUE
ELSE
IF TIMERA() > 2500
iStageSection++
bCameraShotSetup = FALSE
ENDIF
ENDIF
BREAK
CASE 6
//SETUP
IF NOT bCameraShotSetup
DESTROY_ALL_CAMS()
IF bPlaneShotSceneStreamStarted = TRUE
STOP_STREAM()
bPlaneShotSceneStreamStarted = FALSE
ENDIF
RENDER_SCRIPT_CAMS(FALSE, FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
bCameraShotSetup = TRUE
ELSE
IF TIMERA() > 700
STOP_PLAYBACK_RECORDED_VEHICLE(vehBike)
doEndCutscene(TRUE, FALSE)
iStageSection++
bCameraShotSetup = FALSE
ENDIF
ENDIF
BREAK
ENDSWITCH
ELSE
//Keep the sniper on screen until the camera becomes active
UPDATE_REMOTE_SNIPER(sSniperData)
ENDIF*/
// //Check for cutscene being skipped
// IF TIMERB() > 1500
// IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED()
// stopCamShake(TRUE)
//
// bStageSetup = FALSE
// bCameraShotSetup = FALSE
// iStageSection = 7
//
// eMissionStage = STAGE_CHASE_PLANE
//
// manageSkip()
// ENDIF
// ENDIF
//--------- CLEANUP ---------
IF iStageSection >= 2
stopCamShake(TRUE)
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
bStageSetup = FALSE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
//PURPOSE: Deals with the chase hint cam.
PROC ChaseHintCam()
//Have audio scene switched on when hint cam is active
IF IS_GAMEPLAY_HINT_ACTIVE()
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_FOCUS_CAM")
START_AUDIO_SCENE("MARTIN_1_FOCUS_CAM")
ENDIF
ELSE
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_FOCUS_CAM")
STOP_AUDIO_SCENE("MARTIN_1_FOCUS_CAM")
ENDIF
ENDIF
IF cinematicCamDeactivated = TRUE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND SAFE_TO_PRINT_CHASE_HINT_CAM_HELP()//url:bugstar:1997821
IF fRecordingTime < 117498
IF IS_VEHICLE_DRIVEABLE(vehTitan)
CONTROL_VEHICLE_CHASE_HINT_CAM_ANY_MEANS(localChaseHintCamStruct, vehTitan)
ENDIF
ELSE
IF NOT DOES_BLIP_EXIST(endGuyBlip[0])
AND NOT DOES_BLIP_EXIST(endGuyBlip[1])
IF IS_VEHICLE_DRIVEABLE(vehTitan)
CONTROL_VEHICLE_CHASE_HINT_CAM_ANY_MEANS(localChaseHintCamStruct, vehTitan)
ENDIF
ELSE
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
ENDIF
ENDIF
ELSE
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
ENDIF
ENDIF
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND SAFE_TO_PRINT_CHASE_HINT_CAM_HELP()//url:bugstar:1997821
IF bHasUsedHintCam = FALSE
IF cinematicCamDeactivated = TRUE
IF DoneHelp[0] = FALSE
PRINT_HELP("BFHELPTXT2")//Press ~INPUT_VEH_CIN_CAM~ to toggle focus onto the plane.
SETTIMERB(0)
DoneHelp[0] = TRUE
ELSE
IF DoneHelp[1] = FALSE
IF TIMERB() > 15000
PRINT_HELP("BFHELPTXT2")//Press ~INPUT_VEH_CIN_CAM~ to toggle focus onto the plane.
SETTIMERB(0)
DoneHelp[1] = TRUE
ENDIF
ELSE
IF DoneHelp[2] = FALSE
IF TIMERB() > 10000
PRINT_HELP("BFHELPTXT2")//Press ~INPUT_VEH_CIN_CAM~ to toggle focus onto the plane.
SETTIMERB(0)
DoneHelp[2] = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_GAMEPLAY_HINT_ACTIVE()
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
CLEAR_HELP(TRUE)
ENDIF
bHasUsedHintCam = TRUE
ENDIF
ENDIF
ELSE
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("BFHELPTXT2")
CLEAR_HELP()
ENDIF
ENDIF
ENDPROC
//PURPOSE: Performs the section where TREVOR tortures the victim for the first time
FUNC BOOL stageChasePlane()
// IF IS_VEHICLE_DRIVEABLE(vehBike)
// IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBike)
// PRINTSTRING("Bike's playback position is ") PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(vehBike))PRINTNL()
// ENDIF
// ENDIF
// FLOAT fOptimalPlaneDistance
// FLOAT fMinPlaneSpeed
// FLOAT fMaxPlaneSpeed
// //Remove this once finished making crash scene
#IF IS_DEBUG_BUILD
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_9)
missionCanFail = FALSE
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
SKIP_TO_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehTitan, 107591)
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(vehBike)
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBike)
STOP_PLAYBACK_RECORDED_VEHICLE(vehBike)
ENDIF
ENDIF
ENDIF
SET_ENTITY_COORDS(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), <<2673.5642, 4346.6299, 44.5755>>)
SET_ENTITY_HEADING(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 311.4434)
LOAD_SCENE(<<2673.5642, 4346.6299, 44.5755>>)
missionCanFail = TRUE
ENDIF
#ENDIF
IF bStageSetup = TRUE
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(vehBike)
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehBike) < 100
IF NOT DOES_BLIP_EXIST(bikeBlip)
bikeBlip = CREATE_BLIP_FOR_VEHICLE(vehBike)
ENDIF
ELSE
IF DOES_BLIP_EXIST(bikeBlip)
REMOVE_BLIP(bikeBlip)
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(bikeBlip)
REMOVE_BLIP(bikeBlip)
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(bikeBlip)
REMOVE_BLIP(bikeBlip)
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(bikeBlip)
REMOVE_BLIP(bikeBlip)
ENDIF
ENDIF
ENDIF
//Handle requesting and unrequesting the mocap scene if player gets close to cutscene trigger point.
IF CutsceneRequested = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2803.8, 4798.1, 47.7>>) < DEFAULT_CUTSCENE_LOAD_DIST
REQUEST_CUTSCENE("Martin_1_mcs_1")
CutsceneRequested = TRUE
ENDIF
ENDIF
IF CutsceneRequested = TRUE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2803.8, 4798.1, 47.7>>) > DEFAULT_CUTSCENE_UNLOAD_DIST
REMOVE_CUTSCENE()
CutsceneRequested = FALSE
ENDIF
//Set up Trev's clothes for opening cutscene
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
//Trevor
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Trevor", PLAYER_PED_ID(), PLAYER_TWO)
PRINTSTRING("TRIGGER SCENE - Trev's cutscene components set 1.") PRINTNL()
ENDIF
ENDIF
//Handles all the set pieces through out the chase. And cleans them up.
IF bStageSetup = TRUE
SET_PIECES()
ENDIF
IF hasIsStreamPlaying = FALSE
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
IF LOAD_STREAM("MARTIN_1_DAMAGED_PLANE_MASTER")
PLAY_STREAM_FROM_VEHICLE(vehTitan)
PRINTSTRING("Starting the stream MARTIN_1_DAMAGED_PLANE_MASTER")
hasIsStreamPlaying = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Call this every frame to keep ped density down until after the jump over bus section.
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
IF GET_TIME_POSITION_IN_RECORDING(vehTitan) < 30000
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.1)
ENDIF
ENDIF
ENDIF
ENDIF
//Stats
IF PlayerOnBike = FALSE
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehBike)
PlayerOnBike = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF PlayerOnBike = TRUE
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehBike)
INFORM_MISSION_STATS_OF_INCREMENT(MAR1_FELL_OFF_THE_BIKE)
PlayerOnBike = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
//Delete Michael and sniper Van once player is far enough away.
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) > 150
AND NOT IS_ENTITY_ON_SCREEN(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(SniperVan)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), SniperVan) > 150
AND NOT IS_ENTITY_ON_SCREEN(SniperVan)
IF DOES_ENTITY_EXIST(RemoteSniper)
DELETE_OBJECT(RemoteSniper)
ENDIF
DELETE_VEHICLE(SniperVan)
ENDIF
ENDIF
// SETUP
IF NOT bStageSetup
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(2, "STAGE_CHASE_PLANE")
missionCanFail = FALSE
PRINTSTRING("MISSION STAGE CHASE PLANE") PRINTNL()
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0)
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
//Create a scenario blocking area to prevent the planes from spawning during the chase.
AirstripBlockingArea = ADD_SCENARIO_BLOCKING_AREA(<<957.9, 3051.7, 76.7>>, <<1898.5, 3195.2, 32.3>>)
PoliceBikeBlockingArea = ADD_SCENARIO_BLOCKING_AREA(<<2782.5, 4496.7, 50.8>>, <<2787.3, 4519.3, 42.5>>)
// SET_FRONTEND_RADIO_ACTIVE(TRUE)
ADD_ALL_PEDS_TO_DIALOGUE()
fPlaybackSpeed = 0.4
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
// ADD_ENTITY_TO_AUDIO_MIX_GROUP(vehTitan, "SOL_1_CHASE_JET_SHAMAL")
PlaneonfireSoundID = GET_SOUND_ID()
PLAY_SOUND_FROM_ENTITY(PlaneonfireSoundID, "PLANE_ON_FIRE", vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
SET_PLAYBACK_SPEED(vehTitan, fPlaybackSpeed)
ENDIF
ENDIF
ENDIF
// GIVE_WEAPON_TO_PED(PLAYER_PED_ID(),WEAPONTYPE_ASSAULTRIFLE,100)
/*IF bTriggerFX[1] = FALSE
START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sol1_plane_smoke_loop",vehTitan,vEngineOffset0,VECTOR_ZERO)
bTriggerFX[1] = TRUE
ENDIF*/
//Flags
// //Debug Flags
// #IF IS_DEBUG_BUILD
// doneGetBackOnBikeHelpText = FALSE
// #ENDIF
bDoingJumpCutscene = FALSE
bDoneJumpCutscene = FALSE
bDoneSlowMoJump = FALSE
btimeScaleBackToNormal = FALSE
bHasUsedHintCam = FALSE
PlayerCanDoJump = FALSE
doneGetBackOnBikeText = FALSE
// playerfellOffbike = FALSE
doneChaseAfterPlaneText = FALSE
playerDoneTrainJump = FALSE
broughtlandingGearOut = FALSE
Bikeplaybackstopped = FALSE
PlaneOnfireSoundStopped = FALSE
doneChatS1_Jump3 = FALSE
DumpModelRequested = FALSE
DumpSetPieceCreated = FALSE
DumpPlaybackStarted = FALSE
DumpSetpieceSwitchedToAI = FALSE
FellOffBikeStatDone = FALSE
// GodTextCleared = FALSE
cinematicCamDeactivated = FALSE
preparedInteractiveMusic2 = FALSE
IsPedPointingPlayingAnim = FALSE
IsPedPointingSetup = FALSE
IsPedPointingSetup2 = FALSE
IsPedPointingPlayingAnim2 = FALSE
IsPedPointingSetup3 = FALSE
IsPedPointingPlayingAnim3 = FALSE
IsParkedCarSetup = FALSE
startInteractiveMusic2 = FALSE
PlayerOnBike = FALSE
trainModelsRequested = FALSE
busRequested = FALSE
HaulerRequested = FALSE
PatriotRequested = FALSE
BallerRequested = FALSE
DilettanteRequested = FALSE
TornadoRequested = FALSE
Bus2Requested = FALSE
S1_CLIFF_CHAT_DONE = FALSE
S1_FMC4_CHAT_DONE = FALSE
S1_FALL5_CHAT_DONE = FALSE
S1_JUMP2_CHAT_DONE = FALSE
S1_FALL4_CHAT_DONE = FALSE
S1_FMC3_CHAT_DONE = FALSE
S1_FALL3_CHAT_DONE = FALSE
S1_FALL2_CHAT_DONE = FALSE
S1_FMC2_CHAT_DONE = FALSE
S1_FALL1_CHAT_DONE = FALSE
S1_JUMP1_CHAT_DONE = FALSE
S1_OROAD_CHAT_DONE = FALSE
S1_FMC1_CHAT_DONE = FALSE
// planeFrozen = FALSE
IsPedPointingPlayingAnim4 = FALSE
IsPedPointingSetup4 = FALSE
requestedCrashStream = FALSE
crashStreamStarted = FALSE
DoneHorn1 = FALSE
DoneHorn2 = FALSE
DoneHorn3 = FALSE
IPLSwapped = FALSE
CutsceneRequested = FALSE
camsCleanedUp = FALSE
doneKillPedGodText = FALSE
doneGameCamShake = FALSE
CombatTaskGiven = FALSE
CombatTaskRequired = FALSE
safetyTimeScaleBackToNormalSet = FALSE
doneS1_JUMP4 = FALSE
S1_FMC5_CHAT_DONE = FALSE
S1_TRAILER_CHAT_DONE = FALSE
FOR iCounter = 0 TO 19
bSetPiece[iCounter] = FALSE
ENDFOR
FOR iCounter = 0 TO 5
doneHeadLook[iCounter] = FALSE
ENDFOR
FOR iCounter = 0 TO 2
DoneHelp[iCounter] = FALSE
ENDFOR
//SET_BLIP_ROUTE(blipObj, TRUE)
SETTIMERB(0)
SET_ROADS_IN_AREA(vSportsCarRoadMin, vSportsCarRoadMax, FALSE)
SET_ROADS_IN_AREA(<<-9.5, 1758.3, 235.3>>, <<134.5, 1638.3, 222.5>>, FALSE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(SANCHEZ, TRUE)
SET_STUNT_JUMPS_CAN_TRIGGER(FALSE)
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(vehBike)
//Start the audio scene for chasing the plane
// START_AUDIO_SCENE("SOL_1_CHASE_JET_SCENE")
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_MAIN")
START_AUDIO_SCENE("MARTIN_1_CHASE_MAIN")
ENDIF
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_DRIVING)
DISABLE_VEHICLE_GEN_ON_MISSION(TRUE)
CropFieldBlockingArea1 = ADD_SCENARIO_BLOCKING_AREA(<<2756.5, 4523.2, 72>>, <<2916.2, 4821.8, 36.9>>)
PlaneBlockingArea = ADD_SCENARIO_BLOCKING_AREA(<<2813.7, 4807.9, 51.5>>, <<2803.1, 4795.8, 44.6>>)
//If screen is faded out do a load scene at players coordinates now and then fade in the screen
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
END_REPLAY_SETUP(vehBike)
IF DOES_ENTITY_EXIST(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
AND NOT IS_ENTITY_DEAD(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
SET_VEHICLE_FORWARD_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 20)
ENDIF
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
// fOptimalPlaneDistance = 30
// fMinPlaneSpeed = 0.7
// fMaxPlaneSpeed = 1.3
// bUseRubberBand = TRUE
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[0])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[0])
ENDIF
IF bTriggerFX[2] = FALSE
IF IS_VEHICLE_DRIVEABLE(vehTitan)
ptfxEngine[1] = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sol1_plane_smoke_loop",vehTitan,vEngineOffset1,VECTOR_ZERO)
SET_PARTICLE_FX_LOOPED_SCALE(ptfxEngine[1], 2.0)
bTriggerFX[2] = TRUE
ENDIF
ENDIF
IF NOT DOES_CAM_EXIST(camInit)
camInit = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<20.821671,1743.010620,221.849548>>,<<11.511129,-0.000000,165.596802>>,34.700695)
ENDIF
IF NOT DOES_CAM_EXIST(camDest)
camDest = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<28.231022,1742.381470,221.297195>>,<<27.238729,0.000000,144.930542>>,34.700695)
ENDIF
IF NOT DOES_CAM_EXIST(camStatic)
camStatic = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<26.255728,1737.435059,225.466125>>,<<-14.318232,2.157022,-28.279879>>,50.028435)
ENDIF
//Disable all the police for the chase section
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE, FALSE)
ALLOW_DISPATCH(DT_POLICE_HELICOPTER, FALSE)
ALLOW_DISPATCH(DT_POLICE_VEHICLE_REQUEST, FALSE)
ALLOW_DISPATCH(DT_POLICE_ROAD_BLOCK, FALSE)
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, FALSE)
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, FALSE)
ALLOW_DISPATCH(DT_SWAT_AUTOMOBILE, FALSE)
ALLOW_DISPATCH(DT_SWAT_HELICOPTER, FALSE)
SET_MAX_WANTED_LEVEL(0)
CLEAR_PRINTS()
PRINT_NOW("BFCHASE", DEFAULT_GOD_TEXT_TIME, -1)
//Follow the plane and get the package.
iMiniCutStage = 0
iStageSection = 0
fTimeScale = 1
missionCanFail = TRUE
bStageSetup = TRUE
// UPDATE
ELSE
//PRINT_WITH_NUMBER_NOW("~1~", ROUND(fRecordingTime), 1000, 1)
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
fRecordingTime = GET_TIME_POSITION_IN_RECORDING(vehTitan)
PRINTSTRING("Plane's playback position is ") PRINTFLOAT(fRecordingTime)PRINTNL()
ENDIF
ENDIF
ENDIF
// PRINTSTRING("Players heading is ") PRINTFLOAT(GET_ENTITY_HEADING(PLAYER_PED_ID()))PRINTNL()
// PRINTSTRING("Players Speed is ") PRINTFLOAT(GET_ENTITY_SPEED(PLAYER_PED_ID()))PRINTNL()
SWITCH iStageSection
CASE 0
IF bDoingJumpCutscene
// //Allow the player to have control over the speed of the camera
// IF iMiniCutStage < 3
// INT i_left_stick_x, i_left_stick_y, i_right_stick_x, i_right_stick_y
// GET_CONTROL_VALUE_OF_ANALOGUE_STICKS_UNBOUND(i_left_stick_x, i_left_stick_y, i_right_stick_x, i_right_stick_y)
//
// SET_TIME_SCALE(fTimeScale)
//
// //Apply a deadzone to the stick if it's just touched.
// IF i_right_stick_y > 0
// AND i_right_stick_y < 10
// i_right_stick_y = 0
// ENDIF
// IF i_right_stick_y < 0
// AND i_right_stick_y > -10
// i_right_stick_y = 0
// ENDIF
//
// //Speed up the time scale if pushed up
// IF i_right_stick_y < -10
//
// fTimeScale = fTimeScale * 1.10
//
// IF fTimeScale >= 1
// fTimeScale = 1
// ENDIF
// ENDIF
//
// //Slow down the time scale if pulled down
// IF i_right_stick_y > 10
//
// fTimeScale = fTimeScale / 1.15
//
// IF fTimeScale <= 0.15
// fTimeScale = 0.15
// ENDIF
// ENDIF
//
// ENDIF
IF GET_ENTITY_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) < 25
OR GET_ENTITY_HEADING(PLAYER_PED_ID()) < 293
OR GET_ENTITY_HEADING(PLAYER_PED_ID()) > 354
SET_TIME_SCALE(1)
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
//Stop the audio scene
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_JUMP_01")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_JUMP_01")
ENDIF
RENDER_SCRIPT_CAMS(FALSE, FALSE)
SET_WIDESCREEN_BORDERS(FALSE, 500)
bDoingJumpCutscene = FALSE
bDoneJumpCutscene = TRUE
iMiniCutStage = 99
ENDIF
// PRINTSTRING("Offset from Bike is ") PRINTVECTOR(GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(vehBike, GET_CAM_COORD(GET_DEBUG_CAM()))) PRINTNL()
PRINTSTRING("Timer A is ") PRINTINT(TIMERA()) PRINTNL()
SWITCH iMiniCutStage
CASE 0
// KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
// DISPLAY_RADAR(FALSE)
// DISPLAY_HUD(FALSE)
// IF NOT DOES_CAM_EXIST(camInit)
// camInit = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<20.821671,1743.010620,221.849548>>,<<11.511129,-0.000000,165.596802>>,34.700695, TRUE)
// ENDIF
// IF NOT DOES_CAM_EXIST(camDest)
// camDest = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<27.699244,1742.676270,221.899628>>,<<22.520906,-0.253692,153.718536>>,34.700695, TRUE)
// ENDIF
// SET_CAM_ACTIVE(camInit, TRUE)
// SET_CAM_ACTIVE(camDest, TRUE)
// SET_CAM_ACTIVE(camStatic, FALSE)
//
// POINT_CAM_AT_ENTITY(camDest, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), <<0, 3, 0>>)
//
// CLEAR_HELP()
//
// SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, 7000, GRAPH_TYPE_LINEAR, GRAPH_TYPE_LINEAR)
// RENDER_SCRIPT_CAMS(TRUE, FALSE)
//Start the audio scene for the jump
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_JUMP_01")
START_AUDIO_SCENE("MARTIN_1_CHASE_JUMP_01")
ENDIF
SETTIMERA(0)
REPLAY_RECORD_BACK_FOR_TIME(4.0, 7.0, REPLAY_IMPORTANCE_HIGHEST)
TRIGGER_MUSIC_EVENT("SOL1_BUS_JUMP")
iMiniCutStage++
BREAK
CASE 1
IF TIMERA() > 500
OR IS_ENTITY_IN_AIR(PLAYER_PED_ID())
fTimeScale = fTimeScale / 1.15
SET_TIME_SCALE(fTimeScale)
IF fTimeScale <= 0.25
fTimeScale = 0.25
SET_TIME_SCALE(0.25)
iMiniCutStage++
ENDIF
ENDIF
// IF TIMERA() > 1000
//// ATTACH_CAM_TO_ENTITY(camStatic, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), << -0.532271, -1.46621, -0.0967791 >>)
//// POINT_CAM_AT_ENTITY(camStatic, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), <<0, 3, 0>>)
//// SET_CAM_ACTIVE(camStatic, TRUE)
// iMiniCutStage++
// ENDIF
BREAK
CASE 2
IF doneChatS1_Jump3 = FALSE
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CLEAR_PRINTS()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_JUMP3", CONV_PRIORITY_MEDIUM)
//Whoa!
doneChatS1_Jump3 = TRUE
ENDIF
ENDIF
// RENDER_SCRIPT_CAMS(FALSE, TRUE, 1500, TRUE)
// DISPLAY_RADAR(TRUE)
// DISPLAY_HUD(TRUE)
// SET_WIDESCREEN_BORDERS(FALSE, 500)
iMiniCutStage++
BREAK
CASE 3
IF TIMERA() > 1000
OR (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND NOT IS_ENTITY_IN_AIR(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())))
fTimeScale = fTimeScale*1.15
SET_TIME_SCALE(fTimeScale)
IF fTimeScale >= 1
//Stop the audio scene
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_JUMP_01")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_JUMP_01")
ENDIF
SET_TIME_SCALE(1)
iMiniCutStage = 0
bDoingJumpCutscene = FALSE
bDoneJumpCutscene = TRUE
iMiniCutStage++
ENDIF
ENDIF
BREAK
ENDSWITCH
ELSE
// //DEBUG
// #IF IS_DEBUG_BUILD
// RESTORE_PLAYER_POSITION()
// #ENDIF
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF doneGetBackOnBikeText = TRUE
AND GET_GAME_TIMER() > iGetOnBikeTextTimer + 7000
DIALOGUE()
ENDIF
IF doneGetBackOnBikeText = FALSE
DIALOGUE()
ENDIF
ENDIF
//RECORDING_TOOL()
HANDLE_PLAYER_LOOKING_AT_PLANE()
// DUMP_CARGO()
IF Bikeplaybackstopped = FALSE
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehBike)
IF GET_TIME_POSITION_IN_RECORDING(vehBike) > 21000
STOP_PLAYBACK_RECORDED_VEHICLE(vehBike)
REMOVE_VEHICLE_RECORDING(iRecNo, "DGBFReady")
Bikeplaybackstopped = TRUE
ENDIF
ELSE
REMOVE_VEHICLE_RECORDING(iRecNo, "DGBFReady")
Bikeplaybackstopped = TRUE
ENDIF
ENDIF
ENDIF
//deactivate the cinematic cam once plane is ahead of player and activate hint cam
IF cinematicCamDeactivated = FALSE
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
IF GET_TIME_POSITION_IN_RECORDING(vehTitan) > 18952
SET_CINEMATIC_BUTTON_ACTIVE(FALSE)
cinematicCamDeactivated = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF FellOffBikeStatDone = FALSE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(vehBike)
IF IS_VEHICLE_DRIVEABLE(vehBike)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehBike)
//INFORM_STAT_CAR_SOLOMON_ONE_FELL_OFF_BIKE()
FellOffBikeStatDone = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF doneChaseAfterPlaneText = FALSE
PRINT_NOW("BFCHASE", DEFAULT_GOD_TEXT_TIME, 1)//Follow the plane and get the package.
doneChaseAfterPlaneText = TRUE
ENDIF
IF NOT IS_PED_INJURED(pedPilot)
ChaseHintCam()
ENDIF
IF bDoneJumpCutscene = FALSE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
// IF IS_ENTITY_AT_COORD(vehBike, <<13.13, 1718.86, 227>>,<<7.03, 5.52, 3>>)
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-5.680077,1710.670776,230.738052>>, <<10.925901,1699.666138,224.228409>>, 5.250000)
// IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<6.388503,1728.948853,225.126419>>, <<22.800776,1718.545898,231.155518>>, 11.500000)
IF GET_ENTITY_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) > 25
AND GET_ENTITY_HEADING(PLAYER_PED_ID()) > 293
AND GET_ENTITY_HEADING(PLAYER_PED_ID()) < 354
fTimeScale = 0.3
iMiniCutStage = 0
bDoingJumpCutscene = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF bDoneJumpCutscene = TRUE
IF camsCleanedUp = FALSE
IF IS_GAMEPLAY_CAM_RENDERING()
IF DOES_CAM_EXIST(camInit)
DESTROY_CAM(camInit)
ENDIF
IF DOES_CAM_EXIST(camDest)
DESTROY_CAM(camDest)
ENDIF
IF DOES_CAM_EXIST(camStatic)
DESTROY_CAM(camStatic)
ENDIF
SET_TIME_SCALE(1)
camsCleanedUp = TRUE
ENDIF
ENDIF
IF doneGameCamShake = FALSE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF NOT IS_ENTITY_IN_AIR(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
SET_ROADS_IN_AREA(<<-9.5, 1758.3, 235.3>>, <<134.5, 1638.3, 222.5>>, TRUE)
SHAKE_GAMEPLAY_CAM("small_explosion_shake", 0.2)
//Add in a video record moment here for the jump.
REPLAY_RECORD_BACK_FOR_TIME(6.0)
doneGameCamShake = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
IF GET_TIME_POSITION_IN_RECORDING(vehTitan) < 105199
CALCULATE_NEW_PLAYBACK_SPEED_FROM_CHAR(vehTitan, PLAYER_PED_ID(), fPlaybackSpeed, 0.45, 90, 107, 125, 2, 0, 0.95)
SET_PLAYBACK_SPEED(vehTitan, fPlaybackSpeed)
ELSE
CALCULATE_NEW_PLAYBACK_SPEED_FROM_CHAR(vehTitan, PLAYER_PED_ID(), fPlaybackSpeed, 0.55, 95, 105, 125, 2, 0, 1.3)
SET_PLAYBACK_SPEED(vehTitan, fPlaybackSpeed)
IF broughtlandingGearOut = FALSE
// CONTROL_LANDING_GEAR(vehTitan, LGC_DEPLOY)
broughtlandingGearOut = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
// PRINTSTRING("Players speed is ") PRINTFLOAT(GET_ENTITY_SPEED(vehBike)) PRINTNL()
IF playerDoneTrainJump = FALSE
//Do some audio of train horns before player does the jump
IF DOES_ENTITY_EXIST(vehTrain)
IF fRecordingTime > 72000
AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehTrain) < 200
IF DoneHorn1 = FALSE
PLAY_SOUND_FRONTEND(-1, "MARTIN1_DISTANT_TRAIN_HORNS_MASTER")
iHornTimer = GET_GAME_TIMER()
DoneHorn1 = TRUE
ELSE
IF DoneHorn2 = FALSE
IF GET_GAME_TIMER() > (iHornTimer + 3000)
PLAY_SOUND_FRONTEND(-1, "MARTIN1_DISTANT_TRAIN_HORNS_MASTER")
iHornTimer = GET_GAME_TIMER()
DoneHorn2 = TRUE
ENDIF
ELSE
IF DoneHorn3 = FALSE
IF GET_GAME_TIMER() > (iHornTimer + 3000)
PLAY_SOUND_FRONTEND(-1, "MARTIN1_DISTANT_TRAIN_HORNS_MASTER")
DoneHorn3 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Check if the player is going to make the jump over the train track
IF PlayerCanDoJump = FALSE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<1529, 3349, 37>>, <<6,3,4>>)
IF GET_ENTITY_HEADING(PLAYER_PED_ID()) < 65
OR GET_ENTITY_HEADING(PLAYER_PED_ID()) > 270
IF GET_ENTITY_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) > 15
PlayerCanDoJump = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF PlayerCanDoJump = TRUE
IF bDoneSlowMoJump = FALSE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
IF IS_ENTITY_IN_AIR(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
SET_AUDIO_FLAG("AllowScriptedSpeechInSlowMo", true)
SET_TIME_SCALE(0.3)
fTimeScale = 0.3
SETTIMERA(0)
TRIGGER_MUSIC_EVENT("SOL1_TRAIN_JUMP")
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_JUMP_TRAIN")
START_AUDIO_SCENE("MARTIN_1_CHASE_JUMP_TRAIN")
ENDIF
REPLAY_RECORD_BACK_FOR_TIME(6.0, 6.0, REPLAY_IMPORTANCE_HIGHEST)
bDoneSlowMoJump = TRUE
ENDIF
ENDIF
ENDIF
ELSE
IF btimeScaleBackToNormal = FALSE
// PRINTSTRING("Timer A is ") PRINTINT(TIMERA()) PRINTNL()
//Put time back to normal if player is not in air or if timer reaches max air time
IF TIMERA() > 250
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
IF NOT IS_ENTITY_IN_AIR(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
SET_TIME_SCALE(1.0)
SET_AUDIO_FLAG("AllowScriptedSpeechInSlowMo", false)
playerDoneTrainJump = TRUE
btimeScaleBackToNormal = TRUE
ENDIF
ENDIF
ELSE
SET_TIME_SCALE(1.0)
SET_AUDIO_FLAG("AllowScriptedSpeechInSlowMo", false)
playerDoneTrainJump = TRUE
btimeScaleBackToNormal = TRUE
ENDIF
ENDIF
IF TIMERA() > 379
fTimeScale = fTimeScale*1.05
SET_TIME_SCALE(fTimeScale)
IF fTimeScale >= 1
SET_TIME_SCALE(1.0)
SET_AUDIO_FLAG("AllowScriptedSpeechInSlowMo", false)
playerDoneTrainJump = TRUE
btimeScaleBackToNormal = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF doneS1_JUMP4 = FALSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_JUMP4", CONV_PRIORITY_MEDIUM)
//There ya go!
//Ooooop!
doneS1_JUMP4 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF safetyTimeScaleBackToNormalSet = FALSE
SET_TIME_SCALE(1.0)
//Add in a video recording clip of the train jump now.
REPLAY_RECORD_BACK_FOR_TIME(5.0)
safetyTimeScaleBackToNormalSet = TRUE
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_TRAIN_SCENE")
STOP_AUDIO_SCENE("MARTIN_1_TRAIN_SCENE")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_JUMP_TRAIN")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_JUMP_TRAIN")
ENDIF
// PRINTSTRING("Player has done train jump") PRINTNL()
ENDIF
IF fRecordingTime > 90000
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.5)
ENDIF
//Handle the audio stream
IF requestedCrashStream = FALSE
IF fRecordingTime > 108000
IF REQUEST_SCRIPT_AUDIO_BANK("MARTIN_1_01")
AND REQUEST_SCRIPT_AUDIO_BANK("MARTIN_1_02")
requestedCrashStream = TRUE
ELSE
PRINTSTRING("waiting for MARTIN_1_01 and MARTIN_1_02 audio banks to load") PRINTNL()
ENDIF
ENDIF
ELSE
IF crashStreamStarted = FALSE
IF fRecordingTime > 117262
IF IS_VEHICLE_DRIVEABLE(vehTitan)
STOP_STREAM()
// PLAY_SOUND_FRONTEND(-1, "MARTIN_1_PLANE_CRASH_MASTER")
// PLAY_STREAM_FROM_VEHICLE(vehTitan)
PLAY_SOUND_FROM_ENTITY(-1, "MARTIN_1_PLANE_CRASH_MASTER", vehTitan)
PRINTSTRING("MARTIN_1_PLANE_CRASH_MASTER being told to play now")
crashStreamStarted = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Swap IPL's to create the trench in the ground now
IF IPLSwapped = FALSE
IF fRecordingTime > 117262
IF GET_BUILDING_DATA(PlaneCrashTrench, BUILDINGNAME_IPL_PLANE_CRASH_TRENCH)
SET_BUILDING_STATE(BUILDINGNAME_IPL_PLANE_CRASH_TRENCH, BUILDINGSTATE_DESTROYED)
IPLSwapped = TRUE
ENDIF
ENDIF
ENDIF
IF preparedInteractiveMusic2 = FALSE
IF fRecordingTime > 108000
PREPARE_MUSIC_EVENT("SOL1_CRASH")
REQUEST_MODEL(G_M_Y_MEXGANG_01)
REQUEST_MODEL(G_M_Y_MEXGOON_02)
preparedInteractiveMusic2 = TRUE
ENDIF
ELSE
IF startInteractiveMusic2 = FALSE
//PLANE HITS THE GROUND HERE TO BEGIN CRASH
IF fRecordingTime > 117262
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_CHASE_MAIN")
STOP_AUDIO_SCENE("MARTIN_1_CHASE_MAIN")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_PLANE_CRASH")
STOP_AUDIO_SCENE("MARTIN_1_PLANE_CRASH")
ENDIF
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_KILL_PASSENGERS")
START_AUDIO_SCENE("MARTIN_1_KILL_PASSENGERS")
ENDIF
IF PlaneOnfireSoundStopped = FALSE
STOP_SOUND(PlaneonfireSoundID)
PlaneOnfireSoundStopped = TRUE
ENDIF
REQUEST_MODEL(PROP_SHAMAL_CRASH)
REQUEST_ANIM_DICT("missmartin1@exit_plane")
REQUEST_ANIM_DICT("missmartin1@leadinoutmartin_1_dead_pilot")
TRIGGER_MUSIC_EVENT("SOL1_CRASH")
startInteractiveMusic2 = TRUE
ENDIF
ENDIF
ENDIF
IF NOT DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[2])
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF fRecordingTime > 116262
ptfxEngine[2] = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sol1_plane_crash_dust", vehTitan,VECTOR_ZERO,VECTOR_ZERO)
ENDIF
ENDIF
ELSE
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF fRecordingTime > 119000
SET_VEHICLE_DOOR_OPEN(vehTitan, SC_DOOR_FRONT_LEFT, FALSE, TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
//Start cutscene once player gets to the plane and its stopped playing back its recording
IF bMissionFailed = FALSE
IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[1])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[1])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[2])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[2])
ENDIF
IF DOES_ENTITY_EXIST(pedPilot)
IF NOT IS_PED_INJURED(pedPilot)
SET_ENTITY_COORDS(pedPilot, <<2808.3870, 4795.4839, 45.8104>>)
SET_ENTITY_COLLISION(pedPilot, FALSE)
ENDIF
ENDIF
DELETE_VEHICLE(vehTitan)
// IF NOT IS_PED_INJURED(pedPilot)
// SET_ENTITY_HEALTH(pedPilot, 0)
// ENDIF
IF HAS_MODEL_LOADED(PROP_SHAMAL_CRASH)
ObjTitan = CREATE_OBJECT_NO_OFFSET(PROP_SHAMAL_CRASH, <<2807.691895, 4796.448730, 47.668404>> )
SET_ENTITY_COLLISION(ObjTitan, FALSE)
SET_ENTITY_ROTATION(ObjTitan, <<-0.000000, -0.000000, -11.340065>>)
SET_ENTITY_QUATERNION(ObjTitan, -0.0162, -0.0524, -0.1071, 0.9927)
SET_ENTITY_INVINCIBLE(ObjTitan, TRUE)
FREEZE_ENTITY_POSITION(ObjTitan, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_SHAMAL_CRASH)
ENDIF
IF HAS_ANIM_DICT_LOADED("missmartin1@leadinoutmartin_1_dead_pilot")
IF DOES_ENTITY_EXIST(pedPilot)
IF NOT IS_PED_INJURED(pedPilot)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedPilot, TRUE)
SET_ENTITY_COORDS(pedPilot, <<2808.3870, 4795.4839, 45.8104>>)
ATTACH_ENTITY_TO_ENTITY(pedPilot, ObjTitan, 0, << -0.54, 5.7, 0.03 >>, <<0,0,0>>)
TASK_PLAY_ANIM(pedPilot, "missmartin1@leadinoutmartin_1_dead_pilot", "dead_pilot_leadin_loop", INSTANT_BLEND_IN,
NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE)
SET_PED_KEEP_TASK(pedPilot, TRUE)
SET_ENTITY_COLLISION(pedPilot, FALSE)
APPLY_PED_BLOOD_SPECIFIC(pedPilot, ENUM_TO_INT(PDZ_HEAD), 0.515, 0.814, 300.781, 0.975, 3, 0.00, "stab")
APPLY_PED_BLOOD_SPECIFIC(pedPilot, ENUM_TO_INT(PDZ_HEAD), 0.633, 0.620, 300.617, 0.262, 1, 0.00, "ShotgunLargeMonolithic")
SET_PED_CAN_BE_TARGETTED(pedPilot, FALSE)
SET_FACIAL_IDLE_ANIM_OVERRIDE(pedPilot, "dead_1")
//PCF_DisableLockonToRandomPeds
//PCF_CannotBeTargeted
ENDIF
ENDIF
ENDIF
//Create the end enemies the player should have to kill
IF HAS_MODEL_LOADED(G_M_Y_MEXGANG_01)
AND HAS_MODEL_LOADED(G_M_Y_MEXGOON_02)
AND HAS_ANIM_DICT_LOADED("missmartin1@exit_plane")
IF NOT DOES_ENTITY_EXIST(endGuy[0])
// IF IS_VEHICLE_DRIVEABLE(vehTitan)
// endGuy[0] = CREATE_PED_INSIDE_VEHICLE(vehTitan, PEDTYPE_MISSION, G_M_Y_MEXGANG_01, VS_FRONT_RIGHT)
//PRE NG LOCATION
//endGuy[0] = CREATE_PED(PEDTYPE_MISSION, G_M_Y_MEXGANG_01, <<2806.1355, 4801.3262, 46.0759>>, 78.4343)
endGuy[0] = CREATE_PED(PEDTYPE_MISSION, G_M_Y_MEXGANG_01, <<2807.3120, 4802.3140, 46.3392>>, 78.4343)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_HEAD, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_TORSO, 1, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_LEG, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_FEET, 0, 2)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_JBIB, 0, 0)
STOP_PED_WEAPON_FIRING_WHEN_DROPPED(endGuy[0])
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(endGuy[0], TRUE)
GIVE_WEAPON_TO_PED(endGuy[0], WEAPONTYPE_PISTOL, 100)
APPLY_PED_BLOOD_BY_ZONE(endGuy[0], ENUM_TO_INT(PDZ_HEAD), 0.360, 0.710, "ShotgunSmall")
SET_PED_SPHERE_DEFENSIVE_AREA(endGuy[0], GET_ENTITY_COORDS(endGuy[0]), 10)
// SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(endGuy[0], vehTitan, <<0,0,0>>, 10)
SET_PED_COMBAT_ATTRIBUTES(endGuy[0], CA_CAN_CHARGE, TRUE)
//PRE NG ANIM LOCATION
//TASK_PLAY_ANIM_ADVANCED(endGuy[0], "missmartin1@exit_plane", "exit_plane_guy_b", <<2808.3870, 4795.4839, 47.4224>>, <<0,0,-0.21>>, NORMAL_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET)
TASK_PLAY_ANIM_ADVANCED(endGuy[0], "missmartin1@exit_plane", "exit_plane_guy_b", <<2804.3113, 4798.0303, 46.7273>>, <<0,0,-0.21>>, NORMAL_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET)
iAnimTaskTime = GET_GAME_TIMER()
// LeavingJetSyncScene = CREATE_SYNCHRONIZED_SCENE(<<2808.3870, 4795.4839, 47.4224>>, <<0,0,-0.21>>)
// TASK_SYNCHRONIZED_SCENE(endGuy[0], LeavingJetSyncScene, "missmartin1@exit_plane", "exit_plane_guy_b", INSTANT_BLEND_IN, INSTANT_BLEND_OUT)
// ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(endGuy[1])
endGuy[1] = CREATE_PED(PEDTYPE_MISSION, G_M_Y_MEXGOON_02, <<2805.3694, 4799.1553, 46.0390>>, 82.1640)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_HEAD, 0, 1)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_TORSO, 0, 2)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_LEG, 0, 2)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_FEET, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[1], PED_COMP_JBIB, 0, 0)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(endGuy[1], TRUE)
APPLY_PED_BLOOD_BY_ZONE(endGuy[1], ENUM_TO_INT(PDZ_HEAD), 0.360, 0.710, "ShotgunSmall")
// TASK_WRITHE(endGuy[1], PLAYER_PED_ID(), 25, SHM_ONGROUND)
//PRE NG
//TASK_PLAY_ANIM_ADVANCED(endGuy[1], "missmartin1@exit_plane", "exit_plane_guy_a", <<2808.3870, 4795.4839, 47.4224>>, <<0,0,-0.21>>, NORMAL_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_HOLD_LAST_FRAME|AF_EXTRACT_INITIAL_OFFSET)
TASK_PLAY_ANIM_ADVANCED(endGuy[1], "missmartin1@exit_plane", "exit_plane_guy_a", <<2806.2720, 4799.6250, 46.5135>>, <<0,0,40.0>>, NORMAL_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_HOLD_LAST_FRAME|AF_EXTRACT_INITIAL_OFFSET|AF_NOT_INTERRUPTABLE)
//<<2809.2, 4798.6, 47.85>>
// LeavingJetSyncScene = CREATE_SYNCHRONIZED_SCENE(<<2808.3870, 4795.4839, 47.4224>>, <<0,0,-0.21>>)
// TASK_SYNCHRONIZED_SCENE(endGuy[1], LeavingJetSyncScene, "missmartin1@exit_plane", "exit_plane_guy_a", INSTANT_BLEND_IN, INSTANT_BLEND_OUT)
ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(G_M_Y_MEXGANG_01)
SET_MODEL_AS_NO_LONGER_NEEDED(G_M_Y_MEXGOON_02)
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_PLANE_CHASE_SCENE")
STOP_AUDIO_SCENE("MARTIN_1_PLANE_CHASE_SCENE")
ENDIF
REMOVE_VEHICLE_RECORDING(1, "BB_SOL_JET")
// IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF DOES_ENTITY_EXIST(ObjTitan)
ptfxEngine[3] = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sol1_plane_wreck", ObjTitan, VECTOR_ZERO, VECTOR_ZERO)
ENDIF
//New PTFX for next Gen
ptfxEngine[4] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_fire_spot", <<2803.5, 4789.3, 46.6>>, <<89.5, 0,0>>, 1.5)
ptfxEngine[5] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_fire_trail", <<2805.4, 4782.5, 46.5>>, <<89.5, 0, 74>>, 1.5)
ptfxEngine[6] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_fire_trail", <<2804.1, 4777.3, 46.2>>, <<89.5, 0, 74>>, 1.5)
ptfxEngine[7] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_fire_drip", <<2808.2, 4791.6, 48.8>>, <<89.5, 0, 169.1>>, 1.5)
ptfxEngine[8] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_plane_tail_fire", <<2805.8, 4788.5, 49.8>>, <<89.5, -100, -40>>, 0.7)
ptfxEngine[9] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_plane_engine_fire", <<2808.6, 4793.4, 48.7>>, <<0, 0, -10>>, 0.6)
ptfxEngine[10] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_plane_elec_crackle", <<2809.1, 4802.4, 48.0>>, <<0,0,0>>, 0.9)
// SET_VEHICLE_ENGINE_ON(vehTitan, FALSE, TRUE)
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE)
//Create a video recording clip of the plane crashing
REPLAY_RECORD_BACK_FOR_TIME(12.0)
iStageSection ++
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
// CLEANUP
IF iStageSection >= 1
IF bTriggerFX[2] = TRUE
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[1])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[1])
bTriggerFX[2] = FALSE
ENDIF
ENDIF
REPLAY_RECORD_BACK_FOR_TIME(10.0, 4.0, REPLAY_IMPORTANCE_HIGHEST)
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
bStageSetup = FALSE
RETURN TRUE
// iStageSection++
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL stageKillPassengers()
// #IF IS_DEBUG_BUILD
// IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[10])
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_1)
// fDirZ = (fDirX + 10)
// REMOVE_PARTICLE_FX(ptfxEngine[10])
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_2)
// fDirZ = (fDirX - 10)
// REMOVE_PARTICLE_FX(ptfxEngine[10])
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_3)
// fDirZ = (fDirY + 10)
// REMOVE_PARTICLE_FX(ptfxEngine[10])
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_4)
// fDirZ = (fDirY - 10)
// REMOVE_PARTICLE_FX(ptfxEngine[10])
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_5)
// fDirY = (fDirZ + 10)
// REMOVE_PARTICLE_FX(ptfxEngine[10])
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_6)
// fDirY = (fDirZ - 10)
// REMOVE_PARTICLE_FX(ptfxEngine[10])
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_9)
// fScale = (fScale + 0.1)
// REMOVE_PARTICLE_FX(ptfxEngine[10])
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_0)
// fScale = (fScale - 0.1)
// REMOVE_PARTICLE_FX(ptfxEngine[10])
// ENDIF
// ELSE
// ptfxEngine[10] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_plane_elec_crackle", <<2809.8, 4801.6, 47.7>>, <<fDirX, fDirY, fDirZ>>, fScale)
// PRINTSTRING("ptfxEngine[9] being re-created for positioning purposes")PRINTNL()
// PRINTSTRING("fDirX = ") PRINTFLOAT(fDirX) PRINTNL()
// PRINTSTRING("fDirY = ") PRINTFLOAT(fDirY) PRINTNL()
// PRINTSTRING("fDirZ = ") PRINTFLOAT(fDirZ) PRINTNL()
// PRINTSTRING("fScale = ") PRINTFLOAT(fScale) PRINTNL()
// //START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_fire_spot", <<2803.5, 4789.3, 46.6>>, <<89.5, fDirY, fDirZ>>, fScale)
// ENDIF
// #ENDIF
//Skip anims forward to allow for planes collision to be turned back on quicker
IF AnimForPed0Skipped = FALSE
IF DOES_ENTITY_EXIST(endGuy[0])
IF NOT IS_PED_INJURED(endGuy[0])
IF IS_ENTITY_PLAYING_ANIM(endGuy[0], "missmartin1@exit_plane", "exit_plane_guy_b")
SET_ENTITY_ANIM_CURRENT_TIME(endGuy[0], "missmartin1@exit_plane", "exit_plane_guy_b", 0.3)
AnimForPed0Skipped = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF AnimForPed1Skipped = FALSE
IF DOES_ENTITY_EXIST(endGuy[1])
IF NOT IS_PED_INJURED(endGuy[1])
IF IS_ENTITY_PLAYING_ANIM(endGuy[1], "missmartin1@exit_plane", "exit_plane_guy_a")
SET_ENTITY_ANIM_CURRENT_TIME(endGuy[1], "missmartin1@exit_plane", "exit_plane_guy_a", 0.3)
AnimForPed1Skipped = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
vehCutBike = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
ENDIF
//Handle requesting and unrequesting the mocap scene if player gets close to cutscene trigger point.
IF CutsceneRequested = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2803.8, 4798.1, 47.7>>) < DEFAULT_CUTSCENE_LOAD_DIST
REQUEST_CUTSCENE("Martin_1_mcs_1")
CutsceneRequested = TRUE
ENDIF
ENDIF
IF CutsceneRequested = TRUE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2803.8, 4798.1, 47.7>>) > DEFAULT_CUTSCENE_UNLOAD_DIST
REMOVE_CUTSCENE()
PilotComponentsGiven = FALSE
CutsceneRequested = FALSE
ENDIF
//Set up Trev's clothes for opening cutscene
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
//Trevor
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Trevor", PLAYER_PED_ID(), PLAYER_TWO)
PRINTSTRING("TRIGGER SCENE - Trev's cutscene components set 2.") PRINTNL()
ENDIF
ENDIF
//Give the pilots components from pedpilot to the cutscene pilot so they are the same.
IF CutsceneRequested = TRUE
AND PilotComponentsGiven = FALSE
IF DOES_ENTITY_EXIST(pedPilot)
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Pilot_Martin_1", pedPilot)
PilotComponentsGiven = TRUE
ENDIF
ENDIF
ENDIF
// IF DOES_ENTITY_EXIST(pedPilot)
// IF NOT IS_PED_INJURED(pedPilot)
// IF IS_KEYBOARD_KEY_JUST_PRESSED(key_9)
// vOffset.z = (vOffset.z + 0.02)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(key_8)
// vOffset.z = (vOffset.z - 0.02)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(key_7)
// vOffset.y = (vOffset.y + 0.02)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(key_6)
// vOffset.y = (vOffset.y - 0.02)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(key_5)
// vOffset.x = (vOffset.x + 0.02)
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(key_4)
// vOffset.x = (vOffset.x - 0.02)
// ENDIF
//
// ATTACH_ENTITY_TO_ENTITY(pedPilot, ObjTitan, 0, vOffset, <<0,0,0>>)
// PRINTSTRING("vOffset = ") PRINTVECTOR(vOffset) PRINTNL()
// IF NOT IS_ENTITY_PLAYING_ANIM(pedPilot, "missmartin1@leadinoutmartin_1_dead_pilot", "dead_pilot_leadin_loop")
// TASK_PLAY_ANIM(pedPilot, "missmartin1@leadinoutmartin_1_dead_pilot", "dead_pilot_leadin_loop", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
// ENDIF
// ENDIF
// ENDIF
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_PED_WEARING_HELMET(PLAYER_PED_ID())
IF pedHelmetRemoved = FALSE
REMOVE_PED_HELMET(PLAYER_PED_ID(), FALSE)
pedHelmetRemoved = TRUE
ENDIF
ENDIF
ELSE
IF pedHelmetRemoved = TRUE
pedHelmetRemoved = FALSE
ENDIF
ENDIF
//
// IF DOES_ENTITY_EXIST(pedPilot)
// IF NOT IS_PED_INJURED(pedPilot)
// IF DOES_SCENARIO_EXIST_IN_AREA(<<2809.4, 4801.3, 47.7>>, 3, FALSE)
// IF GET_SCRIPT_TASK_STATUS(pedPilot, SCRIPT_TASK_USE_NEAREST_SCENARIO_TO_POS) <> PERFORMING_TASK
// AND GET_SCRIPT_TASK_STATUS(pedPilot, SCRIPT_TASK_USE_NEAREST_SCENARIO_TO_POS) <> PERFORMING_TASK
// TASK_USE_NEAREST_SCENARIO_TO_COORD_WARP(pedPilot, <<2809.4, 4801.3, 47.7>>, 5, 0)
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// SETUP
IF NOT bStageSetup
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3, "STAGE_KILL_PASSENGERS")
missionCanFail = FALSE
// planefrozen = FALSE
doneKillPedGodText = FALSE
CombatTaskGiven = FALSE
CombatTaskRequired = FALSE
pedHelmetRemoved = FALSE
doneS1_ATTACK = FALSE
PilotComponentsGiven = FALSE
cinematicCamDeactivated = TRUE
collisionTurnedOnForPlane = FALSE
AnimForPed0Skipped = FALSE
AnimForPed1Skipped = FALSE
PRINTSTRING("MISSION STAGE KILL PASSENGERS") PRINTNL()
ADD_ALL_PEDS_TO_DIALOGUE()
//Disable all the police for the chase section
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE, FALSE)
ALLOW_DISPATCH(DT_POLICE_HELICOPTER, FALSE)
ALLOW_DISPATCH(DT_POLICE_VEHICLE_REQUEST, FALSE)
ALLOW_DISPATCH(DT_POLICE_ROAD_BLOCK, FALSE)
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, FALSE)
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, FALSE)
ALLOW_DISPATCH(DT_SWAT_AUTOMOBILE, FALSE)
ALLOW_DISPATCH(DT_SWAT_HELICOPTER, FALSE)
REQUEST_ANIM_DICT("COMBAT@DAMAGE@WRITHEIDLE_A")
REQUEST_ANIM_DICT("COMBAT@DAMAGE@WRITHEIDLE_B")
//Remove bikes blip incase it's on.
IF DOES_BLIP_EXIST(bikeBlip)
REMOVE_BLIP(bikeBlip)
ENDIF
//If screen is faded out do a load scene at players coordinates now and then fade in the screen
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
WHILE IS_NEW_LOAD_SCENE_ACTIVE()
WAIT(0)
ENDWHILE
SETTIMERB(0)
NEW_LOAD_SCENE_START_SPHERE(GET_ENTITY_COORDS(PLAYER_PED_ID()), REPLAY_LOAD_SCENE_SIZE)
WAIT(0)
WHILE IS_NEW_LOAD_SCENE_ACTIVE()
AND NOT IS_NEW_LOAD_SCENE_LOADED()
AND TIMERB() < 20000
PRINTSTRING("doing extra wait for crashed plane ") PRINTINT(TIMERB()) PRINTNL()
WAIT(0)
ENDWHILE
END_REPLAY_SETUP(PlayerCar)
IF IS_VEHICLE_DRIVEABLE(PlayerCar)
SET_VEHICLE_FORWARD_SPEED(PlayerCar, 20)
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
// IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF DOES_ENTITY_EXIST(ObjTitan)
ptfxEngine[3] = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sol1_plane_wreck", ObjTitan, VECTOR_ZERO, VECTOR_ZERO)
ptfxEngine[4] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_fire_spot", <<2803.5, 4789.3, 46.6>>, <<89.5, 0,0>>, 1.5)
ptfxEngine[5] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_fire_trail", <<2805.4, 4782.5, 46.5>>, <<89.5, 0, 74>>, 1.5)
ptfxEngine[6] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_fire_trail", <<2804.1, 4777.3, 46.2>>, <<89.5, 0, 74>>, 1.5)
ptfxEngine[7] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_fire_drip", <<2808.2, 4791.6, 48.8>>, <<89.5, 0, 169.1>>, 1.5)
ptfxEngine[8] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_plane_tail_fire", <<2805.8, 4788.5, 49.8>>, <<89.5, -100, -40>>, 0.7)
ptfxEngine[9] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_plane_engine_fire", <<2808.6, 4793.4, 48.7>>, <<0, 0, -10>>, 0.6)
ptfxEngine[10] = START_PARTICLE_FX_LOOPED_AT_COORD("scr_sol1_plane_elec_crackle", <<2809.1, 4802.4, 48.0>>, <<0,0,0>>, 0.9)
ENDIF
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
SETTIMERB(0)
SET_MAX_WANTED_LEVEL(0)
SET_ENTITY_CAN_BE_TARGETED_WITHOUT_LOS(PLAYER_PED_ID(), TRUE)
iMiniCutStage = 0
iStageSection = 0
missionCanFail = TRUE
bStageSetup = TRUE
iHelpChatTimer = GET_GAME_TIMER()
iKillChatTimer = GET_GAME_TIMER()
ELSE
SWITCH iStageSection
CASE 0
// ChaseHintCam()
BOOL bForceCollisionOnForPlane
bForceCollisionOnForPlane = FALSE
IF DOES_ENTITY_EXIST(endGuy[0])
IF NOT IS_PED_INJURED(endGuy[0])
IF IS_ENTITY_PLAYING_ANIM(endGuy[0], "missmartin1@exit_plane", "exit_plane_guy_b")
IF collisionTurnedOnForPlane = FALSE
IF GET_ENTITY_ANIM_CURRENT_TIME(endGuy[0], "missmartin1@exit_plane", "exit_plane_guy_b") > 0.427
SET_ENTITY_COLLISION(ObjTitan, TRUE)
collisionTurnedOnForPlane = TRUE
ENDIF
ENDIF
IF CombatTaskGiven = FALSE
IF GET_ENTITY_ANIM_CURRENT_TIME(endGuy[0], "missmartin1@exit_plane", "exit_plane_guy_b") > 0.99
STOP_ENTITY_ANIM(endGuy[0], "exit_plane_guy_b", "missmartin1@exit_plane", REALLY_SLOW_BLEND_OUT)
TASK_PLAY_ANIM(endGuy[0], "missmartin1@exit_plane", "loop_guy_b", SLOW_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE)
ENDIF
ENDIF
ELSE
IF GET_GAME_TIMER() >= iAnimTaskTime + 500
bForceCollisionOnForPlane = TRUE
ENDIF
ENDIF
ELSE
bForceCollisionOnForPlane = TRUE
ENDIF
ENDIF
IF collisionTurnedOnForPlane = FALSE
IF bForceCollisionOnForPlane
IF DOES_ENTITY_EXIST(ObjTitan)
SET_ENTITY_COLLISION(ObjTitan, TRUE)
collisionTurnedOnForPlane = TRUE
ENDIF
ENDIF
ENDIF
//Blip the bad guys once player gets close enough to the plane
IF DOES_ENTITY_EXIST(ObjTitan)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), ObjTitan) < 50
IF DOES_ENTITY_EXIST(endGuy[0])
IF NOT IS_PED_INJURED(endGuy[0])
IF NOT DOES_BLIP_EXIST(endGuyBlip[0])
endGuyBlip[0] = CREATE_BLIP_FOR_ENTITY(endGuy[0], TRUE)
TASK_LOOK_AT_ENTITY(endGuy[0], PLAYER_PED_ID(), -1, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
ENDIF
IF doneKillPedGodText = FALSE
PRINT_NOW("M1_GOD2", DEFAULT_GOD_TEXT_TIME, -1)//~s~Kill ~r~Javier.
doneKillPedGodText = TRUE
ENDIF
IF CombatTaskGiven = FALSE
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), endGuy[0]) < 100
//Some dialogue from Javier before player starts attacking
IF GET_GAME_TIMER() > (iHelpChatTimer + 4000)
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 4, endGuy[0], "JAVIER")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_STUMBLE", CONV_PRIORITY_MEDIUM)
//You gotta help us!
//Hey! We crashed!
//Call the cops, I'm working with the government!
//I'm an important guy, you gotta help me out!
iHelpChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
//Javier should become hostile if ...
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), endGuy[0]) < 30
//Player is shooting near him
IF IS_PED_SHOOTING(PLAYER_PED_ID())
CombatTaskRequired = TRUE
ENDIF
//Player is aiming at him
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) <> WEAPONTYPE_UNARMED
AND NOT IS_PHONE_ONSCREEN()
IF IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), endGuy[0])
CombatTaskRequired = TRUE
ENDIF
ENDIF
ENDIF
//Player is in melee combat
IF IS_PED_IN_MELEE_COMBAT(PLAYER_PED_ID())
CombatTaskRequired = TRUE
ENDIF
ENDIF
IF CombatTaskRequired = TRUE
// SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_VEHICLE(endGuy[0], vehTitan, <<0,0,0>>, 10)
SET_PED_SPHERE_DEFENSIVE_AREA(endGuy[0], GET_ENTITY_COORDS(endGuy[0]), 10)
SET_PED_COMBAT_ATTRIBUTES(endGuy[0], CA_CAN_CHARGE, TRUE)
TASK_COMBAT_PED(endGuy[0], PLAYER_PED_ID())
CombatTaskGiven = TRUE
ENDIF
ENDIF
ELSE
//Some dialogue from Javier once he becomes hostile
IF doneS1_ATTACK = FALSE
CLEAR_PRINTS()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 4, endGuy[0], "JAVIER")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_ATTACK", CONV_PRIORITY_MEDIUM)
//It's a hit?
//Who sent you - Martin?
//Guy musta taken down the jet!
//It's a green light!
//He's one of Martin's people!
//If the crash didn't kill me, you ain't.
iKillChatTimer = GET_GAME_TIMER()
doneS1_ATTACK = TRUE
ENDIF
ELSE
IF GET_GAME_TIMER() > (iKillChatTimer + 4000)
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(structConvoPeds, 4, endGuy[0], "JAVIER")
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "S1_ATTACK", CONV_PRIORITY_MEDIUM)
//It's a hit?
//Who sent you - Martin?
//Guy musta taken down the jet!
//It's a green light!
//He's one of Martin's people!
//If the crash didn't kill me, you ain't.
iKillChatTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(endGuyBlip[0])
REMOVE_BLIP(endGuyBlip[0])
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(endGuyBlip[0])
REMOVE_BLIP(endGuyBlip[0])
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(endGuy[1])
IF NOT IS_ENTITY_DEAD(endGuy[1])
// IF NOT DOES_BLIP_EXIST(endGuyBlip[1])
// endGuyBlip[1] = CREATE_BLIP_FOR_ENTITY(endGuy[1], TRUE)
// ENDIF
// IF IS_SYNCHRONIZED_SCENE_RUNNING(LeavingJetSyncScene)
IF IS_ENTITY_PLAYING_ANIM(endGuy[1], "missmartin1@exit_plane", "exit_plane_guy_a")
// IF GET_SYNCHRONIZED_SCENE_PHASE(LeavingJetSyncScene) > 0.99
IF GET_ENTITY_ANIM_CURRENT_TIME(endGuy[1], "missmartin1@exit_plane", "exit_plane_guy_a") > 0.587
// STOP_SYNCHRONIZED_ENTITY_ANIM(endGuy[0], INSTANT_BLEND_OUT, TRUE)
// STOP_ENTITY_ANIM(endGuy[1], "exit_plane_guy_a", "missmartin1@exit_plane", REALLY_SLOW_BLEND_OUT)
TASK_WRITHE(endGuy[1], PLAYER_PED_ID(), 25, SHM_ONGROUND)
FORCE_PED_AI_AND_ANIMATION_UPDATE(endGuy[1], TRUE)
ENDIF
ENDIF
// IF IS_SYNCHRONIZED_SCENE_RUNNING(LeavingJetSyncScene)
// IF GET_SYNCHRONIZED_SCENE_PHASE(LeavingJetSyncScene) > 0.99
// STOP_SYNCHRONIZED_ENTITY_ANIM(endGuy[1], INSTANT_BLEND_OUT, TRUE)
//// TASK_PLAY_ANIM(endGuy[1], "missmartin1@exit_plane", "loop_guy_a", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING)
// TASK_WRITHE(endGuy[1], PLAYER_PED_ID(), 25, SHM_ONGROUND)
// ENDIF
// ENDIF
// IF doneKillPedGodText = FALSE
// PRINT_NOW("M1_GOD2", DEFAULT_GOD_TEXT_TIME, -1)//~s~Kill ~r~Javier.
// doneKillPedGodText = TRUE
// ENDIF
ELSE
IF DOES_BLIP_EXIST(endGuyBlip[1])
REMOVE_BLIP(endGuyBlip[1])
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(endGuyBlip[1])
REMOVE_BLIP(endGuyBlip[1])
ENDIF
ENDIF
IF NOT DOES_BLIP_EXIST(endGuyBlip[0])
AND NOT DOES_BLIP_EXIST(endGuyBlip[1])
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
SET_CINEMATIC_BUTTON_ACTIVE(TRUE)
REMOVE_ANIM_DICT("missmartin1@exit_plane")
REMOVE_ANIM_DICT("COMBAT@DAMAGE@WRITHEIDLE_A")
REMOVE_ANIM_DICT("COMBAT@DAMAGE@WRITHEIDLE_B")
iStageSection ++
ENDIF
ENDIF
ENDIF
BREAK
CASE 1
//Start the mocap scene once player enters the locate at the door to the plane.
// IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID() , <<2806.580078,4802.417480,45.348091>>, <<2806.095459,4798.916016,48.348846>>, 3.750000)
// IF DOES_ENTITY_EXIST(vehTitan)
// IF IS_VEHICLE_DRIVEABLE(vehTitan)
// //Unfreeze the plane if player is getting into it so the door opens.
// IF IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
// IF planeFrozen = TRUE
// FREEZE_ENTITY_POSITION(vehTitan, FALSE)
// planeFrozen = FALSE
// ENDIF
// ELSE
// IF planeFrozen = FALSE
// FREEZE_ENTITY_POSITION(vehTitan, TRUE)
// planeFrozen = TRUE
// ENDIF
// ENDIF
// IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehTitan, TRUE)
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<2807.429199,4802.980469,45.975845>>, <<2806.673584,4799.813477,48.226929>>, 3.500000)
IF DOES_BLIP_EXIST(blipObj)
CLEAR_PRINTS()
REMOVE_BLIP(blipObj)
ENDIF
PRINTSTRING("Player is in vehicle has returned true, cutscene should be starting now")
REMOVE_ANIM_DICT("missmartin1@exit_plane")
iStageSection ++
ELSE
IF NOT DOES_BLIP_EXIST(blipObj)
blipObj = ADD_BLIP_FOR_COORD(<<2807.9, 4800.7, 47.1>>)
SET_BLIP_AS_FRIENDLY(blipObj, TRUE)
PRINT_NOW("M1_GOD1", DEFAULT_GOD_TEXT_TIME, 1)//~s~Go inside the ~b~plane.
ENDIF
ENDIF
// ENDIF
// ENDIF
BREAK
ENDSWITCH
// CLEANUP
IF iStageSection >= 2
REPLAY_RECORD_BACK_FOR_TIME(10.0, 0.0, REPLAY_IMPORTANCE_HIGHEST)
STOP_STREAM()
// //Remove Shamal from audio mix group
// IF DOES_ENTITY_EXIST(vehTitan)
// IF IS_VEHICLE_DRIVEABLE(vehTitan)
// REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vehTitan)
// ENDIF
// ENDIF
// SET_VEHICLE_DENSITY_MULTIPLIER(1)
SET_CINEMATIC_BUTTON_ACTIVE(TRUE)
bStageSetup = FALSE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC DISABLE_FIRST_PERSON_CAMERA_DURING_TREVOR_SWITCH_SCENE()
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
// IF DOES_ENTITY_EXIST(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
// IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
// IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "missmartin1@switch", "trevor_switch_trevor")
// DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()
// ENDIF
// ENDIF
// ENDIF
IF bCamViewModeChanged = TRUE
SET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT, CAM_VIEW_MODE_THIRD_PERSON_MEDIUM)
ENDIF
ENDIF
ENDPROC
//PURPOSE: Cutscene where plane crashes into the ground
FUNC BOOL stageCutscenePlaneCrash()
// SETUP
IF NOT bStageSetup
// Set_Replay_Mid_Mission_Stage(ENUM_TO_INT(STAGE_CUTSCENE_PLANE_CRASH))
missionCanFail = FALSE
cutsceneSkipped = FALSE
ringToneStarted = FALSE
ringToneStopped = FALSE
HavierMoved = FALSE
bloodAdded = FALSE
playersCarMoved = FALSE
// startedLoadScene = FALSE
PRINTSTRING("MISSION STAGE CUTSCENE PLANE CRASH") PRINTNL()
REMOVE_VEHICLE_RECORDING(1,"BB_SOL_JET")
//Request Cutscene for crash
REQUEST_CUTSCENE("Martin_1_mcs_1")
// //Request crashed plane model
// REQUEST_MODEL(PROP_DEST_PLANE)
//Request the van model for next stage
REQUEST_MODEL(BURRITO3)
REQUEST_MODEL(GET_PLAYER_VEH_MODEL(CHAR_MICHAEL, VEHICLE_TYPE_CAR))
REQUEST_MODEL(P_RCSS_FOLDED)
REQUEST_ANIM_DICT("missmartin1@switch")
REQUEST_PLAYER_PED_MODEL(CHAR_MICHAEL)
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
IF DOES_BLIP_EXIST(blipObj)
REMOVE_BLIP(blipObj)
ENDIF
// //Set pilots health to zero
// IF DOES_ENTITY_EXIST(pedPilot)
// IF NOT IS_PED_INJURED(pedPilot)
// SET_ENTITY_HEALTH(pedPilot, 0)
// ENDIF
// ENDIF
// IF DOES_ENTITY_EXIST(vehTitan)
// IF IS_VEHICLE_DRIVEABLE(vehTitan)
// IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehTitan)
// STOP_PLAYBACK_RECORDED_VEHICLE(vehTitan)
// ENDIF
// ENDIF
// ENDIF
WHILE NOT HAS_CUTSCENE_LOADED()
// OR NOT HAS_MODEL_LOADED(PROP_DEST_PLANE)
PRINTSTRING("Stuck waiting for cutscene to load..") PRINTNL()
WAIT(0)
ENDWHILE
ADD_ALL_PEDS_TO_DIALOGUE()
CLEAR_HELP()
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(SANCHEZ, TRUE)
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_KILL_PASSENGERS")
STOP_AUDIO_SCENE("MARTIN_1_KILL_PASSENGERS")
ENDIF
IF IS_SCREEN_FADED_OUT()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
iStageSection = 0
missionCanFail = TRUE
bStageSetup = TRUE
bPilotDeleted = FALSE
bCamViewModeChanged = FALSE
// UPDATE
ELSE
// IF ( iStageSection > 0 )
// DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()
// ENDIF
SWITCH iStageSection
CASE 0
//Register entities for cutscene
//Sexton
// REGISTER_ENTITY_FOR_CUTSCENE(Sexton, "SextonDaniels", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, CS_SEXTONDANIELS)
//plane
// IF IS_VEHICLE_DRIVEABLE(vehTitan)
IF DOES_ENTITY_EXIST(ObjTitan)
// REGISTER_ENTITY_FOR_CUTSCENE(vehTitan, "Crashed_Plane", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PROP_DEST_PLANE)
REGISTER_ENTITY_FOR_CUTSCENE(ObjTitan, "Crashed_Plane", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PROP_SHAMAL_CRASH)
ENDIF
// //******REMOVE THIS ONCE BUG 1400198 HAS BEEN FIXED *******//
// IF DOES_ENTITY_EXIST(ObjTitan)
// DELETE_OBJECT(ObjTitan)
// ENDIF
REMOVE_ANIM_DICT("missmartin1@leadinoutmartin_1_dead_pilot")
REGISTER_ENTITY_FOR_CUTSCENE(NULL, "Pilot_Martin_1", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, S_M_M_PILOT_01)
REGISTER_ENTITY_FOR_CUTSCENE(NULL, "Briefcase", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, P_ATTACHE_CASE_01_S)
//
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
//Register the phone for after the cutscene
REGISTER_ENTITY_FOR_CUTSCENE(NULL, "Trevors_phone", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PROP_PHONE_ING_02)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//Configure script systems into a safe mode.
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
//
// IF NOT DOES_CAM_EXIST(StaticCam)
// StaticCam = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", <<2792.154541,4795.074219,55.678799>>,<<-28.129641,-0.000000,-69.815933>>,50.000000, TRUE)
// ELSE
// SET_CAM_PARAMS(StaticCam, <<2792.154541,4795.074219,55.678799>>,<<-28.129641,-0.000000,-69.815933>>,50.000000)
// SET_CAM_ACTIVE(StaticCam, TRUE)
// ENDIF
// IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// SET_ENTITY_COORDS(PLAYER_PED_ID(), <<2805.6519, 4802.8950, 46.0406>>)
// SET_ENTITY_HEADING(PLAYER_PED_ID(), 79.9974)
// ENDIF
// RENDER_SCRIPT_CAMS(TRUE, FALSE)
// REQUEST_VEHICLE_RECORDING(iRecNo, "BB_SOL_BIK")
TRIGGER_MUSIC_EVENT("SOL1_GOT_IT")
CLEAR_PRINTS()
KILL_ANY_CONVERSATION()
START_CUTSCENE()
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
// PRINT_NOW("BFPLHLD2", DEFAULT_GOD_TEXT_TIME, 1)//~s~Placeholder cutscene for Trevor retrieving the briefcase from the plane.
IF IS_PED_WEARING_HELMET(PLAYER_PED_ID())
REMOVE_PED_HELMET(PLAYER_PED_ID(), TRUE)
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
SETTIMERA(0)
iStageSection++
BREAK
CASE 1
IF IS_CUTSCENE_PLAYING()
IF bCamViewModeChanged = FALSE
IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
SET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT, CAM_VIEW_MODE_THIRD_PERSON_MEDIUM)
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Changing cam view mode for first person on foot camera.")
bCamViewModeChanged = TRUE
ENDIF
ENDIF
ENDIF
IF playersCarMoved = FALSE
IF IS_CUTSCENE_PLAYING()
IF DOES_ENTITY_EXIST(vehCutBike)
IF IS_VEHICLE_DRIVEABLE(vehCutBike)
IF IS_THIS_MODEL_A_CAR(GET_ENTITY_MODEL(vehCutBike))
OR IS_THIS_MODEL_A_BIKE(GET_ENTITY_MODEL(vehCutBike))
OR IS_THIS_MODEL_A_BICYCLE(GET_ENTITY_MODEL(vehCutBike))
OR IS_THIS_MODEL_A_QUADBIKE(GET_ENTITY_MODEL(vehCutBike))
SET_ENTITY_COORDS(vehCutBike, <<2795.7239, 4801.2764, 45.5453>>)
SET_ENTITY_HEADING(vehCutBike, 168.8915)
SET_VEHICLE_ON_GROUND_PROPERLY(vehCutBike)
playersCarMoved = TRUE
ELSE
SET_ENTITY_AS_MISSION_ENTITY(vehCutBike)
DELETE_VEHICLE(vehCutBike)
playersCarMoved = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT bPilotDeleted
IF IS_CUTSCENE_ACTIVE()
IF DOES_ENTITY_EXIST(pedPilot)
DELETE_PED(pedPilot)
ENTITY_INDEX entity
entity = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Pilot_Martin_1")
IF DOES_ENTITY_EXIST(entity)
IF IS_ENTITY_A_PED(entity)
pedPilot = GET_PED_INDEX_FROM_ENTITY_INDEX(entity)
ENDIF
ENDIF
bPilotDeleted = TRUE
ENDIF
ENDIF
ENDIF
//Kill the ped on the ground to stop him moving at end of cut-scene
IF DOES_ENTITY_EXIST(endGuy[1])
AND NOT IS_ENTITY_DEAD(endGuy[1])
SET_ENTITY_HEALTH(endGuy[1], 0)
ENDIF
IF NOT DOES_ENTITY_EXIST(objBriefcase)
SET_ENTITY_AS_MISSION_ENTITY(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Briefcase"))
objBriefcase = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Briefcase"))
ENDIF
IF NOT DOES_ENTITY_EXIST(objTrevsPhone)
SET_ENTITY_AS_MISSION_ENTITY(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Trevors_phone"))
objTrevsPhone = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Trevors_phone"))
ENDIF
//Add blood to pilot
IF bloodAdded = FALSE
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Pilot_Martin_1"))
APPLY_PED_BLOOD_SPECIFIC(GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Pilot_Martin_1")), ENUM_TO_INT(PDZ_HEAD), 0.515, 0.814, 300.781, 0.975, 3, 0.00, "stab")
APPLY_PED_BLOOD_SPECIFIC(GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Pilot_Martin_1")), ENUM_TO_INT(PDZ_HEAD), 0.633, 0.620, 300.617, 0.262, 1, 0.00, "ShotgunLargeMonolithic")
bloodAdded = TRUE
ENDIF
ENDIF
IF IS_CUTSCENE_PLAYING()
//Move Havier if he is lying in the cutscene path.
IF HavierMoved = FALSE
IF DOES_ENTITY_EXIST(endGuy[0])
IF IS_ENTITY_IN_ANGLED_AREA(endGuy[0] , <<2806.659180,4801.574219,48.026577>>, <<2800.094727,4802.901367,44.988617>>, 2.5)
// vHavierCoords = GET_ENTITY_COORDS(endGuy[0], FALSE)
IF NOT IS_PED_INJURED(endGuy[0])
fHavierHeading = GET_ENTITY_HEADING(endGuy[0])
ENDIF
DELETE_PED(endGuy[0])
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(endGuy[0])
REQUEST_MODEL(G_M_Y_MEXGANG_01)
// GET_GROUND_Z_FOR_3D_COORD((<<vHavierCoords.x, (vHavierCoords.y + 2), vHavierCoords.z>>), fHavierZ)
IF HAS_MODEL_LOADED(G_M_Y_MEXGANG_01)
// endGuy[0] = CREATE_PED(PEDTYPE_MISSION, G_M_Y_MEXGANG_01, <<vHavierCoords.x, (vHavierCoords.y + 1.5), fHavierZ>>, fHavierHeading)
//PRE NG LOCATION
//endGuy[0] = CREATE_PED(PEDTYPE_MISSION, G_M_Y_MEXGANG_01, <<2805.2, 4803.1, 46.2>>, fHavierHeading)
endGuy[0] = CREATE_PED(PEDTYPE_MISSION, G_M_Y_MEXGANG_01, <<2803.2285, 4805.6099, 45.9882>>, fHavierHeading)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_HEAD, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_BERD, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_HAIR, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_TORSO, 1, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_LEG, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_HAND, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_FEET, 0, 2)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_TEETH, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_SPECIAL, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_SPECIAL2, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_DECL, 0, 0)
SET_PED_COMPONENT_VARIATION(endGuy[0], PED_COMP_JBIB, 0, 0)
STOP_PED_WEAPON_FIRING_WHEN_DROPPED(endGuy[0])
EXPLODE_PED_HEAD(endGuy[0])
//TASK_WRITHE(endGuy[0], PLAYER_PED_ID(), 1, SHM_ONGROUND)
SET_MODEL_AS_NO_LONGER_NEEDED(G_M_Y_MEXGANG_01)
HavierMoved = TRUE
ENDIF
ENDIF
ENDIF
// IF startedLoadScene = FALSE
// IF NEW_LOAD_SCENE_START(<<2806.3, 4798.7, 47.9>>, <<7.2, 0, 80.6>>, 1000)
// startedLoadScene = TRUE
// ENDIF
// ENDIF
//Start the ringtone for the phone
IF NOT ARE_STRINGS_EQUAL (g_savedGlobals.sCellphoneSettingsData.This_Cellphone_Owner_Settings[g_Cellphone.PhoneOwner].RingtoneForThisPlayer, "Silent Ringtone Dummy")
IF ringToneStarted = FALSE
IF GET_CUTSCENE_TIME() > 12959
PLAY_PED_RINGTONE(g_savedGlobals.sCellphoneSettingsData.This_Cellphone_Owner_Settings[g_Cellphone.PhoneOwner].RingtoneForThisPlayer, PLAYER_PED_ID(), false)
PRINTSTRING("PLAY_PED_RINGTONE NOW") PRINTNL()
ringToneStarted = TRUE
ENDIF
ENDIF
//Stop the ringtone for the phone
IF ringToneStopped = FALSE
IF IS_PED_RINGTONE_PLAYING(PLAYER_PED_ID())
AND GET_CUTSCENE_TIME() > 15953
STOP_PED_RINGTONE(PLAYER_PED_ID())
PRINTSTRING("STOP_PED_RINGTONE NOW") PRINTNL()
ringToneStopped = TRUE
ENDIF
ENDIF
ENDIF
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED()
cutsceneSkipped = TRUE
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Crashed_Plane")
// IF DOES_ENTITY_EXIST(vehTitan)
// IF IS_VEHICLE_DRIVEABLE(vehTitan)
// CONTROL_LANDING_GEAR(vehTitan, LGC_RETRACT_INSTANT)
// SET_ENTITY_COORDS(vehTitan, <<2807.3306, 4794.7900, 46.6197>>)
// SET_ENTITY_HEADING(vehTitan, 344.2750)
// SET_VEHICLE_ON_GROUND_PROPERLY(vehTitan)
IF DOES_ENTITY_EXIST(ObjTitan)
//PRE NG
//SET_ENTITY_COORDS(ObjTitan, <<2808.3870, 4795.4839, 45.8104>>)
//SET_ENTITY_ROTATION(ObjTitan, <<-1.2048, -6.1718, -12.3839>>)
//NG TO MATCH CUTSCENE
SET_ENTITY_COORDS(ObjTitan, <<2807.691895, 4796.448730, 47.668404>>)
SET_ENTITY_ROTATION(ObjTitan, <<-0.000000, -0.000000, -11.340065>> )
SET_ENTITY_QUATERNION(ObjTitan, -0.0162, -0.0524, -0.1071, 0.9927)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(ObjTitan, TRUE)
// SET_VEHICLE_DOORS_LOCKED(vehTitan, VEHICLELOCK_LOCKED)
FREEZE_ENTITY_POSITION(ObjTitan, TRUE)
ENDIF
// ENDIF
ENDIF
//
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor")
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<2801.9619, 4800.4131, 46.0215>>)
SET_ENTITY_ROTATION(PLAYER_PED_ID(), <<0,0, -34.2>>)
// SET_ENTITY_HEADING(PLAYER_PED_ID(), 61.5688)
IF HAS_ANIM_DICT_LOADED("missmartin1@switch")
IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "missmartin1@switch", "trevor_switch_trevor")
TASK_PLAY_ANIM(PLAYER_PED_ID(), "missmartin1@switch", "trevor_switch_trevor", INSTANT_BLEND_IN)
ENDIF
ENDIF
// SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 4000, 0)
// FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
ENDIF
//
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Briefcase")
IF DOES_ENTITY_EXIST(objBriefcase)
ATTACH_ENTITY_TO_ENTITY(objBriefcase, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0.05,0,0>>, <<0, -90, 0>>)
IF HAS_ANIM_DICT_LOADED("missmartin1@switch")
IF NOT IS_ENTITY_PLAYING_ANIM(objBriefcase, "missmartin1@switch", "trevor_switch_case")
PLAY_ENTITY_ANIM(objBriefcase, "trevor_switch_case", "missmartin1@switch", INSTANT_BLEND_IN, FALSE, TRUE)
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(objBriefcase)
ENDIF
ENDIF
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Pilot_Martin_1")
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned TRUE for Pilot_Martin_1")
IF DOES_ENTITY_EXIST(pedPilot)
DELETE_PED(pedPilot)
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
REPLAY_STOP_EVENT()
SET_GAMEPLAY_CAM_RELATIVE_HEADING(80)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-3.97)
//For bug 1945901
IF cutsceneSkipped = TRUE
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-3.97)
PRINTSTRING("MARTIN 1 -A cut skipped game play cam pitch being set to -3.97")
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevors_phone", PROP_PHONE_ING_02)
IF DOES_ENTITY_EXIST(objTrevsPhone)
ATTACH_ENTITY_TO_ENTITY(objTrevsPhone, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_L_HAND), <<0,0,0>>, <<0, 0, 0>>)
ENDIF
ENDIF
IF cutsceneSkipped = TRUE
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
SET_GAMEPLAY_CAM_RELATIVE_HEADING(80)
//For bug 1945901
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-3.97)
PRINTSTRING("MARTIN 1 -B cut skipped game play cam pitch being set to -3.97")
ENDIF
ENDIF
IF NOT IS_CUTSCENE_PLAYING()
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
ENDIF
IF NOT IS_CUTSCENE_ACTIVE()
// IF DOES_ENTITY_EXIST(pedPilot)
// DELETE_PED(pedPilot)
// ENDIF
// CANCEL_MUSIC_EVENT("SOL1_CRASH")
// WHILE NOT HAS_MODEL_LOADED(PROP_DEST_PLANE)
// WAIT(0)
// PRINTSTRING("SOLOMON1_WAITING_63") PRINTNL()
// ENDWHILE
// IF NOT DOES_ENTITY_EXIST(ObjCrashedPlane)
// ObjCrashedPlane = CREATE_OBJECT(PROP_DEST_PLANE, <<2835.90, 4739.27, 43.47>>)
// SET_ENTITY_ROTATION(ObjCrashedPlane, <<0,0,166.34>>)
// ENDIF
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
DISPLAY_RADAR(FALSE)
DISPLAY_HUD(FALSE)
// fpitch = GET_GAMEPLAY_CAM_RELATIVE_PITCH()
iStageSection ++
ENDIF
BREAK
CASE 2
IF DOES_ENTITY_EXIST(pedPilot)
SET_ENTITY_AS_MISSION_ENTITY(pedPilot)
DELETE_PED(pedPilot)
ENDIF
// IF NOT DOES_ENTITY_EXIST(PropBriefcase)
// PropBriefcase = CREATE_OBJECT(PROP_SECURITY_CASE_01, <<2802, 4979, 48>>)
// ENDIF
// ATTACH_ENTITY_TO_ENTITY(PropBriefcase, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0.05,0,0>>, <<0, -90, 0>>)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
// RENDER_SCRIPT_CAMS(FALSE, FALSE)
// SET_CAM_ACTIVE(StaticCam, FALSE)
// DESTROY_CAM(StaticCam)
// PRINTSTRING("Fpitch = ") PRINTFLOAT(fpitch) PRINTNL()
//
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_0)
// fpitch = fpitch + 2
// ENDIF
// IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_1)
// fpitch = fpitch - 2
// ENDIF
//SET_GAMEPLAY_CAM_RELATIVE_PITCH(-3.97)
IF DOES_ENTITY_EXIST(objTrevsPhone)
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "missmartin1@switch", "trevor_switch_trevor")
PRINTSTRING("GET_ENTITY_ANIM_CURRENT_TIME = ") PRINTFLOAT(GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), "missmartin1@switch", "trevor_switch_trevor")) PRINTNL()
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), "missmartin1@switch", "trevor_switch_trevor") > 0.08
DELETE_OBJECT(objTrevsPhone)
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "missmartin1@switch", "trevor_switch_trevor")
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), "missmartin1@switch", "trevor_switch_trevor") > 0.5
// IF startedLoadScene = TRUE
// NEW_LOAD_SCENE_STOP()
// startedLoadScene = FALSE
// ENDIF
iStageSection++
ENDIF
ENDIF
BREAK
ENDSWITCH
// CLEANUP
IF iStageSection >= 3
stopCamShake(TRUE)
IF bTriggerFX[2] = TRUE
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[1])
STOP_PARTICLE_FX_LOOPED(ptfxEngine[1])
bTriggerFX[2] = FALSE
ENDIF
ENDIF
iStageSection = 0
bStageSetup = FALSE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_VEHICLE_FALLING(VEHICLE_INDEX fallingVehicle)
// PRINTSTRING("vFallingStartCoords.z = ") PRINTFLOAT(vFallingStartCoords.z) PRINTNL()
// PRINTSTRING("vFallingEndCoords.z = ") PRINTFLOAT(vFallingEndCoords.z) PRINTNL()
IF bStartCoordsGrabbed = FALSE
vFallingStartCoords = GET_ENTITY_COORDS(fallingVehicle)
iFallingTimer = GET_GAME_TIMER()
bStartCoordsGrabbed = TRUE
ENDIF
IF bEndCoordsGrabbed = FALSE
AND bStartCoordsGrabbed = TRUE
IF GET_GAME_TIMER() > (iFallingTimer + 4000)
vFallingEndCoords = GET_ENTITY_COORDS(fallingVehicle)
bEndCoordsGrabbed = TRUE
ENDIF
ENDIF
IF bEndCoordsGrabbed = TRUE
//If the car has dropped more than 10metres in 4 seconds it's falling
IF vFallingStartCoords.z > (vFallingEndCoords.z + 5)
RETURN TRUE
ELSE
// PRINTSTRING("Flags being reset as vehicle is not falling ") PRINTNL()
//Reset flags Vehicle is not falling
bEndCoordsGrabbed = FALSE
bStartCoordsGrabbed = FALSE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL stageDestroySniper()
// PRINTSTRING("gameplay cam relative heading should be set to ") PRINTFLOAT(GET_GAMEPLAY_CAM_RELATIVE_HEADING()) PRINTNL()
//Anything to be called every frame during this stage
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ENTER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
ENDIF
// Remove PTFX
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[4])
REMOVE_PARTICLE_FX(ptfxEngine[4])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[5])
REMOVE_PARTICLE_FX(ptfxEngine[5])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[6])
REMOVE_PARTICLE_FX(ptfxEngine[6])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[7])
REMOVE_PARTICLE_FX(ptfxEngine[7])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[8])
REMOVE_PARTICLE_FX(ptfxEngine[8])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[9])
REMOVE_PARTICLE_FX(ptfxEngine[9])
ENDIF
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxEngine[10])
REMOVE_PARTICLE_FX(ptfxEngine[10])
ENDIF
IF NOT DOES_ENTITY_EXIST(ObjEndBarrel)
ObjEndBarrel = GET_CLOSEST_OBJECT_OF_TYPE(<<1219.4, 1865.5, 78.3278>>, 1, PROP_BARREL_01A)
ELSE
IF barrelSetUp = FALSE
FREEZE_ENTITY_POSITION(ObjEndBarrel, TRUE)
SET_ENTITY_INVINCIBLE(ObjEndBarrel, TRUE)
barrelSetUp = TRUE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
SET_DISABLE_PETROL_DECALS_RECYCLING_THIS_FRAME()
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SniperVan)
IF vanNeedsToBeExploded = FALSE
IF vehicleFalling = FALSE
IF IS_VEHICLE_FALLING(SniperVan)
PRINTSTRING("vehicleFalling = TRUE") PRINTNL()
vehicleFalling = TRUE
ELSE
// PRINTSTRING("vehicleFalling = FALSE") PRINTNL()
ENDIF
ELSE
IF IS_ENTITY_IN_AIR(SniperVan)
vanNeedsToBeExploded = TRUE
ENDIF
ENDIF
ELSE
IF NOT IS_ENTITY_IN_AIR(SniperVan)
EXPLODE_VEHICLE(SniperVan)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF bStageSetup = TRUE
AND iStageSection < 6
//Clean up parked car
IF iStageSection > 3
IF DOES_ENTITY_EXIST(MichaelsCar)
IF IS_VEHICLE_DRIVEABLE(MichaelsCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), MichaelsCar)
OR GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), MichaelsCar) > 150
SET_VEHICLE_AS_NO_LONGER_NEEDED(MichaelsCar)
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF iStageSection = 3
OR iStageSection = 4
IF NOT DOES_BLIP_EXIST(BlipMartinHouse)
IF DoneLoseCopsText = TRUE
CLEAR_PRINTS()
DoneLoseCopsText = FALSE
ENDIF
IF doneSnipe8Text = TRUE
CLEAR_PRINTS()
ENDIF
BlipMartinHouse = CREATE_BLIP_FOR_COORD(<<1370.4, 1174.3, 113.1>>, TRUE)
IF doneSnipe5Text = FALSE
PRINT_NOW("SNIPE5", DEFAULT_GOD_TEXT_TIME, 1)//~s~Go to ~y~Martin's house.
doneSnipe5Text = TRUE
ENDIF
ENDIF
IF DOES_BLIP_EXIST(BlipSniperVan)
REMOVE_BLIP(BlipSniperVan)
ENDIF
ENDIF
IF iStageSection = 5
IF DOES_BLIP_EXIST(BlipMartinHouse)
REMOVE_BLIP(BlipMartinHouse)
ENDIF
IF DOES_BLIP_EXIST(BlipSniperVan)
REMOVE_BLIP(BlipSniperVan)
ENDIF
IF GET_DISTANCE_BETWEEN_COORDS(<<1216.6, 1868.1, 78.1>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) > 5
IF NOT DOES_BLIP_EXIST(BlipTrevor)
IF DoneLoseCopsText = TRUE
CLEAR_PRINTS()
DoneLoseCopsText = FALSE
ENDIF
BlipTrevor = CREATE_BLIP_FOR_COORD(<<1216.6, 1868.1, 78.1>>, TRUE)
ELSE
IF doneSnipe7Text = FALSE
AND DoneChatChange2 = TRUE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
PRINT_NOW("SNIPE7", DEFAULT_GOD_TEXT_TIME, 1)//~s~Meet Trevor at the ~y~cement works.
doneSnipe7Text = TRUE
ENDIF
ENDIF
//Draw a locate blip
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<1216.6, 1868.1, 78.1>>, <<2.5,2.5,LOCATE_SIZE_HEIGHT>>, TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF DOES_BLIP_EXIST(BlipMartinHouse)
REMOVE_BLIP(BlipMartinHouse)
ENDIF
IF DOES_BLIP_EXIST(BlipTrevor)
REMOVE_BLIP(BlipTrevor)
ENDIF
IF DOES_BLIP_EXIST(BlipSniperVan)
REMOVE_BLIP(BlipSniperVan)
ENDIF
IF doneLoseCopsText = FALSE
PRINT_NOW("M1_GOD3", DEFAULT_GOD_TEXT_TIME, 1)//~s~Lose the cops.
doneLoseCopsText = TRUE
ENDIF
ENDIF
ENDIF
//Update the replay checkpoint vehicle to be the players car if the player gets in the vehicle gen one
IF CheckPointVehOveridden = FALSE
IF DOES_ENTITY_EXIST(get_vehicle_gen_vehicle_index(vehgen_mission_veh))
PRINTSTRING("overriding replay checkpoint vehicle with that of the car gen saved from Michaels car earlier") PRINTNL()
OVERRIDE_REPLAY_CHECKPOINT_VEHICLE(get_vehicle_gen_vehicle_index(vehgen_mission_veh))
CheckPointVehOveridden = TRUE
ELSE
// PRINTSTRING("vehgen_mission_veh doesn't exist") PRINTNL()
ENDIF
ENDIF
IF bStageSetup = FALSE
PRINTSTRING("MISSION STAGE DESTROY SNIPER") PRINTNL()
missionCanFail = FALSE
REMOVE_PTFX_ASSET()
//Any flags that need set for this stage
EndCutRequested = FALSE
doneSnipe8Text = FALSE
doneLoseCopsText = FALSE
doneSnipe7Text = FALSE
doneSnipe5Text = FALSE
DoneChatChange2 = FALSE
doneChatWreck = FALSE
doneWreckHelpText = FALSE
HintCamActivated = FALSE
// pourGasTaskGiven = FALSE
// weaponSwapped = FALSE
// createdGasTrail = FALSE
TaskToLeaveCar = FALSE
barrelSetUp = FALSE
vanNeedsToBeExploded = FALSE
vehicleFalling = FALSE
doneGetBackInVanText = FALSE
blipSetToRed = FALSE
RadarBack = FALSE
//Create the parked car for Michaels escape
IF NOT IS_VEHICLE_GEN_AVAILABLE(VEHGEN_MISSION_VEH)
IF NOT DOES_ENTITY_EXIST(MichaelsCar)
IF HAS_MODEL_LOADED(GET_PLAYER_VEH_MODEL(CHAR_MICHAEL, VEHICLE_TYPE_CAR))
WHILE NOT CREATE_PLAYER_VEHICLE(MichaelsCar, CHAR_MICHAEL, <<-390.9780, 1189.5386, 324.6420>>, 102.4179, TRUE, VEHICLE_TYPE_CAR)
PRINTSTRING("waiting for players car to be created") PRINTNL()
WAIT(0)
ENDWHILE
SET_VEHICLE_ON_GROUND_PROPERLY(MichaelsCar)
SET_ENTITY_LOAD_COLLISION_FLAG(MichaelsCar, TRUE)
// SET_MODEL_AS_NO_LONGER_NEEDED(PREMIER)
ENDIF
ENDIF
ELSE
SET_MODEL_AS_NO_LONGER_NEEDED(GET_PLAYER_VEH_MODEL(CHAR_MICHAEL, VEHICLE_TYPE_CAR))
ENDIF
IF NOT DOES_ENTITY_EXIST(SniperVan)
REQUEST_MODEL(BURRITO3)
REQUEST_MODEL(P_RCSS_FOLDED)
IF HAS_MODEL_LOADED(BURRITO3)
AND HAS_MODEL_LOADED(P_RCSS_FOLDED)
SniperVan = CREATE_VEHICLE(BURRITO3, <<-363.5392, 1142.2645, 323.1035>>, 11.1408)
SET_ENTITY_LOAD_COLLISION_FLAG(SniperVan, TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(SniperVan)
// SET_VEHICLE_UNDRIVEABLE(SniperVan, TRUE)
// SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(SniperVan, FALSE)
SET_VEHICLE_COLOURS(SniperVan, 0,0)
SET_VEHICLE_DIRT_LEVEL(SniperVan, 10)
SET_VEHICLE_DISABLE_TOWING(SniperVan, TRUE)
SET_MODEL_AS_NO_LONGER_NEEDED(BURRITO3)
RemoteSniper = CREATE_OBJECT(P_RCSS_FOLDED, <<-363.5190, 1142.1714, 323.0888>>)
ATTACH_ENTITY_TO_ENTITY(RemoteSniper, SniperVan, 0, << 0, -1.2, -0.3 >>, <<0,0,0>>)
SET_MODEL_AS_NO_LONGER_NEEDED(P_RCSS_FOLDED)
SET_ENTITY_HEALTH(SniperVan, 310)
// SET_VEHICLE_ENGINE_HEALTH(SniperVan, 310)
// SET_VEHICLE_PETROL_TANK_HEALTH(SniperVan, 310)
ENDIF
ENDIF
//Set up Michael
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
IF DOES_ENTITY_EXIST(SniperVan)
WHILE NOT CREATE_PLAYER_PED_INSIDE_VEHICLE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, SniperVan) //<<-366.2999, 1147.5693, 323.8548>>, 211.2487)
PRINTSTRING("Waiting for Michael to be created") PRINTNL()
WAIT(0)
ENDWHILE
GIVE_WEAPON_TO_PED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], WEAPONTYPE_PETROLCAN, 1000, TRUE, TRUE)
ENDIF
ENDIF
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_PETROLCAN, 1000, TRUE, TRUE)
// IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
// IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
// RESTORE_PLAYER_PED_VARIATIONS(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
// ENDIF
// ENDIF
// RESTORE_PLAYER_PED_VARIATIONS(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(SniperVan)
AND NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SniperVan)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), SniperVan)
ENDIF
ENDIF
CLEAR_HELP()
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0)
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
SET_MAX_WANTED_LEVEL(0)
//re-enable all the police for the chase section
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE, TRUE)
ALLOW_DISPATCH(DT_POLICE_HELICOPTER, TRUE)
ALLOW_DISPATCH(DT_POLICE_VEHICLE_REQUEST, TRUE)
ALLOW_DISPATCH(DT_POLICE_ROAD_BLOCK, TRUE)
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE_WAIT_PULLED_OVER, TRUE)
ALLOW_DISPATCH(DT_POLICE_AUTOMOBILE_WAIT_CRUISING, TRUE)
ALLOW_DISPATCH(DT_SWAT_AUTOMOBILE, TRUE)
ALLOW_DISPATCH(DT_SWAT_HELICOPTER, TRUE)
//Set up a scenario blocking area for the barn area to stop peds spawning in
BarnBlockingArea = ADD_SCENARIO_BLOCKING_AREA(<<1288, 1962.8, 128.4>>, <<1139.2, 1800.8, 59.5>>)
SeatNextToVanBlockingArea = ADD_SCENARIO_BLOCKING_AREA(<<-358.3, 1130.6, 333.3>>, <<-323.6, 1170.2, 319.6>>)
ADD_ALL_PEDS_TO_DIALOGUE()
iStageSection = 0
missionCanFail = TRUE
bStageSetup = TRUE
//If screen is faded out do a load scene at players coordinates now and then fade in the screen
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
END_REPLAY_SETUP()
IF DOES_ENTITY_EXIST(SniperVan)
IF IS_VEHICLE_DRIVEABLE(SniperVan)
CLEAR_AREA(GET_ENTITY_COORDS(SniperVan), 20, TRUE)
ENDIF
ENDIF
// //Create gas trail
// START_PETROL_TRAIL_DECALS(1)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-369.6, 1150.6, 324.3>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-368.8, 1149.7, 324.2>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-367.8, 1148.6, 324>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-366.7, 1147.5, 323.9>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-365.4, 1146.4, 323.7>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-364.2, 1145.0, 323.6>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-363.7, 1143.3, 323.4>>, 2)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-363, 1141, 323>>, 4)
// END_PETROL_TRAIL_DECALS()
ENDIF
ELSE
IF iStageSection = 0
//Fade the screen in now for skipping
IF NOT IS_SCREEN_FADED_IN()
AND bMissionFailed = FALSE
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
// IF NOT IS_SCREEN_FADED_IN()
// DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
// ENDIF
iStageSection = 1
ENDIF
//Switch to Michael once chat is done
IF iStageSection = 1
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT sCamDetails.bRun
IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL)
CLEAR_PRINTS()
TRIGGER_MUSIC_EVENT("SOL1_END")
//Restore the players to their start variations now for remainder of mission
// RESTORE_PLAYER_PED_VARIATIONS(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
// RESTORE_PLAYER_PED_VARIATIONS(PLAYER_PED_ID())
sCamDetails.pedTo = sSelectorPeds.pedID[sSelectorPeds.eNewSelectorPed]
sCamDetails.bRun = TRUE
ENDIF
ELSE
WHILE RUN_SWITCH_CAM_FROM_PLAYER_TO_PED_LONG_RANGE(sCamDetails, 0, 0, 0) // Returns FALSE when the camera spline is complete
// SET_DISABLE_PETROL_DECALS_RECYCLING_THIS_FRAME()
PRINTSTRING("SET_GAMEPLAY_CAM_RELATIVE_HEADING = ") PRINTFLOAT(GET_GAMEPLAY_CAM_RELATIVE_HEADING()) PRINTNL()
PRINTSTRING("SET_GAMEPLAY_CAM_RELATIVE_PITCH = ") PRINTFLOAT(GET_GAMEPLAY_CAM_RELATIVE_PITCH()) PRINTNL()
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
CLEAR_PRINTS()
IF sCamDetails.bOKToSwitchPed
IF NOT sCamDetails.bPedSwitched
IF TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE)
sCamDetails.bPedSwitched = TRUE
ENDIF
ENDIF
ENDIF
// IF GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_JUMPCUT_DESCENT
// PRINTSTRING("GET_PLAYER_SWITCH_JUMP_CUT_INDEX = ") PRINTINT(GET_PLAYER_SWITCH_JUMP_CUT_INDEX()) PRINTNL()
// ENDIF
//Start the task for pouring petrol
IF GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_JUMPCUT_DESCENT
AND GET_PLAYER_SWITCH_JUMP_CUT_INDEX() = 0
// //Create gas trail
// IF createdGasTrail = FALSE
// START_PETROL_TRAIL_DECALS(1)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-369.6, 1150.6, 324.3>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-368.8, 1149.7, 324.2>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-367.8, 1148.6, 324>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-366.7, 1147.5, 323.9>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-365.4, 1146.4, 323.7>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-364.2, 1145.0, 323.6>>, 1)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-363.7, 1143.3, 323.4>>, 2)
// WAIT(0)
// ADD_PETROL_TRAIL_DECAL_INFO(<<-363, 1141, 323>>, 4)
// END_PETROL_TRAIL_DECALS()
// createdGasTrail = TRUE
// ENDIF
// //do what you need
// IF pourGasTaskGiven = FALSE
// IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
// OPEN_SEQUENCE_TASK(seqSequence)
// TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, <<-370.3, 1151.7, 325.4>>, <<-365.1, 1146.1, 323.8>>, PEDMOVEBLENDRATIO_WALK, TRUE, 0.5, 4, FALSE, ENAV_DEFAULT, TRUE, FIRING_TYPE_CONTINUOUS)
// TASK_ACHIEVE_HEADING(NULL, 218.6255)
// CLOSE_SEQUENCE_TASK(seqSequence)
// TASK_PERFORM_SEQUENCE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], seqSequence)
// CLEAR_SEQUENCE_TASK(seqSequence)
// pourGasTaskGiven = TRUE
// ENDIF
// IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
// OPEN_SEQUENCE_TASK(seqSequence)
// TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, <<-370.3, 1151.7, 325.4>>, <<-365.1, 1146.1, 323.8>>, PEDMOVEBLENDRATIO_WALK, TRUE, 0.5, 4, FALSE, ENAV_DEFAULT, TRUE, FIRING_TYPE_CONTINUOUS)
// TASK_ACHIEVE_HEADING(NULL, 218.6255)
// CLOSE_SEQUENCE_TASK(seqSequence)
// TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seqSequence)
// CLEAR_SEQUENCE_TASK(seqSequence)
// pourGasTaskGiven = TRUE
// ENDIF
// ENDIF
// IF HAS_VEHICLE_RECORDING_BEEN_LOADED(1, "BB_MAR_VAN")
// IF IS_VEHICLE_DRIVEABLE(SniperVan)
// IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(SniperVan)
// START_PLAYBACK_RECORDED_VEHICLE(SniperVan, 1, "BB_MAR_VAN")
// CLEAR_AREA(GET_ENTITY_COORDS(SniperVan), 20, TRUE)
// ENDIF
// ENDIF
// ENDIF
ENDIF
WAIT(0)
ENDWHILE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
FREEZE_ENTITY_POSITION(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], TRUE)
ENDIF
IF bCamViewModeChanged = TRUE
// url:bugstar:2068528
IF NOT IS_ALLOWED_INDEPENDENT_CAMERA_MODES()
SET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_IN_VEHICLE, CAM_VIEW_MODE_FIRST_PERSON)
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Restoring cam view mode for first person in vehicle camera.")
ENDIF
SET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT, CAM_VIEW_MODE_FIRST_PERSON)
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Restoring cam view mode for first person on foot camera.")
bCamViewModeChanged = FALSE
ENDIF
IF NOT IS_SELECTOR_CAM_ACTIVE()
// IF IS_VEHICLE_DRIVEABLE(SniperVan)
// IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(SniperVan)
// STOP_PLAYBACK_RECORDED_VEHICLE(SniperVan)
// ENDIF
// ENDIF
// REMOVE_VEHICLE_RECORDING(1, "BB_MAR_VAN")
IF DOES_ENTITY_EXIST(vehTitan)
IF IS_VEHICLE_DRIVEABLE(vehTitan)
FREEZE_ENTITY_POSITION(vehTitan, TRUE)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(vehBike)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehBike)
ENDIF
IF DOES_ENTITY_EXIST(endGuy[0])
SET_PED_AS_NO_LONGER_NEEDED(endGuy[0])
ENDIF
IF DOES_ENTITY_EXIST(endGuy[1])
SET_PED_AS_NO_LONGER_NEEDED(endGuy[1])
ENDIF
IF DOES_ENTITY_EXIST(objBriefcase)
IF IS_ENTITY_ATTACHED(objBriefcase)
DETACH_ENTITY(objBriefcase)
ENDIF
DELETE_OBJECT(objBriefcase)
ENDIF
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
ENDIF
// SET_PED_AMMO(PLAYER_PED_ID(), WEAPONTYPE_PETROLCAN, 0)
// SET_MODEL_AS_NO_LONGER_NEEDED(PROP_DEST_PLANE)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
IF NOT DOES_PLAYER_HAVE_WEAPON(WEAPONTYPE_PISTOL)
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, 100, FALSE, FALSE)
ELSE
IF GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(), AMMOTYPE_PISTOL) < 100
SET_PED_AMMO(PLAYER_PED_ID(), WEAPONTYPE_PISTOL, 100)
ENDIF
ENDIF
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(4, "STAGE_DESTROY_SNIPER", TRUE)
IF NOT IS_AUDIO_SCENE_ACTIVE("MARTIN_1_DRIVE_BACK")
START_AUDIO_SCENE("MARTIN_1_DRIVE_BACK")
ENDIF
SETTIMERB(0)
iStageSection = 2
ENDIF
ENDIF
ENDIF
IF iStageSection = 2
// PRINTSTRING("gameplay cam pitch is ") PRINTFLOAT(GET_GAMEPLAY_CAM_RELATIVE_PITCH()) PRINTNL()
// IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_PETROLCAN
// IF GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_PETROLCAN) > 0
// SET_PED_AMMO(PLAYER_PED_ID(), WEAPONTYPE_PETROLCAN, 0)
// ENDIF
// IF GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_PETROLCAN) = 0
// IF weaponSwapped = FALSE
// IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
// SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), GET_BEST_PED_WEAPON(PLAYER_PED_ID()), TRUE)
// weaponSwapped = TRUE
// ENDIF
// ENDIF
// ENDIF
// ENDIF
IF RadarBack = FALSE
IF TIMERB() > 2000
DISPLAY_RADAR(TRUE)
DISPLAY_HUD(TRUE)
RadarBack = TRUE
ENDIF
ENDIF
// IF GET_NUMBER_OF_FIRES_IN_RANGE(<<-363.3, 1141.4, 323>>, 2) > 0
// FREEZE_ENTITY_POSITION(SniperVan, FALSE)
// EXPLODE_VEHICLE(SniperVan, TRUE, TRUE)
// ENDIF
// IF NOT DOES_BLIP_EXIST(BlipSniperVan)
// SET_VEHICLE_HANDBRAKE(SniperVan, FALSE)
// SET_ENTITY_HEALTH(SniperVan, 110)
// BlipSniperVan = CREATE_BLIP_FOR_VEHICLE(SniperVan, TRUE)
// ENDIF
IF DOES_ENTITY_EXIST(SniperVan)
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(SniperVan, FALSE), <<-428, 1111, 327>>) < 250
IF IS_VEHICLE_DRIVEABLE(SniperVan)
blipSetToRed = FALSE
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SniperVan)
IF NOT IS_MESSAGE_BEING_DISPLAYED()
PRINT_NOW("M1_GOD5", 200000, -1)//Leave the area
ENDIF
IF DOES_BLIP_EXIST(BlipSniperVan)
CLEAR_PRINTS()
REMOVE_BLIP(BlipSniperVan)
ENDIF
ELSE
IF NOT DOES_BLIP_EXIST(BlipSniperVan)
BlipSniperVan = CREATE_BLIP_FOR_VEHICLE(SniperVan)
CLEAR_PRINTS()
IF doneGetBackInVanText = FALSE
PRINT_NOW("SNIPE9", DEFAULT_GOD_TEXT_TIME, -1)//~s~Get back in the ~b~van.
doneGetBackInVanText = TRUE
ENDIF
ENDIF
ENDIF
ELSE
SetMissionFailed("M1_FAIL6") //~s~Michael destroyed the van too close to the observatory.
ENDIF
ELSE
IF IS_VEHICLE_DRIVEABLE(SniperVan)
IF blipSetToRed = FALSE
IF DOES_BLIP_EXIST(BlipSniperVan)
REMOVE_BLIP(BlipSniperVan)
ENDIF
IF NOT DOES_BLIP_EXIST(BlipSniperVan)
BlipSniperVan = CREATE_BLIP_FOR_VEHICLE(SniperVan, TRUE)
CLEAR_PRINTS()
PRINT_NOW("M1_GOD4", 200000, -1)//~s~Destroy the ~r~van.
ENDIF
blipSetToRed = TRUE
ENDIF
IF NOT IS_MESSAGE_BEING_DISPLAYED()
PRINT_NOW("M1_GOD4", 200000, -1)//~s~Destroy the ~r~van.
ENDIF
ENDIF
IF bMissionFailed = FALSE
IF IS_ENTITY_DEAD(SniperVan)
IF DOES_BLIP_EXIST(BlipSniperVan)
REMOVE_BLIP(BlipSniperVan)
ENDIF
SETTIMERA(0)
CLEAR_PRINTS()
bVideoRecordingDone = FALSE
iStageSection = 3
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF iStageSection = 3
//Have a video recording of the van being destroyed
IF bVideoRecordingDone = FALSE
IF Timera() > 3000
REPLAY_RECORD_BACK_FOR_TIME(10.0)
bVideoRecordingDone = TRUE
ENDIF
ENDIF
//Make the phone call if player gets too close to Martins house or if the timer runs out
IF TIMERA() > 30000
OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<1373, 1147, 113>>) < 1000
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
IF CHAR_CALL_PLAYER_CELLPHONE_FORCE_ANSWER(structConvoPeds, CHAR_TREVOR, "SLM1AUD", "M1_CHANGE", CONV_PRIORITY_VERY_HIGH)
//What?
//There's been a change of plans, you don't need to come to the Ranch,
//meet me at Stoner Cement Works, a little up Senora Road from there.
//Trevor, what're you doing?
//Nothing you wouldn't do.
iStageSection = 4
ENDIF
ENDIF
ENDIF
ENDIF
IF iStageSection = 4
IF HAS_CELLPHONE_CALL_FINISHED()
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
ENDIF
// iLeftDoor = HASH("LeftFarmDoor")
// iRightDoor = HASH("RightFarmDoor")
//
// //Register the door
// ADD_DOOR_TO_SYSTEM(iLeftDoor, prop_gate_farm_03, <<2328.16, 4926.86, 40.95>>)
// ADD_DOOR_TO_SYSTEM(iRightDoor, prop_gate_farm_03, <<2322.92, 4931.90, 40.71>>)
//
// //set door state
// DOOR_SYSTEM_SET_OPEN_RATIO(iLeftDoor, 1, FALSE, TRUE)
// DOOR_SYSTEM_SET_DOOR_STATE(iLeftDoor, DOORSTATE_LOCKED, FALSE, TRUE)
// DOOR_SYSTEM_SET_OPEN_RATIO(iRightDoor, 1, FALSE, TRUE)
// DOOR_SYSTEM_SET_DOOR_STATE(iRightDoor, DOORSTATE_LOCKED, FALSE, TRUE)
SET_MAX_WANTED_LEVEL(5)
SETTIMERB(0)
iStageSection = 5
ENDIF
ENDIF
IF iStageSection = 5
IF EndCutRequested = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(<<1216.6, 1868.1, 78.1>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) < DEFAULT_CUTSCENE_LOAD_DIST
// //To stop the fork lift spawning
// CLEAR_AREA(<<2305.2, 4883.4, 41.8>>, 8, TRUE)
// SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<2299.7, 4870.2, 39>>, <<2307.0, 4894.2, 45>>, FALSE)
REQUEST_CUTSCENE("Martin_1_ext")
EndCutRequested = TRUE
ENDIF
ENDIF
IF EndCutRequested = TRUE
//Set up Trev's clothes for opening cutscene
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
//Trevor
IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_TREVOR, "Trevor")
// SET_CUTSCENE_PED_COMPONENT_VARIATION("Trevor", PED_COMP_TORSO, 0, 4)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("Trevor", PED_COMP_LEG, 18, 0)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("Trevor", PED_COMP_HAND, 0, 0)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("Trevor", PED_COMP_FEET, 16, 0)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("Trevor", PED_COMP_SPECIAL, 0, 0)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("Trevor", PED_COMP_SPECIAL2, 0, 0)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("Trevor", PED_COMP_DECL, 0, 0)
PRINTSTRING("Player was Michael at start so Trev's components being set") PRINTNL()
ELSE
SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_TREVOR, "Trevor")
PRINTSTRING("Player was trevor at start so no components being set") PRINTNL()
ENDIF
//Michael
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
PRINTSTRING("TRIGGER SCENE - Trev's cutscene components set 3.") PRINTNL()
ENDIF
IF GET_DISTANCE_BETWEEN_COORDS(<<1204.7, 1859, 78.2>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) > DEFAULT_CUTSCENE_UNLOAD_DIST
REMOVE_CUTSCENE()
EndCutRequested = FALSE
ENDIF
ENDIF
IF DoneChatChange2 = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "M1_CHANGE2", CONV_PRIORITY_MEDIUM)
//Trevor! Trevor!!!
//I wouldn't do... somehow I don't believe that!
DoneChatChange2 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Do some dialogue and help text and hint cam if Michael comes near the wrecked plane.
IF DOES_ENTITY_EXIST(vehTitan)
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehTitan) < 160
IF doneChatWreck = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_MESSAGE_BEING_DISPLAYED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "M1_WRECK", CONV_PRIORITY_MEDIUM)
//Fuck sake, what a mess. How do I get myself involved in this shit.
doneChatWreck = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Help text and activate hint cam
IF doneWreckHelpText = FALSE
PRINT_HELP("BFHELPTXT2")//Press ~INPUT_VEH_CIN_CAM~ to toggle focus onto the plane.
doneWreckHelpText = TRUE
ENDIF
IF HintCamActivated = FALSE
SET_CINEMATIC_BUTTON_ACTIVE(FALSE)
HintCamActivated = TRUE
ENDIF
IF HintCamActivated = TRUE
CONTROL_VEHICLE_CHASE_HINT_CAM_ANY_MEANS(localChaseHintCamStruct, vehTitan)
ENDIF
IF IS_GAMEPLAY_HINT_ACTIVE()
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
CLEAR_HELP(TRUE)
ENDIF
ENDIF
ELSE
IF HintCamActivated = TRUE
CLEAR_HELP()
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
SET_CINEMATIC_BUTTON_ACTIVE(TRUE)
HintCamActivated = FALSE
ENDIF
ENDIF
ENDIF
//Make player leave vehicle once close enough
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0
// IF GET_DISTANCE_BETWEEN_COORDS(<<1204.7, 1859, 78.2>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) < 6
IF GET_DISTANCE_BETWEEN_COORDS(<<1216.6, 1868.1, 78.1>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) < 5
IF DOES_BLIP_EXIST(BlipTrevor)
REMOVE_BLIP(BlipTrevor)
ENDIF
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
PlayerCar = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(PlayerCar)
REQUEST_ANIM_DICT("missmartin1@leadinoutmartin_1_ext")
SETTIMERB(0)
iStageSection = 6
ELSE
SETTIMERB(0)
REQUEST_ANIM_DICT("missmartin1@leadinoutmartin_1_ext")
iStageSection = 6
ENDIF
ENDIF
ENDIF
ENDIF
IF iStageSection = 6
IF DOES_BLIP_EXIST(BlipTrevor)
REMOVE_BLIP(BlipTrevor)
ENDIF
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_STOPPED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
IF TaskToLeaveCar = FALSE
TASK_LEAVE_VEHICLE(PLAYER_PED_ID(), GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
SETTIMERB(0)
TaskToLeaveCar = TRUE
ENDIF
ENDIF
ENDIF
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF TIMERB() > 1500
IF IS_AUDIO_SCENE_ACTIVE("MARTIN_1_DRIVE_BACK")
STOP_AUDIO_SCENE("MARTIN_1_DRIVE_BACK")
ENDIF
iStageSection = 7
ENDIF
ENDIF
ENDIF
// CLEANUP
IF iStageSection >= 7
IF DOES_BLIP_EXIST(BlipTrevor)
REMOVE_BLIP(BlipTrevor)
ENDIF
bStageSetup = FALSE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
//PURPOSE:End cutscene
FUNC BOOL StageEndCutscene()
IF bStageSetup = FALSE
SET_MAX_WANTED_LEVEL(0)
PRINTSTRING("MISSION STAGE END CUTSCENE") PRINTNL()
//Any flags that need set for this stage
VanMoved = FALSE
missionCanFail = FALSE
hasNumberPlateBeenSet = FALSE
camsKilled = FALSE
REQUEST_VEHICLE_RECORDING(0, "END_MARTIN_1")
CLEAR_HELP()
KILL_ANY_CONVERSATION()
IF DOES_CAM_EXIST(camInit)
DESTROY_CAM(camInit)
ENDIF
IF DOES_CAM_EXIST(camDest)
DESTROY_CAM(camDest)
ENDIF
IF NOT DOES_CAM_EXIST(camInit)
camInit = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<1216.503052,1864.997559,79.242203>>,<<1.266527,0.000000,-89.015869>>,45.031136)
SET_CAM_ACTIVE(camInit, TRUE)
ENDIF
IF NOT DOES_CAM_EXIST(camDest)
camDest = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, <<1217.515137,1867.192505,79.242203>>,<<16.743389,0.000000,-57.137970>>,45.031136)
SET_CAM_ACTIVE(camDest, TRUE)
ENDIF
IF IS_SCREEN_FADED_OUT()
IF NOT IS_REPLAY_BEING_SET_UP()
LOAD_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
END_REPLAY_SETUP()
REQUEST_CUTSCENE("Martin_1_ext")
ENDIF
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
WHILE NOT HAS_CUTSCENE_LOADED()
OR NOT HAS_ANIM_DICT_LOADED("missmartin1@leadinoutmartin_1_ext")
//Set up Trevors clothes for cutscene
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
//Trevor
IF GET_PLAYER_CHARACTER_AT_MISSION_START() = CHAR_MICHAEL
PRINTSTRING("MARTIN 1 SCRIPT - Trev's cutscene components set.") PRINTNL()
SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_TREVOR, "Trevor")
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_TORSO, 0, 4, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_LEG, 18, 0, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_HAND, 0, 0, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_FEET, 16, 0, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_SPECIAL, 0, 0, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_SPECIAL2, 0, 0, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_DECL, 0, 0, PLAYER_TWO)
ELSE
SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_TREVOR, "Trevor")
ENDIF
//Michael
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
ENDIF
PRINTSTRING("Waiting for end cutscene and anim dict to load") PRINTNL()
WAIT(0)
ENDWHILE
iStageSection = 0
missionCanFail = TRUE
bStageSetup = TRUE
ELSE
IF iStageSection = 0
//Delete the sniper van incase it's been brough to end cutscene area for bug 1712405
IF DOES_ENTITY_EXIST(SniperVan)
DELETE_VEHICLE(SniperVan)
ENDIF
IF DOES_ENTITY_EXIST(RemoteSniper)
DELETE_OBJECT(RemoteSniper)
ENDIF
IF IS_PED_WEARING_HELMET(PLAYER_PED_ID())
REMOVE_PED_HELMET(PLAYER_PED_ID(), TRUE)
ENDIF
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
DISPLAY_HUD(FALSE)
DISPLAY_RADAR(FALSE)
SET_CAM_ACTIVE_WITH_INTERP(camDest, camInit, 10000)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
SETTIMERA(0)
CLEAR_AREA(<<1215.97400, 1863.09082, 77.88766>>, 14, FALSE)
CLEAR_AREA_OF_PROJECTILES(<<1219.4, 1865.7, 78.1>>, 15, FALSE)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
SETTIMERB(0)
iStageSection = 1
ENDIF
IF iStageSection = 1
IF TIMERB() < 5000
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<1219.4, 1865.5, 78.3278>>, 3, PROP_BARREL_01A)
BarrellSyncScene = CREATE_SYNCHRONIZED_SCENE_AT_MAP_OBJECT(<<1219.4, 1865.5, 78.3278>>, 1, PROP_BARREL_01A)
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), BarrellSyncScene, "missmartin1@leadinoutmartin_1_ext", "martin_1_ext_leadin", NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
iStageSection = 2
ELSE
PRINTSTRING("Barrel doesn't exist at coords for Sync scene") PRINTNL()
ENDIF
ELSE
iStageSection = 2
ENDIF
ENDIF
IF iStageSection = 2
//Have a line of dialogue in here from Michael
IF CREATE_CONVERSATION(structConvoPeds, "SLM1AUD", "M1_EXT_LI", CONV_PRIORITY_MEDIUM)
//Where is he?
ENDIF
iStageSection = 3
ENDIF
IF iStageSection = 3
IF TIMERA() > 9500
CLEAR_AREA(<<1214.0551, 1875.0118, 77.7712>>, 15, FALSE)
//move the players car
IF DOES_ENTITY_EXIST(PlayerCar)
IF IS_VEHICLE_DRIVEABLE(PlayerCar)
IF IS_THIS_MODEL_A_CAR(GET_ENTITY_MODEL(PlayerCar))
SET_ENTITY_COORDS(PlayerCar, <<1211.0487, 1859.6018, 77.9089>>)
SET_ENTITY_HEADING(PlayerCar, 311.1039)
ELSE
DELETE_VEHICLE(PlayerCar)
ENDIF
ENDIF
ENDIF
iStageSection = 4
ENDIF
ENDIF
IF iStageSection = 4
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
SET_VEHICLE_AS_NO_LONGER_NEEDED(TrevCutsceneCar)
ENDIF
//Register entities
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
REGISTER_ENTITY_FOR_CUTSCENE(TrevsEntity, "Trevor", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PLAYER_TWO)
REGISTER_ENTITY_FOR_CUTSCENE(CutPatricia, "Patricia", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, CS_Patricia)
REGISTER_ENTITY_FOR_CUTSCENE(TrevsCarEntity, "Madrazos_Car", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, BALLER)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
//Configure script systems into a safe mode.
// SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
START_CUTSCENE()
SET_VEHICLE_MODEL_PLAYER_WILL_EXIT_SCENE(BALLER)
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
iStageSection = 5
ENDIF
IF iStageSection = 5
// Let the ambient script know that it should play the carrec when this cutscene ends
// Carrec is 000, END_MARTIN_1, and will trigger in player_controller.sc
// g_bHandleEndOfMission_Martin1 = TRUE
IF camsKilled = FALSE
IF IS_CUTSCENE_PLAYING()
SET_CAM_ACTIVE(camInit, FALSE)
SET_CAM_ACTIVE(camDest, FALSE)
DESTROY_CAM(camInit)
DESTROY_CAM(camDest)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
camsKilled = TRUE
ENDIF
ENDIF
IF VanMoved = FALSE
IF IS_CUTSCENE_PLAYING()
IF IS_VEHICLE_DRIVEABLE(PlayerCar)
// SET_ENTITY_COORDS(PlayerCar, <<2303.1599, 4882.6382, 40.8083>>)
// SET_ENTITY_HEADING(PlayerCar, 315.2404)
SET_VEHICLE_DOORS_SHUT(PlayerCar)
VanMoved = TRUE
ENDIF
ENDIF
ENDIF
//Set Exits states
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), TrevCutsceneCar)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), TrevCutsceneCar, VS_BACK_RIGHT)
ENDIF
ENDIF
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor")
// SET_BUILDING_STATE(BUILDINGNAME_IPL_MARTIN1_ROAD_NODES, BUILDINGSTATE_DESTROYED)
TrevsEntity = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Trevor", PLAYER_TWO)
CSTrev = GET_PED_INDEX_FROM_ENTITY_INDEX(TrevsEntity)
IF DOES_ENTITY_EXIST(CSTrev)
IF NOT IS_PED_INJURED(CSTrev)
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
SET_PED_INTO_VEHICLE(CSTrev, TrevCutsceneCar)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Patricia")
CutPatricia = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Patricia", CS_Patricia)
PedPatricia = GET_PED_INDEX_FROM_ENTITY_INDEX(CutPatricia)
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
IF NOT IS_PED_IN_VEHICLE(PedPatricia, TrevCutsceneCar)
SET_PED_INTO_VEHICLE(PedPatricia, TrevCutsceneCar, VS_FRONT_RIGHT)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedPatricia, TRUE)
SET_PED_KEEP_TASK(PedPatricia, TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
//Grab Martin's car for setting up number plate and for exit states.
IF NOT DOES_ENTITY_EXIST(TrevsCarEntity)
TrevsCarEntity = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Madrazos_Car", BALLER)
ELSE
IF NOT DOES_ENTITY_EXIST(TrevCutsceneCar)
TrevCutsceneCar = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(TrevsCarEntity)
ELSE
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
IF hasNumberPlateBeenSet = FALSE
SET_VEHICLE_NUMBER_PLATE_TEXT(TrevCutsceneCar, "MADRAZO")
hasNumberPlateBeenSet = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Madrazos_Car")
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
SET_VEHICLE_USE_CUTSCENE_WHEEL_COMPRESSION(TrevCutsceneCar, TRUE, TRUE, TRUE)
ENDIF
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Madrazos_Car")
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
SET_VEHICLE_DOORS_SHUT(TrevCutsceneCar)
// SET_VEHICLE_USE_CUTSCENE_WHEEL_COMPRESSION(TrevCutsceneCar, TRUE, TRUE, TRUE)
START_PLAYBACK_RECORDED_VEHICLE(TrevCutsceneCar, 0, "END_MARTIN_1")
SET_ADDITIONAL_ROTATION_FOR_RECORDED_VEHICLE_PLAYBACK(TrevCutsceneCar, <<-0.189057499, -0.189057499, 0.189057499>>, EULER_XYZ)
PRINTSTRING("Martin 1 : Martin's car starting playback now") PRINTNL()
ELSE
PRINTSTRING("Martin 1 : car isn't driveable") PRINTNL()
ENDIF
ELSE
PRINTSTRING("Martin 1 : Car doesn't exist") PRINTNL()
ENDIF
ELSE
PRINTSTRING("Martin 1 : Can't set exit state for car") PRINTNL()
ENDIF
// IF CAN_SET_EXIT_STATE_FOR_CAMERA()
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
// ENDIF
IF NOT IS_CUTSCENE_ACTIVE()
// SET_BUILDING_STATE(BUILDINGNAME_IPL_MARTIN1_ROAD_NODES, BUILDINGSTATE_DESTROYED)
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(TrevCutsceneCar)
START_PLAYBACK_RECORDED_VEHICLE(TrevCutsceneCar, 0, "END_MARTIN_1")
SET_ADDITIONAL_ROTATION_FOR_RECORDED_VEHICLE_PLAYBACK(TrevCutsceneCar, <<-0.189057499, -0.189057499, 0.189057499>>, EULER_XYZ)
ENDIF
ENDIF
ENDIF
REPLAY_STOP_EVENT()
//Return script systems to normal.
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
DISPLAY_HUD(TRUE)
DISPLAY_RADAR(TRUE)
REMOVE_SCENARIO_BLOCKING_AREA(AirstripBlockingArea)
REMOVE_SCENARIO_BLOCKING_AREA(CropFieldBlockingArea1)
REMOVE_SCENARIO_BLOCKING_AREA(PoliceBikeBlockingArea)
REMOVE_SCENARIO_BLOCKING_AREA(SeatNextToVanBlockingArea)
REMOVE_SCENARIO_BLOCKING_AREA(MartinHouseMainScenarioBlockingArea)
REMOVE_SCENARIO_BLOCKING_AREA(PlaneBlockingArea)
//Display the mission passed screen now
IF NOT IS_REPEAT_PLAY_ACTIVE() //B* 1831413: Only hurry stats if this is not a replay
TRIGGER_MISSION_STATS_UI()
ENDIF
iStageSection = 6
ENDIF
ENDIF
IF iStageSection = 6
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), TrevCutsceneCar)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), TrevCutsceneCar, VS_BACK_RIGHT)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(PedPatricia)
IF NOT IS_PED_INJURED(PedPatricia)
IF NOT IS_PED_IN_VEHICLE(PedPatricia, TrevCutsceneCar)
SET_PED_INTO_VEHICLE(PedPatricia, TrevCutsceneCar, VS_FRONT_RIGHT)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedPatricia, TRUE)
SET_PED_KEEP_TASK(PedPatricia, TRUE)
ENDIF
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(CSTrev)
IF NOT IS_PED_INJURED(CSTrev)
IF NOT IS_PED_IN_VEHICLE(CSTrev, TrevCutsceneCar)
SET_PED_INTO_VEHICLE(CSTrev, TrevCutsceneCar)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(CSTrev, TRUE)
ENDIF
ENDIF
ENDIF
SET_VEHICLE_DOORS_SHUT(TrevCutsceneCar)
IF NOT IS_PED_INJURED(CSTrev)
IF IS_PED_IN_VEHICLE(CSTrev, TrevCutsceneCar)
// OPEN_SEQUENCE_TASK(seqSequence)
// TASK_VEHICLE_DRIVE_TO_COORD(NULL, TrevCutsceneCar, <<1221.5, 1887.5, 77.8>>, 5, DRIVINGSTYLE_STRAIGHTLINE, GET_ENTITY_MODEL(TrevCutsceneCar), DRIVINGMODE_PLOUGHTHROUGH, 2, 10)
//// TASK_VEHICLE_DRIVE_TO_COORD(NULL, TrevCutsceneCar, <<1235.3, 1902.7, 78.1>>, 7, DRIVINGSTYLE_STRAIGHTLINE, GET_ENTITY_MODEL(TrevCutsceneCar), DRIVINGMODE_PLOUGHTHROUGH, 2, 10)
//// TASK_VEHICLE_DRIVE_TO_COORD(NULL, TrevCutsceneCar, <<1256.6, 1930.1, 78.6>>, 10, DRIVINGSTYLE_STRAIGHTLINE, GET_ENTITY_MODEL(TrevCutsceneCar), DRIVINGMODE_PLOUGHTHROUGH, 2, 10)
// TASK_VEHICLE_DRIVE_TO_COORD(NULL, TrevCutsceneCar, <<1290.8, 1906.4, 83.6>>, 15, DRIVINGSTYLE_ACCURATE, GET_ENTITY_MODEL(TrevCutsceneCar), DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, 5, 10)
//
//// TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, <<1216.7, 1881.5, 78.2>>, MISSION_GOTO, 5, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, 4, 30)
//// TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, <<1235.3, 1902.7, 78.1>>, MISSION_GOTO, 7, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, 5, 20)
//// TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, <<1256.6, 1930.1, 78.6>>, MISSION_GOTO, 10, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, 5, 20)
//// TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, <<1290.8, 1906.4, 83.6>>, MISSION_GOTO, 10, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, 5, 20)
// CLOSE_SEQUENCE_TASK(seqSequence)
// TASK_PERFORM_SEQUENCE(CSTrev, seqSequence)
// CLEAR_SEQUENCE_TASK(seqSequence)
// SET_PED_KEEP_TASK(CSTrev, TRUE)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(TrevCutsceneCar)
IF GET_TIME_POSITION_IN_RECORDING(TrevCutsceneCar) > 5000
iStageSection = 7
ENDIF
ELSE
PRINTSTRING("playback is not going on for trevs car ") PRINTNL()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
// CLEANUP
IF iStageSection >= 7
IF DOES_BLIP_EXIST(BlipTrevor)
REMOVE_BLIP(BlipTrevor)
ENDIF
//Move stage on once the mission passed screen has finished
IF g_bResultScreenDisplaying = FALSE
SET_MAX_WANTED_LEVEL(5)
bStageSetup = FALSE
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
// MAIN SCRIPT
VEHICLE_INDEX vehBodhi2
SCRIPT
SET_MISSION_FLAG(TRUE)
PRINTSTRING("VINEWOOD BABYLON MISSION FLAG BEING SET TO TRUE") PRINTNL()
//Enbale the interior if on repeat play
IF IS_REPEAT_PLAY_ACTIVE()
SET_INTERIOR_CAPPED(INTERIOR_V_RANCH, FALSE)
ENDIF
//INFORM_MISSION_STATS_OF_MISSION_START_SOLOMON_ONE()
REGISTER_SCRIPT_WITH_AUDIO()
//Call this here to give me full control over peds variations in cutscenes
SET_PLAYER_PED_DATA_IN_CUTSCENES(FALSE)
DISABLE_CHEAT(CHEAT_TYPE_SPAWN_VEHICLE, TRUE)
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PED_HELMET(PLAYER_PED_ID(), FALSE)
ENDIF
ENDIF
SET_RANDOM_TRAINS(FALSE)
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling SET_RANDOM_TRAINS(FALSE).")
SET_WEATHER_TYPE_OVERTIME_PERSIST("EXTRASUNNY", 20)
IF HAS_FORCE_CLEANUP_OCCURRED()
TRIGGER_MUSIC_EVENT("SOL1_FAIL")
PRINTSTRING("playing fail music for death arrest") PRINTNL()
Mission_Flow_Mission_Force_Cleanup()
MissionCleanup()
ENDIF
/*#IF IS_DEBUG_BUILD
SETUP_SPLINE_CAM_NODE_ARRAY_PLANE_SHOT_SCENE(scsPlaneShotScene, vehTitan)
SETUP_SPLINE_CAM_NODE_ARRAY_PLANE_TO_BIKE(scsPlaneToBike, vehTitan, vehBike)
WIDGET_GROUP_ID widgetDebug = START_WIDGET_GROUP("MISSION DEBUG")
STOP_WIDGET_GROUP()
CREATE_SPLINE_CAM_WIDGETS(scsPlaneShotScene, "Plane", "", widgetDebug)
CREATE_SPLINE_CAM_WIDGETS(scsPlaneToBike, "Jet", "Bike", widgetDebug)
CREATE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS(widgetDebug)
#ENDIF*/
WHILE bScriptInProgress
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_CAIDALIBRE")
SWITCH eMissionStage
CASE STAGE_INIT_MISSION
IF Is_Replay_In_Progress()
SetupArrays()
missionCanFail = FALSE
//Check if player chose to shitskip
IF g_bShitskipAccepted = TRUE
IF Get_Replay_Mid_Mission_Stage() = 0
START_REPLAY_SETUP(<<-363.5190, 1142.1714, 323.0888>>, 11.2577)
eMissionStage = STAGE_SHOOT_PLANE
ENDIF
IF Get_Replay_Mid_Mission_Stage() = 1
START_REPLAY_SETUP(vBFChaseStartCoords, fBFChaseStartHeading)
eMissionStage = STAGE_CHASE_PLANE
ENDIF
IF Get_Replay_Mid_Mission_Stage() = 2
START_REPLAY_SETUP(<<2776.9570, 4740.3716, 44.9082>>, 341.7251)
eMissionStage = STAGE_KILL_PASSENGERS
ENDIF
IF Get_Replay_Mid_Mission_Stage() = 3
START_REPLAY_SETUP(<<-370.9615, 1151.7002, 324.3864>>, 225.63827)
eMissionStage = STAGE_DESTROY_SNIPER
ENDIF
IF Get_Replay_Mid_Mission_Stage() = 4
START_REPLAY_SETUP(<<1204.7, 1859, 78.2>>, 214.5280)
eMissionStage = STAGE_END_CUTSCENE
ENDIF
ELSE
IF Get_Replay_Mid_Mission_Stage() = 0
START_REPLAY_SETUP(<<1386.8092, 1142.3643, 113.3340>>, 82.7671)
eMissionStage = STAGE_DRIVE_TO_OBSERVATORY
ENDIF
IF Get_Replay_Mid_Mission_Stage() = 1
bSniperIsBeingReplayed = TRUE
START_REPLAY_SETUP(<<-363.5190, 1142.1714, 323.0888>>, 11.2577)
eMissionStage = STAGE_SHOOT_PLANE
ENDIF
IF Get_Replay_Mid_Mission_Stage() = 2
START_REPLAY_SETUP(vBFChaseStartCoords, fBFChaseStartHeading)
eMissionStage = STAGE_CHASE_PLANE
ENDIF
IF Get_Replay_Mid_Mission_Stage() = 3
START_REPLAY_SETUP(<<2776.9570, 4740.3716, 44.9082>>, 341.7251)
eMissionStage = STAGE_KILL_PASSENGERS
ENDIF
IF Get_Replay_Mid_Mission_Stage() = 4
START_REPLAY_SETUP(<<-370.9615, 1151.7002, 324.3864>>, 225.63827)
eMissionStage = STAGE_DESTROY_SNIPER
ENDIF
ENDIF
manageSkip()
bStageSetup = FALSE
ELSE
IF IS_REPEAT_PLAY_ACTIVE()
PRINTSTRING("REPEAT PLAY IS ACTIVE, REQUESTING OPENING CUTSCENE") PRINTNL()
//Request the opening cutscene
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
OR GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN
REQUEST_CUTSCENE("MARTIN_1_INT")
ENDIF
// MISSION_FLOW_REQUEST_MISSION_INTRO_CUTSCENE(SP_MISSION_MARTIN_1, "MARTIN_1_INT", CS_ALL, CS_NONE, CS_3|CS_4|CS_5|CS_6|CS_7|CS_8)
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
REQUEST_CUTSCENE_WITH_PLAYBACK_LIST("MARTIN_1_INT",CS_SECTION_3|CS_SECTION_4|CS_SECTION_5|CS_SECTION_6|CS_SECTION_7|CS_SECTION_8|CS_SECTION_9|CS_SECTION_10|CS_SECTION_11|CS_SECTION_12|CS_SECTION_13|CS_SECTION_14|CS_SECTION_15|CS_SECTION_16|CS_SECTION_17)
ENDIF
//Create Michael for the mission if you are playing as Trevor
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, <<1390.7065, 1142.6586, 113.4431>>, 170.5477)
PRINTSTRING("Waiting for Michael to be created for repeat play") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
WHILE NOT CREATE_PLAYER_VEHICLE(playerCar, CHAR_MICHAEL, <<1371.3683, 1132.9742, 112.8401>>, 20.5505, TRUE, VEHICLE_TYPE_CAR)
PRINTSTRING("Waiting for Michaels car to be created for repeat play") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
IF bCutsceneDone = FALSE
icutsceneStage = 0
bCutsceneActive = TRUE
vehiclesMovedForStart = FALSE
missionCanFail = FALSE
trevExitTaskGiven = FALSE
MikeExitTaskGiven = FALSE
lightsTurnedOn = FALSE
bCutsceneBeingSkipped = FALSE
// todStopped = FALSE
REQUEST_ADDITIONAL_TEXT("BFINJEC", MISSION_TEXT_SLOT)
WHILE bCutsceneActive
SWITCH icutsceneStage
CASE 0
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
REQUEST_MODEL( GET_PLAYER_VEH_MODEL( CHAR_TREVOR ) )
SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_TREVOR, "Trevor")
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_TORSO, 0, 4, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_LEG, 18, 0, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_HAND, 0, 0, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_FEET, 16, 0, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_SPECIAL, 0, 0, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_SPECIAL2, 0, 0, PLAYER_TWO)
// SET_CUTSCENE_PED_COMPONENT_VARIATION("TREVOR", PED_COMP_DECL, 0, 0, PLAYER_TWO)
//Michael
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
PRINTSTRING("MARTIN 1 SCRIPT - Trev's opening cutscene components set.") PRINTNL()
ENDIF
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
//Michael
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[0])
IF NOT IS_PED_INJURED(g_sTriggerSceneAssets.ped[0])
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", g_sTriggerSceneAssets.ped[0], PLAYER_ZERO)
ENDIF
ENDIF
//Trevor
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Trevor", PLAYER_PED_ID(), PLAYER_TWO)
PRINTSTRING("TRIGGER SCENE - Trev and Mike set up for opening cutscene 1.") PRINTNL()
ENDIF
ENDIF
IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
//
// WHILE NOT HAS_CUTSCENE_LOADED()
// PRINTSTRING("waiting for cutscene MARTIN_1_INT to load")
// WAIT(0)
// ENDWHILE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_PED_WEARING_HELMET(PLAYER_PED_ID())
REMOVE_PED_HELMET(PLAYER_PED_ID(), TRUE)
ENDIF
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
//Register entities
//Michael
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
playerStartedAsMichael = TRUE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
//created and handed over to cutscene to stop vehicle variations popping in during cutscene
CREATE_PLAYER_VEHICLE(vehBodhi2, CHAR_TREVOR, <<1431.2135, 1055.9114, 113.2366>>, 356.6531, TRUE)
//Trev
// SET_CUTSCENE_PED_PROP_VARIATION("Trevor", ANCHOR_HEAD, 0, 0)
REGISTER_ENTITY_FOR_CUTSCENE(NULL, "Trevor", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PLAYER_TWO)
REGISTER_ENTITY_FOR_CUTSCENE(vehBodhi2, "trevors_car", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, BODHI2)
//Get Michaels car if he came in one from trigger scene here
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.veh[0])
IF IS_VEHICLE_DRIVEABLE(g_sTriggerSceneAssets.veh[0])
PRINTSTRING("g_sTriggerSceneAssets.veh[0] exists from trigger scene. This is the car Michael arrived in")
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.veh[0], TRUE, TRUE)
playerCar = g_sTriggerSceneAssets.veh[0]
ELSE
PRINTSTRING("g_sTriggerSceneAssets.veh[0] isn't driveable")
ENDIF
ELSE
PRINTSTRING("g_sTriggerSceneAssets.veh[0] doesn't exist")
ENDIF
ENDIF
//Trev
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
playerStartedAsMichael = FALSE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
//Grab Michael from the lead in scene
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[0])
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.ped[0], TRUE, TRUE)
sSelectorPeds.pedID[SELECTOR_PED_MICHAEL] = g_sTriggerSceneAssets.ped[0]
SET_PED_CAN_BE_TARGETTED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE)
ENDIF
//Register Michael
REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], "Michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PLAYER_ZERO)
//Get Michaels car that should have been created by lead in scene.
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.veh[1])
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.veh[1], TRUE, TRUE)
playerCar = g_sTriggerSceneAssets.veh[1]
SET_VEHICLE_DOORS_LOCKED(playerCar, VEHICLELOCK_UNLOCKED)
ENDIF
//Get Trevs car if he came in one from trigger scene here
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.veh[0])
IF IS_VEHICLE_DRIVEABLE(g_sTriggerSceneAssets.veh[0])
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.veh[0], TRUE, TRUE)
TrevCutsceneCar = g_sTriggerSceneAssets.veh[0]
SET_VEHICLE_DOORS_LOCKED(TrevCutsceneCar, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
ENDIF
ENDIF
ENDIF
//Grab the parked car at side of the house
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.veh[2])
SET_ENTITY_AS_MISSION_ENTITY(g_sTriggerSceneAssets.veh[2], TRUE, TRUE)
ParkedCarAtStart = g_sTriggerSceneAssets.veh[2]
ENDIF
MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_MISSION_MARTIN_1)
MartinHouseMainScenarioBlockingArea = ADD_SCENARIO_BLOCKING_AREA(<<1333, 1095, 137>>, <<1438.9, 1197, 109>>)
IF playerStartedAsMichael
START_CUTSCENE()
ELSE
// Flash blue as switch occurs during cutscene
START_CUTSCENE(CUTSCENE_PLAYER_FP_FLASH_MICHAEL)
ENDIF
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
SETTIMERA(0)
IF NOT IS_REPEAT_PLAY_ACTIVE()
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME_SHORT)
ENDIF
ENDIF
bClearedAreaForCutscene = FALSE
iskipCutsceneStage = 0
icutsceneStage++
ENDIF
BREAK
CASE 1
//Anything that should happen regardless of who the player is at start
IF IS_CUTSCENE_PLAYING()
IF GET_CUTSCENE_TIME() > 130000
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_SKIP_CUTSCENE)
ENDIF
IF NOT bClearedAreaForCutscene
CLEAR_AREA_OF_PROJECTILES(<<1371.1974, 1146.6389, 112.7587>>, 100)
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 100, TRUE)
//Fix for B*1954118 - Stopping taxi getting in the way of the cutscene.
IF DOES_ENTITY_EXIST(g_WaitingTaxi)
SET_ENTITY_AS_MISSION_ENTITY(g_WaitingTaxi, DEFAULT, TRUE)
TidyUpVehicle(g_WaitingTaxi, TRUE)
ENDIF
IF DOES_ENTITY_EXIST(g_WaitingTaxiDriver)
SET_ENTITY_AS_MISSION_ENTITY(g_WaitingTaxiDriver, DEFAULT, TRUE)
TidyUpPed(g_WaitingTaxiDriver, TRUE)
ENDIF
bClearedAreaForCutscene = TRUE
ENDIF
ENDIF
IF IS_REPEAT_PLAY_ACTIVE()
AND IS_CUTSCENE_PLAYING()
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME_SHORT)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(PlayerCar)
IF NOT IS_VEHICLE_DRIVEABLE(playerCar)
DELETE_VEHICLE(playerCar)
ENDIF
ENDIF
//Handle the cutscene if player started as Michael
IF NOT WAS_CUTSCENE_SKIPPED()
IF playerStartedAsMichael = TRUE
//Create Trevs car if starting as Michael and move Michaels car if it exists
IF IS_CUTSCENE_PLAYING()
IF lightsTurnedOn = FALSE
IF GET_CLOCK_HOURS() > 21
OR GET_CLOCK_HOURS() < 6
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_CUTSCENE_ENTITY("Trevors_car"))
IF NOT IS_ENTITY_DEAD(GET_ENTITY_INDEX_OF_CUTSCENE_ENTITY("Trevors_car"))
SET_VEHICLE_LIGHTS(GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_CUTSCENE_ENTITY("Trevors_car")), SET_VEHICLE_LIGHTS_ON)
lightsTurnedOn = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_CUTSCENE_SECTION_PLAYING() > 1
IF NOT DOES_ENTITY_EXIST(TrevCutsceneCar)
IF CREATE_PLAYER_VEHICLE(TrevCutsceneCar, CHAR_TREVOR, <<1371.1974, 1146.6389, 112.7587>>, 177.6714, TRUE, VEHICLE_TYPE_CAR)
SET_VEHICLE_DOORS_LOCKED(TrevCutsceneCar, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
ENDIF
ENDIF
ENDIF
IF vehiclesMovedForStart = FALSE
IF DOES_ENTITY_EXIST(playerCar)
IF IS_VEHICLE_DRIVEABLE(playerCar)
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(playerCar))
SET_ENTITY_COORDS(playerCar, <<1360.5767, 1181.4652, 111.4876>>)
SET_ENTITY_HEADING(playerCar, 180.5927)
SET_VEHICLE_ON_GROUND_PROPERLY(playerCar)
vehiclesMovedForStart = TRUE
ENDIF
IF IS_THIS_MODEL_A_CAR(GET_ENTITY_MODEL(playerCar))
OR IS_THIS_MODEL_A_BIKE(GET_ENTITY_MODEL(playerCar))
OR IS_THIS_MODEL_A_BICYCLE(GET_ENTITY_MODEL(playerCar))
OR IS_THIS_MODEL_A_QUADBIKE(GET_ENTITY_MODEL(playerCar))
SET_ENTITY_COORDS(playerCar, <<1372.0696, 1131.5979, 112.8844>>)
SET_ENTITY_HEADING(playerCar, 19.2193)
SET_VEHICLE_ON_GROUND_PROPERLY(playerCar)
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<1368.9, 1126.3, 116.6>>, <<1374.7, 1136.7, 111.9>>, 6, <<1372.0696, 1131.5979, 112.8844>>, 19.2193)
vehiclesMovedForStart = TRUE
ENDIF
IF NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(playerCar))
AND NOT IS_THIS_MODEL_A_CAR(GET_ENTITY_MODEL(playerCar))
AND NOT IS_THIS_MODEL_A_BIKE(GET_ENTITY_MODEL(playerCar))
AND NOT IS_THIS_MODEL_A_BICYCLE(GET_ENTITY_MODEL(playerCar))
AND NOT IS_THIS_MODEL_A_QUADBIKE(GET_ENTITY_MODEL(playerCar))
DELETE_VEHICLE(playerCar)
vehiclesMovedForStart = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//Set up Michael on his exit state
IF MikeExitTaskGiven = FALSE
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2500)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
MikeExitTaskGiven = TRUE
ENDIF
ENDIF
//Grab Trevor from the cutscene
IF NOT DOES_ENTITY_EXIST(CSTrev)
CSTrev = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Trevor", PLAYER_TWO))
IF IS_PED_WEARING_HELMET(CSTrev)
REMOVE_PED_HELMET(CSTrev, TRUE)
ENDIF
ENDIF
//Set up Trevor on his exit state
IF trevExitTaskGiven = FALSE
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor")
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
IF DOES_ENTITY_EXIST(CSTrev)
IF NOT IS_PED_INJURED(CSTrev)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(CSTrev, TRUE)
OPEN_SEQUENCE_TASK(seqSequence)
TASK_ENTER_VEHICLE(NULL, TrevCutsceneCar, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_WALK)
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, NULL, <<1360.3199, 1166.0765, 170>>, MISSION_GOTO, 20, 20, -1, 70, 60, -1)
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, PLAYER_PED_ID(), <<0,0,0>>, MISSION_FLEE, 40, -1, -1, 100, 90)
ENDIF
IF NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, GET_ENTITY_COORDS(PLAYER_PED_ID()), MISSION_FLEE, 30, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, -1, -1)
ENDIF
CLOSE_SEQUENCE_TASK(seqSequence)
TASK_PERFORM_SEQUENCE(CSTrev, seqSequence)
CLEAR_SEQUENCE_TASK(seqSequence)
FORCE_PED_AI_AND_ANIMATION_UPDATE(CSTrev)
FORCE_PED_MOTION_STATE(CSTrev, MS_ON_FOOT_WALK)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(TrevCutsceneCar, FALSE)
PRINTSTRING("sequence task given to Trev") PRINTNL()
trevExitTaskGiven = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//*******************Handle everything if i started the mission as Trevor *******************
IF playerStartedAsMichael = FALSE
//Move Trev's car or create it if needed if started as Trev.
IF vehiclesMovedForStart = FALSE
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
SET_ENTITY_COORDS(TrevCutsceneCar, <<1360.5767, 1181.4652, 111.4876>>)
SET_ENTITY_HEADING(TrevCutsceneCar, 180.5927)
SET_VEHICLE_ON_GROUND_PROPERLY(TrevCutsceneCar)
vehiclesMovedForStart = TRUE
ENDIF
IF IS_THIS_MODEL_A_CAR(GET_ENTITY_MODEL(TrevCutsceneCar))
OR IS_THIS_MODEL_A_BIKE(GET_ENTITY_MODEL(TrevCutsceneCar))
OR IS_THIS_MODEL_A_BICYCLE(GET_ENTITY_MODEL(TrevCutsceneCar))
OR IS_THIS_MODEL_A_QUADBIKE(GET_ENTITY_MODEL(TrevCutsceneCar))
SET_ENTITY_COORDS(TrevCutsceneCar, <<1371.1974, 1146.6389, 112.7587>>)
SET_ENTITY_HEADING(TrevCutsceneCar, 177.6714)
SET_VEHICLE_ON_GROUND_PROPERLY(TrevCutsceneCar)
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<1368.5, 1141.0, 116.8>>, <<1374.2, 1152.5, 112.6>>, 6, <<1371.1974, 1146.6389, 112.7587>>, 177.6714)
vehiclesMovedForStart = TRUE
ENDIF
IF NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
AND NOT IS_THIS_MODEL_A_CAR(GET_ENTITY_MODEL(TrevCutsceneCar))
AND NOT IS_THIS_MODEL_A_BIKE(GET_ENTITY_MODEL(TrevCutsceneCar))
AND NOT IS_THIS_MODEL_A_BICYCLE(GET_ENTITY_MODEL(TrevCutsceneCar))
AND NOT IS_THIS_MODEL_A_QUADBIKE(GET_ENTITY_MODEL(TrevCutsceneCar))
DELETE_VEHICLE(TrevCutsceneCar)
ENDIF
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(TrevCutsceneCar)
IF CREATE_PLAYER_VEHICLE(TrevCutsceneCar, CHAR_TREVOR, <<1371.1974, 1146.6389, 112.7587>>, 177.6714)
SET_VEHICLE_DOORS_LOCKED(TrevCutsceneCar, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
vehiclesMovedForStart = TRUE
ENDIF
ENDIF
ENDIF
// //Switch to Michael at the point when they're not on screen
// IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_MICHAEL
// IF IS_CUTSCENE_PLAYING()
// IF GET_CUTSCENE_TIME() > 30809
// MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL)
// TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE)
// ENDIF
// ENDIF
// ENDIF
//Set up Michael on his exit state
IF MikeExitTaskGiven = FALSE
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
//Switch to Michael now for player control
//If switching after watching whole cut.
IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_MICHAEL
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Michael", PLAYER_ZERO))
FORCE_PED_AI_AND_ANIMATION_UPDATE(GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Michael", PLAYER_ZERO)))
FORCE_PED_MOTION_STATE(GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Michael", PLAYER_ZERO)), MS_ON_FOOT_WALK)
ENDIF
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE, TCF_CLEAR_TASK_INTERRUPT_CHECKS)
ENDIF
// SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2500)
// FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
// FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
MikeExitTaskGiven = TRUE
ENDIF
ENDIF
//Handle Trevor on his exit state
If trevExitTaskGiven = FALSE
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor")
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], TRUE)
OPEN_SEQUENCE_TASK(seqSequence)
TASK_ENTER_VEHICLE(NULL, TrevCutsceneCar, -1, VS_DRIVER, PEDMOVEBLENDRATIO_WALK)
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, NULL, <<1360.3199, 1166.0765, 170>>, MISSION_GOTO, 20, 20, -1, 70, 60, -1)
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, PLAYER_PED_ID(), <<0,0,0>>, MISSION_FLEE, 40, -1, -1, 100, 90)
ENDIF
IF NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, GET_ENTITY_COORDS(PLAYER_PED_ID()), MISSION_FLEE, 30, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, -1, -1)
ENDIF
CLOSE_SEQUENCE_TASK(seqSequence)
TASK_PERFORM_SEQUENCE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], seqSequence)
CLEAR_SEQUENCE_TASK(seqSequence)
FORCE_PED_AI_AND_ANIMATION_UPDATE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
FORCE_PED_MOTION_STATE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], MS_ON_FOOT_WALK)
PRINTSTRING("sequence task given to Trev") PRINTNL()
trevExitTaskGiven = TRUE
ENDIF
ENDIF
ELSE
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
OPEN_SEQUENCE_TASK(seqSequence)
TASK_ENTER_VEHICLE(NULL, TrevCutsceneCar, -1, VS_DRIVER, PEDMOVEBLENDRATIO_WALK)
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, NULL, <<1360.3199, 1166.0765, 170>>, MISSION_GOTO, 20, 20, -1, 70, 60, -1)
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, PLAYER_PED_ID(), <<0,0,0>>, MISSION_FLEE, 40, -1, -1, 100, 90)
ENDIF
IF NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, GET_ENTITY_COORDS(PLAYER_PED_ID()), MISSION_FLEE, 30, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, -1, -1)
ENDIF
CLOSE_SEQUENCE_TASK(seqSequence)
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seqSequence)
CLEAR_SEQUENCE_TASK(seqSequence)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
PRINTSTRING("sequence task given to Trev") PRINTNL()
trevExitTaskGiven = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
REPLAY_STOP_EVENT()
REPLAY_RECORD_BACK_FOR_TIME(0.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
IF DOES_ENTITY_EXIST(sSelectorPeds.PedID[SELECTOR_PED_MICHAEL])
IF NOT IS_PED_INJURED(sSelectorPeds.PedID[SELECTOR_PED_MICHAEL])
SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE(sSelectorPeds.PedID[SELECTOR_PED_MICHAEL])
ENDIF
ENDIF
ENDIF
//Move stage on
IF NOT IS_CUTSCENE_ACTIVE()
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
icutsceneStage++
ENDIF
ELSE
//Set flag to start the cutscene skip
bCutsceneBeingSkipped = TRUE
ENDIF
WHILE bCutsceneBeingSkipped = TRUE
SWITCH iskipCutsceneStage
CASE 0
//Fade screen out before making changes
IF NOT IS_SCREEN_FADED_OUT()
OR NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor")
IF IS_SCREEN_FADED_OUT()
PRINTSTRING("iskipCutsceneStage++ Screen is faded out") PRINTNL()
iskipCutsceneStage ++
ENDIF
ELSE
PRINTSTRING("Can't set exit states for Michael and Trevor just now") PRINTNL()
ENDIF
BREAK
CASE 1
IF IS_SCREEN_FADING_IN()
DO_SCREEN_FADE_OUT(0)
ENDIF
//Switch players if player started as trevor
IF GET_CURRENT_PLAYER_PED_ENUM() <> CHAR_MICHAEL
MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL)
TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, FALSE)
PRINTSTRING("Waiting on Michael being switched too") PRINTNL()
ENDIF
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
PRINTSTRING("iskipCutsceneStage++ player is Michael") PRINTNL()
iskipCutsceneStage ++
ENDIF
BREAK
CASE 2
//Set up Trevs car if cutscene is skipped
IF NOT DOES_ENTITY_EXIST(TrevCutsceneCar)
REQUEST_PLAYER_VEH_MODEL(CHAR_TREVOR, VEHICLE_TYPE_CAR)
WHILE NOT HAS_PLAYER_VEH_MODEL_LOADED(CHAR_TREVOR, VEHICLE_TYPE_CAR)
PRINTSTRING("waiting for trevs car to load")
WAIT(0)
ENDWHILE
CREATE_PLAYER_VEHICLE(TrevCutsceneCar, CHAR_TREVOR, <<1371.1974, 1146.6389, 112.7587>>, 177.6714, TRUE, VEHICLE_TYPE_CAR)
SET_VEHICLE_ON_GROUND_PROPERLY(TrevCutsceneCar)
SET_VEHICLE_DOORS_LOCKED(TrevCutsceneCar, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
ENDIF
//Give Trevor and the player tasks
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], TRUE)
OPEN_SEQUENCE_TASK(seqSequence)
TASK_ENTER_VEHICLE(NULL, TrevCutsceneCar, -1, VS_DRIVER, PEDMOVEBLENDRATIO_WALK)
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, NULL, <<1360.3199, 1166.0765, 170>>, MISSION_GOTO, 20, 20, -1, 70, 60, -1)
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, PLAYER_PED_ID(), <<0,0,0>>, MISSION_FLEE, 40, -1, -1, 100, 90)
ENDIF
IF NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, GET_ENTITY_COORDS(PLAYER_PED_ID()), MISSION_FLEE, 30, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, -1, -1)
ENDIF
CLOSE_SEQUENCE_TASK(seqSequence)
TASK_PERFORM_SEQUENCE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], seqSequence)
CLEAR_SEQUENCE_TASK(seqSequence)
FORCE_PED_AI_AND_ANIMATION_UPDATE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
FORCE_PED_MOTION_STATE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], MS_ON_FOOT_WALK)
PRINTSTRING("sequence task given to Trev") PRINTNL()
trevExitTaskGiven = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Give Trevor and the player tasks
IF DOES_ENTITY_EXIST(CSTrev)
IF NOT IS_PED_INJURED(CSTrev)
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(CSTrev, TRUE)
OPEN_SEQUENCE_TASK(seqSequence)
TASK_ENTER_VEHICLE(NULL, TrevCutsceneCar, -1, VS_DRIVER, PEDMOVEBLENDRATIO_WALK)
IF IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, NULL, <<1360.3199, 1166.0765, 170>>, MISSION_GOTO, 20, 20, -1, 70, 60, -1)
TASK_HELI_MISSION(NULL, TrevCutsceneCar, NULL, PLAYER_PED_ID(), <<0,0,0>>, MISSION_FLEE, 40, -1, -1, 100, 90)
ENDIF
IF NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(TrevCutsceneCar))
TASK_VEHICLE_MISSION_COORS_TARGET(NULL, TrevCutsceneCar, GET_ENTITY_COORDS(PLAYER_PED_ID()), MISSION_FLEE, 30, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, -1, -1)
ENDIF
CLOSE_SEQUENCE_TASK(seqSequence)
TASK_PERFORM_SEQUENCE(CSTrev, seqSequence)
CLEAR_SEQUENCE_TASK(seqSequence)
FORCE_PED_AI_AND_ANIMATION_UPDATE(CSTrev)
FORCE_PED_MOTION_STATE(CSTrev, MS_ON_FOOT_WALK)
PRINTSTRING("sequence task given to Trev") PRINTNL()
trevExitTaskGiven = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Michael
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2500)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
SETTIMERA(0)
PRINTSTRING("iskipCutsceneStage++ tasks given") PRINTNL()
iskipCutsceneStage++
BREAK
CASE 3
IF TIMERA() > 1000
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
IF NOT IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
PRINTSTRING("icutsceneStage++ end of cutscene screen fading back in now") PRINTNL()
icutsceneStage++
iskipCutsceneStage++
bCutsceneBeingSkipped = FALSE
ENDIF
BREAK
ENDSWITCH
PRINTSTRING("Waiting for cutscene to finish skipping")
WAIT(0)
ENDWHILE
BREAK
CASE 2
CLEAR_PRINTS()
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
//Clean up Michael's car if it exists
IF DOES_ENTITY_EXIST(playerCar)
IF IS_VEHICLE_DRIVEABLE(playerCar)
SET_VEHICLE_HAS_BEEN_DRIVEN_FLAG(playerCar, FALSE)
SET_VEHICLE_AS_NO_LONGER_NEEDED(playerCar)
ENDIF
ENDIF
//Stop player from entering trevs car
IF DOES_ENTITY_EXIST(TrevCutsceneCar)
IF IS_VEHICLE_DRIVEABLE(TrevCutsceneCar)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(TrevCutsceneCar, FALSE)
ENDIF
ENDIF
//Make sure CsTrev exists now
IF NOT DOES_ENTITY_EXIST(CSTrev)
IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
IF NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
CSTrev = sSelectorPeds.pedID[SELECTOR_PED_TREVOR]
PRINTSTRING("creating CSTrev ") PRINTNL()
ENDIF
ENDIF
ENDIF
REMOVE_CUTSCENE()
bCutsceneActive = FALSE
bCutsceneDone = TRUE
icutsceneStage++
BREAK
ENDSWITCH
WAIT(0)
ENDWHILE
ENDIF
IF stageInitMission()
eMissionStage = STAGE_DRIVE_TO_OBSERVATORY
ENDIF
ENDIF
BREAK
CASE STAGE_DRIVE_TO_OBSERVATORY
IF stageDriveToObservatory()
eMissionStage = STAGE_SHOOT_PLANE
ENDIF
BREAK
CASE STAGE_SHOOT_PLANE
IF stageShootPlane()
eMissionStage = STAGE_CUTSCENE_PLANE_DESCENT
ENDIF
BREAK
CASE STAGE_CUTSCENE_PLANE_DESCENT
IF stageCutscenePlaneDescent()
eMissionStage = STAGE_CHASE_PLANE
ENDIF
BREAK
CASE STAGE_CHASE_PLANE
IF stageChasePlane()
eMissionStage = STAGE_KILL_PASSENGERS
ENDIF
BREAK
CASE STAGE_KILL_PASSENGERS
IF stageKillPassengers()
eMissionStage = STAGE_CUTSCENE_PLANE_CRASH
ENDIF
BREAK
CASE STAGE_CUTSCENE_PLANE_CRASH
DISABLE_FIRST_PERSON_CAMERA_DURING_TREVOR_SWITCH_SCENE()
IF stageCutscenePlaneCrash()
eMissionStage = STAGE_DESTROY_SNIPER
ENDIF
BREAK
CASE STAGE_DESTROY_SNIPER
DISABLE_FIRST_PERSON_CAMERA_DURING_TREVOR_SWITCH_SCENE()
IF stageDestroySniper()
eMissionStage = STAGE_END_CUTSCENE
ENDIF
BREAK
CASE STAGE_END_CUTSCENE
IF StageEndCutscene()
eMissionStage = PASSED_MISSION
ENDIF
BREAK
CASE PASSED_MISSION
MissionPassed()
BREAK
ENDSWITCH
//anything that needs to be called every frame the mission is running.
IF missionCanFail = TRUE
FailCheck()
ENDIF
IF eMissionStage = STAGE_DRIVE_TO_OBSERVATORY
OR eMissionStage = STAGE_SHOOT_PLANE
OR eMissionStage = STAGE_CUTSCENE_PLANE_DESCENT
IF RemoteSniperNeedsUpdated = TRUE
UPDATE_REMOTE_SNIPER(sSniperData)
IF bCamNearClipSet = FALSE
IF DOES_CAM_EXIST(sSniperData.cam_rifle)
SET_CAM_NEAR_CLIP(sSniperData.cam_rifle, 1.0)
bCamNearClipSet = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//Stats
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
AND NOT IS_PED_IN_ANY_TAXI(PLAYER_PED_ID())
PlayerStatCar = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
ENDIF
IF DOES_ENTITY_EXIST(PlayerStatCar)
IF IS_VEHICLE_DRIVEABLE(PlayerStatCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), PlayerStatCar)
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(PlayerStatCar)
ENDIF
ENDIF
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
Debug_Options()
// UPDATE_WIDGETS()
// UPDATE_SPLINE_CAM_WIDGETS(scsPlaneShotScene)
// UPDATE_SPLINE_CAM_WIDGETS(scsPlaneToBike)
sMissionName = "Martin 1"
IF LAUNCH_MISSION_STAGE_MENU(SkipMenuStruct, iReturnStage, 0, FALSE, sMissionName)
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
IF iReturnStage = 0
eMissionStage = STAGE_INIT_MISSION
ENDIF
IF iReturnStage = 1
eMissionStage = STAGE_DRIVE_TO_OBSERVATORY
ENDIF
IF iReturnStage = 2
eMissionStage = STAGE_SHOOT_PLANE
ENDIF
IF iReturnStage = 3
eMissionStage = STAGE_CUTSCENE_PLANE_DESCENT
ENDIF
IF iReturnStage = 4
eMissionStage = STAGE_CHASE_PLANE
ENDIF
IF iReturnStage = 5
eMissionStage = STAGE_KILL_PASSENGERS
ENDIF
IF iReturnStage = 6
eMissionStage = STAGE_CUTSCENE_PLANE_CRASH
ENDIF
IF iReturnStage = 7
eMissionStage = STAGE_DESTROY_SNIPER
ENDIF
IF iReturnStage = 8
eMissionStage = STAGE_END_CUTSCENE
ENDIF
IF iReturnStage = 9
eMissionStage = PASSED_MISSION
ENDIF
manageSkip()
iStageSection = 0
bStageSetup = FALSE
ENDIF
IF JSkip
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
SWITCH eMissionStage
CASE STAGE_INIT_MISSION
PRINTSTRING("JSKIPPING FROM STAGE_INIT_MISSION TO STAGE_DRIVE_TO_OBSERVATORY ") PRINTNL()
eMissionStage = STAGE_DRIVE_TO_OBSERVATORY
BREAK
CASE STAGE_DRIVE_TO_OBSERVATORY
PRINTSTRING("JSKIPPING FROM STAGE_DRIVE_TO_OBSERVATORY TO STAGE_SHOOT_PLANE ") PRINTNL()
eMissionStage = STAGE_SHOOT_PLANE
BREAK
CASE STAGE_SHOOT_PLANE
PRINTSTRING("JSKIPPING FROM STAGE_SHOOT_PLANE TO STAGE_CUTSCENE_PLANE_DESCENT ") PRINTNL()
eMissionStage = STAGE_CUTSCENE_PLANE_DESCENT
BREAK
CASE STAGE_CUTSCENE_PLANE_DESCENT
PRINTSTRING("JSKIPPING FROM STAGE_CUTSCENE_PLANE_DESCENT TO STAGE_CHASE_PLANE ") PRINTNL()
eMissionStage = STAGE_CHASE_PLANE
BREAK
CASE STAGE_CHASE_PLANE
PRINTSTRING("JSKIPPING FROM STAGE_CHASE_PLANE TO STAGE_KILL_PASSENGERS ") PRINTNL()
eMissionStage = STAGE_KILL_PASSENGERS
BREAK
CASE STAGE_KILL_PASSENGERS
PRINTSTRING("JSKIPPING FROM STAGE_KILL_PASSENGERS TO STAGE_CUTSCENE_PLANE_CRASH ") PRINTNL()
eMissionStage = STAGE_CUTSCENE_PLANE_CRASH
BREAK
CASE STAGE_CUTSCENE_PLANE_CRASH
PRINTSTRING("JSKIPPING FROM STAGE_CUTSCENE_PLANE_CRASH TO STAGE_DESTROY_SNIPER ") PRINTNL()
eMissionStage = STAGE_DESTROY_SNIPER
BREAK
CASE STAGE_DESTROY_SNIPER
PRINTSTRING("JSKIPPING FROM STAGE_DESTROY_SNIPER TO STAGE_END_CUTSCENE ") PRINTNL()
eMissionStage = STAGE_END_CUTSCENE
BREAK
CASE STAGE_END_CUTSCENE
PRINTSTRING("JSKIPPING FROM STAGE_END_CUTSCENE TO PASSED_MISSION ") PRINTNL()
eMissionStage = PASSED_MISSION
BREAK
ENDSWITCH
manageSkip()
bStageSetup = FALSE
iStageSection = 0
JSkip = FALSE
ENDIF
IF PSkip
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(0)
ENDIF
SWITCH eMissionStage
CASE STAGE_DRIVE_TO_OBSERVATORY
eMissionStage = STAGE_DRIVE_TO_OBSERVATORY
BREAK
CASE STAGE_SHOOT_PLANE
eMissionStage = STAGE_DRIVE_TO_OBSERVATORY
BREAK
CASE STAGE_CUTSCENE_PLANE_DESCENT
eMissionStage = STAGE_SHOOT_PLANE
BREAK
CASE STAGE_CHASE_PLANE
eMissionStage = STAGE_CUTSCENE_PLANE_DESCENT
BREAK
CASE STAGE_KILL_PASSENGERS
eMissionStage = STAGE_CHASE_PLANE
BREAK
CASE STAGE_CUTSCENE_PLANE_CRASH
eMissionStage = STAGE_KILL_PASSENGERS
BREAK
CASE STAGE_DESTROY_SNIPER
eMissionStage = STAGE_CUTSCENE_PLANE_CRASH
BREAK
CASE STAGE_END_CUTSCENE
eMissionStage = STAGE_DESTROY_SNIPER
BREAK
ENDSWITCH
manageSkip()
bStageSetup = FALSE
iStageSection = 0
PSkip = FALSE
ENDIF
#ENDIF
WAIT(0)
ENDWHILE
MissionCleanup()
ENDSCRIPT