//╔═════════════════════════════════════════════════════════════════════════════╗ //║ ║ //║ 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, <> + 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 = <> 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) //I�m 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>>, <>, 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((<>), fHavierZ) IF HAS_MODEL_LOADED(G_M_Y_MEXGANG_01) // endGuy[0] = CREATE_PED(PEDTYPE_MISSION, G_M_Y_MEXGANG_01, <>, 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