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

4884 lines
176 KiB
Python
Executable File

// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : finale2.sc
// AUTHOR : Ben Barclay
// DESCRIPTION : Franklin has decided to kill Michael. They meet out in the country.
// After a short chase with trains in the way, they reach a power plant.
// Here Michael is fleeing whilst every so of tne taking shots at franklin.
// Michael reaches the top of a tower, frnklin follows to the top.
// Michael ends up over the barrier whilst fighting franklin.
// Michael is then droped by franklin onto a police helicopter blade.
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//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 "commands_audio.sch"
USING "commands_camera.sch"
USING "commands_clock.sch"
USING "commands_debug.sch"
USING "commands_fire.sch"
USING "commands_graphics.sch"
USING "commands_hud.sch"
USING "commands_object.sch"
USING "commands_pad.sch"
USING "commands_ped.sch"
USING "commands_player.sch"
USING "commands_script.sch"
USING "commands_streaming.sch"
USING "commands_task.sch"
USING "commands_vehicle.sch"
USING "commands_interiors.sch"
USING "commands_itemsets.sch"
USING "model_enums.sch"
USING "script_blips.sch"
USING "script_player.sch"
USING "script_misc.sch"
using "script_ped.sch"
Using "Locates_public.sch"
Using "select_mission_stage.sch"
using "asset_management_public.sch"
USING "selector_public.sch"
USING "chase_hint_cam.sch"
using "mission_stat_public.sch"
using "cutscene_public.sch"
USING "replay_public.sch"
USING "taxi_functions.sch"
using "completionpercentage_public.sch"
using "timelapse.sch"
using "clearMissionArea.sch"
using "RC_helper_functions.sch"
USING "achievement_public.sch"
USING "mission_globals.sch"
USING "commands_recording.sch"
USING "cheat_controller_public.sch"
#IF IS_DEBUG_BUILD
USING "shared_debug.sch"
USING "script_debug.sch"
#ENDIF
//-----------------------------------------------------------------------------------------------------------
// ENUMS
//-----------------------------------------------------------------------------------------------------------
ENUM MPF_MISSION_PED_FLAGS
mpf_frank,
mpf_mike,
// mpf_pilot,
mpf_dead_guy,
// mpf_police1,
// mpf_police2,
// mpf_police3,
// mpf_police4,
MPF_NUM_OF_PEDS
ENDENUM
ENUM MVF_MISSION_VEHICLE_FLAGS
mvf_frank_car,
mvf_mike_car,
// mvf_heli,
mvf_train,
// mvf_police1,
// mvf_police2,
MVF_NUM_OF_VEH
ENDENUM
ENUM MSF_MISSION_STAGE_FLAGS
msf_0_meet,
msf_1_chase,
msf_2_power_plant,
msf_3_confrontation,
msf_4_heli_appears,
msf_5_shoot_out,
msf_6_Ladder_dodge,
msf_7_over_the_Edge,
msf_8_passed,
CST_MCS_1,
CST_MCS_2,
CST_EXT,
MSF_NUM_OF_STAGES
ENDENUM
ENUM MFF_MISSION_FAIL_FLAGS
mff_lost_mike,
mff_police,
mff_default,
MFF_NUM_OF_FAILS
ENDENUM
Enum STAGE_SWITCHSTATE
STAGESWITCH_IDLE,
STAGESWITCH_REQUESTED,
STAGESWITCH_EXITING,
STAGESWITCH_ENTERING
ENDENUM
Enum object_List
obj_dummy,
obj_dummy1,
obj_dummy2,
obj_dummy3,
obj_dummy4,
obj_dummy5,
obj_dummy6,
OBJ_NUM_OF_OBJECTS
endenum
enum HELILIGHT
HL_FRANK,
HL_VEC1,
HL_VEC2,
HL_MIKE,
HL_DEAD_MIKE
endenum
enum HELIPOS
eH_Corner1,
eH_Corner2,
eH_Corner3,
eH_Corner4
endenum
//-----------------------------------------------------------------------------------------------------------
// STRUCTS
//-----------------------------------------------------------------------------------------------------------
STRUCT VEHICLE_STRUCT
VEHICLE_INDEX id
BLIP_INDEX blip
endstruct
Struct PEDS_STRUCT
PED_INDEX id
BLIP_INDEX blip
vector vdef
ENDSTRUCT
STRUCT OBJ_STRUCT
OBJECT_INDEX id
vector pos
MODEL_NAMES model
ENDSTRUCT
//-----------------------------------------------------------------------------------------------------------
// CONSTANTS
//-----------------------------------------------------------------------------------------------------------
CONST_INT STAGE_ENTRY 0
CONST_INT STAGE_EXIT -1
CONST_INT TRAIN_CONFIG 19
//-----starting positions-------
VECTOR V_TRAIN_START = << 2574.5146, 2173.4243, 31.5596 >>
//-----------------------------------------------------------------------------------------------------------
// VARIABLES
//-----------------------------------------------------------------------------------------------------------
VEHICLE_STRUCT Vehs[MVF_NUM_OF_VEH] //holds all of the vehicles for tis level
PEDS_STRUCT peds[MPF_NUM_OF_PEDS] //holds all of the peds for this level
OBJ_STRUCT objs[OBJ_NUM_OF_OBJECTS] //holds all objects
structPedsForConversation convo_struct //holds peds in the conversation
LOCATES_HEADER_DATA sLocatesData
//SELECTOR_PED_STRUCT sSelectorPeds
BLIP_INDEX blip_objective //blip for mission objective
Camera_index cameraIndex //in game cut scene camera
SEQUENCE_INDEX seq //used to create AI sequence
CHASE_HINT_CAM_STRUCT sHintCam
//DECAL_ID decalBlood[1]
//PED_INDEX ladderMike
WEAPON_TYPE playerWeapon
// relationship
REL_GROUP_HASH REL_Michael
Int SyncSceneIG1
Int SyncSceneIG2
Int SyncSceneIG3
Int SyncSceneIG5
int icam = 0
bool bcreateScene = false
bool bloadedScene = true
bool ringToneStarted
bool ringToneStopped
bool bFrankFacingMike
bool cutsceneRequested
bool playerInBus
bool bPushInFXPlayed
//============================== time of day variables ==============================
structTimelapse sTimelapse
bool bTODstart = false
//------general variables-------
int i
bool bfailchecks = false
bool bOnFoot = false
bool bCarRunning = false
//========================== Cam ================================
Int icamDelay
//========================== TRAIN STAGE ==========================
FLOAT train_speed_perc // train is 63.35% speed of mike normaly
FLOAT fplaybackSpeed //used to increase or decrease vehicle recording
FLOAT fDist
FLOAT fcurrentplaybackTime = 0.0 //used to assign current playback time
INT iRubberTimer = 0 //used for debug on the rubber band sequence
//========================== HELI STAGE ==========================
//helilight eHeliLight
//HELIPOS EheliPos
//INT iHeliDelay
//int IheliStage
//int iHeliDialogueStage
//int iHeliTimerDialogue
//bool bHeliDes = false
//========================= LADDER STAGE ========================
Int iBulletTimer
int iLadderStage
//========================== Dialogue and prints ============================
int iAmbDialogueTimer
bool bFollowDisplayed = false
bool doneUPSTChat
//------------------------------ CS ------------------------------
bool bcutsceneLoaded = false
bool bcs_frank = false
bool bcs_mike = false
bool bcs_mikeCar = false
//bool bcs_cam = false
bool bcs_gun
bool bPlaceholder = false
bool endCutRequested = false
bool scriptCamsStopped = false
bool bmusicTriggerStart = false
bool syncSceneStarted = false
BOOl bloodAdded
bool doneChatHold
bool creditsStarted
bool pain1Done
bool pain2Done
bool pain3Done
bool damagePack1Done
bool damagePack2Done
bool bPunch1 = false
bool bPunch2 = false
bool bVideoCaptured
//bool bMikeMoved = FALSE
MODEL_NAMES eModel = INT_TO_ENUM(MODEL_NAMES, GET_HASH_KEY("w_sr_sniperrifle"))
object_index Weapon_Object
camera_index EndCreditCam
//============================== streaming ==============================
ASSET_MANAGEMENT_DATA sAssetData
CUTSCENE_PED_VARIATION sCutscenePedVariationRegister[MPF_NUM_OF_PEDS]
//----------------
//----------- Stage Management -----------
STAGE_SWITCHSTATE stageswitch //current switching status
INT mission_stage //current stage
INT mission_substage //current substage
INT Dialogue_stage //stage to manage dialogue
INT requestedStage //the mission stage requested by a mission_stage switch
INT iStageTimer //timer used for debug
//------------- skip stuff ---------------
Bool bDoSkip //trigger the skip
INT iSkipToStage //the stage to skip to
bool bis_zSkip //zskip used
#if IS_DEBUG_BUILD
MissionStageMenuTextStruct zMenuNames[MSF_NUM_OF_STAGES]
WIDGET_GROUP_ID widget_debug
vector vDebugPosition = <<2727.982,1576.869,65.250>>
float fDebugHeading = 179.990
#endif
// ===========================================================================================================
// Termination
// ===========================================================================================================
// -----------------------------------------------------------------------------------------------------------
// Mission Helpers
// -----------------------------------------------------------------------------------------------------------
// PC CONTROLS FOR SAVE/DROP MICHAEL
BOOL bPCCOntrolsSetup = FALSE
PROC SETUP_PC_CONTROLS()
IF IS_PC_VERSION()
IF bPCCOntrolsSetup = FALSE
INIT_PC_SCRIPTED_CONTROLS("FINALE B CHOICE")
bPCCOntrolsSetup = TRUE
ENDIF
ENDIF
ENDPROC
PROC CLEANUP_PC_CONTROLS()
IF IS_PC_VERSION()
IF bPCCOntrolsSetup = TRUE
SHUTDOWN_PC_SCRIPTED_CONTROLS()
bPCCOntrolsSetup = FALSE
ENDIF
ENDIF
ENDPROC
PROC Point_Gameplay_cam_at_heading(float targetHeading)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(targetHeading - GET_ENTITY_HEADING(Player_ped_id()))
endproc
PROC Point_Gameplay_cam_at_coord(vector target)
float aim_heading
aim_heading = GET_HEADING_BETWEEN_VECTORS_2D(get_entity_coords(player_ped_id()),target)
SET_GAMEPLAY_CAM_RELATIVE_HEADING( aim_heading - GET_ENTITY_HEADING(Player_ped_id()))
endproc
func bool isentityalive(entity_index mentity)
if does_entity_exist(mentity)
if is_entity_a_vehicle(mentity)
if is_vehicle_driveable(get_vehicle_index_from_entity_index(mentity))
return true
endif
elif is_entity_a_ped(mentity)
if not is_ped_injured(get_ped_index_from_entity_index(mentity))
return true
endif
endif
endif
return false
endfunc
FUNC FLOAT GET_HEADING_FROM_COORDS(vector oldCoords,vector newCoords, bool invert=true)
float heading
float dX = newCoords.x - oldCoords.x
float dY = newCoords.y - oldCoords.y
if dY != 0
heading = ATAN2(dX,dY)
ELSE
if dX < 0
heading = -90
ELSE
heading = 90
ENDIF
ENDIF
//flip because for some odd reason the coders think west is a heading of 90 degrees, so this'll match the output of commands such as GET_ENTITY_HEADING()
IF invert = TRUE
heading *= -1.0
//below not necessary but helps for debugging
IF heading < 0
heading += 360.0
ENDIF
ENDIF
RETURN heading
ENDFUNC
FUNC FLOAT GET_SNIPER_RIFLE_AIM_HEADING_FOR_PED(ped_index miss_ped)
VECTOR vec_ba
FLOAT aim_heading
vec_ba = get_entity_coords(miss_ped) - get_entity_coords(player_ped_id())
//x rotation
aim_heading = (get_heading_from_vector_2d(vec_ba.x, vec_ba.y) - get_entity_heading(player_ped_id()))
IF aim_heading > 180
aim_heading -= 360
ENDIF
IF aim_heading < -180
aim_heading += 360
ENDIF
RETURN aim_heading
ENDFUNC
FUNC FLOAT GET_SNIPER_RIFLE_AIM_PITCH_FOR_PED(ped_index miss_ped)
VECTOR vec_ba
VECTOR direction_vec
vec_ba = get_entity_coords(miss_ped) - get_entity_coords(player_ped_id())
direction_vec = normalise_vector(vec_ba)
RETURN (ATAN2(direction_vec.z, VMAG(<<direction_vec.x, direction_vec.y, 0.0>>)))
ENDFUNC
FUNC ped_index FRANK_ID()
return peds[mpf_frank].id
ENDFUNC
FUNC ped_index MIKE_ID()
return peds[mpf_mike].id
ENDFUNC
proc stop_all_audio_scenes(int exclude = 0)
if IS_AUDIO_SCENE_ACTIVE("FIN_2_CHASE_IN_CAR")
and exclude != 1
STOP_AUDIO_SCENE("FIN_2_CHASE_IN_CAR")
endif
if IS_AUDIO_SCENE_ACTIVE("FIN_2_FOCUS_CAM")
and exclude != 2
STOP_AUDIO_SCENE("FIN_2_FOCUS_CAM")
endif
if IS_AUDIO_SCENE_ACTIVE("FIN_2_MICHAEL_ESCAPE_SCENE")
and exclude != 3
STOP_AUDIO_SCENE("FIN_2_MICHAEL_ESCAPE_SCENE")
endif
if IS_AUDIO_SCENE_ACTIVE("FIN_2_CHASE_ON_FOOT")
and exclude != 4
STOP_AUDIO_SCENE("FIN_2_CHASE_ON_FOOT")
endif
if IS_AUDIO_SCENE_ACTIVE("FIN_2_HELICOPTER_ARRIVES")
and exclude != 5
STOP_AUDIO_SCENE("FIN_2_HELICOPTER_ARRIVES")
endif
if IS_AUDIO_SCENE_ACTIVE("FIN_2_MICHAEL_CLIMBS_LADDER")
and exclude != 6
STOP_AUDIO_SCENE("FIN_2_MICHAEL_CLIMBS_LADDER")
endif
if IS_AUDIO_SCENE_ACTIVE("FIN_2_CHASE_UP_LADDER")
and exclude != 7
STOP_AUDIO_SCENE("FIN_2_CHASE_UP_LADDER")
endif
if IS_AUDIO_SCENE_ACTIVE("FIN_2_MAKE_CHOICE")
and exclude != 8
STOP_AUDIO_SCENE("FIN_2_MAKE_CHOICE")
endif
if IS_AUDIO_SCENE_ACTIVE("FIN_2_SAVE_MICHAEL")
and exclude != 9
STOP_AUDIO_SCENE("FIN_2_SAVE_MICHAEL")
endif
if IS_AUDIO_SCENE_ACTIVE("FIN_2_KILL_MICHAEL")
and exclude != 10
STOP_AUDIO_SCENE("FIN_2_KILL_MICHAEL")
endif
endproc
PROC give_weapons()
if DOES_ENTITY_EXIST(MIKE_ID())
if not HAS_PED_GOT_WEAPON(MIKE_ID(),WEAPONTYPE_PISTOL)
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,INFINITE_AMMO,true,true)
else
SET_CURRENT_PED_WEAPON(MIKE_ID(),WEAPONTYPE_PISTOL,true)
endif
endif
ENDPROC
Proc manage_shooting_from_above()
if DOES_ENTITY_EXIST(FRANK_ID())
if IS_ENTITY_AT_COORD(FRANK_ID(),<<2735.73, 1576.83, 58.73>>,<<4,4,10>>)
and IS_PLAYER_CLIMBING(player_id())
vector pos = GET_ENTITY_COORDS(FRANK_ID())
vector shootpos = <<2735.8,1576.5,66.4>>
if IS_ENTITY_PLAYING_ANIM(FRANK_ID(),"missfinale_b_ig_4","LHUP_dodgeleft_short")
or IS_ENTITY_PLAYING_ANIM(FRANK_ID(),"missfinale_b_ig_4","LHUP_dodgeleft_long")
or IS_ENTITY_PLAYING_ANIM(FRANK_ID(),"missfinale_b_ig_4","LHUP_dodgeright_short")
or IS_ENTITY_PLAYING_ANIM(FRANK_ID(),"missfinale_b_ig_4","LHUP_dodgeright_long")
SET_PLAYER_CONTROL(player_id(),false,SPC_LEAVE_CAMERA_CONTROL_ON)
elif iLadderStage > 1
OR pos.z < 49.4
SET_PLAYER_CONTROL(player_id(),true)
endif
switch iLadderStage
//first shooting
case 0
if IS_PLAYER_CLIMBING(player_id())
and IS_ENTITY_AT_COORD(FRANK_ID(),<<2735.78296, 1576.85803, 51.27797>>,<<0.5,0.5,3>>)
SET_PLAYER_CONTROL(player_id(),false,SPC_LEAVE_CAMERA_CONTROL_ON)
SHOOT_SINGLE_BULLET_BETWEEN_COORDS(shootpos,<<2736.00537, 1576.75659, 52.01969>>,10,true,WEAPONTYPE_HEAVYSNIPER)
SET_PED_SHOOTS_AT_COORD(MIKE_ID(),<<2736.00537, 1576.75659, 52.01969>>)
iBulletTimer = GET_GAME_TIMER()
iLadderStage++
endif
break
case 1
if get_game_timer() - iBulletTimer > 1000
TASK_PLAY_ANIM(FRANK_ID(),"missfinale_b_ig_4","LHUP_dodgeleft_short",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_SECONDARY)
SHOOT_SINGLE_BULLET_BETWEEN_COORDS(shootpos,<<2735.85205, 1576.79797, 52.27501>>,10,true,WEAPONTYPE_HEAVYSNIPER)
SET_PED_SHOOTS_AT_COORD(MIKE_ID(),<<2735.85205, 1576.79797, 52.27501>>)
iBulletTimer = GET_GAME_TIMER()
iLadderStage++
endif
break
//2nd shooting
case 2
if pos.z >= 56.5
SHOOT_SINGLE_BULLET_BETWEEN_COORDS(shootpos,<<2736.04224, 1576.74500, 58.29689>>,10,true,WEAPONTYPE_HEAVYSNIPER)
SET_PED_SHOOTS_AT_COORD(MIKE_ID(),<<2736.04224, 1576.74500, 58.29689>>)
iBulletTimer = GET_GAME_TIMER()
iLadderStage++
endif
break
case 3
if get_game_timer() - iBulletTimer > 450
SHOOT_SINGLE_BULLET_BETWEEN_COORDS(shootpos,<<2735.01880, 1576.11804, 57.91095>>,10,true,WEAPONTYPE_HEAVYSNIPER)
SET_PED_SHOOTS_AT_COORD(MIKE_ID(),<<2735.01880, 1576.11804, 57.91095>>)
iBulletTimer = GET_GAME_TIMER()
iLadderStage++
endif
break
//3rd shooting
case 4
if pos.z >= 59
SHOOT_SINGLE_BULLET_BETWEEN_COORDS(shootpos,<<2734.81, 1575.69, 60.61>>,10,true,WEAPONTYPE_HEAVYSNIPER)
SET_PED_SHOOTS_AT_COORD(MIKE_ID(),<<2734.81, 1575.69, 60.61>>)
iBulletTimer = GET_GAME_TIMER()
iLadderStage++
endif
break
case 5
if get_game_timer() - iBulletTimer > 400
SHOOT_SINGLE_BULLET_BETWEEN_COORDS(shootpos,<<2736.03, 1576.75, 60.58>>,10,true,WEAPONTYPE_HEAVYSNIPER)
SET_PED_SHOOTS_AT_COORD(MIKE_ID(),<<2736.03, 1576.75, 60.58>>)
iBulletTimer = GET_GAME_TIMER()
iLadderStage++
endif
break
case 6
if get_game_timer() - iBulletTimer > 400
SHOOT_SINGLE_BULLET_BETWEEN_COORDS(shootpos,<<2736.51, 1576.33, 49.54>>,10,true,WEAPONTYPE_HEAVYSNIPER)
SET_PED_SHOOTS_AT_COORD(MIKE_ID(),<<2736.51, 1576.33, 49.54>>)
if isentityalive(MIKE_ID())
FREEZE_ENTITY_POSITION(MIKE_ID(),false)
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(MIKE_ID(),<<2729.18, 1578.21, 65.54>>,FRANK_ID(),PEDMOVE_SPRINT,true,2)
endif
iLadderStage++
endif
break
case 7
if pos.z >= 59
if isentityalive(MIKE_ID())
FREEZE_ENTITY_POSITION(MIKE_ID(),false)
if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(MIKE_ID(),SCRIPT_TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY)
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(MIKE_ID(),<<2729.18, 1578.21, 65.54>>,FRANK_ID(),PEDMOVE_SPRINT,true,2)
endif
endif
endif
break
endswitch
endif
endif
endproc
RAGDOLL_BLOCKING_FLAGS eMikeRBFs = RBF_PED_RAGDOLL_BUMP | RBF_PLAYER_BUMP | RBF_PLAYER_RAGDOLL_BUMP | RBF_MELEE | RBF_BULLET_IMPACT
func bool Create_michael(vector pos, float heading)
if isentityalive(MIKE_ID())
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_TORSO,22,1)
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_LEG,26,0)
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_feet,4,0)
SET_ENTITY_COORDS(MIKE_ID(),pos)
SET_ENTITY_HEADING(MIKE_ID(),heading)
SET_PED_RELATIONSHIP_GROUP_HASH(MIKE_ID(),REL_Michael)
ADD_PED_FOR_DIALOGUE(convo_struct,0,MIKE_ID(),"MICHAEL",true)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_ID(),true)
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,INFINITE_AMMO,true,true)
SET_PED_COMBAT_ATTRIBUTES(MIKE_ID(),CA_REQUIRES_LOS_TO_SHOOT,false)
SET_PED_ACCURACY(MIKE_ID(),10)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DisableExplosionReactions,true)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_RunFromFiresAndExplosions,false)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DontActivateRagdollFromFire,true)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DontActivateRagdollFromExplosions,true)
SET_PED_PATH_AVOID_FIRE(MIKE_ID(),FALSE)
SET_ENTITY_PROOFS(MIKE_ID(),false,true,true,false,false)
return true
else
if CREATE_PLAYER_PED_ON_FOOT(peds[mpf_mike].id,CHAR_MICHAEL,pos,heading)
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_TORSO,22,1)
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_LEG,26,0)
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_feet,4,0)
SET_PED_RELATIONSHIP_GROUP_HASH(MIKE_ID(),REL_Michael)
ADD_PED_FOR_DIALOGUE(convo_struct,0,MIKE_ID(),"MICHAEL",true)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_ID(),true)
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,INFINITE_AMMO,true,true)
SET_PED_COMBAT_ATTRIBUTES(MIKE_ID(),CA_REQUIRES_LOS_TO_SHOOT,false)
SET_PED_ACCURACY(MIKE_ID(),10)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DisableExplosionReactions,true)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_RunFromFiresAndExplosions,false)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DontActivateRagdollFromFire,true)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DontActivateRagdollFromExplosions,true)
SET_PED_PATH_AVOID_FIRE(MIKE_ID(),FALSE)
SET_ENTITY_PROOFS(MIKE_ID(),false,true,true,false,false)
SET_RAGDOLL_BLOCKING_FLAGS(MIKE_ID(),eMikeRBFs )
return true
endif
endif
return false
ENDFUNC
proc clear_players_task_on_control_input(script_task_name task_name)
if get_script_task_status(player_ped_id(), task_name) = performing_task
int left_stick_x
int left_stick_y
int right_stick_x
int right_stick_y
int stick_dead_zone = 28
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS(left_stick_x, left_stick_y, right_stick_x, right_stick_y)
IF NOT IS_LOOK_INVERTED()
right_stick_y *= -1
ENDIF
// invert the vertical
IF (left_stick_y > STICK_DEAD_ZONE)
OR (left_stick_y < (STICK_DEAD_ZONE * -1))
or (left_stick_x > STICK_DEAD_ZONE)
OR (left_stick_x < (STICK_DEAD_ZONE * -1))
//or is_control_pressed(player_control, input_sprint)
clear_ped_tasks(player_ped_id())
endif
endif
endproc
PROC DO_EXCITING_NEAR_BULLET_MISS_ON_PED(PED_INDEX pedToMiss, PED_INDEX sourceOfBullets, INT &iControlTimer, VECTOR sourceOffset,
INT timeBetweenBullets = 60, FLOAT minXrange = -3.9, FLOAT maxXrange = -1.0, FLOAT minYRange = -2.9, FLOAT maxYrange = 3.9,
weapon_type weapon = WEAPONTYPE_SNIPERRIFLE)
//Fire bullets at the player as from the bad guy...
VECTOR bulletHit
VECTOR bulletOrigin
IF ((GET_GAME_TIMER() - iControlTimer) > timeBetweenBullets)
IF NOT IS_ENTITY_DEAD(pedToMiss)
AND NOT IS_ENTITY_DEAD(sourceOfBullets)
bulletHit = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(pedToMiss, <<GET_RANDOM_FLOAT_IN_RANGE(minXrange, maxXrange), GET_RANDOM_FLOAT_IN_RANGE(minYRange, maxYrange), 0.0>>)
bulletOrigin = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(sourceOfBullets, sourceOffset)
GET_GROUND_Z_FOR_3D_COORD(bulletHit, bulletHit.z)
SHOOT_SINGLE_BULLET_BETWEEN_COORDS(bulletOrigin, bulletHit, 1,false,weapon)
iControlTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDPROC
//PURPOSE: Returns the world heading of the gameplay camera.
FUNC FLOAT GET_GAMEPLAY_CAM_WORLD_HEADING()
RETURN WRAP(GET_GAMEPLAY_CAM_RELATIVE_HEADING() + GET_ENTITY_HEADING(PLAYER_PED_ID()),-180,180)
ENDFUNC
PROC CONVERGE_VALUE(FLOAT &val, FLOAT fDesiredVal, FLOAT fAmountToConverge, BOOL bAdjustForFramerate = FALSE)
IF val != fDesiredVal
FLOAT fConvergeAmountThisFrame = fAmountToConverge
IF bAdjustForFramerate
fConvergeAmountThisFrame = fConvergeAmountThisFrame +@ fAmountToConverge
ENDIF
IF val - fDesiredVal > fConvergeAmountThisFrame
val -= fConvergeAmountThisFrame
ELIF val - fDesiredVal < -fConvergeAmountThisFrame
val += fConvergeAmountThisFrame
ELSE
val = fDesiredVal
ENDIF
ENDIF
ENDPROC
PROC Rubber_banding(float &fcurrentspeed,ped_index &playerped,Vehicle_index &veh_target)
if isentityalive(playerped)
AND isentityalive(veh_target)
vector vpos_Franklin = GET_ENTITY_COORDS(playerped)
vector vpos_Target = GET_ENTITY_COORDS(veh_target)
//Rubber banding
fDist = VDIST(vpos_Franklin, vpos_Target)
FLOAT fTouchingDist = 4
FLOAT fIdealDist = 10.0
FLOAT fMaxDist = 50.0
FLOAT fSuperMaxDist = 100.0
FLOAT fDesiredPlaybackSpeed = 1.0
if IS_PLAYBACK_GOING_ON_FOR_VEHICLE(veh_target)
fcurrentplaybackTime = GET_TIME_POSITION_IN_RECORDING(veh_target)
//VECTOR vOffset = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(veh_target, vpos_Franklin)
//At start keep them closer together
IF fCurrentPlaybackTime < 5000
fIdealDist = 20.0
fMaxDist = 50.0
fSuperMaxDist = 120.0
ENDIF
IF fCurrentPlaybackTime > 5000 and fcurrentplaybackTime < 15000
fIdealDist = 25.0
fMaxDist = 50.0
fSuperMaxDist = 200.0
ENDIF
IF fCurrentPlaybackTime > 15000 and fcurrentplaybackTime < 21000
fIdealDist = 40.0
fMaxDist = 60.0
fSuperMaxDist = 250.0
ENDIF
if fCurrentPlaybackTime > 21000 and fcurrentplaybackTime < 25000
fidealDist = 60
fmaxDist = 80
fSuperMaxDist = 250
endif
if fCurrentPlaybackTime > 25000 and fcurrentplaybackTime < 30000
fidealDist = 70
fmaxDist = 250
fSuperMaxDist = 300
endif
if fCurrentPlaybackTime > 30000 and fcurrentplaybackTime < 35000
fidealDist = 85
fmaxDist = 300
fSuperMaxDist = 300
endif
if fCurrentPlaybackTime > 35000
fidealDist = 115
fmaxDist = 350
fSuperMaxDist = 350
endif
FLOAT fDistRatio = 0.0
VECTOR vOffset = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(veh_target, vpos_Franklin)
IF vOffset.y < 1.0
//Player is behind
IF fDist > fMaxDist
//Player is a long way behind, slow the trigger car down by a lot (if not on screen).
BOOL bInsanelyFarBehind = FALSE
IF fDist > fSuperMaxDist
IF fDist > 200.0
bInsanelyFarBehind = TRUE
ENDIF
fDist = fSuperMaxDist
ENDIF
fDistRatio = ((fDist - fMaxDist) / (fSuperMaxDist - fMaxDist))
IF IS_ENTITY_ON_SCREEN(veh_target) AND NOT bInsanelyFarBehind
fDesiredPlaybackSpeed = 0.7 - (0.2 * fDistRatio)
ELSE
fDesiredPlaybackSpeed = 0.5 - (0.3 * fDistRatio)
ENDIF
ELIF fDist > fIdealDist
//Player is somewhat behind, slow the trigger car down relative to how far behind the player is.
fDistRatio = ((fDist - fIdealDist) / (fMaxDist - fIdealDist))
fDesiredPlaybackSpeed = 1.0 - (0.3 * fDistRatio)
ELSE
//Player is getting too close, speed up the trigger car relative to how close the player is.
IF fDist < fTouchingDist
fDist = fTouchingDist
ENDIF
fDistRatio = (fIdealDist - fDist) / (fIdealDist - fTouchingDist)
IF IS_SPECIAL_ABILITY_ACTIVE(PLAYER_ID())
fDesiredPlaybackSpeed = 1.0 + (fDistRatio * 2.0)
ELSE
fDesiredPlaybackSpeed = 1.0 + (fDistRatio)
ENDIF
ENDIF
ELSE
//Player is in front, speed up trigger car by a lot.
IF fDist > 20
fDist = 20
ENDIF
fDistRatio = fDist / 20
IF IS_SPECIAL_ABILITY_ACTIVE(PLAYER_ID())
fDesiredPlaybackSpeed = 2.25 + fDistRatio
ELSE
fDesiredPlaybackSpeed = 1.0 + fDistRatio
ENDIF
ENDIF
if (GET_GAME_TIMER() - irubberTimer) > 500
irubberTimer = GET_GAME_TIMER()
ENDIF
CONVERGE_VALUE(fCurrentSpeed, fDesiredPlaybackSpeed, 0.06,true)
endif
endif
ENDPROC
PROC Manage_train_chase()
VECTOR vtrainOffset
//If mike has past speed up
vtrainOffset= GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(vehs[mvf_train].id, GET_ENTITY_COORDS(vehs[mvf_mike_car].id))
float CurrentTrainSpeed = GET_ENTITY_SPEED(vehs[mvf_train].id)
float NewTrainSpeed
if fcurrentplaybackTime <33500
IF vtrainOffset.y < 1.5
NewTrainSpeed = (GET_ENTITY_SPEED(MIKE_ID()) * train_speed_perc)//percentage of mikes speed for him to just make it thru the gap
if NewTrainSpeed != 0
and NewTrainSpeed <= GET_ENTITY_SPEED(MIKE_ID()) //can never be faster than mike's car
SET_TRAIN_SPEED(vehs[mvf_train].id,NewTrainSpeed)
endif
else
NewTrainSpeed = GET_ENTITY_SPEED(vehs[mvf_mike_car].id)
if NewTrainSpeed != 0
and NewTrainSpeed <= GET_ENTITY_SPEED(MIKE_ID())
CONVERGE_VALUE(CurrentTrainSpeed,NewTrainSpeed,0.8,true)
SET_TRAIN_SPEED(vehs[mvf_train].id,CurrentTrainSpeed)
endif
endif
else
CurrentTrainSpeed = GET_ENTITY_SPEED(vehs[mvf_train].id)
clamp(CurrentTrainSpeed,15,30)
SET_TRAIN_CRUISE_SPEED(vehs[mvf_train].id,CurrentTrainSpeed)
endif
fDist = VDIST(GET_ENTITY_COORDS(FRANK_ID()),GET_ENTITY_COORDS(MIKE_ID()))
endproc
Proc Create_police_in_veh(MPF_MISSION_PED_FLAGS ped,VEHICLE_INDEX veh,VEHICLE_SEAT seat = VS_DRIVER)
peds[ped].id = CREATE_PED_INSIDE_VEHICLE(veh,PEDTYPE_MISSION,S_M_Y_COP_01,seat)
SET_PED_COMBAT_MOVEMENT(peds[ped].id,cm_defensive)
SET_PED_SEEING_RANGE(peds[ped].id,200)
SET_PED_COMBAT_ATTRIBUTES(peds[ped].id,CA_USE_COVER,true)
SET_PED_COMBAT_ATTRIBUTES(peds[ped].id,CA_LEAVE_VEHICLES,true)
SET_PED_SPHERE_DEFENSIVE_AREA(peds[ped].id,peds[ped].vdef,2)
GIVE_WEAPON_TO_PED(peds[ped].id,WEAPONTYPE_PISTOL,INFINITE_AMMO,true,true)
SET_PED_ACCURACY(peds[ped].id,0)
SET_PED_SHOOT_RATE(peds[ped].id,10)
SET_PED_COMBAT_ABILITY(peds[ped].id,CAL_POOR)
SET_PED_COMBAT_ATTRIBUTES(peds[ped].id,CA_DO_DRIVEBYS,false)
endproc
//proc manage_searchLight()
// if IsEntityAlive(peds[mpf_pilot].id)
// and isentityalive(vehs[mvf_heli].id)
// SET_VEHICLE_SEARCHLIGHT(vehs[mvf_heli].id,true,true)
// switch eHeliLight
// case HL_FRANK
// IF NOT IS_MOUNTED_WEAPON_TASK_UNDERNEATH_DRIVING_TASK(peds[mpf_pilot].id)
// if CONTROL_MOUNTED_WEAPON(peds[mpf_pilot].id)
// SET_MOUNTED_WEAPON_TARGET(peds[mpf_pilot].id,NULL,NULL,GET_ENTITY_COORDS(frank_ID()))
// endif
// ELSE
// SET_MOUNTED_WEAPON_TARGET(peds[mpf_pilot].id,NULL,NULL,GET_ENTITY_COORDS(frank_ID()))
// endif
// break
// case HL_VEC1
// IF NOT IS_MOUNTED_WEAPON_TASK_UNDERNEATH_DRIVING_TASK(peds[mpf_pilot].id)
// if CONTROL_MOUNTED_WEAPON(peds[mpf_pilot].id)
// SET_MOUNTED_WEAPON_TARGET(peds[mpf_pilot].id,NULL,NULL,GET_ENTITY_COORDS(frank_ID()))
// endif
// else
// SET_MOUNTED_WEAPON_TARGET(peds[mpf_pilot].id,NULL,NULL,<<2741.32, 1523.05, 45.25>>)
// ENDIF
// break
// case HL_VEC2
// IF NOT IS_MOUNTED_WEAPON_TASK_UNDERNEATH_DRIVING_TASK(peds[mpf_pilot].id)
// if CONTROL_MOUNTED_WEAPON(peds[mpf_pilot].id)
// SET_MOUNTED_WEAPON_TARGET(peds[mpf_pilot].id,NULL,NULL,<<2736.12, 1537.14, 48.69 >>)
// endif
// ELSE
// SET_MOUNTED_WEAPON_TARGET(peds[mpf_pilot].id,NULL,NULL,<<2736.12, 1537.14, 48.69 >>)
// ENDIF
// break
// case HL_MIKE
// if IsEntityAlive(MIKE_ID())
// IF NOT IS_MOUNTED_WEAPON_TASK_UNDERNEATH_DRIVING_TASK(peds[mpf_pilot].id)
// if CONTROL_MOUNTED_WEAPON(peds[mpf_pilot].id)
// SET_MOUNTED_WEAPON_TARGET(peds[mpf_pilot].id,NULL,NULL,GET_ENTITY_COORDS(MIKE_ID()))
// endif
// Else
// SET_MOUNTED_WEAPON_TARGET(peds[mpf_pilot].id,NULL,NULL,GET_ENTITY_COORDS(MIKE_ID()))
// ENDIF
// else
// eheliLight = HL_FRANK
// endif
// break
// case HL_DEAD_MIKE
// IF NOT IS_MOUNTED_WEAPON_TASK_UNDERNEATH_DRIVING_TASK(peds[mpf_pilot].id)
// if CONTROL_MOUNTED_WEAPON(peds[mpf_pilot].id)
// SET_MOUNTED_WEAPON_TARGET(peds[mpf_pilot].id,NULL,NULL,<<2727.42407, 1581.22046, 23.48895>>)
// endif
// else
// SET_MOUNTED_WEAPON_TARGET(peds[mpf_pilot].id,NULL,NULL,<<2727.42407, 1581.22046, 23.48895>>)
// ENDIF
//
// break
// endswitch
// endif
//endproc
//PROC Manage_HELI()
// if isentityalive(vehs[mvf_heli].id)
// if isentityalive(peds[mpf_pilot].id)
// manage_searchLight()
// switch EheliPos
// case eH_Corner1
// switch IheliStage
// case 0
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// IheliStage++
// break
// case 1
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2795.0669, 1538.0674,52.3292 >>,MISSION_GOTO,30,-1,-1,-1,-1)
// IheliStage++
// endif
// break
// case 2
// if IS_ENTITY_AT_COORD(peds[mpf_pilot].id,<<2795.0669, 1538.0674,52.3292>>,<<7,7,7>>)
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2795.0669, 1538.0674,52.3292 >>,MISSION_GOTO,30,-1,82.4536,-1,-1)
// iheliDelay = get_Game_timer()
// IheliStage++
// endif
// endif
// break
// case 3
// if get_game_timer() - iHeliDelay > 10000
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// IheliStage++
// endif
// break
// case 4
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2768.5940, 1491.1582, 54.8603>>,MISSION_GOTO,30,-1,-1,-1,-1)
// IheliStage++
// endif
// break
// case 5
// if IS_ENTITY_AT_COORD(peds[mpf_pilot].id,<<2768.5940, 1491.1582, 54.8603>>,<<7,7,7>>)
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2768.5940, 1491.1582, 54.8603>>,MISSION_GOTO,30,-1,22.1241,-1,-1)
// iheliDelay = get_Game_timer()
// IheliStage++
// endif
// endif
// break
// case 6
// if get_game_timer() - iHeliDelay > 15000
// IheliStage = 0
// endif
// break
// endswitch
// break
// case eH_corner2
// switch IheliStage
// case 0
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// IheliStage++
// break
// case 1
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2710.7583, 1490.5580, 63.0989>>,MISSION_GOTO,30,-1,-1,-1,-1)
// IheliStage++
// endif
// break
// case 2
// if IS_ENTITY_AT_COORD(peds[mpf_pilot].id,<<2710.7583, 1490.5580, 63.0989>>,<<7,7,7>>)
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2710.7583, 1490.5580, 63.0989>>,MISSION_GOTO,30,-1,326.1907,-1,-1)
// iheliDelay = get_Game_timer()
// IheliStage++
// endif
// endif
// break
// case 3
// if get_game_timer() - iHeliDelay > 10000
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// IheliStage++
// endif
// break
// case 4
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2696.1963, 1524.3916,53.3657 >>,MISSION_GOTO,30,-1,-1,-1,-1)
// IheliStage++
// endif
// break
// case 5
// if IS_ENTITY_AT_COORD(peds[mpf_pilot].id,<<2696.1963, 1524.3916,53.3657 >>,<<4,4,4>>)
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2696.1963, 1524.3916,53.3657 >>,MISSION_GOTO,30,-1,278.1787,-1,-1)
// iheliDelay = get_Game_timer()
// IheliStage++
// endif
// endif
// break
// case 6
// if get_game_timer() - iHeliDelay > 10000
// IheliStage = 0
// endif
// break
// endswitch
// break
// case eH_corner3
// switch IheliStage
// case 0
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// IheliStage++
// break
// case 1
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2706.0330, 1577.4050,55.0532 >>,MISSION_GOTO,30,-1,-1,-1,-1)
// IheliStage++
// endif
// break
// case 2
// if IS_ENTITY_AT_COORD(peds[mpf_pilot].id,<<2706.0330, 1577.4050,55.0532 >>,<<7,7,7>>)
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2706.0330, 1577.4050,55.0532 >>,MISSION_GOTO,30,-1, 212.8791,-1,-1)
// iheliDelay = get_Game_timer()
// IheliStage++
// endif
// endif
// break
// case 3
// if get_game_timer() - iHeliDelay > 10000
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// IheliStage++
// endif
// break
// case 4
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2710.6626, 1552.7446,42.2383 >>,MISSION_GOTO,30,-1,-1,-1,-1)
// IheliStage++
// endif
// break
// case 5
// if IS_ENTITY_AT_COORD(peds[mpf_pilot].id,<<2710.6626, 1552.7446,42.2383 >>,<<7,7,7>>)
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2710.6626, 1552.7446,42.2383 >>,MISSION_GOTO,30,-1,306.6938,-1,-1)
// iheliDelay = get_Game_timer()
// IheliStage++
// endif
// endif
// break
// case 6
// if get_game_timer() - iHeliDelay > 10000
// IheliStage = 0
// endif
// break
// endswitch
// break
// case eH_corner4
// switch IheliStage
// case 0
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// IheliStage++
// break
// case 1
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2684.6001, 1562.7174,64.3599 >>,MISSION_GOTO,20,-1,-1,-1,-1)
// IheliStage++
// endif
// break
// case 2
// if IS_ENTITY_AT_COORD(peds[mpf_pilot].id,<<2684.6001, 1562.7174,64.3599 >>,<<4,4,4>>)
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2684.6001, 1562.7174,64.3599 >>,MISSION_GOTO,20,-1,281.8232,-1,-1)
// iheliDelay = get_Game_timer()
// IheliStage++
// endif
// endif
// break
// case 3
// if get_game_timer() - iHeliDelay > 10000
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// IheliStage++
// endif
// break
// case 4
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2724.9990, 1622.4291,64.4212 >>, MISSION_GOTO,20,-1,-1,-1,-1)
// IheliStage++
// endif
// break
// case 5
// if IS_ENTITY_AT_COORD(peds[mpf_pilot].id,<< 2724.9990, 1622.4291,64.4212 >> ,<<4,4,4>>)
// CLEAR_PED_TASKS(peds[mpf_pilot].id)
// if GET_SCRIPT_TASK_STATUS(peds[mpf_pilot].id,SCRIPT_TASK_VEHICLE_MISSION) <> PERFORMING_TASK
// TASK_HELI_MISSION(peds[mpf_pilot].id,vehs[mvf_heli].id,null,null,<<2724.9990, 1622.4291,64.4212 >>, MISSION_GOTO,20,-1,181.5375,-1,-1)
// iheliDelay = get_Game_timer()
// IheliStage++
// endif
// endif
// break
// case 6
// if get_game_timer() - iHeliDelay > 10000
// IheliStage = 0
// endif
// break
// endswitch
// break
// endswitch
// endif
// else
// if mission_stage >= enum_to_int(msf_4_heli_appears)
// and mission_substage > STAGE_ENTRY
// bHeliDes = true
// iHeliDelay = get_game_timer()
// endif
// endif
//
// if bHeliDes
// and get_game_timer() - iHeliDelay > 30000
// println("HELI DESTROYED")
// if GET_PLAYER_WANTED_LEVEL(player_id()) < 2
// and mission_stage < enum_to_int(msf_7_over_the_Edge)
// SET_PLAYER_WANTED_LEVEL(player_id(),2)
// SET_PLAYER_WANTED_LEVEL_NOW(player_id())
// endif
// bHeliDes = false
// vector vHeliStart
// float fplayerheading = GET_GAMEPLAY_CAM_WORLD_HEADING()
// if fplayerheading > 315 // 0 degrees
// or fplayerheading < 45
// vHeliStart = << 2759.7231, 1215.3116, 65.5431 >>
// elif fplayerheading > 225 // 270 degrees
// and fplayerheading < 315
// vHeliStart = << 2361.2295, 1548.8776,96.4794 >>
// elif fplayerheading > 135 // 180 degrees
// and fplayerheading < 225
// vHeliStart = << 2726.1267, 1707.1282, 61.8398 >>
// else // 90 degrees
// vHeliStart = << 3089.7339, 1441.9844,92.4943 >>
// endif
// vehs[mvf_heli].id = CREATE_VEHICLE(polmav,vHeliStart,fplayerheading)
// SET_HELI_BLADES_FULL_SPEED(vehs[mvf_heli].id)
// if isentityalive(peds[mpf_pilot].id)
// SAFE_DELETE_PED(peds[mpf_pilot].id)
// endif
// peds[mpf_pilot].id = CREATE_PED_INSIDE_VEHICLE(vehs[mvf_heli].id,PEDTYPE_MISSION,S_M_M_PILOT_02)
// SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_pilot].id,true)
// ADD_PED_FOR_DIALOGUE(convo_struct,2,peds[mpf_pilot].id,"FIN2POLICE")
// FREEZE_ENTITY_POSITION(vehs[mvf_heli].id,false)
// if mission_stage = enum_to_int(msf_4_heli_appears)
// EheliPos = eH_Corner1
// elif mission_stage = enum_to_int(msf_5_shoot_out)
// EheliPos = eH_Corner2
// elif mission_stage = enum_to_int(msf_6_Ladder_dodge)
// EheliPos = eH_Corner3
// elif mission_stage = enum_to_int(msf_7_over_the_Edge)
// EheliPos = eH_Corner4
// endif
// IheliStage = 0
// endif
//ENDPROC
//PROC HELI_DIALOGUE()
////manage dialouge over time
// if mission_stage >= enum_to_int(msf_5_shoot_out)
// and not IS_CUTSCENE_PLAYING()
// switch iHeliDialogueStage
// case 0
// if not IS_AMBIENT_SPEECH_PLAYING(peds[mpf_pilot].id)
// and not IS_MESSAGE_BEING_DISPLAYED()
// and get_game_Timer() - iHeliTimerDialogue > 45000
// and get_game_timer() - iHeliDelay > 10000
// PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_pilot].id,"FIN2_AUAA","FIN2POLICE",SPEECH_PARAMS_FORCE_HELI)
// iHeliTimerDialogue = get_game_timer()
// iHeliDialogueStage++
// endif
// break
// case 1
// if not IS_AMBIENT_SPEECH_PLAYING(peds[mpf_pilot].id)
// and not IS_MESSAGE_BEING_DISPLAYED()
// and get_game_Timer() - iHeliTimerDialogue > 25000
// and get_game_timer() - iHeliDelay > 10000
// PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_pilot].id,"FIN2_AUAB","FIN2POLICE",SPEECH_PARAMS_FORCE_HELI)
// request_model(police3)
// request_model(S_M_Y_Cop_01)
// iHeliTimerDialogue = get_game_timer()
// iHeliDialogueStage++
// endif
// break
// case 2
// if not IS_AMBIENT_SPEECH_PLAYING(peds[mpf_pilot].id)
// and not IS_MESSAGE_BEING_DISPLAYED()
// and get_game_Timer() - iHeliTimerDialogue > 25000
// and get_game_timer() - iHeliDelay > 10000
// and HAS_MODEL_LOADED(POLICE3)
// and HAS_MODEL_LOADED(S_M_Y_Cop_01)
// PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_pilot].id,"FIN2_AUAC","FIN2POLICE",SPEECH_PARAMS_FORCE_HELI)
// if mission_stage < enum_to_int(msf_7_over_the_Edge)
// if GET_PLAYER_WANTED_LEVEL(player_id()) < 1
// SET_PLAYER_WANTED_LEVEL(player_id(),1)
// SET_PLAYER_WANTED_LEVEL_NOW(player_id())
// endif
//
////========================================= create fake cop cars turning up ======================================================
// if not DOES_ENTITY_EXIST(vehs[mvf_police1].id)
// vehs[mvf_police1].id = CREATE_VEHICLE(police3,<< 2577.0737, 1640.7174, 27.5393 >>, 267.6345)
//
// Create_police_in_veh(mpf_police1,vehs[mvf_police1].id)
//
// Create_police_in_veh(mpf_police2,vehs[mvf_police1].id,VS_FRONT_RIGHT)
//
// OPEN_SEQUENCE_TASK(seq)
// TASK_VEHICLE_DRIVE_TO_COORD(null,vehs[mvf_police1].id,<< 2693.3496, 1685.5349, 23.6556 >>,20,DRIVINGSTYLE_ACCURATE,police3,DRIVINGMODE_AVOIDCARS,3,10)
// TASK_LEAVE_ANY_VEHICLE(null)
// TASK_COMBAT_PED(null,FRANK_ID())
// CLOSE_SEQUENCE_TASK(seq)
// TASK_PERFORM_SEQUENCE(peds[mpf_police1].id,seq)
// CLEAR_SEQUENCE_TASK(seq)
//
// TASK_COMBAT_PED(peds[mpf_police2].id,FRANK_ID())
// endif
// if not DOES_ENTITY_EXIST(vehs[mvf_police2].id)
// vehs[mvf_police2].id = CREATE_VEHICLE(police3,<< 2561.9470, 1639.0753, 27.9980 >>, 268.9215)
// Create_police_in_veh(mpf_police3,vehs[mvf_police2].id)
// Create_police_in_veh(mpf_police4,vehs[mvf_police2].id,VS_FRONT_RIGHT)
//
// OPEN_SEQUENCE_TASK(seq)
// TASK_VEHICLE_DRIVE_TO_COORD(null,vehs[mvf_police2].id,<< 2689.6165, 1690.8751, 23.7080 >>,20,DRIVINGSTYLE_ACCURATE,police3,DRIVINGMODE_AVOIDCARS,3,10)
// TASK_LEAVE_ANY_VEHICLE(null)
// TASK_COMBAT_PED(null,FRANK_ID())
// CLOSE_SEQUENCE_TASK(seq)
// TASK_PERFORM_SEQUENCE(peds[mpf_police3].id,seq)
// CLEAR_SEQUENCE_TASK(seq)
//
// TASK_COMBAT_PED(peds[mpf_police4].id,FRANK_ID())
// endif
// endif
////===================================================================================================================================
// iHeliTimerDialogue = get_game_timer()
// iHeliDialogueStage++
// endif
// break
// case 3
// if not IS_AMBIENT_SPEECH_PLAYING(peds[mpf_pilot].id)
// and not IS_MESSAGE_BEING_DISPLAYED()
// and get_game_Timer() - iHeliTimerDialogue > 45000
// and get_game_timer() - iHeliDelay > 10000
// PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_pilot].id,"FIN2_AUAD","FIN2POLICE",SPEECH_PARAMS_FORCE_HELI)
// iHeliTimerDialogue = get_game_timer()
// iHeliDialogueStage++
// endif
// break
// case 4
// if not IS_AMBIENT_SPEECH_PLAYING(peds[mpf_pilot].id)
// and not IS_MESSAGE_BEING_DISPLAYED()
// and get_game_Timer() - iHeliTimerDialogue > 25000
// and get_game_timer() - iHeliDelay > 10000
// PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_pilot].id,"FIN2_AUAE","FIN2POLICE",SPEECH_PARAMS_FORCE_HELI)
// iHeliTimerDialogue = get_game_timer()
// iHeliDialogueStage++
// endif
// break
// case 5
// if not IS_AMBIENT_SPEECH_PLAYING(peds[mpf_pilot].id)
// and not IS_MESSAGE_BEING_DISPLAYED()
// and get_game_Timer() - iHeliTimerDialogue > 35000
// and get_game_timer() - iHeliDelay > 10000
// PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_pilot].id,"FIN2_AUAF","FIN2POLICE",SPEECH_PARAMS_FORCE_HELI)
// if GET_PLAYER_WANTED_LEVEL(player_id()) < 2
// and mission_stage < enum_to_int(msf_7_over_the_Edge)
// SET_PLAYER_WANTED_LEVEL(player_id(),2)
// SET_PLAYER_WANTED_LEVEL_NOW(player_id())
// endif
// iHeliTimerDialogue = get_game_timer()
// iHeliDialogueStage++
// endif
// break
// case 6
// if not IS_AMBIENT_SPEECH_PLAYING(peds[mpf_pilot].id)
// and not IS_MESSAGE_BEING_DISPLAYED()
// and get_game_Timer() - iHeliTimerDialogue > 45000
// and get_game_timer() - iHeliDelay > 10000
// PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_pilot].id,"FIN2_AUAG","FIN2POLICE",SPEECH_PARAMS_FORCE_HELI)
// if GET_PLAYER_WANTED_LEVEL(player_id()) < 2
// and mission_stage < enum_to_int(msf_7_over_the_Edge)
// SET_PLAYER_WANTED_LEVEL(player_id(),2)
// SET_PLAYER_WANTED_LEVEL_NOW(player_id())
// endif
// iHeliTimerDialogue = get_game_timer()
// iHeliDialogueStage++
// endif
// break
// endswitch
// endif
//ENDPROC
Proc Manage_DIALOGUE(MSF_MISSION_STAGE_FLAGS mission_Stage_di)
switch mission_stage_di
case msf_1_chase
switch Dialogue_stage
case 0
if IS_ENTITY_IN_ANGLED_AREA(FRANK_ID(),<<2458.07666, 2444.43091, 38>>,<<2452.16919, 2471.42334, 50>>,64)
ADD_PED_FOR_DIALOGUE(convo_struct,1,FRANK_ID(),"FRANKLIN")
if CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_SHOUT",CONV_PRIORITY_MEDIUM)
Dialogue_stage++
endif
endif
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2611.6565, 2000.8644, 30.9074 >>,<<30,30,7>>)
Dialogue_stage++
endif
break
case 1
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2611.6565, 2000.8644, 30.9074 >>,<<30,30,7>>)
if CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_CHSE2",CONV_PRIORITY_MEDIUM)
Dialogue_stage++
endif
ENDIF
if IS_ENTITY_AT_COORD(FRANK_ID(),<<2609.14331, 1803.90552, 25.49314>>,<<13,45,5>>)
Dialogue_stage++
endif
break
case 2
if IS_ENTITY_AT_COORD(FRANK_ID(),<<2609.14331, 1803.90552, 25.49314>>,<<13,45,5>>)
and IS_ENTITY_AT_COORD(vehs[mvf_train].id,<<2609.14331, 1803.90552, 25.49314>>,<<13,45,5>>)
if CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_TRAIN2",CONV_PRIORITY_MEDIUM)
Dialogue_stage++
endif
endif
break
endswitch
break
case msf_2_power_plant
switch Dialogue_stage
case 0
if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
else
Dialogue_stage++
endif
break
case 1
ADD_PED_FOR_DIALOGUE(convo_struct,1,FRANK_ID(),"FRANKLIN")
if CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_CALLS",CONV_PRIORITY_MEDIUM)
Dialogue_stage++
endif
break
case 2
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2704.0027, 1593.4563, 31.9187 >>,<<2,2,2>>)
if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
KILL_ANY_CONVERSATION()
endif
Dialogue_stage++
else
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2725.5, 1590.1, 31.7>>) < 60
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if get_Game_timer() - iAmbDialogueTimer > 8000
and IS_SAFE_TO_DISPLAY_GODTEXT()
CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_AMB",CONV_PRIORITY_MEDIUM)
endif
else
iAmbDialogueTimer = GET_GAME_TIMER()
endif
endif
endif
break
case 3
if isentityalive(MIKE_ID())
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_COW",CONV_PRIORITY_MEDIUM)
Dialogue_stage++
endif
endif
endif
break
case 4
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if get_Game_timer() - iAmbDialogueTimer > 9000
and IS_SAFE_TO_DISPLAY_GODTEXT()
CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_AMB",CONV_PRIORITY_MEDIUM)
endif
else
iAmbDialogueTimer = GET_GAME_TIMER()
endif
break
endswitch
break
case msf_3_confrontation
switch Dialogue_stage
case 0
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2766.9392, 1565.0616, 31.4983 >>,<<3.25,3.25,2.5>>)
if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
endif
ADD_PED_FOR_DIALOGUE(convo_struct,0,MIKE_ID(),"MICHAEL")
Dialogue_stage++
else
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if get_Game_timer() - iambdialogueTimer > 8000
and IS_SAFE_TO_DISPLAY_GODTEXT()
CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_AMB",CONV_PRIORITY_MEDIUM)
endif
else
iAmbDialogueTimer = GET_GAME_TIMER()
endif
endif
break
case 1
if CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_SHOOT",CONV_PRIORITY_MEDIUM)
Dialogue_stage++
endif
break
case 2
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if get_Game_timer() - iambdialogueTimer > 8000
and IS_SAFE_TO_DISPLAY_GODTEXT()
CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_AMB",CONV_PRIORITY_MEDIUM)
endif
else
iAmbDialogueTimer = GET_GAME_TIMER()
endif
break
endswitch
break
case msf_4_heli_appears
switch Dialogue_stage
case 0
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if get_Game_timer() - iambdialogueTimer > 8000
and IS_SAFE_TO_DISPLAY_GODTEXT()
CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_AMB",CONV_PRIORITY_MEDIUM)
endif
else
iAmbDialogueTimer = GET_GAME_TIMER()
endif
break
endswitch
break
case msf_5_shoot_out
switch Dialogue_stage
case 0
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2729.5039, 1530.7422, 39.3167 >>,<<2.0,2.0,4.0>>)
or IS_ENTITY_AT_COORD(FRANK_ID(),<< 2738.4851, 1532.3734, 39.7673 >>,<<2.0,2.0,4.0>>)
or IS_ENTITY_AT_COORD(FRANK_ID(),<< 2754.6116, 1528.1786, 39.8887 >>,<<7.0,7.0,4.0>>)
or is_Entity_at_coord(FRANK_ID(),<< 2741.3200, 1523.0500, 45.2500 >>,<<1.5,1.5,1.0>>)
if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
endif
Dialogue_stage++
else
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if get_Game_timer() - iambdialogueTimer > 8000
and IS_SAFE_TO_DISPLAY_GODTEXT()
CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_AMB",CONV_PRIORITY_MEDIUM)
endif
else
iAmbDialogueTimer = GET_GAME_TIMER()
endif
endif
break
case 1
if isentityalive(MIKE_ID())
ADD_PED_FOR_DIALOGUE(convo_struct,0,MIKE_ID(),"MICHAEL")
if CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_CHAT",CONV_PRIORITY_MEDIUM)
Dialogue_stage++
endif
endif
break
case 2
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if get_Game_timer() - iambdialogueTimer > 8000
and IS_SAFE_TO_DISPLAY_GODTEXT()
CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_AMB",CONV_PRIORITY_MEDIUM)
endif
else
iAmbDialogueTimer = GET_GAME_TIMER()
endif
break
endswitch
break
case msf_6_Ladder_dodge
switch Dialogue_stage
case 0
if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
else
Dialogue_stage++
endif
break
case 1
if CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_POWER",CONV_PRIORITY_MEDIUM)
Dialogue_stage++
endif
break
case 2
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2735.7371, 1576.6788, 64.9689 >>,<<1,1,1>>)
if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
endif
Dialogue_stage++
else
if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
if get_Game_timer() - iambdialogueTimer > 8000
and IS_SAFE_TO_DISPLAY_GODTEXT()
CREATE_CONVERSATION(convo_struct,"FIN2AUD","FIN2_AMB",CONV_PRIORITY_MEDIUM)
endif
else
iAmbDialogueTimer = GET_GAME_TIMER()
endif
endif
break
endswitch
break
endswitch
endproc
proc Display_Placeholder()
if bPlaceholder
#if DEBUG_BUGSTAR
Println("PLACEHOLDER")
DISPLAY_TEXT_WITH_LITERAL_STRING(0.5,0.1,"STRING","PLACEHOLDER")
#endif
endif
endproc
// purpose:off radar/ hud / player control
proc prep_start_cutscene(bool bplayercontrol,vector varea,bool brender = true,bool binterp = false,bool bclearprj = true,bool bclearFire = true,int interptime = default_interp_to_from_game,set_player_control_flags controlflag = 0,bool bphoneaway = true)
display_radar(false)
display_hud(false)
set_player_control(player_id(),bplayercontrol,controlflag)
clear_prints()
clear_help()
render_script_cams(brender,binterp,interptime)
if bclearprj
clear_area_of_projectiles(varea,500)
endif
if bclearFire
STOP_FIRE_IN_RANGE(varea,200)
endif
if IS_PED_IN_ANY_VEHICLE(player_ped_id())
SET_VEHICLE_RADIO_ENABLED(GET_VEHICLE_PED_IS_IN(player_ped_id()),false)
endif
if bphoneaway
hang_up_and_put_away_phone()
endif
endproc
// purpose:on radar/ hud / player control
proc prep_stop_cutscene(bool bplayercontrol,bool brender = false,bool binterp = false,int iduration = default_interp_to_from_game, set_player_control_flags controlflag = 0,bool bCatchup = false)
display_radar(true)
display_hud(true)
set_player_control(player_id(),bplayercontrol,controlflag)
if bCatchup
STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP()
else
render_script_cams(brender,binterp,iduration)
endif
if not brender
destroy_all_cams()
endif
if IS_PED_IN_ANY_VEHICLE(player_ped_id())
SET_VEHICLE_RADIO_ENABLED(GET_VEHICLE_PED_IS_IN(player_ped_id()),true)
endif
bPlaceholder = false
endproc
proc create_dummy_obj(OBJ_STRUCT &obj)
obj.id = CREATE_OBJECT(PROP_GOLF_BALL,obj.pos)
SET_ENTITY_VISIBLE(obj.id,false)
SET_ENTITY_COLLISION(obj.id,false)
FREEZE_ENTITY_POSITION(obj.id,true)
endproc
Proc SET_CS_OUTFITS_AND_EXITS(PED_INDEX Ignore1 = null)
//Michael
if ignore1 != MIKE_ID()
IF DOES_ENTITY_EXIST(MIKE_ID())
IF NOT IS_PED_INJURED(MIKE_ID())
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("MICHAEL", MIKE_ID(), PLAYER_ZERO)
ENDIF
ELSE
SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_MICHAEL, "MICHAEL")
SET_CUTSCENE_PED_COMPONENT_VARIATION("MICHAEL", PED_COMP_TORSO, 22,1)
SET_CUTSCENE_PED_COMPONENT_VARIATION("MICHAEL", PED_COMP_LEG, 26,0)
SET_CUTSCENE_PED_COMPONENT_VARIATION("MICHAEL", PED_COMP_HAND, 0, 0)
SET_CUTSCENE_PED_COMPONENT_VARIATION("MICHAEL", PED_COMP_FEET, 4,0)
SET_CUTSCENE_PED_COMPONENT_VARIATION("MICHAEL", PED_COMP_SPECIAL, 0, 0)
SET_CUTSCENE_PED_COMPONENT_VARIATION("MICHAEL", PED_COMP_SPECIAL2, 0, 0)
SET_CUTSCENE_PED_COMPONENT_VARIATION("MICHAEL", PED_COMP_DECL, 0, 0)
ENDIF
endif
//Franklin
if IsEntityAlive(FRANK_ID())
and ignore1 != FRANK_ID()
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("FRANKLIN", PLAYER_PED_ID(), PLAYER_ONE)
endif
endproc
/// PURPOSE: Checks if previous car is not franklins default place that.
/// Otherwise run CREATE_PLAYER_VEHICLE for franklins default car
/// PARAMS: pos, heading
/// RETURNS: True once car has been placed *CALL EVERY FRAME*
///
func bool Check_Franklins_Car(vector pos, float heading)
//check
if IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
IF (IS_THIS_MODEL_A_CAR(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BIKE(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_BICYCLE(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
OR IS_THIS_MODEL_A_QUADBIKE(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL()))
AND GET_REPLAY_CHECKPOINT_VEHICLE_MODEL() <> BUS
PRINTSTRING("replay checkpoint vehicle is either a CAR, BIKE, BICYCLE or a QUADBIKE so is being created") PRINTNL()
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
while not HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
PRINTSTRING("waiting for checkpoint vehicle model loading") PRINTNL()
wait(0)
endwhile
vehs[mvf_Frank_car].id = CREATE_REPLAY_CHECKPOINT_VEHICLE(pos,heading)
return true
ELSE
if not CREATE_PLAYER_VEHICLE(vehs[mvf_Frank_car].id,char_Franklin,pos, heading,true,VEHICLE_TYPE_CAR)
return false
else
return true
endif
ENDIF
else
if not CREATE_PLAYER_VEHICLE(vehs[mvf_Frank_car].id,char_Franklin,pos, heading,true,VEHICLE_TYPE_CAR)
return false
else
return true
endif
endif
endfunc
proc LOAD_asset_stage(MSF_MISSION_STAGE_FLAGS loadStage)
SWITCH loadStage
CASE msf_0_meet
break
CASE msf_1_chase
Load_Asset_Model(sAssetData,FREIGHT) //train engine
Load_Asset_Model(sAssetData,TANKERCAR) //carridge type tankercar for version 19
Load_Asset_Recording(sAssetData,001,"FIN2") //car chase
BREAK
CASE msf_2_power_plant
Load_Asset_Waypoint(sAssetData,"fin2_mike1")
Load_Asset_AnimDict(sAssetData,"missfinale_b_ig_1")
BREAK
CASE msf_3_confrontation
Load_Asset_AnimDict(sAssetData,"missfinale_b_ig_2")
BREAK
CASE msf_4_heli_appears
break
CASE msf_5_shoot_out
Load_Asset_AnimDict(sAssetData,"missfinale_b_ig_3")
break
CASE msf_6_Ladder_dodge
Load_Asset_AnimDict(sAssetData,"missfinale_b_ig_4")
break
CASE msf_7_over_the_Edge
Load_Asset_AnimDict(sAssetData,"missfinale_b_ig_5")
break
CASE msf_8_passed
break
ENDSWITCH
endproc
PROC GET_SKIP_STAGE_COORD_AND_HEADING(MSF_MISSION_STAGE_FLAGS eStage, VECTOR &vCoord, FLOAT &fHeading)
SWITCH eStage
CASE msf_0_meet vCoord = <<2383.6033, 2612.2979, 46.1600 >> fHeading = 0 BREAK
CASE msf_1_chase vCoord = <<2383.6033, 2612.2979, 46.1600 >> fHeading = 0 BREAK
CASE msf_2_power_plant vCoord = <<2686.5000, 1613.4200, 23.6100 >> fHeading = 0 BREAK
CASE msf_3_confrontation vCoord = <<2745.1167, 1584.7615, 31.4980 >> fHeading = 257.6353 BREAK
CASE msf_4_heli_appears vCoord = <<2768.7725, 1564.3270, 36.6811 >> fHeading = 340.9131 BREAK
CASE msf_5_shoot_out vCoord = <<2758.2583, 1541.8799, 39.3167 >> fHeading = 160.8288 BREAK
CASE msf_6_Ladder_dodge vCoord = <<2738.9934, 1575.4868, 49.6975 >> fHeading = 71.9890 BREAK
CASE msf_7_over_the_Edge vCoord = <<2738.9934, 1575.4868, 49.6975 >> fHeading = 71.9890 BREAK
CASE msf_8_passed vCoord = <<2677.2988, 1600.2403, 23.4956 >> fHeading = -22.33 BREAK
ENDSWITCH
ENDPROC
//------------set ups-------------------------------
PROC SET_UP_GENERAL()
//set peds relationship group
if isentityalive(MIKE_ID())
SET_PED_RELATIONSHIP_GROUP_HASH(MIKE_ID(),REL_Michael)
ADD_PED_FOR_DIALOGUE(convo_struct,0,MIKE_ID(),"MICHAEL",true)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_ID(),true)
SET_PED_ACCURACY(MIKE_ID(),25)
endif
ADD_PED_FOR_DIALOGUE(convo_struct,1,FRANK_ID(),"FRANKLIN",true)//add peds to dialogue
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(FRANK_ID(),true) //block temp task
//peds specials
if DOES_ENTITY_EXIST(vehs[mvf_mike_car].id)
and IS_VEHICLE_DRIVEABLE(vehs[mvf_mike_car].id)
SET_ENTITY_INVINCIBLE(vehs[mvf_mike_car].id,true)
endif
//trains
SET_RANDOM_TRAINS(false)
//begin checking for fail
bfailchecks = true
//weapons
give_weapons()
ENDPROC
PROC SET_UP_MSF_0_MEET()
peds[mpf_frank].id = player_ped_id()
if IS_REPLAY_IN_PROGRESS()
SET_CLOCK_TIME(0,0,0)
//michael's car
while not CREATE_PLAYER_VEHICLE(vehs[mvf_mike_car].id,CHAR_MICHAEL,<< 2378.1196, 2612.7002, 45.6341 >>,181.5441)
wait(0)
endwhile
//michael
while not CREATE_PLAYER_PED_INSIDE_VEHICLE(peds[mpf_mike].id,CHAR_MICHAEL,vehs[mvf_mike_car].id)
wait(0)
endwhile
//franklin
while not Check_Franklins_Car(<<2382.3335, 2610.1470, 45.5779>>, 187.5107)
wait(0)
endwhile
//url:bugstar:2000004 - Setting michaels shit what not created using Create_Michael()
IF NOT IS_PED_INJURED(MIKE_ID())
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_TORSO,22,1)
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_LEG,26,0)
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_feet,4,0)
SET_PED_RELATIONSHIP_GROUP_HASH(MIKE_ID(),REL_Michael)
ADD_PED_FOR_DIALOGUE(convo_struct,0,MIKE_ID(),"MICHAEL",true)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_ID(),true)
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,INFINITE_AMMO,true,true)
SET_PED_COMBAT_ATTRIBUTES(MIKE_ID(),CA_REQUIRES_LOS_TO_SHOOT,false)
SET_PED_ACCURACY(MIKE_ID(),10)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DisableExplosionReactions,true)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_RunFromFiresAndExplosions,false)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DontActivateRagdollFromFire,true)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DontActivateRagdollFromExplosions,true)
SET_PED_PATH_AVOID_FIRE(MIKE_ID(),FALSE)
SET_ENTITY_PROOFS(MIKE_ID(),false,true,true,false,false)
ENDIF
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
ENDIF
endif
ENDPROC
PROC SET_UP_MSF_1_CHASE()
//Time of day
SET_CLOCK_TIME(0,0,0)
//michael's car
while not CREATE_PLAYER_VEHICLE(vehs[mvf_mike_car].id,CHAR_MICHAEL,<< 2378.1196, 2612.7002, 45.6341 >>,181.5441)
wait(0)
endwhile
//michael
while not CREATE_PLAYER_PED_INSIDE_VEHICLE(peds[mpf_mike].id,CHAR_MICHAEL,vehs[mvf_mike_car].id)
wait(0)
endwhile
//franklin
while not Check_Franklins_Car(<<2382.3335, 2610.1470, 45.5779>>, 187.5107)
wait(0)
endwhile
//url:bugstar:2000004 - Setting michaels shit what not created using Create_Michael()
IF NOT IS_PED_INJURED(MIKE_ID())
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_TORSO,22,1)
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_LEG,26,0)
SET_PED_COMPONENT_VARIATION(MIKE_ID(),PED_COMP_feet,4,0)
SET_PED_RELATIONSHIP_GROUP_HASH(MIKE_ID(),REL_Michael)
ADD_PED_FOR_DIALOGUE(convo_struct,0,MIKE_ID(),"MICHAEL",true)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_ID(),true)
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,INFINITE_AMMO,true,true)
SET_PED_COMBAT_ATTRIBUTES(MIKE_ID(),CA_REQUIRES_LOS_TO_SHOOT,false)
SET_PED_ACCURACY(MIKE_ID(),10)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DisableExplosionReactions,true)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_RunFromFiresAndExplosions,false)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DontActivateRagdollFromFire,true)
SET_PED_CONFIG_FLAG(MIKE_ID(),PCF_DontActivateRagdollFromExplosions,true)
SET_PED_PATH_AVOID_FIRE(MIKE_ID(),FALSE)
SET_ENTITY_PROOFS(MIKE_ID(),false,true,true,false,false)
ENDIF
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP(vehs[mvf_Frank_car].id)
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
SET_PED_INTO_VEHICLE(FRANK_ID(),vehs[mvf_Frank_car].id)
ENDIF
IF DOES_ENTITY_EXIST(vehs[mvf_frank_car].id)
IF IS_VEHICLE_DRIVEABLE(vehs[mvf_frank_car].id)
SET_VEHICLE_LIGHTS(vehs[mvf_frank_car].id,FORCE_VEHICLE_LIGHTS_ON)
SET_VEHICLE_LIGHT_MULTIPLIER(vehs[mvf_frank_car].id,2)
SET_VEHICLE_ON_GROUND_PROPERLY(vehs[mvf_frank_car].id)
SET_VEHICLE_ENGINE_ON(vehs[mvf_Frank_car].id,true,true)
ENDIF
ENDIF
if IS_PED_ON_ANY_BIKE(player_ped_id())
GIVE_PED_HELMET(PLAYER_PED_ID(),false)
endif
bCarRunning = true
IF DOES_ENTITY_EXIST(vehs[mvf_mike_car].id)
IF IS_VEHICLE_DRIVEABLE(vehs[mvf_mike_car].id)
vehs[mvf_mike_car].blip = CREATE_BLIP_FOR_VEHICLE(vehs[mvf_mike_car].id,true)
SET_VEHICLE_LIGHTS(vehs[mvf_mike_car].id,FORCE_VEHICLE_LIGHTS_ON)
ENDIF
ENDIF
//train
if not DOES_ENTITY_EXIST(vehs[mvf_train].id)
vehs[mvf_train].id = CREATE_MISSION_TRAIN(TRAIN_CONFIG,V_TRAIN_START,true)
endif
TRIGGER_MUSIC_EVENT("FINB_RESTART_CHASE")
clear_area(<< 2387.6033, 2551.2979, 46.2726 >>,500,false)
print_now("FIN2_CHASE",DEFAULT_GOD_TEXT_TIME,1)
ENDPROC
PROC SET_UP_MSF_2_POWERPLANT()
//time of day
SET_CLOCK_TIME(22,30,0)
//mike
while not CREATE_PLAYER_VEHICLE(vehs[mvf_mike_car].id,CHAR_MICHAEL,<< 2682.6819, 1607.4335, 23.4947 >>, 66.2467)
wait(0)
endwhile
while not Create_michael(<< 2675.8303, 1593.1636, 31.4980 >>,266.7406)
wait(0)
endwhile
//franklin
while not Check_Franklins_Car(<< 2689.9885, 1615.6116, 23.6365 >>, 146.5498)
wait(0)
endwhile
SET_VEHICLE_DOOR_OPEN(vehs[mvf_frank_car].id,SC_DOOR_FRONT_LEFT)
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
ENDIF
TRIGGER_MUSIC_EVENT("FINB_RESTART_ARRIVE")
clear_area(<< 2691.3738, 1641.8214, 24.2936 >>,500,false)
ENDPROC
PROC SET_UP_MSF_3_CONFRONTATION()
//time of day
SET_CLOCK_TIME(22,45,0)
//franklin
while not Check_Franklins_Car(<< 2686.7937, 1617.0187, 23.6144 >>, 97.9135)
wait(0)
endwhile
//mike
while not CREATE_PLAYER_VEHICLE(vehs[mvf_mike_car].id,CHAR_MICHAEL,<< 2682.6819, 1607.4335, 23.4947 >>, 66.2467)
wait(0)
endwhile
while not Create_michael(<< 2752.1804, 1561.7091, 39.3163 >>,0)
wait(0)
endwhile
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
ENDIF
//misc
bOnFoot = true
TRIGGER_MUSIC_EVENT("FINB_RESTART_ARRIVE")
clear_area(<< 2691.3738, 1641.8214, 24.2936 >>,500,false)
FORCE_PED_MOTION_STATE(FRANK_ID(),MS_ON_FOOT_SPRINT,TRUE,FAUS_CUTSCENE_EXIT)
ENDPROC
PROC SET_UP_MSF_4_HELI()
//time of day
SET_CLOCK_TIME(22,50,0)
//franklin
while not Check_Franklins_Car(<< 2686.7937, 1617.0187, 23.6144 >>, 97.9135)
wait(0)
endwhile
//mike
while not CREATE_PLAYER_VEHICLE(vehs[mvf_mike_car].id,CHAR_MICHAEL,<< 2682.6819, 1607.4335, 23.4947 >>, 66.2467)
wait(0)
endwhile
while not Create_michael(<<2761.1631, 1549.1521, 39.3377>>,336.6246)
wait(0)
endwhile
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
ENDIF
//misc
TRIGGER_MUSIC_EVENT("FINB_RESTART_STEPS")
bOnFoot = true
clear_area(<< 2762.2683, 1555.8557, 39.3163 >>,500,false)
FORCE_PED_MOTION_STATE(FRANK_ID(),MS_ON_FOOT_SPRINT,TRUE,FAUS_CUTSCENE_EXIT)
ENDPROC
PROC SET_UP_MSF_5_SHOOT_OUT()
//time of day
SET_CLOCK_TIME(23,0,0)
while not Check_Franklins_Car(<< 2686.7937, 1617.0187, 23.6144 >>, 97.9135)
wait(0)
endwhile
//mike
while not CREATE_PLAYER_VEHICLE(vehs[mvf_mike_car].id,CHAR_MICHAEL,<< 2682.6819, 1607.4335, 23.4947 >>, 66.2467)
wait(0)
endwhile
while not Create_michael(<< 2740.3176, 1521.1514, 44.4857 >>, 326.7082)
wait(0)
endwhile
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
ENDIF
//misc
TRIGGER_MUSIC_EVENT("FINB_RESTART_STEPS")
bOnFoot = true
clear_area(<< 2758.2583, 1541.8799, 39.3167 >>,500,false)
FORCE_PED_MOTION_STATE(FRANK_ID(),MS_ON_FOOT_SPRINT,TRUE,FAUS_CUTSCENE_EXIT)
ENDPROC
PROC SET_UP_MSF_6_LADDER_DODGE()
//time of day
SET_CLOCK_TIME(0,0,0)
while not Check_Franklins_Car(<< 2686.7937, 1617.0187, 23.6144 >>, 97.9135)
wait(0)
endwhile
//mike
while not CREATE_PLAYER_VEHICLE(vehs[mvf_mike_car].id,CHAR_MICHAEL,<< 2682.6819, 1607.4335, 23.4947 >>, 66.2467)
wait(0)
endwhile
while not CREATE_PLAYER_PED_ON_FOOT(peds[mpf_mike].id,CHAR_MICHAEL,<< 2734.5884, 1580.2417, 65.5234 >>, 326.7082)
wait(0)
endwhile
Create_michael(<< 2734.5884, 1580.2417, 65.5234 >>, 326.7082)
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
ENDIF
//misc
TRIGGER_MUSIC_EVENT("FINB_RESTART_CLIMB")
bOnFoot = true
clear_area(<< 2738.9934, 1575.4868, 49.6975 >>,500,false)
ENDPROC
PROC SET_UP_MSF_7_OVER_THE_EDGE()
//time of day
SET_CLOCK_TIME(0,0,0)
while not Check_Franklins_Car(<< 2686.7937, 1617.0187, 23.6144 >>, 97.9135)
wait(0)
endwhile
//mike
while not CREATE_PLAYER_VEHICLE(vehs[mvf_mike_car].id,CHAR_MICHAEL,<< 2682.6819, 1607.4335, 23.4947 >>, 66.2467)
wait(0)
endwhile
while not CREATE_PLAYER_PED_ON_FOOT(peds[mpf_mike].id,CHAR_MICHAEL,<< 2735.6265, 1577.7052, 65.5224 >>, 326.7082 )
wait(0)
endwhile
Create_michael(<< 2734.5884, 1580.2417, 65.5234 >>, 326.7082)
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
ENDIF
//misc
bOnFoot = true
clear_area(<< 2738.9934, 1575.4868, 49.6975 >>,500,false)
ENDPROC
PROC su_passed()
IF IS_REPLAY_BEING_SET_UP()
END_REPLAY_SETUP()
Else
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False)
ENDIF
endproc
// -----------------------------------------------------------------------------------------------------------
// Mission Cleanup
// -----------------------------------------------------------------------------------------------------------
PROC Mission_Cleanup()
TRIGGER_MUSIC_EVENT("FINB_FAIL")
SET_LIGHTS_CUTOFF_DISTANCE_TWEAK(0)
//For bug 1847954
CLEAR_PICKUP_REWARD_TYPE_SUPPRESSION(PICKUP_REWARD_TYPE_WEAPON)
IF IS_CUTSCENE_ACTIVE()
STOP_CUTSCENE_IMMEDIATELY()
REMOVE_CUTSCENE()
ENDIF
// IF IS_DECAL_ALIVE(decalBlood[0])
// REMOVE_DECAL(decalBlood[0])
// ENDIF
IF NOT IS_SPECIAL_ABILITY_ENABLED(PLAYER_ID())
ENABLE_SPECIAL_ABILITY(PLAYER_ID(), TRUE)
ENDIF
END_SRL()
//-------------------peds-----------------------
//all peds are no longer needed except the player ped
for i = 0 TO Enum_to_int(MPF_NUM_OF_PEDS)-1
if DOES_ENTITY_EXIST(peds[i].id)
AND (NOT IS_PED_INJURED(peds[i].id))
if peds[i].id != player_ped_id()
SAFE_RELEASE_PED(peds[i].id)
endif
if DOES_BLIP_EXIST(peds[i].blip)
REMOVE_BLIP(peds[i].blip)
endif
endif
endfor
if not IS_PED_INJURED(player_ped_id())
CLEAR_PED_TASKS(player_ped_id())
endif
//---------------------vehs-----------------------
for i = 0 TO Enum_to_int(MVF_NUM_OF_VEH)-1
if DOES_ENTITY_EXIST(vehs[i].id)
SAFE_RELEASE_VEHICLE(vehs[i].id)
endif
if DOES_BLIP_EXIST(vehs[i].blip)
REMOVE_BLIP(vehs[i].blip)
endif
endfor
//-------------------- objects -----------------------
SAFE_DELETE_OBJECT(Weapon_Object)
for i = 0 to enum_to_int(OBJ_NUM_OF_OBJECTS)-1
if DOES_ENTITY_EXIST(objs[i].id)
SAFE_RELEASE_OBJECT(objs[i].id)
endif
endfor
//-------------------Destroy-----------------------
CLEAR_PRINTS()
CLEAR_HELP()
//Only clear up camera's if not mission passed.
IF scriptCamsStopped = FALSE
DESTROY_ALL_CAMS()
DISPLAY_RADAR(true)
DISPLAY_HUD(true)
Prep_stop_Cutscene(true)
RENDER_SCRIPT_CAMS(false,false)
ENDIF
KILL_ANY_CONVERSATION()
if DOES_BLIP_EXIST(blip_objective)
remove_blip(blip_objective)
endif
KILL_CHASE_HINT_CAM(sHintCam)
CLEAR_MISSION_LOCATE_STUFF(sLocatesData)
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
//--------------------Resets-----------------------
//wanted level for mission reset to normal
SET_WANTED_LEVEL_MULTIPLIER(1)
if not IS_PED_INJURED(player_ped_id())
CLEAR_PLAYER_WANTED_LEVEL(player_id())
endif
SET_RANDOM_TRAINS(true)
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, true)
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, true)
//SET_PED_DENSITY_MULTIPLIER(1)
SET_PLAYER_PED_DATA_IN_CUTSCENES()
DISABLE_TAXI_HAILING(false)
DISABLE_CHEAT(CHEAT_TYPE_FAST_RUN, FALSE)
DISABLE_CHEAT(CHEAT_TYPE_SUPER_JUMP, FALSE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(TAILGATER,false)
SET_VEHICLE_MODEL_IS_SUPPRESSED(BUFFALO,false)
REMOVE_SCENARIO_BLOCKING_AREAS()
bfailchecks = false
bFollowDisplayed = false
bOnFoot = false
ASSISTED_MOVEMENT_REMOVE_ROUTE("finalB1sta")
ASSISTED_MOVEMENT_REMOVE_ROUTE("finaBroute1A")
ASSISTED_MOVEMENT_REMOVE_ROUTE("finalbroute2")
ASSISTED_MOVEMENT_REMOVE_ROUTE("finalbround")
ASSISTED_MOVEMENT_REMOVE_ROUTE("finalb1st")
CLEAR_WEATHER_TYPE_PERSIST()
//-------------------------------------------------
RELEASE_MISSION_AUDIO_BANK()
CLEANUP_PC_CONTROLS()
SET_PLAYER_CONTROL(player_id(),true)
PRINTSTRING("...Finale B Mission Cleanup")
PRINTNL()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Mission Pass
// -----------------------------------------------------------------------------------------------------------
PROC Mission_Passed()
PRINTSTRING("...Finale B Mission Passed")
PRINTNL()
g_iFinaleCreditsToPlay = 1
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(FINB_KILLMIC)
PUT_DEAD_CHARACTERS_PROPERTIES_BACK_ON_MARKET(CHAR_MICHAEL)
AWARD_ACHIEVEMENT_FOR_MISSION(ACH04) // To live or die in los santos
IF IS_REPEAT_PLAY_ACTIVE()
g_MissionStatSystemSuppressVisual = TRUE
TRIGGER_MISSION_STATS_UI(TRUE, TRUE)
ENDIF
Mission_Flow_Mission_Passed(true)
IF IS_REPEAT_PLAY_ACTIVE()
g_bMissionStatSystemBlocker = FALSE
ENDIF
Mission_Cleanup()
TERMINATE_THIS_THREAD()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Mission Fail
// -----------------------------------------------------------------------------------------------------------
PROC Mission_Failed(MFF_MISSION_FAIL_FLAGS fail_condition = mff_default)
TRIGGER_MUSIC_EVENT("FINB_FAIL")
STRING strReason = ""
//show fail message
SWITCH fail_condition
// CASE mff_debug_fail
// strReason = "FIN2_FAILDB"
// BREAK
case mff_lost_mike
strReason = "FIN2_FAIL1"
break
case mff_police
strReason = "FIN2_FAIL2"
break
DEFAULT
strReason = "FIN2_FAILDF"
BREAk
ENDSWITCH
bfailchecks = false
MISSION_FLOW_MISSION_FAILED_WITH_REASON(strReason)
WHILE NOT GET_MISSION_FLOW_SAFE_TO_CLEANUP()
if IS_CUTSCENE_ACTIVE()
SET_CUTSCENE_FADE_VALUES()
endif
WAIT(0)
ENDWHILE
MISSION_CLEANUP()
TERMINATE_THIS_THREAD()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// MISSION STAGE MANAGEMENT
// -----------------------------------------------------------------------------------------------------------
PROC Mission_stage_management()
SWITCH stageswitch
CASE STAGESWITCH_REQUESTED
#if IS_DEBUG_BUILD
PRINTLN("[stageManagement] mission_stage switch requested from mission_stage:", mission_stage, "to mission_stage", requestedStage)
#endif
stageswitch = STAGESWITCH_EXITING
mission_substage = STAGE_EXIT
BREAK
CASE STAGESWITCH_EXITING
#if IS_DEBUG_BUILD
PRINTLN("[StageManagement] Exiting mission_stage: ", mission_stage)
#endif
stageSwitch = STAGESWITCH_ENTERING
mission_substage = STAGE_ENTRY
Dialogue_stage = STAGE_ENTRY
mission_stage = requestedStage
BREAK
CASE STAGESWITCH_ENTERING
#if IS_DEBUG_BUILD
PRINTLN("[StageManagement] Entered mission_stage: ", mission_stage)
#endif
requestedStage = -1
stageSwitch = STAGESWITCH_IDLE
BREAK
CASE STAGESWITCH_IDLE
IF (GET_GAME_TIMER() - iStageTimer) > 1500
#if IS_DEBUG_BUILD
PRINTLN("[StageManagement] mission_stage: ", mission_stage, " mission_substage: ", mission_substage, " Dialogue stage: ",Dialogue_stage)
#endif
iStageTimer = GET_GAME_TIMER()
ENDIF
BREAK
ENDSWITCH
ENDPROC
FUNC BOOL Mission_Set_Stage(MSF_MISSION_STAGE_FLAGS newStage)
If stageswitch = STAGESWITCH_IDLE
requestedstage = ENUM_TO_INT(newStage)
stageswitch = STAGESWITCH_REQUESTED
return True
else
return false
endif
ENDFUNC
PROC RESET_EVERYTHING()
IF IS_CUTSCENE_ACTIVE()
STOP_CUTSCENE_IMMEDIATELY()
REMOVE_CUTSCENE()
WHILE IS_CUTSCENE_ACTIVE()
WAIT(0)
ENDWHILE
ENDIF
//-------------------peds-----------------------
for i = 0 TO Enum_to_int(MPF_NUM_OF_PEDS)-1
if DOES_ENTITY_EXIST(peds[i].id)
AND (NOT IS_PED_INJURED(peds[i].id))
if IS_PED_IN_ANY_VEHICLE(peds[i].id)
SET_PED_COORDS_NO_GANG(peds[i].id,(GET_ENTITY_COORDS(GET_VEHICLE_PED_IS_IN(peds[i].id))+<<0,-2,0>>))
endif
if peds[i].id != player_ped_id()
SAFE_DELETE_PED(peds[i].id)
endif
endif
endfor
//-------------------vehs-----------------------
for i = 0 TO Enum_to_int(MVF_NUM_OF_VEH)-1
if DOES_ENTITY_EXIST(vehs[i].id)
if vehs[i].id != vehs[mvf_train].id
SAFE_DELETE_VEHICLE(vehs[i].id)
endif
if DOES_BLIP_EXIST(vehs[i].blip)
REMOVE_BLIP(vehs[i].blip)
endif
endif
endfor
if DOES_ENTITY_EXIST(vehs[mvf_train].id)
SET_MISSION_TRAIN_AS_NO_LONGER_NEEDED(vehs[mvf_train].id)
endif
SAFE_DELETE_OBJECT(Weapon_Object)
//-------------------Resets---------------------
SET_WANTED_LEVEL_MULTIPLIER(0)
CLEAR_PLAYER_WANTED_LEVEL(player_id())
SET_POLICE_IGNORE_PLAYER(player_id(),false)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
RENDER_SCRIPT_CAMS(false,false)
if not IS_PED_INJURED(player_ped_id())
CLEAR_PED_TASKS(player_ped_id())
endif
Prep_stop_Cutscene(true)
bcutsceneLoaded = false
bfailchecks = false
bFollowDisplayed = false
bOnFoot = false
bCarRunning = false
bcs_frank = false
bcs_mike = false
bcs_mikeCar = false
bcs_gun = false
//bcs_cam = false
//------------------Destroys--------------------
// IF IS_DECAL_ALIVE(decalBlood[0])
// REMOVE_DECAL(decalBlood[0])
// ENDIF
CLEAR_PRINTS()
CLEAR_HELP()
DESTROY_ALL_CAMS()
KILL_ANY_CONVERSATION()
SET_INSTANCE_PRIORITY_HINT( INSTANCE_HINT_NONE )
KILL_CHASE_HINT_CAM(sHintCam)
//blip
if DOES_BLIP_EXIST(blip_objective)
remove_blip(blip_objective)
endif
CLEAR_MISSION_LOCATE_STUFF(sLocatesData)
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
//objects
for i = 0 to enum_to_int(OBJ_NUM_OF_OBJECTS)-1
if DOES_ENTITY_EXIST(objs[i].id)
if not IS_ENTITY_A_MISSION_ENTITY(objs[i].id)
DELETE_OBJECT(objs[i].id)
else
SET_OBJECT_AS_NO_LONGER_NEEDED(objs[i].id)
endif
endif
endfor
ENDPROC
PROC MISSION_STAGE_SKIP()
//a skip has been made
IF bDoSkip = TRUE
//begin the skip if the switching is idle
if stageSwitch = STAGESWITCH_IDLE
if not IS_SCREEN_FADED_OUT()
IF NOT IS_SCREEN_FADING_OUT()
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
ENDIF
else
Mission_Set_Stage(INT_TO_ENUM(MSF_MISSION_STAGE_FLAGS, iSkipToStage))
endif
//Needs to be carried out before states own entering stage
ELIF stageSwitch = STAGESWITCH_ENTERING
RENDER_SCRIPT_CAMS(false,false)
SET_PLAYER_CONTROL(player_id(), true)
RESET_EVERYTHING()
Start_Skip_Streaming(sAssetData)
// -------------------------- Not a Replay ----------------------------
IF NOT IS_REPLAY_BEING_SET_UP()
VECTOR vWarpCoord
FLOAT fWarpHeading
GET_SKIP_STAGE_COORD_AND_HEADING(int_to_enum(msf_mission_stage_flags, iSkipToStage), vWarpCoord, fWarpHeading)
SET_ENTITY_COORDS(PLAYER_PED_ID(), vWarpCoord)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fWarpHeading)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
Load_Asset_NewLoadScene_Sphere(sAssetData, vWarpCoord, 50.0)
ENDIF
// --------------------------------------------------------------------
load_asset_stage(int_to_enum(MSF_MISSION_STAGE_FLAGS,iSkipToStage))
WHILE NOT Update_Skip_Streaming(sAssetData)
WAIT(0)
ENDWHILE
SWITCH int_to_enum(MSF_MISSION_STAGE_FLAGS, mission_stage)
case msf_0_meet set_up_msf_0_meet() break
case msf_1_chase set_up_msf_1_chase() break
case msf_2_power_plant set_up_msf_2_powerplant() break
case msf_3_confrontation set_up_msf_3_confrontation()break
case msf_4_heli_appears set_up_msf_4_heli() break
case msf_5_shoot_out set_up_msf_5_shoot_out() break
case msf_6_ladder_dodge set_up_msf_6_ladder_dodge() break
case msf_7_over_the_edge set_up_msf_7_over_the_edge()break
case msf_8_passed su_passed() break
ENDSWITCH
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
SET_UP_GENERAL()
bDoSkip = FALSE
IF NOT IS_REPLAY_BEING_SET_UP()
NEW_LOAD_SCENE_STOP()
endif
ENDIF
#if Is_debug_build
//Check is a skip being asked for, dont allow skip during setup stage
ELIF LAUNCH_MISSION_STAGE_MENU(zMenuNames, iSkipToStage, mission_stage, TRUE)
IF iSkipToStage > ENUM_TO_INT(msf_7_over_the_Edge)
MISSION_PASSED()
ELSE
iSkipToStage = CLAMP_INT(iSkipToStage, 0, ENUM_TO_INT(MSF_NUM_OF_STAGES)-1)
if IS_SCREEN_FADED_IN()
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
bDoSkip = true
endif
endif
bis_zSkip = true
#endif
ENDIF
ENDPROC
PROC MISSION_CHECKS()
//Cutscene outfits
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
SET_CS_OUTFITS_AND_EXITS()
PRINTSTRING("REQUESTING CUTSCENE ASSETS NOW") PRINTNL()
ENDIF
//------------------death checks-------------------------------
for i = 0 to enum_to_int(MPF_NUM_OF_PEDS) -1
if not IsEntityAlive(peds[i].id)
if i != enum_to_int(mpf_dead_guy)
SET_PED_AS_NO_LONGER_NEEDED(peds[i].id)
endif
ENDIF
ENDFOR
for i = 0 to enum_to_int(MVF_NUM_OF_VEH) -1
if not IsEntityAlive(vehs[i].id)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehs[i].id)
ENDIF
ENDFOR
//-------------------multi stage checks------------------------
//Bug fix 1496887
ASSISTED_MOVEMENT_OVERRIDE_LOAD_DISTANCE_THIS_FRAME(20)
//disable
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK1)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_LIGHT)
DISABLE_CONTROL_ACTION(Player_CONTROL,INPUT_MELEE_ATTACK_LIGHT)
if mission_stage >= ENUM_TO_INT(msf_2_power_plant)
and bfailchecks
if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(FRANK_ID(),<<2727.14795, 1557.29956, 23.50072>>) > 170
Mission_Failed(mff_lost_mike)
elif GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(FRANK_ID(),<<2727.14795, 1557.29956, 23.50072>>) > 150
PRINT_NOW("FIN2_LOST",DEFAULT_GOD_TEXT_TIME,1)
endif
endif
//mikes health
if isentityalive(MIKE_ID())
and mission_stage < ENUM_TO_INT(msf_7_over_the_Edge)
SET_ENTITY_INVINCIBLE(MIKE_ID(),true)
SET_PED_RESET_FLAG(MIKE_ID(), PRF_DisableAssistedAimLockon, TRUE) //fix for B*1988537
endif
// stop player getting in vehicles after the on foot section has started
if bOnFoot
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_ENTER)
endif
//fake interior
if DOES_ENTITY_EXIST(player_ped_id())
vector playerpos
playerpos = GET_ENTITY_COORDS(player_ped_id())
if mission_stage > ENUM_TO_INT(msf_1_chase)
if playerpos.z > 66
SET_RADAR_AS_INTERIOR_THIS_FRAME(GET_HASH_KEY("V_FakePowerStationCS503"),2795, 1600,0,8)
elif playerpos.z > 50
SET_RADAR_AS_INTERIOR_THIS_FRAME(GET_HASH_KEY("V_FakePowerStationCS503"),2795, 1600,0,7)
elif playerpos.z > 47
SET_RADAR_AS_INTERIOR_THIS_FRAME(GET_HASH_KEY("V_FakePowerStationCS503"),2795, 1600,0,6)
elif playerpos.z > 44.5
SET_RADAR_AS_INTERIOR_THIS_FRAME(GET_HASH_KEY("V_FakePowerStationCS503"),2795, 1600,0,5)
elif playerpos.z > 41.5
SET_RADAR_AS_INTERIOR_THIS_FRAME(GET_HASH_KEY("V_FakePowerStationCS503"),2795, 1600,0,4)
elif playerpos.z > 39
SET_RADAR_AS_INTERIOR_THIS_FRAME(GET_HASH_KEY("V_FakePowerStationCS503"),2795, 1600,0,3)
elif playerpos.z > 33
SET_RADAR_AS_INTERIOR_THIS_FRAME(GET_HASH_KEY("V_FakePowerStationCS503"),2795, 1600,0,2)
elif playerpos.z > 25
SET_RADAR_AS_INTERIOR_THIS_FRAME(GET_HASH_KEY("V_FakePowerStationCS503"),2795, 1600,0,1)
else
SET_RADAR_AS_INTERIOR_THIS_FRAME(GET_HASH_KEY("V_FakePowerStationCS503"),2795, 1600,0,0)
endif
endif
endif
//mission stage checks done inside proc
Display_Placeholder()
Manage_DIALOGUE(int_to_enum(MSF_MISSION_STAGE_FLAGS,mission_Stage))
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(PLAYER_PED_ID(), FINB_DAMAGE)
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), FINB_CAR_DAMAGE)
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
ELSE
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(NULL)
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(NULL, FINB_CAR_DAMAGE)
ENDIF
ENDPROC
PROC MISSION_SETUP()
IF IS_PLAYER_PLAYING(PLAYER_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
ENDIF
IF IS_REPEAT_PLAY_ACTIVE()
//Create Michael and his car now.
IF NOT DOES_ENTITY_EXIST(vehs[mvf_mike_car].id)
WHILE NOT CREATE_PLAYER_VEHICLE(vehs[mvf_mike_car].id, CHAR_MICHAEL, <<2394.1, 2622.0, 45.8>>, 0, TRUE, VEHICLE_TYPE_CAR)
PRINTSTRING("waiting for Michael's car to be created") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
IF NOT DOES_ENTITY_EXIST(peds[mpf_mike].id)
WHILE NOT CREATE_PLAYER_PED_ON_FOOT(peds[mpf_mike].id, CHAR_MICHAEL, <<2398.6, 2620.9, 45.5>>, 0, TRUE)
PRINTSTRING("waiting for Michael to be created") PRINTNL()
WAIT(0)
ENDWHILE
SET_RAGDOLL_BLOCKING_FLAGS(MIKE_ID(),eMikeRBFs )
ENDIF
ENDIF
SET_PLAYER_PED_DATA_IN_CUTSCENES(false)
SET_WEATHER_TYPE_PERSIST("EXTRASUNNY")
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, false)
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, false)
SET_WANTED_LEVEL_MULTIPLIER(0)
CLEAR_PLAYER_WANTED_LEVEL(player_id())
SET_VEHICLE_MODEL_IS_SUPPRESSED(TAILGATER,true)
SET_VEHICLE_MODEL_IS_SUPPRESSED(BUFFALO2,true)
//player is franklin
peds[mpf_frank].id = Player_ped_id()
// set realationships
// ADD_RELATIONSHIP_GROUP("michael_rel", REL_Michael)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,REL_Michael,RELGROUPHASH_PLAYER)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE,RELGROUPHASH_PLAYER,REL_Michael)
ADD_SCENARIO_BLOCKING_AREA(<<2644.98730, 1340.44934, 20>>,<<2839.82617, 1728.39014, 25>>)
ASSISTED_MOVEMENT_REQUEST_ROUTE("finalB1sta")
ASSISTED_MOVEMENT_REQUEST_ROUTE("finaBroute1A")
ASSISTED_MOVEMENT_REQUEST_ROUTE("finalbroute2")
ASSISTED_MOVEMENT_REQUEST_ROUTE("finalbround")
ASSISTED_MOVEMENT_REQUEST_ROUTE("finalb1st")
DISABLE_CHEAT(CHEAT_TYPE_FAST_RUN, TRUE)
DISABLE_CHEAT(CHEAT_TYPE_SUPER_JUMP, TRUE)
//is the player replaying previous stage
IF Is_Replay_In_Progress()
IF Is_Replay_In_Progress()
iSkipToStage = Get_Replay_Mid_Mission_Stage()
if g_bShitskipAccepted
iSkipToStage++
if iskipToStage >= 8
iskipToStage = 8
endif
endif
if iSkipToStage = 0
iSkipToStage = 1
endif
bis_zSkip = false
endif
// New replay streaming
IF IS_REPLAY_IN_PROGRESS()
VECTOR vSkipToCoord
FLOAT fSkipToHeading
GET_SKIP_STAGE_COORD_AND_HEADING(int_to_enum(MSF_MISSION_STAGE_FLAGS,iSkipToStage), vSkipToCoord, fSkipToHeading)
START_REPLAY_SETUP(vSkipToCoord, fSkipToHeading)
ENDIF
bDoSkip = TRUE
ELSE //start from begining
IF IS_REPEAT_PLAY_ACTIVE()
iSkipToStage = 0
ENDIF
bis_zSkip = false
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(0,"Stage 0: meet")
mission_stage = enum_to_int(msf_0_meet)
Mission_Set_Stage(int_to_enum(MSF_MISSION_STAGE_FLAGS, mission_stage))
load_asset_stage(msf_0_meet)
PRINTLN("Start opening Loading")
WHILE NOT Update_Skip_Streaming(sAssetData)
WAIT(0)
ENDWHILE
PRINTLN("End opening Loading")
SET_UP_MSF_0_MEET()
SET_UP_GENERAL() //has to be after peds creation
ENDIF
DISABLE_TAXI_HAILING(true)
//INFORM_MISSION_STATS_OF_MISSION_START_FINALE_2()
mission_substage = STAGE_ENTRY
ENDPROC
Proc timelapse()
sTimelapse.currentTimeOfDay = GET_CURRENT_TIMEOFDAY()
IF sTimelapse.iTimelapseCut = 0
if not IS_CUTSCENE_ACTIVE()
bTODstart = false
REQUEST_CUTSCENE("FIN_B_MCS_1_aandb")
// SET_CS_OUTFITS_AND_EXITS()
bcs_frank = false
bcs_mike = false
bcs_mikeCar = false
bcs_gun = false
endif
ENDIF
while not DO_TIMELAPSE(SP_MISSION_FINALE_B,sTimelapse,true,false,false,true,TRUE)
//Create Michael and his car now.
IF sTimelapse.iTimelapseCut = 2
IF NOT DOES_ENTITY_EXIST(vehs[mvf_mike_car].id)
CREATE_PLAYER_VEHICLE(vehs[mvf_mike_car].id, CHAR_MICHAEL, <<2394.1, 2622.0, 45.8>>, 0, TRUE, VEHICLE_TYPE_CAR)
ENDIF
IF NOT DOES_ENTITY_EXIST(peds[mpf_mike].id)
// CREATE_PLAYER_PED_ON_FOOT(peds[mpf_mike].id, CHAR_MICHAEL, <<2398.6, 2620.9, 45.5>>, 0, TRUE)
Create_michael(<<2398.6, 2620.9, 45.5>>, 0)
ENDIF
ENDIF
wait(0)
IF sTimelapse.iTimelapseCut = 2
and not bTODstart
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE,DEFAULT,FALSE)
DISPLAY_RADAR(false)
display_hud(false)
//Grab the players car now before the area is cleared.
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
vehs[mvf_Frank_car].id = GET_MISSION_START_VEHICLE_INDEX()
IF DOES_ENTITY_EXIST(vehs[mvf_Frank_car].id)
SET_ENTITY_AS_MISSION_ENTITY(vehs[mvf_Frank_car].id)
ENDIF
ENDIF
CLEAR_AREA(<< -116.5982, 493.4021, 136.6638 >>,50,true)
CLEAR_AREA(<< 2381.4883, 2619.8186, 45.6327 >>,200,true)
// SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("FRANKLIN", PLAYER_PED_ID(), GET_PLAYER_PED_MODEL(CHAR_FRANKLIN))
// SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("MICHAEL", peds[mpf_mike].id, GET_PLAYER_PED_MODEL(CHAR_MICHAEL))
bTODstart = true
endif
endwhile
endproc
Proc Run_Init_CutScene()
#IF IS_DEBUG_BUILD
IF IS_CUTSCENE_ACTIVE()
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
STOP_CUTSCENE()
REMOVE_CUTSCENE()
WHILE IS_CUTSCENE_ACTIVE()
WAIT(0)
ENDWHILE
ENDIF
ENDIF
#ENDIF
IF NOT bcutsceneLoaded
if NOT IS_CUTSCENE_ACTIVE()
REQUEST_CUTSCENE("FIN_B_MCS_1_aandb")
// SET_CS_OUTFITS_AND_EXITS()
bcs_frank = false
bcs_mike = false
bcs_mikeCar = false
bcs_gun = false
PRINTSTRING("Waiting for IS_CUTSCENE_ACTIVE to return TRUE") PRINTNL()
WAIT(0)
endif
IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
//pre mission setup
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE,DEFAULT,FALSE)
IF DOES_ENTITY_EXIST(peds[mpf_mike].id)
REGISTER_ENTITY_FOR_CUTSCENE(peds[mpf_mike].id,"MICHAEL",CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
// SET_CUTSCENE_PED_PROP_VARIATION("MICHAEL", ANCHOR_HEAD, 0, 0)
ENDIF
IF DOES_ENTITY_EXIST(vehs[mvf_mike_car].id)
REGISTER_ENTITY_FOR_CUTSCENE(vehs[mvf_mike_car].id,"Michaels_car",CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
if not HAS_PED_GOT_WEAPON(FRANK_ID(),WEAPONTYPE_PISTOL)
GIVE_WEAPON_TO_PED(FRANK_ID(),WEAPONTYPE_PISTOL,25,true,true)
endif
Weapon_Object = CREATE_WEAPON_OBJECT_FROM_PED_WEAPON_WITH_COMPONENTS(FRANK_ID(),WEAPONTYPE_PISTOL)
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "FRANKLIN", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
REGISTER_ENTITY_FOR_CUTSCENE(Weapon_Object, "Franklins_weapon", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
START_CUTSCENE()
CLEAR_PED_PROP(PLAYER_PED_ID(), ANCHOR_HEAD)
CLEAR_PED_PROP(peds[mpf_mike].id, ANCHOR_HEAD)
bmusicTriggerStart = false
bcutsceneLoaded = TRUE
ENDIF
ENDIF
endproc
// -----------------------------------------------------------------------------------------------------------
// Mission stages
// -----------------------------------------------------------------------------------------------------------
proc ST_0_MEET()
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_KillMichael")
switch mission_substage
case STAGE_ENTRY
//Flags
ringToneStarted = FALSE
ringToneStopped = FALSE
//Grab the players car now before the area is cleared.
IF NOT DOES_ENTITY_EXIST(vehs[mvf_Frank_car].id)
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
vehs[mvf_Frank_car].id = GET_MISSION_START_VEHICLE_INDEX()
IF DOES_ENTITY_EXIST(vehs[mvf_Frank_car].id)
SET_ENTITY_AS_MISSION_ENTITY(vehs[mvf_Frank_car].id)
ENDIF
ENDIF
ENDIF
if IS_REPLAY_IN_PROGRESS()
and not bis_zSkip
SET_CLOCK_TIME(0,0,0)
CLEAR_AREA(<< 2381.4883, 2619.8186, 45.6327 >>,200,true)
mission_substage = 3
else
Run_Init_CutScene()
IF bcutsceneLoaded
mission_substage++
endif
endif
break
case 1
if IS_CUTSCENE_PLAYING()
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
endif
SET_TODS_CUTSCENE_RUNNING(sTimelapse,false,false,2000,true,false)
CLEAR_AREA(<< 2381.4883, 2619.8186, 45.6327 >>,200,true)
STOP_FIRE_IN_RANGE(<< 2381.4883, 2619.8186, 45.6327 >>,200)
// if DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Michael"))
// and DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Michaels_car"))
// //mike
// //-------load next stage now ready -----------
// load_asset_stage(msf_1_chase)
// //--------------------------------------------
// peds[mpf_mike].id = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Michael"))
// vehs[mvf_mike_car].id = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Michaels_car"))
// SET_VEHICLE_LIGHTS(vehs[mvf_mike_car].id,FORCE_VEHICLE_LIGHTS_ON)
// CLEAR_ALL_PED_PROPS(MIKE_ID())
// mission_substage++
// endif
if DOES_ENTITY_EXIST(vehs[mvf_mike_car].id)
IF IS_VEHICLE_DRIVEABLE(vehs[mvf_mike_car].id)
load_asset_stage(msf_1_chase)
SET_VEHICLE_LIGHTS(vehs[mvf_mike_car].id,FORCE_VEHICLE_LIGHTS_ON)
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
mission_substage++
ENDIF
ENDIF
endif
break
case 2
if IS_CUTSCENE_PLAYING()
//frank car
if DOES_ENTITY_EXIST(vehs[mvf_Frank_car].id)
IF IS_THIS_MODEL_A_CAR(GET_ENTITY_MODEL(vehs[mvf_Frank_car].id))
OR IS_THIS_MODEL_A_BIKE(GET_ENTITY_MODEL(vehs[mvf_Frank_car].id))
OR IS_THIS_MODEL_A_BICYCLE(GET_ENTITY_MODEL(vehs[mvf_Frank_car].id))
OR IS_THIS_MODEL_A_QUADBIKE(GET_ENTITY_MODEL(vehs[mvf_Frank_car].id))
AND GET_ENTITY_MODEL(vehs[mvf_Frank_car].id) <> BUS
SET_ENTITY_COORDS(vehs[mvf_Frank_car].id, <<2382.3335, 2610.1470, 45.5779>>)
SET_ENTITY_HEADING(vehs[mvf_Frank_car].id, 187.5107)
SET_VEHICLE_ON_GROUND_PROPERLY(vehs[mvf_Frank_car].id)
SET_VEHICLE_RADIO_ENABLED(vehs[mvf_Frank_car].id,false)
SET_MISSION_LAST_VEHICLE_AS_VEHICLE_GEN(<<0.0,0.0,0.0>>, 0.0, TRUE, CHAR_FRANKLIN)
mission_substage = 3
ELSE
DELETE_VEHICLE(vehs[mvf_Frank_car].id)
ENDIF
ELSE
WHILE NOT CREATE_PLAYER_VEHICLE(vehs[mvf_Frank_car].id, CHAR_FRANKLIN, <<2382.3335, 2610.1470, 45.5779>>, 187.5107, TRUE, VEHICLE_TYPE_CAR)
PRINTSTRING("waiting on franks car being created") PRINTNL()
WAIT(0)
ENDWHILE
ENDIF
endif
break
case 3
//Start the ringtone for the phone
IF IS_CUTSCENE_PLAYING()
AND NOT ARE_STRINGS_EQUAL (g_savedGlobals.sCellphoneSettingsData.This_Cellphone_Owner_Settings[g_Cellphone.PhoneOwner].RingtoneForThisPlayer, "Silent Ringtone Dummy")
IF ringToneStarted = FALSE
IF GET_CUTSCENE_TIME() > 16090
AND IS_SCREEN_FADED_IN()
PLAY_PED_RINGTONE(g_savedGlobals.sCellphoneSettingsData.This_Cellphone_Owner_Settings[g_Cellphone.PhoneOwner].RingtoneForThisPlayer, peds[mpf_mike].id, false)
PRINTSTRING("PLAY_PED_RINGTONE NOW") PRINTNL()
ringToneStarted = TRUE
ENDIF
ENDIF
//Stop the ringtone for the phone
IF ringToneStopped = FALSE
IF IS_PED_RINGTONE_PLAYING(peds[mpf_mike].id)
AND GET_CUTSCENE_TIME() > 19544
STOP_PED_RINGTONE(peds[mpf_mike].id)
PRINTSTRING("STOP_PED_RINGTONE NOW") PRINTNL()
ringToneStopped = TRUE
ENDIF
ENDIF
ENDIF
if not bmusicTriggerStart
if IS_CUTSCENE_PLAYING()
and GET_CUTSCENE_TIME() > 82245
TRIGGER_MUSIC_EVENT("FINB_START")
bmusicTriggerStart= true
endif
endif
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin")
if WAS_CUTSCENE_SKIPPED()
SET_ENTITY_COORDS(FRANK_ID(),<<2384.43555, 2620.92871, 45.60714>>)
SET_ENTITY_HEADING(FRANK_ID(),179.01)
endif
FORCE_PED_MOTION_STATE(FRANK_ID(), MS_ON_FOOT_RUN, false, FAUS_CUTSCENE_EXIT )
TASK_ENTER_VEHICLE(FRANK_ID(),vehs[mvf_frank_car].id,DEFAULT_TIME_NEVER_WARP)
REPLAY_STOP_EVENT()
bcs_frank = true
else
Point_Gameplay_cam_at_heading(182.0164)
endif
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
SET_PED_INTO_VEHICLE(MIKE_ID(),vehs[mvf_mike_car].id)
SET_VEHICLE_DOORS_SHUT(vehs[mvf_mike_car].id)
SET_PED_RELATIONSHIP_GROUP_HASH(MIKE_ID(),REL_Michael)
ADD_PED_FOR_DIALOGUE(convo_struct,0,MIKE_ID(),"MICHAEL",true)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_ID(),true)
bcs_mike = true
endif
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michaels_car")
START_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_mike_car].id,001,"FIN2")
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_mike_car].id,2000)
FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehs[mvf_mike_car].id)
bcs_mikecar = true
endif
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklins_weapon")
IF DOES_ENTITY_EXIST(Weapon_Object)
GIVE_WEAPON_OBJECT_TO_PED(Weapon_Object, FRANK_ID())
ENDIF
println("Franklins_weapon")
bcs_gun = true
endif
if bcs_frank
and bcs_mike
and bcs_mikeCar
and bcs_gun
or IS_REPLAY_IN_PROGRESS()
if not bmusicTriggerStart
TRIGGER_MUSIC_EVENT("FINB_START")
bmusicTriggerStart= true
endif
vehs[mvf_mike_car].blip = CREATE_BLIP_FOR_VEHICLE(vehs[mvf_mike_car].id,true)
SET_VEHICLE_RADIO_ENABLED(vehs[mvf_frank_car].id,true)
print_now("FIN2_CHASE",DEFAULT_GOD_TEXT_TIME,1)
SET_PLAYER_CONTROL(player_id(),true)
DISPLAY_RADAR(true)
DISPLAY_HUD(true)
mission_substage = STAGE_ENTRY
mission_Set_Stage(msf_1_chase)
endif
break
endswitch
ENDPROC
PROC ST_1_CHASE()
switch mission_substage
case STAGE_ENTRY
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1,"Stage 1: chase")
//Set the lights distance so the headlights don't disappear. needs set to 0 on clean up
SET_LIGHTS_CUTOFF_DISTANCE_TWEAK(100)
//flags
playerInBus = FALSE
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_DRIVING)
TRIGGER_MUSIC_EVENT("FINB_CHASE")
if IS_REPLAY_IN_PROGRESS()
and g_replayMissionStage = 1
and bCarRunning
if not IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_mike_car].id)
START_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_mike_car].id,001,"FIN2")
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_mike_car].id,8000)
endif
DELETE_ALL_TRAINS()
if not DOES_ENTITY_EXIST(vehs[mvf_train].id)
vehs[mvf_train].id = CREATE_MISSION_TRAIN(TRAIN_CONFIG,V_TRAIN_START,true)
endif
train_speed_perc = 0.38 // 62% slower speed of mike's car
SET_VEHICLE_ON_GROUND_PROPERLY(vehs[mvf_frank_car].id)
SET_VEHICLE_FORWARD_SPEED(vehs[mvf_frank_car].id, 20.0)
bCarRunning = false
else
if not IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_mike_car].id)
START_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_mike_car].id,001,"FIN2")
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_mike_car].id,6000)
endif
DELETE_ALL_TRAINS()
if not DOES_ENTITY_EXIST(vehs[mvf_train].id)
vehs[mvf_train].id = CREATE_MISSION_TRAIN(TRAIN_CONFIG,V_TRAIN_START,true)
endif
train_speed_perc = 0.3665 // 63.35% slower speed of mike's car
endif
REPLAY_RECORD_BACK_FOR_TIME(3.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
SET_ENTITY_INVINCIBLE(vehs[mvf_mike_car].id,true)
icamDelay = GET_GAME_TIMER()
CLEAR_AREA_OF_PROJECTILES(<< 2384.3772, 2556.3708, 46.1006 >>,4000) //get rid of previous bombs or grenades fired.
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_CHASE_IN_CAR")
START_AUDIO_SCENE("FIN_2_CHASE_IN_CAR")
endif
ADD_ENTITY_TO_AUDIO_MIX_GROUP(vehs[mvf_mike_car].id,"FIN_2_MICHAELS_CAR")
mission_substage++
break
case 1
if IS_SCREEN_FADED_OUT()
IF GET_FOLLOW_VEHICLE_CAM_VIEW_MODE() != CAM_VIEW_MODE_FIRST_PERSON
Point_Gameplay_cam_at_heading(182.0164)
ENDIF
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
print_now("FIN2_CHASE",DEFAULT_GOD_TEXT_TIME,1)
endif
if GET_GAME_TIMER() - icamDelay > 1500
and IS_PED_IN_ANY_VEHICLE(FRANK_ID())
SET_VEHICLE_RADIO_ENABLED(GET_VEHICLE_PED_IS_IN(FRANK_ID()),true)
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1,"Stage 1: chase")
bcreateScene = false
bloadedScene = false
mission_substage++
endif
break
case 2
if not bloadedScene
if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(MIKE_ID(),<< 2661.4829, 1639.2833, 23.5914 >>) < 200
//-------load next stage now ready -----------
load_asset_stage(msf_2_power_plant)
//--------------------------------------------
load_asset_model(sAssetData,S_M_M_Security_01)
CREATE_FORCED_OBJECT(<< 2665.6328, 1638.5288, 24.3911 >>,5,prop_sec_barier_02b,true)
bcreateScene = true
bloadedScene = true
endif
else
if bcreateScene
and HAS_MODEL_LOADED(S_M_M_Security_01)
//create dead guy
peds[mpf_dead_guy].id = CREATE_PED(PEDTYPE_MISSION,S_M_M_Security_01,<< 2661.4829, 1639.2833, 23.5914 >>, 85.5309)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_dead_guy].id,true)
set_entity_health(peds[mpf_dead_guy].id,101)
SET_PED_MONEY(peds[mpf_dead_guy].id,0)
SET_PED_COMPONENT_VARIATION(peds[mpf_dead_guy].id,PED_COMP_TORSO,0,0)
Unload_Asset_Model(sassetdata,S_M_M_Security_01)
bcreateScene = false
endif
endif
if not IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_mike_car].id)
CLEAR_PED_TASKS_IMMEDIATELY(MIKE_ID())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_ID(),true)
SET_ENTITY_INVINCIBLE(vehs[mvf_mike_car].id,false)
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,50,true,true)
SET_CURRENT_PED_WEAPON(MIKE_ID(),WEAPONTYPE_PISTOL,true)
OPEN_SEQUENCE_TASK(seq)
TASK_LEAVE_ANY_VEHICLE(null)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<2676.50684, 1592.90393, 31.51181>>,PEDMOVE_RUN)
TASK_SHOOT_AT_ENTITY(null,FRANK_ID(),-1,FIRING_TYPE_RANDOM_BURSTS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(MIKE_ID(),seq)
CLEAR_SEQUENCE_TASK(seq)
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
if DOES_BLIP_EXIST(vehs[mvf_mike_car].blip)
remove_blip(vehs[mvf_mike_car].blip)
endif
peds[mpf_mike].blip = CREATE_BLIP_FOR_PED(MIKE_ID(),true)
mission_substage++
endif
break
case 3
//Fail if player tries to go another way round
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2667.2, 1639.0, 24>>) > 100
mission_failed(mff_lost_mike)
ENDIF
SET_PED_RESET_FLAG(MIKE_ID(), PRF_UseTighterTurnSettingsForScript, TRUE)
if (not IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_mike_car].id))
and IS_ENTITY_AT_COORD(MIKE_ID(),<< 2676.1702, 1593.0712, 31.5119 >>,<<5,5,2>>)
if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(FRANK_ID(),<<2676.50684, 1592.90393, 31.51181>>) < 35
or IS_PLAYER_TARGETTING_ENTITY(player_id(),MIKE_ID())
or IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),MIKE_ID())
or HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(MIKE_ID(),FRANK_ID())
if IS_PED_IN_ANY_VEHICLE(FRANK_ID())
IF GET_ENTITY_MODEL(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) = BUS
playerInBus = TRUE
ENDIF
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(FRANK_ID()))
endif
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 30, TRUE, TRUE, FALSE, TRUE)
CLEAR_AREA_OF_PROJECTILES(GET_ENTITY_COORDS(PLAYER_PED_ID()), 30, TRUE)
PRINTSTRING("Clearing area of projectiles") PRINTNL()
KILL_CHASE_HINT_CAM(sHintCam)
SET_INSTANCE_PRIORITY_HINT( INSTANCE_HINT_NONE )
mission_substage = STAGE_ENTRY
Mission_Set_Stage(msf_2_power_plant)
endif
endif
break
endswitch
IF DOES_ENTITY_EXIST(vehs[mvf_mike_car].id) AND NOT IS_ENTITY_DEAD(vehs[mvf_mike_car].id)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_mike_car].id)
IF VDIST2(GET_ENTITY_COORDS(vehs[mvf_mike_car].id), <<2611.37891, 1802.92578, 25.41560>>) < (50.0*50.0)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
ENDIF
ENDIF
ENDIF
if IS_PED_IN_ANY_VEHICLE(FRANK_ID())
if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(FRANK_ID(),<<2676.50684, 1592.90393, 31.51181>>) < 23.0
or IS_ENTITY_IN_ANGLED_AREA(FRANK_ID(),<<2682.93701, 1557.59534, 23.49973>>,<<2683.11572, 1623.92944, 23.49991>>,35)
if BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(FRANK_ID()))
TASK_LEAVE_ANY_VEHICLE(FRANK_ID())
endif
endif
endif
//stage checks
//rubber banding chase & Train
if isentityalive(FRANK_ID())
and isentityalive(MIKE_ID())
and isentityalive(vehs[mvf_mike_car].id)
fDist = VDIST(GET_ENTITY_COORDS(FRANK_ID()),GET_ENTITY_COORDS(MIKE_ID()))
vector vplayerHeight = GET_ENTITY_COORDS(FRANK_ID())
if vplayerHeight.z < 17.5
Mission_Failed(mff_lost_mike)
endif
Rubber_banding(fplaybackSpeed,peds[mpf_frank].id,vehs[mvf_mike_car].id)
SET_PLAYBACK_SPEED(vehs[mvf_mike_car].id,fplaybackSpeed)
Manage_train_chase() //sorts out train speed during chase
//mission fail if lost michael
if fdist > 225
Mission_Failed(mff_lost_mike)
endif
endif
CONTROL_VEHICLE_CHASE_HINT_CAM_IN_VEHICLE(sHintCam,vehs[mvf_mike_car].id)
UPDATE_CHASE_BLIP(vehs[mvf_mike_car].blip,vehs[mvf_mike_car].id,225)
if IsEntityAlive(peds[mpf_dead_guy].id)
and IsEntityAlive(vehs[mvf_mike_car].id)
if IS_ENTITY_AT_ENTITY(peds[mpf_dead_guy].id,vehs[mvf_mike_car].id,<<2,2,2>>)
SET_ENTITY_HEALTH(peds[mpf_dead_guy].id,99)
endif
endif
if IS_GAMEPLAY_HINT_ACTIVE()
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_FOCUS_CAM")
START_AUDIO_SCENE("FIN_2_FOCUS_CAM")
endif
else
if IS_AUDIO_SCENE_ACTIVE("FIN_2_FOCUS_CAM")
stop_Audio_scene("FIN_2_FOCUS_CAM")
endif
endif
IF IsEntityAlive(MIKE_ID())
IF GET_DISTANCE_BETWEEN_COORDS(<<2684.2, 1615.1, 24>>, GET_ENTITY_COORDS(PLAYER_PED_ID())) < 45
IF IS_SPECIAL_ABILITY_ACTIVE(PLAYER_ID())
PRINTSTRING("special ability is being switched off") PRINTNL()
SPECIAL_ABILITY_DEACTIVATE(PLAYER_ID())
ENABLE_SPECIAL_ABILITY(PLAYER_ID(), FALSE)
ELSE
PRINTSTRING("special ability is disabled") PRINTNL()
ENDIF
ENDIF
ENDIF
ENDPROC
BOOL bLoadingSRL
PROC ST_2_POWERPLANT()
switch mission_substage
case STAGE_ENTRY
//Flags
bFrankFacingMike = FALSE
bLoadingSRL = FALSE
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 30, TRUE, TRUE)
CLEAR_AREA_OF_PROJECTILES(GET_ENTITY_COORDS(PLAYER_PED_ID()), 30)
PRINTSTRING("Clearing area of projectiles2") PRINTNL()
if DOES_ENTITY_EXIST(vehs[mvf_mike_car].id)
if IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_mike_car].id)
SKIP_TO_END_AND_STOP_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_mike_car].id)
endif
SET_ENTITY_INVINCIBLE(vehs[mvf_mike_car].id,false)
endif
//sync scene
SyncSceneIG1 = CREATE_SYNCHRONIZED_SCENE(<< 2676.3481, 1594.8707, 23.595 >>, << 0, 0, -90 >>)
//mike
SET_CURRENT_PED_WEAPON(MIKE_ID(), WEAPONTYPE_UNARMED, TRUE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_ID(),true)
TASK_SYNCHRONIZED_SCENE(MIKE_ID(),SyncSceneIG1,"missfinale_b_ig_1","arrive_plant_m",INSTANT_BLEND_IN,NORMAL_BLEND_OUT)
// SET_FORCE_FOOTSTEP_UPDATE(MIKE_ID(), true)
//Frank
if not IS_PED_IN_ANY_VEHICLE(FRANK_ID())
SET_ENTITY_FACING(FRANK_ID(),<<2676.50684, 1592.90393, 31.51181>>)
TASK_LOOK_AT_ENTITY(FRANK_ID(),MIKE_ID(),-1,SLF_WHILE_NOT_IN_FOV)
if IS_ENTITY_IN_ANGLED_AREA(FRANK_ID(),<<2685.24414, 1634.93970, 20>>,<<2685.10547, 1598.70410, 33>>,25)
TASK_PLAY_ANIM(FRANK_ID(),"missfinale_b_ig_1","arrive_plant_F",INSTANT_BLEND_IN,WALK_BLEND_OUT)
else
TASK_TURN_PED_TO_FACE_ENTITY(FRANK_ID(),MIKE_ID(),5000)
endif
else
TASK_LEAVE_ANY_VEHICLE(FRANK_ID())
endif
//frank car
if DOES_ENTITY_EXIST(vehs[mvf_frank_car].id)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_frank_car].id,FALSE)
SET_VEHICLE_RADIO_ENABLED(vehs[mvf_frank_car].id,FALSE)
endif
if DOES_BLIP_EXIST(vehs[mvf_mike_car].blip)
remove_blip(vehs[mvf_mike_car].blip)
endif
if NOT DOES_BLIP_EXIST(peds[mpf_mike].blip)
peds[mpf_mike].blip = CREATE_BLIP_FOR_PED(MIKE_ID(),true)
ENDIF
SET_VEHICLE_FIXED(vehs[mvf_mike_car].id)
//camera
REPLAY_RECORD_BACK_FOR_TIME(3.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
HANG_UP_AND_PUT_AWAY_PHONE()
cameraIndex = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED,<< 2701.9651, 1596.5630, 32.7892 >>, << -1.3076, 0.0972, 109.9187 >> ,32)
SET_CAM_ACTIVE(cameraIndex,true)
SHAKE_CAM(cameraIndex,"HAND_SHAKE",0.4)
SET_CAM_PARAMS(cameraIndex,<< 2701.9434, 1596.6038, 33.0893 >>, << -3.5782, 0.0972, 113.5868 >>,32,12000)
Prep_start_Cutscene(false,<< 2701.9651, 1596.5630, 32.7892 >>)
//misc
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
endif
bOnFoot = true
icamDelay = GET_GAME_TIMER()
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(2,"Stage 2: power plant")
TRIGGER_MUSIC_EVENT("FINB_ARRIVE")
STOP_AUDIO_SCENES()
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_MICHAEL_ESCAPE_SCENE")
START_AUDIO_SCENE("FIN_2_MICHAEL_ESCAPE_SCENE")
endif
REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vehs[mvf_mike_car].id)
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(FINB_FOOTCHASE_TIME)
bPushInFXPlayed = FALSE
mission_substage++
break
case 1
IF bFrankFacingMike = FALSE
if not IS_PED_IN_ANY_VEHICLE(FRANK_ID())
IF playerInBus = TRUE
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<2673.8826, 1604.6268, 23.4956>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 239.5733)
ENDIF
IF NOT IS_ENTITY_ON_SCREEN(FRANK_ID())
SET_ENTITY_FACING(FRANK_ID(),<<2693, 1594, 31>>)
TASK_LOOK_AT_ENTITY(FRANK_ID(),MIKE_ID(),-1,SLF_WHILE_NOT_IN_FOV)
bFrankFacingMike = TRUE
ELSE
TASK_TURN_PED_TO_FACE_ENTITY(FRANK_ID(),MIKE_ID())
TASK_LOOK_AT_ENTITY(FRANK_ID(),MIKE_ID(),-1,SLF_WHILE_NOT_IN_FOV)
bFrankFacingMike = TRUE
ENDIF
ENDIF
ENDIF
if get_game_timer() - icamDelay > 1500
and GET_GAME_TIMER() - icamDelay < 3700 // Disable skipping once we've triggered the FX (url:bugstar:2057705)
and IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT)
CLEAR_PED_TASKS(FRANK_ID())
RENDER_SCRIPT_CAMS(false,false)
Prep_stop_Cutscene(true)
Point_Gameplay_cam_at_coord(<<2672.41333, 1592.09290, 29.49044>>)
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG1)
SET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG1,1)
endif
mission_substage = 2
endif
// url:bugstar:2057705
IF NOT bPushInFXPlayed
AND GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
AND GET_GAME_TIMER() - icamDelay >= 3700
ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE)
PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET")
bPushInFXPlayed = TRUE
ENDIF
if get_game_timer() - icamDelay > 4000
Prep_stop_Cutscene(true)
Point_Gameplay_cam_at_coord(<<2703.01978, 1593.13367, 31.51181>>)
if not IS_PED_IN_ANY_VEHICLE(FRANK_ID())
SET_GAMEPLAY_CAM_RELATIVE_PITCH(15)
endif
SET_PLAYER_CONTROL(player_id(),true)
// SET_FORCE_FOOTSTEP_UPDATE(MIKE_ID(), false)
mission_substage = 2
endif
break
case 2
clear_players_task_on_control_input(SCRIPT_TASK_SYNCHRONIZED_SCENE)
clear_players_task_on_control_input(SCRIPT_TASK_PLAY_ANIM)
clear_players_task_on_control_input(SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY)
if IS_AUDIO_SCENE_ACTIVE("FIN_2_MICHAEL_ESCAPE_SCENE")
STOP_AUDIO_SCENE("FIN_2_MICHAEL_ESCAPE_SCENE")
endif
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_CHASE_ON_FOOT")
START_AUDIO_SCENE("FIN_2_CHASE_ON_FOOT")
endif
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG1)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG1) >= 1
//-------load next stage now ready -----------
load_asset_stage(msf_3_confrontation)
//--------------------------------------------
if IS_SCRIPT_TASK_RUNNING_OR_STARTING(FRANK_ID(),SCRIPT_TASK_SYNCHRONIZED_SCENE)
or IS_SCRIPT_TASK_RUNNING_OR_STARTING(FRANK_ID(),SCRIPT_TASK_PLAY_ANIM)
or IS_SCRIPT_TASK_RUNNING_OR_STARTING(FRANK_ID(),SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY)
CLEAR_PED_TASKS(FRANK_ID())
endif
TASK_FOLLOW_NAV_MESH_TO_COORD(MIKE_ID(),<< 2764.6760, 1559.7496, 31.4983 >>,PEDMOVE_SPRINT)
FORCE_PED_MOTION_STATE(MIKE_ID(),MS_ON_FOOT_RUN,false,FAUS_CUTSCENE_EXIT)
mission_substage++
endif
break
case 3
//initial delete of mike after he runs around the corner.
if isentityalive(MIKE_ID())
if IS_ENTITY_AT_COORD(MIKE_ID(),<< 2764.6760, 1559.7496, 31.4983 >>,<<4,4,2>>)
and (not IS_ENTITY_ON_SCREEN(MIKE_ID())or IS_ENTITY_OCCLUDED(MIKE_ID()))
if DOES_BLIP_EXIST(peds[mpf_mike].blip)
remove_blip(peds[mpf_mike].blip)
endif
SAFE_DELETE_PED(peds[mpf_mike].id)
if not does_blip_exist(blip_objective)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2766.9392, 1565.0616, 31.4983 >>)
// SET_BLIP_COLOUR(blip_objective,BLIP_COLOUR_RED)
endif
endif
else
if bFollowDisplayed = false
and IS_SAFE_TO_DISPLAY_GODTEXT()
PRINT_NOW("FIN2_SPOT",DEFAULT_GOD_TEXT_TIME,1)
bFollowDisplayed = true
endif
endif
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
//Player reached half way on walkway
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2704.0027, 1593.4563, 31.9187 >>,<<3,3,3>>)
//mike re-create
if DOES_ENTITY_EXIST(MIKE_ID())
if not does_blip_exist(peds[mpf_mike].blip)
peds[mpf_mike].blip = CREATE_BLIP_FOR_PED(MIKE_ID(),true)
endif
if DOES_BLIP_EXIST(blip_objective)
REMOVE_BLIP(blip_objective)
endif
SET_ENTITY_COORDS(MIKE_ID(),<< 2768.5076, 1575.3491, 31.4983 >>)
SET_ENTITY_VISIBLE(MIKE_ID(),true)
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,INFINITE_AMMO,true,true)
OPEN_SEQUENCE_TASK(seq)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(null,true)
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null,<< 2769.36572, 1578.53491, 31.51167 >>,FRANK_ID(),PEDMOVE_SPRINT,true)
TASK_SHOOT_AT_ENTITY(null,FRANK_ID(),-1,FIRING_TYPE_CONTINUOUS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(MIKE_ID(),seq)
CLEAR_SEQUENCE_TASK(seq)
//misc next stage
icamDelay = GET_GAME_TIMER()
SAFE_RELEASE_PED(peds[mpf_dead_guy].id)
mission_substage++
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
else
Create_michael(<< 2768.5076, 1575.3491, 31.4983 >>,0)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
endif
// player went a different way to the location
elif IS_ENTITY_IN_ANGLED_AREA(FRANK_ID(),<<2765.76025, 1560.41675, 31>>,<<2768.03687, 1569.14636, 34>>,4.5)
//Mike
if DOES_ENTITY_EXIST(MIKE_ID())
SET_ENTITY_COORDS(MIKE_ID(),<< 2757.72095, 1537.80286, 39.33770 >>)
SET_ENTITY_VISIBLE(MIKE_ID(),false)
if not DOES_BLIP_EXIST(blip_objective)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2766.71436, 1564.82092, 31.51167 >>)
// SET_BLIP_COLOUR(blip_objective,BLIP_COLOUR_RED)
if bFollowDisplayed = false
PRINT_NOW("FIN2_SPOT",DEFAULT_GOD_TEXT_TIME,1)
bFollowDisplayed = true
endif
endif
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,50,true,true)
SET_CURRENT_PED_WEAPON(MIKE_ID(),WEAPONTYPE_PISTOL,true)
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3,"Stage 3: confrontation")
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
endif
mission_set_stage(msf_3_confrontation)
mission_substage = STAGE_ENTRY
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
else
Create_michael(<< 2757.72095, 1537.80286, 39.33770 >>,341.1591)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
endif
endif
break
case 4
if isentityalive(MIKE_ID())
if IS_PLAYER_TARGETTING_ENTITY(player_id(),MIKE_ID())
or IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),MIKE_ID())
or GET_GAME_TIMER() - icamDelay > 6000
or GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(MIKE_ID()),GET_ENTITY_COORDS(FRANK_ID())) < 30
or (HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(MIKE_ID(),FRANK_ID()))
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
TASK_FOLLOW_NAV_MESH_TO_COORD(MIKE_ID(),<< 2767.4143, 1572.8604, 31.4983 >>,PEDMOVE_SPRINT)
icamDelay = GET_GAME_TIMER()
mission_substage++
endif
else
mission_substage++
ENDIF
break
case 5
if isentityalive(MIKE_ID())
if IS_ENTITY_AT_COORD(mike_ID(),<< 2767.4143, 1572.8604, 31.4983 >>,<<3,3,5>>)
if DOES_BLIP_EXIST(peds[mpf_mike].blip)
remove_blip(peds[mpf_mike].blip)
endif
SAFE_DELETE_PED(peds[mpf_mike].id)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2766.9392, 1565.0616, 31.4983 >>)
// SET_BLIP_COLOUR(blip_objective,BLIP_COLOUR_RED)
if bFollowDisplayed = false
PRINT_NOW("FIN2_SPOT",DEFAULT_GOD_TEXT_TIME,1)
bFollowDisplayed = true
endif
mission_substage++
endif
ELSE
mission_substage++
ENDIF
break
case 6
mission_set_stage(msf_3_confrontation)
mission_substage = STAGE_ENTRY
break
endswitch
//Run this check for bug fix 1702338
if isentityalive(MIKE_ID())
if IS_ENTITY_AT_COORD(MIKE_ID(),<< 2767.5, 1574.2, 31.8 >>,<<2.5,2.5,2.5>>)
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(MIKE_ID()),GET_ENTITY_COORDS(FRANK_ID())) < 25
if DOES_BLIP_EXIST(peds[mpf_mike].blip)
remove_blip(peds[mpf_mike].blip)
endif
SAFE_DELETE_PED(peds[mpf_mike].id)
IF NOT DOES_BLIP_EXIST(blip_objective)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2766.9392, 1565.0616, 31.4983 >>)
PRINT_NOW("FIN2_SPOT",DEFAULT_GOD_TEXT_TIME,1)
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_AT_COORD(FRANK_ID(), <<2765.92358, 1565.14172, 31.51252>>, <<30,30,30>>)
IF NOT bLoadingSRL
PREFETCH_SRL("finbconf")
SET_SRL_READAHEAD_TIMES(5, 5, 5, 5)
bLoadingSRL = TRUE
ENDIF
ELIF NOT IS_ENTITY_AT_COORD(FRANK_ID(), <<2765.92358, 1565.14172, 31.51252>>, <<40,40,40>>)
IF bLoadingSRL
END_SRL()
bLoadingSRL = FALSE
ENDIF
ENDIF
//Run this check every frame incase player takes a short cut
If IS_ENTITY_IN_ANGLED_AREA(FRANK_ID(),<<2765.76025, 1560.41675, 31>>,<<2768.03687, 1569.14636, 34>>,4.5)
//Mike
if DOES_ENTITY_EXIST(MIKE_ID())
SET_ENTITY_COORDS(MIKE_ID(),<< 2757.72095, 1537.80286, 39.33770 >>)
SET_ENTITY_VISIBLE(MIKE_ID(),false)
if not DOES_BLIP_EXIST(blip_objective)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2766.71436, 1564.82092, 31.51167 >>)
SET_BLIP_COLOUR(blip_objective,BLIP_COLOUR_RED)
if bFollowDisplayed = false
PRINT_NOW("FIN2_SPOT",DEFAULT_GOD_TEXT_TIME,1)
bFollowDisplayed = true
endif
endif
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,50,true,true)
SET_CURRENT_PED_WEAPON(MIKE_ID(),WEAPONTYPE_PISTOL,true)
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3,"Stage 3: confrontation")
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
endif
mission_set_stage(msf_3_confrontation)
mission_substage = STAGE_ENTRY
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
else
Create_michael(<< 2757.72095, 1537.80286, 39.33770 >>,341.1591)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
endif
endif
// if player still on vehicle in next area take them off it.
if IS_PED_IN_ANY_VEHICLE(FRANK_ID())
if IS_ENTITY_IN_ANGLED_AREA(FRANK_ID(),<<2759.54346, 1604.30334, 22>>,<<2731.96021, 1500.85767, 60>>,70)
or IS_ENTITY_IN_ANGLED_AREA(FRANK_ID(),<<2665.01685, 1593.25269, 22>>,<<2727.68701, 1593.78809, 40>>,50)
if BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(vehs[mvf_frank_car].id)
TASK_LEAVE_ANY_VEHICLE(FRANK_ID())
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_frank_car].id,FALSE)
ENDIF
endif
endif
//Fail if player goes too far away from here
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2716.3, 1592.9, 32>>) > 100
Mission_Failed(mff_lost_mike)
ENDIF
ENDPROC
INT iSRLTime
PROC ST_3_CONFRONTATION()
switch mission_substage
case STAGE_ENTRY
//Player
//Grab the players current weapon to be given back after cutscene
playerWeapon = GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID())
//Mike
if DOES_ENTITY_EXIST(MIKE_ID())
SET_ENTITY_COORDS(MIKE_ID(),<< 2757.72095, 1537.80286, 39.33770 >>)
SET_ENTITY_VISIBLE(MIKE_ID(),false)
if not DOES_BLIP_EXIST(blip_objective)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2766.71436, 1564.82092, 31.51167 >>)
SET_BLIP_COLOUR(blip_objective,BLIP_COLOUR_RED)
if bFollowDisplayed = false
PRINT_NOW("FIN2_SPOT",DEFAULT_GOD_TEXT_TIME,1)
bFollowDisplayed = true
endif
endif
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,50,true,true)
SET_CURRENT_PED_WEAPON(MIKE_ID(),WEAPONTYPE_PISTOL,true)
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3,"Stage 3: confrontation")
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
endif
mission_substage++
else
Create_michael(<< 2757.72095, 1537.80286, 39.33770 >>,341.1591)
endif
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
break
case 1
if IS_ENTITY_IN_ANGLED_AREA(FRANK_ID(),<<2765.76025, 1560.41675, 31>>,<<2768.03687, 1569.14636, 34>>,4.5)
and HAVE_ALL_STREAMING_REQUESTS_COMPLETED(MIKE_ID())
if DOES_BLIP_EXIST(blip_objective)
remove_blip(blip_objective)
endif
//Mike
SET_ENTITY_VISIBLE(MIKE_ID(),true)
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,50,true,true)
SET_CURRENT_PED_WEAPON(MIKE_ID(),WEAPONTYPE_PISTOL,true)
SET_PED_COMBAT_ATTRIBUTES(MIKE_ID(),CA_PERFECT_ACCURACY,false)
if not DOES_BLIP_EXIST(peds[mpf_mike].blip)
peds[mpf_mike].blip = CREATE_BLIP_FOR_PED(MIKE_ID(),true)
endif
//-------load next stage now ready -----------
load_asset_stage(msf_4_heli_appears)
//--------------------------------------------
TRIGGER_MUSIC_EVENT("FINB_STEPS")
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
SyncSceneIG2 = CREATE_SYNCHRONIZED_SCENE(<<2769.011,1563.390,31.525>>,<<0,0,-105.0>>)
TASK_SYNCHRONIZED_SCENE(FRANK_ID(),SyncSceneIG2,"missfinale_b_ig_2","mic_shoots_fr_f",INSTANT_BLEND_IN,walk_BLEND_OUT)
TASK_SYNCHRONIZED_SCENE(MIKE_ID(),SyncSceneIG2,"missfinale_b_ig_2","mic_shoots_fr_m",INSTANT_BLEND_IN,walk_BLEND_OUT)
//cams
REPLAY_RECORD_BACK_FOR_TIME(3.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
cameraIndex = create_cam("DEFAULT_ANIMATED_CAMERA",FALSE)
SET_CAM_ACTIVE(cameraIndex,true)
// PLAY_CAM_ANIM(cameraIndex,"mic_shoots_fr_cam","missfinale_b_ig_2",<<2769.011,1563.390,31.525>>,<<0,0,-105.0>>)
PLAY_SYNCHRONIZED_CAM_ANIM(cameraIndex, SyncSceneIG2, "mic_shoots_fr_cam","missfinale_b_ig_2")
// cameraIndex = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED,<<2770.8,1563.7,31.0>>,<<19.9,0.4,153.1>>,19.0)
// SET_CAM_PARAMS(cameraIndex,<<2770.6,1563.3,31.1>>,<<19.9,0.4,153.1>>,19.0,4000,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR)
// SHAKE_CAM(cameraIndex,"hand_shake",0.3)
IF IS_SRL_LOADED()
BEGIN_SRL()
printstring("started srl!") printnl()
ELSE
END_SRL()
ENDIF
iSRLTime = GET_GAME_TIMER()
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),WEAPONTYPE_UNARMED,true)
prep_start_cutscene(false,<<2769.011,1563.390,31.525>>)
mission_substage++
endif
break
case 2
SET_SRL_TIME(TO_FLOAT(GET_GAME_TIMER() - iSRLTime))
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG2)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG2) >= 0.4
// SET_CAM_PARAMS(cameraIndex,<<2759.8,1539.4,41.4>>,<<-21.3,0,-12.7>>,28.9,0)
// set_cam_params(cameraIndex,<<2759.9,1539.5,41.4>>,<<-21.3,0,-12.7>>,28.9,4000,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR)
mission_substage++
endif
break
case 3
SET_SRL_TIME(TO_FLOAT(GET_GAME_TIMER() - iSRLTime))
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG2)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG2) >= 0.63
SET_PED_SHOOTS_AT_COORD(MIKE_ID(),<<2767.07178, 1569.26062, 31.51177>>,true)
mission_substage++
endif
break
case 4
SET_SRL_TIME(TO_FLOAT(GET_GAME_TIMER() - iSRLTime))
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG2)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG2) >= 0.75
// SET_CAM_PARAMS(cameraIndex,<<2766.7,1563.4,32.9>>,<<-1.9,0,-12.2>>,50,0) //0.754
// set_cam_params(cameraIndex,<<2766.7,1563.3,32.9>>,<<1.8,0,-35.8>>,50,2000,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR) //0.953
mission_substage++
endif
break
case 5
SET_SRL_TIME(TO_FLOAT(GET_GAME_TIMER() - iSRLTime))
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG2)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG2) >= 0.82
SET_PED_SHOOTS_AT_COORD(MIKE_ID(),<<2767.76440, 1565.57629, 32.76665>>,true)
mission_substage++
endif
break
case 6
SET_SRL_TIME(TO_FLOAT(GET_GAME_TIMER() - iSRLTime))
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG2)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG2) >= 0.86
Point_Gameplay_cam_at_heading(305.7959)
prep_stop_cutscene(true,false,false,DEFAULT_INTERP_TO_FROM_GAME,SPC_NONE,true)
END_SRL()
TASK_FOLLOW_NAV_MESH_TO_COORD(FRANK_ID(),<<2769.7646, 1568.7050, 34.0682>>,PEDMOVE_RUN,DEFAULT_TIME_NEVER_WARP)
FORCE_PED_MOTION_STATE(FRANK_ID(),MS_ON_FOOT_RUN,true,FAUS_CUTSCENE_EXIT)
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),playerWeapon,FALSE)
// MIKE
SET_PED_COMBAT_ATTRIBUTES(MIKE_ID(),CA_PERFECT_ACCURACY,false)
SET_PED_ACCURACY(MIKE_ID(),15)
if not DOES_BLIP_EXIST(peds[mpf_mike].blip)
peds[mpf_mike].blip = CREATE_BLIP_FOR_PED(MIKE_ID(),true)
endif
OPEN_SEQUENCE_TASK(seq)
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null,<< 2749.0803, 1525.3656, 39.3373 >>,FRANK_ID(),PEDMOVE_RUN,true)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mike_id(),seq)
CLEAR_SEQUENCE_TASK(seq)
mission_substage++
endif
break
case 7
clear_players_task_on_control_input(SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD)
//top of stairs
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2769.1233, 1566.6147, 38.5209 >>,<<1,1,2>>)
icamDelay = GET_GAME_TIMER()
mission_substage= STAGE_ENTRY
mission_set_stage(msf_4_heli_appears)
endif
break
endswitch
//mission checks
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2737.1770, 1522.5280, 24.3547 >>,<<6,6,3>>)
or IS_ENTITY_AT_COORD(FRANK_ID(),<< 2757.5522, 1528.3209, 31.9641 >>,<<3,3,2>>)
Mission_Failed(mff_lost_mike)
endif
ENDPROC
PROC ST_4_HELI()
switch mission_substage
case STAGE_ENTRY
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(4,"Stage 4: heli appears")
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
endif
//mike
OPEN_SEQUENCE_TASK(seq)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(null,true)
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null,<< 2753.3665, 1523.5206, 39.3162 >>,FRANK_ID(),PEDMOVE_SPRINT,false)
TASK_SHOOT_AT_COORD(null,<< 2764.5376, 1565.0852, 39.3267 >>,-1,FIRING_TYPE_CONTINUOUS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(MIKE_ID(),seq)
CLEAR_SEQUENCE_TASK(seq)
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_CHASE_ON_FOOT")
start_audio_scene("FIN_2_CHASE_ON_FOOT")
endif
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_HELICOPTER_ARRIVES")
start_audio_scene("FIN_2_HELICOPTER_ARRIVES")
endif
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
icamDelay = GET_GAME_TIMER()
mission_substage++
break
case 1
if IS_PLAYER_TARGETTING_ENTITY(player_id(),MIKE_ID())
or IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),MIKE_ID())
or GET_GAME_TIMER() - icamDelay > 8000
or (GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(MIKE_ID()),GET_ENTITY_COORDS(FRANK_ID())) < 26
and IS_ENTITY_AT_COORD(MIKE_ID(),<<2753.3665, 1523.5206, 39.3162>>,<<3,3,3>>))
or (HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(MIKE_ID(),FRANK_ID()))
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
TASK_FOLLOW_NAV_MESH_TO_COORD(MIKE_ID(),<< 2743.2749, 1525.3877, 39.3162 >>,PEDMOVE_SPRINT,DEFAULT_TIME_BEFORE_WARP,0.3)
icamDelay = GET_GAME_TIMER()
//-------load next stage now ready -----------
load_asset_stage(msf_5_shoot_out)
//--------------------------------------------
mission_substage++
endif
break
case 2
//delete michael from the scene until needed
if IS_ENTITY_AT_COORD(MIKE_ID(),<< 2743.2749, 1525.3877, 39.3162 >>,<<2,2,2>>)
if DOES_ENTITY_EXIST(MIKE_ID())
DELETE_PED(peds[mpf_mike].id)
endif
mission_substage++
endif
break
case 3
if GET_GAME_TIMER() - icamDelay > 1000
mission_substage = STAGE_ENTRY
Mission_Set_Stage(msf_5_shoot_out)
endif
break
endswitch
ENDPROC
PROC ST_5_SHOOT_OUT()
switch mission_substage
case STAGE_ENTRY
//Flags
doneUPSTChat = FALSE
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
endif
settimera(0)
if not DOES_BLIP_EXIST(blip_objective)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2741.32, 1523.05, 46.51 >>)
// SET_BLIP_COLOUR(blip_objective,BLIP_COLOUR_RED)
endif
if bFollowDisplayed = false
PRINT_NOW("FIN2_SPOT",DEFAULT_GOD_TEXT_TIME,1)
bFollowDisplayed = true
endif
// //heli
// if DOES_ENTITY_EXIST(vehs[mvf_heli].id)
// SET_VEHICLE_SEARCHLIGHT(vehs[mvf_heli].id,true,true)
// if not IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_heli].id)
// STOP_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_heli].id)
// endif
// endif
// eheliLight = HL_VEC1
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(5,"Stage 5: shoot out")
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_CHASE_ON_FOOT")
start_audio_scene("FIN_2_CHASE_ON_FOOT")
endif
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_HELICOPTER_ARRIVES")
start_audio_scene("FIN_2_HELICOPTER_ARRIVES")
endif
mission_substage++
break
case 1
//around the corner
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2729.5039, 1530.7422, 39.3167 >>,<<2,2,4>>)
or IS_ENTITY_AT_COORD(FRANK_ID(),<< 2738.4851, 1532.3734, 39.7673 >>,<<2,2,4>>)
or IS_ENTITY_AT_COORD(FRANK_ID(),<< 2755.4, 1531.0, 39.8887 >>,<<7,7,4>>)
//mike
if Create_michael(<< 2740.5945, 1522.9148, 44.5066 >>, 276.0896)
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
CLEAR_PED_TASKS(MIKE_ID())
if DOES_BLIP_EXIST(blip_objective)
REMOVE_BLIP(blip_objective)
endif
if not DOES_BLIP_EXIST(peds[mpf_mike].blip)
peds[mpf_mike].blip = CREATE_BLIP_FOR_PED(MIKE_ID(),true)
endif
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,50,true,TRUE)
CLEAR_PED_TASKS(MIKE_ID())
OPEN_SEQUENCE_TASK(seq)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(null,true)
TASK_SHOOT_AT_ENTITY(null,FRANK_ID(),-1,FIRING_TYPE_CONTINUOUS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(MIKE_ID(),seq)
CLEAR_SEQUENCE_TASK(seq)
SET_ENTITY_VISIBLE(MIKE_ID(), TRUE)
// //heli
// eheliLight = HL_MIKE
// EheliPos = eH_Corner2
// IheliStage = 0
icamDelay = GET_GAME_TIMER()
mission_substage++
endif
endif
if is_Entity_at_coord(FRANK_ID(),<<2741.32, 1523.05, 45.25>>,<<1.5,1.5,1>>)
if Create_michael(<<2736.41, 1537.38, 49.6966 >>, 276.0896)
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
if DOES_BLIP_EXIST(blip_objective)
REMOVE_BLIP(blip_objective)
endif
CLEAR_PED_TASKS(MIKE_ID())
if not DOES_BLIP_EXIST(peds[mpf_mike].blip)
peds[mpf_mike].blip = CREATE_BLIP_FOR_PED(MIKE_ID(),true)
endif
SET_PED_COMBAT_ATTRIBUTES(MIKE_ID(),CA_REQUIRES_LOS_TO_SHOOT,false)
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,50,true,TRUE)
CLEAR_PED_TASKS(MIKE_ID())
OPEN_SEQUENCE_TASK(seq)
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null,<< 2733.0586, 1528.9579, 49.6923 >>,FRANK_ID(),PEDMOVE_RUN,true)
TASK_SHOOT_AT_ENTITY(null,FRANK_ID(),-1,FIRING_TYPE_RANDOM_BURSTS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(MIKE_ID(),seq)
CLEAR_SEQUENCE_TASK(seq)
// //heli
// eheliLight = HL_MIKE
// EheliPos = eH_Corner2
// IheliStage = 0
icamDelay = GET_GAME_TIMER()
mission_substage = 301 //skip to the alternate
endif
endif
break
case 2
//second step
if (IS_PLAYER_TARGETTING_ENTITY(player_id(),MIKE_ID())and IS_ENTITY_AT_COORD(MIKE_ID(),<< 2741.1575, 1523.1213, 44.4857 >>,<<2,2,2>>))
or (IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),MIKE_ID()) and IS_ENTITY_AT_COORD(MIKE_ID(),<< 2741.1575, 1523.1213, 44.4857 >>,<<2,2,2>>))
or (GET_GAME_TIMER() - icamDelay) > 6000
or GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(MIKE_ID()),GET_ENTITY_COORDS(FRANK_ID())) < 9.2
or (HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(MIKE_ID(),FRANK_ID()))
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<2738.97021, 1526.11121, 47.15614>>,PEDMOVE_SPRINT,DEFAULT_TIME_NEVER_WARP,0.5)
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null,<<2734.74438, 1527.00732, 47.15614>>,FRANK_ID(),PEDMOVE_SPRINT,true)
TASK_SHOOT_AT_ENTITY(null,FRANK_ID(),-1,FIRING_TYPE_RANDOM_BURSTS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(MIKE_ID(),seq)
CLEAR_SEQUENCE_TASK(seq)
icamDelay = GET_GAME_TIMER()
mission_substage++
endif
break
case 3
//right at the top
if (IS_ENTITY_AT_COORD(FRANK_ID(),<< 2741.3936, 1523.6068, 45.5072 >>,<<1.25,1.25,2>>))
or (GET_GAME_TIMER() - icamDelay) > 12500
or (IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),MIKE_ID())and IS_ENTITY_AT_COORD(MIKE_ID(),<< 2733.8066, 1526.9257, 47.1349 >>,<<2,2,2>>))
or (IS_PLAYER_TARGETTING_ENTITY(player_id(),MIKE_ID())and IS_ENTITY_AT_COORD(MIKE_ID(),<< 2733.8066, 1526.9257, 47.1349 >>,<<2,2,2>>))
or (GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(MIKE_ID()),GET_ENTITY_COORDS(FRANK_ID())) < 11 and IS_ENTITY_AT_COORD(MIKE_ID(),<< 2733.8066, 1526.9257, 47.1349 >>,<<2,2,2>>))
or (HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(MIKE_ID(),FRANK_ID()))
or (IS_ENTITY_AT_COORD(FRANK_ID(),<< 2755.3, 1556.6, 42.3 >>,<<4,4,4>>))
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
//mike
CLEAR_PED_TASKS(MIKE_ID())
OPEN_SEQUENCE_TASK(seq)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(null,true)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<< 2738.3992, 1545.0612, 47.1352 >>,PEDMOVE_SPRINT,DEFAULT_TIME_NEVER_WARP,0.5)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(MIKE_ID(),seq)
CLEAR_SEQUENCE_TASK(seq)
mission_substage++
endif
break
case 301 //incase the player goes a different way there needs to be a differnt path for mike.
//right at the top
if (IS_ENTITY_AT_COORD(FRANK_ID(),<< 2744.23, 1523.03, 46.08 >>,<<1.25,1.25,2>>))
or (GET_GAME_TIMER() - icamDelay > 12500)
or (IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),MIKE_ID())and IS_ENTITY_AT_COORD(MIKE_ID(),<< 2733.0586, 1528.9579, 49.6923 >>,<<2,2,2>>))
or (IS_PLAYER_TARGETTING_ENTITY(player_id(),MIKE_ID())and IS_ENTITY_AT_COORD(MIKE_ID(),<< 2733.0586, 1528.9579, 49.6923 >>,<<2,2,2>>))
or (GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(MIKE_ID()),GET_ENTITY_COORDS(FRANK_ID())) < 11 and IS_ENTITY_AT_COORD(MIKE_ID(),<< 2733.0586, 1528.9579, 49.6923 >>,<<2,2,2>>))
or (HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(MIKE_ID(),FRANK_ID()))
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
//mike
CLEAR_PED_TASKS(MIKE_ID())
OPEN_SEQUENCE_TASK(seq)
TASK_FOLLOW_NAV_MESH_TO_COORD(null,<< 2740.29, 1544.70, 49.70 >>,PEDMOVE_SPRINT,DEFAULT_TIME_NEVER_WARP,0.5)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(MIKE_ID(),seq)
CLEAR_SEQUENCE_TASK(seq)
mission_substage = 4
endif
break
case 4
//For bug fix 1780365
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(MIKE_ID()),GET_ENTITY_COORDS(FRANK_ID())) < 10
AND NOT IS_ENTITY_ON_SCREEN(MIKE_ID())
remove_blip(peds[mpf_mike].blip)
if not DOES_BLIP_EXIST(blip_objective)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2735.8027, 1535.9937, 48.3381 >>)
endif
CLEAR_PED_TASKS(MIKE_ID())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_ID(), TRUE)
SET_BLIP_EXTENDED_HEIGHT_THRESHOLD(blip_objective,true)
SET_ENTITY_COORDS(MIKE_ID(),<< 2750.81, 1579.74, 49.69>>)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
mission_substage++
ENDIF
if IS_ENTITY_AT_COORD(MIKE_ID(),<<2736.12, 1537.14, 48.69 >>,<<2,2,6>>)
//mike
remove_blip(peds[mpf_mike].blip)
if not DOES_BLIP_EXIST(blip_objective)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2735.8027, 1535.9937, 48.3381 >>)
endif
CLEAR_PED_TASKS(MIKE_ID())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(MIKE_ID(), TRUE)
SET_BLIP_EXTENDED_HEIGHT_THRESHOLD(blip_objective,true)
SET_ENTITY_COORDS(MIKE_ID(),<< 2750.81, 1579.74, 49.69>>)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
mission_substage++
endif
break
case 5
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2734.4053, 1529.7186, 46.3205 >>,<<3,3,20>>)
or IS_ENTITY_AT_COORD(FRANK_ID(),<< 2757.7056, 1539.8588, 44.8806 >>,<<3,3,20>>)
or GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(MIKE_ID()),GET_ENTITY_COORDS(FRANK_ID())) < 20
//blips
if not DOES_BLIP_EXIST(peds[mpf_mike].blip)
peds[mpf_mike].blip = CREATE_BLIP_FOR_PED(MIKE_ID(),true)
endif
if DOES_BLIP_EXIST(blip_objective)
REMOVE_BLIP(blip_objective)
endif
//mike
OPEN_SEQUENCE_TASK(seq)
TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(null,<<2741.55, 1574.16, 49.70>>,FRANK_ID(),PEDMOVE_SPRINT,true)
TASK_SHOOT_AT_ENTITY(null,FRANK_ID(),-1,FIRING_TYPE_RANDOM_BURSTS)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(MIKE_ID(),seq)
CLEAR_SEQUENCE_TASK(seq)
//-------load next stage now ready -----------
load_asset_stage(msf_6_Ladder_dodge)
//--------------------------------------------
// eheliLight = HL_MIKE
icamDelay = GET_GAME_TIMER()
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
mission_substage++
endif
break
case 6
if GET_GAME_TIMER() - icamDelay > 10000
or IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),MIKE_ID())
or IS_PLAYER_TARGETTING_ENTITY(player_id(),MIKE_ID())
or GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(MIKE_ID()),GET_ENTITY_COORDS(FRANK_ID())) < 18
or (HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(MIKE_ID(),FRANK_ID()))
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(MIKE_ID())
//mike
TASK_FOLLOW_NAV_MESH_TO_COORD(MIKE_ID(),<< 2735.5762, 1576.0760, 49.5361 >>,PEDMOVE_SPRINT,DEFAULT_TIME_NEVER_WARP)
SET_PED_MIN_MOVE_BLEND_RATIO(MIKE_ID(),PEDMOVE_SPRINT)
mission_substage++
endif
break
case 7
//Mike reached the ladder
if IS_ENTITY_AT_COORD(MIKE_ID(),<< 2735.7717, 1576.9320, 51.6>>,<<1.5,1.5,2>>)
//cam
cameraIndex = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED,<< 2738.0515, 1574.1177, 51.0774 >>, << -7.4845, 0.9834, 28.0021 >>,67.1294)
SET_CAM_ACTIVE(cameraIndex,true)
RENDER_SCRIPT_CAMS(true,false)
SHAKE_CAM(cameraIndex,"HAND_SHAKE",0.6)
SET_CAM_PARAMS(cameraIndex,<< 2737.6831, 1574.0182, 51.0801 >>, << 3.5197, -1.0329, 37.5864 >>,67.1294,4000,GRAPH_TYPE_LINEAR)
//sycnscene mike
SET_PED_MIN_MOVE_BLEND_RATIO(MIKE_ID(),PEDMOVE_STILL)
CLEAR_PED_TASKS_IMMEDIATELY(MIKE_ID())
SyncSceneIG3 = CREATE_SYNCHRONIZED_SCENE(<<2735.436,1576.891,49.518>>,<<0,0,-104.4>>)
TASK_SYNCHRONIZED_SCENE(MIKE_ID(),SyncSceneIG3,"missfinale_b_ig_3","climb_ladder_mic",INSTANT_BLEND_IN,NORMAL_BLEND_OUT)
if not DOES_BLIP_EXIST(blip_objective)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2738.9934, 1575.4868, 52>>)
SET_BLIP_COLOUR(blip_objective,BLIP_COLOUR_RED)
endif
if DOES_BLIP_EXIST(peds[mpf_mike].blip)
REMOVE_BLIP(peds[mpf_mike].blip)
endif
stop_all_audio_scenes(5)
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_MICHAEL_CLIMBS_LADDER")
start_audio_Scene("FIN_2_MICHAEL_CLIMBS_LADDER")
endif
icamDelay = GET_GAME_TIMER()
Prep_start_Cutscene(false,<< 2739.4050, 1577.1288, 51.4361 >>)
bPushInFXPlayed = FALSE
mission_substage++
endif
break
case 8
// IF NOT DOES_ENTITY_EXIST(ladderMike)
// REQUEST_MODEL(PLAYER_ZERO)
// IF HAS_MODEL_LOADED(PLAYER_ZERO)
// ladderMike = CREATE_PED(PEDTYPE_MISSION, PLAYER_ZERO, <<2735.4473, 1575.9996, 49.5362>>, 336.5930)
// TASK_CLIMB_LADDER(ladderMike, TRUE)
// SET_MODEL_AS_NO_LONGER_NEEDED(PLAYER_ZERO)
// ENDIF
// ENDIF
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG3)
and GET_SYNCHRONIZED_SCENE_PHASE(syncsceneIG3) >= 0.46
SET_CURRENT_PED_WEAPON(MIKE_ID(),WEAPONTYPE_UNARMED,true)
//delete gun
mission_substage++
endif
break
case 9
IF NOT bPushInFXPlayed
AND GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON
AND GET_GAME_TIMER() - icamDelay >= 4090
ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE)
PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET")
bPushInFXPlayed = TRUE
ENDIF
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG3)
and GET_SYNCHRONIZED_SCENE_PHASE(syncsceneIG3) >= 1
or (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) AND NOT bPushInFXPlayed)
//cam
Prep_stop_Cutscene(true)
RENDER_SCRIPT_CAMS(false,false)
set_entity_heading(FRANK_ID(), GET_HEADING_FROM_COORDS(GET_ENTITY_COORDS(FRANK_ID()),GET_ENTITY_COORDS(MIKE_ID())))
set_gameplay_cam_relative_heading(GET_SNIPER_RIFLE_AIM_HEADING_FOR_PED(MIKE_ID()))
set_gameplay_cam_relative_pitch(GET_SNIPER_RIFLE_AIM_PITCH_FOR_PED(MIKE_ID()))
//mike
CLEAR_PED_TASKS_IMMEDIATELY(MIKE_ID())
SET_ENTITY_COORDS(MIKE_ID(),<< 2736.2512, 1578.1141, 65.5427 >>)
set_entity_heading(MIKE_ID(), 42.3170)
TASK_FOLLOW_NAV_MESH_TO_COORD(MIKE_ID(),<< 2729.6072, 1579.8430, 65.5428 >>,PEDMOVE_RUN)
FORCE_PED_MOTION_STATE(MIKE_ID(),MS_ON_FOOT_RUN,true,FAUS_CUTSCENE_EXIT)
stop_all_audio_scenes(5)
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_CHASE_UP_LADDER")
start_audio_Scene("FIN_2_CHASE_UP_LADDER")
endif
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
mission_substage++
endif
break
case 10
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
if IS_ENTITY_AT_COORD(Mike_ID(),<< 2729.6072, 1579.8430, 65.5428 >>,<<2,2,2>>)
SET_ENTITY_VISIBLE(MIKE_ID(),false)
if not DOES_BLIP_EXIST(blip_objective)
blip_objective = CREATE_BLIP_FOR_COORD(<< 2738.9934, 1575.4868, 52>>)
SET_BLIP_COLOUR(blip_objective,BLIP_COLOUR_RED)
endif
mission_substage++
endif
break
case 11
//Fail here if player goes too far away from ladder.
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2745.7, 1573.3, 50>>) > 110
Mission_Failed(mff_lost_mike)
ENDIF
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2736.6770, 1575.8693, 50.0683 >>,<<4,4,2>>)
if DOES_BLIP_EXIST(blip_objective)
REMOVE_BLIP(blip_objective)
endif
mission_substage = STAGE_ENTRY
mission_set_stage(msf_6_Ladder_dodge)
endif
break
endswitch
//Dialogue
IF doneUPSTChat = FALSE
IF mission_substage > 9
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(convo_struct,1,PLAYER_PED_ID(),"FRANKLIN", TRUE)
IF CREATE_CONVERSATION(convo_struct, "FIN2AUD", "FIN2_UPST", CONV_PRIORITY_MEDIUM)
//You goin' up there, huh?
//Why you going up there?
doneUPSTChat = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC ST_6_LADDER_DODGE()
switch mission_substage
case STAGE_ENTRY
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
endif
//Flags
cutsceneRequested = FALSE
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(6,"Stage 6: Ladder dodge")
//michael
//top of ladder pointing down at franklin
GIVE_WEAPON_TO_PED(MIKE_ID(),WEAPONTYPE_PISTOL,INFINITE_AMMO,true,true)
SET_CURRENT_PED_WEAPON(MIKE_ID(),WEAPONTYPE_PISTOL,true)
SET_PED_INFINITE_AMMO(MIKE_ID(),true,WEAPONTYPE_PISTOL)
SET_PED_COMBAT_MOVEMENT(MIKE_ID(),CM_DEFENSIVE)
SET_PED_SPHERE_DEFENSIVE_AREA(MIKE_ID(),<< 2735.4871, 1578.3522, 65.7129 >>,2)
TASK_AIM_GUN_AT_ENTITY(MIKE_ID(),FRANK_ID(),-1)
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_CHASE_UP_LADDER")
start_audio_Scene("FIN_2_CHASE_UP_LADDER")
endif
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_HELICOPTER_ARRIVES")
start_audio_scene("FIN_2_HELICOPTER_ARRIVES")
endif
icamDelay = GET_GAME_TIMER()
iLadderStage = 0
mission_substage++
break
case 1
if IS_ENTITY_AT_COORD(FRANK_ID(),<<2735.73, 1576.83, 58.73>>,<<4,4,10>>)
and IS_PLAYER_CLIMBING(player_id())
//mike
SET_ENTITY_VISIBLE(MIKE_ID(),true)
SET_ENTITY_COORDS(MIKE_ID(),<< 2735.91, 1577.47, 65.54 >>)
if iLadderStage = 7
SET_PED_ACCURACY(MIKE_ID(),0)
TASK_SHOOT_AT_ENTITY(MIKE_ID(), FRANK_ID(),-1,FIRING_TYPE_RANDOM_BURSTS)
endif
FREEZE_ENTITY_POSITION(MIKE_ID(),true)
CLEAR_PED_TASKS(MIKE_ID())
TRIGGER_MUSIC_EVENT("FINB_CLIMB")
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
mission_substage++
ENDIF
break
case 2
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220747
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2735.7068, 1576.8636, 59.4745 >>,<<1,1,1>>)
//-------load next stage now ready -----------
load_asset_stage(msf_7_over_the_Edge)
//--------------------------------------------
mission_substage++
endif
break
case 3
if IS_ENTITY_AT_COORD(frank_id(), << 2735.6948, 1576.5291, 55.5211 >>,<<1,1,1>>)
mission_substage = 1
endif
if IS_ENTITY_AT_COORD(FRANK_ID(),<< 2735.7371, 1576.6788, 64.9689 >>,<<1,1,1.2>>)
mission_substage = STAGE_ENTRY
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED(TRUE, FINB_FOOTCHASE_TIME)
Mission_Set_Stage(msf_7_over_the_Edge)
mission_substage++
endif
break
endswitch
manage_shooting_from_above()
//Fail mission if player goes back down ladder and tries to leave the area.
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2735.8, 1577, 50>>) > 50
Mission_Failed(mff_lost_mike)
ENDIF
IF cutsceneRequested = FALSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2735.8, 1577, 50>>) < 100
REQUEST_CUTSCENE("fin_B_MCS_2")
cutsceneRequested = TRUE
ENDIF
ELSE
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2735.8, 1577, 50>>) > 100
REMOVE_CUTSCENE()
cutsceneRequested = FALSE
ENDIF
ENDIF
if mission_substage >= 1 and mission_substage < 4
if not IS_PLAYER_CLIMBING(player_id())
SET_ENTITY_VISIBLE(MIKE_ID(),false)
FREEZE_ENTITY_POSITION(MIKE_ID(),false)
if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(MIKE_ID(),SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD)
TASK_FOLLOW_NAV_MESH_TO_COORD(MIKE_ID(),<< 2729.5681, 1579.2888, 65.5428 >>,PEDMOVE_RUN)
endif
mission_substage = 1
endif
endif
ENDPROC
proc Manage_cam_angles()
switch icam
case 0
//SET_CAM_PARAMS(cameraIndex,<< 2727.7112, 1575.7562, 67.6807 >>, << -62.3590, -7.3807, 35.3189 >>,62,3000,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR) //BUG FIX 1303726
icamDelay = GET_GAME_TIMER()
icam = 2//icam++ BUG FIX 1303726 just bypassing this straight to case 2 so it doesn't repeat case 1 now that that camera is to be 1st shot immediately after cutscene.
break
case 1
if get_game_timer() - icamdelay > 2500
SET_CAM_PARAMS(cameraIndex,<< 2686.6641, 1578.0531, 23.6635 >>, << 39.7643, -17.7609, -90.8670 >>,22.6486,0)
SHAKE_CAM(cameraIndex,"HAND_SHAKE",0.8)
icamDelay = GET_GAME_TIMER()
icam++
endif
break
case 2
if get_game_timer() - icamdelay > 3500
SET_CAM_PARAMS(cameraIndex,<< 2726.6614, 1577.7256, 65.2210 >>, << 23.2568, 7.2233, -107.1534 >>,68.8743,0)
SET_CAM_PARAMS(cameraIndex,<< 2726.7603, 1578.2632, 65.2330 >>, << 23.2568, 7.2233, -107.1534 >>,68.8743,5000,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR)
icamDelay = GET_GAME_TIMER()
icam++
endif
break
case 3
// if get_game_timer() - icamdelay > 4000
// SET_CAM_FOV(cameraIndex,47)
// ATTACH_CAM_TO_ENTITY(cameraIndex, vehs[mvf_heli].id, <<-1.8529, -3.0518, -1.5364>>)
// POINT_CAM_AT_ENTITY(cameraIndex,FRANK_ID(),<<0,0,0>>)
// icamDelay = GET_GAME_TIMER()
icam++
// endif
break
case 4
if get_game_timer() - icamdelay > 6000
STOP_CAM_POINTING(cameraIndex)
DETACH_CAM(cameraIndex)
SET_CAM_PARAMS(cameraIndex,<< 2726.6204, 1575.2729, 67.2784 >>, << -27.9599, 7.2233, -28.8742 >>,45,0)
SET_CAM_PARAMS(cameraIndex,<< 2726.9519, 1575.1512, 67.3749 >>, << -27.9599, 7.2233, -11.0954 >>,45,5000,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR)
icamDelay = GET_GAME_TIMER()
icam++
endif
break
case 5
if get_game_timer() - icamdelay > 6000
icam = 1
endif
break
endswitch
#IF IS_DEBUG_BUILD
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_5)
// OUTPUT_DEBUG_CAM_RELATIVE_TO_VEHICLE(vehs[mvf_heli].id)
ENDIF
#ENDIF
endproc
PROC ST_7_OVER_THE_EDGE()
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_KillMichael")
switch mission_substage
case STAGE_ENTRY
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_HELICOPTER_ARRIVES")
start_audio_scene("FIN_2_HELICOPTER_ARRIVES")
endif
//For bug 1847954
SUPPRESS_PICKUP_REWARD_TYPE(PICKUP_REWARD_TYPE_WEAPON, FALSE)
CLEAR_PLAYER_WANTED_LEVEL(player_id())
SET_WANTED_LEVEL_MULTIPLIER(0)
REQUEST_CUTSCENE("fin_B_MCS_2")
// SET_CS_OUTFITS_AND_EXITS()
creditsStarted = FALSE
bcs_frank = false
bcs_mike = false
bcs_mikeCar = false
bcs_gun = false
endCutRequested = FALSE
pain1Done = FALSE
pain2Done = FALSE
pain3Done = FALSE
damagePack1Done = FALSE
damagePack2Done = FALSE
doneChatHold = FALSE
scriptCamsStopped = FALSE
syncSceneStarted = FALSE
// bMikeMoved = FALSE
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(7,"Stage 7: over the Edge",true)
KILL_ANY_CONVERSATION()
icam = 0
mission_substage++
break
case 1
if HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
CLEAR_PED_BLOOD_DAMAGE(MIKE_ID())
REGISTER_ENTITY_FOR_CUTSCENE(MIKE_ID(),"Michael",CU_ANIMATE_EXISTING_SCRIPT_ENTITY, DUMMY_MODEL_FOR_SCRIPT, CEO_PRESERVE_FACE_BLOOD_DAMAGE|CEO_PRESERVE_BODY_BLOOD_DAMAGE) //BUG FIX 1405439
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(),"Franklin",CU_ANIMATE_EXISTING_SCRIPT_ENTITY, DUMMY_MODEL_FOR_SCRIPT, CEO_PRESERVE_FACE_BLOOD_DAMAGE|CEO_PRESERVE_BODY_BLOOD_DAMAGE) //BUG FIX 1405439
START_CUTSCENE(CUTSCENE_SUPPRESS_FP_TRANSITION_FLASH) // Block FP flash for url:bugstar:2057705
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
HANG_UP_AND_PUT_AWAY_PHONE()
mission_substage++
endif
break
case 2
if IS_CUTSCENE_PLAYING()
CLEAR_PED_PROP(PLAYER_PED_ID(), ANCHOR_HEAD)
CLEAR_PED_PROP(peds[mpf_mike].id, ANCHOR_HEAD)
if IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
endif
TRIGGER_MUSIC_EVENT("FINB_TOWER")
stop_all_audio_Scenes(5)
CLEAR_AREA(<< 2735.7068, 1576.8636, 59.4745 >>,50,true)
CLEAR_AREA_OF_COPS(<< 2735.7068, 1576.8636, 59.4745 >>,50)
CLEAR_AREA_OF_PEDS(<< 2735.7068, 1576.8636, 59.4745 >>,50)
CLEAR_PLAYER_WANTED_LEVEL(player_id())
bPunch1 = false
bPunch2 = false
bVideoCaptured = false
mission_substage++
endif
break
case 3
//Add a video capture moment for him getting flung over the balcony.
IF bVideoCaptured = FALSE
if IS_CUTSCENE_PLAYING()
IF GET_CUTSCENE_TIME() > 83500
REPLAY_RECORD_BACK_FOR_TIME(6.0)
bVideoCaptured = TRUE
ENDIF
ENDIF
ENDIF
if not bPunch1
if HAS_ANIM_EVENT_FIRED(MIKE_ID(),GET_HASH_KEY("1stPunch"))
println("1stPunch")
// APPLY_PED_BLOOD_BY_ZONE(MIKE_ID(),ENUM_TO_INT(PDZ_HEAD),0.512,0.640,"BulletSmall")
bPunch1 = true
endif
endif
if not bPunch2
if HAS_ANIM_EVENT_FIRED(MIKE_ID(),GET_HASH_KEY("2ndPunch"))
println("2ndPunch")
// APPLY_PED_BLOOD_BY_ZONE(MIKE_ID(),ENUM_TO_INT(PDZ_HEAD),0.572,0.680,"BulletSmall")
// APPLY_PED_DAMAGE_DECAL(MIKE_ID(),PDZ_HEAD,0.582,0.692,0,0.637,-1,-1,false,"bruise")
// APPLY_PED_DAMAGE_DECAL(MIKE_ID(),PDZ_HEAD,0.582,0.692,0,0.637,-1,-1,false,"bruise")
// APPLY_PED_DAMAGE_DECAL(MIKE_ID(),PDZ_HEAD,0.582,0.692,0,0.637,-1,-1,false,"bruise")
// APPLY_PED_DAMAGE_DECAL(MIKE_ID(), PDZ_HEAD, 0.6150000, 0.490000, 180.000000, 0.5, -1, 1, false, "stab")
APPLY_PED_DAMAGE_PACK(MIKE_ID(),"SCR_Finale_Michael_Face",0,1)
bPunch2 = true
endif
endif
if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
//cam
cameraIndex = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, << 2686.6641, 1578.0531, 23.6635 >>, << 39.7643, -17.7609, -90.8670 >>,22.6486) //<< 2727.9268, 1575.4513, 68.3937 >>, << -62.3590, -7.3807, 35.3189 >>,45.0000) //BUG FIX 1303726
SET_CAM_ACTIVE(cameraIndex,true)
SHAKE_CAM(cameraIndex,"HAND_SHAKE",0.8)//BUG FIX 1303726
Prep_start_Cutscene(false,<< 2726.2207, 1579.3988, 91.7594 >>)
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_MAKE_CHOICE")
start_audio_Scene("FIN_2_MAKE_CHOICE")
endif
bcs_frank = true
SET_SCRIPTS_SAFE_FOR_CUTSCENE(false)
SETUP_PC_CONTROLS() // Add special PC controls for final choice
REPLAY_STOP_EVENT()
mission_substage++
endif
break
case 4
//Call every frame to hide the sniper pick up created from another script.
ENABLE_EXTERIOR_CULL_MODEL_THIS_FRAME(eModel) //Bug fix 1847954 to stop the sniper rifle pick up spawning in.
IF syncSceneStarted = FALSE
REPLAY_RECORD_BACK_FOR_TIME(4.0, 10.0, REPLAY_IMPORTANCE_HIGHEST)
SyncSceneIG5 = CREATE_SYNCHRONIZED_SCENE(<<2727.982,1576.869,65.250>>,<<0,0,179.990>>)
//frank
TASK_SYNCHRONIZED_SCENE(FRANK_ID(),SyncSceneIG5,"missfinale_b_ig_5","hold_michael_loop_fra",INSTANT_BLEND_IN,NORMAL_BLEND_OUT)
FORCE_PED_AI_AND_ANIMATION_UPDATE(FRANK_ID())
//mike
TASK_SYNCHRONIZED_SCENE(Mike_ID(),SyncSceneIG5,"missfinale_b_ig_5","hold_michael_loop_mic",INSTANT_BLEND_IN,NORMAL_BLEND_OUT)
FORCE_PED_AI_AND_ANIMATION_UPDATE(Mike_ID())
syncSceneStarted = TRUE
ENDIF
IF endCutRequested = FALSE
IF NOT IS_CUTSCENE_ACTIVE()
//Request the end cutscene now
REQUEST_CUTSCENE("fin_b_ext")
endCutRequested = TRUE
ENDIF
ENDIF
Manage_cam_angles()
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG5)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG5) >= 1
SyncSceneIG5 = CREATE_SYNCHRONIZED_SCENE(<<2727.982,1576.869,65.250>>,<<0,0,179.990>>)
//frank
TASK_SYNCHRONIZED_SCENE(FRANK_ID(),SyncSceneIG5,"missfinale_b_ig_5","hold_michael_loop_fra",INSTANT_BLEND_IN,NORMAL_BLEND_OUT)
//mike
TASK_SYNCHRONIZED_SCENE(Mike_ID(),SyncSceneIG5,"missfinale_b_ig_5","hold_michael_loop_mic",INSTANT_BLEND_IN,NORMAL_BLEND_OUT)
endif
//Only allow the drop to happen once the cutscene has loaded
IF endCutRequested = TRUE
AND HAS_CUTSCENE_LOADED()
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("FIN2_DROP")
PRINT_HELP_FOREVER("FIN2_DROP")
ENDIF
if IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_SCRIPT_RDOWN) // drop
OR (doneChatHold = TRUE AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED())
// SyncSceneIG5 = CREATE_SYNCHRONIZED_SCENE(<<2727.982,1576.869,65.250>>,<<0,0,179.990>>)
// //frank
// TASK_SYNCHRONIZED_SCENE(FRANK_ID(),SyncSceneIG5,"missfinale_b_ig_5","hold_michael_drop_fra",normal_BLEND_IN,walk_BLEND_OUT)
// //mike
// TASK_SYNCHRONIZED_SCENE(Mike_ID(),SyncSceneIG5,"missfinale_b_ig_5","hold_michael_drop_mic",normal_BLEND_IN,NORMAL_BLEND_OUT)
// misc
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CLEAR_PRINTS()
CLEAR_HELP()
//cam
// STOP_CAM_POINTING(cameraIndex)
// DETACH_CAM(cameraIndex)
// SET_CAM_PARAMS(cameraIndex,<< 2725.6858, 1583.9159, 67.5568 >>, << -11.1217, 2.3208, -160.0679 >>,17.5411,0)
// SET_CAM_PARAMS(cameraIndex,<< 2725.2576, 1583.7570, 67.5387 >>, << -11.1217, 2.3208, -159.0268 >>,17.5411,6000)
//audio
STOP_all_AUDIO_SCENES(5)
TRIGGER_MUSIC_EVENT ("FINB_CHOOSE")
REPLAY_RECORD_BACK_FOR_TIME(2.0, 12.0, REPLAY_IMPORTANCE_HIGHEST)
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_KILL_MICHAEL")
start_audio_Scene("FIN_2_KILL_MICHAEL")
endif
icam = 4
mission_substage++
elif IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_SCRIPT_RRIGHT) //save
//Remove the original cutscene and load in the other one so it starts on section 2
REMOVE_CUTSCENE()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CLEAR_PRINTS()
CLEAR_HELP()
REQUEST_CUTSCENE_WITH_PLAYBACK_LIST("fin_b_ext", CS_SECTION_2|CS_SECTION_3|CS_SECTION_4|CS_SECTION_5|CS_SECTION_6|CS_SECTION_7|CS_SECTION_8|CS_SECTION_9)
SyncSceneIG5 = CREATE_SYNCHRONIZED_SCENE(<<2727.982,1576.869,65.250>>,<<0,0,179.990>>)
//frank
TASK_SYNCHRONIZED_SCENE(FRANK_ID(),SyncSceneIG5,"missfinale_b_ig_5","hold_michael_headbut_fra",INSTANT_BLEND_IN,walk_BLEND_OUT)
//mike
TASK_SYNCHRONIZED_SCENE(Mike_ID(),SyncSceneIG5,"missfinale_b_ig_5","hold_michael_headbut_mic",INSTANT_BLEND_IN,NORMAL_BLEND_OUT)
//cam
STOP_CAM_POINTING(cameraIndex)
DETACH_CAM(cameraIndex)
SET_CAM_PARAMS(cameraIndex,<< 2725.6858, 1583.9159, 67.5568 >>, << -11.1217, 2.3208, -160.0679 >>,17.5411,0)
SET_CAM_PARAMS(cameraIndex,<< 2725.2576, 1583.7570, 67.5387 >>, << -11.1217, 2.3208, -159.0268 >>,17.5411,6000)
//audio
STOP_all_AUDIO_SCENES(5)
TRIGGER_MUSIC_EVENT ("FINB_CHOOSE")
if not IS_AUDIO_SCENE_ACTIVE("FIN_2_SAVE_MICHAEL")
start_audio_Scene("FIN_2_SAVE_MICHAEL")
endif
REPLAY_RECORD_BACK_FOR_TIME(2.0, 12.0, REPLAY_IMPORTANCE_HIGHEST)
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(FINB_CHOICE)
icam = 4
mission_substage = 401
endif
endif
//Have some dialogue between them here.
IF doneChatHold = FALSE
IF NOT IS_MESSAGE_BEING_DISPLAYED()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
OR NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
ADD_PED_FOR_DIALOGUE(convo_struct,0,MIKE_ID(),"MICHAEL", TRUE)
ADD_PED_FOR_DIALOGUE(convo_struct,1,PLAYER_PED_ID(),"FRANKLIN", TRUE)
IF CREATE_CONVERSATION(convo_struct, "FIN2AUD", "FIN2_HOLD", CONV_PRIORITY_MEDIUM)
//Eh, you told me, when the time came, I'd know. I'm sorry!
//You hypocrite!
//I'm sorry. It's like you said... I understand.
//You don't understand nothing!
//I'm all you got!
//You made the wrong call!
//I'm all you got!
//You made the wrong call!
//Argh!
//I'll bring you with me!
//I'm taking you down!
//You're coming in the ground with me!
//Franklin!
//Greedy prick!
doneChatHold = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
break
case 401
STOP_CAM_POINTING(cameraIndex)
DETACH_CAM(cameraIndex)
//Play pain sounds
IF pain1Done = FALSE
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG5)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG5) >= 0.257
PLAY_PAIN(PLAYER_PED_ID(), AUD_DAMAGE_REASON_CLIMB_LARGE)
pain1Done = TRUE
ENDIF
ENDIF
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG5)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG5) >= 0.683
SET_CAM_PARAMS(cameraIndex,<< 2727.4436, 1574.4738, 67.0238 >>, << -12.9643, 2.3208, -6.2610 >>,45,0)
SET_CAM_PARAMS(cameraIndex,<< 2727.6797, 1574.8011, 67.5812 >>, << -28.1126, 2.3208, 3.7272 >>,45,1400)
mission_substage=402
endif
break
case 402
//Play pain sounds
IF pain2Done = FALSE
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG5)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG5) >= 0.704
PLAY_PAIN(PLAYER_PED_ID(), AUD_DAMAGE_REASON_CLIMB_LARGE)
pain2Done = TRUE
ENDIF
ENDIF
//Play pain sounds
IF pain3Done = FALSE
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG5)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG5) >= 0.825
IF DOES_ENTITY_EXIST(Mike_ID())
IF NOT IS_PED_INJURED(Mike_ID())
PLAY_PAIN(Mike_ID(), AUD_DAMAGE_REASON_CLIMB_LARGE)
pain3Done = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//added extra pack for Franklin, see B*1862063
IF damagePack1Done = FALSE
IF IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG5)
AND GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG5) >= 0.885
APPLY_PED_DAMAGE_PACK(PLAYER_PED_ID(), "SCR_Franklin_finb", 0.0, 1.0)
damagePack1Done = TRUE
ENDIF
ENDIF
if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG5)
and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG5) >= 1
mission_substage=5
ENDIF
break
case 5
// STOP_CAM_POINTING(cameraIndex)
// DETACH_CAM(cameraIndex)
// //Reposition Michael just before the camera switch so he is not seen being moved.
// IF bMikeMoved = FALSE
// if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG5)
// and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG5) >= 0.35
// CLEAR_PED_TASKS_IMMEDIATELY(MIKE_ID())
// set_entity_coords(MIKE_ID(),<< 2727.42407, 1581.22046, 49.49731 >>)
// REMOVE_ALL_PED_WEAPONS(MIKE_ID())
// SET_ENTITY_INVINCIBLE(MIKE_ID(), FALSE)
// SET_ENTITY_HEALTH(MIKE_ID(), 105)
// bMikeMoved = TRUE
// ENDIF
// ENDIF
// if IS_SYNCHRONIZED_SCENE_RUNNING(SyncSceneIG5)
// and GET_SYNCHRONIZED_SCENE_PHASE(SyncSceneIG5) >= 0.8
// //cam
// SET_CAM_PARAMS(cameraIndex,<<2727.4807, 1578.6859, 73.0591>>, <<-87.5858, -46.6135, 15.8136>>,17.4602,0)
// SET_CAM_PARAMS(cameraIndex,<<2727.3752, 1579.0480, 64.1485>>, <<-87.5858, -46.6135, 15.8136>>,17.4602,4000)
//// REQUEST_CUTSCENE("FIN_B_EXT")
//// SET_CS_OUTFITS_AND_EXITS()
// bPlaceholder = true
// mission_substage++
// icamDelay = GET_GAME_TIMER()
// endif
bloodAdded = FALSE
REGISTER_ENTITY_FOR_CUTSCENE(MIKE_ID(), "Michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, DEFAULT, CEO_PRESERVE_FACE_BLOOD_DAMAGE)
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
IF NOT DOES_CAM_EXIST(EndCreditCam)
EndCreditCam = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA")
SET_CAM_PARAMS(EndCreditCam, <<2689.549561,1549.860962,29.784725>>,<<8.000013,-0.000006,177.999985>>,40.000000)
ENDIF
REQUEST_ADDITIONAL_TEXT("CREDIT", MISSION_TEXT_SLOT)
START_CUTSCENE()
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
bVideoCaptured = FALSE
mission_substage++
break
case 6
// //panning heli crash
// if (GET_GAME_TIMER() - icamDelay) > 4000
// SET_CAM_PARAMS(cameraIndex,<<2657.0061, 1589.9597, 32.4828>>, <<-7.4921, 5.7494, -106.6028>>,30.4406,0)
// SET_CAM_PARAMS(cameraIndex, <<2656.2671, 1585.8317, 32.1422>>, <<-8.1866, 1.0515, -96.9596>>,30.4406,8000)
// icamDelay = GET_GAME_TIMER()
// mission_substage++
// endif
IF IS_CUTSCENE_PLAYING()
//Add a video capture moment from the shot of Michael lying dead on the ground
IF bVideoCaptured = FALSE
IF GET_CUTSCENE_TIME() > 8200
REPLAY_RECORD_BACK_FOR_TIME(10.0)
bVideoCaptured = TRUE
ENDIF
ENDIF
IF bloodAdded = FALSE
IF HAS_ANIM_EVENT_FIRED(MIKE_ID(),GET_HASH_KEY("Michael_Fucked"))
// decalBlood[0] = ADD_DECAL(DECAL_RSID_BLOOD_SPLATTER, <<2727.3877, 1578.0725, 23.5010>>, << 0.0, 0.0, -1.0 >>, NORMALISE_VECTOR(<< 0.0, 1.0, 0.0 >>), 1.0, 1.0, 0.196, 0, 0, 1.0, -1)
// WAIT(0)
// decalBlood[1] = ADD_DECAL(DECAL_RSID_BLOOD_SPLATTER, <<2727.4, 1578.4, 23.5010>>, << 0.0, 0.0, -1.0 >>, NORMALISE_VECTOR(<< 0.0, 1.0, 0.0 >>), 1.0, 1.0, 0.196, 0, 0, 1.0, -1)
APPLY_PED_DAMAGE_PACK(MIKE_ID(),"SCR_Finale_Michael",0,1)
bloodAdded = TRUE
ENDIF
ENDIF
//added extra pack for Franklin, see B*1862063
IF damagePack2Done = FALSE
IF damagePack1Done = TRUE
IF GET_CUTSCENE_TIME() > 7500
APPLY_PED_DAMAGE_PACK(PLAYER_PED_ID(), "SCR_Franklin_finb2", 0.0, 1.0)
damagePack2Done = TRUE
ENDIF
ENDIF
ENDIF
IF scriptCamsStopped = FALSE
// RENDER_SCRIPT_CAMS(FALSE, FALSE)
SET_CAM_ACTIVE(EndCreditCam, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
scriptCamsStopped = TRUE
ENDIF
// IF GET_CUTSCENE_TIME() > 64700
// IF NOT IS_SCREEN_FADED_OUT()
// DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME_LONG)
// ENDIF
// ENDIF
//Stop player from being able to skip cutscene from this point on
IF GET_CUTSCENE_TIME() > 46000
DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_SKIP_CUTSCENE)
ENDIF
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin")
REPLAY_STOP_EVENT()
TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(), <<2689.5, 1383, 23.9>>, PEDMOVEBLENDRATIO_WALK, -1)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK)
ENDIF
//Start end credits music here
IF g_bFinaleCreditsPlaylistStarted = FALSE
IF GET_CUTSCENE_TIME() > 46710 + 9666
PLAY_END_CREDITS_MUSIC(TRUE)
SET_MOBILE_RADIO_ENABLED_DURING_GAMEPLAY(TRUE)
SET_MOBILE_PHONE_RADIO_STATE(TRUE)
SET_RADIO_TO_STATION_NAME("RADIO_01_CLASS_ROCK")
SET_CUSTOM_RADIO_TRACK_LIST("RADIO_01_CLASS_ROCK", "END_CREDITS_KILL_MICHAEL", TRUE)
g_bFinaleCreditsPlaylistStarted = TRUE
ENDIF
ENDIF
IF creditsStarted = FALSE
IF GET_CUTSCENE_TIME() >63352//61686// 62500
//OR NOT IS_CUTSCENE_ACTIVE()
SET_CREDITS_ACTIVE(TRUE)
SET_CREDITS_FADE_OUT_WITH_SCREEN(FALSE)
START_AUDIO_SCENE("END_CREDITS_SCENE")
SET_GAME_PAUSES_FOR_STREAMING(FALSE)
AWARD_ACHIEVEMENT_FOR_MISSION(ACH04) // To live or die in los santos
creditsStarted = TRUE
ENDIF
ENDIF
ENDIF
// IF IS_SCREEN_FADED_OUT()
IF NOT IS_CUTSCENE_ACTIVE()
mission_substage++
// Mission_Passed()
ENDIF
break
case 7
SHAKE_CAM(EndCreditCam, "HAND_SHAKE", 0.1)
SETTIMERA(0)
mission_substage++
break
case 8
IF TIMERA() > 45000
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(5000)
ENDIF
IF IS_SCREEN_FADED_OUT()
Mission_Passed()
ENDIF
ENDIF
break
// case 7
// if (GET_GAME_TIMER() - icamDelay) > 5000
// SET_CAM_PARAMS(cameraIndex,<< 2729.8484, 1577.9122, 68.6455 >>, << -41.6983, -0.0000, 105.8610 >>,30,0)
// SET_CAM_PARAMS(cameraIndex,<< 2730.2754, 1576.2191, 68.6455 >>, << -41.6983, -0.0000, 90.3166 >>,30,12000)
// icamDelay = GET_GAME_TIMER()
// mission_substage++
// endif
// break
// case 8
// if (GET_GAME_TIMER() - icamDelay) > 6000
// prep_stop_cutscene(true,false,true)
// SET_POLICE_IGNORE_PLAYER(player_id(),true)
// Point_Gameplay_cam_at_heading(96.0485)
// SET_GAMEPLAY_CAM_RELATIVE_PITCH(-51.2113)
// CLEAR_PED_TASKS(FRANK_ID())
// //BUG FIX 1411536 Tell player to leave the area
// CLEAR_PRINTS()
// PRINT_NOW("FIN2_GOD1", DEFAULT_GOD_TEXT_TIME, 1)//~s~Leave the area.
// bfailchecks = FALSE //BUG FIX setting this to false to stop the mission from failing if you get too far from Michael's car in next substage.
// bOnFoot = FALSE //BUG FIX to allow player to get in a vehicle to leave area.
// mission_substage++
// endif
// break
// case 9
// //Trigger phone call if player gets over 100m's away or once he's at bottom of the stairs. BUG FIX 1425859
// IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2727.6, 1580.1, 70>>) > 100
// OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<2735.5, 1576.7, 49.5>>, <<3,3,3>>)
// mission_substage++
// ENDIF
// break
// case 10
// ADD_PED_FOR_DIALOGUE(convo_struct,1,FRANK_ID(),"FRANKLIN")
// ADD_PED_FOR_DIALOGUE(convo_struct,4,NULL,"LAMAR")
// if PLAYER_CALL_CHAR_CELLPHONE(convo_struct,CHAR_LAMAR,"FIN2AUD","FIN2_EXT",CONV_PRIORITY_MEDIUM)
// mission_substage++
// endif
// break
// case 11
// //BUG FIX fade the screen out at the end before the credits roll
//// IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<2727.6, 1580.1, 70>>) > 100
// IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// IF NOT IS_SCREEN_FADED_OUT()
// DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME_LONG)
// mission_substage++
// ENDIF
// ENDIF
// break
// case 12
// IF IS_SCREEN_FADED_OUT()
// Mission_Passed()
// ENDIF
// break
endswitch
DISPLAY_AMMO_THIS_FRAME(false)
ENDPROC
Proc ST_8_PASSED()
switch mission_substage
case STAGE_ENTRY
IF NOT IS_SCREEN_FADED_OUT()
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
endif
mission_substage++
break
case 1
IF IS_SCREEN_FADED_OUT()
Mission_Passed()
ENDIF
break
endswitch
endproc
// -----------------------------------------------------------------------------------------------------------
// MISSION FLOW
// -----------------------------------------------------------------------------------------------------------
PROC mission_flow()
Switch int_to_enum(MSF_MISSION_STAGE_FLAGS, mission_stage)
case msf_0_meet ST_0_MEET() break
case msf_1_chase ST_1_CHASE() break
case msf_2_power_plant ST_2_POWERPLANT() break
case msf_4_heli_appears ST_4_HELI() break
case msf_3_confrontation ST_3_CONFRONTATION() break
case msf_5_shoot_out ST_5_SHOOT_OUT() break
case msf_6_Ladder_dodge ST_6_LADDER_DODGE() break
case msf_7_over_the_Edge ST_7_OVER_THE_EDGE() break
case msf_8_passed ST_8_PASSED() break
endswitch
ENDPROC
#IF IS_DEBUG_BUILD
PROC DO_DEBUG()
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)
MISSION_PASSED()
ELIF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)
MISSION_FAILED()
ENDIF
ENDPROC
#endif
// ===========================================================================================================
// Script Loop
// ===========================================================================================================
SCRIPT
PRINTSTRING("...finale 2 Mission Launched")
PRINTNL()
IF (HAS_FORCE_CLEANUP_OCCURRED())
PRINTSTRING("...finale 2 Mission Force Cleanup")
PRINTNL()
Mission_Flow_Mission_Force_Cleanup()
if IS_CUTSCENE_ACTIVE()
SET_CUTSCENE_FADE_VALUES()
endif
Mission_Cleanup()
TERMINATE_THIS_THREAD()
ENDIF
SET_MISSION_FLAG(TRUE)
REQUEST_MISSION_AUDIO_BANK("FINALE_B_GENERAL")
ADD_RELATIONSHIP_GROUP("michael_rel", REL_Michael)
//load text
REQUEST_ADDITIONAL_TEXT("FINALE2",MISSION_TEXT_SLOT)
if not HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
wait(0)
endif
#if IS_DEBUG_BUILD
//z menu for skipping stages
zMenuNames[msf_0_meet].sTxtLabel = "Stage 0: meet"
zMenuNames[msf_1_chase].sTxtLabel = "Stage 1: chase"
zMenuNames[msf_2_power_plant].sTxtLabel = "Stage 2: power plant"
zMenuNames[msf_3_confrontation].sTxtLabel = "Stage 3: confrontation"
zMenuNames[msf_4_heli_appears].sTxtLabel = "Stage 4: heli appears"
zMenuNames[msf_5_shoot_out].sTxtLabel = "Stage 5: shoot out"
zMenuNames[msf_6_Ladder_dodge].sTxtLabel = "Stage 6: Ladder dodge"
zMenuNames[msf_7_over_the_Edge].sTxtLabel = "Stage 7: over the Edge"
zMenuNames[msf_8_Passed].sTxtLabel = "----------- PASSED -----------"
zMenuNames[CST_MCS_1].sTxtLabel = "Stage 0: MCS_1"
zMenuNames[CST_MCS_1].bSelectable = false
zMenuNames[CST_MCS_2].sTxtLabel = "Stage 7: MCS_2"
zMenuNames[CST_MCS_2].bSelectable = false
zMenuNames[CST_EXT].sTxtLabel = "Exit Cutscene"
zMenuNames[CST_EXT].bSelectable = false
widget_debug = START_WIDGET_GROUP("Finale 2 Menu")
//debug position
ADD_WIDGET_FLOAT_SLIDER("vDebugPosition.x", vDebugPosition.x, -6000.0, 6000.0, 0.01)
ADD_WIDGET_FLOAT_SLIDER("vDebugPosition.y", vDebugPosition.y, -6000.0, 6000.0, 0.01)
ADD_WIDGET_FLOAT_SLIDER("vDebugPosition.z", vDebugPosition.z, -6000.0, 6000.0, 0.01)
ADD_WIDGET_FLOAT_SLIDER("fDebugheading", fDebugheading, 0.0, 360.0, 0.01)
STOP_WIDGET_GROUP()
SET_LOCATES_HEADER_WIDGET_GROUP(widget_debug)
#endif
if not IS_REPLAY_IN_PROGRESS()
timelapse()
endif
//initialize mission
MISSION_SETUP()
WHILE (TRUE)
//For video recorder
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_KillMichael")
//prestreaming loop
Update_Asset_Management_System(sAssetData) // Deals with loading any assets and keeps track of what has been loaded
Update_Cutscene_Prestreaming(sCutscenePedVariationRegister)
Mission_stage_management()
MISSION_STAGE_SKIP()
if not bDoSkip
MISSION_CHECKS()
mission_flow()
endif
#IF IS_DEBUG_BUILD
DO_DEBUG()
#ENDIF
WAIT(0)
ENDWHILE
ENDSCRIPT