// ***************************************************************************************** // ***************************************************************************************** // ***************************************************************************************** // // 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(<>))) 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, <>) 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