8758 lines
442 KiB
Python
Executable File
8758 lines
442 KiB
Python
Executable File
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : Nigel2.sc
|
|
// AUTHOR : Ahron Mason
|
|
// DESCRIPTION : Trevor helps Nigel and Mrs Thornhill kidnap a celebrity
|
|
// Car chase
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
|
|
//Compile out Title Update changes to header functions.
|
|
//Must be before includes.
|
|
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "building_control_public.sch"
|
|
USING "chase_hint_cam.sch" CHASE_HINT_CAM_STRUCT localChaseHintCamStruct
|
|
USING "event_public.sch"
|
|
USING "initial_scenes_Nigel.sch" //needed for call to SetupScene_NIGEL_2 to setup scene again when z / p skipping back to start of the mission
|
|
USING "taxi_functions.sch"
|
|
USING "commands_recording.sch"
|
|
#IF IS_DEBUG_BUILD
|
|
USING "select_mission_stage.sch"
|
|
#ENDIF
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// CONSTANTS FOR UBER PLAYBACK
|
|
//USING "traffic_default_values.sch" // this must be included before traffic.sch NOTE: when using uber, revert to below Constants instead
|
|
// total should not exceed 225
|
|
CONST_INT TOTAL_NUMBER_OF_TRAFFIC_CARS 85
|
|
CONST_INT TOTAL_NUMBER_OF_PARKED_CARS 70
|
|
CONST_INT TOTAL_NUMBER_OF_SET_PIECE_CARS 70
|
|
// total should not exceed 12
|
|
CONST_INT MAX_NUMBER_OF_TRAFFIC_CARS_PLAYING_BACK 15
|
|
CONST_INT MAX_NUMBER_OF_SET_PIECE_CARS_PLAYING_BACK 11
|
|
CONST_INT MAX_NUMBER_OF_PARKED_CARS_PLAYING_BACK 10
|
|
USING "traffic.sch"
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// :ENUMS:
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE: Mission stages
|
|
ENUM MISSION_STAGE
|
|
MISSION_STAGE_INTRO_MOCAP_SCENE,
|
|
MISSION_STAGE_CHASE_TARGET_IN_VEHICLE,
|
|
MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE,
|
|
MISSION_STAGE_END_CUTSCENE_MOCAP,
|
|
MISSION_STAGE_MISSION_PASSED,
|
|
//Additional stages
|
|
MISSION_STAGE_MISSION_FAILED_WAIT_FOR_FADE,
|
|
//debug stages
|
|
MISSION_STAGE_DEBUG_RECORD_CHASE_ROUTE,
|
|
MISSION_STAGE_DEBUG_PLAYBACK_CHASE_ROUTE,
|
|
MISSION_STAGE_DEBUG,
|
|
MISSION_STAGE_DEBUG_HOPSITAL,
|
|
MISSION_STAGE_DEBUG_HOPSITAL_DOORS
|
|
ENDENUM
|
|
|
|
/// PURPOSE: each mission stage uses these substages
|
|
ENUM SUB_STAGE
|
|
SS_SETUP,
|
|
SS_UPDATE,
|
|
SS_CLEANUP
|
|
ENDENUM
|
|
|
|
/// PURPOSE: cutscene stages
|
|
ENUM CUTSCENE_ENUM
|
|
CE_START_CUTSCENE,
|
|
CE_CAMERA_1,
|
|
CE_CAMERA_2,
|
|
CE_CAMERA_3,
|
|
CE_CAMERA_4,
|
|
CE_CAMERA_5,
|
|
CE_SKIPPED_SCENE
|
|
ENDENUM
|
|
|
|
/// PURPOSE: fail conditions
|
|
ENUM FAILED_REASON_ENUM
|
|
FAILED_DEFAULT = 0,
|
|
FAILED_TARGET_DIED,
|
|
FAILED_TARGET_ESCAPED,
|
|
FAILED_NIGEL_VEHICLE_WRECKED,
|
|
FAILED_NIGEL_ATTACKED,
|
|
FAILED_NIGEL_DIED,
|
|
FAILED_MRS_THORNHILL_ATTACKED,
|
|
FAILED_MRS_THORNHILL_DIED,
|
|
FAILED_LEFT_NIGEL_AND_MRS_T_BEHIND,
|
|
FAILED_LEFT_NIGEL_BEHIND,
|
|
FAILED_LEFT_MRS_T_BEHIND
|
|
ENDENUM
|
|
|
|
/// PURPOSE: used to update the scripted peds on the chase routes behaviour
|
|
ENUM SCRIPTED_PED_STATE
|
|
SPS_INIT,
|
|
SPS_BEGIN_ROUTINE,
|
|
SPS_AWARE_OF_TARGET,
|
|
SPS_AWARE_OF_PLAYER,
|
|
SPS_REACT_TO_TARGET,
|
|
SPS_REACT_TO_PLAYER,
|
|
SPS_READY_FOR_CLEANUP,
|
|
SPS_CLEANED_UP
|
|
ENDENUM
|
|
|
|
/// PURPOSE: state machine for handling the interior for the chase
|
|
ENUM HOSPITAL_INTERIOR_STATE
|
|
HIS_SET_INTERIOR_IPLS_FOR_CHASE,
|
|
HIS_PIN_INTERIOR_IN_MEMORY,
|
|
HIS_SET_ENTITY_SET_FOR_CHASE,
|
|
HIS_REFRESH_INTERIOR,
|
|
//HIS_REQUEST_NEW_LOAD_SCENE_AT_INTERIOR,
|
|
//HIS_ACTIVE_NEW_LOAD_SCENE_AT_INTERIOR,
|
|
//HIS_CLEANUP_NEW_LOAD_SCENE_AT_INTERIOR,
|
|
HIS_READY,
|
|
HIS_END
|
|
ENDENUM
|
|
|
|
/// PURPOSE: used for hospital door object state machine
|
|
ENUM HOSPITAL_DOORS_OBJECT_STATE
|
|
HDO_CREATE,
|
|
HDO_WAIT_FOR_DELETE,
|
|
HDO_END
|
|
ENDENUM
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// :STRUCTS
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE: used by main scripted vehicles in the mission
|
|
STRUCT STRUCT_MISSION_VEHICLE
|
|
VEHICLE_INDEX vehicle
|
|
MODEL_NAMES model
|
|
BLIP_INDEX blip
|
|
VECTOR vSpawn
|
|
FLOAT fSpawnHeading
|
|
ENDSTRUCT
|
|
|
|
/// PURPOSE: used by all the main scripted peds in the mission
|
|
STRUCT STRUCT_MISSION_PED
|
|
PED_INDEX ped
|
|
MODEL_NAMES model
|
|
BLIP_INDEX blip
|
|
VECTOR vSpawn
|
|
FLOAT fSpawnHeading
|
|
ENDSTRUCT
|
|
|
|
/// PURPOSE: used by the scripted peds who are seen along the chase route
|
|
STRUCT STRUCT_SIMPLE_MISSION_PED
|
|
PED_INDEX ped
|
|
SCRIPTED_PED_STATE eState = SPS_INIT
|
|
ENDSTRUCT
|
|
|
|
/// PURPOSE: used by the scripted vehicle who are seen along the chase route
|
|
STRUCT STRUCT_SIMPLE_MISSION_VEHICLE
|
|
VEHICLE_INDEX vehicle
|
|
MODEL_NAMES model
|
|
ENDSTRUCT
|
|
|
|
STRUCT STRUCT_MISSION_OBJECT
|
|
OBJECT_INDEX objectIndex
|
|
VECTOR vPos
|
|
VECTOR vRot
|
|
MODEL_NAMES modelName = DUMMY_MODEL_FOR_SCRIPT
|
|
ENDSTRUCT
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// :CONSTANTS
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
CONST_FLOAT NIGEL2_FLASH_CHASE_BLIP_PERCENTAGE 0.7 // targets blip flashes when he gets further than this percentage away to NIGEL2_TARGET_ESCAPED_DISTANCE
|
|
CONST_FLOAT NIGEL2_TARGET_ESCAPED_DISTANCE 200.0 // fail distance for target escaping
|
|
CONST_FLOAT NIGEL2_PLAYER_CLOSE_TO_TARGET_CRASHED 25.0 // dist check player to target for going to park alongside Di Napoli stage
|
|
CONST_FLOAT PLAYER_LEFT_NIGEL_AND_MRS_T_BEHIND_DISTANCE 100.0 // fail distance for leaving nigel and mrs t behind
|
|
CONST_FLOAT PLAYER_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE 60.0 // fail warning distance for leaving nigel and mrs t behind
|
|
CONST_FLOAT RESET_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE 30.0 // reset fail distance message for leaving nigel and mrs t behind
|
|
CONST_FLOAT NIGEL2_START_AREA_PEDS_TRIGGER_TIME 500.0 // point in the uber playback we setup the ambient scripted peds aroudn the chase start area
|
|
CONST_FLOAT NIGEL2_HOSPITAL_PEDS_TRIGGER_TIME 111161.0 // point in the uber playback we setup the ambient scripted peds in the hospital
|
|
CONST_FLOAT NIGEL2_RAYFIRE_HOSPITAL_DOORS_TRIGGER_POINT 114436.0 // point in the uber playback we play the rayfire hospital doors anim
|
|
CONST_FLOAT NIGEL2_HOSPITAL_WALL_SMASH_01_TRIGGER_POINT 117166.0 // point in the uber playback we trigger wall smash 01 sfx
|
|
CONST_FLOAT NIGEL2_HOSPITAL_WALL_SMASH_02_TRIGGER_POINT 117736.0 // point in the uber playback we trigger wall smash 02 sfx
|
|
CONST_FLOAT NIGEL2_HOSPITAL_WALL_SMASH_03_TRIGGER_POINT 118496.0 // point in the uber playback we trigger wall smash 03 sfx
|
|
CONST_FLOAT NIGEL2_HOSPITAL_WINDOW_SMASH_TRIGGER_POINT 120986.0 // point in the uber playback we trigger window smash sfx
|
|
CONST_FLOAT NIGEL2_HOSPITAL_CRASH_SCREAMS_01_TRIGGER_POINT 114936.0 // point in the uber playback we trigger scream 01 sfx
|
|
CONST_FLOAT NIGEL2_HOSPITAL_CRASH_SCREAMS_02_TRIGGER_POINT 118186.0 // point in the uber playback we trigger scream 02 sfx
|
|
CONST_FLOAT NIGEL2_TARGET_VEHICLE_VISUAL_DAMAGE_POINT 124136.0 // point in the uber playback we apply damage to the target vehicle for smashing into the wall at the crash site
|
|
CONST_FLOAT NIGEL2_DEFAULT_UBER_PLAYBACK_SPEED 1.0 // can be tweaked to change the overal speed of the uber playback
|
|
CONST_FLOAT NIGEL2_UBER_TIME_STEP_01 43.5 // time to change veh rec start times to accomidate change rec for tunnel section
|
|
CONST_FLOAT NIGEL2_UBER_TIME_STEP_02 78.5 // time to change veh rec start times to accomidate change rec for cross roads
|
|
CONST_FLOAT NIGEL2_UBER_PLAYBACK_TIME_STEP_POINT_01 41011.0 // playeback time in original rec first step occured
|
|
CONST_FLOAT NIGEL2_UBER_PLAYBACK_TIME_STEP_POINT_02 77018.5 // playeback time in original rec first step occured
|
|
CONST_INT NIGEL2_TOTAL_DIALOGUE_LINES_GET_IN_NIGEL_CAR 2 // max dialogue lines / convos for initial state get in car
|
|
CONST_INT NIGEL2_TOTAL_IMPORTANT_DIALOGUE_DURING_CHASE 8 // max dialogue lines / convos during car chase which are important
|
|
CONST_INT NIGEL2_TOTAL_CATCH_UP_DIALOGUE_DURING_CHASE 3 // max dialogue lines / convos for catch up dialogue
|
|
CONST_INT NIGEL2_TOTAL_BANTER_DIALOGUE_DURING_CHASE 7 // max dialogue lines / convos for banter during chase
|
|
CONST_INT NIGEL2_MISSION_VEHICLES_HEALTH 2000 // initial vehicle health set on Nigel and target's vehicle
|
|
CONST_INT NIGEL2_TOTAL_UBER_VEHICLE_HORNS_TO_PROCESS 12 // horns done in script
|
|
CONST_INT NIGEL2_TOTAL_START_AREA_SCRIPTED_VEHICLES 3 // scripted vehicles at the start area, not part of the uber recording
|
|
CONST_INT TOTAL_HOSPITAL_PEDS 9 // scripted peds at the hospital
|
|
CONST_INT TOTAL_START_AREA_PEDS 4 // scripted peds at the start area
|
|
CONST_INT CP_NIGEL2_START_CHASE 0 // 1st mission replay checkpoint
|
|
CONST_INT CP_NIGEL2_MISSION_PASSED 1 // 2nd mission replay checkpoint - used by shitskip
|
|
CONST_INT Z_SKIP_INTRO_MOCAP 0
|
|
CONST_INT Z_SKIP_START_CHASE 1
|
|
CONST_INT Z_SKIP_PARK_CAR_NEXT_TO_TARGET 2
|
|
CONST_INT Z_SKIP_OUTRO_CUTSCENE 3
|
|
CONST_INT Z_SKIP_MISSION_PASSED 4
|
|
CONST_INT NIGEL2_MUSIC_EVENT_START 0
|
|
CONST_INT NIGEL2_MUSIC_EVENT_CAR 1
|
|
CONST_INT NIGEL2_MUSIC_EVENT_JUMP 2
|
|
CONST_INT NIGEL2_MUSIC_EVENT_STOP 3
|
|
CONST_INT NIGEL2_TOTAL_SCENARIO_BLOCKING_AREAS_CHASE_ROUTE 5
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// :VARIABLES:
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
MISSION_STAGE eMissionStage = MISSION_STAGE_INTRO_MOCAP_SCENE // MISSION_STAGE_INTRO_MOCAP_SCENE // MISSION_STAGE_INTRO_MOCAP_SCENE MISSION_STAGE_DEBUG_RECORD_CHASE_ROUTE MISSION_STAGE_DEBUG_PLAYBACK_CHASE_ROUTE MISSION_STAGE_DEBUG MISSION_STAGE_DEBUG_HOPSITAL
|
|
MISSION_STAGE eMissionSkipTargetStage //used in mission checkpoint setup and debug stage skipping
|
|
SUB_STAGE eSubStage = SS_SETUP
|
|
g_structRCScriptArgs sRCLauncherDataLocal
|
|
#IF IS_DEBUG_BUILD//stage skipping
|
|
CONST_INT MAX_SKIP_MENU_LENGTH 5
|
|
MissionStageMenuTextStruct mSkipMenu[MAX_SKIP_MENU_LENGTH]
|
|
#ENDIF
|
|
BOOL bFinishedStageSkipping = TRUE //used to determine if we are mission replay checkpoint skipping or debug skipping
|
|
BOOL bLoadedWorldForStageSkipping = FALSE // flag to say if we haveloaded the world around the player when stage skipping
|
|
BOOL bDoneDialogue_BanterChase[NIGEL2_TOTAL_BANTER_DIALOGUE_DURING_CHASE]
|
|
BOOL bDoneDialogue_CatchUp[NIGEL2_TOTAL_CATCH_UP_DIALOGUE_DURING_CHASE]
|
|
BOOL bDoneDialogue_WrongWaySpecialFail
|
|
BOOL bDoneDialogue_Chase[NIGEL2_TOTAL_IMPORTANT_DIALOGUE_DURING_CHASE]
|
|
BOOL bDoneDialogue_InitialInstruction
|
|
BOOL bDoneDialogue_GetInNigelsVehicle[NIGEL2_TOTAL_DIALOGUE_LINES_GET_IN_NIGEL_CAR]
|
|
BOOL bDoneDialogue_WarnRamming
|
|
BOOL bDoneDialogue_TrevorGetsWantedLevel
|
|
BOOL bDoneDialogue_CopsSeenChasing
|
|
BOOL bDoneDialogue_DrivingOnWrongSideRoad
|
|
BOOL bDoneDialogue_UpsideDownOrAirbourne
|
|
BOOL bDoneObjective_GetBackInVehicle
|
|
BOOL bDoneObjective_Initial_GetInNigelsVehicle
|
|
//BOOL bDoneObjective_WaitForNigelAndMrsT
|
|
BOOL bDoneObjective_WarnLeavingNigelAndMrsT
|
|
BOOL bDoneCleanup_JumpOutHospitalWindow
|
|
BOOL bDoneOneTime_JumpOutHospitalWindow
|
|
BOOL bDone_KillConvoForOutTheVehicleDialogue
|
|
BOOL bDone_PlayerInNigelVehicle_FirstTime
|
|
BOOL bDone_RequestHospitalAudio
|
|
BOOL bDone_StartLocationVehicleHorn
|
|
BOOL bDone_TargetStartChaseRoute
|
|
BOOL bDone_TurnEngineOnForPlayer
|
|
BOOL bDone_UberRecordingCleanupForChaseEnd
|
|
BOOL bDone_UpdateTrashTruckPedModel
|
|
BOOL bDone_UpdateBMXPedModel
|
|
BOOL bDone_UberVehicleHorn[NIGEL2_TOTAL_UBER_VEHICLE_HORNS_TO_PROCESS]
|
|
BOOL bDone_VisualDamageForTargetVehicle
|
|
BOOL bDone_HospitalJumpPaperTrailFX
|
|
BOOL bHadToFadeOutToLoadMissionAssets
|
|
BOOL bHasPTFX_ForHospitalDebrisBeenRequested
|
|
BOOL bIsImportantDialoguePlaying
|
|
BOOL bIsInterruptDialoguePlaying
|
|
BOOL bIsHospitalDebrisEffectActive
|
|
BOOL bStartedPlayBack_ScriptedVehicleAtStartLocation
|
|
BOOL bStatTracker_HasPlayerKeptCloseToDiNapoli
|
|
BOOL bStatTracker_IsNigelVehicleDamageStatActive
|
|
BOOL bStatTracker_HasPlayerInjuredPedWhilstInHospital
|
|
//BOOL bSetHospital_IPL_InteriorLoadedState
|
|
BOOL bHasSetExitStateFromOutroMocapForGameplayCam
|
|
BOOL bRequestedOutroMocap
|
|
BOOL bForceTargetblipFlashThisFrame
|
|
BOOL bSetNigelVehicleHDForMocapExit
|
|
BOOL bTriggerLandingFromJumpSFX
|
|
CAMERA_INDEX camHospitalJump
|
|
FAILED_REASON_ENUM eN2_MissionFailedReason
|
|
INT iHospitalSoundFX_Progress
|
|
INT iPreLoadRecordingsTimer
|
|
INT iRayfireProgress_HospitalDoors
|
|
INT iTimer_DialogueDelay
|
|
INT iTimer_TrevorGetBackInCarDialogue
|
|
INT iTimer_NigelVehicleJumpsTimer
|
|
INT iTriggerScriptedPedestriansTimer
|
|
INT iUpdateUberVehicleTweaksTimer
|
|
INT iMissionMusicEventTriggerCounter
|
|
INT iTimer_NigelVehicleStuckOnRoofFail
|
|
INT iSoundID_UberVehicleFakeRevs
|
|
INT iMainCarRecID
|
|
INT iScenarioBlockingAreaStage
|
|
INT iTimer_MissionPassedDelay // added because Nigel has to use waypoint rec to drive off which needs a little time
|
|
INT iTimer_OutroMocapDelay
|
|
INTERIOR_INSTANCE_INDEX HospitalInteriorIndex
|
|
HOSPITAL_INTERIOR_STATE eHospitalInteriorState
|
|
FLOAT fCimematicCamOvverideZoneDepth
|
|
FLOAT fCurrentChaseDistance
|
|
FLOAT fCurrentPlaybackTime
|
|
FLOAT fDistPlayerToNigelVehicle
|
|
FLOAT fMainPlaybackSpeed
|
|
FLOAT fTimeScale_HospitalJump
|
|
MODEL_NAMES mnDefaultPedForVehicle
|
|
MODEL_NAMES mnDoctorMale
|
|
MODEL_NAMES mnScrubsFemale
|
|
MODEL_NAMES mnFemaleStartArea
|
|
STRUCT_MISSION_OBJECT sObjectHospitalDoors
|
|
PED_INDEX pedIndexDialogueInterrupter
|
|
PTFX_ID HospitalDebris_PTFX_ID
|
|
PTFX_ID HospitalJump_PTFX_ID
|
|
RAYFIRE_INDEX rfHospitalDoors
|
|
REL_GROUP_HASH relGroupEnemy
|
|
REL_GROUP_HASH relGroupFriendly
|
|
SCENARIO_BLOCKING_INDEX scenarioBlockingIntroArea
|
|
SCENARIO_BLOCKING_INDEX scenarioBlockingOutroArea
|
|
SCENARIO_BLOCKING_INDEX scenarioBlockingChaseRoute[NIGEL2_TOTAL_SCENARIO_BLOCKING_AREAS_CHASE_ROUTE]
|
|
STRING sNigel2_UberRecordingName = "Nigel2U"
|
|
STRING sNigel2_CarRecNigelOutro = "Nigel2Outro"
|
|
STRING sSceneHandle_MrsThornhill = "Mrs_Thornhill"
|
|
STRING sSceneHandle_Nigel = "Nigel"
|
|
STRING sSceneHandle_Trevor = "Trevor"
|
|
STRING sSceneHandle_AlDiNapoli = GET_AL_DI_NAPOLI_SCENE_HANDLE()
|
|
STRING sSceneHandle_NigelVehicle = "Showroom_Car"
|
|
STRING sSceneHandle_AlDiNapoliVehicle = "EXL_2_abandoned_car"
|
|
structPedsForConversation sDialogue
|
|
STRUCT_MISSION_PED sMrsThornhillPed
|
|
STRUCT_MISSION_PED sNigelPed
|
|
STRUCT_MISSION_PED sTargetPed
|
|
STRUCT_MISSION_VEHICLE sNigelVehicle
|
|
STRUCT_MISSION_VEHICLE sTargetVehicle
|
|
//STRUCT_SIMPLE_MISSION_PED sDogPedSimple
|
|
STRUCT_SIMPLE_MISSION_PED sDefaultPedForScriptedVehicle
|
|
STRUCT_SIMPLE_MISSION_PED sHospitalPedSimple[TOTAL_HOSPITAL_PEDS]
|
|
STRUCT_SIMPLE_MISSION_PED sStartAreaPedSimple[TOTAL_START_AREA_PEDS]
|
|
STRUCT_SIMPLE_MISSION_VEHICLE sStartLocationVehicle[NIGEL2_TOTAL_START_AREA_SCRIPTED_VEHICLES]
|
|
STRUCT_SIMPLE_MISSION_VEHICLE sVehicleForPlayerOnMissionPassed
|
|
HOSPITAL_DOORS_OBJECT_STATE eHospitalDoorsObjectState
|
|
//TEXT_LABEL_23 tl23_CurrentConversation
|
|
TEXT_LABEL_23 tlOutroMocapName = "NMT_2_MCS_2"
|
|
VECTOR vCinematicCamOverrideZone01
|
|
VECTOR vCinematicCamOverrideZone02
|
|
VECTOR vPlayerPos
|
|
//VECTOR vCoords_IPL_PILLBOX_HILL_INTERIOR
|
|
//VECTOR vCoords_IPL_PILLBOX_HILL
|
|
VECTOR vJumpOutHospitalCamCoords
|
|
VECTOR vJumpOutHospitalCamLookAtOffset
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// :DEBUG FUNCS / PROCS / WIDGETS
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
WIDGET_GROUP_ID widgetGroup
|
|
BOOL bDebug_PrintMissionInfoToTTY = FALSE // needs to be false for submit!
|
|
BOOL bDebug_PrintMissionRubberbandInfoToTTY = FALSE // needs to be false for submit!
|
|
BOOL bDebug_PrintHospitalStatTrackInfoToTTY = FALSE // needs to be false for submit!
|
|
BOOL bOutputTargetPlaybackTime = FALSE
|
|
BOOL bDebug_OpenNigelCarBoot = FALSE
|
|
BOOL bDebug_CloseNigelCarBoot = FALSE
|
|
BOOL bDebug_ResetForPlaceInBoot = FALSE
|
|
BOOL bDebug_UnFreezePedInBootPos = FALSE
|
|
VECTOR vDebug_PositionPedInBoot
|
|
VECTOR vDebug_PositionPedInBootOffset = <<-0.2000, -1.8000, -1.0000>>
|
|
VECTOR vDebug_RotationPedInBoot = <<15.0000, -85.0000, 0.0000>>
|
|
BOOL bDebug_OutputPedInBootValues = FALSE
|
|
BOOL bDebug_JustUpdatePedInBootPosAndRot = FALSE
|
|
BOOL bDebug_ApplyGameplayCam_HeadingAndPitch = FALSE
|
|
FLOAT fDebug_GameplayCam_Heading = 0.0
|
|
FLOAT fDebug_GameplayCam_Pitch = 0.0
|
|
BOOL bDebug_GetCurrentGameplayHeadingAndPitch = FALSE
|
|
BOOL bDebug_DoneDeformCar = FALSE
|
|
VECTOR vDebug_CarDamageCoords = << 0.0, 0.0, 0.0 >>
|
|
FLOAT fDebug_CarDamageAmount = 1.0
|
|
FLOAT fDebug_CarDeformationAmount = 1.0
|
|
BOOL bDebug_PrintPlayerVehicleInfo = FALSE
|
|
INT iDebug_TrafficCarToTurnCollisionOffOn = 0
|
|
INT iDebug_SetPieceCarToTurnCollisionOffOn = 0
|
|
BOOL bDebug_SelectedTrafficCarHasCollision = TRUE
|
|
BOOL bDebug_SelectedSetPieceCarHasCollision = TRUE
|
|
VECTOR vDebug_TempPlayerVehicleSetPosition = << 0.0, 0.0, 0.0 >>
|
|
BOOL bDebug_ApplyPositionValueToPlayerVehicle = FALSE
|
|
FLOAT fDebug_TempPlayerVehicleQuatX
|
|
FLOAT fDebug_TempPlayerVehicleQuatY
|
|
FLOAT fDebug_TempPlayerVehicleQuatZ
|
|
FLOAT fDebug_TempPlayerVehicleQuatW
|
|
BOOL bDebug_ApplyQuaternionValuesToPlayerVehicle = FALSE
|
|
BOOL bDebug_SnapPlayerVehicleToGround = FALSE
|
|
PTFX_ID DEBUG_HospitalDebris_PTFX_ID
|
|
VEHICLE_INDEX vehDebug_Ghost
|
|
//FLOAT fDebug_CatchUpMultiplier
|
|
INT iDebug_AdditionalAIDriveTime = 0
|
|
BOOL bDebug_ToggleGhostCarVisible = FALSE
|
|
BOOL bDebug_StartHospitalDebris_PTFX_ID = FALSE
|
|
BOOL bDebug_OutputRayfireHospitalDoorsProgress = FALSE
|
|
BOOL bDebug_OutputRayfireHospitalDoorsCurrentState = FALSE
|
|
BOOL bDebug_DisplayStatTrackerInfo_PlayerCloseToTarget = FALSE
|
|
BOOL bDebug_OverrideStatTracker_PlayerCloseToTargetRange = FALSE
|
|
FLOAT fDebug_StatTracker_PlayerCloseToTargetRange = 100
|
|
BOOl bDebug_CheckPlayerInsideHospital = FALSE
|
|
INT iDebug_IPL_PillBox_State = 0
|
|
BOOL bDebug_Set_IPL_PillBox_State = FALSE
|
|
INT iDebug_ES_PillBox_State = 0
|
|
BOOL bDebug_Set_ES_PillBox_State = FALSE
|
|
VECTOR vDebug_HospitalJumpFXOffset = << 0.0, -1.5, -0.4 >>
|
|
VECTOR vDebug_HospitalJumpFXRotation = << 0.0, 0.0, 0.0 >>
|
|
FLOAT fDebug_HospitalJumpFXScale = 0.3
|
|
BOOL bDebug_StartHospitalJumpFX = FALSE
|
|
|
|
BOOL bDebug_SetupMission_DebugStage = FALSE
|
|
FLOAT fDebug_OverrideMinTimeScale = 0.25
|
|
BOOL bDebug_OverrideMinTimeScale = FALSE
|
|
FLOAT fDebug_TimeScaleStep_ModifierDecrease = 0.9
|
|
BOOL bDebug_OverrideTimeScaleStepModifier_Decrease = FALSE
|
|
FLOAT fDebug_TimeScaleStep_ModifierIncrease = 2.0
|
|
BOOL bDebug_OverrideTimeScaleStepModifier_Increase = FALSE
|
|
|
|
/// PURPOSE:
|
|
/// My debug mission widget groups, which get created in RAG->SCRIPT
|
|
PROC SETUP_MISSION_WIDGET()
|
|
widgetGroup = START_WIDGET_GROUP("NIGEL 2 WIDGETS")
|
|
START_WIDGET_GROUP("General")
|
|
ADD_WIDGET_BOOL("TTY Toggle - Print Mission Debug Info", bDebug_PrintMissionInfoToTTY)
|
|
ADD_WIDGET_BOOL("TTY Toggle - Print Rubberbanding Debug Info", bDebug_PrintMissionRubberbandInfoToTTY)
|
|
ADD_WIDGET_BOOL("TTY Toggle - Print hospital stat track Debug Info", bDebug_PrintHospitalStatTrackInfoToTTY)
|
|
ADD_WIDGET_BOOL("Debug Output Rayfire Hospital Doors Progress", bDebug_OutputRayfireHospitalDoorsProgress)
|
|
ADD_WIDGET_BOOL("Debug Output Rayfire Hospital Doors Current state every frame", bDebug_OutputRayfireHospitalDoorsCurrentState)
|
|
ADD_WIDGET_BOOL("Apply Gameplay Cam Heading And Pitch", bDebug_ApplyGameplayCam_HeadingAndPitch)
|
|
ADD_WIDGET_FLOAT_SLIDER("Gameplay Cam Heading -", fDebug_GameplayCam_Heading, -360.0, 360.0, 0.1)
|
|
ADD_WIDGET_FLOAT_SLIDER("Gameplay Cam Pitch -", fDebug_GameplayCam_Pitch, -360.0, 360.0, 0.1)
|
|
ADD_WIDGET_BOOL("Print Current Gameplay Cam Heading and Pitch", bDebug_GetCurrentGameplayHeadingAndPitch)
|
|
ADD_WIDGET_BOOL("Test player inside hospital interior", bDebug_CheckPlayerInsideHospital)
|
|
ADD_WIDGET_BOOL("Debug Display Stat Tracker Info - Player Close To Target Range", bDebug_DisplayStatTrackerInfo_PlayerCloseToTarget)
|
|
ADD_WIDGET_BOOL("Debug Override Stat Tracker - Player Close To Target Range", bDebug_OverrideStatTracker_PlayerCloseToTargetRange)
|
|
ADD_WIDGET_FLOAT_SLIDER("Debug Stat Tracker Player Close To Target Range = ", fDebug_StatTracker_PlayerCloseToTargetRange, 0.0, 300.0, 0.1)
|
|
ADD_WIDGET_INT_SLIDER("Traffic Car To Turn Off Collision On ID - ", iDebug_TrafficCarToTurnCollisionOffOn, 0, 150, 1)
|
|
ADD_WIDGET_BOOL("Toggle Selected Traffic Car's Collision - ", bDebug_SelectedTrafficCarHasCollision)
|
|
ADD_WIDGET_INT_SLIDER("Set Piece Car To Turn Off Collision On ID - ", iDebug_SetPieceCarToTurnCollisionOffOn, 0, 150, 1)
|
|
ADD_WIDGET_BOOL("Toggle Selected Set Piece Car's Collision - ", bDebug_SelectedSetPieceCarHasCollision)
|
|
ADD_WIDGET_BOOL("Start hospital debris PTFX", bDebug_StartHospitalDebris_PTFX_ID)
|
|
|
|
ADD_WIDGET_INT_SLIDER("iDebug_IPL_PillBox_State : ", iDebug_IPL_PillBox_State, 0, 150, 1)
|
|
ADD_WIDGET_BOOL("bDebug_Set_IPL_PillBox_State", bDebug_Set_IPL_PillBox_State)
|
|
ADD_WIDGET_INT_SLIDER("iDebug_ES_PillBox_State : ", iDebug_ES_PillBox_State, 0, 150, 1)
|
|
ADD_WIDGET_BOOL("bDebug_Set_ES_PillBox_State", bDebug_Set_ES_PillBox_State)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("Force Cinematic Cam Zone Depth - ", fCimematicCamOvverideZoneDepth, -360.0, 360.0, 0.1)
|
|
ADD_WIDGET_VECTOR_SLIDER("Force Cinematic Cam Zone Pos 1 - ", vCinematicCamOverrideZone01, -1000, 1000, 0.1)
|
|
ADD_WIDGET_VECTOR_SLIDER("Force Cinematic Cam Zone Pos 2 - ", vCinematicCamOverrideZone02, -1000, 1000, 0.1)
|
|
|
|
ADD_WIDGET_BOOL("bDebug_StartHospitalJumpFX", bDebug_StartHospitalJumpFX)
|
|
ADD_WIDGET_VECTOR_SLIDER("vDebug_HospitalJumpFXOffset : ", vDebug_HospitalJumpFXOffset, -1000, 1000, 0.1)
|
|
ADD_WIDGET_VECTOR_SLIDER("vDebug_HospitalJumpFXRotation : ", vDebug_HospitalJumpFXRotation, -1000, 1000, 0.1)
|
|
ADD_WIDGET_FLOAT_SLIDER("fDebug_HospitalJumpFXScale : ", fDebug_HospitalJumpFXScale, 0.0, 5.0, 0.001)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Hospital Window Jump")
|
|
|
|
ADD_WIDGET_BOOL("Set Mission To Debug Window Jump Stage", bDebug_SetupMission_DebugStage)
|
|
|
|
ADD_WIDGET_VECTOR_SLIDER("vJumpOutHospitalCamCoords : ", vJumpOutHospitalCamCoords, -1000, 1000, 0.1)
|
|
ADD_WIDGET_VECTOR_SLIDER("vJumpOutHospitalCamLookAtOffset : ", vJumpOutHospitalCamLookAtOffset, -1000, 1000, 0.1)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("Set value : Min Time Scale Override (1.0 is normal) : ", fDebug_OverrideMinTimeScale, 0.0, 1.0, 0.001)
|
|
ADD_WIDGET_BOOL("Toggle - use Min time scale override", bDebug_OverrideMinTimeScale)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("Set value : Time Scale Step Modifier (to min scale) : ", fDebug_TimeScaleStep_ModifierDecrease, 0.0, 5.0, 0.001)
|
|
ADD_WIDGET_BOOL("Toggle - use time scale modifier (to min scale)", bDebug_OverrideTimeScaleStepModifier_Decrease)
|
|
|
|
ADD_WIDGET_FLOAT_SLIDER("Set value : Time Scale Step Modifier (back to normal scale) : ", fDebug_TimeScaleStep_ModifierIncrease, 0.0, 5.0, 0.001)
|
|
ADD_WIDGET_BOOL("Toggle - use time scale modifier (back to normal scale)", bDebug_OverrideTimeScaleStepModifier_Increase)
|
|
STOP_WIDGET_GROUP()
|
|
/* START_WIDGET_GROUP("Rerecord main car")
|
|
ADD_WIDGET_BOOL("TTY Toggle - toggle ghost car visible", bDebug_ToggleGhostCarVisible)
|
|
ADD_WIDGET_INT_SLIDER("iDebug_AdditionalAIDriveTime : ", iDebug_AdditionalAIDriveTime, -5000, 5000, 1)
|
|
STOP_WIDGET_GROUP()*/
|
|
/*
|
|
START_WIDGET_GROUP("Placement of Ped in Boot")
|
|
ADD_WIDGET_BOOL("Open Nigel's car boot", bDebug_OpenNigelCarBoot)
|
|
ADD_WIDGET_BOOL("Close Nigel's car boot", bDebug_CloseNigelCarBoot)
|
|
ADD_WIDGET_BOOL("Reset for ped positioning in boot", bDebug_ResetForPlaceInBoot)
|
|
ADD_WIDGET_BOOL("Unfreeze ped", bDebug_UnFreezePedInBootPos)
|
|
ADD_WIDGET_BOOL("Just update pos and rot", bDebug_JustUpdatePedInBootPosAndRot)
|
|
ADD_WIDGET_VECTOR_SLIDER("Position Offset from car of ped", vDebug_PositionPedInBootOffset, -4000.0, 4000.0, 0.1)
|
|
ADD_WIDGET_VECTOR_SLIDER("Rotation of ped", vDebug_RotationPedInBoot, -4000.0, 4000.0, 0.1)
|
|
ADD_WIDGET_BOOL("print ped in boot info to Temp_debug.txt", bDebug_OutputPedInBootValues)
|
|
STOP_WIDGET_GROUP()
|
|
*/
|
|
/*
|
|
START_WIDGET_GROUP("Configure Damage applied to target vehicle in crash scene")
|
|
ADD_WIDGET_BOOL("Apply deform the target car.", bDebug_DoneDeformCar)
|
|
ADD_WIDGET_VECTOR_SLIDER("Car Damage Coords - ", vDebug_CarDamageCoords, -1000.0, 1000.0, 0.1)
|
|
ADD_WIDGET_FLOAT_SLIDER("Car Damage amount - ", fDebug_CarDamageAmount, -50.0, 10000.0, 1.0)
|
|
ADD_WIDGET_FLOAT_SLIDER("Car Deformation amount - ", fDebug_CarDeformationAmount, -50.0, 10000.0, 1.0)
|
|
STOP_WIDGET_GROUP()
|
|
*/
|
|
START_WIDGET_GROUP("Player vehicle positioning stuff")
|
|
ADD_WIDGET_VECTOR_SLIDER("Set player vehicle position vector - ", vDebug_TempPlayerVehicleSetPosition, -10000, 10000, 0.0001)
|
|
ADD_WIDGET_BOOL("Apply above position to player's vehicle", bDebug_ApplyPositionValueToPlayerVehicle)
|
|
ADD_WIDGET_FLOAT_SLIDER("Set player vehicle quaternion X value -", fDebug_TempPlayerVehicleQuatX, -3.0, 3.0, 0.0001)
|
|
ADD_WIDGET_FLOAT_SLIDER("Set player vehicle quaternion Y value -", fDebug_TempPlayerVehicleQuatY, -3.0, 3.0, 0.0001)
|
|
ADD_WIDGET_FLOAT_SLIDER("Set player vehicle quaternion Z value -", fDebug_TempPlayerVehicleQuatZ, -3.0, 3.0, 0.0001)
|
|
ADD_WIDGET_FLOAT_SLIDER("Set player vehicle quaternion W value -", fDebug_TempPlayerVehicleQuatW, -3.0, 3.0, 0.0001)
|
|
ADD_WIDGET_BOOL("Apply above quaternion to player's vehicle", bDebug_ApplyQuaternionValuesToPlayerVehicle)
|
|
ADD_WIDGET_BOOL("Snap the player's current vehicle to the ground", bDebug_SnapPlayerVehicleToGround)
|
|
ADD_WIDGET_BOOL("Print player's current vehicle info, pos, quat and heading", bDebug_PrintPlayerVehicleInfo)
|
|
STOP_WIDGET_GROUP()
|
|
SET_UBER_PARENT_WIDGET_GROUP(widgetGroup)
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// updates my mission widgets, based off RAG input
|
|
PROC MAINTAIN_MISSION_WIDGETS()
|
|
FLOAT fDebug_PlaybackTime
|
|
TEXT_LABEL_63 tlTemp
|
|
/* // debug fail
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_0))
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PRESSED KEY 0") ENDIF #ENDIF
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
SET_ENTITY_HEALTH(sTargetPed.ped, 0)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG - KILLED sTargetPed PED") ENDIF #ENDIF
|
|
ENDIF
|
|
ELIF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_9))
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PRESSED KEY 9") ENDIF #ENDIF
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
SET_ENTITY_HEALTH(PLAYER_PED_ID(), 0)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG - KILLED Player PED") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
*/
|
|
BUILDING_STATE_ENUM eTempBuildingState
|
|
// toggle the build swap states
|
|
IF bDebug_Set_IPL_PillBox_State
|
|
eTempBuildingState = INT_TO_ENUM(BUILDING_STATE_ENUM, iDebug_IPL_PillBox_State)
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL, eTempBuildingState)
|
|
bDebug_Set_IPL_PillBox_State = FALSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG WIDGET: bDebug_Set_IPL_PillBox_State set to : ", eTempBuildingState) ENDIF #ENDIF
|
|
ENDIF
|
|
IF bDebug_Set_ES_PillBox_State
|
|
eTempBuildingState = INT_TO_ENUM(BUILDING_STATE_ENUM, iDebug_ES_PillBox_State)
|
|
SET_BUILDING_STATE(BUILDINGNAME_ES_PILLBOX_HILL, eTempBuildingState) // contains the rayfire for the front door
|
|
bDebug_Set_ES_PillBox_State = FALSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG WIDGET: bDebug_Set_ES_PillBox_State set to : ", eTempBuildingState) ENDIF #ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(sNigelVehicle.vehicle)
|
|
AND NOT IS_ENTITY_DEAD(sNigelVehicle.vehicle)
|
|
IF bDebug_StartHospitalJumpFX
|
|
REQUEST_PTFX_ASSET()
|
|
IF HAS_PTFX_ASSET_LOADED()
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(HospitalJump_PTFX_ID)
|
|
STOP_PARTICLE_FX_LOOPED(HospitalJump_PTFX_ID)
|
|
ENDIF
|
|
HospitalJump_PTFX_ID = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_rcn2_debris_trail", sNigelVehicle.vehicle, vDebug_HospitalJumpFXOffset,
|
|
vDebug_HospitalJumpFXRotation, fDebug_HospitalJumpFXScale)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG : PTFX hospital jump started FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
bDebug_StartHospitalJumpFX = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
//DRAW_DEBUG_SPHERE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(sNigelVehicle.vehicle, vDebug_HospitalJumpFXOffset), 0.25, 0, 50, 0, 100)
|
|
ENDIF
|
|
|
|
IF bDebug_ToggleGhostCarVisible
|
|
IF IS_VEHICLE_OK(vehDebug_Ghost)
|
|
IF IS_ENTITY_VISIBLE(vehDebug_Ghost)
|
|
SET_ENTITY_VISIBLE(vehDebug_Ghost, FALSE)
|
|
ELSE
|
|
SET_ENTITY_VISIBLE(vehDebug_Ghost, TRUE)
|
|
ENDIF
|
|
bDebug_ToggleGhostCarVisible = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//SET_DEBUG_ACTIVE(TRUE)
|
|
//SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
|
|
IF bDebug_OpenNigelCarBoot
|
|
IF DOES_ENTITY_EXIST(sNigelVehicle.vehicle)
|
|
AND NOT IS_ENTITY_DEAD(sNigelVehicle.vehicle)
|
|
//IF NOT IS_VEHICLE_DOOR_FULLY_OPEN(sNigelVehicle.vehicle, SC_DOOR_BOOT)
|
|
SET_VEHICLE_DOOR_OPEN(sNigelVehicle.vehicle, SC_DOOR_BOOT)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG WIDGET: nigel vehicle foot set open") ENDIF #ENDIF
|
|
//ENDIF
|
|
bDebug_OpenNigelCarBoot = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
IF bDebug_CloseNigelCarBoot
|
|
IF DOES_ENTITY_EXIST(sNigelVehicle.vehicle)
|
|
AND NOT IS_ENTITY_DEAD(sNigelVehicle.vehicle)
|
|
//IF IS_VEHICLE_DOOR_FULLY_OPEN(sNigelVehicle.vehicle, SC_DOOR_BOOT)
|
|
SET_VEHICLE_DOOR_SHUT(sNigelVehicle.vehicle, SC_DOOR_BOOT)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG WIDGET: nigel vehicle door set closed") ENDIF #ENDIF
|
|
//ENDIF
|
|
bDebug_CloseNigelCarBoot = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
IF bDebug_ResetForPlaceInBoot
|
|
IF DOES_ENTITY_EXIST(sTargetPed.ped)
|
|
AND NOT IS_PED_INJURED(sTargetPed.ped)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG WIDGET: about to detach player and celeb") ENDIF #ENDIF
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(sTargetPed.ped)
|
|
IF IS_ENTITY_ATTACHED_TO_ANY_PED(sTargetPed.ped)
|
|
DETACH_ENTITY(sTargetPed.ped)
|
|
ENDIF
|
|
ENDIF
|
|
SET_PED_GRAVITY(sTargetPed.ped, FALSE)
|
|
SET_ENTITY_COLLISION(sTargetPed.ped, FALSE)
|
|
FREEZE_ENTITY_POSITION(sTargetPed.ped, FALSE)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sTargetPed.ped, TRUE)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(sTargetPed.ped)
|
|
//TASK_PLAY_ANIM(sTargetPed.ped, "ped", "nm_foetal", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_HOLD_LAST_FRAME) //AF_HOLD_LAST_FRAME|AF_NOT_INTERRUPTABLE, 1.0)
|
|
//vDebug_PositionPedInBoot = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(sNigelVehicle.vehicle, vDebug_PositionPedInBootOffset)
|
|
SET_ENTITY_COORDS(sTargetPed.ped, vDebug_PositionPedInBoot)
|
|
SET_ENTITY_ROTATION(sTargetPed.ped, vDebug_RotationPedInBoot)
|
|
//IF NOT IS_ENTITY_PLAYING_ANIM(sTargetPed.ped, "ped", "nm_foetal")
|
|
//TASK_PLAY_ANIM_ADVANCED(sTargetPed.ped, "ped", "nm_foetal", vDebug_PositionPedInBoot, vDebug_RotationPedInBoot, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_HOLD_LAST_FRAME|AF_NOT_INTERRUPTABLE, 1.0)
|
|
//ENDIF
|
|
//FREEZE_ENTITY_POSITION(sTargetPed.ped, TRUE)
|
|
bDebug_ResetForPlaceInBoot = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
IF bDebug_UnFreezePedInBootPos
|
|
IF DOES_ENTITY_EXIST(sTargetPed.ped)
|
|
AND NOT IS_PED_INJURED(sTargetPed.ped)
|
|
FREEZE_ENTITY_POSITION(sTargetPed.ped, FALSE)
|
|
//SET_PED_GRAVITY(sTargetPed.ped, TRUE)
|
|
//SET_ENTITY_COLLISION(sTargetPed.ped, TRUE)
|
|
bDebug_UnFreezePedInBootPos = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
IF bDebug_JustUpdatePedInBootPosAndRot
|
|
SET_ENTITY_COORDS(sTargetPed.ped, vDebug_PositionPedInBoot)
|
|
SET_ENTITY_ROTATION(sTargetPed.ped, vDebug_RotationPedInBoot)
|
|
FREEZE_ENTITY_POSITION(sTargetPed.ped, TRUE)
|
|
bDebug_JustUpdatePedInBootPosAndRot = FALSE
|
|
ENDIF
|
|
IF bDebug_OutputPedInBootValues
|
|
OPEN_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
tlTemp = "vPositionOffsetFromCarOfPedForBoot "
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_VECTOR_TO_DEBUG_FILE(vDebug_PositionPedInBootOffset)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
tlTemp = "vRotationOfPedForBoot "
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_VECTOR_TO_DEBUG_FILE(vDebug_RotationPedInBoot)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
CLOSE_DEBUG_FILE()
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "BOOT PED INFO PRINTED") ENDIF #ENDIF
|
|
bDebug_OutputPedInBootValues = FALSE
|
|
ENDIF
|
|
IF bOutputTargetPlaybackTime
|
|
AND IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_NEXT_RADIO)
|
|
IF NOT IS_ENTITY_DEAD(sTargetVehicle.vehicle)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
fDebug_PlaybackTime = GET_TIME_POSITION_IN_RECORDING(sTargetVehicle.vehicle)
|
|
OPEN_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
tlTemp = "TARGET'S PLAYBACK TIME : "
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_FLOAT_TO_DEBUG_FILE(fDebug_PlaybackTime)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
CLOSE_DEBUG_FILE()
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "TARGET pLAYBACK INFO PRINTED") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF bDebug_ApplyGameplayCam_HeadingAndPitch
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(fDebug_GameplayCam_Heading)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(fDebug_GameplayCam_Pitch)
|
|
bDebug_ApplyGameplayCam_HeadingAndPitch = FALSE
|
|
ENDIF
|
|
IF bDebug_GetCurrentGameplayHeadingAndPitch
|
|
FLOAT fTemp_Heading = GET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
FLOAT fTemp_Pitch = GET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
OPEN_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
tlTemp = "Current Gameplay Cam Relative Heading : "
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_FLOAT_TO_DEBUG_FILE(fTemp_Heading)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
tlTemp = "Current Gameplay Cam Relative Pitch : "
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_FLOAT_TO_DEBUG_FILE(fTemp_Pitch)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
CLOSE_DEBUG_FILE()
|
|
bDebug_GetCurrentGameplayHeadingAndPitch = FALSE
|
|
ENDIF
|
|
IF bDebug_DoneDeformCar
|
|
IF DOES_ENTITY_EXIST(sTargetVehicle.vehicle)
|
|
//SET_ENTITY_HEALTH(sTargetVehicle.vehicle, 1000)
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, FALSE)
|
|
WAIT(0)
|
|
IF NOT IS_ENTITY_DEAD(sTargetVehicle.vehicle)
|
|
SET_VEHICLE_DAMAGE(sTargetVehicle.vehicle, vDebug_CarDamageCoords, fDebug_CarDamageAmount, fDebug_CarDeformationAmount, TRUE)
|
|
INT iDebug_VehicleHealth = GET_ENTITY_HEALTH(sTargetVehicle.vehicle)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Vehicle damage applied, health now at - ", iDebug_VehicleHealth) ENDIF #ENDIF
|
|
bDebug_DoneDeformCar = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
VEHICLE_INDEX vehDebug = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
IF NOT IS_ENTITY_DEAD(vehDebug)
|
|
IF bDebug_ApplyPositionValueToPlayerVehicle
|
|
SET_ENTITY_COORDS_NO_OFFSET(vehDebug, vDebug_TempPlayerVehicleSetPosition)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG AZ WIDGETS - UPDATED PLAYER VEHICLE POS") ENDIF #ENDIF
|
|
bDebug_ApplyPositionValueToPlayerVehicle = FALSE
|
|
ENDIF
|
|
IF bDebug_ApplyQuaternionValuesToPlayerVehicle
|
|
SET_ENTITY_QUATERNION(vehDebug, fDebug_TempPlayerVehicleQuatX, fDebug_TempPlayerVehicleQuatY, fDebug_TempPlayerVehicleQuatZ, fDebug_TempPlayerVehicleQuatW)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG AZ WIDGETS - UPDATED PLAYER VEHICLE QUATERNION") ENDIF #ENDIF
|
|
bDebug_ApplyQuaternionValuesToPlayerVehicle = FALSE
|
|
ENDIF
|
|
IF bDebug_SnapPlayerVehicleToGround
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vehDebug)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG AZ WIDGETS - PLAYER VEHICLE SET ON GROUND PROPERLY") ENDIF #ENDIF
|
|
bDebug_SnapPlayerVehicleToGround = FALSE
|
|
ENDIF
|
|
IF bDebug_PrintPlayerVehicleInfo
|
|
OPEN_DEBUG_FILE()
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
tlTemp = "Vehicle Position = "
|
|
VECTOR vDebug_VehiclePos = GET_ENTITY_COORDS(vehDebug)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_VECTOR_TO_DEBUG_FILE(vDebug_VehiclePos)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
FLOAT fDebug_VehicleQuaternion_X, fDebug_VehicleQuaternion_Y, fDebug_VehicleQuaternion_Z, fDebug_VehicleQuaternion_W
|
|
GET_ENTITY_QUATERNION(vehDebug, fDebug_VehicleQuaternion_X, fDebug_VehicleQuaternion_Y, fDebug_VehicleQuaternion_Z, fDebug_VehicleQuaternion_W)
|
|
tlTemp = "Vehicle Quaternion X = "
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_FLOAT_TO_DEBUG_FILE(fDebug_VehicleQuaternion_X)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
tlTemp = "Vehicle Quaternion Y = "
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_FLOAT_TO_DEBUG_FILE(fDebug_VehicleQuaternion_Y)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
tlTemp = "Vehicle Quaternion Z = "
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_FLOAT_TO_DEBUG_FILE(fDebug_VehicleQuaternion_Z)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
tlTemp = "Vehicle Quaternion W = "
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_FLOAT_TO_DEBUG_FILE(fDebug_VehicleQuaternion_W)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
|
|
tlTemp = "Vehicle Heading = "
|
|
FLOAT fDebug_VehicleHeading = GET_ENTITY_HEADING(vehDebug)
|
|
SAVE_STRING_TO_DEBUG_FILE(tlTemp)
|
|
SAVE_FLOAT_TO_DEBUG_FILE(fDebug_VehicleHeading)
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
CLOSE_DEBUG_FILE()
|
|
bDebug_PrintPlayerVehicleInfo = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(TrafficCarID[iDebug_TrafficCarToTurnCollisionOffOn])
|
|
AND NOT IS_ENTITY_DEAD(TrafficCarID[iDebug_TrafficCarToTurnCollisionOffOn])
|
|
IF bDebug_SelectedTrafficCarHasCollision
|
|
SET_ENTITY_COLLISION(TrafficCarID[iDebug_TrafficCarToTurnCollisionOffOn], TRUE)
|
|
ELSE
|
|
SET_ENTITY_COLLISION(TrafficCarID[iDebug_TrafficCarToTurnCollisionOffOn], FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(SetPieceCarID[iDebug_SetPieceCarToTurnCollisionOffOn])
|
|
AND NOT IS_ENTITY_DEAD(SetPieceCarID[iDebug_SetPieceCarToTurnCollisionOffOn])
|
|
IF bDebug_SelectedSetPieceCarHasCollision
|
|
SET_ENTITY_COLLISION(SetPieceCarID[iDebug_SetPieceCarToTurnCollisionOffOn], TRUE)
|
|
ELSE
|
|
SET_ENTITY_COLLISION(SetPieceCarID[iDebug_SetPieceCarToTurnCollisionOffOn], FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
IF bDebug_StartHospitalDebris_PTFX_ID
|
|
IF HAS_PTFX_ASSET_LOADED()
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(DEBUG_HospitalDebris_PTFX_ID)
|
|
STOP_PARTICLE_FX_LOOPED(DEBUG_HospitalDebris_PTFX_ID)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "REMOVED EXISTING PARTICLE FX") ENDIF #ENDIF
|
|
ENDIF
|
|
IF NOT DOES_PARTICLE_FX_LOOPED_EXIST(DEBUG_HospitalDebris_PTFX_ID)
|
|
DEBUG_HospitalDebris_PTFX_ID = START_PARTICLE_FX_LOOPED_AT_COORD("scr_rcn2_ceiling_debris", << 325.0, -589.0, 45.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
// scr_rcn2_ceiling_debris
|
|
// scr_trev2_heli_wreck ripped from another mission to check my script setup is ok.
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PTFX EFFECT HOSPITAL DEBRIS STARTED") ENDIF #ENDIF
|
|
ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PTFX ASSET NOT LOADED !") ENDIF #ENDIF
|
|
ENDIF
|
|
bDebug_StartHospitalDebris_PTFX_ID = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// removes my debug mission widget group
|
|
PROC CLEANUP_MISSION_WIDGETS()
|
|
IF DOES_WIDGET_GROUP_EXIST(widgetGroup)
|
|
DELETE_WIDGET_GROUP(widgetGroup)
|
|
ENDIF
|
|
SET_DEBUG_ACTIVE(FALSE)
|
|
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(FALSE)
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// :FUNCTIONS AND PROCEEDURES
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// contains all the data needed for the uber recording
|
|
PROC LOAD_UBER_DATA()
|
|
|
|
// **** UBER RECORDED TRAFFIC ****
|
|
|
|
TrafficCarPos[0] = <<-1189.9189, -864.3419, 13.5062>>
|
|
TrafficCarQuatX[0] = 0.0110
|
|
TrafficCarQuatY[0] = -0.0057
|
|
TrafficCarQuatZ[0] = -0.4728
|
|
TrafficCarQuatW[0] = 0.8811
|
|
TrafficCarRecording[0] = 3
|
|
TrafficCarStartime[0] = 12794.0000
|
|
TrafficCarModel[0] = f620
|
|
|
|
TrafficCarPos[1] = <<-1168.0251, -846.5394, 13.8245>>
|
|
TrafficCarQuatX[1] = 0.0067
|
|
TrafficCarQuatY[1] = 0.0025
|
|
TrafficCarQuatZ[1] = 0.3507
|
|
TrafficCarQuatW[1] = 0.9364
|
|
TrafficCarRecording[1] = 4
|
|
TrafficCarStartime[1] = 12926.0000
|
|
TrafficCarModel[1] = washington
|
|
|
|
TrafficCarPos[2] = <<-1052.3594, -730.7704, 18.7290>>
|
|
TrafficCarQuatX[2] = -0.0125
|
|
TrafficCarQuatY[2] = -0.0121
|
|
TrafficCarQuatZ[2] = 0.9079
|
|
TrafficCarQuatW[2] = 0.4187
|
|
TrafficCarRecording[2] = 14
|
|
TrafficCarStartime[2] = 19594.9609
|
|
TrafficCarModel[2] = serrano
|
|
|
|
TrafficCarPos[3] = <<-1050.4532, -743.3076, 18.7718>>
|
|
TrafficCarQuatX[3] = -0.0019
|
|
TrafficCarQuatY[3] = -0.0002
|
|
TrafficCarQuatZ[3] = -0.3894
|
|
TrafficCarQuatW[3] = 0.9211
|
|
TrafficCarRecording[3] = 6
|
|
TrafficCarStartime[3] = 20400.0000
|
|
TrafficCarModel[3] = washington
|
|
|
|
//car drives up second hill outside lane (causing issue currently as doesn't always playout)
|
|
TrafficCarPos[4] = <<-1032.5537, -734.0855, 19.1223>>
|
|
TrafficCarQuatX[4] = 0.0233
|
|
TrafficCarQuatY[4] = -0.0077
|
|
TrafficCarQuatZ[4] = -0.4212
|
|
TrafficCarQuatW[4] = 0.9066
|
|
TrafficCarRecording[4] = 16
|
|
TrafficCarStartime[4] = 19960.8496 // 20460.8496 made it kick off a little ealier to hopefully get out way!
|
|
TrafficCarModel[4] = serrano
|
|
|
|
TrafficCarPos[5] = <<-865.4848, -623.9280, 28.3187>>
|
|
TrafficCarQuatX[5] = 0.0038
|
|
TrafficCarQuatY[5] = -0.0257
|
|
TrafficCarQuatZ[5] = 0.9893
|
|
TrafficCarQuatW[5] = -0.1433
|
|
TrafficCarRecording[5] = 7
|
|
TrafficCarStartime[5] = 28417.0000
|
|
TrafficCarModel[5] = washington
|
|
|
|
TrafficCarPos[6] = <<-869.6063, -612.9931, 28.5539>>
|
|
TrafficCarQuatX[6] = 0.0050
|
|
TrafficCarQuatY[6] = -0.0119
|
|
TrafficCarQuatZ[6] = 0.9777
|
|
TrafficCarQuatW[6] = -0.2094
|
|
TrafficCarRecording[6] = 8
|
|
TrafficCarStartime[6] = 28417.0000
|
|
TrafficCarModel[6] = serrano
|
|
|
|
TrafficCarPos[7] = <<-853.7338, -652.7806, 27.3348>>
|
|
TrafficCarQuatX[7] = -0.0022
|
|
TrafficCarQuatY[7] = -0.0021
|
|
TrafficCarQuatZ[7] = 0.7085
|
|
TrafficCarQuatW[7] = 0.7057
|
|
TrafficCarRecording[7] = 9
|
|
TrafficCarStartime[7] = 28549.0000
|
|
TrafficCarModel[7] = serrano
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, FELTZER2010 removed from the game !!!
|
|
/// !!! ALSO may need re-record if wheels dont sit on the ground now
|
|
TrafficCarPos[8] = <<-797.3943, -667.4530, 28.1434>>
|
|
TrafficCarQuatX[8] = 0.0434
|
|
TrafficCarQuatY[8] = 0.0031
|
|
TrafficCarQuatZ[8] = -0.7039
|
|
TrafficCarQuatW[8] = 0.7090
|
|
TrafficCarRecording[8] = 10
|
|
TrafficCarStartime[8] = 30654.0000
|
|
TrafficCarModel[8] = feltzer2
|
|
|
|
TrafficCarPos[9] = <<-728.5153, -661.8074, 29.8396>>
|
|
TrafficCarQuatX[9] = -0.0017
|
|
TrafficCarQuatY[9] = 0.0032
|
|
TrafficCarQuatZ[9] = -0.7028
|
|
TrafficCarQuatW[9] = 0.7114
|
|
TrafficCarRecording[9] = 11
|
|
TrafficCarStartime[9] = 33027.0000
|
|
TrafficCarModel[9] = RapidGT
|
|
|
|
TrafficCarPos[10] = <<-595.1748, -661.9557, 31.8497>>
|
|
TrafficCarQuatX[10] = 0.0098
|
|
TrafficCarQuatY[10] = -0.0088
|
|
TrafficCarQuatZ[10] = -0.7017
|
|
TrafficCarQuatW[10] = 0.7123
|
|
TrafficCarRecording[10] = 15
|
|
TrafficCarStartime[10] = 48186.0000
|
|
TrafficCarModel[10] = sultan
|
|
|
|
TrafficCarPos[11] = <<-477.1852, -644.7173, 32.0538>>
|
|
TrafficCarQuatX[11] = -0.0087
|
|
TrafficCarQuatY[11] = 0.0318
|
|
TrafficCarQuatZ[11] = 0.0461
|
|
TrafficCarQuatW[11] = 0.9984
|
|
TrafficCarRecording[11] = 17
|
|
TrafficCarStartime[11] = 55765.8516
|
|
TrafficCarModel[11] = serrano
|
|
|
|
TrafficCarPos[12] = <<-489.0458, -666.3751, 32.3303>>
|
|
TrafficCarQuatX[12] = 0.0113
|
|
TrafficCarQuatY[12] = 0.0176
|
|
TrafficCarQuatZ[12] = -0.7063
|
|
TrafficCarQuatW[12] = 0.7076
|
|
TrafficCarRecording[12] = 23
|
|
TrafficCarStartime[12] = 58613.0000
|
|
TrafficCarModel[12] = asterope
|
|
|
|
// heading towards the player, bunny hops over seats
|
|
TrafficCarPos[13] = <<-487.5655, -744.9453, 32.6015>>
|
|
TrafficCarQuatX[13] = -0.0937
|
|
TrafficCarQuatY[13] = 0.0450
|
|
TrafficCarQuatZ[13] = 0.8793
|
|
TrafficCarQuatW[13] = 0.4648
|
|
TrafficCarRecording[13] = 19
|
|
TrafficCarStartime[13] = 60459.3203 // 59006.3203
|
|
TrafficCarModel[13] = BMX
|
|
|
|
TrafficCarPos[14] = <<-478.1905, -835.1024, 29.9746>>
|
|
TrafficCarQuatX[14] = -0.0021
|
|
TrafficCarQuatY[14] = -0.0021
|
|
TrafficCarQuatZ[14] = 0.7008
|
|
TrafficCarQuatW[14] = 0.7134
|
|
TrafficCarRecording[14] = 18
|
|
TrafficCarStartime[14] = 64923.8516
|
|
TrafficCarModel[14] = serrano
|
|
|
|
TrafficCarPos[15] = <<-430.6053, -816.6718, 36.8249>>
|
|
TrafficCarQuatX[15] = -0.0001
|
|
TrafficCarQuatY[15] = 0.0048
|
|
TrafficCarQuatZ[15] = 0.9993
|
|
TrafficCarQuatW[15] = 0.0373
|
|
TrafficCarRecording[15] = 28
|
|
TrafficCarStartime[15] = 68551.0000
|
|
TrafficCarModel[15] = asterope
|
|
|
|
TrafficCarPos[16] = <<-427.4086, -762.0120, 36.6573>>
|
|
TrafficCarQuatX[16] = 0.0001
|
|
TrafficCarQuatY[16] = 0.0049
|
|
TrafficCarQuatZ[16] = 1.0000
|
|
TrafficCarQuatW[16] = 0.0047
|
|
TrafficCarRecording[16] = 30
|
|
TrafficCarStartime[16] = 70333.0000
|
|
TrafficCarModel[16] = sultan
|
|
|
|
//target cuts across in front of this vehicle on carpark exit
|
|
TrafficCarPos[17] = <<-476.9606, -664.9507, 31.9901>>
|
|
TrafficCarQuatX[17] = -0.0030
|
|
TrafficCarQuatY[17] = -0.0083
|
|
TrafficCarQuatZ[17] = 0.7264
|
|
TrafficCarQuatW[17] = -0.6872
|
|
TrafficCarRecording[17] = 70
|
|
TrafficCarStartime[17] = 77000.0000
|
|
TrafficCarModel[17] = sultan
|
|
|
|
//on carpark exit goes across front of target
|
|
TrafficCarPos[18] = <<-436.3420, -650.5261, 30.4239>>
|
|
TrafficCarQuatX[18] = 0.0056
|
|
TrafficCarQuatY[18] = 0.0224
|
|
TrafficCarQuatZ[18] = 0.7071
|
|
TrafficCarQuatW[18] = 0.7068
|
|
TrafficCarRecording[18] = 13
|
|
TrafficCarStartime[18] = 77590.0000
|
|
TrafficCarModel[18] = sultan
|
|
|
|
//third vehicle to go across exit from carpark
|
|
TrafficCarPos[19] = <<-420.9600, -656.3897, 30.5754>>
|
|
TrafficCarQuatX[19] = 0.0112
|
|
TrafficCarQuatY[19] = 0.0112
|
|
TrafficCarQuatZ[19] = 0.7070
|
|
TrafficCarQuatW[19] = 0.7070
|
|
TrafficCarRecording[19] = 12
|
|
TrafficCarStartime[19] = 78000.0000
|
|
TrafficCarModel[19] = Packer
|
|
|
|
TrafficCarPos[20] = <<-455.2408, -535.8500, 24.7102>>
|
|
TrafficCarQuatX[20] = -0.0022
|
|
TrafficCarQuatY[20] = 0.0022
|
|
TrafficCarQuatZ[20] = -0.7070
|
|
TrafficCarQuatW[20] = 0.7072
|
|
TrafficCarRecording[20] = 31
|
|
TrafficCarStartime[20] = 80849.0000
|
|
TrafficCarModel[20] = sultan
|
|
|
|
TrafficCarPos[21] = <<-421.8391, -535.8503, 24.7099>>
|
|
TrafficCarQuatX[21] = -0.0024
|
|
TrafficCarQuatY[21] = 0.0024
|
|
TrafficCarQuatZ[21] = -0.7071
|
|
TrafficCarQuatW[21] = 0.7071
|
|
TrafficCarRecording[21] = 32
|
|
TrafficCarStartime[21] = 80849.0000
|
|
TrafficCarModel[21] = sultan
|
|
|
|
TrafficCarPos[22] = <<-323.2696, -519.5041, 24.7690>>
|
|
TrafficCarQuatX[22] = -0.0086
|
|
TrafficCarQuatY[22] = -0.0166
|
|
TrafficCarQuatZ[22] = -0.7001
|
|
TrafficCarQuatW[22] = 0.7138
|
|
TrafficCarRecording[22] = 34
|
|
TrafficCarStartime[22] = 85280.0000
|
|
TrafficCarModel[22] = asterope
|
|
|
|
TrafficCarPos[23] = <<-384.7831, -496.5516, 24.8060>>
|
|
TrafficCarQuatX[23] = -0.0022
|
|
TrafficCarQuatY[23] = -0.0022
|
|
TrafficCarQuatZ[23] = 0.7072
|
|
TrafficCarQuatW[23] = 0.7071
|
|
TrafficCarRecording[23] = 33
|
|
TrafficCarStartime[23] = 85722.0000
|
|
TrafficCarModel[23] = landstalker
|
|
|
|
TrafficCarPos[24] = <<-299.8336, -519.6835, 24.8040>>
|
|
TrafficCarQuatX[24] = -0.0071
|
|
TrafficCarQuatY[24] = -0.0166
|
|
TrafficCarQuatZ[24] = -0.7047
|
|
TrafficCarQuatW[24] = 0.7093
|
|
TrafficCarRecording[24] = 35
|
|
TrafficCarStartime[24] = 86195.0000
|
|
TrafficCarModel[24] = asterope
|
|
|
|
// highway vehicle
|
|
TrafficCarPos[25] = <<-296.6222, -496.0120, 24.8684>>
|
|
TrafficCarQuatX[25] = -0.0026
|
|
TrafficCarQuatY[25] = -0.0022
|
|
TrafficCarQuatZ[25] = 0.7084
|
|
TrafficCarQuatW[25] = 0.7058
|
|
TrafficCarRecording[25] = 21
|
|
TrafficCarStartime[25] = 87170.8516
|
|
TrafficCarModel[25] = landstalker
|
|
|
|
TrafficCarPos[26] = <<-242.5362, -502.0159, 25.6451>>
|
|
TrafficCarQuatX[26] = -0.0096
|
|
TrafficCarQuatY[26] = -0.0094
|
|
TrafficCarQuatZ[26] = 0.7194
|
|
TrafficCarQuatW[26] = 0.6945
|
|
TrafficCarRecording[26] = 36
|
|
TrafficCarStartime[26] = 88537.0000
|
|
TrafficCarModel[26] = landstalker
|
|
|
|
TrafficCarPos[27] = <<-234.2082, -530.1547, 25.9344>>
|
|
TrafficCarQuatX[27] = -0.0058
|
|
TrafficCarQuatY[27] = 0.0064
|
|
TrafficCarQuatZ[27] = 0.7091
|
|
TrafficCarQuatW[27] = -0.7050
|
|
TrafficCarRecording[27] = 39
|
|
TrafficCarStartime[27] = 90066.0000
|
|
TrafficCarModel[27] = RapidGT
|
|
|
|
TrafficCarPos[28] = <<-204.8521, -534.9627, 26.6094>>
|
|
TrafficCarQuatX[28] = 0.0281
|
|
TrafficCarQuatY[28] = 0.0002
|
|
TrafficCarQuatZ[28] = -0.6936
|
|
TrafficCarQuatW[28] = 0.7198
|
|
TrafficCarRecording[28] = 37
|
|
TrafficCarStartime[28] = 91140.0000
|
|
TrafficCarModel[28] = asterope
|
|
|
|
TrafficCarPos[29] = <<-186.2448, -518.6406, 27.3221>>
|
|
TrafficCarQuatX[29] = -0.0061
|
|
TrafficCarQuatY[29] = -0.0197
|
|
TrafficCarQuatZ[29] = -0.7053
|
|
TrafficCarQuatW[29] = 0.7086
|
|
TrafficCarRecording[29] = 41
|
|
TrafficCarStartime[29] = 91890.0000
|
|
TrafficCarModel[29] = fq2
|
|
|
|
TrafficCarPos[30] = <<-181.6259, -523.8001, 27.2923>>
|
|
TrafficCarQuatX[30] = 0.0116
|
|
TrafficCarQuatY[30] = -0.0124
|
|
TrafficCarQuatZ[30] = -0.7029
|
|
TrafficCarQuatW[30] = 0.7111
|
|
TrafficCarRecording[30] = 38
|
|
TrafficCarStartime[30] = 92230.0000
|
|
TrafficCarModel[30] = sultan
|
|
|
|
// highway car
|
|
TrafficCarPos[31] = <<-152.8287, -489.4706, 28.3269>>
|
|
TrafficCarQuatX[31] = -0.0213
|
|
TrafficCarQuatY[31] = 0.0018
|
|
TrafficCarQuatZ[31] = 0.7254
|
|
TrafficCarQuatW[31] = 0.6880
|
|
TrafficCarRecording[31] = 24
|
|
TrafficCarStartime[31] = 92554.8516
|
|
TrafficCarModel[31] = landstalker
|
|
|
|
TrafficCarPos[32] = <<-172.1277, -500.8638, 27.8326>>
|
|
TrafficCarQuatX[32] = -0.0252
|
|
TrafficCarQuatY[32] = -0.0296
|
|
TrafficCarQuatZ[32] = 0.7083
|
|
TrafficCarQuatW[32] = 0.7048
|
|
TrafficCarRecording[32] = 40
|
|
TrafficCarStartime[32] = 94528.0000
|
|
TrafficCarModel[32] = fq2
|
|
|
|
//highway vehicle
|
|
TrafficCarPos[33] = <<-114.8660, -500.2346, 29.8111>>
|
|
TrafficCarQuatX[33] = -0.0104
|
|
TrafficCarQuatY[33] = -0.0098
|
|
TrafficCarQuatZ[33] = 0.7021
|
|
TrafficCarQuatW[33] = 0.7119
|
|
TrafficCarRecording[33] = 78
|
|
TrafficCarStartime[33] = 95865.4375
|
|
TrafficCarModel[33] = asterope
|
|
|
|
TrafficCarPos[34] = <<-129.1858, -505.6940, 29.2420>>
|
|
TrafficCarQuatX[34] = -0.0150
|
|
TrafficCarQuatY[34] = -0.0163
|
|
TrafficCarQuatZ[34] = 0.7139
|
|
TrafficCarQuatW[34] = 0.6999
|
|
TrafficCarRecording[34] = 42
|
|
TrafficCarStartime[34] = 95886.0000
|
|
TrafficCarModel[34] = asterope
|
|
|
|
//highway
|
|
TrafficCarPos[35] = <<-55.6079, -499.5939, 31.8493>>
|
|
TrafficCarQuatX[35] = -0.0116
|
|
TrafficCarQuatY[35] = -0.0112
|
|
TrafficCarQuatZ[35] = 0.7134
|
|
TrafficCarQuatW[35] = 0.7006
|
|
TrafficCarRecording[35] = 25
|
|
TrafficCarStartime[35] = 96787.8516
|
|
TrafficCarModel[35] = landstalker
|
|
|
|
TrafficCarPos[36] = <<-87.1120, -504.9880, 30.9077>>
|
|
TrafficCarQuatX[36] = -0.0159
|
|
TrafficCarQuatY[36] = -0.0149
|
|
TrafficCarQuatZ[36] = 0.7118
|
|
TrafficCarQuatW[36] = 0.7020
|
|
TrafficCarRecording[36] = 43
|
|
TrafficCarStartime[36] = 97140.0000
|
|
TrafficCarModel[36] = fq2
|
|
|
|
TrafficCarPos[37] = <<26.5103, -499.3918, 34.2088>>
|
|
TrafficCarQuatX[37] = -0.0005
|
|
TrafficCarQuatY[37] = -0.0002
|
|
TrafficCarQuatZ[37] = 0.7186
|
|
TrafficCarQuatW[37] = 0.6954
|
|
TrafficCarRecording[37] = 79
|
|
TrafficCarStartime[37] = 100001.3984
|
|
TrafficCarModel[37] = Packer
|
|
|
|
/* drives up slip road ahead of target.
|
|
commented out because he now slams the brakes on in front of the player
|
|
TrafficCarPos[38] = <<39.6029, -533.6916, 33.5574>>
|
|
TrafficCarQuatX[38] = -0.0111
|
|
TrafficCarQuatY[38] = 0.0144
|
|
TrafficCarQuatZ[38] = 0.7909
|
|
TrafficCarQuatW[38] = -0.6116
|
|
TrafficCarRecording[38] = 45
|
|
TrafficCarStartime[38] = 101958.0000
|
|
TrafficCarModel[38] = bati
|
|
*/
|
|
|
|
//more than likely needs a re-record as comet model has been removed from game!
|
|
TrafficCarPos[39] = <<70.5888, -526.8503, 33.7031>>
|
|
TrafficCarQuatX[39] = -0.0004
|
|
TrafficCarQuatY[39] = -0.0004
|
|
TrafficCarQuatZ[39] = -0.7039
|
|
TrafficCarQuatW[39] = 0.7103
|
|
TrafficCarRecording[39] = 46
|
|
TrafficCarStartime[39] = 102948.0000
|
|
TrafficCarModel[39] = ninef2
|
|
|
|
TrafficCarPos[40] = <<99.8609, -521.5526, 33.5624>>
|
|
TrafficCarQuatX[40] = 0.0145
|
|
TrafficCarQuatY[40] = -0.0145
|
|
TrafficCarQuatZ[40] = 0.7070
|
|
TrafficCarQuatW[40] = -0.7069
|
|
TrafficCarRecording[40] = 47
|
|
TrafficCarStartime[40] = 104004.0000
|
|
TrafficCarModel[40] = landstalker
|
|
|
|
TrafficCarPos[41] = <<196.1974, -526.9512, 33.5498>>
|
|
TrafficCarQuatX[41] = 0.0178
|
|
TrafficCarQuatY[41] = -0.0178
|
|
TrafficCarQuatZ[41] = 0.7069
|
|
TrafficCarQuatW[41] = -0.7068
|
|
TrafficCarRecording[41] = 48
|
|
TrafficCarStartime[41] = 107502.0000
|
|
TrafficCarModel[41] = landstalker
|
|
|
|
TrafficCarPos[42] = <<230.2825, -516.1511, 33.5591>>
|
|
TrafficCarQuatX[42] = -0.0023
|
|
TrafficCarQuatY[42] = 0.0023
|
|
TrafficCarQuatZ[42] = -0.7071
|
|
TrafficCarQuatW[42] = 0.7071
|
|
TrafficCarRecording[42] = 49
|
|
TrafficCarStartime[42] = 108624.0000
|
|
TrafficCarModel[42] = landstalker
|
|
|
|
/*// car on slip road next to hospital FLOATS!!!
|
|
TrafficCarPos[43] = <<304.4125, -550.3855, 43.4028>>
|
|
TrafficCarQuatX[43] = -0.0250
|
|
TrafficCarQuatY[43] = -0.0155
|
|
TrafficCarQuatZ[43] = 0.7199
|
|
TrafficCarQuatW[43] = -0.6934
|
|
TrafficCarRecording[43] = 26
|
|
TrafficCarStartime[43] = 110670.8516
|
|
TrafficCarModel[43] = asterope*/
|
|
|
|
TrafficCarPos[44] = <<301.1906, -521.5500, 33.4621>>
|
|
TrafficCarQuatX[44] = 0.0001
|
|
TrafficCarQuatY[44] = -0.0001
|
|
TrafficCarQuatZ[44] = 0.7071
|
|
TrafficCarQuatW[44] = -0.7071
|
|
TrafficCarRecording[44] = 50
|
|
TrafficCarStartime[44] = 111198.0000
|
|
TrafficCarModel[44] = sultan
|
|
|
|
// **** UBER RECORDED PARKED CARS ****
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, cogsport removed from the game !!!
|
|
ParkedCarPos[0] = <<-1200.0914, -849.0596, 13.5431>>
|
|
ParkedCarQuatX[0] = -0.0171
|
|
ParkedCarQuatY[0] = -0.0063
|
|
ParkedCarQuatZ[0] = 0.8800
|
|
ParkedCarQuatW[0] = 0.4747
|
|
ParkedCarModel[0] = feltzer2
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, cogsport removed from the game !!!
|
|
ParkedCarPos[1] = <<-1058.3451, -772.2757, 18.8924>>
|
|
ParkedCarQuatX[1] = -0.0028
|
|
ParkedCarQuatY[1] = 0.0149
|
|
ParkedCarQuatZ[1] = 0.3553
|
|
ParkedCarQuatW[1] = 0.9346
|
|
ParkedCarModel[1] = feltzer2
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, cogsport removed from the game !!!
|
|
ParkedCarPos[2] = <<-1070.6639, -739.6081, 18.8482>>
|
|
ParkedCarQuatX[2] = -0.0111
|
|
ParkedCarQuatY[2] = 0.0192
|
|
ParkedCarQuatZ[2] = 0.9254
|
|
ParkedCarQuatW[2] = 0.3784
|
|
ParkedCarModel[2] = feltzer2
|
|
|
|
ParkedCarPos[3] = <<-1121.0957, -880.1656, 7.6752>>
|
|
ParkedCarQuatX[3] = 0.0021
|
|
ParkedCarQuatY[3] = -0.0011
|
|
ParkedCarQuatZ[3] = -0.4944
|
|
ParkedCarQuatW[3] = 0.8692
|
|
ParkedCarModel[3] = serrano
|
|
|
|
ParkedCarPos[4] = <<-1115.6182, -807.3134, 16.6315>>
|
|
ParkedCarQuatX[4] = -0.0414
|
|
ParkedCarQuatY[4] = -0.0257
|
|
ParkedCarQuatZ[4] = 0.8471
|
|
ParkedCarQuatW[4] = -0.5292
|
|
ParkedCarModel[4] = serrano
|
|
|
|
ParkedCarPos[5] = <<-1112.4027, -774.3158, 18.3801>>
|
|
ParkedCarQuatX[5] = -0.0097
|
|
ParkedCarQuatY[5] = -0.0319
|
|
ParkedCarQuatZ[5] = 0.5058
|
|
ParkedCarQuatW[5] = 0.8620
|
|
ParkedCarModel[5] = serrano
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, cogsport removed from the game !!!
|
|
ParkedCarPos[6] = <<-1130.5292, -792.3233, 16.5972>>
|
|
ParkedCarQuatX[6] = -0.0307
|
|
ParkedCarQuatY[6] = -0.0293
|
|
ParkedCarQuatZ[6] = 0.9133
|
|
ParkedCarQuatW[6] = 0.4051
|
|
ParkedCarModel[6] = feltzer2
|
|
|
|
ParkedCarPos[7] = <<-1045.3898, -778.9995, 18.3863>>
|
|
ParkedCarQuatX[7] = 0.0118
|
|
ParkedCarQuatY[7] = 0.0370
|
|
ParkedCarQuatZ[7] = 0.5106
|
|
ParkedCarQuatW[7] = 0.8590
|
|
ParkedCarModel[7] = serrano
|
|
|
|
ParkedCarPos[8] = <<-1034.8263, -739.7039, 18.8810>>
|
|
ParkedCarQuatX[8] = 0.0195
|
|
ParkedCarQuatY[8] = 0.0190
|
|
ParkedCarQuatZ[8] = -0.4353
|
|
ParkedCarQuatW[8] = 0.8999
|
|
ParkedCarModel[8] = radi
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, cogsport removed from the game !!!
|
|
ParkedCarPos[9] = <<-1033.9292, -712.6562, 19.4857>>
|
|
ParkedCarQuatX[9] = -0.0193
|
|
ParkedCarQuatY[9] = -0.0194
|
|
ParkedCarQuatZ[9] = 0.9056
|
|
ParkedCarQuatW[9] = 0.4231
|
|
ParkedCarModel[9] = serrano
|
|
|
|
ParkedCarPos[10] = <<-1005.5381, -715.5715, 20.3848>>
|
|
ParkedCarQuatX[10] = -0.0440
|
|
ParkedCarQuatY[10] = -0.1329
|
|
ParkedCarQuatZ[10] = -0.3895
|
|
ParkedCarQuatW[10] = 0.9103
|
|
ParkedCarModel[10] = bati
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, cogsport removed from the game !!!
|
|
ParkedCarPos[11] = <<-980.4462, -670.3936, 22.8034>>
|
|
ParkedCarQuatX[11] = -0.0432
|
|
ParkedCarQuatY[11] = -0.0121
|
|
ParkedCarQuatZ[11] = 0.8701
|
|
ParkedCarQuatW[11] = 0.4908
|
|
ParkedCarModel[11] = washington
|
|
|
|
ParkedCarPos[12] = <<-969.1606, -664.5714, 23.8870>>
|
|
ParkedCarQuatX[12] = -0.0460
|
|
ParkedCarQuatY[12] = -0.0213
|
|
ParkedCarQuatZ[12] = 0.8534
|
|
ParkedCarQuatW[12] = 0.5187
|
|
ParkedCarModel[12] = RapidGT
|
|
|
|
ParkedCarPos[13] = <<-928.2644, -652.7425, 26.6901>>
|
|
ParkedCarQuatX[13] = -0.0303
|
|
ParkedCarQuatY[13] = -0.0054
|
|
ParkedCarQuatZ[13] = 0.7573
|
|
ParkedCarQuatW[13] = 0.6524
|
|
ParkedCarModel[13] = RapidGT
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, FELTZER2010 removed from the game !!!
|
|
ParkedCarPos[14] = <<-916.6693, -650.6878, 27.0863>>
|
|
ParkedCarQuatX[14] = -0.0240
|
|
ParkedCarQuatY[14] = 0.0101
|
|
ParkedCarQuatZ[14] = 0.7742
|
|
ParkedCarQuatW[14] = 0.6324
|
|
ParkedCarModel[14] = feltzer2
|
|
|
|
ParkedCarPos[15] = <<-790.8272, -667.5106, 28.4613>>
|
|
ParkedCarQuatX[15] = -0.0369
|
|
ParkedCarQuatY[15] = -0.0050
|
|
ParkedCarQuatZ[15] = 0.7209
|
|
ParkedCarQuatW[15] = -0.6921
|
|
ParkedCarModel[15] = RapidGT
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, FELTZER2010 removed from the game !!!
|
|
ParkedCarPos[16] = <<-790.0645, -647.0408, 28.4882>>
|
|
ParkedCarQuatX[16] = -0.0370
|
|
ParkedCarQuatY[16] = 0.0003
|
|
ParkedCarQuatZ[16] = 0.7201
|
|
ParkedCarQuatW[16] = 0.6929
|
|
ParkedCarModel[16] = feltzer2
|
|
|
|
ParkedCarPos[17] = <<-716.8614, -667.7233, 29.6724>>
|
|
ParkedCarQuatX[17] = -0.0267
|
|
ParkedCarQuatY[17] = -0.0106
|
|
ParkedCarQuatZ[17] = 0.7068
|
|
ParkedCarQuatW[17] = -0.7068
|
|
ParkedCarModel[17] = sultan
|
|
|
|
ParkedCarPos[18] = <<-653.5672, -605.7774, 32.8442>>
|
|
ParkedCarQuatX[18] = 0.0008
|
|
ParkedCarQuatY[18] = -0.0298
|
|
ParkedCarQuatZ[18] = 0.9991
|
|
ParkedCarQuatW[18] = 0.0310
|
|
ParkedCarModel[18] = radi
|
|
|
|
ParkedCarPos[19] = <<-598.4409, -647.7642, 31.2207>>
|
|
ParkedCarQuatX[19] = 0.0659
|
|
ParkedCarQuatY[19] = -0.1257
|
|
ParkedCarQuatZ[19] = 0.6417
|
|
ParkedCarQuatW[19] = 0.7537
|
|
ParkedCarModel[19] = bati
|
|
|
|
//inside carpark
|
|
ParkedCarPos[20] = <<-457.3376, -774.9608, 29.9679>>
|
|
ParkedCarQuatX[20] = -0.0002
|
|
ParkedCarQuatY[20] = 0.0000
|
|
ParkedCarQuatZ[20] = 0.7033
|
|
ParkedCarQuatW[20] = 0.7109
|
|
ParkedCarModel[20] = sultan
|
|
|
|
//car park exit from tunnel
|
|
ParkedCarPos[21] = <<-506.0643, -614.7634, 29.6699>>
|
|
ParkedCarQuatX[21] = -0.0131
|
|
ParkedCarQuatY[21] = -0.1302
|
|
ParkedCarQuatZ[21] = -0.0218
|
|
ParkedCarQuatW[21] = 0.9912
|
|
ParkedCarModel[21] = bati
|
|
|
|
ParkedCarPos[22] = <<-487.6026, -614.8040, 30.5800>>
|
|
ParkedCarQuatX[22] = 0.0002
|
|
ParkedCarQuatY[22] = 0.0000
|
|
ParkedCarQuatZ[22] = 0.9999
|
|
ParkedCarQuatW[22] = 0.0166
|
|
ParkedCarModel[22] = sultan
|
|
|
|
//parked at junction before turn for tunnel
|
|
ParkedCarPos[23] = <<-856.7647, -679.0630, 27.2491>>
|
|
ParkedCarQuatX[23] = -0.0080
|
|
ParkedCarQuatY[23] = 0.0277
|
|
ParkedCarQuatZ[23] = 0.0148
|
|
ParkedCarQuatW[23] = 0.9995
|
|
ParkedCarModel[23] = sultan
|
|
|
|
//on road approach to tunnel
|
|
ParkedCarPos[24] = <<-750.8827, -607.8928, 29.5466>>
|
|
ParkedCarQuatX[24] = 0.0609
|
|
ParkedCarQuatY[24] = 0.0021
|
|
ParkedCarQuatZ[24] = 0.9978
|
|
ParkedCarQuatW[24] = -0.0261
|
|
ParkedCarModel[24] = sultan
|
|
|
|
//inside car park
|
|
ParkedCarPos[25] = <<-477.1844, -757.5135, 30.1527>>
|
|
ParkedCarQuatX[25] = -0.0022
|
|
ParkedCarQuatY[25] = -0.0021
|
|
ParkedCarQuatZ[25] = 0.7233
|
|
ParkedCarQuatW[25] = 0.6905
|
|
ParkedCarModel[25] = RapidGT
|
|
|
|
//parked next to tunnel exit area
|
|
ParkedCarPos[26] = <<-471.0100, -624.5500, 30.5800>>
|
|
ParkedCarQuatX[26] = 0.0001
|
|
ParkedCarQuatY[26] = -0.0002
|
|
ParkedCarQuatZ[26] = -0.0144
|
|
ParkedCarQuatW[26] = 0.9999
|
|
ParkedCarModel[26] = sultan
|
|
|
|
//underground tunnel carpark
|
|
ParkedCarPos[27] = <<-679.3469, -593.3812, 24.7059>>
|
|
ParkedCarQuatX[27] = -0.0011
|
|
ParkedCarQuatY[27] = 0.0004
|
|
ParkedCarQuatZ[27] = 0.6772
|
|
ParkedCarQuatW[27] = 0.7358
|
|
ParkedCarModel[27] = sultan
|
|
|
|
//end area
|
|
ParkedCarPos[28] = <<433.6576, -608.7065, 27.7732>>
|
|
ParkedCarQuatX[28] = -0.0003
|
|
ParkedCarQuatY[28] = 0.0005
|
|
ParkedCarQuatZ[28] = 0.7774
|
|
ParkedCarQuatW[28] = -0.6290
|
|
ParkedCarModel[28] = sultan
|
|
|
|
//end area
|
|
ParkedCarPos[29] = <<416.3534, -638.7431, 27.8704>>
|
|
ParkedCarQuatX[29] = 0.0891
|
|
ParkedCarQuatY[29] = -0.0957
|
|
ParkedCarQuatZ[29] = 0.7111
|
|
ParkedCarQuatW[29] = 0.6908
|
|
ParkedCarModel[29] = bati
|
|
|
|
//end area
|
|
ParkedCarPos[30] = <<433.9501, -603.2841, 27.8743>>
|
|
ParkedCarQuatX[30] = 0.0794
|
|
ParkedCarQuatY[30] = -0.1039
|
|
ParkedCarQuatZ[30] = 0.6505
|
|
ParkedCarQuatW[30] = 0.7482
|
|
ParkedCarModel[30] = bati
|
|
|
|
//Ambulance outside hospital entrance
|
|
ParkedCarPos[31] = <<291.0103, -589.8865, 42.9593>>
|
|
ParkedCarQuatX[31] = 0.0053
|
|
ParkedCarQuatY[31] = -0.0026
|
|
ParkedCarQuatZ[31] = 0.9489
|
|
ParkedCarQuatW[31] = 0.3156
|
|
ParkedCarModel[31] = AMBULANCE
|
|
|
|
// **** UBER RECORDED SET PIECE CARS ****
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, FELTZER2010 removed from the game !!!
|
|
/// !!! ALSO may need re-record if wheels dont sit on the ground now
|
|
//may need to remain here as could drop out as traffic vehicle
|
|
SetPieceCarPos[0] = <<-1104.2826, -775.1389, 18.8468>>
|
|
SetPieceCarQuatX[0] = -0.0068
|
|
SetPieceCarQuatY[0] = -0.0121
|
|
SetPieceCarQuatZ[0] = 0.9186
|
|
SetPieceCarQuatW[0] = 0.3949
|
|
SetPieceCarRecording[0] = 52
|
|
SetPieceCarStartime[0] = 16000.0000
|
|
SetPieceCarRecordingSpeed[0] = 1.0000
|
|
SetPieceCarModel[0] = feltzer2
|
|
|
|
//set here in hope it starts playing
|
|
SetPieceCarPos[1] = <<-1129.4855, -805.7412, 15.9592>>
|
|
SetPieceCarQuatX[1] = 0.0303
|
|
SetPieceCarQuatY[1] = -0.0208
|
|
SetPieceCarQuatZ[1] = -0.3298
|
|
SetPieceCarQuatW[1] = 0.9433
|
|
SetPieceCarRecording[1] = 5
|
|
SetPieceCarStartime[1] = 16488.0000
|
|
SetPieceCarRecordingSpeed[1] = 1.0000
|
|
SetPieceCarModel[1] = washington
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, FELTZER2010 removed from the game !!!
|
|
/// !!! ALSO may need re-record if wheels dont sit on the ground now
|
|
//incidental vehicle can be converted back to traffic eventually
|
|
SetPieceCarPos[2] = <<-998.2445, -692.8199, 21.5328>>
|
|
SetPieceCarQuatX[2] = -0.0136
|
|
SetPieceCarQuatY[2] = -0.0158
|
|
SetPieceCarQuatZ[2] = 0.8929
|
|
SetPieceCarQuatW[2] = 0.4498
|
|
SetPieceCarRecording[2] = 53
|
|
SetPieceCarStartime[2] = 21412.0000
|
|
SetPieceCarRecordingSpeed[2] = 1.0000
|
|
SetPieceCarModel[2] = feltzer2
|
|
|
|
//!!! Pos and quaternion will need update as vehicle model had to change, FELTZER2010 removed from the game !!!
|
|
/// !!! ALSO may need re-record if wheels dont sit on the ground now
|
|
//vehicle swerves in front of target as he cuts across the wrong side of the road, in the lead up to the tunnel
|
|
SetPieceCarPos[3] = <<-883.8546, -655.3506, 27.5493>>
|
|
SetPieceCarQuatX[3] = 0.0032
|
|
SetPieceCarQuatY[3] = -0.0018
|
|
SetPieceCarQuatZ[3] = 0.7120
|
|
SetPieceCarQuatW[3] = 0.7021
|
|
SetPieceCarRecording[3] = 54
|
|
SetPieceCarStartime[3] = 25000.0000
|
|
SetPieceCarRecordingSpeed[3] = 1.0000
|
|
SetPieceCarModel[3] = feltzer2
|
|
|
|
//incidental vehicle can be made traffic eventually
|
|
SetPieceCarPos[4] = <<-850.7409, -661.5627, 27.3668>>
|
|
SetPieceCarQuatX[4] = -0.0015
|
|
SetPieceCarQuatY[4] = 0.0017
|
|
SetPieceCarQuatZ[4] = -0.6912
|
|
SetPieceCarQuatW[4] = 0.7227
|
|
SetPieceCarRecording[4] = 55
|
|
SetPieceCarStartime[4] = 28500.0000
|
|
SetPieceCarRecordingSpeed[4] = 1.0000
|
|
SetPieceCarModel[4] = serrano
|
|
|
|
//vehicle swerves in front of target as he turns left to head for the tunnel
|
|
SetPieceCarPos[5] = <<-721.2928, -652.8879, 29.8160>>
|
|
SetPieceCarQuatX[5] = -0.0024
|
|
SetPieceCarQuatY[5] = -0.0102
|
|
SetPieceCarQuatZ[5] = 0.6908
|
|
SetPieceCarQuatW[5] = 0.7230
|
|
SetPieceCarRecording[5] = 56
|
|
SetPieceCarStartime[5] = 32500.0000
|
|
SetPieceCarRecordingSpeed[5] = 1.0000
|
|
SetPieceCarModel[5] = serrano
|
|
|
|
// can be converted back to traffic
|
|
SetPieceCarPos[6] = <<-724.7061, -648.6400, 29.7668>>
|
|
SetPieceCarQuatX[6] = -0.0212
|
|
SetPieceCarQuatY[6] = 0.0050
|
|
SetPieceCarQuatZ[6] = 0.7061
|
|
SetPieceCarQuatW[6] = 0.7078
|
|
SetPieceCarRecording[6] = 57
|
|
SetPieceCarStartime[6] = 32750.0000
|
|
SetPieceCarRecordingSpeed[6] = 1.0000
|
|
SetPieceCarModel[6] = washington
|
|
|
|
//vehicle driving along tunnel same direction as target
|
|
SetPieceCarPos[7] = <<-688.4173, -579.6989, 24.8499>>
|
|
SetPieceCarQuatX[7] = 0.0026
|
|
SetPieceCarQuatY[7] = -0.0029
|
|
SetPieceCarQuatZ[7] = 0.7397
|
|
SetPieceCarQuatW[7] = -0.6730
|
|
SetPieceCarRecording[7] = 58
|
|
SetPieceCarStartime[7] = 40273.0000
|
|
SetPieceCarRecordingSpeed[7] = 1.0000
|
|
SetPieceCarModel[7] = washington
|
|
|
|
//vehicle down tunnel coming towards target
|
|
SetPieceCarPos[8] = <<-563.1786, -579.4122, 25.3124>>
|
|
SetPieceCarQuatX[8] = 0.0020
|
|
SetPieceCarQuatY[8] = 0.0021
|
|
SetPieceCarQuatZ[8] = 0.7032
|
|
SetPieceCarQuatW[8] = 0.7110
|
|
SetPieceCarRecording[8] = 59
|
|
SetPieceCarStartime[8] = 43500.0000
|
|
SetPieceCarRecordingSpeed[8] = 1.0000
|
|
SetPieceCarModel[8] = Trash
|
|
|
|
//bmx rider who will eventually be performing bunny hops / tricks
|
|
SetPieceCarPos[9] = <<-556.1506, -631.2017, 30.5620>>
|
|
SetPieceCarQuatX[9] = -0.0352
|
|
SetPieceCarQuatY[9] = 0.0378
|
|
SetPieceCarQuatZ[9] = -0.6805
|
|
SetPieceCarQuatW[9] = 0.7309
|
|
SetPieceCarRecording[9] = 60
|
|
SetPieceCarStartime[9] = 51889.0000
|
|
SetPieceCarRecordingSpeed[9] = 1.0000
|
|
SetPieceCarModel[9] = BMX
|
|
|
|
//vehicle screeches to a halt as target cuts across road on tunnel exit
|
|
SetPieceCarPos[10] = <<-445.0543, -655.1606, 31.3466>>
|
|
SetPieceCarQuatX[10] = 0.0076
|
|
SetPieceCarQuatY[10] = 0.0093
|
|
SetPieceCarQuatZ[10] = 0.7136
|
|
SetPieceCarQuatW[10] = 0.7005
|
|
SetPieceCarRecording[10] = 61
|
|
SetPieceCarStartime[10] = 56772.0000
|
|
SetPieceCarRecordingSpeed[10] = 1.0000
|
|
SetPieceCarModel[10] = sultan
|
|
|
|
//second vehicle to swerve where target cuts across road from tunnel
|
|
SetPieceCarPos[11] = <<-519.4122, -666.3391, 32.7365>>
|
|
SetPieceCarQuatX[11] = 0.0105
|
|
SetPieceCarQuatY[11] = 0.0179
|
|
SetPieceCarQuatZ[11] = -0.6817
|
|
SetPieceCarQuatW[11] = 0.7313
|
|
SetPieceCarRecording[11] = 62
|
|
SetPieceCarStartime[11] = 57772.0000
|
|
SetPieceCarRecordingSpeed[11] = 1.0000
|
|
SetPieceCarModel[11] = washington
|
|
|
|
//bmx kid jump down stairs
|
|
SetPieceCarPos[12] = <<-491.8959, -716.5375, 32.5585>>
|
|
SetPieceCarQuatX[12] = 0.1433
|
|
SetPieceCarQuatY[12] = 0.0787
|
|
SetPieceCarQuatZ[12] = 0.9609
|
|
SetPieceCarQuatW[12] = -0.2234
|
|
SetPieceCarRecording[12] = 63
|
|
SetPieceCarStartime[12] = 60800.00 // 60084.00
|
|
SetPieceCarRecordingSpeed[12] = 1.2000
|
|
SetPieceCarModel[12] = BMX
|
|
|
|
SetPieceCarPos[13] = <<-492.3147, -827.8944, 29.9952>>
|
|
SetPieceCarQuatX[13] = -0.0050
|
|
SetPieceCarQuatY[13] = 0.0046
|
|
SetPieceCarQuatZ[13] = 0.0169
|
|
SetPieceCarQuatW[13] = 0.9998
|
|
SetPieceCarRecording[13] = 64
|
|
SetPieceCarStartime[13] = 64030.0000
|
|
SetPieceCarRecordingSpeed[13] = 1.0000
|
|
SetPieceCarModel[13] = washington
|
|
|
|
//to be converted to traffic car
|
|
SetPieceCarPos[14] = <<-518.8372, -756.7956, 31.5421>>
|
|
SetPieceCarQuatX[14] = -0.0147
|
|
SetPieceCarQuatY[14] = -0.0264
|
|
SetPieceCarQuatZ[14] = 0.9686
|
|
SetPieceCarQuatW[14] = -0.2467
|
|
SetPieceCarRecording[14] = 65
|
|
SetPieceCarStartime[14] = 64230.0000
|
|
SetPieceCarRecordingSpeed[14] = 1.0000
|
|
SetPieceCarModel[14] = washington
|
|
|
|
//vehicle coming out carpark, blocking other entrance
|
|
SetPieceCarPos[15] = <<-477.6166, -806.7344, 30.0523>>
|
|
SetPieceCarQuatX[15] = 0.0000
|
|
SetPieceCarQuatY[15] = 0.0025
|
|
SetPieceCarQuatZ[15] = -0.7010
|
|
SetPieceCarQuatW[15] = 0.7132
|
|
SetPieceCarRecording[15] = 66
|
|
SetPieceCarStartime[15] = 66084.0000
|
|
SetPieceCarRecordingSpeed[15] = 1.0000
|
|
SetPieceCarModel[15] = washington
|
|
|
|
//truck skiding as target cuts back into carpark
|
|
SetPieceCarPos[16] = <<-417.4774, -836.1498, 31.4420>>
|
|
SetPieceCarQuatX[16] = -0.0077
|
|
SetPieceCarQuatY[16] = -0.0047
|
|
SetPieceCarQuatZ[16] = 0.7025
|
|
SetPieceCarQuatW[16] = 0.7117
|
|
SetPieceCarRecording[16] = 67
|
|
SetPieceCarStartime[16] = 65384.0000
|
|
SetPieceCarRecordingSpeed[16] = 1.0000
|
|
SetPieceCarModel[16] = Benson
|
|
|
|
//second vehicle to skid at carpark entrance
|
|
SetPieceCarPos[17] = <<-413.1984, -831.7321, 30.8216>>
|
|
SetPieceCarQuatX[17] = -0.0237
|
|
SetPieceCarQuatY[17] = 0.0144
|
|
SetPieceCarQuatZ[17] = 0.7088
|
|
SetPieceCarQuatW[17] = 0.7049
|
|
SetPieceCarRecording[17] = 68
|
|
SetPieceCarStartime[17] = 67078.0000
|
|
SetPieceCarRecordingSpeed[17] = 1.0000
|
|
SetPieceCarModel[17] = sultan
|
|
|
|
//follows bus towards carpark turn
|
|
SetPieceCarPos[18] = <<-528.5989, -840.7145, 29.4130>>
|
|
SetPieceCarQuatX[18] = -0.0237
|
|
SetPieceCarQuatY[18] = 0.0236
|
|
SetPieceCarQuatZ[18] = 0.7098
|
|
SetPieceCarQuatW[18] = -0.7036
|
|
SetPieceCarRecording[18] = 69
|
|
SetPieceCarStartime[18] = 64606.3203
|
|
SetPieceCarRecordingSpeed[18] = 1.0000
|
|
SetPieceCarModel[18] = sultan
|
|
|
|
//vehicle in the carpark with lights on
|
|
SetPieceCarPos[19] = <<-446.0574, -767.6522, 29.9676>>
|
|
SetPieceCarQuatX[19] = -0.0002
|
|
SetPieceCarQuatY[19] = 0.0001
|
|
SetPieceCarQuatZ[19] = 0.7110
|
|
SetPieceCarQuatW[19] = 0.7032
|
|
SetPieceCarRecording[19] = 51
|
|
SetPieceCarStartime[19] = 70071.8516
|
|
SetPieceCarRecordingSpeed[19] = 1.0000
|
|
SetPieceCarModel[19] = sultan
|
|
|
|
//first car to react on the highway as target gets on
|
|
SetPieceCarPos[20] = <<-488.5203, -523.8471, 24.8363>>
|
|
SetPieceCarQuatX[20] = -0.0010
|
|
SetPieceCarQuatY[20] = 0.0015
|
|
SetPieceCarQuatZ[20] = 0.7208
|
|
SetPieceCarQuatW[20] = -0.6931
|
|
SetPieceCarRecording[20] = 71
|
|
SetPieceCarStartime[20] = 81355.8516
|
|
SetPieceCarRecordingSpeed[20] = 1.0000
|
|
SetPieceCarModel[20] = landstalker
|
|
|
|
//landstalker on highway driving normally towards target (whilst on opposite side)
|
|
SetPieceCarPos[21] = <<-305.7855, -508.7270, 24.7583>>
|
|
SetPieceCarQuatX[21] = 0.0168
|
|
SetPieceCarQuatY[21] = -0.0137
|
|
SetPieceCarQuatZ[21] = 0.7019
|
|
SetPieceCarQuatW[21] = 0.7119
|
|
SetPieceCarRecording[21] = 72
|
|
SetPieceCarStartime[21] = 86290.8516
|
|
SetPieceCarRecordingSpeed[21] = 1.0000
|
|
SetPieceCarModel[21] = landstalker
|
|
|
|
//Ambulance coming out hospital
|
|
SetPieceCarPos[22] = <<294.6554, -576.5358, 42.9547>>
|
|
SetPieceCarQuatX[22] = 0.0001
|
|
SetPieceCarQuatY[22] = 0.0078
|
|
SetPieceCarQuatZ[22] = 0.2262
|
|
SetPieceCarQuatW[22] = 0.9740
|
|
SetPieceCarRecording[22] = 73
|
|
SetPieceCarStartime[22] = 109000.0 //576.0000
|
|
SetPieceCarRecordingSpeed[22] = 1.0000
|
|
SetPieceCarModel[22] = AMBULANCE
|
|
|
|
//truck target cuts in front of on highway
|
|
SetPieceCarPos[23] = <<-393.8603, -503.4236, 25.4432>>
|
|
SetPieceCarQuatX[23] = 0.0016
|
|
SetPieceCarQuatY[23] = 0.0018
|
|
SetPieceCarQuatZ[23] = 0.7075
|
|
SetPieceCarQuatW[23] = 0.7067
|
|
SetPieceCarRecording[23] = 74
|
|
SetPieceCarStartime[23] = 82431.8516
|
|
SetPieceCarRecordingSpeed[23] = 1.0000
|
|
SetPieceCarModel[23] = Packer
|
|
|
|
//bus guides player to the left just before full turn back into car park
|
|
SetPieceCarPos[24] = <<-527.6368, -846.5891, 29.9361>>
|
|
SetPieceCarQuatX[24] = 0.0422
|
|
SetPieceCarQuatY[24] = -0.0031
|
|
SetPieceCarQuatZ[24] = -0.7009
|
|
SetPieceCarQuatW[24] = 0.7120
|
|
SetPieceCarRecording[24] = 75
|
|
SetPieceCarStartime[24] = 62500.0 //63000.0000
|
|
SetPieceCarRecordingSpeed[24] = 1.0000
|
|
SetPieceCarModel[24] = bus
|
|
|
|
//car target swerves around back off when exiting highway onto slip road.
|
|
SetPieceCarPos[25] = <<3.4457, -533.8352, 33.2443>>
|
|
SetPieceCarQuatX[25] = 0.0232
|
|
SetPieceCarQuatY[25] = 0.0045
|
|
SetPieceCarQuatZ[25] = -0.6929
|
|
SetPieceCarQuatW[25] = 0.7206
|
|
SetPieceCarRecording[25] = 80
|
|
SetPieceCarStartime[25] = 100001.3984
|
|
SetPieceCarRecordingSpeed[25] = 1.0000
|
|
SetPieceCarModel[25] = asterope
|
|
|
|
//moved here in hope it appears from traffic section
|
|
SetPieceCarPos[26] = <<-483.5551, -531.6314, 24.8571>>
|
|
SetPieceCarQuatX[26] = 0.0034
|
|
SetPieceCarQuatY[26] = -0.0031
|
|
SetPieceCarQuatZ[26] = -0.6972
|
|
SetPieceCarQuatW[26] = 0.7168
|
|
SetPieceCarRecording[26] = 76
|
|
SetPieceCarStartime[26] = 81217.4375
|
|
SetPieceCarRecordingSpeed[26] = 1.0000
|
|
SetPieceCarModel[26] = asterope
|
|
|
|
//moved here in hope it appears from traffic section. Highway
|
|
SetPieceCarPos[27] = <<-277.6243, -508.3559, 24.9767>>
|
|
SetPieceCarQuatX[27] = 0.0108
|
|
SetPieceCarQuatY[27] = -0.0139
|
|
SetPieceCarQuatZ[27] = 0.7117
|
|
SetPieceCarQuatW[27] = 0.7023
|
|
SetPieceCarRecording[27] = 77
|
|
SetPieceCarStartime[27] = 87256.4375
|
|
SetPieceCarRecordingSpeed[27] = 1.0000
|
|
SetPieceCarModel[27] = asterope
|
|
|
|
//first truck on highway where target reaches wrong side of the road
|
|
SetPieceCarPos[28] = <<-201.7354, -496.1847, 27.3531>>
|
|
SetPieceCarQuatX[28] = -0.0125
|
|
SetPieceCarQuatY[28] = -0.0117
|
|
SetPieceCarQuatZ[28] = 0.7296
|
|
SetPieceCarQuatW[28] = 0.6837
|
|
SetPieceCarRecording[28] = 82
|
|
SetPieceCarStartime[28] = 90798.3203
|
|
SetPieceCarRecordingSpeed[28] = 1.0000
|
|
SetPieceCarModel[28] = Packer
|
|
|
|
//as target goes off the highway, swerves around him
|
|
SetPieceCarPos[29] = <<-118.4835, -529.6654, 29.6739>>
|
|
SetPieceCarQuatX[29] = 0.0116
|
|
SetPieceCarQuatY[29] = -0.0127
|
|
SetPieceCarQuatZ[29] = -0.6860
|
|
SetPieceCarQuatW[29] = 0.7274
|
|
SetPieceCarRecording[29] = 44
|
|
SetPieceCarStartime[29] = 94954.8594
|
|
SetPieceCarRecordingSpeed[29] = 1.0000
|
|
SetPieceCarModel[29] = landstalker
|
|
|
|
// add extra time to recording start times for main car re record
|
|
INT i = 0
|
|
INT iNumSetPieceVehicles = COUNT_OF(SetPieceCarID)
|
|
INT iNumTrafficVehicles = COUNT_OF(TrafficCarID)
|
|
REPEAT iNumSetPieceVehicles i
|
|
IF SetPieceCarStartime[i] >= NIGEL2_UBER_PLAYBACK_TIME_STEP_POINT_01
|
|
SetPieceCarStartime[i] -= NIGEL2_UBER_TIME_STEP_01
|
|
//CPRINTLN(DEBUG_MISSION, "LOAD_UBER_DATA : updated for NIGEL2_UBER_TIME_STEP_01 - - SetPieceCarStartime[", i, "] = ", SetPieceCarStartime[i])
|
|
ENDIF
|
|
IF SetPieceCarStartime[i] >= NIGEL2_UBER_PLAYBACK_TIME_STEP_POINT_02
|
|
SetPieceCarStartime[i] -= NIGEL2_UBER_TIME_STEP_02
|
|
//CPRINTLN(DEBUG_MISSION, "LOAD_UBER_DATA : updated for NIGEL2_UBER_TIME_STEP_02 - - SetPieceCarStartime[", i, "] = ", SetPieceCarStartime[i])
|
|
ENDIF
|
|
ENDREPEAT
|
|
i = 0
|
|
REPEAT iNumTrafficVehicles i
|
|
IF TrafficCarStartime[i] >= NIGEL2_UBER_PLAYBACK_TIME_STEP_POINT_01
|
|
TrafficCarStartime[i] -= NIGEL2_UBER_TIME_STEP_01
|
|
//CPRINTLN(DEBUG_MISSION, "LOAD_UBER_DATA : updated for NIGEL2_UBER_TIME_STEP_01 - TrafficCarStartime[", i, "] = ", TrafficCarStartime[i])
|
|
ENDIF
|
|
IF TrafficCarStartime[i] >= NIGEL2_UBER_PLAYBACK_TIME_STEP_POINT_02
|
|
TrafficCarStartime[i] -= NIGEL2_UBER_TIME_STEP_02
|
|
//CPRINTLN(DEBUG_MISSION, "LOAD_UBER_DATA : updated for NIGEL2_UBER_TIME_STEP_02 - - TrafficCarStartime[", i, "] = ", TrafficCarStartime[i])
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// remove object from the game
|
|
/// PARAMS:
|
|
/// objectIndex - object to remove
|
|
/// bDelete - if true delete it, else set as no longer needed
|
|
PROC SAFE_REMOVE_OBJECT(OBJECT_INDEX &objectIndex, BOOL bDelete = FALSE)
|
|
IF bDelete
|
|
SAFE_DELETE_OBJECT(objectIndex)
|
|
ELSE
|
|
SAFE_RELEASE_OBJECT(objectIndex)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// removes vehicle from the world
|
|
/// PARAMS:
|
|
/// vehIndex - vehicle to be removed
|
|
/// bDelete - if true AND player isn't inside it delete it, else set as no longer needed
|
|
PROC SAFE_REMOVE_VEHICLE(VEHICLE_INDEX &vehIndex, BOOL bDelete = FALSE)
|
|
IF bDelete
|
|
SAFE_DELETE_VEHICLE(vehIndex)
|
|
ELSE
|
|
SAFE_RELEASE_VEHICLE(vehIndex)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// removes ped from the game
|
|
/// PARAMS:
|
|
/// ped - ped to be removed
|
|
/// bDelete - if true delete it, else set as no longer needed
|
|
/// bDetach - if true ped will be detached if attached, and no in a vehicle or getting into a vehicle
|
|
PROC SAFE_REMOVE_PED(PED_INDEX &ped, BOOL bDelete = FALSE)
|
|
IF bDelete
|
|
SAFE_DELETE_PED(ped)
|
|
ELSE
|
|
SAFE_RELEASE_PED(ped)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// teleport a ped to a new location
|
|
/// PARAMS:
|
|
/// pedIndex - ped to teleport
|
|
/// vPosition - position to teleport to
|
|
/// fHeading - heading to give the ped at the new location
|
|
/// bSnapToGround - if true ped will be positioned at ground level, else drops in a meter above
|
|
/// bForcePedAiAndAnimUpdate - if true FORCE_PED_AI_AND_ANIMATION_UPDATE is applied on the ped
|
|
PROC SAFE_TELEPORT_PED(PED_INDEX pedIndex, VECTOR vPosition, FLOAT fHeading = 0.0, BOOL bSnapToGround = FALSE, BOOL bForcePedAiAndAnimUpdate = FALSE)
|
|
IF IS_ENTITY_ALIVE(pedIndex)
|
|
IF bSnapToGround
|
|
vPosition.Z = INVALID_WORLD_Z
|
|
ENDIF
|
|
SET_ENTITY_COORDS(pedIndex, vPosition)
|
|
SET_ENTITY_HEADING(pedIndex, fHeading)
|
|
IF bForcePedAiAndAnimUpdate
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(pedIndex)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// teleport a vehicle to a new location
|
|
/// PARAMS:
|
|
/// vehIndex - vehicle to teleport
|
|
/// vPosition - position to teleport to
|
|
/// fHeading - heading to give the vehicle at the new location
|
|
/// bSnapToGround - if true ped will be positioned at ground level, else drops in a meter above
|
|
PROC SAFE_TELEPORT_VEHICLE(VEHICLE_INDEX &vehIndex, VECTOR vPosition, FLOAT fHeading = 0.0, BOOL bSnapToGround = FALSE)
|
|
IF IS_ENTITY_ALIVE(vehIndex)
|
|
IF bSnapToGround
|
|
vPosition.Z = INVALID_WORLD_Z
|
|
ENDIF
|
|
SET_ENTITY_COORDS(vehIndex, vPosition)
|
|
SET_ENTITY_HEADING(vehIndex, fHeading)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// teleports a ped out of their vehicle.
|
|
/// NOTE: proc waits until GET_SAFE_COORD_FOR_PED returns true
|
|
/// PARAMS:
|
|
/// pedIndex - ped to Teleport
|
|
PROC SAFE_TELEPORT_PED_OUT_OF_THEIR_VEHICLE(PED_INDEX pedIndex)
|
|
VECTOR vRespotCoords = << 0.0, 0.0, 0.0 >>
|
|
FLOAT fRespotHeading = 0.0
|
|
IF IS_ENTITY_ALIVE(pedIndex)
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(pedIndex)
|
|
vRespotCoords = GET_ENTITY_COORDS(pedIndex)
|
|
WHILE NOT GET_SAFE_COORD_FOR_PED(vRespotCoords, FALSE, vRespotCoords)
|
|
WAIT(0)
|
|
vRespotCoords.x += 2.0
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SAFE_TELEPORT_PED_OUT_OF_THEIR_VEHICLE - looking for safe coords") ENDIF #ENDIF
|
|
ENDWHILE
|
|
fRespotHeading = GET_ENTITY_HEADING(pedIndex)
|
|
SAFE_TELEPORT_PED(pedIndex, vRespotCoords, fRespotHeading, TRUE, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks ped and vehicle are ok before putting the ped in the vehicle
|
|
/// If the seat is already occupied by a ped, it gets deleted.
|
|
/// PARAMS:
|
|
/// pedIndex - ped to put in the vehicle
|
|
/// vehIndex - vehicle ped is going into
|
|
/// seat - seat ped is to sit in
|
|
PROC SAFE_PUT_PED_INTO_VEHICLE(PED_INDEX pedIndex, VEHICLE_INDEX &vehIndex, VEHICLE_SEAT seat = VS_DRIVER)
|
|
IF IS_ENTITY_ALIVE(pedIndex)
|
|
AND IS_VEHICLE_OK(vehIndex)
|
|
IF IS_VEHICLE_SEAT_FREE(vehIndex, seat)
|
|
SAFE_SET_PED_INTO_VEHICLE(pedIndex, vehIndex, seat)
|
|
ELSE
|
|
PED_INDEX pedTemp_AlreadyInSeat = GET_PED_IN_VEHICLE_SEAT(vehIndex, seat) //check the ped we want to put in the vehicle isn't already in the vehicle
|
|
IF pedTemp_AlreadyInSeat != pedIndex
|
|
IF IS_ENTITY_ALIVE(pedTemp_AlreadyInSeat)
|
|
SAFE_TELEPORT_PED_OUT_OF_THEIR_VEHICLE(pedTemp_AlreadyInSeat)
|
|
SAFE_PUT_PED_INTO_VEHICLE(pedIndex, vehIndex, seat)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// check if iTimeAmount has passed since iTimer was set
|
|
/// PARAMS:
|
|
/// iTimer - the timer
|
|
/// iTimeAmount - the amount of time to check has passed
|
|
/// RETURNS:
|
|
/// True is the specified amount of time has passed for the specified timer.
|
|
FUNC BOOL HAS_TIME_PASSED(INT iTimer, INT iTimeAmount)
|
|
RETURN (GET_GAME_TIMER() - iTimer) > iTimeAmount
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Test for if two coords are within fRange metres of each other
|
|
/// PARAMS:
|
|
/// v1 - first coord
|
|
/// v2 - second coord
|
|
/// fRange - distance
|
|
/// RETURNS:
|
|
/// TRUE if two coords are withing fRange of each other
|
|
FUNC BOOL IS_COORD_IN_RANGE_OF_COORD(VECTOR v1, VECTOR v2, FLOAT fRange)
|
|
RETURN VDIST2(v1, v2) <= (fRange*fRange)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if a specific conversation root is currently playing
|
|
/// PARAMS:
|
|
/// sConversationRoot - the conversation root to test
|
|
/// bReturnTrueIfStringIsNull - checks against the issue where GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT can return "NULL" the first few frames after CREATE_CONVERSATION has returned true
|
|
/// RETURNS:
|
|
/// TRUE - if there is an ongoing or queued conversation with a root matching the passed in string or "NULL" if bReturnTrueIfNULL
|
|
FUNC BOOL IS_SPECIFIC_CONVERSATION_ROOT_CURRENTLY_PLAYING(STRING sConversationRoot, BOOL bReturnTrueIfStringIsNull = TRUE)
|
|
TEXT_LABEL_23 tlTempRoot
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
tlTempRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
//if current root matches passed in string return true
|
|
IF ARE_STRINGS_EQUAL(tlTempRoot, sConversationRoot)
|
|
RETURN TRUE
|
|
ENDIF
|
|
IF bReturnTrueIfStringIsNull
|
|
//if current root matches null, return true
|
|
//because if the correct root isn't returned the first frame or so after CREATE_CONVERSATION has return true.
|
|
IF ARE_STRINGS_EQUAL(tlTempRoot, "NULL")
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Attempts to start dialogue using CREATE_CONVERSATION, but first checks that no message is being displayed or that the subtitles are off in the profile settings
|
|
/// PARAMS:
|
|
/// YourPedStruct - the mission's conversation struct
|
|
/// WhichBlockOfTextToLoad - Thr text block the convo lives in
|
|
/// WhichRootLabel - The text root the convo lives in
|
|
/// PassedConversationPriority - the priority level of the convo
|
|
/// ShouldDisplaySubtitles - if subtitles should be displayed NOTE: if set to FALSE we don't check for a message being displayed
|
|
/// ShouldAddToBriefScreen - if the convo should print to the brief screen
|
|
/// cloneConversation - ?
|
|
/// RETURNS:
|
|
/// TRUE if the convo was created successfully
|
|
FUNC BOOL NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN, BOOL cloneConversation = FALSE)
|
|
IF ShouldDisplaySubtitles = DISPLAY_SUBTITLES
|
|
IF IS_MESSAGE_BEING_DISPLAYED()
|
|
IF GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) <> 0
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF CREATE_CONVERSATION(YourPedStruct, WhichBlockOfTextToLoad, WhichRootLabel, PassedConversationPriority, ShouldDisplaySubtitles, ShouldAddToBriefScreen, cloneConversation)
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Attempts to start dialogue using CREATE_CONVERSATION, but first checks that no message is being displayed or that the subtitles are off in the profile settings
|
|
/// PARAMS:
|
|
/// YourPedStruct - the mission's conversation struct
|
|
/// WhichBlockOfTextToLoad - Thr text block the convo lives in
|
|
/// WhichRootLabel - The text root the convo lives in
|
|
/// WhichSpecificLabel - Which line of dialogue to start from
|
|
/// PassedConversationPriority - the priority level of the convo
|
|
/// ShouldDisplaySubtitles - if subtitles should be displayed NOTE: if set to FALSE we don't check for a message being displayed
|
|
/// ShouldAddToBriefScreen - if the convo should print to the brief screen
|
|
/// RETURNS:
|
|
/// TRUE if the convo was created successfully
|
|
FUNC BOOL NIG2_CREATE_CONVERSATION_FROM_SPECIFIC_LINE_WITH_MESSAGE_DISPLAYED_CHECK(structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, STRING WhichSpecificLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
IF ShouldDisplaySubtitles = DISPLAY_SUBTITLES
|
|
IF IS_MESSAGE_BEING_DISPLAYED()
|
|
IF GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) <> 0
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(YourPedStruct, WhichBlockOfTextToLoad, WhichRootLabel, WhichSpecificLabel, PassedConversationPriority, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Attempts to start dialogue using PLAY_SINGLE_LINE_FROM_CONVERSATION, but first checks that no message is being displayed or that the subtitles are off in the profile settings
|
|
/// PARAMS:
|
|
/// YourPedStruct - the mission's conversation struct
|
|
/// WhichBlockOfTextToLoad - Thr text block the convo lives in
|
|
/// WhichRootLabel - The text root the convo lives in
|
|
/// WhichSpecificLabel - the specific line we want to play
|
|
/// PassedConversationPriority - the priority level of the convo
|
|
/// ShouldDisplaySubtitles - if subtitles should be displayed NOTE: if set to FALSE we don't check for a message being displayed
|
|
/// ShouldAddToBriefScreen - if the convo should print to the brief screen
|
|
/// RETURNS:
|
|
/// TRUE if the convo was created successfully
|
|
FUNC BOOL NIG2_PLAY_SINGLE_LINE_FROM_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, STRING WhichSpecificLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
IF ShouldDisplaySubtitles = DISPLAY_SUBTITLES
|
|
IF IS_MESSAGE_BEING_DISPLAYED()
|
|
IF GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) <> 0
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(YourPedStruct, WhichBlockOfTextToLoad, WhichRootLabel, WhichSpecificLabel, PassedConversationPriority, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// safely check if a ped is playing ambient speech
|
|
/// PARAMS:
|
|
/// pedIndex - to check
|
|
/// RETURNS:
|
|
/// TRUE if uninjured and playing ambient speech
|
|
FUNC BOOL SAFE_IS_PED_PLAYING_AMBIENT_SPEECH(PED_INDEX &pedIndex)
|
|
|
|
IF IS_PED_UNINJURED(pedIndex)
|
|
IF IS_AMBIENT_SPEECH_PLAYING(pedIndex)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// trigger a music event, whilst first checking it has been prepared (if required)
|
|
/// PARAMS:
|
|
/// sMusicEvent - the music event name
|
|
/// bRequiresPrepare - if TRUE PREPARE_MUSIC_EVENT is setup before the event can be trigger. Check the doc to see if an event needs preloading
|
|
/// RETURNS:
|
|
/// TRUE if the event is trigger successfully
|
|
FUNC BOOL SAFE_TRIGGER_MISSION_MUSIC_EVENT(STRING sMusicEvent, BOOL bRequiresPrepare = FALSE)
|
|
IF bRequiresPrepare
|
|
IF NOT PREPARE_MUSIC_EVENT(sMusicEvent)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SAFE_TRIGGER_MISSION_MUSIC_EVENT - returning FALSE, not yet prepared for = ", sMusicEvent) ENDIF #ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
IF TRIGGER_MUSIC_EVENT(sMusicEvent)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SAFE_TRIGGER_MISSION_MUSIC_EVENT - returning TRUE for = ", sMusicEvent) ENDIF #ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// check if Trevor is driving on the wrong side of the road
|
|
/// NOTE: used to trigger dialogue
|
|
/// RETURNS:
|
|
/// TRUE if he is
|
|
FUNC BOOL IS_TREVOR_DRIVING_ON_ROAD_WRONG_WAY()
|
|
|
|
IF GET_IS_PLAYER_DRIVING_WRECKLESS(PLAYER_ID(), WT_DROVE_AGAINST_TRAFFIC)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// checks to see if vehIndex is in a settled upright position ready to stop for a cutscene
|
|
/// NOTE: doesn't safe check vehIndex
|
|
/// PARAMS:
|
|
/// vehIndex - the vehicle to check
|
|
/// RETURNS:
|
|
/// TRUE if ready to rock
|
|
FUNC BOOL IS_VEHICLE_SETTLED_FOR_CUTSCENE(VEHICLE_INDEX &vehIndex)
|
|
|
|
IF IS_ENTITY_IN_AIR(vehIndex) // B*1370588 - abrupt stop - wait until landed now
|
|
CPRINTLN(DEBUG_MISSION, " IS_VEHICLE_SETTLED_FOR_CUTSCENE : return FALSE : IS_ENTITY_IN_AIR check FC = ", GET_FRAME_COUNT())
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_UPRIGHT(vehIndex, 5.0)
|
|
CPRINTLN(DEBUG_MISSION, " IS_VEHICLE_SETTLED_FOR_CUTSCENE : return FALSE : IS_ENTITY_UPRIGHT check FC = ", GET_FRAME_COUNT())
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
// if the vehicle is on all wheels are this point accept as ok
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(vehIndex)
|
|
CPRINTLN(DEBUG_MISSION, " IS_VEHICLE_SETTLED_FOR_CUTSCENE : return TRUE : IS_VEHICLE_ON_ALL_WHEELS check FC = ", GET_FRAME_COUNT())
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
VECTOR vRotVelocity
|
|
vRotVelocity = GET_ENTITY_ROTATION_VELOCITY(vehIndex)
|
|
//CPRINTLN(DEBUG_MISSION, " IS_VEHICLE_SETTLED_FOR_CUTSCENE : rvRotVelocity.X = ", vRotVelocity.X, " vRotVelocity.Y = ", vRotVelocity.Y, " FC = ", GET_FRAME_COUNT())
|
|
|
|
IF vRotVelocity.X > 0.2
|
|
OR vRotVelocity.X < -0.2
|
|
PRINTLN(DEBUG_MISSION, " IS_VEHICLE_SETTLED_FOR_CUTSCENE : return FALSE : vRotVelocity.X = ", vRotVelocity.X, " check FC = ", GET_FRAME_COUNT())
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF vRotVelocity.Y > 0.2
|
|
OR vRotVelocity.Y < -0.2
|
|
PRINTLN(DEBUG_MISSION, " IS_VEHICLE_SETTLED_FOR_CUTSCENE : return FALSE : vRotVelocity.Y = ", vRotVelocity.Y, " check FC = ", GET_FRAME_COUNT())
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// used to apply specific changes to certain vehicles in the uber recording
|
|
PROC UPDATE_CHASE_VEHICLES_FROM_UBER_RECORDING()
|
|
IF GET_GAME_TIMER() - iUpdateUberVehicleTweaksTimer > 50
|
|
//car target swerves around on way up hill
|
|
IF IS_VEHICLE_OK(SetPieceCarID[3])
|
|
IF fCurrentPlaybackTime > 28750.0
|
|
AND fCurrentPlaybackTime < 29750.0
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[3], FORCE_VEHICLE_LIGHTS_ON)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[3], 2.0)
|
|
IF NOT bDone_UberVehicleHorn[0]
|
|
START_VEHICLE_HORN(SetPieceCarID[3], 3500, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[0] = TRUE
|
|
ENDIF
|
|
ELSE
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[3], FORCE_VEHICLE_LIGHTS_OFF)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[3], 1.0)
|
|
ENDIF
|
|
ENDIF
|
|
//car target turns in front off when heading to tunnel
|
|
IF IS_VEHICLE_OK(SetPieceCarID[5])
|
|
IF fCurrentPlaybackTime > 34500.0
|
|
AND fCurrentPlaybackTime < 35500.0
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[5], FORCE_VEHICLE_LIGHTS_ON)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[5], 2.0)
|
|
IF NOT bDone_UberVehicleHorn[1]
|
|
START_VEHICLE_HORN(SetPieceCarID[5], 3000, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[1] = TRUE
|
|
ENDIF
|
|
ELSE
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[5], FORCE_VEHICLE_LIGHTS_OFF)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[5], 1.0)
|
|
ENDIF
|
|
ENDIF
|
|
//truck in the tunnel
|
|
IF IS_VEHICLE_OK(SetPieceCarID[8])
|
|
//ensure garbage truck has acceptable ped model as driver
|
|
IF NOT bDone_UpdateTrashTruckPedModel
|
|
bDone_UpdateTrashTruckPedModel = OVERRIDE_VEHICLE_DRIVER_MODEL(SetPieceCarID[8], S_M_Y_GARBAGE)
|
|
ENDIF
|
|
IF fCurrentPlaybackTime > 46000.0
|
|
AND fCurrentPlaybackTime < 47000.0
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[8], FORCE_VEHICLE_LIGHTS_ON)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[8], 2.0)
|
|
IF NOT bDone_UberVehicleHorn[2]
|
|
START_VEHICLE_HORN(SetPieceCarID[8], 3500, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[2] = TRUE
|
|
ENDIF
|
|
ELIF fCurrentPlaybackTime > 47500.0
|
|
AND fCurrentPlaybackTime < 48500.0
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[8], FORCE_VEHICLE_LIGHTS_ON)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[8], 2.0)
|
|
ELSE
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[8], FORCE_VEHICLE_LIGHTS_OFF)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[8], 1.0)
|
|
ENDIF
|
|
ENDIF
|
|
//bmx kids
|
|
IF IS_VEHICLE_OK(SetPieceCarID[9])
|
|
//ensure bmx rider has acceptable ped model as driver
|
|
IF NOT bDone_UpdateBMXPedModel
|
|
bDone_UpdateBMXPedModel = OVERRIDE_VEHICLE_DRIVER_MODEL(SetPieceCarID[9], A_M_Y_Cyclist_01)
|
|
ENDIF
|
|
ENDIF
|
|
//truck when doing u turn into carpark
|
|
IF IS_VEHICLE_OK(SetPieceCarID[16])
|
|
IF fCurrentPlaybackTime > 69000.0
|
|
AND fCurrentPlaybackTime < 71000.0
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[16], FORCE_VEHICLE_LIGHTS_ON)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[16], 2.0)
|
|
IF NOT bDone_UberVehicleHorn[3]
|
|
START_VEHICLE_HORN(SetPieceCarID[16], 3500, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[3] = TRUE
|
|
ENDIF
|
|
ELSE
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[16], FORCE_VEHICLE_LIGHTS_OFF)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[16], 1.0)
|
|
ENDIF
|
|
ENDIF
|
|
//car handbrake turns on exit from carpark
|
|
IF IS_VEHICLE_OK(TrafficCarID[17])
|
|
IF NOT bDone_UberVehicleHorn[4]
|
|
IF fCurrentPlaybackTime > 78700.0
|
|
AND fCurrentPlaybackTime < 79300.0
|
|
START_VEHICLE_HORN(TrafficCarID[17], 3000, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[4] = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//Truck on exit from carpark
|
|
IF IS_VEHICLE_OK(TrafficCarID[19])
|
|
IF NOT bDone_UberVehicleHorn[4]
|
|
IF fCurrentPlaybackTime > 79950.0
|
|
AND fCurrentPlaybackTime < 82300.0
|
|
START_VEHICLE_HORN(TrafficCarID[19], 3000, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[4] = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//first car to react on the highway as target gets on
|
|
IF IS_VEHICLE_OK(SetPieceCarID[20])
|
|
IF NOT bDone_UberVehicleHorn[5]
|
|
IF fCurrentPlaybackTime > 84000.0
|
|
AND fCurrentPlaybackTime < 84750.0
|
|
START_VEHICLE_HORN(SetPieceCarID[20], 3000, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[5] = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//landstalker on highway driving normally towards target (whilst on opposite side)
|
|
IF IS_VEHICLE_OK(SetPieceCarID[21])
|
|
IF fCurrentPlaybackTime > 88000.0
|
|
AND fCurrentPlaybackTime < 90502.0
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[21], FORCE_VEHICLE_LIGHTS_ON)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[21], 2.0)
|
|
IF NOT bDone_UberVehicleHorn[6]
|
|
START_VEHICLE_HORN(SetPieceCarID[21], 3500, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[6] = TRUE
|
|
ENDIF
|
|
ELSE
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[21], FORCE_VEHICLE_LIGHTS_OFF)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[21], 1.0)
|
|
ENDIF
|
|
ENDIF
|
|
//truck target cuts in front of on highway entrance
|
|
IF IS_VEHICLE_OK(SetPieceCarID[23])
|
|
IF fCurrentPlaybackTime > 84800.0
|
|
AND fCurrentPlaybackTime < 87000.0
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[23], FORCE_VEHICLE_LIGHTS_ON)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[23], 2.0)
|
|
IF NOT bDone_UberVehicleHorn[7]
|
|
START_VEHICLE_HORN(SetPieceCarID[23], 3500, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[7] = TRUE
|
|
ENDIF
|
|
ELSE
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[23], FORCE_VEHICLE_LIGHTS_OFF)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[23], 1.0)
|
|
ENDIF
|
|
ENDIF
|
|
//vehicle where target reverts to correct side of highway
|
|
IF IS_VEHICLE_OK(TrafficCarID[21])
|
|
IF NOT bDone_UberVehicleHorn[8]
|
|
IF fCurrentPlaybackTime > 98800.0
|
|
AND fCurrentPlaybackTime < 99400.0
|
|
START_VEHICLE_HORN(TrafficCarID[21], 2000, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[8] = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//range rover on highway target swerves in front of
|
|
IF IS_VEHICLE_OK(TrafficCarID[23])
|
|
IF fCurrentPlaybackTime > 91200.0
|
|
AND fCurrentPlaybackTime < 92200.0
|
|
SET_VEHICLE_LIGHTS(TrafficCarID[23], FORCE_VEHICLE_LIGHTS_ON)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(TrafficCarID[23], 2.0)
|
|
IF NOT bDone_UberVehicleHorn[9]
|
|
START_VEHICLE_HORN(TrafficCarID[23], 2000, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[9] = TRUE
|
|
ENDIF
|
|
ELSE
|
|
SET_VEHICLE_LIGHTS(TrafficCarID[23], FORCE_VEHICLE_LIGHTS_OFF)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(TrafficCarID[23], 1.0)
|
|
ENDIF
|
|
ENDIF
|
|
//first truck on highway where target reaches wrong side of the road
|
|
IF IS_VEHICLE_OK(SetPieceCarID[28])
|
|
IF fCurrentPlaybackTime > 93500.0
|
|
AND fCurrentPlaybackTime < 95000.0
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[28], FORCE_VEHICLE_LIGHTS_ON)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[28], 2.0)
|
|
IF NOT bDone_UberVehicleHorn[10]
|
|
START_VEHICLE_HORN(SetPieceCarID[28], 3500, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[10] = TRUE
|
|
ENDIF
|
|
ELSE
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[28], FORCE_VEHICLE_LIGHTS_OFF)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[28], 1.0)
|
|
ENDIF
|
|
ENDIF
|
|
//range rover on highway target goes around when heading for slip road
|
|
IF IS_VEHICLE_OK(SetPieceCarID[29])
|
|
IF NOT bDone_UberVehicleHorn[11]
|
|
IF fCurrentPlaybackTime > 104500.0
|
|
AND fCurrentPlaybackTime < 105000.0
|
|
START_VEHICLE_HORN(SetPieceCarID[29], 2000, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_UberVehicleHorn[11] = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//open doors on ambulance and turn sirens on
|
|
IF IS_VEHICLE_OK(ParkedCarID[31])
|
|
IF NOT IS_VEHICLE_DOOR_FULLY_OPEN(ParkedCarID[31], SC_DOOR_REAR_LEFT)
|
|
SET_VEHICLE_DOOR_OPEN(ParkedCarID[31], SC_DOOR_REAR_LEFT)
|
|
ENDIF
|
|
IF NOT IS_VEHICLE_DOOR_FULLY_OPEN(ParkedCarID[31], SC_DOOR_REAR_RIGHT)
|
|
SET_VEHICLE_DOOR_OPEN(ParkedCarID[31], SC_DOOR_REAR_RIGHT)
|
|
ENDIF
|
|
IF NOT IS_VEHICLE_SIREN_ON(ParkedCarID[31])
|
|
SET_VEHICLE_SIREN(ParkedCarID[31], TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
//ambulance sirens on coming out the hospital
|
|
IF IS_VEHICLE_OK(SetPieceCarID[22])
|
|
IF NOT IS_VEHICLE_SIREN_ON(SetPieceCarID[22])
|
|
SET_VEHICLE_SIREN(SetPieceCarID[22], TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
//car inside the carpark, parked up set Lights on and fake engine revs
|
|
IF IS_VEHICLE_OK(SetPieceCarID[19])
|
|
INT iVehicleLightState = -1
|
|
INT iVehicleBeamState = -1
|
|
GET_VEHICLE_LIGHTS_STATE(SetPieceCarID[19], iVehicleLightState, iVehicleBeamState)
|
|
IF iVehicleLightState != 1
|
|
SET_VEHICLE_LIGHTS(SetPieceCarID[19], FORCE_VEHICLE_LIGHTS_ON)
|
|
SET_VEHICLE_LIGHT_MULTIPLIER(SetPieceCarID[19], 2.0)
|
|
ENDIF
|
|
IF iSoundID_UberVehicleFakeRevs = -1 // not yet been assigned a sound_id
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(SetPieceCarID[19])
|
|
iSoundID_UberVehicleFakeRevs = GET_SOUND_ID()
|
|
PLAY_SOUND_FROM_ENTITY(iSoundID_UberVehicleFakeRevs, "FAKE_REVS_VEHICLE_02", SetPieceCarID[19], "NIGEL_02_SOUNDSET")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_CHASE_VEHICLES_FROM_UBER_RECORDING - set fake rev for set piece car 19, FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT HAS_SOUND_FINISHED(iSoundID_UberVehicleFakeRevs)
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(SetPieceCarID[19])
|
|
STOP_SOUND(iSoundID_UberVehicleFakeRevs)
|
|
RELEASE_SOUND_ID(iSoundID_UberVehicleFakeRevs)
|
|
iSoundID_UberVehicleFakeRevs = -1 // reset
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_CHASE_VEHICLES_FROM_UBER_RECORDING - cleaned up fake rev for set piece car 19, FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
iUpdateUberVehicleTweaksTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// deals with requesting and removing the vehicle recordings
|
|
/// used by ther set piece and traffic vehicles in the uber recording
|
|
PROC PRELOAD_UBER_RECORDINGS_DURING_PLAYBACK()
|
|
IF GET_GAME_TIMER() - iPreLoadRecordingsTimer > 3
|
|
INT i = 0
|
|
INT iNumSetPieceVehicles = COUNT_OF(SetPieceCarID)
|
|
INT iNumTrafficVehicles = COUNT_OF(TrafficCarID)
|
|
REPEAT iNumSetPieceVehicles i
|
|
IF SetPieceCarRecording[i] > 0
|
|
IF (fCurrentPlaybackTime > (SetPieceCarStartime[i] - 5000.0))
|
|
REQUEST_VEHICLE_RECORDING(SetPieceCarRecording[i], sNigel2_UberRecordingName)
|
|
ELIF (fCurrentPlaybackTime > (SetPieceCarStartime[i] + 3000.0))
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(SetPieceCarID[i])
|
|
REMOVE_VEHICLE_RECORDING(SetPieceCarRecording[i], sNigel2_UberRecordingName)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
REPEAT iNumTrafficVehicles i
|
|
IF TrafficCarRecording[i] > 0
|
|
IF (fCurrentPlaybackTime > (TrafficCarStartime[i] - 5000.0))
|
|
REQUEST_VEHICLE_RECORDING(TrafficCarRecording[i], sNigel2_UberRecordingName)
|
|
ELIF (fCurrentPlaybackTime > (TrafficCarStartime[i] + 3000.0))
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(TrafficCarID[i])
|
|
REMOVE_VEHICLE_RECORDING(TrafficCarRecording[i], sNigel2_UberRecordingName)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
iPreLoadRecordingsTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// removes all of the set piece and traiffic car recordingd which may be loaded
|
|
PROC REMOVE_ALL_CAR_RECORDINGS_FOR_UBER_CHASE()
|
|
INT iNumTrafficCars = COUNT_OF(TrafficCarID)
|
|
INT iNumSetPieceCars = COUNT_OF(SetPieceCarID)
|
|
INT i = 0
|
|
REPEAT iNumTrafficCars i
|
|
IF TrafficCarRecording[i] > 0
|
|
REMOVE_VEHICLE_RECORDING(TrafficCarRecording[i], sNigel2_UberRecordingName)
|
|
ENDIF
|
|
ENDREPEAT
|
|
i = 0
|
|
REPEAT iNumSetPieceCars i
|
|
IF SetPieceCarRecording[i] > 0
|
|
REMOVE_VEHICLE_RECORDING(SetPieceCarRecording[i], sNigel2_UberRecordingName)
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// all the common setup needed to initialise the uber playback
|
|
/// PARAMS:
|
|
/// bAllowUberInitToClearVehicles - if TRUE call to INITIALISE_UBER_PLAYBACK() will clear all ambient vehicles
|
|
PROC SETUP_UBER_PLAYBACK(BOOL bAllowUberInitToClearVehicles = TRUE)
|
|
|
|
//for uber playback
|
|
INITIALISE_UBER_PLAYBACK(sNigel2_UberRecordingName, iMainCarRecID, bAllowUberInitToClearVehicles)
|
|
LOAD_UBER_DATA()
|
|
SET_FORCE_UBER_PLAYBACK_TO_USE_DEFAULT_PED_MODEL(TRUE)
|
|
SET_UBER_PLAYBACK_DEFAULT_PED_MODEL(A_M_M_BEVHILLS_02)
|
|
CREATE_ALL_WAITING_UBER_CARS()
|
|
fUberPlaybackDensitySwitchOffRange = 250.0 // fail dist is 200 so this should be plenty
|
|
switch_SetPieceCar_to_ai_on_collision = true
|
|
SET_RELEASED_DRIVERS_TO_EXIT_VEHICLES_ON_FLEE(TRUE) // B* 1490105 - stop peds driving the uber cars interfering with uber chase because of reaction to player shooting
|
|
allow_veh_to_stop_on_any_veh_impact = TRUE
|
|
//bPlayTrafficRecordingEvenIfPlayerIsAheadOfChase = TRUE //might help with some traffic failing to spawn?
|
|
//fPlaybackCarStreamingDistance = 160.0 // 120.0 // is default
|
|
traffic_block_vehicle_colour(true, traffic_black)
|
|
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_DRIVING)
|
|
CPRINTLN(DEBUG_MISSION, " SETUP_UBER_PLAYBACK - done : bAllowUberInitToClearVehicles = ", bAllowUberInitToClearVehicles, " : frame count :", GET_FRAME_COUNT())
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// check if the specified position is inside the hospital using
|
|
/// IS_COLLISION_MARKED_OUTSIDE check
|
|
/// PARAMS:
|
|
/// vPos - the position to test
|
|
/// RETURNS:
|
|
/// TRUE if the position is inside the music club interior
|
|
FUNC BOOL IS_POSITION_INSIDE_HOSPITAL_INTERIOR(VECTOR vPos)
|
|
|
|
// make sure the handle to the hospital is valid first
|
|
IF NOT IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " IS_POSITION_INSIDE_HOSPITAL_INTERIOR - return FALSE unable to test HospitalInteriorIndex ins't valid interior : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT IS_COLLISION_MARKED_OUTSIDE(vPos)
|
|
INTERIOR_INSTANCE_INDEX interiorInstanceIndex = GET_INTERIOR_FROM_COLLISION(vPos)
|
|
IF interiorInstanceIndex = HospitalInteriorIndex
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "IS_POSITION_INSIDE_HOSPITAL_INTERIOR - return TRUE - for pos : ", vPos) ENDIF #ENDIF
|
|
RETURN TRUE
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "IS_POSITION_INSIDE_HOSPITAL_INTERIOR - not hospital interior index! return FALSE - for pos : ", vPos) ENDIF #ENDIF
|
|
ENDIF
|
|
ELSE
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "IS_POSITION_INSIDE_HOSPITAL_INTERIOR - collision marked outside at coords! return FALSE - for pos : ", vPos) ENDIF #ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Cycles through hospital room hash keys to see if parameter matches
|
|
/// RETURNS:
|
|
/// TRUE if specified iHashKeyToTest matches a hospital room's hash key
|
|
FUNC BOOL IS_HASH_KEY_A_HOSPITAL_ROOM(INT iHashKeyToTest)
|
|
IF (iHashKeyToTest = GET_HASH_KEY("v_40_Room1")) // entrance
|
|
OR (iHashKeyToTest = GET_HASH_KEY("v_40_Room2")) // corridor between two broken walls
|
|
OR (iHashKeyToTest = GET_HASH_KEY("v_40_Room3")) // ward (near broken wall)
|
|
OR (iHashKeyToTest = GET_HASH_KEY("v_40_Room4")) // ward area (past final broken wall)
|
|
OR (iHashKeyToTest = GET_HASH_KEY("V_40_Room005")) // entrance from shop to first broken wall
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// check if a ped is inside the hospital interior
|
|
/// NOTE: if ped isn't alive results aren't completely accurate see bug 1008508
|
|
/// PARAMS:
|
|
/// pedIndex - ped to test
|
|
/// RETURNS:
|
|
/// true if the ped is inside the hosptial interior and isn't injured
|
|
/// RETURNS false if bDoDeathCheck was set TRUE and the ped was dead
|
|
FUNC BOOL IS_PED_INSIDE_HOSPITAL_INTERIOR(PED_INDEX pedIndex)
|
|
|
|
// make sure the handle to the hospital is valid first
|
|
IF NOT IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " IS_PED_INSIDE_HOSPITAL_INTERIOR - return FALSE unable to test HospitalInteriorIndex ins't valid interior : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(pedIndex)
|
|
INT iHaskKey_PedCurrentRoom
|
|
iHaskKey_PedCurrentRoom = GET_KEY_FOR_ENTITY_IN_ROOM(pedIndex)
|
|
IF IS_HASH_KEY_A_HOSPITAL_ROOM(iHaskKey_PedCurrentRoom)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " IS_PED_INSIDE_HOSPITAL_INTERIOR - return TRUE with room check : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
// check is returning inaccurate results, see bug 1008508
|
|
VECTOR vPos = GET_ENTITY_COORDS(pedIndex, FALSE)
|
|
IF (GET_INTERIOR_AT_COORDS(vPos) = HospitalInteriorIndex) //unfortunately this check on its own can return true if stood outside interior closeby
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " IS_PED_INSIDE_HOSPITAL_INTERIOR - return TRUE basic check : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " IS_PED_INSIDE_HOSPITAL_INTERIOR - return FALSE:", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// check if a vehicle is inside the hospital interior
|
|
/// PARAMS:
|
|
/// vehicleIndex - vehicle to test
|
|
/// RETURNS:
|
|
/// true if the vehicle is inside the hospital interior
|
|
FUNC BOOL IS_VEHICLE_INSIDE_HOSPITAL_INTERIOR(VEHICLE_INDEX vehicleIndex)
|
|
|
|
// make sure the handle to the hospital is valid first
|
|
IF NOT IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " IS_VEHICLE_INSIDE_HOSPITAL_INTERIOR - return FALSE unable to test HospitalInteriorIndex ins't valid interior : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF IS_VEHICLE_DRIVEABLE(vehicleIndex)
|
|
VECTOR vPos = GET_ENTITY_COORDS(vehicleIndex)
|
|
IF (GET_INTERIOR_AT_COORDS(vPos) = HospitalInteriorIndex) //unfortunately this check on its own can return true if stood outside interior closeby
|
|
INT iHaskKey_VehicleCurrentRoom
|
|
iHaskKey_VehicleCurrentRoom = GET_KEY_FOR_ENTITY_IN_ROOM(vehicleIndex)
|
|
IF IS_HASH_KEY_A_HOSPITAL_ROOM(iHaskKey_VehicleCurrentRoom)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Check the musician has seen the player attack a specific ped
|
|
/// RETURNS:
|
|
/// true if player has injured a ped inside the hospital
|
|
FUNC BOOL HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL()
|
|
//IF HAS_PLAYER_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
// #IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - HAS_PLAYER_DAMAGED_AT_LEAST_ONE_PED - true : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
INT i = 0
|
|
PED_INDEX mPed
|
|
IF Has_Ped_Been_Killed()
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - Has_Ped_Been_Killed - true : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
INT iNumPedKilledEvents = Get_Number_Of_Ped_Killed_Events()
|
|
IF iNumPedKilledEvents <> 0
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - iNumPedKilledEvents =, ", iNumPedKilledEvents, " : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
BOOL bWasPedKilledInsideHopsital = FALSE
|
|
i = 0
|
|
REPEAT iNumPedKilledEvents i
|
|
mPed = GET_PED_INDEX_FROM_ENTITY_INDEX(Get_Index_Of_Killed_Ped(i))
|
|
IF DOES_ENTITY_EXIST(mPed)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - step 0 :, Killed ped found Count = ", i, " : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
IF IS_POSITION_INSIDE_HOSPITAL_INTERIOR(GET_ENTITY_COORDS(mPed, FALSE))
|
|
//OR IS_PED_INSIDE_HOSPITAL_INTERIOR(mPed)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - step 1 : Killed ped is INSIDE the hospital interior Count = ", i, " : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mPed, PLAYER_PED_ID())
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - step 2 : Killed ped has been DAMAGED by player Count = ", i, " : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
bWasPedKilledInsideHopsital = TRUE
|
|
ENDIF
|
|
ELSE
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - step 1 : killed ped position is NOT inside the hospital interior Count = ", i, " : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
IF bWasPedKilledInsideHopsital
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - step 3 : killed ", " returning TRUE : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
//CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF Has_Ped_Been_Injured()
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - Has_Ped_Been_Injured - true : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
INT iNumPedInjuredEvents = Get_Number_Of_Ped_Injured_Events()
|
|
IF iNumPedInjuredEvents <> 0
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - iNumPedInjuredEvents =, ", iNumPedInjuredEvents, " : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
BOOL bWasPedInjuredInsideHopsital = FALSE
|
|
i = 0
|
|
REPEAT iNumPedInjuredEvents i
|
|
mPed = GET_PED_INDEX_FROM_ENTITY_INDEX(Get_Index_Of_Injured_Ped(i))
|
|
IF DOES_ENTITY_EXIST(mPed)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - step 0 :, Injuredped found Count = ", i, " : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
IF IS_POSITION_INSIDE_HOSPITAL_INTERIOR(GET_ENTITY_COORDS(mPed, FALSE))
|
|
//OR IS_PED_INSIDE_HOSPITAL_INTERIOR(mPed)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - step 1 : Injuredped is INSIDE the hospital interior Count = ", i, " : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mPed, PLAYER_PED_ID())
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - step 2 :, Injuredped has been DAMAGED by player Count = ", i, " : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
bWasPedInjuredInsideHopsital = TRUE
|
|
ENDIF
|
|
ELSE
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - step 1 : Injured ped position is NOT inside the hospital interior Count = ", i, " : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
IF bWasPedInjuredInsideHopsital
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - step 3 : injured ", " returning TRUE : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
//CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//IF HAS_PLAYER_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
// #IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, " HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL - HAS_PLAYER_DAMAGED_AT_LEAST_ONE_PED - true : frame count :", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
// CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
//ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// this proc tracks the mission stat -
|
|
/// INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(NI2_HARM_IN_HOSPITAL_DRIVE_THROUGH)
|
|
PROC NIG2_TRACK_STAT_HAS_PLAYER_INJURED_PED_WHILST_IN_HOSPITAL()
|
|
|
|
IF NOT bStatTracker_HasPlayerInjuredPedWhilstInHospital
|
|
// only test when the player gets close to the hosiptal
|
|
IF IS_COORD_IN_RANGE_OF_COORD(vPlayerPos, << 307.3065, -589.9595, 42.3020 >>, 200.0)
|
|
IF HAS_PLAYER_INJURED_A_PED_INSIDE_THE_HOSPITAL()
|
|
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(NI2_HARM_IN_HOSPITAL_DRIVE_THROUGH)
|
|
bStatTracker_HasPlayerInjuredPedWhilstInHospital = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintHospitalStatTrackInfoToTTY CPRINTLN(DEBUG_MISSION, "NIG2_TRACK_STAT_HAS_PLAYER_INJURED_PED_WHILST_IN_HOSPITAL - INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(NI2_HARM_IN_HOSPITAL_DRIVE_THROUGH) ") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// this proc tracks the mission stat -
|
|
/// INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(NI2_GOT_TOO_FAR_AWAY_FROM_NAPOLI)
|
|
PROC NIG2_TRACK_STAT_PLAYER_KEEPS_CLOSE_TO_TARGET()
|
|
FLOAT fInRangeDist = 100.0
|
|
#IF IS_DEBUG_BUILD
|
|
IF bDebug_OverrideStatTracker_PlayerCloseToTargetRange
|
|
fInRangeDist = fDebug_StatTracker_PlayerCloseToTargetRange
|
|
ENDIF
|
|
IF bDebug_DisplayStatTrackerInfo_PlayerCloseToTarget
|
|
IF IS_ENTITY_ALIVE(sTargetPed.ped)
|
|
//SET_DEBUG_ACTIVE(TRUE)
|
|
//SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
|
|
VECTOR vDebugPos = GET_ENTITY_COORDS(sTargetPed.ped)
|
|
DRAW_DEBUG_SPHERE(vDebugPos, fInRangeDist, 200, 100, 0, 150)
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "NIG2_TRACK_STAT_PLAYER_KEEPS_CLOSE_TO_TARGET - current dist = ", fCurrentChaseDistance, " : point in uber = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
IF bStatTracker_HasPlayerKeptCloseToDiNapoli
|
|
IF fCurrentChaseDistance > fInRangeDist
|
|
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(NI2_GOT_TOO_FAR_AWAY_FROM_NAPOLI)
|
|
bStatTracker_HasPlayerKeptCloseToDiNapoli = FALSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "NIG2_TRACK_STAT_PLAYER_KEEPS_CLOSE_TO_TARGET - INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(NI2_GOT_TOO_FAR_AWAY_FROM_NAPOLI) range was = ", fCurrentChaseDistance) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Rubberbands the chase speed of Trevor to Target's vehicle
|
|
/// uses UPDATE_CURRENT_PLAYBACK_SPEED_WITH_SMOOTHING and CALCULATE_DESIRED_PLAYBACK_SPEED_FROM_TRIGGER_CAR
|
|
/// NOTE: having to override the standard uber recording behaviour a bit as the player needs to be able to get along side Miranda comfortably
|
|
/// PARAMS:
|
|
/// fCurrentChaseSpeed - the main chase speed which is to be updated
|
|
/// fPlaybackTime - the main car's current playback time
|
|
PROC UPDATE_UBER_CHASE_SPEED(FLOAT &fCurrentChaseSpeed, FLOAT fPlaybackTime)
|
|
|
|
BOOL bUseNewRubberbandingSystem = TRUE
|
|
IF bUseNewRubberbandingSystem
|
|
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle) // new commands only take vehicles in parameter instead player ped, so need ot check Nigel's car for use
|
|
|
|
// variables used by CALCULATE_DESIRED_PLAYBACK_SPEED_FROM_TRIGGER_CAR
|
|
FLOAT fDesiredPlaybackSpeed = fCurrentChaseSpeed // Stores the calculated speed.
|
|
|
|
FLOAT fClosestDist = 9.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
FLOAT fIdealDist = 20.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
FLOAT fMaxDist = 36.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
// point where the flashing blip kicks in for escaping
|
|
FLOAT fLosingTriggerDist = (NIGEL2_TARGET_ESCAPED_DISTANCE / 100) * (NIGEL2_FLASH_CHASE_BLIP_PERCENTAGE * 100) // At this distance or greater extra slowdown will be applied if safe to do so.
|
|
|
|
FLOAT fMaxDistInFront = 30.0 // If the player is ahead the speed is increased, the max speed is achieved at this distance.
|
|
FLOAT fMinSpeedIfBehind = 0.7 // The minimum playback speed allowed if behind, values lower than 0.7 may be too noticeable.
|
|
FLOAT fMinSpeedIfLosingTrigger = 0.45 // The minimum playback speed allowed if the player is really far behind (this value is only used if the trigger is not visible).
|
|
FLOAT fMaxSpeedIfTooClose = 1.6 // The max speed allowed if the player gets too close.
|
|
|
|
// variables used by UPDATE_CURRENT_PLAYBACK_SPEED_WITH_SMOOTHING
|
|
FLOAT fAccel = 0.04 // fAccel - D = 0.01 - Modify this to increase/decrease the rate that the current speed changes to achieve the desired speed. Changing this can help if you see the trigger car noticeably speed off during a chase.
|
|
|
|
|
|
//*** Rubberbanding tweaks during the chase based of the main car's playback progress -
|
|
|
|
// start, heading past Trevor into the first turning (keep this slow to give the player plenty of time to get in the car.
|
|
IF (fPlaybackTime > 0.0 AND fPlaybackTime < 6000.0)
|
|
|
|
fClosestDist = 1.0
|
|
fIdealDist = 10.0
|
|
fMaxDist = 22.0
|
|
fMaxDistInFront = 45.0
|
|
fMaxSpeedIfTooClose = 1.0
|
|
fAccel = 0.02
|
|
|
|
// turn out of pedestrian area onto the main road again
|
|
ELIF (fPlaybackTime > 12000.0 AND fPlaybackTime < 20000.0)
|
|
|
|
fClosestDist = 10.5 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 22.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
|
|
fMaxDistInFront = 15.0 // If the player is ahead the speed is increased, the max speed is achieved at this distance.
|
|
|
|
fAccel = 0.05 // fAccel - D = 0.01 - Modify this to increase/decrease the rate that the current speed changes to achieve the desired speed. Changing this can help if you see the trigger car noticeably speed off during a chase.
|
|
|
|
// left turn of main road heading towards tunnel entrance turning
|
|
ELIF (fPlaybackTime > 31000.0 AND fPlaybackTime < 35500.0)
|
|
|
|
fClosestDist = 9.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 20.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
|
|
fMaxDistInFront = 20.0 // If the player is ahead the speed is increased, the max speed is achieved at this distance.
|
|
fMaxSpeedIfTooClose = 1.8 // The max speed allowed if the player gets too close.
|
|
|
|
//turn into underground tunnel
|
|
ELIF (fPlaybackTime > 37000.0 AND fPlaybackTime < 42500.0)
|
|
|
|
fClosestDist = 8.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 21.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
|
|
//turn out of the undeground section
|
|
ELIF (fPlaybackTime > 54500.0 AND fPlaybackTime < 58000.0)
|
|
|
|
fClosestDist = 8.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 22.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
|
|
// crossing road down pedestrian section.
|
|
ELIF (fPlaybackTime > 58000.0 AND fPlaybackTime < 63500.0)
|
|
|
|
fClosestDist = 15.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 22.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
|
|
fAccel = 0.35 // Modify this to increase/decrease the rate that the current speed changes to achieve the desired speed. Changing this can help if you see the trigger car noticeably speed off during a chase.
|
|
|
|
// jump down the stairs to the turn into carpark
|
|
ELIF (fPlaybackTime > 63500.0 AND fPlaybackTime < 72500.0)
|
|
|
|
fClosestDist = 10.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 20.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
fMaxDist = 30.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
// through the car park onto the highway
|
|
ELIF (fPlaybackTime > 72500.0 AND fPlaybackTime < 81500.0)
|
|
|
|
fMaxDist = 30.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
// jump leading on to highway
|
|
ELIF (fPlaybackTime > 81500.0 AND fPlaybackTime < 84000.0)
|
|
|
|
fMaxDist = 25.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
// highway - speed up if player is driving on wrong side of the highway.
|
|
ELIF (fPlaybackTime > 88000.0 AND fPlaybackTime < 96500.0)
|
|
|
|
fMaxDist = 30.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
fMaxDistInFront = 20.0 // If the player is ahead the speed is increased, the max speed is achieved at this distance.
|
|
|
|
//override settings if player is traveling up opposite side of highway to napoli
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-423.235077,-528.185303,22.334507>>, <<-234.671829,-527.774048,30.579157>>, 27.000000)
|
|
|
|
fClosestDist = 20.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 35.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
fMaxDist = 60.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
fMaxDistInFront = 15.0 // If the player is ahead the speed is increased, the max speed is achieved at this distance.
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionRubberbandInfoToTTY CPRINTLN(DEBUG_MISSION, "rubberbanding >>>> player on wrong side of freeway") ENDIF #ENDIF
|
|
ENDIF
|
|
|
|
// highway
|
|
ELIF (fPlaybackTime > 96500.0 AND fPlaybackTime < 102500.0)
|
|
|
|
fClosestDist = 15.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 20.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
fMaxDist = 25.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
fMaxDistInFront = 20.0 // If the player is ahead the speed is increased, the max speed is achieved at this distance.
|
|
|
|
fAccel = 0.35 // fAccel - D = 0.01 - Modify this to increase/decrease the rate that the current speed changes to achieve the desired speed. Changing this can help if you see the trigger car noticeably speed off during a chase.
|
|
|
|
// skid leading off highway up sliproad
|
|
ELIF (fPlaybackTime > 102500.0 AND fPlaybackTime < 107500.0)
|
|
|
|
fClosestDist = 15.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 25.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
fMaxDist = 40.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
// up the slip road
|
|
ELIF (fPlaybackTime > 107500.0 AND fPlaybackTime < 110500.0)
|
|
|
|
fClosestDist = 17.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 30.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
fMaxDist = 50.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
fMaxSpeedIfTooClose = 1.9 // The max speed allowed if the player gets too close.
|
|
|
|
// run up to the hospital
|
|
ELIF (fPlaybackTime > 110500.0 AND fPlaybackTime < 114000.0)
|
|
|
|
fClosestDist = 20.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 35.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
fMaxDist = 55.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
fMaxSpeedIfTooClose = 1.9 // The max speed allowed if the player gets too close.
|
|
|
|
// inside hospital up till wall smashes
|
|
ELIF (fPlaybackTime > 114500.0 AND fPlaybackTime < 118000.0)
|
|
|
|
fClosestDist = 22.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 37.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
fMaxDist = 60.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
fMaxSpeedIfTooClose = 2.0 // The max speed allowed if the player gets too close.
|
|
|
|
// inside hospital after wall smashes
|
|
ELIF (fPlaybackTime > 118000.0)
|
|
|
|
fClosestDist = 27.0 // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist = 45.0 // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
fMaxDist = 70.0 // fMaxDist - The max distance the player should be behind the trigger.
|
|
|
|
fMaxSpeedIfTooClose = 2.0 // The max speed allowed if the player gets too close.*/
|
|
|
|
ENDIF
|
|
|
|
CALCULATE_DESIRED_PLAYBACK_SPEED_FROM_TRIGGER_CAR(fDesiredPlaybackSpeed, sNigelVehicle.vehicle, sTargetVehicle.vehicle,
|
|
fClosestDist, // fClosestDist - The minimum distance the player should be behind the trigger.
|
|
fIdealDist, // fIdealDist - The ideal distance you want the player to be behind the trigger.
|
|
fMaxDist, // fMaxDist - The max distance the player should be behind the trigger.
|
|
fLosingTriggerDist, // fLosingTriggerDist - At this distance or greater extra slowdown will be applied if safe to do so.
|
|
fMaxDistInFront, // fMaxDistInFront D = 30.0 - If the player is ahead the speed is increased, the max speed is achieved at this distance.
|
|
NIGEL2_DEFAULT_UBER_PLAYBACK_SPEED, // fDefaultPlaybackSpeed D = 1.0 - The default playback speed: when at the ideal distance the chase will run around this speed.
|
|
fMinSpeedIfBehind, // fMinSpeedIfBehind D = 0.7 - The minimum playback speed allowed if behind, values lower than 0.7 may be too noticeable.
|
|
fMinSpeedIfLosingTrigger, // fMinSpeedIfLosingTrigger D = 0.5 - The minimum playback speed allowed if the player is really far behind (this value is only used if the trigger is not visible).
|
|
fMaxSpeedIfTooClose, // fMaxSpeedIfTooClose D = 2.0 - The max speed allowed if the player gets too close.
|
|
TRUE) // bApplySlowdownToPlayer - If TRUE slowdown will be applied to the player based on playback speed (using MODIFY_VEHICLE_TOP_SPEED).
|
|
//0.0, // fMaxPlayerSlowdownPercent D = 0.0 - The maximum percentage of top speed that can be removed from the player.
|
|
//15.0, // fMaxPlayerSlowdownPercent D = 15.0 - The maximum percentage of top speed that can be removed from the player.
|
|
//TRUE) // bAccountForSpecialAbility - If TRUE then extra adjustments are made when Franklin's special ability is active.
|
|
|
|
|
|
//override playback speed for section driving through the hospital
|
|
IF (fPlaybackTime > 114500.0)
|
|
|
|
//override if player goes around hospital on highway sliproad
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<290.124298,-545.218384,38.397015>>, <<448.905365,-554.200134,48.652863>>, 19.250000)
|
|
|
|
fDesiredPlaybackSpeed = 1.2
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionRubberbandInfoToTTY CPRINTLN(DEBUG_MISSION, "rubberbanding >>>> override player watching crash from highway") ENDIF #ENDIF
|
|
|
|
ELSE
|
|
|
|
//only use fast speed whilst hidden in the interior, return to a normal speed for jump
|
|
IF (fPlaybackTime < 120000.0) // 118000.0)
|
|
|
|
fDesiredPlaybackSpeed = 2.2
|
|
|
|
fAccel = 1.0
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionRubberbandInfoToTTY CPRINTLN(DEBUG_MISSION, "rubberbanding >>>> override target trigving through the interor, fCurrentChaseSpeed = ", fCurrentChaseSpeed) ENDIF #ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
UPDATE_CURRENT_PLAYBACK_SPEED_WITH_SMOOTHING(fCurrentChaseSpeed, fDesiredPlaybackSpeed, fAccel)
|
|
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionRubberbandInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_UBER_CHASE_SPEED - New System - fPlaybackTime = ", fPlaybackTime, " fAccel = ", fAccel, " fDesiredPlaybackSpeed = ", fDesiredPlaybackSpeed, " returning playback speed is = ", fCurrentChaseSpeed, " frame count = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// original rubberbanding setup - to be removed once the new system has been bedded in
|
|
FLOAT fDesiredPlaybackSpeed = fCurrentChaseSpeed // Stores the calculated speed.
|
|
FLOAT fMinDist_Local = 6.0
|
|
FLOAT fIdealDist_Local = 18.0
|
|
FLOAT fSlowDownDist_Local = 35.0
|
|
FLOAT fMaxPlaybackSpeedMultiplier_Local = 1.5
|
|
//tweak values depending where the target is in the chase
|
|
IF (fPlaybackTime > 37000.0 AND fPlaybackTime < 42500.0)//turn into underground tunnel
|
|
fMinDist_Local = 8.0
|
|
fIdealDist_Local = 22.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.6
|
|
ELIF (fPlaybackTime > 54500.0 AND fPlaybackTime < 58000.0)//turn out of the undeground section
|
|
fMinDist_Local = 8.0
|
|
fIdealDist_Local = 20.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.6
|
|
ELIF (fPlaybackTime > 58000.0 AND fPlaybackTime < 63500.0) // crossing road down pedestrian section.
|
|
fIdealDist_Local = 15.0
|
|
fSlowDownDist_Local = 22.0
|
|
ELIF (fPlaybackTime > 63500.0 AND fPlaybackTime < 72500.0)//jump down the stairs to the turn into carpark
|
|
fMinDist_Local = 10.0
|
|
fIdealDist_Local = 20.0
|
|
fSlowDownDist_Local = 30.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.6
|
|
ELIF (fPlaybackTime > 72500.0 AND fPlaybackTime < 81500.0)//through the car park onto the highway
|
|
fSlowDownDist_Local = 30.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.6
|
|
ELIF (fPlaybackTime > 81500.0 AND fPlaybackTime < 84000.0) //jump leading on to highway
|
|
fSlowDownDist_Local = 25 //20
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.6
|
|
ELIF (fPlaybackTime > 88000.0 AND fPlaybackTime < 96500.0)// highway - speed up if player is driving on wrong side of the highway.
|
|
fSlowDownDist_Local = 20.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.6
|
|
//override settings if player is traveling up opposite side of highway to napoli
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-423.235077,-528.185303,22.334507>>, <<-234.671829,-527.774048,30.579157>>, 27.000000)
|
|
fMinDist_Local = 12.0
|
|
fIdealDist_Local = 30.0
|
|
fSlowDownDist_Local = 45.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.6
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "rubberbanding >>>> player on wrong side of freeway") ENDIF #ENDIF
|
|
ENDIF
|
|
ELIF (fPlaybackTime > 96500.0 AND fPlaybackTime < 102500.0)// highway
|
|
fSlowDownDist_Local = 20
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.6
|
|
ELIF (fPlaybackTime > 102500.0 AND fPlaybackTime < 107500.0)//skid leading off highway up sliproad
|
|
fMinDist_Local = 12.0
|
|
fIdealDist_Local = 25.0
|
|
fSlowDownDist_Local = 40.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.6
|
|
ELIF (fPlaybackTime > 107500.0 AND fPlaybackTime < 110500.0)//up the slip road
|
|
fMinDist_Local = 14.0
|
|
fIdealDist_Local = 30.0
|
|
fSlowDownDist_Local = 50.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.6
|
|
ELIF (fPlaybackTime > 110500.0 AND fPlaybackTime < 114000.0) //run up to the hospital
|
|
fMinDist_Local = 20.0
|
|
fIdealDist_Local = 35.0
|
|
fSlowDownDist_Local = 55.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 1.9
|
|
ELIF (fPlaybackTime > 114500.0 AND fPlaybackTime < 118000.0) // inside hospital up till wall smashes
|
|
fMinDist_Local = 40.0
|
|
fIdealDist_Local = 50.0
|
|
fSlowDownDist_Local = 70.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 3.0
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " RUBBBBBBER BANNNNNDDDDING IN HOSPITAL xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx") ENDIF #ENDIF
|
|
ELIF (fPlaybackTime > 118000.0) // inside hospital after wall smashes
|
|
fMinDist_Local = 20.0
|
|
fIdealDist_Local = 35.0
|
|
fSlowDownDist_Local = 65.0
|
|
fMaxPlaybackSpeedMultiplier_Local = 2.0
|
|
ENDIF
|
|
CALCULATE_NEW_PLAYBACK_SPEED_FROM_CHAR(sTargetVehicle.vehicle, PLAYER_PED_ID(), fDesiredPlaybackSpeed, 1,
|
|
fMinDist_Local, fIdealDist_Local, fSlowDownDist_Local, fMaxPlaybackSpeedMultiplier_Local)
|
|
IF (fPlaybackTime > 114500.0 AND fPlaybackTime < 118000.0) //override playback speed for section driving through the hospital
|
|
fDesiredPlaybackSpeed = 2.2
|
|
ENDIF
|
|
IF (fPlaybackTime > 114500.0) //override if player goes around hospital on highway sliproad
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<290.124298,-545.218384,38.397015>>, <<448.905365,-554.200134,48.652863>>, 19.250000)
|
|
fDesiredPlaybackSpeed = 1.2
|
|
ENDIF
|
|
ENDIF
|
|
|
|
fCurrentChaseSpeed = fDesiredPlaybackSpeed
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_UBER_CHASE_SPEED - OLD SYSTEM - returning playback speed is - ", fCurrentChaseSpeed) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// handles creation, updating and removal of scripted peds that feature on the chase route
|
|
/// PARAMS:
|
|
/// vPlayerCurrentPos - player's current position to perform checks with
|
|
PROC MANAGE_PEDESTRIANS_ON_CHASE_ROUTE(VECTOR vPlayerCurrentPos)
|
|
|
|
BOOL bCreatedPedThisFrame = FALSE
|
|
MODEL_NAMES mnTempPedModel
|
|
VECTOR vTempSpawnPos
|
|
FLOAT fTempSpawnHeading
|
|
INT iAIUpdateDelay = 250
|
|
INT i
|
|
SEQUENCE_INDEX sSeqIndex
|
|
#IF IS_DEBUG_BUILD TEXT_LABEL tDebugName #ENDIF
|
|
|
|
IF IS_ENTITY_ALIVE(sTargetPed.ped)
|
|
|
|
//peds around the start of the car chase, busy shopping streets
|
|
FOR i = 0 TO (TOTAL_START_AREA_PEDS - 1)
|
|
// create the peds (limit to one ped create per frame to help framerate
|
|
IF sStartAreaPedSimple[i].eState = SPS_INIT
|
|
IF NOT bCreatedPedThisFrame
|
|
IF (fCurrentPlaybackTime >= NIGEL2_START_AREA_PEDS_TRIGGER_TIME)
|
|
SWITCH i
|
|
CASE 0
|
|
mnTempPedModel = mnDefaultPedForVehicle
|
|
vTempSpawnPos = << -1262.53, -731.25, 21.88 >>
|
|
fTempSpawnHeading = 47.38
|
|
BREAK
|
|
CASE 1
|
|
mnTempPedModel = mnFemaleStartArea
|
|
vTempSpawnPos = << -1300.17, -704.10, 24.61 >>
|
|
fTempSpawnHeading = -87.53
|
|
BREAK
|
|
CASE 2
|
|
mnTempPedModel = mnFemaleStartArea
|
|
vTempSpawnPos = << -1298.33, -704.16, 24.53 >>
|
|
fTempSpawnHeading = 83.96
|
|
BREAK
|
|
CASE 3
|
|
mnTempPedModel = mnFemaleStartArea
|
|
vTempSpawnPos = << -1209.92, -817.51, 15.62 >>
|
|
fTempSpawnHeading = 15.06
|
|
BREAK
|
|
ENDSWITCH
|
|
REQUEST_MODEL(mnTempPedModel)
|
|
IF HAS_MODEL_LOADED(mnTempPedModel)
|
|
sStartAreaPedSimple[i].ped = CREATE_PED(PEDTYPE_MISSION, mnTempPedModel, vTempSpawnPos, fTempSpawnHeading)
|
|
IF IS_PED_UNINJURED(sStartAreaPedSimple[i].ped)
|
|
sStartAreaPedSimple[i].eState = SPS_BEGIN_ROUTINE
|
|
SET_PED_RANDOM_COMPONENT_VARIATION(sStartAreaPedSimple[i].ped)
|
|
SET_PED_KEEP_TASK(sStartAreaPedSimple[i].ped, TRUE)
|
|
#IF IS_DEBUG_BUILD
|
|
tDebugName = "StartAreaPed: "
|
|
tDebugName += i
|
|
SET_PED_NAME_DEBUG(sStartAreaPedSimple[i].ped, tDebugName)
|
|
#ENDIF
|
|
ENDIF
|
|
IF i != 0 // 0 don't bin off the standard ped model used in the uber chase
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(mnTempPedModel)
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "StartArea PEDS CREATED index = ", i, " fc = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
bCreatedPedThisFrame = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// don't update their AI every frame
|
|
IF GET_GAME_TIMER() - iTriggerScriptedPedestriansTimer > iAIUpdateDelay
|
|
IF IS_PED_UNINJURED(sStartAreaPedSimple[i].ped)
|
|
SWITCH sStartAreaPedSimple[i].eState
|
|
CASE SPS_BEGIN_ROUTINE
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(sTargetPed.ped, sStartAreaPedSimple[i].ped, 150.0)
|
|
IF i = 0
|
|
OR i = 3
|
|
TASK_USE_MOBILE_PHONE(sStartAreaPedSimple[i].ped, TRUE)
|
|
SET_PED_KEEP_TASK(sStartAreaPedSimple[i].ped, FALSE)
|
|
sStartAreaPedSimple[i].eState = SPS_REACT_TO_TARGET
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Start Area Peds Begin Routine - ", i) ENDIF #ENDIF
|
|
ELSE
|
|
// these guys have to wait for each other to spawn
|
|
IF i = 1
|
|
IF IS_PED_UNINJURED(sStartAreaPedSimple[i+1].ped)
|
|
TASK_CHAT_TO_PED(sStartAreaPedSimple[i].ped, sStartAreaPedSimple[i+1].ped, CF_IS_INITIATOR | CF_AUTO_CHAT, <<0.0, 0.0, 0.0>>, 0.0, 0.0)
|
|
SET_PED_KEEP_TASK(sStartAreaPedSimple[i].ped, FALSE)
|
|
sStartAreaPedSimple[i].eState = SPS_REACT_TO_TARGET
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Start Area Peds Begin Routine - ", i) ENDIF #ENDIF
|
|
ENDIF
|
|
ELIF i = 2
|
|
IF IS_PED_UNINJURED(sStartAreaPedSimple[i-1].ped)
|
|
TASK_CHAT_TO_PED(sStartAreaPedSimple[i].ped, sStartAreaPedSimple[i-1].ped, CF_AUTO_CHAT, <<0.0, 0.0, 0.0>>, 0.0, 0.0)
|
|
SET_PED_KEEP_TASK(sStartAreaPedSimple[i].ped, FALSE)
|
|
sStartAreaPedSimple[i].eState = SPS_REACT_TO_TARGET
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Start Area Peds Begin Routine - ", i) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE SPS_REACT_TO_TARGET
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(sTargetPed.ped, sStartAreaPedSimple[i].ped, 3.0)
|
|
CLEAR_PED_TASKS(sStartAreaPedSimple[i].ped)
|
|
OPEN_SEQUENCE_TASK(sSeqIndex)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, sTargetPed.ped, -1)
|
|
//TASK_LOOK_AT_ENTITY(NULL, sTargetPed.ped, -1)
|
|
CLOSE_SEQUENCE_TASK(sSeqIndex)
|
|
TASK_PERFORM_SEQUENCE(sStartAreaPedSimple[i].ped, sSeqIndex)
|
|
CLEAR_SEQUENCE_TASK(sSeqIndex)
|
|
sStartAreaPedSimple[i].eState = SPS_READY_FOR_CLEANUP
|
|
ENDIF
|
|
IF NOT IS_ENTITY_IN_RANGE_COORDS(sStartAreaPedSimple[i].ped, vPlayerCurrentPos, 300.0) //cleanup the peds player far away
|
|
SAFE_REMOVE_PED(sStartAreaPedSimple[i].ped)
|
|
sStartAreaPedSimple[i].eState = SPS_CLEANED_UP
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "StartArea PED REMOVED - ", i) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE SPS_READY_FOR_CLEANUP
|
|
IF NOT IS_ENTITY_IN_RANGE_COORDS(sStartAreaPedSimple[i].ped, vPlayerCurrentPos, 150.0) //cleanup the peds player far away
|
|
SAFE_REMOVE_PED(sStartAreaPedSimple[i].ped)
|
|
sStartAreaPedSimple[i].eState = SPS_CLEANED_UP
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "StartArea PED REMOVED - ", i) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
//Hospital peds
|
|
FOR i = 0 TO (TOTAL_HOSPITAL_PEDS - 1)
|
|
IF sHospitalPedSimple[i].eState = SPS_INIT
|
|
IF NOT bCreatedPedThisFrame
|
|
IF (fCurrentPlaybackTime >= NIGEL2_HOSPITAL_PEDS_TRIGGER_TIME)
|
|
AND eHospitalInteriorState > HIS_PIN_INTERIOR_IN_MEMORY // ensure the hospital has been requested beofre checking it's ready
|
|
IF IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
AND IS_INTERIOR_READY(HospitalInteriorIndex)
|
|
SWITCH i
|
|
// peds near entrance
|
|
CASE 0
|
|
mnTempPedModel = mnScrubsFemale
|
|
vTempSpawnPos = << 309.34, -596.87, 43.31 >>
|
|
fTempSpawnHeading = 14.8
|
|
BREAK
|
|
CASE 1
|
|
mnTempPedModel = mnScrubsFemale
|
|
vTempSpawnPos = << 309.52, -594.85, 43.31 >>
|
|
fTempSpawnHeading = 153.4102
|
|
BREAK
|
|
CASE 2
|
|
mnTempPedModel = mnScrubsFemale
|
|
vTempSpawnPos = << 316.00, -588.77, 42.30 >>
|
|
fTempSpawnHeading = 207.5560
|
|
BREAK
|
|
CASE 3
|
|
mnTempPedModel = mnDoctorMale
|
|
vTempSpawnPos = << 317.1715, -590.0840, 42.3020 >>
|
|
fTempSpawnHeading = 60.6
|
|
BREAK
|
|
//ped in corridor
|
|
CASE 4
|
|
mnTempPedModel = mnScrubsFemale
|
|
vTempSpawnPos = << 332.54, -588.50, 43.30 >>
|
|
fTempSpawnHeading = 70.64
|
|
BREAK
|
|
CASE 5
|
|
mnTempPedModel = mnScrubsFemale
|
|
vTempSpawnPos = << 331.68, -578.60, 43.32 >>
|
|
fTempSpawnHeading = 234.5983
|
|
BREAK
|
|
CASE 6
|
|
mnTempPedModel = mnScrubsFemale
|
|
vTempSpawnPos = << 362.56, -589.32, 43.33 >>
|
|
fTempSpawnHeading = -21.77
|
|
BREAK
|
|
CASE 7
|
|
mnTempPedModel = mnScrubsFemale
|
|
vTempSpawnPos = << 363.3849, -587.8508, 42.3275 >>
|
|
fTempSpawnHeading = 161.2689
|
|
BREAK
|
|
CASE 8
|
|
mnTempPedModel = mnDoctorMale
|
|
vTempSpawnPos = << 358.5161, -586.0200, 42.3275 >>
|
|
fTempSpawnHeading = 67.7037
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
REQUEST_MODEL(mnTempPedModel)
|
|
IF HAS_MODEL_LOADED(mnTempPedModel)
|
|
sHospitalPedSimple[i].ped = CREATE_PED(PEDTYPE_MISSION, mnTempPedModel, vTempSpawnPos, fTempSpawnHeading)
|
|
IF IS_PED_UNINJURED(sHospitalPedSimple[i].ped)
|
|
sHospitalPedSimple[i].eState = SPS_REACT_TO_TARGET
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sHospitalPedSimple[i].ped, TRUE)
|
|
SET_PED_FLEE_ATTRIBUTES(sHospitalPedSimple[i].ped, FA_CAN_SCREAM, TRUE)
|
|
SET_PED_KEEP_TASK(sHospitalPedSimple[i].ped, TRUE)
|
|
//RETAIN_ENTITY_IN_INTERIOR(sHospitalPedSimple[i].ped, HospitalInteriorIndex) // don't do this for now as it's making the peds invisible inside the interior!!!
|
|
#IF IS_DEBUG_BUILD
|
|
tDebugName = "HospitalP: "
|
|
tDebugName += i
|
|
SET_PED_NAME_DEBUG(sHospitalPedSimple[i].ped, tDebugName)
|
|
#ENDIF
|
|
SWITCH i
|
|
CASE 0
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,2), 0, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,3), 0, 1, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,5), 0, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
BREAK
|
|
CASE 1
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,0), 1, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,2), 0, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,5), 0, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[i].ped, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
BREAK
|
|
CASE 2
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[2].ped, INT_TO_ENUM(PED_COMPONENT,0), 1, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[2].ped, INT_TO_ENUM(PED_COMPONENT,2), 0, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[2].ped, INT_TO_ENUM(PED_COMPONENT,3), 0, 1, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[2].ped, INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[2].ped, INT_TO_ENUM(PED_COMPONENT,5), 0, 1, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[2].ped, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
BREAK
|
|
CASE 3
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[3].ped, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[3].ped, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[3].ped, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[3].ped, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[3].ped, INT_TO_ENUM(PED_COMPONENT,11), 0, 0, 0) //(jbib)
|
|
BREAK
|
|
CASE 4
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[4].ped, INT_TO_ENUM(PED_COMPONENT,0), 1, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[4].ped, INT_TO_ENUM(PED_COMPONENT,2), 1, 1, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[4].ped, INT_TO_ENUM(PED_COMPONENT,3), 1, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[4].ped, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[4].ped, INT_TO_ENUM(PED_COMPONENT,5), 1, 1, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[4].ped, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
BREAK
|
|
CASE 5
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[5].ped, INT_TO_ENUM(PED_COMPONENT,0), 1, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[5].ped, INT_TO_ENUM(PED_COMPONENT,2), 1, 1, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[5].ped, INT_TO_ENUM(PED_COMPONENT,3), 0, 2, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[5].ped, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[5].ped, INT_TO_ENUM(PED_COMPONENT,5), 0, 2, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[5].ped, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
BREAK
|
|
CASE 6
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[6].ped, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[6].ped, INT_TO_ENUM(PED_COMPONENT,2), 0, 1, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[6].ped, INT_TO_ENUM(PED_COMPONENT,3), 1, 1, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[6].ped, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[6].ped, INT_TO_ENUM(PED_COMPONENT,5), 0, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[6].ped, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
BREAK
|
|
CASE 7
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[7].ped, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[7].ped, INT_TO_ENUM(PED_COMPONENT,2), 1, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[7].ped, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[7].ped, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[7].ped, INT_TO_ENUM(PED_COMPONENT,5), 0, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[7].ped, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
BREAK
|
|
CASE 8
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[8].ped, INT_TO_ENUM(PED_COMPONENT,0), 1, 1, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[8].ped, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[8].ped, INT_TO_ENUM(PED_COMPONENT,4), 1, 2, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[8].ped, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
|
|
SET_PED_COMPONENT_VARIATION(sHospitalPedSimple[8].ped, INT_TO_ENUM(PED_COMPONENT,11), 1, 2, 0) //(jbib)
|
|
BREAK
|
|
ENDSWITCH
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "hospital PEDS CREATED") ENDIF #ENDIF
|
|
//Setup talkers
|
|
//TASK_CHAT_TO_PED(sHospitalPedSimple[0].ped, sHospitalPedSimple[1].ped, CF_AUTO_CHAT, <<0.0, 0.0, 0.0>>, 0.0, 0.0)
|
|
//TASK_CHAT_TO_PED(sHospitalPedSimple[2].ped, sHospitalPedSimple[3].ped, CF_IS_INITIATOR | CF_AUTO_CHAT, <<0.0, 0.0, 0.0>>, 0.0, 0.0)
|
|
//TASK_CHAT_TO_PED(sHospitalPedSimple[6].ped, sHospitalPedSimple[7].ped, CF_AUTO_CHAT, <<0.0, 0.0, 0.0>>, 0.0, 0.0)
|
|
//setup guys walk
|
|
//TASK_FOLLOW_NAV_MESH_TO_COORD(sHospitalPedSimple[4].ped, << 338.3217, -592.5885, 42.2918 >>, PEDMOVEBLENDRATIO_WALK)
|
|
//TASK_FOLLOW_NAV_MESH_TO_COORD(sHospitalPedSimple[5].ped, << 347.9706, -588.3258, 42.3275 >>, PEDMOVEBLENDRATIO_WALK)
|
|
ENDIF
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(mnTempPedModel)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " Hospital PEDS CREATED index = ", i, " fc = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
bCreatedPedThisFrame = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// don't update their AI every frame
|
|
IF GET_GAME_TIMER() - iTriggerScriptedPedestriansTimer > iAIUpdateDelay
|
|
IF IS_PED_UNINJURED(sHospitalPedSimple[i].ped)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "hospital ped - ", i) ENDIF #ENDIF
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "the square of distance between the two points is ", fDistBetweenPlayerAndHospitalPed) ENDIF #ENDIF
|
|
SWITCH sHospitalPedSimple[i].eState
|
|
CASE SPS_REACT_TO_TARGET
|
|
IF IS_ENTITY_IN_RANGE_COORDS(sHospitalPedSimple[i].ped, vPlayerCurrentPos, 5.0)
|
|
OR IS_ENTITY_IN_RANGE_ENTITY(sTargetPed.ped, sHospitalPedSimple[i].ped, 8.0)
|
|
//TASK_SMART_FLEE_PED(sHospitalPedSimple[i].ped, PLAYER_PED_ID(), 100.0, -1)
|
|
TASK_COWER(sHospitalPedSimple[i].ped, -1)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sHospitalPedSimple[i].ped, TRUE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "HOSPITAL PED COWER- ", i) ENDIF #ENDIF
|
|
sHospitalPedSimple[i].eState = SPS_READY_FOR_CLEANUP
|
|
ENDIF
|
|
BREAK
|
|
CASE SPS_REACT_TO_PLAYER
|
|
/*IF IS_ENTITY_IN_RANGE_COORDS(sHospitalPedSimple[i].ped, vPlayerCurrentPos, 2.5)
|
|
SET_ENTITY_HEALTH(sHospitalPedSimple[i].ped, 0)
|
|
CLEAR_PED_TASKS(sHospitalPedSimple[i].ped)
|
|
sHospitalPedSimple[i].eState = SPS_READY_FOR_CLEANUP
|
|
ENDIF*/
|
|
BREAK
|
|
CASE SPS_READY_FOR_CLEANUP
|
|
IF IS_PED_SHOOTING(PLAYER_PED_ID())
|
|
OR IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(), sHospitalPedSimple[i].ped)
|
|
OR IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sHospitalPedSimple[i].ped)
|
|
IF GET_SCRIPT_TASK_STATUS(sHospitalPedSimple[i].ped, SCRIPT_TASK_COWER) != PERFORMING_TASK
|
|
AND GET_SCRIPT_TASK_STATUS(sHospitalPedSimple[i].ped, SCRIPT_TASK_COWER) != WAITING_TO_START_TASK
|
|
TASK_COWER(sHospitalPedSimple[i].ped, -1)
|
|
ENDIF
|
|
ELIF NOT IS_ENTITY_IN_RANGE_COORDS(sHospitalPedSimple[i].ped, vPlayerCurrentPos, 250.0) //cleanup the peds player far away
|
|
SAFE_REMOVE_PED(sHospitalPedSimple[i].ped)
|
|
sHospitalPedSimple[i].eState = SPS_CLEANED_UP
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "HOSPITAL PED REMOVED - ", i) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
ENDIF
|
|
|
|
//don't do this every frame
|
|
IF GET_GAME_TIMER() - iTriggerScriptedPedestriansTimer > iAIUpdateDelay
|
|
iTriggerScriptedPedestriansTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// triggers dialogue during the chase
|
|
/// uses mission global var - fCurrentPlaybackTime
|
|
/// PARAMS:
|
|
/// bReturnOverrideTargetBlipFlashThisFrame - dialogue dictates if the blip flash needs to be overriden each frame for special case
|
|
PROC MANAGE_DIALOGUE_DURING_CHASE(BOOL &bReturnOverrideTargetBlipFlashThisFrame)
|
|
INT iTempRandomLine
|
|
TEXT_LABEL_31 tl31TempDialogueRoot
|
|
enumSubtitlesState eDisplaySubtitles
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
iTimer_DialogueDelay = GET_GAME_TIMER()
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - IS_ANY_CONVERSATION_ONGOING_OR_QUEUED timer set fc = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ELSE
|
|
bIsImportantDialoguePlaying = FALSE
|
|
ENDIF
|
|
// detect when a interrupt line has finished so we can free up for another interrupt
|
|
IF bIsInterruptDialoguePlaying
|
|
IF IS_PED_UNINJURED(pedIndexDialogueInterrupter)
|
|
IF NOT IS_AMBIENT_SPEECH_PLAYING(pedIndexDialogueInterrupter)
|
|
pedIndexDialogueInterrupter = NULL
|
|
bIsInterruptDialoguePlaying = FALSE
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - ped finished interrupt - reset bIsInterruptDialoguePlaying reset fc = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ELSE
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - IS_AMBIENT_SPEECH_PLAYING delay bIsInterruptDialoguePlaying fc = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ELSE
|
|
pedIndexDialogueInterrupter = NULL
|
|
bIsInterruptDialoguePlaying = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_IN_AIR(sNigelVehicle.vehicle) // IF IS_VEHICLE_ON_ALL_WHEELS(sNigelVehicle.vehicle)
|
|
iTimer_NigelVehicleJumpsTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
//GET_CURRENT_UNRESOLVED_SCRIPTED_CONVERSATION_LINE
|
|
|
|
// only play the chase dialogue during that stage
|
|
IF eMissionStage = MISSION_STAGE_CHASE_TARGET_IN_VEHICLE
|
|
|
|
IF fCurrentChaseDistance < ((NIGEL2_TARGET_ESCAPED_DISTANCE / 100) * (NIGEL2_FLASH_CHASE_BLIP_PERCENTAGE * 100)) // same time the chase blip will kick in
|
|
|
|
// Important dialogue which will trigger when conditions are met
|
|
|
|
// first turn into the highstreet
|
|
IF (fCurrentPlaybackTime > 3000.0 AND fCurrentPlaybackTime < 7500.0)
|
|
IF NOT bDoneDialogue_InitialInstruction
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
// Don't display subtitles if objective is on screen
|
|
eDisplaySubtitles = DISPLAY_SUBTITLES
|
|
IF IS_MESSAGE_BEING_DISPLAYED()
|
|
eDisplaySubtitles = DO_NOT_DISPLAY_SUBTITLES
|
|
ENDIF
|
|
IF NIG2_PLAY_SINGLE_LINE_FROM_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_INSTR", "NIG2_INSTR_13", CONV_PRIORITY_HIGH, eDisplaySubtitles)
|
|
// He's taking a left turn down the high street, Jock.
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_InitialInstruction = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - important dialogue - NIG2_INSTR_13 fc = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//turn when leaving highstreet
|
|
IF (fCurrentPlaybackTime > 15500.0 AND fCurrentPlaybackTime < 16000.0)
|
|
IF NOT bDoneDialogue_Chase[0]
|
|
//check player vehicle is an area where where it would see di napoli turn
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<-1237.778442,-763.467896,26.422665>>, <<-1186.702759,-829.477234,10.580473>>, 31.000000)
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() //ONLY DO THIS ONE IF THE FIRST CONVO HAS FINISHED
|
|
IF NIG2_PLAY_SINGLE_LINE_FROM_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_INSTR", "NIG2_INSTR_1", CONV_PRIORITY_HIGH)
|
|
// He's turning left!
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_Chase[0] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - important dialogue - NIG2_INSTR_1 fc = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//Tunnel section
|
|
IF (fCurrentPlaybackTime > 45500.0 AND fCurrentPlaybackTime < 47500.0) // B*1545310 - reduced from 46500 to make it trigger sooner
|
|
IF NOT bDoneDialogue_Chase[1]
|
|
//check player vehicle is in area where he'd see the truck
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<-664.53711, -580.79431, 29.308285>>, <<-590.720276,-581.193237,23.308285>>, 13.500000) // B*1545310 - prev <<-661.360962,-581.020081,29.308285>>
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG_SP1", CONV_PRIORITY_HIGH)
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(3.0, 3.0, REPLAY_IMPORTANCE_LOWEST)
|
|
|
|
// Oh my word! Jock! Do you see that lorry?
|
|
// What the fuck's a lorry?
|
|
// Have a little faith. Anyone'd think this was my first kidnapping.
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_Chase[1] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - important dialogue - NIG_SP1 fc = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//entrance to carpark
|
|
IF (fCurrentPlaybackTime > 69000.0 AND fCurrentPlaybackTime < 71000.0) //68500.0 AND fCurrentPlaybackTime < 70000.0)
|
|
IF NOT bDoneDialogue_Chase[2]
|
|
//check player vehicle is in area where he'd him head into the carpark
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<-440.785736,-828.323730,35.735603>>, <<-511.811157,-826.655945,27.668936>>, 60.000000)
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG_SP2", CONV_PRIORITY_HIGH)
|
|
REPLAY_RECORD_BACK_FOR_TIME(3.0, 3.0, REPLAY_IMPORTANCE_LOWEST)
|
|
// Mind out!
|
|
// He's going into the car park!
|
|
// The car park. No worries, mate.
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_Chase[2] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - important dialogue - NIG_SP2 fc = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//entrance to highway
|
|
IF (fCurrentPlaybackTime > 85000.0 AND fCurrentPlaybackTime < 89000.0)
|
|
IF NOT bDoneDialogue_Chase[3]
|
|
//check player vehicle has entered the highway
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<-432.327759,-540.988037,44.071632>>, <<-433.248322,-485.564941,22.470394>>, 60.000000)
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG_SP3", CONV_PRIORITY_HIGH)
|
|
// Oh my giddy aunt!
|
|
// Everything okay there, Earl Crazycakes?
|
|
// My prostate has taken quite a beating.
|
|
// Do you have to lower the tone?
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_Chase[3] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - important dialogue - NIG_SP3 FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//slip road highway exit
|
|
IF (fCurrentPlaybackTime > 104000.0 AND fCurrentPlaybackTime < 110000.0)
|
|
IF NOT bDoneDialogue_Chase[4]
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() // B*1392677 - moaning about dialogue getting cut off
|
|
//check player vehicle is on highway following napoli
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<81.946068,-518.602417,38.074284>>, <<-107.368584,-519.744385,27.815357>>, 60.000000)
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
//KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
KILL_ANY_CONVERSATION() // B*1392677 - moaning about dialogue getting cut off
|
|
ENDIF
|
|
IF NIG2_PLAY_SINGLE_LINE_FROM_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_INSTR", "NIG2_INSTR_12", CONV_PRIORITY_HIGH)
|
|
// Take the slip road Jock.
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_Chase[4] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - important dialogue - NIG2_INSTR_12 FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//entrance to hospital
|
|
IF (fCurrentPlaybackTime > 113000.0 AND fCurrentPlaybackTime < 116000.0)
|
|
IF NOT bDoneDialogue_Chase[5]
|
|
//check player vehicle could see hospital
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<254.999435,-594.382629,49.602520>>, <<270.464294,-527.226013,39.682480>>, 70.000000)
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_HOSP01", CONV_PRIORITY_HIGH)
|
|
REPLAY_RECORD_BACK_FOR_TIME(3.0, 3.0, REPLAY_IMPORTANCE_LOWEST)
|
|
// Is he going through the hospital?
|
|
// Oh my lord!
|
|
// Hold on to your corsets.
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_Chase[5] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - important dialogue - NIG2_HOSP01 FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF fCurrentPlaybackTime > 118000.0 //only do these checks towards end of the chase
|
|
//go out the window comment
|
|
IF NOT bDoneDialogue_Chase[6]
|
|
//lead up to window
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<338.011139,-581.905457,41.577534>>, <<350.986938,-586.752930,46.077515>>, 6.750000)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "inside do hospital window dialogue") ENDIF #ENDIF
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_HWH", CONV_PRIORITY_HIGH)
|
|
// Uh, seems rude not to follow him through the window.
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_Chase[6] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - important dialogue - NIG2_HWH FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//go out the window comment
|
|
IF NOT bDoneDialogue_Chase[7]
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<368.571442,-594.946655,45.542202>>, <<389.501495,-614.127930,27.117891>>, 20.750000)
|
|
IF NOT IS_SPECIFIC_CONVERSATION_ROOT_CURRENTLY_PLAYING("NIG2_HWH") // // Uh, seems rude not to follow him through the window.
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_HWS", CONV_PRIORITY_HIGH)
|
|
// Bloody hell!
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_Chase[7] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - important dialogue - NIG2_HWS FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT bIsInterruptDialoguePlaying
|
|
|
|
// Nigel's vehicle jumps and/or flips over
|
|
IF NOT bDoneDialogue_UpsideDownOrAirbourne
|
|
|
|
IF IS_VEHICLE_STUCK_ON_ROOF(sNigelVehicle.vehicle)
|
|
OR IS_VEHICLE_STUCK_TIMER_UP(sNigelVehicle.vehicle, VEH_STUCK_ON_ROOF, 1000) // IS_VEHICLE_STUCK_ON_ROOF didn't seem to work for this
|
|
OR IS_VEHICLE_STUCK_TIMER_UP(sNigelVehicle.vehicle, VEH_STUCK_ON_SIDE, 1000)
|
|
OR HAS_TIME_PASSED(iTimer_NigelVehicleStuckOnRoofFail, 500)
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
// KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
//ENDIF
|
|
// random dialogue, so only one line will be selected
|
|
tl31TempDialogueRoot = "NIG2_FLIP_"
|
|
iTempRandomLine = GET_RANDOM_INT_IN_RANGE(1, 3) // selection 1-2
|
|
tl31TempDialogueRoot += iTempRandomLine
|
|
|
|
// B*1366130 - use INTERRUPT_CONVERSATION instead since dialogue doesn't play otherwise
|
|
|
|
IF iTempRandomLine = 1
|
|
// context uses to key geenrated in AmericanDialogueFiles e.g. - [NIG2_FLIP_1A:NIG2AUD] NIG2_CCAA
|
|
INTERRUPT_CONVERSATION(sNigelPed.ped, "NIG2_CCAA", "NIGEL")
|
|
// A little rusty on the old stunts, Jock.
|
|
bDoneDialogue_UpsideDownOrAirbourne = TRUE
|
|
pedIndexDialogueInterrupter = sNigelPed.ped
|
|
bIsInterruptDialoguePlaying = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - nigel's vehicle flipped dialogue : NIG2_CCAA FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
EXIT
|
|
ELSE
|
|
// context uses to key geenrated in AmericanDialogueFiles e.g. - [NIG2_FLIP_2A:NIG2AUD] NIG2_CCAB
|
|
INTERRUPT_CONVERSATION(sMrsThornhillPed.ped, "NIG2_CCAB", "MRSTHORNHILL")
|
|
// It's all gone topsy-turvy upside down cake.
|
|
bDoneDialogue_UpsideDownOrAirbourne = TRUE
|
|
pedIndexDialogueInterrupter = sMrsThornhillPed.ped
|
|
bIsInterruptDialoguePlaying = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - Mrs Thornhill's vehicle flipped dialogue : NIG2_CCAB FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// airborne - only do if we aren't currently doing the upside down dialogue
|
|
ELIF IS_ENTITY_IN_AIR(sNigelVehicle.vehicle) // IF NOT IS_VEHICLE_ON_ALL_WHEELS(sNigelVehicle.vehicle)
|
|
|
|
IF HAS_TIME_PASSED(iTimer_NigelVehicleJumpsTimer, 500) //make sure Nigel's car has been in the air for a decent chunk of time, iTimer_NigelVehicleJumpsTimer is reset at top of proc
|
|
|
|
IF NOT IS_SPECIFIC_CONVERSATION_ROOT_CURRENTLY_PLAYING("NIG2_HWH") // bDoneDialogue_Chase[6] // prevent this playing if inital jump out window dialogue is waiting to trigger
|
|
AND NOT IS_SPECIFIC_CONVERSATION_ROOT_CURRENTLY_PLAYING("NIG2_HWS") // bDoneDialogue_Chase[7] // prevent this playing if inital jump out window dialogue is waiting to trigger
|
|
|
|
// allows current conversations to be interrupted with the specific comments
|
|
|
|
// random select between Nigel and Mrs Thornhill comments
|
|
IF (GET_RANDOM_INT_IN_RANGE(0, 11) > 5)
|
|
// context uses to key geenrated in AmericanDialogueFiles e.g. - [NIG2_JUMP_1A:NIG2AUD] NIG2_CDAA
|
|
tl31TempDialogueRoot = "NIG2_CDAA"
|
|
// Just like in the films!
|
|
INTERRUPT_CONVERSATION(sNigelPed.ped, tl31TempDialogueRoot, "NIGEL")
|
|
pedIndexDialogueInterrupter = sNigelPed.ped
|
|
ELSE
|
|
// context uses to key geenrated in AmericanDialogueFiles e.g. - [NIG2_JUMP_2A:NIG2AUD] NIG2_CDAB
|
|
tl31TempDialogueRoot = "NIG2_CDAB"
|
|
// Mercy me, we're airborne!
|
|
INTERRUPT_CONVERSATION(sMrsThornhillPed.ped, tl31TempDialogueRoot, "MRSTHORNHILL")
|
|
pedIndexDialogueInterrupter = sMrsThornhillPed.ped
|
|
ENDIF
|
|
iTimer_NigelVehicleJumpsTimer = GET_GAME_TIMER()
|
|
bIsInterruptDialoguePlaying = TRUE
|
|
bDoneDialogue_UpsideDownOrAirbourne = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - nigel's vehicle jump dialogue, context = ", tl31TempDialogueRoot, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// reset dialogue trigger when vehicle is back on the ground
|
|
IF NOT IS_ENTITY_IN_AIR(sNigelVehicle.vehicle)
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(sNigelVehicle.vehicle)
|
|
OR (NOT IS_VEHICLE_STUCK_ON_ROOF(sNigelVehicle.vehicle)
|
|
AND NOT IS_VEHICLE_STUCK_TIMER_UP(sNigelVehicle.vehicle, VEH_STUCK_ON_ROOF, 1000) // IS_VEHICLE_STUCK_ON_ROOF didn't seem to work for this
|
|
AND NOT IS_VEHICLE_STUCK_TIMER_UP(sNigelVehicle.vehicle, VEH_STUCK_ON_SIDE, 1000))
|
|
bDoneDialogue_UpsideDownOrAirbourne = FALSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - reset bDoneDialogue_UpsideDownOrAirbourne") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// temp wrap to until code fix for bug 1443371 & 1443404
|
|
IF NOT bIsImportantDialoguePlaying
|
|
|
|
// Trevor drives into a ped
|
|
IF (GET_TIME_SINCE_PLAYER_HIT_PED(PLAYER_ID()) >= 0) // looks to be initially set to -1 so need to check from 0
|
|
AND (GET_TIME_SINCE_PLAYER_HIT_PED(PLAYER_ID()) < 500)
|
|
|
|
// allows current conversations to be interrupted with the specific comments
|
|
|
|
// random select between Nigel and Mrs Thornhill comments
|
|
IF (GET_RANDOM_INT_IN_RANGE(0, 11) > 5)
|
|
// context uses to key geenrated in AmericanDialogueFiles e.g. - [NIG2_PEDA:NIG2AUD] NIG2_CQAA
|
|
tl31TempDialogueRoot = "NIG2_CQAA"
|
|
// It's okay, they all have private healthcare.
|
|
// Jock, I think you just hit someone!
|
|
// Mrs. Thornhill was throwing herself under cars earlier.
|
|
INTERRUPT_CONVERSATION(sNigelPed.ped, tl31TempDialogueRoot, "NIGEL")
|
|
pedIndexDialogueInterrupter = sNigelPed.ped
|
|
ELSE
|
|
// context uses to key geenrated in AmericanDialogueFiles e.g. - [NIG2_PED2A:NIG2AUD] NIG2_CPAA
|
|
tl31TempDialogueRoot = "NIG2_CPAA"
|
|
// That's right, Jock, no prisoners!
|
|
// Just a scratch!
|
|
INTERRUPT_CONVERSATION(sMrsThornhillPed.ped, tl31TempDialogueRoot, "MRSTHORNHILL")
|
|
pedIndexDialogueInterrupter = sMrsThornhillPed.ped
|
|
ENDIF
|
|
bIsInterruptDialoguePlaying = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - player hit ped dialogue, context = ", tl31TempDialogueRoot, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
// collide dialogue
|
|
IF HAS_ENTITY_COLLIDED_WITH_ANYTHING(sNigelVehicle.vehicle)
|
|
|
|
// allows current conversations to be interrupted with the specific comments
|
|
|
|
// random select between Nigel and Mrs Thornhill comments
|
|
IF (GET_RANDOM_INT_IN_RANGE(0, 11) > 5)
|
|
// context uses to key geenrated in AmericanDialogueFiles e.g. - [NIG2_CRASHA:NIG2AUD] NIG2_COAA
|
|
tl31TempDialogueRoot = "NIG2_COAA"
|
|
// Careful!
|
|
// Oh, the hernia!
|
|
// Maybe I should have driven.
|
|
INTERRUPT_CONVERSATION(sNigelPed.ped, tl31TempDialogueRoot, "NIGEL")
|
|
pedIndexDialogueInterrupter = sNigelPed.ped
|
|
ELSE
|
|
// context uses to key geenrated in AmericanDialogueFiles e.g. - [NIG2_CRASH2A:NIG2AUD] NIG2_CNAA
|
|
tl31TempDialogueRoot = "NIG2_CNAA"
|
|
// Mind out!
|
|
// The hire car!
|
|
// We'll never get that deposit back!
|
|
INTERRUPT_CONVERSATION(sMrsThornhillPed.ped, tl31TempDialogueRoot, "MRSTHORNHILL")
|
|
pedIndexDialogueInterrupter = sMrsThornhillPed.ped
|
|
ENDIF
|
|
bIsInterruptDialoguePlaying = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - vehicle collides dialogue, context = ", tl31TempDialogueRoot, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Medium important dialogue - will only trigger if no other dialogue of same importance of higher is playing.
|
|
IF NOT bIsImportantDialoguePlaying
|
|
AND NOT bIsInterruptDialoguePlaying
|
|
|
|
//warn player about shooting at target
|
|
IF DOES_ENTITY_EXIST(sTargetVehicle.vehicle)
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sTargetVehicle.vehicle, PLAYER_PED_ID())
|
|
AND IS_PED_SHOOTING(PLAYER_PED_ID())
|
|
IF NOT IS_SPECIFIC_CONVERSATION_ROOT_CURRENTLY_PLAYING("NIG2_SHOOTS")
|
|
AND NOT IS_SPECIFIC_CONVERSATION_ROOT_CURRENTLY_PLAYING("NIG2_SHOOTSN")
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
// random pick between nigel or mrs t line
|
|
IF GET_RANDOM_INT_IN_RANGE(0, 11) > 5
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_SHOOTS", CONV_PRIORITY_HIGH)
|
|
// We didn't say kill the poor man!
|
|
// Stop shooting! I can't hear myself think!
|
|
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(sTargetVehicle.vehicle)
|
|
bIsInterruptDialoguePlaying = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - warn shooting dialogue mrs t - NIG2_SHOOTS") ENDIF #ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ELSE
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_SHOOTSN", CONV_PRIORITY_HIGH)
|
|
// Why do you Americans have to shoot at everything?
|
|
// He's not much use to us in a body bag, Jock!
|
|
// He thinks he's on one of those drive-bys, Mrs Thornhill!
|
|
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(sTargetVehicle.vehicle)
|
|
bIsInterruptDialoguePlaying = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - warn shooting dialogue nigel - NIG2_SHOOTSN") ENDIF #ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
|
|
//warn player about ramming target
|
|
IF NOT bDoneDialogue_WarnRamming
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sTargetVehicle.vehicle, PLAYER_PED_ID())
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CHASE01", CONV_PRIORITY_HIGH)
|
|
// Don't go crazy, we'd prefer him in one piece!
|
|
// Oh yeah, nobody here go crazy. Heaven forbid.
|
|
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(sTargetVehicle.vehicle)
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_WarnRamming = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - rammin dialogue - NIG2_CHASE01") ENDIF #ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// trevor gets a wanted level
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
IF NOT bDoneDialogue_TrevorGetsWantedLevel
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_WANTED", CONV_PRIORITY_HIGH)
|
|
// Is that the old bill?
|
|
// The police, what terrible luck.
|
|
bDoneDialogue_TrevorGetsWantedLevel = TRUE
|
|
bIsImportantDialoguePlaying = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - wanted dialogue - NIG2_WANTED") ENDIF #ENDIF
|
|
ENDIF
|
|
ELIF NOT bDoneDialogue_CopsSeenChasing
|
|
IF NOT IS_SPECIFIC_CONVERSATION_ROOT_CURRENTLY_PLAYING("NIG2_WANTED")
|
|
//IF IS_COP_VEHICLE_IN_AREA_3D(vTemp1, vTemp2) // not found a cheap way to detect cop car on screen yet
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_POLICE", CONV_PRIORITY_HIGH)
|
|
// Do you think we'll be on one of those cop chase programmes?
|
|
// The LSPD, how glamorous!
|
|
bDoneDialogue_CopsSeenChasing = TRUE
|
|
bIsImportantDialoguePlaying = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - cops seen dialogue - NIG2_POLICE") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Low priority dialogue - only plays if no other dialogue is playing
|
|
// only play the chase dialogue during that stage
|
|
IF eMissionStage = MISSION_STAGE_CHASE_TARGET_IN_VEHICLE
|
|
|
|
IF fCurrentChaseDistance < ((NIGEL2_TARGET_ESCAPED_DISTANCE / 100) * (NIGEL2_FLASH_CHASE_BLIP_PERCENTAGE * 100)) // same time the chase blip will kick in
|
|
|
|
IF NOT bIsImportantDialoguePlaying
|
|
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
IF HAS_TIME_PASSED(iTimer_DialogueDelay, 500)
|
|
|
|
// general banter dialogue
|
|
IF (fCurrentPlaybackTime < 116000.0) // DONT ALLOW BANTER FROM HOSPTIAL SECTION ONWARDS
|
|
|
|
// driving wrong side of the road
|
|
IF NOT bDoneDialogue_DrivingOnWrongSideRoad
|
|
IF fCurrentPlaybackTime > 20000.0 // got out of pedestrian area first
|
|
IF IS_TREVOR_DRIVING_ON_ROAD_WRONG_WAY()
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_LEFT", CONV_PRIORITY_HIGH)
|
|
// Glad to see you on the proper side of the road, dear boy.
|
|
bDoneDialogue_DrivingOnWrongSideRoad = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - driving wrong side of the road dialogue - NIG2_LEFT") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//BANTER
|
|
IF NOT bDoneDialogue_BanterChase[0]
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CHASE02", CONV_PRIORITY_HIGH)
|
|
// Did you ever imagine we might get a private audience with Al Di Napoli?
|
|
// Only in my wildest dreams.
|
|
// All those nights spent roleplaying in mother's utility room,
|
|
// if only we'd known!
|
|
bDoneDialogue_BanterChase[0] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - banter dialogue - NIG2_CHASE02") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF NOT bDoneDialogue_BanterChase[1]
|
|
IF bDoneDialogue_Chase[0] //after first left dialogue
|
|
OR (fCurrentPlaybackTime > 16500.0) // ahalf second after its bDoneDialogue_Chase[0] trigger time
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CHASE05", CONV_PRIORITY_HIGH)
|
|
// I loved him in The Redeemer. Oh, Nigel, do your Al Di Napoli line!
|
|
// "This is turban warfare, motherfucker!"
|
|
// It's uncanny!
|
|
// Oh dear, poor Jock must think we're batty!
|
|
// Oh, don't be silly.
|
|
bDoneDialogue_BanterChase[1] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - banter dialogue - NIG2_CHASE05") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT bDoneDialogue_BanterChase[2]
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CHASE08", CONV_PRIORITY_HIGH)
|
|
// I hear that behind his charitable public face, he's remarkably right-wing.
|
|
// One can but hope.
|
|
// Liberal in the bedroom, conservative at the border, Mrs Thornhill!
|
|
// I love this country!
|
|
bDoneDialogue_BanterChase[2] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - banter dialogue - NIG2_CHASE08") ENDIF #ENDIF
|
|
ENDIF
|
|
ELIF NOT bDoneDialogue_BanterChase[3]
|
|
IF bDoneDialogue_Chase[1] //only trigger after tunnel
|
|
OR (fCurrentPlaybackTime > 52500.0) // half a second after its bDoneDialogue_Chase[1] trigger time
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CHASE06", CONV_PRIORITY_HIGH)
|
|
// What on earth will we feed the man?
|
|
// I hadn't even thought of that. He probably eats sushi or quinoa. Is that even how you even say it?
|
|
// What if he wants meth?
|
|
// Don't get flustered again, Nigel.
|
|
bDoneDialogue_BanterChase[3] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - banter dialogue - NIG2_CHASE06") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT bDoneDialogue_BanterChase[4]
|
|
IF bDoneDialogue_Chase[2] // trigger after going in car park
|
|
OR (fCurrentPlaybackTime > 71500.0) // half a second after its bDoneDialogue_Chase[2] trigger time
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CHASE03", CONV_PRIORITY_HIGH)
|
|
// Oh, I hope he likes us!
|
|
// How could he not? This lock-up you've prepared sounds charming.
|
|
// Just be yourself, Mrs Thornhill.
|
|
bDoneDialogue_BanterChase[4] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - banter dialogue - NIG2_CHASE03") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT bDoneDialogue_BanterChase[5]
|
|
IF bDoneDialogue_Chase[3] //after highway dialogue
|
|
OR (fCurrentPlaybackTime > 89500.0) // half a second after its bDoneDialogue_Chase[3] trigger time
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CHASE04", CONV_PRIORITY_HIGH)
|
|
// This must be second nature to you, Jock. All those stunts you used to do.
|
|
// And we saw you're up for governor of San Andreas!
|
|
// That's right. In between openly attacking celebrities all over town, I'm running for public office.
|
|
// Such simplistic and uninhibited people. Marvelous.
|
|
bDoneDialogue_BanterChase[5] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - banter dialogue - NIG2_CHASE04") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT bDoneDialogue_BanterChase[6]
|
|
IF NOT bDoneDialogue_Chase[5] // don't trigger this after the hospital entrance comment
|
|
IF bDoneDialogue_Chase[4] //after slip road instruction
|
|
OR (fCurrentPlaybackTime > 106500.0) // half a second after its bDoneDialogue_Chase[4] trigger time
|
|
//check player vehicle isn't still on highway waiting for sliproad comment
|
|
IF NOT IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<81.946068,-518.602417,38.074284>>, <<-107.368584,-519.744385,27.815357>>, 60.000000)
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CHASE07", CONV_PRIORITY_HIGH)
|
|
// This level of derangement, I'm impressed.
|
|
// Little by little I'm tip-toeing out of the comfort zone.
|
|
// Before I met Mrs Thornhill I was so vanilla.
|
|
// I had a very confined upbringing.
|
|
// Well let me assure you there's no comfort in this zone.
|
|
bDoneDialogue_BanterChase[6] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - banter dialogue - NIG2_CHASE07") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// dialogue for target escaping
|
|
IF fCurrentChaseDistance > ((NIGEL2_TARGET_ESCAPED_DISTANCE / 100) * (NIGEL2_FLASH_CHASE_BLIP_PERCENTAGE * 100))
|
|
|
|
// catch up dialogue - Al Di Napoli escaping
|
|
IF NOT bIsImportantDialoguePlaying
|
|
|
|
IF NOT bDoneDialogue_CatchUp[2]
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ELSE
|
|
IF NOT bDoneDialogue_CatchUp[0]
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CU01", CONV_PRIORITY_HIGH)
|
|
// Can't you go any faster?
|
|
// Blame Nigel for renting this shitheap of a car.
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_CatchUp[0] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - catch up dialogue - NIG2_CU03") ENDIF #ENDIF
|
|
ENDIF
|
|
ELIF NOT bDoneDialogue_CatchUp[1]
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CU02", CONV_PRIORITY_HIGH)
|
|
// We can't lose him, Jock!
|
|
// How will we all become the best of friends?
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_CatchUp[1] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - catch up dialogue - NIG2_CU03") ENDIF #ENDIF
|
|
ENDIF
|
|
ELIF NOT bDoneDialogue_CatchUp[2]
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CU03", CONV_PRIORITY_HIGH)
|
|
// Hurry up! We can't let him get away!
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_CatchUp[2] = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - catch up dialogue - NIG2_CU03") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
// B*1513201 - when target goes down the tunnel and player doesn't follow
|
|
// needs to match up with UPDATE_FAIL_REASON
|
|
ELIF fCurrentPlaybackTime > 40000.0 // enter tunnel
|
|
IF fCurrentPlaybackTime < 58000.0 // exit tunnel
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-731.689087,-657.824158,26.269114>>, <<-448.393585,-657.125000,40.717342>>, 40.000000) // the road area
|
|
IF NOT bDoneDialogue_WrongWaySpecialFail
|
|
IF NOT bDoneDialogue_CatchUp[1]
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CU02", CONV_PRIORITY_HIGH)
|
|
// We can't lose him, Jock!
|
|
// How will we all become the best of friends?
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_CatchUp[1] = TRUE
|
|
bDoneDialogue_WrongWaySpecialFail = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - special case Wrong way dialogue - NIG2_CU03") ENDIF #ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
// make sure this back is used
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_CU03", CONV_PRIORITY_HIGH)
|
|
// Hurry up! We can't let him get away!
|
|
bIsImportantDialoguePlaying = TRUE
|
|
bDoneDialogue_CatchUp[2] = TRUE
|
|
bDoneDialogue_WrongWaySpecialFail = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - special case Wrong way dialogue - NIG2_CU03") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
bReturnOverrideTargetBlipFlashThisFrame = TRUE // set to ensure blip flash is forced on for this situation
|
|
ENDIF
|
|
ENDIF
|
|
ENDIf
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// deals with pinning the hospital interior to memory, setting the interior active and setting the IPL groups
|
|
/// B*1504088 - need to request the ipl changes really early otherwise rayfire doesn't kick in quick enough
|
|
PROC MANAGE_HOSPITAL_STATE_DURING_CHASE()
|
|
|
|
// make sure the IPL swaps are done first of all
|
|
IF eHospitalInteriorState = HIS_SET_INTERIOR_IPLS_FOR_CHASE
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL, BUILDINGSTATE_DESTROYED) // sets the window to destroyed so player/target can drive through it
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL_INTERIOR, BUILDINGSTATE_NORMAL) // sets the interior to stream
|
|
HospitalInteriorIndex = GET_INTERIOR_AT_COORDS_WITH_TYPE(<< 307.3065, -589.9595, 43.3020 >>, "v_hospital") //get handle to hospital interior
|
|
eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - done HIS_SET_INTERIOR_IPLS_FOR_CHASE : FC = ", GET_FRAME_COUNT())
|
|
|
|
// interior needs to be pinned into memory really early
|
|
ELIF eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
IF IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
IF NOT IS_INTERIOR_READY(HospitalInteriorIndex)
|
|
PIN_INTERIOR_IN_MEMORY(HospitalInteriorIndex)
|
|
ELSE
|
|
SET_INTERIOR_ACTIVE(HospitalInteriorIndex, TRUE)
|
|
eHospitalInteriorState = HIS_SET_ENTITY_SET_FOR_CHASE
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - done HIS_PIN_INTERIOR_IN_MEMORY : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ELSE
|
|
HospitalInteriorIndex = GET_INTERIOR_AT_COORDS_WITH_TYPE(<< 307.3065, -589.9595, 43.3020 >>, "v_hospital") //get handle to hospital interior
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE getting handle to valid interior : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// set the entity set once we know the interior is pinned in memory
|
|
ELIF eHospitalInteriorState = HIS_SET_ENTITY_SET_FOR_CHASE
|
|
IF IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
IF IS_INTERIOR_READY(HospitalInteriorIndex)
|
|
SET_BUILDING_STATE(BUILDINGNAME_ES_PILLBOX_HILL, BUILDINGSTATE_NORMAL) // sets entity set for the rayfire doors
|
|
eHospitalInteriorState = HIS_REFRESH_INTERIOR
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - SKIPPED done HIS_SET_ENTITY_SET_FOR_CHASE : FC = ", GET_FRAME_COUNT())
|
|
ELSE
|
|
eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_SET_ENTITY_SET_FOR_CHASE - error interior no longer ready! : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ELSE
|
|
eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_SET_ENTITY_SET_FOR_CHASE - error interior no longer valid! : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
|
|
// refresh the interior once everything should be setup correctly
|
|
ELIF eHospitalInteriorState = HIS_REFRESH_INTERIOR
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
IF IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
IF IS_INTERIOR_READY(HospitalInteriorIndex)
|
|
REFRESH_INTERIOR(HospitalInteriorIndex)
|
|
eHospitalInteriorState = HIS_READY // HIS_REQUEST_NEW_LOAD_SCENE_AT_INTERIOR //
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - SKIPPED ^ done HIS_REFRESH_INTERIOR : FC = ", GET_FRAME_COUNT())
|
|
ELSE
|
|
PIN_INTERIOR_IN_MEMORY(HospitalInteriorIndex)
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_REFRESH_INTERIOR - re pinnning in memory : FC = ", GET_FRAME_COUNT())
|
|
//eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
//CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_REFRESH_INTERIOR - error interior no longer ready! : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ELSE
|
|
HospitalInteriorIndex = GET_INTERIOR_AT_COORDS_WITH_TYPE(<< 307.3065, -589.9595, 43.3020 >>, "v_hospital") //get handle to hospital interior
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_REFRESH_INTERIOR - getting handle to valid interior : FC = ", GET_FRAME_COUNT())
|
|
//eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
//CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_REFRESH_INTERIOR - error interior no longer valid! : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
/* removed for now as Ian thinks it shouldn't be needed anymore because the interior is pinned so early
|
|
// load the scene at the interior (5m inside the interior apparenlt not too expensive and should do the job)
|
|
ELIF eHospitalInteriorState = HIS_REQUEST_NEW_LOAD_SCENE_AT_INTERIOR
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
IF IS_COORD_IN_RANGE_OF_COORD(vPlayerPos, << 308.96793, -591.07501, 43.29187 >>, 350.0) // 550.0) //350.0)
|
|
NEW_LOAD_SCENE_STOP()
|
|
IF NOT IS_NEW_LOAD_SCENE_ACTIVE()
|
|
NEW_LOAD_SCENE_START_SPHERE(<< 308.96793, -591.07501, 43.29187 >>, 5.0, NEWLOADSCENE_FLAG_REQUIRE_COLLISION) // pos more in the middle of the interior
|
|
eHospitalInteriorState = HIS_ACTIVE_NEW_LOAD_SCENE_AT_INTERIOR
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE NEW_LOAD_SCENE_START_SPHERE(<< 326.36642, -590.09155, 42.29188 >>, 5.0 : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// check for the new load scene completing
|
|
ELIF eHospitalInteriorState = HIS_ACTIVE_NEW_LOAD_SCENE_AT_INTERIOR
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
IF IS_NEW_LOAD_SCENE_ACTIVE()
|
|
IF IS_NEW_LOAD_SCENE_LOADED()
|
|
eHospitalInteriorState = HIS_CLEANUP_NEW_LOAD_SCENE_AT_INTERIOR
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - done HIS_ACTIVE_NEW_LOAD_SCENE_AT_INTERIOR : FC = ", GET_FRAME_COUNT())
|
|
// if player moves away before load is completed bin it off
|
|
ELIF NOT IS_COORD_IN_RANGE_OF_COORD(vPlayerPos, << 308.96793, -591.07501, 43.29187 >>, 650.0) // 550.0) //350.0)
|
|
NEW_LOAD_SCENE_STOP()
|
|
eHospitalInteriorState = HIS_REQUEST_NEW_LOAD_SCENE_AT_INTERIOR
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - binned off HIS_ACTIVE_NEW_LOAD_SCENE_AT_INTERIOR for range check : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// bin off the new load scene once chase has reached the area
|
|
ELIF eHospitalInteriorState = HIS_CLEANUP_NEW_LOAD_SCENE_AT_INTERIOR
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
//IF IS_NEW_LOAD_SCENE_ACTIVE()
|
|
// NEW_LOAD_SCENE_STOP()
|
|
// eHospitalInteriorState = HIS_READY
|
|
// CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - done HIS_CLEANUP_NEW_LOAD_SCENE_AT_INTERIOR : FC = ", GET_FRAME_COUNT())
|
|
//ENDIF
|
|
IF NOT IS_COORD_IN_RANGE_OF_COORD(vPlayerPos, << 308.96793, -591.07501, 43.29187 >>, 650.0) // 550.0) //350.0)
|
|
NEW_LOAD_SCENE_STOP()
|
|
eHospitalInteriorState = HIS_REQUEST_NEW_LOAD_SCENE_AT_INTERIOR
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - binned off HIS_CLEANUP_NEW_LOAD_SCENE_AT_INTERIOR for range check : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
*/
|
|
|
|
// everything should be setup by this point, just monitor things going wrong
|
|
ELIF eHospitalInteriorState = HIS_READY
|
|
IF IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
IF NOT IS_INTERIOR_READY(HospitalInteriorIndex)
|
|
PIN_INTERIOR_IN_MEMORY(HospitalInteriorIndex)
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_READY - re pinnning in memory : FC = ", GET_FRAME_COUNT())
|
|
//eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
//CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_READY - error interior no longer ready! : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ELSE
|
|
HospitalInteriorIndex = GET_INTERIOR_AT_COORDS_WITH_TYPE(<< 307.3065, -589.9595, 43.3020 >>, "v_hospital") //get handle to hospital interior
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_READY - getting handle to valid interior : FC = ", GET_FRAME_COUNT())
|
|
//eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
//CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_READY - error interior no longer valid! : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
|
|
//ELIF eHospitalInteriorState = HIS_ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// handles rayfire doors triggering
|
|
/// uses mission global var - fCurrentPlaybackTime
|
|
PROC MANAGE_RAYFIRE_HOSPITAL_DOORS()
|
|
IF NOT IS_REPLAY_BEING_SET_UP() // don't allow during replay setup / stage skips
|
|
AND bFinishedStageSkipping
|
|
|
|
// B*1572752 - now creating doors object in script to display until rayfire anim kicks in - rayfire object always struggled to stream prior to start state
|
|
IF eHospitalDoorsObjectState = HDO_CREATE
|
|
IF (fCurrentPlaybackTime >= 99000.0) // point shortly after object normal exists
|
|
IF IS_COORD_IN_RANGE_OF_COORD(vPlayerPos, << 308.96793, -591.07501, 43.29187 >>, 500.0) // dist player from rayfire object
|
|
IF NOT DOES_ENTITY_EXIST(sObjectHospitalDoors.objectIndex)
|
|
REQUEST_MODEL(sObjectHospitalDoors.modelName)
|
|
IF HAS_MODEL_LOADED(sObjectHospitalDoors.modelName)
|
|
sObjectHospitalDoors.objectIndex = CREATE_OBJECT(sObjectHospitalDoors.modelName, sObjectHospitalDoors.vPos)
|
|
IF IS_ENTITY_ALIVE(sObjectHospitalDoors.objectindex)
|
|
SET_ENTITY_ROTATION(sObjectHospitalDoors.objectindex, sObjectHospitalDoors.vRot)
|
|
SET_ENTITY_COORDS_NO_OFFSET(sObjectHospitalDoors.objectindex, sObjectHospitalDoors.vPos)
|
|
FREEZE_ENTITY_POSITION(sObjectHospitalDoors.objectindex, TRUE)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sObjectHospitalDoors.modelName)
|
|
eHospitalDoorsObjectState = HDO_WAIT_FOR_DELETE
|
|
CPRINTLN(DEBUG_MISSION, "OBJECT Hospital Doors Progress, created doors : eHospitalDoorsObjectState > HDO_WAIT_FOR_DELETE")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// same frame the rayfire object begins to playback from this object
|
|
ELIF eHospitalDoorsObjectState = HDO_WAIT_FOR_DELETE
|
|
IF (fCurrentPlaybackTime >= NIGEL2_RAYFIRE_HOSPITAL_DOORS_TRIGGER_POINT)
|
|
IF DOES_ENTITY_EXIST(sObjectHospitalDoors.objectIndex)
|
|
SAFE_DELETE_OBJECT(sObjectHospitalDoors.objectIndex)
|
|
eHospitalDoorsObjectState = HDO_END
|
|
CPRINTLN(DEBUG_MISSION, "OBJECT Hospital Doors Progress, doors deleted for rayfire : eHospitalDoorsObjectState > HDO_END")
|
|
ENDIF
|
|
ENDIF
|
|
ELIF eHospitalDoorsObjectState = HDO_END
|
|
|
|
ENDIF
|
|
|
|
// grab the rayfire_index
|
|
IF iRayfireProgress_HospitalDoors = 0
|
|
IF (fCurrentPlaybackTime >= 99000.0) // point shortly after object normal exists
|
|
IF IS_COORD_IN_RANGE_OF_COORD(vPlayerPos, << 308.96793, -591.07501, 43.29187 >>, 500.0) // dist player from rayfire object
|
|
IF eHospitalInteriorState > HIS_REFRESH_INTERIOR // point before dist checks kick in
|
|
rfHospitalDoors = GET_RAYFIRE_MAP_OBJECT(<< 299.4302, -584.8925, 42.2629 >>, 100, "DES_hospitaldoors")
|
|
|
|
IF DOES_RAYFIRE_MAP_OBJECT_EXIST(rfHospitalDoors)
|
|
SET_STATE_OF_RAYFIRE_MAP_OBJECT(rfHospitalDoors, RFMO_STATE_RESET)
|
|
iRayfireProgress_HospitalDoors++
|
|
CPRINTLN(DEBUG_MISSION, "RAYFIRE Hospital Doors Progress, DOES_RAYFIRE_MAP_OBJECT_EXIST and RFMO_STATE_RESET at playback time = ", fCurrentPlaybackTime)
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_OutputRayfireHospitalDoorsProgress CPRINTLN(DEBUG_MISSION, "RAYFIRE Hospital Doors Progress, in priming stage - Rayfire Object doesn't exist") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELIF iRayfireProgress_HospitalDoors = 1
|
|
IF DOES_RAYFIRE_MAP_OBJECT_EXIST(rfHospitalDoors)
|
|
IF GET_STATE_OF_RAYFIRE_MAP_OBJECT(rfHospitalDoors) = RFMO_STATE_PRIMED
|
|
IF (fCurrentPlaybackTime >= NIGEL2_RAYFIRE_HOSPITAL_DOORS_TRIGGER_POINT)
|
|
SET_STATE_OF_RAYFIRE_MAP_OBJECT(rfHospitalDoors, RFMO_STATE_START_ANIM)
|
|
CPRINTLN(DEBUG_MISSION, "RAYFIRE Hospital Doors Progress, in start anim stage - Rayfire Object Anim Started", fCurrentPlaybackTime)
|
|
iRayfireProgress_HospitalDoors++
|
|
ENDIF
|
|
ELSE
|
|
IF GET_STATE_OF_RAYFIRE_MAP_OBJECT(rfHospitalDoors) != RFMO_STATE_PRIMING
|
|
SET_STATE_OF_RAYFIRE_MAP_OBJECT(rfHospitalDoors, RFMO_STATE_PRIMING)
|
|
#IF IS_DEBUG_BUILD IF bDebug_OutputRayfireHospitalDoorsProgress CPRINTLN(DEBUG_MISSION, "RAYFIRE Hospital Doors Progress, priming") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_OutputRayfireHospitalDoorsProgress CPRINTLN(DEBUG_MISSION, "RAYFIRE Hospital Doors Progress, in start anim stage - Rayfire object no longer exists so going back to priming stage") ENDIF #ENDIF
|
|
iRayfireProgress_HospitalDoors--
|
|
ENDIF
|
|
|
|
/*ELIF iRayfireProgress_HospitalDoors = 2
|
|
|
|
// New building swap setup - commented out whilst window isn't working...also calling this here causes the interior to reset, so it's a visible stream issue
|
|
IF DOES_RAYFIRE_MAP_OBJECT_EXIST(rfHospitalDoors)
|
|
IF GET_STATE_OF_RAYFIRE_MAP_OBJECT(rfHospitalDoors) = RFMO_STATE_END
|
|
// need to set the es building state to destroyed when after the rayfire has finished
|
|
SET_BUILDING_STATE(BUILDINGNAME_ES_PILLBOX_HILL, BUILDINGSTATE_DESTROYED) // contains the rayfire for the front door
|
|
iRayfireProgress_HospitalDoors++
|
|
#IF IS_DEBUG_BUILD
|
|
IF bDebug_OutputRayfireHospitalDoorsProgress
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "RAYFIRE Hospital Doors Progress, rayfire ended - set BUILDINGNAME_ES_PILLBOX_HILL to BUILDINGSTATE_DESTROYED : pbtime = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// need to set the es building state to destroyed when after the rayfire has finished
|
|
SET_BUILDING_STATE(BUILDINGNAME_ES_PILLBOX_HILL, BUILDINGSTATE_DESTROYED) // contains the rayfire for the front door
|
|
iRayfireProgress_HospitalDoors++
|
|
#IF IS_DEBUG_BUILD
|
|
IF bDebug_OutputRayfireHospitalDoorsProgress
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "RAYFIRE Hospital Doors Progress, object doesn't exist - set BUILDINGNAME_ES_PILLBOX_HILL to BUILDINGSTATE_DESTROYED : pbtime = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
ENDIF*/
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bDebug_OutputRayfireHospitalDoorsCurrentState
|
|
IF DOES_RAYFIRE_MAP_OBJECT_EXIST(rfHospitalDoors)
|
|
RAY_FIRE_MAP_OBJECT_STATE rfsTemp
|
|
rfsTemp = GET_STATE_OF_RAYFIRE_MAP_OBJECT(rfHospitalDoors)
|
|
SWITCH rfsTemp
|
|
CASE RFMO_STATE_ANIMATING
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_ANIMATING = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_ANIMATING ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_END
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_END = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_END ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_ENDING
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_ENDING = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_ENDING ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_INIT
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_INIT = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_INIT ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_INVALID
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_INVALID = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_INVALID ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_PAUSE
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_PAUSE = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_PAUSE ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_PRIMED
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_PRIMED = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_PRIMED ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_PRIMING
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_PRIMING = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_PRIMING ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_RESET
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_RESET = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_RESET ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_RESUME
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_RESUME = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_RESUME ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_START
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_START = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_START ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_START_ANIM
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_START_ANIM = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_START_ANIM ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_STARTING
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_STARTING = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_STARTING ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_SYNC_ENDING
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_SYNC_ENDING = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_SYNC_ENDING ") ENDIF #ENDIF
|
|
BREAK
|
|
CASE RFMO_STATE_SYNC_STARTING
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_SYNC_STARTING = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - RFMO_STATE_SYNC_STARTING ") ENDIF #ENDIF
|
|
BREAK
|
|
DEFAULT
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - UNKNOWN = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "------- RAYFIRE HOSPITAL DOORS STATE - UNKNOWN ") ENDIF #ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Handles requesting and triggering of audio in the hospital
|
|
/// uses mission global var - fCurrentPlaybackTime
|
|
PROC MANAGE_HOSPITAL_SOUND_FX()
|
|
IF NOT bDone_RequestHospitalAudio
|
|
IF (fCurrentPlaybackTime > (NIGEL2_RAYFIRE_HOSPITAL_DOORS_TRIGGER_POINT - 4000.0))
|
|
REQUEST_SCRIPT_AUDIO_BANK("NIGEL_02_CRASH_A")
|
|
REQUEST_SCRIPT_AUDIO_BANK("NIGEL_02_CRASH_B")
|
|
REQUEST_SCRIPT_AUDIO_BANK("PANIC_WALLA_INTERIOR")
|
|
IF REQUEST_SCRIPT_AUDIO_BANK("NIGEL_02_CRASH_A")
|
|
AND REQUEST_SCRIPT_AUDIO_BANK("NIGEL_02_CRASH_B")
|
|
AND REQUEST_SCRIPT_AUDIO_BANK("PANIC_WALLA_INTERIOR")
|
|
bDone_RequestHospitalAudio = TRUE
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "AUDIO BANKS LOADED FOR HOSPITAL AT ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
ELSE
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "WAITING FOR AUDIO BANKS TO LOAD FOR HOSPITAL") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
//sounds triggered by the vehicle driving through
|
|
SWITCH iHospitalSoundFX_Progress
|
|
CASE 0
|
|
IF (fCurrentPlaybackTime >= NIGEL2_RAYFIRE_HOSPITAL_DOORS_TRIGGER_POINT)
|
|
PLAY_SOUND_FROM_COORD(-1,"DOOR_CRASH" , << 299.5664, -584.6757, 42.3020 >>, "NIGEL_02_SOUNDSET")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " SFX - DOOR_CRASH TRIGGERED and walla") ENDIF #ENDIF
|
|
iHospitalSoundFX_Progress++
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF (fCurrentPlaybackTime >= NIGEL2_HOSPITAL_CRASH_SCREAMS_01_TRIGGER_POINT)
|
|
PLAY_SOUND_FROM_COORD(-1, "SCREAMS", << 310.5149, -595.4158, 42.3020 >>, "NIGEL_02_SOUNDSET")
|
|
FORCE_PED_PANIC_WALLA() // added in attempt to make the peds scream
|
|
PLAY_SOUND_FROM_COORD(-1, "PANIC_WALLA", << 316.4345, -589.3902, 42.2919 >>, "NIGEL_02_SOUNDSET") // tuck shop area
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " SFX - SCREAMS 01 TRIGGERED") ENDIF #ENDIF
|
|
iHospitalSoundFX_Progress++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF (fCurrentPlaybackTime >= NIGEL2_HOSPITAL_WALL_SMASH_01_TRIGGER_POINT)
|
|
PLAY_SOUND_FROM_COORD(-1,"WALL_CRASH" , << 325.66, -589.01, 42.30 >>, "NIGEL_02_SOUNDSET")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " SFX - WALL_CRASH 1 TRIGGERED") ENDIF #ENDIF
|
|
iHospitalSoundFX_Progress++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF (fCurrentPlaybackTime >= NIGEL2_HOSPITAL_WALL_SMASH_02_TRIGGER_POINT)
|
|
PLAY_SOUND_FROM_COORD(-1,"WALL_CRASH" , << 330.13, -585.72, 42.42 >>, "NIGEL_02_SOUNDSET")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " SFX - WALL_CRASH 2 TRIGGERED") ENDIF #ENDIF
|
|
iHospitalSoundFX_Progress++
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
IF (fCurrentPlaybackTime >= NIGEL2_HOSPITAL_CRASH_SCREAMS_02_TRIGGER_POINT)
|
|
PLAY_SOUND_FROM_COORD(-1, "SCREAMS", << 331.7845, -578.5184, 42.3167 >>, "NIGEL_02_SOUNDSET")
|
|
PLAY_SOUND_FROM_COORD(-1, "PANIC_WALLA", <<354.6585, -584.2177, 42.3150>>, "NIGEL_02_SOUNDSET") // near window
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " SFX - SCREAMS 02 TRIGGERED") ENDIF #ENDIF
|
|
iHospitalSoundFX_Progress++
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
IF (fCurrentPlaybackTime >= NIGEL2_HOSPITAL_WALL_SMASH_03_TRIGGER_POINT)
|
|
PLAY_SOUND_FROM_COORD(-1,"WALL_CRASH" , << 337.89, -582.38, 42.33 >>, "NIGEL_02_SOUNDSET")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " SFX - WALL_CRASH 3 TRIGGERED") ENDIF #ENDIF
|
|
iHospitalSoundFX_Progress++
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
IF (fCurrentPlaybackTime >= NIGEL2_HOSPITAL_WINDOW_SMASH_TRIGGER_POINT) //NOTE: recording finishes before window so this value isn't exact.
|
|
PLAY_SOUND_FROM_COORD(-1,"WINDOW_CRASH" , << 364.64, -595.43, 42.54 >>, "NIGEL_02_SOUNDSET")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " SFX - WINDOW_CRASH TRIGGERED") ENDIF #ENDIF
|
|
iHospitalSoundFX_Progress++
|
|
ENDIF
|
|
BREAK
|
|
DEFAULT
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Handles particle fx inside the hospital
|
|
/// uses mission global var - fCurrentPlaybackTime
|
|
PROC MANAGE_HOSPITAL_DEBRIS_EFFECT()
|
|
FLOAT fTriggerTime = 115225.0
|
|
IF NOT bIsHospitalDebrisEffectActive
|
|
IF NOT bHasPTFX_ForHospitalDebrisBeenRequested
|
|
IF fCurrentPlaybackTime > (fTriggerTime - 5000.0)
|
|
REQUEST_PTFX_ASSET()
|
|
bHasPTFX_ForHospitalDebrisBeenRequested = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF fCurrentPlaybackTime > fTriggerTime
|
|
IF HAS_PTFX_ASSET_LOADED()
|
|
IF NOT DOES_PARTICLE_FX_LOOPED_EXIST(HospitalDebris_PTFX_ID)
|
|
HospitalDebris_PTFX_ID = START_PARTICLE_FX_LOOPED_AT_COORD("scr_rcn2_ceiling_debris", << 325.0, -589.0, 45.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PTFX EFFECT HOSPITAL DEBRIS STARTED") ENDIF #ENDIF
|
|
bIsHospitalDebrisEffectActive = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF NOT HAS_PTFX_ASSET_LOADED()
|
|
REQUEST_PTFX_ASSET()
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "REQUESTING SCRIPT PTFX") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Handle triggering the FX paper trail on Nigel's car when it jumps out the hospital window
|
|
PROC MANAGE_HOSPITAL_JUMP_FX()
|
|
IF NOT bDone_HospitalJumpPaperTrailFX
|
|
FLOAT fTriggerTime = 115225.0 // wait until chase has got close to the hospital (using same value as debris FX)
|
|
IF fCurrentPlaybackTime > (fTriggerTime)
|
|
REQUEST_PTFX_ASSET()
|
|
IF HAS_PTFX_ASSET_LOADED()
|
|
IF NOT DOES_PARTICLE_FX_LOOPED_EXIST(HospitalJump_PTFX_ID)
|
|
IF GET_ENTITY_SPEED(sNigelVehicle.vehicle) > 8.0
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<368.910980,-599.172546,41.238842>>, <<366.015289,-596.099976,44.985764>>, 6.500000) //<<368.14462, -600.03833,40.5>>, <<365.451416,-595.751282,45.0>>, 6.500000, TRUE)
|
|
HospitalJump_PTFX_ID = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_rcn2_debris_trail", sNigelVehicle.vehicle, << 0.0, -1.5, -0.4 >>, << 0.0, 0.0, 0.0 >>, 0.3)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_HOSPITAL_JUMP_FX : PTFX hospital jump started FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
bDone_HospitalJumpPaperTrailFX = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(HospitalJump_PTFX_ID)
|
|
IF GET_ENTITY_SPEED(sNigelVehicle.vehicle) < 4.0
|
|
OR NOT IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<368.910980,-599.172546,41.238842>>, <<366.015289,-596.099976,44.985764>>, 6.500000)
|
|
STOP_PARTICLE_FX_LOOPED(HospitalJump_PTFX_ID)
|
|
bDone_HospitalJumpPaperTrailFX = FALSE // TEMP!
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_HOSPITAL_JUMP_FX : PTFX hospital jump stopped FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// makes target vehicle use horn or show brake lights
|
|
/// Helps to warn player of up coming hazards. Needs to be called every frame
|
|
/// uses mission global var - fCurrentPlaybackTime
|
|
PROC MANAGE_TARGET_BRAKING_AND_USING_HORN()
|
|
//Brake lights
|
|
IF (fCurrentPlaybackTime > 3000.0 AND fCurrentPlaybackTime < 3800.0) //first turn at start location down the highstreet
|
|
OR (fCurrentPlaybackTime > 14750.0 AND fCurrentPlaybackTime < 15250.0) //left turn out of the highstreet
|
|
OR (fCurrentPlaybackTime > 28500.0 AND fCurrentPlaybackTime < 29400.0) //swerve around on coming vehicle up the first hill section
|
|
OR (fCurrentPlaybackTime > 34000.0 AND fCurrentPlaybackTime < 35250.0) //left turn toward tunnel entrance
|
|
OR (fCurrentPlaybackTime > 38800.0 AND fCurrentPlaybackTime < 41000.0) //turn into tunnel
|
|
OR (fCurrentPlaybackTime > 47000.0 AND fCurrentPlaybackTime < 48300.0) //right turn in the tunnel
|
|
OR (fCurrentPlaybackTime > 56000.0 AND fCurrentPlaybackTime < 57200.0) //right turn out of tunnel section
|
|
OR (fCurrentPlaybackTime > 66750.0 AND fCurrentPlaybackTime < 67250.0) //slight brake when taking the left turn just before the U turn
|
|
OR (fCurrentPlaybackTime > 68500.0 AND fCurrentPlaybackTime < 70500.0) //going around truck on highway entrance.
|
|
OR (fCurrentPlaybackTime > 101500.0 AND fCurrentPlaybackTime < 102500.0) //swerving around vehicle at slip road exit
|
|
OR (fCurrentPlaybackTime > 114500.0 AND fCurrentPlaybackTime < 116500.0) //from hospital doors to first right turn.
|
|
SET_VEHICLE_BRAKE_LIGHTS(sTargetVehicle.vehicle, TRUE)
|
|
ENDIF
|
|
//Horn
|
|
IF (fCurrentPlaybackTime > 6500.0 AND fCurrentPlaybackTime < 7000.0) //shopping area, first stretch
|
|
OR (fCurrentPlaybackTime > 7500.0 AND fCurrentPlaybackTime < 8500.0) //shopping area, first stretch
|
|
OR (fCurrentPlaybackTime > 10500.0 AND fCurrentPlaybackTime < 11250.0) //shopping area, second stretch
|
|
OR (fCurrentPlaybackTime > 11750.0 AND fCurrentPlaybackTime < 12250.0) //shopping area, first stretch
|
|
OR (fCurrentPlaybackTime > 13250.0 AND fCurrentPlaybackTime < 13500.0) //shopping area, third stretch
|
|
OR (fCurrentPlaybackTime > 14000.0 AND fCurrentPlaybackTime < 14500.0) //shopping area, first stretch
|
|
SET_HORN_PERMANENTLY_ON(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// damage the target's vehicle when he crashes
|
|
/// uses mission global var - fCurrentPlaybackTime
|
|
PROC APPLY_VISUAL_DAMAGE_TO_TARGET_VEHICLE()
|
|
IF NOT bDone_VisualDamageForTargetVehicle
|
|
IF (fCurrentPlaybackTime > NIGEL2_TARGET_VEHICLE_VISUAL_DAMAGE_POINT)
|
|
//B*1476195 - set Al Di Napoli health higher for this damage so it doesn't kill him.
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
IF (GET_ENTITY_HEALTH(sTargetPed.ped) < 200)
|
|
SET_ENTITY_HEALTH(sTargetPed.ped, 200)
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
SET_ENTITY_HEALTH(sTargetVehicle.vehicle, 1000)
|
|
IF NOT IS_VEHICLE_DOOR_DAMAGED(sTargetVehicle.vehicle, SC_DOOR_BONNET)
|
|
SET_VEHICLE_DOOR_BROKEN(sTargetVehicle.vehicle, SC_DOOR_BONNET, TRUE)
|
|
ENDIF
|
|
SET_VEHICLE_TYRES_CAN_BURST(sTargetVehicle.vehicle, TRUE)
|
|
//SET_VEHICLE_TYRE_BURST(sTargetVehicle.vehicle, SC_WHEEL_CAR_FRONT_LEFT) causes wheel to clip through the floor
|
|
SMASH_VEHICLE_WINDOW(sTargetVehicle.vehicle, SC_WINDOW_FRONT_LEFT)
|
|
SMASH_VEHICLE_WINDOW(sTargetVehicle.vehicle, SC_WINDOW_FRONT_RIGHT)
|
|
//SET_VEHICLE_DIRT_LEVEL(sTargetVehicle.vehicle, 10.0) need proper colours setting up first.
|
|
POP_OUT_VEHICLE_WINDSCREEN(sTargetVehicle.vehicle)
|
|
SET_VEHICLE_DAMAGE(sTargetVehicle.vehicle, << 0.0, 1.0, 0.1 >>, 800.0, 1850.0, TRUE)
|
|
SET_VEHICLE_DAMAGE(sTargetVehicle.vehicle, << -0.2, 1.0, 0.5 >>, 50.0, 650.0, TRUE)
|
|
SET_VEHICLE_DAMAGE(sTargetVehicle.vehicle, << -0.7, -0.2, 0.3 >>, 50.0, 500.0, TRUE)
|
|
CPRINTLN(DEBUG_MISSION, "VISUAL DAMAGE APPLIED TO TARGET VEHICLE FC = ", GET_FRAME_COUNT())
|
|
bDone_VisualDamageForTargetVehicle = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// handles triggering the requested mission music events
|
|
/// Since these cues need to be sequental, request event will only trigger if the previous event has triggered
|
|
/// PARAMS:
|
|
/// iMusicEvent - the event we want to trigger
|
|
PROC MANAGE_TRIGGER_MUSIC_EVENTS_DURING_CHASE(INT iMusicEvent)
|
|
|
|
IF NOT IS_REPLAY_BEING_SET_UP() // don't allow music events to trigger during replay setup / stage skips
|
|
AND bFinishedStageSkipping
|
|
|
|
IF iMusicEvent = iMissionMusicEventTriggerCounter
|
|
SWITCH iMissionMusicEventTriggerCounter
|
|
CASE NIGEL2_MUSIC_EVENT_START
|
|
IF SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_START")
|
|
iMissionMusicEventTriggerCounter++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_TRIGGER_MUSIC_EVENTS_DURING_CHASE : ", "NIGEL2_START") ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE NIGEL2_MUSIC_EVENT_CAR
|
|
IF SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_CAR")
|
|
PREPARE_MUSIC_EVENT("NIGEL2_JUMP")
|
|
iMissionMusicEventTriggerCounter++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_TRIGGER_MUSIC_EVENTS_DURING_CHASE : ", "NIGEL2_CAR") ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE NIGEL2_MUSIC_EVENT_JUMP
|
|
IF SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_JUMP", TRUE)
|
|
iMissionMusicEventTriggerCounter++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_TRIGGER_MUSIC_EVENTS_DURING_CHASE : ", "NIGEL2_JUMP") ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE NIGEL2_MUSIC_EVENT_STOP
|
|
IF SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_STOP")
|
|
iMissionMusicEventTriggerCounter++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_TRIGGER_MUSIC_EVENTS_DURING_CHASE : ", "NIGEL2_STOP") ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
DEFAULT
|
|
BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_TRIGGER_MUSIC_EVENTS_DURING_CHASE : ERROR - iMusicEvent = ", iMusicEvent, " but iMissionMusicEventTriggerCounter = ", iMissionMusicEventTriggerCounter) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// handles trigger correct music events after a skip has occured. Replay system sets it's own music scene which
|
|
/// we can't interupr
|
|
/// PARAMS:
|
|
/// eCurrentStage - which mission stage we are returning to
|
|
PROC SET_MUSIC_EVENTS_FOR_MISSION_STAGE_SKIPS(MISSION_STAGE eCurrentStage)
|
|
SWITCH eCurrentStage
|
|
CASE MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE
|
|
IF iMissionMusicEventTriggerCounter = NIGEL2_MUSIC_EVENT_START
|
|
WHILE NOT SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_START")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET_MUSIC_EVENTS_FOR_MISSION_STAGE_SKIPS : MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE ", "triggering NIGEL2_START", " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
iMissionMusicEventTriggerCounter++
|
|
ENDIF
|
|
IF iMissionMusicEventTriggerCounter = NIGEL2_MUSIC_EVENT_CAR
|
|
WHILE NOT SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_CAR")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET_MUSIC_EVENTS_FOR_MISSION_STAGE_SKIPS : MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE ", "triggering NIGEL2_MUSIC_EVENT_CAR", " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
iMissionMusicEventTriggerCounter++
|
|
ENDIF
|
|
IF iMissionMusicEventTriggerCounter = NIGEL2_MUSIC_EVENT_JUMP
|
|
WHILE NOT SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_JUMP", TRUE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET_MUSIC_EVENTS_FOR_MISSION_STAGE_SKIPS : MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE ", "triggering NIGEL2_MUSIC_EVENT_JUMP", " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
iMissionMusicEventTriggerCounter++
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// set target's anim when recording ends and he has crashed
|
|
PROC SET_TARGET_PLAY_HEAD_ON_WHEEL_ANIM(FLOAT fBlendInTime = NORMAL_BLEND_IN)
|
|
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(sTargetPed.ped, "rcmnigel2", "die_horn")
|
|
REQUEST_ANIM_DICT("rcmnigel2")
|
|
IF HAS_ANIM_DICT_LOADED("rcmnigel2")
|
|
TASK_PLAY_ANIM(sTargetPed.ped, "rcmnigel2", "die_horn", fBlendInTime, NORMAL_BLEND_OUT, -1, AF_HOLD_LAST_FRAME, 0.9)
|
|
CPRINTLN(DEBUG_MISSION, "SET_TARGET_PLAY_HEAD_ON_WHEEL_ANIM - set this frame : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// gets the target and his vehicle into position for the cutscene
|
|
PROC SETUP_TARGET_FOR_CRASH()
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "in SETUP_TARGET_FOR_CRASH *****") ENDIF #ENDIF
|
|
REQUEST_ANIM_DICT("rcmnigel2") //to play head on horn anim on target in truck
|
|
IF IS_ENTITY_ALIVE(sTargetVehicle.vehicle)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(sTargetVehicle.vehicle)
|
|
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(sTargetVehicle.vehicle)
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, TRUE)
|
|
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(sTargetVehicle.vehicle, FALSE)
|
|
SET_DISABLE_VEHICLE_ENGINE_FIRES(sTargetVehicle.vehicle, TRUE)
|
|
SET_VEHICLE_ENGINE_ON(sTargetVehicle.vehicle, TRUE, TRUE) // B*1557148 - engine needs to be on for damage sfx
|
|
SET_VEHICLE_AUDIO_BODY_DAMAGE_FACTOR(sTargetVehicle.vehicle, 1.0) // B*1557148 - make damage engine sound louder
|
|
SET_VEHICLE_ENGINE_HEALTH(sTargetVehicle.vehicle, 0.0) // B*1069508 - Smoking engine is not visible until after the end cutscene
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SETUP_TARGET_FOR_CRASH - set target vehicle to 0.0 health *****") ENDIF #ENDIF
|
|
|
|
// no longer need to set position as we'll use the last pos of the vehicle recording
|
|
// NOTE: has the new position and quaternion values
|
|
//FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, FALSE)
|
|
//SET_ENTITY_COORDS(sTargetVehicle.vehicle, <<393.4298, -621.3337, 28.4891>>)
|
|
//SET_ENTITY_QUATERNION(sTargetVehicle.vehicle, -0.0081, -0.0061, 0.7994, -0.6007)
|
|
//FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, TRUE)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
SET_TARGET_PLAY_HEAD_ON_WHEEL_ANIM()
|
|
//set Al Di Napoli health to low so he will die if shot.
|
|
IF (GET_ENTITY_HEALTH(sTargetPed.ped) > 110)
|
|
SET_ENTITY_HEALTH(sTargetPed.ped, 110)
|
|
SET_PED_SUFFERS_CRITICAL_HITS(sTargetPed.ped, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
//stop peds appearing at the crash site
|
|
IF NOT IS_SPHERE_VISIBLE(<< 393.38, -617.53, 27.91 >>, 30.0)
|
|
CLEAR_AREA_OF_PEDS(<< 393.38, -617.53, 27.91 >>, 35.0)
|
|
CLEAR_AREA_OF_OBJECTS(<< 393.38, -617.53, 27.91 >>, 8.0)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Changes the time scale and follow vehicle cam view mode, to force a cinematic camera shot
|
|
/// for the jump out the hospital window
|
|
/// PARAMS:
|
|
/// bApplyChanges - if true time scale is slowed and cinematic cam applied
|
|
/// if false time scale reset to 1.0 and third person cam applied
|
|
PROC SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW(BOOL bApplyChanges)
|
|
IF bApplyChanges
|
|
IF NOT DOES_CAM_EXIST(camHospitalJump)
|
|
camHospitalJump = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE)
|
|
ENDIF
|
|
IF DOES_CAM_EXIST(camHospitalJump)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
SET_CAM_COORD(camHospitalJump, vJumpOutHospitalCamCoords)
|
|
//SET_CAM_DOF_STRENGTH(camHospitalJump, 0.2)
|
|
SET_CAM_FOV(camHospitalJump, 14.0)
|
|
POINT_CAM_AT_ENTITY(camHospitalJump, sNigelVehicle.vehicle, vJumpOutHospitalCamLookAtOffset) //, << 0.0,2.0,0.0 >>)
|
|
ACTIVATE_AUDIO_SLOWMO_MODE("NIGEL_02_SLOWMO_SETTING")
|
|
//SHAKE_SCRIPT_GLOBAL("HAND_SHAKE", 0.3)
|
|
ENDIF
|
|
//SET_FOLLOW_VEHICLE_CAM_VIEW_MODE(CAM_VIEW_MODE_CINEMATIC)
|
|
/*SET_TIME_SCALE(0.5)
|
|
IF IS_ENTITY_ALIVE(sNigelVehicle.vehicle)
|
|
IF NOT IS_CINEMATIC_SHOT_ACTIVE(SHOTTYPE_HELI_CHASE)
|
|
CREATE_CINEMATIC_SHOT(SHOTTYPE_HELI_CHASE, 30000, NULL, sNigelVehicle.vehicle)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW : CREATE_CINEMATIC_SHOT, frame count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF*/
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW - TRUE") ENDIF #ENDIF
|
|
ELSE
|
|
STOP_SCRIPT_GLOBAL_SHAKING()
|
|
IF DOES_CAM_EXIST(camHospitalJump)
|
|
IF IS_CAM_ACTIVE(camHospitalJump)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
SET_CAM_ACTIVE(camHospitalJump, FALSE)
|
|
ENDIF
|
|
DESTROY_CAM (camHospitalJump)
|
|
ENDIF
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
//SET_FOLLOW_VEHICLE_CAM_VIEW_MODE(CAM_VIEW_MODE_THIRD_PERSON)
|
|
/*IF IS_CINEMATIC_SHOT_ACTIVE(SHOTTYPE_HELI_CHASE)
|
|
STOP_CINEMATIC_SHOT(SHOTTYPE_HELI_CHASE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW : STOP_CINEMATIC_SHOT, frame count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF*/
|
|
SET_TIME_SCALE(1.0)
|
|
DEACTIVATE_AUDIO_SLOWMO_MODE("NIGEL_02_SLOWMO_SETTING")
|
|
bDoneOneTime_JumpOutHospitalWindow = TRUE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
// override for debug testing
|
|
IF eMissionStage = MISSION_STAGE_DEBUG_HOPSITAL_DOORS
|
|
bDoneOneTime_JumpOutHospitalWindow = FALSE
|
|
ENDIF
|
|
#ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW - FALSE") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// trigger scripted sfx for nigel vehicle landing
|
|
PROC TRIGGER_LANDING_JUMP_SFX()
|
|
IF bTriggerLandingFromJumpSFX
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
VECTOR vTemp = GET_ENTITY_COORDS(sNigelVehicle.vehicle, FALSE)
|
|
IF vTemp.Z < 35.0
|
|
IF HAS_ENTITY_COLLIDED_WITH_ANYTHING(sNigelVehicle.vehicle)
|
|
OR IS_VEHICLE_ON_ALL_WHEELS(sNigelVehicle.vehicle)
|
|
PLAY_SOUND_FROM_ENTITY(-1, "CAR_DROP_WRAP", sNigelVehicle.vehicle)
|
|
bTriggerLandingFromJumpSFX = FALSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "TRIGGER_LANDING_JUMP_SFX - sfx triggered") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// handles the player jumping out of the hospital window in a vehicle
|
|
/// sets scripted camera and time scale override
|
|
/// NOTE: doesn't check Nigel's vehicle is OK
|
|
PROC MANAGE_JUMP_OUT_HOSPITAL_WINDOW()
|
|
|
|
IF NOT bDoneOneTime_JumpOutHospitalWindow // only do this first time player jumps out the window - gets set FALSE in SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW when set FALSE
|
|
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
IF IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
|
|
//managed forced cinematic cam and sloowed time during hospital jump
|
|
IF NOT IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<373.288605,-580.871033,37.239483>>, <<359.660248,-605.220703,29.138260>>, 20.000000) // B*1538706 - exclusion area under window on platform
|
|
AND (IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, vCinematicCamOverrideZone01, vCinematicCamOverrideZone02, fCimematicCamOvverideZoneDepth)
|
|
OR IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<370.705353,-596.143677,45.439484>>, <<361.383423,-600.700012,33.239487>>, 6.000000)) // B*1533197
|
|
MANAGE_TRIGGER_MUSIC_EVENTS_DURING_CHASE(NIGEL2_MUSIC_EVENT_JUMP)
|
|
|
|
IF bDoneCleanup_JumpOutHospitalWindow
|
|
SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW(TRUE)
|
|
KILL_CHASE_HINT_CAM(localChaseHintCamStruct) // B*1557320 - don't allow hint cam during this shot (renabled by main loop checking bDoneCleanup_JumpOutHospitalWindow = true
|
|
bDoneCleanup_JumpOutHospitalWindow = FALSE
|
|
bTriggerLandingFromJumpSFX = TRUE // allow custom sfx to trigger for vehicle landing on the floor
|
|
fTimeScale_HospitalJump = 1.0 // set initial value
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOWEST) // B*1841676 - record the jump out of the hospital window
|
|
ENDIF
|
|
|
|
IF bStatTracker_IsNigelVehicleDamageStatActive // stop tracking when you jump out the window
|
|
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(NULL,NI2_VEHICLE_DAMAGE) // end tracking nigel's vehicle damage for stats
|
|
bStatTracker_IsNigelVehicleDamageStatActive = FALSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_JUMP_OUT_HOSPITAL_WINDOW - INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(NULL)") ENDIF #ENDIF
|
|
ENDIF
|
|
|
|
// jump area - bottom of window Z height 42.4, road below Z height 27.9 / dist = 14.5 halfway 35.15
|
|
VECTOR vVehicleCoords = GET_ENTITY_COORDS(sNigelVehicle.vehicle)
|
|
|
|
FLOAT fDesiredMinTimeScale = 0.2 // 0.5
|
|
#IF IS_DEBUG_BUILD IF bDebug_OverrideMinTimeScale fDesiredMinTimeScale = fDebug_OverrideMinTimeScale ENDIF #ENDIF
|
|
FLOAT fTimeScaleStepDecrease = 0.9
|
|
#IF IS_DEBUG_BUILD IF bDebug_OverrideTimeScaleStepModifier_Decrease fTimeScaleStepDecrease = fDebug_TimeScaleStep_ModifierDecrease ENDIF #ENDIF
|
|
FLOAT fTimeScaleStepIncrease = 2.0
|
|
#IF IS_DEBUG_BUILD IF bDebug_OverrideTimeScaleStepModifier_Increase fTimeScaleStepIncrease = fDebug_TimeScaleStep_ModifierIncrease ENDIF #ENDIF
|
|
|
|
// ramp the time scale down to 0.5 as we fly out the window
|
|
IF vVehicleCoords.z > 35.25
|
|
IF fTimeScale_HospitalJump > fDesiredMinTimeScale
|
|
fTimeScale_HospitalJump = fTimeScale_HospitalJump -@ fTimeScaleStepDecrease
|
|
|
|
// cap to 0.5
|
|
IF fTimeScale_HospitalJump < fDesiredMinTimeScale
|
|
fTimeScale_HospitalJump = fDesiredMinTimeScale
|
|
ENDIF
|
|
SET_TIME_SCALE(fTimeScale_HospitalJump)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_JUMP_OUT_HOSPITAL_WINDOW - ramping time scale down = ", fTimeScale_HospitalJump) ENDIF #ENDIF
|
|
ENDIF
|
|
// when we approach the ground ramp the time scale back up to 1.0
|
|
ELIF vVehicleCoords.z < 35.0
|
|
IF fTimeScale_HospitalJump < 1.0
|
|
fTimeScale_HospitalJump = fTimeScale_HospitalJump +@ fTimeScaleStepIncrease
|
|
|
|
// cap to 1.0
|
|
IF fTimeScale_HospitalJump > 1.0
|
|
fTimeScale_HospitalJump = 1.0
|
|
ENDIF
|
|
SET_TIME_SCALE(fTimeScale_HospitalJump)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_JUMP_OUT_HOSPITAL_WINDOW - ramping time scale up = ", fTimeScale_HospitalJump) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// fallen on roof of hospital entrance
|
|
IF vVehicleCoords.z < 40.0
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(sNigelVehicle.vehicle)
|
|
IF NOT bDoneCleanup_JumpOutHospitalWindow
|
|
SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW(FALSE)
|
|
REPLAY_STOP_EVENT() // B*1841676 - cleanup the record jump out of the hospital window
|
|
bDoneCleanup_JumpOutHospitalWindow = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_JUMP_OUT_HOSPITAL_WINDOW - bDoneCleanup_JumpOutHospitalWindow veh landed on all wheels whilst still in the activation area") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT bDoneCleanup_JumpOutHospitalWindow
|
|
SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW(FALSE)
|
|
REPLAY_STOP_EVENT() // B*1841676 - cleanup the record jump out of the hospital window
|
|
bDoneCleanup_JumpOutHospitalWindow = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_JUMP_OUT_HOSPITAL_WINDOW - bDoneCleanup_JumpOutHospitalWindow done") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT bDoneCleanup_JumpOutHospitalWindow
|
|
SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW(FALSE)
|
|
REPLAY_STOP_EVENT() // B*1841676 - cleanup the record jump out of the hospital window
|
|
bTriggerLandingFromJumpSFX = FALSE // skip in this instance
|
|
bDoneCleanup_JumpOutHospitalWindow = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_JUMP_OUT_HOSPITAL_WINDOW - bDoneCleanup_JumpOutHospitalWindow early for player not sat in nigel's vehicle being wrecked") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT bDoneCleanup_JumpOutHospitalWindow
|
|
SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW(FALSE)
|
|
REPLAY_STOP_EVENT() // B*1841676 - cleanup the record jump out of the hospital window
|
|
bTriggerLandingFromJumpSFX = FALSE // skip in this instance
|
|
bDoneCleanup_JumpOutHospitalWindow = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_JUMP_OUT_HOSPITAL_WINDOW - bDoneCleanup_JumpOutHospitalWindow early for nigel's vehicle being wrecked") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
TRIGGER_LANDING_JUMP_SFX()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets up the vehicle parked nearby to the outro for the player to use on mission passed
|
|
PROC CREATE_VEHICLE_FOR_PLAYER_TO_USE_ON_MISSION_PASSED(BOOL bWaitForModelToLoad = FALSE, BOOL UseUberRecordingToDetermineSpawnTime = TRUE)
|
|
IF NOT DOES_ENTITY_EXIST(sVehicleForPlayerOnMissionPassed.vehicle)
|
|
FLOAT fSpawnTimeInUberRecording_Min = 115000.0 // which is just after NIGEL2_RAYFIRE_HOSPITAL_DOORS_TRIGGER_POINT
|
|
FLOAT fSpawnTimeInUberRecording_Max = 116821
|
|
//if we are using the uber recording to decide the spawn time, exit if we are too early to start requesting the model
|
|
IF UseUberRecordingToDetermineSpawnTime
|
|
IF fCurrentPlaybackTime < (fSpawnTimeInUberRecording_Min - 3000.0)
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
REQUEST_MODEL(sVehicleForPlayerOnMissionPassed.model)
|
|
IF bWaitForModelToLoad
|
|
WHILE NOT HAS_MODEL_LOADED(sVehicleForPlayerOnMissionPassed.model)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "CREATE_VEHICLE_FOR_PLAYER_TO_USE_ON_MISSION_PASSED - LOADING VEHICLE ASSET") ENDIF #ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDIF
|
|
//if we are using the uber recording to decide the spawn time, exit if we are too early or late to create the vehicle
|
|
IF UseUberRecordingToDetermineSpawnTime
|
|
IF fCurrentPlaybackTime < fSpawnTimeInUberRecording_Min // which is just after NIGEL2_RAYFIRE_HOSPITAL_DOORS_TRIGGER_POINT
|
|
OR fCurrentPlaybackTime > fSpawnTimeInUberRecording_Max
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF HAS_MODEL_LOADED(sVehicleForPlayerOnMissionPassed.model)
|
|
sVehicleForPlayerOnMissionPassed.vehicle = CREATE_VEHICLE(sVehicleForPlayerOnMissionPassed.model, <<419.3891, -604.8867, 27.7732>>, 0)
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL tDebugName = "PlayerVMP"
|
|
SET_VEHICLE_NAME_DEBUG(sVehicleForPlayerOnMissionPassed.vehicle, tDebugName)
|
|
#ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "CREATE_VEHICLE_FOR_PLAYER_TO_USE_ON_MISSION_PASSED - VEHICLE CREATED") ENDIF #ENDIF
|
|
ENDIF
|
|
IF IS_VEHICLE_OK(sVehicleForPlayerOnMissionPassed.vehicle)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sVehicleForPlayerOnMissionPassed.model)
|
|
SET_ENTITY_QUATERNION(sVehicleForPlayerOnMissionPassed.vehicle, 0.0000, 0.0006, 0.9996, -0.0275)
|
|
SET_VEHICLE_DOORS_LOCKED(sVehicleForPlayerOnMissionPassed.vehicle, VEHICLELOCK_UNLOCKED)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// The cars around the start of the uber chase, have to be scripted because the don't start in time
|
|
/// PARAMS:
|
|
/// fLocalMainPlaybackSpeed - basically takes the value of fCurrentPlaybackTime
|
|
/// vPlayerCurrentPos - used for cleanup
|
|
PROC UPDATE_SCRIPTED_VEHICLES_AROUND_START_LOCATION(FLOAT fLocalMainPlaybackSpeed, VECTOR vPlayerCurrentPos)
|
|
FLOAT fDistFromScriptedVehicle
|
|
//truck
|
|
IF IS_VEHICLE_OK(sStartLocationVehicle[0].vehicle)
|
|
//Set hazard lights on
|
|
SET_VEHICLE_INDICATOR_LIGHTS(sStartLocationVehicle[0].vehicle, TRUE, TRUE)
|
|
SET_VEHICLE_INDICATOR_LIGHTS(sStartLocationVehicle[0].vehicle, FALSE, TRUE)
|
|
//cleanup
|
|
IF fCurrentPlaybackTime > 10000.0 //wait until car chase has gone past the start area
|
|
fDistFromScriptedVehicle = VDIST2(GET_ENTITY_COORDS(sStartLocationVehicle[0].vehicle), vPlayerCurrentPos)
|
|
IF fDistFromScriptedVehicle > 14400.0
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "CLEANED UP SCRIPTED VEHICLE [0]") ENDIF #ENDIF
|
|
SAFE_REMOVE_VEHICLE(sStartLocationVehicle[0].vehicle)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//parked car
|
|
IF IS_VEHICLE_OK(sStartLocationVehicle[1].vehicle)
|
|
//cleanup
|
|
IF fCurrentPlaybackTime > 10000.0 //wait until car chase has gone past the start area
|
|
fDistFromScriptedVehicle = VDIST2(GET_ENTITY_COORDS(sStartLocationVehicle[1].vehicle), vPlayerCurrentPos)
|
|
IF fDistFromScriptedVehicle > 14400.0
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "CLEANED UP SCRIPTED VEHICLE [1]") ENDIF #ENDIF
|
|
SAFE_REMOVE_VEHICLE(sStartLocationVehicle[1].vehicle)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//car which pulls out on target to force him down highstreet
|
|
IF IS_VEHICLE_OK(sStartLocationVehicle[2].vehicle)
|
|
IF sDefaultPedForScriptedVehicle.eState = SPS_INIT
|
|
REQUEST_MODEL(mnDefaultPedForVehicle)
|
|
IF HAS_MODEL_LOADED(mnDefaultPedForVehicle)
|
|
IF NOT DOES_ENTITY_EXIST(sDefaultPedForScriptedVehicle.ped)
|
|
sDefaultPedForScriptedVehicle.ped = CREATE_PED_INSIDE_VEHICLE(sStartLocationVehicle[2].vehicle, PEDTYPE_MISSION, mnDefaultPedForVehicle)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(mnDefaultPedForVehicle)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sDefaultPedForScriptedVehicle.ped, TRUE)
|
|
sDefaultPedForScriptedVehicle.eState = SPS_BEGIN_ROUTINE
|
|
ENDIF
|
|
ENDIF
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sStartLocationVehicle[2].vehicle)
|
|
//have to redo this as CREATE_PED_INSIDE_VEHICLE interfers with vehicle quaternion
|
|
SET_ENTITY_QUATERNION(sStartLocationVehicle[2].vehicle, 0.0269, 0.0079, -0.4791, 0.8773)
|
|
ENDIF
|
|
ENDIF
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sStartLocationVehicle[2].vehicle)
|
|
IF NOT bStartedPlayBack_ScriptedVehicleAtStartLocation
|
|
IF fCurrentPlaybackTime >= 200.0
|
|
START_PLAYBACK_RECORDED_VEHICLE(sStartLocationVehicle[2].vehicle, 2, sNigel2_UberRecordingName)
|
|
SET_PLAYBACK_SPEED(sStartLocationVehicle[2].vehicle, fLocalMainPlaybackSpeed)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "~~~~~~~~~~ STARTED VEHICLE PLAYBACK AT TIME = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
bStartedPlayBack_ScriptedVehicleAtStartLocation = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
SET_PLAYBACK_SPEED(sStartLocationVehicle[2].vehicle, fLocalMainPlaybackSpeed)
|
|
IF NOT bDone_StartLocationVehicleHorn
|
|
IF fCurrentPlaybackTime > 3500.0
|
|
AND fCurrentPlaybackTime < 4500.0
|
|
START_VEHICLE_HORN(sStartLocationVehicle[2].vehicle, 2000, GET_HASH_KEY("HELDDOWN"))
|
|
bDone_StartLocationVehicleHorn = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//cleanup
|
|
IF fCurrentPlaybackTime > 10000.0 //wait until car chase has gone past the start area
|
|
fDistFromScriptedVehicle = VDIST2(GET_ENTITY_COORDS(sStartLocationVehicle[2].vehicle), vPlayerCurrentPos)
|
|
IF fDistFromScriptedVehicle > 14400.0
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sStartLocationVehicle[2].vehicle)
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(sStartLocationVehicle[2].vehicle)
|
|
ENDIF
|
|
REMOVE_VEHICLE_RECORDING(2, sNigel2_UberRecordingName)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "CLEANED UP SCRIPTED VEHICLE [2]") ENDIF #ENDIF
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(mnDefaultPedForVehicle)
|
|
SAFE_REMOVE_PED(sDefaultPedForScriptedVehicle.ped)
|
|
SAFE_REMOVE_VEHICLE(sStartLocationVehicle[2].vehicle)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// requests the assets for the outro mocap cutscene entities so SET_CUTSCENE_PED_COMPONENT_VARIATION_... can be called
|
|
PROC SET_MISSION_ENTITIES_COMP_VARIATIONS_FOR_OUTRO_MOCAP()
|
|
|
|
IF IS_ENTITY_ALIVE(sNigelPed.ped)
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED(sSceneHandle_Nigel, sNigelPed.ped)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET_MISSION_ENTITIES_COMP_VARIATIONS_FOR_OUTRO_MOCAP - set Nigel - Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(sMrsThornhillPed.ped)
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED(sSceneHandle_MrsThornhill, sMrsThornhillPed.ped)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET_MISSION_ENTITIES_COMP_VARIATIONS_FOR_OUTRO_MOCAP - set Mrs Thornhill - Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(sTargetPed.ped)
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED(sSceneHandle_AlDiNapoli, sTargetPed.ped)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET_MISSION_ENTITIES_COMP_VARIATIONS_FOR_OUTRO_MOCAP - set Al Di Napoli - Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// handles requesting mocap on player approach and releasing outro mocap if player moves away
|
|
PROC MANAGE_OUTRO_MOCAP_LOADING()
|
|
|
|
VECTOR vMocapPosition = <<392.9445, -619.5032, 27.9764>>
|
|
|
|
IF IS_COORD_IN_RANGE_OF_COORD(GET_ENTITY_COORDS(PLAYER_PED_ID()), vMocapPosition, DEFAULT_CUTSCENE_LOAD_DIST)
|
|
IF NOT IS_PLAYER_CHANGING_CLOTHES()
|
|
REQUEST_CUTSCENE(tlOutroMocapName)
|
|
SET_MISSION_ENTITIES_COMP_VARIATIONS_FOR_OUTRO_MOCAP()
|
|
bRequestedOutroMocap = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF bRequestedOutroMocap
|
|
IF NOT IS_COORD_IN_RANGE_OF_COORD(GET_ENTITY_COORDS(PLAYER_PED_ID()), vMocapPosition, DEFAULT_CUTSCENE_UNLOAD_DIST)
|
|
IF HAS_CUTSCENE_LOADED()
|
|
REMOVE_CUTSCENE()
|
|
bRequestedOutroMocap = FALSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_OUTRO_MOCAP_LOADING - unloaded ", tlOutroMocapName, " Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ELSE
|
|
SET_MISSION_ENTITIES_COMP_VARIATIONS_FOR_OUTRO_MOCAP()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
// B*1521921 - have to bin off the mocap if requested to start over
|
|
IF bRequestedOutroMocap
|
|
IF IS_PLAYER_CHANGING_CLOTHES()
|
|
REMOVE_CUTSCENE()
|
|
bRequestedOutroMocap = FALSE
|
|
CPRINTLN(DEBUG_MISSION, "MANAGE_OUTRO_MOCAP_LOADING - unloaded ", tlOutroMocapName, " player changing clothes! Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Changes the mission's current stage
|
|
/// PARAMS:
|
|
/// msStage - the mission stage
|
|
PROC SET_STAGE(MISSION_STAGE msStage)
|
|
emissionStage = msStage
|
|
eSubStage = SS_SETUP
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// sets the initial values for all the variables used on the mission
|
|
/// also sets up relationship groups
|
|
PROC SET_MISSION_VARIABLES()
|
|
INT i
|
|
FOR i = 0 TO (NIGEL2_TOTAL_IMPORTANT_DIALOGUE_DURING_CHASE - 1)
|
|
bDoneDialogue_Chase[i] = FALSE
|
|
ENDFOR
|
|
FOR i = 0 TO (NIGEL2_TOTAL_BANTER_DIALOGUE_DURING_CHASE - 1)
|
|
bDoneDialogue_BanterChase[i] = FALSE
|
|
ENDFOR
|
|
FOR i = 0 TO (NIGEL2_TOTAL_CATCH_UP_DIALOGUE_DURING_CHASE - 1)
|
|
bDoneDialogue_CatchUp[i] = FALSE
|
|
ENDFOR
|
|
bDoneDialogue_InitialInstruction = FALSE
|
|
bDoneDialogue_WarnRamming = FALSE
|
|
bDoneObjective_WarnLeavingNigelAndMrsT = FALSE
|
|
bDoneDialogue_UpsideDownOrAirbourne = FALSE
|
|
bDoneObjective_GetBackInVehicle = FALSE
|
|
bDoneDialogue_TrevorGetsWantedLevel = FALSE
|
|
bDoneDialogue_CopsSeenChasing = FALSE
|
|
bDoneDialogue_DrivingOnWrongSideRoad = FALSE
|
|
bDone_UberRecordingCleanupForChaseEnd = FALSE
|
|
bDone_TargetStartChaseRoute = FALSE
|
|
bDone_PlayerInNigelVehicle_FirstTime = FALSE
|
|
bDoneObjective_Initial_GetInNigelsVehicle = FALSE
|
|
FOR i = 0 TO (NIGEL2_TOTAL_DIALOGUE_LINES_GET_IN_NIGEL_CAR - 1)
|
|
bDoneDialogue_GetInNigelsVehicle[i] = FALSE
|
|
ENDFOR
|
|
bIsHospitalDebrisEffectActive = FALSE
|
|
bHasPTFX_ForHospitalDebrisBeenRequested = FALSE
|
|
//bDoneObjective_WaitForNigelAndMrsT = FALSE
|
|
bIsImportantDialoguePlaying = FALSE
|
|
bIsInterruptDialoguePlaying = FALSE
|
|
bStartedPlayBack_ScriptedVehicleAtStartLocation = FALSE
|
|
//bTracker_SeemlessCameraTransition = FALSE
|
|
bStatTracker_HasPlayerKeptCloseToDiNapoli = TRUE
|
|
bStatTracker_IsNigelVehicleDamageStatActive = FALSE
|
|
bStatTracker_HasPlayerInjuredPedWhilstInHospital = FALSE
|
|
|
|
//bSetHospital_IPL_InteriorLoadedState = FALSE
|
|
FOR i = 0 TO (NIGEL2_TOTAL_UBER_VEHICLE_HORNS_TO_PROCESS - 1)
|
|
bDone_UberVehicleHorn[i] = FALSE
|
|
ENDFOR
|
|
bDone_StartLocationVehicleHorn = FALSE
|
|
bDone_TurnEngineOnForPlayer = FALSE
|
|
bDoneCleanup_JumpOutHospitalWindow = TRUE
|
|
bDoneOneTime_JumpOutHospitalWindow = FALSE
|
|
bDone_RequestHospitalAudio = FALSE
|
|
bDone_KillConvoForOutTheVehicleDialogue = FALSE
|
|
bHadToFadeOutToLoadMissionAssets = FALSE
|
|
bDone_VisualDamageForTargetVehicle = FALSE
|
|
bDone_HospitalJumpPaperTrailFX = FALSE
|
|
bDone_UpdateTrashTruckPedModel = FALSE
|
|
bDone_UpdateBMXPedModel = FALSE
|
|
bHasSetExitStateFromOutroMocapForGameplayCam = FALSE
|
|
bRequestedOutroMocap = FALSE
|
|
bForceTargetblipFlashThisFrame = FALSE
|
|
bSetNigelVehicleHDForMocapExit = FALSE
|
|
bTriggerLandingFromJumpSFX = FALSE
|
|
eN2_MissionFailedReason = FAILED_DEFAULT //used in Script_Failed() to see if a fail reason needs displaying
|
|
iTriggerScriptedPedestriansTimer = 0
|
|
iPreLoadRecordingsTimer = 0
|
|
iUpdateUberVehicleTweaksTimer = 0
|
|
iMissionMusicEventTriggerCounter = 0
|
|
iTimer_NigelVehicleStuckOnRoofFail = 0
|
|
iRayfireProgress_HospitalDoors = 0
|
|
iTimer_DialogueDelay = 0
|
|
iHospitalSoundFX_Progress = 0
|
|
iTimer_TrevorGetBackInCarDialogue = 0
|
|
iTimer_NigelVehicleJumpsTimer = 0
|
|
iSoundID_UberVehicleFakeRevs = -1 // initialise to -1 so I can test when a sound_id has been assigned
|
|
iMainCarRecID = 1 // 1
|
|
iScenarioBlockingAreaStage = 0
|
|
fCurrentChaseDistance = 0.0
|
|
fCurrentPlaybackTime = 0.0
|
|
//fMainPlaybackSpeed = 1.0 // moved - initial set when uber recording beings
|
|
fCimematicCamOvverideZoneDepth = 20.750000
|
|
fDistPlayerToNigelVehicle = 0.0
|
|
vCinematicCamOverrideZone01 = <<368.571442,-594.946655,45.542202>>
|
|
vCinematicCamOverrideZone02 = <<389.501495,-614.127930,29.618>>
|
|
// get the coords being used for the building swaps
|
|
//BUILDING_DATA_STRUCT sTempBuildingData
|
|
//GET_BUILDING_DATA(sTempBuildingData, BUILDINGNAME_IPL_PILLBOX_HILL)
|
|
//vCoords_IPL_PILLBOX_HILL = sTempBuildingData.coords
|
|
//GET_BUILDING_DATA(sTempBuildingData, BUILDINGNAME_IPL_PILLBOX_HILL_INTERIOR)
|
|
//vCoords_IPL_PILLBOX_HILL_INTERIOR = sTempBuildingData.coords
|
|
eHospitalInteriorState = HIS_SET_INTERIOR_IPLS_FOR_CHASE
|
|
//tl23_CurrentConversation = "NULL"
|
|
//two uber models
|
|
// sStartLocationVehicle[0].model = BOXVILLE3 //Compilation fix. BOXVILLE3 removed from project. Ben R
|
|
sStartLocationVehicle[0].model = BOXVILLE2
|
|
sStartLocationVehicle[1].model = WASHINGTON
|
|
sStartLocationVehicle[2].model = WASHINGTON
|
|
sVehicleForPlayerOnMissionPassed.model = SULTAN
|
|
mnDefaultPedForVehicle = A_M_Y_BUSINESS_01 //same as one of the start location peds to cut memory also used by ped on foot near start area
|
|
mnDoctorMale = S_M_M_Doctor_01
|
|
mnScrubsFemale = S_F_Y_Scrubs_01
|
|
mnFemaleStartArea = A_F_Y_BevHills_03
|
|
sTargetVehicle.model = DUBSTA // DUBSTA doesn't fit through hospital window currently
|
|
sTargetVehicle.vSpawn = << -1290.73, -634.603, 26.1004 >> // from uber recording
|
|
sTargetVehicle.fSpawnHeading = 126.961 // QUATERNION -0.0248, 0.0004, 0.8949, 0.4456 for uber chase (don't reset this now as you see a movement) rotation << -0.453279, 2.26519, 126.961 >>
|
|
sNigelVehicle.model = GET_NIGEL_VEHICLE_MODEL()
|
|
sNigelVehicle.vSpawn = << -1304.01, -644.58, 25.91 >> // << -1303.42, -644.04, 25.89 >> //had to tweak position because of crate causing pad rumble
|
|
sNigelVehicle.fSpawnHeading = 127.67 // 128.45
|
|
sTargetPed.model = GET_AL_DI_NAPOLI_PED_MODEL()
|
|
sTargetPed.vSpawn = << -1290.0477, -631.4590, 25.6863 >>
|
|
sTargetPed.fSpawnHeading = 121.5060
|
|
sMrsThornhillPed.model = GET_NPC_PED_MODEL(CHAR_MRS_THORNHILL)
|
|
sMrsThornhillPed.vSpawn = << -1309.61, -640.33, 26.53 >>
|
|
sMrsThornhillPed.fSpawnHeading = -124.00
|
|
sNigelPed.model = GET_NPC_PED_MODEL(CHAR_NIGEL)
|
|
sNigelPed.vSpawn = << -1310.24, -640.19, 26.53 >>
|
|
sNigelPed.fSpawnHeading = -73.78
|
|
sObjectHospitalDoors.vPos = << 299.48, -584.84, 41.445 >>
|
|
sObjectHospitalDoors.vRot = << 0.00, 0.00, -20.00 >>
|
|
sObjectHospitalDoors.modelName = PROP_HOSPITALDOORS_START
|
|
eHospitalDoorsObjectState = HDO_CREATE
|
|
vJumpOutHospitalCamCoords = << 394.5, -619.1, 28.2 >>
|
|
vJumpOutHospitalCamLookAtOffset = << 0.0, 0.0, 0.0 >>
|
|
ADD_RELATIONSHIP_GROUP("ENEMIES", relGroupEnemy)
|
|
relGroupFriendly = GET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID()) //ADD_RELATIONSHIP_GROUP("FRIENDLIES", relGroupFriendly)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, relGroupEnemy, RELGROUPHASH_PLAYER)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, relGroupEnemy)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, relGroupEnemy, relGroupFriendly)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, relGroupFriendly, relGroupEnemy)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, relGroupFriendly, RELGROUPHASH_PLAYER)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, relGroupFriendly)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Initialization of the mission
|
|
PROC INIT_MISSION()
|
|
SET_MISSION_VARIABLES()
|
|
#IF IS_DEBUG_BUILD
|
|
SETUP_MISSION_WIDGET() //this needs setting up first to ensure debug print can be displayed when loading assets
|
|
// stage skipping
|
|
mSkipMenu[Z_SKIP_INTRO_MOCAP].sTxtLabel = "Mocap: NMT_2_RCM"
|
|
mSkipMenu[Z_SKIP_START_CHASE].sTxtLabel = "Chase after the Al Di Napoli"
|
|
mSkipMenu[Z_SKIP_PARK_CAR_NEXT_TO_TARGET].sTxtLabel = "Park alongside Al Di Napoli"
|
|
mSkipMenu[Z_SKIP_OUTRO_CUTSCENE].sTxtLabel = "Mocap: NMT_2_MCS_2"
|
|
mSkipMenu[Z_SKIP_MISSION_PASSED].sTxtLabel = "Mission Passed"
|
|
#ENDIF
|
|
//INFORM_MISSION_STATS_OF_MISSION_START_NIGEL_2()
|
|
ADD_CONTACT_TO_PHONEBOOK(CHAR_NIGEL, TREVOR_BOOK, FALSE)
|
|
SET_WANTED_LEVEL_MULTIPLIER(0.2)
|
|
//ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, FALSE)
|
|
ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, FALSE)
|
|
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, FALSE)
|
|
ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, FALSE)
|
|
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, FALSE)
|
|
SET_AGGRESSIVE_HORNS(TRUE)
|
|
DISABLE_TAXI_HAILING(TRUE) // don't allow taxis on mission
|
|
REGISTER_SCRIPT_WITH_AUDIO()
|
|
SET_START_CHECKPOINT_AS_FINAL() // tells replay controller to display "skip mission" for shitskips
|
|
ENDPROC
|
|
|
|
//----------------------------------------------------------------------------------------------------- --------------------------------------------
|
|
// Script Terminated Functions
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Deletes all of the blips used in the mission, checking if they exist.
|
|
PROC DELETE_ALL_MISSION_BLIPS()
|
|
SAFE_REMOVE_BLIP(sTargetPed.blip)
|
|
SAFE_REMOVE_BLIP(sNigelVehicle.blip)
|
|
SAFE_REMOVE_BLIP(sNigelPed.blip)
|
|
SAFE_REMOVE_BLIP(sMrsThornhillPed.blip)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Removes all the assets loaded by the mission, used in mission cleanup and reset mission functions.
|
|
/// PARAMS:
|
|
/// bClearTextSlots - if true CLEAR_ADDITIONAL_TEXT will be called for MISSION_TEXT_SLOT
|
|
PROC UNLOAD_ALL_MISSION_ASSETS(BOOL bClearTextSlots = TRUE)
|
|
INT i = 0
|
|
//hospital interior
|
|
IF IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
IF IS_INTERIOR_READY(HospitalInteriorIndex)
|
|
SET_INTERIOR_ACTIVE(HospitalInteriorIndex, FALSE)
|
|
UNPIN_INTERIOR(HospitalInteriorIndex)
|
|
ENDIF
|
|
ENDIF
|
|
//rayfire hospital doors
|
|
IF DOES_RAYFIRE_MAP_OBJECT_EXIST(rfHospitalDoors)
|
|
IF GET_STATE_OF_RAYFIRE_MAP_OBJECT(rfHospitalDoors) != RFMO_STATE_END
|
|
SET_STATE_OF_RAYFIRE_MAP_OBJECT(rfHospitalDoors, RFMO_STATE_ENDING)
|
|
ENDIF
|
|
ENDIF
|
|
//uber recording stuff
|
|
REMOVE_VEHICLE_RECORDING(iMainCarRecID, sNigel2_UberRecordingName) //main car
|
|
REMOVE_VEHICLE_RECORDING(2, sNigel2_UberRecordingName) //used by sStartLocationVehicle[2].vehicle
|
|
REMOVE_VEHICLE_RECORDING(1, sNigel2_CarRecNigelOutro) // used to make Nigel blend out the outro mocap as he drives away
|
|
REMOVE_ALL_CAR_RECORDINGS_FOR_UBER_CHASE()
|
|
CLEANUP_UBER_PLAYBACK()
|
|
//hospital debris cleanup
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(HospitalDebris_PTFX_ID)
|
|
STOP_PARTICLE_FX_LOOPED(HospitalDebris_PTFX_ID)
|
|
ENDIF
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(HospitalJump_PTFX_ID)
|
|
STOP_PARTICLE_FX_LOOPED(HospitalJump_PTFX_ID)
|
|
ENDIF
|
|
REMOVE_PTFX_ASSET()
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
IF IS_AUDIO_SCENE_ACTIVE("NIGEL_02_CHASE")
|
|
STOP_AUDIO_SCENE("NIGEL_02_CHASE")
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UNLOAD_ALL_MISSION_ASSETS : STOP_AUDIO_SCENE : NIGEL_02_CHASE ", "***") ENDIF #ENDIF
|
|
ENDIF
|
|
RELEASE_SOUND_ID(iSoundID_UberVehicleFakeRevs)
|
|
RELEASE_SCRIPT_AUDIO_BANK()
|
|
UNREGISTER_SCRIPT_WITH_AUDIO()
|
|
REMOVE_ANIM_DICT("rcmnigel2")
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sObjectHospitalDoors.modelName)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sTargetVehicle.model)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sNigelVehicle.model)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sTargetPed.model)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sMrsThornhillPed.model)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sNigelPed.model)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(mnDefaultPedForVehicle)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(mnDoctorMale)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(mnScrubsFemale)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(mnFemaleStartArea)
|
|
REPEAT NIGEL2_TOTAL_START_AREA_SCRIPTED_VEHICLES i
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sStartLocationVehicle[i].model)
|
|
ENDREPEAT
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sVehicleForPlayerOnMissionPassed.model)
|
|
IF bClearTextSlots
|
|
CLEAR_ADDITIONAL_TEXT(MISSION_TEXT_SLOT, TRUE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Deletes all of the mission entities checking if they exist
|
|
/// Used in Mission Failed, when faded out.
|
|
/// PARAMS:
|
|
/// bDelete - if true all entities will be deleted, else released
|
|
PROC CLEANUP_ALL_MISSION_ENTITIES(BOOL bDelete = FALSE)
|
|
INT i = 0
|
|
REPEAT TOTAL_HOSPITAL_PEDS i
|
|
SAFE_REMOVE_PED(sHospitalPedSimple[i].ped, bDelete)
|
|
ENDREPEAT
|
|
REPEAT TOTAL_START_AREA_PEDS i
|
|
SAFE_REMOVE_PED(sStartAreaPedSimple[i].ped, bDelete)
|
|
ENDREPEAT
|
|
//SAFE_REMOVE_PED(sDogPedSimple.ped)
|
|
IF IS_ENTITY_ALIVE(sTargetPed.ped)
|
|
SET_ENTITY_LOAD_COLLISION_FLAG(sTargetPed.ped, FALSE) //unsure if this is needed, might be costly?
|
|
IF NOT IS_PED_INJURED(sTargetPed.ped)
|
|
SET_PED_KEEP_TASK(sTargetPed.ped, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
SET_PED_MODEL_IS_SUPPRESSED(sTargetPed.model, FALSE)
|
|
SAFE_REMOVE_PED(sTargetPed.ped, bDelete)
|
|
|
|
SET_PED_MODEL_IS_SUPPRESSED(sMrsThornhillPed.model, FALSE)
|
|
IF IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
SET_PED_KEEP_TASK(sMrsThornhillPed.ped, TRUE)
|
|
ENDIF
|
|
SAFE_REMOVE_PED(sMrsThornhillPed.ped, bDelete)
|
|
|
|
SET_PED_MODEL_IS_SUPPRESSED(sNigelPed.model, FALSE)
|
|
IF IS_PED_UNINJURED(sNigelPed.ped)
|
|
SET_PED_KEEP_TASK(sNigelPed.ped, TRUE)
|
|
ENDIF
|
|
SAFE_REMOVE_PED(sNigelPed.ped, bDelete)
|
|
SAFE_DELETE_OBJECT(sObjectHospitalDoors.objectIndex)
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
SET_VEHICLE_CAN_LEAK_OIL(sNigelVehicle.vehicle, TRUE)
|
|
SET_VEHICLE_CAN_LEAK_PETROL(sNigelVehicle.vehicle, TRUE)
|
|
SET_DISABLE_PRETEND_OCCUPANTS(sNigelVehicle.vehicle, TRUE)
|
|
// reset flag once player is in the vehice
|
|
IF bSetNigelVehicleHDForMocapExit
|
|
SET_FORCE_HD_VEHICLE(sNigelVehicle.vehicle, FALSE) // B*1546501 - stops vehicle pop after mocap
|
|
bSetNigelVehicleHDForMocapExit = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(sNigelVehicle.vehicle)
|
|
REMOVE_VEHICLE_UPSIDEDOWN_CHECK(sNigelVehicle.vehicle)
|
|
ENDIF
|
|
SAFE_REMOVE_VEHICLE(sNigelVehicle.vehicle, bDelete)
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
SET_ENTITY_PROOFS(sTargetVehicle.vehicle, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) // B*1954082 - stop window smash during transition to cutscene RESETTING
|
|
SET_DISABLE_VEHICLE_ENGINE_FIRES(sTargetVehicle.vehicle, FALSE)
|
|
SET_VEHICLE_CAN_LEAK_OIL(sTargetVehicle.vehicle, TRUE)
|
|
SET_VEHICLE_CAN_LEAK_PETROL(sTargetVehicle.vehicle, TRUE)
|
|
SET_DISABLE_PRETEND_OCCUPANTS(sTargetVehicle.vehicle, TRUE)
|
|
IF bDone_UberRecordingCleanupForChaseEnd
|
|
SET_VEHICLE_ENGINE_HEALTH(sTargetVehicle.vehicle, 0.0)
|
|
ENDIF
|
|
ENDIF
|
|
SAFE_REMOVE_VEHICLE(sTargetVehicle.vehicle, bDelete)
|
|
REPEAT NIGEL2_TOTAL_START_AREA_SCRIPTED_VEHICLES i
|
|
SAFE_REMOVE_VEHICLE(sStartLocationVehicle[i].vehicle, bDelete)
|
|
ENDREPEAT
|
|
SAFE_REMOVE_VEHICLE(sVehicleForPlayerOnMissionPassed.vehicle, bDelete)
|
|
SAFE_REMOVE_PED(sDefaultPedForScriptedVehicle.ped, bDelete)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Mission cleanup
|
|
/// PARAMS:
|
|
/// bDeleteAll - if TRUE all entities are deleted, else released
|
|
/// bClearTextSlots - if TRUE CLEAR_ADDITIONAL_TEXT on MISSION_TEXT_SLOT
|
|
PROC MISSION_CLEANUP(BOOL bDeleteAll = FALSE, BOOL bClearTextSlots = TRUE)
|
|
INT i
|
|
CLEAR_PRINTS()
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP(TRUE)
|
|
ENDIF
|
|
KILL_ANY_CONVERSATION()
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
DISABLE_CELLPHONE(FALSE)
|
|
//RENDER_SCRIPT_CAMS(FALSE, FALSE) //this brakes my interpolate camera when mission ends normally.
|
|
RC_END_CUTSCENE_MODE()
|
|
STOP_SCRIPT_GLOBAL_SHAKING()
|
|
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE)
|
|
SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW(FALSE)
|
|
IF NOT bDoneCleanup_JumpOutHospitalWindow
|
|
REPLAY_STOP_EVENT() // B*1841676 - cleanup the record jump out of the hospital window
|
|
ENDIF
|
|
//reset roads and peds
|
|
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<-1415.903931,-732.548889,17.545492>>, <<-1236.628174,-601.026489,31.153446>>, 23.000000) // match with values when turned on - intro
|
|
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<418.283752,-571.662903,24.697943>>, <<362.025787,-663.139771,38.339985>>, 28.000000) //match with values when turned on - outro
|
|
// turn back on road from Road leading to tunnel exit
|
|
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<-668.363464,-658.380066,27.433815>>, <<-440.021973,-657.423767,40.251266>>, 40.000000) // cover exit from tunnel
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< -1409.34351, -756.38098, 17.59896 >>, << -1239.14758, -587.12195, 31.25266 >>, TRUE) // match with values when turned on - intro
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< 341.2, -645.83, 25.0 >>, << 429.1, -572.89, 35.0 >>, TRUE) // match with values when turned on - outro
|
|
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockingIntroArea)
|
|
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockingOutroArea)
|
|
FOR i = 0 TO (NIGEL2_TOTAL_SCENARIO_BLOCKING_AREAS_CHASE_ROUTE - 1)
|
|
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockingChaseRoute[i])
|
|
ENDFOR
|
|
SET_PED_PATHS_BACK_TO_ORIGINAL(<< -1318.50049, -678.88257, 23.0 >>, << -1296.62781, -631.54492, 28.0 >>) // intro
|
|
SET_PED_PATHS_BACK_TO_ORIGINAL(<< -496.28848, -681.55994, 25.0 >>, << -481.59882, -668.74115, 38.0 >>) // chase - second pedestrian area
|
|
SET_PED_PATHS_BACK_TO_ORIGINAL(<< -463.21530, -829.04749, 22.48120 >>, << -445.46454, -813.10107, 36.56588 >>) // chase - entrance to car park
|
|
SET_PED_PATHS_BACK_TO_ORIGINAL(<< 341.2, -645.83, 25.0 >>, << 429.1, -572.89, 35.0 >>) // outro
|
|
CLEAR_PED_NON_CREATION_AREA()
|
|
SET_AGGRESSIVE_HORNS(FALSE)
|
|
DISABLE_TAXI_HAILING(FALSE)
|
|
IF NOT IS_REPLAY_BEING_SET_UP() // don't allow music events to trigger during replay setup / stage skips
|
|
AND bFinishedStageSkipping
|
|
SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_MISSION_FAIL")
|
|
ENDIF
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_ForceDirectEntry, FALSE) // reset flag for ensure player uses direct door access as per bug 1044490
|
|
ENDIF
|
|
IF DOES_CAM_EXIST(camHospitalJump)
|
|
SET_CAM_ACTIVE(camHospitalJump, FALSE)
|
|
DESTROY_CAM(camHospitalJump)
|
|
ENDIF
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
REMOVE_PED_FOR_DIALOGUE(sDialogue, 2) // "TREVOR"
|
|
REMOVE_PED_FOR_DIALOGUE(sDialogue, 3) // "DINAPOLI"
|
|
REMOVE_PED_FOR_DIALOGUE(sDialogue, 4) // "NIGEL"
|
|
REMOVE_PED_FOR_DIALOGUE(sDialogue, 5) // "MRSTHORNHILL"
|
|
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
|
|
SET_FOLLOW_VEHICLE_CAM_VIEW_MODE(CAM_VIEW_MODE_THIRD_PERSON)
|
|
SET_TIME_SCALE(1.0)
|
|
REMOVE_RELATIONSHIP_GROUP(relGroupEnemy)
|
|
//REMOVE_RELATIONSHIP_GROUP(relGroupFriendly) no longer doing this to resolve B*512565
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(sNigelVehicle.model, FALSE)
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(sTargetVehicle.model, FALSE)
|
|
DELETE_ALL_MISSION_BLIPS()
|
|
CLEANUP_ALL_MISSION_ENTITIES(bDeleteAll)
|
|
UNLOAD_ALL_MISSION_ASSETS(bClearTextSlots)
|
|
|
|
IF eMissionStage = MISSION_STAGE_MISSION_PASSED
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL, BUILDINGSTATE_CLEANUP, TRUE) // set the building swaps to the intial state
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MISSION_CLEANUP - set building swaps BUILDINGNAME_IPL_PILLBOX_HILL -> BUILDINGSTATE_CLEANUP with delay for leave area") ENDIF #ENDIF
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL_INTERIOR, BUILDINGSTATE_DESTROYED, TRUE) // unloaded version of the interior
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MISSION_CLEANUP - set building swaps BUILDINGNAME_IPL_PILLBOX_HILL_INTERIOR -> BUILDINGSTATE_DESTROYED with delay for leave area") ENDIF #ENDIF
|
|
SET_BUILDING_STATE(BUILDINGNAME_ES_PILLBOX_HILL, BUILDINGSTATE_CLEANUP, TRUE) // boarded up doors state
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MISSION_CLEANUP - set building swaps BUILDINGNAME_ES_PILLBOX_HILL -> BUILDINGSTATE_CLEANUP ith delay for leave area") ENDIF #ENDIF
|
|
ELSE
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL, BUILDINGSTATE_NORMAL) // set the building swaps to the intial state
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MISSION_CLEANUP - set building swaps BUILDINGNAME_IPL_PILLBOX_HILL -> BUILDINGSTATE_NORMAL") ENDIF #ENDIF
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL_INTERIOR, BUILDINGSTATE_DESTROYED) // unloaded version of the interior
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MISSION_CLEANUP - set building swaps BUILDINGNAME_IPL_PILLBOX_HILL_INTERIOR -> BUILDINGSTATE_DESTROYED") ENDIF #ENDIF
|
|
SET_BUILDING_STATE(BUILDINGNAME_ES_PILLBOX_HILL, BUILDINGSTATE_DESTROYED) // contains the rayfire for the front door
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MISSION_CLEANUP - set building swaps BUILDINGNAME_ES_PILLBOX_HILL -> BUILDINGSTATE_DESTROYED (default) since mission was failed") ENDIF #ENDIF
|
|
ENDIF
|
|
/*// release new load scene
|
|
IF eHospitalInteriorState = HIS_ACTIVE_NEW_LOAD_SCENE_AT_INTERIOR
|
|
OR eHospitalInteriorState = HIS_CLEANUP_NEW_LOAD_SCENE_AT_INTERIOR
|
|
IF IS_NEW_LOAD_SCENE_ACTIVE()
|
|
NEW_LOAD_SCENE_STOP()
|
|
CPRINTLN(DEBUG_MISSION, "MISSION_CLEANUP : NEW_LOAD_SCENE_STOP() : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF*/
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CLEANUP_MISSION_WIDGETS()
|
|
STOP_RECORDING_ALL_VEHICLES()
|
|
SET_DEBUG_ACTIVE(FALSE)
|
|
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(FALSE)
|
|
#ENDIF
|
|
CPRINTLN(DEBUG_MISSION, "MISSION_CLEANUP - done")
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Handles call to MISSION_CLEANUP and terminates the thread
|
|
PROC Script_Cleanup()
|
|
|
|
// Ensure launcher is cleaned up
|
|
RC_CLEANUP_LAUNCHER()
|
|
|
|
// If the mission was triggered then additional mission cleanup will be required.
|
|
IF (Random_Character_Cleanup_If_Triggered())
|
|
PRINTSTRING("...Random Character Script was triggered so additional cleanup required") PRINTNL()
|
|
MISSION_CLEANUP()
|
|
ENDIF
|
|
|
|
//Cleanup the scene created by the launcher
|
|
RC_CleanupSceneEntities(sRCLauncherDataLocal)
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Mission Passed
|
|
PROC Script_Passed()
|
|
|
|
IF HAS_TIME_PASSED(iTimer_MissionPassedDelay, 1000) // shorten once this veh rec is working!
|
|
CPRINTLN(DEBUG_MISSION, "Script_Passed()")
|
|
IF IS_PED_UNINJURED(sNigelPed.ped)
|
|
AND IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
IF IS_PED_IN_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sNigelVehicle.vehicle)
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(sNigelVehicle.vehicle)
|
|
REMOVE_VEHICLE_RECORDING(1, sNigel2_CarRecNigelOutro)
|
|
ENDIF
|
|
IF NOT IsPedPerformingTask(sNigelPed.ped, SCRIPT_TASK_VEHICLE_DRIVE_WANDER)
|
|
//SET_VEHICLE_ENGINE_ON(sNigelVehicle.vehicle, TRUE, TRUE)
|
|
//SET_VEHICLE_FORWARD_SPEED(sNigelVehicle.vehicle, 30)
|
|
TASK_VEHICLE_DRIVE_WANDER(sNigelPed.ped, sNigelVehicle.vehicle, 60.0, DRIVINGMODE_AVOIDCARS)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sNigelPed.ped, TRUE)
|
|
SET_PED_KEEP_TASK(sNigelPed.ped, TRUE)
|
|
CPRINTLN(DEBUG_MISSION, "Script_Passed - set Nigel with wander task - Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK()
|
|
Random_Character_Passed(CP_RAND_C_NIG2)
|
|
Script_Cleanup()
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "Script_Passed() delay for Nigel driving")
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// updates the reason for mission failed
|
|
/// in order of most important fail reason so if multiple fails conditions have been set, we use the most important
|
|
PROC UPDATE_FAIL_REASON()
|
|
IF DOES_ENTITY_EXIST(sNigelPed.ped)
|
|
AND DOES_ENTITY_EXIST(sMrsThornhillPed.ped)
|
|
IF IS_ENTITY_DEAD(sNigelPed.ped)
|
|
OR IS_PED_INJURED(sNigelPed.ped)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_NIGEL_DIED") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_NIGEL_DIED
|
|
EXIT
|
|
ENDIF
|
|
IF IS_ENTITY_DEAD(sMrsThornhillPed.ped)
|
|
OR IS_PED_INJURED(sMrsThornhillPed.ped)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_MRS_THORNHILL_DIED") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_MRS_THORNHILL_DIED
|
|
EXIT
|
|
ENDIF
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sNigelPed.ped, PLAYER_PED_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_NIGEL_ATTACKED") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_NIGEL_ATTACKED
|
|
EXIT
|
|
ENDIF
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(sMrsThornhillPed.ped, PLAYER_PED_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_MRS_THORNHILL_ATTACKED") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_MRS_THORNHILL_ATTACKED
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(sTargetPed.ped)
|
|
IF IS_ENTITY_DEAD(sTargetPed.ped)
|
|
OR IS_PED_INJURED(sTargetPed.ped)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_TARGET_DIED") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_TARGET_DIED
|
|
EXIT
|
|
ELSE
|
|
//Kill off Di Napoli, if his vehicle is set on fire
|
|
IF DOES_ENTITY_EXIST(sTargetVehicle.vehicle)
|
|
IF NOT IS_ENTITY_DEAD(sTargetVehicle.vehicle)
|
|
AND IS_ENTITY_ON_FIRE(sTargetVehicle.vehicle)
|
|
EXPLODE_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(sNigelVehicle.vehicle)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "NIGEL VEHICLE IS_VEHICLE_STUCK_ON_ROOF CHECKED ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^") ENDIF #ENDIF
|
|
IF IS_ENTITY_DEAD(sNigelVehicle.vehicle)
|
|
OR IS_ENTITY_IN_WATER(sNigelVehicle.vehicle)
|
|
OR NOT IS_VEHICLE_DRIVEABLE(sNigelVehicle.vehicle)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_NIGEL_VEHICLE_WRECKED") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_NIGEL_VEHICLE_WRECKED
|
|
EXIT
|
|
ELSE
|
|
IF eMissionStage != MISSION_STAGE_INTRO_MOCAP_SCENE // don't worry during the mocaps
|
|
// setup a grace period for this to fix instant fail, B*1080979
|
|
IF IS_VEHICLE_STUCK_ON_ROOF(sNigelVehicle.vehicle)
|
|
IF HAS_TIME_PASSED(iTimer_NigelVehicleStuckOnRoofFail, 3000)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - stuck on the roof FAILED_NIGEL_VEHICLE_WRECKED") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_NIGEL_VEHICLE_WRECKED
|
|
EXIT
|
|
ENDIF
|
|
ELSE
|
|
iTimer_NigelVehicleStuckOnRoofFail = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//if one of these fails has already been set, don't worry about retesting it
|
|
IF eN2_MissionFailedReason = FAILED_LEFT_NIGEL_AND_MRS_T_BEHIND
|
|
OR eN2_MissionFailedReason = FAILED_LEFT_NIGEL_BEHIND
|
|
OR eN2_MissionFailedReason = FAILED_LEFT_MRS_T_BEHIND
|
|
OR eN2_MissionFailedReason = FAILED_TARGET_ESCAPED
|
|
EXIT
|
|
ENDIF
|
|
IF eMissionStage = MISSION_STAGE_CHASE_TARGET_IN_VEHICLE
|
|
OR eMissionStage = MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE
|
|
//check for target escaping / left behind
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
IF fCurrentChaseDistance > NIGEL2_TARGET_ESCAPED_DISTANCE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_TARGET_ESCAPED") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_TARGET_ESCAPED
|
|
EXIT
|
|
ENDIF
|
|
// B*1513201 - when target goes down the tunnel and player doesn't follow
|
|
// needs to match up with MANAGE_DIALOGUE_DURING_CHASE
|
|
IF fCurrentPlaybackTime > 50000.0 // 40000.0 // enter tunnel
|
|
AND fCurrentPlaybackTime < 58000.0 // exit tunnel
|
|
IF bDoneDialogue_WrongWaySpecialFail
|
|
OR NOT IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-668.363464,-658.380066,27.433815>>, <<-440.021973,-657.423767,40.251266>>, 40.000000) // smaller area covering exit
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_TARGET_ESCAPED") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_TARGET_ESCAPED
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//check if the player leaves Nigel and Mrs Thornhill behind
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
AND IS_ENTITY_ALIVE(sNigelPed.ped)
|
|
AND IS_ENTITY_ALIVE(sMrsThornhillPed.ped)
|
|
VECTOR vTempPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
|
|
// check for player leaving Nigel or Mrs Thornhill behind on foot
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle)
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle)
|
|
// nigel and mrs T out of the vehicle
|
|
IF NOT bDoneObjective_WarnLeavingNigelAndMrsT
|
|
IF NOT IS_ENTITY_IN_RANGE_COORDS(sNigelPed.ped, vTempPlayerPos, PLAYER_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE)
|
|
OR NOT IS_ENTITY_IN_RANGE_COORDS(sMrsThornhillPed.ped, vTempPlayerPos, PLAYER_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE)
|
|
KILL_ANY_CONVERSATION()
|
|
PRINT_NOW("NIGEL2_08", DEFAULT_GOD_TEXT_TIME, 1) // Return to ~b~Nigel~s~ and ~b~Mrs Thornhill.~s~
|
|
bDoneObjective_WarnLeavingNigelAndMrsT = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ENTITY_IN_RANGE_COORDS(sNigelPed.ped, vTempPlayerPos, RESET_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE)
|
|
AND IS_ENTITY_IN_RANGE_COORDS(sMrsThornhillPed.ped, vTempPlayerPos, RESET_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE)
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_08")
|
|
CLEAR_THIS_PRINT("NIGEL2_08") // Return to ~b~Nigel~s~ and ~b~Mrs Thornhill.~s~
|
|
ENDIF
|
|
bDoneObjective_WarnLeavingNigelAndMrsT = FALSE
|
|
ELIF NOT IS_ENTITY_IN_RANGE_COORDS(sNigelPed.ped, vTempPlayerPos, PLAYER_LEFT_NIGEL_AND_MRS_T_BEHIND_DISTANCE)
|
|
AND NOT IS_ENTITY_IN_RANGE_COORDS(sMrsThornhillPed.ped, vTempPlayerPos, PLAYER_LEFT_NIGEL_AND_MRS_T_BEHIND_DISTANCE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_LEFT_NIGEL_AND_MRS_T_BEHIND on foot") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_LEFT_NIGEL_AND_MRS_T_BEHIND
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// just Nigel out of the vehicle
|
|
IF NOT bDoneObjective_WarnLeavingNigelAndMrsT
|
|
IF NOT IS_ENTITY_IN_RANGE_COORDS(sNigelPed.ped, vTempPlayerPos, PLAYER_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE)
|
|
KILL_ANY_CONVERSATION()
|
|
PRINT_NOW("NIGEL2_05", DEFAULT_GOD_TEXT_TIME, 1) // Return to ~b~Nigel.~s~
|
|
bDoneObjective_WarnLeavingNigelAndMrsT = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ENTITY_IN_RANGE_COORDS(sNigelPed.ped, vTempPlayerPos, RESET_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE)
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_05")
|
|
CLEAR_THIS_PRINT("NIGEL2_05") // Return to ~b~Nigel.~s~
|
|
ENDIF
|
|
bDoneObjective_WarnLeavingNigelAndMrsT = FALSE
|
|
ELIF NOT IS_ENTITY_IN_RANGE_COORDS(sNigelPed.ped, vTempPlayerPos, PLAYER_LEFT_NIGEL_AND_MRS_T_BEHIND_DISTANCE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_LEFT_NIGEL_BEHIND on foot") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_LEFT_NIGEL_BEHIND
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT IS_PED_SITTING_IN_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle)
|
|
// just mrs T out of the vehicle
|
|
IF NOT bDoneObjective_WarnLeavingNigelAndMrsT
|
|
IF NOT IS_ENTITY_IN_RANGE_COORDS(sMrsThornhillPed.ped, vTempPlayerPos, PLAYER_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE)
|
|
KILL_ANY_CONVERSATION()
|
|
PRINT_NOW("NIGEL2_09", DEFAULT_GOD_TEXT_TIME, 1) // Return to ~b~Mrs. Thornhill.~s~
|
|
bDoneObjective_WarnLeavingNigelAndMrsT = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ENTITY_IN_RANGE_COORDS(sMrsThornhillPed.ped, vTempPlayerPos, RESET_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE)
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_09")
|
|
CLEAR_THIS_PRINT("NIGEL2_09") // Return to ~b~Mrs. Thornhill.~s~
|
|
ENDIF
|
|
bDoneObjective_WarnLeavingNigelAndMrsT = FALSE
|
|
ELIF NOT IS_ENTITY_IN_RANGE_COORDS(sMrsThornhillPed.ped, vTempPlayerPos, PLAYER_LEFT_NIGEL_AND_MRS_T_BEHIND_DISTANCE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_LEFT_MRS_T_BEHIND on foot") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_LEFT_MRS_T_BEHIND
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// if player leaves Nigel and Mrs Thornhill in the car
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
VECTOR vTempGetNigelVehiclePos = GET_ENTITY_COORDS(sNigelVehicle.vehicle)
|
|
fDistPlayerToNigelVehicle = VDIST(GET_ENTITY_COORDS(PLAYER_PED_ID()), vTempGetNigelVehiclePos)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "dist between player and nigel Vehicle = ", fDistPlayerToNigelVehicle) ENDIF #ENDIF
|
|
IF NOT bDoneObjective_WarnLeavingNigelAndMrsT
|
|
IF fDistPlayerToNigelVehicle > PLAYER_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE
|
|
KILL_ANY_CONVERSATION()
|
|
PRINT_NOW("NIGEL2_08", DEFAULT_GOD_TEXT_TIME, 1) // Return to ~b~Nigel~s~ and ~b~Mrs Thornhill.~s~
|
|
bDoneObjective_WarnLeavingNigelAndMrsT = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF fDistPlayerToNigelVehicle > PLAYER_LEFT_NIGEL_AND_MRS_T_BEHIND_DISTANCE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_LEFT_NIGEL_AND_MRS_T_BEHIND in the car") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_LEFT_NIGEL_AND_MRS_T_BEHIND
|
|
EXIT
|
|
ELIF fDistPlayerToNigelVehicle < RESET_LEFT_NIGEL_AND_MRS_T_WARN_DISTANCE
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_08")
|
|
CLEAR_THIS_PRINT("NIGEL2_08") // Return to ~b~Nigel~s~ and ~b~Mrs Thornhill.~s~
|
|
ENDIF
|
|
bDoneObjective_WarnLeavingNigelAndMrsT = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
//seperate check if Al Di Napoli is in crashed state and the player ditches nigel's vehicle in the hospital to approach him on foot.
|
|
IF bDone_UberRecordingCleanupForChaseEnd
|
|
IF (fCurrentChaseDistance < 35.0) //distance from crashed Al di Napoli to just outside hospital window
|
|
IF IS_VEHICLE_INSIDE_HOSPITAL_INTERIOR(sNigelVehicle.vehicle)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed Checks - FAILED_LEFT_NIGEL_AND_MRS_T_BEHIND") ENDIF #ENDIF
|
|
eN2_MissionFailedReason = FAILED_LEFT_NIGEL_AND_MRS_T_BEHIND
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// cycles through the conditions to see if the player has failed
|
|
PROC MISSION_FAILED_CHECKS()
|
|
|
|
// don't allow mission failed checks during stage skips
|
|
IF bFinishedStageSkipping
|
|
IF eMissionStage != MISSION_STAGE_MISSION_FAILED_WAIT_FOR_FADE // don't do the checks if we are already in the waiting for fade during fail stage
|
|
AND eMissionStage != MISSION_STAGE_INTRO_MOCAP_SCENE
|
|
AND eMissionStage != MISSION_STAGE_END_CUTSCENE_MOCAP
|
|
AND eMissionStage != MISSION_STAGE_MISSION_PASSED
|
|
UPDATE_FAIL_REASON()
|
|
IF eN2_MissionFailedReason <> FAILED_DEFAULT
|
|
SET_STAGE(MISSION_STAGE_MISSION_FAILED_WAIT_FOR_FADE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// Mission Setup
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// handles all the mission asset requests
|
|
/// PARAMS:
|
|
/// bWaitForAssetsToLoad - if true game waits for all requests to be loaded
|
|
PROC LOAD_MISSION_ASSETS(BOOL bWaitForAssetsToLoad = FALSE)
|
|
REQUEST_ADDITIONAL_TEXT("NIGEL2", MISSION_TEXT_SLOT)
|
|
REQUEST_VEHICLE_RECORDING(iMainCarRecID, sNigel2_UberRecordingName) //main uber recording
|
|
REQUEST_MODEL(sTargetVehicle.model)
|
|
REQUEST_MODEL(sNigelVehicle.model)
|
|
REQUEST_MODEL(sTargetPed.model)
|
|
REQUEST_MODEL(sMrsThornhillPed.model)
|
|
REQUEST_MODEL(sNigelPed.model)
|
|
REQUEST_MODEL(sStartLocationVehicle[0].model)
|
|
REQUEST_MODEL(sStartLocationVehicle[1].model)
|
|
REQUEST_MODEL(sStartLocationVehicle[2].model)
|
|
REQUEST_VEHICLE_RECORDING(2, sNigel2_UberRecordingName) //vehicle at start which pulls out on target vehicle
|
|
//wait until loaded
|
|
IF bWaitForAssetsToLoad
|
|
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
|
|
OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(iMainCarRecID, sNigel2_UberRecordingName) //MAIN CAR FOR UBER RECORDING
|
|
OR NOT HAS_MODEL_LOADED(sTargetVehicle.model)
|
|
OR NOT HAS_MODEL_LOADED(sNigelVehicle.model)
|
|
OR NOT HAS_MODEL_LOADED(sTargetPed.model)
|
|
OR NOT HAS_MODEL_LOADED(sMrsThornhillPed.model)
|
|
OR NOT HAS_MODEL_LOADED(sNigelPed.model)
|
|
OR NOT HAS_MODEL_LOADED(sStartLocationVehicle[0].model)
|
|
OR NOT HAS_MODEL_LOADED(sStartLocationVehicle[1].model)
|
|
OR NOT HAS_MODEL_LOADED(sStartLocationVehicle[2].model)
|
|
OR NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(2, sNigel2_UberRecordingName) //vehicle at start which pulls out on target vehicle
|
|
IF bFinishedStageSkipping //don't fade if we are stage skipping
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
SAFE_FADE_SCREEN_OUT_TO_BLACK(0, TRUE) // backup fade in, mainly for repeat play purposes.
|
|
bHadToFadeOutToLoadMissionAssets = TRUE //stored so I only fade back up if, I faded down
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SCREEN FADED BECAUSE ASSETS WEREN'T LOADED IN TIME") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "waiting for asset to load ") ENDIF #ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MISSION ASSETS LOADED - GO GO GO ") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// sets up the Nigel's vehicle for the start of in game play
|
|
PROC SETUP_NIGEL_VEHICLE_FOR_IN_GAME_START()
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
SET_VEHICLE_FIXED(sNigelVehicle.vehicle)
|
|
SET_VEHICLE_DOORS_LOCKED(sNigelVehicle.vehicle, VEHICLELOCK_UNLOCKED)
|
|
//SET_VEHICLE_ON_GROUND_PROPERLY(sNigelVehicle.vehicle) stops a visible snap
|
|
SET_VEHICLE_COLOURS(sNigelVehicle.vehicle, 65, 0) //bluey black, ripped from Tom Nigel 3. //88, 88) //YELLOW
|
|
//SET_VEHICLE_TYRES_CAN_BURST(sNigelVehicle.vehicle, FALSE)
|
|
SET_VEHICLE_HAS_STRONG_AXLES(sNigelVehicle.vehicle, TRUE)
|
|
SET_VEHICLE_STRONG(sNigelVehicle.vehicle, TRUE)
|
|
SET_ENTITY_HEALTH(sNigelVehicle.vehicle, NIGEL2_MISSION_VEHICLES_HEALTH)
|
|
SET_VEHICLE_CAN_LEAK_OIL(sNigelVehicle.vehicle, FALSE)
|
|
SET_VEHICLE_CAN_LEAK_PETROL(sNigelVehicle.vehicle, FALSE)
|
|
SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(sNigelVehicle.vehicle, SC_DOOR_BOOT, FALSE)
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(sNigelVehicle.model, TRUE)
|
|
ADD_VEHICLE_UPSIDEDOWN_CHECK(sNigelVehicle.vehicle)
|
|
SET_VEHICLE_AS_RESTRICTED(sNigelVehicle.vehicle, 0)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SETUP_NIGEL_VEHICLE_FOR_IN_GAME_START done") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// sets up the target's vehicle for the start of in game play
|
|
PROC SETUP_TARGET_VEHICLE_FOR_IN_GAME_START()
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
SET_VEHICLE_FIXED(sTargetVehicle.vehicle)
|
|
SET_VEHICLE_DOORS_LOCKED(sTargetVehicle.vehicle, VEHICLELOCK_UNLOCKED)
|
|
SET_VEHICLE_COLOURS(sTargetVehicle.vehicle, 0, 0) //BLACK
|
|
SET_VEHICLE_ENGINE_ON(sTargetVehicle.vehicle, TRUE, TRUE)
|
|
SET_VEHICLE_TYRES_CAN_BURST(sTargetVehicle.vehicle, FALSE)
|
|
SET_VEHICLE_HAS_STRONG_AXLES(sTargetVehicle.vehicle, TRUE)
|
|
SET_VEHICLE_STRONG(sTargetVehicle.vehicle, TRUE)
|
|
SET_ENTITY_HEALTH(sTargetVehicle.vehicle, NIGEL2_MISSION_VEHICLES_HEALTH)
|
|
SET_DISABLE_VEHICLE_ENGINE_FIRES(sTargetVehicle.vehicle, TRUE)
|
|
SET_VEHICLE_CAN_LEAK_OIL(sTargetVehicle.vehicle, FALSE)
|
|
SET_VEHICLE_CAN_LEAK_PETROL(sTargetVehicle.vehicle, FALSE)
|
|
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(sTargetVehicle.vehicle, FALSE)
|
|
SET_VEHICLE_DOOR_SHUT(sTargetVehicle.vehicle, SC_DOOR_FRONT_LEFT, TRUE)
|
|
SET_VEHICLE_DOORS_LOCKED(sTargetVehicle.vehicle, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(sTargetVehicle.vehicle, SC_DOOR_FRONT_LEFT, FALSE) //added this so player rips him out in the cutscene
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(sTargetVehicle.model, TRUE)
|
|
SET_VEHICLE_AS_RESTRICTED(sTargetVehicle.vehicle, 1)
|
|
SET_ENTITY_COORDS(sTargetVehicle.vehicle, sTargetVehicle.vSpawn) // from uber recording
|
|
SET_ENTITY_QUATERNION(sTargetVehicle.vehicle, -0.0248, 0.0004, 0.8949, 0.4456) // from uber recording // heading 126.961 // rotation << -0.453279, 2.26519, 126.961 >>
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, TRUE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SETUP_TARGET_VEHICLE_FOR_IN_GAME_START done") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// sets up Mrs Thornhill for the start of in game play
|
|
PROC SETUP_MRS_THORNHILL_FOR_IN_GAME_START()
|
|
IF IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
SET_PED_DEFAULT_COMPONENT_VARIATION(sMrsThornhillPed.ped)
|
|
SET_PED_MODEL_IS_SUPPRESSED(sMrsThornhillPed.model, TRUE)
|
|
SET_PED_CAN_BE_TARGETTED(sMrsThornhillPed.ped, FALSE)
|
|
SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(sMrsThornhillPed.ped, FALSE)
|
|
SET_PED_CONFIG_FLAG(sMrsThornhillPed.ped, PCF_WillFlyThroughWindscreen, FALSE)
|
|
SET_PED_CONFIG_FLAG(sMrsThornhillPed.ped, PCF_KeepRelationshipGroupAfterCleanUp, TRUE)
|
|
SET_PED_CONFIG_FLAG(sMrsThornhillPed.ped, PCF_GetOutUndriveableVehicle, FALSE) // //stop ped leaving undriveable vehicle
|
|
SET_PED_CONFIG_FLAG(sMrsThornhillPed.ped, PCF_GetOutBurningVehicle, FALSE) // //stop ped leaving undriveable vehicle
|
|
IF IS_PED_IN_GROUP(sMrsThornhillPed.ped)
|
|
REMOVE_PED_FROM_GROUP(sMrsThornhillPed.ped)
|
|
ENDIF
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(sMrsThornhillPed.ped, relGroupFriendly)
|
|
ADD_PED_FOR_DIALOGUE(sDialogue, 5, sMrsThornhillPed.ped, "MRSTHORNHILL")
|
|
SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT(sMrsThornhillPed.ped, TRUE)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sMrsThornhillPed.ped, TRUE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SETUP_MRS_THORNHILL_FOR_IN_GAME_START done") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// sets up Nigel for the start of in game play
|
|
PROC SETUP_NIGEL_FOR_IN_GAME_START()
|
|
IF IS_PED_UNINJURED(sNigelPed.ped)
|
|
SET_PED_DEFAULT_COMPONENT_VARIATION(sNigelPed.ped)
|
|
SET_PED_MODEL_IS_SUPPRESSED(sNigelPed.model, TRUE)
|
|
SET_PED_CAN_BE_TARGETTED(sNigelPed.ped, FALSE)
|
|
SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(sNigelPed.ped, FALSE)
|
|
SET_PED_CONFIG_FLAG(sNigelPed.ped, PCF_WillFlyThroughWindscreen, FALSE)
|
|
SET_PED_CONFIG_FLAG(sNigelPed.ped, PCF_KeepRelationshipGroupAfterCleanUp, TRUE)
|
|
SET_PED_CONFIG_FLAG(sNigelPed.ped, PCF_GetOutUndriveableVehicle, FALSE) // //stop ped leaving undriveable vehicle
|
|
SET_PED_CONFIG_FLAG(sNigelPed.ped, PCF_GetOutBurningVehicle, FALSE) // //stop ped leaving undriveable vehicle
|
|
IF IS_PED_IN_GROUP(sNigelPed.ped)
|
|
REMOVE_PED_FROM_GROUP(sNigelPed.ped)
|
|
ENDIF
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(sNigelPed.ped, relGroupFriendly)
|
|
ADD_PED_FOR_DIALOGUE(sDialogue, 4, sNigelPed.ped, "NIGEL")
|
|
SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT(sNigelPed.ped, TRUE)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sNigelPed.ped, TRUE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SETUP_NIGEL_FOR_IN_GAME_START done") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// sets up Target for the start of in game play
|
|
PROC SETUP_TARGET_PED_FOR_IN_GAME_START()
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
SET_PED_COMPONENT_VARIATION(sTargetPed.ped, PED_COMP_LEG, 0, 0) // default now has pants on show!
|
|
SET_PED_MODEL_IS_SUPPRESSED(sTargetPed.model, TRUE)
|
|
SET_PED_CAN_BE_TARGETTED(sTargetPed.ped, FALSE)
|
|
SET_PED_CAN_BE_DRAGGED_OUT(sTargetPed.ped, FALSE)
|
|
SET_PED_CONFIG_FLAG(sTargetPed.ped, PCF_WillFlyThroughWindscreen, FALSE)
|
|
SET_PED_CONFIG_FLAG(sTargetPed.ped, PCF_GetOutUndriveableVehicle, FALSE) // //stop ped leaving undriveable vehicle
|
|
SET_PED_CONFIG_FLAG(sTargetPed.ped, PCF_GetOutBurningVehicle, FALSE) // //stop ped leaving undriveable vehicle
|
|
SET_PED_DIES_WHEN_INJURED(sTargetPed.ped, TRUE)
|
|
SET_ENTITY_LOAD_COLLISION_FLAG(sTargetPed.ped, TRUE) //unsure if this is needed, might be costly?
|
|
IF IS_PED_IN_GROUP(sTargetPed.ped)
|
|
REMOVE_PED_FROM_GROUP(sTargetPed.ped)
|
|
ENDIF
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(sTargetPed.ped, relGroupEnemy)
|
|
ADD_PED_FOR_DIALOGUE(sDialogue, 3, sTargetPed.ped, "DINAPOLI")
|
|
SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT(sTargetPed.ped, TRUE)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sTargetPed.ped, TRUE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SETUP_TARGET_PED_FOR_IN_GAME_START done") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// sets everything up for the start of the mission.
|
|
/// Called at the end of the intro mocap
|
|
PROC SETUP_FOR_START_OF_MISSION()
|
|
|
|
// Setup Nigel's Vehicle
|
|
SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[0]) // from initial setup
|
|
IF NOT DOES_ENTITY_EXIST(sNigelVehicle.vehicle)
|
|
CLEAR_AREA(sNigelVehicle.vSpawn, 2.0, TRUE)
|
|
CREATE_NIGEL_VEHICLE(sNigelVehicle.vehicle, sNigelVehicle.vSpawn, sNigelVehicle.fSpawnHeading, FALSE, TRUE)
|
|
CPRINTLN(DEBUG_MISSION, "created Nigel's vehicle in script, not mocap FC = ", GET_FRAME_COUNT())
|
|
SETUP_NIGEL_VEHICLE_FOR_IN_GAME_START()
|
|
ENDIF
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sNigelVehicle.model)
|
|
|
|
// Setup Target's Vehicle
|
|
SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[1]) // from initial setup
|
|
IF NOT DOES_ENTITY_EXIST(sTargetVehicle.vehicle)
|
|
CLEAR_AREA(sTargetVehicle.vSpawn, 2.0, TRUE)
|
|
sTargetVehicle.vehicle = CREATE_VEHICLE(sTargetVehicle.model, sTargetVehicle.vSpawn, sTargetVehicle.fSpawnHeading)
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
SET_ENTITY_COORDS(sTargetVehicle.vehicle, sTargetVehicle.vSpawn) // from uber recording
|
|
SET_ENTITY_QUATERNION(sTargetVehicle.vehicle, -0.0248, 0.0004, 0.8949, 0.4456) // from uber recording // heading 126.961 // rotation << -0.453279, 2.26519, 126.961 >>
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION, "created Target's vehicle in script, not mocap FC = ", GET_FRAME_COUNT())
|
|
SETUP_TARGET_VEHICLE_FOR_IN_GAME_START()
|
|
ENDIF
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sTargetVehicle.model)
|
|
|
|
// Setup Nigel and Mrs Thornhill (start in Nigel's vehicle)
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
// Mrs T
|
|
IF NOT DOES_ENTITY_EXIST(sMrsThornhillPed.ped)
|
|
sMrsThornhillPed.ped = CREATE_PED_INSIDE_VEHICLE(sNigelVehicle.vehicle, PEDTYPE_MISSION, sMrsThornhillPed.model, VS_BACK_RIGHT)
|
|
CPRINTLN(DEBUG_MISSION, "created Mrs T in script, not mocap FC = ", GET_FRAME_COUNT())
|
|
SETUP_MRS_THORNHILL_FOR_IN_GAME_START()
|
|
ENDIF
|
|
// Nigel
|
|
SAFE_DELETE_PED(sRCLauncherDataLocal.pedID[0]) // from initial setup
|
|
IF NOT DOES_ENTITY_EXIST(sNigelPed.ped)
|
|
sNigelPed.ped = CREATE_PED_INSIDE_VEHICLE(sNigelVehicle.vehicle, PEDTYPE_MISSION, sNigelPed.model, VS_FRONT_RIGHT)
|
|
CPRINTLN(DEBUG_MISSION, "created Nigel in script, not mocap FC = ", GET_FRAME_COUNT())
|
|
SETUP_NIGEL_FOR_IN_GAME_START()
|
|
ENDIF
|
|
ENDIF
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sMrsThornhillPed.model)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sNigelPed.model)
|
|
|
|
// Setup Target (start in Target's vehicle)
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF NOT DOES_ENTITY_EXIST(sTargetPed.ped)
|
|
sTargetPed.ped = CREATE_PED_INSIDE_VEHICLE(sTargetVehicle.vehicle, PEDTYPE_MISSION, sTargetPed.model, VS_DRIVER)
|
|
CPRINTLN(DEBUG_MISSION, "created Target ped in script, not mocap FC = ", GET_FRAME_COUNT())
|
|
SETUP_TARGET_PED_FOR_IN_GAME_START()
|
|
ENDIF
|
|
ENDIF
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sTargetPed.model)
|
|
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
ADD_PED_FOR_DIALOGUE(sDialogue, 2, PLAYER_PED_ID(), "TREVOR")
|
|
SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT(PLAYER_PED_ID(), TRUE)
|
|
ENDIF
|
|
|
|
//truck unloading at start location
|
|
IF NOT DOES_ENTITY_EXIST(sStartLocationVehicle[0].vehicle)
|
|
CLEAR_AREA(<< -1329.7417, -665.3537, 26.3413 >>, 2.0, TRUE)
|
|
sStartLocationVehicle[0].vehicle = CREATE_VEHICLE(sStartLocationVehicle[0].model, << -1329.7417, -665.3537, 26.3413 >>, 126.9722)
|
|
ENDIF
|
|
IF IS_VEHICLE_OK(sStartLocationVehicle[0].vehicle)
|
|
SET_ENTITY_QUATERNION(sStartLocationVehicle[0].vehicle, -0.0318, 0.0067, 0.8936, 0.4476)
|
|
IF NOT IS_VEHICLE_DOOR_FULLY_OPEN(sStartLocationVehicle[0].vehicle, SC_DOOR_REAR_LEFT)
|
|
SET_VEHICLE_DOOR_OPEN(sStartLocationVehicle[0].vehicle, SC_DOOR_REAR_LEFT)
|
|
ENDIF
|
|
IF NOT IS_VEHICLE_DOOR_FULLY_OPEN(sStartLocationVehicle[0].vehicle, SC_DOOR_REAR_RIGHT)
|
|
SET_VEHICLE_DOOR_OPEN(sStartLocationVehicle[0].vehicle, SC_DOOR_REAR_RIGHT)
|
|
ENDIF
|
|
SET_VEHICLE_INDICATOR_LIGHTS(sStartLocationVehicle[0].vehicle, TRUE, TRUE)
|
|
SET_VEHICLE_INDICATOR_LIGHTS(sStartLocationVehicle[0].vehicle, FALSE, TRUE)
|
|
ENDIF
|
|
|
|
//car parked at start location
|
|
IF NOT DOES_ENTITY_EXIST(sStartLocationVehicle[1].vehicle)
|
|
CLEAR_AREA(<< -1329.7509, -676.4864, 25.8557 >>, 2.0, TRUE)
|
|
sStartLocationVehicle[1].vehicle = CREATE_VEHICLE(sStartLocationVehicle[1].model, << -1329.7509, -676.4864, 25.8557 >>, 307.7227)
|
|
ENDIF
|
|
IF IS_VEHICLE_OK(sStartLocationVehicle[1].vehicle)
|
|
SET_ENTITY_QUATERNION(sStartLocationVehicle[1].vehicle, 0.0248, 0.0142, -0.4405, 0.8973)
|
|
ENDIF
|
|
|
|
//car pulls out at start location
|
|
IF NOT DOES_ENTITY_EXIST(sStartLocationVehicle[2].vehicle)
|
|
CLEAR_AREA(<<-1336.3171, -680.9752, 25.5144>>, 2.0, TRUE)
|
|
sStartLocationVehicle[2].vehicle = CREATE_VEHICLE(sStartLocationVehicle[2].model, <<-1336.3171, -680.9752, 25.5144>>, 307.7227)
|
|
ENDIF
|
|
IF IS_VEHICLE_OK(sStartLocationVehicle[2].vehicle)
|
|
SET_ENTITY_QUATERNION(sStartLocationVehicle[2].vehicle, 0.0269, 0.0079, -0.4791, 0.8773)
|
|
ENDIF
|
|
|
|
INT i = 0
|
|
REPEAT NIGEL2_TOTAL_START_AREA_SCRIPTED_VEHICLES i
|
|
IF IS_VEHICLE_OK(sStartLocationVehicle[i].vehicle)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sStartLocationVehicle[i].model)
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL tDebugName = "sStartLV"
|
|
tDebugName += i
|
|
SET_VEHICLE_NAME_DEBUG(sStartLocationVehicle[i].vehicle, tDebugName)
|
|
#ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
UPDATE_SCRIPTED_VEHICLES_AROUND_START_LOCATION(fMainPlaybackSpeed, vPlayerPos)
|
|
|
|
//back up fade in, if we had to fade out during loading of assets
|
|
IF bFinishedStageSkipping //however, don't fade if we are stage skipping
|
|
IF bHadToFadeOutToLoadMissionAssets
|
|
IF NOT IS_SCREEN_FADED_IN()
|
|
AND NOT IS_SCREEN_FADING_IN()
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME, FALSE) // backup fade in, mainly for repeat play purposes.
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SETUP_FOR_START_OF_MISSION - SAFE_FADE_SCREEN_IN_FROM_BLACK called as bHadToFadeOutToLoadMissionAssets and finished stage skipping", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// setup the state at the crash site, turning off peds vehicles in the area
|
|
/// PARAMS:
|
|
/// bCallClearArea - if TRUE clear areas will be called
|
|
PROC SETUP_CRASH_SITE_FOR_OUTRO_MOCAP(BOOL bCallClearArea = FALSE)
|
|
|
|
INT i
|
|
VECTOR vAreaMin = << 341.2, -645.83, 25.0 >>
|
|
VECTOR vAreaMax = << 429.1, -572.89, 35.0 >>
|
|
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(vAreaMin, vAreaMax, FALSE) // match the cleanup call coords
|
|
SET_ROADS_IN_ANGLED_AREA(<<418.283752,-571.662903,24.697943>>, <<362.025787,-663.139771,38.339985>>, 28.000000, FALSE, FALSE) // match the cleanup call coords - outro
|
|
IF bCallClearArea
|
|
REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(vAreaMin, vAreaMax)
|
|
CLEAR_ANGLED_AREA_OF_VEHICLES(<<418.283752,-571.662903,24.697943>>, <<362.025787,-663.139771,38.339985>>, 28.000000)
|
|
ENDIF
|
|
|
|
SET_PED_PATHS_IN_AREA(vAreaMin, vAreaMax, FALSE)
|
|
SET_PED_NON_CREATION_AREA(vAreaMin, vAreaMax)
|
|
|
|
// clean up the blocking area from earlier in the chase (stops global limit being pushed up)
|
|
FOR i = 0 TO (NIGEL2_TOTAL_SCENARIO_BLOCKING_AREAS_CHASE_ROUTE - 1)
|
|
IF i != 1 // don't remove the one at front of the hospital for now
|
|
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockingChaseRoute[i])
|
|
ENDIF
|
|
ENDFOR
|
|
scenarioBlockingOutroArea = ADD_SCENARIO_BLOCKING_AREA(vAreaMin, vAreaMax)
|
|
|
|
IF bCallClearArea
|
|
CLEAR_AREA_OF_OBJECTS(<< 395.24756, -615.01337, 27.87107 >>, 20.0)
|
|
CLEAR_AREA(<< 395.24756, -615.01337, 27.87107 >>, 20.0, TRUE)
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SETUP_CRASH_SITE_FOR_OUTRO_MOCAP - done with bCallClearArea = ", bCallClearArea, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// handles setting up the scenario blocking area during the chase
|
|
/// prevent target driving through peds without collision
|
|
PROC UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE(FLOAT fLocal_CurrentPlaybackTime)
|
|
|
|
INT i
|
|
SWITCH iScenarioBlockingAreaStage
|
|
|
|
//SET_PED_PATHS_IN_AREA(<< -1318.50049, -678.88257, 23.0 >>, << -1296.62781, -631.54492, 29.0 >>, FALSE)
|
|
//SET_PED_NON_CREATION_AREA(<< -1318.50049, -678.88257, 23.0 >>, << -1296.62781, -631.54492, 29.0 >>)
|
|
//scenarioBlockingIntroArea = ADD_SCENARIO_BLOCKING_AREA(<< -1318.50049, -678.88257, 23.0 >>, << -1296.62781, -631.54492, 29.0 >>)
|
|
CASE 0
|
|
// target just entering the pedestrian road
|
|
IF fLocal_CurrentPlaybackTime > 5000.0
|
|
|
|
SET_PED_NON_CREATION_AREA(<< -1332.35083, -763.45764, 10.0 >>, << -1229.14221, -654.35461, 42.0 >>)
|
|
|
|
iScenarioBlockingAreaStage++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE - iScenarioBlockingAreaStage++ =", iScenarioBlockingAreaStage, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
// target just entering second half of the pedestrian road
|
|
IF fLocal_CurrentPlaybackTime > 10000.0
|
|
|
|
SET_PED_NON_CREATION_AREA(<< -1274.14758, -842.63574, 10.0 >>, << -1139.83557, -703.74365, 42.0 >>)
|
|
|
|
iScenarioBlockingAreaStage++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE - iScenarioBlockingAreaStage++ =", iScenarioBlockingAreaStage, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
// stop uber cars continuing up the road and interfering with chase again on tunnel exit
|
|
IF fLocal_CurrentPlaybackTime > 40000.0
|
|
// cleanup the blocking areas for the pedestrian area at the start of the chase - setup in SETUP_CLEAR_AREAS_AND_VEHICLE_RESOLVE_FOR_INTRO_MOCAP()
|
|
FOR i = 0 TO (NIGEL2_TOTAL_SCENARIO_BLOCKING_AREAS_CHASE_ROUTE - 1)
|
|
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockingChaseRoute[i])
|
|
ENDFOR
|
|
|
|
SET_ROADS_IN_ANGLED_AREA(<<-668.363464,-658.380066,27.433815>>, <<-440.021973,-657.423767,40.251266>>, 40.000000, FALSE, FALSE) // cover exit from tunnel
|
|
|
|
iScenarioBlockingAreaStage++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE - iScenarioBlockingAreaStage++ =", iScenarioBlockingAreaStage, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
// sets up the entrance to the second pedestrian area where Di Napoli cuts over the road from the tunnel
|
|
IF fLocal_CurrentPlaybackTime > 54000.0
|
|
// cleanup the blocking areas for the pedestrian area at the start of the chase - setup in SETUP_CLEAR_AREAS_AND_VEHICLE_RESOLVE_FOR_INTRO_MOCAP()
|
|
FOR i = 0 TO (NIGEL2_TOTAL_SCENARIO_BLOCKING_AREAS_CHASE_ROUTE - 1)
|
|
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockingChaseRoute[i])
|
|
ENDFOR
|
|
|
|
// make sure ambient cars on this stretch get deleted if player in the underground to ensure veh don't smash into chase
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-513.487732,-598.495544,30.898241>>, <<-695.000977,-593.838440,19.307816>>, 60.000000) // covers majority of underground section
|
|
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-518.404114,-622.829346,32.301056>>, <<-608.405396,-622.358826,26.787561>>, 11.000000)
|
|
CLEAR_ANGLED_AREA_OF_VEHICLES(<<-668.363464,-658.380066,27.433815>>, <<-440.021973,-657.423767,40.251266>>, 40.000000, FALSE) // cover exit from tunnel
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE : cleared exit from tunnel area of vehicles") ENDIF #ENDIF
|
|
// B*1789860 - clear peds in pedestrian area who keep spawning - can' set non creation area earler since it's used in diff pos
|
|
CLEAR_AREA_OF_PEDS(<< -497.22577, -710.61609, 32.22013 >>, 5.85) // North on the path - side of underground
|
|
CLEAR_AREA_OF_PEDS(<< -498.18228, -719.31335, 32.21197 >>, 2.15) // near scenario bin
|
|
CLEAR_AREA_OF_PEDS(<< -497.90323, -724.97406, 32.21197 >>, 3.8) // south of above spot
|
|
CLEAR_AREA_OF_PEDS(<< -499.56677, -731.96655, 32.21197 >>, 7.3) // further south again
|
|
CPRINTLN(DEBUG_MISSION, "UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE : cleared peds at pedestrian area near underground!")
|
|
ENDIF
|
|
|
|
SET_PED_PATHS_IN_AREA(<< -496.28848, -681.55994, 25.0 >>, << -481.59882, -668.74115, 38.0 >>, FALSE)
|
|
SET_PED_NON_CREATION_AREA(<< -496.28848, -681.55994, 25.0 >>, << -481.59882, -668.74115, 38.0 >>)
|
|
|
|
// pedestrian area where player cuts across over the road from the tunnel
|
|
scenarioBlockingChaseRoute[0] = ADD_SCENARIO_BLOCKING_AREA(<< -497.21988, -679.97705, 22.01260 >>, << -486.81241, -672.01343, 41.80794 >>)
|
|
// continuing in that pedestrian along the chase route
|
|
scenarioBlockingChaseRoute[1] = ADD_SCENARIO_BLOCKING_AREA(<< -489.72855, -680.74554, 22.01260 >>, << -497.19778, -690.00702, 41.80794 >>)
|
|
iScenarioBlockingAreaStage++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE - iScenarioBlockingAreaStage++ =", iScenarioBlockingAreaStage, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
// sets up the exit from second pedestrian area where Di Napoli cuts over the road from the tunnel
|
|
IF fLocal_CurrentPlaybackTime > 61000.0
|
|
// cleanup previous blocking areas
|
|
FOR i = 0 TO (NIGEL2_TOTAL_SCENARIO_BLOCKING_AREAS_CHASE_ROUTE - 1)
|
|
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockingChaseRoute[i])
|
|
ENDFOR
|
|
|
|
// turn back on road from Road leading to tunnel exit
|
|
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<-668.363464,-658.380066,27.433815>>, <<-440.021973,-657.423767,40.251266>>, 40.000000) // cover exit from tunnel
|
|
|
|
// B* 1481336 - area where the ramp is leaving the pedestrian area
|
|
|
|
//SET_PED_PATHS_IN_AREA(<< -508.79080, -764.63538, 28.0 >>, << -488.04373, -711.80060, 38.0 >>, FALSE)
|
|
SET_PED_NON_CREATION_AREA(<< -508.79080, -764.63538, 28.0 >>, << -488.04373, -702.80060, 38.0 >>)
|
|
|
|
// slimer section covering the ramp
|
|
scenarioBlockingChaseRoute[0] = ADD_SCENARIO_BLOCKING_AREA(<< -503.09494, -754.96472, 29.0 >>, << -494.79437, -730.12964, 37.0 >>)
|
|
iScenarioBlockingAreaStage++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE - iScenarioBlockingAreaStage++ =", iScenarioBlockingAreaStage, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
// sets up area where Di Napoli goes into the car park
|
|
IF fLocal_CurrentPlaybackTime > 65000.0
|
|
// cleanup previous blocking areas
|
|
FOR i = 0 TO (NIGEL2_TOTAL_SCENARIO_BLOCKING_AREAS_CHASE_ROUTE - 1)
|
|
REMOVE_SCENARIO_BLOCKING_AREA(scenarioBlockingChaseRoute[i])
|
|
ENDFOR
|
|
SET_PED_PATHS_BACK_TO_ORIGINAL(<< -496.28848, -681.55994, 25.0 >>, << -481.59882, -668.74115, 38.0 >>)
|
|
|
|
SET_PED_PATHS_IN_AREA(<< -463.21530, -829.04749, 22.48120 >>, << -445.46454, -813.10107, 36.56588 >>, FALSE)
|
|
SET_PED_NON_CREATION_AREA(<< -463.21530, -829.04749, 22.48120 >>, << -445.46454, -813.10107, 36.56588 >>)
|
|
|
|
scenarioBlockingChaseRoute[0] = ADD_SCENARIO_BLOCKING_AREA(<< -497.21988, -679.97705, 22.01260 >>, << -486.81241, -672.01343, 41.80794 >>)
|
|
iScenarioBlockingAreaStage++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE - iScenarioBlockingAreaStage++ =", iScenarioBlockingAreaStage, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
// B*1533193 - block guards at hospital entrance
|
|
IF fLocal_CurrentPlaybackTime > 75000.0
|
|
// cleanup previous stage
|
|
SET_PED_PATHS_BACK_TO_ORIGINAL(<< -463.21530, -829.04749, 22.48120 >>, << -445.46454, -813.10107, 36.56588 >>)
|
|
|
|
// covering area in front of hospital doors [0] already used above, update SETUP_CRASH_SITE_FOR_OUTRO_MOCAP if index changes
|
|
scenarioBlockingChaseRoute[1] = ADD_SCENARIO_BLOCKING_AREA(<< 291.58481, -588.88062, 37.0 >>, << 303.76028, -579.58820, 48.0 >>)
|
|
|
|
iScenarioBlockingAreaStage++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE - iScenarioBlockingAreaStage++ =", iScenarioBlockingAreaStage, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 7
|
|
// heading through the hospital - setup crash site
|
|
IF fLocal_CurrentPlaybackTime > 114500.0
|
|
// cleanup previous stage
|
|
SETUP_CRASH_SITE_FOR_OUTRO_MOCAP(TRUE)
|
|
iScenarioBlockingAreaStage++
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE - iScenarioBlockingAreaStage++ =", iScenarioBlockingAreaStage, " FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// handles everything which needs to happen after END_REPLAY_SETUP() has been called
|
|
/// PARAMS:
|
|
/// eCurrentStage - which mission stage we are returning to
|
|
PROC REPLAY_SKIP_SETUP_UPON_RETURN_TO_GAMEPLAY(MISSION_STAGE eReturnToStage)
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SWITCH eReturnToStage
|
|
CASE MISSION_STAGE_CHASE_TARGET_IN_VEHICLE
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(22.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " REPLAY_SKIP_SETUP_UPON_RETURN_TO_GAMEPLAY : ", "MISSION_STAGE_CHASE_TARGET_IN_VEHICLE set gameplay cam heading 15.0 ", " FC : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
BREAK
|
|
CASE MISSION_STAGE_END_CUTSCENE_MOCAP
|
|
// preload the mocap do it kicks in straight away
|
|
IF eMissionSkipTargetStage = MISSION_STAGE_END_CUTSCENE_MOCAP
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
SAFE_TELEPORT_VEHICLE(sNigelVehicle.vehicle, << 391.08, -615.87, 28.33 >>, 333.66) // pos in outro mocap)
|
|
|
|
RC_REQUEST_MID_MISSION_CUTSCENE(tlOutroMocapName) // can't use RC_REQUEST_CUTSCENE in this instance, as it causes bug 1000899
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " REPLAY_SKIP_SETUP_UPON_RETURN_TO_GAMEPLAY : ", "RC_REQUEST_MID_MISSION_CUTSCENE : NMT_2_MCS_2 ", " FC : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
SET_MISSION_ENTITIES_COMP_VARIATIONS_FOR_OUTRO_MOCAP()
|
|
|
|
WHILE NOT RC_IS_CUTSCENE_OK_TO_START(TRUE)
|
|
RC_REQUEST_MID_MISSION_CUTSCENE(tlOutroMocapName) // can't use RC_REQUEST_CUTSCENE in this instance, as it causes bug 1000899
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " REPLAY_SKIP_SETUP_UPON_RETURN_TO_GAMEPLAY : ", "waiting on HAS_CUTSCENE_LOADED : NMT_2_MCS_2 ", " FC : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
SET_MISSION_ENTITIES_COMP_VARIATIONS_FOR_OUTRO_MOCAP()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Handles setup game to fulfil mission stage criteria so it can advance to the next stage
|
|
PROC SKIP_STAGE()
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
//implement switch statement based of eMissionStage
|
|
//which takes care of cleanup and setup for next stage.
|
|
VECTOR vTempPos
|
|
KILL_ANY_CONVERSATION()
|
|
CLEAR_PRINTS()
|
|
SWITCH eMissionStage
|
|
CASE MISSION_STAGE_INTRO_MOCAP_SCENE
|
|
IF eSubStage = SS_UPDATE //in script skips where we change the eSubStage, need to safe gaurd that the SS_SETUP has already had chance to run.
|
|
IF IS_CUTSCENE_PLAYING()
|
|
STOP_CUTSCENE()
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SKIP_STAGE : ", "MISSION_STAGE_INTRO_MOCAP_SCENE : ", " FC : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE MISSION_STAGE_CHASE_TARGET_IN_VEHICLE
|
|
IF eSubStage = SS_UPDATE //in script skips where we change the eSubStage, need to safe gaurd that the SS_SETUP has already had chance to run.
|
|
bDone_TargetStartChaseRoute = TRUE //stops playback getting started
|
|
|
|
SAFE_PUT_PED_INTO_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle, VS_FRONT_RIGHT)
|
|
SAFE_PUT_PED_INTO_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle, VS_BACK_RIGHT)
|
|
|
|
SAFE_PUT_PED_INTO_VEHICLE(sTargetPed.ped, sTargetVehicle.vehicle)
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
SET_ENTITY_COORDS_NO_OFFSET(sTargetVehicle.vehicle, <<393.4298, -621.3337, 28.4891>>)
|
|
SET_ENTITY_QUATERNION(sTargetVehicle.vehicle, -0.0081, -0.0061, 0.7994, -0.6007)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
REQUEST_ANIM_DICT("rcmnigel2") //to play head on horn anim on target in truck
|
|
WHILE NOT HAS_ANIM_DICT_LOADED("rcmnigel2")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SKIP_STAGE : ", "MISSION_STAGE_CHASE_TARGET_IN_VEHICLE : ", "loading anim dict - rcmnigel2 ", " FC : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
CREATE_VEHICLE_FOR_PLAYER_TO_USE_ON_MISSION_PASSED(TRUE, FALSE)
|
|
CLEAR_AREA_OF_VEHICLES(<< 393.38, -617.53, 27.91 >>, 50.0) //stops cars appearing at outro location when warping there
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
SAFE_TELEPORT_VEHICLE(sNigelVehicle.vehicle, <<364.7079, -608.3558, 27.7364>>, 246.4916) // << 384.26, -609.65, 28.51 >>, 227.32)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
// load world if target stage is the next one
|
|
IF bLoadedWorldForStageSkipping = FALSE
|
|
IF eMissionSkipTargetStage = MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()), 25.0, FLAG_COLLISIONS_MOVER | FLAG_MAPDATA)
|
|
bLoadedWorldForStageSkipping = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SKIP_STAGE : ", "MISSION_STAGE_CHASE_TARGET_IN_VEHICLE : ", "LOADED WORLD", " FC : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
// Added because info from Matt, uber recording isn't updated each frame in the skip because of waits so ambient traffic could appear.
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
CLEAR_AREA_OF_VEHICLES(GET_ENTITY_COORDS(PLAYER_PED_ID()), 150, FALSE)
|
|
eSubStage = SS_CLEANUP
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SKIP_STAGE : ", "MISSION_STAGE_CHASE_TARGET_IN_VEHICLE : ", " FC : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE
|
|
IF eSubStage = SS_UPDATE //in script skips where we change the eSubStage, need to safe gaurd that the SS_SETUP has already had chance to run.
|
|
SAFE_PUT_PED_INTO_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle, VS_FRONT_RIGHT)
|
|
SAFE_PUT_PED_INTO_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle, VS_BACK_RIGHT)
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
vTempPos = << 391.08, -615.87, 28.33 >> // GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(sTargetVehicle.vehicle, << 0.0, -5.0, 0.0 >>)
|
|
SAFE_TELEPORT_VEHICLE(sNigelVehicle.vehicle, vTempPos, 333.66) // pos in outro mocap)
|
|
|
|
// load world if target stage is the next one
|
|
IF bLoadedWorldForStageSkipping = FALSE
|
|
IF eMissionSkipTargetStage = MISSION_STAGE_END_CUTSCENE_MOCAP
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()), 25.0, FLAG_COLLISIONS_MOVER | FLAG_MAPDATA)
|
|
bLoadedWorldForStageSkipping = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SKIP_STAGE : ", "MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE : ", "LOADED WORLD", " FC : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
eSubStage = SS_CLEANUP
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SKIP_STAGE : ", "MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE : ", " FC : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE MISSION_STAGE_END_CUTSCENE_MOCAP
|
|
IF eSubStage = SS_UPDATE //in script skips where we change the eSubStage, need to safe gaurd that the SS_SETUP has already had chance to run.
|
|
IF IS_CUTSCENE_PLAYING()
|
|
STOP_CUTSCENE()
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SKIP_STAGE : ", "MISSION_STAGE_END_CUTSCENE_MOCAP : ", " FC : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
BREAK
|
|
DEFAULT
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Jumps to the stage selected
|
|
/// PARAMS:
|
|
/// eNewStage - stage to jump to
|
|
PROC JUMP_TO_STAGE(MISSION_STAGE eNewStage)
|
|
IF eMissionStage = eNewStage // end skip stage
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
VEHICLE_INDEX vehReplayPlayer = NULL
|
|
IF eMissionStage = MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE
|
|
OR eMissionStage = MISSION_STAGE_END_CUTSCENE_MOCAP
|
|
vehReplayPlayer = sNigelVehicle.vehicle
|
|
ENDIF
|
|
END_REPLAY_SETUP(vehReplayPlayer, VS_DRIVER, FALSE)
|
|
ENDIF
|
|
REPLAY_SKIP_SETUP_UPON_RETURN_TO_GAMEPLAY(eMissionStage)
|
|
SET_MUSIC_EVENTS_FOR_MISSION_STAGE_SKIPS(eMissionStage)
|
|
//B* 1468238 - don't fade back in here when skipping to mocap (let the mocap stage handle it)
|
|
IF eMissionStage = MISSION_STAGE_END_CUTSCENE_MOCAP
|
|
RC_END_Z_SKIP(DEFAULT, FALSE)
|
|
// don't reset the gameplay cams if we are coming out of the mocap
|
|
ELIF eMissionStage = MISSION_STAGE_CHASE_TARGET_IN_VEHICLE
|
|
RC_END_Z_SKIP(FALSE)
|
|
ELSE
|
|
RC_END_Z_SKIP()
|
|
ENDIF
|
|
bFinishedStageSkipping = TRUE
|
|
bLoadedWorldForStageSkipping = FALSE
|
|
// ensure we are fully faded in if we have skipped to the mission passed stage, since the mission passed GUI doesn't display if not (seems to need a frame wait too)
|
|
IF eMissionStage = MISSION_STAGE_MISSION_PASSED
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK()
|
|
ENDIF
|
|
ELSE
|
|
SKIP_STAGE()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Reset the mission, cleanups the current state and set's the mission up again
|
|
/// USED by the mission replay checkpoint setup and Debug skips
|
|
PROC RESET_MISSION()
|
|
MISSION_CLEANUP(TRUE, FALSE)
|
|
IF NOT IS_REPLAY_BEING_SET_UP() // don't allow music events to trigger during replay setup / stage skips
|
|
AND bFinishedStageSkipping
|
|
WHILE NOT SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_MISSION_FAIL")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "RESET_MISSION - killing music cues") ENDIF #ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDIF
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE) //not done in normal cleanup as this brakes my interpolate camera when mission ends.
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
ENDIF
|
|
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0)
|
|
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD // should only get called in debug
|
|
//set the initial scene back up
|
|
eInitialSceneStage = IS_REQUEST_SCENE
|
|
WHILE NOT SetupScene_NIGEL_2(sRCLauncherDataLocal)
|
|
CPRINTLN(DEBUG_MISSION, " RESET_MISSION - waiting on SetupScene_NIGEL_2")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
|
|
RC_TakeEntityOwnership(sRCLauncherDataLocal)
|
|
SETUP_AREA_FOR_MISSION(RC_NIGEL_2, FALSE) // need to turn this off in this instance since launcher cleanup won't get called to do it
|
|
#ENDIF
|
|
//re do mission initialization
|
|
INIT_MISSION()
|
|
SET_STAGE(MISSION_STAGE_INTRO_MOCAP_SCENE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "RESET_MISSION - done") ENDIF #ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Perform a Z skip. Used by the mission checkpoints and the debug Z skip function
|
|
/// PARAMS:
|
|
/// iNewStage - Mission stage we want to skip to
|
|
/// bResetMission - used when we go backwards in mission flow. If false we also don't stop the active cutscene in RC_START_Z_SKIP, instead handled in SKIP_STAGE to fix bug 1006740
|
|
PROC DO_Z_SKIP(INT iNewStage, BOOL bResetMission = FALSE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DO_Z_SKIP with parameters - iNewStage = ", iNewStage, " bResetMission = ", bResetMission) ENDIF #ENDIF
|
|
RC_START_Z_SKIP(bResetMission)
|
|
// knock out any active music event
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_MISSION_FAIL")
|
|
ENDIF
|
|
IF bResetMission
|
|
RESET_MISSION()
|
|
ENDIF
|
|
eMissionSkipTargetStage = INT_TO_ENUM(MISSION_STAGE, iNewStage)
|
|
bFinishedStageSkipping = FALSE
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
bLoadedWorldForStageSkipping = TRUE
|
|
ELSE
|
|
bLoadedWorldForStageSkipping = FALSE
|
|
ENDIF
|
|
// load world for the mission start area if we are resetting the mission to the intro mocap. Moved here from script skip stage to fix bug 1006740 - mocap exit states not getting set as game is waiting on world to load before getting to check
|
|
// basically if you press CROSS to confirm which stage in the z menu, it skipped the mocap but couldn't sent exit states as it was waiting for world to load first.
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
IF eMissionSkipTargetStage = MISSION_STAGE_INTRO_MOCAP_SCENE
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
SAFE_TELEPORT_PED(PLAYER_PED_ID(), <<-1309.0155, -641.8671, 25.5017>>, 242.3463) //setup player in spot which matches mocap end
|
|
WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()), 50.0, FLAG_COLLISIONS_MOVER | FLAG_MAPDATA)
|
|
bLoadedWorldForStageSkipping = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DO_Z_SKIP - LOADED WORLD ready at mission start area framecount : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DO_Z_SKIP") ENDIF #ENDIF
|
|
JUMP_TO_STAGE(eMissionSkipTargetStage)
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// DEBUG - J,P and Z skip stuff
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
/// PURPOSE:
|
|
/// Check for S, F, J and P skips
|
|
PROC DEBUG_Check_Debug_Keys()
|
|
INT iNewStage
|
|
// Check for Pass
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
WHILE NOT SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_MISSION_FAIL")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "RESET_MISSION - killing music cues") ENDIF #ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
ENDIF
|
|
SET_STAGE(MISSION_STAGE_MISSION_PASSED)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "S SKIP") ENDIF #ENDIF
|
|
Script_Passed()
|
|
ENDIF
|
|
// Check for Fail
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "F SKIP") ENDIF #ENDIF
|
|
SET_STAGE(MISSION_STAGE_MISSION_FAILED_WAIT_FOR_FADE)
|
|
ENDIF
|
|
// Check for Skip forward
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J))
|
|
iNewStage = ENUM_TO_INT(eMissionStage) + 1
|
|
DO_Z_SKIP(iNewStage, FALSE) //perform a Z skip to the next stage, without the mission reset
|
|
//SKIP_STAGE()
|
|
ENDIF
|
|
// Check for Skip backwards
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P))
|
|
iNewStage = ENUM_TO_INT(eMissionStage)-1
|
|
IF iNewStage > - 1
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "new stage = ", iNewStage) ENDIF #ENDIF
|
|
DO_Z_SKIP(iNewStage, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
// Z skip menu
|
|
IF LAUNCH_MISSION_STAGE_MENU(mSkipMenu, iNewStage)
|
|
// if we are skipping forward in the mission stages, just J skip rather than a full mission reset
|
|
// make sure additional stages are handled here! These sit at the end of the enum so need to be dealt with differently.
|
|
IF (iNewStage <= ENUM_TO_INT(eMissionStage))
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Z SKIP : new stage = ", iNewStage, " ResetMission = ", TRUE) ENDIF #ENDIF
|
|
DO_Z_SKIP(iNewStage, TRUE)
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Z SKIP : new stage = ", iNewStage, " ResetMission = ", FALSE) ENDIF #ENDIF
|
|
DO_Z_SKIP(iNewStage, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
/// PURPOSE:
|
|
/// setups up the scenario blocking area, and clear areas needed when the mocap starts
|
|
/// Also performs the player vehicle resolves for the intro
|
|
PROC SETUP_CLEAR_AREAS_AND_VEHICLE_RESOLVE_FOR_INTRO_MOCAP()
|
|
|
|
CPRINTLN(DEBUG_MISSION, "DOES SNAPSHOT VEHICLE EXIST = ", DOES_ENTITY_EXIST(g_startSnapshot.mVehicleIndex))
|
|
|
|
VECTOR vPlayerLastVehicleRespotPosition = << -1290.00, -646.10, 26.05 >>
|
|
Float fPlayerLastVehicleRespotHeading = 307.66
|
|
//GET_CAR_RESPOT_POS_FOR_NEAREST_SAVEHOUSE(GET_ENTITY_COORDS(PLAYER_PED_ID()), CHAR_TREVOR, vPlayerLastVehicleRespotPosition, fPlayerLastVehicleRespotHeading) // back at safehouse setup
|
|
|
|
// main road mission triggers on including Nigel's position
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<-1311.409424,-648.413330,24.925262>>, <<-1289.027588,-632.042969,29.552197>>, 17.5,
|
|
vPlayerLastVehicleRespotPosition, fPlayerLastVehicleRespotHeading, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR(), TRUE, FALSE)
|
|
// pedestrian road at the start of the chase
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<-1319.689819,-655.777344,29.458387>>, <<-1184.461304,-834.820068,12.343782>>, 30.0,
|
|
vPlayerLastVehicleRespotPosition, fPlayerLastVehicleRespotHeading, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR(), TRUE, FALSE)
|
|
CPRINTLN(DEBUG_MISSION, "SETUP_CLEAR_AREAS_AND_VEHICLE_RESOLVE_FOR_INTRO_MOCAP - finished vehicle resolves - DOES SNAPSHOT VEHICLE EXIST = ", DOES_ENTITY_EXIST(g_startSnapshot.mVehicleIndex), " framecount : ", GET_FRAME_COUNT())
|
|
|
|
// set the vehicle the player triggered the mission in to regenerate
|
|
IF IS_REPLAY_START_VEHICLE_UNDER_SIZE_LIMIT(<<0,0,0>>, TRUE)
|
|
SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(vPlayerLastVehicleRespotPosition, fPlayerLastVehicleRespotHeading, FALSE)
|
|
//SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(vPlayerLastVehicleRespotPosition, fPlayerLastVehicleRespotHeading, TRUE, CHAR_TREVOR) // back at safehouse setup
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "* SETUP_CLEAR_AREAS_AND_VEHICLE_RESOLVE_FOR_INTRO_MOCAP - vehicle gen setup framecount : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "* SETUP_CLEAR_AREAS_AND_VEHICLE_RESOLVE_FOR_INTRO_MOCAP - vehicle to big to setup vehicle gen! framecount : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
|
|
//Intro Cutscene area
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< -1409.34351, -756.38098, 17.59896 >>, << -1239.14758, -587.12195, 31.25266 >>, FALSE) // match the cleanup call coords
|
|
REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(<< -1409.34351, -756.38098, 17.59896 >>, << -1239.14758, -587.12195, 31.25266 >>)
|
|
SET_ROADS_IN_ANGLED_AREA(<<-1415.903931,-732.548889,17.545492>>, <<-1236.628174,-601.026489,31.153446>>, 23.000000, FALSE, FALSE) // match the cleanup call coords
|
|
CLEAR_ANGLED_AREA_OF_VEHICLES(<<-1415.903931,-732.548889,17.545492>>, <<-1236.628174,-601.026489,31.153446>>, 23.000000, FALSE, FALSE, FALSE, TRUE, TRUE) // near side of the main road
|
|
|
|
SET_PED_PATHS_IN_AREA(<< -1318.50049, -678.88257, 23.0 >>, << -1296.62781, -631.54492, 29.0 >>, FALSE)
|
|
SET_PED_NON_CREATION_AREA(<< -1318.50049, -678.88257, 23.0 >>, << -1296.62781, -631.54492, 29.0 >>)
|
|
scenarioBlockingIntroArea = ADD_SCENARIO_BLOCKING_AREA(<< -1318.50049, -678.88257, 23.0 >>, << -1296.62781, -631.54492, 29.0 >>)
|
|
CLEAR_AREA_OF_OBJECTS(<< -1297.80, -637.42, 25.55 >>, 16.0)
|
|
// pedestrian area at start of the chase - first section (middle road when you turn onto shopping street
|
|
scenarioBlockingChaseRoute[0] = ADD_SCENARIO_BLOCKING_AREA(<< -1315.67981, -682.76141, 23.24123 >>, << -1295.26648, -670.37604, 27.97680 >>)
|
|
CLEAR_AREA(<< -1305.33203, -676.37390, 25.79325 >>, 10.0, TRUE)
|
|
// pedestrian area at start of the chase - part way down first section on east side road
|
|
scenarioBlockingChaseRoute[1] = ADD_SCENARIO_BLOCKING_AREA(<< -1286.90613, -697.55927, 21.73920 >>, << -1279.69836, -691.58759, 26.33636 >>)
|
|
CLEAR_AREA(<< -1287.70203, -698.19574, 27.50166 >>, 10.0, TRUE)
|
|
// pedestrian area at start of the chase - first open section
|
|
scenarioBlockingChaseRoute[2] = ADD_SCENARIO_BLOCKING_AREA(<< -1270.72009, -723.89026, 19.46898 >>, << -1262.89795, -718.27856, 24.43682 >>)
|
|
CLEAR_AREA(<< -1269.86023, -722.46637, 21.54627 >>, 8.0, TRUE)
|
|
// pedestrian area at start of the chase - infront of second section
|
|
scenarioBlockingChaseRoute[3] = ADD_SCENARIO_BLOCKING_AREA(<< -1268.05750, -731.51825, 18.92047 >>, << -1263.57446, -727.55023, 24.05783 >>)
|
|
CLEAR_AREA(<< -1266.43066, -728.92267, 21.08542 >>, 2.5, TRUE)
|
|
// pedestrian area at start of the chase - second open section (not including bottom clusters)
|
|
scenarioBlockingChaseRoute[3] = ADD_SCENARIO_BLOCKING_AREA(<< -1237.02380, -777.42224, 15.58289 >>, << -1221.88904, -764.59692, 20.58871 >>)
|
|
CLEAR_AREA(<< -1231.44055, -770.94794, 17.70891 >>, 8.5, TRUE)
|
|
// pedestrian area at start of the chase - bottom of second open section
|
|
scenarioBlockingChaseRoute[4] = ADD_SCENARIO_BLOCKING_AREA(<< -1222.44775, -786.73486, 13.60073 >>, << -1215.77295, -780.20215, 20.43715 >>)
|
|
CLEAR_AREA(<< -1222.00769, -783.68341, 16.73119 >>, 7.5, TRUE)
|
|
|
|
// B*1763717 - clear area at junction of vehicles sine these turn into the road where nodes are blocked
|
|
CLEAR_AREA_OF_VEHICLES(<< -1459.2, -736.9, 23.6 >>, 50.0, FALSE, FALSE, FALSE, TRUE) // Junction turning left onto scene road from North West
|
|
CLEAR_AREA_OF_VEHICLES(<< -1332.2, -537.6, 31.5 >>, 30.0, FALSE, FALSE, FALSE, TRUE) // road behind where Nigel is (North)
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// Mission Stages
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Trevors spots Nigel on the street, Mrs Thornhill has seen Al Di Napoli.
|
|
/// Nigel asks Trevor to help them get Al Di Napoli "somewhere prviate so they can talk"
|
|
PROC INTRO_MOCAP_SCENE()
|
|
|
|
SWITCH eSubStage
|
|
// ------------------------------------------
|
|
CASE SS_SETUP
|
|
// don't request the mocap if we are skipping past this stage
|
|
IF NOT bFinishedStageSkipping
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
SAFE_TELEPORT_PED(PLAYER_PED_ID(), <<-1309.0155, -641.8671, 25.5017>>, 242.3463) //setup player in spot which matches mocap end
|
|
// load world if target stage is the next stage
|
|
IF bLoadedWorldForStageSkipping = FALSE
|
|
IF eMissionSkipTargetStage = MISSION_STAGE_CHASE_TARGET_IN_VEHICLE
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()), 50.0, FLAG_COLLISIONS_MOVER | FLAG_MAPDATA)
|
|
bLoadedWorldForStageSkipping = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE : SS_SETUP - bFinishedStageSkipping - LOADED WORLD framecount : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
SAFE_TELEPORT_PED(PLAYER_PED_ID(), <<-1309.0155, -641.8671, 25.5017>>, 242.3463, TRUE, TRUE) //second attempt put the player on the floor B* 1076463
|
|
ENDIF
|
|
// remove the temporary RC entities which were in the initial scene
|
|
SAFE_DELETE_PED(sRCLauncherDataLocal.pedID[0])
|
|
SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[0])
|
|
SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[1])
|
|
|
|
SETUP_CLEAR_AREAS_AND_VEHICLE_RESOLVE_FOR_INTRO_MOCAP()
|
|
LOAD_MISSION_ASSETS(TRUE)
|
|
SETUP_FOR_START_OF_MISSION()
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(sNigelVehicle.vehicle) // ensure it's positioned correctly to match mocap cut
|
|
ENDIF
|
|
UPDATE_SCRIPTED_VEHICLES_AROUND_START_LOCATION(fMainPlaybackSpeed, vPlayerPos)
|
|
SETUP_UBER_PLAYBACK()
|
|
CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - SS_SETUP done for bFinishedStageSkipping FC = ", GET_FRAME_COUNT())
|
|
eSubStage = SS_CLEANUP
|
|
ELSE
|
|
RC_REQUEST_CUTSCENE("NMT_2_RCM")
|
|
|
|
// B*1347748 - set Di Napoli to trouser's variation
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION(sSceneHandle_AlDiNapoli, PED_COMP_LEG, 0, 0, sTargetPed.model) // default now has pants on show! so set trousers version for mocap
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - SET_CUTSCENE_PED_COMPONENT_VARIATION Di Napoli trousers FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
|
|
IF RC_IS_CUTSCENE_OK_TO_START(TRUE)
|
|
|
|
// reset the vehicles positions from the initial scene incase the player had tampered with them B*1079638
|
|
// nigel's car
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.vehID[0])
|
|
ASSIGN_VEHICLE_INDEX(sNigelVehicle.vehicle, sRCLauncherDataLocal.vehID[0])
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - SS_SETUP assigned sRCLauncherData.vehID[0] as Nigel vehicle") ENDIF #ENDIF
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(sNigelVehicle.vehicle)
|
|
SET_VEHICLE_FIXED(sNigelVehicle.vehicle)
|
|
SET_ENTITY_PROOFS(sNigelVehicle.vehicle, FALSE, FALSE, FALSE, FALSE, FALSE) // B*1281090 - initial scene set on, but turned back off when getting handle
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - SS_SETUP reset Nigel vehicle") ENDIF #ENDIF
|
|
ENDIF
|
|
//Target vehicle
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.vehID[1])
|
|
ASSIGN_VEHICLE_INDEX(sTargetVehicle.vehicle, sRCLauncherDataLocal.vehID[1])
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - SS_SETUP assigned sRCLauncherData.vehID[1] as Target vehicle") ENDIF #ENDIF
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(sTargetVehicle.vehicle)
|
|
SET_VEHICLE_FIXED(sTargetVehicle.vehicle) // potentially need to remove this and just have the mocap create me some new vehicles!
|
|
SET_ENTITY_PROOFS(sTargetVehicle.vehicle, FALSE, FALSE, FALSE, FALSE, FALSE) // B*1281090 - initial scene set on, but turned back off when getting handle
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - SS_SETUP reset Target's vehicle") ENDIF #ENDIF
|
|
ENDIF
|
|
|
|
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), sSceneHandle_Trevor, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sNigelPed.ped, sSceneHandle_Nigel, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, sNigelPed.model)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sMrsThornhillPed.ped, sSceneHandle_MrsThornhill, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, sMrsThornhillPed.model)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sTargetPed.ped, sSceneHandle_AlDiNapoli, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, sTargetPed.model)
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sNigelVehicle.vehicle, sSceneHandle_NigelVehicle, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - registering Nigel's vehicle existing entity to be animated by mocap")
|
|
ELSE
|
|
SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[0])
|
|
SAFE_DELETE_VEHICLE(sNigelVehicle.vehicle)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sNigelVehicle.vehicle, sSceneHandle_NigelVehicle, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, sNigelVehicle.model)
|
|
CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - registering Nigel's vehicle new entity to be created by mocap")
|
|
ENDIF
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sTargetVehicle.vehicle, sSceneHandle_AlDiNapoliVehicle, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - registering Target's vehicle existing entity to be animated by mocap")
|
|
ELSE
|
|
SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[1])
|
|
SAFE_DELETE_VEHICLE(sTargetVehicle.vehicle)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sTargetVehicle.vehicle, sSceneHandle_AlDiNapoliVehicle, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, sTargetVehicle.model)
|
|
CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - registering Target's vehicle new entity to be created by mocap")
|
|
ENDIF
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME, FALSE) // backup fade in, mainly for repeat play purposes.
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW)
|
|
|
|
START_CUTSCENE()
|
|
WAIT(0) //added because the cutscene doesn't start straight away. This ensures peds / cars aren't visibly cleared.
|
|
|
|
RC_CLEANUP_LAUNCHER() // ensure called same frame as mission blocking area are setup
|
|
|
|
RC_START_CUTSCENE_MODE(<< -1310.70, -640.22, 26.54 >>, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE) //has to be after start_cutscene and wait(0)
|
|
SETUP_CLEAR_AREAS_AND_VEHICLE_RESOLVE_FOR_INTRO_MOCAP()
|
|
|
|
// remove the temporary RC entities which were in the initial scene
|
|
SAFE_DELETE_PED(sRCLauncherDataLocal.pedID[0])
|
|
//SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[0])
|
|
//SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[1])
|
|
|
|
// B*1247905 - limit density for framerate rest of the scene
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
|
|
|
|
LOAD_MISSION_ASSETS()
|
|
UPDATE_SCRIPTED_VEHICLES_AROUND_START_LOCATION(fMainPlaybackSpeed, vPlayerPos)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - SS_SETUP done")
|
|
eSubStage = SS_UPDATE
|
|
ELSE
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "WAITING FOR INTRO MOCAP TO LOAD - NMT_2_RCM") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_UPDATE
|
|
UPDATE_SCRIPTED_VEHICLES_AROUND_START_LOCATION(fMainPlaybackSpeed, vPlayerPos)
|
|
|
|
// Get handle to Nigel ped in the mocap
|
|
IF NOT DOES_ENTITY_EXIST(sNigelPed.ped)
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sSceneHandle_Nigel))
|
|
sNigelPed.ped = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sSceneHandle_Nigel))
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - sNigelPed.ped - got handle to mocap registered entity FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
// Get handle to Nigel ped in the mocap
|
|
IF NOT DOES_ENTITY_EXIST(sMrsThornhillPed.ped)
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sSceneHandle_MrsThornhill))
|
|
sMrsThornhillPed.ped = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sSceneHandle_MrsThornhill))
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - sMrsThornhillPed.ped - got handle to mocap registered entity FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
// Get handle to target ped in the mocap
|
|
IF NOT DOES_ENTITY_EXIST(sTargetPed.ped)
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sSceneHandle_AlDiNapoli))
|
|
sTargetPed.ped = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sSceneHandle_AlDiNapoli))
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - sTargetPed.ped - got handle to mocap registered entity FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
// Get handle to Nigel's vehicle in the mocap
|
|
IF NOT DOES_ENTITY_EXIST(sNigelVehicle.vehicle)
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sSceneHandle_NigelVehicle))
|
|
sNigelVehicle.vehicle = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sSceneHandle_NigelVehicle))
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - sNigelVehicle.vehicle - got handle to mocap registered entity FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
// Get handle to target's vehicle in the mocap
|
|
IF NOT DOES_ENTITY_EXIST(sTargetVehicle.vehicle)
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sSceneHandle_AlDiNapoliVehicle))
|
|
sTargetVehicle.vehicle = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sSceneHandle_AlDiNapoliVehicle))
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - sTargetVehicle.vehicle - got handle to mocap registered entity FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Set exit state for Nigel, Mrs T and Nigel's vehicle
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
AND IS_PED_UNINJURED(sNigelPed.ped)
|
|
AND IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_Nigel)
|
|
REPLAY_STOP_EVENT()
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle)
|
|
SET_PED_INTO_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle, VS_FRONT_RIGHT)
|
|
//FORCE_PED_AI_AND_ANIMATION_UPDATE(sNigelPed.ped)
|
|
//FORCE_PED_MOTION_STATE(sNigelPed.ped, MS_DO_NOTHING, FALSE, FAUS_CUTSCENE_EXIT)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - ", " set exit state for Nigel put in his car in ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - ", " set exit state for Nigel in ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
SETUP_NIGEL_FOR_IN_GAME_START()
|
|
ENDIF
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_MrsThornhill)
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle)
|
|
SET_PED_INTO_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle, VS_BACK_RIGHT)
|
|
//FORCE_PED_AI_AND_ANIMATION_UPDATE(sMrsThornhillPed.ped)
|
|
//FORCE_PED_MOTION_STATE(sMrsThornhillPed.ped, MS_DO_NOTHING, FALSE, FAUS_CUTSCENE_EXIT)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - ", " set exit state for Mrs T put in his car in ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - ", " set exit state for Mrs T in ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
SETUP_MRS_THORNHILL_FOR_IN_GAME_START()
|
|
ENDIF
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_NigelVehicle)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - ", " set exit state for Nigel vehicle wcTF in ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
SETUP_NIGEL_VEHICLE_FOR_IN_GAME_START()
|
|
SET_VEHICLE_DOORS_SHUT(sNigelVehicle.vehicle, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(sNigelVehicle.vehicle)
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(sNigelVehicle.vehicle) // B*1404500 - stops doors staying open
|
|
ENDIF
|
|
// B*1546501 - stops vehicle pop after mocap - set this everyframe as soon as possible before exit state / end of mocap until a little while after
|
|
SET_FORCE_HD_VEHICLE(sNigelVehicle.vehicle, TRUE)
|
|
bSetNigelVehicleHDForMocapExit = TRUE
|
|
ENDIF
|
|
|
|
// Set exit state for Al Di Napoli
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
AND IS_PED_UNINJURED(sTargetPed.ped)
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_AlDiNapoli)
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(sTargetPed.ped, sTargetVehicle.vehicle)
|
|
SET_PED_INTO_VEHICLE(sTargetPed.ped, sTargetVehicle.vehicle, VS_DRIVER)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - ", " set exit state for Al Di Napoli put in his car in ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
SETUP_TARGET_PED_FOR_IN_GAME_START()
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - ", " set exit state for Al Di Napoli in ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_AlDiNapoliVehicle)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - ", " set exit state for Al Di Napoli vehicle in ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
SETUP_TARGET_VEHICLE_FOR_IN_GAME_START()
|
|
SET_VEHICLE_DOORS_SHUT(sTargetVehicle.vehicle, TRUE)
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(sTargetVehicle.vehicle) // B*1404500 - stops doors staying open
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(22.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_INTRO_MOCAP_SCENE - ", " set exit state for camera (H = 15.0 | P = 0.0) in ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
AND IS_SCREEN_FADED_OUT()
|
|
// NOTE: if this gets removed consider moving SETUP_UBER_PLAYBACK() call or at least making sure vehicle are cleared for a skipped cutscene
|
|
CLEAR_AREA_OF_VEHICLES(<<-1312.5560, -664.3428, 25.5716>>, 150) //larger area for skipping since we are faded down anyway
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Clear cars - skipped over the mocap FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_CUTSCENE_PLAYING()
|
|
CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - SS_UPDATE - mocap cutscene finished FC = ", GET_FRAME_COUNT())
|
|
LOAD_MISSION_ASSETS(TRUE)
|
|
SETUP_FOR_START_OF_MISSION()
|
|
SETUP_UBER_PLAYBACK(FALSE)
|
|
eSubStage = SS_CLEANUP
|
|
ELSE
|
|
// B*1366548 - prevent cutscene skip during blend out
|
|
IF GET_CUTSCENE_TIME() >= 104000
|
|
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_SKIP_CUTSCENE)
|
|
ENDIF
|
|
// B*1359637 - prevent ambient cars spawning in distance during some shots
|
|
// B*1506934 - prevent ambient peds spawning in distance during same shots
|
|
IF GET_CUTSCENE_TIME() > 900
|
|
AND GET_CUTSCENE_TIME() < 1480
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
ELSE // B*1247905 - limit density for framerate rest of the scene
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
|
|
ENDIF
|
|
LOAD_MISSION_ASSETS()
|
|
ENDIF
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_CLEANUP
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
// B*1546501 - stops vehicle pop after mocap - set this everyframe as soon as possible before exit state / end of mocap until a little while after
|
|
SET_FORCE_HD_VEHICLE(sNigelVehicle.vehicle, TRUE)
|
|
bSetNigelVehicleHDForMocapExit = TRUE
|
|
ENDIF
|
|
IF IS_CUTSCENE_PLAYING()
|
|
STOP_CUTSCENE()
|
|
ELSE
|
|
IF HAS_CUTSCENE_LOADED()
|
|
REMOVE_CUTSCENE()
|
|
ENDIF
|
|
IF bFinishedStageSkipping //only do this if we aren't stage skipping
|
|
RC_END_CUTSCENE_MODE()
|
|
SET_MULTIHEAD_SAFE(FALSE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "RC Nigel 2 : ", "INTRO_MOCAP_SCENE - SS_CLEANUP - RC_END_CUTSCENE_MODE() called as not skipping stage") ENDIF #ENDIF
|
|
ENDIF
|
|
bForceTargetblipFlashThisFrame = FALSE // initial set to false
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
|
|
UPDATE_SCRIPTED_VEHICLES_AROUND_START_LOCATION(fMainPlaybackSpeed, vPlayerPos)
|
|
SET_STAGE(MISSION_STAGE_CHASE_TARGET_IN_VEHICLE) // MISSION_STAGE_CHASE_TARGET_IN_VEHICLE //MISSION_STAGE_DEBUG
|
|
CPRINTLN(DEBUG_MISSION, "INTRO_MOCAP_SCENE - SS_CLEANUP done")
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// car chases where Trevor, Nigel and Mrs Thornhill drives after Al Di Napoli
|
|
PROC CHASE_TARGET_IN_VEHICLE()
|
|
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3) // lower chance of peds interfering in route
|
|
|
|
SWITCH eSubStage
|
|
// ------------------------------------------
|
|
CASE SS_SETUP
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
AND IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sTargetPed.ped, TRUE) //BUT HE STILL GETS OUT OF THE VEHICLE IF ITS NOT DRIVEABLE!
|
|
SET_PED_RESET_FLAG(sTargetPed.ped, PRF_UseFastEnterExitVehicleRates, TRUE)
|
|
ADD_ENTITY_TO_AUDIO_MIX_GROUP(sTargetVehicle.vehicle, "NIGEL_02_CHASE_CAR_MG")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " NIGEL 02 - AUDIO_SCENE target vehicle added : NIGEL_02_CHASE ", "***") ENDIF #ENDIF
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sMrsThornhillPed.ped, TRUE)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(sNigelPed.ped)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sNigelPed.ped, TRUE)
|
|
ENDIF
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
IF NOT bStatTracker_IsNigelVehicleDamageStatActive
|
|
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(sNigelVehicle.vehicle,NI2_VEHICLE_DAMAGE) // begin tracking nigel's vehicle damage for stats
|
|
bStatTracker_IsNigelVehicleDamageStatActive = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "CHASE_TARGET_IN_VEHICLE - INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(sNigelVehicle.vehicle)") ENDIF #ENDIF
|
|
ENDIF
|
|
// B*1546501 - stops vehicle pop after mocap - set this everyframe as soon as possible before exit state / end of mocap until a little while after
|
|
SET_FORCE_HD_VEHICLE(sNigelVehicle.vehicle, TRUE)
|
|
bSetNigelVehicleHDForMocapExit = TRUE
|
|
ENDIF
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 15.0, REPLAY_IMPORTANCE_LOW)
|
|
|
|
UPDATE_SCRIPTED_VEHICLES_AROUND_START_LOCATION(fMainPlaybackSpeed, vPlayerPos)
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_ForceDirectEntry, TRUE) // ensure player uses direct door access as per bug 1044490
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID()) // clear this ready to be used by player injuring / killing someone inside the hospital checks
|
|
CPRINTLN(DEBUG_MISSION, "CHASE_TARGET_IN_VEHICLE - SS_SETUP done")
|
|
eSubStage = SS_UPDATE
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_UPDATE
|
|
MANAGE_TRIGGER_MUSIC_EVENTS_DURING_CHASE(NIGEL2_MUSIC_EVENT_START)
|
|
MANAGE_HOSPITAL_STATE_DURING_CHASE()
|
|
bForceTargetblipFlashThisFrame = FALSE // initial set to false
|
|
|
|
// used by mission fail checks, dialogue triggers, uber recording rubberbanding
|
|
IF DOES_ENTITY_EXIST(sTargetVehicle.vehicle)
|
|
fCurrentChaseDistance = VDIST(vPlayerPos, GET_ENTITY_COORDS(sTargetVehicle.vehicle, FALSE))
|
|
ENDIF
|
|
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
/*
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
IF (GET_VEHICLE_ENGINE_HEALTH(sNigelVehicle.vehicle) < 800.0)
|
|
SET_VEHICLE_ENGINE_HEALTH(sNigelVehicle.vehicle, 800.0) //ensure the nigrl vehicle doesn't get wrecked.
|
|
ENDIF
|
|
ENDIF
|
|
*/
|
|
IF NOT bDone_TargetStartChaseRoute
|
|
SET_PED_RESET_FLAG(sTargetPed.ped, PRF_UseFastEnterExitVehicleRates, TRUE)
|
|
IF IS_PED_SITTING_IN_VEHICLE(sTargetPed.ped, sTargetVehicle.vehicle)
|
|
AND (GET_PED_IN_VEHICLE_SEAT(sTargetVehicle.vehicle, VS_DRIVER) = sTargetPed.ped)
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, FALSE)
|
|
START_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, iMainCarRecID, sNigel2_UberRecordingName)
|
|
FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(sTargetVehicle.vehicle)
|
|
fCurrentPlaybackTime = GET_TIME_POSITION_IN_RECORDING(sTargetVehicle.vehicle)
|
|
//fMainPlaybackSpeed = 0.85 // 1.0 reduce speed to begin with to allow player chance to get in the car
|
|
fMainPlaybackSpeed = 0.85 // 1.0 // REMOVE BEFORE SUBMIT
|
|
SET_PLAYBACK_SPEED(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
PRELOAD_UBER_RECORDINGS_DURING_PLAYBACK()
|
|
UPDATE_UBER_PLAYBACK(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
UPDATE_CHASE_VEHICLES_FROM_UBER_RECORDING()
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("NIGEL_02_CHASE")
|
|
IF NOT IS_REPLAY_BEING_SET_UP() // don't allow music events to trigger during replay setup / stage skips
|
|
AND bFinishedStageSkipping
|
|
START_AUDIO_SCENE("NIGEL_02_CHASE")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " NIGEL 02 - START_AUDIO_SCENE : NIGEL_02_CHASE ", "***") ENDIF #ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " NIGEL 02 - START_AUDIO_SCENE : skipped for replay being active NIGEL_02_CHASE ", "***") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
/*// B* 1490105 - currently only reliable way to stop peds drivign the uber cars interfering with uber chase because of reaction to player shooting
|
|
looks pretty gash since no one reacts...would of been better if uber veh don't react until released and when released have the can't use veh flee flag set so they just dive out the car
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS_FOR_AMBIENT_PEDS_THIS_FRAME(TRUE)
|
|
ENDIF*/
|
|
bDone_TargetStartChaseRoute = TRUE
|
|
CPRINTLN(DEBUG_MISSION, "bDone_TargetStartChaseRoute - UBER CHASE started FC : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
fCurrentPlaybackTime = GET_TIME_POSITION_IN_RECORDING(sTargetVehicle.vehicle)
|
|
UPDATE_UBER_CHASE_SPEED(fMainPlaybackSpeed, fCurrentPlaybackTime)
|
|
SET_PLAYBACK_SPEED(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
PRELOAD_UBER_RECORDINGS_DURING_PLAYBACK()
|
|
UPDATE_UBER_PLAYBACK(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
UPDATE_CHASE_VEHICLES_FROM_UBER_RECORDING()
|
|
MANAGE_TARGET_BRAKING_AND_USING_HORN()
|
|
APPLY_VISUAL_DAMAGE_TO_TARGET_VEHICLE()
|
|
CREATE_VEHICLE_FOR_PLAYER_TO_USE_ON_MISSION_PASSED()
|
|
IF fCurrentPlaybackTime > 82000.0 // attempt to get cars on the highway to reliably spawn in
|
|
AND fCurrentPlaybackTime < 105000.0
|
|
//fUberPlaybackMinCreationDistance = 80.0 //The minimum distance a car has to be from the player to be allowed to create. FROM traffic.sch
|
|
CREATE_ALL_WAITING_UBER_CARS()
|
|
ENDIF
|
|
/*// B* 1490105 - currently only reliable way to stop peds drivign the uber cars interfering with uber chase because of reaction to player shooting
|
|
looks pretty gash since no one reacts...would of been better if uber veh don't react until released and when released have the can't use veh flee flag set so they just dive out the car
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS_FOR_AMBIENT_PEDS_THIS_FRAME(TRUE)
|
|
ENDIF*/
|
|
//NOTE: temp as cars are taking far more damage in latest build
|
|
IF (GET_VEHICLE_ENGINE_HEALTH(sTargetVehicle.vehicle) < 800.0)
|
|
SET_VEHICLE_ENGINE_HEALTH(sTargetVehicle.vehicle, 800.0) //ensure the target vehicle doesn't get wrecked.
|
|
ENDIF
|
|
ELSE
|
|
IF NOT bDone_UberRecordingCleanupForChaseEnd
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "END PLAYBACK TIME IS - ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
CLEANUP_UBER_PLAYBACK()
|
|
REMOVE_ALL_CAR_RECORDINGS_FOR_UBER_CHASE()
|
|
//main car recording
|
|
REMOVE_VEHICLE_RECORDING(iMainCarRecID, sNigel2_UberRecordingName)
|
|
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(sTargetVehicle.vehicle)
|
|
IF IS_AUDIO_SCENE_ACTIVE("NIGEL_02_CHASE")
|
|
STOP_AUDIO_SCENE("NIGEL_02_CHASE")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " NIGEL 02 - STOP_AUDIO_SCENE : NIGEL_02_CHASE ", "***") ENDIF #ENDIF
|
|
ENDIF
|
|
SETUP_CRASH_SITE_FOR_OUTRO_MOCAP()
|
|
SETUP_TARGET_FOR_CRASH()
|
|
IF fCurrentPlaybackTime < NIGEL2_TARGET_VEHICLE_VISUAL_DAMAGE_POINT //mainly for debug skip purpose, it sets time pass point the damage can be applied
|
|
fCurrentPlaybackTime = (NIGEL2_TARGET_VEHICLE_VISUAL_DAMAGE_POINT + 1000.0)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "INCREASED PLAYBACK TIME MANUALLY FOR VISUAL DAMAGE IN SS_CLEANUP") ENDIF #ENDIF
|
|
ENDIF
|
|
APPLY_VISUAL_DAMAGE_TO_TARGET_VEHICLE()
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UBER RECORDING ENDED, set up for crash scene") ENDIF #ENDIF
|
|
bDone_UberRecordingCleanupForChaseEnd = TRUE
|
|
ELSE
|
|
SET_TARGET_PLAY_HEAD_ON_WHEEL_ANIM()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF bDoneCleanup_JumpOutHospitalWindow // B*1557320 - don't allow during scripted camera jump out the window
|
|
CONTROL_PED_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, sTargetPed.ped)
|
|
ENDIF
|
|
MANAGE_RAYFIRE_HOSPITAL_DOORS()
|
|
MANAGE_HOSPITAL_SOUND_FX()
|
|
UPDATE_SCENARIO_BLOCKING_ON_CHASE_ROUTE(fCurrentPlaybackTime)
|
|
MANAGE_PEDESTRIANS_ON_CHASE_ROUTE(vPlayerPos)
|
|
MANAGE_HOSPITAL_DEBRIS_EFFECT()
|
|
NIG2_TRACK_STAT_PLAYER_KEEPS_CLOSE_TO_TARGET()
|
|
UPDATE_SCRIPTED_VEHICLES_AROUND_START_LOCATION(fMainPlaybackSpeed, vPlayerPos) //this needs to be below uber stuff as it uses fPlaybackTime
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
AND IS_PED_UNINJURED(sNigelPed.ped)
|
|
AND IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
IF IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_03")
|
|
CLEAR_THIS_PRINT("NIGEL2_03")
|
|
ENDIF
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_04")
|
|
CLEAR_THIS_PRINT("NIGEL2_04") // Get back in ~b~Nigel's car.~s~
|
|
ENDIF
|
|
SAFE_REMOVE_BLIP(sNigelVehicle.blip)
|
|
// reset flag once player is in the vehice
|
|
IF bSetNigelVehicleHDForMocapExit
|
|
SET_FORCE_HD_VEHICLE(sNigelVehicle.vehicle, FALSE) // B*1546501 - stops vehicle pop after mocap
|
|
bSetNigelVehicleHDForMocapExit = FALSE
|
|
ENDIF
|
|
|
|
// check if nigel and mrs T are in the car
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle)
|
|
OR NOT IS_PED_SITTING_IN_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle)
|
|
SAFE_REMOVE_BLIP(sTargetPed.blip)
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_04")
|
|
CLEAR_THIS_PRINT("NIGEL2_04") //Chase after ~r~Al Di Napoli.~w~
|
|
ENDIF
|
|
//IF NOT bDoneObjective_WaitForNigelAndMrsT
|
|
// PRINT_NOW("NIGEL2_05", DEFAULT_GOD_TEXT_TIME, 1) //Wait for ~b~Nigel and Mrs Thornhill.~w~
|
|
// bDoneObjective_WaitForNigelAndMrsT = TRUE
|
|
//ENDIF
|
|
ELSE
|
|
//get the engine on quicker for the player at the start of the chase
|
|
IF NOT bDone_TurnEngineOnForPlayer
|
|
IF (GET_PED_IN_VEHICLE_SEAT(sNigelVehicle.vehicle, VS_DRIVER) = PLAYER_PED_ID())
|
|
SET_VEHICLE_ENGINE_ON(sNigelVehicle.vehicle, TRUE, FALSE)
|
|
//!!! comment out for now as something changed in v189.1 making it really quick, too fast for the target
|
|
bDone_TurnEngineOnForPlayer = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "TURNED ENGINE ON FOR THE PLAYER") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
MANAGE_TRIGGER_MUSIC_EVENTS_DURING_CHASE(NIGEL2_MUSIC_EVENT_CAR)
|
|
IF NOT bDone_PlayerInNigelVehicle_FirstTime
|
|
PRINT_NOW("NIGEL2_01", DEFAULT_GOD_TEXT_TIME, 1) //Chase after ~r~Al Di Napoli.~w~
|
|
bDone_PlayerInNigelVehicle_FirstTime = TRUE
|
|
ENDIF
|
|
bDone_KillConvoForOutTheVehicleDialogue = FALSE //reset bool used to stop dialogue when player gets out the car
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_05")
|
|
CLEAR_THIS_PRINT("NIGEL2_05") //return to ~b~Nigel~w~
|
|
ENDIF
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_08")
|
|
CLEAR_THIS_PRINT("NIGEL2_08") //return to ~b~Nigel~s~ and ~b~Mrs. Thornhill.~s~
|
|
ENDIF
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_09")
|
|
CLEAR_THIS_PRINT("NIGEL2_09") //Return to ~b~Mrs. Thornhill.~s~
|
|
ENDIF
|
|
MANAGE_DIALOGUE_DURING_CHASE(bForceTargetblipFlashThisFrame) // needs to come before UPDATE_CHASE_BLIP since it sets bForceTargetblipFlashThisFrame
|
|
IF NOT DOES_BLIP_EXIST(sTargetPed.blip)
|
|
sTargetPed.blip = CREATE_PED_BLIP(sTargetPed.ped, TRUE, FALSE)
|
|
ELSE
|
|
IF IS_PED_IN_ANY_VEHICLE(sTargetPed.ped)
|
|
SET_BLIP_SCALE(sTargetPed.blip, 1.0) //TEMP: added as per bug 241312
|
|
ENDIF
|
|
// must come after MANAGE_DIALOGUE_DURING_CHASE since this controls bForceTargetblipFlashThisFrame override
|
|
UPDATE_CHASE_BLIP(sTargetPed.blip, sTargetPed.ped, NIGEL2_TARGET_ESCAPED_DISTANCE, NIGEL2_FLASH_CHASE_BLIP_PERCENTAGE, bForceTargetblipFlashThisFrame)
|
|
ENDIF
|
|
//Check for player close to target at end of the chase.
|
|
IF bDone_TargetStartChaseRoute
|
|
IF bDone_UberRecordingCleanupForChaseEnd
|
|
//DRAW_DEBUG_SPHERE(GET_ENTITY_COORDS(sTargetPed.ped), NIGEL2_PLAYER_CLOSE_TO_TARGET_CRASHED, 0, 0, 255, 120)
|
|
IF(fCurrentChaseDistance < NIGEL2_PLAYER_CLOSE_TO_TARGET_CRASHED)
|
|
CPRINTLN(DEBUG_MISSION, "CHASE_TARGET_IN_VEHICLE - SS_UPDATE - PLAYER CLOSE TO CRASHED AL DI NAPOLI - GO TO PUT IN BOOT SECTION")
|
|
eSubStage = SS_CLEANUP
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
MANAGE_HOSPITAL_JUMP_FX()
|
|
ELSE
|
|
// B*1546501 - stops vehicle pop after mocap - keep applying everyframe whilst it has initially been applied
|
|
IF bSetNigelVehicleHDForMocapExit
|
|
SET_FORCE_HD_VEHICLE(sNigelVehicle.vehicle, TRUE)
|
|
bSetNigelVehicleHDForMocapExit = TRUE
|
|
ENDIF
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_ForceDirectEntry, FALSE) // reset flag for ensure player uses direct door access as per bug 1044490
|
|
SAFE_REMOVE_BLIP(sTargetPed.blip)
|
|
IF NOT DOES_BLIP_EXIST(sNigelVehicle.blip)
|
|
sNigelVehicle.blip = CREATE_VEHICLE_BLIP(sNigelVehicle.vehicle, TRUE, BLIPPRIORITY_HIGH)
|
|
ENDIF
|
|
IF NOT bDone_PlayerInNigelVehicle_FirstTime
|
|
IF NOT bDoneDialogue_GetInNigelsVehicle[0]
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_DAWDM", CONV_PRIORITY_MEDIUM)
|
|
// Come on Jock, get in!
|
|
bDoneDialogue_GetInNigelsVehicle[0] = TRUE
|
|
ENDIF
|
|
ELIF NOT bDoneObjective_Initial_GetInNigelsVehicle
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
PRINT_NOW("NIGEL2_03", DEFAULT_GOD_TEXT_TIME, 1) //Get into ~b~Nigel's car.~w~
|
|
bDoneObjective_Initial_GetInNigelsVehicle = TRUE
|
|
ENDIF
|
|
ELIF NOT bDoneDialogue_GetInNigelsVehicle[1]
|
|
//IF NOT IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_03") //*commented out for new display message check with subtitle profile settings
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND IS_PED_SITTING_IN_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle)
|
|
AND IS_PED_SITTING_IN_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle)
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_SPOTSP", CONV_PRIORITY_HIGH)
|
|
// Hurry, we're going to lose him!
|
|
bDoneDialogue_GetInNigelsVehicle[1] = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
//kill off any dialogue which is based on the player being in the car
|
|
IF NOT bDone_KillConvoForOutTheVehicleDialogue
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
bDone_KillConvoForOutTheVehicleDialogue = TRUE
|
|
ENDIF
|
|
IF NOT bDoneObjective_GetBackInVehicle
|
|
PRINT_NOW("NIGEL2_04", DEFAULT_GOD_TEXT_TIME, 1) //Get back into ~b~Nigel's car.~w~
|
|
iTimer_TrevorGetBackInCarDialogue = GET_GAME_TIMER()
|
|
bDoneObjective_GetBackInVehicle = TRUE
|
|
ELSE
|
|
//IF NOT IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_04") //Get back into ~b~Nigel's car.~w~ //*commented out for new display message check with subtitle profile settings
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF (fDistPlayerToNigelVehicle < 20.0) //fDistPlayerToNigelVehicle is calculated in MISSION_FAILED_CHECKS()
|
|
IF (GET_GAME_TIMER() - iTimer_TrevorGetBackInCarDialogue) > GET_RANDOM_INT_IN_RANGE(4500, 6500)
|
|
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle) //needed to test him in getting in car state
|
|
//Do additional dialogue telling player to get back in the car
|
|
// random select between Nigel and Mrs Thornhill comments
|
|
IF (GET_RANDOM_INT_IN_RANGE(0, 11) > 5)
|
|
// Nigel lines
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_GIC", CONV_PRIORITY_HIGH)
|
|
// Jock, what are you doing?
|
|
// Where are you going?
|
|
// We've come this far, don't desert us now!
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - trevor leaving N & MRS T behind - NIG2_GIC") ENDIF #ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// Mrs Thornhill lines
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_GIC2", CONV_PRIORITY_HIGH)
|
|
// Jock! Please! We need you!
|
|
// We'll never catch him on foot, not with Nigel's hip!
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE -trevor leaving N & MRS T behind - NIG2_GIC2") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
iTimer_TrevorGetBackInCarDialogue = GET_GAME_TIMER()
|
|
ENDIF
|
|
//ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
HANDLE_BUDDY_HEAD_TRACK_WHILE_ENTERING_VEHICLE() // make buddy's look at the player as he enters the vehicle.
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
MANAGE_JUMP_OUT_HOSPITAL_WINDOW()
|
|
NIG2_TRACK_STAT_HAS_PLAYER_INJURED_PED_WHILST_IN_HOSPITAL()
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_CLEANUP
|
|
IF NOT bDone_UberRecordingCleanupForChaseEnd
|
|
CLEANUP_UBER_PLAYBACK()
|
|
REMOVE_ALL_CAR_RECORDINGS_FOR_UBER_CHASE()
|
|
IF IS_ENTITY_ALIVE(sTargetVehicle.vehicle)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
//check if its at the end time wise, if so freeze its pos?
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
// SKIP_TO_END_AND_STOP_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, TRUE)
|
|
ENDIF
|
|
REMOVE_VEHICLE_RECORDING(iMainCarRecID, sNigel2_UberRecordingName)
|
|
SETUP_CRASH_SITE_FOR_OUTRO_MOCAP()
|
|
IF IS_AUDIO_SCENE_ACTIVE("NIGEL_02_CHASE")
|
|
STOP_AUDIO_SCENE("NIGEL_02_CHASE")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "CHASE_TARGET_IN_VEHICLE : SS_CLEANUP : STOP_AUDIO_SCENE : NIGEL_02_CHASE ", "***") ENDIF #ENDIF
|
|
ENDIF
|
|
IF fCurrentPlaybackTime < NIGEL2_TARGET_VEHICLE_VISUAL_DAMAGE_POINT //mainly for debug skip purpose, it sets time pass point the damage can be applied
|
|
fCurrentPlaybackTime = (NIGEL2_TARGET_VEHICLE_VISUAL_DAMAGE_POINT + 1000.0)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "INCREASED PLAYBACK TIME MANUALLY FOR VISUAL DAMAGE IN SS_CLEANUP") ENDIF #ENDIF
|
|
ENDIF
|
|
APPLY_VISUAL_DAMAGE_TO_TARGET_VEHICLE()
|
|
SETUP_TARGET_FOR_CRASH()
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UBER RECORDING ENDED IN SS_CLEANUP") ENDIF #ENDIF
|
|
bDone_UberRecordingCleanupForChaseEnd = TRUE
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(sTargetPed.ped)
|
|
IF bDoneCleanup_JumpOutHospitalWindow // B*1557320 - don't allow during scripted camera jump out the window
|
|
CONTROL_PED_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, sTargetPed.ped)
|
|
ENDIF
|
|
ENDIF
|
|
MANAGE_JUMP_OUT_HOSPITAL_WINDOW()
|
|
IF bStatTracker_IsNigelVehicleDamageStatActive
|
|
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(NULL,NI2_VEHICLE_DAMAGE) // end tracking nigel's vehicle damage for stats
|
|
bStatTracker_IsNigelVehicleDamageStatActive = FALSE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "CHASE_TARGET_IN_VEHICLE - SS_CLEANUP - INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(NULL)") ENDIF #ENDIF
|
|
ENDIF
|
|
/*IF NOT IS_REPLAY_BEING_SET_UP()
|
|
IF eHospitalInteriorState = HIS_ACTIVE_NEW_LOAD_SCENE_AT_INTERIOR
|
|
OR eHospitalInteriorState = HIS_CLEANUP_NEW_LOAD_SCENE_AT_INTERIOR
|
|
IF IS_NEW_LOAD_SCENE_ACTIVE()
|
|
NEW_LOAD_SCENE_STOP()
|
|
eHospitalInteriorState = HIS_END
|
|
CPRINTLN(DEBUG_MISSION, " CHASE_TARGET_IN_VEHICLE : IS_NEW_LOAD_SCENE_ACTIVE - NEW_LOAD_SCENE_STOP() : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF*/
|
|
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE)
|
|
//KILL_ANY_CONVERSATION()
|
|
IF bDone_HospitalJumpPaperTrailFX
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(HospitalJump_PTFX_ID)
|
|
STOP_PARTICLE_FX_LOOPED(HospitalJump_PTFX_ID)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PTFX hospital jump stopped FC = ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//hospital sfx cleanup
|
|
RELEASE_SCRIPT_AUDIO_BANK()
|
|
SET_STAGE(MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE)
|
|
CPRINTLN(DEBUG_MISSION, "CHASE_TARGET_IN_VEHICLE - SS_CLEANUP done")
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Al Di Napoli has crashed and the player has got close to him.
|
|
/// Player instructed to park alongside An Di Napoli
|
|
PROC GET_CLOSE_TO_TARGET_FOR_CUTSCENE()
|
|
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3) // lower chance of peds interfering in route
|
|
REQUEST_VEHICLE_RECORDING(1, sNigel2_CarRecNigelOutro) // make sure the recording for Nigel driving off in the outro mocap is loaded ready
|
|
MANAGE_OUTRO_MOCAP_LOADING()
|
|
SET_TARGET_PLAY_HEAD_ON_WHEEL_ANIM()
|
|
|
|
SWITCH eSubStage
|
|
// ------------------------------------------
|
|
CASE SS_SETUP
|
|
MANAGE_JUMP_OUT_HOSPITAL_WINDOW()
|
|
iTimer_OutroMocapDelay = GET_GAME_TIMER()
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
IF bDoneCleanup_JumpOutHospitalWindow // B*1557320 - don't allow during scripted camera jump out the window
|
|
CONTROL_PED_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, sTargetPed.ped)
|
|
ENDIF
|
|
ENDIF
|
|
eSubStage = SS_UPDATE
|
|
CPRINTLN(DEBUG_MISSION, "GET_CLOSE_TO_TARGET_FOR_CUTSCENE - SS_SETUP done")
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_UPDATE
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
IF bDoneCleanup_JumpOutHospitalWindow // B*1557320 - don't allow during scripted camera jump out the window
|
|
CONTROL_PED_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, sTargetPed.ped)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(sTargetVehicle.vehicle)
|
|
fCurrentChaseDistance = VDIST(vPlayerPos, GET_ENTITY_COORDS(sTargetVehicle.vehicle, FALSE))
|
|
ENDIF
|
|
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
AND IS_PED_UNINJURED(sNigelPed.ped)
|
|
AND IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
IF IS_PED_SITTING_IN_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_04")
|
|
CLEAR_THIS_PRINT("NIGEL2_04") // Get back in ~b~Nigel's car.~s~
|
|
ENDIF
|
|
bDone_KillConvoForOutTheVehicleDialogue = FALSE //reset bool used to stop dialogue when player gets out the car
|
|
SAFE_REMOVE_BLIP(sNigelVehicle.blip)
|
|
MANAGE_DIALOGUE_DURING_CHASE(bForceTargetblipFlashThisFrame) // needs to come before UPDATE_CHASE_BLIP since it sets bForceTargetblipFlashThisFrame
|
|
IF NOT DOES_BLIP_EXIST(sTargetPed.blip)
|
|
sTargetPed.blip = CREATE_PED_BLIP(sTargetPed.ped, TRUE, FALSE)
|
|
ELSE
|
|
IF IS_PED_IN_ANY_VEHICLE(sTargetPed.ped)
|
|
SET_BLIP_SCALE(sTargetPed.blip, 1.0) //TEMP: added as per bug 241312
|
|
ENDIF
|
|
// must come after MANAGE_DIALOGUE_DURING_CHASE since this controls bForceTargetblipFlashThisFrame override
|
|
UPDATE_CHASE_BLIP(sTargetPed.blip, sTargetPed.ped, NIGEL2_TARGET_ESCAPED_DISTANCE, NIGEL2_FLASH_CHASE_BLIP_PERCENTAGE, bForceTargetblipFlashThisFrame)
|
|
ENDIF
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<381.915619,-628.101440,22.932293>>, <<394.477234,-606.126953,35.774826>>, 18.500000)
|
|
IF IS_VEHICLE_SETTLED_FOR_CUTSCENE(sNigelVehicle.vehicle)
|
|
// must be settle up min 500 ms
|
|
IF HAS_TIME_PASSED(iTimer_OutroMocapDelay, 500)
|
|
eSubStage = SS_CLEANUP
|
|
CPRINTLN(DEBUG_MISSION, "GET_CLOSE_TO_TARGET_FOR_CUTSCENE - SS_UPDATE - in range and not in air to trigger cutscene")
|
|
ENDIF
|
|
ELSE
|
|
iTimer_OutroMocapDelay = GET_GAME_TIMER()
|
|
ENDIF
|
|
ELSE
|
|
iTimer_OutroMocapDelay = GET_GAME_TIMER()
|
|
ENDIF
|
|
ELSE
|
|
SAFE_REMOVE_BLIP(sTargetPed.blip)
|
|
IF NOT DOES_BLIP_EXIST(sNigelVehicle.blip)
|
|
sNigelVehicle.blip = CREATE_VEHICLE_BLIP(sNigelVehicle.vehicle, TRUE, BLIPPRIORITY_HIGH)
|
|
ENDIF
|
|
//kill off any dialogue which is based on the player being in the car
|
|
IF NOT bDone_KillConvoForOutTheVehicleDialogue
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
bDone_KillConvoForOutTheVehicleDialogue = TRUE
|
|
ENDIF
|
|
IF NOT bDoneObjective_GetBackInVehicle
|
|
PRINT_NOW("NIGEL2_04", DEFAULT_GOD_TEXT_TIME, 1) //Get back into ~b~Nigel's car.~w~
|
|
iTimer_TrevorGetBackInCarDialogue = GET_GAME_TIMER()
|
|
bDoneObjective_GetBackInVehicle = TRUE
|
|
ELSE
|
|
//IF NOT IS_THIS_PRINT_BEING_DISPLAYED("NIGEL2_04") //Get back into ~b~Nigel's car.~w~ //*commented out for new display message check with subtitle profile settings
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF (fDistPlayerToNigelVehicle < 20.0) //fDistPlayerToNigelVehicle is calculated in MISSION_FAILED_CHECKS()
|
|
IF (GET_GAME_TIMER() - iTimer_TrevorGetBackInCarDialogue) > GET_RANDOM_INT_IN_RANGE(4500, 6500)
|
|
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle) //needed to test him in getting in car state
|
|
//Do additional dialogue telling player to get back in the car
|
|
// random select between Nigel and Mrs Thornhill comments
|
|
IF (GET_RANDOM_INT_IN_RANGE(0, 11) > 5)
|
|
// Nigel lines
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_GIC", CONV_PRIORITY_HIGH)
|
|
// Jock, what are you doing?
|
|
// Where are you going?
|
|
// We've come this far, don't desert us now!
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE - trevor leaving N & MRS T behind - NIG2_GIC") ENDIF #ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// Mrs Thornhill lines
|
|
IF NIG2_CREATE_CONVERSATION_WITH_MESSAGE_DISPLAYED_CHECK(sDialogue, "NIG2AUD", "NIG2_GIC2", CONV_PRIORITY_HIGH)
|
|
// Jock! Please! We need you!
|
|
// We'll never catch him on foot, not with Nigel's hip!
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_DIALOGUE_DURING_CHASE -trevor leaving N & MRS T behind - NIG2_GIC2") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
iTimer_TrevorGetBackInCarDialogue = GET_GAME_TIMER()
|
|
ENDIF
|
|
//ENDIF
|
|
ENDIF
|
|
HANDLE_BUDDY_HEAD_TRACK_WHILE_ENTERING_VEHICLE() // make buddy's look at the player as he enters the vehicle.
|
|
iTimer_OutroMocapDelay = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
NIG2_TRACK_STAT_PLAYER_KEEPS_CLOSE_TO_TARGET()
|
|
ENDIF
|
|
MANAGE_JUMP_OUT_HOSPITAL_WINDOW()
|
|
NIG2_TRACK_STAT_HAS_PLAYER_INJURED_PED_WHILST_IN_HOSPITAL()
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_CLEANUP
|
|
SAFE_REMOVE_BLIP(sNigelVehicle.blip)
|
|
SAFE_REMOVE_BLIP(sTargetPed.blip)
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
IF NOT bDoneCleanup_JumpOutHospitalWindow
|
|
SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW(FALSE)
|
|
REPLAY_STOP_EVENT() // B*1841676 - cleanup the record jump out of the hospital window
|
|
bDoneCleanup_JumpOutHospitalWindow = TRUE
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MANAGE_JUMP_OUT_HOSPITAL_WINDOW - bDoneCleanup_JumpOutHospitalWindow early for nigel's vehicle being wrecked") ENDIF #ENDIF
|
|
ENDIF
|
|
//hospital debris cleanup
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(HospitalDebris_PTFX_ID)
|
|
STOP_PARTICLE_FX_LOOPED(HospitalDebris_PTFX_ID)
|
|
ENDIF
|
|
eHospitalDoorsObjectState = HDO_END
|
|
SAFE_DELETE_OBJECT(sObjectHospitalDoors.objectIndex)
|
|
REMOVE_PTFX_ASSET()
|
|
IF NOT IS_REPLAY_BEING_SET_UP() // don't allow music events to trigger during replay setup / stage skips
|
|
AND bFinishedStageSkipping
|
|
SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_STOP")
|
|
ENDIF
|
|
MANAGE_TRIGGER_MUSIC_EVENTS_DURING_CHASE(NIGEL2_MUSIC_EVENT_STOP)
|
|
SET_STAGE(MISSION_STAGE_END_CUTSCENE_MOCAP)
|
|
CPRINTLN(DEBUG_MISSION, "GET_CLOSE_TO_TARGET_FOR_CUTSCENE - SS_CLEANUP done")
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Trevor throws Al Di Napoli in the boot of Nigel's car
|
|
PROC STAGE_END_CUTSCENE_MOCAP()
|
|
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3) // lower chance of peds interfering in route
|
|
|
|
SWITCH eSubStage
|
|
// ------------------------------------------
|
|
CASE SS_SETUP
|
|
// don't request the mocap if we are skipping past this stage
|
|
IF NOT bFinishedStageSkipping
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
//SAFE_TELEPORT_PED_OUT_OF_THEIR_VEHICLE(PLAYER_PED_ID())
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP setup done for skip, heading to SS_CLEANUP = Frame Count :", GET_FRAME_COUNT())
|
|
eSubStage = SS_CLEANUP
|
|
ELSE
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT) // B*1521637 - dive off car for cutscene
|
|
RC_REQUEST_MID_MISSION_CUTSCENE(tlOutroMocapName) // can't use RC_REQUEST_CUTSCENE in this instance, as it causes bug 1000899
|
|
REQUEST_VEHICLE_RECORDING(1, sNigel2_CarRecNigelOutro) // make sure the recording for Nigel driving off in the outro mocap is loaded ready
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP ; RC_REQUEST_MID_MISSION_CUTSCENE : NMT_2_MCS_2 - Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
|
|
SET_MISSION_ENTITIES_COMP_VARIATIONS_FOR_OUTRO_MOCAP()
|
|
|
|
IF IS_ENTITY_ALIVE(sTargetVehicle.vehicle)
|
|
SET_ENTITY_PROOFS(sTargetVehicle.vehicle, FALSE, FALSE, FALSE, TRUE, FALSE, FALSE) // B*1954082 - stop window smash during transition to cutscene
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP ; setting target veh collision proof this frame : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
|
|
IF HAS_VEHICLE_RECORDING_BEEN_LOADED(1, sNigel2_CarRecNigelOutro)
|
|
AND NOT SAFE_IS_PED_PLAYING_AMBIENT_SPEECH(sMrsThornhillPed.ped) // don't cut of Nig or Mrs T ambient comments
|
|
AND NOT SAFE_IS_PED_PLAYING_AMBIENT_SPEECH(sNigelPed.ped)
|
|
IF RC_IS_CUTSCENE_OK_TO_START(TRUE)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), sSceneHandle_Trevor, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
IF IS_ENTITY_ALIVE(sNigelPed.ped)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sNigelPed.ped, sSceneHandle_Nigel, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(sMrsThornhillPed.ped)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sMrsThornhillPed.ped, sSceneHandle_MrsThornhill, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(sTargetPed.ped)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sTargetPed.ped, sSceneHandle_AlDiNapoli, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(sNigelVehicle.vehicle)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sNigelVehicle.vehicle, sSceneHandle_NigelVehicle, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(sTargetVehicle.vehicle)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sTargetVehicle.vehicle, sSceneHandle_AlDiNapoliVehicle, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
// B*1954082 - stop sparks from vehicle on transition to cutscene
|
|
REMOVE_PARTICLE_FX_IN_RANGE(GET_ENTITY_COORDS(sTargetVehicle.vehicle, FALSE), 4.0)
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", "REGISTER_ENTITY_FOR_CUTSCENE done Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW)
|
|
|
|
START_CUTSCENE()
|
|
WAIT(0) //needed because cutscene doesn't start straight away, causing player to see vehicles getting removed.
|
|
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME, FALSE) // //B*1481353 - when skipping to mocap (let the mocap stage handle fade in) tried just before START_CUTSCENE but issue still occured
|
|
|
|
CLEAR_ANGLED_AREA_OF_VEHICLES(<<418.283752,-571.662903,24.697943>>, <<362.025787,-663.139771,38.339985>>, 28.000000, FALSE, FALSE, FALSE, TRUE, TRUE) // B*1564102 make sure no vehicles are in the area where the nodes are turned off
|
|
RC_START_CUTSCENE_MODE(<< 392.86, -621.04, 27.97 >>, TRUE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE)
|
|
SETUP_CRASH_SITE_FOR_OUTRO_MOCAP(TRUE)
|
|
|
|
// B*1322009 - limit density for framerate in the scene
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0) // prevent ambient cars interfering with the scene
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
|
|
|
|
eSubStage = SS_UPDATE
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - SS_SETUP - Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ELSE
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(sNigelVehicle.vehicle, DEFAULT_VEH_STOPPING_DISTANCE, 1, 0.0)
|
|
ENDIF
|
|
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPRINT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_AIM)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ENTER)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - SS_SETUP waiting on veh rec load and ambient speech - Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_UPDATE
|
|
|
|
// setup Trevor's exit state
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_Trevor)
|
|
REPLAY_STOP_EVENT()
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
AND IS_SCREEN_FADED_OUT()
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", "SS_UPDATE - Camera - set skipped mocap Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
|
|
bHasSetExitStateFromOutroMocapForGameplayCam = TRUE // stop setting the gameplay cam now.
|
|
//FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
//FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_DO_NOTHING, FALSE, FAUS_CUTSCENE_EXIT)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", "CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY Trevor - Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
|
|
// handle exit state for Nigel, Mrs Thornhill and Nigel's vehicle
|
|
IF IS_PED_UNINJURED(sNigelPed.ped)
|
|
AND IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
AND IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_Nigel)
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle)
|
|
SET_PED_INTO_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle, VS_DRIVER)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", " set exit state for Nigel put in his vehicle ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
//TASK_VEHICLE_DRIVE_WANDER(sNigelPed.ped, sNigelVehicle.vehicle, 60.0, DRIVINGMODE_AVOIDCARS)
|
|
//SET_DRIVE_TASK_CRUISE_SPEED(sNigelPed.ped, 60.0)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sNigelPed.ped, TRUE)
|
|
//SET_PED_KEEP_TASK(sNigelPed.ped, TRUE)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", "CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY Nigel - Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_MrsThornhill)
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle)
|
|
SET_PED_INTO_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle, VS_FRONT_RIGHT)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", " set exit state for Mrs T put in his vehicle ss_update Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sMrsThornhillPed.ped, TRUE)
|
|
SET_PED_KEEP_TASK(sMrsThornhillPed.ped, TRUE)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", "CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY Mrs T - Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_NigelVehicle)
|
|
SET_VEHICLE_ENGINE_ON(sNigelVehicle.vehicle, TRUE, TRUE)
|
|
SET_VEHICLE_FORWARD_SPEED(sNigelVehicle.vehicle, 17)
|
|
SET_VEHICLE_DOORS_SHUT(sNigelVehicle.vehicle, TRUE)
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sNigelVehicle.vehicle)
|
|
START_PLAYBACK_RECORDED_VEHICLE_USING_AI(sNigelVehicle.vehicle, 1, sNigel2_CarRecNigelOutro, 35, DRIVINGMODE_AVOIDCARS_RECKLESS)
|
|
//SET_PLAYBACK_SPEED(sCelebVehicle.vehicle, fMainPlaybackSpeed)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", "CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY Nigel - set veh rec going for outro blend - Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", "CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY Nigel's vehicle - Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// handle Al Di Napoli's exit state
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_AlDiNapoli)
|
|
SET_ENTITY_LOAD_COLLISION_FLAG(sTargetPed.ped, FALSE) //unsure if this is needed, might be costly?
|
|
SAFE_REMOVE_PED(sTargetPed.ped, TRUE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", "CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY Al Di Napoli - deleted - Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// unfortunately the only way to ensure the mocap camera blends out to gameplay cam at a sensible position is to spam this until the player's character exit state has fired
|
|
IF NOT bHasSetExitStateFromOutroMocapForGameplayCam
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
ENDIF
|
|
|
|
IF NOT IS_CUTSCENE_PLAYING()
|
|
eSubStage = SS_CLEANUP
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", " SS_UPDATE done mocap ended Frame Count : ", GET_FRAME_COUNT())
|
|
ELSE
|
|
// B*1322009 - limit density for framerate in the scene
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0) // prevent ambient cars interfering with the scene
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
|
|
ENDIF
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_CLEANUP
|
|
IF IS_CUTSCENE_PLAYING()
|
|
STOP_CUTSCENE()
|
|
ELSE
|
|
IF HAS_CUTSCENE_LOADED()
|
|
REMOVE_CUTSCENE()
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(sTargetPed.ped)
|
|
SET_ENTITY_LOAD_COLLISION_FLAG(sTargetPed.ped, FALSE) //unsure if this is needed, might be costly?
|
|
ENDIF
|
|
SAFE_REMOVE_PED(sTargetPed.ped, TRUE)
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
IF IS_PED_UNINJURED(sNigelPed.ped)
|
|
IF NOT IsPedPerformingTask(sNigelPed.ped, SCRIPT_TASK_VEHICLE_DRIVE_WANDER)
|
|
IF IS_PED_SITTING_IN_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sNigelPed.ped, TRUE)
|
|
//SET_PED_KEEP_TASK(sNigelPed.ped, TRUE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", "SS_CLEANUP set Nigel's drive task Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sMrsThornhillPed.ped, TRUE)
|
|
SET_PED_KEEP_TASK(sMrsThornhillPed.ped, TRUE)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - ", "SS_CLEANUP set Mrs T task Frame Count : ", GET_FRAME_COUNT()) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_ALIVE(sTargetVehicle.vehicle)
|
|
SET_ENTITY_PROOFS(sTargetVehicle.vehicle, FALSE, FALSE, FALSE, FALSE, FALSE, FALSE) // B*1954082 - stop window smash during transition to cutscene
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP ; turning off target veh collision proof this frame : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
|
|
/*// setup emergency services to appear at the crash scene after the mission ends
|
|
IF DOES_ENTITY_EXIST(sTargetVehicle.vehicle)
|
|
CREATE_INCIDENT_WITH_ENTITY(DT_AMBULANCE_DEPARTMENT, sTargetVehicle.vehicle, 2.0, 3.0, tempIncidentIndex)
|
|
ENDIF*/
|
|
|
|
IF bFinishedStageSkipping //only do this if we aren't stage skipping
|
|
RC_END_CUTSCENE_MODE()
|
|
ENDIF
|
|
iTimer_MissionPassedDelay = GET_GAME_TIMER() // delay for Nigel switching to wander task on mission passed
|
|
|
|
SET_STAGE(MISSION_STAGE_MISSION_PASSED)
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - SS_CLEANUP done Frame Count : ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Mission has already failed at this point, but this handles
|
|
/// having to update the fail reason if the player does something more
|
|
/// serious during the fade.
|
|
PROC MISSION_FAILED_WAIT_FOR_FADE()
|
|
|
|
STRING sFailReason = NULL
|
|
|
|
SWITCH eSubStage
|
|
// ------------------------------------------
|
|
CASE SS_SETUP
|
|
IF SAFE_TRIGGER_MISSION_MUSIC_EVENT("NIGEL2_MISSION_FAIL")
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_ANY_CONVERSATION()
|
|
ENDIF
|
|
DELETE_ALL_MISSION_BLIPS()
|
|
SEQUENCE_INDEX seqIndex
|
|
//implemented to ensure Nigel and Mrs Thornhill get out the car on mission failed,
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
OR IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID())
|
|
BRING_VEHICLE_TO_HALT(sNigelVehicle.vehicle, 6.0, 2)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "player vehicle halted IN FAILED SETUP $$$") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(sNigelPed.ped)
|
|
IF IS_PED_IN_GROUP(sNigelPed.ped)
|
|
REMOVE_PED_FROM_GROUP(sNigelPed.ped)
|
|
ENDIF
|
|
CLEAR_PED_TASKS(sNigelPed.ped) //cant do CLEAR_PED_TASKS_IMMEDIATELY because it teleports them out the car
|
|
IF eN2_MissionFailedReason = FAILED_MRS_THORNHILL_DIED
|
|
OR eN2_MissionFailedReason = FAILED_MRS_THORNHILL_ATTACKED
|
|
OR eN2_MissionFailedReason = FAILED_NIGEL_ATTACKED
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET NIGEL UP TO FLEE PLAYER IN FAILED SETUP $$$") ENDIF #ENDIF
|
|
SET_PED_FLEE_ATTRIBUTES(sNigelPed.ped, FA_USE_VEHICLE, FALSE)
|
|
OPEN_SEQUENCE_TASK(seqIndex)
|
|
IF IS_PED_IN_ANY_VEHICLE(sNigelPed.ped)
|
|
TASK_LEAVE_ANY_VEHICLE(NULL, 0, ECF_DONT_CLOSE_DOOR | ECF_DONT_WAIT_FOR_VEHICLE_TO_STOP)
|
|
ENDIF
|
|
TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 300.0, -1)
|
|
CLOSE_SEQUENCE_TASK(seqIndex)
|
|
|
|
TASK_PERFORM_SEQUENCE(sNigelPed.ped, seqIndex)
|
|
CLEAR_SEQUENCE_TASK(seqIndex)
|
|
SET_PED_KEEP_TASK(sNigelPed.ped, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
IF IS_PED_IN_GROUP(sMrsThornhillPed.ped)
|
|
REMOVE_PED_FROM_GROUP(sMrsThornhillPed.ped)
|
|
ENDIF
|
|
CLEAR_PED_TASKS(sMrsThornhillPed.ped) //cant do CLEAR_PED_TASKS_IMMEDIATELY because it teleports them out the car
|
|
IF eN2_MissionFailedReason = FAILED_NIGEL_DIED
|
|
OR eN2_MissionFailedReason = FAILED_NIGEL_ATTACKED
|
|
OR eN2_MissionFailedReason = FAILED_MRS_THORNHILL_ATTACKED
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET MRS THORNHILL UP TO FLEE PLAYER IN FAILED SETUP $$$") ENDIF #ENDIF
|
|
SET_PED_FLEE_ATTRIBUTES(sMrsThornhillPed.ped, FA_USE_VEHICLE, FALSE)
|
|
IF IS_PED_IN_ANY_VEHICLE(sMrsThornhillPed.ped)
|
|
OPEN_SEQUENCE_TASK(seqIndex)
|
|
TASK_LEAVE_ANY_VEHICLE(NULL, 0, ECF_DONT_CLOSE_DOOR | ECF_DONT_WAIT_FOR_VEHICLE_TO_STOP)
|
|
TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 300.0, -1)
|
|
CLOSE_SEQUENCE_TASK(seqIndex)
|
|
TASK_PERFORM_SEQUENCE(sMrsThornhillPed.ped, seqIndex)
|
|
CLEAR_SEQUENCE_TASK(seqIndex)
|
|
SET_PED_KEEP_TASK(sMrsThornhillPed.ped, TRUE)
|
|
ELSE
|
|
TASK_SMART_FLEE_PED(sMrsThornhillPed.ped, PLAYER_PED_ID(), 300.0, -1)
|
|
SET_PED_KEEP_TASK(sMrsThornhillPed.ped, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
//Stop Di Napoli's car recording AND uber recording if not already done so in script
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "NIGEL 2 : ", "target vehicle recording stopped in failed mission stage") ENDIF #ENDIF
|
|
ENDIF
|
|
IF NOT bDone_UberRecordingCleanupForChaseEnd
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "NIGEL 2 : ", "uber recording cleaned up in failed mission stage") ENDIF #ENDIF
|
|
CLEANUP_UBER_PLAYBACK()
|
|
ENDIF
|
|
ENDIF
|
|
//setup Al Di Napoli behaviour on mission failed
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
IF bDone_UberRecordingCleanupForChaseEnd
|
|
SET_PED_KEEP_TASK(sTargetPed.ped, TRUE)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET TARGET UP TO KEEP TASKS AND HE IS CRASHED IN FAILED SETUP $$$") ENDIF #ENDIF
|
|
ELSE
|
|
CLEAR_PED_TASKS(sTargetPed.ped) //cant do CLEAR_PED_TASKS_IMMEDIATELY because it teleports them out the car
|
|
SET_PED_FLEE_ATTRIBUTES(sTargetPed.ped, FA_USE_VEHICLE, TRUE)
|
|
SET_PED_FLEE_ATTRIBUTES(sTargetPed.ped, FA_PREFER_PAVEMENTS, FALSE)
|
|
SET_PED_FLEE_ATTRIBUTES(sTargetPed.ped, FA_USE_COVER, FALSE)
|
|
SET_PED_FLEE_ATTRIBUTES(sTargetPed.ped, FA_LOOK_FOR_CROWDS, FALSE)
|
|
SET_PED_FLEE_ATTRIBUTES(sTargetPed.ped, FA_RETURN_TO_ORIGNAL_POSITION_AFTER_FLEE, FALSE)
|
|
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
AND IS_PED_IN_VEHICLE(sTargetPed.ped, sTargetVehicle.vehicle)
|
|
AND IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
OPEN_SEQUENCE_TASK(seqIndex)
|
|
TASK_VEHICLE_MISSION_PED_TARGET(NULL, sTargetVehicle.vehicle, PLAYER_PED_ID(), MISSION_FLEE, 80.0, DRIVINGMODE_AVOIDCARS_RECKLESS, 500.0, -1.0)
|
|
CLOSE_SEQUENCE_TASK(seqIndex)
|
|
TASK_PERFORM_SEQUENCE(sTargetPed.ped, seqIndex)
|
|
CLEAR_SEQUENCE_TASK(seqIndex)
|
|
ELSE
|
|
OPEN_SEQUENCE_TASK(seqIndex)
|
|
TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 300.0, -1)
|
|
CLOSE_SEQUENCE_TASK(seqIndex)
|
|
TASK_PERFORM_SEQUENCE(sTargetPed.ped, seqIndex)
|
|
CLEAR_SEQUENCE_TASK(seqIndex)
|
|
ENDIF
|
|
SET_PED_KEEP_TASK(sTargetPed.ped, TRUE)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "SET TARGET UP TO FLEE PLAYER IN FAILED SETUP $$$") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
// Set the fail reason
|
|
SWITCH eN2_MissionFailedReason
|
|
CASE FAILED_TARGET_DIED
|
|
sFailReason = "NIGEL2_F1" //~r~Al Di Napoli died.~w~
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: AL DI NAPOLI DIED") ENDIF #ENDIF
|
|
BREAK
|
|
CASE FAILED_TARGET_ESCAPED
|
|
sFailReason = "NIGEL2_F2" //~r~Al Di Napoli escaped.~w~
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: AL DI NAPOLI ESCAPED") ENDIF #ENDIF
|
|
BREAK
|
|
CASE FAILED_NIGEL_VEHICLE_WRECKED
|
|
sFailReason = "NIGEL2_F3" //~r~Nigel's car was wrecked.~w~
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: NIGEL'S CAR WRECKED") ENDIF #ENDIF
|
|
BREAK
|
|
CASE FAILED_NIGEL_ATTACKED
|
|
sFailReason = "NIGEL2_F7" //~w~Nigel was injured.~s~
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: NIGEL ATTACKED") ENDIF #ENDIF
|
|
BREAK
|
|
CASE FAILED_NIGEL_DIED
|
|
sFailReason = "NIGEL2_F4" //~r~Nigel died.~w~
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: NIGEL DIED") ENDIF #ENDIF
|
|
BREAK
|
|
CASE FAILED_MRS_THORNHILL_ATTACKED
|
|
sFailReason = "NIGEL2_F8" //~w~Mrs. Thornhill was injured.~s~
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: MRS THORNHILL ATTACKED") ENDIF #ENDIF
|
|
BREAK
|
|
CASE FAILED_MRS_THORNHILL_DIED
|
|
sFailReason = "NIGEL2_F5" //~r~Mrs. Thornhill died.~w~
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: MRS THORNHILL DIED") ENDIF #ENDIF
|
|
BREAK
|
|
CASE FAILED_LEFT_NIGEL_AND_MRS_T_BEHIND
|
|
sFailReason = "NIGEL2_F6" //~w~Nigel and Mrs. Thornhill were abandoned.~s~
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: Nigel and Mrs Thorton were abandoned.") ENDIF #ENDIF
|
|
BREAK
|
|
CASE FAILED_LEFT_NIGEL_BEHIND
|
|
sFailReason = "NIGEL2_F10" //~w~Nigel was abandoned.~s~
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: Nigel was left abandoned.") ENDIF #ENDIF
|
|
BREAK
|
|
CASE FAILED_LEFT_MRS_T_BEHIND
|
|
sFailReason = "NIGEL2_F9" //~w~Mrs. Thornhill was abandoned.~s~
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: Mrs Thorton was abandoned.") ENDIF #ENDIF
|
|
BREAK
|
|
DEFAULT
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "Mission Failed: generic") ENDIF #ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
//Check if fail reason needs to be displayed
|
|
IF eN2_MissionFailedReason = FAILED_DEFAULT
|
|
Random_Character_Failed()
|
|
ELSE
|
|
Random_Character_Failed_With_Reason(sFailReason)
|
|
ENDIF
|
|
eSubStage = SS_UPDATE
|
|
CPRINTLN(DEBUG_MISSION, "MISSION_FAILED_WAIT_FOR_FADE - SS_SETUP done")
|
|
ENDIF
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_UPDATE
|
|
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
|
|
//---- Do any specific cleanup here----
|
|
// Do a check here to see if we need to warp the player at all
|
|
// (only set the fail warp locations if we can't leave the player where he was)
|
|
// get the player out of the hospital
|
|
IF IS_PED_INSIDE_HOSPITAL_INTERIOR(PLAYER_PED_ID()) // required true check to use GET_KEY_FOR_ENTITY_IN_ROOM check to work, and need ot use this to prevent inaccurate results
|
|
CPRINTLN(DEBUG_MISSION, "Player in hosp")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "MISSION_FAILED_WAIT_FOR_FADE - player in hospital interior, warp setup") ENDIF #ENDIF
|
|
MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<279.4137, -585.8815, 42.3102>>, 48.8028)
|
|
SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION(<<276.27, -584.00, 42.73>>, 337.40)
|
|
ENDIF
|
|
CLEANUP_ALL_MISSION_ENTITIES(TRUE)
|
|
Script_Cleanup()
|
|
CPRINTLN(DEBUG_MISSION, "MISSION_FAILED_WAIT_FOR_FADE - SS_CLEANUP done")
|
|
ELSE
|
|
// not finished fading out
|
|
// you may want to handle dialogue etc here.
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
// DEBUG STAGES
|
|
//-------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
FUNC BOOL IS_CAR_PAUSED_AT_START_OF_RECORDING(VEHICLE_INDEX inCar, INT iRec)
|
|
|
|
FLOAT fTemp
|
|
|
|
IF IS_VEHicle_DRIVEABLE(inCar)
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_vehicle(inCar)
|
|
START_PLAYBACK_RECORDED_vehicle(inCar, iRec, sNigel2_UberRecordingName)
|
|
ELSE
|
|
fTemp = get_TIME_POSITION_IN_RECORDING(inCar)
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_vehicle(inCar, (0.0 - fTemp))
|
|
PAUSE_PLAYBACK_RECORDED_vehicle(inCar)
|
|
RETURN(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN(FALSE)
|
|
|
|
ENDFUNC
|
|
|
|
PROC RECORD_CHASE_ROUTE()
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_PARKED_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
INT iRecNumTarget, iRecNumGhost
|
|
iRecNumTarget = 1 //999
|
|
iRecNumGhost = 888
|
|
VECTOR vRecordingPosition
|
|
VECTOR vRecordingStartPos
|
|
FLOAT fRecordedTime
|
|
FLOAT fGhostCarPlaybackTime
|
|
FLOAT fTimeDiff
|
|
|
|
SWITCH eSubStage
|
|
// ------------------------------------------
|
|
CASE SS_SETUP
|
|
SET_CLOCK_TIME(10, 0, 0)
|
|
LOAD_MISSION_ASSETS(TRUE)
|
|
SETUP_FOR_START_OF_MISSION()
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK()
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
//for uber recording
|
|
SET_VEHICLE_DOORS_LOCKED(sTargetVehicle.vehicle, VEHICLELOCK_UNLOCKED)
|
|
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(sTargetVehicle.vehicle, TRUE)
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sTargetVehicle.vehicle)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_VEHICLE_ENGINE_ON(sTargetVehicle.vehicle, TRUE, TRUE)
|
|
//SET_ENTITY_COORDS(sTargetVehicle.vehicle, << -1290.7233, -634.5989, 26.1005 >>)
|
|
//SET_ENTITY_QUATERNION(sTargetVehicle.vehicle, -0.0248, 0.0004, 0.8949, 0.4456)
|
|
|
|
REQUEST_VEHICLE_RECORDING(iRecNumGhost, sNigel2_UberRecordingName)
|
|
|
|
WHILE NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNumGhost, sNigel2_UberRecordingName)
|
|
CPRINTLN(DEBUG_MISSION, "LOADING THE VEHICLE RECORDING 1 Nigel2U")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
REQUEST_VEHICLE_RECORDING(iRecNumTarget, sNigel2_UberRecordingName)
|
|
|
|
WHILE NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecNumTarget, sNigel2_UberRecordingName)
|
|
CPRINTLN(DEBUG_MISSION, "LOADING THE VEHICLE RECORDING 1 Nigel2U")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
AND IS_VEHICLE_OK(vehDebug_Ghost)
|
|
SET_ENTITY_COLLISION(vehDebug_Ghost, FALSE)
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, FALSE)
|
|
FREEZE_ENTITY_POSITION(vehDebug_Ghost, FALSE)
|
|
vRecordingStartPos = GET_POSITION_OF_vehicle_RECORDING_AT_TIME(iRecNumTarget, 0.0, sNigel2_UberRecordingName)
|
|
SET_ENTITY_COORDS(sTargetVehicle.vehicle, vRecordingStartPos)
|
|
vRecordingStartPos = GET_POSITION_OF_vehicle_RECORDING_AT_TIME(iRecNumGhost, 0.0, sNigel2_UberRecordingName)
|
|
SET_ENTITY_COORDS(vehDebug_Ghost, vRecordingStartPos)
|
|
|
|
//FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, TRUE)
|
|
//FREEZE_ENTITY_POSITION(vehDebug_Ghost, TRUE)
|
|
ENDIF
|
|
|
|
|
|
WHILE NOT IS_car_PAUSED_AT_START_OF_RECORDING(sTargetVehicle.vehicle, iRecNumTarget)
|
|
OR NOT IS_car_PAUSED_AT_START_OF_RECORDING(vehDebug_Ghost, iRecNumGhost)
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_SETUP pausing cars at start of recording...")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
//INIT_UBER_RECORDING(sNigel2_UberRecordingName)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
eSubStage = SS_UPDATE
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_SETUP done")
|
|
ENDIF
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_UPDATE
|
|
// for uber recording
|
|
//UPDATE_UBER_RECORDING()
|
|
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
AND IS_VEHICLE_OK(vehDebug_Ghost)
|
|
|
|
IF IS_RECORDING_GOING_ON_FOR_vehicle(sTargetVehicle.vehicle)
|
|
fRecordedTime = GET_TIME_POSITION_IN_RECORDED_RECORDING(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
|
|
fMainPlaybackSpeed = 1.0
|
|
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehDebug_Ghost)
|
|
fGhostCarPlaybackTime = GET_TIME_POSITION_IN_RECORDING(vehDebug_Ghost)
|
|
DISPLAY_PLAYBACK_RECORDED_vehicle(vehDebug_Ghost, RDM_WHOLELINE)
|
|
SET_PLAYBACK_SPEED(vehDebug_Ghost, fMainPlaybackSpeed)
|
|
endif
|
|
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
fCurrentPlaybackTime = GET_TIME_POSITION_IN_RECORDING(sTargetVehicle.vehicle)
|
|
SET_PLAYBACK_SPEED(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
endif
|
|
|
|
vRecordingPosition = GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(iRecNumTarget, fCurrentPlaybackTime, sNigel2_UberRecordingName)
|
|
|
|
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_RIGHT)
|
|
/*
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
AND NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehDebug_Ghost)
|
|
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, FALSE)
|
|
FREEZE_ENTITY_POSITION(vehDebug_Ghost, FALSE)
|
|
START_PLAYBACK_RECORDED_vehicle(vehDebug_Ghost, iRecNumGhost, sNigel2_UberRecordingName)
|
|
FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehDebug_Ghost)
|
|
SET_PLAYBACK_SPEED(vehDebug_Ghost, fMainPlaybackSpeed)
|
|
START_PLAYBACK_RECORDED_vehicle(sTargetVehicle.vehicle, iRecNumTarget, sNigel2_UberRecordingName)
|
|
FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(sTargetVehicle.vehicle)
|
|
SET_PLAYBACK_SPEED(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : PLAYBACK OF RECORDING STARTED FC = ", GET_FRAME_COUNT())
|
|
ENDIF*/
|
|
//START_RECORDING_VEHICLE(sTargetVehicle.vehicle, 999, sNigel2_UberRecordingName, TRUE)
|
|
//CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : PLAYBACK OF RECORDING STARTED FC = ", GET_FRAME_COUNT())
|
|
|
|
//WAIT(0)
|
|
|
|
IF IS_PLAYBACK_GOING_ON_FOR_vehicle(vehDebug_Ghost)
|
|
UNPAUSE_PLAYBACK_RECORDED_vehicle(vehDebug_Ghost)
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : unpaused ghost car fGhostCarPlaybackTime = ", fGhostCarPlaybackTime, "FC = ", GET_FRAME_COUNT(), " game timer = ", GET_GAME_TIMER())
|
|
ENDIF
|
|
IF IS_PLAYBACK_GOING_ON_FOR_vehicle(sTargetVehicle.vehicle)
|
|
UNPAUSE_PLAYBACK_RECORDED_vehicle(sTargetVehicle.vehicle)
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : unpaused target car fCurrentPlaybackTime = ", fCurrentPlaybackTime, " FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
|
|
// RECORD SECTIONS
|
|
|
|
/*IF fCurrentPlaybackTime > 10000.160
|
|
AND fCurrentPlaybackTime < 11000.490
|
|
IF NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
SET_PLAYBACK_TO_USE_AI_TRY_TO_REVERT_BACK_LATER(sTargetVehicle.vehicle, (iDebug_AdditionalAIDriveTime + ROUND(11000.490 - fCurrentPlaybackTime)), DRIVINGMODE_PLOUGHTHROUGH)
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : SET_PLAYBACK_TO_USE_AI_TRY_TO_REVERT_BACK_LATER this fCurrentPlaybackTime = ", fCurrentPlaybackTime)
|
|
ENDIF
|
|
ENDIF*/
|
|
IF fCurrentPlaybackTime > 41000.0 // 41410.0
|
|
AND fCurrentPlaybackTime < 43500.00 // 43250.960
|
|
IF NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
//IF NOT IS_RECORDING_GOING_ON_FOR_vehicle(sTargetVehicle.vehicle)
|
|
// START_RECORDING_VEHICLE_TRANSITION_FROM_PLAYBACK(sTargetVehicle.vehicle, 985, sNigel2_UberRecordingName, TRUE)
|
|
// CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : START_RECORDING_VEHICLE_TRANSITION_FROM_PLAYBACK STARTED FC = ", GET_FRAME_COUNT(), " game timer = ", GET_GAME_TIMER())
|
|
|
|
// WAIT(0)
|
|
// IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
// START_PLAYBACK_RECORDED_vehicle(sTargetVehicle.vehicle, iRecNumTarget, sNigel2_UberRecordingName)
|
|
// CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : START_PLAYBACK_RECORDED_vehicle STARTED FC = ", GET_FRAME_COUNT(), " game timer = ", GET_GAME_TIMER())
|
|
SET_PLAYBACK_TO_USE_AI_TRY_TO_REVERT_BACK_LATER(sTargetVehicle.vehicle, (iDebug_AdditionalAIDriveTime + 175 +(ROUND(43500.00 - fCurrentPlaybackTime))), DRIVINGMODE_PLOUGHTHROUGH)
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : SET_PLAYBACK_TO_USE_AI_TRY_TO_REVERT_BACK_LATER this fCurrentPlaybackTime = ", fCurrentPlaybackTime, " game timer = ", GET_GAME_TIMER())
|
|
// ENDIF
|
|
//ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF fCurrentPlaybackTime > 77000.0
|
|
AND fCurrentPlaybackTime < 81263.80
|
|
IF NOT IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
SET_PLAYBACK_TO_USE_AI_TRY_TO_REVERT_BACK_LATER(sTargetVehicle.vehicle, (iDebug_AdditionalAIDriveTime +(ROUND(81263.80 - fCurrentPlaybackTime))), DRIVINGMODE_PLOUGHTHROUGH)
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : SET_PLAYBACK_TO_USE_AI_TRY_TO_REVERT_BACK_LATER this fCurrentPlaybackTime = ", fCurrentPlaybackTime)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
fTimeDiff = fCurrentPlaybackTime
|
|
fTimeDiff -= fGhostCarPlaybackTime
|
|
IF IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : IS_PLAYBACK_USING_AI_GOING_ON_FOR_VEHICLE this fCurrentPlaybackTime = ", fCurrentPlaybackTime,
|
|
" fGhostCarPlaybackTime = ", fGhostCarPlaybackTime, " fTimeDiff = ", fTimeDiff, " fRecordedTime = ", fRecordedTime)
|
|
ENDIF
|
|
ENDIF
|
|
fTimeDiff = fCurrentPlaybackTime
|
|
fTimeDiff -= fGhostCarPlaybackTime
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : STANDARD CHECKS : fCurrentPlaybackTime = ", fCurrentPlaybackTime,
|
|
" fGhostCarPlaybackTime = ", fGhostCarPlaybackTime, " fTimeDiff = ", fTimeDiff, " fRecordedTime = ", fRecordedTime, " vRecordingPosition = ", vRecordingPosition)
|
|
ENDIF
|
|
// drop out
|
|
IF IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_LEFT)
|
|
eSubStage = SS_CLEANUP
|
|
ENDIF
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_CLEANUP
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF IS_RECORDING_GOING_ON_FOR_vehicle(sTargetVehicle.vehicle)
|
|
STOP_RECORDING_VEHICLE(sTargetVehicle.vehicle)
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_UPDATE : STOP_RECORDING_VEHICLE")
|
|
ENDIF
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_VEHICLE_OK(vehDebug_Ghost)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehDebug_Ghost)
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(vehDebug_Ghost)
|
|
ENDIF
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION, "DEBUG : RECORD_CHASE_ROUTE : SS_CLEANUP")
|
|
eSubStage = SS_SETUP
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC PLAYBACK_CHASE_ROUTE()
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_PARKED_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
eSubStage = SS_CLEANUP
|
|
SWITCH eSubStage
|
|
// ------------------------------------------
|
|
CASE SS_SETUP
|
|
LOAD_MISSION_ASSETS(TRUE)
|
|
SETUP_FOR_START_OF_MISSION()
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
ENDIF
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
AND IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(sTargetPed.ped)
|
|
CLEAR_PED_TASKS(sTargetPed.ped)
|
|
SAFE_PUT_PED_INTO_VEHICLE(sTargetPed.ped, sTargetVehicle.vehicle)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "TARGET WARPED INTO VEHICLE USING SAFETY NET") ENDIF #ENDIF
|
|
ENDIF
|
|
IF NOT DOES_BLIP_EXIST(sTargetPed.blip)
|
|
sTargetPed.blip = CREATE_PED_BLIP(sTargetPed.ped, TRUE, FALSE)
|
|
SET_BLIP_SCALE(sTargetPed.blip, 1.0) //TEMP: added as per bug 241312
|
|
ENDIF
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sTargetPed.ped, TRUE)
|
|
ENDIF
|
|
//for uber playback
|
|
INITIALISE_UBER_PLAYBACK(sNigel2_UberRecordingName, iMainCarRecID)
|
|
LOAD_UBER_DATA()
|
|
CREATE_ALL_WAITING_UBER_CARS()
|
|
switch_SetPieceCar_to_ai_on_collision = true
|
|
allow_veh_to_stop_on_any_veh_impact = TRUE
|
|
bPlayTrafficRecordingEvenIfPlayerIsAheadOfChase = TRUE //might help with some traffic failing to spawn?
|
|
//fPlaybackCarStreamingDistance = 160.0 // 120.0 // is default
|
|
traffic_block_vehicle_colour(true, traffic_black)
|
|
//deactivate_SetPieceCars_up_to_time(77000)
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
START_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, iMainCarRecID, sNigel2_UberRecordingName)
|
|
//DISPLAY_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, RDM_WHOLELINE)
|
|
//PAUSE_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PLAYBACK CHASE ROUTE SETUP DONE") ENDIF #ENDIF
|
|
/*
|
|
//for normal play
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sTargetVehicle.vehicle, VS_FRONT_RIGHT)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
SET_VEHICLE_ENGINE_ON(sTargetVehicle.vehicle, TRUE, TRUE)
|
|
SET_ENTITY_COORDS(sTargetVehicle.vehicle, << -1363.1553, -596.5627, 28.6889 >>) //601 = << -1355.8376, -590.6566, 28.6889 >>
|
|
SET_ENTITY_QUATERNION(sTargetVehicle.vehicle, -0.0197, -0.0202, 0.9972, -0.0693) //601 = 0.0160, 0.0349, 0.4617, 0.8862
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, FALSE)
|
|
START_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, iMainCarRecID, sNigel2_UberRecordingName)
|
|
DISPLAY_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, RDM_WHOLELINE)
|
|
PAUSE_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
*/
|
|
/*
|
|
//debug crash setup
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
SAFE_PUT_PED_INTO_VEHICLE(sTargetPed.ped, sTargetVehicle.vehicle)
|
|
SET_ENTITY_COORDS(sTargetVehicle.vehicle, << 394.8243, -621.0986, 27.9387 >>)
|
|
SET_ENTITY_HEADING(sTargetVehicle.vehicle, 235.1330)
|
|
ENDIF
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
SET_ENTITY_COORDS(sNigelVehicle.vehicle, << 333.4894, -580.4035, 42.3070 >>)
|
|
SET_ENTITY_HEADING(sNigelVehicle.vehicle, 251.8706)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
SET_VEHICLE_ENGINE_ON(sTargetVehicle.vehicle, TRUE, TRUE)
|
|
ENDIF
|
|
*/
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
eSubStage = SS_UPDATE
|
|
ENDIF
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_UPDATE
|
|
//for uber playback
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
fCurrentChaseDistance = VDIST(vPlayerPos, GET_ENTITY_COORDS(sTargetVehicle.vehicle, FALSE))
|
|
fCurrentPlaybackTime = GET_TIME_POSITION_IN_RECORDING(sTargetVehicle.vehicle)
|
|
//CALCULATE_NEW_PLAYBACK_SPEED_FROM_CHAR(sTargetVehicle.vehicle, PLAYER_PED_ID(), fMainPlaybackSpeed, 1, 5, 20, 100, 2, 1)
|
|
//UPDATE_UBER_CHASE_SPEED(fMainPlaybackSpeed, fCurrentPlaybackTime)
|
|
fMainPlaybackSpeed = 1.0
|
|
bPlayTrafficRecordingEvenIfPlayerIsAheadOfChase = TRUE //might help with some traffic failing to spawn?
|
|
SET_PLAYBACK_SPEED(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
PRELOAD_UBER_RECORDINGS_DURING_PLAYBACK()
|
|
UPDATE_CHASE_VEHICLES_FROM_UBER_RECORDING()
|
|
CREATE_ALL_WAITING_UBER_CARS() //might help with some traffic failing to spawn?
|
|
UPDATE_UBER_PLAYBACK(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
CONTROL_VEHICLE_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, sTargetVehicle.vehicle)
|
|
/*
|
|
IF fCurrentPlaybackTime >= 113836.0 //target just about to enter hospital
|
|
eSubStage = SS_CLEANUP
|
|
ENDIF
|
|
*/
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "CURRENT PLAYBACK TIME = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
//UPDATE_UBER_CHASE_SPEED(fMainPlaybackSpeed, fCurrentPlaybackTime)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "fMainPlaybackSpeed = ", fMainPlaybackSpeed) ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
/* //for normal playback
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
//for normal play
|
|
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_NEXT_RADIO)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
UNPAUSE_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PLAYBACK OF RECORDING UNPAUSED") ENDIF #ENDIF
|
|
ENDIF
|
|
ELIF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_PREV_RADIO)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
PAUSE_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PLAYBACK OF RECORDING PAUSED") ENDIF #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
MANAGE_PEDESTRIANS_ON_CHASE_ROUTE()
|
|
ENDIF
|
|
*/
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_CLEANUP
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PLAYBACK CHASE ROUTE CLEANUP") ENDIF #ENDIF
|
|
//for uber playback
|
|
//CLEANUP_UBER_PLAYBACK()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC DEBUG_STATE()
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SWITCH eSubStage
|
|
// ------------------------------------------
|
|
CASE SS_SETUP
|
|
LOAD_MISSION_ASSETS(TRUE)
|
|
SETUP_FOR_START_OF_MISSION()
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
IF IS_PED_UNINJURED(sNigelPed.ped)
|
|
SAFE_PUT_PED_INTO_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle, VS_FRONT_RIGHT)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
SAFE_PUT_PED_INTO_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle, VS_BACK_RIGHT)
|
|
ENDIF
|
|
ENDIF
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
//SAFE_PUT_PED_INTO_VEHICLE(sTargetPed.ped, sTargetVehicle.vehicle)
|
|
ENDIF
|
|
//SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sTargetVehicle.vehicle)
|
|
ENDIF
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL, BUILDINGSTATE_DESTROYED) // sets the window to destroyed so player/target can drive through it
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL_INTERIOR, BUILDINGSTATE_NORMAL)
|
|
//SAFE_TELEPORT_VEHICLE(sTargetVehicle.vehicle, << 285.5170, -571.1989, 42.1589 >>, 221.0)
|
|
/*
|
|
//hospital debris trials
|
|
REQUEST_PTFX_ASSET()
|
|
|
|
WHILE NOT HAS_PTFX_ASSET_LOADED()
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "REQUESTING SCRIPT PTFX") ENDIF #ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
*/
|
|
//SET_ENTITY_COORDS(PLAYER_PED_ID(), << 285.5170, -571.1989, 42.1589 >>)
|
|
//SET_ENTITY_HEADING(PLAYER_PED_ID(), 221.0036)
|
|
//SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
//outside hospital
|
|
SAFE_TELEPORT_VEHICLE(sNigelVehicle.vehicle, << 337.2605, -581.4758, 42.3258 >>, 254.3901)
|
|
SET_DEBUG_ACTIVE(TRUE)
|
|
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
|
|
/*
|
|
REQUEST_VEHICLE_RECORDING(9, "Nigel2R")
|
|
WHILE NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(9, "Nigel2R")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "LOADING THE NEW CAR REC") ENDIF #ENDIF
|
|
WAIT(0)
|
|
ENDWHILE
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, FALSE)
|
|
START_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, 9, "Nigel2R")
|
|
DISPLAY_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, RDM_WHOLELINE)
|
|
//PAUSE_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
ENDIF
|
|
*/
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
eSubStage = SS_UPDATE
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_UPDATE
|
|
MANAGE_HOSPITAL_STATE_DURING_CHASE()
|
|
/*
|
|
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_NEXT_RADIO)
|
|
SET_FOLLOW_VEHICLE_CAM_VIEW_MODE(CAM_VIEW_MODE_CINEMATIC)
|
|
ELIF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_PREV_RADIO)
|
|
SET_FOLLOW_VEHICLE_CAM_VIEW_MODE(CAM_VIEW_MODE_FIRST_PERSON)
|
|
ELIF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_HORN)
|
|
SET_FOLLOW_VEHICLE_CAM_VIEW_MODE(CAM_VIEW_MODE_THIRD_PERSON)
|
|
ENDIF
|
|
*/
|
|
/*
|
|
//for playback
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
CALCULATE_NEW_PLAYBACK_SPEED_FROM_CHAR(sTargetVehicle.vehicle, PLAYER_PED_ID(), fMainPlaybackSpeed, 1, 8, 25, 80, 1.4, 1)
|
|
SET_PLAYBACK_SPEED(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
ENDIF
|
|
ENDIF
|
|
*/
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_CLEANUP
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
//for testing hospital section!
|
|
PROC DEBUG_HOSPITAL_STATE()
|
|
SWITCH eSubStage
|
|
// ------------------------------------------
|
|
CASE SS_SETUP
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "bosh") ENDIF #ENDIF
|
|
LOAD_MISSION_ASSETS(TRUE)
|
|
SETUP_FOR_START_OF_MISSION()
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
IF IS_PED_UNINJURED(sNigelPed.ped)
|
|
SAFE_PUT_PED_INTO_VEHICLE(sNigelPed.ped, sNigelVehicle.vehicle, VS_FRONT_RIGHT)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(sMrsThornhillPed.ped)
|
|
SAFE_PUT_PED_INTO_VEHICLE(sMrsThornhillPed.ped, sNigelVehicle.vehicle, VS_BACK_RIGHT)
|
|
ENDIF
|
|
SAFE_TELEPORT_VEHICLE(sNigelVehicle.vehicle, << -413.1205, -503.5363, 24.3236 >>, 258.4841) // << -469.2073, -836.5956, 29.5250 >>, 315.1508)
|
|
SET_VEHICLE_ENGINE_ON(sNigelVehicle.vehicle, TRUE, TRUE)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
AND IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF NOT IS_PED_SITTING_IN_VEHICLE(sTargetPed.ped, sTargetVehicle.vehicle)
|
|
CLEAR_PED_TASKS(sTargetPed.ped)
|
|
SAFE_PUT_PED_INTO_VEHICLE(sTargetPed.ped, sTargetVehicle.vehicle)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "TARGET WARPED INTO VEHICLE USING SAFETY NET") ENDIF #ENDIF
|
|
ENDIF
|
|
IF NOT DOES_BLIP_EXIST(sTargetPed.blip)
|
|
sTargetPed.blip = CREATE_PED_BLIP(sTargetPed.ped, TRUE, FALSE)
|
|
SET_BLIP_SCALE(sTargetPed.blip, 1.0) //TEMP: added as per bug 241312
|
|
ENDIF
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sTargetPed.ped, TRUE)
|
|
ENDIF
|
|
//for uber playback
|
|
INITIALISE_UBER_PLAYBACK(sNigel2_UberRecordingName, iMainCarRecID)
|
|
LOAD_UBER_DATA()
|
|
CREATE_ALL_WAITING_UBER_CARS()
|
|
switch_SetPieceCar_to_ai_on_collision = true
|
|
allow_veh_to_stop_on_any_veh_impact = TRUE
|
|
//bPlayTrafficRecordingEvenIfPlayerIsAheadOfChase = TRUE //might help with some traffic failing to spawn?
|
|
//fPlaybackCarStreamingDistance = 160.0 // 120.0 // is default
|
|
traffic_block_vehicle_colour(true, traffic_black)
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
AND IS_PED_UNINJURED(sTargetPed.ped)
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, FALSE)
|
|
START_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, iMainCarRecID, sNigel2_UberRecordingName)
|
|
#IF IS_DEBUG_BUILD DISPLAY_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, RDM_WHOLELINE) #ENDIF
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, 88006.860) // 70000.0) //
|
|
SET_UBER_PLAYBACK_TO_TIME_NOW(sTargetVehicle.vehicle, 88006.860) // 70000.0) //
|
|
//PAUSE_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
ENDIF
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL, BUILDINGSTATE_DESTROYED)
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL_INTERIOR, BUILDINGSTATE_NORMAL)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG_HOSPITAL_STATE - SS_SETUP - set BUILDINGNAME_IPL_PILLBOX_HILL swaps to BUILDINGSTATE_DESTROYED") ENDIF #ENDIF
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " TESTER IT BUILT $$$$$$$$$$$$$$") ENDIF #ENDIF
|
|
eSubStage = SS_UPDATE
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_UPDATE
|
|
NIG2_TRACK_STAT_HAS_PLAYER_INJURED_PED_WHILST_IN_HOSPITAL()
|
|
IF IS_PED_UNINJURED(sTargetPed.ped)
|
|
AND IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
fCurrentChaseDistance = VDIST(vPlayerPos, GET_ENTITY_COORDS(sTargetVehicle.vehicle, FALSE))
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
fCurrentPlaybackTime = GET_TIME_POSITION_IN_RECORDING(sTargetVehicle.vehicle)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "CURRENT PLAYBACK TIME = ", fCurrentPlaybackTime) ENDIF #ENDIF
|
|
UPDATE_UBER_CHASE_SPEED(fMainPlaybackSpeed, fCurrentPlaybackTime)
|
|
//#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "fMainPlaybackSpeed = ", fMainPlaybackSpeed) ENDIF #ENDIF
|
|
SET_PLAYBACK_SPEED(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
bPlayTrafficRecordingEvenIfPlayerIsAheadOfChase = TRUE //might help with some traffic failing to spawn?
|
|
PRELOAD_UBER_RECORDINGS_DURING_PLAYBACK()
|
|
CREATE_ALL_WAITING_UBER_CARS() //might help with some traffic failing to spawn?
|
|
UPDATE_CHASE_VEHICLES_FROM_UBER_RECORDING()
|
|
UPDATE_UBER_PLAYBACK(sTargetVehicle.vehicle, fMainPlaybackSpeed)
|
|
MANAGE_RAYFIRE_HOSPITAL_DOORS()
|
|
MANAGE_HOSPITAL_STATE_DURING_CHASE()
|
|
CONTROL_VEHICLE_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, sTargetVehicle.vehicle)
|
|
MANAGE_TARGET_BRAKING_AND_USING_HORN()
|
|
APPLY_VISUAL_DAMAGE_TO_TARGET_VEHICLE()
|
|
ELSE
|
|
IF NOT bDone_UberRecordingCleanupForChaseEnd
|
|
CLEANUP_UBER_PLAYBACK()
|
|
REMOVE_ALL_CAR_RECORDINGS_FOR_UBER_CHASE()
|
|
//main car recording
|
|
REMOVE_VEHICLE_RECORDING(iMainCarRecID, sNigel2_UberRecordingName)
|
|
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(sTargetVehicle.vehicle)
|
|
IF IS_AUDIO_SCENE_ACTIVE("NIGEL_02_CHASE")
|
|
STOP_AUDIO_SCENE("NIGEL_02_CHASE")
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, " NIGEL 02 - STOP_AUDIO_SCENE : NIGEL_02_CHASE ", "***") ENDIF #ENDIF
|
|
ENDIF
|
|
SETUP_TARGET_FOR_CRASH()
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UBER RECORDING ENDED, set up for crash scene") ENDIF #ENDIF
|
|
bDone_UberRecordingCleanupForChaseEnd = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
MANAGE_HOSPITAL_SOUND_FX()
|
|
MANAGE_PEDESTRIANS_ON_CHASE_ROUTE(vPlayerPos)
|
|
MANAGE_HOSPITAL_DEBRIS_EFFECT()
|
|
MANAGE_DIALOGUE_DURING_CHASE(bForceTargetblipFlashThisFrame) // needs to come before UPDATE_CHASE_BLIP since it sets bForceTargetblipFlashThisFrame
|
|
MANAGE_JUMP_OUT_HOSPITAL_WINDOW()
|
|
//Checl for player close to target at end of the chase.
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
//DRAW_DEBUG_SPHERE(GET_ENTITY_COORDS(sTargetPed.ped), NIGEL2_PLAYER_CLOSE_TO_TARGET_CRASHED, 0, 0, 255, 120)
|
|
IF(GET_DISTANCE_BETWEEN_COORDS(vPlayerPos, GET_ENTITY_COORDS(sTargetPed.ped)) < NIGEL2_PLAYER_CLOSE_TO_TARGET_CRASHED)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PLAYER CLOSE TO CRASHED AL DI NAPOLI - GO TO PUT IN BOOT SECTION") ENDIF #ENDIF
|
|
eSubStage = SS_CLEANUP
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_CLEANUP
|
|
IF bDoneCleanup_JumpOutHospitalWindow
|
|
SET_CHANGES_FOR_FORCED_CINEMATIC_JUMP_OUT_HOSPITAL_WINDOW(FALSE)
|
|
bDoneCleanup_JumpOutHospitalWindow = FALSE
|
|
ENDIF
|
|
IF NOT bDone_UberRecordingCleanupForChaseEnd
|
|
CLEANUP_UBER_PLAYBACK()
|
|
REMOVE_ALL_CAR_RECORDINGS_FOR_UBER_CHASE()
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
//check if its at the end time wise, if so freeze its pos?
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
//SKIP_TO_END_AND_STOP_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, TRUE)
|
|
ENDIF
|
|
REMOVE_VEHICLE_RECORDING(iMainCarRecID, sNigel2_UberRecordingName)
|
|
SETUP_TARGET_FOR_CRASH()
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "UBER RECORDING ENDED IN SS_CLEANUP") ENDIF #ENDIF
|
|
bDone_UberRecordingCleanupForChaseEnd = TRUE
|
|
ENDIF
|
|
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
|
|
//KILL_ANY_CONVERSATION()
|
|
SET_STAGE(MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC DEBUG_HOSPITAL_DOORS_STATE()
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SWITCH eSubStage
|
|
// ------------------------------------------
|
|
CASE SS_SETUP
|
|
bDebug_PrintMissionInfoToTTY = TRUE
|
|
LOAD_MISSION_ASSETS(TRUE)
|
|
SETUP_FOR_START_OF_MISSION()
|
|
/*
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sTargetVehicle.vehicle)
|
|
ENDIF
|
|
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, FALSE)
|
|
START_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, iMainCarRecID, sNigel2_UberRecordingName)
|
|
#IF IS_DEBUG_BUILD
|
|
DISPLAY_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, RDM_WHOLELINE)
|
|
#ENDIF
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, 109072.500)
|
|
PAUSE_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
ENDIF
|
|
*/
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
SAFE_PUT_PED_INTO_VEHICLE(PLAYER_PED_ID(), sNigelVehicle.vehicle)
|
|
SAFE_TELEPORT_VEHICLE(sNigelVehicle.vehicle, <<337.6252, -582.2834, 42.3174>>, 252.3868) // for window
|
|
// << 293.3672, -579.1942, 42.1950 >>, 223.0003) // for hospital doors
|
|
SET_VEHICLE_ENGINE_ON(sNigelVehicle.vehicle, TRUE, TRUE)
|
|
ENDIF
|
|
//for ray fire test only <
|
|
//SET_ENTITY_COORDS(PLAYER_PED_ID(), << 293.3672, -579.1942, 42.1950 >>)
|
|
//SET_ENTITY_HEADING(PLAYER_PED_ID(), 223.0003)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
//SET_BUILDING_STATE(BUILDINGNAME_ES_PILLBOX_HILL, BUILDINGSTATE_DESTROYED)
|
|
//SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL, BUILDINGSTATE_DESTROYED)
|
|
//SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL_INTERIOR, BUILDINGSTATE_NORMAL)
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK(0, FALSE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
|
|
//temp
|
|
IF eHospitalInteriorState = HIS_SET_INTERIOR_IPLS_FOR_CHASE
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL, BUILDINGSTATE_DESTROYED) // sets the window to destroyed so player/target can drive through it
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_PILLBOX_HILL_INTERIOR, BUILDINGSTATE_NORMAL) // sets the interior to stream
|
|
HospitalInteriorIndex = GET_INTERIOR_AT_COORDS_WITH_TYPE(<< 307.3065, -589.9595, 43.3020 >>, "v_hospital") //get handle to hospital interior
|
|
eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - done HIS_SET_INTERIOR_IPLS_FOR_CHASE : FC = ", GET_FRAME_COUNT())
|
|
|
|
// interior needs to be pinned into memory really early
|
|
ELIF eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
IF IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
IF NOT IS_INTERIOR_READY(HospitalInteriorIndex)
|
|
PIN_INTERIOR_IN_MEMORY(HospitalInteriorIndex)
|
|
ELSE
|
|
SET_INTERIOR_ACTIVE(HospitalInteriorIndex, TRUE)
|
|
eHospitalInteriorState = HIS_REFRESH_INTERIOR
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - done HIS_PIN_INTERIOR_IN_MEMORY : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ELSE
|
|
HospitalInteriorIndex = GET_INTERIOR_AT_COORDS_WITH_TYPE(<< 307.3065, -589.9595, 43.3020 >>, "v_hospital") //get handle to hospital interior
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE getting handle to valid interior : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// refresh the interior once everything should be setup correctly
|
|
ELIF eHospitalInteriorState = HIS_REFRESH_INTERIOR
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
IF IS_VALID_INTERIOR(HospitalInteriorIndex)
|
|
IF IS_INTERIOR_READY(HospitalInteriorIndex)
|
|
REFRESH_INTERIOR(HospitalInteriorIndex)
|
|
eHospitalInteriorState = HIS_READY // HIS_REQUEST_NEW_LOAD_SCENE_AT_INTERIOR //
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE - SKIPPED ^ done HIS_REFRESH_INTERIOR : FC = ", GET_FRAME_COUNT())
|
|
ELSE
|
|
PIN_INTERIOR_IN_MEMORY(HospitalInteriorIndex)
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_REFRESH_INTERIOR - re pinnning in memory : FC = ", GET_FRAME_COUNT())
|
|
//eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
//CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_REFRESH_INTERIOR - error interior no longer ready! : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ELSE
|
|
HospitalInteriorIndex = GET_INTERIOR_AT_COORDS_WITH_TYPE(<< 307.3065, -589.9595, 43.3020 >>, "v_hospital") //get handle to hospital interior
|
|
CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_REFRESH_INTERIOR - getting handle to valid interior : FC = ", GET_FRAME_COUNT())
|
|
//eHospitalInteriorState = HIS_PIN_INTERIOR_IN_MEMORY
|
|
//CPRINTLN(DEBUG_MISSION, " ***** MANAGE_HOSPITAL_STATE_DURING_CHASE : HIS_REFRESH_INTERIOR - error interior no longer valid! : FC = ", GET_FRAME_COUNT())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG_HOSPITAL_DOORS_STATE - SS_SETUP - set building swaps to BUILDINGSTATE_DESTROYED") ENDIF #ENDIF
|
|
eSubStage = SS_UPDATE
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_UPDATE
|
|
//MANAGE_HOSPITAL_STATE_DURING_CHASE()
|
|
MANAGE_JUMP_OUT_HOSPITAL_WINDOW()
|
|
NIG2_TRACK_STAT_HAS_PLAYER_INJURED_PED_WHILST_IN_HOSPITAL()
|
|
|
|
IF IS_VEHICLE_OK(sNigelVehicle.vehicle)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(sNigelVehicle.vehicle, <<381.915619,-628.101440,22.932293>>, <<394.477234,-606.126953,35.774826>>, 18.500000)
|
|
|
|
//IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS()
|
|
// CPRINTLN(DEBUG_MISSION, "+++++++++ ok for stop cutscene FC = ", GET_FRAME_COUNT())
|
|
//ENDIF
|
|
|
|
IF IS_VEHICLE_SETTLED_FOR_CUTSCENE(sNigelVehicle.vehicle)
|
|
IF HAS_TIME_PASSED(iTimer_OutroMocapDelay, 500)
|
|
DRAW_RECT(0.2, 0.5, 0.2, 0.4, 76, 255, 0, 100) // green
|
|
ELSE
|
|
DRAW_RECT(0.2, 0.5, 0.2, 0.4, 170, 0, 255, 100) // purple
|
|
ENDIF
|
|
ELSE
|
|
iTimer_OutroMocapDelay = GET_GAME_TIMER()
|
|
DRAW_RECT(0.2, 0.5, 0.2, 0.4, 255, 0, 0, 100) // red
|
|
ENDIF
|
|
ELSE
|
|
iTimer_OutroMocapDelay = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// B*1572752 - now creating doors object in script to display until rayfire anim kicks in - rayfire object always struggled to stream prior to start state
|
|
IF eHospitalDoorsObjectState = HDO_CREATE
|
|
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_JUMP)
|
|
IF NOT DOES_ENTITY_EXIST(sObjectHospitalDoors.objectIndex)
|
|
REQUEST_MODEL(sObjectHospitalDoors.modelName)
|
|
IF HAS_MODEL_LOADED(sObjectHospitalDoors.modelName)
|
|
sObjectHospitalDoors.objectIndex = CREATE_OBJECT(sObjectHospitalDoors.modelName, sObjectHospitalDoors.vPos)
|
|
IF IS_ENTITY_ALIVE(sObjectHospitalDoors.objectindex)
|
|
SET_ENTITY_ROTATION(sObjectHospitalDoors.objectindex, sObjectHospitalDoors.vRot)
|
|
FREEZE_ENTITY_POSITION(sObjectHospitalDoors.objectindex, TRUE)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sObjectHospitalDoors.modelName)
|
|
eHospitalDoorsObjectState = HDO_WAIT_FOR_DELETE
|
|
CPRINTLN(DEBUG_MISSION, "OBJECT Hospital Doors Progress, created doors : eHospitalDoorsObjectState > HDO_WAIT_FOR_DELETE")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// same frame the rayfire object begins to playback from this object
|
|
ELIF eHospitalDoorsObjectState = HDO_WAIT_FOR_DELETE
|
|
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_SPRINT)
|
|
IF DOES_ENTITY_EXIST(sObjectHospitalDoors.objectIndex)
|
|
SAFE_DELETE_OBJECT(sObjectHospitalDoors.objectIndex)
|
|
eHospitalDoorsObjectState = HDO_CREATE
|
|
CPRINTLN(DEBUG_MISSION, "OBJECT Hospital Doors Progress, doors deleted for rayfire : eHospitalDoorsObjectState > HDO_CREATE")
|
|
ENDIF
|
|
ENDIF
|
|
ELIF eHospitalDoorsObjectState = HDO_END
|
|
|
|
ENDIF
|
|
|
|
//IF GET_ENTITY_UPRIGHT_VALUE(sNigelVehicle.vehicle) < 0.1
|
|
// APPLY_FORCE_TO_ENTITY(sNigelVehicle.vehicle, APPLY_TYPE_ANGULAR_IMPULSE, -GET_ENTITY_ROTATION_VELOCITY(vehCar), << 0.0, 0.0, 0.0 >>, 0, TRUE, FALSE, FALSE)
|
|
//ENDIF
|
|
|
|
/*
|
|
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_NEXT_RADIO)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "trigger screams sfx") ENDIF #ENDIF
|
|
PLAY_SOUND_FROM_COORD(-1, "SCREAMS", << 310.5149, -595.4158, 42.3020 >>, "NIGEL_02_SOUNDSET")
|
|
ELIF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_PREV_RADIO)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "trigger flatline sfx") ENDIF #ENDIF
|
|
PLAY_SOUND_FROM_COORD(-1, "ECG", << 357.6582, -585.5173, 42.3275 >>, "NIGEL_02_SOUNDSET")
|
|
ENDIF
|
|
*/
|
|
/*
|
|
IF IS_VEHICLE_OK(sTargetVehicle.vehicle)
|
|
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_NEXT_RADIO)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
UNPAUSE_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
#IF IS_DEBUG_BUILD IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "PLAYBACK OF RECORDING UNPAUSED") ENDIF #ENDIF
|
|
ENDIF
|
|
ELIF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_PREV_RADIO)
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
FREEZE_ENTITY_POSITION(sTargetVehicle.vehicle, FALSE)
|
|
START_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, iMainCarRecID, sNigel2_UberRecordingName)
|
|
#IF IS_DEBUG_BUILD
|
|
DISPLAY_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, RDM_WHOLELINE)
|
|
#ENDIF
|
|
ENDIF
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(sTargetVehicle.vehicle)
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle, 109072.500)
|
|
PAUSE_PLAYBACK_RECORDED_VEHICLE(sTargetVehicle.vehicle)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
*/
|
|
BREAK
|
|
// ------------------------------------------
|
|
CASE SS_CLEANUP
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
SCRIPT(g_structRCScriptArgs sRCLauncherDataIn)
|
|
|
|
sRCLauncherDataLocal = sRCLauncherDataIn
|
|
RC_TakeEntityOwnership(sRCLauncherDataLocal)
|
|
|
|
SET_MISSION_FLAG(TRUE)
|
|
|
|
// Setup callback when player is killed, arrested or goes to multiplayer
|
|
IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU))
|
|
PRINT_LAUNCHER_DEBUG("Force cleanup [TERMINATING]")
|
|
Random_Character_Failed()
|
|
Script_Cleanup()
|
|
ENDIF
|
|
|
|
/*IF IS_REPLAY_IN_PROGRESS() // Set up the initial scene for replays
|
|
g_bSceneAutoTrigger = TRUE
|
|
//set the initial scene back up
|
|
eInitialSceneStage = IS_REQUEST_SCENE
|
|
WHILE NOT SetupScene_NIGEL_2(sRCLauncherDataLocal)
|
|
CPRINTLN(DEBUG_MISSION, " IS_REPLAY_IN_PROGRESS - waiting on SetupScene_NIGEL_2")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
|
|
RC_TakeEntityOwnership(sRCLauncherDataLocal)
|
|
SETUP_AREA_FOR_MISSION(RC_NIGEL_2, FALSE) // need to turn this off in this instance since launcher cleanup won't get called to do it
|
|
g_bSceneAutoTrigger = FALSE
|
|
ENDIF*/
|
|
|
|
INIT_MISSION()
|
|
|
|
// handle replay checkpoints
|
|
IF IS_REPLAY_IN_PROGRESS()
|
|
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
|
|
|
|
INT iReplayStage = GET_REPLAY_MID_MISSION_STAGE()
|
|
IF g_bShitskipAccepted = TRUE
|
|
iReplayStage++ // player is skipping this stage
|
|
ENDIF
|
|
SWITCH iReplayStage
|
|
CASE CP_NIGEL2_START_CHASE
|
|
START_REPLAY_SETUP(<<-1309.0155, -641.8671, 25.5017>>, 242.3463, FALSE) // match mocap finished position and heading
|
|
bDoneDialogue_GetInNigelsVehicle[0] = TRUE //set this dialogue to have already played, because they want the skip to be at the objective instead
|
|
DO_Z_SKIP(Z_SKIP_START_CHASE) // skip the mocap intro
|
|
CPRINTLN(DEBUG_MISSION, "* Replay checkpoint * - ", "start chase in progress")
|
|
BREAK
|
|
CASE CP_NIGEL2_MISSION_PASSED
|
|
START_REPLAY_SETUP(<< 391.08, -615.87, 28.33 >>, 333.66, FALSE) // match position for kicking off outro mocap
|
|
DO_Z_SKIP(Z_SKIP_OUTRO_CUTSCENE)
|
|
CPRINTLN(DEBUG_MISSION, "* Replay checkpoint * - ", "mission passed in progress (play outro mocap first")
|
|
BREAK
|
|
DEFAULT
|
|
SCRIPT_ASSERT("RC - NIGEL 2 : Replay checkpoint * - starting mission from invalid checkpoint")
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
WHILE(TRUE)
|
|
|
|
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_VSADN")
|
|
|
|
UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
MISSION_FAILED_CHECKS()
|
|
|
|
vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
|
|
|
|
// Fix B*1121745 - swap over to call everyframe commands
|
|
SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(PLAYER_ID())
|
|
SET_ALL_NEUTRAL_RANDOM_PEDS_FLEE_THIS_FRAME(PLAYER_ID())
|
|
|
|
SWITCH eMissionStage
|
|
CASE MISSION_STAGE_INTRO_MOCAP_SCENE
|
|
INTRO_MOCAP_SCENE()
|
|
BREAK
|
|
CASE MISSION_STAGE_CHASE_TARGET_IN_VEHICLE
|
|
CHASE_TARGET_IN_VEHICLE()
|
|
BREAK
|
|
CASE MISSION_STAGE_GET_CLOSE_TO_TARGET_FOR_CUTSCENE
|
|
GET_CLOSE_TO_TARGET_FOR_CUTSCENE()
|
|
BREAK
|
|
CASE MISSION_STAGE_END_CUTSCENE_MOCAP
|
|
STAGE_END_CUTSCENE_MOCAP()
|
|
BREAK
|
|
CASE MISSION_STAGE_MISSION_PASSED
|
|
Script_Passed()
|
|
BREAK
|
|
CASE MISSION_STAGE_MISSION_FAILED_WAIT_FOR_FADE
|
|
MISSION_FAILED_WAIT_FOR_FADE()
|
|
BREAK
|
|
CASE MISSION_STAGE_DEBUG_RECORD_CHASE_ROUTE // debug stage
|
|
#IF IS_DEBUG_BUILD
|
|
RECORD_CHASE_ROUTE()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MISSION_STAGE_DEBUG_PLAYBACK_CHASE_ROUTE // debug stage
|
|
#IF IS_DEBUG_BUILD
|
|
PLAYBACK_CHASE_ROUTE()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MISSION_STAGE_DEBUG // debug stage
|
|
#IF IS_DEBUG_BUILD
|
|
DEBUG_STATE()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MISSION_STAGE_DEBUG_HOPSITAL // debug stage
|
|
#IF IS_DEBUG_BUILD
|
|
DEBUG_HOSPITAL_STATE()
|
|
#ENDIF
|
|
BREAK
|
|
CASE MISSION_STAGE_DEBUG_HOPSITAL_DOORS // debug stage
|
|
#IF IS_DEBUG_BUILD
|
|
DEBUG_HOSPITAL_DOORS_STATE()
|
|
#ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
// if we are skipping through the mission stages, for a checkpoint / debug skip
|
|
IF bFinishedStageSkipping = FALSE
|
|
JUMP_TO_STAGE(eMissionSkipTargetStage)
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
MAINTAIN_MISSION_WIDGETS()
|
|
//This is here so it can use the debug skipping functions
|
|
IF bDebug_SetupMission_DebugStage
|
|
RC_START_Z_SKIP(TRUE, FALSE)
|
|
RESET_MISSION()
|
|
SET_STAGE(MISSION_STAGE_DEBUG_HOPSITAL_DOORS)
|
|
RC_END_Z_SKIP()
|
|
IF bDebug_PrintMissionInfoToTTY CPRINTLN(DEBUG_MISSION, "DEBUG - mission setup in debug stage.") ENDIF
|
|
bDebug_SetupMission_DebugStage = FALSE
|
|
ENDIF
|
|
|
|
// temp placement
|
|
IF bDebug_CheckPlayerInsideHospital
|
|
IS_PED_INSIDE_HOSPITAL_INTERIOR(PLAYER_PED_ID())
|
|
ENDIF
|
|
IF bFinishedStageSkipping = TRUE // not skipping stages, check for debug keys as long as we aren't in fail state
|
|
IF eMissionStage <> MISSION_STAGE_MISSION_FAILED_WAIT_FOR_FADE
|
|
DEBUG_Check_Debug_Keys()
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDSCRIPT
|