3869 lines
141 KiB
Python
Executable File
3869 lines
141 KiB
Python
Executable File
|
|
//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 "cellphone_public.sch"
|
|
USING "commands_entity.sch"
|
|
USING "commands_event.sch"
|
|
USING "commands_script.sch"
|
|
USING "cutscene_public.sch"
|
|
USING "dialogue_public.sch"
|
|
USING "CompletionPercentage_public.sch"
|
|
USING "script_ped.sch"
|
|
USING "script_player.sch"
|
|
|
|
|
|
USING "randomChar_public.sch"
|
|
USING "rgeneral_include.sch"
|
|
USING "RC_Helper_Functions.sch"
|
|
USING "RC_Threat_public.sch"
|
|
USING "cheat_controller_public.sch"
|
|
USING "commands_recording.sch"
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
USING "select_mission_stage.sch"
|
|
#ENDIF
|
|
USING "commands_recording.sch"
|
|
|
|
// CONSTANTS FOR UBER PLAYBACK
|
|
// total should not exceed 225
|
|
CONST_INT TOTAL_NUMBER_OF_TRAFFIC_CARS 5
|
|
CONST_INT TOTAL_NUMBER_OF_PARKED_CARS 5
|
|
CONST_INT TOTAL_NUMBER_OF_SET_PIECE_CARS 5
|
|
|
|
// total should not exceed 12
|
|
CONST_INT MAX_NUMBER_OF_TRAFFIC_CARS_PLAYING_BACK 3
|
|
CONST_INT MAX_NUMBER_OF_SET_PIECE_CARS_PLAYING_BACK 3
|
|
CONST_INT MAX_NUMBER_OF_PARKED_CARS_PLAYING_BACK 3
|
|
|
|
USING "initial_scenes_Nigel.sch"
|
|
USING "traffic.sch"
|
|
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : Nigel1C.sc
|
|
// AUTHOR : Joe Binks
|
|
// DESCRIPTION : Random character mission, Catch and return a celebrity dog
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
|
|
g_structRCScriptArgs sRCLauncherDataLocal
|
|
|
|
|
|
//*************************************************************************************************************************************************
|
|
// :ENUMS:
|
|
//*************************************************************************************************************************************************
|
|
// Mission stages
|
|
ENUM MISSION_STAGE
|
|
MS_INIT,
|
|
MS_GO_TO_SHOPS,
|
|
MS_STAGE_APPROACH_CELEB,
|
|
MS_STAGE_CHAT_UP_CELEB,
|
|
MS_DOG_RUNS_AWAY,
|
|
MS_DOG_RUNS_ON_ROAD,
|
|
MS_DOG_WAITING_AT_FIRESTATION,
|
|
MS_GRAB_DOG_CUTSCENE,
|
|
MS_STAGE_PLAY_OUTRO,
|
|
MS_WAIT_FOR_CALL_TO_END,
|
|
MS_FAIL_WAIT_FOR_FADE
|
|
ENDENUM
|
|
|
|
ENUM STAGE_STAGE
|
|
SS_SETUP,
|
|
SS_STAGE,
|
|
SS_STAGE_2
|
|
ENDENUM
|
|
|
|
ENUM CRASH_STAGE
|
|
CS_WAITING,
|
|
CS_SET_TO_DRIVE,
|
|
CS_DRIVING,
|
|
CS_SET_TO_CRASH,
|
|
CS_CRASHING,
|
|
CS_TASK_THEM_TO_EXIT,
|
|
CS_FINISHED
|
|
ENDENUM
|
|
CRASH_STAGE crashStage = CS_WAITING
|
|
|
|
ENUM JEEP_STAGE
|
|
JS_WAITING,
|
|
JS_SET_TO_DRIVE,
|
|
JS_DRIVING,
|
|
JS_SET_TO_SKID,
|
|
JS_EXITING_CAR,
|
|
JS_LOOKS_AT_CRASH,
|
|
JS_PLAYER_ENTERS_CAR,
|
|
JS_JEEP_FLEES
|
|
ENDENUM
|
|
JEEP_STAGE jeepStage = JS_WAITING
|
|
|
|
ENUM FAIL_REASON_ENUM
|
|
FAIL_CELEB_INJURED,
|
|
FAIL_CELEB_KILLED,
|
|
FAIL_CELEB_SCARED,
|
|
FAIL_KILLED_DOG,
|
|
FAIL_INJURED_DOG,
|
|
FAIL_LOST_DOG,
|
|
FAIL_DEFAULT
|
|
ENDENUM
|
|
FAIL_REASON_ENUM failReason
|
|
|
|
ENUM CELEBRITY_CHAT
|
|
CC_PUT_GUN_AWAY,
|
|
CC_SET_WHISTLE,
|
|
CC_WHISTLE,
|
|
CC_SET_TALKING,
|
|
CC_PLAYER_AND_CELEBRITY_TALKING,
|
|
CC_DOG_STARTS_WALKING,
|
|
CC_PLAYER_TOO_FAR,
|
|
CC_RETURN_TO_CONVO_LINE
|
|
ENDENUM
|
|
CELEBRITY_CHAT celebDialogueState = CC_PLAYER_TOO_FAR
|
|
|
|
ENUM debugSkipToMissionStage
|
|
DEBUG_TO_START,
|
|
DEBUG_TO_CHECKPOINT,
|
|
DEBUG_TO_STORES,
|
|
DEBUG_TO_ROAD_CHASE,
|
|
DEBUG_TO_END_CUTSCENE
|
|
ENDENUM
|
|
|
|
ENUM DOG_RUN_SPEEDS
|
|
dogRunsFastest,
|
|
dogRunsNormal,
|
|
dogRunsSlow,
|
|
dogRunsVerySlow
|
|
ENDENUM
|
|
DOG_RUN_SPEEDS runSpeed = dogRunsFastest
|
|
|
|
ENUM TAXI_DRIVER_STATES
|
|
taxiDriver_lookingAtCarCrash,
|
|
taxiDriver_attackingPlayer,
|
|
taxiDriver_watchingPlayer,
|
|
taxiDriver_returnToCrash,
|
|
taxiDriver_fleeing
|
|
ENDENUM
|
|
TAXI_DRIVER_STATES taxiDriverState = taxiDriver_lookingAtCarCrash
|
|
|
|
ENUM FEMALE_DRIVER_STATES
|
|
femaleDriver_lookingAtCarCrash,
|
|
femaleDriver_cower,
|
|
femaleDriver_flee
|
|
ENDENUM
|
|
FEMALE_DRIVER_STATES femaleDriverState = femaleDriver_lookingAtCarCrash
|
|
|
|
//*************************************************************************************************************************************************
|
|
// :STRUCTS:
|
|
//*************************************************************************************************************************************************
|
|
STRUCT MISSION_VEHICLE
|
|
VEHICLE_INDEX index
|
|
PED_INDEX driver
|
|
MODEL_NAMES carModel
|
|
MODEL_NAMES driverModel
|
|
VECTOR startPosition
|
|
FLOAT startHeading
|
|
ENDSTRUCT
|
|
|
|
STRUCT MISSION_PED
|
|
PED_INDEX index
|
|
MODEL_NAMES model
|
|
VECTOR vPosStart
|
|
FLOAT fHeading
|
|
VECTOR vPosMid
|
|
VECTOR vPosEnd
|
|
INT startWalkingWaypoint
|
|
BOOL startedWalking
|
|
BOOL beenShocked
|
|
STRING anim
|
|
ENDSTRUCT
|
|
|
|
//*************************************************************************************************************************************************
|
|
// :VARIABLES:
|
|
//*************************************************************************************************************************************************
|
|
MISSION_STAGE missionStage = MS_INIT //track what mission stage we are at
|
|
STAGE_STAGE stageStage = SS_SETUP
|
|
|
|
MISSION_PED shockedPed[5]
|
|
|
|
PED_INDEX CELEBRITY_PED
|
|
PED_INDEX CELEBRITY_DOG
|
|
VECTOR vPos_Celeb = <<-626.87, -268.85, 38>>
|
|
VECTOR vModelDest = <<-642.32, -238.21, 36.86>>
|
|
/*VECTOR vPos_Dog = <<-627.40, -267.12, 38.23>>
|
|
FLOAT fDir_Celeb = 121.00
|
|
FLOAT fDir_Dog = -59.95*/
|
|
STRING dogRoute = "NIG1C"
|
|
BOOL bDoStopRunningConv = TRUE
|
|
CONST_FLOAT fChaseFailDistance 100.0
|
|
CONST_FLOAT fBlipFlashDistance 0.7
|
|
|
|
CONST_INT WAIT_LINE_TIME 5000
|
|
INT iWaitLineTimer = 0
|
|
|
|
PED_INDEX TAXI_PASSENGER_PED
|
|
|
|
INT iSyncedSceneID
|
|
|
|
MODEL_NAMES femaleHipsterModel = A_F_Y_Hipster_04
|
|
MODEL_NAMES businessManModel = A_M_Y_Business_01
|
|
//MODEL_NAMES fireManModel = S_M_Y_FIREMAN_01
|
|
MODEL_NAMES dogModel = A_C_ROTTWEILER
|
|
MODEL_NAMES taxiDriverModel = S_M_M_TRUCKER_01
|
|
MODEL_NAMES taxiModel = TAXI
|
|
MODEL_NAMES sentinelCarModel = SENTINEL
|
|
MODEL_NAMES familyCarModel = HABANERO
|
|
MODEL_NAMES jeepCarModel = LANDSTALKER
|
|
MODEL_NAMES poshCarModel = BANSHEE
|
|
MODEL_NAMES escortCarModel = BJXL
|
|
|
|
MISSION_VEHICLE CRASH_CAR_POSH
|
|
MISSION_VEHICLE CRASH_CAR_FAMILY
|
|
MISSION_VEHICLE SKID_CAR_TAXI
|
|
MISSION_VEHICLE SKID_CAR_JEEP
|
|
// This will probably go back in so just commenting it out. B* 1107526
|
|
//MISSION_VEHICLE FIRE_TRUCK
|
|
MISSION_VEHICLE SKID_CAR_SENTINEL
|
|
//MISSION_VEHICLE ESCORT_CAR_FAMILY
|
|
MISSION_VEHICLE TAXI_CAR
|
|
MISSION_VEHICLE FIRST_CAR
|
|
MISSION_VEHICLE SECOND_CAR
|
|
MISSION_VEHICLE FINAL_CAR
|
|
|
|
VEHICLE_INDEX STATIONARY_FIRE_TRUCK
|
|
|
|
BLIP_INDEX GOTO_BLIP
|
|
|
|
structPedsForConversation sSpeech
|
|
SEQUENCE_INDEX seq
|
|
//REL_GROUP_HASH relGroupFriendly
|
|
REL_GROUP_HASH relGroupPushed
|
|
|
|
REL_GROUP_HASH relGroupDrivers
|
|
|
|
//VECTOR vPos_GoToShops = <<-623.880859,-266.201294,37.765167>>//<<-617.765381,-275.147888,37.857578>>//<<-610.360840,-283.530853,37.859695>>//<<-625.902832,-267.894592,37.808289>>//<<-626.87, -268.85, 38>>
|
|
VECTOR vPOS_FINAL_WAYPOINT
|
|
INT iNUM_WAYPOINTS
|
|
|
|
CAMERA_INDEX camCutsceneStart
|
|
|
|
BOOL bBEEN_WARNED_ABOUT_DISTANCE = FALSE
|
|
|
|
BOOL bCAR_HONKING = FALSE
|
|
BOOL bSPORTS_HONKING = FALSE
|
|
BOOL bSENTINEL_HONKING = FALSE
|
|
BOOL bRELEASE_SPORTS_CAR = FALSE
|
|
BOOL bRELEASE_SENTINEL_CAR = FALSE
|
|
BOOL bOUTRO_CALL_GOING_ON = FALSE
|
|
//BOOL bPLAYER_RETURNED_TO_CELEB = FALSE
|
|
|
|
BOOL bSHOP_PED_SHOUTED = FALSE
|
|
BOOL bTREVOR_RESPONDED = FALSE
|
|
BOOL bCRASH_SHOUTED = FALSE
|
|
|
|
BOOL bPLAYED_COLLAR_SOUND = FALSE
|
|
//BOOL bRESUMED_COLLAR_CONVERSATION = FALSE
|
|
|
|
BOOL bFinal_CHASE_LINES_READY = FALSE
|
|
BOOL bGotchaLineReady = FALSE
|
|
BOOL bWHAT_YOU_LOOKIN_AT_LINES_READY = FALSE
|
|
BOOL bCelebPleaded = FALSE
|
|
BOOL bPlayerThreatenedModel = FALSE
|
|
|
|
BOOL bFirstCarsWaiting = TRUE
|
|
BOOL bSeconCarRepositioned = FALSE
|
|
|
|
BOOL bSecondPartReady = TRUE
|
|
|
|
STRING recBrakeCar = "NIG1CBrake"
|
|
INT iNumRecBrakeCar = 102
|
|
|
|
STRING recCrashCars = "NIG1CCrash"
|
|
INT iNumRecStraightCrashCar = 101
|
|
INT iNumRecSwerveCrashCar = 103
|
|
|
|
INT iKerryShoppingTimer
|
|
VECTOR vKerrySpeaksPos1 = <<-603.926575,-293.947876,34.779064>>
|
|
VECTOR vKerrySpeaksPos2 = <<-636.499878,-242.544357,39.160896>>
|
|
FLOAT fKerrySpeaksWidth = 20.0
|
|
INT iCelebScaredTimer
|
|
|
|
STRING NIGEL1C_DICT = "rcmnigel1c"
|
|
//STRING TAXI_HAIL_DICT = "taxi_hail"
|
|
/*STRING KNEEL_ENTER_DICT = "amb@medic@standing@kneel@enter"
|
|
STRING KNEEL_DICT = "amb@medic@standing@kneel@base"
|
|
STRING KNEEL_EXIT_DICT = "amb@medic@standing@kneel@exit"*/
|
|
STRING DOG_DICT = "misschop_vehicle@back_of_van"
|
|
STRING MILAN_DICT = "gestures@f@standing@casual"
|
|
STRING OUTRO_DICT = "random@nigel@1c"
|
|
|
|
VECTOR vFirestationClearLocation = <<-643.8831, -108.9039, 36.9360>>
|
|
VECTOR vFirestationClearAreaMin = <<-662.3463, -126.8440, 36.8854>>
|
|
VECTOR vFirestationClearAreaMax = <<-627.8564, -92.9756, 38.0087>>
|
|
|
|
VECTOR vShoppingAreaA = <<-606.683472,-293.856354,34.779278>>
|
|
VECTOR vShoppingAreaB = <<-642.655945,-236.122238,38.889034>>
|
|
FLOAT fShoppingArea = 20.0
|
|
|
|
VECTOR vChatUpAreaPos1 = <<-608.483154,-286.606964,39.750637>>
|
|
VECTOR vChatUpAreaPos2 = <<-634.568115,-246.608185,36.346996>>
|
|
FLOAT fChatUpAreaWidth = 20.0
|
|
|
|
// Cutscene details for the player stopping the dog in the alley
|
|
VECTOR vAlleyCutscenePos1 = <<-620.598328,-263.043945,38.763931>>
|
|
VECTOR vAlleyCutscenePos2 = <<-665.576782,-220.708847,35.374737>>
|
|
FLOAT fAlleyCutsceneWidth = 30.0
|
|
VECTOR vEmergencyOutro = <<-641.819824,-235.572113,37.881439>>
|
|
FLOAT fEmergencyOutro = 65.317154
|
|
VECTOR vEmergencyCarRespot = <<-665.364014,-232.790390,36.649349>>
|
|
FLOAT fEmergencyCarRespot = 81.837189
|
|
|
|
// timers
|
|
INT iChatUpTimer = 0
|
|
//INT iGrowlTimer = 0
|
|
INT iOutroTimer = 0
|
|
//INT iCallRestartDelay = 0
|
|
CONST_INT CALL_RESTART_DELAY 2000
|
|
|
|
// variables to check for mission passed stats
|
|
CONST_FLOAT WARN_DIST 50.0
|
|
|
|
ENUM SCARE_REASON
|
|
SCARED_DOG,
|
|
SCARED_MODEL,
|
|
MODEL_SCARED_DOG,
|
|
PUSHED_MODEL
|
|
ENDENUM
|
|
SCARE_REASON reasonDogRan
|
|
|
|
//TEXT_LABEL_23 ConvResumeLabel = ""
|
|
|
|
FLOAT fCAR_REC_SPEED = 1.0
|
|
|
|
//----------------------
|
|
// CHECKPOINTS
|
|
//----------------------
|
|
CONST_INT CP_START 0
|
|
//CONST_INT CP_CELEB 1
|
|
CONST_INT CP_MISSION_PASSED 1//2
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CONST_INT MAX_SKIP_MENU_LENGTH 5
|
|
INT i_debug_jump_stage = 0
|
|
MissionStageMenuTextStruct s_skip_menu[MAX_SKIP_MENU_LENGTH]
|
|
|
|
WIDGET_GROUP_ID widgetGroup
|
|
PROC SETUP_WIDGETS()
|
|
IF NOT DOES_WIDGET_GROUP_EXIST(widgetGroup)
|
|
widgetGroup = START_WIDGET_GROUP("NIGEL1C WIDGETS")
|
|
SET_UBER_PARENT_WIDGET_GROUP(widgetGroup)
|
|
STOP_WIDGET_GROUP()
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
// ===========================================================================================================
|
|
// Termination
|
|
// ===========================================================================================================
|
|
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script cleanup helpers
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
/// PURPOSE:
|
|
/// Remove one of the shocked peds
|
|
/// PARAMS:
|
|
/// i - the index of the shocked ped to remove
|
|
PROC CLEANUP_SHOCKED_PEDS(INT i)
|
|
IF DOES_ENTITY_EXIST(shockedPed[i].index)
|
|
SAFE_RELEASE_PED(shockedPed[i].index, FALSE)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(shockedPed[i].model)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Cleanup
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
/// PURPOSE:
|
|
/// Removes a script vehicle and its associated driver
|
|
/// PARAMS:
|
|
/// vehicle - the MISSION_VEHICLE struct to be removed
|
|
PROC CLEANUP_CAR_AND_DRIVER(MISSION_VEHICLE vehicle)
|
|
CPRINTLN(DEBUG_MISSION, "Driver ")
|
|
SAFE_RELEASE_PED(vehicle.driver)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "and vehicle is gone")
|
|
SAFE_RELEASE_VEHICLE(vehicle.index)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Removes all assets used by the mission
|
|
PROC ASSETS_CLEANUP()
|
|
|
|
REMOVE_RELATIONSHIP_GROUP(relGroupPushed)
|
|
REMOVE_RELATIONSHIP_GROUP(relGroupDrivers)
|
|
|
|
IF DOES_BLIP_EXIST(GOTO_BLIP)
|
|
REMOVE_BLIP(GOTO_BLIP)
|
|
ENDIF
|
|
|
|
SAFE_RELEASE_PED(CELEBRITY_PED)
|
|
SAFE_RELEASE_PED(CELEBRITY_DOG)
|
|
SAFE_RELEASE_PED(TAXI_PASSENGER_PED, FALSE)
|
|
SAFE_RELEASE_VEHICLE(STATIONARY_FIRE_TRUCK)
|
|
|
|
// This will probably go back in so just commenting it out. B* 1107526
|
|
//CLEANUP_CAR_AND_DRIVER(FIRE_TRUCK)
|
|
CLEANUP_CAR_AND_DRIVER(CRASH_CAR_FAMILY)
|
|
CLEANUP_CAR_AND_DRIVER(SKID_CAR_JEEP)
|
|
CLEANUP_CAR_AND_DRIVER(CRASH_CAR_POSH)
|
|
CLEANUP_CAR_AND_DRIVER(SKID_CAR_TAXI)
|
|
CLEANUP_CAR_AND_DRIVER(SKID_CAR_SENTINEL)
|
|
//CLEANUP_CAR_AND_DRIVER(ESCORT_CAR_FAMILY)
|
|
CLEANUP_CAR_AND_DRIVER(TAXI_CAR)
|
|
CLEANUP_CAR_AND_DRIVER(FIRST_CAR)
|
|
CLEANUP_CAR_AND_DRIVER(SECOND_CAR)
|
|
CLEANUP_CAR_AND_DRIVER(FINAL_CAR)
|
|
|
|
CLEANUP_SHOCKED_PEDS(0)
|
|
CLEANUP_SHOCKED_PEDS(1)
|
|
CLEANUP_SHOCKED_PEDS(2)
|
|
CLEANUP_SHOCKED_PEDS(4)
|
|
|
|
SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT(PLAYER_PED_ID(), FALSE)
|
|
|
|
REMOVE_ANIM_DICT(NIGEL1C_DICT)
|
|
/*REMOVE_ANIM_DICT(KNEEL_ENTER_DICT)
|
|
REMOVE_ANIM_DICT(KNEEL_DICT)
|
|
REMOVE_ANIM_DICT(KNEEL_EXIT_DICT)*/
|
|
REMOVE_ANIM_DICT(OUTRO_DICT)
|
|
REMOVE_ANIM_DICT(DOG_DICT)
|
|
REMOVE_ANIM_DICT(MILAN_DICT)
|
|
//REMOVE_ANIM_DICT(TAXI_HAIL_DICT)
|
|
|
|
REMOVE_VEHICLE_RECORDING(iNumRecStraightCrashCar, recCrashCars)
|
|
REMOVE_VEHICLE_RECORDING(iNumRecSwerveCrashCar, recCrashCars)
|
|
REMOVE_VEHICLE_RECORDING(iNumRecBrakeCar, recBrakeCar)
|
|
REMOVE_VEHICLE_RECORDING(001, "NIG1C_COMET")
|
|
REMOVE_VEHICLE_RECORDING(002, "NIG1C_COMET2")
|
|
REMOVE_VEHICLE_RECORDING(001, "NIG1CEscort")
|
|
REMOVE_VEHICLE_RECORDING(001, "NIG1C_FIRE")
|
|
|
|
RELEASE_SCRIPT_AUDIO_BANK()
|
|
|
|
SET_PED_MODEL_IS_SUPPRESSED(femaleHipsterModel, FALSE)
|
|
SET_PED_MODEL_IS_SUPPRESSED(businessManModel, FALSE)
|
|
//SET_PED_MODEL_IS_SUPPRESSED(fireManModel, FALSE)
|
|
SET_PED_MODEL_IS_SUPPRESSED(taxiDriverModel, FALSE)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(taxiModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sentinelCarModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(familyCarModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(escortCarModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(poshCarModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(jeepCarModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(femaleHipsterModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(dogModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(businessManModel)
|
|
//SET_MODEL_AS_NO_LONGER_NEEDED(fireManModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(taxiDriverModel)
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Turns roads on or off
|
|
/// PARAMS:
|
|
/// roadsOn - TRUE if turning roads on, FALSE if turning them off
|
|
PROC TURN_ROADS_ON(BOOL roadsOn)
|
|
|
|
/*SET_ROADS_IN_ANGLED_AREA(<<-690.617798,-232.600967,35.813908>>, <<-621.191406,-190.706741,37.760944>>, 49.750000, TRUE, roadsOn)
|
|
SET_ROADS_IN_ANGLED_AREA(<<-695.448059,-235.328827,38.787209>>, <<-657.659302,-299.484222,33.460602>>, 25.500000, TRUE, roadsOn)
|
|
SET_ROADS_IN_ANGLED_AREA(<<-627.666870,-179.075363,35.767746>>, <<-662.012634,-119.546036,38.777054>>, 10.250000, TRUE, roadsOn)
|
|
SET_ROADS_IN_ANGLED_AREA(<<-598.983337,-240.166519,34.820423>>, <<-497.172363,-193.373306,37.849590>>, 133.000000, TRUE, roadsOn)
|
|
|
|
SET_ROADS_IN_ANGLED_AREA(<<-689.055115,-217.763550,35.166630>>, <<-596.409790,-170.035034,38.057011>>, 20.0, TRUE, roadsOn)
|
|
SET_ROADS_IN_ANGLED_AREA(<<-685.225769,-76.094269,35.667927>>, <<-618.345642,-194.644562,38.753483>>, 20.0, TRUE, roadsOn)*/
|
|
|
|
// instead of disabling individual roads, try one huge area
|
|
SET_ROADS_IN_ANGLED_AREA(<<-533.335815,-316.634003,30.996708>>, <<-696.271423,-30.989979,45.693817>>, 250.0, TRUE, roadsOn)
|
|
|
|
if roadsOn
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE()
|
|
|
|
CLEAR_PED_NON_CREATION_AREA()
|
|
REMOVE_SCENARIO_BLOCKING_AREAS()
|
|
SET_PED_PATHS_BACK_TO_ORIGINAL(<<-654.77, -100.04, 44.87>>, <<-623.99, -165.20, 36.78>>)
|
|
ELSE
|
|
CLEAR_AREA_OF_VEHICLES(vFirestationClearLocation, 50)
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-698.44, -333.93, 33>>, <<-532.67, -44.35, 40>>, FALSE)
|
|
|
|
SET_PED_NON_CREATION_AREA(<<-654.77, -100.04, 44.87>>, <<-623.99, -165.20, 36.78>>)
|
|
ADD_SCENARIO_BLOCKING_AREA(<<-654.77, -100.04, 44.87>>, <<-623.99, -165.20, 36.78>>)
|
|
ADD_SCENARIO_BLOCKING_AREA(vFirestationClearAreaMin, vFirestationClearAreaMax)
|
|
ADD_SCENARIO_BLOCKING_AREA(<<-714.4662, -233.7738, 33.0351>>, <<-611.9510, -89.9566, 57.4080>>)
|
|
SET_PED_PATHS_IN_AREA(<<-654.77, -100.04, 44.87>>, <<-623.99, -165.20, 36.78>>, FALSE)
|
|
CLEAR_AREA_OF_PEDS(<<-640.004761,-140.212540,36.378510>>, 24.25)
|
|
CLEAR_AREA_OF_PEDS(vFirestationClearLocation, 50)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Cleans up the mission
|
|
PROC Script_Cleanup()
|
|
|
|
// If the mission was triggered then additional mission cleanup will be required.
|
|
IF (Random_Character_Cleanup_If_Triggered())
|
|
CPRINTLN(DEBUG_MISSION, "...Random Character Script was triggered so additional cleanup required")
|
|
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
CLEAR_PED_SECONDARY_TASK(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("NIGEL_1C_SCENE")
|
|
STOP_AUDIO_SCENE("NIGEL_1C_SCENE")
|
|
ENDIF
|
|
|
|
TURN_ROADS_ON(TRUE)
|
|
|
|
STOP_GAMEPLAY_HINT()
|
|
|
|
CLEAR_PRINTS()
|
|
|
|
CLEAR_ADDITIONAL_TEXT(MISSION_DIALOGUE_TEXT_SLOT, TRUE)
|
|
CLEAR_ADDITIONAL_TEXT(MISSION_TEXT_SLOT, TRUE)
|
|
ENDIF
|
|
|
|
ASSETS_CLEANUP()
|
|
|
|
DISABLE_CHEAT(CHEAT_TYPE_FAST_RUN, FALSE)
|
|
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(FIRETRUK, FALSE)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
|
|
//Cleanup the scene created by the launcher
|
|
RC_CleanupSceneEntities(sRCLauncherDataLocal, FALSE)
|
|
|
|
TERMINATE_THIS_THREAD()
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Cleans up the scripted cutscene at the end of the mission
|
|
/// PARAMS:
|
|
/// bInterp - TRUE if the cutscene camera should interpolate to the game camera, FALSE otherwise
|
|
/// bResetGamePlayCamera - TRUE if the camera should be placed behind the player, FALSE otherwise
|
|
PROC FINISH_CUTSCENE(BOOL bInterp = TRUE, BOOL bResetGamePlayCamera = TRUE)
|
|
//bInterp = bInterp
|
|
RENDER_SCRIPT_CAMS(FALSE, bInterp, DEFAULT_INTERP_TO_FROM_GAME)
|
|
|
|
IF DOES_CAM_EXIST(camCutsceneStart)
|
|
SET_CAM_ACTIVE(camCutsceneStart, FALSE)
|
|
DESTROY_CAM (camCutsceneStart)
|
|
ENDIF
|
|
|
|
IF bResetGamePlayCamera
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-5)
|
|
ENDIF
|
|
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
RC_END_CUTSCENE_MODE()
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Pass
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Passes the mission
|
|
PROC Script_Passed()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
WHILE IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
CPRINTLN(DEBUG_MISSION, "WAITING FOR THE CONVO TO END BEFORE CLEANING UP")
|
|
KILL_ANY_CONVERSATION()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
#ENDIF
|
|
|
|
Random_Character_Passed(CP_RAND_C_NIG1C)
|
|
Script_Cleanup()
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Fail
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Cleans up the mission on failure
|
|
PROC Script_Failed()
|
|
|
|
Script_Cleanup()
|
|
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// PASS_FAIL_CLEANUP
|
|
// ===========================================================================================================
|
|
/// PURPOSE:
|
|
/// Has the player left the area the shops are in?
|
|
/// RETURNS:
|
|
/// TRUE if the player has left the area, FALSE otherwise
|
|
FUNC BOOL PLAYER_LEFT_SHOPS_AREA()
|
|
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-650.622925,-358.134674,33.782822>>, <<-548.965820,-302.563751,41>>, 83.250000)
|
|
AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-606.433105,-289.939331,35.779270>>, <<-629.503845,-249.769501,41>>, 19.750000)
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Has the player entered the building site used in one of the heist missions?
|
|
/// RETURNS:
|
|
/// TRUE if the player has entered the building site, FALSE otherwise
|
|
FUNC BOOL PLAYER_ENTERED_HEIST_BUILDING_SITE()
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-594.618530,-288.646393,34.454720>>, <<-582.652222,-281.528717,40.954720>>, 12.750000)
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if the player has run over Dexie
|
|
/// RETURNS:
|
|
/// TRUE if the player is in a vehicle that is touching Dexie and the vehicle is moving
|
|
FUNC BOOL PLAYER_RAN_OVER_DOG()
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_ENTITY_TOUCHING_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID())
|
|
AND NOT IS_PED_STOPPED(PLAYER_PED_ID())
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks all the reasons the player might have failed the mission for
|
|
PROC CHECK_FAIL_POSSIBILITIES()
|
|
|
|
IF DOES_ENTITY_EXIST(CELEBRITY_DOG)
|
|
IF IS_PED_INJURED(CELEBRITY_DOG)
|
|
failReason = FAIL_KILLED_DOG
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_FAIL_WAIT_FOR_FADE
|
|
ELSE
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID())
|
|
//OR (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_ENTITY_TOUCHING_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID()))
|
|
OR PLAYER_RAN_OVER_DOG()
|
|
SET_PED_TO_RAGDOLL(CELEBRITY_DOG, 500, 1000, TASK_RELAX)
|
|
failReason = FAIL_INJURED_DOG
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_FAIL_WAIT_FOR_FADE
|
|
ELIF GET_NUMBER_OF_FIRES_IN_RANGE(GET_ENTITY_COORDS(CELEBRITY_DOG), 2.0) > 0
|
|
SET_PED_TO_RAGDOLL(CELEBRITY_DOG, 500, 1000, TASK_RELAX)
|
|
failReason = FAIL_KILLED_DOG
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_FAIL_WAIT_FOR_FADE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(CELEBRITY_PED)
|
|
IF IS_ENTITY_DEAD(CELEBRITY_PED)
|
|
failReason = FAIL_CELEB_KILLED
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_FAIL_WAIT_FOR_FADE
|
|
ELSE
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(CELEBRITY_PED, PLAYER_PED_ID())
|
|
failReason = FAIL_CELEB_INJURED
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_FAIL_WAIT_FOR_FADE
|
|
//ELIF IS_PLAYER_SHOOTING_NEAR_PED(CELEBRITY_PED)
|
|
ELIF CHECK_BULLET_SHOOTING_IN_AREA(CELEBRITY_PED, TRUE, 8.0, 15.0)
|
|
OR CHECK_PROJECTILE_IN_RANGE(CELEBRITY_PED, 5.0)
|
|
IF IS_PED_UNINJURED(CELEBRITY_PED) AND NOT IS_PED_FLEEING(CELEBRITY_PED)
|
|
IF IS_PED_USING_ANY_SCENARIO(CELEBRITY_PED)
|
|
SET_PED_PANIC_EXIT_SCENARIO(CELEBRITY_PED, GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
ENDIF
|
|
TASK_SMART_FLEE_PED(CELEBRITY_PED, PLAYER_PED_ID(), 500, -1)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG) AND NOT IS_PED_FLEEING(CELEBRITY_DOG)
|
|
TASK_SMART_FLEE_PED(CELEBRITY_DOG, PLAYER_PED_ID(), 500, -1)
|
|
ENDIF
|
|
failReason = FAIL_CELEB_SCARED
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_FAIL_WAIT_FOR_FADE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF missionStage = MS_DOG_RUNS_AWAY OR missionStage = MS_DOG_RUNS_ON_ROAD OR missionStage = MS_DOG_WAITING_AT_FIRESTATION
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
and IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, fChaseFailDistance)
|
|
failReason = FAIL_LOST_DOG
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_FAIL_WAIT_FOR_FADE
|
|
ELSE
|
|
IF bBEEN_WARNED_ABOUT_DISTANCE = FALSE
|
|
IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, WARN_DIST)
|
|
/*CLEAR_PRINTS()
|
|
PRINT_NOW("N1C_WRN_DOG", DEFAULT_GOD_TEXT_TIME, 1) // Catch up with ~b~Mr. Muffy Cakes.*/
|
|
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(NI1C_PLAYER_GOT_TOO_FAR_FROM_MUFFY)
|
|
bBEEN_WARNED_ABOUT_DISTANCE = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// HELPER FUNCTIONS
|
|
// ===========================================================================================================
|
|
|
|
/// PURPOSE:
|
|
/// Checks if all the vehicle recording cars and their drivers are ok
|
|
/// RETURNS:
|
|
/// TRUE if they all exist and are OK, FALSE otherwise
|
|
FUNC BOOL ALL_CARS_ARE_WORKING()
|
|
IF IS_VEHICLE_OK(CRASH_CAR_POSH.index) AND IS_PED_UNINJURED(CRASH_CAR_POSH.driver) AND IS_VEHICLE_OK(CRASH_CAR_FAMILY.index) AND IS_PED_UNINJURED(CRASH_CAR_FAMILY.driver)
|
|
AND IS_VEHICLE_OK(SKID_CAR_TAXI.index) AND IS_PED_UNINJURED(SKID_CAR_TAXI.driver)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Finds the closest waypoint recording waypoint to the dog when on the road
|
|
/// RETURNS:
|
|
/// The closest waypoint recording waypoint to the dog when on the road
|
|
FUNC INT GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE()
|
|
INT wayP
|
|
WAYPOINT_RECORDING_GET_CLOSEST_WAYPOINT(dogRoute, GET_ENTITY_COORDS(CELEBRITY_DOG), wayP)
|
|
RETURN wayP
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Finds the closest waypoint recording waypoint to the player
|
|
/// RETURNS:
|
|
/// The closest waypoint recording waypoint to the player
|
|
FUNC INT GET_THE_CLOSEST_WAYPOINT_TO_PLAYER()
|
|
INT wayP
|
|
WAYPOINT_RECORDING_GET_CLOSEST_WAYPOINT(dogRoute, GET_ENTITY_COORDS(PLAYER_PED_ID()), wayP)
|
|
RETURN wayP
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Works out the position for the camera when the player tries to pick up the dog
|
|
/// RETURNS:
|
|
/// The position for the camera when the player tries to pick up the dog
|
|
FUNC VECTOR get_cam_pos()
|
|
VECTOR pos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<-0.8, -1.2, 1.5>>)
|
|
RETURN pos
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if it's ok to display subtitles for a conversation
|
|
/// RETURNS:
|
|
/// The appropriate subtitles state, based on whether or not an objective is being displayed
|
|
FUNC enumSubtitlesState CheckDisplaySubtitles()
|
|
|
|
IF IS_MESSAGE_BEING_DISPLAYED()
|
|
RETURN DO_NOT_DISPLAY_SUBTITLES
|
|
ELSE
|
|
RETURN DISPLAY_SUBTITLES
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Loads the vehicle recordings, models and anim dictionaries used by the mission
|
|
PROC LOAD_OTHER_ASSETS()
|
|
|
|
REQUEST_VEHICLE_RECORDING(iNumRecStraightCrashCar, recCrashCars)
|
|
REQUEST_VEHICLE_RECORDING(iNumRecSwerveCrashCar, recCrashCars)
|
|
REQUEST_VEHICLE_RECORDING(001, "NIG1C_COMET")
|
|
REQUEST_VEHICLE_RECORDING(002, "NIG1C_COMET2")
|
|
REQUEST_VEHICLE_RECORDING(001, "NIG1CEscort")
|
|
REQUEST_VEHICLE_RECORDING(iNumRecBrakeCar, recBrakeCar)
|
|
REQUEST_VEHICLE_RECORDING(001, "NIG1C_FIRE")
|
|
REQUEST_WAYPOINT_RECORDING(dogRoute)
|
|
REQUEST_MODEL(taxiModel)
|
|
REQUEST_MODEL(sentinelCarModel)
|
|
REQUEST_MODEL(familyCarModel)
|
|
REQUEST_MODEL(escortCarModel)
|
|
REQUEST_MODEL(poshCarModel)
|
|
REQUEST_MODEL(jeepCarModel)
|
|
REQUEST_MODEL(femaleHipsterModel)
|
|
REQUEST_MODEL(businessManModel)
|
|
REQUEST_MODEL(FIRETRUK)
|
|
//REQUEST_MODEL(fireManModel)
|
|
REQUEST_MODEL(taxiDriverModel)
|
|
REQUEST_ANIM_DICT(NIGEL1C_DICT)
|
|
/*REQUEST_ANIM_DICT(KNEEL_ENTER_DICT)
|
|
REQUEST_ANIM_DICT(KNEEL_DICT)
|
|
REQUEST_ANIM_DICT(KNEEL_EXIT_DICT)*/
|
|
REQUEST_ANIM_DICT(OUTRO_DICT)
|
|
REQUEST_ANIM_DICT(MILAN_DICT)
|
|
//REQUEST_ANIM_DICT(TAXI_HAIL_DICT)
|
|
REQUEST_ANIM_DICT(DOG_DICT)
|
|
|
|
REQUEST_SCRIPT_AUDIO_BANK("NIGEL_1C_COLLAR")
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if all the assets are loaded
|
|
/// RETURNS:
|
|
/// TRUE if all assets are loaded, FALSE otherwise
|
|
FUNC BOOL ARE_ASSETS_LOADED()
|
|
IF NOT HAS_MODEL_LOADED(taxiModel)
|
|
CPRINTLN(DEBUG_MISSION, "Taxi not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_MODEL_LOADED(sentinelCarModel)
|
|
CPRINTLN(DEBUG_MISSION, "Sentinel not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_MODEL_LOADED(familyCarModel)
|
|
CPRINTLN(DEBUG_MISSION, "Family car not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_MODEL_LOADED(escortCarModel)
|
|
CPRINTLN(DEBUG_MISSION, "escort car not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_MODEL_LOADED(poshCarModel)
|
|
CPRINTLN(DEBUG_MISSION, "posh car not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_MODEL_LOADED(jeepCarModel)
|
|
CPRINTLN(DEBUG_MISSION, "jeep not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_MODEL_LOADED(femaleHipsterModel)
|
|
CPRINTLN(DEBUG_MISSION, "female hipster not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_MODEL_LOADED(businessManModel)
|
|
CPRINTLN(DEBUG_MISSION, "business man not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_MODEL_LOADED(FIRETRUK)
|
|
CPRINTLN(DEBUG_MISSION, "firetruck not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
/*IF NOT HAS_MODEL_LOADED(fireManModel)
|
|
CPRINTLN(DEBUG_MISSION, "fireman not loaded")
|
|
RETURN FALSE
|
|
ENDIF*/
|
|
IF NOT HAS_MODEL_LOADED(taxiDriverModel)
|
|
CPRINTLN(DEBUG_MISSION, "taxi driver not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_ANIM_DICT_LOADED(NIGEL1C_DICT)
|
|
CPRINTLN(DEBUG_MISSION, "Main anim dict not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_ANIM_DICT_LOADED(MILAN_DICT)
|
|
CPRINTLN(DEBUG_MISSION, "Milan anim dict not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT HAS_ANIM_DICT_LOADED(DOG_DICT)
|
|
CPRINTLN(DEBUG_MISSION, "Dog anim dict not loaded")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
SET_PED_MODEL_IS_SUPPRESSED(femaleHipsterModel, TRUE)
|
|
SET_PED_MODEL_IS_SUPPRESSED(businessManModel, TRUE)
|
|
//SET_PED_MODEL_IS_SUPPRESSED(fireManModel, TRUE)
|
|
SET_PED_MODEL_IS_SUPPRESSED(taxiDriverModel, TRUE)
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Waits until all assets are loaded
|
|
PROC WAIT_TILL_ASSETS_ARE_LOADED()
|
|
|
|
WHILE NOT ARE_ASSETS_LOADED()
|
|
CPRINTLN(DEBUG_MISSION, "Loading other assets")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Defines the base variables for the shockable peds
|
|
PROC SETUP_SHOCKABLE_PEDS()
|
|
|
|
shockedPed[0].model = femaleHipsterModel
|
|
shockedPed[0].fHeading = 65.71//-170.53
|
|
shockedPed[0].vPosStart = <<-645.97, -177.03, 37>>
|
|
shockedPed[0].vPosMid = <<-643.84, -181.83, 36.69>>
|
|
shockedPed[0].vPosEnd = <<-691.20, -207.27, 36.25>>
|
|
shockedPed[0].startWalkingWaypoint = 21
|
|
shockedPed[0].startedWalking = FALSE
|
|
shockedPed[0].beenShocked = FALSE
|
|
shockedPed[0].anim = "avoid_rf"
|
|
|
|
shockedPed[1].model = femaleHipsterModel
|
|
shockedPed[1].fHeading = -50.00//-151.41
|
|
shockedPed[1].vPosStart = <<-643.92, -135.89, 37.84>>//<<-641.40, -134.22, 37>>
|
|
shockedPed[1].vPosMid = <<-634.06, -147.80, 36.87>>
|
|
shockedPed[1].vPosEnd = <<-623.98, -162.83, 36.85>>
|
|
shockedPed[1].startWalkingWaypoint = 28
|
|
shockedPed[1].startedWalking = FALSE
|
|
shockedPed[1].beenShocked = FALSE
|
|
shockedPed[1].anim = "avoid_fr"
|
|
|
|
shockedPed[2].model = businessManModel
|
|
shockedPed[2].fHeading = 5.73
|
|
shockedPed[2].vPosStart = <<-671.58, -195.03, 37.39>>
|
|
shockedPed[2].beenShocked = FALSE
|
|
|
|
shockedPed[4].model = businessManModel
|
|
shockedPed[4].fHeading = -108.48
|
|
shockedPed[4].vPosStart = <<-632.18, -154.89, 37.83>>
|
|
shockedPed[4].startedWalking = FALSE
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if the assets needed at the start of the mission are loaded
|
|
/// RETURNS:
|
|
/// TRUE if the assets are loaded, FALSE otherwise
|
|
FUNC BOOL ARE_INITIAL_ASSETS_LOADED()
|
|
IF HAS_MODEL_LOADED(femaleHipsterModel)
|
|
AND HAS_MODEL_LOADED(dogModel)
|
|
AND HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT) // B*2109500 - script needs to wait for mission text slot to load
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Loads the assets needed at the start of the mission
|
|
/// PARAMS:
|
|
/// bWaitForLoading - TRUE if the procedure should wait until the assets are loaded, FALSE otherwise
|
|
PROC LOAD_INITIAL_ASSETS(BOOL bWaitForLoading = FALSE)
|
|
|
|
REQUEST_ADDITIONAL_TEXT("NIG1CAU", MISSION_DIALOGUE_TEXT_SLOT)
|
|
REQUEST_ADDITIONAL_TEXT("NIGEL1C", MISSION_TEXT_SLOT)
|
|
|
|
REQUEST_MODEL(femaleHipsterModel)
|
|
REQUEST_MODEL(dogModel)
|
|
CPRINTLN(DEBUG_MISSION, "Requested model and dog and text")
|
|
IF bWaitForLoading
|
|
WHILE NOT ARE_INITIAL_ASSETS_LOADED()
|
|
CPRINTLN(DEBUG_MISSION, "LOADING CELEB MODELS")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Creates the model and dog for the player to meet
|
|
PROC CREATE_MODEL_AND_DOG_AT_SHOPS()
|
|
|
|
IF DOES_ENTITY_EXIST(CELEBRITY_DOG)
|
|
DELETE_PED(CELEBRITY_DOG)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(CELEBRITY_PED)
|
|
DELETE_PED(CELEBRITY_PED)
|
|
ENDIF
|
|
|
|
eInitialSceneStage = IS_REQUEST_SCENE
|
|
WHILE NOT SetupScene_NIGEL_1C(sRCLauncherDataLocal)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
CELEBRITY_PED = sRCLauncherDataLocal.pedID[0]
|
|
CELEBRITY_DOG = sRCLauncherDataLocal.pedID[1]
|
|
|
|
SET_ENTITY_COORDS_GROUNDED(CELEBRITY_PED, vPos_Celeb)
|
|
//SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_DOG, relGroupFriendly)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Creates one of the shockable peds
|
|
/// PARAMS:
|
|
/// i - the index of the ped to create
|
|
PROC CREATE_SHOCKABLE_PED(int i)
|
|
|
|
IF DOES_ENTITY_EXIST(shockedPed[i].index)
|
|
DELETE_PED(shockedPed[i].index)
|
|
ENDIF
|
|
|
|
IF HAS_MODEL_LOADED(shockedPed[i].model)
|
|
shockedPed[i].index = CREATE_PED(PEDTYPE_CIVFEMALE, shockedPed[i].model, shockedPed[i].vPosStart, shockedPed[i].fHeading)
|
|
|
|
VECTOR pos = shockedPed[i].vPosStart
|
|
FLOAT zCoord
|
|
GET_GROUND_Z_FOR_3D_COORD(pos, zCoord)
|
|
SET_ENTITY_COORDS(shockedPed[i].index, <<pos.x, pos.y, zCoord>>)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(shockedPed[i].index, relGroupDrivers)
|
|
SET_PED_COMBAT_ATTRIBUTES(shockedPed[i].index, CA_ALWAYS_FLEE, TRUE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Makes the model shout at the player when she stops running
|
|
PROC MODEL_SPEAKS_WHEN_STOPPING()
|
|
IF IS_PED_UNINJURED(CELEBRITY_PED) AND GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(CELEBRITY_PED, vModelDest) < 5.0 AND GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vModelDest) < 25.0
|
|
IF bDoStopRunningConv
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_2",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
bDoStopRunningConv = FALSE
|
|
iWaitLineTimer = GET_GAME_TIMER() + WAIT_LINE_TIME
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, -1)
|
|
ENDIF
|
|
ELSE
|
|
IF GET_GAME_TIMER() > iWaitLineTimer AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_WAIT",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
iWaitLineTimer = GET_GAME_TIMER() + WAIT_LINE_TIME
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Controls the shockable peds
|
|
/// PARAMS:
|
|
/// i - the index of the shockable ped to be controlled
|
|
PROC UPDATE_THE_SHOCKABLE_PED(INT i)
|
|
IF NOT shockedPed[i].beenShocked
|
|
IF IS_PED_UNINJURED(shockedPed[i].index)
|
|
AND IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
IF NOT shockedPed[i].startedWalking
|
|
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG)
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > shockedPed[i].startWalkingWaypoint
|
|
open_sequence_task(seq)
|
|
IF runSpeed = dogRunsVerySlow
|
|
TASK_PAUSE(NULL, 1000)
|
|
ENDIF
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, shockedPed[i].vPosMid, 1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(shockedPed[i].index, seq)
|
|
clear_sequence_task(seq)
|
|
shockedPed[i].startedWalking = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(shockedPed[i].index, CELEBRITY_DOG, 3)
|
|
VECTOR vec
|
|
vec = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(shockedPed[i].index, GET_ENTITY_COORDS(CELEBRITY_DOG))
|
|
CLEAR_PED_TASKS(shockedPed[i].index)
|
|
open_sequence_task(seq)
|
|
TASK_LOOK_AT_ENTITY(null, CELEBRITY_DOG, -1)
|
|
if vec.y > 0.7
|
|
TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, shockedPed[i].anim, NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1)
|
|
ELSE
|
|
TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "avoid_rb", NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1)
|
|
ENDIF
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, CELEBRITY_DOG)
|
|
TASK_PAUSE(NULL, 1000)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, shockedPed[i].vPosEnd, 1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(shockedPed[i].index, seq)
|
|
clear_sequence_task(seq)
|
|
shockedPed[i].beenShocked = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Controls the ped who falls over
|
|
PROC UPDATE_THE_FALL_PED()
|
|
IF IS_PED_UNINJURED(shockedPed[4].index)
|
|
AND IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
IF shockedPed[4].startedWalking = FALSE
|
|
IF IS_ENTITY_AT_ENTITY(shockedPed[4].index, CELEBRITY_DOG, <<2.5,2.5,2>>)
|
|
CLEAR_PED_TASKS(shockedPed[4].index)
|
|
SET_PED_TO_RAGDOLL_WITH_FALL(shockedPed[4].index, 1500, 2000, TYPE_OVER_WALL, -GET_ENTITY_FORWARD_VECTOR(shockedPed[4].index), 1, <<0,0,0>>, <<0,0,0>>)
|
|
open_sequence_task(seq)
|
|
TASK_LOOK_AT_ENTITY(null, CELEBRITY_DOG, -1)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-631.84, -153.48, 36.83>>, 1, DEFAULT_TIME_BEFORE_WARP)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, CELEBRITY_DOG)
|
|
TASK_PAUSE(NULL, 1500)
|
|
TASK_WANDER_STANDARD(NULL)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(shockedPed[4].index, seq)
|
|
clear_sequence_task(seq)
|
|
shockedPed[4].startedWalking = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if the vehicle and ped held in a MISSION_VEHICLE struct are alive
|
|
/// PARAMS:
|
|
/// vehicle - the MISSION_VEHICLE we're checking
|
|
/// RETURNS:
|
|
/// TRUE if both vehicle and ped index are OK
|
|
FUNC BOOL CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(MISSION_VEHICLE vehicle)
|
|
IF IS_PED_UNINJURED(vehicle.driver) AND IS_VEHICLE_OK(vehicle.index)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Initialises the values for the mission vehicles
|
|
PROC SETUP_MISSION_VEHICLES()
|
|
|
|
CRASH_CAR_POSH.carModel = poshCarModel
|
|
CRASH_CAR_POSH.startPosition = <<-655.81, -278.73, 35.21>>
|
|
CRASH_CAR_POSH.startHeading = 35
|
|
CRASH_CAR_POSH.driverModel = femaleHipsterModel
|
|
|
|
CRASH_CAR_FAMILY.carModel = familyCarModel
|
|
CRASH_CAR_FAMILY.startPosition = <<-591.7191, -166.3491, 37.8459>>
|
|
CRASH_CAR_FAMILY.startHeading = 35
|
|
CRASH_CAR_FAMILY.driverModel = businessManModel
|
|
|
|
SKID_CAR_TAXI.carModel = taxiModel
|
|
SKID_CAR_TAXI.startPosition = <<-651.40, -153.68, 36.95>>
|
|
SKID_CAR_TAXI.startHeading = 217.44
|
|
SKID_CAR_TAXI.driverModel = taxiDriverModel
|
|
|
|
// This will probably go back in so just commenting it out. B* 1107526
|
|
/*FIRE_TRUCK.carModel = FIRETRUK
|
|
FIRE_TRUCK.startPosition = <<-635.68, -105.39, 38.14>>
|
|
FIRE_TRUCK.startHeading = 87.14
|
|
FIRE_TRUCK.driverModel = fireManModel*/
|
|
|
|
SKID_CAR_SENTINEL.carModel = sentinelCarModel
|
|
SKID_CAR_SENTINEL.startPosition = <<-525.33, -137.35, 38.04>>
|
|
SKID_CAR_SENTINEL.startHeading = 111.20
|
|
SKID_CAR_SENTINEL.driverModel = businessManModel
|
|
|
|
/*ESCORT_CAR_FAMILY.carModel = escortCarModel
|
|
ESCORT_CAR_FAMILY.startPosition = <<-519.58, -134.52, 38.65>>
|
|
ESCORT_CAR_FAMILY.startHeading = 111.20
|
|
ESCORT_CAR_FAMILY.driverModel = businessManModel*/
|
|
|
|
FIRST_CAR.carModel = familyCarModel
|
|
FIRST_CAR.startPosition = <<-683.30, -238.03, 36.63>>
|
|
FIRST_CAR.startHeading = 29.79
|
|
FIRST_CAR.driverModel = taxiDriverModel
|
|
|
|
SECOND_CAR.carModel = taxiModel
|
|
SECOND_CAR.startPosition = <<-674.44, -262.95, 35.97>>
|
|
SECOND_CAR.startHeading = 29.80
|
|
SECOND_CAR.driverModel = taxiDriverModel
|
|
|
|
TAXI_CAR.carModel = taxiModel
|
|
TAXI_CAR.startPosition = <<-644.56, -155.68, 37.32>>
|
|
TAXI_CAR.startHeading = 208.31
|
|
TAXI_CAR.driverModel = taxiDriverModel
|
|
|
|
FINAL_CAR.carModel = familyCarModel
|
|
FINAL_CAR.startPosition = <<-641.91, -158.94, 36.70>>
|
|
FINAL_CAR.startHeading = 208.7
|
|
FINAL_CAR.driverModel = taxiDriverModel
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Creates the scripted traffic and the drivers for the vehicles
|
|
FUNC BOOL CREATE_TRAFFIC_VEHICLES()
|
|
|
|
//IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) //OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vShoppingAreaA, vShoppingAreaB, fShoppingArea)
|
|
IF IS_PED_ON_FOOT(PLAYER_PED_ID())
|
|
IF NOT DOES_ENTITY_EXIST(CRASH_CAR_POSH.index)
|
|
IF HAS_MODEL_LOADED(CRASH_CAR_POSH.carModel) AND HAS_MODEL_LOADED(CRASH_CAR_POSH.driverModel)
|
|
CRASH_CAR_POSH.index = CREATE_VEHICLE(CRASH_CAR_POSH.carModel, CRASH_CAR_POSH.startPosition, CRASH_CAR_POSH.startHeading)
|
|
CRASH_CAR_POSH.driver = CREATE_PED_INSIDE_VEHICLE(CRASH_CAR_POSH.index, PEDTYPE_CIVMALE, CRASH_CAR_POSH.driverModel)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(CRASH_CAR_POSH.index, TRUE)
|
|
SET_VEHICLE_DOORS_LOCKED(CRASH_CAR_POSH.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
SET_PED_MONEY(CRASH_CAR_POSH.driver, 0)
|
|
SET_PED_COMBAT_ATTRIBUTES(CRASH_CAR_POSH.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(CRASH_CAR_POSH.driver, relGroupDrivers)
|
|
SET_PED_CONFIG_FLAG(CRASH_CAR_POSH.driver, PCF_FallsOutOfVehicleWhenKilled, TRUE)
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(CRASH_CAR_FAMILY.index)
|
|
IF HAS_MODEL_LOADED(familyCarModel) AND HAS_MODEL_LOADED(businessManModel)
|
|
CRASH_CAR_FAMILY.index = CREATE_VEHICLE(familyCarModel, <<-591.7191, -166.3491, 37.8459>>, 35)
|
|
CRASH_CAR_FAMILY.driver = CREATE_PED_INSIDE_VEHICLE(CRASH_CAR_FAMILY.index, PEDTYPE_CIVFEMALE, businessManModel)
|
|
SET_PED_CONFIG_FLAG(CRASH_CAR_FAMILY.driver, PCF_WillFlyThroughWindscreen, TRUE)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(CRASH_CAR_FAMILY.index, TRUE)
|
|
SET_VEHICLE_DOORS_LOCKED(CRASH_CAR_FAMILY.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
SET_PED_COMBAT_ATTRIBUTES(CRASH_CAR_FAMILY.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(CRASH_CAR_FAMILY.driver, relGroupDrivers)
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(SKID_CAR_TAXI.index)
|
|
IF HAS_MODEL_LOADED(taxiModel) AND HAS_MODEL_LOADED(taxiDriverModel)
|
|
SKID_CAR_TAXI.index = CREATE_VEHICLE(taxiModel, <<-651.40, -153.68, 36.95>>, 217.44)
|
|
SKID_CAR_TAXI.driver = CREATE_PED_INSIDE_VEHICLE(SKID_CAR_TAXI.index, PEDTYPE_CIVMALE, taxiDriverModel)
|
|
TAXI_PASSENGER_PED = CREATE_PED_INSIDE_VEHICLE(SKID_CAR_TAXI.index, PEDTYPE_CIVMALE, businessManModel, VS_BACK_RIGHT)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(SKID_CAR_TAXI.index, TRUE)
|
|
SET_VEHICLE_DOORS_LOCKED(SKID_CAR_TAXI.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
SET_PED_COMBAT_ATTRIBUTES(SKID_CAR_TAXI.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_COMBAT_ATTRIBUTES(TAXI_PASSENGER_PED, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(SKID_CAR_TAXI.driver, relGroupDrivers)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(TAXI_PASSENGER_PED, relGroupDrivers)
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(SKID_CAR_SENTINEL.index)
|
|
IF HAS_MODEL_LOADED(sentinelCarModel) AND HAS_MODEL_LOADED(businessManModel)
|
|
SKID_CAR_SENTINEL.index = CREATE_VEHICLE(sentinelCarModel, <<-525.33, -137.35, 38.04>>, 111.20)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(SKID_CAR_SENTINEL.index)
|
|
SET_VEHICLE_DOORS_LOCKED(SKID_CAR_SENTINEL.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
IF NOT IS_PED_UNINJURED(SKID_CAR_SENTINEL.driver)
|
|
SKID_CAR_SENTINEL.driver = CREATE_PED_INSIDE_VEHICLE(SKID_CAR_SENTINEL.index, PEDTYPE_CIVMALE, businessManModel)
|
|
SET_PED_COMBAT_ATTRIBUTES(SKID_CAR_SENTINEL.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(SKID_CAR_SENTINEL.driver, relGroupDrivers)
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
/*IF NOT DOES_ENTITY_EXIST(ESCORT_CAR_FAMILY.index)
|
|
IF HAS_MODEL_LOADED(escortCarModel) AND HAS_MODEL_LOADED(businessManModel)
|
|
ESCORT_CAR_FAMILY.index = CREATE_VEHICLE(escortCarModel, <<-519.58, -134.52, 38.65>>, 111.20)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(ESCORT_CAR_FAMILY.index)
|
|
SET_VEHICLE_DOORS_LOCKED(ESCORT_CAR_FAMILY.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
IF NOT IS_PED_UNINJURED(ESCORT_CAR_FAMILY.driver)
|
|
ESCORT_CAR_FAMILY.driver = CREATE_PED_INSIDE_VEHICLE(ESCORT_CAR_FAMILY.index, PEDTYPE_CIVMALE, businessManModel)
|
|
SET_PED_COMBAT_ATTRIBUTES(ESCORT_CAR_FAMILY.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(ESCORT_CAR_FAMILY.driver, relGroupDrivers)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF*/
|
|
|
|
IF NOT DOES_ENTITY_EXIST(TAXI_CAR.index)
|
|
IF HAS_MODEL_LOADED(taxiModel) AND HAS_MODEL_LOADED(taxiDriverModel)
|
|
TAXI_CAR.index = CREATE_VEHICLE(taxiModel, TAXI_CAR.startPosition, TAXI_CAR.startHeading)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(TAXI_CAR.index)
|
|
SET_VEHICLE_DOORS_LOCKED(TAXI_CAR.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
IF NOT IS_PED_UNINJURED(TAXI_CAR.driver)
|
|
TAXI_CAR.driver = CREATE_PED_INSIDE_VEHICLE(TAXI_CAR.index, PEDTYPE_CIVMALE, taxiDriverModel)
|
|
SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(TAXI_CAR.driver, relGroupDrivers)
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(SKID_CAR_JEEP.index)
|
|
IF HAS_MODEL_LOADED(jeepCarModel) AND HAS_MODEL_LOADED(businessManModel)
|
|
SKID_CAR_JEEP.index = CREATE_VEHICLE(jeepCarModel, <<-584.32, -156.66, 36.95>>, 117.29)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(SKID_CAR_JEEP.index)
|
|
SET_VEHICLE_DOORS_LOCKED(SKID_CAR_JEEP.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
SKID_CAR_JEEP.driver = CREATE_PED_INSIDE_VEHICLE(SKID_CAR_JEEP.index, PEDTYPE_CIVMALE, businessManModel)
|
|
SET_PED_COMBAT_ATTRIBUTES(SKID_CAR_JEEP.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(SKID_CAR_JEEP.driver, relGroupDrivers)
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Always create these vehicles
|
|
IF NOT DOES_ENTITY_EXIST(FIRST_CAR.index)
|
|
IF HAS_MODEL_LOADED(FIRST_CAR.carModel) AND HAS_MODEL_LOADED(taxiDriverModel)
|
|
FIRST_CAR.index = CREATE_VEHICLE(escortCarModel, <<-683.30, -238.03, 36.63>>, 29.79)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(FIRST_CAR.index)
|
|
SET_VEHICLE_DOORS_LOCKED(FIRST_CAR.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
IF NOT IS_PED_UNINJURED(FIRST_CAR.driver)
|
|
FIRST_CAR.driver = CREATE_PED_INSIDE_VEHICLE(FIRST_CAR.index, PEDTYPE_CIVMALE, taxiDriverModel)
|
|
SET_PED_COMBAT_ATTRIBUTES(FIRST_CAR.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(FIRST_CAR.driver, relGroupDrivers)
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(SECOND_CAR.index)
|
|
IF HAS_MODEL_LOADED(SECOND_CAR.carModel) AND HAS_MODEL_LOADED(SECOND_CAR.driverModel)
|
|
SECOND_CAR.index = CREATE_VEHICLE(SECOND_CAR.carModel, SECOND_CAR.startPosition, SECOND_CAR.startHeading)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(SECOND_CAR.index)
|
|
SET_VEHICLE_DOORS_LOCKED(SECOND_CAR.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
IF NOT IS_PED_UNINJURED(SECOND_CAR.driver)
|
|
SECOND_CAR.driver = CREATE_PED_INSIDE_VEHICLE(SECOND_CAR.index, PEDTYPE_CIVMALE, SECOND_CAR.driverModel)
|
|
SET_PED_COMBAT_ATTRIBUTES(SECOND_CAR.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(SECOND_CAR.driver, relGroupDrivers)
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(FINAL_CAR.index)
|
|
IF HAS_MODEL_LOADED(familyCarModel) AND HAS_MODEL_LOADED(taxiDriverModel)
|
|
FINAL_CAR.index = CREATE_VEHICLE(familyCarModel, FINAL_CAR.startPosition, FINAL_CAR.startHeading)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(FINAL_CAR.index)
|
|
SET_VEHICLE_DOORS_LOCKED(FINAL_CAR.index, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
IF NOT IS_PED_UNINJURED(FINAL_CAR.driver)
|
|
FINAL_CAR.driver = CREATE_PED_INSIDE_VEHICLE(FINAL_CAR.index, PEDTYPE_CIVMALE, taxiDriverModel)
|
|
SET_PED_COMBAT_ATTRIBUTES(FINAL_CAR.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(FINAL_CAR.driver, relGroupDrivers)
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
// This will probably go back in so just commenting it out. B* 1107526
|
|
/*IF NOT DOES_ENTITY_EXIST(FIRE_TRUCK.index)
|
|
FIRE_TRUCK.index = CREATE_VEHICLE(FIRETRUK, <<-635.68, -105.39, 38.14>>, 87.14)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(FIRE_TRUCK.index)
|
|
IF NOT IS_PED_UNINJURED(FIRE_TRUCK.driver)
|
|
FIRE_TRUCK.driver = CREATE_PED_INSIDE_VEHICLE(FIRE_TRUCK.index, PEDTYPE_FIRE, fireManModel)
|
|
SET_PED_COMBAT_ATTRIBUTES(FIRE_TRUCK.driver, CA_ALWAYS_FLEE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(FIRE_TRUCK.driver, relGroupDrivers)
|
|
ENDIF
|
|
ENDIF*/
|
|
IF NOT DOES_ENTITY_EXIST(STATIONARY_FIRE_TRUCK)
|
|
IF HAS_MODEL_LOADED(FIRETRUK)
|
|
STATIONARY_FIRE_TRUCK = CREATE_VEHICLE(FIRETRUK, <<-637.88, -112.82, 38.10>>, 83.08)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(STATIONARY_FIRE_TRUCK)
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Gets the player's current weapon
|
|
/// RETURNS:
|
|
/// The player's current weapon
|
|
FUNC WEAPON_TYPE CURRENT_PLAYER_WEAPON()
|
|
WEAPON_TYPE wep
|
|
GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), wep)
|
|
RETURN wep
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Controls the drivers of the cars involved in the crash
|
|
PROC UPDATE_THE_PEDS_AFTER_CRASH()
|
|
|
|
IF IS_PED_UNINJURED(TAXI_CAR.driver)
|
|
AND IS_ENTITY_ALIVE(TAXI_CAR.index)
|
|
AND IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
SWITCH taxiDriverState
|
|
CASE taxiDriver_lookingAtCarCrash
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), CRASH_CAR_FAMILY.index)
|
|
OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), CRASH_CAR_POSH.index)
|
|
OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), TAXI_CAR.index)
|
|
CLEAR_PED_TASKS(TAXI_CAR.driver)
|
|
IF CURRENT_PLAYER_WEAPON() = WEAPONTYPE_UNARMED
|
|
SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FIGHT, TRUE)
|
|
ENDIF
|
|
TASK_COMBAT_PED(TAXI_CAR.driver, PLAYER_PED_ID())
|
|
taxiDriverState = taxiDriver_attackingPlayer
|
|
ENDIF
|
|
|
|
IF IS_PED_FLEEING(TAXI_CAR.driver)
|
|
taxiDriverState = taxiDriver_fleeing
|
|
ENDIF
|
|
BREAK
|
|
CASE taxiDriver_attackingPlayer
|
|
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), TAXI_CAR.index)
|
|
IF NOT IS_ENTITY_IN_RANGE_ENTITY(TAXI_CAR.driver, TAXI_CAR.index, 20)
|
|
AND NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), TAXI_CAR.index, 20)
|
|
AND NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), TAXI_CAR.driver, 10)
|
|
AND NOT IS_PED_FLEEING(TAXI_CAR.driver)
|
|
CLEAR_PED_TASKS(TAXI_CAR.driver)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(TAXI_CAR.driver, PLAYER_PED_ID(), -1)
|
|
SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FLEE, TRUE)
|
|
taxiDriverState = taxiDriver_watchingPlayer
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PED_FLEEING(TAXI_CAR.driver)
|
|
taxiDriverState = taxiDriver_fleeing
|
|
ENDIF
|
|
|
|
if HAS_PLAYER_THREATENED_PED(TAXI_CAR.driver, TRUE)
|
|
SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FIGHT, FALSE)
|
|
SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FLEE, TRUE)
|
|
CLEAR_PED_TASKS(TAXI_CAR.driver)
|
|
TASK_SMART_FLEE_PED(TAXI_CAR.driver, PLAYER_PED_ID(), 60, -1)
|
|
taxiDriverState = taxiDriver_fleeing
|
|
ENDIF
|
|
BREAK
|
|
CASE taxiDriver_watchingPlayer
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), TAXI_CAR.driver) < 8
|
|
SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FIGHT, TRUE)
|
|
TASK_COMBAT_PED(TAXI_CAR.driver, PLAYER_PED_ID())
|
|
taxiDriverState = taxiDriver_attackingPlayer
|
|
ENDIF
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), TAXI_CAR.driver) > 20
|
|
open_sequence_task(seq)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 1000)
|
|
TASK_ENTER_VEHICLE(NULL, TAXI_CAR.index, DEFAULT_TIME_NEVER_WARP, VS_DRIVER, 1.0)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(TAXI_CAR.driver, seq)
|
|
clear_sequence_task(seq)
|
|
taxiDriverState = taxiDriver_returnToCrash
|
|
ENDIF
|
|
|
|
IF IS_PED_FLEEING(TAXI_CAR.driver)
|
|
taxiDriverState = taxiDriver_fleeing
|
|
ENDIF
|
|
BREAK
|
|
CASE taxiDriver_returnToCrash
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), TAXI_CAR.driver, 8)
|
|
SET_PED_COMBAT_ATTRIBUTES(TAXI_CAR.driver, CA_ALWAYS_FIGHT, TRUE)
|
|
TASK_COMBAT_PED(TAXI_CAR.driver, PLAYER_PED_ID())
|
|
taxiDriverState = taxiDriver_attackingPlayer
|
|
ENDIF
|
|
|
|
IF IS_PED_FLEEING(TAXI_CAR.driver)
|
|
taxiDriverState = taxiDriver_fleeing
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
IF IS_PED_UNINJURED(CRASH_CAR_POSH.driver)
|
|
SWITCH femaleDriverState
|
|
CASE femaleDriver_lookingAtCarCrash
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), CRASH_CAR_FAMILY.index)
|
|
OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), CRASH_CAR_POSH.index)
|
|
OR IS_PED_IN_VEHICLE(PLAYER_PED_ID(), TAXI_CAR.index)
|
|
CLEAR_PED_TASKS(CRASH_CAR_POSH.driver)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(CRASH_CAR_POSH.driver, PLAYER_PED_ID(), 0)
|
|
femaleDriverState = femaleDriver_cower
|
|
ENDIF
|
|
BREAK
|
|
CASE femaleDriver_cower
|
|
|
|
BREAK
|
|
CASE femaleDriver_flee
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Causes the crash vehicles to crash and makes their drivers react appropriately
|
|
PROC UPDATE_THE_CRASH()
|
|
|
|
IF crashStage <> CS_FINISHED
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(CRASH_CAR_FAMILY)
|
|
AND CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(CRASH_CAR_POSH)
|
|
AND CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(TAXI_CAR)
|
|
IF bCAR_HONKING = FALSE
|
|
IF IS_ENTITY_IN_ANGLED_AREA(CELEBRITY_DOG, <<-662.768799,-208.317108,35.493214>>, <<-674.628906,-214.651871,38.805908>>, 6.500000)
|
|
START_VEHICLE_HORN(CRASH_CAR_POSH.index, 1500)
|
|
TASK_LOOK_AT_ENTITY(CRASH_CAR_POSH.driver, CELEBRITY_DOG, 5000)
|
|
IF IS_PED_UNINJURED(shockedPed[2].index)
|
|
IF IS_PED_USING_ANY_SCENARIO(shockedPed[2].index)
|
|
SET_PED_PANIC_EXIT_SCENARIO(shockedPed[2].index, GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
ENDIF
|
|
open_sequence_task(seq)
|
|
TASK_PAUSE(NULL, 500)
|
|
TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "reaction_backward_big_intro_c", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED)
|
|
TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "react_big_variations_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED)
|
|
TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "exit_to_generic", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 3000)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(shockedPed[2].index, seq)
|
|
clear_sequence_task(seq)
|
|
ENDIF
|
|
|
|
bCAR_HONKING = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
SWITCH crashStage
|
|
CASE CS_WAITING
|
|
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG)
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 8
|
|
CPRINTLN(DEBUG_MISSION, "CAR_REC_SHOULD BE KICKING OFF")
|
|
crashStage = CS_SET_TO_DRIVE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE CS_SET_TO_DRIVE
|
|
START_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_POSH.index, iNumRecBrakeCar, recBrakeCar)
|
|
START_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_FAMILY.index, iNumRecStraightCrashCar, recCrashCars)
|
|
START_PLAYBACK_RECORDED_VEHICLE(TAXI_CAR.index, iNumRecSwerveCrashCar, recCrashCars)
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_POSH.index, 2000)//3000)
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_FAMILY.index, 2650)//3650)
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(TAXI_CAR.index, 6000)//7000)
|
|
|
|
crashStage = CS_DRIVING
|
|
BREAK
|
|
CASE CS_DRIVING
|
|
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(CRASH_CAR_FAMILY.index)
|
|
AND IS_PLAYBACK_GOING_ON_FOR_VEHICLE(TAXI_CAR.index)
|
|
AND IS_PLAYBACK_GOING_ON_FOR_VEHICLE(CRASH_CAR_POSH.index)
|
|
|
|
SET_PLAYBACK_SPEED(CRASH_CAR_POSH.index, 0.7)
|
|
SET_PLAYBACK_SPEED(CRASH_CAR_FAMILY.index, 0.7)
|
|
SET_PLAYBACK_SPEED(TAXI_CAR.index, 0.85)
|
|
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(CRASH_CAR_FAMILY.index, TAXI_CAR.index, 7)
|
|
crashStage = CS_SET_TO_CRASH
|
|
ENDIF
|
|
|
|
ENDIF
|
|
BREAK
|
|
CASE CS_SET_TO_CRASH
|
|
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_FAMILY.index)
|
|
REMOVE_VEHICLE_RECORDING(iNumRecStraightCrashCar, recCrashCars)
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(TAXI_CAR.index)
|
|
REMOVE_VEHICLE_RECORDING(iNumRecSwerveCrashCar, recCrashCars)
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(CRASH_CAR_POSH.index)
|
|
REMOVE_VEHICLE_RECORDING(iNumRecBrakeCar, recBrakeCar)
|
|
TASK_VEHICLE_MISSION(TAXI_CAR.driver, TAXI_CAR.index, CRASH_CAR_FAMILY.index, MISSION_RAM, 20, DRIVINGMODE_PLOUGHTHROUGH, 0.5, 2)
|
|
TASK_VEHICLE_MISSION(CRASH_CAR_FAMILY.driver, CRASH_CAR_FAMILY.index, TAXI_CAR.index, MISSION_RAM, 20, DRIVINGMODE_PLOUGHTHROUGH, 0.5, 2)
|
|
|
|
START_VEHICLE_HORN(CRASH_CAR_FAMILY.index, 800)
|
|
crashStage = CS_CRASHING
|
|
BREAK
|
|
CASE CS_CRASHING
|
|
IF HAS_ENTITY_COLLIDED_WITH_ANYTHING(CRASH_CAR_FAMILY.index)
|
|
open_sequence_task(seq)
|
|
TASK_VEHICLE_TEMP_ACTION(NULL, TAXI_CAR.index, TEMPACT_HANDBRAKETURNRIGHT, 1000)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(TAXI_CAR.driver, seq)
|
|
clear_sequence_task(seq)
|
|
|
|
TASK_VEHICLE_TEMP_ACTION(CRASH_CAR_FAMILY.driver, CRASH_CAR_FAMILY.index, TEMPACT_HANDBRAKETURNLEFT, 1000)
|
|
SMASH_VEHICLE_WINDOW(CRASH_CAR_FAMILY.index, SC_WINDOW_REAR_LEFT)
|
|
SMASH_VEHICLE_WINDOW(CRASH_CAR_FAMILY.index, SC_WINDOW_fRONT_LEFT)
|
|
|
|
bCRASH_SHOUTED = TRUE
|
|
|
|
ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_CAR_PILE_UP, TAXI_CAR.index, -1)
|
|
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FINAL_CAR)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(FINAL_CAR.driver, FINAL_CAR.index, <<-567.85, -288.80, 34.08>>, 12, DRIVINGSTYLE_NORMAL, familyCarModel, DF_SteerAroundPeds | DF_SteerAroundStationaryCars, 5,5)
|
|
ENDIF
|
|
|
|
crashStage = CS_TASK_THEM_TO_EXIT
|
|
ENDIF
|
|
BREAK
|
|
CASE CS_TASK_THEM_TO_EXIT
|
|
IF GET_ENTITY_SPEED(CRASH_CAR_FAMILY.index) < 0.5
|
|
AND GET_ENTITY_SPEED(TAXI_CAR.index) < 0.5
|
|
open_sequence_task(seq)
|
|
TASK_PAUSE(NULL, 1000)
|
|
TASK_LEAVE_VEHICLE(NULL, TAXI_CAR.index)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(CRASH_CAR_FAMILY.driver, <<-1, 1, 0>>), 1.3, DEFAULT_TIME_BEFORE_WARP)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, CRASH_CAR_FAMILY.driver, 0)
|
|
//TASK_START_SCENARIO_IN_PLACE(NULL, "CODE_HUMAN_SHOCKING_BIG_REACTION", 0, TRUE)
|
|
TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "react_big_variations_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED)
|
|
TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "exit_to_generic", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(TAXI_CAR.driver, seq)
|
|
clear_sequence_task(seq)
|
|
|
|
open_sequence_task(seq)
|
|
TASK_LEAVE_VEHICLE(NULL, CRASH_CAR_POSH.index)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, TAXI_CAR.index, 2500)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(CRASH_CAR_FAMILY.driver, <<-1, 1, 0>>), 1.2, DEFAULT_TIME_BEFORE_WARP, 1)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, CRASH_CAR_FAMILY.driver, 0)
|
|
//TASK_START_SCENARIO_IN_PLACE(NULL, "CODE_HUMAN_SHOCKING_BIG_REACTION", 0, TRUE)
|
|
TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "react_big_variations_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED)
|
|
TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "exit_to_generic", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXIT_AFTER_INTERRUPTED)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(CRASH_CAR_POSH.driver, seq)
|
|
clear_sequence_task(seq)
|
|
|
|
SET_ENTITY_HEALTH(CRASH_CAR_FAMILY.driver, 0)
|
|
|
|
taxiDriverState = taxiDriver_lookingAtCarCrash
|
|
femaleDriverState = femaleDriver_lookingAtCarCrash
|
|
|
|
crashStage = CS_FINISHED
|
|
ENDIF
|
|
BREAK
|
|
CASE CS_FINISHED
|
|
BREAK
|
|
ENDSWITCH
|
|
ELIF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FINAL_CAR)
|
|
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG)
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 19
|
|
TASK_VEHICLE_DRIVE_TO_COORD(FINAL_CAR.driver, FINAL_CAR.index, <<-567.85, -288.80, 34.08>>, 12, DRIVINGSTYLE_NORMAL, familyCarModel, DF_SteerAroundPeds | DF_SteerAroundStationaryCars, 5,5)
|
|
crashStage = CS_FINISHED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF IS_VEHICLE_OK(CRASH_CAR_FAMILY.index)
|
|
AND IS_VEHICLE_OK(CRASH_CAR_POSH.index)
|
|
AND IS_VEHICLE_OK(TAXI_CAR.index)
|
|
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(CRASH_CAR_FAMILY.index, TRUE)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(CRASH_CAR_POSH.index, TRUE)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(TAXI_CAR.index, TRUE)
|
|
|
|
UPDATE_THE_PEDS_AFTER_CRASH()
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Makes the taxi skid to avoid the dog
|
|
PROC UPDATE_THE_SKIDDING_TAXI()
|
|
IF bRELEASE_SPORTS_CAR = FALSE
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SKID_CAR_TAXI)
|
|
AND IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(SKID_CAR_TAXI.index)
|
|
SET_PLAYBACK_SPEED(SKID_CAR_TAXI.index, fCAR_REC_SPEED)
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 32
|
|
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_TAXI.index)
|
|
REMOVE_VEHICLE_RECORDING(001, "NIG1C_COMET")
|
|
CLEAR_PED_TASKS(SKID_CAR_TAXI.driver)
|
|
TASK_VEHICLE_DRIVE_WANDER(SKID_CAR_TAXI.driver, SKID_CAR_TAXI.index, 20, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS)
|
|
|
|
bRELEASE_SPORTS_CAR = TRUE
|
|
ENDIF
|
|
IF bSPORTS_HONKING = FALSE
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(SKID_CAR_TAXI.index, CELEBRITY_DOG, 6)
|
|
START_VEHICLE_HORN(SKID_CAR_TAXI.index, 3000)
|
|
bSPORTS_HONKING = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG)
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 25
|
|
START_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_TAXI.index, 001, "NIG1C_COMET")
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_TAXI.index, 2500)
|
|
TASK_LOOK_AT_ENTITY(SKID_CAR_TAXI.driver, CELEBRITY_DOG, -1)
|
|
IF IS_PED_UNINJURED(TAXI_PASSENGER_PED)
|
|
TASK_LOOK_AT_ENTITY(TAXI_PASSENGER_PED, CELEBRITY_DOG, -1)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(SKID_CAR_TAXI.index, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Makes the other cars react appropriately to the dog
|
|
PROC UPDATE_THE_OTHER_CAR()
|
|
IF bRELEASE_SENTINEL_CAR = FALSE
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SKID_CAR_SENTINEL)
|
|
AND IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
//AND CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(ESCORT_CAR_FAMILY)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(SKID_CAR_SENTINEL.index)
|
|
SET_PLAYBACK_SPEED(SKID_CAR_SENTINEL.index, fCAR_REC_SPEED)
|
|
//SET_PLAYBACK_SPEED(ESCORT_CAR_FAMILY.index, fCAR_REC_SPEED)
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 35
|
|
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_SENTINEL.index)
|
|
REMOVE_VEHICLE_RECORDING(002, "NIG1C_COMET2")
|
|
CLEAR_PED_TASKS(SKID_CAR_SENTINEL.driver)
|
|
TASK_VEHICLE_DRIVE_WANDER(SKID_CAR_SENTINEL.driver, SKID_CAR_SENTINEL.index, 20, DF_SteerAroundStationaryCars | DF_StopForCars | DF_StopForPeds | DF_StopAtLights)
|
|
|
|
/*STOP_PLAYBACK_RECORDED_VEHICLE(ESCORT_CAR_FAMILY.index)
|
|
REMOVE_VEHICLE_RECORDING(001, "NIG1CEscort")
|
|
CLEAR_PED_TASKS(ESCORT_CAR_FAMILY.driver)
|
|
open_sequence_task(seq)
|
|
TASK_PAUSE(NULL, 2000)
|
|
TASK_VEHICLE_DRIVE_WANDER(NULL, ESCORT_CAR_FAMILY.index, 20, DF_SteerAroundStationaryCars | DF_StopForCars | DF_StopForPeds | DF_StopAtLights)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(ESCORT_CAR_FAMILY.driver, seq)
|
|
clear_sequence_task(seq)*/
|
|
|
|
if CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FIRST_CAR)
|
|
TASK_VEHICLE_DRIVE_WANDER(FIRST_CAR.driver, FIRST_CAR.index, 15, DF_SteerAroundStationaryCars | DF_StopForCars | DF_StopForPeds | DF_StopAtLights)
|
|
ENDIF
|
|
|
|
bRELEASE_SENTINEL_CAR = TRUE
|
|
ENDIF
|
|
IF bSENTINEL_HONKING = FALSE
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(SKID_CAR_SENTINEL.index, CELEBRITY_DOG, 6)
|
|
START_VEHICLE_HORN(SKID_CAR_SENTINEL.index, 4000)
|
|
bSENTINEL_HONKING = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG)
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() = 19
|
|
START_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_SENTINEL.index, 002, "NIG1C_COMET2")
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(SKID_CAR_SENTINEL.index, 4400)
|
|
TASK_LOOK_AT_ENTITY(SKID_CAR_SENTINEL.driver, CELEBRITY_DOG, -1)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(SKID_CAR_SENTINEL.index, TRUE)
|
|
|
|
/*START_PLAYBACK_RECORDED_VEHICLE(ESCORT_CAR_FAMILY.index, 001, "NIG1CEscort")
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(ESCORT_CAR_FAMILY.index, 4400)
|
|
TASK_LOOK_AT_ENTITY(ESCORT_CAR_FAMILY.driver, CELEBRITY_DOG, -1)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(ESCORT_CAR_FAMILY.index, TRUE)*/
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Makes the fire truck drive out of the fire station, blocking the dog's route
|
|
// This will probably go back in so just commenting it out. B* 1107526
|
|
/*PROC UPDATE_THE_FIRE_TRUCK()
|
|
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG)
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FIRE_TRUCK)
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() < 41
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(FIRE_TRUCK.index)
|
|
SET_PLAYBACK_SPEED(FIRE_TRUCK.index, fCAR_REC_SPEED)
|
|
ELSE
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() = 39
|
|
START_PLAYBACK_RECORDED_VEHICLE(FIRE_TRUCK.index, 001, "NIG1C_FIRE")
|
|
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(FIRE_TRUCK.index, 1000)
|
|
SET_VEHICLE_SIREN(FIRE_TRUCK.index, TRUE)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(FIRE_TRUCK.index, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(FIRE_TRUCK.index)
|
|
open_sequence_task(seq)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRE_TRUCK.index, <<-654.22, -117.82, 36.72>>, 3, DRIVINGSTYLE_NORMAL, FIRETRUK, DF_SwerveAroundAllCars | DF_SteerAroundPeds, 3, 5)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRE_TRUCK.index, <<-639.11, -166.04, 36.67>>, 20, DRIVINGSTYLE_NORMAL, FIRETRUK, DF_SwerveAroundAllCars | DF_SteerAroundPeds, 5, 3)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRE_TRUCK.index, <<-551.31, -313.15, 34.11>>, 20, DRIVINGSTYLE_NORMAL, FIRETRUK, DF_SwerveAroundAllCars | DF_SteerAroundPeds, 5, 3)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(FIRE_TRUCK.driver, seq)
|
|
clear_sequence_task(seq)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC*/
|
|
|
|
/// PURPOSE:
|
|
/// Makes the jeep and its driver react appropriately to the dog
|
|
PROC UPDATE_THE_JEEP()
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SKID_CAR_JEEP)
|
|
AND IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
|
|
SWITCH jeepStage
|
|
CASE JS_WAITING
|
|
BREAK
|
|
CASE JS_SET_TO_DRIVE
|
|
SET_ENTITY_COORDS(SKID_CAR_JEEP.index, <<-616.56, -176.60, 37.26>>)
|
|
SET_ENTITY_HEADING(SKID_CAR_JEEP.index, 117.29)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(SKID_CAR_JEEP.index)
|
|
IF IS_VEHICLE_OK(CRASH_CAR_FAMILY.index)
|
|
TASK_VEHICLE_MISSION(SKID_CAR_JEEP.driver, SKID_CAR_JEEP.index, CRASH_CAR_FAMILY.index, MISSION_ESCORT_REAR, 15, DRIVINGMODE_PLOUGHTHROUGH, 20, 5)
|
|
ENDIF
|
|
SET_VEHICLE_FORWARD_SPEED(SKID_CAR_JEEP.index, 10)
|
|
jeepStage = JS_DRIVING
|
|
BREAK
|
|
CASE JS_DRIVING
|
|
SET_DRIVE_TASK_CRUISE_SPEED(SKID_CAR_JEEP.driver, 15)
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, SKID_CAR_JEEP.driver, 18)
|
|
REPLAY_RECORD_BACK_FOR_TIME(3.0, 2.0, REPLAY_IMPORTANCE_LOWEST)
|
|
jeepStage = JS_SET_TO_SKID
|
|
ENDIF
|
|
BREAK
|
|
CASE JS_SET_TO_SKID
|
|
open_sequence_task(seq)
|
|
TASK_VEHICLE_TEMP_ACTION(NULL, SKID_CAR_JEEP.index, TEMPACT_SWERVELEFT, 500)
|
|
TASK_VEHICLE_TEMP_ACTION(NULL, SKID_CAR_JEEP.index, TEMPACT_HANDBRAKETURNLEFT, 1000)
|
|
TASK_PAUSE(NULL, 1000)
|
|
TASK_LEAVE_VEHICLE(NULL, SKID_CAR_JEEP.index)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(SKID_CAR_JEEP.driver, seq)
|
|
clear_sequence_task(seq)
|
|
START_VEHICLE_HORN(SKID_CAR_JEEP.index, 1000)
|
|
|
|
jeepStage = JS_EXITING_CAR
|
|
BREAK
|
|
CASE JS_EXITING_CAR
|
|
IF GET_SCRIPT_TASK_STATUS(SKID_CAR_JEEP.driver, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
|
|
AND IS_VEHICLE_SEAT_FREE(SKID_CAR_JEEP.index, VS_DRIVER)
|
|
AND NOT IS_PED_FLEEING(SKID_CAR_JEEP.driver)
|
|
open_sequence_task(seq)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(SKID_CAR_JEEP.index, <<-2, 2, 0>>), 2)
|
|
IF IS_PED_UNINJURED(CRASH_CAR_POSH.driver)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, CRASH_CAR_POSH.driver, 5000)
|
|
ELSE
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 5000)
|
|
ENDIF
|
|
TASK_ENTER_VEHICLE(NULL, SKID_CAR_JEEP.index, DEFAULT_TIME_NEVER_WARP, VS_DRIVER, 1.8, ECF_RESUME_IF_INTERRUPTED | ECF_JACK_ANYONE)
|
|
TASK_VEHICLE_DRIVE_WANDER(NULL, SKID_CAR_JEEP.index, 10, DF_StopAtLights | DF_StopForPeds | DF_StopForCars)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(SKID_CAR_JEEP.driver, seq)
|
|
clear_sequence_task(seq)
|
|
jeepStage = JS_LOOKS_AT_CRASH
|
|
ENDIF
|
|
if IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SKID_CAR_JEEP.index)
|
|
AND NOT IS_PED_FLEEING(SKID_CAR_JEEP.driver)
|
|
CLEAR_PED_TASKS(SKID_CAR_JEEP.driver)
|
|
jeepStage = JS_PLAYER_ENTERS_CAR
|
|
ENDIF
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(SKID_CAR_JEEP.index, TRUE)
|
|
BREAK
|
|
CASE JS_LOOKS_AT_CRASH
|
|
if IS_PED_IN_VEHICLE(PLAYER_PED_ID(), SKID_CAR_JEEP.index)
|
|
AND NOT IS_PED_FLEEING(SKID_CAR_JEEP.driver)
|
|
CLEAR_PED_TASKS(SKID_CAR_JEEP.driver)
|
|
jeepStage = JS_PLAYER_ENTERS_CAR
|
|
ENDIF
|
|
BREAK
|
|
CASE JS_PLAYER_ENTERS_CAR
|
|
open_sequence_task(seq)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 2000)
|
|
TASK_ENTER_VEHICLE(null, SKID_CAR_JEEP.index, DEFAULT_TIME_NEVER_WARP, VS_DRIVER, 2.5, ECF_RESUME_IF_INTERRUPTED | ECF_JACK_ANYONE)
|
|
TASK_VEHICLE_MISSION_PED_TARGET(NULL, SKID_CAR_JEEP.index, PLAYER_PED_ID(), MISSION_FLEE, 20,DF_SteerAroundPeds | DF_SwerveAroundAllCars, 100, 5)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(SKID_CAR_JEEP.driver, seq)
|
|
clear_sequence_task(seq)
|
|
jeepStage = JS_JEEP_FLEES
|
|
BREAK
|
|
CASE JS_JEEP_FLEES
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Positions the dog when the player catches it
|
|
PROC SET_DOG_POSITION_WHEN_CAUGHT()
|
|
|
|
FLOAT zPos
|
|
VECTOR vPos_Final
|
|
SET_ENTITY_COORDS(CELEBRITY_DOG, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0.3,0.9,0>>))
|
|
SET_ENTITY_HEADING(CELEBRITY_DOG, GET_ENTITY_HEADING(PLAYER_PED_ID()) + 90)
|
|
GET_GROUND_Z_FOR_3D_COORD(GET_ENTITY_COORDS(CELEBRITY_DOG), zPos)
|
|
vPos_Final = GET_ENTITY_COORDS(CELEBRITY_DOG)
|
|
SET_ENTITY_COORDS(CELEBRITY_DOG, <<vPos_Final.x, vPos_Final.y, zPos>>)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if the player is close enough and running fast enough to scare Muffy Cakes into running
|
|
/// RETURNS:
|
|
/// TRUE if the player is close enough and running fast enough to scare Muffy Cakes into running, FALSE otherwise
|
|
FUNC BOOL PLAYER_SCARED_DOG()
|
|
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
AND IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 6.5)
|
|
RETURN TRUE
|
|
ENDIF
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-630.475281,-263.955231,37.405323>>, <<-621.448730,-258.858795,39.220131>>, 4.000000)
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if the player is close enough to the dog to have caught it
|
|
/// PARAMS:
|
|
/// fAdditionalDistance - an additional value to add on to the standard checking distance
|
|
/// RETURNS:
|
|
/// TRUE if the player is close enough to have caught the dog, false otherwise
|
|
FUNC BOOL PLAYER_CAUGHT_DOG(FLOAT fAdditionalDistance = 0.0)
|
|
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
AND IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) OR IS_PED_RAGDOLL(PLAYER_PED_ID()) OR IS_PED_GETTING_UP(PLAYER_PED_ID()) OR IS_PED_PRONE(PLAYER_PED_ID())
|
|
OR IS_PED_FALLING(PLAYER_PED_ID()) OR IS_PED_JUMPING(PLAYER_PED_ID())
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA(CELEBRITY_DOG, vChatUpAreaPos1, vChatUpAreaPos2, fChatUpAreaWidth) //missionStage <> MS_GRAB_DOG_CUTSCENE AND missionStage <> MS_DOG_WAITING_AT_FIRESTATION
|
|
//IF missionStage = MS_DOG_RUNS_AWAY AND stageStage = SS_STAGE
|
|
//AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, 2.0)
|
|
AND IS_ENTITY_IN_RANGE_COORDS_2D(PLAYER_PED_ID(), GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(CELEBRITY_DOG, <<0,1.0,0>>), 1.5)
|
|
AND NOT HAS_ENTITY_COLLIDED_WITH_ANYTHING(CELEBRITY_DOG)
|
|
SET_PED_TO_RAGDOLL(PLAYER_PED_ID(), 500, 1000, TASK_RELAX, FALSE, FALSE)
|
|
SET_PED_RAGDOLL_FORCE_FALL(PLAYER_PED_ID())
|
|
/*IF HAS_ANIM_DICT_LOADED(NIGEL1C_DICT)
|
|
TASK_PLAY_ANIM(PLAYER_PED_ID(), NIGEL1C_DICT, "avoid_rf")
|
|
ENDIF*/
|
|
CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_CLOSE", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), (0.8 + fAdditionalDistance))
|
|
/*IF missionStage <> MS_GRAB_DOG_CUTSCENE AND missionStage <> MS_DOG_WAITING_AT_FIRESTATION
|
|
//IF missionStage = MS_DOG_RUNS_AWAY AND stageStage = SS_STAGE
|
|
AND IS_ENTITY_IN_RANGE_COORDS_2D(PLAYER_PED_ID(), GET_ENTITY_COORDS(CELEBRITY_DOG), 2.0)
|
|
SET_PED_TO_RAGDOLL(PLAYER_PED_ID(), 500, 1000, TASK_RELAX, FALSE, FALSE)
|
|
CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_CLOSE", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
ELSE*/
|
|
VECTOR offset
|
|
offset = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(PLAYER_PED_ID(), GET_ENTITY_COORDS(CELEBRITY_DOG))
|
|
if offset.y > 0 AND offset.z < 0.1
|
|
RETURN TRUE
|
|
ENDIF
|
|
//ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC FINISHED_CHASE_EARLY()
|
|
IF IS_PED_UNINJURED(CELEBRITY_PED)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(CELEBRITY_PED, PLAYER_PED_ID(), -1)
|
|
ENDIF
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_GRAB_DOG_CUTSCENE
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Speeds up the dog if the player is too close, slows it down if the player is too far away
|
|
PROC UPDATE_DOG_RUN_SPEED()
|
|
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
AND IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
AND IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG)
|
|
|
|
IF runSpeed = dogRunsSlow
|
|
or runSpeed = dogRunsVerySlow
|
|
if GET_THE_CLOSEST_WAYPOINT_TO_PLAYER() > GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() - 1
|
|
runSpeed = dogRunsFastest
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() < 18
|
|
AND GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 6
|
|
runSpeed = dogRunsFastest
|
|
ENDIF
|
|
|
|
SWITCH runSpeed
|
|
CASE dogRunsFastest
|
|
WAYPOINT_PLAYBACK_OVERRIDE_SPEED(CELEBRITY_DOG, 2.9)
|
|
fCAR_REC_SPEED = 1
|
|
|
|
IF NOT IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 9)
|
|
runSpeed = dogRunsNormal
|
|
ENDIF
|
|
BREAK
|
|
CASE dogRunsNormal
|
|
WAYPOINT_PLAYBACK_OVERRIDE_SPEED(CELEBRITY_DOG, 2.65)
|
|
fCAR_REC_SPEED = 0.77
|
|
|
|
IF NOT IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 12)
|
|
runSpeed = dogRunsSlow
|
|
ELSE
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 8)
|
|
runSpeed = dogRunsFastest
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE dogRunsSlow
|
|
WAYPOINT_PLAYBACK_OVERRIDE_SPEED(CELEBRITY_DOG, 2.5)
|
|
fCAR_REC_SPEED = 0.7
|
|
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 10)
|
|
runSpeed = dogRunsNormal
|
|
ELIF NOT IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 15)
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 8
|
|
runSpeed = dogRunsVerySlow
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE dogRunsVerySlow
|
|
WAYPOINT_PLAYBACK_OVERRIDE_SPEED(CELEBRITY_DOG, 2.3)
|
|
fCAR_REC_SPEED = 0.5
|
|
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_DOG, PLAYER_PED_ID(), 12)
|
|
runSpeed = dogRunsSlow
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if it's ok to play dialogue duing the chase
|
|
/// RETURNS:
|
|
/// TRUE if it's OK, FALSE otherwise
|
|
FUNC BOOL IF_CAN_PLAY_CHASE_DIALOGUE()
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_THIS_PRINT_BEING_DISPLAYED("N1C_WRN_DOG") // Catch up with ~b~Mr. Muffy Cakes.
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Checks whether or not the first shocked ped is playing the avoid animation
|
|
/// RETURNS:
|
|
/// TRUE if they're not playing the animation, FALSE otherwise
|
|
FUNC BOOL NOT_PLAYING_AVOID_ANIM()
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(shockedPed[0].index, NIGEL1C_DICT, "avoid_rf")
|
|
AND NOT IS_ENTITY_PLAYING_ANIM(shockedPed[0].index, NIGEL1C_DICT, "avoid_rb")
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Plays appropriate dialogue from the peds along the chase route
|
|
PROC DEAL_WITH_RANDOM_DIALOGUE()
|
|
|
|
IF shockedPed[0].beenShocked
|
|
IF bSHOP_PED_SHOUTED = FALSE
|
|
IF IS_PED_UNINJURED(shockedPed[0].index)
|
|
AND IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_FLEEING(shockedPed[0].index)
|
|
IF NOT_PLAYING_AVOID_ANIM()
|
|
OR IS_ENTITY_IN_RANGE_ENTITY(shockedPed[0].index, PLAYER_PED_ID(), 5)
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(shockedPed[0].index, PLAYER_PED_ID(), 12)
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 5, shockedPed[0].index, "ShockedHipsterFemale")
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_1",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
CLEAR_PED_TASKS(shockedPed[0].index)
|
|
open_sequence_task(seq)
|
|
TASK_LOOK_AT_ENTITY(null, PLAYER_PED_ID(), -1)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 4000)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, shockedPed[0].vPosEnd, 1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(shockedPed[0].index, seq)
|
|
clear_sequence_task(seq)
|
|
bSHOP_PED_SHOUTED = TRUE
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), shockedPed[0].index, 5000)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF bTREVOR_RESPONDED = FALSE
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_2",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
bTREVOR_RESPONDED = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF bCRASH_SHOUTED = TRUE
|
|
IF IS_PED_UNINJURED(shockedPed[2].index)
|
|
AND IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_FLEEING(shockedPed[2].index)
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 4, shockedPed[2].index, "ShockedBusinessMan")
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(shockedPed[2].index, PLAYER_PED_ID(), 50)
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_3",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
bCRASH_SHOUTED = FALSE
|
|
ENDIF
|
|
ELSE
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_3",CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
bCRASH_SHOUTED = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF shockedPed[1].beenShocked = TRUE
|
|
IF bWHAT_YOU_LOOKIN_AT_LINES_READY = TRUE
|
|
IF IS_PED_UNINJURED(shockedPed[1].index)
|
|
AND IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_FLEEING(shockedPed[1].index)
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(shockedPed[1].index, PLAYER_PED_ID(), 8)
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_4", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
CLEAR_PED_TASKS(shockedPed[1].index)
|
|
open_sequence_task(seq)
|
|
TASK_LOOK_AT_ENTITY(null, PLAYER_PED_ID(), -1)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), 4000)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, shockedPed[1].vPosEnd, 1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(shockedPed[1].index, seq)
|
|
clear_sequence_task(seq)
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), shockedPed[1].index, 3500)
|
|
bWHAT_YOU_LOOKIN_AT_LINES_READY = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bFinal_CHASE_LINES_READY = TRUE
|
|
IF GET_THE_CLOSEST_WAYPOINT_TO_PLAYER() > 40
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_5", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
//IF CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_5", "NIG1C_COLLAR", "NIG1C_COLLAR_1", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, -1)
|
|
bFinal_CHASE_LINES_READY = FALSE
|
|
bGotchaLineReady = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bGotchaLineReady
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
AND IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, 10.0)
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_COLLAR", "NIG1C_COLLAR_1", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
bGotchaLineReady = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Deletes the vehicle and ped indexes held by a MISSION_VEHICLE struct
|
|
/// PARAMS:
|
|
/// vehicle - the MISSION_VEHICLE whose vehicle and ped indexes we're deleting
|
|
PROC DELETE_MISSION_VEHICLE_AND_DRIVER(MISSION_VEHICLE vehicle)
|
|
SAFE_DELETE_PED(vehicle.driver)
|
|
SAFE_DELETE_VEHICLE(vehicle.index)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
///
|
|
PROC TriggerSecondPartofCelebConv()
|
|
IF bSecondPartReady
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_MODEL", "NIG1C_MODEL_2", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
bSecondPartReady = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// State machine to control the player attempting to chat up the model
|
|
PROC UPDATE_CHAT_UP_SEQUENCE()
|
|
|
|
SWITCH celebDialogueState
|
|
CASE CC_PUT_GUN_AWAY
|
|
if CURRENT_PLAYER_WEAPON() = WEAPONTYPE_UNARMED
|
|
celebDialogueState = CC_SET_WHISTLE
|
|
ENDIF
|
|
BREAK
|
|
CASE CC_SET_WHISTLE
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
ANIM_DATA none
|
|
ANIM_DATA animDataBlend
|
|
animDataBlend.type = APT_SINGLE_ANIM
|
|
animDataBlend.anim0 = "hailing_whistle_waive_a"
|
|
animDataBlend.dictionary0 = NIGEL1C_DICT
|
|
animDataBlend.phase0 = 0.0
|
|
animDataBlend.rate0 = 1.0
|
|
animDataBlend.weight0 = 0.5
|
|
animDataBlend.filter = GET_HASH_KEY("BONEMASK_HEAD_NECK_AND_L_ARM")
|
|
animDataBlend.flags = AF_UPPERBODY | AF_SECONDARY
|
|
animDataBlend.ikFlags = AIK_USE_FP_ARM_LEFT
|
|
TASK_SCRIPTED_ANIMATION(PLAYER_PED_ID(), animDataBlend, none, none, SLOW_BLEND_DURATION, SLOW_BLEND_DURATION)
|
|
ENDIF
|
|
REPLAY_RECORD_BACK_FOR_TIME(3.0, 2.0, REPLAY_IMPORTANCE_LOWEST)
|
|
IF IS_ENTITY_ALIVE(CELEBRITY_DOG)
|
|
SET_GAMEPLAY_ENTITY_HINT(CELEBRITY_DOG, <<0,0,0>>)
|
|
ENDIF
|
|
iChatUpTimer = GET_GAME_TIMER() + 750
|
|
celebDialogueState = CC_WHISTLE
|
|
BREAK
|
|
CASE CC_WHISTLE
|
|
IF GET_GAME_TIMER() > iChatUpTimer
|
|
AND IS_PED_UNINJURED(CELEBRITY_PED)
|
|
IF IS_PED_USING_ANY_SCENARIO(CELEBRITY_PED)
|
|
SET_PED_PANIC_EXIT_SCENARIO(CELEBRITY_PED, GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
ENDIF
|
|
celebDialogueState = CC_SET_TALKING
|
|
ENDIF
|
|
BREAK
|
|
case CC_SET_TALKING
|
|
//IF CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_MODEL", CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
IF IS_PED_UNINJURED(CELEBRITY_PED)
|
|
AND PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_MODEL", "NIG1C_MODEL_1", CONV_PRIORITY_MEDIUM)//, CheckDisplaySubtitles())
|
|
//TASK_TURN_PED_TO_FACE_ENTITY(CELEBRITY_PED, PLAYER_PED_ID(), -1)
|
|
TASK_LOOK_AT_ENTITY(CELEBRITY_PED, PLAYER_PED_ID(), -1, SLF_FAST_TURN_RATE | SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
|
|
open_sequence_task(seq)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
|
|
TASK_PLAY_ANIM(NULL, MILAN_DICT, "gesture_easy_now", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE)//|AF_UPPERBODY|AF_SECONDARY)
|
|
/*TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
|
|
TASK_PLAY_ANIM(NULL, MILAN_DICT, "gesture_bye_hard", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
|
|
TASK_PLAY_ANIM(NULL, MILAN_DICT, "gesture_damn", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
|
|
TASK_PLAY_ANIM(NULL, MILAN_DICT, "gesture_no_way", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY)*/
|
|
//TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), -1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(CELEBRITY_PED, seq)
|
|
clear_sequence_task(seq)
|
|
//TASK_PLAY_ANIM(CELEBRITY_PED, MILAN_DICT, "gesture_easy_now", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING|AF_NOT_INTERRUPTABLE|AF_UPPERBODY|AF_SECONDARY)
|
|
/*open_sequence_task(seq)
|
|
TASK_LOOK_AT_ENTITY(null, PLAYER_PED_ID(), -1)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), -1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(CELEBRITY_PED, seq)
|
|
clear_sequence_task(seq)*/
|
|
bSecondPartReady = TRUE
|
|
iChatUpTimer = GET_GAME_TIMER() + 1000
|
|
celebDialogueState = CC_DOG_STARTS_WALKING
|
|
ENDIF
|
|
BREAK
|
|
CASE CC_DOG_STARTS_WALKING
|
|
TriggerSecondPartofCelebConv()
|
|
IF GET_GAME_TIMER() > iChatUpTimer
|
|
AND IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(CELEBRITY_DOG, <<-628.1631, -261.5749, 37.6045>>, 1.5, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT, -15.13)
|
|
celebDialogueState = CC_PLAYER_AND_CELEBRITY_TALKING
|
|
ENDIF
|
|
BREAK
|
|
CASE CC_PLAYER_AND_CELEBRITY_TALKING
|
|
TriggerSecondPartofCelebConv()
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
AND IS_ENTITY_IN_RANGE_COORDS(CELEBRITY_DOG, <<-628.1631, -261.5749, 37.6045>>, 2.0)
|
|
CLEAR_PRINTS()
|
|
reasonDogRan = SCARED_DOG
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_DOG_RUNS_AWAY
|
|
ENDIF
|
|
/*IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
CLEAR_PRINTS()
|
|
reasonDogRan = MODEL_SCARED_DOG
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_DOG_RUNS_AWAY
|
|
ENDIF
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), CELEBRITY_PED) > 23
|
|
ConvResumeLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
celebDialogueState = CC_PLAYER_TOO_FAR
|
|
ENDIF*/
|
|
BREAK
|
|
/*CASE CC_PLAYER_TOO_FAR
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), CELEBRITY_PED) < 15
|
|
IF bPLAYER_RETURNED_TO_CELEB = FALSE
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_1", CONV_PRIORITY_VERY_HIGH)
|
|
celebDialogueState = CC_RETURN_TO_CONVO_LINE
|
|
bPLAYER_RETURNED_TO_CELEB = TRUE
|
|
ENDIF
|
|
ELSE
|
|
celebDialogueState = CC_RETURN_TO_CONVO_LINE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE CC_RETURN_TO_CONVO_LINE
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sSpeech, "NIG1CAU", "NIG1C_MODEL", ConvResumeLabel, CONV_PRIORITY_MEDIUM)
|
|
celebDialogueState = CC_PLAYER_AND_CELEBRITY_TALKING
|
|
ENDIF
|
|
ENDIF
|
|
BREAK*/
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// If necessary, stops car recording playback for a vehicle
|
|
/// PARAMS:
|
|
/// vehicle - The vehicle we want to stop the car recording for
|
|
PROC CHECK_AND_STOP_THIS_CAR_RECORDING(MISSION_VEHICLE vehicle)
|
|
if CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(vehicle)
|
|
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehicle.index)
|
|
STOP_PLAYBACK_RECORDED_VEHICLE(vehicle.index)
|
|
TASK_VEHICLE_DRIVE_WANDER(vehicle.driver, vehicle.index, 10, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Makes a vehicle drive away using AI
|
|
/// PARAMS:
|
|
/// vehicle - The vehicle we want to drive off
|
|
PROC CLEANUP_SCRIPTED_VEHICLE_TASK(MISSION_VEHICLE vehicle)
|
|
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(vehicle)
|
|
if IS_PED_IN_VEHICLE(vehicle.driver, vehicle.index)
|
|
CLEAR_PED_TASKS(vehicle.driver)
|
|
TASK_VEHICLE_DRIVE_WANDER(vehicle.driver, vehicle.index, 10, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Stops all car recordings and makes the cars drive away under AI control
|
|
PROC CHECK_EACH_VEHICLE_FOR_CAR_RECORDING()
|
|
CHECK_AND_STOP_THIS_CAR_RECORDING(CRASH_CAR_POSH)
|
|
CHECK_AND_STOP_THIS_CAR_RECORDING(CRASH_CAR_FAMILY)
|
|
CHECK_AND_STOP_THIS_CAR_RECORDING(SKID_CAR_TAXI)
|
|
CHECK_AND_STOP_THIS_CAR_RECORDING(SKID_CAR_SENTINEL)
|
|
//CHECK_AND_STOP_THIS_CAR_RECORDING(ESCORT_CAR_FAMILY)
|
|
// This will probably go back in so just commenting it out. B* 1107526
|
|
//CHECK_AND_STOP_THIS_CAR_RECORDING(FIRE_TRUCK)
|
|
CLEANUP_SCRIPTED_VEHICLE_TASK(SKID_CAR_JEEP)
|
|
CLEANUP_SCRIPTED_VEHICLE_TASK(FIRST_CAR)
|
|
CLEANUP_SCRIPTED_VEHICLE_TASK(SECOND_CAR)
|
|
CLEANUP_SCRIPTED_VEHICLE_TASK(FINAL_CAR)
|
|
CLEANUP_SCRIPTED_VEHICLE_TASK(TAXI_CAR)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Deletes everything created by the mission
|
|
PROC DELETE_EVERYTHING()
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
|
|
SAFE_DELETE_PED(CELEBRITY_PED)
|
|
SAFE_DELETE_PED(CELEBRITY_DOG)
|
|
SAFE_DELETE_PED(shockedPed[0].index)
|
|
SAFE_DELETE_PED(shockedPed[1].index)
|
|
SAFE_DELETE_PED(shockedPed[2].index)
|
|
SAFE_DELETE_PED(shockedPed[3].index)
|
|
SAFE_DELETE_PED(shockedPed[4].index)
|
|
SAFE_DELETE_PED(TAXI_PASSENGER_PED)
|
|
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(CRASH_CAR_FAMILY)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(CRASH_CAR_POSH)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_TAXI)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_SENTINEL)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(TAXI_CAR)
|
|
//DELETE_MISSION_VEHICLE_AND_DRIVER(ESCORT_CAR_FAMILY)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(FIRST_CAR)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(SECOND_CAR)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(FINAL_CAR)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_JEEP)
|
|
// This will probably go back in so just commenting it out. B* 1107526
|
|
//DELETE_MISSION_VEHICLE_AND_DRIVER(FIRE_TRUCK)
|
|
|
|
SAFE_DELETE_VEHICLE(STATIONARY_FIRE_TRUCK)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks for the player threatening the model
|
|
PROC CHECK_IF_PLAYER_THREATENED_MILAN()
|
|
IF IS_PED_UNINJURED(CELEBRITY_PED)
|
|
AND IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
|
|
IF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), CELEBRITY_PED)
|
|
//SET_PED_CAN_BE_TARGETTED(CELEBRITY_PED, FALSE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED, relGroupPushed)
|
|
bPlayerThreatenedModel = TRUE
|
|
ELSE
|
|
//IF GET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED) <> relGroupFriendly
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(CELEBRITY_PED, PLAYER_PED_ID())
|
|
IF IS_PED_USING_ANY_SCENARIO(CELEBRITY_PED)
|
|
SET_PED_PANIC_EXIT_SCENARIO(CELEBRITY_PED, GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
ENDIF
|
|
CLEAR_PED_TASKS(CELEBRITY_PED)
|
|
TASK_SMART_FLEE_PED(CELEBRITY_PED, PLAYER_PED_ID(), 80, -1)
|
|
ENDIF
|
|
//SET_PED_CAN_BE_TARGETTED(CELEBRITY_PED, TRUE)
|
|
//SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED, relGroupFriendly)
|
|
//ENDIF
|
|
ENDIF
|
|
IF NOT IS_PED_FLEEING(CELEBRITY_PED)
|
|
IF IS_PLAYER_VISIBLY_TARGETTING_PED(CELEBRITY_PED) AND NOT HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(CELEBRITY_PED, PLAYER_PED_ID()) AND NOT IS_PLAYER_SHOOTING_NEAR_PED(CELEBRITY_PED)
|
|
IF IS_PED_USING_ANY_SCENARIO(CELEBRITY_PED)
|
|
SET_PED_PANIC_EXIT_SCENARIO(CELEBRITY_PED, GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
ENDIF
|
|
CLEAR_PED_TASKS(CELEBRITY_PED)
|
|
TASK_LOOK_AT_ENTITY(CELEBRITY_PED, PLAYER_PED_ID(), -1)
|
|
TASK_SMART_FLEE_PED(CELEBRITY_PED, PLAYER_PED_ID(), 80, -1)
|
|
bPlayerThreatenedModel = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
IF bPlayerThreatenedModel = TRUE AND GET_GAME_TIMER() > iCelebScaredTimer AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), CELEBRITY_PED, 10)
|
|
//IF bCelebPleaded = FALSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
STOP_SCRIPTED_CONVERSATION(FALSE)
|
|
ENDIF
|
|
STRING sConv
|
|
INT iConvID = GET_RANDOM_INT_IN_RANGE(0, 5)
|
|
SWITCH iConvID
|
|
CASE 0 sConv = "NIG1C_GUN" BREAK
|
|
CASE 1 sConv = "NIG1C_BUMP" BREAK
|
|
CASE 2 sConv = "NIG1C_HIT" BREAK
|
|
CASE 3 sConv = "NIG1C_SHOCK" BREAK
|
|
DEFAULT sConv = "NIG1C_RUN" BREAK
|
|
ENDSWITCH
|
|
IF CREATE_CONVERSATION(sSpeech, "NIG1CAU", sConv,CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
iCelebScaredTimer = GET_GAME_TIMER() + 5000
|
|
bCelebPleaded = TRUE
|
|
ENDIF
|
|
/*IF NOT IS_THIS_PRINT_BEING_DISPLAYED("N1C_WRN_DOG") // Catch up with ~b~Mr. Muffy Cakes.
|
|
AND NOT IS_THIS_PRINT_BEING_DISPLAYED("N1C_CATCH") // Catch ~b~Mr. Muffy Cakes.
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_GUN", "NIG1C_GUN_1",CONV_PRIORITY_MEDIUM, CheckDisplaySubtitles())
|
|
bCelebPleaded = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_GUN", "NIG1C_GUN_1",CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
bCelebPleaded = TRUE
|
|
ENDIF
|
|
ENDIF*/
|
|
//ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CONTROL_KERRY_SHOPPING()
|
|
IF IS_PED_UNINJURED(CELEBRITY_PED)
|
|
IF GET_GAME_TIMER() > iKerryShoppingTimer AND IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), vKerrySpeaksPos1, vKerrySpeaksPos2, fKerrySpeaksWidth)
|
|
/*IF CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_SHOP", CONV_PRIORITY_HIGH, CheckDisplaySubtitles())
|
|
iKerryShoppingTimer = GET_GAME_TIMER() + 3000
|
|
ENDIF*/
|
|
BOOL bConvDone = FALSE
|
|
IF IS_MESSAGE_BEING_DISPLAYED()
|
|
bConvDone = CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_SHOP", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
|
|
ELSE
|
|
bConvDone = CREATE_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_SHOP", CONV_PRIORITY_HIGH)
|
|
ENDIF
|
|
IF bConvDone
|
|
iKerryShoppingTimer = GET_GAME_TIMER() + 7000
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// DEBUG
|
|
// ===========================================================================================================
|
|
|
|
/// PURPOSE:
|
|
/// Jumps to a particular stage in the mission
|
|
/// PARAMS:
|
|
/// nextState - The stage to jump to
|
|
PROC JUMP_TO_STAGE(debugSkipToMissionStage nextState)
|
|
|
|
RC_START_Z_SKIP()
|
|
|
|
CHECK_FAIL_POSSIBILITIES()
|
|
CLEAR_PRINTS()
|
|
|
|
if IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(CELEBRITY_DOG)
|
|
ENDIF
|
|
if IS_PED_UNINJURED(CELEBRITY_PED)
|
|
CLEAR_PED_TASKS(CELEBRITY_PED)
|
|
ENDIF
|
|
|
|
IF IS_SCRIPTED_CONVERSATION_ONGOING()
|
|
STOP_SCRIPTED_CONVERSATION(FALSE)
|
|
ENDIF
|
|
|
|
bCelebPleaded = FALSE
|
|
bPlayerThreatenedModel = FALSE
|
|
|
|
DISABLE_CELLPHONE(FALSE)
|
|
FINISH_CUTSCENE(FALSE, TRUE)
|
|
|
|
IF DOES_BLIP_EXIST(GOTO_BLIP)
|
|
REMOVE_BLIP(GOTO_BLIP)
|
|
ENDIF
|
|
|
|
SAFE_DELETE_PED(shockedPed[0].index)
|
|
SAFE_DELETE_PED(shockedPed[1].index)
|
|
SAFE_DELETE_PED(shockedPed[2].index)
|
|
SAFE_DELETE_PED(shockedPed[3].index)
|
|
SAFE_DELETE_PED(shockedPed[4].index)
|
|
SAFE_DELETE_PED(TAXI_PASSENGER_PED)
|
|
SAFE_DELETE_PED(CELEBRITY_PED)
|
|
SAFE_DELETE_PED(CELEBRITY_DOG)
|
|
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(CRASH_CAR_FAMILY)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(CRASH_CAR_POSH)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_TAXI)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_SENTINEL)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(TAXI_CAR)
|
|
//DELETE_MISSION_VEHICLE_AND_DRIVER(ESCORT_CAR_FAMILY)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(FIRST_CAR)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(SECOND_CAR)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(FINAL_CAR)
|
|
DELETE_MISSION_VEHICLE_AND_DRIVER(SKID_CAR_JEEP)
|
|
// This will probably go back in so just commenting it out. B* 1107526
|
|
//DELETE_MISSION_VEHICLE_AND_DRIVER(FIRE_TRUCK)
|
|
|
|
SAFE_DELETE_VEHICLE(STATIONARY_FIRE_TRUCK)
|
|
|
|
CLEAR_AREA_OF_VEHICLES(<<-669.084290,-209.142578,36.272766>>, 25.25)
|
|
CLEAR_AREA_OF_VEHICLES(vFirestationClearLocation, 50)
|
|
CLEAR_AREA_OF_PEDS(<<-670.171875,-208.086105,36.258213>>, 7.250000)
|
|
stageStage = SS_SETUP
|
|
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 2, PLAYER_PED_ID(), "TREVOR")
|
|
|
|
SWITCH nextState
|
|
CASE DEBUG_TO_START
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-604.82, -350.10, 34.01>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), -7.52)
|
|
|
|
LOAD_INITIAL_ASSETS(TRUE)
|
|
CREATE_MODEL_AND_DOG_AT_SHOPS()
|
|
|
|
missionStage = MS_GO_TO_SHOPS
|
|
BREAK
|
|
CASE DEBUG_TO_CHECKPOINT
|
|
|
|
LOAD_OTHER_ASSETS()
|
|
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-604.82, -350.10, 34.01>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), -7.52)
|
|
|
|
LOAD_INITIAL_ASSETS(TRUE)
|
|
CREATE_MODEL_AND_DOG_AT_SHOPS()
|
|
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 3, CELEBRITY_PED, "KERRY")
|
|
missionStage = MS_GO_TO_SHOPS
|
|
BREAK
|
|
CASE DEBUG_TO_STORES
|
|
|
|
LOAD_OTHER_ASSETS()
|
|
WAIT_TILL_ASSETS_ARE_LOADED()
|
|
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), << -605.2227, -291.6463, 35.7791 >>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 38.21)
|
|
ENDIF
|
|
|
|
LOAD_INITIAL_ASSETS(TRUE)
|
|
CREATE_MODEL_AND_DOG_AT_SHOPS()
|
|
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 3, CELEBRITY_PED, "KERRY")
|
|
missionStage = MS_STAGE_APPROACH_CELEB
|
|
BREAK
|
|
CASE DEBUG_TO_ROAD_CHASE
|
|
|
|
LOAD_OTHER_ASSETS()
|
|
WAIT_TILL_ASSETS_ARE_LOADED()
|
|
|
|
GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE)
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-630.43, -255.38, 37.5>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 27.58)
|
|
|
|
CELEBRITY_PED = CREATE_PED(PEDTYPE_CIVFEMALE, femaleHipsterModel, vPos_Celeb, 27.58)
|
|
SET_ENTITY_COORDS_GROUNDED(CELEBRITY_PED, vPos_Celeb)
|
|
SET_PED_COMPONENT_VARIATION(CELEBRITY_PED, PED_COMP_HEAD, 1, 1, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(CELEBRITY_PED, PED_COMP_HAIR, 1, 2, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(CELEBRITY_PED, PED_COMP_TORSO, 0, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(CELEBRITY_PED, PED_COMP_LEG, 0, 0, 0) //(lowr)
|
|
|
|
CELEBRITY_DOG = CREATE_PED(PEDTYPE_MISSION, dogModel, <<-633.89, -250.10, 37.38>>, 50)
|
|
SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, PED_COMP_TORSO, 0, 3, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, PED_COMP_LEG, 0, 1, 0) //(lowr)
|
|
|
|
/*IF IS_PED_UNINJURED(CELEBRITY_PED)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED, relGroupFriendly)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_DOG, relGroupFriendly)
|
|
ENDIF*/
|
|
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 3, CELEBRITY_PED, "KERRY")
|
|
|
|
TURN_ROADS_ON(FALSE)
|
|
|
|
missionStage = MS_DOG_RUNS_AWAY
|
|
BREAK
|
|
CASE DEBUG_TO_END_CUTSCENE
|
|
|
|
REQUEST_WAYPOINT_RECORDING(dogRoute)
|
|
|
|
REQUEST_MODEL(dogModel)
|
|
|
|
WHILE NOT HAS_MODEL_LOADED(dogModel)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
CELEBRITY_DOG = CREATE_PED(PEDTYPE_MISSION, dogModel, <<-636.42, -95.84, 37.48>>, -95.46)
|
|
SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, PED_COMP_TORSO, 0, 3, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, PED_COMP_LEG, 0, 1, 0) //(lowr)
|
|
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-636.21, -96.51, 37.2>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), -5.46)
|
|
STOP_SCRIPTED_CONVERSATION(FALSE)
|
|
|
|
/*IF IS_PED_UNINJURED(CELEBRITY_PED)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED, relGroupFriendly)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_DOG, relGroupFriendly)
|
|
ENDIF*/
|
|
|
|
missionStage = MS_GRAB_DOG_CUTSCENE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(dogModel)
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
VEHICLE_INDEX viTemp
|
|
CREATE_VEHICLE_FOR_REPLAY(viTemp, << -597.52, -307.37, 34.50 >>, 120.04, FALSE, FALSE, FALSE, TRUE, TRUE)
|
|
INSTANTLY_FILL_PED_POPULATION()
|
|
END_REPLAY_SETUP()
|
|
ELSE
|
|
WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
INSTANTLY_FILL_PED_POPULATION()
|
|
ENDIF
|
|
RC_END_Z_SKIP()
|
|
ENDPROC
|
|
|
|
|
|
// ===========================================================================================================
|
|
// STAGE INIT AND CLEAN UP FUNCTIONS
|
|
// ===========================================================================================================
|
|
|
|
/// PURPOSE:
|
|
/// Initialises and loads everything needed at the start of the mission
|
|
PROC MISSION_INIT()
|
|
|
|
LOAD_INITIAL_ASSETS()
|
|
IF ARE_INITIAL_ASSETS_LOADED()
|
|
#IF IS_DEBUG_BUILD
|
|
s_skip_menu[0].sTxtLabel = "INTRO PHONE CALL"
|
|
s_skip_menu[1].sTxtLabel = "REPLAY CHECKPOINT (AFTER PHONECALL)"
|
|
s_skip_menu[2].sTxtLabel = "APPROACH KERRY"
|
|
s_skip_menu[3].sTxtLabel = "CHASE DEXIE ON ROAD"
|
|
s_skip_menu[4].sTxtLabel = "OUTRO CUTSCENE"
|
|
#ENDIF
|
|
|
|
SETUP_SHOCKABLE_PEDS()
|
|
SETUP_MISSION_VEHICLES()
|
|
|
|
IF IS_PHONE_ONSCREEN()
|
|
HANG_UP_AND_PUT_AWAY_PHONE()
|
|
ENDIF
|
|
|
|
ADD_CONTACT_TO_PHONEBOOK(CHAR_NIGEL, TREVOR_BOOK, FALSE)
|
|
|
|
/*IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
relGroupFriendly = GET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID())
|
|
ENDIF*/
|
|
|
|
ADD_RELATIONSHIP_GROUP("PUSHED", relGroupPushed)
|
|
ADD_RELATIONSHIP_GROUP("DRIVERS", relGroupDrivers)
|
|
|
|
CLEAR_AREA_OF_VEHICLES(<<-633.449280,-248.269058,35.874512>> , 50, FALSE)
|
|
CLEAR_AREA_OF_VEHICLES(vFirestationClearLocation, 50)
|
|
|
|
SET_START_CHECKPOINT_AS_FINAL()
|
|
|
|
LOAD_OTHER_ASSETS()
|
|
//CREATE_MODEL_AND_DOG_AT_SHOPS()
|
|
CELEBRITY_PED = sRCLauncherDataLocal.pedID[0]
|
|
IF IS_PED_UNINJURED(CELEBRITY_PED)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(CELEBRITY_PED, TRUE)
|
|
ENDIF
|
|
CELEBRITY_DOG = sRCLauncherDataLocal.pedID[1]
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(CELEBRITY_DOG, TRUE)
|
|
ENDIF
|
|
//SET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_DOG, relGroupFriendly)
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 2, PLAYER_PED_ID(), "TREVOR")
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 3, CELEBRITY_PED, "KERRY")
|
|
|
|
iKerryShoppingTimer = GET_GAME_TIMER() + 3000
|
|
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(FIRETRUK, TRUE)
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_GO_TO_SHOPS
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets up everything needed to start the scripted cutscene
|
|
PROC GO_TO_CUTSCENE()
|
|
SET_WIDESCREEN_BORDERS(TRUE, 0)
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// MISSION STAGES
|
|
// ===========================================================================================================
|
|
|
|
/// PURPOSE:
|
|
/// The player goes to the shops to find the model and her dog
|
|
PROC STAGE_GO_TO_SHOPS()
|
|
CONTROL_KERRY_SHOPPING()
|
|
SWITCH stageStage
|
|
CASE SS_SETUP
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Setup STAGE_GO_TO_SHOPS")
|
|
//GOTO_BLIP = ADD_BLIP_FOR_COORD(vPos_GoToShops)
|
|
GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE)
|
|
PRINT_NOW("N1C_INIT", DEFAULT_GOD_TEXT_TIME, 1)
|
|
TRIGGER_MUSIC_EVENT("NIGEL1C_FORA")
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vShoppingAreaA, vShoppingAreaB, fShoppingArea)
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_STAGE_APPROACH_CELEB
|
|
ELSE
|
|
//PRINT("N1C_INIT", DEFAULT_GOD_TEXT_TIME, 1) // Go to the ~y~stores.~s~
|
|
stageStage = SS_STAGE
|
|
ENDIF
|
|
BREAK
|
|
CASE SS_STAGE
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vShoppingAreaA, vShoppingAreaB, fShoppingArea)
|
|
//OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vPos_GoToShops, <<1,1,LOCATE_SIZE_HEIGHT>>, TRUE)
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_GO_TO_SHOPS")
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_STAGE_APPROACH_CELEB
|
|
ENDIF
|
|
|
|
IF IS_PED_FLEEING(CELEBRITY_PED)
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
STOP_SCRIPTED_CONVERSATION(FALSE)
|
|
ENDIF
|
|
CLEAR_PRINTS()
|
|
/*REMOVE_BLIP(GOTO_BLIP)
|
|
GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE)*/
|
|
PRINT_NOW("N1C_CATCH", DEFAULT_GOD_TEXT_TIME, 1) // Catch ~b~Mr. Muffy Cakes.
|
|
TRIGGER_MUSIC_EVENT("NIGEL1C_START")
|
|
reasonDogRan = SCARED_MODEL
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_GO_TO_SHOPS")
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_DOG_RUNS_AWAY
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// The player approaches the model
|
|
PROC STAGE_APPROACH_CELEBRITY()
|
|
CONTROL_KERRY_SHOPPING()
|
|
SWITCH stageStage
|
|
CASE SS_SETUP
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), CELEBRITY_PED, -1)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Setup STAGE_APPROACH_CELEBRITY")
|
|
|
|
/*IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vPos_GoToShops, <<1,1,LOCATE_SIZE_HEIGHT>>, TRUE)
|
|
// need this here to avoid the locate chevron flashing off for a frame
|
|
ENDIF*/
|
|
|
|
IF NOT DOES_BLIP_EXIST(GOTO_BLIP)
|
|
/*PRINT("N1C_INIT", DEFAULT_GOD_TEXT_TIME, 1) // Go to the ~y~stores.~s~
|
|
GOTO_BLIP = ADD_BLIP_FOR_COORD(vPos_GoToShops)*/
|
|
REPLAY_RECORD_BACK_FOR_TIME(2.0, 10.0, REPLAY_IMPORTANCE_LOW)
|
|
GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE)
|
|
PRINT_NOW("N1C_INIT", DEFAULT_GOD_TEXT_TIME, 1)
|
|
TRIGGER_MUSIC_EVENT("NIGEL1C_FORA")
|
|
ENDIF
|
|
|
|
stageStage = SS_STAGE
|
|
BREAK
|
|
CASE SS_STAGE
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), vChatUpAreaPos1, vChatUpAreaPos2, fChatUpAreaWidth)
|
|
//OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vPos_GoToShops, <<1,1,LOCATE_SIZE_HEIGHT>>, TRUE)
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_APPROACH_CELEBRITY")
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_STAGE_CHAT_UP_CELEB
|
|
ENDIF
|
|
|
|
IF IS_PED_FLEEING(CELEBRITY_PED)
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
STOP_SCRIPTED_CONVERSATION(FALSE)
|
|
ENDIF
|
|
reasonDogRan = SCARED_MODEL
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_APPROACH_CELEBRITY")
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_DOG_RUNS_AWAY
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// The player attempts to chat up the model
|
|
PROC STAGE_CHAT_UP_CELEB()
|
|
/*IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vPos_GoToShops, <<1,1,LOCATE_SIZE_HEIGHT>>, TRUE)
|
|
// need this here to avoid the locate chevron flashing off for a frame
|
|
ENDIF*/
|
|
|
|
SWITCH stageStage
|
|
CASE SS_SETUP
|
|
IF CURRENT_PLAYER_WEAPON() <> WEAPONTYPE_UNARMED
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED)
|
|
celebDialogueState = CC_PUT_GUN_AWAY
|
|
ELSE
|
|
celebDialogueState = CC_SET_WHISTLE
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Setup STAGE_CHAT_UP_CELEB")
|
|
stageStage = SS_STAGE
|
|
BREAK
|
|
CASE SS_STAGE
|
|
|
|
UPDATE_CHAT_UP_SEQUENCE()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER)
|
|
|
|
IF bCelebPleaded = TRUE
|
|
reasonDogRan = SCARED_MODEL
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_DOG_RUNS_AWAY
|
|
ENDIF
|
|
|
|
IF PLAYER_SCARED_DOG()
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
STOP_SCRIPTED_CONVERSATION(TRUE)
|
|
ENDIF
|
|
reasonDogRan = SCARED_DOG
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_CHAT_UP_CELEB")
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_DOG_RUNS_AWAY
|
|
ENDIF
|
|
|
|
IF GET_PED_RELATIONSHIP_GROUP_HASH(CELEBRITY_PED) = relGroupPushed
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
STOP_SCRIPTED_CONVERSATION(FALSE)
|
|
ENDIF
|
|
reasonDogRan = PUSHED_MODEL
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_CHAT_UP_CELEB")
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_DOG_RUNS_AWAY
|
|
ENDIF
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// The dog runs away and the player starts chasing it
|
|
PROC STAGE_DOG_RUNS_AWAY()
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.5)
|
|
LOAD_OTHER_ASSETS()
|
|
SWITCH stageStage
|
|
CASE SS_SETUP
|
|
/*IF DOES_BLIP_EXIST(GOTO_BLIP)
|
|
REMOVE_BLIP(GOTO_BLIP)
|
|
ENDIF
|
|
GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE)
|
|
CLEAR_PRINTS()
|
|
PRINT("N1C_CATCH", DEFAULT_GOD_TEXT_TIME, 1) // Catch ~b~Mr. Muffy Cakes.
|
|
*/
|
|
IF NOT DOES_BLIP_EXIST(GOTO_BLIP)
|
|
GOTO_BLIP = CREATE_PED_BLIP(CELEBRITY_DOG, TRUE, TRUE)
|
|
ENDIF
|
|
PRINT_NOW("N1C_CATCH", DEFAULT_GOD_TEXT_TIME, 1)
|
|
TRIGGER_MUSIC_EVENT("NIGEL1C_START")
|
|
STOP_GAMEPLAY_HINT()
|
|
|
|
TURN_ROADS_ON(FALSE)
|
|
|
|
WAYPOINT_RECORDING_GET_NUM_POINTS(dogRoute, iNUM_WAYPOINTS)
|
|
WAYPOINT_RECORDING_GET_COORD(dogRoute, iNUM_WAYPOINTS - 1, vPOS_FINAL_WAYPOINT)
|
|
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
CLEAR_PED_TASKS(CELEBRITY_DOG)
|
|
open_sequence_task(seq)
|
|
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(null, TRUE)
|
|
TASK_FOLLOW_WAYPOINT_RECORDING(NULL, dogRoute, 0, EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_DO_NOT_SLOW_FOR_CORNERS | EWAYPOINT_USE_TIGHTER_TURN_SETTINGS | EWAYPOINT_DO_NOT_RESPOND_TO_COLLISION_EVENTS)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(CELEBRITY_DOG, seq)
|
|
clear_sequence_task(seq)
|
|
ENDIF
|
|
|
|
if reasonDogRan <> SCARED_MODEL
|
|
AND IS_PED_UNINJURED(CELEBRITY_PED)
|
|
AND IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
CLEAR_PED_TASKS(CELEBRITY_PED)
|
|
open_sequence_task(seq)
|
|
IF reasonDogRan = MODEL_SCARED_DOG
|
|
// waiting on an animation for this ped, the gestures dictionary was removed so currently she doesn't have an anim here
|
|
//TASK_PLAY_ANIM(NULL, "gestures@female", "get_lost", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, 2700, AF_EXIT_AFTER_INTERRUPTED)
|
|
TASK_LOOK_AT_ENTITY(null, CELEBRITY_DOG, -1)
|
|
TASK_PAUSE(NULL, 500)
|
|
ELSE
|
|
TASK_LOOK_AT_ENTITY(null, CELEBRITY_DOG, -1)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, CELEBRITY_DOG, 1500)
|
|
ENDIF
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(null, vModelDest, 2.2)
|
|
TASK_CLEAR_LOOK_AT(NULL)
|
|
TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "IDLE_D", REALLY_SLOW_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_EXIT_AFTER_INTERRUPTED)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID(), -1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(CELEBRITY_PED, seq)
|
|
clear_sequence_task(seq)
|
|
ENDIF
|
|
bDoStopRunningConv = TRUE
|
|
iWaitLineTimer = 0
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(3.0, 10.0, REPLAY_IMPORTANCE_LOW)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Setup STAGE_DOG_RUNS_AWAY")
|
|
stageStage = SS_STAGE
|
|
BREAK
|
|
CASE SS_STAGE
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
OR bCelebPleaded = TRUE
|
|
BOOL bConvDone
|
|
bConvDone = FALSE
|
|
IF IS_PED_UNINJURED(CELEBRITY_PED)
|
|
AND IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
AND IS_ENTITY_IN_RANGE_ENTITY(CELEBRITY_PED, PLAYER_PED_ID(), 35.0)
|
|
/*SWITCH reasonDogRan
|
|
CASE SCARED_DOG
|
|
bConvDone = CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_4", "NIG1C_CHASE", "NIG1C_CHASE_6", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
BREAK
|
|
CASE SCARED_MODEL
|
|
bCelebPleaded = TRUE
|
|
BREAK
|
|
CASE MODEL_SCARED_DOG
|
|
bConvDone = CREATE_MULTIPART_CONVERSATION_WITH_3_LINES(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_2", "NIG1C_CHASE", "NIG1C_CHASE_3", "NIG1C_CHASE", "NIG1C_CHASE_6", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
BREAK
|
|
CASE PUSHED_MODEL
|
|
bConvDone = CREATE_MULTIPART_CONVERSATION_WITH_3_LINES(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_7", "NIG1C_CHASE", "NIG1C_CHASE_3", "NIG1C_CHASE", "NIG1C_CHASE_6", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
BREAK
|
|
ENDSWITCH*/
|
|
bConvDone = PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_CHASE", "NIG1C_CHASE_1", CONV_PRIORITY_VERY_HIGH, CheckDisplaySubtitles())
|
|
ELSE
|
|
// player is too far away to hear Kerry so don't bother with the conversation
|
|
bConvDone = TRUE
|
|
ENDIF
|
|
IF bConvDone
|
|
stageStage = SS_STAGE_2
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF PLAYER_CAUGHT_DOG()
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_DOG_RUNS_AWAY")
|
|
FINISHED_CHASE_EARLY()
|
|
ENDIF
|
|
|
|
UPDATE_CHASE_BLIP(GOTO_BLIP, CELEBRITY_DOG, fChaseFailDistance, fBlipFlashDistance)
|
|
|
|
SET_PED_MIN_MOVE_BLEND_RATIO(CELEBRITY_DOG, 2.0)//1.5)
|
|
//SET_PED_MOVE_RATE_OVERRIDE(CELEBRITY_DOG, 1.15)
|
|
BREAK
|
|
CASE SS_STAGE_2
|
|
|
|
UPDATE_CHASE_BLIP(GOTO_BLIP, CELEBRITY_DOG, fChaseFailDistance, fBlipFlashDistance)
|
|
|
|
SET_PED_MIN_MOVE_BLEND_RATIO(CELEBRITY_DOG, 3.0)//2.5)
|
|
//SET_PED_MOVE_RATE_OVERRIDE(CELEBRITY_DOG, 1.15)
|
|
|
|
MODEL_SPEAKS_WHEN_STOPPING()
|
|
|
|
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(CELEBRITY_DOG)
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_DOG_RUNS_AWAY")
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_DOG_RUNS_ON_ROAD
|
|
ENDIF
|
|
|
|
IF PLAYER_CAUGHT_DOG()
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_DOG_RUNS_AWAY")
|
|
FINISHED_CHASE_EARLY()
|
|
ENDIF
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// The dog runs onto the road, causing several car crashes
|
|
PROC DOG_RUNS_ON_ROAD()
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.5)
|
|
//SET_PED_MOVE_RATE_OVERRIDE(CELEBRITY_DOG, 1.15)
|
|
SWITCH stageStage
|
|
CASE SS_SETUP
|
|
|
|
LOAD_OTHER_ASSETS()
|
|
//IF ARE_ASSETS_LOADED()
|
|
|
|
bRELEASE_SENTINEL_CAR = FALSE
|
|
bRELEASE_SPORTS_CAR = FALSE
|
|
bCAR_HONKING = FALSE
|
|
|
|
bSHOP_PED_SHOUTED = FALSE
|
|
bTREVOR_RESPONDED = FALSE
|
|
bCRASH_SHOUTED = FALSE
|
|
|
|
bFinal_CHASE_LINES_READY = FALSE
|
|
bWHAT_YOU_LOOKIN_AT_LINES_READY = FALSE
|
|
|
|
CLEAR_AREA_OF_VEHICLES(<<-628.896301,-183.174133,36.762650>>, 50, TRUE)
|
|
CLEAR_AREA_OF_VEHICLES(<<-679.264893,-250.060471,35.605679>>, 21.75, TRUE)
|
|
CLEAR_AREA_OF_VEHICLES(<<-655.583008,-298.519806,34.453159>>, 39.75, TRUE)
|
|
CLEAR_AREA_OF_VEHICLES(<<-670.700378,-99.161484,36.779835>>, 60, TRUE)
|
|
CLEAR_AREA_OF_VEHICLES(<<-561.318176,-153.089767,36.634796>>, 50, TRUE)
|
|
CLEAR_AREA_OF_VEHICLES(<<-590.626282,-247.092285,34.694180>>, 35, TRUE)
|
|
CLEAR_AREA_OF_VEHICLES(vFirestationClearLocation, 50)
|
|
|
|
IF NOT CREATE_TRAFFIC_VEHICLES()
|
|
EXIT
|
|
ENDIF
|
|
|
|
crashStage = CS_WAITING
|
|
jeepStage = JS_WAITING
|
|
|
|
CREATE_SHOCKABLE_PED(0)
|
|
CREATE_SHOCKABLE_PED(1)
|
|
CREATE_SHOCKABLE_PED(2)
|
|
CREATE_SHOCKABLE_PED(4)
|
|
|
|
IF IS_PED_UNINJURED(shockedPed[0].index)
|
|
TASK_START_SCENARIO_IN_PLACE(shockedPed[0].index, "WORLD_HUMAN_WINDOW_SHOP_BROWSE", 0, TRUE)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(shockedPed[2].index)
|
|
TASK_START_SCENARIO_IN_PLACE(shockedPed[2].index, "WORLD_HUMAN_WINDOW_SHOP_BROWSE", 0, TRUE)
|
|
ENDIF
|
|
IF IS_PED_UNINJURED(shockedPed[4].index)
|
|
TASK_START_SCENARIO_IN_PLACE(shockedPed[4].index, "WORLD_HUMAN_STAND_MOBILE", 0)
|
|
ENDIF
|
|
|
|
IF IS_PED_UNINJURED(shockedPed[1].index)
|
|
TASK_START_SCENARIO_IN_PLACE(shockedPed[1].index, "WORLD_HUMAN_HANG_OUT_STREET", 0, TRUE)
|
|
SET_PED_COMPONENT_VARIATION(shockedPed[1].index, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(shockedPed[1].index, INT_TO_ENUM(PED_COMPONENT,2), 0, 1, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(shockedPed[1].index, INT_TO_ENUM(PED_COMPONENT,3), 1, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(shockedPed[1].index, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
|
|
ENDIF
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(taxiModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(sentinelCarModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(familyCarModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(escortCarModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(poshCarModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(businessManModel)
|
|
//SET_MODEL_AS_NO_LONGER_NEEDED(fireManModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(taxiDriverModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(FIRETRUK)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(jeepCarModel)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(femaleHipsterModel)
|
|
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SECOND_CAR)
|
|
open_sequence_task(seq)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, SECOND_CAR.index, <<-758.84, -115.64, 36.89>>, 12, DRIVINGSTYLE_NORMAL, SECOND_CAR.carModel, DF_SteerAroundPeds | DF_StopForCars, 1,1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(SECOND_CAR.driver, seq)
|
|
clear_sequence_task(seq)
|
|
ENDIF
|
|
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FIRST_CAR)
|
|
open_sequence_task(seq)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-655.18, -202.16, 36.43>>, 18, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-643.56, -196.16, 36.58>>, 10, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-633.40, -191.10, 36.67>>, 5, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(FIRST_CAR.driver, seq)
|
|
clear_sequence_task(seq)
|
|
ENDIF
|
|
|
|
/*TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG, -1)*/
|
|
|
|
shockedPed[0].startedWalking = FALSE
|
|
shockedPed[0].beenShocked = FALSE
|
|
shockedPed[1].startedWalking = FALSE
|
|
shockedPed[1].beenShocked = FALSE
|
|
shockedPed[4].startedWalking = FALSE
|
|
shockedPed[4].beenShocked = FALSE
|
|
|
|
bWHAT_YOU_LOOKIN_AT_LINES_READY = TRUE
|
|
bFinal_CHASE_LINES_READY = TRUE
|
|
bFirstCarsWaiting = TRUE
|
|
bSeconCarRepositioned = FALSE
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(4.0, 4.0, REPLAY_IMPORTANCE_LOW)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Setup DOG_RUNS_ON_ROAD")
|
|
stageStage = SS_STAGE
|
|
//ENDIF
|
|
BREAK
|
|
CASE SS_STAGE
|
|
|
|
UPDATE_CHASE_BLIP(GOTO_BLIP, CELEBRITY_DOG, fChaseFailDistance, fBlipFlashDistance)
|
|
|
|
IF IF_CAN_PLAY_CHASE_DIALOGUE()
|
|
DEAL_WITH_RANDOM_DIALOGUE()
|
|
ENDIF
|
|
|
|
IF bFirstCarsWaiting = TRUE
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 7
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SECOND_CAR)
|
|
open_sequence_task(seq)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, SECOND_CAR.index, <<-758.84, -115.64, 36.89>>, 12, DRIVINGSTYLE_NORMAL, SECOND_CAR.carModel, DF_SteerAroundPeds | DF_StopForCars, 1,1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(SECOND_CAR.driver, seq)
|
|
clear_sequence_task(seq)
|
|
ENDIF
|
|
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(FIRST_CAR)
|
|
open_sequence_task(seq)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-655.18, -202.16, 36.43>>, 18, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-643.56, -196.16, 36.58>>, 10, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(NULL, FIRST_CAR.index, <<-633.40, -191.10, 36.67>>, 5, DRIVINGSTYLE_NORMAL, escortCarModel, DF_SteerAroundPeds | DF_StopForCars, 1,1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(FIRST_CAR.driver, seq)
|
|
clear_sequence_task(seq)
|
|
ENDIF
|
|
bFirstCarsWaiting = FALSE
|
|
ENDIF
|
|
ELSE
|
|
IF bSeconCarRepositioned = FALSE
|
|
IF CHECK_IF_VEHICLE_AND_DRIVER_ARE_ALIVE(SECOND_CAR)
|
|
IF GET_THE_CLOSEST_WAYPOINT_TO_PLAYER() > 25
|
|
CLEAR_PED_TASKS(SECOND_CAR.driver)
|
|
SET_ENTITY_COORDS(SECOND_CAR.index, <<-678.85, -95.08, 36.86>>)
|
|
SET_ENTITY_HEADING(SECOND_CAR.index, 208.7)
|
|
TASK_VEHICLE_DRIVE_TO_COORD(SECOND_CAR.driver, SECOND_CAR.index, <<-567.85, -288.80, 34.08>>, 12, DRIVINGSTYLE_NORMAL, taxiModel, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS, 5,5)
|
|
bSeconCarRepositioned = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF jeepStage = JS_WAITING
|
|
IF GET_THE_CLOSEST_WAYPOINT_ON_DOG_ROAD_ROUTE() > 12
|
|
jeepStage = JS_SET_TO_DRIVE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
MODEL_SPEAKS_WHEN_STOPPING()
|
|
|
|
UPDATE_THE_SHOCKABLE_PED(0)
|
|
UPDATE_THE_SHOCKABLE_PED(1)
|
|
UPDATE_THE_FALL_PED()
|
|
|
|
UPDATE_THE_JEEP()
|
|
UPDATE_THE_CRASH()
|
|
UPDATE_THE_SKIDDING_TAXI()
|
|
// This will probably go back in so just commenting it out. B* 1107526
|
|
//UPDATE_THE_FIRE_TRUCK()
|
|
UPDATE_THE_OTHER_CAR()
|
|
|
|
//UPDATE_DOG_RUN_SPEED()
|
|
|
|
IF IS_ENTITY_AT_COORD(CELEBRITY_DOG, vPOS_FINAL_WAYPOINT, <<3,3,2>>)
|
|
CPRINTLN(DEBUG_MISSION, "Finish DOG_RUNS_ON_ROAD")
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_DOG_WAITING_AT_FIRESTATION
|
|
ENDIF
|
|
|
|
IF PLAYER_CAUGHT_DOG()
|
|
CPRINTLN(DEBUG_MISSION, "Finish DOG_RUNS_ON_ROAD")
|
|
FINISHED_CHASE_EARLY()
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// The dog waits for the player in the firestation
|
|
PROC STAGE_DOG_WAITING_AT_FIRESTATION()
|
|
SWITCH stageStage
|
|
CASE SS_SETUP
|
|
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
CLEAR_PED_TASKS(CELEBRITY_DOG)
|
|
open_sequence_task(seq)
|
|
//TASK_LOOK_AT_ENTITY(NULL, PLAYER_PED_ID(), -1)
|
|
/*TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
|
|
TASK_PAUSE(NULL, 2000)
|
|
TASK_WANDER_IN_AREA(NULL, <<-636.45,-98.21,37.04>>, 3.75)*/
|
|
TASK_TURN_PED_TO_FACE_COORD(NULL, <<-641.7725, -104.2859, 37.0147>>)
|
|
TASK_PLAY_ANIM(NULL, DOG_DICT, "chop_growl", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(CELEBRITY_DOG, seq)
|
|
clear_sequence_task(seq)
|
|
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(CELEBRITY_DOG, TRUE)
|
|
ENDIF
|
|
|
|
TURN_ROADS_ON(TRUE)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Setup STAGE_DOG_WAITING_AT_FIRESTATION")
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(4.0, 4.0, REPLAY_IMPORTANCE_LOW)
|
|
|
|
// want the dog to growl immediately the first time
|
|
//iGrowlTimer = GET_GAME_TIMER()
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 6, CELEBRITY_DOG, "MrMuffyCakes")
|
|
stageStage = SS_STAGE
|
|
BREAK
|
|
CASE SS_STAGE
|
|
|
|
UPDATE_CHASE_BLIP(GOTO_BLIP, CELEBRITY_DOG, fChaseFailDistance, fBlipFlashDistance)
|
|
|
|
UPDATE_THE_JEEP()
|
|
UPDATE_THE_CRASH()
|
|
UPDATE_THE_SKIDDING_TAXI()
|
|
// This will probably go back in so just commenting it out. B* 1107526
|
|
//UPDATE_THE_FIRE_TRUCK()
|
|
UPDATE_THE_OTHER_CAR()
|
|
|
|
/*IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), CELEBRITY_DOG) < 12
|
|
IF GET_GAME_TIMER() > iGrowlTimer
|
|
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_DOG", "NIG1C_DOG_6",CONV_PRIORITY_MEDIUM)
|
|
iGrowlTimer = GET_GAME_TIMER() + 8000
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF*/
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), CELEBRITY_DOG)
|
|
SET_PED_TO_RAGDOLL(CELEBRITY_DOG, 500, 1000, TASK_RELAX, FALSE, FALSE)
|
|
SET_ENTITY_HEALTH(CELEBRITY_DOG, 0)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IF_CAN_PLAY_CHASE_DIALOGUE()
|
|
DEAL_WITH_RANDOM_DIALOGUE()
|
|
ENDIF
|
|
|
|
FLOAT fDistMod
|
|
IF GET_PED_DESIRED_MOVE_BLEND_RATIO(PLAYER_PED_ID()) = PEDMOVE_WALK
|
|
fDistMod = 1.0
|
|
ELSE
|
|
fDistMod = 2.0
|
|
ENDIF
|
|
IF PLAYER_CAUGHT_DOG(fDistMod)
|
|
AND NOT IS_PED_FALLING(PLAYER_PED_ID())
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_DOG_WAITING_AT_FIRESTATION")
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_GRAB_DOG_CUTSCENE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Plays the scripted cutscene in which the player takes the dog's collar
|
|
PROC STAGE_GRAB_DOG_CUTSCENE()
|
|
SWITCH stageStage
|
|
CASE SS_SETUP
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(4.0, 8.0, REPLAY_IMPORTANCE_LOW)
|
|
|
|
CHECK_EACH_VEHICLE_FOR_CAR_RECORDING()
|
|
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 2, PLAYER_PED_ID(), "TREVOR")
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), vAlleyCutscenePos1, vAlleyCutscenePos2, fAlleyCutsceneWidth)
|
|
SAFE_FADE_SCREEN_OUT_TO_BLACK()
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(vAlleyCutscenePos1, vAlleyCutscenePos2, fAlleyCutsceneWidth, vEmergencyCarRespot, fEmergencyCarRespot, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
RC_START_CUTSCENE_MODE(vEmergencyOutro)
|
|
SET_ENTITY_COORDS_GROUNDED(PLAYER_PED_ID(), vEmergencyOutro)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), fEmergencyOutro)
|
|
ELSE
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<-636.693176,-96.585403,36.547657>>, <<-628.838684,-97.430687,38.069145>>, 7.0, <<-641.35, -99.50, 37.62>>, 135.52, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
RC_START_CUTSCENE_MODE(<<-636.7341, -99.1310, 37.0476>>)
|
|
ENDIF
|
|
|
|
REQUEST_ANIM_DICT(OUTRO_DICT)
|
|
while not HAS_ANIM_DICT_LOADED(OUTRO_DICT)
|
|
WAIT(0)
|
|
endwhile
|
|
|
|
/*camCutsceneStart = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE)
|
|
SET_CAM_PARAMS(camCutsceneStart, get_cam_pos(), <<-0.6717, -0.0000, -175.6980>>, 50)
|
|
POINT_CAM_AT_ENTITY(camCutsceneStart, PLAYER_PED_ID(), <<0,0,-0.1>>)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
SET_CAM_ACTIVE(camCutsceneStart, TRUE)*/
|
|
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(CELEBRITY_DOG)
|
|
//SET_DOG_POSITION_WHEN_CAUGHT()
|
|
ENDIF
|
|
|
|
STOP_SCRIPTED_CONVERSATION(TRUE)
|
|
|
|
IF DOES_BLIP_EXIST(GOTO_BLIP)
|
|
REMOVE_BLIP(GOTO_BLIP)
|
|
ENDIF
|
|
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
/*open_sequence_task(seq)
|
|
//TASK_LOOK_AT_ENTITY(null, CELEBRITY_DOG, -1)
|
|
//TASK_PLAY_ANIM(NULL, KNEEL_ENTER_DICT, "enter", NORMAL_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_DEFAULT, 0.3)
|
|
//TASK_PLAY_ANIM(NULL, KNEEL_DICT, "base", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING)
|
|
//TASK_PLAY_ANIM(NULL, NIGEL1C_DICT, "idle_b", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING)
|
|
TASK_PAUSE(NULL, iPauseTime)
|
|
TASK_PLAY_ANIM(NULL, OUTRO_DICT, "take_collar_trevor")//, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1
|
|
TASK_PAUSE(NULL, -1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(PLAYER_PED_ID(), seq)
|
|
clear_sequence_task(seq)
|
|
|
|
open_sequence_task(seq)
|
|
TASK_PAUSE(NULL, iPauseTime)
|
|
TASK_PLAY_ANIM(NULL, OUTRO_DICT, "take_collar_dog")
|
|
TASK_PAUSE(NULL, -1)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(CELEBRITY_DOG, seq)
|
|
clear_sequence_task(seq)*/
|
|
|
|
VECTOR vStartPos
|
|
vStartPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
|
|
SET_ENTITY_COORDS_GROUNDED(PLAYER_PED_ID(), vStartPos)
|
|
/*FLOAT fStartZ
|
|
IF REPEAT_GET_GROUND_Z(vStartPos, fStartZ, 2)
|
|
vStartPos.z = fStartZ
|
|
ENDIF*/
|
|
iSyncedSceneID = CREATE_SYNCHRONIZED_SCENE(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_ROTATION(PLAYER_PED_ID()))
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iSyncedSceneID,FALSE)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iSyncedSceneID,FALSE)
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iSyncedSceneID, OUTRO_DICT, "take_collar_trevor", NORMAL_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
|
|
TASK_SYNCHRONIZED_SCENE(CELEBRITY_DOG, iSyncedSceneID, OUTRO_DICT, "take_collar_dog", NORMAL_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
camCutsceneStart = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE)
|
|
PLAY_SYNCHRONIZED_CAM_ANIM(camCutsceneStart, iSyncedSceneID, "take_collar_cam", OUTRO_DICT)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK()
|
|
|
|
//while not CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(sSpeech, "NIG1CAU", "NIG1C_COLLAR", "NIG1C_COLLAR_1", "NIG1C_COLLAR", "NIG1C_COLLAR_2", CONV_PRIORITY_MEDIUM)
|
|
WHILE NOT PLAY_SINGLE_LINE_FROM_CONVERSATION(sSpeech, "NIG1CAU", "NIG1C_COLLAR", "NIG1C_COLLAR_2", CONV_PRIORITY_MEDIUM)
|
|
STOP_SCRIPTED_CONVERSATION(TRUE)
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
SAFE_DELETE_PED(CELEBRITY_PED)
|
|
|
|
//iOutroTimer = GET_GAME_TIMER() + 2000//(iPauseTime+1000)
|
|
|
|
bPLAYED_COLLAR_SOUND = FALSE
|
|
//bRESUMED_COLLAR_CONVERSATION = FALSE
|
|
|
|
TURN_ROADS_ON(TRUE)
|
|
|
|
TRIGGER_MUSIC_EVENT("NIGEL1C_END")
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Setup STAGE_GRAB_DOG_CUTSCENE")
|
|
|
|
stageStage = SS_STAGE
|
|
BREAK
|
|
CASE SS_STAGE
|
|
|
|
//if IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), NIGEL1C_DICT, "idle_b")
|
|
//if IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), KNEEL_DICT, "base")
|
|
IF bPLAYED_COLLAR_SOUND = FALSE AND IS_SYNCHRONIZED_SCENE_RUNNING(iSyncedSceneID) AND GET_SYNCHRONIZED_SCENE_PHASE(iSyncedSceneID) >= 0.75 //GET_GAME_TIMER() > iOutroTimer
|
|
AND IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
//if NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
//CLEAR_PRINTS()
|
|
PLAY_SOUND_FROM_ENTITY(-1, "COLLAR", CELEBRITY_DOG, "NIGEL_1C_SOUNDSET")
|
|
SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, PED_COMP_TORSO, 1, 0, 0) //(uppr)
|
|
//iOutroTimer = GET_GAME_TIMER() + 1200
|
|
bPLAYED_COLLAR_SOUND = TRUE
|
|
//ENDIF
|
|
ELSE
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iSyncedSceneID) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sSpeech, "NIG1CAU", "NIG1C_COLLAR", "NIG1C_COLLAR_3", CONV_PRIORITY_MEDIUM)
|
|
//STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP()
|
|
/*RENDER_SCRIPT_CAMS(FALSE, TRUE)
|
|
IF DOES_CAM_EXIST(camCutsceneStart)
|
|
SET_CAM_ACTIVE(camCutsceneStart, FALSE)
|
|
DESTROY_CAM (camCutsceneStart)
|
|
ENDIF*/
|
|
//FINISH_CUTSCENE()
|
|
STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP()
|
|
IF DOES_CAM_EXIST(camCutsceneStart)
|
|
SET_CAM_ACTIVE(camCutsceneStart, FALSE)
|
|
DESTROY_CAM (camCutsceneStart)
|
|
ENDIF
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
RC_END_CUTSCENE_MODE()
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_GRAB_DOG_CUTSCENE")
|
|
stageStage = SS_SETUP
|
|
missionstage = MS_STAGE_PLAY_OUTRO
|
|
ENDIF
|
|
ENDIF
|
|
/*IF bRESUMED_COLLAR_CONVERSATION = FALSE
|
|
IF GET_GAME_TIMER() > iOutroTimer
|
|
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sSpeech, "NIG1CAU", "NIG1C_COLLAR", "NIG1C_COLLAR_3", CONV_PRIORITY_MEDIUM)
|
|
//iOutroTimer = GET_GAME_TIMER() + 1000
|
|
bRESUMED_COLLAR_CONVERSATION = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
//IF GET_GAME_TIMER() > iOutroTimer
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
//TASK_PLAY_ANIM(PLAYER_PED_ID(), KNEEL_EXIT_DICT, "exit", INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1)
|
|
//FINISH_CUTSCENE(FALSE, FALSE)
|
|
STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP()
|
|
IF DOES_CAM_EXIST(camCutsceneStart)
|
|
SET_CAM_ACTIVE(camCutsceneStart, FALSE)
|
|
DESTROY_CAM (camCutsceneStart)
|
|
ENDIF
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
RC_END_CUTSCENE_MODE()
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_GRAB_DOG_CUTSCENE")
|
|
stageStage = SS_SETUP
|
|
missionstage = MS_STAGE_PLAY_OUTRO
|
|
ENDIF
|
|
ENDIF*/
|
|
ENDIF
|
|
//ENDIF
|
|
|
|
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY()
|
|
stageStage = SS_STAGE_2
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE SS_STAGE_2
|
|
SAFE_FADE_SCREEN_OUT_TO_BLACK()
|
|
RC_START_CUTSCENE_MODE(<<0.0,0.0,0.0>>, FALSE, FALSE, FALSE)
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iSyncedSceneID)
|
|
SET_SYNCHRONIZED_SCENE_PHASE(iSyncedSceneID, 1.0)
|
|
ENDIF
|
|
WAIT(FLOW_FAIL_FADE_TIME+1000)
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
STOP_SCRIPTED_CONVERSATION(FALSE)
|
|
ENDIF
|
|
/*IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
TASK_PLAY_ANIM(PLAYER_PED_ID(), KNEEL_EXIT_DICT, "exit", INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1)
|
|
ENDIF*/
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
SET_PED_COMPONENT_VARIATION(CELEBRITY_DOG, INT_TO_ENUM(PED_COMPONENT,3), 1, 0, 0) //(uppr)
|
|
ENDIF
|
|
FINISH_CUTSCENE(FALSE, TRUE)
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_GRAB_DOG_CUTSCENE")
|
|
stageStage = SS_SETUP
|
|
missionstage = MS_STAGE_PLAY_OUTRO
|
|
RC_END_CUTSCENE_MODE()
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK()
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
//----------------------------
|
|
//OUTRO
|
|
//----------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Makes the dog wakl away and plays the end of mission phone call with Nigel and Mrs Thornhill
|
|
PROC STAGE_PLAY_OUTRO()
|
|
SWITCH stageStage
|
|
CASE SS_SETUP
|
|
//TASK_SMART_FLEE_PED(CELEBRITY_DOG, PLAYER_PED_ID(), 100, -1, TRUE)
|
|
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
CLEAR_PED_SECONDARY_TASK(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
CLEAR_PED_TASKS(CELEBRITY_DOG)
|
|
open_sequence_task(seq)
|
|
//TASK_PAUSE(NULL, 1000)
|
|
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(CELEBRITY_DOG, <<0,2,0>>), 2.5)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(CELEBRITY_DOG, <<0.5,1,0>>), 2.5)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -650.2209, -120.7035, 36.8320 >>, 2.5, DEFAULT_TIME_BEFORE_WARP, 1)
|
|
TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 50, -1, TRUE)
|
|
close_sequence_task(seq)
|
|
task_perform_sequence(CELEBRITY_DOG, seq)
|
|
clear_sequence_task(seq)
|
|
ENDIF
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("NIGEL_1C_SCENE")
|
|
STOP_AUDIO_SCENE("NIGEL_1C_SCENE")
|
|
ENDIF
|
|
|
|
IF IS_PED_UNINJURED(CELEBRITY_PED)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(CELEBRITY_PED, PLAYER_PED_ID()) < 30
|
|
TASK_FOLLOW_TO_OFFSET_OF_ENTITY(CELEBRITY_PED, CELEBRITY_DOG, <<0,0,0>>, 2, -1, 3)
|
|
ENDIF
|
|
ENDIF
|
|
iOutroTimer = -1 // GET_GAME_TIMER() + 3750
|
|
CPRINTLN(DEBUG_MISSION, "Setup STAGE_PLAY_OUTRO")
|
|
stageStage = SS_STAGE
|
|
BREAK
|
|
CASE SS_STAGE
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF iOutroTimer < 0
|
|
iOutroTimer = GET_GAME_TIMER() + 3000
|
|
ELIF GET_GAME_TIMER() > iOutroTimer
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
|
|
REMOVE_PED_FOR_DIALOGUE(sSpeech, 3)
|
|
REMOVE_PED_FOR_DIALOGUE(sSpeech, 4)
|
|
REMOVE_PED_FOR_DIALOGUE(sSpeech, 5)
|
|
REMOVE_PED_FOR_DIALOGUE(sSpeech, 6)
|
|
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 2, PLAYER_PED_ID(), "TREVOR")
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 3, NULL, "NIGEL")
|
|
ADD_PED_FOR_DIALOGUE(sSpeech, 4, NULL, "MRSTHORNHILL")
|
|
IF PLAYER_CALL_CHAR_CELLPHONE(sSpeech, CHAR_NIGEL, "NIG1CAU", "NIG1C_OUT", CONV_PRIORITY_VERY_HIGH)
|
|
REPLAY_RECORD_BACK_FOR_TIME(2.0, 10.0, REPLAY_IMPORTANCE_LOW)
|
|
CPRINTLN(DEBUG_MISSION, "Finish STAGE_PLAY_OUTRO")
|
|
missionStage = MS_WAIT_FOR_CALL_TO_END
|
|
ENDIF
|
|
ENDIF
|
|
/*ELSE
|
|
iOutroTimer = GET_GAME_TIMER() + 750*/
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Waits for the phone call to end, passes the mission when it has
|
|
PROC STAGE_WAIT_FOR_CALL_TO_END()
|
|
|
|
IF bOUTRO_CALL_GOING_ON = FALSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
bOUTRO_CALL_GOING_ON = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bOUTRO_CALL_GOING_ON = TRUE
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
CLEAR_PRINTS()
|
|
Script_Passed()
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Fades out when fading the mission
|
|
PROC FAIL_WAIT_FOR_FADE()
|
|
SWITCH stageStage
|
|
CASE SS_SETUP
|
|
CPRINTLN(DEBUG_MISSION, "******************* MISSION FAILED *********************")
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_ANY_CONVERSATION()
|
|
ENDIF
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
// remove blips
|
|
IF DOES_BLIP_EXIST(GOTO_BLIP)
|
|
REMOVE_BLIP(GOTO_BLIP)
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION, "CASE SS_SETUP")
|
|
|
|
TRIGGER_MUSIC_EVENT("NIGEL1C_FAIL")
|
|
|
|
IF NOT IS_PED_UNINJURED(CELEBRITY_DOG)
|
|
failReason = FAIL_KILLED_DOG
|
|
ENDIF
|
|
|
|
STRING sFailReason
|
|
|
|
SWITCH failReason
|
|
CASE FAIL_CELEB_KILLED
|
|
sFailReason = "N1C_F_EXMOD" // ~r~Kerry died.~s~
|
|
BREAK
|
|
CASE FAIL_KILLED_DOG
|
|
sFailReason = "N1C_F_EXDOG" // ~r~Dexie died.~s~
|
|
BREAK
|
|
CASE FAIL_CELEB_INJURED
|
|
sFailReason = "N1C_F_MOD" // ~r~You injured Kerry.~s~
|
|
BREAK
|
|
CASE FAIL_CELEB_SCARED
|
|
sFailReason = "N1_C_F_THREAT" // ~r~You scared Kerry.~s~
|
|
BREAK
|
|
CASE FAIL_INJURED_DOG
|
|
sFailReason = "N1C_F_DOG" // ~r~You injured Dexie.~s~
|
|
BREAK
|
|
CASE FAIL_LOST_DOG
|
|
sFailReason = "N1C_F_LOST" // ~r~You lost Dexie.~s~
|
|
BREAK
|
|
DEFAULT
|
|
// no fail text
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF failReason = FAIL_DEFAULT
|
|
Random_Character_Failed()
|
|
ELSE
|
|
Random_Character_Failed_With_Reason(sFailReason)//, TRUE, bDelayFade)
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Setup FAIL_WAIT_FOR_FADE")
|
|
stageStage = SS_STAGE
|
|
BREAK
|
|
|
|
CASE SS_STAGE
|
|
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Finish FAIL_WAIT_FOR_FADE")
|
|
DELETE_EVERYTHING()
|
|
|
|
IF IS_PHONE_ONSCREEN()
|
|
HANG_UP_AND_PUT_AWAY_PHONE()
|
|
ENDIF
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_ANY_CONVERSATION()
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
WHILE IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
CPRINTLN(DEBUG_MISSION, "WAITING FOR THE CONVO TO END BEFORE CLEANING UP")
|
|
KILL_ANY_CONVERSATION()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
#ENDIF
|
|
Script_Cleanup()
|
|
ELSE
|
|
// not finished fading out
|
|
// you may want to handle dialogue etc here.
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// DEBUG
|
|
// ===========================================================================================================
|
|
|
|
/// PURPOSE:
|
|
/// Checks for debug pass or fail and skips stages if necessary
|
|
#IF IS_DEBUG_BUILD
|
|
PROC DEBUG_Check_Debug_Keys()
|
|
|
|
IF missionStage <> MS_FAIL_WAIT_FOR_FADE
|
|
// Check for Pass
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
|
|
Script_Passed()
|
|
ENDIF
|
|
// Check for Fail
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
|
|
failReason = FAIL_DEFAULT
|
|
stageStage = SS_SETUP
|
|
missionStage = MS_FAIL_WAIT_FOR_FADE
|
|
ELIF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)) //skip current stage
|
|
SWITCH missionStage
|
|
CASE MS_GO_TO_SHOPS
|
|
JUMP_TO_STAGE(DEBUG_TO_STORES)
|
|
BREAK
|
|
CASE MS_STAGE_APPROACH_CELEB
|
|
JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE)
|
|
BREAK
|
|
CASE MS_STAGE_CHAT_UP_CELEB
|
|
JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE)
|
|
BREAK
|
|
CASE MS_DOG_RUNS_AWAY
|
|
JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE)
|
|
BREAK
|
|
CASE MS_DOG_RUNS_ON_ROAD
|
|
JUMP_TO_STAGE(DEBUG_TO_END_CUTSCENE)
|
|
BREAK
|
|
CASE MS_DOG_WAITING_AT_FIRESTATION
|
|
JUMP_TO_STAGE(DEBUG_TO_END_CUTSCENE)
|
|
BREAK
|
|
CASE MS_GRAB_DOG_CUTSCENE
|
|
CLEAR_PRINTS()
|
|
Script_Passed()
|
|
BREAK
|
|
CASE MS_STAGE_PLAY_OUTRO
|
|
CLEAR_PRINTS()
|
|
Script_Passed()
|
|
BREAK
|
|
CASE MS_WAIT_FOR_CALL_TO_END
|
|
CLEAR_PRINTS()
|
|
Script_Passed()
|
|
BREAK
|
|
ENDSWITCH
|
|
ELIF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)) //skip back
|
|
SWITCH missionStage
|
|
CASE MS_GO_TO_SHOPS
|
|
JUMP_TO_STAGE(DEBUG_TO_START)
|
|
BREAK
|
|
CASE MS_STAGE_APPROACH_CELEB
|
|
JUMP_TO_STAGE(DEBUG_TO_START)
|
|
BREAK
|
|
CASE MS_STAGE_CHAT_UP_CELEB
|
|
JUMP_TO_STAGE(DEBUG_TO_START)
|
|
BREAK
|
|
CASE MS_DOG_RUNS_AWAY
|
|
JUMP_TO_STAGE(DEBUG_TO_STORES)
|
|
BREAK
|
|
CASE MS_DOG_RUNS_ON_ROAD
|
|
JUMP_TO_STAGE(DEBUG_TO_STORES)
|
|
BREAK
|
|
CASE MS_DOG_WAITING_AT_FIRESTATION
|
|
JUMP_TO_STAGE(DEBUG_TO_STORES)
|
|
BREAK
|
|
CASE MS_GRAB_DOG_CUTSCENE
|
|
JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE)
|
|
BREAK
|
|
CASE MS_STAGE_PLAY_OUTRO
|
|
JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE)
|
|
BREAK
|
|
CASE MS_WAIT_FOR_CALL_TO_END
|
|
JUMP_TO_STAGE(DEBUG_TO_ROAD_CHASE)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
IF LAUNCH_MISSION_STAGE_MENU(s_skip_menu, i_debug_jump_stage)
|
|
INT e_stage = i_debug_jump_stage
|
|
JUMP_TO_STAGE(INT_TO_ENUM(debugSkipToMissionStage, e_stage))
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
// ===========================================================================================================
|
|
// Script Loop
|
|
// ===========================================================================================================
|
|
|
|
SCRIPT(g_structRCScriptArgs sRCLauncherDataIn)
|
|
|
|
sRCLauncherDataLocal = sRCLauncherDataIn
|
|
RC_TakeEntityOwnership(sRCLauncherDataLocal)
|
|
RC_CLEANUP_LAUNCHER()
|
|
|
|
SET_MISSION_FLAG(TRUE)
|
|
|
|
DISABLE_CHEAT(CHEAT_TYPE_FAST_RUN, 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]")
|
|
TRIGGER_MUSIC_EVENT("NIGEL1C_FAIL")
|
|
Random_Character_Failed()
|
|
Script_Cleanup()
|
|
ENDIF
|
|
|
|
IF Is_Replay_In_Progress() // Set up the initial scene for replays
|
|
g_bSceneAutoTrigger = TRUE
|
|
eInitialSceneStage = IS_REQUEST_SCENE
|
|
WHILE NOT SetupScene_NIGEL_1C(sRCLauncherDataLocal)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
g_bSceneAutoTrigger = FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("NIGEL_1C_SCENE")
|
|
START_AUDIO_SCENE("NIGEL_1C_SCENE")
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SETUP_WIDGETS()
|
|
#ENDIF
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(0.1)
|
|
|
|
IF IS_REPLAY_IN_PROGRESS()
|
|
INT iReplayStage = GET_REPLAY_MID_MISSION_STAGE()
|
|
|
|
IF g_bShitskipAccepted = TRUE
|
|
iReplayStage++ // player is skipping this stage
|
|
ENDIF
|
|
|
|
SWITCH iReplayStage
|
|
CASE CP_START
|
|
CPRINTLN(DEBUG_MISSION, "Replay at Start")
|
|
/*LOAD_INITIAL_ASSETS(TRUE)
|
|
MISSION_INIT()
|
|
JUMP_TO_STAGE(DEBUG_TO_CHECKPOINT)
|
|
BREAK
|
|
|
|
CASE CP_CELEB
|
|
CPRINTLN(DEBUG_MISSION, "Replay at celeb")*/
|
|
START_REPLAY_SETUP(<< -605.2227, -291.6463, 35.7791 >>, 38.21)
|
|
RC_START_Z_SKIP()
|
|
LOAD_INITIAL_ASSETS(TRUE)
|
|
MISSION_INIT()
|
|
JUMP_TO_STAGE(DEBUG_TO_STORES)
|
|
BREAK
|
|
|
|
CASE CP_MISSION_PASSED
|
|
CPRINTLN(DEBUG_MISSION, "Replay mission passed")
|
|
/*SET_ENTITY_COORDS_NO_OFFSET(PLAYER_PED_ID(), <<-636.6826, -97.2394, 37.1276>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 152.2261)
|
|
WAIT(0)
|
|
WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)*/
|
|
START_REPLAY_SETUP(<<-636.6826, -97.2394, 37.1276>>, 152.2261)
|
|
VEHICLE_INDEX viTemp
|
|
CREATE_VEHICLE_FOR_REPLAY(viTemp, << -649.19, -105.83, 37.63 >>, 125.45, FALSE, FALSE, FALSE, TRUE, TRUE)
|
|
END_REPLAY_SETUP()
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK()
|
|
RC_END_Z_SKIP()
|
|
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(NI1C_PLAYER_GOT_TOO_FAR_FROM_MUFFY)
|
|
bBEEN_WARNED_ABOUT_DISTANCE = TRUE
|
|
Script_Passed()
|
|
BREAK
|
|
|
|
DEFAULT
|
|
SCRIPT_ASSERT("Invalid replay checkpoint")
|
|
BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
IF IS_REPEAT_PLAY_ACTIVE()
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-604.1522, -292.7876, 35.7793>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 30.3570)
|
|
WAIT(0)
|
|
WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
ENDIF
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
WHILE(TRUE)
|
|
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_VSTLA")
|
|
|
|
UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene)
|
|
|
|
SWITCH missionStage
|
|
CASE MS_INIT
|
|
MISSION_INIT()
|
|
BREAK
|
|
CASE MS_GO_TO_SHOPS
|
|
STAGE_GO_TO_SHOPS()
|
|
BREAK
|
|
CASE MS_STAGE_APPROACH_CELEB
|
|
STAGE_APPROACH_CELEBRITY()
|
|
BREAK
|
|
CASE MS_STAGE_CHAT_UP_CELEB
|
|
STAGE_CHAT_UP_CELEB()
|
|
BREAK
|
|
CASE MS_DOG_RUNS_AWAY
|
|
STAGE_DOG_RUNS_AWAY()
|
|
BREAK
|
|
CASE MS_DOG_RUNS_ON_ROAD
|
|
DOG_RUNS_ON_ROAD()
|
|
BREAK
|
|
CASE MS_DOG_WAITING_AT_FIRESTATION
|
|
STAGE_DOG_WAITING_AT_FIRESTATION()
|
|
BREAK
|
|
CASE MS_GRAB_DOG_CUTSCENE
|
|
STAGE_GRAB_DOG_CUTSCENE()
|
|
BREAK
|
|
CASE MS_STAGE_PLAY_OUTRO
|
|
STAGE_PLAY_OUTRO()
|
|
BREAK
|
|
CASE MS_WAIT_FOR_CALL_TO_END
|
|
STAGE_WAIT_FOR_CALL_TO_END()
|
|
BREAK
|
|
CASE MS_FAIL_WAIT_FOR_FADE
|
|
FAIL_WAIT_FOR_FADE()
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
if missionStage <> MS_FAIL_WAIT_FOR_FADE
|
|
CHECK_FAIL_POSSIBILITIES()
|
|
CHECK_IF_PLAYER_THREATENED_MILAN()
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
|
|
// Loop within here until the mission passes or fails
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DEBUG_Check_Debug_Keys()
|
|
#ENDIF
|
|
ENDWHILE
|
|
|
|
// Script should never reach here. Always terminate with cleanup function.
|
|
ENDSCRIPT
|
|
|