736 lines
28 KiB
Python
Executable File
736 lines
28 KiB
Python
Executable File
// MISSION NAME : Abigail1.sc
|
|
// AUTHOR :
|
|
// DESCRIPTION : Michael meets Abigail which unlocks diving for submarine scraps
|
|
|
|
//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 "cutscene_public.sch"
|
|
USING "commands_cutscene.sch"
|
|
USING "commands_entity.sch"
|
|
USING "commands_script.sch"
|
|
USING "script_player.sch"
|
|
USING "randomChar_public.sch"
|
|
USING "replay_public.sch"
|
|
USING "RC_Helper_Functions.sch"
|
|
USING "RC_Threat_Public.sch"
|
|
USING "initial_scenes_Abigail.sch"
|
|
USING "chase_hint_cam.sch" CHASE_HINT_CAM_STRUCT localChaseHintCamStruct
|
|
USING "commands_recording.sch"
|
|
#IF IS_DEBUG_BUILD
|
|
USING "select_mission_stage.sch"
|
|
#ENDIF
|
|
|
|
CONST_INT CP_CONFRONT_ABIGAIL 0
|
|
|
|
g_structRCScriptArgs sRCLauncherDataLocal
|
|
MODEL_NAMES modelAbigailCar = ASEA
|
|
VEHICLE_INDEX vehAbigail
|
|
VECTOR vAbigailVehCoords = <<-1573.7334, 5164.5078, 18.5576>>
|
|
FLOAT fAbigailVehHeading = 175.9451
|
|
|
|
ENUM MISSION_STAGE_TRACK
|
|
MST_LEADIN,
|
|
MST_CUTSCENE,
|
|
MST_CONFRONT_ABIGAIL,
|
|
MST_LOSE_WANTED_LEVEL,
|
|
MST_ABIGAIL_FLEE,
|
|
MST_FAILED
|
|
ENDENUM
|
|
|
|
ENUM STAGE_PROGRESS
|
|
SP_SETUP,
|
|
SP_RUNNING,
|
|
SP_CLEANUP
|
|
ENDENUM
|
|
|
|
CONST_INT Z_SKIP_INTRO 0
|
|
CONST_INT Z_SKIP_ABIGAIL_ON_JETTY 1
|
|
CONST_INT Z_SKIP_ABIGAIL_IN_CAR 2
|
|
CONST_INT Z_SKIP_ABIGAIL_AT_AIRPORT 3
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CONST_INT MAX_SKIP_MENU_LENGTH 4
|
|
MissionStageMenuTextStruct mSkipMenu[MAX_SKIP_MENU_LENGTH]
|
|
#ENDIF
|
|
|
|
CONST_FLOAT fAbigailEscapeDist 250.0
|
|
CONST_INT ABIGAIL 0
|
|
CONST_INT MAX_FOLLOW_CONV_LINES 7
|
|
CONST_INT MAX_CHASE_CONV_LINES 15
|
|
CONST_INT FOLLOW_CONV_TIME 10000
|
|
CONST_INT CHASE_CONV_TIME 10000
|
|
CONST_FLOAT ABIGAIL_TALK_ZONE 20.0
|
|
|
|
MISSION_STAGE_TRACK msTrack = MST_LEADIN
|
|
STAGE_PROGRESS sProgress = SP_SETUP
|
|
|
|
PED_INDEX pedAbigail
|
|
BLIP_INDEX blipAbigail
|
|
INT iControlTimer
|
|
INT iTextTimer
|
|
structPedsForConversation sDialogue
|
|
BOOL bThreatenedConv
|
|
BOOL bInCarConv
|
|
BOOL bArriveConv
|
|
BOOL bDisplayedLoseCopsObjective
|
|
INT iFollowConvTimer
|
|
INT iChaseConvTimer
|
|
SEQUENCE_INDEX seqEscapePlanA //get into vehicle, drive away
|
|
|
|
INT iFollowLinesSaid
|
|
INT iChaseLinesSaid
|
|
VECTOR vDriveToPoint = <<-1014.0543, -2474.0132, 19.1091>>
|
|
|
|
BOOL bCutsceneSkipped
|
|
INT iCutsceneStage
|
|
|
|
INT iAbigailHelpTextTimer
|
|
|
|
SCENARIO_BLOCKING_INDEX blockScenarios
|
|
|
|
/// PURPOSE:
|
|
/// Safely cleans up the script
|
|
PROC Script_Cleanup(BOOL b_terminate_thread)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Script Cleanup") #ENDIF
|
|
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(modelAbigailCar, FALSE)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(modelAbigailCar)
|
|
SAFE_REMOVE_BLIP(blipAbigail)
|
|
SAFE_RELEASE_PED(pedAbigail)
|
|
IF IS_ENTITY_ALIVE(vehAbigail)
|
|
SET_VEHICLE_DOORS_LOCKED(vehAbigail,VEHICLELOCK_UNLOCKED) // B*1541812 Allow player into Abigail's car if he's threatened her
|
|
ENDIF
|
|
SAFE_RELEASE_VEHICLE(vehAbigail)
|
|
RC_CLEANUP_LAUNCHER()
|
|
REMOVE_PED_FOR_DIALOGUE(sDialogue, 3)
|
|
RC_CleanupSceneEntities(sRCLauncherDataLocal, FALSE)
|
|
REMOVE_SCENARIO_BLOCKING_AREA(blockScenarios)
|
|
IF b_terminate_thread = TRUE
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Adds needed contacts, completion %, cleans up and passes script.
|
|
PROC Script_Passed()
|
|
CPRINTLN(DEBUG_MISSION, "Abigail 2: Passed")
|
|
Random_Character_Passed()
|
|
Script_Cleanup(TRUE)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Changes the mission's current stage
|
|
/// PARAMS:
|
|
/// msStage - Mission stage to switch to
|
|
PROC SET_STAGE(MISSION_STAGE_TRACK msStage)
|
|
msTrack = msStage
|
|
sProgress = SP_SETUP
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// advance stage if jacked or car ruined
|
|
FUNC BOOL SHOULD_ABIGAIL_FLEE_PLAYER()
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
AND GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: SHOULD_ABIGAIL_FLEE_PLAYER - Player has a wanted level") #ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(vehAbigail)
|
|
IF HAS_PLAYER_THREATENED_PED(pedAbigail)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: SHOULD_ABIGAIL_FLEE_PLAYER - HAS_PLAYER_THREATENED_PED returned true") #ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
IF IS_PED_BEING_JACKED(pedAbigail)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: SHOULD_ABIGAIL_FLEE_PLAYER - pedAbigail is being jacked out") #ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(vehAbigail)
|
|
IF IS_PED_IN_VEHICLE(pedAbigail, vehAbigail)
|
|
AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(vehAbigail, PLAYER_PED_ID())
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: SHOULD_ABIGAIL_FLEE_PLAYER - player damaged vehAbigail when pedAbigail was inside it") #ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
IF IS_VEHICLE_TYRE_BURST(vehAbigail, SC_WHEEL_CAR_FRONT_LEFT)
|
|
OR IS_VEHICLE_TYRE_BURST(vehAbigail, SC_WHEEL_CAR_FRONT_RIGHT)
|
|
OR IS_VEHICLE_TYRE_BURST(vehAbigail, SC_WHEEL_CAR_REAR_LEFT)
|
|
OR IS_VEHICLE_TYRE_BURST(vehAbigail, SC_WHEEL_CAR_REAR_RIGHT)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: SHOULD_ABIGAIL_FLEE_PLAYER - a tyre on vehAbigail is burst") #ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Handles displaying the hint camera and text for Abigail.
|
|
PROC MANAGE_ABIGAIL_HINT_CAMERA()
|
|
IF IS_ENTITY_ALIVE(pedAbigail)
|
|
IF (GET_GAME_TIMER() - iAbigailHelpTextTimer) > 1000
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT) // Prevent swinging punches when using hint camera
|
|
CONTROL_ENTITY_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, pedAbigail, "ABGAIL2_HINT") // Press ~INPUT_VEH_CIN_CAM~ to toggle focus on Abigail. // B*1508037 - No hint cam when on foot
|
|
ENDIF
|
|
ELSE
|
|
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Wait for any leadin to finish here
|
|
PROC STAGE_LEADIN()
|
|
REQUEST_ADDITIONAL_TEXT("ABGAIL2", MISSION_TEXT_SLOT)
|
|
REQUEST_MODEL(modelAbigailCar)
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() // Wait for any pre-engage comment to finish
|
|
AND HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
|
|
AND HAS_MODEL_LOADED(modelAbigailCar)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Pre-mission conversation finished and assets loaded") #ENDIF
|
|
SET_WANTED_LEVEL_MULTIPLIER(0.1)
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(modelAbigailCar, TRUE)
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.vehID[0])
|
|
vehAbigail = sRCLauncherDataLocal.vehID[0]
|
|
SET_ENTITY_AS_MISSION_ENTITY(vehAbigail, TRUE, TRUE)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Grabbed vehAbigail from sRCLauncherDataLocal.vehID[0]") #ENDIF
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(modelAbigailCar)
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Couldn't vehAbigail from sRCLauncherDataLocal.vehID[0]") #ENDIF
|
|
ENDIF
|
|
msTrack = MST_CUTSCENE
|
|
ELSE
|
|
RC_PLAYER_TRIGGER_SCENE_LOCK_IN()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Plays the scripted cutscene
|
|
PROC STAGE_CUTSCENE()
|
|
SWITCH sProgress
|
|
|
|
CASE SP_SETUP
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Starting state MST_CUTSCENE") #ENDIF
|
|
RC_REQUEST_CUTSCENE("ABIGAIL_MCS_2")
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
bCutsceneSkipped = FALSE
|
|
iCutsceneStage = 0
|
|
sProgress = SP_RUNNING
|
|
BREAK
|
|
|
|
CASE SP_RUNNING
|
|
SWITCH iCutsceneStage
|
|
CASE 0
|
|
IF RC_IS_CUTSCENE_OK_TO_START()
|
|
IF IS_ENTITY_ALIVE(pedAbigail)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(pedAbigail, "ABIGAIL", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
RC_CLEANUP_LAUNCHER()
|
|
START_CUTSCENE()
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE)
|
|
iCutsceneStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF IS_CUTSCENE_PLAYING()
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-950.64136, -1507.60071, 4.17325>>, <<-953.25787, -1500.43884, 4.17084>>, 8.0, <<-970.3301, -1526.6260, 4.0877>>, 306.1)
|
|
RC_START_CUTSCENE_MODE(<<-1592.84, 5214.04, 3.01>>)
|
|
CLEAR_AREA_OF_VEHICLES(GET_ENTITY_COORDS(PLAYER_PED_ID()), 100.0) // B*1436470
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK(500, FALSE) // Just in case screen is faded out
|
|
REMOVE_ANIM_DICT("rcmabigail") // Pre-cutscene anims no longer required
|
|
iCutsceneStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF IS_CUTSCENE_PLAYING()
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("ABIGAIL", GET_NPC_PED_MODEL(CHAR_ABIGAIL))
|
|
AND IS_ENTITY_ALIVE(pedAbigail)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(pedAbigail, <<-1579.27, 5194.96, 2.99>>, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Received Abigail exit state so set her to walk away") #ENDIF
|
|
ENDIF
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
bCutsceneSkipped = TRUE
|
|
ENDIF
|
|
ELSE
|
|
REPLAY_STOP_EVENT()
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Mocap cutscene finished") #ENDIF
|
|
IF bCutsceneSkipped = TRUE
|
|
IF IS_ENTITY_ALIVE(pedAbigail)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(pedAbigail)
|
|
SAFE_TELEPORT_ENTITY(pedAbigail, <<-1587.11, 5204.18, 3.02>>, 210.9196)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(pedAbigail, <<-1579.27, 5194.96, 2.99>>, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(pedAbigail)
|
|
ENDIF
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
WAIT(500)
|
|
ENDIF
|
|
SAFE_FADE_SCREEN_IN_FROM_BLACK()
|
|
RC_END_CUTSCENE_MODE()
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
|
|
CREDIT_BANK_ACCOUNT(CHAR_MICHAEL, BAAC_UNLOGGED_SMALL_ACTION, 10) // B*1483000
|
|
iAbigailHelpTextTimer = GET_GAME_TIMER()
|
|
SET_STAGE(MST_CONFRONT_ABIGAIL)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC SETUP_ABIGAIL_VEHICLE()
|
|
IF NOT IS_ENTITY_ALIVE(vehAbigail)
|
|
vehAbigail = CREATE_VEHICLE(modelAbigailCar, vAbigailVehCoords, fAbigailVehHeading)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(modelAbigailCar)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Created new vehAbigail as it didn't exist") #ENDIF
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(vehAbigail) // Check again as we might have grabbed it from sRCLauncherDataLocal.vehID[0]
|
|
SET_VEHICLE_DOORS_LOCKED(vehAbigail,VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
|
|
SET_VEHICLE_COLOUR_COMBINATION(vehAbigail, 1)
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(modelAbigailCar, TRUE)
|
|
SET_VEHICLE_DISABLE_TOWING(vehAbigail, TRUE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SETUP_ABIGAIL_PED()
|
|
IF IS_ENTITY_ALIVE(pedAbigail)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedAbigail, TRUE)
|
|
ADD_PED_FOR_DIALOGUE(sDialogue, 3, pedAbigail, "ABIGAIL")
|
|
SET_PED_FLEE_ATTRIBUTES(pedAbigail, FA_DISABLE_HANDS_UP, TRUE)
|
|
SET_PED_FLEE_ATTRIBUTES(pedAbigail, FA_CAN_SCREAM, TRUE)
|
|
SET_PED_FLEE_ATTRIBUTES(pedAbigail, FA_DISABLE_COWER, TRUE)
|
|
SET_PED_CONFIG_FLAG(pedAbigail, PCF_DisableGoToWritheWhenInjured, TRUE)
|
|
SET_PED_CONFIG_FLAG(pedAbigail, PCF_GetOutUndriveableVehicle, TRUE)
|
|
SET_PED_CONFIG_FLAG(pedAbigail, PCF_GetOutBurningVehicle, TRUE)
|
|
SET_PED_CONFIG_FLAG(pedAbigail, PCF_RunFromFiresAndExplosions, TRUE)
|
|
SET_PED_CAN_BE_TARGETTED(pedAbigail, TRUE) // B*1508059 - Ensure Abigail can be locked on
|
|
SET_PED_PATH_CAN_DROP_FROM_HEIGHT(pedAbigail, FALSE) // See B*1789556 - Prevent Abigail climbing over stair railings
|
|
SET_PED_PATH_CAN_USE_CLIMBOVERS(pedAbigail, FALSE) // See B*1789556 - Prevent Abigail climbing over stair railings
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC ABI2_RESET_VARS()
|
|
iControlTimer = 0
|
|
iTextTimer = 0
|
|
bThreatenedConv = FALSE
|
|
bInCarConv = FALSE
|
|
bArriveConv = FALSE
|
|
bDisplayedLoseCopsObjective = FALSE
|
|
iFollowConvTimer = 0
|
|
iChaseConvTimer = 0
|
|
iFollowLinesSaid = 0
|
|
iChaseLinesSaid = 0
|
|
ENDPROC
|
|
|
|
PROC STAGE_CONFRONT_ABIGAIL()
|
|
SWITCH sProgress
|
|
CASE SP_SETUP
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Starting state MST_CONFRONT_ABIGAIL") #ENDIF
|
|
blockScenarios = ADD_SCENARIO_BLOCKING_AREA(<<-1578.62, 5194.44, 2.99>>-<<10, 10, 10>>, <<-1578.62, 5194.44, 2.99>>+<<10, 10, 10>>) // B*1483144 - Stop the scenario peds at the bottom of the stair spawning
|
|
SETUP_ABIGAIL_VEHICLE()
|
|
IF IS_ENTITY_ALIVE(pedAbigail)
|
|
SETUP_ABIGAIL_PED()
|
|
IF IS_VEHICLE_OK(vehAbigail)
|
|
IF NOT DOES_BLIP_EXIST(blipAbigail)
|
|
blipAbigail = CREATE_PED_BLIP(pedAbigail)
|
|
ENDIF
|
|
INIT_FLASH_BLIP_AND_TEXT(blipAbigail, "", "", iControlTimer, iTextTimer, TRUE, FALSE)
|
|
OPEN_SEQUENCE_TASK(seqEscapePlanA)
|
|
IF NOT IS_PED_IN_VEHICLE(pedAbigail, vehAbigail) // In case we're z skipping
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1579.27, 5194.96, 2.99>>, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1567.85, 5178.12, 14.78>>, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1571.85, 5181.21, 16.88>>, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1579.01, 5174.08, 18.57>>, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_ENTER_VEHICLE(NULL, vehAbigail, DEFAULT_TIME_BEFORE_WARP, VS_DRIVER, PEDMOVEBLENDRATIO_WALK)
|
|
ENDIF
|
|
TASK_VEHICLE_DRIVE_TO_COORD_LONGRANGE(NULL, vehAbigail, vDriveToPoint, 20.0, DRIVINGMODE_AVOIDCARS, 10.0)
|
|
TASK_VEHICLE_PARK(NULL, vehAbigail, vDriveToPoint, 49.5670, PARK_TYPE_PULL_OVER)
|
|
TASK_LEAVE_VEHICLE(NULL, vehAbigail, ECF_DONT_CLOSE_DOOR)
|
|
TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 250, -1)
|
|
CLOSE_SEQUENCE_TASK(seqEscapePlanA)
|
|
TASK_PERFORM_SEQUENCE(pedAbigail, seqEscapePlanA)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Tasking pedAbigail to drive to airport") #ENDIF
|
|
ELSE
|
|
TASK_WANDER_STANDARD(pedAbigail)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Tasking pedAbigail to wander") #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
iFollowConvTimer = GET_GAME_TIMER()
|
|
sProgress = SP_RUNNING
|
|
BREAK
|
|
|
|
CASE SP_RUNNING
|
|
MANAGE_ABIGAIL_HINT_CAMERA()
|
|
IF NOT IS_ENTITY_ALIVE(pedAbigail)
|
|
REPLAY_RECORD_BACK_FOR_TIME(3.0)
|
|
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) = 0
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: STAGE_CONFRONT_ABIGAIL - pedAbigail isn't alive") #ENDIF
|
|
sProgress = SP_CLEANUP
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: STAGE_CONFRONT_ABIGAIL - pedAbigail isn't alive but player has a wanted level") #ENDIF
|
|
SET_STAGE(MST_LOSE_WANTED_LEVEL)
|
|
ENDIF
|
|
// Abigail is alive so ok to do all of the following...
|
|
ELIF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), pedAbigail) > fAbigailEscapeDist
|
|
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) = 0
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: STAGE_CONFRONT_ABIGAIL - pedAbigail more than fAbigailEscapeDist away from player") #ENDIF
|
|
sProgress = SP_CLEANUP
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: STAGE_CONFRONT_ABIGAIL - pedAbigail more than fAbigailEscapeDist away from player but player has a wanted level") #ENDIF
|
|
SET_STAGE(MST_LOSE_WANTED_LEVEL)
|
|
ENDIF
|
|
ELIF SHOULD_ABIGAIL_FLEE_PLAYER()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
SET_STAGE(MST_ABIGAIL_FLEE)
|
|
ELIF IS_ENTITY_AT_COORD(pedAbigail, vDriveToPoint, <<5.0, 5.0, 5.0>>)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: pedAbigail arrived at vEndPoint") #ENDIF
|
|
SET_STAGE(MST_LOSE_WANTED_LEVEL)
|
|
ELSE
|
|
FLASH_BLIP_AND_TEXT(blipAbigail, "", "", iControlTimer, iTextTimer, FALSE)
|
|
IF bInCarConv = FALSE
|
|
IF IS_ENTITY_ALIVE(vehAbigail)
|
|
AND IS_PED_IN_VEHICLE(pedAbigail, vehAbigail, TRUE)
|
|
AND IS_ENTITY_IN_RANGE_ENTITY(pedAbigail, PLAYER_PED_ID(), ABIGAIL_TALK_ZONE)
|
|
AND CREATE_CONVERSATION(sDialogue, "SONARAU", "SONAR_INCAR", CONV_PRIORITY_MEDIUM)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Started SONAR_INCAR conversation") #ENDIF
|
|
bInCarConv = TRUE
|
|
ENDIF
|
|
IF iFollowLinesSaid < MAX_FOLLOW_CONV_LINES
|
|
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND (GET_GAME_TIMER() - iFollowConvTimer) > FOLLOW_CONV_TIME
|
|
AND IS_ENTITY_IN_RANGE_ENTITY(pedAbigail, PLAYER_PED_ID(), ABIGAIL_TALK_ZONE)
|
|
AND NOT IS_PED_RAGDOLL(pedAbigail)
|
|
AND (CREATE_CONVERSATION(sDialogue, "SONARAU", "SONAR_FOLLOW", CONV_PRIORITY_MEDIUM))
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Started SONAR_FOLLOW conversation") #ENDIF
|
|
iFollowConvTimer = GET_GAME_TIMER()
|
|
iFollowLinesSaid++
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: iFollowLinesSaid = ", iFollowLinesSaid) #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SP_CLEANUP
|
|
Script_Passed()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC SET_ABIGAIL_BLIP_TO_RED()
|
|
IF NOT DOES_BLIP_EXIST(blipAbigail)
|
|
AND IS_ENTITY_ALIVE(pedAbigail)
|
|
blipAbigail = CREATE_PED_BLIP(pedAbigail)
|
|
ENDIF
|
|
IF DOES_BLIP_EXIST(blipAbigail)
|
|
AND GET_BLIP_COLOUR(blipAbigail) != BLIP_COLOUR_RED
|
|
SET_BLIP_AS_FRIENDLY(blipAbigail, FALSE)
|
|
SET_BLIP_COLOUR(blipAbigail, BLIP_COLOUR_RED)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Set blipAbigail to red") #ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC STAGE_LOSE_WANTED_LEVEL()
|
|
SWITCH sProgress
|
|
CASE SP_SETUP
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Starting state MST_LOSE_WANTED_LEVEL") #ENDIF
|
|
sProgress = SP_RUNNING
|
|
BREAK
|
|
|
|
CASE SP_RUNNING
|
|
MANAGE_ABIGAIL_HINT_CAMERA()
|
|
IF NOT IS_ENTITY_ALIVE(pedAbigail)
|
|
REPLAY_RECORD_BACK_FOR_TIME(3.0)
|
|
bArriveConv = TRUE
|
|
SAFE_REMOVE_BLIP(blipAbigail)
|
|
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) = 0
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: STAGE_LOSE_WANTED_LEVEL - pedAbigail isn't alive and player's wanted level is 0") #ENDIF
|
|
sProgress = SP_CLEANUP
|
|
ENDIF
|
|
ELSE
|
|
IF bArriveConv = FALSE
|
|
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND IS_ENTITY_IN_RANGE_ENTITY(pedAbigail, PLAYER_PED_ID(), ABIGAIL_TALK_ZONE)
|
|
AND CREATE_CONVERSATION(sDialogue, "SONARAU", "SONAR_ARRIVE", CONV_PRIORITY_MEDIUM)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Started SONAR_ARRIVE conversation") #ENDIF
|
|
bArriveConv = TRUE
|
|
SET_ABIGAIL_BLIP_TO_RED()
|
|
ENDIF
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), pedAbigail) > fAbigailEscapeDist
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: STAGE_LOSE_WANTED_LEVEL - pedAbigail more than fAbigailEscapeDist away from player") #ENDIF
|
|
sProgress = SP_CLEANUP
|
|
ENDIF
|
|
ENDIF
|
|
IF bDisplayedLoseCopsObjective = FALSE
|
|
AND bArriveConv = TRUE
|
|
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_ENTITY_ALIVE(pedAbigail) // Don't increase wanted level if player has already got a wanted level before killing Abigail
|
|
SET_WANTED_LEVEL_DIFFICULTY(PLAYER_ID(), 0)
|
|
SET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX(), 3)
|
|
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
|
|
ENDIF
|
|
PRINT_NOW("ABGAIL2_WANTED", DEFAULT_GOD_TEXT_TIME, 1) // "Lose the cops."
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Displayed lose cops objective") #ENDIF
|
|
bDisplayedLoseCopsObjective = TRUE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SP_CLEANUP
|
|
Script_Passed()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Abigail runs away on foot
|
|
PROC STAGE_ABIGAIL_FLEE()
|
|
SWITCH sProgress
|
|
CASE SP_SETUP
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Starting state MST_ABIGAIL_FLEE") #ENDIF
|
|
SET_ABIGAIL_BLIP_TO_RED()
|
|
IF IS_ENTITY_ALIVE(vehAbigail)
|
|
SET_VEHICLE_DOORS_LOCKED(vehAbigail,VEHICLELOCK_UNLOCKED) // B*1541812 Allow player into Abigail's car if he's threatened her
|
|
ENDIF
|
|
sProgress = SP_RUNNING
|
|
BREAK
|
|
|
|
CASE SP_RUNNING
|
|
MANAGE_ABIGAIL_HINT_CAMERA()
|
|
IF NOT IS_ENTITY_ALIVE(pedAbigail)
|
|
REPLAY_RECORD_BACK_FOR_TIME(3.0)
|
|
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) = 0
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: STAGE_ABIGAIL_FLEE - pedAbigail isn't alive") #ENDIF
|
|
sProgress = SP_CLEANUP
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: STAGE_ABIGAIL_FLEE - pedAbigail isn't alive but player has a wanted level") #ENDIF
|
|
SET_STAGE(MST_LOSE_WANTED_LEVEL)
|
|
ENDIF
|
|
ELIF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), pedAbigail) > fAbigailEscapeDist
|
|
IF GET_PLAYER_WANTED_LEVEL(GET_PLAYER_INDEX()) = 0
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: STAGE_ABIGAIL_FLEE - pedAbigail more than fAbigailEscapeDist away from player") #ENDIF
|
|
sProgress = SP_CLEANUP
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: STAGE_ABIGAIL_FLEE - pedAbigail more than fAbigailEscapeDist away from player but player has a wanted level") #ENDIF
|
|
SET_STAGE(MST_LOSE_WANTED_LEVEL)
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IsPedPerformingTask(pedAbigail, SCRIPT_TASK_SMART_FLEE_PED)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Tasking Abigail to flee the player") #ENDIF
|
|
TASK_SMART_FLEE_PED(pedAbigail, PLAYER_PED_ID(), 250, -1)
|
|
ENDIF
|
|
IF bThreatenedConv = FALSE
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND IS_ENTITY_IN_RANGE_ENTITY(pedAbigail, PLAYER_PED_ID(), ABIGAIL_TALK_ZONE)
|
|
AND NOT IS_PED_RAGDOLL(pedAbigail)
|
|
AND CREATE_CONVERSATION(sDialogue, "SONARAU", "SONAR_SHOOTS", CONV_PRIORITY_MEDIUM)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Started SONAR_SHOOTS conversation") #ENDIF
|
|
bThreatenedConv = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF iChaseLinesSaid < MAX_CHASE_CONV_LINES
|
|
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND (GET_GAME_TIMER() - iChaseConvTimer) > CHASE_CONV_TIME
|
|
AND IS_ENTITY_IN_RANGE_ENTITY(pedAbigail, PLAYER_PED_ID(), ABIGAIL_TALK_ZONE)
|
|
AND NOT IS_PED_RAGDOLL(pedAbigail)
|
|
AND CREATE_CONVERSATION(sDialogue, "SONARAU", "SONAR_CHASE", CONV_PRIORITY_MEDIUM)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Started SONAR_CHASE conversation") #ENDIF
|
|
iChaseConvTimer = GET_GAME_TIMER()
|
|
iChaseLinesSaid++
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: iChaseLinesSaid = ", iChaseLinesSaid) #ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SP_CLEANUP
|
|
Script_Passed()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Fail the mission
|
|
PROC STAGE_FAILED()
|
|
SWITCH sProgress
|
|
CASE SP_SETUP
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Starting state MST_FAILED") #ENDIF
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
KILL_CHASE_HINT_CAM(localChaseHintCamStruct)
|
|
SAFE_REMOVE_BLIP(blipAbigail)
|
|
Random_Character_Failed()
|
|
sProgress = SP_RUNNING
|
|
BREAK
|
|
CASE SP_RUNNING
|
|
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: GET_MISSION_FLOW_SAFE_TO_CLEANUP returned true") #ENDIF
|
|
SAFE_DELETE_PED(pedAbigail)
|
|
SAFE_DELETE_VEHICLE(vehAbigail)
|
|
Script_Cleanup(TRUE)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Ensures the player, Abigail and her car are in the correct places for the z skip.
|
|
PROC ABI2_SETUP_FOR_Z_SKIP(VECTOR v_player_ped, FLOAT f_player_ped, VECTOR v_player_car, FLOAT f_player_car, VECTOR v_abigail_ped, FLOAT f_abigail_ped, VECTOR v_abigail_car, FLOAT f_abigail_car)
|
|
IF IS_VECTOR_ZERO(v_player_ped)
|
|
VEHICLE_INDEX veh_player
|
|
WHILE NOT CREATE_PLAYER_VEHICLE(veh_player, CHAR_MICHAEL, v_player_car, f_player_car)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), veh_player)
|
|
SAFE_RELEASE_VEHICLE(veh_player)
|
|
ELIF NOT IS_REPLAY_IN_PROGRESS()
|
|
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), v_player_ped, f_player_ped)
|
|
ENDIF
|
|
REQUEST_MODEL(modelAbigailCar)
|
|
WHILE NOT HAS_MODEL_LOADED(modelAbigailCar)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
WHILE NOT RC_CREATE_NPC_PED(pedAbigail, CHAR_ABIGAIL, v_abigail_ped, f_abigail_ped, "RC ABIGAIL 2")
|
|
WAIT(0)
|
|
ENDWHILE
|
|
vehAbigail = CREATE_VEHICLE(modelAbigailCar, v_abigail_car, f_abigail_car)
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(modelAbigailCar, TRUE)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(modelAbigailCar)
|
|
SETUP_ABIGAIL_VEHICLE()
|
|
IF IS_VECTOR_ZERO(v_abigail_ped)
|
|
SET_PED_INTO_VEHICLE(pedAbigail, vehAbigail)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Handles debug skipping.
|
|
/// PARAMS:
|
|
/// i_new_state - The state to debug skip to.
|
|
PROC ABI2_DEBUG_SKIP_STATE(INT i_new_state)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "Starting debug skip to ", i_new_state, "...") #ENDIF
|
|
WAIT_FOR_CUTSCENE_TO_STOP(FALSE, FALSE, FALSE)
|
|
RC_START_Z_SKIP()
|
|
SAFE_DELETE_PED(pedAbigail)
|
|
SAFE_DELETE_VEHICLE(vehAbigail)
|
|
Script_Cleanup(FALSE)
|
|
ABI2_RESET_VARS()
|
|
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 100, TRUE)
|
|
SWITCH i_new_state
|
|
CASE Z_SKIP_INTRO
|
|
ABI2_SETUP_FOR_Z_SKIP(<<-1590.9642, 5211.7168, 3.0098>>, 37.4745, <<0,0,0>>, 0, <<-1596.090, 5218.102, 3.045>>, 125.5, <<-1584.0127, 5158.5386, 18.6057>>, 210.5309)
|
|
SET_STAGE(MST_CUTSCENE)
|
|
BREAK
|
|
CASE Z_SKIP_ABIGAIL_ON_JETTY
|
|
ABI2_SETUP_FOR_Z_SKIP(<<-1595.2010, 5217.4946, 3.0009>>, 208.2675, <<-1580.2358, 5169.5854, 18.5846>>, 189.4926, <<-1587.11, 5204.18, 3.02>>, -143.87, vAbigailVehCoords, fAbigailVehHeading)
|
|
SET_STAGE(MST_CONFRONT_ABIGAIL)
|
|
BREAK
|
|
CASE Z_SKIP_ABIGAIL_IN_CAR
|
|
ABI2_SETUP_FOR_Z_SKIP(<<0,0,0>>, 0, <<-1580.2358, 5169.5854, 18.5846>>, 189.4926, <<0,0,0>>, 0, vAbigailVehCoords, fAbigailVehHeading)
|
|
SET_STAGE(MST_CONFRONT_ABIGAIL)
|
|
BREAK
|
|
CASE Z_SKIP_ABIGAIL_AT_AIRPORT
|
|
ABI2_SETUP_FOR_Z_SKIP(<<0,0,0>>, 0, <<-973.0429, -2405.9248, 19.1698>>, 151.3282, <<0,0,0>>, 0, <<-982.9420, -2422.9114, 19.1683>>, 148.0451)
|
|
bInCarConv = TRUE
|
|
iFollowLinesSaid = MAX_FOLLOW_CONV_LINES
|
|
SET_STAGE(MST_CONFRONT_ABIGAIL)
|
|
BREAK
|
|
ENDSWITCH
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
ENDIF
|
|
END_REPLAY_SETUP()
|
|
RC_END_Z_SKIP()
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "Finished debug skip to ", i_new_state) #ENDIF
|
|
ENDPROC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PROC DEBUG_Check_Debug_Keys()
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "S key pressed so passing mission") #ENDIF
|
|
Script_Passed()
|
|
ELIF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "F key pressed so failing mission") #ENDIF
|
|
SET_STAGE(MST_FAILED)
|
|
ENDIF
|
|
INT i_new_state
|
|
IF LAUNCH_MISSION_STAGE_MENU(mSkipMenu, i_new_state)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "Z skip menu used so doing z skip") #ENDIF
|
|
ABI2_DEBUG_SKIP_STATE(i_new_state)
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
SCRIPT(g_structRCScriptArgs sRCLauncherDataIn)
|
|
|
|
sRCLauncherDataLocal = sRCLauncherDataIn
|
|
RC_TakeEntityOwnership(sRCLauncherDataLocal)
|
|
|
|
SET_MISSION_FLAG(TRUE)
|
|
|
|
IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU))
|
|
PRINT_LAUNCHER_DEBUG("Force cleanup [TERMINATING]")
|
|
Random_Character_Failed()
|
|
Script_Cleanup(TRUE)
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
mSkipMenu[Z_SKIP_INTRO].sTxtLabel = "Intro - abigail_mcs_2"
|
|
mSkipMenu[Z_SKIP_ABIGAIL_ON_JETTY].sTxtLabel = "Abigail on jetty"
|
|
mSkipMenu[Z_SKIP_ABIGAIL_IN_CAR].sTxtLabel = "Abigail in car"
|
|
mSkipMenu[Z_SKIP_ABIGAIL_AT_AIRPORT].sTxtLabel = "Abigail at airport"
|
|
#ENDIF
|
|
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[0])
|
|
pedAbigail = sRCLauncherDataLocal.pedID[0]
|
|
SET_ENTITY_AS_MISSION_ENTITY(pedAbigail, TRUE, TRUE)
|
|
#IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "ABIGAIL 2: Grabbed pedAbigail from sRCLauncherDataLocal.pedID[0]") #ENDIF
|
|
ENDIF
|
|
|
|
ABI2_RESET_VARS()
|
|
|
|
IF IS_REPLAY_IN_PROGRESS()
|
|
INT istage = GET_REPLAY_MID_MISSION_STAGE()
|
|
IF g_bShitskipAccepted = TRUE
|
|
istage++
|
|
ENDIF
|
|
SWITCH istage
|
|
CASE CP_CONFRONT_ABIGAIL
|
|
START_REPLAY_SETUP(<<-1595.2010, 5217.4946, 3.0009>>, 208.2675)
|
|
ABI2_DEBUG_SKIP_STATE(Z_SKIP_ABIGAIL_ON_JETTY)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
WHILE(TRUE)
|
|
WAIT(0)
|
|
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_WLB")
|
|
UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene)
|
|
#IF IS_DEBUG_BUILD
|
|
DEBUG_Check_Debug_Keys()
|
|
#ENDIF
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
SWITCH(msTrack)
|
|
CASE MST_LEADIN
|
|
STAGE_LEADIN()
|
|
BREAK
|
|
CASE MST_CUTSCENE
|
|
STAGE_CUTSCENE()
|
|
BREAK
|
|
CASE MST_CONFRONT_ABIGAIL
|
|
STAGE_CONFRONT_ABIGAIL()
|
|
BREAK
|
|
CASE MST_LOSE_WANTED_LEVEL
|
|
STAGE_LOSE_WANTED_LEVEL()
|
|
BREAK
|
|
CASE MST_ABIGAIL_FLEE
|
|
STAGE_ABIGAIL_FLEE()
|
|
BREAK
|
|
CASE MST_FAILED
|
|
STAGE_FAILED()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDWHILE
|
|
ENDSCRIPT
|