//╔═════════════════════════════════════════════════════════════════════════════╗ //║ ║ //║ Author: Alan Litobarski Date: 16/08/2011 ║ //║ ║ //╠═════════════════════════════════════════════════════════════════════════════╣ //║ ║ //║ Michael 2 - Fresh Meat (Michael2.sc) ║ //║ ║ //║ Player gets kidnapped. ║ //║ Use hot-swap to narrow down the location of a ped. ║ //║ ║ //╚═════════════════════════════════════════════════════════════════════════════╝ //Compile out Title Update changes to header functions. //Must be before includes. //CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R. //═════════════════════════════════╡ HEADERS ╞═══════════════════════════════════ USING "rage_builtins.sch" USING "globals.sch" USING "commands_misc.sch" USING "commands_pad.sch" USING "commands_script.sch" USING "commands_player.sch" USING "commands_streaming.sch" USING "commands_vehicle.sch" USING "commands_camera.sch" USING "commands_path.sch" USING "commands_fire.sch" USING "commands_graphics.sch" USING "commands_object.sch" USING "commands_task.sch" USING "commands_misc.sch" USING "commands_entity.sch" USING "commands_hud.sch" USING "commands_object.sch" USING "commands_interiors.sch" USING "commands_misc.sch" USING "cellphone_public.sch" USING "flow_public_core_override.sch" USING "model_enums.sch" USING "script_player.sch" USING "selector_public.sch" USING "player_ped_public.sch" USING "dialogue_public.sch" USING "locates_public.sch" USING "chase_hint_cam.sch" USING "LineActivation.sch" USING "script_blips.sch" USING "script_heist.sch" USING "script_buttons.sch" USING "replay_public.sch" USING "cam_recording_public.sch" USING "help_at_location.sch" USING "cutscene_public.sch" USING "mission_stat_public.sch" USING "CompletionPercentage_public.sch" USING "taxi_functions.sch" USING "shared_hud_displays.sch" USING "emergency_call.sch" USING "spline_cam_edit.sch" USING "building_control_public.sch" USING "cheat_controller_public.sch" USING "commands_recording.sch" USING "push_in_public.sch" USING "script_misc.sch" #IF IS_DEBUG_BUILD USING "script_debug.sch" USING "select_mission_stage.sch" #ENDIF //══════════════════════════════════╡ CONST ╞════════════════════════════════════ CONST_INT iTotalRailNodes 40 CONST_INT iEnemyIntroCut 10 CONST_INT iEnemyOutside 3 CONST_INT iEnemyShootout 16 CONST_INT iEnemyBackup 12 CONST_INT iEnemySetPiece 10 CONST_INT iEnemyEscape 8 CONST_INT iEnemyChase 2 CONST_INT iTotalEnemy iEnemyIntroCut + iEnemyOutside + iEnemyShootout + iEnemyBackup + iEnemySetPiece + iEnemyEscape + iEnemyChase //══════════════════════════════════╡ ENUMS ╞════════════════════════════════════ ENUM MissionObjective initMission, stageCutIntro, stageFindMichael, stageAbattoirShootout, stageSwitchToMichael, stageMichaelEscape, stageMichaelFree, stageTriadsChase, stageBackToMichaels, stageCutEnd, passMission, failMission ENDENUM MissionObjective eMissionObjective = initMission #IF IS_DEBUG_BUILD MissionObjective eMissionObjectiveAutoJSkip = initMission #ENDIF ENUM MissionFail failFranklinDied, failMichaelDied, failFranklinAbandon, failMichaelAbandon, failCarDestroyed, failOutOfAmmo, failGeneric ENDENUM MissionFail eMissionFail //Combat Attributes ENUM ADVANCE_STYLE GO_TO_COMBAT, GO_TO_POINT, AIM_TO_POINT, GUN_TO_POINT, PEEK_FROM_POINT ENDENUM //Audio ENUM AUDIO_TRACK NO_AUDIO, MIC2_START, MIC2_FRANK_VEH, MIC2_FIND_A_WAY, MIC2_SWITCHED, MIC2_FIGHT_BEGINS, MIC2_FIGHT_CONT, MIC2_ABATTOIR_PROGRESS, MIC2_ACID_BATH_OS, MIC2_MULCHED, MIC2_SPINNING_BLADES, MIC2_HANGING_MICHAEL, MIC2_BACK_TO_FRANK, MIC3_FRANK_DOWN, MIC2_FRANK_SAVED, MIC2_VEHICLE_READY, MIC2_LOSE_TRIADS, MIC2_TRIADS_LOST, MIC2_RADIO_SETUP, MIC2_OVER, MIC2_DEAD, MIC2_FIND_MIKE_RT, MIC2_FIGHT_BEGINS_RT, MIC2_HANGING_RT, MIC2_MICHAEL_ESCAPE_RT, MIC2_TRIADS_CHASE_RT ENDENUM AUDIO_TRACK ePrepAudioTrack = NO_AUDIO AUDIO_TRACK ePlayAudioTrack = NO_AUDIO //════════════════════════════════╡ STRUCTURES ╞═════════════════════════════════ //SWITCH SELECTOR_PED_STRUCT sSelectorPeds SELECTOR_CAM_STRUCT sCamDetails //Dialogue structPedsForConversation sPedsForConversation //Locates Struct LOCATES_HEADER_DATA sLocatesData STRUCT RAIL_NODE_STRUCT VECTOR vPos VECTOR vRot ENDSTRUCT RAIL_NODE_STRUCT sRailNodes[iTotalRailNodes] STRUCT ACTOR PED_INDEX pedIndex BLIP_INDEX blipIndex INT iStage = 0 INT iTimer //Advance Conditions INT iTime[3] PED_INDEX pedCheck[3] VECTOR vLocate[3] VECTOR vLocSize[3] FLOAT fDist[3] INT iBitsetStrict //BOOL bStrict[3] //Advance Style ADVANCE_STYLE eAdvanceStyle[3] FLOAT fSpeed[3] INT iBitsetNavMesh //BOOL bNavMesh[3] //Advance Point VECTOR vPoint[3] //Advance Point STRING sAnimDict STRING sAnimName #IF IS_DEBUG_BUILD STRING sDebugName #ENDIF ENDSTRUCT ACTOR sEnemyIntroCut[iEnemyIntroCut] ACTOR sEnemyOutside[iEnemyOutside] ACTOR sEnemyShootout[iEnemyShootout] ACTOR sEnemyBackup[iEnemyBackup] ACTOR sEnemySetPiece[iEnemySetPiece] ACTOR sEnemyEscape[iEnemyEscape] ACTOR sEnemyChase[iEnemyChase] AI_BLIP_STRUCT blipStructOutside[iEnemyOutside] AI_BLIP_STRUCT blipStructShootout[iEnemyShootout] AI_BLIP_STRUCT blipStructBackup[iEnemyBackup] AI_BLIP_STRUCT blipStructSetPiece[iEnemySetPiece] AI_BLIP_STRUCT blipStructEscape[iEnemyEscape] //════════════════════════════════╡ VARIABLES ╞══════════════════════════════════ //Rail Variables INT iCurrentNode INT iRailNodeToStopAt BOOL bOkToMoveRail BOOl bOkToHangFromHook //BOOL bFixedRotation VECTOR vRailCurrent FLOAT fMoveSpeedMult = 0.225 // / 2 FLOAT fHookMass = 2000.0 //Switch Variables BOOL bOkToSwitch //BOOL bReattach //INT iReattach BOOL bRailInit FLOAT fDistTotalFirstFinalNode FLOAT fDistFromCurrentNode FLOAT fDistFromFinalNode INT iTimerNode = -1 //VECTOR vHeadingForSwappingToFranklin //VECTOR vFranklinGameCamRot = <<0.0, 0.0, 190.5426>> //BOOL bUseNewInterpCam //Gun Throw Variables //BOOL bShootingUpsideDown FLOAT fHeadingTrack //Set Piece Variables ENUM SET_PIECE SET_PIECE_FALL, // SET_PIECE_KNIFE, SET_PIECE_RAIL, SET_PIECE_STEAM, SET_PIECE_STAIR, SET_PIECE_GRINDER, SET_PIECE_CUTTER, SET_PIECE_MINCER, SET_PIECE_CONVEYOR, SET_PIECE_GRAPPLE, SET_PIECE_COW ENDENUM INT iSetPiece[COUNT_OF(SET_PIECE)] INT sceneSteam INT sceneGrinder INT sceneConveyor INT sceneGrapple VECTOR vGrapplePos = <<997.380, -2103.649, 29.450 + 0.07>> VECTOR vGrappleRot = <<0.0, 0.0, -95.0>> INT iGrappleStage //Grapple set piece Sync Scene stage //Integers INT iCutsceneStage INT iDialogueStage = 0 INT iDialogueLineCount[5] INT iDialogueTimer[4] //#IF IS_DEBUG_BUILD //INT iDebugNode = -1 //DEBUG REMOVE THIS //#ENDIF //INT iHealthStore = -1 BOOL bBlood //Track if blood has been applied to Michael enumCharacterList pedBlood //Ped char changes... INT iBulletTimer //For tracking the time since the player shot their weapon INT iDamageTimer //Time before peds can be damaged by buddy INT iAdvanceTimer //Time before peds advance INT iCowShootTimer OBJECT_INDEX objCow INT iDoesObjectOfTypeExistAtCoords //INT iDriveByTimer ENUM CHASE_TIMER_INDEX CHASE_TIMER_ENEMY_1, CHASE_TIMER_ENEMY_2, CHASE_TIMER_CAR ENDENUM INT iChaseTimer[3] VECTOR vCurrentPoint, vChasePoint FLOAT fCurrentPoint, fChasePoint //Stats //INT iAmmo = -1 //WEAPON_TYPE wtCurrent //Bools BOOL bVideoRecording BOOL bInitStage BOOL bCleanupStage BOOL bRadar #IF IS_DEBUG_BUILD //Debug BOOL bAutoSkipping #ENDIF #IF IS_DEBUG_BUILD //Debug BOOL bDebugMichaelDeathSkip BOOL bDebugMichaelDeathDoNotFail BOOL bDebugMichaelSkipToStart BOOL bDebugMichaelSkipToCapture BOOL bDebugMichaelCapturePoint INT iCaptureNode VECTOR vCaptureCurrent, vRailCurrentRot INT iCaptureStage INT iCaptureTimer BOOL bDebugMichaelPausePlay INT iDebugMichaelDebugTime = -1 BOOL bDebugMichaelDebugTime BOOL bDebugMichaelSetDebugCam BOOL bDebugMichaelCaptureDebugCam CAMERA_INDEX camDebug INT iDebugMichaelHandCam, iDebugMichaelHandCamLast FLOAT fDebugMichaelHandCam = 1.0 #ENDIF BOOL bSkipped //Used for J-skipping and Mid Mission Replay BOOL bReplaySkip BOOL bCutsceneSkipped //Tracks if WAS_CUTSCENE_SKIPPED() returns TRUE BOOL bPreloaded //For Preloaded Cutscene BOOL bPinnedAbattoir BOOL bGrabGrinder BOOL bGrabCutter BOOL bGrabMincer BOOL bFranklinToMichael BOOL bPhoneSwitch BOOL bHaltVehicle BOOL bPassed //Passed the mission BOOL bSetUncapped #IF IS_DEBUG_BUILD BOOL bDebugAudio #ENDIF BOOL bFrankToMikeSwitchCam, bFrankToMikeSwitchCam2 //Keep whichever camera is loaded for the switch, even if the player gets out the car again //Vectors and Floats VECTOR VECTOR_ZERO = <<0.0, 0.0, 0.0>> VECTOR vPlayerStart = <<997.8165, -2178.0439, 28.3477>> CONST_FLOAT fPlayerStart 87.8708 VECTOR vChainOffset = <<0.0, -0.09, -0.875>> VECTOR vChainRotation = <<-0.01, 0.0, 180.0>> VECTOR vPadlockOffset = <<0.0, 0.075, -0.91>> VECTOR vPadlockRotation = <<0.0, 0.0, 180.0>> VECTOR vMichaelAttachOffset = <<-0.01, -0.05, -2.05 + 0.25>> //VECTOR vHookPosOffset = VECTOR_ZERO //Strings STRING sAnimDictMic2SetPiece1 = "missmic2@goon1" STRING sAnimDictMic2SetPiece2 = "missmic2@goon2" STRING sAnimDictMic2Hook = "missmic2@meat_hook" STRING sAnimDictMic2Switch = "missmic2@switch" STRING sAnimDictMic2Smoking = "missmic2@enemy" STRING sAnimDictMic2WashFace = "missmic2_washing_face" STRING sAnimDictMic2FranklinBeckon = "missmic2@franklin_beckon" STRING sAnimDictMic2LeadOut = "missmic_2_intleadout" STRING sAnimDictMic2IG11 = "missmic2ig_11" //STRING sAnimDictHang = "misswiphanging" STRING sAnimDictIdle1 = "amb@world_human_hang_out_street@male_a@idle_a" //idle_a b c d e STRING sAnimDictIdle2 = "amb@world_human_hang_out_street@male_b@idle_a" //idle_a b c d STRING sAnimDictIdle3 = "amb@world_human_hang_out_street@male_c@base" //base STRING sAnimDictIdle4 = "amb@world_human_hang_out_street@male_c@idle_a" //idle_a b c STRING sAnimDictMachine = "missmic2@machine" //Scenes INT sceneSwitch VECTOR sceneSwitchPos = <<994.094, -2150.380, 31.385>> //<<994.157, -2150.380, 31.385>> VECTOR sceneSwitchRot = <<0.0, -4.430, -6.840>> //<<0.526, 0.0, -4.430>> INT sceneCow VECTOR sceneCowPos = <<964.096, -2106.750, 30.469>> VECTOR sceneCowRot = <<0.0, 0.0, -4.0>> INT sceneWashFace VECTOR sceneWashFacePos = <<-803.583, 168.284, 76.285>> VECTOR sceneWashFaceRot = <<0.0, 0.0, 110.0>> //═════════════════════════════════╡ INDEXES ╞═══════════════════════════════════ //Ped PED_INDEX pedClosestEnemy PED_INDEX pedIntro PED_INDEX pedDenise PED_INDEX pedFriend1 PED_INDEX pedFriend2 //Vehicle VEHICLE_INDEX vehCar VEHICLE_INDEX vehFranklin VEHICLE_INDEX vehEnemy[iEnemyChase] VEHICLE_INDEX vehEnemyChase[iEnemyChase / 2] VEHICLE_INDEX vehHachiRoku VEHICLE_INDEX vehEscape VEHICLE_INDEX vehEnd //Blip BLIP_INDEX blipMichael BLIP_INDEX blipFranklin BLIP_INDEX blipDestination BLIP_INDEX blipEnemyVan[iEnemyChase / 2] BLIP_INDEX blipGuns //Pickup //Camera CAMERA_INDEX camMain CAMERA_INDEX camAnim CAMERA_INDEX camSwitch //Sequence SEQUENCE_INDEX seqMain //Interior INTERIOR_INSTANCE_INDEX intAbattoir INTERIOR_INSTANCE_INDEX intMansion //Object OBJECT_INDEX objDoorAnim OBJECT_INDEX objDoorReal OBJECT_INDEX objHook OBJECT_INDEX objChain OBJECT_INDEX objPadlock OBJECT_INDEX objCrate[3] OBJECT_INDEX objGrinder OBJECT_INDEX objCutter OBJECT_INDEX objMincer VECTOR vCigaretteAttachOffset = <<0.035, 0.0, 0.0>> VECTOR vCigaretteParticleOffset = <<-0.08, 0.0, 0.0>> PTFX_ID ptfxCigarette[4] OBJECT_INDEX objCigarette[4] OBJECT_INDEX objGun //OBJECT_INDEX objBinBag //Pickup PICKUP_INDEX piPickups[5] //Doors INT iFrontDoor = HASH("DOORHASH_F_HOUSE_SC_F") INT iEntranceDoor = ENUM_TO_INT(DOORHASH_ABBATOIR_FRONT_L) INT iExitDoor = HASH("DOORHASH_ABATTOIR_EXIT") //Navmesh INT iNavBlock[5] //Particle //Cover COVERPOINT_INDEX covPoint[22] //Groups //Weapons WEAPON_TYPE wtLastWeapon = WEAPONTYPE_UNARMED //Relationship Groups REL_GROUP_HASH relGroupFriendlyFire REL_GROUP_HASH relGroupBuddy REL_GROUP_HASH relGroupEnemy REL_GROUP_HASH relGroupPassive //Sound INT sfxRail = -1 INT sfxWoosh = -1 INT sfxCow = -1 //Push In Cam Struct PUSH_IN_DATA pushInData //BUG 2006022, 2005375, 2005357 //Rayfire //Model Names #IF IS_DEBUG_BUILD WIDGET_GROUP_ID widGroup #ENDIF //════════════════════════════════╡ FUNCTIONS ╞══════════════════════════════════ BOOL bPlayerControl = TRUE PROC SAFE_SET_PLAYER_CONTROL(PLAYER_INDEX iPlayerIndex, BOOL bSetControlOn, SET_PLAYER_CONTROL_FLAGS iFlags = 0) SET_PLAYER_CONTROL(iPlayerIndex, bSetControlOn, iFlags) bPlayerControl = bSetControlOn ENDPROC FUNC BOOL SAFE_IS_PLAYER_CONTROL_ON() IF bPlayerControl RETURN TRUE ENDIF RETURN FALSE ENDFUNC //Stage Selector #IF IS_DEBUG_BUILD INT iStageSkipMenu CONST_INT MAX_SKIP_MENU_LENGTH COUNT_OF(MissionObjective) - 2 //Number of stages in mission minus Pass/Fail MissionStageMenuTextStruct SkipMenuStruct[MAX_SKIP_MENU_LENGTH] PROC MissionNames() SkipMenuStruct[0].sTxtLabel = "initMission" SkipMenuStruct[1].sTxtLabel = "stageCutIntro - (MIC_2_INT)" SkipMenuStruct[2].sTxtLabel = "stageFindMichael - (MIC_2_MCS_1)" SkipMenuStruct[3].sTxtLabel = "stageAbattoirShootout" SkipMenuStruct[4].sTxtLabel = "stageSwitchToMichael" SkipMenuStruct[5].sTxtLabel = "stageMichaelEscape" SkipMenuStruct[6].sTxtLabel = "stageMichaelFree" SkipMenuStruct[7].sTxtLabel = "stageTriadsChase" SkipMenuStruct[8].sTxtLabel = "stageBackToMichaels" SkipMenuStruct[9].sTxtLabel = "stageCutEnd - (mic_2_mcs_3_concat)" ENDPROC #ENDIF //Text STRING sConversationBlock = "MCH2AUD" INT iTriggeredTextHashes[120] INT iNumTextHashesStored = 0 PROC REMOVE_LABEL_ARRAY_SPACES() INT iArrayLength = COUNT_OF(iTriggeredTextHashes) INT i = 0 REPEAT (iArrayLength - 1) i IF iTriggeredTextHashes[i] = 0 IF iTriggeredTextHashes[i+1] != 0 iTriggeredTextHashes[i] = iTriggeredTextHashes[i+1] iTriggeredTextHashes[i+1] = 0 ENDIF ENDIF ENDREPEAT ENDPROC FUNC INT GET_LABEL_INDEX(INT iLabelHash) INT i = 0 REPEAT iNumTextHashesStored i IF iTriggeredTextHashes[i] = iLabelHash RETURN i ENDIF ENDREPEAT RETURN -1 ENDFUNC FUNC BOOL HAS_LABEL_BEEN_TRIGGERED(STRING strLabel) INT iHash = GET_HASH_KEY(strLabel) IF GET_LABEL_INDEX(iHash) != -1 RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC SET_LABEL_AS_TRIGGERED(STRING strLabel, BOOL bTrigger) INT iHash = GET_HASH_KEY(strLabel) IF bTrigger IF NOT HAS_LABEL_BEEN_TRIGGERED(strLabel) INT iArraySize = COUNT_OF(iTriggeredTextHashes) IF iNumTextHashesStored < iArraySize iTriggeredTextHashes[iNumTextHashesStored] = iHash iNumTextHashesStored++ ELSE #IF IS_DEBUG_BUILD SCRIPT_ASSERT("SET_LABEL_AS_TRIGGERED: Label array is full.") #ENDIF ENDIF ENDIF ELSE INT iIndex = GET_LABEL_INDEX(iHash) IF iIndex != -1 iTriggeredTextHashes[iIndex] = 0 REMOVE_LABEL_ARRAY_SPACES() iNumTextHashesStored-- ENDIF ENDIF ENDPROC PROC CLEAR_TRIGGERED_LABELS() INT iArraySize = COUNT_OF(iTriggeredTextHashes) INT i = 0 REPEAT iArraySize i iTriggeredTextHashes[i] = 0 ENDREPEAT iNumTextHashesStored = 0 ENDPROC //Models INT iLoadedModelHashes[20] FUNC BOOL HAS_MODEL_BEEN_LOADED(MODEL_NAMES mnModel) INT iHash = ENUM_TO_INT(mnModel) INT i REPEAT COUNT_OF(iLoadedModelHashes) i IF iLoadedModelHashes[i] = iHash RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC PROC SET_MODEL_AS_LOADED(MODEL_NAMES mnModel, BOOL bIsLoaded) INT iHash = ENUM_TO_INT(mnModel) INT i = 0 BOOL bQuitLoop = FALSE WHILE i < COUNT_OF(iLoadedModelHashes) AND NOT bQuitLoop IF bIsLoaded IF iLoadedModelHashes[i] = 0 iLoadedModelHashes[i] = iHash bQuitLoop = TRUE ENDIF ELSE IF iLoadedModelHashes[i] = iHash iLoadedModelHashes[i] = 0 bQuitLoop = TRUE ENDIF ENDIF i++ ENDWHILE ENDPROC PROC CLEAR_LOADED_MODELS() INT i = 0 REPEAT COUNT_OF(iLoadedModelHashes) i iLoadedModelHashes[i] = 0 ENDREPEAT ENDPROC FUNC BOOL HAS_MODEL_LOADED_CHECK(MODEL_NAMES mnModel) IF NOT HAS_MODEL_BEEN_LOADED(mnModel) REQUEST_MODEL(mnModel) #IF IS_DEBUG_BUILD PRINTLN("LOADING MODEL #", ENUM_TO_INT(mnModel)) #ENDIF IF HAS_MODEL_LOADED(mnModel) SET_MODEL_AS_LOADED(mnModel, TRUE) #IF IS_DEBUG_BUILD PRINTLN("MODEL #", ENUM_TO_INT(mnModel), " LOADED") #ENDIF ENDIF ELSE RETURN TRUE ENDIF RETURN FALSE ENDFUNC //Recordings INT iLoadedRecordingHashes[30] FUNC BOOL HAS_RECORDING_BEEN_LOADED(INT iFileNumber, STRING sRecordingName) TEXT_LABEL txtHash txtHash = iFileNumber txtHash += sRecordingName INT iHash = GET_HASH_KEY(txtHash) INT i REPEAT COUNT_OF(iLoadedRecordingHashes) i IF iLoadedRecordingHashes[i] = iHash RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC PROC SET_RECORDING_AS_LOADED(INT iFileNumber, STRING sRecordingName, BOOL bIsLoaded) TEXT_LABEL txtHash txtHash = iFileNumber txtHash += sRecordingName INT iHash = GET_HASH_KEY(txtHash) INT i = 0 BOOL bQuitLoop = FALSE WHILE i < COUNT_OF(iLoadedRecordingHashes) AND NOT bQuitLoop IF bIsLoaded IF iLoadedRecordingHashes[i] = 0 iLoadedRecordingHashes[i] = iHash bQuitLoop = TRUE ENDIF ELSE IF iLoadedRecordingHashes[i] = iHash iLoadedRecordingHashes[i] = 0 bQuitLoop = TRUE ENDIF ENDIF i++ ENDWHILE ENDPROC PROC CLEAR_LOADED_RECORDINGS() INT i = 0 REPEAT COUNT_OF(iLoadedRecordingHashes) i iLoadedRecordingHashes[i] = 0 ENDREPEAT ENDPROC FUNC BOOL HAS_RECORDING_LOADED_CHECK(INT iFileNumber, STRING sRecordingName) IF NOT HAS_RECORDING_BEEN_LOADED(iFileNumber, sRecordingName) REQUEST_VEHICLE_RECORDING(iFileNumber, sRecordingName) IF HAS_VEHICLE_RECORDING_BEEN_LOADED(iFileNumber, sRecordingName) SET_RECORDING_AS_LOADED(iFileNumber, sRecordingName, TRUE) PRINTSTRING("RECORDING ") PRINTINT(iFileNumber) PRINTSTRING(" ") PRINTSTRING(sRecordingName) PRINTSTRING(" LOADED") PRINTNL() ELSE PRINTSTRING("LOADING RECORDING ") PRINTINT(iFileNumber) PRINTSTRING(" ") PRINTSTRING(sRecordingName) PRINTNL() ENDIF ELSE RETURN TRUE ENDIF RETURN FALSE ENDFUNC //Animation Dictionaries INT iAnimDictHashes[20] FUNC BOOL HAS_ANIM_DICT_BEEN_LOADED(STRING strAnimDict) INT iHash = GET_HASH_KEY(strAnimDict) INT iNumHashes = COUNT_OF(iAnimDictHashes) INT i = 0 REPEAT iNumHashes i IF iAnimDictHashes[i] = iHash RETURN TRUE ENDIF ENDREPEAT RETURN FALSE ENDFUNC PROC SET_ANIM_DICT_AS_LOADED(STRING strAnimDict, BOOL bIsLoaded) INT iHash = GET_HASH_KEY(strAnimDict) INT iNumHashes = COUNT_OF(iAnimDictHashes) INT i = 0 BOOL bQuitLoop = FALSE WHILE i < iNumHashes AND NOT bQuitLoop IF bIsLoaded IF iAnimDictHashes[i] = 0 iAnimDictHashes[i] = iHash bQuitLoop = TRUE ENDIF ELSE IF iAnimDictHashes[i] = iHash iAnimDictHashes[i] = 0 bQuitLoop = TRUE ENDIF ENDIF i++ ENDWHILE ENDPROC PROC CLEAR_LOADED_ANIM_DICTS() INT iNumHashes = COUNT_OF(iAnimDictHashes) INT i = 0 REPEAT iNumHashes i iAnimDictHashes[i] = 0 ENDREPEAT ENDPROC FUNC BOOL HAS_ANIM_DICT_LOADED_CHECK(STRING strAnimDict) IF NOT HAS_ANIM_DICT_BEEN_LOADED(strAnimDict) REQUEST_ANIM_DICT(strAnimDict) #IF IS_DEBUG_BUILD PRINTLN("LOADING ANIM DICT ", strAnimDict) #ENDIF IF HAS_ANIM_DICT_LOADED(strAnimDict) SET_ANIM_DICT_AS_LOADED(strAnimDict, TRUE) #IF IS_DEBUG_BUILD PRINTLN("LOADING ANIM DICT ", strAnimDict, " LOADED") #ENDIF ENDIF ELSE RETURN TRUE ENDIF RETURN FALSE ENDFUNC PROC UNLOAD_ANIM_DICT(STRING strAnimDict) IF HAS_ANIM_DICT_BEEN_LOADED(strAnimDict) REMOVE_ANIM_DICT(strAnimDict) #IF IS_DEBUG_BUILD PRINTLN("REMOVE ANIM DICT ", strAnimDict) #ENDIF SET_ANIM_DICT_AS_LOADED(strAnimDict, FALSE) ENDIF ENDPROC PROC ADVANCE_CUTSCENE() SETTIMERA(0) iCutsceneStage++ PRINTLN("iCutsceneStage = ", iCutsceneStage) ENDPROC PROC ADVANCE_STAGE() bCleanupStage = TRUE ENDPROC FUNC BOOL SKIPPED_STAGE() IF bSkipped = TRUE bSkipped = FALSE RETURN TRUE ELSE RETURN FALSE ENDIF ENDFUNC FUNC BOOL INIT_STAGE() IF bInitStage = FALSE SETTIMERA(0) bInitStage = TRUE RETURN TRUE ELSE RETURN FALSE ENDIF ENDFUNC FUNC BOOL CLEANUP_STAGE() IF bCleanupStage = TRUE SETTIMERA(0) bInitStage = FALSE bCleanupStage = FALSE iCutsceneStage = 0 iDialogueStage = 0 INT i REPEAT COUNT_OF(iDialogueLineCount) i iDialogueLineCount[i] = -1 ENDREPEAT REPEAT COUNT_OF(iDialogueTimer) i iDialogueTimer[i] = 0 ENDREPEAT RETURN TRUE ELSE RETURN FALSE ENDIF ENDFUNC PROC SAFE_CLEAR_HELP(BOOL bClearNow = TRUE) IF IS_HELP_MESSAGE_BEING_DISPLAYED() CLEAR_HELP(bClearNow) ENDIF ENDPROC PROC CLEAR_TEXT() CLEAR_PRINTS() SAFE_CLEAR_HELP(TRUE) CLEAR_ALL_FLOATING_HELP() KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDPROC PROC PRINT_ADV(STRING sPrint, INT iDuration = DEFAULT_GOD_TEXT_TIME, BOOL bOnce = TRUE) IF NOT HAS_LABEL_BEEN_TRIGGERED(sPrint) PRINT_NOW(sPrint, iDuration, 1) SET_LABEL_AS_TRIGGERED(sPrint, bOnce) ENDIF ENDPROC PROC PRINT_HELP_ADV(STRING sPrint, BOOL bOnce = TRUE, BOOL bForever = FALSE, INT iOverrideTime = -1) IF NOT HAS_LABEL_BEEN_TRIGGERED(sPrint) IF NOT bForever PRINT_HELP(sPrint, iOverrideTime) ELSE PRINT_HELP_FOREVER(sPrint) ENDIF SET_LABEL_AS_TRIGGERED(sPrint, bOnce) ENDIF ENDPROC PROC PRINT_HELP_ADV_POS(STRING sPrint, VECTOR vLocation, ENTITY_INDEX entIndex = NULL, BOOL bOnce = TRUE, eARROW_DIRECTION eArrow = HELP_TEXT_SOUTH, INT iDuration = 7500) IF NOT HAS_LABEL_BEEN_TRIGGERED(sPrint) IF NOT ARE_VECTORS_EQUAL(vLocation, VECTOR_ZERO) AND vLocation.Z != 0.0 AND entIndex = NULL HELP_AT_LOCATION(sPrint, vLocation, eArrow, iDuration) ELIF NOT ARE_VECTORS_EQUAL(vLocation, VECTOR_ZERO) AND vLocation.Z = 0.0 AND entIndex = NULL HELP_AT_SCREEN_LOCATION(sPrint, vLocation.X, vLocation.Y, eArrow, iDuration) ELIF entIndex != NULL AND ARE_VECTORS_EQUAL(vLocation, VECTOR_ZERO) HELP_AT_ENTITY(sPrint, entIndex, eArrow, iDuration) ELIF entIndex != NULL AND NOT ARE_VECTORS_EQUAL(vLocation, VECTOR_ZERO) HELP_AT_ENTITY_OFFSET(sPrint, entIndex, vLocation, eArrow, iDuration) ENDIF SET_LABEL_AS_TRIGGERED(sPrint, bOnce) ENDIF ENDPROC FUNC PED_INDEX PLAYER_PED(enumCharacterList CHAR_TYPE) IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TYPE RETURN PLAYER_PED_ID() ELSE RETURN sSelectorPeds.pedID[GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(CHAR_TYPE)] ENDIF ENDFUNC FUNC PED_INDEX NOT_PLAYER_PED_ID() IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN RETURN sSelectorPeds.pedID[GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(CHAR_MICHAEL)] ELSE //GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN RETURN sSelectorPeds.pedID[GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(CHAR_FRANKLIN)] ENDIF ENDFUNC PROC SET_PED_POSITION(PED_INDEX pedIndex, VECTOR vCoords, FLOAT fHeading, BOOL bKeepVehicle = TRUE) IF bKeepVehicle = TRUE SET_PED_COORDS_KEEP_VEHICLE(pedIndex, vCoords) ELSE SET_ENTITY_COORDS(pedIndex, vCoords) ENDIF SET_ENTITY_HEADING(pedIndex, fHeading) ENDPROC PROC SET_VEHICLE_POSITION(VEHICLE_INDEX vehicleIndex, VECTOR vCoords, FLOAT fHeading) SET_ENTITY_COORDS(vehicleIndex, vCoords) SET_ENTITY_HEADING(vehicleIndex, fHeading) ENDPROC PROC SPAWN_PLAYER(PED_INDEX &pedIndex, enumCharacterList eChar, VECTOR vStart, FLOAT fStart = 0.0, BOOL bDefault = FALSE) IF NOT DOES_ENTITY_EXIST(pedIndex) WHILE NOT CREATE_PLAYER_PED_ON_FOOT(pedIndex, eChar, vStart, fStart) WAIT(0) ENDWHILE IF bDefault = TRUE SET_PED_DEFAULT_COMPONENT_VARIATION(pedIndex) ENDIF ENDIF ENDPROC PROC SPAWN_PED(PED_INDEX &pedIndex, MODEL_NAMES eModel, VECTOR vStart, FLOAT fStart = 0.0, BOOL bDefault = TRUE) IF NOT DOES_ENTITY_EXIST(pedIndex) pedIndex = CREATE_PED(PEDTYPE_MISSION, eModel, vStart, fStart) IF bDefault = TRUE SET_PED_DEFAULT_COMPONENT_VARIATION(pedIndex) ENDIF ENDIF ENDPROC PROC SPAWN_VEHICLE(VEHICLE_INDEX &vehIndex, MODEL_NAMES eModel, VECTOR vStart, FLOAT fStart = 0.0, INT iColour = -1, FLOAT fDirt = 0.0) IF NOT DOES_ENTITY_EXIST(vehIndex) vehIndex = CREATE_VEHICLE(eModel, vStart, fStart) IF iColour >= 0 SET_VEHICLE_COLOURS(vehIndex, iColour, iColour) ENDIF SET_VEHICLE_DIRT_LEVEL(vehIndex, fDirt) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehIndex, TRUE) ENDIF ENDPROC FUNC BOOL SAFE_IS_PED_DEAD(PED_INDEX &pedIndex) IF DOES_ENTITY_EXIST(pedIndex) IF IS_PED_INJURED(pedIndex) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL SAFE_IS_VEHICLE_DEAD(VEHICLE_INDEX &vehIndex) IF DOES_ENTITY_EXIST(vehIndex) IF IS_ENTITY_DEAD(vehIndex) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL SAFE_DEATH_CHECK_PED(PED_INDEX &pedIndex) IF DOES_ENTITY_EXIST(pedIndex) IF IS_ENTITY_DEAD(pedIndex) OR IS_PED_INJURED(pedIndex) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL SAFE_DEATH_CHECK_VEHICLE(VEHICLE_INDEX &vehIndex) IF DOES_ENTITY_EXIST(vehIndex) IF IS_ENTITY_DEAD(vehIndex) OR NOT IS_VEHICLE_DRIVEABLE(vehIndex) OR IS_VEHICLE_PERMANENTLY_STUCK(vehIndex) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC PROC SAFE_ADD_BLIP_LOCATION(BLIP_INDEX &blipIndex, VECTOR vCoords, BOOL bRoute = FALSE) IF NOT DOES_BLIP_EXIST(blipIndex) blipIndex = CREATE_BLIP_FOR_COORD(vCoords, bRoute) SET_BLIP_PRIORITY(blipIndex, BLIPPRIORITY_HIGHEST) ENDIF ENDPROC PROC SAFE_ADD_BLIP_PED(BLIP_INDEX &blipIndex, PED_INDEX &pedIndex, BOOL bEnemy = TRUE) IF NOT DOES_BLIP_EXIST(blipIndex) IF DOES_ENTITY_EXIST(pedIndex) IF NOT IS_PED_INJURED(pedIndex) blipIndex = CREATE_BLIP_FOR_PED(pedIndex, bEnemy) IF bEnemy = FALSE SET_BLIP_PRIORITY(blipIndex, BLIPPRIORITY_HIGH) ENDIF ENDIF ENDIF ENDIF ENDPROC PROC SAFE_ADD_BLIP_VEHICLE(BLIP_INDEX &blipIndex, VEHICLE_INDEX &vehIndex, BOOL bEnemy = TRUE) IF NOT DOES_BLIP_EXIST(blipIndex) IF DOES_ENTITY_EXIST(vehIndex) IF NOT IS_ENTITY_DEAD(vehIndex) blipIndex = CREATE_BLIP_FOR_VEHICLE(vehIndex, bEnemy) IF bEnemy = FALSE SET_BLIP_PRIORITY(blipIndex, BLIPPRIORITY_HIGH) ENDIF ENDIF ENDIF ENDIF ENDPROC PROC SAFE_REMOVE_BLIP(BLIP_INDEX &blipIndex) IF DOES_BLIP_EXIST(blipIndex) REMOVE_BLIP(blipIndex) ENDIF ENDPROC PROC SAFE_DELETE_PED(PED_INDEX &pedIndex) IF DOES_ENTITY_EXIST(pedIndex) DELETE_PED(pedIndex) ENDIF ENDPROC PROC SAFE_DELETE_VEHICLE(VEHICLE_INDEX &vehicleIndex) IF DOES_ENTITY_EXIST(vehicleIndex) DELETE_VEHICLE(vehicleIndex) ENDIF ENDPROC PROC SAFE_DELETE_OBJECT(OBJECT_INDEX &objectIndex) IF DOES_ENTITY_EXIST(objectIndex) DELETE_OBJECT(objectIndex) ENDIF ENDPROC PROC SET_TIME_IN_PLAYBACK_RECORDED_VEHICLE(VEHICLE_INDEX &vehIndex, FLOAT fTime) IF IS_VEHICLE_DRIVEABLE(vehIndex) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehIndex) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehIndex, fTime - GET_TIME_POSITION_IN_RECORDING(vehIndex)) ENDIF ENDIF ENDPROC STRUCT BLIP_TIMER BLIP_INDEX blipIndex INT iBlipTimer ENDSTRUCT BLIP_TIMER sBlipTimer[10] PROC SET_BLIP_FLASH_DURATION(BLIP_INDEX blipIndex, INT iDuration = 7500) INT i BOOL bSlotCheck BOOL bFreeSlot REPEAT 10 i IF sBlipTimer[i].blipIndex = blipIndex bSlotCheck = TRUE ENDIF ENDREPEAT IF bSlotCheck = FALSE REPEAT 10 i IF bFreeSlot = FALSE IF sBlipTimer[i].blipIndex = NULL sBlipTimer[i].blipIndex = blipIndex sBlipTimer[i].iBlipTimer = GET_GAME_TIMER() + iDuration SET_BLIP_FLASHES(sBlipTimer[i].blipIndex, TRUE) bFreeSlot = TRUE ENDIF ENDIF ENDREPEAT ENDIF IF bFreeSlot = FALSE SCRIPT_ASSERT("No free blip timer slots! Consider expanding array.") ENDIF ENDPROC PROC UPDATE_BLIP_FLASH_TIMERS() INT i REPEAT 10 i IF sBlipTimer[i].blipIndex != NULL IF GET_GAME_TIMER() > sBlipTimer[i].iblipTimer SET_BLIP_FLASHES(sBlipTimer[i].blipIndex, FALSE) sBlipTimer[i].blipIndex = NULL sBlipTimer[i].iblipTimer = 0 ENDIF ENDIF ENDREPEAT ENDPROC PROC SAFE_FREEZE_ENTITY_POSITION(ENTITY_INDEX EntityIndex, BOOL FrozenByScriptFlag) IF NOT IS_ENTITY_ATTACHED(EntityIndex) IF (IS_ENTITY_A_PED(EntityIndex) AND NOT IS_PED_IN_ANY_VEHICLE(GET_PED_INDEX_FROM_ENTITY_INDEX(EntityIndex))) OR NOT IS_ENTITY_A_PED(EntityIndex) FREEZE_ENTITY_POSITION(EntityIndex, FrozenByScriptFlag) ENDIF ENDIF ENDPROC FUNC STRUCT_ENTITY_ID CONSTRUCT_ENTITY_ID() STRUCT_ENTITY_ID structEntityID RETURN structEntityID ENDFUNC FUNC FLOAT RETURN_GROUND_Z_FOR_3D_COORD(VECTOR vCoord) GET_GROUND_Z_FOR_3D_COORD(vCoord, vCoord.Z) RETURN vCoord.Z ENDFUNC FUNC FLOAT GET_INTERP_POINT_FLOAT(FLOAT fStartPos, FLOAT fEndPos, FLOAT fStartTime, FLOAT fEndTime, FLOAT fPointTime) RETURN ((((fEndPos - fStartPos) / (fEndTime - fStartTime)) * (fPointTime - fStartTime)) + fStartPos) ENDFUNC FUNC VECTOR GET_INTERP_POINT_VECTOR(VECTOR vStartPos, VECTOR vEndPos, FLOAT fStartTime, FLOAT fEndTime, FLOAT fPointTime) RETURN <> ENDFUNC //This function will return the value of a number after it has been raised to a power FUNC FLOAT TPO(FLOAT fNumber, INT iPower) INT iLoopControl //This will act as a counter to control how long the loop runs FLOAT fInitialValue = fNumber //This will be used in the loop to multiply the new value //by its initial value FLOAT fResult = 0 //This is the value that the function returns //Use an if statement to determine how to handle the power function //This loop will determine how many times to multiply the number by itself IF iPower = 0 fResult = 1 //Note n^0 = 1 ELIF iPower = 1 fResult = fNumber ELIF iPower < 0 iLoopControl = -iPower + 1 WHILE iLoopControl > 0 fNumber *= fInitialValue iLoopControl-- ENDWHILE fResult = 1 / fNumber ELIF iPower > 1 iLoopControl = iPower - 1 WHILE iLoopControl > 0 fNumber *= fInitialValue iLoopControl-- ENDWHILE fResult = fNumber ENDIF RETURN fResult ENDFUNC FUNC VECTOR HERMITE_CURVE(VECTOR vStartPoint, VECTOR vStartTangent, VECTOR vEndPoint, VECTOR vEndTangent, FLOAT fStartTime, FLOAT fEndTime, FLOAT fPointTime) FLOAT fScale, H1, H2, H3, H4 VECTOR vPoint fScale = fPointTime / (fEndTime - fStartTime) H1 = 2 * TPO(fScale, 3) - 3 * TPO(fScale, 2) + 1 H2 = -2 * TPO(fScale, 3) + 3 * TPO(fScale, 2) H3 = TPO(fScale, 3) - 2 * TPO(fScale, 2) + fScale H4 = TPO(fScale, 3) - TPO(fScale, 2) vPoint = H1 * vStartPoint + H2 * vEndPoint + H3 * vStartTangent + H4 * vEndTangent RETURN vPoint ENDFUNC ///Function for returning the position on the Bezier curve defined by the values passed at time "fTime". FUNC VECTOR GET_POSITION_ON_CURVE(VECTOR vStartPos, VECTOR vInterPos1, VECTOR vInterPos2, VECTOR vEndPos, FLOAT fTime, BOOL bIsCubic = TRUE) IF bIsCubic RETURN (((1-fTime) * (1-fTime) * (1-fTime) * vStartPos) + (3 * (1 - fTime) * (1 - fTime) * fTime * vInterPos1) + (3 * (1 - fTime) * fTime * fTime * vInterPos2) + (fTime * fTime * fTime * vEndPos)) ENDIF RETURN ((((1-fTime)* (1-fTime)) * vStartPos) + (2 * (1-fTime) * fTime * vInterPos1) + (fTime * fTime * vEndPos)) ENDFUNC FUNC FLOAT HEADING_BETWEEN_COORDS(VECTOR vCoord1, VECTOR vCoord2) VECTOR vDirection = vCoord2 - vCoord1 RETURN ATAN2(vDirection.Y, vDirection.X) ENDFUNC #IF IS_DEBUG_BUILD FUNC STRING CONCATENATE_STRINGS(STRING sString1, STRING sString2, STRING sString3 = NULL, STRING sString4 = NULL, STRING sString5 = NULL, STRING sString6 = NULL, STRING sString7 = NULL, STRING sString8 = NULL) TEXT_LABEL txtStrings = sString1 txtStrings += sString2 IF NOT IS_STRING_NULL_OR_EMPTY(sString3) txtStrings += sString3 ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(sString4) txtStrings += sString4 ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(sString5) txtStrings += sString5 ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(sString6) txtStrings += sString6 ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(sString7) txtStrings += sString7 ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(sString8) txtStrings += sString8 ENDIF RETURN GET_STRING_FROM_STRING(txtStrings, 0, GET_LENGTH_OF_LITERAL_STRING(txtStrings)) ENDFUNC #ENDIF FUNC FLOAT GET_HEADING_BETWEEN_VECTORS(VECTOR V1, VECTOR V2) RETURN GET_HEADING_FROM_VECTOR_2D(V2.x-V1.x, V2.y-V1.y) ENDFUNC FUNC FLOAT GET_HEADING_FROM_VECTOR(VECTOR vVector) RETURN vVector.Z ENDFUNC //MIC2_START = 2/2 //MIC2_FRANK_VEH = //MIC2_FIND_A_WAY = //MIC2_SWITCHED = //MIC2_FIGHT_BEGINS = 2/2 //MIC2_FIGHT_CONT = //MIC2_ABATTOIR_PROGRESS = //MIC2_ACID_BATH_OS = 2/2 //MIC2_MULCHED = 2/2 //MIC2_SPINNING_BLADES = 2/2 //MIC2_HANGING_MICHAEL = //MIC2_BACK_TO_FRANK = //MIC3_FRANK_DOWN = 2/2 //MIC2_FRANK_SAVED = 2/2 //MIC2_VEHICLE_READY = //MIC2_LOSE_TRIADS = 2/2 //MIC2_TRIADS_LOST = //MIC2_OVER = //MIC2_DEAD = //MIC2_FIND_MIKE_RT = //MIC2_FIGHT_BEGINS_RT = //MIC2_HANGING_RT = //MIC2_MICHAEL_ESCAPE_RT = //MIC2_TRIADS_CHASE_RT = STRING sAudioEvent INT iAudioPrepareTimer //This is an override in case an audio event is prepared but never used PROC AUDIO_CONTROLLER() #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("<<<<<<<< AUDIO_CONTROLLER >>>>>>>> (sAudioEvent = ", sAudioEvent, ")") ENDIF #ENDIF IF ePlayAudioTrack = NO_AUDIO AND (NOT IS_MUSIC_ONESHOT_PLAYING() OR GET_GAME_TIMER() > iAudioPrepareTimer) SWITCH ePrepAudioTrack CASE MIC2_START #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepare - MIC2_START") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_START") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_START" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_START") ePrepAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepared audio - MIC2_START") ENDIF #ENDIF ENDIF ENDIF BREAK CASE MIC2_FIGHT_BEGINS #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepare - MIC2_FIGHT_BEGINS") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_FIGHT_BEGINS") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_FIGHT_BEGINS" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_FIGHT_BEGINS") ePrepAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepared audio - MIC2_FIGHT_BEGINS") ENDIF #ENDIF ENDIF ENDIF BREAK CASE MIC2_ACID_BATH_OS #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepare - MIC2_ACID_BATH_OS") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_ACID_BATH_OS") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_ACID_BATH_OS" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_ACID_BATH_OS") ePrepAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepared audio - MIC2_ACID_BATH_OS") ENDIF #ENDIF ENDIF ENDIF BREAK CASE MIC2_MULCHED #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepare - MIC2_MULCHED") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_MULCHED") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_MULCHED" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_MULCHED") ePrepAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepared audio - MIC2_MULCHED") ENDIF #ENDIF ENDIF ENDIF BREAK CASE MIC2_SPINNING_BLADES #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepare - MIC2_SPINNING_BLADES") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_SPINNING_BLADES") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_SPINNING_BLADES" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_SPINNING_BLADES") ePrepAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepared audio - MIC2_SPINNING_BLADES") ENDIF #ENDIF ENDIF ENDIF BREAK CASE MIC3_FRANK_DOWN #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepare - MIC3_FRANK_DOWN") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC3_FRANK_DOWN") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC3_FRANK_DOWN" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC3_FRANK_DOWN") ePrepAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepared audio - MIC3_FRANK_DOWN") ENDIF #ENDIF ENDIF ENDIF BREAK CASE MIC2_FRANK_SAVED #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepare - MIC2_FRANK_SAVED") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_FRANK_SAVED") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_FRANK_SAVED" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_FRANK_SAVED") ePrepAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepared audio - MIC2_FRANK_SAVED") ENDIF #ENDIF ENDIF ENDIF BREAK CASE MIC2_LOSE_TRIADS #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepare - MIC2_LOSE_TRIADS") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_LOSE_TRIADS") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_LOSE_TRIADS" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_LOSE_TRIADS") ePrepAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepared audio - MIC2_LOSE_TRIADS") ENDIF #ENDIF ENDIF ENDIF BREAK CASE MIC2_RADIO_SETUP #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepare - MIC2_RADIO_SETUP") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_RADIO_SETUP") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_RADIO_SETUP" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_RADIO_SETUP") ePrepAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Prepared audio - MIC2_RADIO_SETUP") ENDIF #ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDIF SWITCH ePlayAudioTrack CASE MIC2_START #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_START") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_START") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_START" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_START") IF TRIGGER_MUSIC_EVENT("MIC2_START") iAudioPrepareTimer = GET_GAME_TIMER() + 5000 //Assumes 5 seconds is long enough for the one shot to play ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_START") ENDIF #ENDIF ENDIF ENDIF ENDIF BREAK CASE MIC2_FRANK_VEH #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_FRANK_VEH") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_FRANK_VEH") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_FRANK_VEH") ENDIF #ENDIF ENDIF BREAK CASE MIC2_FIND_A_WAY #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_FIND_A_WAY") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_FIND_A_WAY") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_FIND_A_WAY") ENDIF #ENDIF ENDIF BREAK CASE MIC2_SWITCHED #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_SWITCHED") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_SWITCHED") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_SWITCHED") ENDIF #ENDIF ENDIF BREAK CASE MIC2_FIGHT_BEGINS #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_FIGHT_BEGINS") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_FIGHT_BEGINS") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_FIGHT_BEGINS" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_FIGHT_BEGINS") IF TRIGGER_MUSIC_EVENT("MIC2_FIGHT_BEGINS") iAudioPrepareTimer = GET_GAME_TIMER() + 5000 //Assumes 5 seconds is long enough for the one shot to play ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_FIGHT_BEGINS") ENDIF #ENDIF ENDIF ENDIF ENDIF BREAK CASE MIC2_FIGHT_CONT #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_FIGHT_CONT") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_FIGHT_CONT") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_FIGHT_CONT") ENDIF #ENDIF ENDIF BREAK CASE MIC2_ABATTOIR_PROGRESS #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_ABATTOIR_PROGRESS") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_ABATTOIR_PROGRESS") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_ABATTOIR_PROGRESS") ENDIF #ENDIF ENDIF BREAK CASE MIC2_ACID_BATH_OS #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_ACID_BATH_OS") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_ACID_BATH_OS") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_ACID_BATH_OS" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_ACID_BATH_OS") IF TRIGGER_MUSIC_EVENT("MIC2_ACID_BATH_OS") iAudioPrepareTimer = GET_GAME_TIMER() + 5000 //Assumes 5 seconds is long enough for the one shot to play ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_ACID_BATH_OS") ENDIF #ENDIF ENDIF ENDIF ENDIF BREAK CASE MIC2_MULCHED #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_MULCHED") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_MULCHED") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_MULCHED" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_MULCHED") IF TRIGGER_MUSIC_EVENT("MIC2_MULCHED") iAudioPrepareTimer = GET_GAME_TIMER() + 5000 //Assumes 5 seconds is long enough for the one shot to play ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_MULCHED") ENDIF #ENDIF ENDIF ENDIF ENDIF BREAK CASE MIC2_SPINNING_BLADES #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_SPINNING_BLADES") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_SPINNING_BLADES") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_SPINNING_BLADES" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_SPINNING_BLADES") IF TRIGGER_MUSIC_EVENT("MIC2_SPINNING_BLADES") iAudioPrepareTimer = GET_GAME_TIMER() + 5000 //Assumes 5 seconds is long enough for the one shot to play ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_SPINNING_BLADES") ENDIF #ENDIF ENDIF ENDIF ENDIF BREAK CASE MIC2_HANGING_MICHAEL #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_HANGING_MICHAEL") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_HANGING_MICHAEL") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_HANGING_MICHAEL") ENDIF #ENDIF ENDIF BREAK CASE MIC2_BACK_TO_FRANK #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_BACK_TO_FRANK") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_BACK_TO_FRANK") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_BACK_TO_FRANK") ENDIF #ENDIF ENDIF BREAK CASE MIC3_FRANK_DOWN #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC3_FRANK_DOWN") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC3_FRANK_DOWN") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC3_FRANK_DOWN" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC3_FRANK_DOWN") IF TRIGGER_MUSIC_EVENT("MIC3_FRANK_DOWN") iAudioPrepareTimer = GET_GAME_TIMER() + 5000 //Assumes 5 seconds is long enough for the one shot to play ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC3_FRANK_DOWN") ENDIF #ENDIF ENDIF ENDIF ENDIF BREAK CASE MIC2_FRANK_SAVED #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_FRANK_SAVED") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_FRANK_SAVED") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_FRANK_SAVED" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_FRANK_SAVED") IF TRIGGER_MUSIC_EVENT("MIC2_FRANK_SAVED") iAudioPrepareTimer = GET_GAME_TIMER() + 5000 //Assumes 5 seconds is long enough for the one shot to play ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_FRANK_SAVED") ENDIF #ENDIF ENDIF ENDIF ENDIF BREAK CASE MIC2_VEHICLE_READY #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_VEHICLE_READY") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_VEHICLE_READY") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_VEHICLE_READY") ENDIF #ENDIF ENDIF BREAK CASE MIC2_LOSE_TRIADS #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_LOSE_TRIADS") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_LOSE_TRIADS") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_LOSE_TRIADS" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_LOSE_TRIADS") IF TRIGGER_MUSIC_EVENT("MIC2_LOSE_TRIADS") iAudioPrepareTimer = GET_GAME_TIMER() + 5000 //Assumes 5 seconds is long enough for the one shot to play ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_LOSE_TRIADS") ENDIF #ENDIF ENDIF ENDIF ENDIF BREAK CASE MIC2_TRIADS_LOST #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_TRIADS_LOST") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_TRIADS_LOST") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_TRIADS_LOST") ENDIF #ENDIF ENDIF BREAK CASE MIC2_RADIO_SETUP #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_RADIO_SETUP") ENDIF #ENDIF IF IS_STRING_NULL_OR_EMPTY(sAudioEvent) OR NOT ARE_STRINGS_EQUAL(sAudioEvent, "MIC2_RADIO_SETUP") IF NOT IS_STRING_NULL_OR_EMPTY(sAudioEvent) #IF IS_DEBUG_BUILD IF #ENDIF CANCEL_MUSIC_EVENT(sAudioEvent) #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Cancelled audio - sAudioEvent = ", sAudioEvent) ENDIF ENDIF #ENDIF ENDIF sAudioEvent = "MIC2_RADIO_SETUP" #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Preparing audio - sAudioEvent = ", sAudioEvent) ENDIF #ENDIF ELSE IF PREPARE_MUSIC_EVENT("MIC2_RADIO_SETUP") IF TRIGGER_MUSIC_EVENT("MIC2_RADIO_SETUP") iAudioPrepareTimer = GET_GAME_TIMER() + 5000 //Assumes 5 seconds is long enough for the one shot to play ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_RADIO_SETUP") ENDIF #ENDIF ENDIF ENDIF ENDIF BREAK CASE MIC2_OVER #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_OVER") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_OVER") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_OVER") ENDIF #ENDIF ENDIF BREAK CASE MIC2_DEAD #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_DEAD") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_DEAD") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_DEAD") ENDIF #ENDIF ENDIF BREAK CASE MIC2_FIND_MIKE_RT #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_FIND_MIKE_RT") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_FIND_MIKE_RT") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_FIND_MIKE_RT") ENDIF #ENDIF ENDIF BREAK CASE MIC2_FIGHT_BEGINS_RT #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_FIGHT_BEGINS_RT") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_FIGHT_BEGINS_RT") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_FIGHT_BEGINS_RT") ENDIF #ENDIF ENDIF BREAK CASE MIC2_HANGING_RT #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_HANGING_RT") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_HANGING_RT") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_HANGING_RT") ENDIF #ENDIF ENDIF BREAK CASE MIC2_MICHAEL_ESCAPE_RT #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_MICHAEL_ESCAPE_RT") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_MICHAEL_ESCAPE_RT") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_MICHAEL_ESCAPE_RT") ENDIF #ENDIF ENDIF BREAK CASE MIC2_TRIADS_CHASE_RT #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Play - MIC2_TRIADS_CHASE_RT") ENDIF #ENDIF IF TRIGGER_MUSIC_EVENT("MIC2_TRIADS_CHASE_RT") ePlayAudioTrack = NO_AUDIO #IF IS_DEBUG_BUILD IF bDebugAudio PRINTLN("Playing audio - MIC2_TRIADS_CHASE_RT") ENDIF #ENDIF ENDIF BREAK ENDSWITCH ENDPROC PROC LOAD_AUDIO(AUDIO_TRACK eSetAudioTrack) ePrepAudioTrack = eSetAudioTrack AUDIO_CONTROLLER() ENDPROC PROC PLAY_AUDIO(AUDIO_TRACK eSetAudioTrack) ePlayAudioTrack = eSetAudioTrack AUDIO_CONTROLLER() ENDPROC STRUCT SPLINE_NODE VECTOR vPos VECTOR vRot FLOAT fFov ENDSTRUCT //SPLINE_NODE splineNodes[18] // //PROC initSplineNodeList() //FOV 50.0 // //Clockwise // splineNodes[0].vPos = <<1012.896301, -2101.372314, 33.291309>> // splineNodes[0].vRot = <<-1.982723, 0.338979, 173.891754>> // splineNodes[0].fFov = 50.0 // splineNodes[1].vPos = <<1007.293213, -2167.156982, 33.054180>> // splineNodes[1].vRot = <<-1.182525, 0.338979, 174.261124>> // splineNodes[1].fFov = 50.0 // splineNodes[2].vPos = <<989.095398, -2197.869385, 33.599380>> // splineNodes[2].vRot = <<-2.301748, 0.338979, 88.595459>> // splineNodes[2].fFov = 50.0 // splineNodes[3].vPos = <<955.204102, -2196.909912, 32.745079>> // splineNodes[3].vRot = <<-8.845912, 0.338979, -1.773986>> // splineNodes[3].fFov = 50.0 // splineNodes[4].vPos = <<938.759583, -2185.577393, 32.985966>> // splineNodes[4].vRot = <<-8.738976, 0.338979, -96.202721>> // splineNodes[4].fFov = 50.0 // splineNodes[5].vPos = <<958.455505, -2184.489014, 31.564182>> // splineNodes[5].vRot = <<-6.233361, 0.338979, -94.898773>> // splineNodes[5].fFov = 50.0 // // //Counter-Clockwise // splineNodes[6].vPos = <<983.426758, -2090.378418, 33.904240>> // splineNodes[6].vRot = <<-0.707793, 0.0, 89.679756>> // splineNodes[6].fFov = 50.0 // splineNodes[7].vPos = <<933.889465,-2107.938232,32.834606>> // splineNodes[7].vRot = <<-2.559668,0.000000,175.719452>> // splineNodes[7].fFov = 50.0 // splineNodes[8].vPos = <<930.852417, -2135.413330, 32.779202>> // splineNodes[8].vRot = <<-0.668986, -6.738220, 173.527206>> // splineNodes[8].fFov = 50.0 // splineNodes[9].vPos = <<929.129028, -2172.105713, 33.454044>> // splineNodes[9].vRot = <<-3.121807, -21.816061, -133.945679>> // splineNodes[9].fFov = 50.0 // splineNodes[10].vPos = <<952.159302, -2183.835449, 31.973093>> // splineNodes[10].vRot = <<-3.935187, -5.522160, -102.999886>> // splineNodes[10].fFov = 50.0 // splineNodes[11].vPos = <<974.950012, -2186.682373, 31.249016>> // splineNodes[11].vRot = <<-2.949606, -1.684473, -96.856033>> // splineNodes[11].fFov = 50.0 // // //Inside // splineNodes[12].vPos = <<991.835388, -2187.673828, 31.325569>> + <<2.5, 5.0, 0.0>> // splineNodes[12].vRot = <<0.243132, -25.443731, -54.801926>> // splineNodes[12].fFov = 50.0 // splineNodes[13].vPos = <<995.288513, -2173.272461, 31.397337>> // splineNodes[13].vRot = <<0.243132, -25.443737, 47.891655>> // splineNodes[13].fFov = 50.0 // splineNodes[14].vPos = <<983.897522, -2168.887207, 31.449553>> // splineNodes[14].vRot = <<0.243131, 0.0, 82.929100>> // splineNodes[14].fFov = 50.0 // splineNodes[15].vPos = <<969.269470, -2163.052002, 31.514753>> // splineNodes[15].vRot = <<1.166207, 30.385775, -12.229650>> // splineNodes[15].fFov = 50.0 // splineNodes[16].vPos = <<982.599854, -2159.198730, 31.864603>> // splineNodes[16].vRot = <<1.659278, 0.0, -94.700310>> // splineNodes[16].fFov = 50.0 // splineNodes[17].vPos = <<995.072327, -2156.664307, 32.219673>> // splineNodes[17].vRot = <<0.836721, -26.218670, -6.102451>> // splineNodes[17].fFov = 50.0 //ENDPROC FUNC BOOL HAS_HOOK_REACHED_RAIL_NODE(INT iNode) RETURN (iCurrentNode >= iNode) ENDFUNC PROC SET_RAIL_FINAL_NODE(INT iFinalNode) //Occasionally want to stop the rail moving at a point before the end of the node list. Will stop at node iFinalNode. iRailNodeToStopAt = iFinalNode + 1 //Get total distance from first node to final node INT i fDistTotalFirstFinalNode = 0 REPEAT iRailNodeToStopAt i fDistTotalFirstFinalNode += GET_DISTANCE_BETWEEN_COORDS(sRailNodes[CLAMP_INT(i, 0, COUNT_OF(sRailNodes) - 1)].vPos, sRailNodes[CLAMP_INT(i + 1, 0, COUNT_OF(sRailNodes) - 1)].vPos) ENDREPEAT ENDPROC ///PURPOSE: The hook "moves" along the rail by interplolating betwee a series of nodes. This defines the position & rotation of all the nodes PROC initRailNodeList() sRailNodes[0].vPos = <<997.99719, -2178.23584, 33.21508>> sRailNodes[0].vRot = <<0.0, 0.0, -90.0>> sRailNodes[1].vPos = <<998.68988, -2170.42310, 33.21508>> sRailNodes[1].vRot = <<0.0, 0.0, -90.0>> sRailNodes[2].vPos = <<998.58350, -2170.03711, 33.21508>> sRailNodes[2].vRot = <<0.0, 0.0, -55.8000>> sRailNodes[3].vPos = <<998.14276, -2169.83252, 33.21508>> sRailNodes[3].vRot = <<0.0, 0.0, -20.0>> sRailNodes[4].vPos = <<992.80927, -2169.33667, 33.21372>> sRailNodes[4].vRot = <<0.0, 0.0, 0.0>> sRailNodes[5].vPos = <<988.82288, -2169.05298, 33.04533>> sRailNodes[5].vRot = <<0.0, 0.0, 0.0>> sRailNodes[6].vPos = <<981.45752, -2168.24048, 33.04327>> sRailNodes[6].vRot = <<0.0, 0.0, 0.0>> sRailNodes[7].vPos = <<969.84045, -2167.29272, 33.00440>> sRailNodes[7].vRot = <<0.0, 0.0, -17.0000>> sRailNodes[8].vPos = <<969.53687, -2167.20068, 33.00438>> sRailNodes[8].vRot = <<0.0, 0.0, -20.0>> sRailNodes[9].vPos = <<969.34314, -2167.00415, 33.00327>> sRailNodes[9].vRot = <<0.0, 0.0, -40.8500>> sRailNodes[10].vPos = <<969.27594, -2166.70215, 32.97229>> sRailNodes[10].vRot = <<0.0, 0.0, -84.0000>> sRailNodes[11].vPos = <<969.87482, -2160.25610, 32.97181>> sRailNodes[11].vRot = <<0.0, 0.0, -93.0000>> sRailNodes[12].vPos = <<970.00366, -2159.66211, 32.96849>> sRailNodes[12].vRot = <<0.0, 0.0, -109.6500>> sRailNodes[13].vPos = <<970.22723, -2159.42822, 32.96897>> sRailNodes[13].vRot = <<0.0, 0.0, -129.0000>> sRailNodes[14].vPos = <<970.54535, -2159.38843, 32.96876>> sRailNodes[14].vRot = <<0.0, 0.0, -173.0000>> sRailNodes[15].vPos = <<979.39026, -2160.19849, 33.00122>> sRailNodes[15].vRot = <<0.0, 0.0, -186.0000>> sRailNodes[16].vPos = <<979.91333, -2160.17480, 33.00301>> sRailNodes[16].vRot = <<0.0, 0.0, -175.0000>> sRailNodes[17].vPos = <<980.32690, -2160.36475, 33.00453>> sRailNodes[17].vRot = <<0.0, 0.0, 164.5500>> sRailNodes[18].vPos = <<981.12488, -2160.94116, 33.04178>> sRailNodes[18].vRot = <<0.0, 0.0, 174.0000>> sRailNodes[19].vPos = <<985.11310, -2161.31104, 33.06876>> sRailNodes[19].vRot = <<0.0, 0.0, -185.0000>> sRailNodes[20].vPos = <<985.51215, -2161.29443, 33.06952>> sRailNodes[20].vRot = <<0.0, 0.0, -178.3000>> sRailNodes[21].vPos = <<985.83417, -2161.06323, 33.07181>> sRailNodes[21].vRot = <<0.0, 0.0, -124.7500>> sRailNodes[22].vPos = <<985.97974, -2160.69263, 33.07404>> sRailNodes[22].vRot = <<0.0, 0.0, -102.4500>> sRailNodes[23].vPos = <<986.08618, -2159.59692, 33.07473>> sRailNodes[23].vRot = <<0.0, 0.0, -95.5000>> sRailNodes[24].vPos = <<986.22394, -2159.27075, 33.07572>> sRailNodes[24].vRot = <<0.0, 0.0, -110.8500>> sRailNodes[25].vPos = <<986.44983, -2159.14307, 33.07625>> sRailNodes[25].vRot = <<0.0, 0.0, -145.8500>> sRailNodes[26].vPos = <<986.96997, -2159.15112, 33.07859>> sRailNodes[26].vRot = <<0.0, 0.0, -177.2999>> sRailNodes[27].vPos = <<992.41510, -2159.66333, 33.06979>> sRailNodes[27].vRot = <<0.0, 0.0, -178.7499>> sRailNodes[28].vPos = <<992.87366, -2159.68018, 33.07030>> sRailNodes[28].vRot = <<0.0, 0.0, -175.3499>> sRailNodes[29].vPos = <<993.19458, -2159.43481, 33.07386>> sRailNodes[29].vRot = <<0.0, 0.0, -132.3499>> sRailNodes[30].vPos = <<993.33282, -2159.03345, 33.07018>> sRailNodes[30].vRot = <<0.0, 0.0, 83.4>> sRailNodes[31].vPos = <<994.17920, -2150.31909, 33.06801>> sRailNodes[31].vRot = <<0.0, 0.0, 83.4>> sRailNodes[32].vPos = <<995.29425, -2150.44263, 33.01155>> sRailNodes[32].vRot = <<0.0, 0.0, 83.4>> sRailNodes[33].vPos = <<996.92010, -2150.59131, 33.00539>> sRailNodes[33].vRot = <<0.0, 0.0, -77.9499>> sRailNodes[34].vPos = <<997.23938, -2150.55811, 33.00547>> sRailNodes[34].vRot = <<0.0, 0.0, -83.3499>> sRailNodes[35].vPos = <<997.46094, -2150.40381, 33.00445>> sRailNodes[35].vRot = <<0.0, 0.0, -102.3499>> sRailNodes[36].vPos = <<997.57794, -2150.12500, 32.97338>> sRailNodes[36].vRot = <<0.0, 0.0, -115.4499>> sRailNodes[37].vPos = <<998.53046, -2139.93213, 32.97335>> sRailNodes[37].vRot = <<0.0, 0.0, -100.0999>> sRailNodes[38].vPos = <<998.78827, -2137.11938, 32.97280>> sRailNodes[38].vRot = <<0.0, 0.0, -97.5499>> sRailNodes[39].vPos = <<998.78827, -2137.11938, 32.97280>> sRailNodes[39].vRot = <<0.0, 0.0, -97.5499>> INT i REPEAT COUNT_OF(sRailNodes) i sRailNodes[i].vRot.X = 0.0 ENDREPEAT SET_RAIL_FINAL_NODE(40) ENDPROC //Cleanup PROC MISSION_CLEANUP(BOOL bRestart = FALSE, BOOL bDeathArrest = FALSE) IF bVideoRecording REPLAY_STOP_EVENT() bVideoRecording = FALSE ENDIF INT i RESET_PUSH_IN(pushInData) //Stats INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(NULL) HIDE_CELLPHONE_SIGNIFIERS_FOR_CUTSCENE(FALSE) //Doors IF bDeathArrest IF IS_DOOR_REGISTERED_WITH_SYSTEM(iEntranceDoor) IF DOOR_SYSTEM_GET_DOOR_STATE(iEntranceDoor) != DOORSTATE_LOCKED DOOR_SYSTEM_SET_DOOR_STATE(iEntranceDoor, DOORSTATE_LOCKED, FALSE, TRUE) ENDIF ENDIF ELSE IF IS_DOOR_REGISTERED_WITH_SYSTEM(iEntranceDoor) IF DOOR_SYSTEM_GET_OPEN_RATIO(iEntranceDoor) <> 0.0 OR DOOR_SYSTEM_GET_DOOR_STATE(iEntranceDoor) != DOORSTATE_FORCE_LOCKED_THIS_FRAME DOOR_SYSTEM_SET_OPEN_RATIO(iEntranceDoor, 0.0, FALSE, FALSE) DOOR_SYSTEM_SET_DOOR_STATE(iEntranceDoor, DOORSTATE_FORCE_LOCKED_THIS_FRAME, FALSE, TRUE) ENDIF ENDIF ENDIF //Reset player SET_EVERYONE_IGNORE_PLAYER(PLAYER_ID(), FALSE) IF IS_PLAYER_PLAYING(PLAYER_ID()) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF bPassed IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID()) IF IS_ENTITY_ATTACHED(PLAYER_PED_ID()) DETACH_ENTITY(PLAYER_PED_ID()) ENDIF ENDIF ELSE CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) ENDIF ENDIF SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), FALSE) SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), FALSE) //SET_PLAYER_FORCED_AIM(PLAYER_ID(), FALSE) ENDIF ENDIF IF DOES_ENTITY_EXIST(PLAYER_PED(CHAR_MICHAEL)) AND NOT IS_PED_INJURED(PLAYER_PED(CHAR_MICHAEL)) SET_ENABLE_BOUND_ANKLES(PLAYER_PED(CHAR_MICHAEL), FALSE) RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT(PLAYER_PED(CHAR_MICHAEL), FALSE) ENDIF IF DOES_ENTITY_EXIST(PLAYER_PED(CHAR_FRANKLIN)) AND NOT IS_PED_INJURED(PLAYER_PED(CHAR_FRANKLIN)) AND PLAYER_PED(CHAR_FRANKLIN) != PLAYER_PED_ID() SET_ENTITY_LOAD_COLLISION_FLAG(PLAYER_PED(CHAR_FRANKLIN), FALSE) ENDIF CLEAR_FOCUS() REMOVE_NAVMESH_REQUIRED_REGIONS() //Delete all peds, vehicles, objects and blips REMOVE_ALL_COVER_BLOCKING_AREAS() REPEAT COUNT_OF(covPoint) i REMOVE_COVER_POINT(covPoint[i]) ENDREPEAT REPEAT COUNT_OF(piPickups) i IF DOES_PICKUP_EXIST(piPickups[i]) REMOVE_PICKUP(piPickups[i]) ENDIF ENDREPEAT #IF IS_DEBUG_BUILD IF bAutoSkipping #ENDIF //Z-skips cleanup SAFE_DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) SAFE_DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) SAFE_DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) SAFE_DELETE_PED(pedIntro) #IF IS_DEBUG_BUILD ENDIF #ENDIF //Actors REPEAT iEnemyIntroCut i IF DOES_ENTITY_EXIST(sEnemyIntroCut[i].pedIndex) #IF IS_DEBUG_BUILD IF bAutoSkipping #ENDIF //Z-skips cleanup SAFE_DELETE_PED(sEnemyIntroCut[i].pedIndex) #IF IS_DEBUG_BUILD ENDIF #ENDIF ENDIF SAFE_REMOVE_BLIP(sEnemyIntroCut[i].blipIndex) ENDREPEAT REPEAT iEnemyOutside i IF DOES_ENTITY_EXIST(sEnemyOutside[i].pedIndex) SET_PED_AS_NO_LONGER_NEEDED(sEnemyOutside[i].pedIndex) ENDIF SAFE_REMOVE_BLIP(sEnemyOutside[i].blipIndex) ENDREPEAT REPEAT iEnemyShootout i IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) SET_PED_AS_NO_LONGER_NEEDED(sEnemyShootout[i].pedIndex) ENDIF SAFE_REMOVE_BLIP(sEnemyShootout[i].blipIndex) ENDREPEAT REPEAT iEnemyBackup i IF DOES_ENTITY_EXIST(sEnemyBackup[i].pedIndex) SET_PED_AS_NO_LONGER_NEEDED(sEnemyBackup[i].pedIndex) ENDIF SAFE_REMOVE_BLIP(sEnemyBackup[i].blipIndex) ENDREPEAT REPEAT iEnemySetPiece i IF DOES_ENTITY_EXIST(sEnemySetPiece[i].pedIndex) SET_PED_AS_NO_LONGER_NEEDED(sEnemySetPiece[i].pedIndex) ENDIF SAFE_REMOVE_BLIP(sEnemySetPiece[i].blipIndex) ENDREPEAT REPEAT iEnemyEscape i IF DOES_ENTITY_EXIST(sEnemyEscape[i].pedIndex) SET_PED_AS_NO_LONGER_NEEDED(sEnemyEscape[i].pedIndex) ENDIF SAFE_REMOVE_BLIP(sEnemyEscape[i].blipIndex) ENDREPEAT REPEAT iEnemyChase i IF DOES_ENTITY_EXIST(sEnemyChase[i].pedIndex) SET_PED_AS_NO_LONGER_NEEDED(sEnemyChase[i].pedIndex) ENDIF SAFE_REMOVE_BLIP(sEnemyChase[i].blipIndex) ENDREPEAT //Vehicle IF DOES_ENTITY_EXIST(vehFranklin) AND NOT IS_ENTITY_DEAD(vehFranklin) IF IS_ENTITY_A_MISSION_ENTITY(vehFranklin) AND DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vehFranklin) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehFranklin) ENDIF ENDIF REPEAT COUNT_OF(vehEnemyChase) i IF DOES_ENTITY_EXIST(vehEnemyChase[i]) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehEnemyChase[i]) ENDIF ENDREPEAT REPEAT COUNT_OF(vehEnemy) i IF DOES_ENTITY_EXIST(vehEnemy[i]) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehEnemy[i]) ENDIF ENDREPEAT #IF IS_DEBUG_BUILD IF bAutoSkipping #ENDIF //Z-skips cleanup SAFE_DELETE_VEHICLE(vehCar) IF DOES_ENTITY_EXIST(vehHachiRoku) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehHachiRoku) ENDIF IF DOES_ENTITY_EXIST(vehEscape) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehEscape) ENDIF #IF IS_DEBUG_BUILD ENDIF #ENDIF #IF IS_DEBUG_BUILD IF bAutoSkipping #ENDIF //Z-skips cleanup //Object SAFE_DELETE_OBJECT(objHook) SAFE_DELETE_OBJECT(objChain) SAFE_DELETE_OBJECT(objPadlock) REPEAT COUNT_OF(objCrate) i SAFE_DELETE_OBJECT(objCrate[i]) ENDREPEAT REPEAT COUNT_OF(objCigarette) i IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxCigarette[i]) STOP_PARTICLE_FX_LOOPED(ptfxCigarette[i]) ENDIF SAFE_DELETE_OBJECT(objCigarette[i]) ENDREPEAT SAFE_DELETE_OBJECT(objGun) // SAFE_DELETE_OBJECT(objBinBag) #IF IS_DEBUG_BUILD ENDIF #ENDIF //Doors // IF IS_DOOR_REGISTERED_WITH_SYSTEM(iFrontDoor) // REMOVE_DOOR_FROM_SYSTEM(iFrontDoor) // ENDIF // // IF IS_DOOR_REGISTERED_WITH_SYSTEM(iExitDoor) // REMOVE_DOOR_FROM_SYSTEM(iExitDoor) // ENDIF //Blip SAFE_REMOVE_BLIP(blipMichael) SAFE_REMOVE_BLIP(blipDestination) SAFE_REMOVE_BLIP(blipFranklin) REPEAT COUNT_OF(blipEnemyVan) i SAFE_REMOVE_BLIP(blipEnemyVan[i]) ENDREPEAT SAFE_REMOVE_BLIP(blipGuns) //Particles //Camera STOP_GAMEPLAY_HINT() DESTROY_ALL_CAMS() RENDER_SCRIPT_CAMS(FALSE, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) // REPEAT COUNT_OF(splineNodes) i // IF DOES_CAM_EXIST(camSplineNode[i]) // DESTROY_CAM(camSplineNode[i]) // ENDIF // ENDREPEAT //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 3) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 8) //Reset Variables bPassed = FALSE //Reset the bool iCurrentNode = 0 SET_RAIL_FINAL_NODE(0) iTimerNode = -1 bOkToMoveRail = FALSE bOkToHangFromHook = FALSE vRailCurrent = VECTOR_ZERO bRailInit = FALSE fMoveSpeedMult = 0.225 // / 2 fHookMass = 2000.0 bOkToSwitch = FALSE bFrankToMikeSwitchCam = FALSE bFrankToMikeSwitchCam2 = FALSE // bReattach = FALSE // iReattach = 0 // vHeadingForSwappingToFranklin = VECTOR_ZERO // vFranklinGameCamRot = VECTOR_ZERO // bUseNewInterpCam = FALSE //bShootingUpsideDown = FALSE REPEAT COUNT_OF(SET_PIECE) i iSetPiece[i] = 0 ENDREPEAT bBlood = FALSE intAbattoir = NULL bPinnedAbattoir = FALSE IF intMansion <> NULL UNPIN_INTERIOR(intMansion) intMansion = NULL ENDIF // vHookPosOffset = VECTOR_ZERO // initSplineNodeList() initRailNodeList() REPEAT COUNT_OF(sRailNodes) i sRailNodes[i].vRot.X = 0.0 ENDREPEAT CLEAR_TRIGGERED_LABELS() CLEAR_LOADED_MODELS() CLEAR_LOADED_RECORDINGS() CLEAR_LOADED_ANIM_DICTS() SETTIMERA(0) SETTIMERB(0) iGrappleStage = 0 iCutsceneStage = 0 iDialogueStage = 0 REPEAT COUNT_OF(iDialogueLineCount) i iDialogueLineCount[i] = -1 ENDREPEAT REPEAT COUNT_OF(iDialogueTimer) i iDialogueTimer[i] = 0 ENDREPEAT bInitStage = FALSE bReplaySkip = FALSE bCutsceneSkipped = FALSE CLEAR_MISSION_LOCATE_STUFF(sLocatesData, TRUE) IF IS_CELLPHONE_DISABLED() DISABLE_CELLPHONE(FALSE) ENDIF //Radio SET_FRONTEND_RADIO_ACTIVE(TRUE) //Sound IF sfxRail != -1 STOP_SOUND(sfxRail) RELEASE_SOUND_ID(sfxRail) sfxRail = -1 ENDIF IF sfxWoosh != -1 STOP_SOUND(sfxWoosh) RELEASE_SOUND_ID(sfxWoosh) sfxWoosh = -1 ENDIF IF sfxCow != -1 STOP_SOUND(sfxCow) RELEASE_SOUND_ID(sfxCow) sfxCow = -1 ENDIF //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_MICHAEL_ON_MEATHOOK") STOP_AUDIO_SCENE("MI_2_MICHAEL_ON_MEATHOOK") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_DRIVE_TO_SLAUGHTERHOUSE") STOP_AUDIO_SCENE("MI_2_DRIVE_TO_SLAUGHTERHOUSE") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_FIND_A_WAY_IN") STOP_AUDIO_SCENE("MI_2_FIND_A_WAY_IN") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_SPLINE_CAM_1") STOP_AUDIO_SCENE("MI_2_SPLINE_CAM_1") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOTOUT_MAIN") STOP_AUDIO_SCENE("MI_2_SHOOTOUT_MAIN") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOTOUT_ACID") STOP_AUDIO_SCENE("MI_2_SHOOTOUT_ACID") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_GRINDER_1") STOP_AUDIO_SCENE("MI_2_GRINDER_1") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOT_THE_GUARD") STOP_AUDIO_SCENE("MI_2_SHOOT_THE_GUARD") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_MEAT_SLICER") STOP_AUDIO_SCENE("MI_2_MEAT_SLICER") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_THROW_THE_GUN") STOP_AUDIO_SCENE("MI_2_THROW_THE_GUN") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOT_FROM_MEATHOOK") STOP_AUDIO_SCENE("MI_2_SHOOT_FROM_MEATHOOK") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_FRANKLIN_KNIFE_ATTACK") STOP_AUDIO_SCENE("MI_2_FRANKLIN_KNIFE_ATTACK") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_SPLINE_2") STOP_AUDIO_SCENE("MI_2_SPLINE_2") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_SAVE_FRANKLIN") STOP_AUDIO_SCENE("MI_2_SAVE_FRANKLIN") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_ESCAPE_SHOOTOUT") STOP_AUDIO_SCENE("MI_2_ESCAPE_SHOOTOUT") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_GRINDER_2") STOP_AUDIO_SCENE("MI_2_GRINDER_2") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_ESCAPE_IN_CAR") STOP_AUDIO_SCENE("MI_2_ESCAPE_IN_CAR") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_DRIVE_HOME") STOP_AUDIO_SCENE("MI_2_DRIVE_HOME") ENDIF //Audio PLAY_AUDIO(MIC2_DEAD) RELEASE_SCRIPT_AUDIO_BANK() UNREGISTER_SCRIPT_WITH_AUDIO() //Navmesh Blocking REPEAT COUNT_OF(iNavBlock) i IF iNavBlock[i] <> 0 REMOVE_NAVMESH_BLOCKING_OBJECT(iNavBlock[i]) iNavBlock[i] = 0 ENDIF ENDREPEAT //Waypoints //Sequence CLEAR_SEQUENCE_TASK(seqMain) //Assisted //Relationship Groups REMOVE_RELATIONSHIP_GROUP(relGroupFriendlyFire) REMOVE_RELATIONSHIP_GROUP(relGroupBuddy) REMOVE_RELATIONSHIP_GROUP(relGroupEnemy) REMOVE_RELATIONSHIP_GROUP(relGroupPassive) //Trackify ENABLE_SECOND_SCREEN_TRACKIFY_APP(FALSE) //Interface DISPLAY_RADAR(TRUE) DISPLAY_HUD(TRUE) //Roads SET_ROADS_BACK_TO_ORIGINAL(<<-877.67, 224.67, 72.30>>, <<-853.08, 125.01, 56.63>>) //Budget SET_PED_POPULATION_BUDGET(3) SET_VEHICLE_POPULATION_BUDGET(3) SET_REDUCE_PED_MODEL_BUDGET(FALSE) SET_REDUCE_VEHICLE_MODEL_BUDGET(FALSE) //New Load Scene IF IS_NEW_LOAD_SCENE_ACTIVE() NEW_LOAD_SCENE_STOP() ENDIF //Shops SET_ALL_SHOPS_TEMPORARILY_UNAVAILABLE(FALSE) //Changing clothes SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE) //Taxi DISABLE_TAXI_HAILING(FALSE) //Cheat DISABLE_CHEAT(CHEAT_TYPE_GIVE_WEAPONS, FALSE) //Wanted SET_MAX_WANTED_LEVEL(6) SET_WANTED_LEVEL_MULTIPLIER(1.0) //Emergency Calls RELEASE_SUPPRESSED_EMERGENCY_CALLS() //Ambulances etc. ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE) ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_GANGS, TRUE) IF NOT CAN_CREATE_RANDOM_COPS() SET_CREATE_RANDOM_COPS(TRUE) ENDIF //Cap Interior IF bRestart = FALSE SET_INTERIOR_CAPPED_ON_EXIT(INTERIOR_V_ABATTOIR, TRUE) ELSE SET_INTERIOR_CAPPED(INTERIOR_V_ABATTOIR, TRUE) ENDIF IF bRestart = FALSE TERMINATE_THIS_THREAD() ENDIF ENDPROC //Mission Passed PROC missionPassed() IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) ENDIF CLEAR_TEXT() Mission_Flow_Mission_Passed() bPassed = TRUE MISSION_CLEANUP() ENDPROC /// PURPOSE: /// Sets Michael as unavailable. /// Called in normal fail and force cleanup PROC SET_MICHAEL_UNAVAILABLE_ON_FAIL() SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, FALSE) ENDPROC //Mission Failed PROC missionFailed() enumCharacterList eCharFail = GET_CURRENT_PLAYER_PED_ENUM() STORE_FAIL_WEAPON(PLAYER_PED_ID(), ENUM_TO_INT(eCharFail)) CLEAR_TEXT() //Audio PLAY_AUDIO(MIC2_DEAD) SWITCH eMissionFail CASE failFranklinDied MISSION_FLOW_SET_FAIL_REASON("MCH2_FFDED") BREAK CASE failMichaelDied MISSION_FLOW_SET_FAIL_REASON("MCH2_FMDED") BREAK CASE failFranklinAbandon MISSION_FLOW_SET_FAIL_REASON("CMN_FLEFT") BREAK CASE failMichaelAbandon MISSION_FLOW_SET_FAIL_REASON("CMN_MLEFT") BREAK CASE failCarDestroyed MISSION_FLOW_SET_FAIL_REASON("MCH2_FCAR") BREAK CASE failOutOfAmmo MISSION_FLOW_SET_FAIL_REASON("MCH2_FAMMO") BREAK CASE failGeneric //Shouldn't get here BREAK ENDSWITCH Mission_Flow_Mission_Failed() WHILE NOT GET_MISSION_FLOW_SAFE_TO_CLEANUP() //Maintain anything that could look weird during fade out (e.g. enemies walking off). //Keep disabling first person camera when fading out if on the hook as Michael IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_AIM_GUN_SCRIPTED) = PERFORMING_TASK DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE() PRINTLN("DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE() 2") ENDIF ENDIF ENDIF WAIT(0) ENDWHILE //1988571 - Need to deal with keeping the player out of the factory when rejecting a replay (and keeping Michael inside). IF NOT HAS_PLAYER_ACCEPTED_REPLAY() //Lock the exit to the factory. IF IS_DOOR_REGISTERED_WITH_SYSTEM(iExitDoor) DOOR_SYSTEM_SET_OPEN_RATIO(iExitDoor, 0.0, FALSE, FALSE) DOOR_SYSTEM_SET_DOOR_STATE(iExitDoor, DOORSTATE_FORCE_LOCKED_THIS_FRAME, FALSE, TRUE) ENDIF //If the player is Michael (and isn't still tied up) then warp them inside the factory, otherwise it's possible for Franklin to meet him when rejecting a retry. IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL AND NOT IS_ENTITY_ATTACHED(PLAYER_PED_ID()) AND VDIST(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<933.0538, -2162.6216, 29.5012>>) < 200.0 SET_ENTITY_COORDS(PLAYER_PED_ID(), <<985.9138, -2126.9465, 29.4755>>) ENDIF ENDIF // check if we need to respawn the player in a different position, // if so call MISSION_FLOW_SET_FAIL_WARP_LOCATION() + SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION here IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<967.567566, -2195.217529, 25.539518>>, <<972.950378, -2098.676270, 49.888527>>, 70.0) MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<933.0538, -2162.6216, 29.5012>>, 96.4993) SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION(<<929.5760, -2162.3455, 29.3527>>, 175.2960) ENDIF //Michael Unavailable SET_MICHAEL_UNAVAILABLE_ON_FAIL() MISSION_CLEANUP() // must only take 1 frame and terminate the thread ENDPROC PROC DEATH_CHECKS() IF IS_ENTITY_DEAD(PLAYER_PED_ID()) IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN eMissionFail = failFranklinDied ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL eMissionFail = failMichaelDied ENDIF missionFailed() ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) AND NOT IS_PED_INJURED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) IF DOES_ENTITY_EXIST(objHook) AND DOES_ENTITY_EXIST(objChain) AND DOES_ENTITY_EXIST(objPadlock) IF IS_ENTITY_ATTACHED_TO_ENTITY(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], objHook) IF IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, GET_ENTITY_COORDS(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE), 3.0) OR GET_NUMBER_OF_FIRES_IN_RANGE(GET_ENTITY_COORDS(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE), 3.0) > 0 OR IS_ENTITY_ON_FIRE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) OR IS_ENTITY_ON_FIRE(objHook) OR IS_ENTITY_ON_FIRE(objChain) OR IS_ENTITY_ON_FIRE(objPadlock) APPLY_DAMAGE_TO_PED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], 1000, TRUE) SET_PED_TO_RAGDOLL(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], 10000, 10000, TASK_RELAX, FALSE, FALSE) //Pin the ankle to the bottom of the hook VECTOR vRightFootAttach vRightFootAttach = <<-0.075, -0.1, -0.85>> ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], objHook, GET_PED_BONE_INDEX(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], BONETAG_R_FOOT), -1, vRightFootAttach, VECTOR_ZERO, VECTOR_ZERO, -1.0, TRUE, FALSE, FALSE, FALSE) ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], objHook, GET_PED_BONE_INDEX(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], BONETAG_L_FOOT), -1, <<-vRightFootAttach.X, vRightFootAttach.Y, vRightFootAttach.Z>>, VECTOR_ZERO, VECTOR_ZERO, -1.0, TRUE, FALSE, FALSE, FALSE) ENDIF ENDIF ENDIF ENDIF IF SAFE_DEATH_CHECK_PED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) SAFE_REMOVE_BLIP(blipMichael) eMissionFail = failMichaelDied missionFailed() ENDIF IF SAFE_DEATH_CHECK_PED(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) SAFE_REMOVE_BLIP(blipFranklin) eMissionFail = failFranklinDied missionFailed() ENDIF // IF eMissionObjective = stageTriadsChase // IF SAFE_DEATH_CHECK_VEHICLE(vehEscape) // OR SAFE_DEATH_CHECK_VEHICLE(vehHachiRoku) // eMissionFail = failCarDestroyed // // missionFailed() // ENDIF // ENDIF //Actors // BOOL bInAbattoir // // IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<974.844238, -2100.828613, 28.905632>>, <<966.149780, -2201.403564, 45.697361>>, 60.0) // bInAbattoir = TRUE // ENDIF IF eMissionObjective < stageMichaelEscape IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) IF NOT IS_ENTITY_DEAD(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) IF bPinnedAbattoir = FALSE SAFE_FREEZE_ENTITY_POSITION(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], TRUE) ELSE SAFE_FREEZE_ENTITY_POSITION(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE) ENDIF ENDIF ENDIF ENDIF //Closest Ped PED_INDEX pedClosestEnemyTemp = pedClosestEnemy //We'll store this to check for a closer ped to speak. Saves extra script elsewhere. INT i REPEAT iEnemyIntroCut i IF DOES_ENTITY_EXIST(sEnemyIntroCut[i].pedIndex) IF NOT IS_ENTITY_DEAD(sEnemyIntroCut[i].pedIndex) IF bPinnedAbattoir = FALSE FREEZE_ENTITY_POSITION(sEnemyIntroCut[i].pedIndex, TRUE) ELSE FREEZE_ENTITY_POSITION(sEnemyIntroCut[i].pedIndex, FALSE) ENDIF ENDIF // IF NOT IS_PED_INJURED(sEnemyIntroCut[i].pedIndex) // IF NOT DOES_ENTITY_EXIST(pedClosestEnemy) // OR (DOES_ENTITY_EXIST(pedClosestEnemy) // AND IS_PED_INJURED(pedClosestEnemy)) // OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyIntroCut[i].pedIndex)) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy, FALSE)) // pedClosestEnemy = sEnemyIntroCut[i].pedIndex // ENDIF // ENDIF ENDIF ENDREPEAT REPEAT iEnemyOutside i IF DOES_ENTITY_EXIST(sEnemyOutside[i].pedIndex) // IF IS_ENTITY_DEAD(sEnemyOutside[i].pedIndex) // OR eMissionObjective >= stageTriadsChase // SAFE_REMOVE_BLIP(sEnemyOutside[i].blipIndex) // ELSE // IF NOT DOES_BLIP_EXIST(sEnemyOutside[i].blipIndex) // IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyOutside[i].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 15.0 // AND IS_ENTITY_ON_SCREEN(sEnemyOutside[i].pedIndex) // SAFE_ADD_BLIP_PED(sEnemyOutside[i].blipIndex, sEnemyOutside[i].pedIndex, TRUE) // ENDIF // ENDIF // ENDIF UPDATE_AI_PED_BLIP(sEnemyOutside[i].pedIndex, blipStructOutside[i]) // IF NOT IS_ENTITY_DEAD(sEnemyOutside[i].pedIndex) // IF bPinnedAbattoir = FALSE // SAFE_FREEZE_ENTITY_POSITION(sEnemyOutside[i].pedIndex, TRUE) // ELSE // SAFE_FREEZE_ENTITY_POSITION(sEnemyOutside[i].pedIndex, FALSE) // ENDIF // ENDIF // IF NOT IS_PED_INJURED(sEnemyOutside[i].pedIndex) // IF NOT DOES_ENTITY_EXIST(pedClosestEnemy) // OR (DOES_ENTITY_EXIST(pedClosestEnemy) // AND IS_PED_INJURED(pedClosestEnemy)) // OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyOutside[i].pedIndex)) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy, FALSE)) // pedClosestEnemy = sEnemyOutside[i].pedIndex // ENDIF // ENDIF ENDIF ENDREPEAT REPEAT iEnemyShootout i IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) // IF IS_ENTITY_DEAD(sEnemyShootout[i].pedIndex) // OR eMissionObjective >= stageTriadsChase //OR bInAbattoir = FALSE // SAFE_REMOVE_BLIP(sEnemyShootout[i].blipIndex) // ELSE // SAFE_ADD_BLIP_PED(sEnemyShootout[i].blipIndex, sEnemyShootout[i].pedIndex, TRUE) // ENDIF UPDATE_AI_PED_BLIP(sEnemyShootout[i].pedIndex, blipStructShootout[i]) IF NOT IS_ENTITY_DEAD(sEnemyShootout[i].pedIndex) IF bPinnedAbattoir = FALSE FREEZE_ENTITY_POSITION(sEnemyShootout[i].pedIndex, TRUE) ELSE FREEZE_ENTITY_POSITION(sEnemyShootout[i].pedIndex, FALSE) ENDIF ENDIF IF NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) IF NOT DOES_ENTITY_EXIST(pedClosestEnemy) OR (DOES_ENTITY_EXIST(pedClosestEnemy) AND IS_PED_INJURED(pedClosestEnemy)) OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyShootout[i].pedIndex)) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy, FALSE)) pedClosestEnemy = sEnemyShootout[i].pedIndex ENDIF ENDIF ENDIF ENDREPEAT REPEAT iEnemyBackup i IF DOES_ENTITY_EXIST(sEnemyBackup[i].pedIndex) // IF IS_ENTITY_DEAD(sEnemyBackup[i].pedIndex) // OR eMissionObjective >= stageTriadsChase //OR bInAbattoir = FALSE // SAFE_REMOVE_BLIP(sEnemyBackup[i].blipIndex) // ELSE // SAFE_ADD_BLIP_PED(sEnemyBackup[i].blipIndex, sEnemyBackup[i].pedIndex, TRUE) // ENDIF UPDATE_AI_PED_BLIP(sEnemyBackup[i].pedIndex, blipStructBackup[i]) IF NOT IS_ENTITY_DEAD(sEnemyBackup[i].pedIndex) IF bPinnedAbattoir = FALSE FREEZE_ENTITY_POSITION(sEnemyBackup[i].pedIndex, TRUE) ELSE FREEZE_ENTITY_POSITION(sEnemyBackup[i].pedIndex, FALSE) ENDIF ENDIF IF NOT IS_PED_INJURED(sEnemyBackup[i].pedIndex) IF NOT DOES_ENTITY_EXIST(pedClosestEnemy) OR (DOES_ENTITY_EXIST(pedClosestEnemy) AND IS_PED_INJURED(pedClosestEnemy)) OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyBackup[i].pedIndex)) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy, FALSE)) pedClosestEnemy = sEnemyBackup[i].pedIndex ENDIF ENDIF ENDIF ENDREPEAT REPEAT iEnemySetPiece i IF DOES_ENTITY_EXIST(sEnemySetPiece[i].pedIndex) AND NOT (i = ENUM_TO_INT(SET_PIECE_CUTTER) AND iSetPiece[SET_PIECE_CUTTER] >= 3) // IF IS_ENTITY_DEAD(sEnemySetPiece[i].pedIndex) // OR eMissionObjective >= stageTriadsChase //OR bInAbattoir = FALSE // SAFE_REMOVE_BLIP(sEnemySetPiece[i].blipIndex) // ELSE // IF i <> ENUM_TO_INT(SET_PIECE_GRAPPLE) // SAFE_ADD_BLIP_PED(sEnemySetPiece[i].blipIndex, sEnemySetPiece[i].pedIndex, TRUE) // ENDIF // ENDIF IF i <> ENUM_TO_INT(SET_PIECE_GRAPPLE) UPDATE_AI_PED_BLIP(sEnemySetPiece[i].pedIndex, blipStructSetPiece[i]) ENDIF IF NOT IS_ENTITY_DEAD(sEnemySetPiece[i].pedIndex) IF bPinnedAbattoir = FALSE FREEZE_ENTITY_POSITION(sEnemySetPiece[i].pedIndex, TRUE) ELSE FREEZE_ENTITY_POSITION(sEnemySetPiece[i].pedIndex, FALSE) ENDIF ENDIF // IF NOT IS_PED_INJURED(sEnemySetPiece[i].pedIndex) // IF NOT DOES_ENTITY_EXIST(pedClosestEnemy) // OR (DOES_ENTITY_EXIST(pedClosestEnemy) // AND IS_PED_INJURED(pedClosestEnemy)) // OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemySetPiece[i].pedIndex)) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy, FALSE)) // pedClosestEnemy = sEnemySetPiece[i].pedIndex // ENDIF // ENDIF ENDIF ENDREPEAT REPEAT iEnemyEscape i IF DOES_ENTITY_EXIST(sEnemyEscape[i].pedIndex) // IF IS_ENTITY_DEAD(sEnemyEscape[i].pedIndex) // OR eMissionObjective >= stageTriadsChase //OR bInAbattoir = FALSE // SAFE_REMOVE_BLIP(sEnemyEscape[i].blipIndex) // ELSE // SAFE_ADD_BLIP_PED(sEnemyEscape[i].blipIndex, sEnemyEscape[i].pedIndex, TRUE) // ENDIF UPDATE_AI_PED_BLIP(sEnemyEscape[i].pedIndex, blipStructEscape[i]) IF NOT IS_ENTITY_DEAD(sEnemyEscape[i].pedIndex) IF bPinnedAbattoir = FALSE FREEZE_ENTITY_POSITION(sEnemyEscape[i].pedIndex, TRUE) ELSE FREEZE_ENTITY_POSITION(sEnemyEscape[i].pedIndex, FALSE) ENDIF ENDIF IF NOT IS_PED_INJURED(sEnemyEscape[i].pedIndex) IF NOT DOES_ENTITY_EXIST(pedClosestEnemy) OR (DOES_ENTITY_EXIST(pedClosestEnemy) AND IS_PED_INJURED(pedClosestEnemy)) OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyEscape[i].pedIndex)) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy, FALSE)) pedClosestEnemy = sEnemyEscape[i].pedIndex ENDIF ENDIF ENDIF ENDREPEAT IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND pedClosestEnemyTemp != pedClosestEnemy ADD_PED_FOR_DIALOGUE(sPedsForConversation, 3, pedClosestEnemy, "MCH2GOON") ENDIF ENDPROC PROC WAIT_WITH_DEATH_CHECKS(INT iWait = 0) INT iGameTime = GET_GAME_TIMER() + iWait WHILE GET_GAME_TIMER() <= iGameTime WAIT(0) //Video Recorder REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_FreshMeat") DEATH_CHECKS() ENDWHILE ENDPROC PROC LOAD_SCENE_ADV(VECTOR vCoords, FLOAT fRadius = 20.0) NEW_LOAD_SCENE_START_SPHERE(vCoords, fRadius) INT iTimeOut = GET_GAME_TIMER() + 20000 WHILE IS_NEW_LOAD_SCENE_ACTIVE() AND NOT IS_NEW_LOAD_SCENE_LOADED() AND GET_GAME_TIMER() < iTimeOut #IF IS_DEBUG_BUILD PRINTLN("NEW_LOAD_SCENE_START_SPHERE(", vCoords.X, ", ", vCoords.Y, ", ", vCoords.Z, ", ", fRadius, ")...") #ENDIF PRINTLN("GET_GAME_TIMER() = ", GET_GAME_TIMER(), " | iTimeOut = ", iTimeOut) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE #IF IS_DEBUG_BUILD IF GET_GAME_TIMER() > iTimeOut SCRIPT_ASSERT("NEW_LOAD_SCENE_START_SPHERE timed out, see log for details.") ENDIF #ENDIF NEW_LOAD_SCENE_STOP() ENDPROC PROC CREATE_CONVERSATION_ADV(STRING sLabel, enumConversationPriority eConvPriority = CONV_PRIORITY_MEDIUM, BOOL bOnce = TRUE, enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN) IF NOT HAS_LABEL_BEEN_TRIGGERED(sLabel) WHILE NOT CREATE_CONVERSATION(sPedsForConversation, sConversationBlock, sLabel, eConvPriority, ShouldDisplaySubtitles, ShouldAddToBriefScreen) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF PRINTSTRING("TRYING TO PLAY ") PRINTSTRING(sLabel) PRINTSTRING(" CONVERSATION") PRINTNL() WAIT_WITH_DEATH_CHECKS(0) ENDWHILE SET_LABEL_AS_TRIGGERED(sLabel, bOnce) ENDIF ENDPROC PROC CREATE_CONVERSATION_FROM_SPECIFIC_LINE_ADV(STRING sLabel, STRING sLabelSub, enumConversationPriority eConvPriority = CONV_PRIORITY_MEDIUM, BOOL bOnce = TRUE) IF NOT HAS_LABEL_BEEN_TRIGGERED(sLabelSub) WHILE NOT CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sPedsForConversation, sConversationBlock, sLabel, sLabelSub, eConvPriority) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF PRINTSTRING("TRYING TO PLAY ") PRINTSTRING(sLabel) PRINTSTRING(" CONVERSATION") PRINTNL() WAIT_WITH_DEATH_CHECKS(0) ENDWHILE SET_LABEL_AS_TRIGGERED(sLabel, bOnce) ENDIF ENDPROC PROC PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV(STRING sLabel, STRING sLabelSub, enumConversationPriority eConvPriority = CONV_PRIORITY_MEDIUM, BOOL bOnce = TRUE) IF NOT HAS_LABEL_BEEN_TRIGGERED(sLabelSub) WHILE NOT PLAY_SINGLE_LINE_FROM_CONVERSATION(sPedsForConversation, sConversationBlock, sLabel, sLabelSub, eConvPriority) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF PRINTSTRING("TRYING TO PLAY ") PRINTSTRING(sLabel) PRINTSTRING(", ") PRINTSTRING(sLabelSub) PRINTSTRING(" CONVERSATION") PRINTNL() WAIT_WITH_DEATH_CHECKS(0) ENDWHILE SET_LABEL_AS_TRIGGERED(sLabelSub, bOnce) ENDIF ENDPROC FUNC BOOL IS_THIS_CONVERSATION_ONGOING_OR_QUEUED(STRING sRoot) IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() TEXT_LABEL txtRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT() IF ARE_STRINGS_EQUAL(sRoot, txtRoot) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL SAFE_START_CUTSCENE(FLOAT fRadius = 0.0) IF CAN_PLAYER_START_CUTSCENE() = TRUE IF fRadius <> 0.0 CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), fRadius, TRUE) ENDIF CLEAR_TEXT() KILL_PHONE_CONVERSATION() SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) ENDIF RETURN CAN_PLAYER_START_CUTSCENE() ENDFUNC PROC createEnemy(ACTOR &sEnemy, VECTOR vPosition, FLOAT fHeading, WEAPON_TYPE wpType = WEAPONTYPE_PISTOL, MODEL_NAMES modelName = G_M_M_CHIGOON_02) SPAWN_PED(sEnemy.pedIndex, modelName, vPosition, fHeading) SET_PED_RANDOM_COMPONENT_VARIATION(sEnemy.pedIndex) IF modelName = G_M_M_CHIGOON_02 INT iRandHair = GET_RANDOM_INT_IN_RANGE(0, 2) //Hair IF iRandHair = 0 SET_PED_COMPONENT_VARIATION(sEnemy.pedIndex, PED_COMP_HAIR, 0, GET_RANDOM_INT_IN_RANGE(0, 2)) ELIF iRandHair = 1 SET_PED_COMPONENT_VARIATION(sEnemy.pedIndex, PED_COMP_HAIR, 1, GET_RANDOM_INT_IN_RANGE(0, 2)) ELIF iRandHair = 2 SET_PED_COMPONENT_VARIATION(sEnemy.pedIndex, PED_COMP_HAIR, 2, 0) ENDIF ENDIF SET_PED_KEEP_TASK(sEnemy.pedIndex, TRUE) SET_PED_RELATIONSHIP_GROUP_HASH(sEnemy.pedIndex, relGroupEnemy) SET_PED_AS_ENEMY(sEnemy.pedIndex, TRUE) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemy.pedIndex, vPosition, 3.0) SET_ENTITY_HEALTH(sEnemy.pedIndex, 200) SET_PED_MAX_HEALTH(sEnemy.pedIndex, 200) SET_PED_DIES_WHEN_INJURED(sEnemy.pedIndex, TRUE) SET_PED_ACCURACY(sEnemy.pedIndex, 7) GIVE_WEAPON_TO_PED(sEnemy.pedIndex, wpType, INFINITE_AMMO, TRUE) SET_CURRENT_PED_WEAPON(sEnemy.pedIndex, wpType, TRUE) //SET_PED_SHOOT_RATE(sEnemy.pedIndex, 99) SET_PED_COMBAT_MOVEMENT(sEnemy.pedIndex, CM_DEFENSIVE) //SET_PED_COMBAT_ATTRIBUTES(sEnemy.pedIndex, CA_REQUIRES_LOS_TO_SHOOT, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemy.pedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) //SET_PED_COMBAT_ATTRIBUTES(sEnemy.pedIndex, CA_OPEN_COMBAT_WHEN_DEFENSIVE_AREA_IS_REACHED, TRUE) //SET_COMBAT_FLOAT(sEnemy.pedIndex, CCF_BURST_DURATION_IN_COVER, 4.0) //SET_COMBAT_FLOAT(sEnemy.pedIndex, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5) //SET_COMBAT_FLOAT(sEnemy.pedIndex, CCF_TIME_BETWEEN_PEEKS, 5.0) SET_PED_CONFIG_FLAG(sEnemy.pedIndex, PCF_DisableHurt, TRUE) SET_PED_CONFIG_FLAG(sEnemy.pedIndex, PCF_KillWhenTrapped, TRUE) SET_PED_CONFIG_FLAG(sEnemy.pedIndex, PCF_RunFromFiresAndExplosions, FALSE) SET_PED_CONFIG_FLAG(sEnemy.pedIndex, PCF_DisableExplosionReactions, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemy.pedIndex, CA_DISABLE_PINNED_DOWN, TRUE) IF HAS_CLIP_SET_LOADED("MOVE_STRAFE@COP") SET_PED_STRAFE_CLIPSET(sEnemy.pedIndex, "MOVE_STRAFE@COP") ENDIF INT i sEnemy.iStage = 0 sEnemy.iTimer = 0 REPEAT 3 i sEnemy.iTime[i] = -1 sEnemy.pedCheck[i] = NULL sEnemy.vLocate[i] = VECTOR_ZERO sEnemy.vLocSize[i] = VECTOR_ZERO sEnemy.fDist[i] = -1.0 CLEAR_BIT(sEnemy.iBitsetStrict, i) //sEnemy.bStrict[i] = FALSE sEnemy.eAdvanceStyle[i] = GO_TO_COMBAT sEnemy.fSpeed[i] = 1.0 CLEAR_BIT(sEnemy.iBitsetNavMesh, i) //sEnemy.bNavMesh[i] = TRUE sEnemy.vPoint[i] = VECTOR_ZERO ENDREPEAT #IF IS_DEBUG_BUILD sEnemy.sDebugName = NULL #ENDIF //Stats INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY(sEnemy.pedIndex) ENDPROC // ----------------------------------------------------------------------------------------------------------- // SWITCH CAM VARIABLES // ----------------------------------------------------------------------------------------------------------- ENUM MICHAEL2_SWITCH_CAM_STATE SWITCH_CAM_IDLE, SWITCH_CAM_REQUEST_ASSETS, SWITCH_CAM_SETUP_SPLINE, SWITCH_CAM_PLAYING_SPLINE, SWITCH_CAM_SHUTDOWN_SPLINE, SWITCH_CAM_RETURN_TO_GAMEPLAY ENDENUM MICHAEL2_SWITCH_CAM_STATE eSwitchCamState = SWITCH_CAM_IDLE SWITCH_CAM_STRUCT scsSwitchCam_FranklinToMichael SWITCH_CAM_STRUCT scsSwitchCam_FranklinInCarToMichael BOOL bFrankToMikeSwitchComplete SWITCH_CAM_STRUCT scsSwitchCam_MichaelToFranklin SWITCH_CAM_STRUCT scsSwitchCam_FranklinGrappleToMichael #IF IS_DEBUG_BUILD //BOOL bSwitchCamDebugScenarioEnabled = TRUE //BOOL bResetDebugScenario = FALSE #ENDIF BOOL bPlayerControlGiven FLOAT SwitchCamGameplayCamHeading = 0.0 FLOAT SwitchCamGameplayCamPitch = 0.0 FLOAT FrankGrappleToMikeGameplayCamHeading = 0.0 FLOAT FrankGrappleToMikeGameplayCamPitch = -2.8 BOOL bFranklinPlayedCellAnim BOOL bFranklinPlayAnimFromHangupPos OBJECT_INDEX oiFrankCellPhoneProp OBJECT_INDEX oiFrankCellPhoneDisplay INT iFrankToMike_PhoneAudID BOOL bFrankToMikeSwitch_PhoneSoundPlayed BOOL bMikeToFrank_SwitchToFrank BOOL bMikeToFrank_StopDialogue FLOAT fMikeToFrank_StopDialoguePhase = 0.53 BOOL bMikeToFrank_SwitchedToFrank FLOAT fMikeToFrank_SwitchToFrankPhase = 0.6 //BOOL bMikeToFrank_DestGeoRequested //FLOAT fMikeToFrank_PreloadDestGeo = 0.0 //FLOAT fSRLTime PED_INDEX piMichaelSwitch PED_INDEX piFranklinSwitch MODEL_NAMES mn_FrankPhoneDisplay = PROP_PHONE_OVERLAY_01 VECTOR v_FrankPhoneDisplayOffset = <<0.0, 0.0, 0.0>> VECTOR v_FrankPhoneDisplayRotation = <<0.0, 0.0, 0.0>> #IF IS_DEBUG_BUILD INT iFrankToMike_MikeHangingAnimNum = 2 #ENDIF BOOL bDoMikeToFranklinCustomSwitch BOOL bMikeToFranklinSwitchTriggered #IF IS_DEBUG_BUILD BOOL bSkipToFrankToMikeSwitch = FALSE BOOL bSkipCombatFrankGrappleToMikeSwitch = FALSE #ENDIF BOOL bFrankGrappleToMike_GameplayCamShakeActivated = FALSE INT iFrankGrappleToMike_GameplayCamShakeDuration = 8000 FLOAT fFrankGrappleToMike_GameplayCamShakeAmplitude = 0.2 FLOAT fFrankGrappleToMike_ReturnPlayerControlPhase = 0.62 PROC SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_TO_MICHAEL(SWITCH_CAM_STRUCT &thisSwitchCam, PED_INDEX &piFranklin, PED_INDEX &piMichael) CDEBUG3LN(DEBUG_MISSION, "SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_TO_MICHAEL") bMikeToFranklinSwitchTriggered = bMikeToFranklinSwitchTriggered bDoMikeToFranklinCustomSwitch = bDoMikeToFranklinCustomSwitch IF NOT thisSwitchCam.bInitialized //--- Start of Cam Data --- thisSwitchCam.nodes[0].vNodePos = <<-0.0606, 1.7105 - 0.35, 0.3801>> thisSwitchCam.nodes[0].vNodeDir = <<0.2063, 0.0631, 0.4815>> thisSwitchCam.nodes[0].bPointAtEntity = TRUE thisSwitchCam.nodes[0].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[0].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[0].fNodeFOV = 30.0000 thisSwitchCam.nodes[0].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[1].iNodeTime = 1200 thisSwitchCam.nodes[1].vNodePos = <<-0.0610, 1.7100 - 0.35, 0.3800>> thisSwitchCam.nodes[1].vNodeDir = <<0.2060, 0.0630, 0.4810>> thisSwitchCam.nodes[1].bPointAtEntity = TRUE thisSwitchCam.nodes[1].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[1].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[1].fNodeFOV = 30.0000 thisSwitchCam.nodes[1].fNodeTimePostFXBlendTime = 1.0000 thisSwitchCam.nodes[1].iCamEaseType = 2 thisSwitchCam.nodes[1].fCamEaseScaler = 1.0000 thisSwitchCam.nodes[1].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[1].bFlashEnabled = TRUE thisSwitchCam.nodes[1].SCFE_FlashEffectUsed = SCFE_SwitchShortFranklinIn thisSwitchCam.nodes[1].fFlashNodePhaseOffset = 0.9500 thisSwitchCam.nodes[2].iNodeTime = 600 thisSwitchCam.nodes[2].vNodePos = <<-0.0838, 1.8496, 2.7160>> thisSwitchCam.nodes[2].vNodeDir = <<0.1833, 0.2025, 2.8170>> thisSwitchCam.nodes[2].bPointAtEntity = TRUE thisSwitchCam.nodes[2].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[2].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[2].fNodeFOV = 30.0000 thisSwitchCam.nodes[2].fNodeTimePostFXBlendTime = 1.0000 thisSwitchCam.nodes[2].fNodeMotionBlur = 1.0000 thisSwitchCam.nodes[2].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[2].bFlashEnabled = TRUE thisSwitchCam.nodes[2].SCFE_FlashEffectUsed = SCFE_SwitchShortMichaelMid thisSwitchCam.nodes[2].fMinExposure = 200.0000 thisSwitchCam.nodes[2].fMaxExposure = 200.0000 thisSwitchCam.nodes[2].iRampUpDuration = 50 thisSwitchCam.nodes[2].iRampDownDuration = 50 thisSwitchCam.nodes[2].iHoldDuration = 100 thisSwitchCam.nodes[2].fFlashNodePhaseOffset = 0.4000 thisSwitchCam.nodes[3].bIsCamCutNode = TRUE thisSwitchCam.nodes[4].vNodePos = <<-1.1545, 1.0247, -1.9282>> thisSwitchCam.nodes[4].vNodeDir = <<-2.8900, 0.0000, -132.1460>> thisSwitchCam.nodes[4].fNodeFOV = 50.0000 thisSwitchCam.nodes[4].fNodeMotionBlur = 0.3000 thisSwitchCam.nodes[4].iCamEaseType = 1 thisSwitchCam.nodes[4].fCamEaseScaler = 1.0000 thisSwitchCam.nodes[4].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[4].bCamEaseForceLevel = TRUE thisSwitchCam.nodes[5].iNodeTime = 600 thisSwitchCam.nodes[5].vNodePos = <<-1.0990, 0.9744, -0.4433>> thisSwitchCam.nodes[5].vNodeDir = <<-2.8898, 0.0000, -132.1461>> thisSwitchCam.nodes[5].fNodeFOV = 50.0000 thisSwitchCam.nodes[5].fNodeMotionBlur = 0.4000 thisSwitchCam.nodes[5].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[5].bCamEaseForceLevel = TRUE thisSwitchCam.nodes[6].iNodeTime = 1600 thisSwitchCam.nodes[6].vNodePos = <<-1.04405, 0.92568, -0.4433>> //<<-1.2667, 1.1257, -0.4319>> thisSwitchCam.nodes[6].vNodeDir = <<-2.8898, 0.0000, -132.1461>> thisSwitchCam.nodes[6].fNodeFOV = 50.0000 thisSwitchCam.nodes[6].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[6].bCamEaseForceLevel = TRUE thisSwitchCam.iNumNodes = 7 thisSwitchCam.iCamSwitchFocusNode = 3 thisSwitchCam.fSwitchSoundAudioStartPhase = 0.3000 thisSwitchCam.fSwitchSoundAudioEndPhase = 0.4500 thisSwitchCam.bSwitchSoundPlayOpeningPulse = TRUE thisSwitchCam.bSwitchSoundPlayMoveLoop = TRUE thisSwitchCam.bSwitchSoundPlayExitPulse = FALSE thisSwitchCam.bSplineNoSmoothing = TRUE thisSwitchCam.bAddGameplayCamAsLastNode = FALSE thisSwitchCam.iGameplayNodeBlendDuration = 0 //--- End of Cam Data --- thisSwitchCam.strOutputStructName = "thisSwitchCam" thisSwitchCam.strOutputFileName = "CameraInfo_Michael2_FranklinToMichael.txt" thisSwitchCam.strXMLFileName = "CameraInfo_Michael2_FranklinToMichael.xml" thisSwitchCam.bInitialized = TRUE ENDIF thisSwitchCam.piPeds[0] = piFranklin thisSwitchCam.piPeds[1] = piMichael ENDPROC PROC SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_IN_CAR_TO_MICHAEL(SWITCH_CAM_STRUCT &thisSwitchCam, PED_INDEX &piFranklin, PED_INDEX &piMichael) CDEBUG3LN(DEBUG_MISSION, "SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_IN_CAR_TO_MICHAEL") bMikeToFranklinSwitchTriggered = bMikeToFranklinSwitchTriggered bDoMikeToFranklinCustomSwitch = bDoMikeToFranklinCustomSwitch IF NOT thisSwitchCam.bInitialized //--- Start of Cam Data --- thisSwitchCam.nodes[0].SwitchCamType = SWITCH_CAM_OLD_SYSTEM thisSwitchCam.nodes[0].iForceCamPointAtEntityIndex = -1 thisSwitchCam.nodes[0].bIsGameplayCamCopy = FALSE thisSwitchCam.nodes[0].iNodeTime = 0 thisSwitchCam.nodes[0].vNodePos = <<-0.1073, 2.1319, 0.6445>> thisSwitchCam.nodes[0].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[0].fNodeOffsetDist = 0.0000 thisSwitchCam.nodes[0].fNodeVerticleOffset = 0.0000 thisSwitchCam.nodes[0].bAttachToOriginPed = FALSE thisSwitchCam.nodes[0].vNodeDir = <<0.2353, 0.0176, 0.5680>> thisSwitchCam.nodes[0].bPointAtEntity = TRUE thisSwitchCam.nodes[0].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[0].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[0].fNodeFOV = 30.0000 thisSwitchCam.nodes[0].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[0].iNodeToClone = 0 thisSwitchCam.nodes[0].NodeTimePostFX_Type = NO_EFFECT thisSwitchCam.nodes[0].fNodeTimePostFXBlendTime = 0.0000 thisSwitchCam.nodes[0].fNodeTimePostFXTimeOffset = 0.0000 thisSwitchCam.nodes[0].fNodeMotionBlur = 0.0000 thisSwitchCam.nodes[0].NodeCamShakeType = CAM_SHAKE_DEFAULT thisSwitchCam.nodes[0].fNodeCamShake = 0.0000 thisSwitchCam.nodes[0].iCamEaseType = 0 thisSwitchCam.nodes[0].fCamEaseScaler = 0.0000 thisSwitchCam.nodes[0].fCamNodeVelocityScale = 0.0000 thisSwitchCam.nodes[0].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[0].bCamEaseForceLevel = FALSE thisSwitchCam.nodes[0].fTimeScale = 1.0000 thisSwitchCam.nodes[0].iTimeScaleEaseType = 0 thisSwitchCam.nodes[0].fTimeScaleEaseScaler = 0.0000 thisSwitchCam.nodes[0].bFlashEnabled = FALSE thisSwitchCam.nodes[0].SCFE_FlashEffectUsed = SCFE_CODE_FLASH thisSwitchCam.nodes[0].fMinExposure = 0.0000 thisSwitchCam.nodes[0].fMaxExposure = 0.0000 thisSwitchCam.nodes[0].iRampUpDuration = 0 thisSwitchCam.nodes[0].iRampDownDuration = 0 thisSwitchCam.nodes[0].iHoldDuration = 0 thisSwitchCam.nodes[0].fFlashNodePhaseOffset = 0.0000 thisSwitchCam.nodes[0].bIsLowDetailNode = FALSE thisSwitchCam.nodes[0].bUseCustomDOF = FALSE thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_NearDOF = 0.0000 thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_FarDOF = 0.0000 thisSwitchCam.nodes[0].NodeDOF_Info.fDOF_EffectStrength = 0.0000 thisSwitchCam.nodes[1].SwitchCamType = SWITCH_CAM_OLD_SYSTEM thisSwitchCam.nodes[1].iForceCamPointAtEntityIndex = -1 thisSwitchCam.nodes[1].bIsGameplayCamCopy = FALSE thisSwitchCam.nodes[1].iNodeTime = 1200 thisSwitchCam.nodes[1].vNodePos = <<-0.1199, 2.2099, 0.6473>> thisSwitchCam.nodes[1].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[1].fNodeOffsetDist = 0.0000 thisSwitchCam.nodes[1].fNodeVerticleOffset = 0.0000 thisSwitchCam.nodes[1].bAttachToOriginPed = FALSE thisSwitchCam.nodes[1].vNodeDir = <<0.2354, 0.0176, 0.5680>> thisSwitchCam.nodes[1].bPointAtEntity = TRUE thisSwitchCam.nodes[1].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[1].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[1].fNodeFOV = 30.0000 thisSwitchCam.nodes[1].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[1].iNodeToClone = 0 thisSwitchCam.nodes[1].NodeTimePostFX_Type = NO_EFFECT thisSwitchCam.nodes[1].fNodeTimePostFXBlendTime = 1.0000 thisSwitchCam.nodes[1].fNodeTimePostFXTimeOffset = 0.0000 thisSwitchCam.nodes[1].fNodeMotionBlur = 0.0000 thisSwitchCam.nodes[1].NodeCamShakeType = CAM_SHAKE_DEFAULT thisSwitchCam.nodes[1].fNodeCamShake = 0.0000 thisSwitchCam.nodes[1].iCamEaseType = 2 thisSwitchCam.nodes[1].fCamEaseScaler = 1.0000 thisSwitchCam.nodes[1].fCamNodeVelocityScale = 0.0000 thisSwitchCam.nodes[1].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[1].bCamEaseForceLevel = FALSE thisSwitchCam.nodes[1].fTimeScale = 1.0000 thisSwitchCam.nodes[1].iTimeScaleEaseType = 0 thisSwitchCam.nodes[1].fTimeScaleEaseScaler = 0.0000 thisSwitchCam.nodes[1].bFlashEnabled = TRUE thisSwitchCam.nodes[1].SCFE_FlashEffectUsed = SCFE_SwitchShortFranklinIn thisSwitchCam.nodes[1].fMinExposure = 0.0000 thisSwitchCam.nodes[1].fMaxExposure = 0.0000 thisSwitchCam.nodes[1].iRampUpDuration = 0 thisSwitchCam.nodes[1].iRampDownDuration = 0 thisSwitchCam.nodes[1].iHoldDuration = 0 thisSwitchCam.nodes[1].fFlashNodePhaseOffset = 0.9500 thisSwitchCam.nodes[1].bIsLowDetailNode = FALSE thisSwitchCam.nodes[1].bUseCustomDOF = FALSE thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_NearDOF = 0.0000 thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_FarDOF = 0.0000 thisSwitchCam.nodes[1].NodeDOF_Info.fDOF_EffectStrength = 0.0000 thisSwitchCam.nodes[2].SwitchCamType = SWITCH_CAM_OLD_SYSTEM thisSwitchCam.nodes[2].iForceCamPointAtEntityIndex = -1 thisSwitchCam.nodes[2].bIsGameplayCamCopy = FALSE thisSwitchCam.nodes[2].iNodeTime = 600 thisSwitchCam.nodes[2].vNodePos = <<-0.1100, 2.1471, 2.4307>> thisSwitchCam.nodes[2].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[2].fNodeOffsetDist = 0.0000 thisSwitchCam.nodes[2].fNodeVerticleOffset = 0.0000 thisSwitchCam.nodes[2].bAttachToOriginPed = FALSE thisSwitchCam.nodes[2].vNodeDir = <<0.2453, -0.0454, 2.3514>> thisSwitchCam.nodes[2].bPointAtEntity = TRUE thisSwitchCam.nodes[2].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[2].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[2].fNodeFOV = 30.0000 thisSwitchCam.nodes[2].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[2].iNodeToClone = 0 thisSwitchCam.nodes[2].NodeTimePostFX_Type = NO_EFFECT thisSwitchCam.nodes[2].fNodeTimePostFXBlendTime = 1.0000 thisSwitchCam.nodes[2].fNodeTimePostFXTimeOffset = 0.0000 thisSwitchCam.nodes[2].fNodeMotionBlur = 1.0000 thisSwitchCam.nodes[2].NodeCamShakeType = CAM_SHAKE_DEFAULT thisSwitchCam.nodes[2].fNodeCamShake = 0.0000 thisSwitchCam.nodes[2].iCamEaseType = 0 thisSwitchCam.nodes[2].fCamEaseScaler = 0.0000 thisSwitchCam.nodes[2].fCamNodeVelocityScale = 0.0000 thisSwitchCam.nodes[2].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[2].bCamEaseForceLevel = FALSE thisSwitchCam.nodes[2].fTimeScale = 1.0000 thisSwitchCam.nodes[2].iTimeScaleEaseType = 0 thisSwitchCam.nodes[2].fTimeScaleEaseScaler = 0.0000 thisSwitchCam.nodes[2].bFlashEnabled = TRUE thisSwitchCam.nodes[2].SCFE_FlashEffectUsed = SCFE_SwitchShortMichaelMid thisSwitchCam.nodes[2].fMinExposure = 200.0000 thisSwitchCam.nodes[2].fMaxExposure = 200.0000 thisSwitchCam.nodes[2].iRampUpDuration = 50 thisSwitchCam.nodes[2].iRampDownDuration = 50 thisSwitchCam.nodes[2].iHoldDuration = 100 thisSwitchCam.nodes[2].fFlashNodePhaseOffset = 0.4000 thisSwitchCam.nodes[2].bIsLowDetailNode = FALSE thisSwitchCam.nodes[2].bUseCustomDOF = FALSE thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_NearDOF = 0.0000 thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_FarDOF = 0.0000 thisSwitchCam.nodes[2].NodeDOF_Info.fDOF_EffectStrength = 0.0000 thisSwitchCam.nodes[3].bIsCamCutNode = TRUE thisSwitchCam.nodes[4].SwitchCamType = SWITCH_CAM_OLD_SYSTEM thisSwitchCam.nodes[4].iForceCamPointAtEntityIndex = -1 thisSwitchCam.nodes[4].bIsGameplayCamCopy = FALSE thisSwitchCam.nodes[4].iNodeTime = 0 thisSwitchCam.nodes[4].vNodePos = <<-1.1545, 1.0247, -1.9282>> thisSwitchCam.nodes[4].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[4].fNodeOffsetDist = 0.0000 thisSwitchCam.nodes[4].fNodeVerticleOffset = 0.0000 thisSwitchCam.nodes[4].bAttachToOriginPed = FALSE thisSwitchCam.nodes[4].vNodeDir = <<-2.8900, 0.0000, -132.1460>> thisSwitchCam.nodes[4].bPointAtEntity = FALSE thisSwitchCam.nodes[4].bPointAtOffsetIsRelative = FALSE thisSwitchCam.nodes[4].bAttachOffsetIsRelative = FALSE thisSwitchCam.nodes[4].fNodeFOV = 50.0000 thisSwitchCam.nodes[4].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[4].iNodeToClone = 0 thisSwitchCam.nodes[4].NodeTimePostFX_Type = NO_EFFECT thisSwitchCam.nodes[4].fNodeTimePostFXBlendTime = 0.0000 thisSwitchCam.nodes[4].fNodeTimePostFXTimeOffset = 0.0000 thisSwitchCam.nodes[4].fNodeMotionBlur = 0.3000 thisSwitchCam.nodes[4].NodeCamShakeType = CAM_SHAKE_DEFAULT thisSwitchCam.nodes[4].fNodeCamShake = 0.0000 thisSwitchCam.nodes[4].iCamEaseType = 1 thisSwitchCam.nodes[4].fCamEaseScaler = 1.0000 thisSwitchCam.nodes[4].fCamNodeVelocityScale = 0.0000 thisSwitchCam.nodes[4].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[4].bCamEaseForceLevel = TRUE thisSwitchCam.nodes[4].fTimeScale = 1.0000 thisSwitchCam.nodes[4].iTimeScaleEaseType = 0 thisSwitchCam.nodes[4].fTimeScaleEaseScaler = 0.0000 thisSwitchCam.nodes[4].bFlashEnabled = FALSE thisSwitchCam.nodes[4].SCFE_FlashEffectUsed = SCFE_CODE_FLASH thisSwitchCam.nodes[4].fMinExposure = 0.0000 thisSwitchCam.nodes[4].fMaxExposure = 0.0000 thisSwitchCam.nodes[4].iRampUpDuration = 0 thisSwitchCam.nodes[4].iRampDownDuration = 0 thisSwitchCam.nodes[4].iHoldDuration = 0 thisSwitchCam.nodes[4].fFlashNodePhaseOffset = 0.0000 thisSwitchCam.nodes[4].bIsLowDetailNode = FALSE thisSwitchCam.nodes[4].bUseCustomDOF = FALSE thisSwitchCam.nodes[4].NodeDOF_Info.fDOF_NearDOF = 0.0000 thisSwitchCam.nodes[4].NodeDOF_Info.fDOF_FarDOF = 0.0000 thisSwitchCam.nodes[4].NodeDOF_Info.fDOF_EffectStrength = 0.0000 thisSwitchCam.nodes[5].SwitchCamType = SWITCH_CAM_OLD_SYSTEM thisSwitchCam.nodes[5].iForceCamPointAtEntityIndex = -1 thisSwitchCam.nodes[5].bIsGameplayCamCopy = FALSE thisSwitchCam.nodes[5].iNodeTime = 600 thisSwitchCam.nodes[5].vNodePos = <<-1.0990, 0.9744, -0.4433>> thisSwitchCam.nodes[5].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[5].fNodeOffsetDist = 0.0000 thisSwitchCam.nodes[5].fNodeVerticleOffset = 0.0000 thisSwitchCam.nodes[5].bAttachToOriginPed = FALSE thisSwitchCam.nodes[5].vNodeDir = <<-2.8898, 0.0000, -132.1461>> thisSwitchCam.nodes[5].bPointAtEntity = FALSE thisSwitchCam.nodes[5].bPointAtOffsetIsRelative = FALSE thisSwitchCam.nodes[5].bAttachOffsetIsRelative = FALSE thisSwitchCam.nodes[5].fNodeFOV = 50.0000 thisSwitchCam.nodes[5].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[5].iNodeToClone = 0 thisSwitchCam.nodes[5].NodeTimePostFX_Type = NO_EFFECT thisSwitchCam.nodes[5].fNodeTimePostFXBlendTime = 0.0000 thisSwitchCam.nodes[5].fNodeTimePostFXTimeOffset = 0.0000 thisSwitchCam.nodes[5].fNodeMotionBlur = 0.4000 thisSwitchCam.nodes[5].NodeCamShakeType = CAM_SHAKE_DEFAULT thisSwitchCam.nodes[5].fNodeCamShake = 0.0000 thisSwitchCam.nodes[5].iCamEaseType = 0 thisSwitchCam.nodes[5].fCamEaseScaler = 0.0000 thisSwitchCam.nodes[5].fCamNodeVelocityScale = 0.0000 thisSwitchCam.nodes[5].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[5].bCamEaseForceLevel = TRUE thisSwitchCam.nodes[5].fTimeScale = 1.0000 thisSwitchCam.nodes[5].iTimeScaleEaseType = 0 thisSwitchCam.nodes[5].fTimeScaleEaseScaler = 0.0000 thisSwitchCam.nodes[5].bFlashEnabled = FALSE thisSwitchCam.nodes[5].SCFE_FlashEffectUsed = SCFE_CODE_FLASH thisSwitchCam.nodes[5].fMinExposure = 0.0000 thisSwitchCam.nodes[5].fMaxExposure = 0.0000 thisSwitchCam.nodes[5].iRampUpDuration = 0 thisSwitchCam.nodes[5].iRampDownDuration = 0 thisSwitchCam.nodes[5].iHoldDuration = 0 thisSwitchCam.nodes[5].fFlashNodePhaseOffset = 0.0000 thisSwitchCam.nodes[5].bIsLowDetailNode = FALSE thisSwitchCam.nodes[5].bUseCustomDOF = FALSE thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_NearDOF = 0.0000 thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_FarDOF = 0.0000 thisSwitchCam.nodes[5].NodeDOF_Info.fDOF_EffectStrength = 0.0000 thisSwitchCam.nodes[6].SwitchCamType = SWITCH_CAM_OLD_SYSTEM thisSwitchCam.nodes[6].iForceCamPointAtEntityIndex = -1 thisSwitchCam.nodes[6].bIsGameplayCamCopy = FALSE thisSwitchCam.nodes[6].iNodeTime = 1600 thisSwitchCam.nodes[6].vNodePos = <<-1.04405, 0.92568, -0.4433>> //<<-1.2667, 1.1257, -0.4319>> thisSwitchCam.nodes[6].vWorldPosLookAt = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[6].fNodeOffsetDist = 0.0000 thisSwitchCam.nodes[6].fNodeVerticleOffset = 0.0000 thisSwitchCam.nodes[6].bAttachToOriginPed = FALSE thisSwitchCam.nodes[6].vNodeDir = <<-2.8898, 0.0000, -132.1461>> thisSwitchCam.nodes[6].bPointAtEntity = FALSE thisSwitchCam.nodes[6].bPointAtOffsetIsRelative = FALSE thisSwitchCam.nodes[6].bAttachOffsetIsRelative = FALSE thisSwitchCam.nodes[6].fNodeFOV = 50.0000 thisSwitchCam.nodes[6].vClonedNodeOffset = <<0.0000, 0.0000, 0.0000>> thisSwitchCam.nodes[6].iNodeToClone = 0 thisSwitchCam.nodes[6].NodeTimePostFX_Type = NO_EFFECT thisSwitchCam.nodes[6].fNodeTimePostFXBlendTime = 0.0000 thisSwitchCam.nodes[6].fNodeTimePostFXTimeOffset = 0.0000 thisSwitchCam.nodes[6].fNodeMotionBlur = 0.0000 thisSwitchCam.nodes[6].NodeCamShakeType = CAM_SHAKE_DEFAULT thisSwitchCam.nodes[6].fNodeCamShake = 0.0000 thisSwitchCam.nodes[6].iCamEaseType = 0 thisSwitchCam.nodes[6].fCamEaseScaler = 0.0000 thisSwitchCam.nodes[6].fCamNodeVelocityScale = 0.0000 thisSwitchCam.nodes[6].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[6].bCamEaseForceLevel = TRUE thisSwitchCam.nodes[6].fTimeScale = 1.0000 thisSwitchCam.nodes[6].iTimeScaleEaseType = 0 thisSwitchCam.nodes[6].fTimeScaleEaseScaler = 0.0000 thisSwitchCam.nodes[6].bFlashEnabled = FALSE thisSwitchCam.nodes[6].SCFE_FlashEffectUsed = SCFE_CODE_FLASH thisSwitchCam.nodes[6].fMinExposure = 0.0000 thisSwitchCam.nodes[6].fMaxExposure = 0.0000 thisSwitchCam.nodes[6].iRampUpDuration = 0 thisSwitchCam.nodes[6].iRampDownDuration = 0 thisSwitchCam.nodes[6].iHoldDuration = 0 thisSwitchCam.nodes[6].fFlashNodePhaseOffset = 0.0000 thisSwitchCam.nodes[6].bIsLowDetailNode = FALSE thisSwitchCam.nodes[6].bUseCustomDOF = FALSE thisSwitchCam.nodes[6].NodeDOF_Info.fDOF_NearDOF = 0.0000 thisSwitchCam.nodes[6].NodeDOF_Info.fDOF_FarDOF = 0.0000 thisSwitchCam.nodes[6].NodeDOF_Info.fDOF_EffectStrength = 0.0000 thisSwitchCam.iNumNodes = 7 thisSwitchCam.iCamSwitchFocusNode = 3 thisSwitchCam.fSwitchSoundAudioStartPhase = 0.3000 thisSwitchCam.fSwitchSoundAudioEndPhase = 0.4500 thisSwitchCam.bSwitchSoundPlayOpeningPulse = TRUE thisSwitchCam.bSwitchSoundPlayMoveLoop = TRUE thisSwitchCam.bSwitchSoundPlayExitPulse = FALSE thisSwitchCam.bSplineNoSmoothing = TRUE thisSwitchCam.bAddGameplayCamAsLastNode = FALSE thisSwitchCam.iGameplayNodeBlendDuration = 0 //--- End of Cam Data --- thisSwitchCam.strOutputStructName = "thisSwitchCam" thisSwitchCam.strOutputFileName = "CameraInfo_Michael2_FranklinInCarToMichael.txt" thisSwitchCam.strXMLFileName = "CameraInfo_Michael2_FranklinInCarToMichael.xml" thisSwitchCam.bInitialized = TRUE ENDIF thisSwitchCam.piPeds[0] = piFranklin thisSwitchCam.piPeds[1] = piMichael ENDPROC /// PURPOSE: /// Handle the playback of the switch cam. The will setup, play, shut down and cleanup the switch cam spline /// PARAMS: /// thisSwitchCam - Switch camera to playback /// bReturnTrueOnce - If you only want this function to return TRUE once upon completion. Set to FALSE to have this function to return true every time this is called once the camera is finished playback. /// RETURNS: /// TRUE when camera is complete, FALSE if playback is still active, or if the camera has completed playback and bReturnTrueOnce is set to TRUE. FUNC BOOL HANDLE_SWITCH_CAM_FRANKLIN_TO_MICHAEL(SWITCH_CAM_STRUCT &thisSwitchCam, BOOL bReturnTrueOnce = TRUE) INT iCurrentSwitchNode SWITCH eSwitchCamState CASE SWITCH_CAM_IDLE CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_IDLE") BREAK CASE SWITCH_CAM_REQUEST_ASSETS CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_REQUEST_ASSETS") SET_PED_POPULATION_BUDGET(0) SET_VEHICLE_POPULATION_BUDGET(0) SET_REDUCE_PED_MODEL_BUDGET(TRUE) SET_REDUCE_VEHICLE_MODEL_BUDGET(TRUE) REQUEST_CUTSCENE("MIC_2_MCS_1") BREAK CASE SWITCH_CAM_SETUP_SPLINE CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_SETUP_SPLINE") piMichaelSwitch = PLAYER_PED(CHAR_MICHAEL) piFranklinSwitch = PLAYER_PED(CHAR_FRANKLIN) IF NOT IS_PED_IN_ANY_VEHICLE(piFranklinSwitch) SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_TO_MICHAEL(thisSwitchCam, piFranklinSwitch, piMichaelSwitch) ELSE SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_IN_CAR_TO_MICHAEL(thisSwitchCam, piFranklinSwitch, piMichaelSwitch) ENDIF IF DOES_SWITCH_CAM_EXIST(thisSwitchCam) DESTROY_SWITCH_CAM(thisSwitchCam) ENDIF CREATE_SPLINE_CAM(thisSwitchCam) SET_CAM_ACTIVE(thisSwitchCam.ciSpline, TRUE) SHAKE_CAM(thisSwitchCam.ciSpline, "HAND_SHAKE", 1.0) RENDER_SCRIPT_CAMS(TRUE, FALSE) DISPLAY_RADAR(FALSE) DISPLAY_HUD(FALSE) SETTIMERB(0) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) VEHICLE_INDEX vehBringToHalt vehBringToHalt = GET_VEHICLE_PED_IS_IN(PLAYER_PED(CHAR_FRANKLIN)) SET_VEHICLE_RADIO_ENABLED(vehBringToHalt, FALSE) IF DOES_ENTITY_EXIST(vehBringToHalt) AND NOT IS_ENTITY_DEAD(vehBringToHalt) bHaltVehicle = TRUE ELSE SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) ENDIF ELSE SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) ENDIF IF HAS_LABEL_BEEN_TRIGGERED("SHAPETEST[TRUE]") CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED(CHAR_FRANKLIN)) SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<-14.5290, -1446.9047, 29.6462>>, 182.3441, FALSE) TASK_PLAY_ANIM(PLAYER_PED(CHAR_FRANKLIN), "cellphone@", "cellphone_text_read_base", INSTANT_BLEND_IN, DEFAULT, DEFAULT, AF_LOOPING | AF_UPPERBODY) // | AF_SECONDARY) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN), TRUE) ELIF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) FORCE_PED_MOTION_STATE(PLAYER_PED(CHAR_FRANKLIN), MS_ON_FOOT_IDLE) ENDIF bPlayerControlGiven = FALSE bFrankToMikeSwitch_PhoneSoundPlayed = FALSE iFrankToMike_PhoneAudID = 0 SET_GAME_PAUSES_FOR_STREAMING(FALSE) IF NOT IS_ENTITY_ATTACHED(piMichaelSwitch) ATTACH_ENTITY_TO_ENTITY(piMichaelSwitch, objHook, 0, vMichaelAttachOffset, <<0.0, 0.0, 180.0>>, TRUE, TRUE) ENDIF eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE FALLTHRU CASE SWITCH_CAM_PLAYING_SPLINE CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE") CDEBUG3LN(DEBUG_MISSION, GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline)) iCurrentSwitchNode = UPDATE_SPLINE_CAM(thisSwitchCam) IF IS_CAM_ACTIVE(thisSwitchCam.ciSpline) IF iCurrentSwitchNode >= thisSwitchCam.iCamSwitchFocusNode IF NOT HAS_LABEL_BEEN_TRIGGERED("LoadSceneFranklin") // SET_GAMEPLAY_CAM_RELATIVE_HEADING(SwitchCamGameplayCamHeading) // SET_GAMEPLAY_CAM_RELATIVE_PITCH(SwitchCamGameplayCamPitch) CLEAR_PED_TASKS(PLAYER_PED(CHAR_FRANKLIN)) // IF IS_NEW_LOAD_SCENE_ACTIVE() // NEW_LOAD_SCENE_STOP() // ENDIF // PLAY_SOUND_FRONTEND(-1, "Hit_Out", "PLAYER_SWITCH_CUSTOM_SOUNDSET") // PLAY_SOUND_FRONTEND(-1, "Short_Transition_Out", "PLAYER_SWITCH_CUSTOM_SOUNDSET") WAIT_WITH_DEATH_CHECKS(0) //[MF] Loading geo at Franklin's position for the next switch RIGHT AWAY. NEW_LOAD_SCENE_START_SPHERE(<<-85.4048, -1483.7083, 32.0893>>, 200.0) //, NEWLOADSCENE_FLAG_LONGSWITCH_CUTSCENE) //GET_ENTITY_COORDS(piFranklinSwitch, FALSE) SET_LABEL_AS_TRIGGERED("LoadSceneFranklin", TRUE) ENDIF ENDIF IF NOT bFrankToMikeSwitch_PhoneSoundPlayed PLAY_SOUND_FRONTEND(iFrankToMike_PhoneAudID, "Pull_Out", "Phone_SoundSet_Franklin") bFrankToMikeSwitch_PhoneSoundPlayed = TRUE ENDIF //[MF] Once cam is at the end, reset the gameplay cam positon and advance to next state. IF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) AND GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= 1.00 IF TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE, TCF_CLEAR_TASK_INTERRUPT_CHECKS) CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_RETURN_TO_GAMEPLAY") eSwitchCamState = SWITCH_CAM_RETURN_TO_GAMEPLAY ENDIF ELSE RETURN FALSE ENDIF ENDIF FALLTHRU CASE SWITCH_CAM_RETURN_TO_GAMEPLAY SET_TIME_SCALE(1.0) IF NOT bPlayerControlGiven SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) bPlayerControlGiven = TRUE ENDIF eSwitchCamState = SWITCH_CAM_IDLE thisSwitchCam.bIsSplineCamFinishedPlaying = TRUE sCamDetails.bRun = FALSE SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SET_GAME_PAUSES_FOR_STREAMING(TRUE) SET_PED_POPULATION_BUDGET(3) SET_VEHICLE_POPULATION_BUDGET(3) SET_REDUCE_PED_MODEL_BUDGET(FALSE) SET_REDUCE_VEHICLE_MODEL_BUDGET(FALSE) DELETE_OBJECT(oiFrankCellPhoneProp) SET_MODEL_AS_NO_LONGER_NEEDED(Prop_phone_ING_03) DELETE_OBJECT(oiFrankCellPhoneDisplay) SET_MODEL_AS_NO_LONGER_NEEDED(mn_FrankPhoneDisplay) CLEAR_PED_SECONDARY_TASK(PLAYER_PED(CHAR_FRANKLIN)) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) SET_VEHICLE_RADIO_ENABLED(GET_VEHICLE_PED_IS_IN(PLAYER_PED(CHAR_FRANKLIN)), TRUE) ENDIF RETURN TRUE BREAK ENDSWITCH IF bReturnTrueOnce RETURN FALSE ELSE RETURN thisSwitchCam.bIsSplineCamFinishedPlaying ENDIF ENDFUNC PROC SETUP_SPLINE_CAM_NODE_ARRAY_MICHAEL_TO_FRANKLIN(SWITCH_CAM_STRUCT &thisSwitchCam, PED_INDEX &piMichael, PED_INDEX &piFranklin) CDEBUG3LN(DEBUG_MISSION, "SETUP_SPLINE_CAM_NODE_ARRAY_MICHAEL_TO_FRANKLIN") IF NOT thisSwitchCam.bInitialized //--- Start of Cam Data --- thisSwitchCam.nodes[0].vNodePos = <<0.8701, 1.3396, -0.5233>> thisSwitchCam.nodes[0].vNodeDir = <<0.0970, -0.0262, -0.5900>> thisSwitchCam.nodes[0].bPointAtEntity = TRUE thisSwitchCam.nodes[0].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[0].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[0].fNodeFOV = 30.0000 thisSwitchCam.nodes[0].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[0].bIsLowDetailNode = TRUE thisSwitchCam.nodes[1].iNodeTime = 3200 thisSwitchCam.nodes[1].vNodePos = <<0.5453, 1.0492, -0.4973>> thisSwitchCam.nodes[1].vNodeDir = <<-0.0304, 0.0807, -0.5986>> thisSwitchCam.nodes[1].bPointAtEntity = TRUE thisSwitchCam.nodes[1].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[1].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[1].fNodeFOV = 30.0000 thisSwitchCam.nodes[1].fNodeTimePostFXBlendTime = 1.0000 thisSwitchCam.nodes[1].iCamEaseType = 2 thisSwitchCam.nodes[1].fCamEaseScaler = 0.9000 thisSwitchCam.nodes[1].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[1].bFlashEnabled = TRUE thisSwitchCam.nodes[1].SCFE_FlashEffectUsed = SCFE_SwitchShortMichaelIn thisSwitchCam.nodes[1].fFlashNodePhaseOffset = 0.9900 thisSwitchCam.nodes[1].bIsLowDetailNode = TRUE thisSwitchCam.nodes[2].iNodeTime = 600 thisSwitchCam.nodes[2].vNodePos = <<0.7067, 1.7139, 1.9620>> thisSwitchCam.nodes[2].vNodeDir = <<-0.0713, 0.0428, 1.9701>> thisSwitchCam.nodes[2].bPointAtEntity = TRUE thisSwitchCam.nodes[2].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[2].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[2].fNodeFOV = 30.0000 thisSwitchCam.nodes[2].fNodeTimePostFXBlendTime = 1.0000 thisSwitchCam.nodes[2].bCamEaseForceLinear = TRUE // thisSwitchCam.nodes[2].bFlashEnabled = TRUE // thisSwitchCam.nodes[2].SCFE_FlashEffectUsed = SCFE_SwitchShortFranklinMid thisSwitchCam.nodes[2].fMinExposure = 200.0000 thisSwitchCam.nodes[2].fMaxExposure = 200.0000 thisSwitchCam.nodes[2].iRampUpDuration = 50 thisSwitchCam.nodes[2].iRampDownDuration = 50 thisSwitchCam.nodes[2].iHoldDuration = 100 thisSwitchCam.nodes[2].fFlashNodePhaseOffset = 0.6000 thisSwitchCam.nodes[2].bIsLowDetailNode = TRUE thisSwitchCam.nodes[3].bIsCamCutNode = TRUE thisSwitchCam.nodes[4].vNodePos = <<-1.8041, 2.1361, -0.3195>> thisSwitchCam.nodes[4].vNodeDir = <<0.2940, 0.3268, -0.1647>> thisSwitchCam.nodes[4].bPointAtEntity = TRUE thisSwitchCam.nodes[4].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[4].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[4].fNodeFOV = 45.0000 thisSwitchCam.nodes[4].iCamEaseType = 1 thisSwitchCam.nodes[4].fCamEaseScaler = 0.9000 thisSwitchCam.nodes[4].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[4].bCamEaseForceLevel = TRUE thisSwitchCam.nodes[5].iNodeTime = 500 thisSwitchCam.nodes[5].vNodePos = <<-1.9438 - 0.25, 1.9582 - 1.35, 0.3947>> thisSwitchCam.nodes[5].vNodeDir = <<0.2150, 0.2517, 0.2640>> thisSwitchCam.nodes[5].bPointAtEntity = TRUE thisSwitchCam.nodes[5].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[5].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[5].fNodeFOV = 45.0000 thisSwitchCam.nodes[5].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[5].bCamEaseForceLevel = TRUE thisSwitchCam.nodes[6].iNodeTime = 3000 thisSwitchCam.nodes[6].vNodePos = <<-1.9158 + 1.25 - 0.25, 1.7808 - 1.35, 0.5142>> thisSwitchCam.nodes[6].vNodeDir = <<0.0695, 0.1097, 0.5908>> thisSwitchCam.nodes[6].bPointAtEntity = TRUE thisSwitchCam.nodes[6].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[6].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[6].fNodeFOV = 45.0000 thisSwitchCam.nodes[6].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[6].bCamEaseForceLevel = TRUE IF GET_CAM_VIEW_MODE_FOR_CONTEXT(GET_CAM_ACTIVE_VIEW_MODE_CONTEXT()) = CAM_VIEW_MODE_FIRST_PERSON thisSwitchCam.nodes[7].iNodeTime = 500 thisSwitchCam.nodes[7].vNodePos = <<-0.3329, 0.5154, 0.5142>> thisSwitchCam.nodes[7].vNodeDir = <<0.0695, 0.1097, 0.5908>> thisSwitchCam.nodes[7].bPointAtEntity = TRUE thisSwitchCam.nodes[7].bPointAtOffsetIsRelative = TRUE thisSwitchCam.nodes[7].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[7].fNodeFOV = 45.0000 thisSwitchCam.nodes[7].bCamEaseForceLinear = TRUE thisSwitchCam.nodes[7].bCamEaseForceLevel = TRUE ENDIF IF GET_CAM_VIEW_MODE_FOR_CONTEXT(GET_CAM_ACTIVE_VIEW_MODE_CONTEXT()) = CAM_VIEW_MODE_FIRST_PERSON thisSwitchCam.iNumNodes = 8 ELSE thisSwitchCam.iNumNodes = 7 ENDIF thisSwitchCam.iCamSwitchFocusNode = 3 thisSwitchCam.fSwitchSoundAudioStartPhase = 0.4500 thisSwitchCam.fSwitchSoundAudioEndPhase = 0.5200 thisSwitchCam.bSwitchSoundPlayOpeningPulse = TRUE thisSwitchCam.bSwitchSoundPlayMoveLoop = TRUE thisSwitchCam.bSwitchSoundPlayExitPulse = TRUE thisSwitchCam.bSplineNoSmoothing = TRUE thisSwitchCam.bAddGameplayCamAsLastNode = FALSE thisSwitchCam.iGameplayNodeBlendDuration = 0 //--- End of Cam Data --- thisSwitchCam.strOutputStructName = "thisSwitchCam" thisSwitchCam.strOutputFileName = "CameraInfo_Michael2_MichaelToFranklin.txt" thisSwitchCam.strXMLFileName = "CameraInfo_Michael2_MichaelToFranklin.xml" thisSwitchCam.bInitialized = TRUE ENDIF thisSwitchCam.piPeds[0] = piMichael thisSwitchCam.piPeds[1] = piFranklin ENDPROC /// PURPOSE: /// Handle the playback of the switch cam. The will setup, play, shut down and cleanup the switch cam spline /// PARAMS: /// thisSwitchCam - Switch camera to playback /// bReturnTrueOnce - If you only want this function to return TRUE once upon completion. Set to FALSE to have this function to return true every time this is called once the camera is finished playback. /// RETURNS: /// TRUE when camera is complete, FALSE if playback is still active, or if the camera has completed playback and bReturnTrueOnce is set to TRUE. FUNC BOOL HANDLE_SWITCH_CAM_MICHAEL_TO_FRANKLIN(SWITCH_CAM_STRUCT &thisSwitchCam, BOOL bReturnTrueOnce = TRUE) //INT iCurrentSwitchNode SWITCH eSwitchCamState CASE SWITCH_CAM_IDLE CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_IDLE") BREAK CASE SWITCH_CAM_REQUEST_ASSETS CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_REQUEST_ASSETS") NEW_LOAD_SCENE_START_SPHERE(<<-85.4048, -1483.7083, 32.0893>>, 200.0) //, NEWLOADSCENE_FLAG_LONGSWITCH_CUTSCENE) //GET_ENTITY_COORDS(piFranklinSwitch) SET_ENTITY_LOAD_COLLISION_FLAG(PLAYER_PED(CHAR_FRANKLIN), TRUE) SET_FOCUS_ENTITY(PLAYER_PED(CHAR_FRANKLIN)) ADD_NAVMESH_REQUIRED_REGION(990.39264, -2162.96143, 25.0) // SET_FOCUS_POS_AND_VEL() // PREFETCH_SRL("mike2_mike_to_frank") BREAK CASE SWITCH_CAM_SETUP_SPLINE CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_SETUP_SPLINE") piMichaelSwitch = PLAYER_PED(CHAR_MICHAEL) piFranklinSwitch = PLAYER_PED(CHAR_FRANKLIN) //PREFETCH_SRL("mike2_mike_to_frank") // IF IS_SRL_LOADED() // CDEBUG3LN(DEBUG_MISSION, "SRL Loaded") SETUP_SPLINE_CAM_NODE_ARRAY_MICHAEL_TO_FRANKLIN(thisSwitchCam, piMichaelSwitch, piFranklinSwitch) IF DOES_SWITCH_CAM_EXIST(thisSwitchCam) DESTROY_SWITCH_CAM(thisSwitchCam) ENDIF CREATE_SPLINE_CAM(thisSwitchCam) SET_CAM_ACTIVE(thisSwitchCam.ciSpline, TRUE) RENDER_SCRIPT_CAMS(TRUE, FALSE) DISPLAY_RADAR(FALSE) DISPLAY_HUD(FALSE) SETTIMERB(0) SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) bPlayerControlGiven = FALSE // bMikeToFrank_DestGeoRequested = FALSE bMikeToFrank_SwitchToFrank = FALSE bMikeToFrank_SwitchedToFrank = FALSE bMikeToFrank_StopDialogue = FALSE SET_GAME_PAUSES_FOR_STREAMING(TRUE) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehFranklin) STOP_PLAYBACK_RECORDED_VEHICLE(vehFranklin) ENDIF IF IS_PED_IN_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) START_PLAYBACK_RECORDED_VEHICLE(vehFranklin, 001, "ALrollingstart") PRINTLN("START_PLAYBACK_RECORDED_VEHICLE(vehFranklin, 001, 'ALrollingstart')") SET_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehFranklin, GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(001, "ALrollingstart") - 4000.0) SET_PLAYBACK_SPEED(vehFranklin, 0.0) SET_VEHICLE_ENGINE_ON(vehFranklin, TRUE, TRUE) ENDIF // SET_SRL_READAHEAD_TIMES(-1, 6, -1, 6) // BEGIN_SRL() // SET_SRL_POST_CUTSCENE_CAMERA(<<-99.7, -1499.5, 34.9>>, <<-0.8, 0.1, 140.7>>) // fSRLTime = 0 // SET_SRL_TIME(fSRLTime) eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE FALLTHRU // ENDIF BREAK CASE SWITCH_CAM_PLAYING_SPLINE CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE") CDEBUG3LN(DEBUG_MISSION, GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline)) //iCurrentSwitchNode = UPDATE_SPLINE_CAM(thisSwitchCam) UPDATE_SPLINE_CAM(thisSwitchCam) //[MF] To fix an issue where the HUD and radar were getting displayed early HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_RETICLE) HIDE_HUD_AND_RADAR_THIS_FRAME() IF IS_CAM_ACTIVE(thisSwitchCam.ciSpline) OVERRIDE_LODSCALE_THIS_FRAME(1.0) // IF NOT bMikeToFrank_DestGeoRequested // IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= fMikeToFrank_PreloadDestGeo // NEW_LOAD_SCENE_START_SPHERE(GET_ENTITY_COORDS(piFranklinSwitch), 100.0, NEWLOADSCENE_FLAG_LONGSWITCH_CUTSCENE) // bMikeToFrank_DestGeoRequested = TRUE // ENDIF // ENDIF IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= fMikeToFrank_SwitchToFrankPhase IF NOT bMikeToFrank_SwitchToFrank bMikeToFrank_SwitchToFrank = TRUE SET_GAME_PAUSES_FOR_STREAMING(FALSE) ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING(SwitchCamGameplayCamHeading) SET_GAMEPLAY_CAM_RELATIVE_PITCH(SwitchCamGameplayCamPitch) ENDIF IF NOT bMikeToFrank_StopDialogue IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) > fMikeToFrank_StopDialoguePhase STOP_SCRIPTED_CONVERSATION(FALSE) bMikeToFrank_StopDialogue = TRUE ENDIF ENDIF // PRINTLN("TIMERB() = ", TIMERB()) // PRINTLN("GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) = ", GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline)) IF NOT HAS_LABEL_BEEN_TRIGGERED("MichaelToFranklinCarSwitchCut") IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= 0.506712 //0.479589 //0.517945 ANIMPOSTFX_PLAY("SwitchShortFranklinMid", 0, FALSE) PRINTLN("SwitchShortFranklinMid . . .") SET_LABEL_AS_TRIGGERED("MichaelToFranklinCarSwitchCut", TRUE) ENDIF ENDIF //IF iCurrentSwitchNode >= (thisSwitchCam.iCamSwitchFocusNode -1) // fSRLTime += GET_FRAME_TIME() // IF fSRLTime < 0.0 // fSRLTime = 0.0 // ENDIF // SET_SRL_TIME(fSRLTime) //ENDIF IF GET_CAM_VIEW_MODE_FOR_CONTEXT(GET_CAM_ACTIVE_VIEW_MODE_CONTEXT()) = CAM_VIEW_MODE_FIRST_PERSON IF NOT HAS_LABEL_BEEN_TRIGGERED("SwitchFlashIntoFranklinDriving") IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= 0.75 //1.0 AND bMikeToFrank_SwitchedToFrank ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE) PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET") SET_LABEL_AS_TRIGGERED("SwitchFlashIntoFranklinDriving", TRUE) ENDIF ENDIF ENDIF //[MF] Once cam is at the end, reset the gameplay cam positon and advance to next state. IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= 0.8 //1.0 AND bMikeToFrank_SwitchedToFrank CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_RETURN_TO_GAMEPLAY") eSwitchCamState = SWITCH_CAM_RETURN_TO_GAMEPLAY ELSE RETURN FALSE ENDIF ENDIF FALLTHRU CASE SWITCH_CAM_RETURN_TO_GAMEPLAY REPLAY_RECORD_BACK_FOR_TIME(4.0, 6.0) SET_TIME_SCALE(1.0) RENDER_SCRIPT_CAMS(FALSE, FALSE) IF DOES_SWITCH_CAM_EXIST(thisSwitchCam) SET_CAM_ACTIVE(thisSwitchCam.ciSpline, FALSE) DESTROY_SWITCH_CAM(thisSwitchCam) ENDIF IF NOT bPlayerControlGiven SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) bPlayerControlGiven = TRUE ENDIF eSwitchCamState = SWITCH_CAM_IDLE thisSwitchCam.bIsSplineCamFinishedPlaying = TRUE bOkToSwitch = TRUE sCamDetails.bRun = FALSE SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SET_GAME_PAUSES_FOR_STREAMING(TRUE) IF IS_NEW_LOAD_SCENE_ACTIVE() NEW_LOAD_SCENE_STOP() ENDIF // END_SRL() RETURN TRUE BREAK ENDSWITCH IF bReturnTrueOnce RETURN FALSE ELSE RETURN thisSwitchCam.bIsSplineCamFinishedPlaying ENDIF ENDFUNC PROC SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_GRAPPLE_TO_MICHAEL(SWITCH_CAM_STRUCT &thisSwitchCam, PED_INDEX &piMichael, PED_INDEX &piFranklin) CDEBUG3LN(DEBUG_MISSION, "SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_TO_MICHAEL") IF NOT thisSwitchCam.bInitialized //--- Start of Cam Data --- thisSwitchCam.nodes[0].SwitchCamType = SWITCH_CAM_WORLD_POS thisSwitchCam.nodes[0].vNodePos = <<998.4370, -2109.4990, 30.0180>> thisSwitchCam.nodes[0].vNodeDir = <<-1.8130, 2.1560, -4.1430>> thisSwitchCam.nodes[0].fNodeFOV = 25.0000 thisSwitchCam.nodes[1].SwitchCamType = SWITCH_CAM_WORLD_POS thisSwitchCam.nodes[1].iNodeTime = 2000 thisSwitchCam.nodes[1].vNodePos = <<998.4368, -2109.4993, 30.0184>> thisSwitchCam.nodes[1].vNodeDir = <<-1.8126, 2.1560, -4.1427>> thisSwitchCam.nodes[1].fNodeFOV = 25.0000 thisSwitchCam.nodes[1].iCamEaseType = 2 thisSwitchCam.nodes[1].fCamEaseScaler = 0.6000 thisSwitchCam.nodes[1].bFlashEnabled = TRUE thisSwitchCam.nodes[1].SCFE_FlashEffectUsed = SCFE_SwitchShortFranklinIn thisSwitchCam.nodes[1].fFlashNodePhaseOffset = 0.9000 thisSwitchCam.nodes[2].iNodeTime = 600 thisSwitchCam.nodes[2].vNodePos = <<-4.3700, -43.7979, 0.0358>> thisSwitchCam.nodes[2].vNodeDir = <<-0.9587, 0.0000, -2.0252>> thisSwitchCam.nodes[2].fNodeFOV = 45.0000 thisSwitchCam.nodes[2].fNodeMotionBlur = 0.0700 thisSwitchCam.nodes[3].bIsGameplayCamCopy = TRUE thisSwitchCam.nodes[3].iNodeTime = 1500 thisSwitchCam.nodes[3].vNodePos = <<-0.2142, -0.7233, -0.9051>> thisSwitchCam.nodes[3].vNodeDir = <<0.5315, 0.0000, -7.4585>> thisSwitchCam.nodes[3].bAttachOffsetIsRelative = TRUE thisSwitchCam.nodes[3].fNodeFOV = 45.0000 thisSwitchCam.nodes[3].fNodeCamShake = 1.0000 thisSwitchCam.nodes[3].bFlashEnabled = TRUE thisSwitchCam.nodes[3].SCFE_FlashEffectUsed = SCFE_SwitchShortMichaelMid thisSwitchCam.iNumNodes = 4 thisSwitchCam.iCamSwitchFocusNode = 3 thisSwitchCam.fSwitchSoundAudioStartPhase = 0.4300 thisSwitchCam.fSwitchSoundAudioEndPhase = 0.5800 thisSwitchCam.bSwitchSoundPlayOpeningPulse = TRUE thisSwitchCam.bSwitchSoundPlayMoveLoop = TRUE thisSwitchCam.bSwitchSoundPlayExitPulse = TRUE thisSwitchCam.bSplineNoSmoothing = FALSE thisSwitchCam.bAddGameplayCamAsLastNode = TRUE thisSwitchCam.iGameplayNodeBlendDuration = 500 //--- End of Cam Data --- thisSwitchCam.strOutputStructName = "thisSwitchCam" thisSwitchCam.strOutputFileName = "CameraInfo_Michael2_FrankGrappleToMike.txt" thisSwitchCam.strXMLFileName = "CameraInfo_Michael2_FrankGrappleToMike.xml" thisSwitchCam.bInitialized = TRUE ENDIF thisSwitchCam.piPeds[0] = piMichael thisSwitchCam.piPeds[1] = piFranklin ENDPROC /// PURPOSE: /// Handle the playback of the switch cam. The will setup, play, shut down and cleanup the switch cam spline /// PARAMS: /// thisSwitchCam - Switch camera to playback /// bReturnTrueOnce - If you only want this function to return TRUE once upon completion. Set to FALSE to have this function to return true every time this is called once the camera is finished playback. /// RETURNS: /// TRUE when camera is complete, FALSE if playback is still active, or if the camera has completed playback and bReturnTrueOnce is set to TRUE. FUNC BOOL HANDLE_SWITCH_CAM_FRANKLIN_GRAPPLE_TO_MICHAEL(SWITCH_CAM_STRUCT &thisSwitchCam, BOOL bReturnTrueOnce = TRUE) SWITCH eSwitchCamState CASE SWITCH_CAM_IDLE CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_IDLE") BREAK CASE SWITCH_CAM_REQUEST_ASSETS CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_REQUEST_ASSETS") piMichaelSwitch = PLAYER_PED(CHAR_MICHAEL) piFranklinSwitch = PLAYER_PED(CHAR_FRANKLIN) SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_GRAPPLE_TO_MICHAEL(thisSwitchCam, piFranklinSwitch, piMichaelSwitch) LOAD_CAM_SHAKE_LIBRARIES(thisSwitchCam) BREAK CASE SWITCH_CAM_SETUP_SPLINE CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_SETUP_SPLINE") piMichaelSwitch = PLAYER_PED(CHAR_MICHAEL) piFranklinSwitch = PLAYER_PED(CHAR_FRANKLIN) SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_GRAPPLE_TO_MICHAEL(thisSwitchCam, piFranklinSwitch, piMichaelSwitch) //[MF] Required to make space for our switch cams. //DESTROY_ALL_CAMS() IF DOES_SWITCH_CAM_EXIST(thisSwitchCam) DESTROY_SWITCH_CAM(thisSwitchCam) ENDIF CREATE_SPLINE_CAM(thisSwitchCam) SET_CAM_ACTIVE(thisSwitchCam.ciSpline, TRUE) RENDER_SCRIPT_CAMS(TRUE, FALSE) DISPLAY_RADAR(FALSE) DISPLAY_HUD(FALSE) SETTIMERB(0) SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) bPlayerControlGiven = FALSE sCamDetails.bPedSwitched = FALSE sCamDetails.bOKToSwitchPed = FALSE // bMikeToFrank_DestGeoRequested = FALSE bMikeToFrank_SwitchToFrank = FALSE bMikeToFrank_SwitchedToFrank = FALSE bFrankGrappleToMike_GameplayCamShakeActivated = FALSE eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE BREAK CASE SWITCH_CAM_PLAYING_SPLINE CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE", " ", GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline)) UPDATE_SPLINE_CAM(thisSwitchCam) IF IS_CAM_ACTIVE(thisSwitchCam.ciSpline) SET_GAMEPLAY_CAM_RELATIVE_HEADING(FrankGrappleToMikeGameplayCamHeading) SET_GAMEPLAY_CAM_RELATIVE_PITCH(FrankGrappleToMikeGameplayCamPitch) IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= thisSwitchCam.iCamSwitchFocusNode sCamDetails.bOKToSwitchPed = TRUE ENDIF IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= fFrankGrappleToMike_ReturnPlayerControlPhase IF NOT bPlayerControlGiven SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) DISPLAY_RADAR(TRUE) DISPLAY_HUD(TRUE) bPlayerControlGiven = TRUE ENDIF SHOW_HUD_COMPONENT_THIS_FRAME(NEW_HUD_RETICLE) //[MF] Force the reticle to draw on screen ELSE HIDE_HUD_AND_RADAR_THIS_FRAME() //[MF] This is temp until we can figure out what else in the script is turning these elements back on. ENDIF //[MF] Once cam is at the end, reset the gameplay cam positon and advance to next state. IF GET_CAM_SPLINE_PHASE(thisSwitchCam.ciSpline) >= 1.00 CDEBUG3LN(DEBUG_MISSION, "eSwitchCamState = SWITCH_CAM_RETURN_TO_GAMEPLAY") eSwitchCamState = SWITCH_CAM_RETURN_TO_GAMEPLAY ELSE RETURN FALSE ENDIF ENDIF FALLTHRU CASE SWITCH_CAM_RETURN_TO_GAMEPLAY SET_TIME_SCALE(1.0) RENDER_SCRIPT_CAMS(FALSE, FALSE) IF DOES_SWITCH_CAM_EXIST(thisSwitchCam) SET_CAM_ACTIVE(thisSwitchCam.ciSpline, FALSE) DESTROY_SWITCH_CAM(thisSwitchCam) ENDIF IF NOT bPlayerControlGiven SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) DISPLAY_RADAR(TRUE) DISPLAY_HUD(TRUE) bPlayerControlGiven = TRUE ENDIF bRadar = TRUE // SETTIMERA(0) SETTIMERB(0) eSwitchCamState = SWITCH_CAM_IDLE thisSwitchCam.bIsSplineCamFinishedPlaying = TRUE sCamDetails.bRun = FALSE SHAKE_GAMEPLAY_CAM("DRUNK_SHAKE", fFrankGrappleToMike_GameplayCamShakeAmplitude) bFrankGrappleToMike_GameplayCamShakeActivated = TRUE RETURN TRUE BREAK ENDSWITCH IF bReturnTrueOnce RETURN FALSE ELSE RETURN thisSwitchCam.bIsSplineCamFinishedPlaying ENDIF ENDFUNC #IF IS_DEBUG_BUILD /// PURPOSE: /// Create the debug widgets for working with the scripted character switch cam. PROC CREATE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS() CDEBUG3LN(DEBUG_MISSION, "CREATE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS") START_WIDGET_GROUP("Custom Switch Cameras - Extra Tunables") START_WIDGET_GROUP("Franklin To Michael") ADD_WIDGET_BOOL("Skip To: Frank to Mike Switch", bSkipToFrankToMikeSwitch) ADD_WIDGET_VECTOR_SLIDER("Phone Display Offset", v_FrankPhoneDisplayOffset, 0.0, 1.0, 0.01) ADD_WIDGET_VECTOR_SLIDER("Phone Display Rotation", v_FrankPhoneDisplayRotation, -360.0, 360.0, 10.0) START_WIDGET_GROUP("Michael Tuner") START_NEW_WIDGET_COMBO() ADD_TO_WIDGET_COMBO("Anim A") ADD_TO_WIDGET_COMBO("Anim B") ADD_TO_WIDGET_COMBO("Anim C") ADD_TO_WIDGET_COMBO("Anim D") STOP_WIDGET_COMBO("Michael Hanging Anim", iFrankToMike_MikeHangingAnimNum) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() START_WIDGET_GROUP("Michael to Franklin") // ADD_WIDGET_FLOAT_SLIDER("Request Geo Cam Phase", fMikeToFrank_PreloadDestGeo, 0.0, 1.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Switch To Franklin Cam Phase", fMikeToFrank_SwitchToFrankPhase, 0.0, 1.0, 0.1) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Frank Grapple to Mike") ADD_WIDGET_BOOL("Skip Combat", bSkipCombatFrankGrappleToMikeSwitch) ADD_WIDGET_FLOAT_SLIDER("Return Player Control Phase", fFrankGrappleToMike_ReturnPlayerControlPhase, 0.0, 1.0, 0.1) START_WIDGET_GROUP("Gameplay Cam Angle Tuner") ADD_WIDGET_FLOAT_SLIDER("Gameplay Cam Heading", FrankGrappleToMikeGameplayCamHeading, -180.0, 180.0, 1.0) ADD_WIDGET_FLOAT_SLIDER("Gameplay Cam Pitch", FrankGrappleToMikeGameplayCamPitch, -180.0, 180.0, 1.0) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Gameplay Cam Shake Tuner") ADD_WIDGET_FLOAT_SLIDER("Gameplay Cam Shake Amplitude", fFrankGrappleToMike_GameplayCamShakeAmplitude, 0.0, 2.0, 0.1) ADD_WIDGET_INT_SLIDER("Gameplay Cam Shake Duration", iFrankGrappleToMike_GameplayCamShakeDuration, 0, 20000, 500) STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() ENDPROC PROC HANDLE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS() IF bSkipCombatFrankGrappleToMikeSwitch = TRUE INT index REPEAT COUNT_OF(sEnemyBackup) index IF NOT IS_ENTITY_DEAD(sEnemyBackup[index].pedIndex) PRINTLN("Killing sEnemyBackup: ", index) SET_ENTITY_HEALTH(sEnemyBackup[index].pedIndex, 0) ENDIF ENDREPEAT ENDIF ENDPROC #ENDIF #IF IS_DEBUG_BUILD PROC ASSIGN_DEBUG_NAMES(PED_INDEX pedIndex, STRING sName, INT iIndex) TEXT_LABEL tDebugName = sName IF iIndex <> -1 tDebugName += iIndex ENDIF SET_PED_NAME_DEBUG(pedIndex, tDebugName) ENDPROC #ENDIF PROC ADVANCE_COMBAT_UPDATE(ACTOR &sEnemy) IF DOES_ENTITY_EXIST(sEnemy.pedIndex) IF NOT IS_PED_INJURED(sEnemy.pedIndex) IF sEnemy.iStage < 3 BOOL bProceed = FALSE //Timer IF sEnemy.iTime[sEnemy.iStage] <> -1 IF IS_PED_IN_COMBAT(sEnemy.pedIndex) IF sEnemy.iTimer = -1 sEnemy.iTimer = GET_GAME_TIMER() + sEnemy.iTime[sEnemy.iStage] PRINTLN("Timer Started: ", sEnemy.iTimer) ELIF GET_GAME_TIMER() > sEnemy.iTimer bProceed = TRUE #IF IS_DEBUG_BUILD PRINTLN(sEnemy.sDebugName, " Timer Ended: bProceed = TRUE") #ENDIF ENDIF ENDIF ENDIF //Ped IF sEnemy.pedCheck[sEnemy.iStage] != NULL IF DOES_ENTITY_EXIST(sEnemy.pedCheck[sEnemy.iStage]) IF IS_PED_INJURED(GET_PED_INDEX_FROM_ENTITY_INDEX(sEnemy.pedCheck[sEnemy.iStage])) bProceed = TRUE #IF IS_DEBUG_BUILD PRINTLN(sEnemy.sDebugName, " PedCheck Died: bProceed = TRUE") #ENDIF ENDIF ENDIF ENDIF //Locate IF NOT ARE_VECTORS_EQUAL(sEnemy.vLocate[sEnemy.iStage], VECTOR_ZERO) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), sEnemy.vLocate[sEnemy.iStage], sEnemy.vLocSize[sEnemy.iStage]) bProceed = TRUE #IF IS_DEBUG_BUILD PRINTLN(sEnemy.sDebugName, " PedCheck Died: bProceed = TRUE") #ENDIF ENDIF ENDIF //Distance IF sEnemy.fDist[sEnemy.iStage] <> -1.0 IF IS_ENTITY_ON_SCREEN(sEnemy.pedIndex) AND NOT IS_ENTITY_OCCLUDED(sEnemy.pedIndex) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemy.pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) < sEnemy.fDist[sEnemy.iStage] bProceed = TRUE #IF IS_DEBUG_BUILD PRINTLN(sEnemy.sDebugName, " Distance Under: bProceed = TRUE") #ENDIF ENDIF ENDIF ENDIF //Advance Combat Stage IF bProceed = TRUE //Reset Combat Float SET_COMBAT_FLOAT(sEnemy.pedIndex, CCF_TIME_BETWEEN_BURSTS_IN_COVER, 0.5) SWITCH sEnemy.eAdvanceStyle[sEnemy.iStage] CASE GO_TO_COMBAT REMOVE_PED_DEFENSIVE_AREA(sEnemy.pedIndex) CLEAR_PED_TASKS(sEnemy.pedIndex) TASK_COMBAT_PED(sEnemy.pedIndex, PLAYER_PED_ID()) #IF IS_DEBUG_BUILD PRINTLN(sEnemy.sDebugName, " GO_TO_COMBAT...") #ENDIF BREAK CASE GO_TO_POINT REMOVE_PED_DEFENSIVE_AREA(sEnemy.pedIndex) CLEAR_PED_TASKS(sEnemy.pedIndex) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF IS_BIT_SET(sEnemy.iBitsetStrict, sEnemy.iStage) //sEnemy.bStrict[sEnemy.iStage] = TRUE IF IS_BIT_SET(sEnemy.iBitsetNavMesh, sEnemy.iStage) //sEnemy.bNavMesh[sEnemy.iStage] = TRUE TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, sEnemy.vPoint[sEnemy.iStage], sEnemy.fSpeed[sEnemy.iStage]) ELSE TASK_GO_STRAIGHT_TO_COORD(NULL, sEnemy.vPoint[sEnemy.iStage], sEnemy.fSpeed[sEnemy.iStage]) ENDIF ENDIF TASK_SET_SPHERE_DEFENSIVE_AREA(NULL, sEnemy.vPoint[sEnemy.iStage], 2.0) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_PED(NULL, PLAYER_PED_ID()) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemy.pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) #IF IS_DEBUG_BUILD PRINTLN(sEnemy.sDebugName, " GO_TO_POINT...") #ENDIF BREAK CASE AIM_TO_POINT REMOVE_PED_DEFENSIVE_AREA(sEnemy.pedIndex) CLEAR_PED_TASKS(sEnemy.pedIndex) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF IS_BIT_SET(sEnemy.iBitsetStrict, sEnemy.iStage) //IF sEnemy.bStrict[sEnemy.iStage] = TRUE TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, sEnemy.vPoint[sEnemy.iStage], PLAYER_PED_ID(), sEnemy.fSpeed[sEnemy.iStage], FALSE, 0.5, 4, IS_BIT_SET(sEnemy.iBitsetNavMesh, sEnemy.iStage)) //sEnemy.bNavMesh[sEnemy.iStage]) ENDIF TASK_SET_SPHERE_DEFENSIVE_AREA(NULL, sEnemy.vPoint[sEnemy.iStage], 2.0) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_PED(NULL, PLAYER_PED_ID()) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemy.pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) #IF IS_DEBUG_BUILD PRINTLN(sEnemy.sDebugName, " AIM_TO_POINT...") #ENDIF BREAK CASE GUN_TO_POINT REMOVE_PED_DEFENSIVE_AREA(sEnemy.pedIndex) CLEAR_PED_TASKS(sEnemy.pedIndex) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF IS_BIT_SET(sEnemy.iBitsetStrict, sEnemy.iStage) //IF sEnemy.bStrict[sEnemy.iStage] = TRUE TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, sEnemy.vPoint[sEnemy.iStage], PLAYER_PED_ID(), sEnemy.fSpeed[sEnemy.iStage], TRUE, 0.5, 4, IS_BIT_SET(sEnemy.iBitsetNavMesh, sEnemy.iStage)) //sEnemy.bNavMesh[sEnemy.iStage]) ENDIF TASK_SET_SPHERE_DEFENSIVE_AREA(NULL, sEnemy.vPoint[sEnemy.iStage], 2.0) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_PED(NULL, PLAYER_PED_ID()) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemy.pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) #IF IS_DEBUG_BUILD PRINTLN(sEnemy.sDebugName, " GUN_TO_POINT...") #ENDIF BREAK CASE PEEK_FROM_POINT SET_PED_CAN_PEEK_IN_COVER(sEnemy.pedIndex, TRUE) SET_COMBAT_FLOAT(sEnemy.pedIndex, CCF_TIME_BETWEEN_BURSTS_IN_COVER, -1) //Set Combat Float REMOVE_PED_DEFENSIVE_AREA(sEnemy.pedIndex) CLEAR_PED_TASKS_IMMEDIATELY(sEnemy.pedIndex) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF IS_BIT_SET(sEnemy.iBitsetStrict, sEnemy.iStage) //IF sEnemy.bStrict[sEnemy.iStage] = TRUE TASK_PUT_PED_DIRECTLY_INTO_COVER(NULL, sEnemy.vPoint[sEnemy.iStage], -1, TRUE) ENDIF TASK_SET_SPHERE_DEFENSIVE_AREA(NULL, sEnemy.vPoint[sEnemy.iStage], 2.0) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemy.pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) #IF IS_DEBUG_BUILD PRINTLN(sEnemy.sDebugName, " PEEK_FROM_POINT...") #ENDIF BREAK ENDSWITCH sEnemy.iTimer = -1 sEnemy.iStage++ #IF IS_DEBUG_BUILD PRINTLN(sEnemy.sDebugName, " iStage = ", sEnemy.iStage) #ENDIF ENDIF ENDIF IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_ENTITY_COORDS(sEnemy.pedIndex) - <<0.0, 0.0, 1.0>>, <<5.0, 5.0, 5.0>>) // SET_PED_COMBAT_MOVEMENT(sEnemy.pedIndex, CM_WILLADVANCE) // SET_PED_COMBAT_ATTRIBUTES(sEnemy.pedIndex, CA_AGGRESSIVE, TRUE) // SET_PED_COMBAT_ATTRIBUTES(sEnemy.pedIndex, CA_USE_COVER, FALSE) SET_PED_COMBAT_ATTRIBUTES(sEnemy.pedIndex, CA_CAN_USE_FRUSTRATED_ADVANCE, TRUE) REMOVE_PED_DEFENSIVE_AREA(sEnemy.pedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemy.pedIndex, FALSE) sEnemy.iStage = 3 ENDIF ENDIF ENDIF ENDPROC //Mid Mission Replay ENUM MissionReplay replayStart, replayAbattoirShootout, replayMichaelEscape, replayMichaelFree, replayTriadsChase, replayCutEnd ENDENUM PROC MISSION_REPLAY(MissionReplay eMissionReplay = replayStart) //- Replay Specific Position VECTOR vStartReplay FLOAT fStartReplay SWITCH eMissionReplay CASE replayStart vStartReplay = vPlayerStart fStartReplay = fPlayerStart BREAK CASE replayAbattoirShootout vStartReplay = <<934.6419, -2183.5613, 29.4654>> fStartReplay = 355.3260 BREAK CASE replayMichaelEscape vStartReplay = <<996.5976, -2148.9912, 29.0>> fStartReplay = 143.7361 BREAK CASE replayMichaelFree vStartReplay = <<993.9323, -2150.0239, 28.4763>> fStartReplay = 354.8923 BREAK CASE replayTriadsChase vStartReplay = <<961.2763, -2106.1240, 30.5098>> fStartReplay = 89.0595 BREAK CASE replayCutEnd vStartReplay = <<-860.1198, 157.7610, 63.9212>> fStartReplay = 339.3617 BREAK ENDSWITCH START_REPLAY_SETUP(vStartReplay, fStartReplay, FALSE) //Set Player IF eMissionReplay <> replayTriadsChase WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_FRANKLIN) WAIT(0) ENDWHILE ENDIF CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) SWITCH eMissionReplay CASE replayStart //Michael // REQUEST_MODEL(GET_PLAYER_VEH_MODEL(CHAR_FRANKLIN)) // // WHILE NOT HAS_MODEL_LOADED(GET_PLAYER_VEH_MODEL(CHAR_FRANKLIN)) // WAIT(0) // ENDWHILE // // WHILE NOT CREATE_PLAYER_VEHICLE(vehCar, CHAR_FRANKLIN, <<-25.2062, -1445.3279, 29.6541>>, 180.2567, TRUE, VEHICLE_TYPE_CAR) // WAIT(0) // ENDWHILE // SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehCar, TRUE) // // SET_VEHICLE_ON_GROUND_PROPERLY(vehCar) // ACTIVATE_PHYSICS(vehCar) eMissionObjective = stageFindMichael BREAK CASE replayAbattoirShootout //Michael REQUEST_MODEL(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) WHILE NOT HAS_MODEL_LOADED(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) WAIT(0) ENDWHILE WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, vPlayerStart, fPlayerStart) WAIT(0) ENDWHILE SET_PED_COMP_ITEM_CURRENT_SP(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], COMP_TYPE_OUTFIT, OUTFIT_P0_DEFAULT, FALSE) SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], PED_COMP_TORSO, 19, 0) SET_PED_POSITION(PLAYER_PED_ID(), vPlayerStart, fPlayerStart) SET_PED_TARGET_LOSS_RESPONSE(PLAYER_PED_ID(), TLR_NEVER_LOSE_TARGET) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED_ID(), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_RunFromFiresAndExplosions, FALSE) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) CLEAR_AREA(vPlayerStart, 500.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<-26.816481, -1446.621826, 44.654160>> - <<30.0, 30.0, 30.0>>, <<-26.816481, -1446.621826, 44.654160>> + <<30.0, 30.0, 30.0>>) CLEAR_AREA(<<941.6578, -2181.0586, 29.5517>>, 1000.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<966.108276, -2149.353271, 55.977444>> - <<60.0, 70.0, 30.0>>, <<966.108276, -2149.353271, 55.977444>> + <<60.0, 70.0, 30.0>>) //Franklin // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PUMPSHOTGUN, 50) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE , 200, TRUE) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_UNARMED, TRUE) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], relGroupBuddy) ENDIF //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Enemy (Outside) REQUEST_MODEL(G_M_M_CHIGOON_01) REQUEST_MODEL(G_M_M_CHIGOON_02) WHILE NOT HAS_MODEL_LOADED(G_M_M_CHIGOON_01) OR NOT HAS_MODEL_LOADED(G_M_M_CHIGOON_02) WAIT(0) ENDWHILE createEnemy(sEnemyOutside[0], <<951.0605, -2184.5310, 29.5517>>, 24.5982, WEAPONTYPE_PISTOL) SET_PED_COMPONENT_VARIATION(sEnemyOutside[0].pedIndex, PED_COMP_HAIR, 2, 0) SET_PED_COMBAT_ATTRIBUTES(sEnemyOutside[0].pedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemyOutside[0].pedIndex, CA_OPEN_COMBAT_WHEN_DEFENSIVE_AREA_IS_REACHED, TRUE) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyOutside[0].pedIndex, <<953.1196, -2190.9177, 29.5518>>, 2.0) //SET_PED_RELATIONSHIP_GROUP_HASH(sEnemyOutside[0].pedIndex, relGroupPassive) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyOutside[0].pedIndex, TRUE) SET_LABEL_AS_TRIGGERED("sEnemyOutside[0]Blocking", TRUE) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 3, sEnemyOutside[0].pedIndex, "MCH2CHIN1") // createEnemy(sEnemyOutside[1], <<962.5493, -2166.0269, 36.0140>>, 179.9051, WEAPONTYPE_PISTOL) // sEnemyOutside[1].vLocate[0] = <<948.549438,-2178.816895,32.051651>> sEnemyOutside[1].vLocSize[0] = <<12.0, 10.0 ,2.5>> sEnemyOutside[1].eAdvanceStyle[0] = GUN_TO_POINT sEnemyOutside[1].vPoint[0] = <<955.2181, -2169.3628, 35.9913>> createEnemy(sEnemyOutside[2], <<951.1171, -2183.3445, 29.5517>>, 186.0809, WEAPONTYPE_PISTOL) SET_PED_COMBAT_ATTRIBUTES(sEnemyOutside[2].pedIndex, CA_OPEN_COMBAT_WHEN_DEFENSIVE_AREA_IS_REACHED, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemyOutside[2].pedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyOutside[2].pedIndex, <<954.4744, -2186.4724, 29.5518>>, 2.0) //SET_PED_RELATIONSHIP_GROUP_HASH(sEnemyOutside[2].pedIndex, relGroupPassive) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyOutside[2].pedIndex, TRUE) SET_LABEL_AS_TRIGGERED("sEnemyOutside[2]Blocking", TRUE) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 7, sEnemyOutside[2].pedIndex, "MCH2CHIN5") #IF IS_DEBUG_BUILD INT i REPEAT COUNT_OF(sEnemyOutside) i IF NOT IS_PED_INJURED(sEnemyOutside[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemyOutside[i].pedIndex, "Outside ", i) sEnemyOutside[i].sDebugName = CONCATENATE_STRINGS("Outside ", GET_STRING_FROM_INT(i)) ENDIF ENDREPEAT #ENDIF //Rail SET_RAIL_FINAL_NODE(31) //Hook objHook = CREATE_OBJECT_NO_OFFSET(PROP_LD_HOOK, sRailNodes[31].vPos) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(objHook, FALSE) FREEZE_ENTITY_POSITION(objHook, TRUE) RETAIN_ENTITY_IN_INTERIOR(objHook, intAbattoir) objChain = CREATE_OBJECT_NO_OFFSET(PROP_CS_LEG_CHAIN_01, GET_ENTITY_COORDS(objHook) + <<0.0, 0.0, 0.01>>) ATTACH_ENTITY_TO_ENTITY(objChain, objHook, -1, vChainOffset, vChainRotation) objPadlock = CREATE_OBJECT_NO_OFFSET(PROP_CS_PADLOCK, GET_ENTITY_COORDS(objHook) + <<0.0, 0.0, -0.01>>) ATTACH_ENTITY_TO_ENTITY(objPadlock, objHook, -1, vPadlockOffset, vPadlockRotation) //Particles //Cam IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) ENDIF eMissionObjective = stageAbattoirShootout BREAK CASE replayMichaelEscape //Michael REQUEST_MODEL(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) WHILE NOT HAS_MODEL_LOADED(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) WAIT(0) ENDWHILE WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, vPlayerStart, fPlayerStart) WAIT(0) ENDWHILE SET_PED_COMP_ITEM_CURRENT_SP(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], COMP_TYPE_OUTFIT, OUTFIT_P0_DEFAULT, FALSE) SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], PED_COMP_TORSO, 19, 0) SET_PED_POSITION(PLAYER_PED_ID(), vPlayerStart, fPlayerStart) SET_PED_TARGET_LOSS_RESPONSE(PLAYER_PED_ID(), TLR_NEVER_LOSE_TARGET) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED_ID(), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_RunFromFiresAndExplosions, FALSE) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) CLEAR_AREA(vPlayerStart, 500.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<-26.816481, -1446.621826, 44.654160>> - <<30.0, 30.0, 30.0>>, <<-26.816481, -1446.621826, 44.654160>> + <<30.0, 30.0, 30.0>>) CLEAR_AREA(<<941.6578, -2181.0586, 29.5517>>, 1000.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<966.108276, -2149.353271, 55.977444>> - <<60.0, 70.0, 30.0>>, <<966.108276, -2149.353271, 55.977444>> + <<60.0, 70.0, 30.0>>) IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) ENDIF //ADD_ARMOUR_TO_PED(PLAYER_PED(CHAR_MICHAEL), 200) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupBuddy) ENDIF //Franklin SET_PED_CAN_BE_TARGETTED(PLAYER_PED(CHAR_FRANKLIN), FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_FRANKLIN), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_RunFromFiresAndExplosions, FALSE) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PUMPSHOTGUN, 50) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE , 200, TRUE) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_UNARMED, TRUE) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Rail SET_RAIL_FINAL_NODE(31) //Hook objHook = CREATE_OBJECT_NO_OFFSET(PROP_LD_HOOK, sRailNodes[31].vPos) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(objHook, FALSE) FREEZE_ENTITY_POSITION(objHook, TRUE) RETAIN_ENTITY_IN_INTERIOR(objHook, intAbattoir) objChain = CREATE_OBJECT_NO_OFFSET(PROP_CS_LEG_CHAIN_01, GET_ENTITY_COORDS(objHook) + <<0.0, 0.0, 0.01>>) ATTACH_ENTITY_TO_ENTITY(objChain, objHook, -1, vChainOffset, vChainRotation) objPadlock = CREATE_OBJECT_NO_OFFSET(PROP_CS_PADLOCK, GET_ENTITY_COORDS(objHook) + <<0.0, 0.0, -0.01>>) ATTACH_ENTITY_TO_ENTITY(objPadlock, objHook, -1, vPadlockOffset, vPadlockRotation) //Particles //Cam IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) ENDIF //Reset gameplay camera to third person, see B*1993022 IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON SET_FOLLOW_PED_CAM_VIEW_MODE(CAM_VIEW_MODE_THIRD_PERSON_NEAR) PRINTLN("RESETTING GAMEPLAY CAM VIEW MODE TO CAM_VIEW_MODE_THIRD_PERSON_NEAR 1") ENDIF eMissionObjective = stageMichaelEscape BREAK CASE replayMichaelFree //Michael REQUEST_MODEL(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) WHILE NOT HAS_MODEL_LOADED(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) WAIT(0) ENDWHILE WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, vPlayerStart, fPlayerStart) WAIT(0) ENDWHILE SET_PED_COMP_ITEM_CURRENT_SP(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], COMP_TYPE_OUTFIT, OUTFIT_P0_DEFAULT, FALSE) SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], PED_COMP_TORSO, 19, 0) SET_PED_POSITION(PLAYER_PED_ID(), vPlayerStart, fPlayerStart) SET_PED_TARGET_LOSS_RESPONSE(PLAYER_PED_ID(), TLR_NEVER_LOSE_TARGET) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED_ID(), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_RunFromFiresAndExplosions, FALSE) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) CLEAR_AREA(vPlayerStart, 500.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<-26.816481, -1446.621826, 44.654160>> - <<30.0, 30.0, 30.0>>, <<-26.816481, -1446.621826, 44.654160>> + <<30.0, 30.0, 30.0>>) CLEAR_AREA(<<941.6578, -2181.0586, 29.5517>>, 1000.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<966.108276, -2149.353271, 55.977444>> - <<60.0, 70.0, 30.0>>, <<966.108276, -2149.353271, 55.977444>> + <<60.0, 70.0, 30.0>>) IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupBuddy) ENDIF //Franklin SET_PED_CAN_BE_TARGETTED(PLAYER_PED(CHAR_FRANKLIN), FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_FRANKLIN), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_RunFromFiresAndExplosions, FALSE) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PUMPSHOTGUN, 50) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE , 200, TRUE) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_UNARMED, TRUE) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Rail SET_RAIL_FINAL_NODE(31) //Hook objHook = CREATE_OBJECT_NO_OFFSET(PROP_LD_HOOK, sRailNodes[31].vPos) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(objHook, FALSE) FREEZE_ENTITY_POSITION(objHook, TRUE) RETAIN_ENTITY_IN_INTERIOR(objHook, intAbattoir) objChain = CREATE_OBJECT_NO_OFFSET(PROP_CS_LEG_CHAIN_01, GET_ENTITY_COORDS(objHook) + <<0.0, 0.0, 0.01>>) ATTACH_ENTITY_TO_ENTITY(objChain, objHook, -1, vChainOffset, vChainRotation) objPadlock = CREATE_OBJECT_NO_OFFSET(PROP_CS_PADLOCK, GET_ENTITY_COORDS(objHook) + <<0.0, 0.0, -0.01>>) ATTACH_ENTITY_TO_ENTITY(objPadlock, objHook, -1, vPadlockOffset, vPadlockRotation) //Particles //Cam IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) ENDIF eMissionObjective = stageMichaelFree BREAK CASE replayTriadsChase IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL //Michael REQUEST_MODEL(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN)) WHILE NOT HAS_MODEL_LOADED(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN)) WAIT(0) ENDWHILE WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], CHAR_FRANKLIN, vPlayerStart, fPlayerStart) WAIT(0) ENDWHILE ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN //Michael REQUEST_MODEL(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) WHILE NOT HAS_MODEL_LOADED(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) WAIT(0) ENDWHILE WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, vPlayerStart, fPlayerStart) WAIT(0) ENDWHILE #IF IS_DEBUG_BUILD ELSE SCRIPT_ASSERT("Warning - The player is not Michael or Franklin!") #ENDIF ENDIF SET_PED_TARGET_LOSS_RESPONSE(PLAYER_PED_ID(), TLR_NEVER_LOSE_TARGET) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED_ID(), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_RunFromFiresAndExplosions, FALSE) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) CLEAR_AREA(vPlayerStart, 500.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<-26.816481, -1446.621826, 44.654160>> - <<30.0, 30.0, 30.0>>, <<-26.816481, -1446.621826, 44.654160>> + <<30.0, 30.0, 30.0>>) CLEAR_AREA(<<941.6578, -2181.0586, 29.5517>>, 1000.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<966.108276, -2149.353271, 55.977444>> - <<60.0, 70.0, 30.0>>, <<966.108276, -2149.353271, 55.977444>> + <<60.0, 70.0, 30.0>>) //ADD_ARMOUR_TO_PED(NOT_PLAYER_PED_ID(), 200) //Michael SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED(CHAR_MICHAEL), COMP_TYPE_OUTFIT, OUTFIT_P0_DEFAULT, FALSE) SET_PED_COMPONENT_VARIATION(PLAYER_PED(CHAR_MICHAEL), PED_COMP_TORSO, 19, 0) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupBuddy) ENDIF //Franklin SET_PED_CAN_BE_TARGETTED(PLAYER_PED(CHAR_FRANKLIN), FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_FRANKLIN), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_RunFromFiresAndExplosions, FALSE) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PUMPSHOTGUN, 50) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE , 200, TRUE) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_UNARMED, TRUE) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Car REQUEST_MODEL(COQUETTE) WHILE NOT HAS_MODEL_LOADED(COQUETTE) WAIT(0) ENDWHILE vehHachiRoku = CREATE_VEHICLE(COQUETTE, <<950.4739, -2104.9517, 29.6107>>, 106.1659) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehHachiRoku, TRUE) SET_VEHICLE_COLOURS(vehHachiRoku, 4, 0) SET_VEHICLE_EXTRA_COLOURS(vehHachiRoku, 0, 0) SET_VEHICLE_ON_GROUND_PROPERLY(vehHachiRoku) SET_VEHICLE_TYRES_CAN_BURST(vehHachiRoku, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(COQUETTE) //Car REQUEST_MODEL(FELTZER2) WHILE NOT HAS_MODEL_LOADED(FELTZER2) WAIT(0) ENDWHILE vehEscape = CREATE_VEHICLE(FELTZER2, <<953.9548, -2113.3518, 29.5516>>, 88.1350) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehEscape, TRUE) SET_VEHICLE_COLOURS(vehEscape, 38, 0) SET_VEHICLE_ON_GROUND_PROPERLY(vehEscape) SET_VEHICLE_TYRES_CAN_BURST(vehEscape, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(FELTZER2) //Cam IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) ENDIF eMissionObjective = stageTriadsChase BREAK CASE replayCutEnd //Michael REQUEST_MODEL(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) WHILE NOT HAS_MODEL_LOADED(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) WAIT(0) ENDWHILE WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, <<-860.1198, 157.7610, 63.9212>>, 339.3617) WAIT(0) ENDWHILE SET_PED_COMP_ITEM_CURRENT_SP(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], COMP_TYPE_OUTFIT, OUTFIT_P0_DEFAULT, FALSE) SET_PED_COMPONENT_VARIATION(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], PED_COMP_TORSO, 19, 0) SET_PED_TARGET_LOSS_RESPONSE(PLAYER_PED_ID(), TLR_NEVER_LOSE_TARGET) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED_ID(), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_RunFromFiresAndExplosions, FALSE) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) CLEAR_AREA(vPlayerStart, 500.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<-26.816481, -1446.621826, 44.654160>> - <<30.0, 30.0, 30.0>>, <<-26.816481, -1446.621826, 44.654160>> + <<30.0, 30.0, 30.0>>) CLEAR_AREA(<<941.6578, -2181.0586, 29.5517>>, 1000.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<966.108276, -2149.353271, 55.977444>> - <<60.0, 70.0, 30.0>>, <<966.108276, -2149.353271, 55.977444>> + <<60.0, 70.0, 30.0>>) IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) ENDIF //ADD_ARMOUR_TO_PED(PLAYER_PED(CHAR_MICHAEL), 200) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupBuddy) ENDIF //Franklin SET_PED_CAN_BE_TARGETTED(PLAYER_PED(CHAR_FRANKLIN), FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_FRANKLIN), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_RunFromFiresAndExplosions, FALSE) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PUMPSHOTGUN, 50) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE , 200, TRUE) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_UNARMED, TRUE) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") eMissionObjective = stageCutEnd BREAK ENDSWITCH END_REPLAY_SETUP(NULL, VS_DRIVER, FALSE) bSkipped = TRUE bReplaySkip = TRUE // IF IS_SCREEN_FADED_OUT() // DO_SCREEN_FADE_IN(1000) // ENDIF ENDPROC PROC LOAD_UNLOAD_ASSETS() //Stages Reference //stageFindMichael //passMission //failMission //Mission Peds: //GET_PLAYER_PED_MODEL(CHAR_MICHAEL) //GET_PLAYER_PED_MODEL(CHAR_FRANKLIN) //G_M_M_CHIGOON_01 //G_M_M_CHIGOON_02 //Mission Cars: //BISON //FELTZER2 //COQUETTE //BURRITO //Mission Props: //PROP_LD_HOOK //PROP_CS_PADLOCK //PROP_CS_LEG_CHAIN_01 //Mission Recordings: IF eMissionObjective >= stageCutIntro AND eMissionObjective <= stageFindMichael HAS_RECORDING_LOADED_CHECK(001, "ALrollingstart") ENDIF //Request Models //Vehicle Recordings //Waypoint Recordings //Request Model HAS_MODEL_LOADED_CHECK(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) HAS_MODEL_LOADED_CHECK(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN)) IF eMissionObjective >= stageFindMichael AND eMissionObjective <= stageTriadsChase HAS_MODEL_LOADED_CHECK(G_M_M_CHIGOON_01) HAS_MODEL_LOADED_CHECK(G_M_M_CHIGOON_02) HAS_MODEL_LOADED_CHECK(CSB_CHIN_GOON) ENDIF IF eMissionObjective >= stageFindMichael AND eMissionObjective <= stageMichaelFree HAS_MODEL_LOADED_CHECK(PROP_LD_HOOK) HAS_MODEL_LOADED_CHECK(PROP_CS_PADLOCK) HAS_MODEL_LOADED_CHECK(PROP_CS_LEG_CHAIN_01) ENDIF IF eMissionObjective >= stageFindMichael AND eMissionObjective <= stageAbattoirShootout HAS_MODEL_LOADED_CHECK(BISON) ENDIF IF eMissionObjective >= stageMichaelEscape AND eMissionObjective <= stageTriadsChase HAS_MODEL_LOADED_CHECK(FELTZER2) ENDIF IF eMissionObjective >= stageMichaelEscape AND eMissionObjective <= stageTriadsChase HAS_MODEL_LOADED_CHECK(COQUETTE) ENDIF IF eMissionObjective >= stageAbattoirShootout AND eMissionObjective <= stageMichaelFree HAS_MODEL_LOADED_CHECK(PROP_WATERCRATE_01) ENDIF // HAS_MODEL_LOADED_CHECK(BURRITO) IF eMissionObjective >= stageAbattoirShootout AND eMissionObjective <= stageMichaelFree HAS_MODEL_LOADED_CHECK(GET_WEAPONTYPE_MODEL(WEAPONTYPE_COMBATPISTOL)) REQUEST_WEAPON_ASSET(WEAPONTYPE_COMBATPISTOL) ENDIF IF eMissionObjective >= stageSwitchToMichael AND eMissionObjective <= stageMichaelFree HAS_MODEL_LOADED_CHECK(V_IND_COO_HALF) ENDIF //Animation Dictionaries IF eMissionObjective >= stageCutIntro AND eMissionObjective <= stageMichaelFree HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Hook) ELSE UNLOAD_ANIM_DICT(sAnimDictMic2Hook) ENDIF IF eMissionObjective >= stageAbattoirShootout AND eMissionObjective <= stageSwitchToMichael HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Switch) ELSE UNLOAD_ANIM_DICT(sAnimDictMic2Switch) ENDIF IF eMissionObjective >= stageFindMichael AND eMissionObjective <= stageAbattoirShootout HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2SetPiece1) ELSE UNLOAD_ANIM_DICT(sAnimDictMic2SetPiece1) ENDIF IF eMissionObjective >= stageMichaelEscape AND eMissionObjective <= stageMichaelFree HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2SetPiece2) ELSE UNLOAD_ANIM_DICT(sAnimDictMic2SetPiece2) ENDIF IF eMissionObjective >= stageCutIntro AND eMissionObjective <= stageAbattoirShootout HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Smoking) ELSE UNLOAD_ANIM_DICT(sAnimDictMic2Smoking) ENDIF IF eMissionObjective >= stageBackToMichaels AND eMissionObjective <= stageCutEnd HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2WashFace) ELSE UNLOAD_ANIM_DICT(sAnimDictMic2WashFace) ENDIF IF eMissionObjective >= stageMichaelEscape AND eMissionObjective <= stageMichaelFree HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2FranklinBeckon) ELSE UNLOAD_ANIM_DICT(sAnimDictMic2FranklinBeckon) ENDIF IF eMissionObjective >= stageCutIntro AND eMissionObjective <= stageFindMichael HAS_ANIM_DICT_LOADED_CHECK(sAnimDictIdle1) HAS_ANIM_DICT_LOADED_CHECK(sAnimDictIdle2) HAS_ANIM_DICT_LOADED_CHECK(sAnimDictIdle3) HAS_ANIM_DICT_LOADED_CHECK(sAnimDictIdle4) ELSE UNLOAD_ANIM_DICT(sAnimDictIdle1) UNLOAD_ANIM_DICT(sAnimDictIdle2) UNLOAD_ANIM_DICT(sAnimDictIdle3) UNLOAD_ANIM_DICT(sAnimDictIdle4) ENDIF IF eMissionObjective = stageMichaelEscape HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2IG11) ELSE UNLOAD_ANIM_DICT(sAnimDictMic2IG11) ENDIF IF eMissionObjective >= stageFindMichael AND eMissionObjective <= stageAbattoirShootout IF NOT HAS_CLIP_SET_LOADED("move_ped_strafing") REQUEST_CLIP_SET("move_ped_strafing") ENDIF ENDIF IF eMissionObjective >= stageCutIntro AND eMissionObjective <= stageTriadsChase IF NOT HAS_CLIP_SET_LOADED("MOVE_STRAFE@COP") REQUEST_CLIP_SET("MOVE_STRAFE@COP") ENDIF ENDIF IF eMissionObjective >= stageAbattoirShootout AND eMissionObjective <= stageMichaelFree IF NOT HAS_CLIP_SET_LOADED(GET_CLIP_SET_FOR_SCRIPTED_GUN_TASK(SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN)) REQUEST_CLIP_SET(GET_CLIP_SET_FOR_SCRIPTED_GUN_TASK(SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN)) ENDIF // ELSE // IF HAS_CLIP_SET_LOADED(GET_CLIP_SET_FOR_SCRIPTED_GUN_TASK(SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN)) // REMOVE_CLIP_SET(GET_CLIP_SET_FOR_SCRIPTED_GUN_TASK(SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN)) // ENDIF ENDIF //Audio // IF eMissionObjective >= stageFindMichael REQUEST_SCRIPT_AUDIO_BANK("Michael_2_Kidnap_Rail") // ENDIF ENDPROC PROC SET_PED_ON_GROUND_PROPERLY(PED_INDEX &pedIndex) VECTOR vGround = GET_ENTITY_COORDS(pedIndex) GET_GROUND_Z_FOR_3D_COORD(GET_ENTITY_COORDS(pedIndex), vGround.Z) SET_PED_POSITION(pedIndex, vGround, GET_ENTITY_HEADING(pedIndex)) ENDPROC //PURPOSE: Stores the details of the currently active cutscene cam while Michael is attached to the rail PROC GET_ACTIVE_MICHAEL_CAM_DETAILS(VECTOR &vPos, VECTOR &vRot, FLOAT &fFov) BOOL bGotDetails = FALSE IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF DOES_CAM_EXIST(camMain) IF IS_CAM_ACTIVE(camMain) vPos = GET_CAM_COORD(camMain) vRot = GET_CAM_ROT(camMain) fFov = GET_CAM_FOV(camMain) bGotDetails = TRUE ENDIF ENDIF ELSE bGotDetails = TRUE ENDIF IF NOT bGotDetails PRINTLN("eMichaelHostageProg: ", ENUM_TO_INT(eMissionObjective)) SCRIPT_ASSERT("GET_ACTIVE_MICHAEL_CAM_DETAILS: Didn't get cam details") ENDIF ENDPROC PROC SWITCH_CONTROL() #IF IS_DEBUG_BUILD IF DOES_CAM_EXIST(sCamDetails.camID) PRINTLN("SPLINE PHASE = ", GET_CAM_SPLINE_PHASE(sCamDetails.camID)) ENDIF #ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("DeathSwitch") IF iCurrentNode > 31 AND GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN SET_LABEL_AS_TRIGGERED("DeathSwitch", TRUE) ENDIF ENDIF IF ((bOkToSwitch AND iCurrentNode <= 31) OR HAS_LABEL_BEEN_TRIGGERED("DeathSwitch")) IF NOT sCamDetails.bRun BOOL bSwitchPedSelected IF NOT HAS_LABEL_BEEN_TRIGGERED("DeathSwitchOnce") IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL SET_SELECTOR_PED_HINT(sSelectorPeds, SELECTOR_PED_FRANKLIN, TRUE) SET_SELECTOR_PED_HINT(sSelectorPeds, SELECTOR_PED_MICHAEL, FALSE) IF UPDATE_SELECTOR_HUD(sSelectorPeds, FALSE) bSwitchPedSelected = TRUE ENDIF ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN SET_SELECTOR_PED_HINT(sSelectorPeds, SELECTOR_PED_MICHAEL, FALSE) SET_SELECTOR_PED_HINT(sSelectorPeds, SELECTOR_PED_FRANKLIN, FALSE) IF (NOT IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<974.402039, -2147.449463, 49.164970>>, <<67.25, 64.5, 20.0>>) AND UPDATE_SELECTOR_HUD(sSelectorPeds)) //Returns TRUE when the player has made a selection OR HAS_LABEL_BEEN_TRIGGERED("DeathSwitch") IF HAS_LABEL_BEEN_TRIGGERED("DeathSwitch") MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) SET_LABEL_AS_TRIGGERED("DeathSwitchOnce", TRUE) ENDIF VEHICLE_INDEX vehBringToHalt IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) vehBringToHalt = GET_VEHICLE_PED_IS_IN(PLAYER_PED(CHAR_FRANKLIN)) ENDIF IF DOES_ENTITY_EXIST(vehBringToHalt) AND NOT IS_ENTITY_DEAD(vehBringToHalt) BRING_VEHICLE_TO_HALT(vehBringToHalt, DEFAULT_VEH_STOPPING_DISTANCE, 1, TRUE) ENDIF bSwitchPedSelected = TRUE ENDIF ENDIF ENDIF IF bSwitchPedSelected = TRUE IF IS_CELLPHONE_TRACKIFY_IN_USE() bPhoneSwitch = IS_PHONE_ONSCREEN(TRUE) ENDIF //Stats INFORM_MISSION_STATS_OF_INCREMENT(MIC2_TIMES_SWITCHED) IF NOT bDoMikeToFranklinCustomSwitch CLEAR_TEXT() KILL_ANY_CONVERSATION() ELSE CLEAR_PRINTS() SAFE_CLEAR_HELP(TRUE) ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN bFranklinToMichael = TRUE ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF NOT HAS_LABEL_BEEN_TRIGGERED("RollingStartInit") IF DOES_ENTITY_EXIST(vehFranklin) AND NOT IS_ENTITY_DEAD(vehFranklin) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN)), <<-16.57771, -1445.89917, 29.64787>>) < 60.0 IF NOT IS_PED_IN_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) AND IS_VEHICLE_SEAT_FREE(vehFranklin) SET_PED_INTO_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) ENDIF IF IS_PED_IN_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) IF NOT IS_ENTITY_AT_COORD(vehFranklin, GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(001, GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(001, "ALrollingstart"), "ALrollingstart"), <<5.0, 5.0, 5.0>>) SET_VEHICLE_POSITION(vehFranklin, GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(001, GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(001, "ALrollingstart"), "ALrollingstart"), GET_HEADING_FROM_VECTOR(GET_ROTATION_OF_VEHICLE_RECORDING_AT_TIME(001, GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(001, "ALrollingstart"), "ALrollingstart"))) ENDIF ENDIF IF IS_PED_IN_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) START_PLAYBACK_RECORDED_VEHICLE(vehFranklin, 001, "ALrollingstart") PRINTLN("START_PLAYBACK_RECORDED_VEHICLE(vehFranklin, 001, 'ALrollingstart')") SET_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehFranklin, GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(001, "ALrollingstart") - 4000.0) SET_PLAYBACK_SPEED(vehFranklin, 0.0) SET_VEHICLE_ENGINE_ON(vehFranklin, TRUE, TRUE) ENDIF ENDIF SET_LABEL_AS_TRIGGERED("RollingStartInit", TRUE) ENDIF ENDIF bFranklinToMichael = FALSE ENDIF sCamDetails.pedTo = sSelectorPeds.pedID[sSelectorPeds.eNewSelectorPed] sCamDetails.bRun = TRUE ENDIF ENDIF IF sCamDetails.bRun BOOL bSwapping = FALSE IF HAS_LABEL_BEEN_TRIGGERED("MCH2_ABATTF") AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<969.710876, -2070.853760, 28.733320>>, <<958.640198, -2220.841797, 39.551666>>, 100.0) IF NOT HAS_LABEL_BEEN_TRIGGERED("AudioSwitched") PLAY_AUDIO(MIC2_SWITCHED) SET_LABEL_AS_TRIGGERED("AudioSwitched", TRUE) ENDIF IF bFranklinToMichael = TRUE IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED(sCamDetails) //, 0, 0, SELECTOR_CAM_DEFAULT, 0) bSwapping = TRUE ENDIF ELSE IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED(sCamDetails) //Returns FALSE when the camera spline is complete bSwapping = TRUE ENDIF ENDIF // IF IS_SCREEN_FADED_IN() // IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY() // IF IS_CAM_ACTIVE(sCamDetails.camID) // DO_SCREEN_FADE_OUT(500) // ENDIF // ENDIF // ENDIF // // IF IS_SCREEN_FADED_OUT() // IF IS_GAMEPLAY_CAM_RENDERING() // DO_SCREEN_FADE_IN(500) // ELSE // SET_CAM_SPLINE_PHASE(sCamDetails.camID, 1.0) // // SET_CAM_ACTIVE(sCamDetails.camID, FALSE) // // RENDER_SCRIPT_CAMS(FALSE, FALSE) // SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) // ENDIF // ENDIF ELSE IF NOT HAS_LABEL_BEEN_TRIGGERED("SwitchCamera") IF bFranklinToMichael = FALSE IF NOT DOES_CAM_EXIST(camSwitch) IF DOES_ENTITY_EXIST(vehFranklin) AND NOT IS_ENTITY_DEAD(vehFranklin) AND IS_PED_IN_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN)), <<-16.57771, -1445.89917, 29.64787>>) < 60.0 IF NOT DOES_CAM_EXIST(camSwitch) camSwitch = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE) ENDIF SET_CAM_PARAMS(camSwitch, <<-108.298317, -1512.187012, 52.940929>>, <<-89.499535, -0.000218, 142.212173>>, 45.0, 0) ENDIF ENDIF SET_LABEL_AS_TRIGGERED("SwitchCamera", TRUE) ENDIF ENDIF ENDIF IF NOT bDoMikeToFranklinCustomSwitch PRINTLN("bFranklinToMichael = ", bFranklinToMichael) IF (bFranklinToMichael = TRUE AND RUN_SWITCH_CAM_FROM_PLAYER_TO_PED_LONG_RANGE(sCamDetails, ENUM_TO_INT(SWITCH_FLAG_SKIP_OUTRO))) bSwapping = TRUE PRINTLN("RUN_SWITCH_CAM_FROM_PLAYER_TO_PED_LONG_RANGE(sCamDetails, ENUM_TO_INT(SWITCH_FLAG_SKIP_OUTRO))") ENDIF IF bFranklinToMichael = FALSE IF NOT HAS_LABEL_BEEN_TRIGGERED("RollingStartStop") IF RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM_LONG_RANGE(sCamDetails, camSwitch, ENUM_TO_INT(SWITCH_FLAG_SKIP_INTRO)) bSwapping = TRUE PRINTLN("RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM_LONG_RANGE(sCamDetails, camSwitch, ENUM_TO_INT(SWITCH_FLAG_SKIP_INTRO)) - bSwapping = TRUE") ENDIF ELSE IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED_LONG_RANGE(sCamDetails, ENUM_TO_INT(SWITCH_FLAG_SKIP_INTRO)) bSwapping = TRUE PRINTLN("(RUN_SWITCH_CAM_FROM_PLAYER_TO_PED_LONG_RANGE(sCamDetails, ENUM_TO_INT(SWITCH_FLAG_SKIP_INTRO) - bSwapping = TRUE") ENDIF ENDIF ENDIF ELSE IF HAS_SELECTOR_PED_BEEN_SELECTED(sSelectorPeds, SELECTOR_PED_FRANKLIN) bMikeToFranklinSwitchTriggered = TRUE ENDIF IF bMikeToFranklinSwitchTriggered IF DOES_ENTITY_EXIST(vehFranklin) AND IS_VEHICLE_DRIVEABLE(vehFranklin) SET_FORCE_HD_VEHICLE(vehFranklin, TRUE) ENDIF IF HAS_LABEL_BEEN_TRIGGERED("RollingStartStop") OR (DOES_ENTITY_EXIST(vehFranklin) AND IS_VEHICLE_DRIVEABLE(vehFranklin) AND IS_VEHICLE_HIGH_DETAIL(vehFranklin)) PRINTLN("IS_VEHICLE_HIGH_DETAIL(vehFranklin) = TRUE") IF HANDLE_SWITCH_CAM_MICHAEL_TO_FRANKLIN(scsSwitchCam_MichaelToFranklin) bSwapping = FALSE bMikeToFranklinSwitchTriggered = FALSE bDoMikeToFranklinCustomSwitch = FALSE ELSE IF bMikeToFrank_SwitchToFrank IF NOT bMikeToFrank_SwitchedToFrank SET_ENTITY_LOAD_COLLISION_FLAG(PLAYER_PED(CHAR_FRANKLIN), FALSE) CLEAR_FOCUS() REMOVE_NAVMESH_REQUIRED_REGIONS() IF TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE) //, TCF_CLEAR_TASK_INTERRUPT_CHECKS) INT i REPEAT COUNT_OF(sEnemyIntroCut) i SAFE_DELETE_PED(sEnemyIntroCut[i].pedIndex) ENDREPEAT bMikeToFrank_SwitchedToFrank = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF bSwapping = TRUE IF sCamDetails.bOKToSwitchPed IF NOT sCamDetails.bPedSwitched TAKE_CONTROL_OF_PED_FLAGS eTakeControlFlags = TCF_NONE IF bFranklinToMichael eTakeControlFlags = TCF_CLEAR_TASK_INTERRUPT_CHECKS ENDIF IF TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE, eTakeControlFlags) #IF IS_DEBUG_BUILD PRINTLN("Michael 2 - TAKE_CONTROL_OF_SELECTOR_PED") #ENDIF //Create or delete intro enemies IF eMissionObjective = stageFindMichael IF bFranklinToMichael = FALSE INT i REPEAT COUNT_OF(sEnemyIntroCut) i SAFE_DELETE_PED(sEnemyIntroCut[i].pedIndex) ENDREPEAT ELSE //Enemy Intro (Inside) createEnemy(sEnemyIntroCut[0], <<996.9860, -2185.0713, 28.9775>>, 9.6956, WEAPONTYPE_SMG, G_M_M_CHIGOON_01) //Original Position: <<991.6176, -2171.4707, 29.2246>>, 270.7684 SET_PED_DEFAULT_COMPONENT_VARIATION(sEnemyIntroCut[0].pedIndex) SET_MODEL_AS_NO_LONGER_NEEDED(CSB_CHIN_GOON) createEnemy(sEnemyIntroCut[1], <<992.2509, -2175.3486 -0.4, 28.9769>>, 242.3, WEAPONTYPE_PISTOL, G_M_M_CHIGOON_01) createEnemy(sEnemyIntroCut[2], <<988.6379, -2170.6748, 29.2006>>, 352.4113, WEAPONTYPE_PISTOL) createEnemy(sEnemyIntroCut[3], <<977.6, -2166.4, 30.4104 + 0.25>>, 70.2, WEAPONTYPE_UNARMED) createEnemy(sEnemyIntroCut[4], <<970.7029, -2169.6233, 28.4637>>, 170.9878, WEAPONTYPE_UNARMED, G_M_M_CHIGOON_01) createEnemy(sEnemyIntroCut[5], <<977.9589, -2156.2410, 30.0791>>, 125.1269, WEAPONTYPE_UNARMED, G_M_M_CHIGOON_01) createEnemy(sEnemyIntroCut[6], <<984.0753, -2158.3696, 30.0793>>, 219.8727, WEAPONTYPE_PISTOL) createEnemy(sEnemyIntroCut[7], <<997.6616, -2157.8818, 28.4766>>, 265.7728, WEAPONTYPE_MICROSMG, G_M_M_CHIGOON_01) createEnemy(sEnemyIntroCut[8], <<999.5024, -2145.7878, 28.4765>>, 275.3511, WEAPONTYPE_SMG) //Patrol: <<969.6483, -2160.4150, 28.4750>>, 178.3322 createEnemy(sEnemyIntroCut[9], <<969.2003, -2164.1885, 28.4756>>, 187.7889, WEAPONTYPE_SMG, G_M_M_CHIGOON_01) //Patrol: <<997.3615, -2168.5959, 28.4752>>, 358.6634 INT i REPEAT COUNT_OF(sEnemyIntroCut) i IF DOES_ENTITY_EXIST(sEnemyIntroCut[i].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemyIntroCut[i].pedIndex, intAbattoir) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyIntroCut[i].pedIndex, TRUE) ENDIF ENDREPEAT #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemyIntroCut) i IF NOT IS_PED_INJURED(sEnemyIntroCut[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemyIntroCut[i].pedIndex, "IntroCut ", i) sEnemyIntroCut[i].sDebugName = CONCATENATE_STRINGS("IntroCut ", GET_STRING_FROM_INT(i)) ENDIF ENDREPEAT #ENDIF ENDIF ENDIF RENDER_SCRIPT_CAMS(FALSE, FALSE) IF DOES_CAM_EXIST(camSwitch) DESTROY_CAM(camSwitch) ENDIF SET_PED_TARGET_LOSS_RESPONSE(PLAYER_PED(CHAR_MICHAEL), TLR_NEVER_LOSE_TARGET) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_MICHAEL), TRUE) //[MF] Fix for Michael being invisible when we switch to him. // IF eMissionObjective = stageFindMichael // IF PLAYER_PED_ID() = PLAYER_PED(CHAR_MICHAEL) // WHILE NOT IS_INTERIOR_READY(intAbattoir) // PRINTLN("Loading Interior....") // WAIT(0) // ENDWHILE // FORCE_ROOM_FOR_ENTITY(PLAYER_PED(CHAR_MICHAEL), intAbattoir, GET_ROOM_KEY_FROM_ENTITY(objHook)) // ENDIF // ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupFriendlyFire) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) IF eMissionObjective = stageFindMichael ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, NULL, "MICHAEL") ELSE ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ENDIF ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Interior IF intAbattoir = NULL intAbattoir = GET_INTERIOR_AT_COORDS_WITH_TYPE(vPlayerStart, "v_abattoir") ENDIF RETAIN_ENTITY_IN_INTERIOR(PLAYER_PED(CHAR_MICHAEL), intAbattoir) sCamDetails.bPedSwitched = TRUE ENDIF ELSE SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE(sCamDetails.pedTo) ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC FUNC BOOL SHOULD_RAIL_STOP_MOVING(INT iNextNodeToMoveTo) //Stop moving the rail if we've reached the maximum number of nodes, //if the next node hasn't been defined (i.e. it's position is at the origin), //or if the next node is a pre-determined stop point (iRailNodeToStopAt) RETURN((iNextNodeToMoveTo = iTotalRailNodes) OR (iNextNodeToMoveTo = iRailNodeToStopAt) OR (ARE_VECTORS_EQUAL(sRailNodes[iNextNodeToMoveTo].vPos, VECTOR_ZERO))) ENDFUNC ///PURPOSE: Controls moving the ped dangling from the hook along the rail. This version uses the new DANGLE_FROM_MEATHOOK behaviour to update the position on the rail FUNC BOOL MOVE_PED_ALONG_RAIL() VECTOR vHookCurLoc VECTOR vHookToNextNode VECTOR vPotentialNextPos INT iNextNodeIndex = iCurrentNode + 1 IF NOT DOES_ENTITY_EXIST(objHook) SCRIPT_ASSERT("Hook doesn't exist!") RETURN TRUE ENDIF IF IS_ENTITY_DEAD(PLAYER_PED(CHAR_MICHAEL)) SCRIPT_ASSERT("Rail ped is dead!") ENDIF IF bRailInit = FALSE iCurrentNode = 0 vRailCurrent = sRailNodes[0].vPos iNextNodeIndex = iCurrentNode + 1 PRINTLN("Initialised Rail Node Variables...") bRailInit = TRUE ENDIF IF IS_ENTITY_WAITING_FOR_WORLD_COLLISION(objHook) PRINTLN("objHook WAITING FOR COLLISION...") ENDIF #IF IS_DEBUG_BUILD IF bDebugMichaelDeathSkip SET_RAIL_FINAL_NODE(40) iCurrentNode = 33 vRailCurrent = sRailNodes[33].vPos SET_ENTITY_COORDS_NO_OFFSET(objHook, vRailCurrent) SET_ENTITY_ROTATION(objHook, sRailNodes[33].vRot) iCutsceneStage = 22 SETTIMERA(13000 * 2) bDebugMichaelDeathSkip = FALSE ENDIF IF bDebugMichaelSkipToStart SET_RAIL_FINAL_NODE(40) iCurrentNode = 0 vRailCurrent = sRailNodes[0].vPos SET_ENTITY_COORDS_NO_OFFSET(objHook, vRailCurrent) SET_ENTITY_ROTATION(objHook, sRailNodes[0].vRot) iCutsceneStage = 2 SETTIMERA(0) bDebugMichaelSkipToStart = FALSE ENDIF IF bDebugMichaelSkipToCapture SET_RAIL_FINAL_NODE(40) iCurrentNode = iCaptureNode vRailCurrent = vCaptureCurrent SET_ENTITY_COORDS_NO_OFFSET(objHook, vRailCurrent) SET_ENTITY_ROTATION(objHook, vRailCurrentRot) iCutsceneStage = iCaptureStage SETTIMERA(iCaptureTimer) bDebugMichaelSkipToCapture = FALSE ENDIF IF bDebugMichaelCapturePoint iCaptureNode = iCurrentNode vCaptureCurrent = vRailCurrent vRailCurrentRot = GET_ENTITY_ROTATION(objHook) iCaptureStage = iCutsceneStage iCaptureTimer = TIMERA() bDebugMichaelCapturePoint = FALSE ENDIF IF bDebugMichaelPausePlay IF fMoveSpeedMult <> 0.225 fMoveSpeedMult = 0.225 iDebugMichaelDebugTime = -1 ELSE fMoveSpeedMult = 0.0 iDebugMichaelDebugTime = TIMERA() ENDIF bDebugMichaelPausePlay = FALSE ENDIF IF iDebugMichaelDebugTime <> -1 SETTIMERA(iDebugMichaelDebugTime) ENDIF IF bDebugMichaelDebugTime TEXT_LABEL txtLabel txtLabel = "Time: " txtLabel += TIMERA() SET_TEXT_SCALE(0.5, 0.5) SET_TEXT_CENTRE(TRUE) IF fMoveSpeedMult <> 0.225 SET_TEXT_COLOUR(255, 0, 0, 255) ELSE SET_TEXT_COLOUR(255, 255, 0, 255) ENDIF DISPLAY_TEXT(0.1, 0.9, txtLabel) txtLabel = "Stage: " txtLabel += iCutsceneStage SET_TEXT_SCALE(0.5, 0.5) SET_TEXT_CENTRE(TRUE) IF fMoveSpeedMult <> 0.225 SET_TEXT_COLOUR(255, 0, 0, 255) ELSE SET_TEXT_COLOUR(255, 255, 0, 255) ENDIF DISPLAY_TEXT(0.1, 0.925, txtLabel) ENDIF CAMERA_INDEX camDebugCurrent = GET_DEBUG_CAM() IF NOT DOES_CAM_EXIST(camDebug) camDebug = CREATE_CAMERA(CAMTYPE_SCRIPTED) ENDIF IF bDebugMichaelSetDebugCam SET_CAM_COORD(camDebugCurrent, GET_CAM_COORD(camDebug)) SET_CAM_ROT(camDebugCurrent, GET_CAM_ROT(camDebug)) SET_CAM_FOV(camDebugCurrent, GET_CAM_FOV(camDebug)) bDebugMichaelSetDebugCam = FALSE ENDIF IF bDebugMichaelCaptureDebugCam SET_CAM_COORD(camDebug, GET_CAM_COORD(camDebugCurrent)) SET_CAM_ROT(camDebug, GET_CAM_ROT(camDebugCurrent)) SET_CAM_FOV(camDebug, GET_CAM_FOV(camDebugCurrent)) bDebugMichaelCaptureDebugCam = FALSE ENDIF IF iDebugMichaelHandCamLast <> iDebugMichaelHandCam IF iDebugMichaelHandCam = 0 //NONE IF IS_CAM_SHAKING(camDebugCurrent) STOP_CAM_SHAKING(camDebugCurrent, TRUE) ENDIF ELIF iDebugMichaelHandCam = 1 //"light" IF HAS_ANIM_DICT_LOADED("shake_cam_all@") ANIMATED_SHAKE_CAM(camDebugCurrent, "shake_cam_all@", "light", "", fDebugMichaelHandCam) ENDIF ELIF iDebugMichaelHandCam = 2 //"medium" IF HAS_ANIM_DICT_LOADED("shake_cam_all@") ANIMATED_SHAKE_CAM(camDebugCurrent, "shake_cam_all@", "medium", "", fDebugMichaelHandCam) ENDIF ELIF iDebugMichaelHandCam = 3 //"heavy" IF HAS_ANIM_DICT_LOADED("shake_cam_all@") ANIMATED_SHAKE_CAM(camDebugCurrent, "shake_cam_all@", "heavy", "", fDebugMichaelHandCam) ENDIF ENDIF iDebugMichaelHandCamLast = iDebugMichaelHandCam ENDIF #ENDIF vHookCurloc = vRailCurrent IF NOT SHOULD_RAIL_STOP_MOVING(iNextNodeIndex) AND fMoveSpeedMult <> 0.0 vHookToNextNode = sRailNodes[iNextNodeIndex].vPos - vHookCurLoc vPotentialNextPos = vHookCurLoc +((GET_FRAME_TIME() * NORMALISE_VECTOR(vHookToNextNode) * fMoveSpeedMult)) vRailCurrent = vPotentialNextPos SET_ENTITY_COORDS_NO_OFFSET(objHook, vRailCurrent) IF GET_DISTANCE_BETWEEN_COORDS(vPotentialNextPos, sRailNodes[iNextNodeIndex].vPos) < GET_DISTANCE_BETWEEN_COORDS(vHookCurloc, sRailNodes[iNextNodeIndex].vPos) // IF GET_ENABLE_BOUND_ANKLES(PLAYER_PED(CHAR_MICHAEL)) // vRailCurrent = vPotentialNextPos // FREEZE_ENTITY_POSITION(objHook, FALSE) // DANGLE_FROM_MEATHOOK(FALSE, PLAYER_PED(CHAR_MICHAEL), objHook, vRailCurrent + vHookPosOffset, FALSE, 0.0, 1000, 60000, bFixedRotation, -0.3, -0.3, -0.3, 0.3, 0.3, 0.3) //#IF IS_DEBUG_BUILD PRINTLN("DANGLE_FROM_MEATHOOK REF1") #ENDIF //// PRINTLN("Hook should be at: <<", vRailCurrent.X, ", ", vRailCurrent.Y, ", ", vRailCurrent.Z, ">>") // ELSE // SET_ENABLE_BOUND_ANKLES(PLAYER_PED(CHAR_MICHAEL), TRUE) // PRINTLN("Bind those ankles!") // ENDIF ELSE PRINTLN("iCurrentNode(", iCurrentNode, ") = iNextNodeIndex(", iNextNodeIndex, ")") iCurrentNode = iNextNodeIndex ENDIF ENDIF RETURN FALSE ENDFUNC INT iLastAnim = 2 //Michael_meat_hook_react_c ///PURPOSE: Deals with moving the rail, and making sure the ragdoll behaviour doesn't timeout PROC UPDATE_RAIL_MOVE() IF bOkToMoveRail MOVE_PED_ALONG_RAIL() IF sfxRail = -1 sfxRail = GET_SOUND_ID() PLAY_SOUND_FROM_ENTITY(sfxRail, "RAIL_LOOP", objHook, "MICHAEL_2_SOUNDS") ENDIF ELSE IF sfxRail != -1 STOP_SOUND(sfxRail) RELEASE_SOUND_ID(sfxRail) sfxRail = -1 ENDIF ENDIF IF bOkToHangFromHook //Reattach IF DOES_ENTITY_EXIST(objHook) IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_AIM_GUN_SCRIPTED) != WAITING_TO_START_TASK AND GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_AIM_GUN_SCRIPTED) != PERFORMING_TASK IF NOT IS_ENTITY_ATTACHED(PLAYER_PED(CHAR_MICHAEL)) ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, vMichaelAttachOffset, <<0.0, 0.0, 180.0>>, TRUE, TRUE) ELSE IF HAS_ENTITY_ANIM_FINISHED(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_a") OR HAS_ENTITY_ANIM_FINISHED(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_b") OR HAS_ENTITY_ANIM_FINISHED(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_c") OR HAS_ENTITY_ANIM_FINISHED(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_d") OR (IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_a") AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_a") > 0.675) OR (IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_b") AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_b") > 0.8) OR (IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_c") AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_c") > 0.685) OR (IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_d") AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_d") > 0.675) INT iRand iRand = GET_RANDOM_INT_IN_RANGE(0, 4) IF iRand = iLastAnim iRand = GET_RANDOM_INT_IN_RANGE(0, 4) ENDIF IF iRand = iLastAnim iRand = GET_RANDOM_INT_IN_RANGE(0, 4) ENDIF IF iRand = 0 TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_a", REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_HOLD_LAST_FRAME | AF_NOT_INTERRUPTABLE, 0.025) ELIF iRand = 1 TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_b", REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_HOLD_LAST_FRAME | AF_NOT_INTERRUPTABLE, 0.1) ELIF iRand = 2 TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_c", REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_HOLD_LAST_FRAME | AF_NOT_INTERRUPTABLE, 0.030) ELIF iRand = 3 TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_d", REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_HOLD_LAST_FRAME | AF_NOT_INTERRUPTABLE, 0.15) ENDIF iLastAnim = iRand ENDIF ENDIF ENDIF // IF NOT IS_ENTITY_ATTACHED_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook) // OR GET_DISTANCE_BETWEEN_COORDS(GET_PED_BONE_COORDS(PLAYER_PED(CHAR_MICHAEL), BONETAG_L_FOOT, VECTOR_ZERO), GET_ENTITY_COORDS(objHook)) > 1.0 // OR GET_DISTANCE_BETWEEN_COORDS(GET_PED_BONE_COORDS(PLAYER_PED(CHAR_MICHAEL), BONETAG_R_FOOT, VECTOR_ZERO), GET_ENTITY_COORDS(objHook)) > 1.0 // #IF IS_DEBUG_BUILD // PRINTLN("Left Foot Dist: ", GET_DISTANCE_BETWEEN_COORDS(GET_PED_BONE_COORDS(PLAYER_PED(CHAR_MICHAEL), BONETAG_L_FOOT, VECTOR_ZERO), GET_ENTITY_COORDS(objHook)), " Right Foot Dist: ", GET_DISTANCE_BETWEEN_COORDS(GET_PED_BONE_COORDS(PLAYER_PED(CHAR_MICHAEL), BONETAG_R_FOOT, VECTOR_ZERO), GET_ENTITY_COORDS(objHook))) // #ENDIF // // IF IS_VECTOR_ZERO(vRailCurrent) // vRailCurrent = sRailNodes[0].vPos // ENDIF // // SAFE_DELETE_OBJECT(objHook) // objHook = CREATE_OBJECT_NO_OFFSET(PROP_LD_HOOK, vRailCurrent) // // SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(objHook, FALSE) // RETAIN_ENTITY_IN_INTERIOR(objHook, intAbattoir) // // WHILE NOT DOES_ENTITY_HAVE_PHYSICS(objHook) // OR NOT HAS_COLLISION_FOR_MODEL_LOADED(PROP_LD_HOOK) // WAIT_WITH_DEATH_CHECKS(0) // ENDWHILE // // SET_OBJECT_PHYSICS_PARAMS(objHook, fHookMass, -1.0, <<-1.0, -1.0, -1.0>>, <<-1.0, -1.0, -1.0>>) // SET_ENTITY_DYNAMIC(objHook, TRUE) // // SET_ENTITY_COORDS_NO_OFFSET(objHook, vRailCurrent) // SET_ENTITY_ROTATION(objHook, sRailNodes[iCurrentNode].vRot) // FREEZE_ENTITY_POSITION(objHook, TRUE) // // //Attach Michael to hook // ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, vMichaelAttachOffset, <<0.0, 0.0, 180.0>>, TRUE, TRUE) // // WHILE NOT IS_ENTITY_ATTACHED(PLAYER_PED(CHAR_MICHAEL)) // WAIT_WITH_DEATH_CHECKS(0) // ENDWHILE // // TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_idle", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING) //TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING) // //FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) // // iReattach = 0 // // bReattach = TRUE // ENDIF // // IF bReattach = TRUE // SET_ENTITY_COORDS_NO_OFFSET(objHook, vRailCurrent) // SET_ENTITY_ROTATION(objHook, sRailNodes[iCurrentNode].vRot) // // ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, vMichaelAttachOffset, <<0.0, 0.0, 180.0>>, TRUE, TRUE) // // IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_idle") //IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle") // IF iReattach = 0 // #IF IS_DEBUG_BUILD // PRINTLN("1 second to reattach...") // #ENDIF // // iReattach = GET_GAME_TIMER() + 1000 // ENDIF // ENDIF // // IF iReattach > 0 AND GET_GAME_TIMER() > iReattach // AND IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_idle") //AND IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle") // AND NOT IS_ENTITY_WAITING_FOR_WORLD_COLLISION(PLAYER_PED(CHAR_MICHAEL)) // IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) < 10.0 // OR (IS_ENTITY_ON_SCREEN(PLAYER_PED(CHAR_MICHAEL)) AND NOT IS_ENTITY_OCCLUDED(PLAYER_PED(CHAR_MICHAEL))) // FREEZE_ENTITY_POSITION(objHook, FALSE) // // DETACH_ENTITY(PLAYER_PED(CHAR_MICHAEL)) // DANGLE_FROM_MEATHOOK(TRUE, PLAYER_PED(CHAR_MICHAEL), objHook, vRailCurrent, FALSE, 0.0, 1000, 60000, bFixedRotation, -0.3, -0.3, -0.3, 0.3, 0.3, 0.3) //#IF IS_DEBUG_BUILD PRINTLN("DANGLE_FROM_MEATHOOK REF2") #ENDIF // STOP_ANIM_TASK(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_idle", INSTANT_BLEND_OUT) //STOP_ANIM_TASK(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle", INSTANT_BLEND_OUT) // // //Add ankle cuffs // SET_ENABLE_BOUND_ANKLES(PLAYER_PED(CHAR_MICHAEL), TRUE) // // //Pin the ankle to the bottom of the hook // VECTOR vLeftFootAttach // vLeftFootAttach = <<-0.075, -0.1, -0.85>> // ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(PLAYER_PED(CHAR_MICHAEL), objHook, GET_PED_BONE_INDEX(PLAYER_PED(CHAR_MICHAEL), BONETAG_L_FOOT), -1, vLeftFootAttach, VECTOR_ZERO, VECTOR_ZERO, -1.0, TRUE, FALSE, FALSE, FALSE) // ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(PLAYER_PED(CHAR_MICHAEL), objHook, GET_PED_BONE_INDEX(PLAYER_PED(CHAR_MICHAEL), BONETAG_R_FOOT), -1, <<-vLeftFootAttach.X, vLeftFootAttach.Y, vLeftFootAttach.Z>>, VECTOR_ZERO, VECTOR_ZERO, -1.0, TRUE, FALSE, FALSE, FALSE) // // #IF IS_DEBUG_BUILD // PRINTLN("Reattached!") // #ENDIF // // bReattach = FALSE // iReattach = 0 // ENDIF // ENDIF // ENDIF // // IF NOT IS_PED_INJURED(PLAYER_PED(CHAR_MICHAEL)) // IF IS_PED_RAGDOLL(PLAYER_PED(CHAR_MICHAEL)) // IF IS_PED_RUNNING_RAGDOLL_TASK(PLAYER_PED(CHAR_MICHAEL)) // RESET_PED_RAGDOLL_TIMER(PLAYER_PED(CHAR_MICHAEL)) //#IF IS_DEBUG_BUILD PRINTLN("RESET_PED_RAGDOLL_TIMER") #ENDIF // ENDIF // ENDIF // ENDIF // IF bShootingUpsideDown // SET_ENTITY_COORDS_NO_OFFSET(objHook, vRailCurrent) // VECTOR vFinalCam = GET_FINAL_RENDERED_CAM_ROT() // SET_ENTITY_ROTATION(objHook, <>) // // ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, <<-0.025, -0.05, -1.68>>, <<0.0, 0.0, 180.0>>) // ENDIF ENDIF ENDIF ENDPROC //#IF IS_DEBUG_BUILD // //CONST_INT iDebugWindow 10 // //STRUCT DEBUG_WINDOW // BOOL bActive // FLOAT xPos // FLOAT yPos // FLOAT fWidth // FLOAT fHeight // STRING sTitle = NULL // BOOL bCenterOrigin = FALSE // BOOL bMaxBox = TRUE // BOOL bMinBox = TRUE // BOOL bCloseBox = TRUE // BOOL bSimple = FALSE // BOOL bGradient = TRUE // VECTOR vColourTopLeft // VECTOR vColourTopRight // VECTOR vColourBottomLeft // VECTOR vColourBottomRight //ENDSTRUCT // //DEBUG_WINDOW sDebugWindow[iDebugWindow] // //PROC DRAW_DEBUG_WINDOW() // SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE) // // INT i // // REPEAT COUNT_OF(sDebugWindow) i // IF sDebugWindow[i].bActive = TRUE // IF sDebugWindow[i].bSimple = FALSE // VECTOR vOrigin // // IF sDebugWindow[i].bCenterOrigin = FALSE // vOrigin = <> // ELSE // vOrigin = <> // ENDIF // // DRAW_DEBUG_POLY_2D_WITH_THREE_COLOURS(vOrigin, //Top Left // vOrigin + <>, //Top Right // vOrigin + <<0.0, sDebugWindow[i].fHeight, 0.0>>, //Bottom Left // ROUND(sDebugWindow[i].vColourTopLeft.X), ROUND(sDebugWindow[i].vColourTopLeft.Y), ROUND(sDebugWindow[i].vColourTopLeft.Z), //Top Left Colour // ROUND(sDebugWindow[i].vColourTopRight.X), ROUND(sDebugWindow[i].vColourTopRight.Y), ROUND(sDebugWindow[i].vColourTopRight.Z), //Top Right Colour // ROUND(sDebugWindow[i].vColourBottomLeft.X), ROUND(sDebugWindow[i].vColourBottomLeft.Y), ROUND(sDebugWindow[i].vColourBottomLeft.Z)) //Bottom Left Colour // // DRAW_DEBUG_POLY_2D_WITH_THREE_COLOURS(vOrigin + <<0.0, sDebugWindow[i].fHeight, 0.0>>, //Bottom Left // vOrigin + <>, //Top Right // vOrigin + <>, //Bottom Right // ROUND(sDebugWindow[i].vColourBottomLeft.X), ROUND(sDebugWindow[i].vColourBottomLeft.Y), ROUND(sDebugWindow[i].vColourBottomLeft.Z), //Top Left Colour // ROUND(sDebugWindow[i].vColourTopRight.X), ROUND(sDebugWindow[i].vColourTopRight.Y), ROUND(sDebugWindow[i].vColourTopRight.Z), //Top Right Colour // ROUND(sDebugWindow[i].vColourBottomRight.X), ROUND(sDebugWindow[i].vColourBottomRight.Y), ROUND(sDebugWindow[i].vColourBottomRight.Z)) //Bottom Left Colour // ELSE // VECTOR vOrigin // // IF sDebugWindow[i].bCenterOrigin = FALSE // vOrigin = <> // ELSE // vOrigin = <> // ENDIF // // DRAW_DEBUG_POLY_2D_WITH_THREE_COLOURS(vOrigin, //Top Left // vOrigin + <>, //Top Right // vOrigin + <<0.0, sDebugWindow[i].fHeight, 0.0>>, //Bottom Left // ROUND(sDebugWindow[i].vColourTopLeft.X), ROUND(sDebugWindow[i].vColourTopLeft.Y), ROUND(sDebugWindow[i].vColourTopLeft.Z), //Top Left Colour // ROUND(sDebugWindow[i].vColourTopRight.X), ROUND(sDebugWindow[i].vColourTopRight.Y), ROUND(sDebugWindow[i].vColourTopRight.Z), //Top Right Colour // ROUND(sDebugWindow[i].vColourBottomLeft.X), ROUND(sDebugWindow[i].vColourBottomLeft.Y), ROUND(sDebugWindow[i].vColourBottomLeft.Z)) //Bottom Left Colour // // DRAW_DEBUG_POLY_2D_WITH_THREE_COLOURS(vOrigin + <<0.0, sDebugWindow[i].fHeight, 0.0>>, //Bottom Left // vOrigin + <>, //Top Right // vOrigin + <>, //Bottom Right // ROUND(sDebugWindow[i].vColourBottomLeft.X), ROUND(sDebugWindow[i].vColourBottomLeft.Y), ROUND(sDebugWindow[i].vColourBottomLeft.Z), //Top Left Colour // ROUND(sDebugWindow[i].vColourTopRight.X), ROUND(sDebugWindow[i].vColourTopRight.Y), ROUND(sDebugWindow[i].vColourTopRight.Z), //Top Right Colour // ROUND(sDebugWindow[i].vColourBottomRight.X), ROUND(sDebugWindow[i].vColourBottomRight.Y), ROUND(sDebugWindow[i].vColourBottomRight.Z)) //Bottom Left Colour // ENDIF // ENDIF // ENDREPEAT //ENDPROC // //#ENDIF #IF IS_DEBUG_BUILD //Debug Variables //- General BOOL bAutoUpdateSpline_SCE = TRUE BOOL bUpdateSpline_SCE INT iSplineCamType_SCE, iSplineCamTypeLast_SCE INT iTotalDuration_SCE INT iSmoothingStyle_SCE CAMERA_INDEX camEdit_SCE CAMERA_INDEX camEditSpline_SCE CONST_INT iTotalNodes_SCE 20 STRUCT SPLINE_CAM_NODE_SCE VECTOR vPos VECTOR vRot FLOAT fFov INT iTime INT iCAM_SPLINE_NODE_FLAGS ENDSTRUCT SPLINE_CAM_NODE_SCE SplineCamNodes_SCE[iTotalNodes_SCE] //- Editing INT iCurrentNode_SCE, iCurrentNodeLast_SCE BOOL bCaptureCurrentCamera_SCE VECTOR vCurrentNodePos_SCE VECTOR vCurrentNodeRot_SCE FLOAT fCurrentNodeFOV_SCE INT iCurrentNodeTime_SCE INT iCurrentCAM_SPLINE_NODE_FLAGS_SCE //- Preview BOOL bRenderSplineCam_SCE BOOl bStartSplineCam_SCE //- Drawing BOOL bDrawDebug_SCE //BOOL bDrawCam_SCE //BOOL bDrawNode_SCE //BOOL bDrawPath_SCE //BOOL bDrawSpeed_SCE //INT iDrawPathDetail_SCE //ENUM DRAWNODE_SCE // DRAWNODE_NONE_SCE, // DRAWNODE_POINT_SCE, // DRAWNODE_WIREFRAME_SCE, // DRAWNODE_SOLID_SCE //ENDENUM //DRAWNODE_SCE eDrawNode_SCE //- Save/Load PROC GENERATE_SPLINE_ROUTE() IF DOES_CAM_EXIST(camEditSpline_SCE) DESTROY_CAM(camEditSpline_SCE) ENDIF IF NOT DOES_CAM_EXIST(camEditSpline_SCE) IF iSplineCamType_SCE = 0 camEditSpline_SCE = CREATE_CAM("TIMED_SPLINE_CAMERA") ELIF iSplineCamType_SCE = 1 camEditSpline_SCE = CREATE_CAM("ROUNDED_SPLINE_CAMERA") ELIF iSplineCamType_SCE = 2 camEditSpline_SCE = CREATE_CAM("SMOOTHED_SPLINE_CAMERA") ENDIF ENDIF BOOL bBreak INT iLoop WHILE bBreak = FALSE IF DOES_CAM_EXIST(camEditSpline_SCE) IF IS_VECTOR_ZERO(SplineCamNodes_SCE[iLoop].vPos) bBreak = TRUE ELSE SET_CAM_PARAMS(camEdit_SCE, SplineCamNodes_SCE[iLoop].vPos, SplineCamNodes_SCE[iLoop].vRot, SplineCamNodes_SCE[iLoop].fFov) ADD_CAM_SPLINE_NODE_USING_CAMERA(camEditSpline_SCE, camEdit_SCE, SplineCamNodes_SCE[iLoop].iTime, INT_TO_ENUM(CAM_SPLINE_NODE_FLAGS, SplineCamNodes_SCE[iLoop].iCAM_SPLINE_NODE_FLAGS)) iLoop++ IF iLoop = iTotalNodes_SCE bBreak = TRUE ENDIF ENDIF ELSE bBreak = TRUE ENDIF ENDWHILE IF DOES_CAM_EXIST(camEditSpline_SCE) IF iSplineCamType_SCE = 0 ELIF iSplineCamType_SCE = 1 SET_CAM_SPLINE_SMOOTHING_STYLE(camEditSpline_SCE, INT_TO_ENUM(CAM_SPLINE_SMOOTHING_FLAGS, iSmoothingStyle_SCE + 1)) SET_CAM_SPLINE_DURATION(camEditSpline_SCE, iTotalDuration_SCE) ELIF iSplineCamType_SCE = 2 SET_CAM_SPLINE_SMOOTHING_STYLE(camEditSpline_SCE, INT_TO_ENUM(CAM_SPLINE_SMOOTHING_FLAGS, iSmoothingStyle_SCE + 1)) SET_CAM_SPLINE_DURATION(camEditSpline_SCE, iTotalDuration_SCE) ENDIF ENDIF ENDPROC PROC SPLINE_CAM_EDITOR IF NOT DOES_CAM_EXIST(camEdit_SCE) camEdit_SCE = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA") ENDIF IF bUpdateSpline_SCE = TRUE GENERATE_SPLINE_ROUTE() bUpdateSpline_SCE = FALSE ENDIF IF iSplineCamTypeLast_SCE <> iSplineCamType_SCE GENERATE_SPLINE_ROUTE() iSplineCamTypeLast_SCE = iSplineCamType_SCE ENDIF //ADD_CAM_SPLINE_NODE_USING_CAMERA(camEditSpline_SCE, camEdit_SCE, 0) IF bCaptureCurrentCamera_SCE = TRUE vCurrentNodePos_SCE = GET_FINAL_RENDERED_CAM_COORD() vCurrentNodeRot_SCE = GET_FINAL_RENDERED_CAM_ROT() fCurrentNodeFOV_SCE = GET_FINAL_RENDERED_CAM_FOV() bCaptureCurrentCamera_SCE = FALSE ENDIF IF iCurrentNodeLast_SCE <> iCurrentNode_SCE vCurrentNodePos_SCE = SplineCamNodes_SCE[iCurrentNode_SCE].vPos vCurrentNodeRot_SCE = SplineCamNodes_SCE[iCurrentNode_SCE].vRot fCurrentNodeFOV_SCE = SplineCamNodes_SCE[iCurrentNode_SCE].fFOV iCurrentNodeTime_SCE = SplineCamNodes_SCE[iCurrentNode_SCE].iTime iCurrentCAM_SPLINE_NODE_FLAGS_SCE = SplineCamNodes_SCE[iCurrentNode_SCE].iCAM_SPLINE_NODE_FLAGS iCurrentNodeLast_SCE = iCurrentNode_SCE ENDIF SplineCamNodes_SCE[iCurrentNode_SCE].vPos = vCurrentNodePos_SCE SplineCamNodes_SCE[iCurrentNode_SCE].vRot = vCurrentNodeRot_SCE SplineCamNodes_SCE[iCurrentNode_SCE].fFOV = fCurrentNodeFOV_SCE SplineCamNodes_SCE[iCurrentNode_SCE].iTime = iCurrentNodeTime_SCE SplineCamNodes_SCE[iCurrentNode_SCE].iCAM_SPLINE_NODE_FLAGS = iCurrentCAM_SPLINE_NODE_FLAGS_SCE IF bRenderSplineCam_SCE IF DOES_CAM_EXIST(camEditSpline_SCE) //SET_DEBUG_CAM_ACTIVE(FALSE) IF IS_CAM_ACTIVE(camEditSpline_SCE) SET_CAM_ACTIVE(camEditSpline_SCE, FALSE) ENDIF SET_CAM_ACTIVE(camEditSpline_SCE, TRUE) RENDER_SCRIPT_CAMS(TRUE, FALSE) PRINTLN("Camera Preview Started...") ENDIF bRenderSplineCam_SCE = FALSE ENDIF IF DOES_CAM_EXIST(camEditSpline_SCE) WHILE IS_CAM_ACTIVE(camEditSpline_SCE) PRINTLN("Previewing Camera!") IF GET_CAM_SPLINE_PHASE(camEditSpline_SCE) >= 1.0 SET_CAM_ACTIVE(camEditSpline_SCE, FALSE) RENDER_SCRIPT_CAMS(FALSE, FALSE) PRINTLN("Camera Preview Ended...") SET_CAM_SPLINE_PHASE(camEditSpline_SCE, 0.0) ENDIF WAIT(0) ENDWHILE ENDIF IF bStartSplineCam_SCE // SET_CAM_ACTIVE(camEditSpline_SCE, TRUE) // RENDER_SCRIPT_CAMS(FALSE, FALSE) bStartSplineCam_SCE = FALSE ENDIF IF bDrawDebug_SCE ENDIF ENDPROC #ENDIF //Creation Proc PROC MAKE_PICKUPS() INT iPlacementFlags //Set health pack placement flags iPlacementFlags = 0 SET_BIT(iPlacementFlags, ENUM_TO_INT(PLACEMENT_FLAG_FIXED)) IF NOT DOES_PICKUP_EXIST(piPickups[0]) piPickups[0] = CREATE_PICKUP_ROTATE(PICKUP_HEALTH_STANDARD, <<988.861, -2126.522, 30.976>>, <<0, 0, 269>>, iPlacementFlags) ADD_PICKUP_TO_INTERIOR_ROOM_BY_NAME(piPickups[0], "abaprodfloor") ENDIF IF NOT DOES_PICKUP_EXIST(piPickups[1]) piPickups[1] = CREATE_PICKUP_ROTATE(PICKUP_HEALTH_STANDARD, <<992.9708, -2174.6101, 30.4568>>, <<0, 0, -6>>, iPlacementFlags) ADD_PICKUP_TO_INTERIOR_ROOM_BY_NAME(piPickups[1], "abaSLAUGHT") ENDIF IF NOT DOES_PICKUP_EXIST(piPickups[2]) piPickups[2] = CREATE_PICKUP_ROTATE(PICKUP_HEALTH_STANDARD, <<989.534, -2150.114, 31.046>>, <<0, 0, 88>>, iPlacementFlags) ADD_PICKUP_TO_INTERIOR_ROOM_BY_NAME(piPickups[2], "abattmainsec2") ENDIF IF NOT DOES_PICKUP_EXIST(piPickups[3]) piPickups[3] = CREATE_PICKUP_ROTATE(PICKUP_WEAPON_PISTOL, <<952.2078, -2127.2258, 31.1718>>, <<90, 0, 0>>, iPlacementFlags) ADD_PICKUP_TO_INTERIOR_ROOM_BY_NAME(piPickups[3], "ababackpass") ENDIF IF NOT DOES_PICKUP_EXIST(piPickups[4]) piPickups[4] = CREATE_PICKUP_ROTATE(PICKUP_ARMOUR_STANDARD, <<953.7915, -2127.4309, 31.2614>>, <<90, 0, 0>>, iPlacementFlags) ADD_PICKUP_TO_INTERIOR_ROOM_BY_NAME(piPickups[4], "ababackpass") ENDIF ENDPROC //═══════════════════════════╡ OBJECTIVE PROCEDURES ╞════════════════════════════ PROC initialiseMission() IF INIT_STAGE() //INFORM_MISSION_STATS_OF_MISSION_START_MICHAEL_TWO() //Michael Available SET_PLAYER_PED_AVAILABLE(CHAR_MICHAEL, TRUE) //Enable Special Ability ENABLE_SPECIAL_ABILITY(PLAYER_ID(), TRUE) //Cap Interior SET_INTERIOR_CAPPED(INTERIOR_V_ABATTOIR, FALSE) #IF IS_DEBUG_BUILD //Auto Skipping IF bAutoSkipping = TRUE IF NOT IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_OUT(500) ENDIF ENDIF #ENDIF //Prepare Mission SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) //Block Shops SET_ALL_SHOPS_TEMPORARILY_UNAVAILABLE(TRUE) //Block changing clothes SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(FALSE) //Block Ambient Variations SET_PLAYER_PED_DATA_IN_CUTSCENES(FALSE, TRUE) //Request Additional Text REQUEST_ADDITIONAL_TEXT("MCH2", MISSION_TEXT_SLOT) //REQUEST_ADDITIONAL_TEXT("MCH2AUD", MISSION_DIALOGUE_TEXT_SLOT) WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT) //OR NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_DIALOGUE_TEXT_SLOT) WAIT(0) PRINTSTRING("LOADING TEXT") PRINTNL() ENDWHILE //Doors IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(iExitDoor) ADD_DOOR_TO_SYSTEM(iExitDoor, PROP_ABAT_SLIDE, <<962.9084, -2105.8137, 34.6432>>) ENDIF //Particle Effects REQUEST_PTFX_ASSET() WHILE NOT HAS_PTFX_ASSET_LOADED() WAIT(0) PRINTSTRING("LOADING PARTICLES") PRINTNL() ENDWHILE //Audio REGISTER_SCRIPT_WITH_AUDIO() //Relationships ADD_RELATIONSHIP_GROUP("FRIEND", relGroupFriendlyFire) ADD_RELATIONSHIP_GROUP("BUDDIES", relGroupBuddy) ADD_RELATIONSHIP_GROUP("ENEMIES", relGroupEnemy) ADD_RELATIONSHIP_GROUP("PASSIVE", relGroupPassive) //Buddy SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, relGroupBuddy, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, relGroupBuddy) //Friendly Fire SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, relGroupFriendlyFire) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, relGroupFriendlyFire, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, relGroupBuddy, relGroupFriendlyFire) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, relGroupFriendlyFire, relGroupBuddy) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, relGroupEnemy, relGroupFriendlyFire) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, relGroupFriendlyFire, relGroupEnemy) //Passive SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, relGroupPassive, relGroupBuddy) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, relGroupBuddy, relGroupPassive) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, relGroupPassive, RELGROUPHASH_PLAYER) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, RELGROUPHASH_PLAYER, relGroupPassive) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, relGroupPassive, relGroupEnemy) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, relGroupEnemy, relGroupPassive) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, relGroupPassive, relGroupFriendlyFire) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_IGNORE, relGroupFriendlyFire, relGroupPassive) //Enemy SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, relGroupBuddy, relGroupEnemy) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, relGroupEnemy, relGroupBuddy) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, relGroupEnemy) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, relGroupEnemy, RELGROUPHASH_PLAYER) #IF IS_DEBUG_BUILD IF NOT DOES_WIDGET_GROUP_EXIST(widGroup) widGroup = START_WIDGET_GROUP("MICHAEL 2") START_WIDGET_GROUP("Debug Print") ADD_WIDGET_BOOL("Audio", bDebugAudio) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Debug Michael Rail Death") ADD_WIDGET_BOOL("Skip to End", bDebugMichaelDeathSkip) ADD_WIDGET_BOOL("Do Not Fail", bDebugMichaelDeathDoNotFail) ADD_WIDGET_STRING("") ADD_WIDGET_BOOL("Skip to Start", bDebugMichaelSkipToStart) ADD_WIDGET_STRING("") ADD_WIDGET_BOOL("Skip to Capture", bDebugMichaelSkipToCapture) ADD_WIDGET_BOOL("Capture Point", bDebugMichaelCapturePoint) ADD_WIDGET_STRING("") ADD_WIDGET_BOOL("Pause/Play", bDebugMichaelPausePlay) ADD_WIDGET_STRING("") ADD_WIDGET_BOOL("Debug Time", bDebugMichaelDebugTime) ADD_WIDGET_STRING("") ADD_WIDGET_BOOL("Set Debug Cam", bDebugMichaelSetDebugCam) ADD_WIDGET_BOOL("Capture Debug Cam", bDebugMichaelCaptureDebugCam) ADD_WIDGET_STRING("") START_NEW_WIDGET_COMBO() ADD_TO_WIDGET_COMBO("NONE") ADD_TO_WIDGET_COMBO("SHAKE_CAM_LIGHT") ADD_TO_WIDGET_COMBO("SHAKE_CAM_MEDIUM") ADD_TO_WIDGET_COMBO("SHAKE_CAM_HEAVY") STOP_WIDGET_COMBO("Handcam Shake", iDebugMichaelHandCam) ADD_WIDGET_FLOAT_SLIDER("Handcam Amplitude", fDebugMichaelHandCam, 0.0, 10.0, 0.1) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Spline Camera Editor") START_NEW_WIDGET_COMBO() ADD_TO_WIDGET_COMBO("TIMED_SPLINE_CAMERA") ADD_TO_WIDGET_COMBO("ROUNDED_SPLINE_CAMERA") ADD_TO_WIDGET_COMBO("SMOOTHED_SPLINE_CAMERA") STOP_WIDGET_COMBO("Spline Camera Type", iSplineCamType_SCE) ADD_WIDGET_BOOL("Auto Update Spline Path", bAutoUpdateSpline_SCE) ADD_WIDGET_BOOL("Update Spline Path", bUpdateSpline_SCE) ADD_WIDGET_STRING("") START_WIDGET_GROUP("Rounded and Smoothed Splines") START_NEW_WIDGET_COMBO() ADD_TO_WIDGET_COMBO("NO_SMOOTH") ADD_TO_WIDGET_COMBO("SLOW_IN_SMOOTH") ADD_TO_WIDGET_COMBO("SLOW_OUT_SMOOTH") ADD_TO_WIDGET_COMBO("SLOW_IN_OUT_SMOOTH") STOP_WIDGET_COMBO("Smoothing Style", iSmoothingStyle_SCE) ADD_WIDGET_INT_SLIDER("Total Spline Duration (0 = Off)", iTotalDuration_SCE, 0, 100000, 1) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Nodes Edit") ADD_WIDGET_INT_SLIDER("Camera Index", iCurrentNode_SCE, 0, iTotalNodes_SCE - 1, 1) ADD_WIDGET_BOOL("Capture Current Camera as Node", bCaptureCurrentCamera_SCE) ADD_WIDGET_STRING("") ADD_WIDGET_FLOAT_SLIDER("Camera Position X", vCurrentNodePos_SCE.X, -10000.0, 10000.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Camera Position Y", vCurrentNodePos_SCE.Y, -10000.0, 10000.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Camera Position Z", vCurrentNodePos_SCE.Z, -10000.0, 10000.0, 0.1) ADD_WIDGET_STRING("") ADD_WIDGET_FLOAT_SLIDER("Camera Rotation X", vCurrentNodeRot_SCE.X, -10000.0, 10000.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Camera Rotation Y", vCurrentNodeRot_SCE.Y, -10000.0, 10000.0, 0.1) ADD_WIDGET_FLOAT_SLIDER("Camera Rotation Z", vCurrentNodeRot_SCE.Z, -10000.0, 10000.0, 0.1) ADD_WIDGET_STRING("") ADD_WIDGET_FLOAT_SLIDER("Camera FOV", fCurrentNodeFOV_SCE, 0.0, 130.0, 0.1) ADD_WIDGET_STRING("") ADD_WIDGET_INT_SLIDER("Camera Time", iCurrentNodeTime_SCE, 0, 100000, 1) ADD_WIDGET_STRING("") START_NEW_WIDGET_COMBO() ADD_TO_WIDGET_COMBO("NO_FLAGS") ADD_TO_WIDGET_COMBO("SMOOTH_ROT") ADD_TO_WIDGET_COMBO("SMOOTH_LENS_PARAMS") STOP_WIDGET_COMBO("CAM_SPLINE_NODE_FLAGS", iCurrentCAM_SPLINE_NODE_FLAGS_SCE) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Preview") ADD_WIDGET_BOOL("Preview Spline Camera", bRenderSplineCam_SCE) STOP_WIDGET_GROUP() START_WIDGET_GROUP("Debug Drawing") STOP_WIDGET_GROUP() STOP_WIDGET_GROUP() CREATE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS() STOP_WIDGET_GROUP() SET_LOCATES_HEADER_WIDGET_GROUP(widGroup) SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_TO_MICHAEL(scsSwitchCam_FranklinToMichael, piFranklinSwitch, piMichaelSwitch) SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_IN_CAR_TO_MICHAEL(scsSwitchCam_FranklinInCarToMichael, piFranklinSwitch, piMichaelSwitch) SETUP_SPLINE_CAM_NODE_ARRAY_MICHAEL_TO_FRANKLIN(scsSwitchCam_MichaelToFranklin, piFranklinSwitch, piMichaelSwitch) SETUP_SPLINE_CAM_NODE_ARRAY_FRANKLIN_GRAPPLE_TO_MICHAEL(scsSwitchCam_FranklinGrappleToMichael, piFranklinSwitch, piMichaelSwitch) CREATE_SPLINE_CAM_WIDGETS(scsSwitchCam_FranklinToMichael, "Franklin", "Michael", widGroup) CREATE_SPLINE_CAM_WIDGETS(scsSwitchCam_FranklinInCarToMichael, "Franklin Car", "Michael", widGroup) CREATE_SPLINE_CAM_WIDGETS(scsSwitchCam_MichaelToFranklin, "Michael", "Franklin", widGroup) CREATE_SPLINE_CAM_WIDGETS(scsSwitchCam_FranklinGrappleToMichael, "Frank Grapple", "Michael", widGroup) ENDIF #ENDIF //Variables // initSplineNodeList() initRailNodeList() //Traffic SET_VEHICLE_MODEL_IS_SUPPRESSED(GET_PLAYER_VEH_MODEL(CHAR_FRANKLIN), TRUE) SET_VEHICLE_MODEL_IS_SUPPRESSED(FELTZER2, TRUE) SET_VEHICLE_MODEL_IS_SUPPRESSED(COQUETTE, TRUE) //Taxi DISABLE_TAXI_HAILING(TRUE) SUPPRESS_EMERGENCY_CALLS() //Franklin's Vehicle IF NOT IS_REPLAY_START_VEHICLE_UNDER_SIZE_LIMIT(<<3.5, 10.0, 3.0>>, FALSE) OR (DOES_ENTITY_EXIST(vehFranklin) AND IS_THIS_MODEL_A_BOAT(GET_ENTITY_MODEL(vehFranklin))) OR (DOES_ENTITY_EXIST(vehFranklin) AND IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(vehFranklin))) OR (DOES_ENTITY_EXIST(vehFranklin) AND IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(vehFranklin))) OR (DOES_ENTITY_EXIST(vehFranklin) AND IS_THIS_MODEL_A_TRAIN(GET_ENTITY_MODEL(vehFranklin))) SAFE_DELETE_VEHICLE(vehFranklin) ENDIF IF NOT DOES_ENTITY_EXIST(vehFranklin) DELETE_ALL_SCRIPT_CREATED_PLAYER_VEHICLES(CHAR_FRANKLIN) WHILE NOT CREATE_PLAYER_VEHICLE(vehFranklin, CHAR_FRANKLIN, <<-24.1802, -1437.7277, 29.6542>>, 181.1853, TRUE, VEHICLE_TYPE_CAR) WAIT(0) ENDWHILE SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehFranklin, TRUE) ELSE IF NOT IS_ENTITY_DEAD(vehFranklin) SET_VEHICLE_POSITION(vehFranklin, <<-24.1802, -1437.7277, 29.6542>>, 181.1853) ENDIF ENDIF //Set player IF NOT IS_CUTSCENE_PLAYING() WHILE NOT SET_CURRENT_SELECTOR_PED(SELECTOR_PED_FRANKLIN) WAIT(0) ENDWHILE ENDIF //Dialogue ADD_PED_FOR_DIALOGUE(sPedsForConversation, 3, NULL, "MCH2GOON") //Minimap bRadar = TRUE IF SKIPPED_STAGE() SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF ENDIF ELSE ADVANCE_STAGE() ENDIF IF CLEANUP_STAGE() //Cleanup (Blips, peds, variables etc.) eMissionObjective = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) + 1) #IF IS_DEBUG_BUILD IF bAutoSkipping = FALSE #ENDIF //Your mission is being replayed IF IS_REPLAY_IN_PROGRESS() IF g_bShitskipAccepted = TRUE MISSION_REPLAY(INT_TO_ENUM(MissionReplay, GET_REPLAY_MID_MISSION_STAGE() + 1)) ELSE MISSION_REPLAY(INT_TO_ENUM(MissionReplay, GET_REPLAY_MID_MISSION_STAGE())) ENDIF ENDIF #IF IS_DEBUG_BUILD ENDIF #ENDIF //SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(replayStart), "initMission") ENDIF ENDPROC PROC cutIntro() IF INIT_STAGE() //Set player SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) //Cutscene IF bReplaySkip = FALSE AND bPreloaded = FALSE REQUEST_CUTSCENE("MIC_2_INT") ENDIF ADD_PED_FOR_DIALOGUE(sPedsForConversation, 8, NULL, "LESTER") //Trackify ENABLE_SECOND_SCREEN_TRACKIFY_APP(TRUE) SET_TRACKIFY_TARGET_VECTOR(<<997.1, -2178.9, 30.8>>) //Radar bRadar = FALSE //Audio LOAD_AUDIO(MIC2_START) IF SKIPPED_STAGE() SET_PED_POSITION(PLAYER_PED_ID(), <<-14.4239, -1446.2704, 29.6472>>, 120.3018, FALSE) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF ENDIF ELSE //Request Cutscene Variations - MIC_2_INT IF bReplaySkip = FALSE AND bPreloaded = FALSE IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() // IF DOES_ENTITY_EXIST(PLAYER_PED(CHAR_FRANKLIN)) // SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Franklin", PLAYER_PED(CHAR_FRANKLIN)) // ENDIF // // IF DOES_ENTITY_EXIST(PLAYER_PED(CHAR_TREVOR)) // AND NOT IS_PED_INJURED(PLAYER_PED(CHAR_TREVOR)) // SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Trevor", PLAYER_PED(CHAR_TREVOR)) // ENDIF SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_FRANKLIN, "Franklin") SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_TREVOR, "Trevor") ENDIF ENDIF SWITCH iCutsceneStage CASE 0 IF SAFE_START_CUTSCENE(1000.0) OR bReplaySkip = TRUE OR bPreloaded = TRUE IF HAS_THIS_CUTSCENE_LOADED("MIC_2_INT") OR bReplaySkip = TRUE OR bPreloaded = TRUE IF bReplaySkip = FALSE AND bPreloaded = FALSE REGISTER_ENTITY_FOR_CUTSCENE(pedIntro, "Knocked_Out_Ped", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, G_M_Y_FAMCA_01) IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_FRANKLIN)) ELSE REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], "Franklin", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_FRANKLIN)) ENDIF ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_TREVOR IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], "Trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_TREVOR)) ELSE REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], "Trevor", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_TREVOR)) ENDIF ENDIF SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) START_CUTSCENE() REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) WAIT_WITH_DEATH_CHECKS(0) //Clear Area CLEAR_AREA(vPlayerStart, 200.0, TRUE) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF SET_EVERYONE_IGNORE_PLAYER(PLAYER_ID(), TRUE) ENDIF SET_FRONTEND_RADIO_ACTIVE(FALSE) ADVANCE_CUTSCENE() ENDIF ENDIF BREAK CASE 1 IF DOES_ENTITY_EXIST(objDoorAnim) IF GET_CUTSCENE_TIME() > ROUND(10.000000 * 1000.0) OR WAS_CUTSCENE_SKIPPED() SAFE_DELETE_OBJECT(objDoorAnim) ENDIF ENDIF IF DOES_ENTITY_EXIST(objDoorReal) IF GET_CUTSCENE_TIME() > ROUND(10.000000 * 1000.0) OR WAS_CUTSCENE_SKIPPED() IF NOT IS_ENTITY_VISIBLE(objDoorReal) SET_ENTITY_VISIBLE(objDoorReal, TRUE) ENDIF SET_OBJECT_AS_NO_LONGER_NEEDED(objDoorReal) ENDIF ENDIF IF GET_CUTSCENE_TIME() > ROUND(10.000000 * 1000.0) IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(iFrontDoor) ADD_DOOR_TO_SYSTEM(iFrontDoor, V_ILEV_FA_FRONTDOOR, <<-14.8689, -1441.1821, 31.1932>>) ELSE IF DOOR_SYSTEM_GET_OPEN_RATIO(iFrontDoor) <> 0.0 OR DOOR_SYSTEM_GET_DOOR_STATE(iFrontDoor) != DOORSTATE_FORCE_LOCKED_THIS_FRAME DOOR_SYSTEM_SET_OPEN_RATIO(iFrontDoor, 0.0, FALSE, FALSE) DOOR_SYSTEM_SET_DOOR_STATE(iFrontDoor, DOORSTATE_FORCE_LOCKED_THIS_FRAME, FALSE, TRUE) ENDIF ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(pedIntro) ENTITY_INDEX entityIntro entityIntro = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Knocked_Out_Ped") IF DOES_ENTITY_EXIST(entityIntro) pedIntro = GET_PED_INDEX_FROM_ENTITY_INDEX(entityIntro) ENDIF ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) ENTITY_INDEX entityFranklin entityFranklin = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Franklin") IF DOES_ENTITY_EXIST(entityFranklin) sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = GET_PED_INDEX_FROM_ENTITY_INDEX(entityFranklin) ENDIF ENDIF ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_TREVOR IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) ENTITY_INDEX entityTrevor entityTrevor = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Trevor") IF DOES_ENTITY_EXIST(entityTrevor) sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = GET_PED_INDEX_FROM_ENTITY_INDEX(entityTrevor) ENDIF ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_CAMERA() REPLAY_STOP_EVENT() SET_GAMEPLAY_CAM_RELATIVE_HEADING(168.6 - GET_ENTITY_HEADING(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Knocked_Out_Ped") IF DOES_ENTITY_EXIST(pedIntro) AND NOT IS_ENTITY_DEAD(pedIntro) DISABLE_PED_PAIN_AUDIO(pedIntro, TRUE) // TASK_PLAY_ANIM_ADVANCED(pedIntro, sAnimDictMic2LeadOut, "mic_2_int_leadout_ped", <<-13.818, -1449.380, 30.608>>, <<0.0, 0.0, 180.0>>, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION | AF_HOLD_LAST_FRAME, 1.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // // FORCE_PED_AI_AND_ANIMATION_UPDATE(pedIntro) SET_PED_TO_RAGDOLL(pedIntro, 10000, 10000, TASK_RELAX) SET_ENTITY_HEALTH(pedIntro, 5) APPLY_DAMAGE_TO_PED(pedIntro, 500, FALSE) ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin") IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) SET_LABEL_AS_TRIGGERED("SwitchFX[MIC_2_INT]", TRUE) ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor") IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) SET_LABEL_AS_TRIGGERED("SwitchFX[MIC_2_INT]", TRUE) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) AND NOT IS_ENTITY_DEAD(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) // OPEN_SEQUENCE_TASK(seqMain) // IF WAS_CUTSCENE_SKIPPED() // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2LeadOut, "mic_2_int_leadout_trv", <<-13.818, -1449.380, 30.608>>, <<0.0, 0.0, 180.0>>, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 1.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // ELSE // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2LeadOut, "mic_2_int_leadout_trv", <<-13.818, -1449.380, 30.608>>, <<0.0, 0.0, 180.0>>, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.006, EULER_YXZ, AIK_DISABLE_LEG_IK) // ENDIF // TASK_WANDER_STANDARD(NULL, 92.8) // CLOSE_SEQUENCE_TASK(seqMain) // TASK_PERFORM_SEQUENCE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], seqMain) // CLEAR_SEQUENCE_TASK(seqMain) TASK_WANDER_STANDARD(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], 92.8) FORCE_PED_AI_AND_ANIMATION_UPDATE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) ENDIF ENDIF IF WAS_CUTSCENE_SKIPPED() SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, TRUE, FALSE) bCutsceneSkipped = TRUE ENDIF IF HAS_CUTSCENE_FINISHED() OR bReplaySkip = TRUE IF bReplaySkip = FALSE IF bCutsceneSkipped LOAD_SCENE_ADV(<<-14.0313, -1446.6488, 29.6462>>, 50.0) SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<-14.0313, -1446.6488, 29.6462>>, 157.2684) IF NOT DOES_ENTITY_EXIST(pedIntro) REQUEST_MODEL(G_M_Y_FamCA_01) WHILE NOT HAS_MODEL_LOADED(G_M_Y_FamCA_01) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE SPAWN_PED(pedIntro, G_M_Y_FamCA_01, <<-13.818, -1449.380, 30.608>>, 0.0) DISABLE_PED_PAIN_AUDIO(pedIntro, TRUE) TASK_PLAY_ANIM_ADVANCED(pedIntro, sAnimDictMic2LeadOut, "mic_2_int_leadout_ped", <<-13.818, -1449.380, 30.608>>, <<0.0, 0.0, 180.0>>, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION | AF_HOLD_LAST_FRAME, 1.0, EULER_YXZ, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(pedIntro) SET_PED_TO_RAGDOLL(pedIntro, 10000, 10000, TASK_RELAX) SET_ENTITY_HEALTH(pedIntro, 5) APPLY_DAMAGE_TO_PED(pedIntro, 500, FALSE) ENDIF IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) SPAWN_PLAYER(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], CHAR_TREVOR, <<-18.4660, -1452.3175, 29.5917>>, 93.9740) TASK_WANDER_STANDARD(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], 92.8) FORCE_PED_AI_AND_ANIMATION_UPDATE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) ENDIF CLEAR_AREA(<<-14.0313, -1446.6488, 29.6462>>, 100.0, TRUE) DO_SCREEN_FADE_IN(1000) #IF IS_DEBUG_BUILD PRINTLN("DO_SCREEN_FADE_IN") #ENDIF ENDIF bCutsceneSkipped = FALSE SET_EVERYONE_IGNORE_PLAYER(PLAYER_ID(), FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) WAIT_WITH_DEATH_CHECKS(0) //SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) //SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) IF HAS_LABEL_BEEN_TRIGGERED("SwitchFX[MIC_2_INT]") ANIMPOSTFX_PLAY("SwitchSceneFranklin", 0, FALSE) PLAY_SOUND_FRONTEND(-1, "Hit_1", "LONG_PLAYER_SWITCH_SOUNDS") ENDIF //Radar bRadar = TRUE DISABLE_CELLPHONE(FALSE) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED_ID(), "FRANKLIN") REPLAY_RECORD_BACK_FOR_TIME(0.0, 10.0) WHILE NOT PLAYER_CALL_CHAR_CELLPHONE(sPedsForConversation, CHAR_LESTER, sConversationBlock, "MCH2_PHO", CONV_PRIORITY_HIGH, TRUE, DISPLAY_SUBTITLES, DO_ADD_TO_BRIEF_SCREEN, FALSE) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE WHILE NOT IS_PHONE_ONSCREEN() WAIT_WITH_DEATH_CHECKS(0) ENDWHILE // SET_FINISHED_CALL_RETURNS_TO_HOMESCREEN(TRUE) ENDIF IF DOES_ENTITY_EXIST(objDoorAnim) SAFE_DELETE_OBJECT(objDoorAnim) ENDIF IF DOES_ENTITY_EXIST(objDoorReal) IF NOT IS_ENTITY_VISIBLE(objDoorReal) SET_ENTITY_VISIBLE(objDoorReal, TRUE) ENDIF SET_OBJECT_AS_NO_LONGER_NEEDED(objDoorReal) ENDIF //Cutscene REQUEST_CUTSCENE("MIC_2_MCS_1") //Interior IF bPinnedAbattoir = FALSE intAbattoir = GET_INTERIOR_AT_COORDS_WITH_TYPE(vPlayerStart, "v_abattoir") PIN_INTERIOR_IN_MEMORY(intAbattoir) ENDIF eSwitchCamState = SWITCH_CAM_REQUEST_ASSETS HANDLE_SWITCH_CAM_FRANKLIN_TO_MICHAEL(scsSwitchCam_FranklinToMichael) bFranklinPlayedCellAnim = FALSE bFranklinPlayAnimFromHangupPos = FALSE ADVANCE_CUTSCENE() ENDIF BREAK CASE 2 // IF IS_CELLPHONE_ON_HOMESCREEN() // OR NOT IS_PHONE_ONSCREEN() // LAUNCH_TRACKIFY_IMMEDIATELY() TEXT_LABEL_23 txtRoot txtRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL() IF (IS_THIS_CONVERSATION_ONGOING_OR_QUEUED("MCH2_PHO") AND ARE_STRINGS_EQUAL(txtRoot, "MCH2_PHO_7")) OR IS_CELLPHONE_ON_HOMESCREEN() OR NOT IS_PHONE_ONSCREEN() IF IS_CELLPHONE_ON_HOMESCREEN() OR NOT IS_PHONE_ONSCREEN() bFranklinPlayAnimFromHangupPos = TRUE ENDIF SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_LESTER, "MCH2_APPTXT", TXTMSG_UNLOCKED) ADVANCE_CUTSCENE() ENDIF BREAK CASE 3 // IF (IS_CELLPHONE_TRACKIFY_IN_USE() // AND TIMERA() > 4000) // OR (NOT IS_CELLPHONE_TRACKIFY_IN_USE() // AND TIMERA() > 1000) IF NOT IS_THIS_CONVERSATION_ONGOING_OR_QUEUED("MCH2_PHO") OR IS_CELLPHONE_ON_HOMESCREEN() OR NOT IS_PHONE_ONSCREEN() OR g_ConversationStatus = CONV_STATE_HANGUPAWAY DISABLE_CELLPHONE(TRUE) //DISABLE_CELLPHONE_THIS_FRAME_ONLY() IF NOT bFranklinPlayedCellAnim IF HAS_ANIM_DICT_LOADED("cellphone@") AND HAS_MODEL_LOADED(Prop_phone_ING_03) AND HAS_MODEL_LOADED(mn_FrankPhoneDisplay) IF NOT (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND GET_CAM_VIEW_MODE_FOR_CONTEXT(GET_CAM_ACTIVE_VIEW_MODE_CONTEXT()) = CAM_VIEW_MODE_FIRST_PERSON) oiFrankCellPhoneProp = CREATE_OBJECT(Prop_phone_ING_03, GET_ENTITY_COORDS(PLAYER_PED_ID())) oiFrankCellPhoneDisplay = CREATE_OBJECT(mn_FrankPhoneDisplay, GET_ENTITY_COORDS(PLAYER_PED_ID())) ATTACH_ENTITY_TO_ENTITY(oiFrankCellPhoneProp, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), (<<0.0, 0.0, 0.0>>), (<<0.0, 0.0, 0.0>>)) ATTACH_ENTITY_TO_ENTITY(oiFrankCellPhoneDisplay, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), v_FrankPhoneDisplayOffset, v_FrankPhoneDisplayRotation) //[MF] Depending on if Franklin has recieved the Trackify app yet or not, play a slightly different animation to better match his current state. IF bFranklinPlayAnimFromHangupPos OPEN_SEQUENCE_TASK(seqMain) TASK_PLAY_ANIM(NULL, "cellphone@", "cellphone_text_in", SLOW_BLEND_IN, NORMAL_BLEND_OUT, DEFAULT, AF_UPPERBODY) TASK_PLAY_ANIM(NULL, "cellphone@", "cellphone_text_read_base", NORMAL_BLEND_IN, DEFAULT, DEFAULT, AF_LOOPING | AF_UPPERBODY) // | AF_SECONDARY) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seqMain) CLEAR_SEQUENCE_TASK(seqMain) ELSE CLEAR_PED_SECONDARY_TASK(PLAYER_PED_ID()) OPEN_SEQUENCE_TASK(seqMain) TASK_PLAY_ANIM(NULL, "cellphone@", "cellphone_call_to_text", SLOW_BLEND_IN, NORMAL_BLEND_OUT, DEFAULT, AF_UPPERBODY) // | AF_SECONDARY) TASK_PLAY_ANIM(NULL, "cellphone@", "cellphone_text_read_base", NORMAL_BLEND_IN, DEFAULT, DEFAULT, AF_LOOPING | AF_UPPERBODY) // | AF_SECONDARY) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seqMain) CLEAR_SEQUENCE_TASK(seqMain) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID(), TRUE) ENDIF IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON SET_GAMEPLAY_ENTITY_HINT(oiFrankCellPhoneProp, VECTOR_ZERO, DEFAULT, DEFAULT_DWELL_TIME, DEFAULT_INTERP_IN_TIME / 4, DEFAULT_INTERP_OUT_TIME, HINTTYPE_NO_FOV) ENDIF ENDIF bFranklinPlayedCellAnim = TRUE ENDIF ENDIF ENDIF IF TIMERA() > 3000 AND NOT IS_THIS_CONVERSATION_ONGOING_OR_QUEUED("MCH2_PHO") AND bFranklinPlayedCellAnim // DO_SCREEN_FADE_OUT(500) // // WHILE NOT IS_SCREEN_FADED_OUT() // WAIT_WITH_DEATH_CHECKS(0) // ENDWHILE HIDE_CELLPHONE_SIGNIFIERS_FOR_CUTSCENE(TRUE) DISABLE_CELLPHONE(TRUE) ADVANCE_STAGE() ENDIF BREAK ENDSWITCH DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_PC) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_SECONDARY) SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_DUCK) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER) SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisablePlayerAutoVaulting, TRUE) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_WEAPON) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_PREV_WEAPON) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK1) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK2) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_BLOCK) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK1) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK2) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_BLOCK) //Request Cutscene Variations - MIC_2_MCS_1 IF iCutsceneStage > 1 IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_MICHAEL, "Michael") //SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED(CHAR_MICHAEL)) // SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_HAIR, g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iDrawableVariation[PED_COMP_HAIR], g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iTextureVariation[PED_COMP_HAIR]) // SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_HEAD, g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iDrawableVariation[PED_COMP_HEAD], g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iTextureVariation[PED_COMP_HEAD]) // SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_BERD, g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iDrawableVariation[PED_COMP_BERD], g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iTextureVariation[PED_COMP_BERD]) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_TORSO, 19, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_LEG, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_HAND, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_FEET, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_TEETH, 0, 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) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_JBIB, 0, 0) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_HEAD, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_EYES, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_EARS, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_MOUTH, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_LEFT_HAND, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_RIGHT_HAND, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_LEFT_WRIST, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_RIGHT_WRIST, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_HIP, -1) // SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Chinese_gunman", sEnemyIntroCut[0].pedIndex) ENDIF ENDIF ENDIF IF CLEANUP_STAGE() //Cleanup (Blips, peds, variables etc.) REMOVE_TEXT_MESSAGE_FEED_ENTRY("MCH2_APPTXT") DELETE_TEXT_MESSAGE_BY_LABEL_FROM_ALL_PLAYER_CHARACTERS("MCH2_APPTXT") CLEAR_AUTO_LAUNCH_TO_TEXT_MESSAGE_APP_FOR_THIS_SP_CHARACTER(CHAR_FRANKLIN) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 8) IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN SET_PED_POSITION(PLAYER_PED_ID(), <<-14.9012, -1446.1061, 29.6447>>, 53.1046) IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], CHAR_FRANKLIN, <<-24.2141, -1448.7147, 29.6236>>, 150.7758) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE ENDIF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) SET_PED_POSITION(PLAYER_PED_ID(), <<-24.2141, -1448.7147, 29.6236>>, 150.7758) ENDIF ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED_ID(), "FRANKLIN") IF NOT HAS_THIS_CUTSCENE_LOADED("MIC_2_MCS_1") REMOVE_CUTSCENE() WHILE HAS_CUTSCENE_LOADED() WAIT_WITH_DEATH_CHECKS(0) ENDWHILE ENDIF HANG_UP_AND_PUT_AWAY_PHONE() SET_FRONTEND_RADIO_ACTIVE(TRUE) SET_EVERYONE_IGNORE_PLAYER(PLAYER_ID(), FALSE) //Hint STOP_GAMEPLAY_HINT() eMissionObjective = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) + 1) ENDIF ENDPROC PROC findMichael() IF INIT_STAGE() //Set player IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) AND bReplaySkip = FALSE SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) ENDIF //Trackify ENABLE_SECOND_SCREEN_TRACKIFY_APP(TRUE) SET_TRACKIFY_TARGET_VECTOR(<<997.1, -2178.9, 30.8>>) //Uncapped bSetUncapped = TRUE //Interior intAbattoir = GET_INTERIOR_AT_COORDS_WITH_TYPE(vPlayerStart, "v_abattoir") PIN_INTERIOR_IN_MEMORY(intAbattoir) WHILE NOT IS_INTERIOR_READY(intAbattoir) PRINTLN("PINNING INTERIOR...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE bPinnedAbattoir = TRUE MAKE_PICKUPS() // VECTOR vFranklinPosition = <<-14.4239, -1446.2704, 29.6472>> // FLOAT fFranklinHeading = 120.3018 // // IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN)), <<-14.4239, -1446.2704, 29.6472>>) < 50.0 // vFranklinPosition = GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN)) // fFranklinHeading = GET_ENTITY_HEADING(PLAYER_PED(CHAR_FRANKLIN)) // ENDIF // // SET_PED_POSITION(PLAYER_PED_ID(), vPlayerStart, fPlayerStart, FALSE) //Radar bRadar = FALSE //Set player IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL // SET_PED_POSITION(PLAYER_PED_ID(), <<-14.9012, -1446.1061, 29.6447>>, 53.1046) IF NOT DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) WHILE NOT CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CHAR_MICHAEL, vPlayerStart, fPlayerStart) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE ENDIF // MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) // TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) // // SET_PED_POSITION(PLAYER_PED_ID(), vPlayerStart, fPlayerStart) ENDIF CLEAR_AREA(vPlayerStart, 500.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<-26.816481, -1446.621826, 44.654160>> - <<30.0, 30.0, 30.0>>, <<-26.816481, -1446.621826, 44.654160>> + <<30.0, 30.0, 30.0>>) CLEAR_AREA(<<941.6578, -2181.0586, 29.5517>>, 1000.0, TRUE) ADD_SCENARIO_BLOCKING_AREA(<<966.108276, -2149.353271, 55.977444>> - <<60.0, 70.0, 30.0>>, <<966.108276, -2149.353271, 55.977444>> + <<60.0, 70.0, 30.0>>) RETAIN_ENTITY_IN_INTERIOR(PLAYER_PED(CHAR_MICHAEL), intAbattoir) SET_PED_POSITION(PLAYER_PED(CHAR_MICHAEL), vPlayerStart, fPlayerStart, FALSE) SET_PED_TARGET_LOSS_RESPONSE(PLAYER_PED(CHAR_MICHAEL), TLR_NEVER_LOSE_TARGET) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_MICHAEL), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_MICHAEL), PCF_RunFromFiresAndExplosions, FALSE) REMOVE_ALL_PED_WEAPONS(PLAYER_PED(CHAR_MICHAEL)) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_UNARMED, TRUE) // SET_PED_DEFAULT_COMPONENT_VARIATION(PLAYER_PED(CHAR_MICHAEL)) WHILE NOT SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED(CHAR_MICHAEL), COMP_TYPE_OUTFIT, OUTFIT_P0_DEFAULT, FALSE) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE SET_PED_COMPONENT_VARIATION(PLAYER_PED(CHAR_MICHAEL), PED_COMP_TORSO, 19, 0) WHILE NOT HAVE_ALL_STREAMING_REQUESTS_COMPLETED(PLAYER_PED(CHAR_MICHAEL)) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE //Franklin //CREATE_PLAYER_PED_ON_FOOT(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], CHAR_FRANKLIN, vFranklinPosition, fFranklinHeading) //<<-24.2141, -1448.7147, 29.6236>>, 150.7758) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PUMPSHOTGUN, 50) // GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE , 200, TRUE) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_UNARMED, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_FRANKLIN), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_RunFromFiresAndExplosions, FALSE) //Friendly Fire Relationship Group IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupFriendlyFire) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, NULL, "MICHAEL") //PLAYER_PED(CHAR_MICHAEL) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Rail bOkToHangFromHook = FALSE bOkToMoveRail = FALSE bOkToSwitch = FALSE SET_RAIL_FINAL_NODE(40) //Hook objHook = CREATE_OBJECT_NO_OFFSET(PROP_LD_HOOK, sRailNodes[0].vPos) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(objHook, FALSE) FREEZE_ENTITY_POSITION(objHook, TRUE) RETAIN_ENTITY_IN_INTERIOR(objHook, intAbattoir) objChain = CREATE_OBJECT_NO_OFFSET(PROP_CS_LEG_CHAIN_01, GET_ENTITY_COORDS(objHook) + <<0.0, 0.0, 0.01>>) ATTACH_ENTITY_TO_ENTITY(objChain, objHook, -1, vChainOffset, vChainRotation) objPadlock = CREATE_OBJECT_NO_OFFSET(PROP_CS_PADLOCK, GET_ENTITY_COORDS(objHook) + <<0.0, 0.0, -0.01>>) ATTACH_ENTITY_TO_ENTITY(objPadlock, objHook, -1, vPadlockOffset, vPadlockRotation) WHILE NOT DOES_ENTITY_HAVE_PHYSICS(objHook) OR NOT HAS_COLLISION_FOR_MODEL_LOADED(PROP_LD_HOOK) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE SET_ENTITY_COORDS_NO_OFFSET(objHook, sRailNodes[0].vPos) SET_ENTITY_ROTATION(objHook, sRailNodes[0].vRot) FREEZE_ENTITY_POSITION(objHook, TRUE) SET_OBJECT_PHYSICS_PARAMS(objHook, fHookMass, -1.0, <<-1.0, -1.0, -1.0>>, <<-1.0, -1.0, -1.0>>) SET_ENTITY_DYNAMIC(objHook, TRUE) //Attach Michael to hook ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, vMichaelAttachOffset, <<0.0, 0.0, 180.0>>, TRUE, TRUE) WHILE NOT IS_ENTITY_ATTACHED(PLAYER_PED(CHAR_MICHAEL)) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_b", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING) //TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) SET_PED_RESET_FLAG(PLAYER_PED(CHAR_MICHAEL), PRF_AllowUpdateIfNoCollisionLoaded, TRUE) //Enemy Intro (Inside) createEnemy(sEnemyIntroCut[0], <<996.9860, -2185.0713, 28.9775>>, 9.6956, WEAPONTYPE_SMG, CSB_CHIN_GOON) //Original Position: <<991.6176, -2171.4707, 29.2246>>, 270.7684 SET_PED_DEFAULT_COMPONENT_VARIATION(sEnemyIntroCut[0].pedIndex) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sEnemyIntroCut[0].pedIndex, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(CSB_CHIN_GOON) createEnemy(sEnemyIntroCut[1], <<992.2509, -2175.3486 -0.4, 28.9769>>, 242.3, WEAPONTYPE_PISTOL, G_M_M_CHIGOON_01) createEnemy(sEnemyIntroCut[2], <<988.6379, -2170.6748, 29.2006>>, 352.4113, WEAPONTYPE_PISTOL) createEnemy(sEnemyIntroCut[3], <<977.6, -2166.4, 30.4104 + 0.25>>, 70.2, WEAPONTYPE_UNARMED) createEnemy(sEnemyIntroCut[4], <<970.7029, -2169.6233, 28.4637>>, 170.9878, WEAPONTYPE_UNARMED, G_M_M_CHIGOON_01) createEnemy(sEnemyIntroCut[5], <<977.9589, -2156.2410, 30.0791>>, 125.1269, WEAPONTYPE_UNARMED, G_M_M_CHIGOON_01) createEnemy(sEnemyIntroCut[6], <<984.0753, -2158.3696, 30.0793>>, 219.8727, WEAPONTYPE_PISTOL) createEnemy(sEnemyIntroCut[7], <<997.6616, -2157.8818, 28.4766>>, 265.7728, WEAPONTYPE_MICROSMG, G_M_M_CHIGOON_01) createEnemy(sEnemyIntroCut[8], <<999.5024, -2145.7878, 28.4765>>, 275.3511, WEAPONTYPE_SMG) //Patrol: <<969.6483, -2160.4150, 28.4750>>, 178.3322 createEnemy(sEnemyIntroCut[9], <<969.2003, -2164.1885, 28.4756>>, 187.7889, WEAPONTYPE_SMG, G_M_M_CHIGOON_01) //Patrol: <<997.3615, -2168.5959, 28.4752>>, 358.6634 INT i REPEAT COUNT_OF(sEnemyIntroCut) i IF DOES_ENTITY_EXIST(sEnemyIntroCut[i].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemyIntroCut[i].pedIndex, intAbattoir) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyIntroCut[i].pedIndex, TRUE) ENDIF ENDREPEAT #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemyIntroCut) i IF NOT IS_PED_INJURED(sEnemyIntroCut[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemyIntroCut[i].pedIndex, "IntroCut ", i) sEnemyIntroCut[i].sDebugName = CONCATENATE_STRINGS("IntroCut ", GET_STRING_FROM_INT(i)) ENDIF ENDREPEAT #ENDIF //Enemy (Outside) createEnemy(sEnemyOutside[0], <<951.0605, -2184.5310, 29.5517>>, 24.5982, WEAPONTYPE_PISTOL) SET_PED_COMPONENT_VARIATION(sEnemyOutside[0].pedIndex, PED_COMP_HAIR, 2, 0) SET_PED_COMBAT_ATTRIBUTES(sEnemyOutside[0].pedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemyOutside[0].pedIndex, CA_OPEN_COMBAT_WHEN_DEFENSIVE_AREA_IS_REACHED, TRUE) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyOutside[0].pedIndex, <<953.1196, -2190.9177, 29.5518>>, 2.0) //SET_PED_RELATIONSHIP_GROUP_HASH(sEnemyOutside[0].pedIndex, relGroupPassive) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyOutside[0].pedIndex, TRUE) SET_LABEL_AS_TRIGGERED("sEnemyOutside[0]Blocking", TRUE) // createEnemy(sEnemyOutside[1], <<962.5493, -2166.0269, 36.0140>>, 179.9051, WEAPONTYPE_PISTOL) // sEnemyOutside[1].vLocate[0] = <<948.549438,-2178.816895,32.051651>> sEnemyOutside[1].vLocSize[0] = <<12.0, 10.0 ,2.5>> sEnemyOutside[1].eAdvanceStyle[0] = GUN_TO_POINT sEnemyOutside[1].vPoint[0] = <<955.2181, -2169.3628, 35.9913>> createEnemy(sEnemyOutside[2], <<951.1171, -2183.3445, 29.5517>>, 186.0809, WEAPONTYPE_PISTOL) SET_PED_COMBAT_ATTRIBUTES(sEnemyOutside[2].pedIndex, CA_OPEN_COMBAT_WHEN_DEFENSIVE_AREA_IS_REACHED, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemyOutside[2].pedIndex, CA_MOVE_TO_LOCATION_BEFORE_COVER_SEARCH, TRUE) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyOutside[2].pedIndex, <<954.4744, -2186.4724, 29.5518>>, 2.0) //SET_PED_RELATIONSHIP_GROUP_HASH(sEnemyOutside[2].pedIndex, relGroupPassive) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyOutside[2].pedIndex, TRUE) SET_LABEL_AS_TRIGGERED("sEnemyOutside[2]Blocking", TRUE) #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemyOutside) i IF NOT IS_PED_INJURED(sEnemyOutside[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemyOutside[i].pedIndex, "Outside ", i) sEnemyOutside[i].sDebugName = CONCATENATE_STRINGS("Outside ", GET_STRING_FROM_INT(i)) ENDIF ENDREPEAT #ENDIF //Particles //Cam IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) ENDIF #IF IS_DEBUG_BUILD IF bAutoSkipping = FALSE #ENDIF IF NOT bReplaySkip REQUEST_CUTSCENE("MIC_2_MCS_1") ENDIF //SET_RADIO_AUTO_UNFREEZE(TRUE) #IF IS_DEBUG_BUILD ENDIF #ENDIF //[MF] Setup Franklin To Michael switch so it's ready to start playback. eSwitchCamState = SWITCH_CAM_SETUP_SPLINE IF SKIPPED_STAGE() SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<-24.2141, -1448.7147, 29.6236>>, 150.7758) MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) SET_PED_POSITION(PLAYER_PED_ID(), vPlayerStart, fPlayerStart) IF NOT bReplaySkip LOAD_SCENE_ADV(<<997.8495, -2178.1909, 31.5116>>, 40.0) ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) //Audio PLAY_AUDIO(MIC2_FIND_MIKE_RT) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) IF g_bShitskipAccepted = TRUE bReplaySkip = FALSE ENDIF // IF bReplaySkip = FALSE // IF IS_SCREEN_FADED_OUT() // DO_SCREEN_FADE_IN(500) // ENDIF // ENDIF ENDIF ELSE //Request Cutscene Variations - MIC_2_MCS_1 IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() SET_STORED_PLAYER_PED_CUTSCENE_VARIATIONS(CHAR_MICHAEL, "Michael") //SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED(CHAR_MICHAEL)) // SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_HAIR, g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iDrawableVariation[PED_COMP_HAIR], g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iTextureVariation[PED_COMP_HAIR]) // SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_HEAD, g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iDrawableVariation[PED_COMP_HEAD], g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iTextureVariation[PED_COMP_HEAD]) // SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_BERD, g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iDrawableVariation[PED_COMP_BERD], g_savedGlobals.sPlayerData.sInfo.sVariations[CHAR_MICHAEL].iTextureVariation[PED_COMP_BERD]) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_TORSO, 19, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_LEG, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_HAND, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_FEET, 0, 0) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_TEETH, 0, 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) SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_JBIB, 0, 0) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_HEAD, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_EYES, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_EARS, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_MOUTH, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_LEFT_HAND, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_RIGHT_HAND, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_LEFT_WRIST, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_RIGHT_WRIST, -1) SET_CUTSCENE_PED_PROP_VARIATION("Michael", ANCHOR_HIP, -1) // SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Chinese_gunman", sEnemyIntroCut[0].pedIndex) ENDIF // IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) // IF NOT SAFE_IS_PLAYER_CONTROL_ON() // SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) // ENDIF // ENDIF // // IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) // SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) // ENDIF //Rail // IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL // AND NOT IS_PLAYER_SWITCH_IN_PROGRESS() // AND NOT (DOES_CAM_EXIST(sCamDetails.camID) // AND (IS_CAM_ACTIVE(sCamDetails.camID) // OR IS_CAM_RENDERING(sCamDetails.camID))) // SET_RAIL_FINAL_NODE(40) // ELSE // SET_RAIL_FINAL_NODE(31) // ENDIF // IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL // IF iCutsceneStage > 0 AND iCutsceneStage < 3 // IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY() // CLEAR_TEXT() // SET_LABEL_AS_TRIGGERED("MCH2_INT1", TRUE) // SET_LABEL_AS_TRIGGERED("MCH2_INT2", TRUE) // SET_LABEL_AS_TRIGGERED("INTRO2", TRUE) // // SETTIMERA(7000) // // iCutsceneStage = 3 // ENDIF // ENDIF // ENDIF SWITCH iCutsceneStage CASE 0 SET_PED_RESET_FLAG(PLAYER_PED(CHAR_MICHAEL), PRF_AllowUpdateIfNoCollisionLoaded, TRUE) IF bReplaySkip = TRUE OR HAS_THIS_CUTSCENE_LOADED("MIC_2_MCS_1") OVERRIDE_LODSCALE_THIS_FRAME(1.0) IF NOT IS_SCREEN_FADED_OUT() AND NOT HAS_LABEL_BEEN_TRIGGERED("SHAPETEST[RAN]") AND NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) BOOL bShapeTest SHAPETEST_INDEX shapeTest SHAPETEST_STATUS shapeTestStatus INT bShapeTestHitSomething VECTOR vShapeTestPos VECTOR vShapeTestNormal ENTITY_INDEX shapeTestEntityIndex shapeTest = START_SHAPE_TEST_CAPSULE(GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN)), GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED(CHAR_FRANKLIN), <<0.0, 2.5, 0.0>>), 0.5, DEFAULT, PLAYER_PED(CHAR_FRANKLIN)) PRINTLN("SHAPETEST[STARTING]") WHILE NOT bShapeTest shapeTestStatus = GET_SHAPE_TEST_RESULT(shapeTest, bShapeTestHitSomething, vShapeTestPos, vShapeTestNormal, shapeTestEntityIndex) PRINTLN("SHAPETEST[RUNNING]") IF shapeTestStatus != SHAPETEST_STATUS_RESULTS_NOTREADY IF shapeTestStatus = SHAPETEST_STATUS_RESULTS_READY PRINTLN("SHAPETEST[SHAPETEST_STATUS_RESULTS_READY]") ELIF shapeTestStatus = SHAPETEST_STATUS_NONEXISTENT PRINTLN("SHAPETEST[SHAPETEST_STATUS_NONEXISTENT]") ENDIF PRINTLN("SHAPETEST[HitSomething=", bShapeTestHitSomething, "]") PRINTLN("SHAPETEST[shapeTestEntityIndex=", DOES_ENTITY_EXIST(shapeTestEntityIndex), "]") IF bShapeTestHitSomething = 1 OR DOES_ENTITY_EXIST(shapeTestEntityIndex) PRINTLN("SHAPETEST[TRUE]") SET_LABEL_AS_TRIGGERED("SHAPETEST[TRUE]", TRUE) ENDIF bShapeTest = !bShapeTest SET_LABEL_AS_TRIGGERED("SHAPETEST[RAN]", TRUE) ENDIF WAIT_WITH_DEATH_CHECKS(0) ENDWHILE ENDIF IF NOT IS_SCREEN_FADED_OUT() IF (IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) AND bFrankToMikeSwitchCam2 = FALSE) OR bFrankToMikeSwitchCam = TRUE bFrankToMikeSwitchComplete = HANDLE_SWITCH_CAM_FRANKLIN_TO_MICHAEL(scsSwitchCam_FranklinInCarToMichael) bFrankToMikeSwitchCam = TRUE ELSE bFrankToMikeSwitchComplete = HANDLE_SWITCH_CAM_FRANKLIN_TO_MICHAEL(scsSwitchCam_FranklinToMichael) bFrankToMikeSwitchCam2 = TRUE ENDIF ENDIF IF IS_SCREEN_FADED_OUT() //[MF] Assuming we're starting from a z-skip or other case where we don't want to play the switch cam. OR bFrankToMikeSwitchComplete //[MF] Incase we're transitioning from a Z-skip IF IS_SCREEN_FADED_OUT() //[MF]Put Franklin in his car IF DOES_ENTITY_EXIST(vehFranklin) AND NOT IS_ENTITY_DEAD(vehFranklin) AND GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF NOT IS_PED_IN_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) SET_PED_INTO_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) PRINTLN("SET FRANKLIN INTO HIS CAR") ENDIF ENDIF ENDIF SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) IF NOT bReplaySkip IF NOT IS_CUTSCENE_PLAYING() DETACH_ENTITY(PLAYER_PED(CHAR_MICHAEL)) DETACH_ENTITY(objChain) DETACH_ENTITY(objPadlock) REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED(CHAR_MICHAEL), "Michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_MICHAEL), CEO_PRESERVE_FACE_BLOOD_DAMAGE | CEO_PRESERVE_BODY_BLOOD_DAMAGE) REGISTER_ENTITY_FOR_CUTSCENE(sEnemyIntroCut[0].pedIndex, "Chinese_gunman", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(objHook, "Meathook", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(objChain, "Leg_Chain", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(objPadlock, "Padlock", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) // REPLAY_RECORD_BACK_FOR_TIME(3.0) START_CUTSCENE() REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) ENDIF ENDIF SAFE_DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) //Audio PLAY_AUDIO(MIC2_START) bFrankToMikeSwitchComplete = FALSE SET_ENTITY_LOAD_COLLISION_FLAG(PLAYER_PED(CHAR_FRANKLIN), TRUE) ADVANCE_CUTSCENE() ELSE IF DOES_CAM_EXIST(scsSwitchCam_FranklinToMichael.ciSpline) IF GET_CAM_SPLINE_NODE_INDEX(scsSwitchCam_FranklinToMichael.ciSpline) > scsSwitchCam_FranklinToMichael.iCamSwitchFocusNode IF DOES_ENTITY_EXIST(vehFranklin) AND NOT IS_ENTITY_DEAD(vehFranklin) AND GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF NOT IS_PED_IN_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) SET_PED_INTO_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) PRINTLN("SET FRANKLIN INTO HIS CAR") ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 1 SET_PED_RESET_FLAG(PLAYER_PED(CHAR_MICHAEL), PRF_AllowUpdateIfNoCollisionLoaded, TRUE) //Fade IF NOT WAS_CUTSCENE_SKIPPED() AND bReplaySkip = FALSE IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF ENDIF //[MF] destroy old switch cam if it still exists IF DOES_SWITCH_CAM_EXIST(scsSwitchCam_FranklinToMichael) DESTROY_SWITCH_CAM(scsSwitchCam_FranklinToMichael) ENDIF IF CAN_SET_EXIT_STATE_FOR_CAMERA(TRUE) IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) ENDIF SET_CAM_ACTIVE(camMain, TRUE) SET_CAM_PARAMS(camMain, <<995.944946,-2170.087158,31.105616>>, <<1.338266,0.000000,-174.621979>>, 26.994741) RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) REPLAY_STOP_EVENT() REPLAY_RECORD_BACK_FOR_TIME(0.0, 8.0, REPLAY_IMPORTANCE_HIGHEST) ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Chinese_gunman") OR bReplaySkip = TRUE IF DOES_ENTITY_EXIST(sEnemyIntroCut[0].pedIndex) IF NOT IS_PED_INJURED(sEnemyIntroCut[0].pedIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("UpdateChineseGunman") IF NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[0].pedIndex, sAnimDictMic2Smoking, "smoking_loop") SET_PED_POSITION(sEnemyIntroCut[0].pedIndex, <<996.9860, -2185.0713, 28.9775>>, 9.6956) //SET_PED_ON_GROUND_PROPERLY(sEnemyIntroCut[0].pedIndex) TASK_PLAY_ANIM(sEnemyIntroCut[0].pedIndex, sAnimDictMic2Smoking, "smoking_loop", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING) SET_CURRENT_PED_WEAPON(sEnemyIntroCut[0].pedIndex, WEAPONTYPE_UNARMED, TRUE) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemyIntroCut[0].pedIndex) SET_LABEL_AS_TRIGGERED("UpdateChineseGunman", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Meathook") OR bReplaySkip = TRUE SET_ENTITY_COORDS_NO_OFFSET(objHook, sRailNodes[0].vPos) SET_ENTITY_ROTATION(objHook, sRailNodes[0].vRot) FREEZE_ENTITY_POSITION(objHook, TRUE) FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(objHook) IF sfxRail = -1 sfxRail = GET_SOUND_ID() PLAY_SOUND_FROM_ENTITY(sfxRail, "Rail_Loop_Skip_Start", objHook, "MICHAEL_2_SOUNDS") ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Leg_Chain") ATTACH_ENTITY_TO_ENTITY(objChain, objHook, -1, vChainOffset, vChainRotation) FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(objChain) ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Leg_Chain^1") ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Padlock") ATTACH_ENTITY_TO_ENTITY(objPadlock, objHook, -1, vPadlockOffset, vPadlockRotation) FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(objPadlock) ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael") OR bReplaySkip = TRUE //Attach Michael to hook ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, vMichaelAttachOffset, <<0.0, 0.0, 180.0>>, TRUE, TRUE) TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_c", INSTANT_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_HOLD_LAST_FRAME | AF_NOT_INTERRUPTABLE, 0.5) //TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) bOkToHangFromHook = TRUE bOkToMoveRail = TRUE bOkToSwitch = TRUE bDoMikeToFranklinCustomSwitch = TRUE UPDATE_RAIL_MOVE() PRINTLN("Michael EXIT STATE") ENDIF IF HAS_CUTSCENE_FINISHED() OR bReplaySkip = TRUE eSwitchCamState = SWITCH_CAM_REQUEST_ASSETS HANDLE_SWITCH_CAM_MICHAEL_TO_FRANKLIN(scsSwitchCam_MichaelToFranklin) eSwitchCamState = SWITCH_CAM_SETUP_SPLINE IF DOES_ENTITY_EXIST(sEnemyIntroCut[0].pedIndex) IF NOT IS_PED_INJURED(sEnemyIntroCut[0].pedIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("UpdateChineseGunman") IF NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[0].pedIndex, sAnimDictMic2Smoking, "smoking_loop") SET_PED_POSITION(sEnemyIntroCut[0].pedIndex, <<996.9860, -2185.0713, 28.9775>>, 9.6956) //SET_PED_ON_GROUND_PROPERLY(sEnemyIntroCut[0].pedIndex) TASK_PLAY_ANIM(sEnemyIntroCut[0].pedIndex, sAnimDictMic2Smoking, "smoking_loop", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING) SET_CURRENT_PED_WEAPON(sEnemyIntroCut[0].pedIndex, WEAPONTYPE_UNARMED, TRUE) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemyIntroCut[0].pedIndex) SET_LABEL_AS_TRIGGERED("UpdateChineseGunman", TRUE) ENDIF ENDIF ENDIF ENDIF SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) HIDE_CELLPHONE_SIGNIFIERS_FOR_CUTSCENE(FALSE) DISABLE_CELLPHONE(FALSE) bRadar = TRUE ADVANCE_CUTSCENE() ENDIF BREAK CASE 2 ADVANCE_CUTSCENE() BREAK CASE 3 //Stats INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(MIC2_MIKE_RESCUE_TIMER) ADVANCE_CUTSCENE() BREAK CASE 4 ADVANCE_CUTSCENE() BREAK CASE 5 IF DOES_CAM_EXIST(camMain) SET_CAM_PARAMS(camMain, //Camera 1 GET_INTERP_POINT_VECTOR(<<995.944946,-2170.087158,31.105616>>, <<996.894836,-2169.905273,31.103991>>, 0, 8000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<1.338266,0.000000,-174.621979>>, <<-1.324255,0.000000,-165.109879>>, 0, 8000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(26.994741, 26.994741, 0, 8000 * 2, TO_FLOAT(TIMERA()))) ENDIF IF TIMERA() > 500 IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF ENDIF IF TIMERA() > 8000 * 2 IF HAS_ANIM_DICT_LOADED("shake_cam_all@") ANIMATED_SHAKE_CAM(camMain, "shake_cam_all@", "light", "", 1.0) ENDIF ADVANCE_CUTSCENE() ENDIF BREAK CASE 6 SET_CAM_PARAMS(camMain, //Camera 2 - Range = (0 to 2000 * 2) GET_INTERP_POINT_VECTOR(<<998.115906, -2178.469971, 31.164551>>, <<998.277161, -2174.949463, 31.030722>>, 0, (2000 * 2) + (11000 * 2), TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<-2.174487, 0.0, -2.626945>>, <<-0.057604, 0.0, -2.078272>>, 0, (2000 * 2) + (11000 * 2), TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(36.612831, 36.612831, 0, (2000 * 2) + (11000 * 2), TO_FLOAT(TIMERA()))) IF TIMERA() > 2000 * 2 IF NOT IS_PED_INJURED(sEnemyIntroCut[0].pedIndex) OPEN_SEQUENCE_TASK(seqMain) TASK_CLEAR_LOOK_AT(NULL) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<982.7635, -2169.8921, 29.6195>>, 0.5, -1, 0.5) TASK_ACHIEVE_HEADING(NULL, 1.9956) TASK_LOOK_AT_ENTITY(NULL, PLAYER_PED(CHAR_MICHAEL), -1) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyIntroCut[0].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) ENDIF IF NOT IS_PED_INJURED(sEnemyIntroCut[1].pedIndex) OPEN_SEQUENCE_TASK(seqMain) TASK_CLEAR_LOOK_AT(NULL) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<983.6574, -2169.6614, 29.6194>>, 0.5, -1, 0.5) TASK_ACHIEVE_HEADING(NULL, 1.9956) TASK_LOOK_AT_ENTITY(NULL, PLAYER_PED(CHAR_MICHAEL), -1) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyIntroCut[1].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) ENDIF ADVANCE_CUTSCENE() ENDIF BREAK CASE 7 SET_CAM_PARAMS(camMain, //Camera 2 cont. - Range = (2000 * 2 to 11000 * 2) GET_INTERP_POINT_VECTOR(<<998.115906, -2178.469971, 31.164551>>, <<998.277161, -2174.949463, 31.030722>>, 0, (2000 * 2) + (11000 * 2), TO_FLOAT(TIMERA() + (2000 * 2))), GET_INTERP_POINT_VECTOR(<<-2.174487, 0.0, -2.626945>>, <<-0.057604, 0.0, -2.078272>>, 0, (2000 * 2) + (11000 * 2), TO_FLOAT(TIMERA() + (2000 * 2))), GET_INTERP_POINT_FLOAT(36.612831, 36.612831, 0, (2000 * 2) + (11000 * 2), TO_FLOAT(TIMERA() + (2000 * 2)))) IF TIMERA() > 11000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 8 SET_CAM_PARAMS(camMain, //Camera 3 GET_INTERP_POINT_VECTOR(<<999.704102,-2170.810303,31.299297>>, <<995.043762,-2170.193115,30.922483>>, 0, 11000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<-4.819607,0.134012,73.641083>>, <<-1.248098,0.134012,75.161530>>, 0, 11000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(49.755203, 49.755203, 0, 11000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 11000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 9 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<992.238770,-2172.430420,31.089552>>, <<988.114502,-2171.906006,31.098305>>, 0, 9000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<-3.338497,0.120910,-7.401173>>, <<-3.338496,0.120910,-5.875839>>, 0, 9000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(43.777863, 43.777863, 0, 9000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 9000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 10 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<983.821472,-2171.255615,30.270624>>, <<980.964600,-2170.211670,30.421558>>, 0, 10000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<8.599643,-0.371932,-67.799362>>, <<5.847109,0.120910,-68.360344>>, 0, 10000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(32.738300, 43.777863, 0, 10000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 7000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 11 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<978.0251, -2166.5701, 32.8924>>, <<973.6019, -2166.4131, 32.8924>>, 0, 10000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<-11.5991, 0.0000, -109.7861>>, <<-11.5991, 0.0000, -109.8682>>, 0, 10000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(30.4727, 30.4727, 0, 10000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 9500 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 12 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<969.461731,-2170.036377,30.004295>>, <<968.464966,-2168.176270,30.004295>>, 0, 13000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<8.817223,-0.000000,-75.833801>>, <<8.817223,-0.000000,-75.833801>>, 0, 13000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(32.738300, 32.738300, 0, 13000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 12500 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 13 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<967.195313,-2170.564453,33.671185>>, <<967.195313,-2170.564453,31.921423>>, 0, 13000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<-14.831502,-0.000000,-70.284996>>, <<-5.630730,-0.000001,-31.627630>>, 0, 13000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(25.751530, 33.373501, 0, 13000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 13000 * 2 IF NOT IS_PED_INJURED(sEnemyIntroCut[5].pedIndex) OPEN_SEQUENCE_TASK(seqMain) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<978.9319, -2157.5186, 29.6194>>, PEDMOVE_WALK, -1, 0.5) TASK_ACHIEVE_HEADING(NULL, 105.8316) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyIntroCut[5].pedIndex, seqMain) ENDIF SET_CAM_PARAMS(camMain, <<965.011719,-2162.894287,29.411800>>, <<9.375818,-0.000001,-101.021996>>, 45.0, 0) POINT_CAM_AT_COORD(camMain, GET_ENTITY_COORDS(objHook) - <<0.0, 0.0, 2.5>>) ADVANCE_CUTSCENE() ENDIF BREAK CASE 14 POINT_CAM_AT_COORD(camMain, GET_ENTITY_COORDS(objHook) - <<0.0, 0.0, 2.5>>) IF TIMERA() > 13500 * 2 IF DOES_CAM_EXIST(camMain) STOP_CAM_POINTING(camMain) ENDIF ADVANCE_CUTSCENE() ENDIF BREAK CASE 15 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<974.405823,-2155.704590,29.089001>>, <<974.405823,-2155.704590,29.089001>>, 0, 10000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<22.455841,-0.000001,126.167778>>, <<22.455843,-0.000000,165.535431>>, 0, 10000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(33.373501, 33.373501, 0, 10000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 10000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 16 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<980.607300,-2156.581787,32.035435>>, <<981.430054,-2157.140869,32.099709>>, 0, 10000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<-6.997153,0.000000,117.716827>>, <<-6.997152,0.000000,115.624878>>, 0, 10000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(30.322689, 30.322689, 0, 10000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 10000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 17 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<976.429810,-2161.189453 + 0.2,28.865499>>, <<979.780518,-2161.445801 + 0.2,28.865499>>, 0, 12000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<46.458088,0.000003,-62.346085>>, <<46.458088,0.000003,-62.346085>>, 0, 12000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(36.598598, 36.598598, 0, 12000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 10000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 18 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<983.044556,-2164.222168,31.131218>>, <<985.341797,-2163.953613,31.142937>>, 0, 15000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<1.462163,-0.294281,7.502443>>, <<1.133829,-0.294281,-4.563818>>, 0, 15000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(34.916599, 34.916599, 0, 15000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 14000 * 2 SET_CAM_PARAMS(camMain, <<986.355103,-2155.670166,31.569838>>, <<-0.775808,-0.000000,-167.990448>>, 40.113567, 0) POINT_CAM_AT_COORD(camMain, GET_ENTITY_COORDS(objHook) - <<0.0, 0.0, 2.5>>) ADVANCE_CUTSCENE() ENDIF BREAK CASE 19 POINT_CAM_AT_COORD(camMain, GET_ENTITY_COORDS(objHook) - <<0.0, 0.0, 2.5>>) IF TIMERA() > 10000 * 2 STOP_CAM_POINTING(camMain) ADVANCE_CUTSCENE() ENDIF BREAK CASE 20 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<998.1546, -2155.2043, 30.5652>>, <<998.4847, -2156.0303, 30.5652>>, 0, 12000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<2.0353, 0.0000, 111.5716>>, <<2.0353, 0.0000, 111.5716>>, 0, 12000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(25.4629, 25.4629, 0, 12000 * 2, TO_FLOAT(TIMERA()))) #IF IS_DEBUG_BUILD IF #ENDIF LOAD_STREAM("MIC_2_MICHAEL_CHOPPED_UP_MASTER") #IF IS_DEBUG_BUILD PRINTLN("MIC_2_MICHAEL_CHOPPED_UP_MASTER - Loaded") ELSE PRINTLN("MIC_2_MICHAEL_CHOPPED_UP_MASTER - Loading...") ENDIF #ENDIF IF TIMERA() > 10000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 21 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<992.222351,-2158.235840,34.462818>>, <<992.181763,-2154.594238,34.462818>>, 0, 10000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<-64.751854,5.262573,-49.382565>>, <<-64.751854,5.262573,-49.382565>>, 0, 10000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(37.423904, 37.423904, 0, 10000 * 2, TO_FLOAT(TIMERA()))) #IF IS_DEBUG_BUILD IF #ENDIF LOAD_STREAM("MIC_2_MICHAEL_CHOPPED_UP_MASTER") #IF IS_DEBUG_BUILD PRINTLN("MIC_2_MICHAEL_CHOPPED_UP_MASTER - Loaded") ELSE PRINTLN("MIC_2_MICHAEL_CHOPPED_UP_MASTER - Loading...") ENDIF #ENDIF IF TIMERA() > 10000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 22 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<989.786743,-2145.830322,32.251602>>, <<989.792480,-2145.666260,32.267788>>, 0, 15000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<-8.540795,0.396388,-139.441086>>, <<-8.816824,0.396388,-129.708176>>, 0, 15000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(22.816650, 22.816650, 0, 15000 * 2, TO_FLOAT(TIMERA()))) #IF IS_DEBUG_BUILD IF #ENDIF LOAD_STREAM("MIC_2_MICHAEL_CHOPPED_UP_MASTER") #IF IS_DEBUG_BUILD PRINTLN("MIC_2_MICHAEL_CHOPPED_UP_MASTER - Loaded") ELSE PRINTLN("MIC_2_MICHAEL_CHOPPED_UP_MASTER - Loading...") ENDIF #ENDIF IF TIMERA() > 13000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 23 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<998.532532,-2154.596924,31.448441>>, <<997.954041,-2153.499023,31.398094>>, 0, 12000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<-1.786677,0.000000,13.967978>>, <<-0.549397,0.000000,-0.618225>>, 0, 12000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(32.833126, 32.833126, 0, 12000 * 2, TO_FLOAT(TIMERA()))) #IF IS_DEBUG_BUILD IF #ENDIF LOAD_STREAM("MIC_2_MICHAEL_CHOPPED_UP_MASTER") #IF IS_DEBUG_BUILD PRINTLN("MIC_2_MICHAEL_CHOPPED_UP_MASTER - Loaded") ELSE PRINTLN("MIC_2_MICHAEL_CHOPPED_UP_MASTER - Loading...") ENDIF #ENDIF IF TIMERA() > 6000 * 2 ADVANCE_CUTSCENE() ENDIF BREAK CASE 24 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<998.532532,-2154.596924,31.448441>>, <<997.954041,-2153.499023,31.398094>>, 0, 12000 * 2, TO_FLOAT(TIMERA()) + (6000 * 2)), GET_INTERP_POINT_VECTOR(<<-1.786677,0.000000,13.967978>>, <<-0.549397,0.000000,-0.618225>>, 0, 12000 * 2, TO_FLOAT(TIMERA()) + (6000 * 2)), GET_INTERP_POINT_FLOAT(32.833126, 32.833126, 0, 12000 * 2, TO_FLOAT(TIMERA()) + (6000 * 2))) #IF IS_DEBUG_BUILD IF #ENDIF LOAD_STREAM("MIC_2_MICHAEL_CHOPPED_UP_MASTER") #IF IS_DEBUG_BUILD PRINTLN("MIC_2_MICHAEL_CHOPPED_UP_MASTER - Loaded") ELSE PRINTLN("MIC_2_MICHAEL_CHOPPED_UP_MASTER - Loading...") ENDIF #ENDIF IF TIMERA() > 5000 * 2 IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() PLAY_PED_AMBIENT_SPEECH(PLAYER_PED(CHAR_MICHAEL), "GENERIC_FRIGHTENED_HIGH", SPEECH_PARAMS_FORCE_SHOUTED_CLEAR) ENDIF ADVANCE_CUTSCENE() ENDIF BREAK CASE 25 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<999.275269,-2133.896729,30.527813>>, <<998.915771,-2136.124023,30.771074>>, 0, 4000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<6.171403,0.000000,175.146454>>, <<4.129750,-0.000000,174.688812>>, 0, 4000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(31.021326, 31.021326, 0, 4000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 4000 * 2 TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_minced", REALLY_SLOW_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_HOLD_LAST_FRAME | AF_NOT_INTERRUPTABLE) ADVANCE_CUTSCENE() ENDIF BREAK CASE 26 IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) IF TIMERA() > 1500 * 2 CREATE_CONVERSATION_ADV("MCH2_MINCE") ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MIC_2_MICHAEL_CHOPPED_UP_MASTER") IF LOAD_STREAM("MIC_2_MICHAEL_CHOPPED_UP_MASTER") IF TIMERA() > 1500 * 2 PLAY_STREAM_FRONTEND() SET_LABEL_AS_TRIGGERED("MIC_2_MICHAEL_CHOPPED_UP_MASTER", TRUE) ENDIF ELSE PRINTLN("LOAD_STREAM('MIC_2_MICHAEL_CHOPPED_UP_MASTER') did not load in time!") ENDIF ENDIF SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<992.797363,-2142.922119,28.903460>>, <<993.104980,-2140.263184,28.906197>>, 0, 5000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_VECTOR(<<21.775642,0.063216,-99.448692>>, <<21.775642,0.063216,-94.619537>>, 0, 5000 * 2, TO_FLOAT(TIMERA())), GET_INTERP_POINT_FLOAT(27.044939, 27.044939, 0, 5000 * 2, TO_FLOAT(TIMERA()))) IF TIMERA() > 4250 * 2 KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() START_PARTICLE_FX_NON_LOOPED_ON_ENTITY("scr_abattoir_ped_sliced", PLAYER_PED_ID(), <<0.0, -0.1, 0.0>>, <<0.0, 0.0, 0.0>>, 1.0) ADVANCE_CUTSCENE() ENDIF BREAK CASE 27 SET_CAM_PARAMS(camMain, GET_INTERP_POINT_VECTOR(<<992.797363,-2142.922119,28.903460>>, <<993.104980,-2140.263184,28.906197>>, 0, 5000 * 2, TO_FLOAT(TIMERA()) + (4250 * 2)), GET_INTERP_POINT_VECTOR(<<21.775642,0.063216,-99.448692>>, <<21.775642,0.063216,-94.619537>>, 0, 5000 * 2, TO_FLOAT(TIMERA()) + (4250 * 2)), GET_INTERP_POINT_FLOAT(27.044939, 27.044939, 0, 5000 * 2, TO_FLOAT(TIMERA()) + (4250 * 2))) SET_CONTROL_SHAKE(PLAYER_CONTROL, 100, 100) IF TIMERA() > 2000 #IF IS_DEBUG_BUILD AND bDebugMichaelDeathDoNotFail = FALSE #ENDIF eMissionFail = failMichaelDied missionFailed() ENDIF BREAK ENDSWITCH INT i //Text IF NOT sCamDetails.bRun IF iCutsceneStage > 0 IF iCutsceneStage > 3 IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_INTRO2") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") CREATE_CONVERSATION_ADV("MCH2_IG1", CONV_PRIORITY_MEDIUM, FALSE, DO_NOT_DISPLAY_SUBTITLES) ENDIF PRINT_ADV("MCH2_INTRO2") IF NOT IS_CELLPHONE_DISABLED() IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN AND (NOT DOES_CAM_EXIST(sCamDetails.camID) OR (DOES_CAM_EXIST(sCamDetails.camID) AND NOT IS_CAM_ACTIVE(sCamDetails.camID))) IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_INTRO3") CLEAR_TEXT() PRINT_ADV("MCH2_INTRO3") PRINT_HELP_ADV("MCH2_INT3HLP2", TRUE, FALSE, DEFAULT_HELP_TEXT_TIME * 2) ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_INT3HLP3") IF HAS_LABEL_BEEN_TRIGGERED("MCH2_INT3HLP2") IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("MCH2_INT3HLP2") IF IS_CELLPHONE_TRACKIFY_IN_USE() PRINT_HELP_ADV("MCH2_INT3HLP3") ENDIF ENDIF ENDIF ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL AND IS_CAM_RENDERING(camMain) IF NOT IS_MESSAGE_BEING_DISPLAYED() AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF iDialogueStage = 0 IF GET_GAME_TIMER() > iDialogueTimer[0] IF iDialogueLineCount[iDialogueStage] = -1 iDialogueLineCount[iDialogueStage] = 6 - 1 //One line plays alongside the god text ENDIF IF iDialogueLineCount[iDialogueStage] > 0 ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") CREATE_CONVERSATION_ADV("MCH2_IG1", CONV_PRIORITY_MEDIUM, FALSE) iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(12000, 15000) iDialogueLineCount[iDialogueStage]-- ELIF iCutsceneStage < 25 PLAY_PED_AMBIENT_SPEECH(PLAYER_PED(CHAR_MICHAEL), "GENERIC_CURSE_HIGH", SPEECH_PARAMS_FORCE_SHOUTED_CLEAR) //also there is GENERIC_CURSE_MED iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(12000, 15000) ENDIF ENDIF ELIF iDialogueStage = 1 IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_HOOK1") INT iClosest REPEAT iEnemyIntroCut i IF DOES_ENTITY_EXIST(sEnemyIntroCut[i].pedIndex) AND NOT IS_PED_INJURED(sEnemyIntroCut[i].pedIndex) IF NOT DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) OR (DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) AND IS_PED_INJURED(sEnemyIntroCut[iClosest].pedIndex)) OR (DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) AND NOT IS_PED_INJURED(sEnemyIntroCut[iClosest].pedIndex) OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyIntroCut[i].pedIndex)) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyIntroCut[iClosest].pedIndex, FALSE))) iClosest = i ENDIF ENDIF ENDREPEAT IF DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) AND NOT IS_PED_INJURED(sEnemyIntroCut[iClosest].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyIntroCut[iClosest].pedIndex)) < 10.0 ADD_PED_FOR_DIALOGUE(sPedsForConversation, 4, sEnemyIntroCut[iClosest].pedIndex, "MCH2CHIN2") CREATE_CONVERSATION_ADV("MCH2_HOOK1") iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(25000, 25000) ENDIF ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_HOOK2") INT iClosest REPEAT iEnemyIntroCut i IF DOES_ENTITY_EXIST(sEnemyIntroCut[i].pedIndex) AND NOT IS_PED_INJURED(sEnemyIntroCut[i].pedIndex) IF NOT DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) OR (DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) AND IS_PED_INJURED(sEnemyIntroCut[iClosest].pedIndex)) OR (DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) AND NOT IS_PED_INJURED(sEnemyIntroCut[iClosest].pedIndex) OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyIntroCut[i].pedIndex)) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyIntroCut[iClosest].pedIndex, FALSE))) iClosest = i ENDIF ENDIF ENDREPEAT IF DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) AND NOT IS_PED_INJURED(sEnemyIntroCut[iClosest].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyIntroCut[iClosest].pedIndex)) < 10.0 ADD_PED_FOR_DIALOGUE(sPedsForConversation, 4, sEnemyIntroCut[iClosest].pedIndex, "MCH2CHIN2") CREATE_CONVERSATION_ADV("MCH2_HOOK2") iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(20000, 25000) ENDIF ELSE IF GET_GAME_TIMER() > iDialogueTimer[0] IF iDialogueLineCount[iDialogueStage] = -1 iDialogueLineCount[iDialogueStage] = 6 ENDIF IF iDialogueLineCount[iDialogueStage] > 0 INT iClosest REPEAT iEnemyIntroCut i IF DOES_ENTITY_EXIST(sEnemyIntroCut[i].pedIndex) AND NOT IS_PED_INJURED(sEnemyIntroCut[i].pedIndex) IF NOT DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) OR (DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) AND IS_PED_INJURED(sEnemyIntroCut[iClosest].pedIndex)) OR (DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) AND NOT IS_PED_INJURED(sEnemyIntroCut[iClosest].pedIndex) OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyIntroCut[i].pedIndex)) < GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyIntroCut[iClosest].pedIndex, FALSE))) iClosest = i ENDIF ENDIF ENDREPEAT IF DOES_ENTITY_EXIST(sEnemyIntroCut[iClosest].pedIndex) AND NOT IS_PED_INJURED(sEnemyIntroCut[iClosest].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyIntroCut[iClosest].pedIndex)) < 10.0 ADD_PED_FOR_DIALOGUE(sPedsForConversation, 4, sEnemyIntroCut[iClosest].pedIndex, "MCH2CHIN2") CREATE_CONVERSATION_ADV("MCH2_WATCH", CONV_PRIORITY_MEDIUM, FALSE) iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(12000, 15000) iDialogueLineCount[iDialogueStage]-- ENDIF ENDIF ENDIF ENDIF ENDIF IF iDialogueStage < 1 iDialogueStage++ ELSE iDialogueStage = 0 ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<952.6562, -2186.5637, 29.5517>>, <<300.0, 300.0, 300.0>>, TRUE) IF NOT DOES_ENTITY_EXIST(vehEnemy[0]) IF HAS_MODEL_LOADED_CHECK(BISON) vehEnemy[0] = CREATE_VEHICLE(BISON, <<953.1112, -2187.5334, 29.5516>>, 159.9804) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehEnemy[0], TRUE) SET_VEHICLE_COLOURS(vehEnemy[0], 42, 42) SET_VEHICLE_ON_GROUND_PROPERLY(vehEnemy[0]) SET_VEHICLE_DOORS_LOCKED(vehEnemy[0], VEHICLELOCK_LOCKED) ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(vehEnemy[1]) IF HAS_MODEL_LOADED_CHECK(BISON) vehEnemy[1] = CREATE_VEHICLE(BISON, <<941.9060, -2177.2876, 29.5517>>, 9.5321) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehEnemy[1], TRUE) SET_VEHICLE_COLOURS(vehEnemy[0], 52, 52) SET_VEHICLE_ON_GROUND_PROPERLY(vehEnemy[1]) SET_VEHICLE_DOORS_LOCKED(vehEnemy[1], VEHICLELOCK_LOCKED) ENDIF ENDIF ENDIF ENDIF //Render Rail Cam IF NOT sCamDetails.bRun OR (GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL AND IS_PLAYER_SWITCH_IN_PROGRESS() AND GET_PLAYER_SWITCH_TYPE() != SWITCH_TYPE_SHORT AND GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_OUTRO_HOLD) IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF DOES_CAM_EXIST(camMain) IF NOT IS_CAM_RENDERING(camMain) AND (IS_GAMEPLAY_CAM_RENDERING() OR (IS_PLAYER_SWITCH_IN_PROGRESS() AND GET_PLAYER_SWITCH_TYPE() != SWITCH_TYPE_SHORT AND GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_OUTRO_HOLD)) IF IS_ENTITY_ATTACHED_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook) SET_CAM_ACTIVE(camMain, TRUE) RENDER_SCRIPT_CAMS(TRUE, FALSE) ENDIF ENDIF ENDIF ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN IF DOES_CAM_EXIST(camMain) IF IS_CAM_RENDERING(camMain) RENDER_SCRIPT_CAMS(FALSE, FALSE) ENDIF ENDIF ENDIF ENDIF //Game Viewport for Cameras IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF DOES_CAM_EXIST(camMain) IF IS_CAM_RENDERING(camMain) SWITCH iCutsceneStage CASE 0 SET_ROOM_FOR_GAME_VIEWPORT_BY_NAME("abaSLAUGHT") BREAK CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 SET_ROOM_FOR_GAME_VIEWPORT_BY_NAME("ababetween") BREAK CASE 6 CASE 7 SET_ROOM_FOR_GAME_VIEWPORT_BY_NAME("abaSLAUGHT") BREAK CASE 8 CASE 9 CASE 10 CASE 11 CASE 12 CASE 13 CASE 14 SET_ROOM_FOR_GAME_VIEWPORT_BY_NAME("ababetween") BREAK CASE 15 CASE 16 CASE 17 CASE 18 CASE 19 CASE 20 CASE 21 CASE 22 SET_ROOM_FOR_GAME_VIEWPORT_BY_NAME("abattmainsec1") BREAK CASE 23 SET_ROOM_FOR_GAME_VIEWPORT_BY_NAME("abattmainsec2") BREAK ENDSWITCH ENDIF ENDIF ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF iCutsceneStage > 1 REPEAT COUNT_OF(sEnemyIntroCut) i IF DOES_ENTITY_EXIST(sEnemyIntroCut[i].pedIndex) IF NOT IS_PED_INJURED(sEnemyIntroCut[i].pedIndex) IF i <> 0 AND i <> 2 AND i <> 4 AND i <> 5 AND i <> 8 AND i <> 9 IF sEnemyIntroCut[i].iTimer < GET_GAME_TIMER() IF NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle1, "idle_a") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle1, "idle_b") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle1, "idle_c") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle1, "idle_d") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle1, "idle_e") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle2, "idle_a") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle2, "idle_b") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle2, "idle_c") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle2, "idle_d") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle4, "idle_a") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle4, "idle_b") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle4, "idle_c") INT iAnimDict = GET_RANDOM_INT_IN_RANGE(0, 3) INT iAnimName = GET_RANDOM_INT_IN_RANGE(0, 5 - iAnimDict) SWITCH iAnimDict CASE 0 sEnemyIntroCut[i].sAnimDict = sAnimDictIdle1 BREAK CASE 1 sEnemyIntroCut[i].sAnimDict = sAnimDictIdle2 BREAK CASE 2 sEnemyIntroCut[i].sAnimDict = sAnimDictIdle4 BREAK ENDSWITCH SWITCH iAnimName CASE 0 sEnemyIntroCut[i].sAnimName = "idle_a" BREAK CASE 1 sEnemyIntroCut[i].sAnimName = "idle_b" BREAK CASE 2 sEnemyIntroCut[i].sAnimName = "idle_c" BREAK CASE 3 sEnemyIntroCut[i].sAnimName = "idle_d" BREAK CASE 4 sEnemyIntroCut[i].sAnimName = "idle_e" BREAK ENDSWITCH TASK_PLAY_ANIM(sEnemyIntroCut[i].pedIndex, sEnemyIntroCut[i].sAnimDict, sEnemyIntroCut[i].sAnimName, SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_UPPERBODY) PRINTLN("TASK_PLAY_ANIM(sEnemyIntroCut[i].pedIndex, ", sEnemyIntroCut[i].sAnimDict, ", ", sEnemyIntroCut[i].sAnimName, ", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_UPPERBODY)") ELSE sEnemyIntroCut[i].iTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1000 + (ROUND(GET_ENTITY_ANIM_TOTAL_TIME(sEnemyIntroCut[i].pedIndex, sEnemyIntroCut[i].sAnimDict, sEnemyIntroCut[i].sAnimName)) * 1000), 5000 + (ROUND(GET_ENTITY_ANIM_TOTAL_TIME(sEnemyIntroCut[i].pedIndex, sEnemyIntroCut[i].sAnimDict, sEnemyIntroCut[i].sAnimName)) * 1000)) PRINTLN("GET_ENTITY_ANIM_TOTAL_TIME = ", ROUND(GET_ENTITY_ANIM_TOTAL_TIME(sEnemyIntroCut[i].pedIndex, sEnemyIntroCut[i].sAnimDict, sEnemyIntroCut[i].sAnimName)) * 1000) ENDIF ENDIF IF NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle1, "idle_a") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle1, "idle_b") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle1, "idle_c") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle1, "idle_d") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle1, "idle_e") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle2, "idle_a") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle2, "idle_b") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle2, "idle_c") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle2, "idle_d") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle4, "idle_a") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle4, "idle_b") AND NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle4, "idle_c") IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyIntroCut[i].pedIndex), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) < 10.0 IF NOT IS_PED_FACING_PED(sEnemyIntroCut[i].pedIndex, PLAYER_PED(CHAR_MICHAEL), 60.0) IF GET_SCRIPT_TASK_STATUS(sEnemyIntroCut[i].pedIndex, SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY) != PERFORMING_TASK AND GET_SCRIPT_TASK_STATUS(sEnemyIntroCut[i].pedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) != PERFORMING_TASK TASK_TURN_PED_TO_FACE_COORD(sEnemyIntroCut[i].pedIndex, GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) ENDIF ENDIF ENDIF ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyIntroCut[i].pedIndex), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) < 10.0 TASK_LOOK_AT_ENTITY(sEnemyIntroCut[i].pedIndex, PLAYER_PED(CHAR_MICHAEL), 10000) ENDIF ELIF i = 0 OR i = 4 INT iCigarette IF i = 0 iCigarette = 0 ELSE iCigarette = 2 ENDIF IF NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictMic2Smoking, "smoking_loop") TASK_PLAY_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictMic2Smoking, "smoking_loop", SLOW_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING) SET_CURRENT_PED_WEAPON(sEnemyIntroCut[i].pedIndex, WEAPONTYPE_UNARMED, TRUE) ELSE TEXT_LABEL txtLabel txtLabel = "SMOKINGPUFF" txtLabel += i IF NOT HAS_LABEL_BEEN_TRIGGERED(txtLabel) IF GET_ENTITY_ANIM_CURRENT_TIME(sEnemyIntroCut[i].pedIndex, sAnimDictMic2Smoking, "smoking_loop") >= 0.3 AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemyIntroCut[i].pedIndex, sAnimDictMic2Smoking, "smoking_loop") < 0.4 START_PARTICLE_FX_NON_LOOPED_ON_PED_BONE("cs_cig_exhale_mouth", sEnemyIntroCut[i].pedIndex, <<0.0, 0.15, -0.05>>, VECTOR_ZERO, BONETAG_HEAD) SET_LABEL_AS_TRIGGERED(txtLabel, TRUE) ENDIF ELSE IF GET_ENTITY_ANIM_CURRENT_TIME(sEnemyIntroCut[i].pedIndex, sAnimDictMic2Smoking, "smoking_loop") >= 0.9 START_PARTICLE_FX_NON_LOOPED_ON_PED_BONE("cs_cig_exhale_mouth", sEnemyIntroCut[i].pedIndex, <<0.0, 0.15, -0.05>>, VECTOR_ZERO, BONETAG_HEAD) SET_LABEL_AS_TRIGGERED(txtLabel, FALSE) ENDIF ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(objCigarette[iCigarette]) IF HAS_MODEL_LOADED_CHECK(PROP_CS_CIGGY_01) objCigarette[iCigarette] = CREATE_OBJECT(PROP_CS_CIGGY_01, GET_PED_BONE_COORDS(sEnemyIntroCut[i].pedIndex, BONETAG_PH_R_HAND, VECTOR_ZERO)) ENDIF ELSE IF NOT IS_ENTITY_ATTACHED_TO_ENTITY(objCigarette[iCigarette], sEnemyIntroCut[i].pedIndex) ATTACH_ENTITY_TO_ENTITY(objCigarette[iCigarette], sEnemyIntroCut[i].pedIndex, GET_PED_BONE_INDEX(sEnemyIntroCut[i].pedIndex, BONETAG_PH_R_HAND), vCigaretteAttachOffset, VECTOR_ZERO) IF NOT DOES_PARTICLE_FX_LOOPED_EXIST(ptfxCigarette[iCigarette]) ptfxCigarette[iCigarette] = START_PARTICLE_FX_LOOPED_ON_ENTITY("cs_cig_smoke", objCigarette[iCigarette], vCigaretteParticleOffset, VECTOR_ZERO) ENDIF SET_CURRENT_PED_WEAPON(sEnemyIntroCut[i].pedIndex, WEAPONTYPE_UNARMED, TRUE) ENDIF ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyIntroCut[i].pedIndex), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) < 10.0 TASK_LOOK_AT_ENTITY(sEnemyIntroCut[i].pedIndex, PLAYER_PED(CHAR_MICHAEL), 10000) ENDIF ELIF i = 2 OR i = 5 IF NOT IS_ENTITY_PLAYING_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle3, "base") TASK_PLAY_ANIM(sEnemyIntroCut[i].pedIndex, sAnimDictIdle3, "base", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_UPPERBODY | AF_SECONDARY) ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyIntroCut[i].pedIndex), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) < 10.0 TASK_LOOK_AT_ENTITY(sEnemyIntroCut[i].pedIndex, PLAYER_PED(CHAR_MICHAEL), 10000) ENDIF ELIF i = 8 IF IS_ENTITY_AT_COORD(sEnemyIntroCut[i].pedIndex, <<999.5024, -2145.7878, 28.4765>>, <<5.0, 5.0, 5.0>>) IF GET_SCRIPT_TASK_STATUS(sEnemyIntroCut[i].pedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) != PERFORMING_TASK TASK_FOLLOW_NAV_MESH_TO_COORD(sEnemyIntroCut[i].pedIndex, <<969.6483, -2160.4150, 28.4750>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP) //, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT, 178.3322) ENDIF ENDIF IF IS_ENTITY_AT_COORD(sEnemyIntroCut[i].pedIndex, <<969.6483, -2160.4150, 28.4750>>, <<5.0, 5.0, 5.0>>) IF GET_SCRIPT_TASK_STATUS(sEnemyIntroCut[i].pedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) != PERFORMING_TASK TASK_FOLLOW_NAV_MESH_TO_COORD(sEnemyIntroCut[i].pedIndex, <<999.5024, -2145.7878, 28.4765>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP) //, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT, 275.3511) ENDIF ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyIntroCut[i].pedIndex), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) < 10.0 TASK_LOOK_AT_ENTITY(sEnemyIntroCut[i].pedIndex, PLAYER_PED(CHAR_MICHAEL), 10000) ENDIF ELIF i = 9 IF IS_ENTITY_AT_COORD(sEnemyIntroCut[i].pedIndex, <<969.2003, -2164.1885, 28.4756>>, <<5.0, 5.0, 5.0>>) IF GET_SCRIPT_TASK_STATUS(sEnemyIntroCut[i].pedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) != PERFORMING_TASK TASK_FOLLOW_NAV_MESH_TO_COORD(sEnemyIntroCut[i].pedIndex, <<997.3615, -2168.5959, 28.4752>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP) //, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT, 358.6634) ENDIF ENDIF IF IS_ENTITY_AT_COORD(sEnemyIntroCut[i].pedIndex, <<997.3615, -2168.5959, 28.4752>>, <<5.0, 5.0, 5.0>>) IF GET_SCRIPT_TASK_STATUS(sEnemyIntroCut[i].pedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) != PERFORMING_TASK TASK_FOLLOW_NAV_MESH_TO_COORD(sEnemyIntroCut[i].pedIndex, <<969.2003, -2164.1885, 28.4756>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP) //, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT, 187.7889) ENDIF ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyIntroCut[i].pedIndex), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) < 10.0 TASK_LOOK_AT_ENTITY(sEnemyIntroCut[i].pedIndex, PLAYER_PED(CHAR_MICHAEL), 10000) ENDIF ENDIF ENDIF ENDIF ENDREPEAT ENDIF ENDIF //Audio IF NOT HAS_LABEL_BEEN_TRIGGERED("AudioInCar") IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) PLAY_AUDIO(MIC2_FRANK_VEH) SET_LABEL_AS_TRIGGERED("AudioInCar", TRUE) ENDIF ENDIF //Radar / Mini Map DISABLE_SELECTOR_MAP_UPDATE_THIS_FRAME() //Michael Reaches Abattoir IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL REQUEST_SCRIPT_AUDIO_BANK("Michael_2_Kidnap_Rail") REQUEST_SCRIPT_AUDIO_BANK("Michael_2_Meat_Chopper") DISABLE_CELLPHONE_THIS_FRAME_ONLY() IF NOT bMikeToFrank_SwitchedToFrank SET_FORCE_OBJECT_THIS_FRAME(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), 30.0) ENDIF ELSE RELEASE_NAMED_SCRIPT_AUDIO_BANK("Michael_2_Kidnap_Rail") RELEASE_NAMED_SCRIPT_AUDIO_BANK("Michael_2_Meat_Chopper") ENDIF //Franklin Reaches Abattoir IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN IF IS_NEW_LOAD_SCENE_ACTIVE() IF NOT IS_PLAYER_SWITCH_IN_PROGRESS() NEW_LOAD_SCENE_STOP() ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_WAYIN") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<982.266663, -2198.750977, 28.551861>>, <<991.753418, -2096.931885, 55.123489>>, 40.0) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<936.555542, -2116.675781, 28.508316>>, <<1009.005981, -2123.745361, 54.551849>>, 40.0) CREATE_CONVERSATION_ADV("MCH2_WAYIN") ENDIF ENDIF ENDIF IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF (DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) AND NOT IS_PED_INJURED(sEnemyOutside[0].pedIndex)) AND (DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex)) IF GET_GAME_TIMER() > iDialogueTimer[3] IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<950.836731, -2183.857666, 38.551857>>, <<25.0, 25.0, 10.0>>) IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TALK_1") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 3, sEnemyOutside[0].pedIndex, "MCH2CHIN1") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 7, sEnemyOutside[2].pedIndex, "MCH2CHIN5") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TALK", "MCH2_TALK_1") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TALK_2") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TALK", "MCH2_TALK_2") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TALK2_1") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TALK2", "MCH2_TALK2_1") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TALK2_2") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TALK2", "MCH2_TALK2_2") ENDIF iDialogueTimer[3] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(7500, 10000) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_ABATTF") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<972.600098, -2065.420410, 26.316271>>, <<959.969910, -2203.768799, 39.551682>>, 100.0) SET_LABEL_AS_TRIGGERED("MCH2_ABATTF", TRUE) //PRINT_ADV("MCH2_ABATTF") // PRINT_HELP_ADV("MCH2_SWITCHCAM") PLAY_AUDIO(MIC2_FIND_A_WAY) ENDIF ELSE IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Smoking) IF DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) IF NOT IS_PED_INJURED(sEnemyOutside[0].pedIndex) IF NOT IS_ENTITY_PLAYING_ANIM(sEnemyOutside[0].pedIndex, sAnimDictMic2Smoking, "smoking_loop") TASK_PLAY_ANIM(sEnemyOutside[0].pedIndex, sAnimDictMic2Smoking, "smoking_loop", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING) SET_CURRENT_PED_WEAPON(sEnemyOutside[0].pedIndex, WEAPONTYPE_UNARMED, TRUE) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) IF NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex) IF NOT IS_ENTITY_PLAYING_ANIM(sEnemyOutside[2].pedIndex, sAnimDictMic2Smoking, "smoking_loop") TASK_PLAY_ANIM(sEnemyOutside[2].pedIndex, sAnimDictMic2Smoking, "smoking_loop", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING, 0.75) SET_CURRENT_PED_WEAPON(sEnemyOutside[0].pedIndex, WEAPONTYPE_UNARMED, TRUE) ELSE SET_ENTITY_ANIM_SPEED(sEnemyOutside[2].pedIndex, sAnimDictMic2Smoking, "smoking_loop", 0.75) ENDIF ENDIF ENDIF ENDIF IF (IS_EXPLOSION_IN_AREA(EXP_TAG_GRENADE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_GRENADELAUNCHER, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_STICKYBOMB, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_MOLOTOV, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_ROCKET, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_TANKSHELL, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_HI_OCTANE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_BULLET, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_SMOKE_GRENADE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_FLARE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_PROGRAMMABLEAR, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>)) OR IS_PROJECTILE_IN_AREA(<<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE) OR IS_BULLET_IN_BOX(<<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE) OR IS_PED_SHOOTING_IN_AREA(PLAYER_PED_ID(), <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE) OR ((IS_PLAYER_FREE_AIMING(PLAYER_ID()) OR IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[0].pedIndex) OR IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[2].pedIndex)) AND IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<951.146362, -2185.526367, 34.551811>>, <<15.0, 15.0, 5.0>>)) OR (DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) AND GET_ENTITY_HEALTH(sEnemyOutside[0].pedIndex) < 200) OR (DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND GET_ENTITY_HEALTH(sEnemyOutside[2].pedIndex) < 200) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<980.336243, -2159.359131, 32.683861>>, <<964.162415, -2157.859863, 35.670811>>, 10.0) OR IS_BULLET_IN_ANGLED_AREA(<<980.336243, -2159.359131, 32.683861>>, <<964.162415, -2157.859863, 35.670811>>, 10.0) SET_LABEL_AS_TRIGGERED("AlertedTriads", TRUE) ENDIF IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<951.146362, -2185.526367, 34.551811>>, <<15.0, 15.0, 5.0>>) OR HAS_LABEL_BEEN_TRIGGERED("AlertedTriads") ADVANCE_STAGE() ENDIF ENDIF ENDIF ENDIF IF CLEANUP_STAGE() //Cleanup (Blips, peds, variables etc.) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) VEHICLE_INDEX vehRollingStart = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehRollingStart) STOP_PLAYBACK_RECORDED_VEHICLE(vehRollingStart) ENDIF ENDIF IF IS_NEW_LOAD_SCENE_ACTIVE() NEW_LOAD_SCENE_STOP() ENDIF RELEASE_NAMED_SCRIPT_AUDIO_BANK("Michael_2_Kidnap_Rail") RELEASE_NAMED_SCRIPT_AUDIO_BANK("Michael_2_Meat_Chopper") SET_SELECTOR_PED_HINT(sSelectorPeds, SELECTOR_PED_FRANKLIN, FALSE) SET_SELECTOR_PED_HINT(sSelectorPeds, SELECTOR_PED_MICHAEL, FALSE) IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) ENDIF HIDE_CELLPHONE_SIGNIFIERS_FOR_CUTSCENE(FALSE) DISABLE_CELLPHONE(FALSE) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF INT i REPEAT COUNT_OF(sEnemyIntroCut) i SAFE_DELETE_PED(sEnemyIntroCut[i].pedIndex) ENDREPEAT REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 5) SAFE_DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED(FALSE, MIC2_MIKE_RESCUE_TIMER) eMissionObjective = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) + 1) ENDIF ENDPROC PROC abattoirShootout() IF INIT_STAGE() //Set player SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) //Trackify ENABLE_SECOND_SCREEN_TRACKIFY_APP(TRUE) SET_TRACKIFY_TARGET_VECTOR(<<994.2946, -2150.3882, 29.4763>>) //Uncapped bSetUncapped = TRUE //Cover Blocking ADD_COVER_BLOCKING_AREA(<<997.93073, -2186.16016, 28.97771>>, <<997.42834, -2185.66040, 28.97763>>, TRUE, TRUE, TRUE) ADD_COVER_BLOCKING_AREA(<<978.15338, -2186.26709, 28.97741>>, <<979.04889, -2185.23193, 28.97736>>, TRUE, TRUE, TRUE) ADD_COVER_BLOCKING_AREA(<<978.405457, -2186.15625, 28.7274>>, <<978.905457, -2185.65625, 31.2274>>, TRUE, TRUE, TRUE) ADD_COVER_BLOCKING_AREA(<<993.80737, -2174.23584, 29.20387>> - <<0.25, 0.25, 1.0>>, <<993.80737, -2174.23584, 29.20387>> + <<0.25, 0.25, 1.25>>, TRUE, TRUE, TRUE) ADD_COVER_BLOCKING_AREA(<<972.773499, -2165.905273, 29.469034>> - <<0.35, 1.0, 1.5>>, <<972.773499, -2165.905273, 29.469034>> + <<0.35, 1.0, 1.5>>, TRUE, TRUE, TRUE) //Wanted SET_MAX_WANTED_LEVEL(0) SET_WANTED_LEVEL_MULTIPLIER(0.0) //Ambulances etc. ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, FALSE) ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_GANGS, FALSE) IF CAN_CREATE_RANDOM_COPS() SET_CREATE_RANDOM_COPS(FALSE) ENDIF //Radar bRadar = TRUE //Cam IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) ENDIF RENDER_SCRIPT_CAMS(FALSE, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) IF DOES_CAM_EXIST(camMain) STOP_CAM_POINTING(camMain) ENDIF //Michael SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_MICHAEL), PCF_RunFromFiresAndExplosions, TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_MICHAEL), PCF_DisableExplosionReactions, TRUE) //Switch bOkToSwitch = FALSE //Rail bOkToMoveRail = FALSE bOkToHangFromHook = TRUE // bReattach = TRUE // bFixedRotation = TRUE //Skip Michael Forwards! SET_RAIL_FINAL_NODE(31) iCurrentNode = 31 vRailCurrent = sRailNodes[31].vPos // IF DOES_ENTITY_EXIST(objHook) // IF IS_PED_RAGDOLL(PLAYER_PED(CHAR_MICHAEL)) // DANGLE_FROM_MEATHOOK(TRUE, PLAYER_PED(CHAR_MICHAEL), objHook, vRailCurrent + vHookPosOffset, FALSE, 0.0, 1000, 60000, bFixedRotation, -0.3, -0.3, -0.3, 0.3, 0.3, 0.3) //#IF IS_DEBUG_BUILD PRINTLN("DANGLE_FROM_MEATHOOK REF4") #ENDIF // ELIF IS_ENTITY_ATTACHED_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook) // SET_ENTITY_COORDS_NO_OFFSET(objHook, vRailCurrent) // SET_ENTITY_ROTATION(objHook, sRailNodes[31].vRot) // // ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, vMichaelAttachOffset, <<0.0, 0.0, 180.0>>, TRUE, TRUE) // ENDIF // ENDIF SET_ENTITY_COORDS_NO_OFFSET(objHook, vRailCurrent) SET_ENTITY_ROTATION(objHook, sRailNodes[31].vRot) IF NOT IS_ENTITY_ATTACHED(PLAYER_PED(CHAR_MICHAEL)) ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, vMichaelAttachOffset, <<0.0, 0.0, 180.0>>, TRUE, TRUE) ENDIF IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_c") TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_c", INSTANT_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_HOLD_LAST_FRAME | AF_NOT_INTERRUPTABLE) ENDIF RETAIN_ENTITY_IN_INTERIOR(PLAYER_PED(CHAR_MICHAEL), intAbattoir) SET_PED_CAN_BE_TARGETTED(PLAYER_PED(CHAR_MICHAEL), FALSE) SET_RAGDOLL_BLOCKING_FLAGS(PLAYER_PED(CHAR_MICHAEL), RBF_PLAYER_BUMP | RBF_PLAYER_IMPACT | RBF_PLAYER_RAGDOLL_BUMP) REMOVE_ALL_PED_WEAPONS(PLAYER_PED(CHAR_MICHAEL)) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_UNARMED, TRUE) CLEAR_TEXT() SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(replayAbattoirShootout), "stageAbattoirShootout") IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupFriendlyFire) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF #IF IS_DEBUG_BUILD IF bAutoSkipping = FALSE #ENDIF //Audio Scene IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOTOUT_MAIN") START_AUDIO_SCENE("MI_2_SHOOTOUT_MAIN") ENDIF //Audio LOAD_AUDIO(MIC2_FIGHT_BEGINS) PLAY_SOUND_FROM_COORD(-1, "MINCER_LOOP", <<992.7037, -2161.9229, 31.8097 - 0.5>>, "MICHAEL_2_SOUNDS") //Cover IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<961.5743, -2185.7659, 29.4823>>) covPoint[0] = ADD_COVER_POINT(<<961.5743, -2185.7659, 29.4823>>, 265.3580, COVUSE_WALLTORIGHT, COVHEIGHT_TOOHIGH, COVARC_120, TRUE) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<970.8589, -2186.5432, 28.9773>>) covPoint[1] = ADD_COVER_POINT(<<970.8589, -2186.5432, 28.9773>>, 82.2686, COVUSE_WALLTOLEFT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<981.2763, -2188.5393, 28.9777>>) covPoint[2] = ADD_COVER_POINT(<<981.2763, -2188.5393, 28.9777>>, 84.4550, COVUSE_WALLTOLEFT, COVHEIGHT_TOOHIGH, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<996.7552, -2187.5620, 28.9779>>) covPoint[3] = ADD_COVER_POINT(<<996.7552, -2187.5620, 28.9779>>, 353.0754, COVUSE_WALLTORIGHT, COVHEIGHT_LOW, COVARC_120, TRUE) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<988.2324, -2166.8076, 28.4755>>) covPoint[4] = ADD_COVER_POINT(<<988.2324, -2166.8076, 28.4755>>, 89.9152, COVUSE_WALLTORIGHT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<993.1907, -2172.7732, 29.2011>>) covPoint[5] = ADD_COVER_POINT(<<993.1907, -2172.7732, 29.2011>>, 177.1490, COVUSE_WALLTORIGHT, COVHEIGHT_TOOHIGH, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<954.7870, -2182.6062, 29.5519>>) covPoint[6] = ADD_COVER_POINT(<<954.7870, -2182.6062, 29.5519>>, 256.9729, COVUSE_WALLTOLEFT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<986.1974, -2166.4761, 28.4756>>) covPoint[7] = ADD_COVER_POINT(<<986.1974, -2166.4761, 28.4756>>, 262.3954, COVUSE_WALLTOLEFT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<972.2457, -2168.9514, 28.4613>>) covPoint[8] = ADD_COVER_POINT(<<972.2457, -2168.9514, 28.4613>>, 264.5069, COVUSE_WALLTORIGHT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<973.2443, -2162.0090, 28.4757>>) covPoint[9] = ADD_COVER_POINT(<<973.2443, -2162.0090, 28.4757>>, 263.8469, COVUSE_WALLTONEITHER, COVHEIGHT_TOOHIGH, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<967.4846, -2157.8857, 28.4747>>) covPoint[10] = ADD_COVER_POINT(<<967.4846, -2157.8857, 28.4747>>, 205.8383, COVUSE_WALLTORIGHT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<986.0016, -2162.1299, 28.4763>>) covPoint[11] = ADD_COVER_POINT(<<986.0016, -2162.1299, 28.4763>>, 83.7432, COVUSE_WALLTORIGHT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<996.7911, -2158.3494, 28.4766>>) covPoint[12] = ADD_COVER_POINT(<<996.7911, -2158.3494, 28.4766>>, 85.2102, COVUSE_WALLTOLEFT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<996.3251, -2142.2861, 28.4762>>) covPoint[13] = ADD_COVER_POINT(<<996.3251, -2142.2861, 28.4762>>, 4.7376, COVUSE_WALLTORIGHT, COVHEIGHT_TOOHIGH, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<976.4183, -2166.4651, 28.5421>>) covPoint[14] = ADD_COVER_POINT(<<976.4183, -2166.4651, 28.5421>>, 85.8822, COVUSE_WALLTORIGHT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<973.4745, -2167.0322, 28.4617>>) covPoint[15] = ADD_COVER_POINT(<<973.4745, -2167.0322, 28.4617>>, 359.6113, COVUSE_WALLTORIGHT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<993.2383, -2131.0708, 29.4758>>) covPoint[16] = ADD_COVER_POINT(<<993.2383, -2131.0708, 29.4758>>, 11.4085, COVUSE_WALLTOLEFT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<989.3762, -2108.0239, 29.4751>>) covPoint[17] = ADD_COVER_POINT(<<989.3762, -2108.0239, 29.4751>>, 178.0079, COVUSE_WALLTOLEFT, COVHEIGHT_TOOHIGH, COVARC_120, TRUE) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<934.6276, -2183.5769, 29.4658>>) covPoint[18] = ADD_COVER_POINT(<<934.6276, -2183.5769, 29.4658>>, 272.6803, COVUSE_WALLTORIGHT, COVHEIGHT_TOOHIGH, COVARC_120, TRUE) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<969.1201, -2186.1074, 28.9771>>) covPoint[19] = ADD_COVER_POINT(<<969.1201, -2186.1074, 28.9771>>, 264.5366, COVUSE_WALLTORIGHT, COVHEIGHT_LOW, COVARC_120, TRUE) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<975.9344, -2185.0681, 28.9773>>) covPoint[20] = ADD_COVER_POINT(<<975.9344, -2185.0681, 28.9773>>, 265.3824, COVUSE_WALLTOLEFT, COVHEIGHT_LOW, COVARC_120, TRUE) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<984.1754, -2186.1909, 28.9776>>) covPoint[21] = ADD_COVER_POINT(<<984.1754, -2186.1909, 28.9776>>, 265.3159, COVUSE_WALLTOLEFT, COVHEIGHT_TOOHIGH, COVARC_120, TRUE) ENDIF //Gang Inside Abattoir createEnemy(sEnemyShootout[0], <<978.5643, -2185.9519, 29.0001>>, 173.2941, WEAPONTYPE_PISTOL) sEnemyShootout[0].vLocate[0] = <<960.382202, -2185.503418, 32.497513>> sEnemyShootout[0].vLocSize[0] = <<10.0, 3.0, 3.0>> sEnemyShootout[0].eAdvanceStyle[0] = GUN_TO_POINT sEnemyShootout[0].vPoint[0] = <<978.6102, -2186.8325, 29.0012>> sEnemyShootout[0].fSpeed[0] = PEDMOVE_SPRINT SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[0].pedIndex, CA_OPEN_COMBAT_WHEN_DEFENSIVE_AREA_IS_REACHED, TRUE) sEnemyShootout[0].iTime[1] = 1000 sEnemyShootout[0].eAdvanceStyle[1] = GUN_TO_POINT sEnemyShootout[0].vPoint[1] = <<970.7040, -2186.3083, 29.0011>> sEnemyShootout[0].fSpeed[1] = PEDMOVE_SPRINT createEnemy(sEnemyShootout[1], <<981.2392, -2188.4341, 28.9778>>, 353.2939, WEAPONTYPE_SMG) sEnemyShootout[1].vLocate[0] = <<964.029846, -2185.516846, 31.073631>> sEnemyShootout[1].vLocSize[0] = <<2.0, 2.0, 2.0>> sEnemyShootout[1].pedCheck[0] = sEnemyShootout[0].pedIndex sEnemyShootout[1].eAdvanceStyle[0] = GUN_TO_POINT sEnemyShootout[1].vPoint[0] = <<978.5643, -2185.9519, 29.0001>> sEnemyShootout[1].fSpeed[0] = PEDMOVEBLENDRATIO_RUN sEnemyShootout[1].fDist[1] = 8.0 sEnemyShootout[1].eAdvanceStyle[1] = GUN_TO_POINT sEnemyShootout[1].vPoint[1] = <<985.3617, -2186.0742, 29.7047>> sEnemyShootout[1].fSpeed[1] = PEDMOVEBLENDRATIO_RUN createEnemy(sEnemyShootout[2], <<971.4545, -2182.5701, 28.9997>>, 86.5340, WEAPONTYPE_ASSAULTRIFLE, G_M_M_CHIGOON_01) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[2].pedIndex, CA_BLIND_FIRE_IN_COVER, FALSE) sEnemyShootout[2].vLocate[0] = <<960.322937, -2185.139648, 31.551695>> sEnemyShootout[2].vLocSize[0] = <<2.5, 2.5, 2.5>> sEnemyShootout[2].eAdvanceStyle[0] = GUN_TO_POINT sEnemyShootout[2].vPoint[0] = <<985.5667, -2183.5007, 29.7432>> sEnemyShootout[2].fSpeed[0] = PEDMOVE_RUN SET_BIT(sEnemyShootout[2].iBitsetStrict, 0) /*sEnemyShootout[2].bStrict[0] = TRUE*/ SET_ENTITY_HEALTH(sEnemyShootout[2].pedIndex, 105) sEnemyShootout[2].vLocate[1] = <<979.112732, -2186.871338, 31.000574>> sEnemyShootout[2].vLocSize[1] = <<2.5, 2.5, 2.0>> sEnemyShootout[2].eAdvanceStyle[1] = GUN_TO_POINT sEnemyShootout[2].vPoint[1] = <<985.7039, -2182.7744, 29.7432>> sEnemyShootout[2].fSpeed[1] = PEDMOVE_RUN sEnemyShootout[2].iTime[2] = 0 sEnemyShootout[2].eAdvanceStyle[2] = GUN_TO_POINT sEnemyShootout[2].vPoint[2] = <<994.7982, -2173.6492, 29.2247>> sEnemyShootout[2].fSpeed[2] = PEDMOVE_WALK createEnemy(sEnemyShootout[3], <<998.0875, -2188.8955, 28.9782>>, 353.2941, WEAPONTYPE_PISTOL) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyShootout[3].pedIndex, <<998.0875, -2188.8955, 28.9782>>, 1.5) //Ped who runs out createEnemy(sEnemyShootout[10], <<964.1022, -2186.9495, 29.3077>>, 49.2363, WEAPONTYPE_PISTOL) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[10].pedIndex, CM_STATIONARY) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyShootout[10].pedIndex, TRUE) //Entry Corridoor - Shootout: 4, 5, 6 //Entry Room - Shootout: 7, 8, 9 and Set Piece: SET_PIECE_STEAM, SET_PIECE_RAIL //Main Corridoor - Shootout: 11, 12, 13, 14, 15 and Set Piece: SET_PIECE_STAIR, SET_PIECE_GRINDER, SET_PIECE_CUTTER INT i REPEAT COUNT_OF(sEnemyShootout) i IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemyShootout[i].pedIndex, intAbattoir) ENDIF ENDREPEAT #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemyShootout) i IF NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemyShootout[i].pedIndex, "Shootout ", i) sEnemyShootout[i].sDebugName = CONCATENATE_STRINGS("Shootout ", GET_STRING_FROM_INT(i)) ENDIF ENDREPEAT #ENDIF //Enemy Cars IF NOT DOES_ENTITY_EXIST(vehEnemy[0]) vehEnemy[0] = CREATE_VEHICLE(BISON, <<952.7221, -2187.8667, 29.5517>>, 187.2181) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehEnemy[0], TRUE) SET_VEHICLE_COLOURS(vehEnemy[0], 42, 42) SET_VEHICLE_ON_GROUND_PROPERLY(vehEnemy[0]) SET_VEHICLE_DOORS_LOCKED(vehEnemy[0], VEHICLELOCK_LOCKED) ENDIF IF NOT DOES_ENTITY_EXIST(vehEnemy[1]) vehEnemy[1] = CREATE_VEHICLE(BISON, <<941.9060, -2177.2876, 29.5517>>, 9.5321) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehEnemy[1], TRUE) SET_VEHICLE_COLOURS(vehEnemy[0], 52, 52) SET_VEHICLE_ON_GROUND_PROPERLY(vehEnemy[1]) SET_VEHICLE_DOORS_LOCKED(vehEnemy[1], VEHICLELOCK_LOCKED) ENDIF #IF IS_DEBUG_BUILD ENDIF #ENDIF IF SKIPPED_STAGE() IF bReplaySkip = TRUE SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<934.6419, -2183.5613, 29.4654>>, 355.3260, FALSE) TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED(CHAR_FRANKLIN), <<934.6419, -2183.5613, 29.4654>>, -1, FALSE, 0, TRUE, TRUE, covPoint[18]) TASK_COMBAT_PED(sEnemyOutside[0].pedIndex, PLAYER_PED(CHAR_FRANKLIN), COMBAT_PED_DISABLE_AIM_INTRO) TASK_COMBAT_PED(sEnemyOutside[2].pedIndex, PLAYER_PED(CHAR_FRANKLIN), COMBAT_PED_DISABLE_AIM_INTRO) SET_PED_COMBAT_MOVEMENT(sEnemyOutside[2].pedIndex, CM_STATIONARY) SET_LABEL_AS_TRIGGERED("AlertedTriads", TRUE) SET_LABEL_AS_TRIGGERED("MCH2_ABATTF", TRUE) ELSE SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<931.4130, -2179.8796, 29.3223>>, 263.7494, FALSE) ENDIF IF GET_BEST_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN)) = WEAPONTYPE_UNARMED IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, 350, TRUE) ENDIF ENDIF enumCharacterList eCharFail = GET_CURRENT_PLAYER_PED_ENUM() IF GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail)) != WEAPONTYPE_UNARMED AND GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail)) != WEAPONTYPE_INVALID AND HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail))) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail)), TRUE) ELSE SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), GET_BEST_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN)), TRUE) ENDIF IF NOT bReplaySkip LOAD_SCENE_ADV(<<941.6578, -2181.0586, 29.5517>>, 40.0) ENDIF WAIT_WITH_DEATH_CHECKS(0) MAKE_PICKUPS() //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, NULL, "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Audio PLAY_AUDIO(MIC2_FIGHT_BEGINS_RT) IF bReplaySkip = TRUE SET_GAMEPLAY_CAM_RELATIVE_HEADING(-109.5 - GET_ENTITY_HEADING(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) ELSE SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) ENDIF REPLAY_RECORD_BACK_FOR_TIME(3.0, 10.0, REPLAY_IMPORTANCE_HIGHEST) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF ENDIF ELSE IF IS_NEW_LOAD_SCENE_ACTIVE() NEW_LOAD_SCENE_STOP() ENDIF INT i SWITCH iCutsceneStage CASE 0 IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_ABATTF") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<972.600098, -2065.420410, 26.316271>>, <<959.969910, -2203.768799, 39.551682>>, 100.0) PRINT_ADV("MCH2_ABATTF") //SET_LABEL_AS_TRIGGERED("MCH2_ABATTF", TRUE) ENDIF ELSE IF NOT HAS_LABEL_BEEN_TRIGGERED("AlertedTriads") IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Smoking) IF DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) IF NOT IS_PED_INJURED(sEnemyOutside[0].pedIndex) IF NOT IS_ENTITY_PLAYING_ANIM(sEnemyOutside[0].pedIndex, sAnimDictMic2Smoking, "smoking_loop") IF NOT HAS_LABEL_BEEN_TRIGGERED("Goon0Intimidate") TASK_PLAY_ANIM(sEnemyOutside[0].pedIndex, sAnimDictMic2Smoking, "smoking_loop", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING) SET_CURRENT_PED_WEAPON(sEnemyOutside[0].pedIndex, WEAPONTYPE_UNARMED, TRUE) ELSE TASK_PLAY_ANIM(sEnemyOutside[0].pedIndex, sAnimDictMic2Smoking, "smoking_loop", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING | AF_UPPERBODY | AF_SECONDARY) SET_CURRENT_PED_WEAPON(sEnemyOutside[0].pedIndex, WEAPONTYPE_UNARMED, TRUE) ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(objCigarette[0]) IF HAS_MODEL_LOADED_CHECK(PROP_CS_CIGGY_01) objCigarette[0] = CREATE_OBJECT(PROP_CS_CIGGY_01, GET_PED_BONE_COORDS(sEnemyOutside[0].pedIndex, BONETAG_PH_R_HAND, VECTOR_ZERO)) ATTACH_ENTITY_TO_ENTITY(objCigarette[0], sEnemyOutside[0].pedIndex, GET_PED_BONE_INDEX(sEnemyOutside[0].pedIndex, BONETAG_PH_R_HAND), vCigaretteAttachOffset, VECTOR_ZERO) IF NOT DOES_PARTICLE_FX_LOOPED_EXIST(ptfxCigarette[0]) ptfxCigarette[0] = START_PARTICLE_FX_LOOPED_ON_ENTITY("cs_cig_smoke", objCigarette[0], vCigaretteParticleOffset, VECTOR_ZERO) ENDIF SET_CURRENT_PED_WEAPON(sEnemyOutside[0].pedIndex, WEAPONTYPE_UNARMED, TRUE) ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) IF NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex) IF NOT IS_ENTITY_PLAYING_ANIM(sEnemyOutside[2].pedIndex, sAnimDictMic2Smoking, "smoking_loop") IF NOT HAS_LABEL_BEEN_TRIGGERED("Goon2Intimidate") TASK_PLAY_ANIM(sEnemyOutside[2].pedIndex, sAnimDictMic2Smoking, "smoking_loop", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING, 0.75) SET_CURRENT_PED_WEAPON(sEnemyOutside[2].pedIndex, WEAPONTYPE_UNARMED, TRUE) ELSE TASK_PLAY_ANIM(sEnemyOutside[2].pedIndex, sAnimDictMic2Smoking, "smoking_loop", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING | AF_UPPERBODY | AF_SECONDARY, 0.75) SET_CURRENT_PED_WEAPON(sEnemyOutside[2].pedIndex, WEAPONTYPE_UNARMED, TRUE) ENDIF ELSE SET_ENTITY_ANIM_SPEED(sEnemyOutside[2].pedIndex, sAnimDictMic2Smoking, "smoking_loop", 0.75) ENDIF IF NOT DOES_ENTITY_EXIST(objCigarette[1]) IF HAS_MODEL_LOADED_CHECK(PROP_CS_CIGGY_01) objCigarette[1] = CREATE_OBJECT(PROP_CS_CIGGY_01, GET_PED_BONE_COORDS(sEnemyOutside[2].pedIndex, BONETAG_PH_R_HAND, VECTOR_ZERO)) ATTACH_ENTITY_TO_ENTITY(objCigarette[1], sEnemyOutside[2].pedIndex, GET_PED_BONE_INDEX(sEnemyOutside[2].pedIndex, BONETAG_PH_R_HAND), vCigaretteAttachOffset, VECTOR_ZERO) IF NOT DOES_PARTICLE_FX_LOOPED_EXIST(ptfxCigarette[1]) ptfxCigarette[1] = START_PARTICLE_FX_LOOPED_ON_ENTITY("cs_cig_smoke", objCigarette[1], vCigaretteParticleOffset, VECTOR_ZERO) ENDIF SET_CURRENT_PED_WEAPON(sEnemyOutside[2].pedIndex, WEAPONTYPE_UNARMED, TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BOOL bAlert bAlert = FALSE IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<951.146362, -2185.526367, 34.551811>>, <<15.0, 15.0, 5.0>>) IF NOT HAS_LABEL_BEEN_TRIGGERED("BestWeaponEquip") IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF GET_PEDS_CURRENT_WEAPON(PLAYER_PED_ID()) = WEAPONTYPE_UNARMED AND NOT IS_PED_CLIMBING(PLAYER_PED_ID()) AND NOT IS_PED_JUMPING(PLAYER_PED_ID()) AND NOT IS_PED_RAGDOLL(PLAYER_PED_ID()) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), GET_BEST_PED_WEAPON(PLAYER_PED_ID()), TRUE) SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), TRUE) SET_LABEL_AS_TRIGGERED("BestWeaponEquip", TRUE) ENDIF ENDIF ENDIF IF (DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) AND NOT IS_PED_INJURED(sEnemyOutside[0].pedIndex) AND NOT IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[0].pedIndex) AND NOT IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(), sEnemyOutside[0].pedIndex) AND NOT IS_PED_SHOOTING(PLAYER_PED_ID()) AND (HAS_LABEL_BEEN_TRIGGERED("sEnemyOutside[0]Blocking") AND CAN_PED_SEE_HATED_PED(sEnemyOutside[0].pedIndex, PLAYER_PED_ID()))) OR (DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex) AND NOT IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[2].pedIndex) AND NOT IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(), sEnemyOutside[2].pedIndex) AND NOT IS_PED_SHOOTING(PLAYER_PED_ID()) AND (HAS_LABEL_BEEN_TRIGGERED("sEnemyOutside[2]Blocking") AND CAN_PED_SEE_HATED_PED(sEnemyOutside[2].pedIndex, PLAYER_PED_ID()))) IF HAS_LABEL_BEEN_TRIGGERED("MCH2_SEESF") IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_SHTS", "MCH2_SHTS_1") PRINTLN("SCRIPT POINT 1") ELSE IF HAS_LABEL_BEEN_TRIGGERED("MCH2_SHTS_1") IF TIMERA() > 1500 bAlert = TRUE ENDIF ELSE SETTIMERA(0) ENDIF ENDIF ELSE IF DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) IF NOT IS_PED_INJURED(sEnemyOutside[0].pedIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("Goon0Intimidate") IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<940.934326, -2180.620605, 32.547226>>, <<5.0, 8.0, 3.0>>) CLEAR_PED_TASKS(sEnemyOutside[0].pedIndex) TASK_GO_STRAIGHT_TO_COORD(sEnemyOutside[0].pedIndex, <<946.9802, -2184.5342, 29.5519>>, PEDMOVE_WALK) ENDIF SET_LABEL_AS_TRIGGERED("Goon0Intimidate", TRUE) ENDIF SET_PED_MOVE_RATE_OVERRIDE(sEnemyOutside[0].pedIndex, 0.6) TASK_LOOK_AT_ENTITY(sEnemyOutside[0].pedIndex, PLAYER_PED(CHAR_FRANKLIN), -1) ENDIF ENDIF IF DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) IF NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("Goon2Intimidate") IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<940.934326, -2180.620605, 32.547226>>, <<5.0, 8.0, 3.0>>) CLEAR_PED_TASKS(sEnemyOutside[2].pedIndex) TASK_GO_STRAIGHT_TO_COORD(sEnemyOutside[2].pedIndex, <<948.7826, -2182.6172, 29.5519>>, PEDMOVE_WALK) ENDIF SET_LABEL_AS_TRIGGERED("Goon2Intimidate", TRUE) ENDIF SET_PED_MOVE_RATE_OVERRIDE(sEnemyOutside[2].pedIndex, 0.5) TASK_LOOK_AT_ENTITY(sEnemyOutside[2].pedIndex, PLAYER_PED(CHAR_FRANKLIN), -1) ENDIF ENDIF IF (DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) AND NOT IS_PED_INJURED(sEnemyOutside[0].pedIndex)) AND (DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex)) IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_SEES") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 7, sEnemyOutside[2].pedIndex, "MCH2CHIN5") REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0) CREATE_CONVERSATION_ADV("MCH2_SEES") ELSE ADD_PED_FOR_DIALOGUE(sPedsForConversation, 3, sEnemyOutside[0].pedIndex, "MCH2CHIN1") REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0) CREATE_CONVERSATION_ADV("MCH2_SEESF") ENDIF ELSE IF IS_THIS_CONVERSATION_ONGOING_OR_QUEUED("MCH2_TALK") OR IS_THIS_CONVERSATION_ONGOING_OR_QUEUED("MCH2_TALK2") KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF (DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) AND NOT IS_PED_INJURED(sEnemyOutside[0].pedIndex)) AND (DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex)) IF NOT HAS_LABEL_BEEN_TRIGGERED("Goon0Intimidate") AND bAlert = FALSE IF GET_GAME_TIMER() > iDialogueTimer[3] IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<950.836731, -2183.857666, 38.551857>>, <<25.0, 25.0, 10.0>>) IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TALK_1") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 3, sEnemyOutside[0].pedIndex, "MCH2CHIN1") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 7, sEnemyOutside[2].pedIndex, "MCH2CHIN5") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TALK", "MCH2_TALK_1") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TALK_2") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TALK", "MCH2_TALK_2") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TALK2_1") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TALK2", "MCH2_TALK2_1") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TALK2_2") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TALK2", "MCH2_TALK2_2") ENDIF iDialogueTimer[3] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(7500, 10000) ENDIF ENDIF ENDIF ENDIF ENDIF IF bAlert = TRUE PRINTLN("bAlert = TRUE") ENDIF IF (DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) AND NOT IS_ENTITY_DEAD(sEnemyOutside[0].pedIndex) AND IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[0].pedIndex)) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyOutside[0].pedIndex, FALSE) SET_LABEL_AS_TRIGGERED("sEnemyOutside[0]Blocking", FALSE) ELSE SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyOutside[0].pedIndex, TRUE) SET_LABEL_AS_TRIGGERED("sEnemyOutside[0]Blocking", TRUE) ENDIF IF (DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND NOT IS_ENTITY_DEAD(sEnemyOutside[2].pedIndex) AND IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[2].pedIndex)) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyOutside[2].pedIndex, FALSE) SET_LABEL_AS_TRIGGERED("sEnemyOutside[2]Blocking", FALSE) ELSE SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyOutside[2].pedIndex, TRUE) SET_LABEL_AS_TRIGGERED("sEnemyOutside[2]Blocking", TRUE) ENDIF #IF IS_DEBUG_BUILD IF IS_EXPLOSION_IN_AREA(EXP_TAG_GRENADE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_GRENADELAUNCHER, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_STICKYBOMB, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_MOLOTOV, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_ROCKET, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_TANKSHELL, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_HI_OCTANE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_BULLET, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_SMOKE_GRENADE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_FLARE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_PROGRAMMABLEAR, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) PRINTLN("IS_EXPLOSION_IN_AREA([-SEE SCRIPT-], <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>)") ENDIF IF IS_PROJECTILE_IN_AREA(<<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE) PRINTLN("IS_PROJECTILE_IN_AREA(<<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE)") ENDIF IF IS_BULLET_IN_BOX(<<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE) PRINTLN("IS_BULLET_IN_BOX(<<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE)") ENDIF IF IS_PED_SHOOTING_IN_AREA(PLAYER_PED_ID(), <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE) PRINTLN("IS_PED_SHOOTING_IN_AREA(PLAYER_PED_ID(), <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE)") ENDIF IF IS_PLAYER_FREE_AIMING(PLAYER_ID()) PRINTLN("IS_PLAYER_FREE_AIMING(PLAYER_ID()") ENDIF IF DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) AND NOT IS_ENTITY_DEAD(sEnemyOutside[0].pedIndex) AND IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[0].pedIndex) AND IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<951.146362, -2185.526367, 34.551811>>, <<15.0, 15.0, 5.0>>) PRINTLN("IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[0].pedIndex)") ENDIF IF DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND NOT IS_ENTITY_DEAD(sEnemyOutside[2].pedIndex) AND IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[2].pedIndex) AND IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<951.146362, -2185.526367, 34.551811>>, <<15.0, 15.0, 5.0>>) PRINTLN("IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[2].pedIndex)") ENDIF IF (DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) AND GET_ENTITY_HEALTH(sEnemyOutside[0].pedIndex) < 200) PRINTLN("GET_ENTITY_HEALTH(sEnemyOutside[0].pedIndex) < 200") ENDIF IF (DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND GET_ENTITY_HEALTH(sEnemyOutside[2].pedIndex) < 200) PRINTLN("GET_ENTITY_HEALTH(sEnemyOutside[2].pedIndex) < 200") ENDIF #ENDIF IF bAlert = TRUE OR HAS_LABEL_BEEN_TRIGGERED("AlertedTriads") OR (IS_EXPLOSION_IN_AREA(EXP_TAG_GRENADE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_GRENADELAUNCHER, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_STICKYBOMB, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_MOLOTOV, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_ROCKET, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_TANKSHELL, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_HI_OCTANE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_BULLET, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_SMOKE_GRENADE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_FLARE, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>) OR IS_EXPLOSION_IN_AREA(EXP_TAG_PROGRAMMABLEAR, <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>)) OR IS_PROJECTILE_IN_AREA(<<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE) OR IS_BULLET_IN_BOX(<<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE) OR IS_PED_SHOOTING_IN_AREA(PLAYER_PED_ID(), <<914.99, -2146.68, 28.63>>, <<981.29, -2201.92, 40.55>>, FALSE) OR ((IS_PLAYER_FREE_AIMING(PLAYER_ID()) OR (DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) AND NOT IS_ENTITY_DEAD(sEnemyOutside[0].pedIndex) AND IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[0].pedIndex)) OR (DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND NOT IS_ENTITY_DEAD(sEnemyOutside[2].pedIndex) AND IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemyOutside[2].pedIndex))) AND IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<951.146362, -2185.526367, 34.551811>>, <<15.0, 15.0, 2.0>>)) OR (DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) AND GET_ENTITY_HEALTH(sEnemyOutside[0].pedIndex) < 200) OR (DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND GET_ENTITY_HEALTH(sEnemyOutside[2].pedIndex) < 200) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<980.336243, -2159.359131, 32.683861>>, <<964.162415, -2157.859863, 35.670811>>, 10.0) OR IS_BULLET_IN_ANGLED_AREA(<<980.336243, -2159.359131, 32.683861>>, <<964.162415, -2157.859863, 35.670811>>, 10.0) IF DOES_ENTITY_EXIST(sEnemyOutside[0].pedIndex) IF NOT IS_PED_INJURED(sEnemyOutside[0].pedIndex) IF NOT IS_PED_IN_COMBAT(sEnemyOutside[0].pedIndex) CLEAR_PED_TASKS(sEnemyOutside[0].pedIndex) ENDIF CLEAR_PED_SECONDARY_TASK(sEnemyOutside[0].pedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyOutside[0].pedIndex, FALSE) SET_LABEL_AS_TRIGGERED("sEnemyOutside[0]Blocking", FALSE) ENDIF ENDIF IF DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) IF NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex) IF bAlert = TRUE WAIT_WITH_DEATH_CHECKS(250) ELSE SET_PED_COMBAT_MOVEMENT(sEnemyOutside[2].pedIndex, CM_STATIONARY) ENDIF IF NOT IS_PED_IN_COMBAT(sEnemyOutside[2].pedIndex) CLEAR_PED_TASKS(sEnemyOutside[2].pedIndex) ENDIF CLEAR_PED_SECONDARY_TASK(sEnemyOutside[2].pedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyOutside[2].pedIndex, FALSE) SET_LABEL_AS_TRIGGERED("sEnemyOutside[2]Blocking", FALSE) ENDIF ENDIF //SET_PED_RELATIONSHIP_GROUP_HASH(sEnemyOutside[0].pedIndex, relGroupEnemy) //SET_PED_RELATIONSHIP_GROUP_HASH(sEnemyOutside[2].pedIndex, relGroupEnemy) //TASK_COMBAT_PED(sEnemyOutside[0].pedIndex, PLAYER_PED(CHAR_FRANKLIN)) //TASK_COMBAT_PED(sEnemyOutside[2].pedIndex, PLAYER_PED(CHAR_FRANKLIN)) REPEAT COUNT_OF(sEnemyShootout) i IF i != 6 IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) TASK_COMBAT_PED(sEnemyShootout[i].pedIndex, PLAYER_PED(CHAR_FRANKLIN)) ENDIF ENDIF ENDIF ENDREPEAT SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), TRUE) REPEAT COUNT_OF(objCigarette) i IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxCigarette[i]) STOP_PARTICLE_FX_LOOPED(ptfxCigarette[i]) ENDIF SAFE_DELETE_OBJECT(objCigarette[i]) ENDREPEAT SET_MODEL_AS_NO_LONGER_NEEDED(PROP_CS_CIGGY_01) //Audio PLAY_AUDIO(MIC2_FIGHT_BEGINS) ADVANCE_CUTSCENE() ENDIF ENDIF BREAK CASE 1 IF TIMERA() > 250 IF DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex) SET_PED_COMBAT_MOVEMENT(sEnemyOutside[2].pedIndex, CM_DEFENSIVE) ENDIF ENDIF IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT IS_PED_INJURED(sEnemyOutside[0].pedIndex) AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) != intAbattoir ADD_PED_FOR_DIALOGUE(sPedsForConversation, 3, sEnemyOutside[0].pedIndex, "MCH2CHIN1") CREATE_CONVERSATION_ADV("MCH2_GUN1") ELIF NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex) AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) != intAbattoir ADD_PED_FOR_DIALOGUE(sPedsForConversation, 7, sEnemyOutside[2].pedIndex, "MCH2CHIN5") CREATE_CONVERSATION_ADV("MCH2_GUN") ELSE IF DOES_ENTITY_EXIST(sEnemyShootout[10].pedIndex) AND NOT IS_PED_INJURED(sEnemyShootout[10].pedIndex) CLEAR_PED_TASKS(sEnemyShootout[10].pedIndex) TASK_COMBAT_PED(sEnemyShootout[10].pedIndex, PLAYER_PED(CHAR_FRANKLIN)) SET_PED_ALERTNESS(sEnemyShootout[10].pedIndex, AS_MUST_GO_TO_COMBAT) FORCE_PED_MOTION_STATE(sEnemyShootout[10].pedIndex, MS_ON_FOOT_RUN) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyShootout[10].pedIndex, <<957.4456, -2185.1714, 29.5391>>, 1.0) SET_COMBAT_FLOAT(sEnemyShootout[10].pedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 0.0) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[10].pedIndex, CA_CAN_USE_DYNAMIC_STRAFE_DECISIONS, FALSE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[10].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[10].pedIndex, CM_DEFENSIVE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[10].pedIndex, CA_CAN_CHARGE, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyShootout[10].pedIndex, FALSE) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 4, sEnemyShootout[10].pedIndex, "MCH2CHIN2") PLAY_PED_AMBIENT_SPEECH(sEnemyShootout[10].pedIndex, "GENERIC_CURSE_HIGH", SPEECH_PARAMS_FORCE_SHOUTED) ENDIF ADVANCE_CUTSCENE() ENDIF ENDIF BREAK CASE 2 IF DOES_ENTITY_EXIST(sEnemyOutside[2].pedIndex) AND NOT IS_PED_INJURED(sEnemyOutside[2].pedIndex) SET_PED_COMBAT_MOVEMENT(sEnemyOutside[2].pedIndex, CM_DEFENSIVE) ENDIF IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = intAbattoir PRINT_ADV("MCH2_RESCUE") SAFE_ADD_BLIP_PED(blipMichael, sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE) ADVANCE_CUTSCENE() ENDIF BREAK CASE 3 IF HAS_LABEL_BEEN_TRIGGERED("MCH2_RESCUE") AND NOT IS_THIS_PRINT_BEING_DISPLAYED("MCH2_RESCUE") AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CREATE_CONVERSATION_FROM_SPECIFIC_LINE_ADV("MCH2_SHTS", "MCH2_SHTS_2") ADVANCE_CUTSCENE() ENDIF BREAK CASE 4 IF IS_GAMEPLAY_CAM_RENDERING() IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND NOT IS_MESSAGE_BEING_DISPLAYED() IF GET_GAME_TIMER() > iDialogueTimer[0] OR (NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) AND iSetPiece[SET_PIECE_RAIL] = 3) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy)) < 20.0 AND IS_ENTITY_ON_SCREEN(pedClosestEnemy) AND IS_PED_SHOOTING(PLAYER_PED(CHAR_FRANKLIN)) OR (NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) AND iSetPiece[SET_PIECE_RAIL] = 3) IF iDialogueLineCount[0] = -1 iDialogueLineCount[0] = 6 ENDIF IF iDialogueLineCount[1] = -1 iDialogueLineCount[1] = 6 ENDIF IF iDialogueLineCount[2] = -1 iDialogueLineCount[2] = 6 ENDIF IF iDialogueLineCount[iDialogueStage] > 0 IF iDialogueStage = 0 IF DOES_ENTITY_EXIST(pedClosestEnemy) AND NOT IS_PED_INJURED(pedClosestEnemy) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 3, pedClosestEnemy, "MCH2CHIN1") CREATE_CONVERSATION_ADV("MCH2_BEFORE") ENDIF iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(2000, 5000) iDialogueLineCount[iDialogueStage]-- iDialogueStage++ ELIF iDialogueStage = 1 IF DOES_ENTITY_EXIST(pedClosestEnemy) AND NOT IS_PED_INJURED(pedClosestEnemy) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 4, pedClosestEnemy, "MCH2CHIN5") CREATE_CONVERSATION_ADV("MCH2_BEFOR2") ENDIF iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(2000, 5000) iDialogueLineCount[iDialogueStage]-- iDialogueStage++ ELIF iDialogueStage = 2 CREATE_CONVERSATION_ADV("MCH2_SHTF", CONV_PRIORITY_MEDIUM, FALSE) iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(2000, 5000) iDialogueLineCount[iDialogueStage]-- iDialogueStage = 0 ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH IF NOT HAS_LABEL_BEEN_TRIGGERED("EnteredAbattoir") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<984.463074, -2187.068848, 28.977724>>, <<952.025391, -2183.805908, 33.051861>>, 4.0) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<980.336243, -2159.359131, 32.683861>>, <<964.162415, -2157.859863, 35.670811>>, 10.0) OR IS_BULLET_IN_ANGLED_AREA(<<980.336243, -2159.359131, 32.683861>>, <<964.162415, -2157.859863, 35.670811>>, 10.0) OR (intAbattoir != NULL AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = intAbattoir) SET_LABEL_AS_TRIGGERED("EnteredAbattoir", TRUE) ENDIF ELSE //Spawn Enemies IF NOT HAS_LABEL_BEEN_TRIGGERED("ShootoutWave1") //Entry Corridoor - Shootout: 4, 5, 6 IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<974.844421, -2184.315918, 31.977201>>, <<10.0, 5.0, 3.0>>) //sEnemyShootout createEnemy(sEnemyShootout[4], <<998.4456, -2180.6499, 28.7595>>, 135.8026, WEAPONTYPE_SMG, G_M_M_CHIGOON_01) sEnemyShootout[4].vLocate[0] = <<984.091248, -2187.797119, 30.501015>> sEnemyShootout[4].vLocSize[0] = <<1.5, 1.5, 1.5>> sEnemyShootout[4].eAdvanceStyle[0] = GUN_TO_POINT sEnemyShootout[4].vPoint[0] = <<997.2999, -2185.4778, 29.0007>> sEnemyShootout[4].fSpeed[0] = PEDMOVEBLENDRATIO_RUN SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[4].pedIndex, CA_BLIND_FIRE_IN_COVER, FALSE) createEnemy(sEnemyShootout[5], <<993.3096, -2172.7703, 29.2005>>, 263.6470, WEAPONTYPE_PUMPSHOTGUN, G_M_M_CHIGOON_01) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyShootout[5].pedIndex, <<993.3096, -2172.7703, 29.2005>>, 1.5) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[5].pedIndex, CA_BLIND_FIRE_IN_COVER, FALSE) TASK_STAY_IN_COVER(sEnemyShootout[5].pedIndex) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyShootout[5].pedIndex, 500.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyShootout[5].pedIndex, TRUE) createEnemy(sEnemyShootout[6], <<995.6730, -2179.0708, 29.0006>>, -5.3, WEAPONTYPE_SMG) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[6].pedIndex, CM_STATIONARY) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyShootout[6].pedIndex, TRUE) REPEAT COUNT_OF(sEnemyShootout) i IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemyShootout[i].pedIndex, intAbattoir) ENDIF ENDREPEAT #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemyShootout) i IF NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemyShootout[i].pedIndex, "Shootout ", i) sEnemyShootout[i].sDebugName = CONCATENATE_STRINGS("Shootout ", GET_STRING_FROM_INT(i)) ENDIF ENDREPEAT #ENDIF REPEAT COUNT_OF(sEnemyShootout) i IF i != 6 IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) TASK_COMBAT_PED(sEnemyShootout[i].pedIndex, PLAYER_PED(CHAR_FRANKLIN)) ENDIF ENDIF ENDIF ENDREPEAT SET_LABEL_AS_TRIGGERED("ShootoutWave1", TRUE) ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("ShootoutWave2") //Entry Room - Shootout: 7, 8, 9 and Set Piece: SET_PIECE_STEAM, SET_PIECE_RAIL IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<994.374084, -2175.041748, 31.483383>>, <<7.0, 8.0, 3.5>>) //sEnemyShootout createEnemy(sEnemyShootout[7], <<970.51898, -2158.60938, 28.4752>>, 266.3385, WEAPONTYPE_PISTOL) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[7].pedIndex, CM_STATIONARY) SET_PED_ACCURACY(sEnemyShootout[7].pedIndex, 1) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyShootout[7].pedIndex, TRUE) createEnemy(sEnemyShootout[8], <<967.1279, -2166.9990, 29.8864>>, 265.5443, WEAPONTYPE_ASSAULTRIFLE, G_M_M_CHIGOON_01) SET_ENTITY_HEALTH(sEnemyShootout[8].pedIndex, 105) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[8].pedIndex, CM_STATIONARY) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyShootout[8].pedIndex, <<967.1279, -2166.9990, 29.8864>>, 1.5, TRUE) createEnemy(sEnemyShootout[9], <<966.2576, -2161.1187, 28.4930>>, 178.2352, WEAPONTYPE_SMG) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[9].pedIndex, CM_DEFENSIVE) REPEAT COUNT_OF(sEnemyShootout) i IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemyShootout[i].pedIndex, intAbattoir) ENDIF ENDREPEAT #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemyShootout) i IF NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemyShootout[i].pedIndex, "Shootout ", i) sEnemyShootout[i].sDebugName = CONCATENATE_STRINGS("Shootout ", GET_STRING_FROM_INT(i)) ENDIF ENDREPEAT #ENDIF REPEAT COUNT_OF(sEnemyShootout) i IF i != 6 IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) TASK_COMBAT_PED(sEnemyShootout[i].pedIndex, PLAYER_PED(CHAR_FRANKLIN)) ENDIF ENDIF ENDIF ENDREPEAT //sEnemySetPiece createEnemy(sEnemySetPiece[SET_PIECE_STEAM], <<976.6239, -2166.3784, 30.4104 + 0.25>>, 266.3925, WEAPONTYPE_ASSAULTRIFLE) SET_PED_ALLOWED_TO_DUCK(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, FALSE) createEnemy(sEnemySetPiece[SET_PIECE_RAIL], <<970.7867, -2163.6367, 28.4890>>, 266.1377, WEAPONTYPE_PISTOL) #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemySetPiece) i IF DOES_ENTITY_EXIST(sEnemySetPiece[i].pedIndex) IF NOT IS_PED_INJURED(sEnemySetPiece[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemySetPiece[i].pedIndex, "SetPiece ", i) sEnemySetPiece[i].sDebugName = CONCATENATE_STRINGS("SetPiece ", GET_STRING_FROM_INT(i)) ENDIF ENDIF ENDREPEAT #ENDIF REPEAT COUNT_OF(sEnemySetPiece) i IF i = ENUM_TO_INT(SET_PIECE_STEAM) OR i = ENUM_TO_INT(SET_PIECE_GRINDER) OR i = ENUM_TO_INT(SET_PIECE_CUTTER) IF DOES_ENTITY_EXIST(sEnemySetPiece[i].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemySetPiece[i].pedIndex, intAbattoir) SET_PED_CONFIG_FLAG(sEnemySetPiece[i].pedIndex, PCF_DontActivateRagdollFromBulletImpact, TRUE) SET_PED_CONFIG_FLAG(sEnemySetPiece[i].pedIndex, PCF_DontActivateRagdollFromElectrocution, TRUE) SET_PED_CONFIG_FLAG(sEnemySetPiece[i].pedIndex, PCF_DontActivateRagdollFromFire, TRUE) SET_RAGDOLL_BLOCKING_FLAGS(sEnemySetPiece[i].pedIndex, RBF_BULLET_IMPACT | RBF_EXPLOSION | RBF_ELECTROCUTION | RBF_FIRE | RBF_RUBBER_BULLET)SET_RAGDOLL_BLOCKING_FLAGS(sEnemySetPiece[i].pedIndex, RBF_FIRE) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[i].pedIndex, CM_STATIONARY) #IF IS_DEBUG_BUILD PRINTLN("SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[", i,"].pedIndex, CM_STATIONARY)") #ENDIF SET_PED_SUFFERS_CRITICAL_HITS(sEnemySetPiece[i].pedIndex, FALSE) SET_PED_MAX_HEALTH(sEnemySetPiece[i].pedIndex, 1000) SET_ENTITY_HEALTH(sEnemySetPiece[i].pedIndex, 1000) SET_PED_STRAFE_CLIPSET(sEnemySetPiece[i].pedIndex, "move_ped_strafing") ENDIF ENDIF ENDREPEAT IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, intAbattoir) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, TRUE) ENDIF SET_LABEL_AS_TRIGGERED("ShootoutWave2", TRUE) ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("ShootoutWave3") //Main Corridoor - Shootout: 11, 12, 13, 14, 15 and Set Piece: SET_PIECE_STAIR, SET_PIECE_GRINDER, SET_PIECE_CUTTER IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<972.544800, -2166.483154, 31.963011>>, <<8.5, 5.5, 3.5>>) //sEnemyShootout createEnemy(sEnemyShootout[11], <<994.4498, -2152.9666, 28.4764>>, 137.2933, WEAPONTYPE_PISTOL) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[11].pedIndex, CM_STATIONARY) createEnemy(sEnemyShootout[12], <<985.8372, -2161.9763, 28.4865>>, 353.2941, WEAPONTYPE_ASSAULTRIFLE, G_M_M_CHIGOON_01) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[12].pedIndex, CM_DEFENSIVE) SET_ENTITY_LOD_DIST(sEnemyShootout[12].pedIndex, 20) createEnemy(sEnemyShootout[13], <<996.5764, -2158.7720, 28.5003>>, 173.2941, WEAPONTYPE_SMG) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[13].pedIndex, CM_DEFENSIVE) createEnemy(sEnemyShootout[14], <<996.8381, -2152.1233, 28.4765>>, 137.2934, WEAPONTYPE_SMG) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[14].pedIndex, CM_STATIONARY) createEnemy(sEnemyShootout[15], <<975.6500, -2159.4011, 28.4758>>, 209.9887, WEAPONTYPE_PISTOL, G_M_M_CHIGOON_01) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[15].pedIndex, CM_DEFENSIVE) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyShootout[15].pedIndex, <<975.6500, -2159.4011, 28.4758>>, 1.5, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyShootout[15].pedIndex, TRUE) REPEAT COUNT_OF(sEnemyShootout) i IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemyShootout[i].pedIndex, intAbattoir) ENDIF ENDREPEAT #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemyShootout) i IF NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemyShootout[i].pedIndex, "Shootout ", i) sEnemyShootout[i].sDebugName = CONCATENATE_STRINGS("Shootout ", GET_STRING_FROM_INT(i)) ENDIF ENDREPEAT #ENDIF REPEAT COUNT_OF(sEnemyShootout) i IF i != 6 IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) TASK_COMBAT_PED(sEnemyShootout[i].pedIndex, PLAYER_PED(CHAR_FRANKLIN)) ENDIF ENDIF ENDIF ENDREPEAT //sEnemySetPiece createEnemy(sEnemySetPiece[SET_PIECE_GRINDER], <<990.69, -2161.42, 30.4404>>, 82.2840, WEAPONTYPE_SMG, G_M_M_CHIGOON_01) SET_PED_ALLOWED_TO_DUCK(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, FALSE) createEnemy(sEnemySetPiece[SET_PIECE_STAIR], <<978.2984, -2156.2178, 30.1027>>, 86.4433, WEAPONTYPE_PUMPSHOTGUN, G_M_M_CHIGOON_01) createEnemy(sEnemySetPiece[SET_PIECE_CUTTER], <<997.6876, -2144.3420, 28.5000>>, 173.3068, WEAPONTYPE_ASSAULTRIFLE) #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemySetPiece) i IF DOES_ENTITY_EXIST(sEnemySetPiece[i].pedIndex) IF NOT IS_PED_INJURED(sEnemySetPiece[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemySetPiece[i].pedIndex, "SetPiece ", i) sEnemySetPiece[i].sDebugName = CONCATENATE_STRINGS("SetPiece ", GET_STRING_FROM_INT(i)) ENDIF ENDIF ENDREPEAT #ENDIF REPEAT COUNT_OF(sEnemySetPiece) i IF i = ENUM_TO_INT(SET_PIECE_STEAM) OR i = ENUM_TO_INT(SET_PIECE_GRINDER) OR i = ENUM_TO_INT(SET_PIECE_CUTTER) IF DOES_ENTITY_EXIST(sEnemySetPiece[i].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemySetPiece[i].pedIndex, intAbattoir) SET_PED_CONFIG_FLAG(sEnemySetPiece[i].pedIndex, PCF_DontActivateRagdollFromBulletImpact, TRUE) SET_PED_CONFIG_FLAG(sEnemySetPiece[i].pedIndex, PCF_DontActivateRagdollFromElectrocution, TRUE) SET_PED_CONFIG_FLAG(sEnemySetPiece[i].pedIndex, PCF_DontActivateRagdollFromFire, TRUE) SET_RAGDOLL_BLOCKING_FLAGS(sEnemySetPiece[i].pedIndex, RBF_BULLET_IMPACT | RBF_EXPLOSION | RBF_ELECTROCUTION | RBF_FIRE | RBF_RUBBER_BULLET)SET_RAGDOLL_BLOCKING_FLAGS(sEnemySetPiece[i].pedIndex, RBF_FIRE) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[i].pedIndex, CM_STATIONARY) #IF IS_DEBUG_BUILD PRINTLN("SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[", i,"].pedIndex, CM_STATIONARY)") #ENDIF SET_PED_SUFFERS_CRITICAL_HITS(sEnemySetPiece[i].pedIndex, FALSE) SET_PED_MAX_HEALTH(sEnemySetPiece[i].pedIndex, 1000) SET_ENTITY_HEALTH(sEnemySetPiece[i].pedIndex, 1000) SET_PED_STRAFE_CLIPSET(sEnemySetPiece[i].pedIndex, "move_ped_strafing") ENDIF ENDIF ENDREPEAT IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, intAbattoir) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, TRUE) ENDIF IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, TRUE) ENDIF SET_LABEL_AS_TRIGGERED("ShootoutWave3", TRUE) ENDIF ENDIF ENDIF IF (iCutsceneStage < 3 OR TIMERA() < 3000) AND NOT HAS_LABEL_BEEN_TRIGGERED("EnteredAbattoir") REPEAT COUNT_OF(sEnemyShootout) i IF i <> 10 IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) AND NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) SET_PED_RESET_FLAG(sEnemyShootout[i].pedIndex, PRF_BlockWeaponFire, TRUE) ENDIF ENDIF ENDREPEAT ENDIF // IF IS_ENTITY_ON_SCREEN(PLAYER_PED(CHAR_MICHAEL)) // IF NOT bDoPlayerShootUpsideDown // IF CREATE_CONVERSATION(sPedsForConversation, "MCH2AUD", "MCHHP1", CONV_PRIORITY_MEDIUM) // iShootDownMichaelTextProg++ // ENDIF // ELSE // IF CREATE_CONVERSATION(sPedsForConversation, "MCH2AUD", "MCHTWP", CONV_PRIORITY_MEDIUM) //Franklin! Throw me a fucking gun! // iShootDownMichaelTextProg++ // ENDIF // ENDIF // ENDIF // IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() // IF NOT bDoPlayerSHootUpsideDown // PRINT_ADV("MCH2_RELMCH") // // IF DOES_ENTITY_EXIST(objHook) // SET_OBJECT_TARGETTABLE(objHook, TRUE) // ENDIF // // iShootDownMichaelTextProg++ // ELSE // PRINT_ADV("MCH2_GETCLM") //Get closer to Michael // iShootDownMichaelTextProg++ // ENDIF // ENDIF // BREAK // CASE 2 // IF NOT IS_MESSAGE_BEING_DISPLAYED() // IF NOT bDoPlayerSHootUpsideDown // IF iShootDownMichaelTimer = 0 // GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), wtPlayer) // // IF wtPlayer = WEAPONTYPE_PUMPSHOTGUN // IF NOT IS_ENTITY_DEAD(sBuddy[MISSION_CHAR_MICHAEL].ped) // IF IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sBuddy[MISSION_CHAR_MICHAEL].ped) // OR IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), objHook) // OR IS_PLAYER_FREE_AIMING_AT_ENTITY( PLAYER_ID(), sBuddy[MISSION_CHAR_MICHAEL].ped) // OR IS_PLAYER_FREE_AIMING_AT_ENTITY( PLAYER_ID(), objHook) // IF CREATE_CONVERSATION(sPedsForConversation, "MCH2AUD", "MCHES4", CONV_PRIORITY_MEDIUM) // iShootDownMichaelTextProg++ // ENDIF // ELSE // IF CREATE_CONVERSATION(sPedsForConversation, "MCH2AUD", "MCHHP2", CONV_PRIORITY_MEDIUM) // iShootDownMichaelTextProg++ // ENDIF // ENDIF // ENDIF // ELSE // IF CREATE_CONVERSATION(sPedsForConversation, "MCH2AUD", "MCHHP2", CONV_PRIORITY_MEDIUM) // iShootDownMichaelTextProg++ // ENDIF // ENDIF // ENDIF // ELSE // IF bPlayerSHootingUpsideDown // PRINT_HELP_ADV("MCH2_UPSAIM") //Controls for aiming upside down // iShootDownMichaelTextProg++ // ENDIF // ENDIF // ENDIF // BREAK // CASE 3 // IF NOT bDoPlayerSHootUpsideDown // IF iShootDownMichaelTimer = 0 // GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), wtPlayer) // IF wtPlayer = WEAPONTYPE_PUMPSHOTGUN // KILL_ANY_CONVERSATION() // IF NOT IS_ENTITY_DEAD(sBuddy[MISSION_CHAR_MICHAEL].ped) // IF IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sBuddy[MISSION_CHAR_MICHAEL].ped) // OR IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), objHook) // OR IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(), sBuddy[MISSION_CHAR_MICHAEL].ped) // OR IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(), objHook) // CREATE_CONVERSATION_ADV("MCHES4") // // iShootDownMichaelTextProg++ // ENDIF // ENDIF // ENDIF // ENDIF // ELSE // IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED() // PRINT_HELP("MCH2_RELMCH2") // iShootDownMichaelTextProg++ // ENDIF // ENDIF // BREAK // ENDSWITCH //Tyre Burst! IF NOT IS_ENTITY_DEAD(vehEnemy[0]) //CAR MODEL: Bison //FRONT LEFT WHEEL OFFSET: <<-1.0000, 1.8000, -0.1500>> //FRONT RIGHT WHEEL OFFSET: <<1.0000, 1.8000, -0.1500>> //REAR LEFT WHEEL OFFSET: <<1.0000, -1.6000, -0.1500>> //REAR RIGHT WHEEL OFFSET: <<-1.0000, -1.6000, -0.1500>> //FRONT LEFT DAMAGE OFFSET: <<-1.0000, 0.6500, 0.5000>> //FRONT RIGHT DAMAGE OFFSET: <<1.0000, 0.6500, 0.5000>> //REAR LEFT DAMAGE OFFSET: <<-1.0000, -2.0000, 0.5000>> //REAR RIGHT DAMAGE OFFSET: <<1.0000, -2.0500, 0.5000>> //DAMAGE: 100.0000 //DEFORMATION: 100.0000 IF NOT IS_VEHICLE_TYRE_BURST(vehEnemy[0], SC_WHEEL_CAR_FRONT_RIGHT) IF IS_BULLET_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehEnemy[0], <<1.0000, 1.8000, -0.1500>>), 2.0) SET_VEHICLE_TYRE_BURST(vehEnemy[0], SC_WHEEL_CAR_FRONT_RIGHT) SMASH_VEHICLE_WINDOW(vehEnemy[0], SC_WINDOW_FRONT_RIGHT) SMASH_VEHICLE_WINDOW(vehEnemy[0], SC_WINDOW_REAR_RIGHT) //SET_VEHICLE_DAMAGE(vehEnemy[0], <<1.0000, 0.6500, 0.5000>>, 100.0, 100.0, TRUE) ENDIF ENDIF IF NOT IS_VEHICLE_TYRE_BURST(vehEnemy[0], SC_WHEEL_CAR_REAR_RIGHT) IF IS_BULLET_IN_AREA(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehEnemy[0], <<1.0000, -1.6000, -0.1500>>), 2.0) SET_VEHICLE_TYRE_BURST(vehEnemy[0], SC_WHEEL_CAR_REAR_RIGHT) //SET_VEHICLE_DAMAGE(vehEnemy[0], <<1.0000, -2.0500, 0.5000>>, 100.0, 100.0, TRUE) ENDIF ENDIF ENDIF //Open Combat IF DOES_ENTITY_EXIST(sEnemyShootout[10].pedIndex) AND NOT IS_PED_INJURED(sEnemyShootout[10].pedIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat") IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyShootout[10].pedIndex)) <= 7.5 OR GET_ENTITY_HEALTH(sEnemyShootout[10].pedIndex) < 200 OR IS_PED_RAGDOLL(sEnemyShootout[10].pedIndex) OR IS_ENTITY_AT_COORD(sEnemyShootout[10].pedIndex, <<957.4456, -2185.1714, 29.5391>>, <<1.0, 1.0, 3.0>>) SET_PED_ALERTNESS(sEnemyShootout[10].pedIndex, AS_MUST_GO_TO_COMBAT) REMOVE_PED_DEFENSIVE_AREA(sEnemyShootout[10].pedIndex) SET_COMBAT_FLOAT(sEnemyShootout[10].pedIndex, CCF_STRAFE_WHEN_MOVING_CHANCE, 0.75) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[10].pedIndex, CA_CAN_USE_DYNAMIC_STRAFE_DECISIONS, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[10].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[10].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[10].pedIndex, CA_CAN_CHARGE, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyShootout[10].pedIndex, FALSE) SET_LABEL_AS_TRIGGERED("OpenCombat", TRUE) ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat0") IF DOES_ENTITY_EXIST(sEnemyShootout[1].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[1].pedIndex) IF GET_ENTITY_HEALTH(sEnemyShootout[0].pedIndex) < 200 OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<963.077393, -2185.471924, 31.150967>>, <<3.0, 2.0, 2.0>>) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyShootout[1].pedIndex, <<978.5643, -2185.9519, 29.0001>>, 2.0) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[1].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[1].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[1].pedIndex, CA_CAN_CHARGE, TRUE) IF NOT IS_PED_INJURED(sEnemyShootout[0].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[0].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[0].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[0].pedIndex, CA_CAN_CHARGE, TRUE) ENDIF SET_LABEL_AS_TRIGGERED("OpenCombat0", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat1") IF DOES_ENTITY_EXIST(sEnemyShootout[3].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[3].pedIndex) IF GET_ENTITY_HEALTH(sEnemyShootout[3].pedIndex) < 200 OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<982.726868, -2187.271484, 30.727684>>, <<2.0, 2.0, 2.0>>) OR (IS_PED_INJURED(sEnemyShootout[0].pedIndex) AND IS_PED_INJURED(sEnemyShootout[1].pedIndex) AND IS_PED_INJURED(sEnemyShootout[2].pedIndex)) REMOVE_PED_DEFENSIVE_AREA(sEnemyShootout[3].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[3].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[3].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[3].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat1", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat2") IF DOES_ENTITY_EXIST(sEnemyShootout[4].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[4].pedIndex) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<982.726868, -2187.271484, 30.727684>>, <<2.0, 2.0, 2.0>>) REMOVE_PED_DEFENSIVE_AREA(sEnemyShootout[4].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[4].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[4].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[4].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat2", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat3") IF DOES_ENTITY_EXIST(sEnemyShootout[5].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[5].pedIndex) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<993.417542, -2174.615967, 28.490120>>, <<991.907959, -2190.386963, 33.978271>>, 12.5) AND IS_ENTITY_ON_SCREEN(PLAYER_PED_ID()) AND NOT IS_ENTITY_OCCLUDED(PLAYER_PED_ID()) REMOVE_PED_DEFENSIVE_AREA(sEnemyShootout[5].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[5].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[5].pedIndex, CM_WILLADVANCE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyShootout[5].pedIndex, 500.0) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[5].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat3", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat4") IF DOES_ENTITY_EXIST(sEnemyShootout[6].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[6].pedIndex) IF IS_PED_INJURED(sEnemyShootout[5].pedIndex) OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<996.895630, -2172.183350, 30.974617>>, <<4.0, 2.0, 3.0>>) REMOVE_PED_DEFENSIVE_AREA(sEnemyShootout[6].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[6].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[6].pedIndex, CM_WILLADVANCE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyShootout[6].pedIndex, 500.0) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[6].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat4", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat4a") IF DOES_ENTITY_EXIST(sEnemyShootout[7].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[7].pedIndex) IF IS_PED_INJURED(sEnemyShootout[8].pedIndex) OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<984.216492, -2168.708496, 32.463554>>, <<5.0, 4.0, 4.0>>) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<971.6310, -2169.5830, 28.5254>>, PLAYER_PED_ID(), PEDMOVE_RUN, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 500.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyShootout[7].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) REMOVE_PED_DEFENSIVE_AREA(sEnemyShootout[7].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[7].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[7].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[7].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat4a", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat5") IF DOES_ENTITY_EXIST(sEnemyShootout[9].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[9].pedIndex) IF (IS_PED_INJURED(sEnemyShootout[6].pedIndex) AND IS_PED_INJURED(sEnemyShootout[7].pedIndex) AND IS_PED_INJURED(sEnemyShootout[8].pedIndex)) OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<968.906372, -2167.271240, 30.966833>>,<<4.0, 4.0, 3.0>>) REMOVE_PED_DEFENSIVE_AREA(sEnemyShootout[9].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[9].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[9].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[9].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat5", TRUE) ENDIF ENDIF ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("OpenCombat5") IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat5a") IF DOES_ENTITY_EXIST(sEnemyShootout[15].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[15].pedIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("EnteredArea5a") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<963.611145, -2166.840820, 28.225246>>, <<977.714966, -2168.133057, 33.455669>>, 7.0) iAdvanceTimer = GET_GAME_TIMER() + 1000 SET_LABEL_AS_TRIGGERED("EnteredArea5a", TRUE) ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("EnteredArea5a") AND (GET_GAME_TIMER() > iAdvanceTimer OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<972.798096, -2167.464355, 28.460669>>, <<963.478210, -2166.797852, 33.475464>>, 7.5)) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<970.4205, -2166.4172, 28.4646>>, PLAYER_PED_ID(), PEDMOVE_RUN, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 500.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyShootout[15].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) REMOVE_PED_DEFENSIVE_AREA(sEnemyShootout[15].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[15].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[15].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[15].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat5a", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("FreeEnemy") IF DOES_ENTITY_EXIST(sEnemyShootout[2].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[2].pedIndex) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<984.336243, -2168.873291, 28.462013>>, <<990.817139, -2169.578857, 33.468571>>, 7.5) AND NOT IS_ENTITY_ON_SCREEN(sEnemyShootout[2].pedIndex) AND IS_ENTITY_OCCLUDED(sEnemyShootout[2].pedIndex) SET_PED_POSITION(sEnemyShootout[2].pedIndex, <<987.8972, -2181.2058, 29.0561>>, 311.3820) REMOVE_PED_DEFENSIVE_AREA(sEnemyShootout[2].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[2].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[2].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[2].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("FreeEnemy", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat6") IF DOES_ENTITY_EXIST(sEnemyShootout[12].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[12].pedIndex) IF IS_PED_INJURED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<969.533569, -2158.632324, 30.974899>>, <<6.0, 6.0, 3.0>>) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<973.709839, -2159.690430, 30.475533>>, <<2.0, 2.0, 2.0>>) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<976.0801, -2159.8713, 28.4758>>, PLAYER_PED_ID(), PEDMOVE_RUN, TRUE) ENDIF TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 500.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyShootout[12].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) SET_PED_ANGLED_DEFENSIVE_AREA(sEnemyShootout[12].pedIndex, <<991.809692, -2160.414063, 28.580540>>, <<973.678284, -2158.776123, 35.475449>>, 11.0) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[12].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[12].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[12].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat6", TRUE) ENDIF ENDIF ENDIF ELSE IF DOES_ENTITY_EXIST(sEnemyShootout[12].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[12].pedIndex) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<973.709839, -2159.690430, 30.475533>>, <<2.0, 2.0, 2.0>>) IF GET_SCRIPT_TASK_STATUS(sEnemyShootout[12].pedIndex, SCRIPT_TASK_PERFORM_SEQUENCE) = PERFORMING_TASK CLEAR_PED_TASKS(sEnemyShootout[12].pedIndex) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyShootout[12].pedIndex, 500.0) ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat7") IF DOES_ENTITY_EXIST(sEnemyShootout[11].pedIndex) AND DOES_ENTITY_EXIST(sEnemyShootout[14].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[11].pedIndex) AND NOT IS_PED_INJURED(sEnemyShootout[14].pedIndex) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<975.501404, -2163.882324, 28.475899>>, <<976.430664, -2153.790771, 32.475471>>, 5.0) OR IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) OR IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(), sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<989.3090, -2159.1226, 28.4763>>, PLAYER_PED_ID(), PEDMOVE_SPRINT, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<986.5796, -2161.7283, 28.4763>>, PLAYER_PED_ID(), PEDMOVE_SPRINT, TRUE) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyShootout[11].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) FORCE_PED_MOTION_STATE(sEnemyShootout[11].pedIndex, MS_ON_FOOT_RUN) SET_PED_ANGLED_DEFENSIVE_AREA(sEnemyShootout[11].pedIndex, <<991.809692, -2160.414063, 28.580540>>, <<973.678284, -2158.776123, 35.475449>>, 11.0) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[11].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[11].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[11].pedIndex, CA_CAN_CHARGE, TRUE) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<984.2305, -2157.1267, 30.0791>>, PLAYER_PED_ID(), PEDMOVE_SPRINT, TRUE) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyShootout[14].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) FORCE_PED_MOTION_STATE(sEnemyShootout[14].pedIndex, MS_ON_FOOT_RUN) SET_PED_ANGLED_DEFENSIVE_AREA(sEnemyShootout[14].pedIndex, <<991.809692, -2160.414063, 28.580540>>, <<973.678284, -2158.776123, 35.475449>>, 11.0) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[14].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[14].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[14].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat7", TRUE) ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat8") IF DOES_ENTITY_EXIST(sEnemyShootout[13].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[13].pedIndex) IF (IS_PED_INJURED(sEnemyShootout[11].pedIndex) AND IS_PED_INJURED(sEnemyShootout[14].pedIndex)) OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<981.156494, -2159.278564, 30.976007>>,<<6.0, 5.5, 3.0>>) REMOVE_PED_DEFENSIVE_AREA(sEnemyShootout[13].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[13].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyShootout[13].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyShootout[13].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat8", TRUE) ENDIF ENDIF ENDIF ENDIF //Runs IF NOT HAS_LABEL_BEEN_TRIGGERED("PedRuns") IF DOES_ENTITY_EXIST(sEnemyShootout[6].pedIndex) IF NOT IS_PED_INJURED(sEnemyShootout[6].pedIndex) VECTOR vGameCamRot = GET_GAMEPLAY_CAM_ROT() IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<995.530334, -2190.534180, 28.978443>>, <<996.244202, -2182.337158, 34.977020>>, 6.5) OR (IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<985.945251, -2187.553955, 28.977818>>, <<993.839844, -2188.007324, 35.035198>>, 7.0) AND (WRAP(vGameCamRot.Z, 0.0, 360.0) < 10.0 OR WRAP(vGameCamRot.Z, 0.0, 360.0) > 280.0) AND IS_ENTITY_ON_SCREEN(sEnemyShootout[6].pedIndex)) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<981.6053, -2171.1108, 29.2243>>, PEDMOVE_RUN) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyShootout[6].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) FORCE_PED_MOTION_STATE(sEnemyShootout[6].pedIndex, MS_ON_FOOT_RUN) SET_LABEL_AS_TRIGGERED("PedRuns", TRUE) ENDIF ENDIF ENDIF ENDIF //Rail SWITCH iSetPiece[SET_PIECE_RAIL] CASE 0 IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2SetPiece1) TASK_PLAY_ANIM_ADVANCED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, sAnimDictMic2SetPiece1, "goon_leap_rail", <<979.592, -2168.694, 28.539>>, <<0.0, 0.0, 0.0>>, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_OVERRIDE_PHYSICS | AF_IGNORE_GRAVITY, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) iSetPiece[SET_PIECE_RAIL]++ ENDIF ENDIF ENDIF BREAK CASE 1 IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, sAnimDictMic2SetPiece1, "goon_leap_rail") SET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, sAnimDictMic2SetPiece1, "goon_leap_rail", 0.400) SET_ENTITY_ANIM_SPEED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, sAnimDictMic2SetPiece1, "goon_leap_rail", 0.0) iSetPiece[SET_PIECE_RAIL]++ ENDIF BREAK CASE 2 IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<995.957214, -2169.708740, 31.497860>>, <<5.0, 5.0, 3.0>>) IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, sAnimDictMic2SetPiece1, "goon_leap_rail") SET_ENTITY_ANIM_SPEED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, sAnimDictMic2SetPiece1, "goon_leap_rail", 1.0) iSetPiece[SET_PIECE_RAIL]++ ENDIF ENDIF BREAK CASE 3 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) IF NOT IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, sAnimDictMic2SetPiece1, "goon_leap_rail") OR IS_PED_RAGDOLL(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) IF NOT IS_PED_RAGDOLL(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) TASK_PUT_PED_DIRECTLY_INTO_COVER(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, <<986.1974, -2166.4761, 28.4756>>, -1, FALSE, 0.0, TRUE, FALSE, covPoint[7]) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, TRUE) ENDIF iSetPiece[SET_PIECE_RAIL]++ ENDIF ENDIF BREAK CASE 4 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) IF IS_PED_IN_COVER(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, TRUE) OR IS_PED_RAGDOLL(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) OR GET_SCRIPT_TASK_STATUS(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, SCRIPT_TASK_ANY) != PERFORMING_TASK // OR (NOT IS_PED_IN_COVER(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) // AND NOT IS_PED_GOING_INTO_COVER(sEnemySetPiece[SET_PIECE_RAIL].pedIndex)) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, FALSE) SET_PED_ALERTNESS(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, AS_MUST_GO_TO_COMBAT) TASK_COMBAT_PED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, PLAYER_PED(CHAR_FRANKLIN)) //TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, 1000.0) REMOVE_PED_DEFENSIVE_AREA(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, CA_CAN_CHARGE, TRUE) iSetPiece[SET_PIECE_RAIL]++ ENDIF ENDIF BREAK ENDSWITCH IF iSetPiece[SET_PIECE_RAIL] < 3 IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<980.336243, -2159.359131, 32.683861>>, <<964.162415, -2157.859863, 35.670811>>, 10.0) CLEAR_PED_TASKS(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, FALSE) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemySetPiece[SET_PIECE_RAIL].pedIndex, <<986.2274, -2166.6877, 28.4755>>, 2.0) iSetPiece[SET_PIECE_RAIL] = 100 ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) REQUEST_SCRIPT_AUDIO_BANK("Michael_2_Acid_Bath") ELSE RELEASE_NAMED_SCRIPT_AUDIO_BANK("Michael_2_Acid_Bath") ENDIF ENDIF //Steam SWITCH iSetPiece[SET_PIECE_STEAM] CASE 0 IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) PED_BONETAG pbt GET_PED_LAST_DAMAGE_BONE(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, pbt) IF GET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) = GET_PED_MAX_HEALTH(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) IF NOT IS_ENTITY_AT_COORD(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, <<976.603149, -2166.035400, 32.155220>>, <<1.25, 1.25, 1.75>>) SET_PED_POSITION(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, <<976.6239, -2166.3784, 30.4104 + 0.25>>, 266.3925) ENDIF ENDIF IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<980.336243, -2159.359131, 32.683861>>, <<964.162415, -2157.859863, 35.670811>>, 10.0) CLEAR_PED_TASKS(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, FALSE) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, 105) iSetPiece[SET_PIECE_STEAM] = 100 ENDIF IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) IF (GET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) < 925 OR pbt = BONETAG_HEAD) IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<990.087097, -2169.110107, 32.472157>>, <<10.0, 8.5, 4.0>>) AND IS_ENTITY_AT_COORD(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, <<976.603149, -2166.035400, 32.155220>>, <<1.25, 1.25, 1.75>>) AND NOT IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_STEAM].pedIndex), 5.0) INFORM_MISSION_STATS_OF_INCREMENT(MIC2_UNIQUE_TRIAD_DEATHS) SET_PED_CAN_BE_TARGETTED(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, FALSE) //TASK_PLAY_ANIM_ADVANCED(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_bin", <<976.661, -2166.402, 31.687>>, <<0.0, 0.0, -124.560>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_OVERRIDE_PHYSICS | AF_IGNORE_GRAVITY | AF_HOLD_LAST_FRAME, 0.02, EULER_YXZ, AIK_DISABLE_LEG_IK) sceneSteam = CREATE_SYNCHRONIZED_SCENE(<<976.661, -2166.402, 31.687>>, <<0.0, 0.0, -124.560>>) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, sceneSteam, sAnimDictMic2SetPiece1, "goonfall_into_bin", SLOW_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, RBF_NONE, SLOW_BLEND_IN, AIK_DISABLE_LEG_IK) SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(sceneSteam, TRUE) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) SET_PED_DROPS_WEAPON(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) //Audio Scene IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOTOUT_ACID") START_AUDIO_SCENE("MI_2_SHOOTOUT_ACID") ENDIF //Audio PLAY_AUDIO(MIC2_ACID_BATH_OS) LOAD_AUDIO(MIC2_MULCHED) PLAY_SOUND_FROM_ENTITY(-1, "ACID_BATH_FALL", sEnemySetPiece[SET_PIECE_STEAM].pedIndex, "MICHAEL_2_SOUNDS") IF NOT bVideoRecording REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGH) bVideoRecording = TRUE ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_STEAM]++ ELSE SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, 5) APPLY_DAMAGE_TO_PED(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, 500, FALSE) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_STEAM].blipIndex) iSetPiece[SET_PIECE_STEAM] = 100 ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 1 // HIDE_HUD_AND_RADAR_THIS_FRAME() IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneSteam) //IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_bin") SET_SYNCHRONIZED_SCENE_RATE(sceneSteam, 0.75) //SET_ENTITY_ANIM_SPEED(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_bin", 0.75) ENDIF IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneSteam) //IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_bin") AND GET_SYNCHRONIZED_SCENE_PHASE(sceneSteam) >= 0.400 //AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_bin") > 0.400 //Removed by request - 740685 START_PARTICLE_FX_NON_LOOPED_AT_COORD("scr_acid_bath_splash", <<975.0, -2166.0, 29.5>>, VECTOR_ZERO) // SHAKE_CAM(camMain, "ROAD_VIBRATION_SHAKE", 1.5) // // SET_CONTROL_SHAKE(PLAYER_CONTROL, 1000, 150) IF NOT IS_MESSAGE_BEING_DISPLAYED() AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF DOES_ENTITY_EXIST(pedClosestEnemy) AND NOT IS_PED_INJURED(pedClosestEnemy) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy)) < 20.0 ADD_PED_FOR_DIALOGUE(sPedsForConversation, 6, pedClosestEnemy, "MCH2CHIN4") CREATE_CONVERSATION_ADV("MCH2_EWW") ENDIF ENDIF ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_STEAM]++ ENDIF BREAK CASE 2 // HIDE_HUD_AND_RADAR_THIS_FRAME() IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneSteam) //IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_bin") AND GET_SYNCHRONIZED_SCENE_PHASE(sceneSteam) >= 0.7 //AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_bin") >= 0.7 //0.800 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, 5) APPLY_DAMAGE_TO_PED(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, 500, FALSE) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_STEAM].blipIndex) SET_ENTITY_VISIBLE(sEnemySetPiece[SET_PIECE_STEAM].pedIndex, FALSE) ENDIF // IF NOT IS_PED_IN_COVER(PLAYER_PED_ID()) // SET_ENTITY_HEADING(PLAYER_PED_ID(), fHeadingTrack) // ENDIF // // SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) // // SHAKE_CAM(camMain, "ROAD_VIBRATION_SHAKE", 2.0) // // STOP_CAM_SHAKING(camMain, TRUE) // RENDER_SCRIPT_CAMS(FALSE, FALSE) // SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOTOUT_ACID") STOP_AUDIO_SCENE("MI_2_SHOOTOUT_ACID") ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_STEAM]++ ENDIF BREAK CASE 3 IF TIMERB() > 1000 // SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), FALSE) IF bVideoRecording REPLAY_STOP_EVENT() bVideoRecording = FALSE ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_STEAM]++ ENDIF BREAK ENDSWITCH //Stair SWITCH iSetPiece[SET_PIECE_STAIR] CASE 0 IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2SetPiece1) TASK_PLAY_ANIM_ADVANCED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair", <<974.258, -2155.561, 28.499>> + <<0.81, -0.07, 0.0>>, <<0.0, 0.0, 0.0>>, INSTANT_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_EXTRACT_INITIAL_OFFSET | AF_OVERRIDE_PHYSICS | AF_IGNORE_GRAVITY, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) //AF_FORCE_START FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) REPLAY_RECORD_BACK_FOR_TIME(3.0, 8.0, REPLAY_IMPORTANCE_HIGHEST) iSetPiece[SET_PIECE_STAIR]++ ENDIF ENDIF ENDIF BREAK CASE 1 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair") SET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair", 0.2) SET_ENTITY_ANIM_SPEED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair", 0.0) iSetPiece[SET_PIECE_STAIR]++ ENDIF ENDIF BREAK CASE 2 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) VECTOR vGameCamRot vGameCamRot = GET_GAMEPLAY_CAM_ROT() IF (IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<972.404663, -2160.942139, 28.475464>>, <<963.123535, -2170.124512, 33.975536>>, 9.0) AND (WRAP(vGameCamRot.Z, 0.0, 360.0) < 20.0 OR WRAP(vGameCamRot.Z, 0.0, 360.0) > 240.0)) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<973.534729, -2162.575195, 28.475765>>, <<963.480103, -2161.785400, 33.974361>>, 3.5) OR IS_BULLET_IN_ANGLED_AREA(<<980.336243, -2159.359131, 32.683861>>, <<964.162415, -2157.859863, 35.670811>>, 10.0) IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair") SET_ENTITY_ANIM_SPEED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair", 1.0) iSetPiece[SET_PIECE_STAIR]++ ENDIF ENDIF ENDIF BREAK CASE 3 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) IF ((IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair") AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair") > 0.552) //0.573) AND CAN_PED_SEE_HATED_PED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, PLAYER_PED(CHAR_FRANKLIN))) OR NOT IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair") OR GET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) < 200 SET_PED_RESET_FLAG(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, PRF_InstantBlendToAim, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, FALSE) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, <<967.4478, -2157.9443, 28.4746>>, 2.0) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<963.701782, -2158.603516, 28.474281>>, <<983.335876, -2160.993896, 34.476147>>, 10.0) IF NOT IS_PED_IN_COMBAT(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<967.4478, -2157.9443, 28.4746>>, PLAYER_PED_ID(), PEDMOVE_RUN, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) ENDIF ENDIF SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, CA_CAN_CHARGE, TRUE) iSetPiece[SET_PIECE_STAIR]++ ENDIF ENDIF BREAK CASE 4 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) IF NOT IS_PED_IN_COMBAT(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) IF (IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair") AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, sAnimDictMic2SetPiece1, "goon_rundownstair") > 0.5) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<967.4478, -2157.9443, 28.4746>>, PLAYER_PED_ID(), PEDMOVE_RUN, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) ENDIF ENDIF SET_PED_RESET_FLAG(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, PRF_InstantBlendToAim, TRUE) ENDIF BREAK ENDSWITCH IF iSetPiece[SET_PIECE_STAIR] < 3 IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<980.336243, -2159.359131, 32.683861>>, <<964.162415, -2157.859863, 35.670811>>, 10.0) CLEAR_PED_TASKS(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, FALSE) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemySetPiece[SET_PIECE_STAIR].pedIndex, <<967.4478, -2157.9443, 28.4746>>, 2.0) iSetPiece[SET_PIECE_STAIR] = 100 ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) REQUEST_SCRIPT_AUDIO_BANK("Michael_2_Kidnap_Mincer") ELSE RELEASE_NAMED_SCRIPT_AUDIO_BANK("Michael_2_Kidnap_Mincer") ENDIF ENDIF //Grinder SWITCH iSetPiece[SET_PIECE_GRINDER] CASE 0 IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) PED_BONETAG pbt GET_PED_LAST_DAMAGE_BONE(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, pbt) IF GET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) = GET_PED_MAX_HEALTH(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) IF NOT IS_ENTITY_AT_COORD(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, <<990.705078, -2161.330322, 32.166130>>, <<2.0, 2.0, 2.0>>) SET_PED_POSITION(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, <<990.69, -2161.42, 30.4404>>, 82.2840) ENDIF ENDIF IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) IF (GET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) < 925 OR pbt = BONETAG_HEAD) IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<975.189087, -2158.689941, 30.939890>>, <<12.0, 7.0, 2.25>>) AND IS_ENTITY_AT_COORD(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, <<990.705078, -2161.330322, 32.166130>>, <<2.0, 2.0, 2.0>>) AND NOT IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex), 5.0) INFORM_MISSION_STATS_OF_INCREMENT(MIC2_UNIQUE_TRIAD_DEATHS) SET_PED_CAN_BE_TARGETTED(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, FALSE) //TASK_PLAY_ANIM_ADVANCED(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_grinder", <<990.626, -2161.452, 31.691>>, <<0.0, 0.0, 90.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_OVERRIDE_PHYSICS | AF_IGNORE_GRAVITY | AF_HOLD_LAST_FRAME, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) //, 0.04 sceneGrinder = CREATE_SYNCHRONIZED_SCENE(<<990.626, -2161.452, 31.691>>, <<0.0, 0.0, 90.0>>) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, sceneGrinder, sAnimDictMic2SetPiece1, "goonfall_into_grinder", SLOW_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, RBF_NONE, SLOW_BLEND_IN, AIK_DISABLE_LEG_IK) SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(sceneGrinder, TRUE) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) REPLAY_RECORD_BACK_FOR_TIME(3.0, 8.0, REPLAY_IMPORTANCE_HIGHEST) //Audio Scene IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_GRINDER_1") START_AUDIO_SCENE("MI_2_GRINDER_1") ENDIF //Audio PLAY_AUDIO(MIC2_MULCHED) LOAD_AUDIO(MIC2_SPINNING_BLADES) IF NOT bVideoRecording REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGH) bVideoRecording = TRUE ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_GRINDER]++ ELSE APPLY_DAMAGE_TO_PED(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, 500, FALSE) //SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, 5) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_GRINDER].blipIndex) iSetPiece[SET_PIECE_GRINDER] = 100 ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 1 // HIDE_HUD_AND_RADAR_THIS_FRAME() IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrinder) //IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_grinder") AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrinder) >= 0.409 //AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_grinder") > 0.409 //0.265 START_PARTICLE_FX_NON_LOOPED_AT_COORD("scr_abattoir_ped_minced", <<992.7037, -2161.6229, 31.8097 - 1.0>>, VECTOR_ZERO) PLAY_SOUND_FROM_ENTITY(-1, "MINCER_FALL", sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, "MICHAEL_2_SOUNDS") //<<992.7037, -2161.9229, 31.8097 - 0.5>> IF NOT IS_MESSAGE_BEING_DISPLAYED() AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF DOES_ENTITY_EXIST(pedClosestEnemy) AND NOT IS_PED_INJURED(pedClosestEnemy) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy)) < 20.0 ADD_PED_FOR_DIALOGUE(sPedsForConversation, 5, pedClosestEnemy, "MCH2CHIN3") CREATE_CONVERSATION_ADV("MCH2_EWW2") ENDIF ENDIF ENDIF // SET_CAM_PARAMS(camMain, // <<991.046021,-2158.079102,30.699644>>, // <<7.825684,-0.000000,-155.579086>>, // 23.640654, // 0) // // SET_CAM_PARAMS(camMain, // <<991.211609,-2158.388672,30.747850>>, // <<5.259593,-0.000000,-153.277069>>, // 23.640654, // 2000, // GRAPH_TYPE_LINEAR, // GRAPH_TYPE_LINEAR) // // SHAKE_CAM(camMain, "ROAD_VIBRATION_SHAKE", 2.0) SETTIMERB(0) iSetPiece[SET_PIECE_GRINDER]++ ENDIF BREAK CASE 2 // HIDE_HUD_AND_RADAR_THIS_FRAME() // // SET_CONTROL_SHAKE(PLAYER_CONTROL, 100, 100) IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrinder) //IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_grinder") AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrinder) >= 0.9 //AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, sAnimDictMic2SetPiece1, "goonfall_into_grinder") >= 0.9 //1.000 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, 5) APPLY_DAMAGE_TO_PED(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex, 500, FALSE) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_GRINDER].blipIndex) ENDIF SAFE_DELETE_PED(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) // IF NOT IS_PED_IN_COVER(PLAYER_PED_ID()) // SET_ENTITY_HEADING(PLAYER_PED_ID(), fHeadingTrack) // ENDIF // SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) // // STOP_CAM_SHAKING(camMain, TRUE) // RENDER_SCRIPT_CAMS(FALSE, FALSE) // SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_GRINDER_1") STOP_AUDIO_SCENE("MI_2_GRINDER_1") ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_GRINDER]++ ENDIF BREAK CASE 3 IF TIMERB() > 1000 // SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), FALSE) IF bVideoRecording REPLAY_STOP_EVENT() bVideoRecording = FALSE ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_GRINDER]++ ENDIF BREAK ENDSWITCH IF DOES_ENTITY_EXIST(objCutter) REQUEST_SCRIPT_AUDIO_BANK("Michael_2_Meat_Chopper") ELSE RELEASE_NAMED_SCRIPT_AUDIO_BANK("Michael_2_Meat_Chopper") ENDIF //Cutter SWITCH iSetPiece[SET_PIECE_CUTTER] CASE 0 IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<996.487732, -2158.077881, 32.500244>>, <<25.0, 25.0, 4.0>>) LOAD_STREAM("MICHAEL_2_GOON_CHOPPED_APART_MASTER") ENDIF IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<996.487732, -2158.077881, 32.500244>>, <<15.0, 15.0, 4.0>>) TASK_AIM_GUN_AT_ENTITY(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, PLAYER_PED(CHAR_MICHAEL), -1) SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ENDIF IF IS_BULLET_IN_AREA(GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex), 5.0) OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex), <<5.0, 5.0, 4.0>>) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, 100.0) REMOVE_PED_DEFENSIVE_AREA(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, CA_CAN_CHARGE, TRUE) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, 150) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_CUTTER].blipIndex) CLEANUP_AI_PED_BLIP(blipStructSetPiece[SET_PIECE_CUTTER]) iSetPiece[SET_PIECE_CUTTER] = 100 ENDIF ENDIF BREAK CASE 1 LOAD_STREAM("MICHAEL_2_GOON_CHOPPED_APART_MASTER") IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<996.487732, -2158.077881, 32.500244>>, <<6.0, 7.5, 4.0>>) AND NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) TASK_AIM_GUN_AT_ENTITY(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, PLAYER_PED(CHAR_MICHAEL), -1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 3, sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, "MCH2GOON") CREATE_CONVERSATION_ADV("MCH2_GSHT") //Audio Scene IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOT_THE_GUARD") START_AUDIO_SCENE("MI_2_SHOOT_THE_GUARD") ENDIF iBulletTimer = -1 SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ENDIF IF IS_BULLET_IN_AREA(GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex), 5.0) OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex), <<5.0, 5.0, 4.0>>) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, 100.0) REMOVE_PED_DEFENSIVE_AREA(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, CA_CAN_CHARGE, TRUE) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, 150) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_CUTTER].blipIndex) CLEANUP_AI_PED_BLIP(blipStructSetPiece[SET_PIECE_CUTTER]) iSetPiece[SET_PIECE_CUTTER] = 100 ENDIF BREAK CASE 2 LOAD_STREAM("MICHAEL_2_GOON_CHOPPED_APART_MASTER") PED_BONETAG pbt GET_PED_LAST_DAMAGE_BONE(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, pbt) IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF (GET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) < 975 OR pbt = BONETAG_HEAD) IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF IS_ENTITY_AT_COORD(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, <<998.189453, -2143.476318, 30.476349>>, <<1.5, 1.5, 2.25>>) AND IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<993.761047, -2156.059082, 30.976448>>, <<8.0, 10.0, 2.75>>) AND NOT IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex), 5.0) INFORM_MISSION_STATS_OF_INCREMENT(MIC2_UNIQUE_TRIAD_DEATHS) IF IS_THIS_CONVERSATION_ONGOING_OR_QUEUED("MCH2_GSHT") KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF IF LOAD_STREAM("MICHAEL_2_GOON_CHOPPED_APART_MASTER") PLAY_STREAM_FROM_PED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) //PLAY_STREAM_FRONTEND() ENDIF SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), TRUE) fHeadingTrack = GET_ENTITY_HEADING(PLAYER_PED_ID()) REPLAY_RECORD_BACK_FOR_TIME(3.0, 10.0, REPLAY_IMPORTANCE_HIGHEST) SET_CAM_PARAMS(camMain, <<996.938293,-2145.933838,31.029486>>, <<-28.754696,-0.006011,-40.283401>>, 21.381561, 0) SET_CAM_PARAMS(camMain, <<996.989197,-2145.752930,30.981258>>, <<-22.393389,0.499936,-24.676105>>, 21.381561, 1300, GRAPH_TYPE_LINEAR, GRAPH_TYPE_LINEAR) SHAKE_CAM(camMain, "HAND_SHAKE", 1.0) SET_CAM_ACTIVE(camMain, TRUE) RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) HANG_UP_AND_PUT_AWAY_PHONE(TRUE) HIDE_HUD_AND_RADAR_THIS_FRAME() SET_PED_CAN_BE_TARGETTED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, FALSE) TASK_PLAY_ANIM_ADVANCED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer", <<997.507, -2143.002, 28.507>>, <<0.0, 0.0, 0.0>>, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_FORCE_START | AF_NOT_INTERRUPTABLE | AF_EXTRACT_INITIAL_OFFSET | AF_OVERRIDE_PHYSICS | AF_IGNORE_GRAVITY | AF_ENDS_IN_DEAD_POSE, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) PLAY_FACIAL_ANIM(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, "Goon_MeatSlicer_Facial", sAnimDictMic2SetPiece1) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF DOES_ENTITY_EXIST(objCutter) IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMachine) IF IS_ENTITY_PLAYING_ANIM(objCutter, sAnimDictMachine, "beefsplitter_loop") SET_ENTITY_ANIM_CURRENT_TIME(objCutter, sAnimDictMachine, "beefsplitter_loop", 0.600) ENDIF ENDIF ENDIF //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOT_THE_GUARD") STOP_AUDIO_SCENE("MI_2_SHOOT_THE_GUARD") ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_MEAT_SLICER") START_AUDIO_SCENE("MI_2_MEAT_SLICER") ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("AudioSpinningBlades") //Audio PLAY_AUDIO(MIC2_SPINNING_BLADES) SET_LABEL_AS_TRIGGERED("AudioSpinningBlades", TRUE) ENDIF IF NOT bVideoRecording REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGH) bVideoRecording = TRUE ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ELSE #IF IS_DEBUG_BUILD PRINTLN("PEDS NOT IN THEIR POSITIONS") #ENDIF SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, 5) APPLY_DAMAGE_TO_PED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, 500, FALSE) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_CUTTER].blipIndex) CLEANUP_AI_PED_BLIP(blipStructSetPiece[SET_PIECE_CUTTER]) iSetPiece[SET_PIECE_CUTTER] = 100 ENDIF ENDIF ENDIF ENDIF IF iSetPiece[SET_PIECE_CUTTER] = 2 IF TIMERB() > 7000 OR IS_BULLET_IN_AREA(GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex), 5.0) OR IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex), 5.0) OR IS_ENTITY_AT_COORD(PLAYER_PED_ID(), GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex), <<5.0, 5.0, 4.0>>) #IF IS_DEBUG_BUILD PRINTLN("TOO LONG, SHOT WRONG OR OUT OF PLACE") #ENDIF IF iBulletTimer = -1 iBulletTimer = GET_GAME_TIMER() + 100 ELIF GET_GAME_TIMER() > iBulletTimer SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, 100.0) REMOVE_PED_DEFENSIVE_AREA(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, CA_CAN_CHARGE, TRUE) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, 150) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_CUTTER].blipIndex) CLEANUP_AI_PED_BLIP(blipStructSetPiece[SET_PIECE_CUTTER]) iSetPiece[SET_PIECE_CUTTER] = 100 ENDIF ENDIF ENDIF BREAK CASE 3 HIDE_HUD_AND_RADAR_THIS_FRAME() IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") > 0.128 //0.200 SET_CAM_PARAMS(camMain, <<998.183350,-2143.903076,29.707603>>, <<-0.967933,0.515198,-5.987529>>, 39.959354, 0) SET_CAM_PARAMS(camMain, <<998.147949,-2143.089355,29.527300>>, <<48.835812,0.311738,-7.783955>>, 40.035347, 3500, GRAPH_TYPE_DECEL, GRAPH_TYPE_DECEL) SHAKE_CAM(camMain, "HAND_SHAKE", 1.0) PLAY_PAIN(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, AUD_DAMAGE_REASON_SCREAM_PANIC) SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ENDIF ENDIF BREAK CASE 4 HIDE_HUD_AND_RADAR_THIS_FRAME() IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") > 0.350 // SET_CAM_PARAMS(camMain, // <<998.295959,-2141.102539,32.364044>>, // <<-83.002708,-2.292470,139.844986>>, // 32.875706, // 0) // // SET_CAM_PARAMS(camMain, // <<998.144470,-2140.178467,31.618706>>, // <<-85.997765,-2.292466,150.822296>>, // 32.875706, // 4000, // GRAPH_TYPE_DECEL, // GRAPH_TYPE_DECEL) // // SHAKE_CAM(camMain, "HAND_SHAKE", 1.6) IF NOT IS_PED_IN_COVER(PLAYER_PED_ID()) SET_ENTITY_HEADING(PLAYER_PED_ID(), fHeadingTrack) ENDIF SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) STOP_CAM_SHAKING(camMain, TRUE) RENDER_SCRIPT_CAMS(FALSE, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) PLAY_PAIN(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, AUD_DAMAGE_REASON_SCREAM_TERROR) SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ENDIF ENDIF BREAK CASE 5 HIDE_HUD_AND_RADAR_THIS_FRAME() IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") > 0.400 // SHAKE_CAM(camMain, "ROAD_VIBRATION_SHAKE", 4.0) // // PLAY_PAIN(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, AUD_DAMAGE_REASON_ON_FIRE) // // START_PARTICLE_FX_NON_LOOPED_ON_ENTITY("scr_abattoir_ped_sliced", sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, <<0.0, -0.1, -0.25>>, <<0.0, 0.0, 84.0 + 90.0>>, 0.6) // // SET_CONTROL_SHAKE(PLAYER_CONTROL, 1000, 200) // // IF NOT IS_MESSAGE_BEING_DISPLAYED() // AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() // IF DOES_ENTITY_EXIST(pedClosestEnemy) // AND NOT IS_PED_INJURED(pedClosestEnemy) // IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy)) < 20.0 // ADD_PED_FOR_DIALOGUE(sPedsForConversation, 3, pedClosestEnemy, "MCH2CHIN1") // // CREATE_CONVERSATION_ADV("MCH2_EWW3") // ENDIF // ENDIF // ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ENDIF ENDIF BREAK CASE 6 HIDE_HUD_AND_RADAR_THIS_FRAME() IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF NOT IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") OR (IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") >= 0.460) //0.550) PLAY_PAIN(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, AUD_DAMAGE_REASON_ON_FIRE) START_PARTICLE_FX_NON_LOOPED_ON_ENTITY("scr_abattoir_ped_sliced", sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, <<0.0, -0.1, -0.25>>, <<0.0, 0.0, 84.0 + 90.0>>, 0.6) APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_TORSO), 0.725, 0.434, 302.360, 1.0, 0, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_TORSO), 0.624, 0.434, 310.913, 1.0, 0, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_TORSO), 0.519, 0.434, 317.949, 1.0, 0, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_TORSO), 0.810, 0.434, 293.645, 1.0, 0, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_TORSO), 0.921, 0.434, 280.271, 1.0, 0, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_RIGHT_ARM), 0.000, 0.413, 337.557, 1.0, 0, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_RIGHT_ARM), 0.259, 0.413, 330.867, 1.0, 0, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_LEFT_LEG), 0.836, 0.698, 283.194, 1.0, 0, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_LEFT_LEG), 0.704, 0.698, 292.980, 1.0, 1, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_LEFT_LEG), 0.587, 0.667, 301.741, 1.0, 0, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_RIGHT_LEG), 0.164, 0.693, 320.334, 1.0, 0, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_RIGHT_LEG), 0.376, 0.688, 312.187, 1.0, 1, 0.0, "ShotgunLargeMonolithic") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_TORSO), 0.730, 0.614, 301.073, 1.0, 1, 0.0, "Scripted_Ped_Splash_Back") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_TORSO), 0.730, 0.444, 315.623, 1.0, 2, 0.0, "Scripted_Ped_Splash_Back") APPLY_PED_BLOOD_SPECIFIC(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, ENUM_TO_INT(PDZ_TORSO), 0.730, 0.339, 330.850, 1.0, 0, 0.0, "Scripted_Ped_Splash_Back") //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_MEAT_SLICER") STOP_AUDIO_SCENE("MI_2_MEAT_SLICER") ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_THROW_THE_GUN") START_AUDIO_SCENE("MI_2_THROW_THE_GUN") ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ENDIF ELSE SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) STOP_CAM_SHAKING(camMain, TRUE) RENDER_SCRIPT_CAMS(FALSE, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_MEAT_SLICER") STOP_AUDIO_SCENE("MI_2_MEAT_SLICER") ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_THROW_THE_GUN") START_AUDIO_SCENE("MI_2_THROW_THE_GUN") ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ENDIF BREAK CASE 7 //HIDE_HUD_AND_RADAR_THIS_FRAME() IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF NOT IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") OR (IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") >= 1.000) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, 5) APPLY_DAMAGE_TO_PED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, 500, FALSE) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_CUTTER].blipIndex) CLEANUP_AI_PED_BLIP(blipStructSetPiece[SET_PIECE_CUTTER]) SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ENDIF ELSE SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_CUTTER].blipIndex) CLEANUP_AI_PED_BLIP(blipStructSetPiece[SET_PIECE_CUTTER]) SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ENDIF BREAK CASE 8 IF TIMERB() > 1000 SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), FALSE) IF bVideoRecording REPLAY_STOP_EVENT() bVideoRecording = FALSE ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_CUTTER]++ ENDIF BREAK ENDSWITCH IF NOT IS_GAMEPLAY_CAM_RENDERING() IF iSetPiece[SET_PIECE_CUTTER] > 2 AND iSetPiece[SET_PIECE_CUTTER] < 4 IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY() IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") SET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer", 0.99) ENDIF // IF IS_STREAM_PLAYING() // STOP_STREAM() // ENDIF iSetPiece[SET_PIECE_CUTTER] = 4 ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("AudioSpinningBlades") IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) IF IS_PED_INJURED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) //Audio PLAY_AUDIO(MIC2_SPINNING_BLADES) SET_LABEL_AS_TRIGGERED("AudioSpinningBlades", TRUE) ENDIF ENDIF ENDIF IF (intAbattoir != NULL AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = intAbattoir) IF NOT DOES_BLIP_EXIST(blipMichael) IF HAS_LABEL_BEEN_TRIGGERED("MCH2_RESCUE") SAFE_ADD_BLIP_PED(blipMichael, sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE) ENDIF ENDIF // IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<995.975464, -2148.494629, 33.499943>>, <<25.0, 25.0, 15.0>>) // //Cutscene // REQUEST_CUTSCENE("mic_2_mcs_2") // // //Request Cutscene Variations - mic_2_mcs_2 // IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() // SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Franklin", PLAYER_PED(CHAR_FRANKLIN)) // SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED(CHAR_MICHAEL)) // ENDIF // ENDIF IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT HAS_LABEL_BEEN_TRIGGERED("AbandonMichael") // IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_FIND1") // IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<994.403198, -2184.370850, 28.477783>>, <<996.124634, -2166.494141, 32.963730>>, 10.0) // CREATE_CONVERSATION_ADV("MCH2_FIND1") // ENDIF // ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_FIND2") // IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<963.563538, -2165.346924, 28.029001>>, <<993.229797, -2167.891113, 32.475231>>, 10.0) // CREATE_CONVERSATION_ADV("MCH2_FIND2") // ENDIF // ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_FIND3") // IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<973.843018, -2158.792725, 27.975471>>, <<999.225342, -2160.920166, 32.476738>>, 10.0) // CREATE_CONVERSATION_ADV("MCH2_FIND3") // ENDIF // ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_HLP1") //Far from Michael IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<963.563843, -2166.085693, 28.475433>>, <<974.759644, -2167.140625, 34.459885>>, 5.250) SET_LABEL_AS_TRIGGERED("ApproachingMichael", FALSE) ENDIF //Near to Michael IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<963.502747, -2160.814941, 28.474331>>, <<974.999939, -2161.838135, 34.475826>>, 5.250) SET_LABEL_AS_TRIGGERED("ApproachingMichael", TRUE) ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("ApproachingMichael") IF GET_GAME_TIMER() > iDialogueTimer[2] IF iDialogueLineCount[4] = -1 iDialogueLineCount[4] = 8 ELIF iDialogueLineCount[4] > 0 iDialogueTimer[2] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(4000, 6000) iDialogueLineCount[4]-- CREATE_CONVERSATION_ADV("MCH2_LOOK", CONV_PRIORITY_MEDIUM, FALSE) ENDIF ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("ApproachingMichael") IF GET_GAME_TIMER() > iDialogueTimer[2] IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_STUCK") AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_STUCK2") IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN)), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) < 15.0 CREATE_CONVERSATION_ADV("MCH2_STUCK") //Near ELSE CREATE_CONVERSATION_ADV("MCH2_STUCK2") //Far ENDIF ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_HLP1_01") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_HLP1", "MCH2_HLP1_01") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_HLP1_02") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_HLP1", "MCH2_HLP1_02") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_HLP1_03") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_HLP1", "MCH2_HLP1_03") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_HLP1_04") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_HLP1", "MCH2_HLP1_04") ENDIF iDialogueTimer[2] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(4000, 6000) ENDIF ENDIF ENDIF ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("MCH2_GSHT") OR (DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) AND IS_PED_INJURED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex)) IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() // IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_GREET1") // IF IS_GAMEPLAY_CAM_RENDERING() // IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<995.128967, -2150.473389, 31.476431>>, <<7.0, 16.0, 3.0>>) // CREATE_CONVERSATION_ADV("MCH2_GREET1") // ENDIF // ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_STUCK") AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_STUCK2") CREATE_CONVERSATION_ADV("MCH2_STUCK") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_GREET2") IF IS_GAMEPLAY_CAM_RENDERING() IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<995.128967, -2150.473389, 31.476431>>, <<7.0, 16.0, 3.0>>) IF GET_GAME_TIMER() > iDialogueTimer[1] CREATE_CONVERSATION_ADV("MCH2_GREET2") iDialogueTimer[1] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(4000, 5000) ENDIF ENDIF ENDIF ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TWPM") IF IS_GAMEPLAY_CAM_RENDERING() IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<995.128967, -2150.473389, 31.476431>>, <<7.0, 16.0, 3.0>>) IF GET_GAME_TIMER() > iDialogueTimer[1] CREATE_CONVERSATION_ADV("MCH2_TWPM") iDialogueTimer[1] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(4000, 5000) ENDIF ENDIF ENDIF ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_HLP2") IF IS_GAMEPLAY_CAM_RENDERING() IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<995.128967, -2150.473389, 31.476431>>, <<7.0, 16.0, 3.0>>) IF GET_GAME_TIMER() > iDialogueTimer[1] CREATE_CONVERSATION_ADV("MCH2_HLP2") iDialogueTimer[1] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(4000, 5000) ENDIF ENDIF ENDIF ELSE IF IS_GAMEPLAY_CAM_RENDERING() IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<988.615295, -2144.727051, 31.475969>>, <<12.0, 20.0, 3.0>>) IF GET_GAME_TIMER() > iDialogueTimer[1] IF iDialogueLineCount[3] = -1 iDialogueLineCount[3] = 5 ELIF iDialogueLineCount[3] > 0 iDialogueTimer[1] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(4000, 6000) iDialogueLineCount[3]-- CREATE_CONVERSATION_ADV("MCH2_HELP", CONV_PRIORITY_MEDIUM, FALSE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<995.975464, -2148.494629, 33.499943>>, <<8.0, 8.0, 5.0>>) IF IS_ENTITY_ON_SCREEN(PLAYER_PED(CHAR_MICHAEL)) IF IS_GAMEPLAY_CAM_RENDERING() FLOAT fDistance = 50.0 REPEAT COUNT_OF(sEnemyShootout) i IF DOES_ENTITY_EXIST(sEnemyShootout[i].pedIndex) AND NOT IS_PED_INJURED(sEnemyShootout[i].pedIndex) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyShootout[i].pedIndex)) < fDistance fDistance = GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemyShootout[i].pedIndex)) ENDIF ENDIF ENDREPEAT REPEAT COUNT_OF(sEnemySetPiece) i IF i <> ENUM_TO_INT(SET_PIECE_STEAM) IF DOES_ENTITY_EXIST(sEnemySetPiece[i].pedIndex) AND NOT IS_PED_INJURED(sEnemySetPiece[i].pedIndex) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemySetPiece[i].pedIndex)) < fDistance AND NOT IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[i].pedIndex, sAnimDictMic2SetPiece1, "goon_meatslicer") AND iSetPiece[SET_PIECE_CUTTER] <= 4 fDistance = GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(sEnemySetPiece[i].pedIndex)) ENDIF ENDIF ENDIF ENDREPEAT IF fDistance > 30.0 PRINT_HELP_ADV("MCH2_THRWP", TRUE, TRUE) SET_LABEL_AS_TRIGGERED("AbandonMichael", TRUE) IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CONTEXT) AND NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) REPLAY_RECORD_BACK_FOR_TIME(4.0, 8.0, REPLAY_IMPORTANCE_HIGHEST) ADVANCE_STAGE() ENDIF ENDIF ENDIF ENDIF ELSE IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("MCH2_THRWP") SAFE_CLEAR_HELP() SET_LABEL_AS_TRIGGERED("MCH2_THRWP", FALSE) ENDIF ENDIF //Audio IF NOT HAS_LABEL_BEEN_TRIGGERED("AudioEnter") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<962.123413, -2184.951416, 28.976068>>, <<969.415161, -2185.648193, 33.977135>>, 5.0) PLAY_AUDIO(MIC2_FIGHT_CONT) LOAD_AUDIO(MIC2_ACID_BATH_OS) SET_LABEL_AS_TRIGGERED("AudioEnter", TRUE) ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("AudioProgress") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<994.319214, -2166.333984, 28.476685>>, <<993.632202, -2173.296875, 34.201157>>, 14.0) PLAY_AUDIO(MIC2_ABATTOIR_PROGRESS) SET_LABEL_AS_TRIGGERED("AudioProgress", TRUE) ENDIF ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("AbandonMichael") IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN))) > 20.0 IF NOT HAS_LABEL_BEEN_TRIGGERED("Abandon1") PRINT_ADV("CMN_MLEAVE", DEFAULT_GOD_TEXT_TIME, FALSE) SET_LABEL_AS_TRIGGERED("Abandon1", TRUE) ENDIF ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN))) > 30.0 eMissionFail = failMichaelAbandon missionFailed() ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("MCH2_ABATTF") IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN))) > 250.0 eMissionFail = failMichaelAbandon missionFailed() ENDIF ENDIF //Clear blocking vehicle IF (intAbattoir = NULL OR (intAbattoir != NULL AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) != intAbattoir)) AND NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<936.760864, -2183.205811, 39.011833>>, <<30.0, 20.0, 10.0>>) VEHICLE_INDEX vehClosest = GET_CLOSEST_VEHICLE(<<962.19891, -2184.75244, 29.47602>>, 7.5, DUMMY_MODEL_FOR_SCRIPT, ENUM_TO_INT(VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES | VEHICLE_SEARCH_FLAG_RETURN_LAW_ENFORCER_VEHICLES | VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES)) IF DOES_ENTITY_EXIST(vehClosest) PRINTLN("vehClosest = ", NATIVE_TO_INT(vehClosest), " [model = ", GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(vehClosest)), "]") IF NOT IS_VEHICLE_DRIVEABLE(vehClosest) PRINTLN("vehClosest is not driveable") IF NOT IS_ENTITY_ON_SCREEN(vehClosest) OR IS_ENTITY_OCCLUDED(vehClosest) PRINTLN("vehClosest is out of sight") IF IS_ENTITY_A_MISSION_ENTITY(vehClosest) PRINTLN("vehClosest is a mission vehicle, marking as no longer needed") SET_VEHICLE_AS_NO_LONGER_NEEDED(vehClosest) ENDIF CLEAR_AREA_OF_VEHICLES(<<962.19891, -2184.75244, 29.47602>>, 7.5) ENDIF ENDIF ENDIF ENDIF ENDIF IF CLEANUP_STAGE() //Cleanup (Blips, peds, variables etc.) INT i REPEAT COUNT_OF(objCigarette) i IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxCigarette[i]) STOP_PARTICLE_FX_LOOPED(ptfxCigarette[i]) ENDIF SAFE_DELETE_OBJECT(objCigarette[i]) ENDREPEAT SET_MODEL_AS_NO_LONGER_NEEDED(PROP_CS_CIGGY_01) IF DOES_ENTITY_EXIST(vehFranklin) AND NOT IS_ENTITY_DEAD(vehFranklin) IF IS_ENTITY_A_MISSION_ENTITY(vehFranklin) AND DOES_ENTITY_BELONG_TO_THIS_SCRIPT(vehFranklin) SET_MISSION_VEHICLE_GEN_VEHICLE(vehFranklin, <<930.7598, -2158.7644, 29.3458>>, 174.4858) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehFranklin) ENDIF ENDIF //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOTOUT_MAIN") STOP_AUDIO_SCENE("MI_2_SHOOTOUT_MAIN") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOTOUT_ACID") STOP_AUDIO_SCENE("MI_2_SHOOTOUT_ACID") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_GRINDER_1") STOP_AUDIO_SCENE("MI_2_GRINDER_1") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOT_THE_GUARD") STOP_AUDIO_SCENE("MI_2_SHOOT_THE_GUARD") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_MEAT_SLICER") STOP_AUDIO_SCENE("MI_2_MEAT_SLICER") ENDIF IF IS_AUDIO_SCENE_ACTIVE("MI_2_THROW_THE_GUN") STOP_AUDIO_SCENE("MI_2_THROW_THE_GUN") ENDIF REPEAT COUNT_OF(sEnemyShootout) i SAFE_DELETE_PED(sEnemyShootout[i].pedIndex) ENDREPEAT REPEAT COUNT_OF(sEnemySetPiece) i IF i <> ENUM_TO_INT(SET_PIECE_CUTTER) SAFE_DELETE_PED(sEnemySetPiece[i].pedIndex) ENDIF ENDREPEAT CLEAR_TEXT() SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), FALSE) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_CUTTER].blipIndex) CLEANUP_AI_PED_BLIP(blipStructSetPiece[SET_PIECE_CUTTER]) //Trackify ENABLE_SECOND_SCREEN_TRACKIFY_APP(FALSE) eMissionObjective = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) + 1) ENDIF ENDPROC PROC switchToMichael IF INIT_STAGE() //Replay SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(replayMichaelEscape), "stageMichaelEscape") //Uncapped bSetUncapped = TRUE //Wanted SET_MAX_WANTED_LEVEL(0) SET_WANTED_LEVEL_MULTIPLIER(0.0) //Ambulances etc. ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, FALSE) ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_GANGS, FALSE) IF CAN_CREATE_RANDOM_COPS() SET_CREATE_RANDOM_COPS(FALSE) ENDIF //Radar bRadar = FALSE //Rail bOkToHangFromHook = FALSE // //Skip Michael Forwards! // iCurrentNode = 31 // vRailCurrent = sRailNodes[31].vPos // SET_ENTITY_COORDS_NO_OFFSET(objHook, sRailNodes[31].vPos) // SET_ENTITY_ROTATION(objHook, sRailNodes[31].vRot) // SAFE_FREEZE_ENTITY_POSITION(objHook, TRUE) //Navmesh Blocking Areas IF iNavBlock[1] = 0 iNavBlock[1] = ADD_NAVMESH_BLOCKING_OBJECT(<<992.0, -2121.8, 29.5>>, <<4.0, 20.0, 10.0>>, (-5.0 / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[1] = ", iNavBlock[1]) ENDIF IF iNavBlock[2] = 0 iNavBlock[2] = ADD_NAVMESH_BLOCKING_OBJECT(<<1001.1, -2121.8, 29.5>>, <<4.6, 20.0, 10.0>>, (-5.0 / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[2] = ", iNavBlock[2]) ENDIF IF iNavBlock[3] = 0 iNavBlock[3] = ADD_NAVMESH_BLOCKING_OBJECT(<<984.1, -2135.5, 29.0>>, <<8.3, 8.0, 10.0>>, (-5.250 / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[3] = ", iNavBlock[3]) ENDIF //Setup Franklin as the buddy SET_ENTITY_PROOFS(PLAYER_PED(CHAR_FRANKLIN), TRUE, TRUE, TRUE, TRUE, TRUE) SET_PED_CAN_BE_TARGETTED(PLAYER_PED(CHAR_FRANKLIN), FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_FRANKLIN), TRUE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_RunFromFiresAndExplosions, FALSE) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") REQUEST_WEAPON_ASSET(WEAPONTYPE_COMBATPISTOL) IF bSkipped #IF IS_DEBUG_BUILD OR bAutoSkipping #ENDIF INT i REPEAT COUNT_OF(sEnemyOutside) i SAFE_DELETE_PED(sEnemyOutside[i].pedIndex) ENDREPEAT REPEAT COUNT_OF(sEnemyShootout) i SAFE_DELETE_PED(sEnemyShootout[i].pedIndex) ENDREPEAT SAFE_DELETE_PED(sEnemySetPiece[SET_PIECE_RAIL].pedIndex) SAFE_DELETE_PED(sEnemySetPiece[SET_PIECE_STEAM].pedIndex) SAFE_DELETE_PED(sEnemySetPiece[SET_PIECE_STAIR].pedIndex) SAFE_DELETE_PED(sEnemySetPiece[SET_PIECE_GRINDER].pedIndex) SAFE_DELETE_PED(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) ENDIF #IF IS_DEBUG_BUILD IF bAutoSkipping = FALSE #ENDIF // //Cutscene // REQUEST_CUTSCENE("mic_2_mcs_2") #IF IS_DEBUG_BUILD ENDIF #ENDIF IF SKIPPED_STAGE() SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<998.7538, -2150.1536, 28.5002>>, 90.6113, FALSE) //Freeze SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_FRANKLIN), TRUE) //Pin Interior IF intAbattoir = NULL intAbattoir = GET_INTERIOR_AT_COORDS_WITH_TYPE(<<990.9518, -2178.6208, 29.0257>>, "v_abattoir") ENDIF PIN_INTERIOR_IN_MEMORY(intAbattoir) WHILE NOT IS_INTERIOR_READY(intAbattoir) PRINTLN("PINNING INTERIOR...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE bPinnedAbattoir = TRUE //Unfreeze SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_FRANKLIN), FALSE) IF NOT bReplaySkip LOAD_SCENE_ADV(<<996.5976, -2148.9912, 29.0>>) ENDIF //Audio PLAY_AUDIO(MIC2_HANGING_RT) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF ENDIF ELSE // //Request Cutscene Variations - mic_2_mcs_2 // IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() // SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Franklin", PLAYER_PED(CHAR_FRANKLIN)) // SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED(CHAR_MICHAEL)) // ENDIF REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME() //Fix for bug 2159461 SWITCH iCutsceneStage CASE 0 IF SAFE_START_CUTSCENE(10.0) //Force the switch to Michael IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupBuddy) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) bRadar = FALSE CLEAR_TEXT() GET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), wtLastWeapon) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_UNARMED, TRUE) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_UNARMED, TRUE) //Skip Michael Forwards! iCurrentNode = 31 vRailCurrent = sRailNodes[31].vPos SET_ENTITY_COORDS_NO_OFFSET(objHook, sRailNodes[31].vPos) SET_ENTITY_ROTATION(objHook, <<0.0, 0.0, -6.6>>) //sRailNodes[31].vRot) FREEZE_ENTITY_POSITION(objHook, TRUE) DETACH_ENTITY(PLAYER_PED(CHAR_MICHAEL)) IF NOT DOES_ENTITY_EXIST(objGun) objGun = CREATE_OBJECT(GET_WEAPONTYPE_MODEL(WEAPONTYPE_COMBATPISTOL), sRailNodes[31].vPos) ENDIF sceneSwitch = CREATE_SYNCHRONIZED_SCENE(sceneSwitchPos, sceneSwitchRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_MICHAEL), sceneSwitch, sAnimDictMic2Switch, "meathook_gun_switch_mic", INSTANT_BLEND_IN, INSTANT_BLEND_OUT) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneSwitch, sAnimDictMic2Switch, "meathook_gun_switch_fra", INSTANT_BLEND_IN, INSTANT_BLEND_OUT) PLAY_SYNCHRONIZED_ENTITY_ANIM(objGun, sceneSwitch, "meathook_gun_switch_pistol", sAnimDictMic2Switch, INSTANT_BLEND_IN) //Cam IF NOT DOES_CAM_EXIST(camAnim) camAnim = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE) ENDIF PLAY_SYNCHRONIZED_CAM_ANIM(camAnim, sceneSwitch, "meathook_gun_switch_cam", sAnimDictMic2Switch) SET_CAM_ACTIVE(camAnim, TRUE) RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) HANG_UP_AND_PUT_AWAY_PHONE(TRUE) WHILE NOT HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_COMBATPISTOL) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE IF NOT DOES_ENTITY_EXIST(sEnemyBackup[0].pedIndex) createEnemy(sEnemyBackup[0], <<997.7915, -2118.1855, 29.4757>>, 174.1204, WEAPONTYPE_PUMPSHOTGUN) //sEnemyBackup[0].iTime[0] = 0 sEnemyBackup[0].eAdvanceStyle[0] = GUN_TO_POINT sEnemyBackup[0].vPoint[0] = <<993.5497, -2142.2900, 28.4761>> sEnemyBackup[0].fSpeed[0] = PEDMOVEBLENDRATIO_RUN SET_PED_RESET_FLAG(sEnemyBackup[0].pedIndex, PRF_InstantBlendToAim, TRUE) TASK_COMBAT_PED(sEnemyBackup[0].pedIndex, PLAYER_PED(CHAR_MICHAEL)) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[0].pedIndex, <<993.5497, -2142.2900, 28.4761>>, 2.0) SET_PED_COMBAT_ATTRIBUTES(sEnemyBackup[0].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) //RETAIN_ENTITY_IN_INTERIOR(sEnemyBackup[0].pedIndex, intAbattoir) ENDIF IF NOT DOES_ENTITY_EXIST(sEnemyBackup[1].pedIndex) createEnemy(sEnemyBackup[1], <<996.0300, -2123.4690, 29.4757>>, 174.1522, WEAPONTYPE_ASSAULTRIFLE) //sEnemyBackup[1].iTime[0] = 0 sEnemyBackup[1].eAdvanceStyle[0] = GUN_TO_POINT sEnemyBackup[1].vPoint[0] = <<995.7127, -2135.2080, 29.4761>> sEnemyBackup[1].fSpeed[0] = PEDMOVEBLENDRATIO_RUN SET_PED_RESET_FLAG(sEnemyBackup[1].pedIndex, PRF_InstantBlendToAim, TRUE) TASK_COMBAT_PED(sEnemyBackup[1].pedIndex, PLAYER_PED(CHAR_MICHAEL)) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[1].pedIndex, <<995.7127, -2135.2080, 29.4761>>, 1.5) SET_PED_COMBAT_ATTRIBUTES(sEnemyBackup[1].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) //RETAIN_ENTITY_IN_INTERIOR(sEnemyBackup[1].pedIndex, intAbattoir) ENDIF REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_HIGHEST) ADVANCE_CUTSCENE() ENDIF BREAK CASE 1 IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CREATE_CONVERSATION_ADV("MCH2_TWPF") ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("SwitchFX[Flash1]") IF (IS_SYNCHRONIZED_SCENE_RUNNING(sceneSwitch) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneSwitch) >= 0.375) PLAY_SOUND_FRONTEND(-1, "Hit_Out", "PLAYER_SWITCH_CUSTOM_SOUNDSET") IF sfxWoosh = -1 sfxWoosh = GET_SOUND_ID() PLAY_SOUND_FRONTEND(sfxWoosh, "Short_Transition_In", "PLAYER_SWITCH_CUSTOM_SOUNDSET") ENDIF ANIMPOSTFX_PLAY("SwitchShortFranklinIn", 0, FALSE) SET_LABEL_AS_TRIGGERED("SwitchFX[Flash1]", TRUE) ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("SwitchFX[Flash2]") IF (IS_SYNCHRONIZED_SCENE_RUNNING(sceneSwitch) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneSwitch) >= 0.550) PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET") IF sfxWoosh != -1 STOP_SOUND(sfxWoosh) RELEASE_SOUND_ID(sfxWoosh) sfxWoosh = -1 ENDIF ANIMPOSTFX_PLAY("SwitchShortMichaelMid", 0, FALSE) SET_LABEL_AS_TRIGGERED("SwitchFX[Flash2]", TRUE) ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("InterpCam") IF (IS_SYNCHRONIZED_SCENE_RUNNING(sceneSwitch) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneSwitch) >= 0.8) //RENDER_SCRIPT_CAMS(FALSE, TRUE, 500, FALSE) IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA") ENDIF SET_CAM_PARAMS(camMain, <<993.677734, -2151.261230, 30.430367>>, <<0.0, 0.0, -6.601181>>, 45.0) SET_CAM_ACTIVE_WITH_INTERP(camMain, camAnim, 500, GRAPH_TYPE_DECEL, GRAPH_TYPE_DECEL) PRINTLN("SET_CAM_ACTIVE_WITH_INTERP, GET_SYNCHRONIZED_SCENE_PHASE(sceneSwitch) = ", GET_SYNCHRONIZED_SCENE_PHASE(sceneSwitch)) bRadar = TRUE SET_LABEL_AS_TRIGGERED("InterpCam", TRUE) ENDIF ENDIF IF ((IS_SYNCHRONIZED_SCENE_RUNNING(sceneSwitch) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneSwitch) >= 1.0) OR NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneSwitch)) //Michael //ADD_ARMOUR_TO_PED(PLAYER_PED(CHAR_MICHAEL), 200) //Start the upside down shoot task ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, <<-0.0148, -0.063, -1.683>>, <<0.0, 0.0, 0.0>>, TRUE, TRUE) //<<0.0, -0.05, -1.68>> // TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING) // FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) // WHILE NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle") // WAIT_WITH_DEATH_CHECKS(0) // ENDWHILE //SET_PLAYER_FORCED_AIM(PLAYER_ID(), TRUE) //SET_PLAYER_FORCED_ZOOM(PLAYER_ID(), TRUE) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, 350, TRUE) SET_PED_AMMO(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, 350) TASK_AIM_GUN_SCRIPTED(PLAYER_PED(CHAR_MICHAEL), SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN, TRUE, TRUE) PRINTLN("SHOOTING/HANGING UPSIDE DOWN!") //Rail bOkToMoveRail = FALSE bOkToHangFromHook = FALSE //SET_ENTITY_HEADING(PLAYER_PED(CHAR_MICHAEL), -1.90) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL), TRUE) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) RENDER_SCRIPT_CAMS(FALSE, FALSE) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) ADVANCE_STAGE() ENDIF BREAK ENDSWITCH DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA) ENDIF IF CLEANUP_STAGE() //Cleanup (Blips, peds, variables etc.) IF sfxWoosh != -1 STOP_SOUND(sfxWoosh) RELEASE_SOUND_ID(sfxWoosh) sfxWoosh = -1 ENDIF //Force the switch to Michael IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupBuddy) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF //Franklin CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED(CHAR_FRANKLIN)) IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, 350, TRUE) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, TRUE) SET_ENTITY_PROOFS(PLAYER_PED(CHAR_FRANKLIN), FALSE, FALSE, FALSE, FALSE, FALSE) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF IF GET_AMMO_IN_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE) < (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_ASSAULTRIFLE) * 4) SET_PED_AMMO(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_ASSAULTRIFLE) * 4)) ENDIF // REMOVE_CUTSCENE() // // WHILE HAS_CUTSCENE_LOADED() // WAIT_WITH_DEATH_CHECKS(0) // ENDWHILE IF NOT IS_GAMEPLAY_CAM_RENDERING() RENDER_SCRIPT_CAMS(FALSE, FALSE) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) ENDIF IF DOES_CAM_EXIST(camAnim) DESTROY_CAM(camAnim) ENDIF SAFE_DELETE_OBJECT(objGun) SAFE_REMOVE_BLIP(blipMichael) //Rail SET_RAIL_FINAL_NODE(31) fMoveSpeedMult = 0.0 SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) eMissionObjective = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) + 1) ENDIF ENDPROC PROC michaelEscape() IF INIT_STAGE() //Replay SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(replayMichaelEscape), "stageMichaelEscape") //Uncapped bSetUncapped = TRUE //Cheat DISABLE_CHEAT(CHEAT_TYPE_GIVE_WEAPONS, TRUE) //Wanted SET_MAX_WANTED_LEVEL(0) SET_WANTED_LEVEL_MULTIPLIER(0.0) //Ambulances etc. ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, FALSE) ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_GANGS, FALSE) IF CAN_CREATE_RANDOM_COPS() SET_CREATE_RANDOM_COPS(FALSE) ENDIF //Player SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SPECIAL_ABILITY_FILL_METER(PLAYER_ID(), TRUE) //Cam // RENDER_SCRIPT_CAMS(FALSE, FALSE) // SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) // // SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) // SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) // // DESTROY_ALL_CAMS() //Radar bRadar = TRUE //Vehicle vehHachiRoku = CREATE_VEHICLE(COQUETTE, <<950.4739, -2104.9517, 29.6107>>, 106.1659) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehHachiRoku, TRUE) SET_VEHICLE_COLOURS(vehHachiRoku, 4, 0) SET_VEHICLE_EXTRA_COLOURS(vehHachiRoku, 0, 0) SET_VEHICLE_ON_GROUND_PROPERLY(vehHachiRoku) SET_VEHICLE_TYRES_CAN_BURST(vehHachiRoku, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(COQUETTE) vehEscape = CREATE_VEHICLE(FELTZER2, <<953.9548, -2113.3518, 29.5516>>, 88.1350) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehEscape, TRUE) SET_VEHICLE_COLOURS(vehEscape, 38, 0) SET_VEHICLE_ON_GROUND_PROPERLY(vehEscape) SET_VEHICLE_TYRES_CAN_BURST(vehEscape, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(FELTZER2) //Rail bOkToMoveRail = FALSE bOkToHangFromHook = FALSE //Audio PLAY_AUDIO(MIC2_HANGING_MICHAEL) #IF IS_DEBUG_BUILD IF bAutoSkipping = FALSE #ENDIF //Audio Scene IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOT_FROM_MEATHOOK") START_AUDIO_SCENE("MI_2_SHOOT_FROM_MEATHOOK") ENDIF //bShootingUpsideDown = TRUE CREATE_CONVERSATION_ADV("MCH2_MORE", CONV_PRIORITY_MEDIUM, TRUE, DO_NOT_DISPLAY_SUBTITLES) SAFE_ADD_BLIP_PED(blipFranklin, sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], FALSE) //Crates IF NOT DOES_ENTITY_EXIST(objCrate[0]) objCrate[0] = CREATE_OBJECT_NO_OFFSET(PROP_WATERCRATE_01, <<985.1165, -2111.0317, 29.4751>>) RETAIN_ENTITY_IN_INTERIOR(objCrate[0], intAbattoir) ENDIF IF NOT DOES_ENTITY_EXIST(objCrate[1]) objCrate[1] = CREATE_OBJECT_NO_OFFSET(PROP_WATERCRATE_01, <<977.4531, -2128.1602, 29.4753>>) RETAIN_ENTITY_IN_INTERIOR(objCrate[1], intAbattoir) ENDIF IF NOT DOES_ENTITY_EXIST(objCrate[2]) objCrate[2] = CREATE_OBJECT_NO_OFFSET(PROP_WATERCRATE_01, <<987.7, -2125.6, 29.4753>>) RETAIN_ENTITY_IN_INTERIOR(objCrate[2], intAbattoir) ENDIF //Cover IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<996.3627, -2142.4551, 28.4762>>) covPoint[13] = ADD_COVER_POINT(<<996.3627, -2142.4551, 28.4762>>, 4.7376, COVUSE_WALLTORIGHT, COVHEIGHT_TOOHIGH, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<993.2383, -2131.0708, 29.4758>>) covPoint[16] = ADD_COVER_POINT(<<993.2383, -2131.0708, 29.4758>>, 11.4085, COVUSE_WALLTOLEFT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<989.3762, -2108.0239, 29.4751>>) covPoint[17] = ADD_COVER_POINT(<<989.3762, -2108.0239, 29.4751>>, 178.0079, COVUSE_WALLTOLEFT, COVHEIGHT_TOOHIGH, COVARC_120, TRUE) ENDIF ADD_COVER_BLOCKING_AREA(<<985.11951, -2110.06934, 29.47508>>, <<984.31635, -2110.86963, 29.47506>>, TRUE, TRUE, TRUE) ADD_COVER_BLOCKING_AREA(<<990.234863, -2109.403076, 29.475147>>, <<991.734863, -2107.903076, 35.475147>>, TRUE, TRUE, TRUE) ADD_COVER_BLOCKING_AREA(<<984.292725, -2125.887451, 29.475412>>, <<985.292725, -2124.887451, 33.475412>>, TRUE, TRUE, TRUE) //Navmesh Blocking Areas IF iNavBlock[1] = 0 iNavBlock[1] = ADD_NAVMESH_BLOCKING_OBJECT(<<992.0, -2121.8, 29.5>>, <<4.0, 20.0, 10.0>>, (-5.0 / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[1] = ", iNavBlock[1]) ENDIF IF iNavBlock[2] = 0 iNavBlock[2] = ADD_NAVMESH_BLOCKING_OBJECT(<<1001.1, -2121.8, 29.5>>, <<4.6, 20.0, 10.0>>, (-5.0 / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[2] = ", iNavBlock[2]) ENDIF IF iNavBlock[3] = 0 iNavBlock[3] = ADD_NAVMESH_BLOCKING_OBJECT(<<984.1, -2135.5, 29.0>>, <<8.3, 8.0, 10.0>>, (-5.250 / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[3] = ", iNavBlock[3]) ENDIF //Enemies //Set Piece createEnemy(sEnemySetPiece[SET_PIECE_GRAPPLE], <<983.5596, -2110.1997, 29.4750>>, 299.8301, WEAPONTYPE_KNIFE) IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) SET_ENTITY_VISIBLE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, FALSE) //RETAIN_ENTITY_IN_INTERIOR(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, intAbattoir) SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, PCF_DontActivateRagdollFromBulletImpact, TRUE) SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, PCF_DontActivateRagdollFromExplosions, TRUE) SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, PCF_DontActivateRagdollFromElectrocution, TRUE) SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, PCF_DontActivateRagdollFromFire, TRUE) SET_RAGDOLL_BLOCKING_FLAGS(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, RBF_BULLET_IMPACT | RBF_EXPLOSION | RBF_ELECTROCUTION | RBF_FIRE | RBF_RUBBER_BULLET) SET_ENTITY_PROOFS(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, TRUE, TRUE, TRUE, TRUE, TRUE) SET_ENTITY_INVINCIBLE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, CM_STATIONARY) SET_PED_MAX_HEALTH(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, 600) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, 600) ENDIF //Backup IF NOT DOES_ENTITY_EXIST(sEnemyBackup[0].pedIndex) createEnemy(sEnemyBackup[0], <<997.7915, -2118.1855, 29.4757>>, 174.1204, WEAPONTYPE_PUMPSHOTGUN) //sEnemyBackup[0].iTime[0] = 0 sEnemyBackup[0].eAdvanceStyle[0] = GUN_TO_POINT sEnemyBackup[0].vPoint[0] = <<993.5497, -2142.2900, 28.4761>> sEnemyBackup[0].fSpeed[0] = PEDMOVEBLENDRATIO_RUN SET_PED_RESET_FLAG(sEnemyBackup[0].pedIndex, PRF_InstantBlendToAim, TRUE) TASK_COMBAT_PED(sEnemyBackup[0].pedIndex, PLAYER_PED(CHAR_MICHAEL)) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[0].pedIndex, <<993.5497, -2142.2900, 28.4761>>, 2.0) SET_PED_COMBAT_ATTRIBUTES(sEnemyBackup[0].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) //RETAIN_ENTITY_IN_INTERIOR(sEnemyBackup[0].pedIndex, intAbattoir) ENDIF IF NOT DOES_ENTITY_EXIST(sEnemyBackup[1].pedIndex) createEnemy(sEnemyBackup[1], <<996.0300, -2123.4690, 29.4757>>, 174.1522, WEAPONTYPE_ASSAULTRIFLE) //sEnemyBackup[1].iTime[0] = 0 sEnemyBackup[1].eAdvanceStyle[0] = GUN_TO_POINT sEnemyBackup[1].vPoint[0] = <<995.7127, -2135.2080, 29.4761>> sEnemyBackup[1].fSpeed[0] = PEDMOVEBLENDRATIO_RUN SET_PED_RESET_FLAG(sEnemyBackup[1].pedIndex, PRF_InstantBlendToAim, TRUE) TASK_COMBAT_PED(sEnemyBackup[1].pedIndex, PLAYER_PED(CHAR_MICHAEL)) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[1].pedIndex, <<993.2, -2143.0, 29.4761>>, 1.5) SET_PED_COMBAT_ATTRIBUTES(sEnemyBackup[1].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) //RETAIN_ENTITY_IN_INTERIOR(sEnemyBackup[1].pedIndex, intAbattoir) ENDIF createEnemy(sEnemyBackup[2], <<995.9071, -2108.7920, 29.4754>>, 185.6451, WEAPONTYPE_SMG, G_M_M_CHIGOON_01) TASK_COMBAT_PED(sEnemyBackup[2].pedIndex, PLAYER_PED(CHAR_MICHAEL)) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[2].pedIndex, <<994.2408, -2136.2017, 29.2397>>, 1.5) SET_PED_COMBAT_ATTRIBUTES(sEnemyBackup[2].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) //sEnemyBackup[2].pedCheck[0] = sEnemyBackup[0].pedIndex sEnemyBackup[2].eAdvanceStyle[0] = GUN_TO_POINT sEnemyBackup[2].vPoint[0] = <<994.2408, -2136.2017, 29.2397>> sEnemyBackup[2].fSpeed[0] = PEDMOVEBLENDRATIO_RUN createEnemy(sEnemyBackup[3], <<993.0202, -2106.5718, 29.6306>>, 223.5710, WEAPONTYPE_SMG) sEnemyBackup[3].pedCheck[0] = sEnemyBackup[1].pedIndex sEnemyBackup[3].eAdvanceStyle[0] = GUN_TO_POINT sEnemyBackup[3].vPoint[0] = <<994.7, -2134.4, 29.4761>> sEnemyBackup[3].fSpeed[0] = PEDMOVEBLENDRATIO_RUN createEnemy(sEnemyBackup[4], <<995.6806, -2106.8789, 29.6252>>, 183.2036, WEAPONTYPE_ASSAULTRIFLE) sEnemyBackup[4].pedCheck[0] = sEnemyBackup[2].pedIndex sEnemyBackup[4].eAdvanceStyle[0] = GUN_TO_POINT sEnemyBackup[4].vPoint[0] = <<995.0988, -2129.1052, 29.4759>> sEnemyBackup[4].fSpeed[0] = PEDMOVEBLENDRATIO_RUN createEnemy(sEnemyBackup[5], <<990.7935, -2105.4414, 29.6615>>, 185.5090, WEAPONTYPE_PISTOL, G_M_M_CHIGOON_01) sEnemyBackup[5].vLocate[0] = <<995.4, -2133.0, 31.225800>> sEnemyBackup[5].vLocSize[0] = <<5.0, 4.0, 3.0>> sEnemyBackup[5].eAdvanceStyle[0] = GUN_TO_POINT sEnemyBackup[5].vPoint[0] = <<999.898499, -2137.357666, 29.0755>> sEnemyBackup[5].fSpeed[0] = PEDMOVE_SPRINT createEnemy(sEnemyBackup[6], <<989.1515, -2105.3550, 29.4987>>, 268.4109, WEAPONTYPE_PISTOL) sEnemyBackup[6].vLocate[0] = <<997.6, -2119.8, 31.225800>> sEnemyBackup[6].vLocSize[0] = <<5.0, 4.0, 3.0>> sEnemyBackup[6].eAdvanceStyle[0] = GUN_TO_POINT sEnemyBackup[6].vPoint[0] = <<997.829773, -2116.072266, 29.4993>> sEnemyBackup[6].fSpeed[0] = PEDMOVE_SPRINT //Two more enemies created in "OpenCombat9" //Three more enemies created in "OpenCombat10" // SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[0].pedIndex, <<993.6147, -2129.6279, 29.4995>>, 2.0) // SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[1].pedIndex, <<995.8074, -2130.9795, 29.4996>>, 2.0) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[2].pedIndex, <<992.9218, -2134.4761, 29.4997>>, 2.0) // SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[3].pedIndex, <<991.7494, -2137.2988, 29.2466>>, 2.0) // SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[4].pedIndex, <<999.7883, -2137.4788, 29.2466>>, 2.0) INT i REPEAT COUNT_OF(sEnemyBackup) i IF DOES_ENTITY_EXIST(sEnemyBackup[i].pedIndex) IF i <> 0 AND i <> 1 //RETAIN_ENTITY_IN_INTERIOR(sEnemyBackup[i].pedIndex, intAbattoir) SET_ENTITY_HEALTH(sEnemyBackup[i].pedIndex, 170) SET_PED_MAX_HEALTH(sEnemyBackup[i].pedIndex, 170) ENDIF ENDIF ENDREPEAT #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemyBackup) i IF NOT IS_PED_INJURED(sEnemyBackup[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemyBackup[i].pedIndex, "sEnemyBackup ", i) sEnemyBackup[i].sDebugName = CONCATENATE_STRINGS("sEnemyBackup ", GET_STRING_FROM_INT(i)) ENDIF ENDREPEAT #ENDIF //Michael SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_MICHAEL), PCF_RunFromFiresAndExplosions, FALSE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_MICHAEL), PCF_DisableExplosionReactions, TRUE) SET_PED_COMBAT_ATTRIBUTES(PLAYER_PED(CHAR_MICHAEL), CA_DISABLE_BULLET_REACTIONS, TRUE) SET_PED_COMBAT_ATTRIBUTES(PLAYER_PED(CHAR_MICHAEL), CA_SWITCH_TO_ADVANCE_IF_CANT_FIND_COVER, FALSE) SET_PED_COMBAT_MOVEMENT(PLAYER_PED(CHAR_MICHAEL), CM_DEFENSIVE) SET_RAGDOLL_BLOCKING_FLAGS(PLAYER_PED(CHAR_MICHAEL), RBF_BULLET_IMPACT | RBF_PLAYER_BUMP | RBF_PLAYER_RAGDOLL_BUMP) SET_PED_CAN_BE_TARGETTED(PLAYER_PED(CHAR_MICHAEL), FALSE) //Franklin Combat SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_RunFromFiresAndExplosions, FALSE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_DisableExplosionReactions, TRUE) SET_PED_COMBAT_ATTRIBUTES(PLAYER_PED(CHAR_FRANKLIN), CA_DISABLE_BULLET_REACTIONS, TRUE) SET_PED_COMBAT_ATTRIBUTES(PLAYER_PED(CHAR_FRANKLIN), CA_SWITCH_TO_ADVANCE_IF_CANT_FIND_COVER, FALSE) SET_PED_COMBAT_ATTRIBUTES(PLAYER_PED(CHAR_FRANKLIN), CA_DISABLE_PINNED_DOWN, TRUE) SET_PED_COMBAT_MOVEMENT(PLAYER_PED(CHAR_FRANKLIN), CM_DEFENSIVE) SET_PED_ACCURACY(PLAYER_PED(CHAR_FRANKLIN), 20) SET_RAGDOLL_BLOCKING_FLAGS(PLAYER_PED(CHAR_FRANKLIN), RBF_BULLET_IMPACT) SET_PED_SPHERE_DEFENSIVE_AREA(PLAYER_PED(CHAR_FRANKLIN), <<996.1766, -2142.4341, 28.50>>, 1.0) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED(CHAR_FRANKLIN)) IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, 350, TRUE) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, TRUE) SET_ENTITY_PROOFS(PLAYER_PED(CHAR_FRANKLIN), FALSE, FALSE, FALSE, FALSE, FALSE) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, <<996.2867, -2143.0442, 28.4763>>, <<994.3478, -2136.1184, 29.2463>>, PEDMOVE_RUN, TRUE, 4.0, 4.0, TRUE, ENAV_NO_STOPPING | ENAV_DONT_ADJUST_TARGET_POSITION) TASK_PUT_PED_DIRECTLY_INTO_COVER(NULL, <<996.3146, -2142.4307, 28.4762>>, 1000, FALSE, 1.0, TRUE, TRUE, covPoint[13], TRUE) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 1000.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(PLAYER_PED(CHAR_FRANKLIN), seqMain) CLEAR_SEQUENCE_TASK(seqMain) SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_FRANKLIN), TRUE, -1, "DEFAULT_ACTION") #IF IS_DEBUG_BUILD ENDIF #ENDIF IF SKIPPED_STAGE() SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<996.5976, -2148.9912, 29.0>>, 143.7361, FALSE) //Freeze SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_MICHAEL), TRUE) SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_FRANKLIN), TRUE) //Pin Interior IF intAbattoir = NULL intAbattoir = GET_INTERIOR_AT_COORDS_WITH_TYPE(<<990.9518, -2178.6208, 29.0257>>, "v_abattoir") ENDIF PIN_INTERIOR_IN_MEMORY(intAbattoir) WHILE NOT IS_INTERIOR_READY(intAbattoir) PRINTLN("PINNING INTERIOR...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE bPinnedAbattoir = TRUE //Unfreeze SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_MICHAEL), FALSE) SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_FRANKLIN), FALSE) IF NOT bReplaySkip LOAD_SCENE_ADV(<<996.5976, -2148.9912, 29.0>>) ENDIF WAIT_WITH_DEATH_CHECKS(0) MAKE_PICKUPS() //Michael //ADD_ARMOUR_TO_PED(PLAYER_PED(CHAR_MICHAEL), 200) //Skip Michael Forwards! iCurrentNode = 31 vRailCurrent = sRailNodes[31].vPos SET_ENTITY_COORDS_NO_OFFSET(objHook, sRailNodes[31].vPos) SET_ENTITY_ROTATION(objHook, <<0.0, 0.0, -6.6>>) //sRailNodes[31].vRot FREEZE_ENTITY_POSITION(objHook, TRUE) REQUEST_WEAPON_ASSET(WEAPONTYPE_COMBATPISTOL) REQUEST_WEAPON_ASSET(WEAPONTYPE_ASSAULTRIFLE) WHILE NOT HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_COMBATPISTOL) OR NOT HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_ASSAULTRIFLE) PRINTLN("LOADING WEAPON ASSETS (WEAPONTYPE_COMBATPISTOL)...") PRINTLN("LOADING WEAPON ASSETS (WEAPONTYPE_ASSAULTRIFLE)...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE //Start the upside down shoot task ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, <<0.0, -0.05, -1.68>> , <<0.0, 0.0, 0.0>>, TRUE, TRUE) // TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING) // FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) // WHILE NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle") // WAIT_WITH_DEATH_CHECKS(0) // ENDWHILE //SET_PLAYER_FORCED_AIM(PLAYER_ID(), TRUE) //Reset gameplay camera to third person, see B*1993022 IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON SET_FOLLOW_PED_CAM_VIEW_MODE(CAM_VIEW_MODE_THIRD_PERSON_NEAR) PRINTLN("RESETTING GAMEPLAY CAM VIEW MODE TO CAM_VIEW_MODE_THIRD_PERSON_NEAR 2") ENDIF REMOVE_ALL_PED_WEAPONS(PLAYER_PED(CHAR_MICHAEL)) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, 350, TRUE) SET_PED_AMMO(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, 350) TASK_AIM_GUN_SCRIPTED(PLAYER_PED(CHAR_MICHAEL), SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN) PRINTLN("SHOOTING/HANGING UPSIDE DOWN!") // SET_ENTITY_HEADING(PLAYER_PED(CHAR_MICHAEL), -1.90) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) //Franklin IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, 350, TRUE) ENDIF enumCharacterList eCharFail = GET_CURRENT_PLAYER_PED_ENUM() IF GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail)) != WEAPONTYPE_UNARMED AND GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail)) != WEAPONTYPE_INVALID AND HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail))) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail)), TRUE) ELSE SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, TRUE) ENDIF //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Audio PLAY_AUDIO(MIC2_HANGING_RT) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) // IF IS_SCREEN_FADED_OUT() // DO_SCREEN_FADE_IN(500) // ENDIF ENDIF ELSE IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF IS_ENTITY_ATTACHED_TO_ENTITY(PLAYER_PED_ID(), objHook) INT iTolerance iTolerance = 0 INT iLTSx, iLTSy, iRTSx, iRTSy GET_CONTROL_VALUE_OF_ANALOGUE_STICKS(iLTSx, iLTSy, iRTSx, iRTSy) VECTOR vGameplayCamRot = GET_GAMEPLAY_CAM_ROT() //SET_THIRD_PERSON_CAM_RELATIVE_HEADING_LIMITS_THIS_UPDATE() IF vGameplayCamRot.Z < -80.0 IF iRTSx > iTolerance DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LR) //PRINTLN("DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_RIGHT)") ENDIF IF vGameplayCamRot.Z < -85.0 DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_RETICLE) ENDIF ELIF vGameplayCamRot.Z > 80.0 IF iRTSx < -iTolerance DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LR) //PRINTLN("DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LEFT)") ENDIF IF vGameplayCamRot.Z > 85.0 DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2) HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_RETICLE) ENDIF ENDIF IF TIMERB() > 1000 IF NOT HAS_LABEL_BEEN_TRIGGERED("MichaelIntro") IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_AIM_GUN_SCRIPTED) != WAITING_TO_START_TASK AND GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_AIM_GUN_SCRIPTED) != PERFORMING_TASK SETTIMERB(0) ELSE IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF SET_LABEL_AS_TRIGGERED("MichaelIntro", TRUE) ENDIF ENDIF ENDIF IF GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_COMBATPISTOL) <= 0 eMissionFail = failOutOfAmmo missionFailed() ENDIF IF NOT IS_PED_INJURED(sEnemyBackup[0].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[1].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[2].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[3].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[4].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[7].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[8].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[9].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[10].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[11].pedIndex) IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF GET_GAME_TIMER() > iDialogueTimer[0] IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_BKUP_1") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_BKUP", "MCH2_BKUP_1") iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(4000, 7000) ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_BKUP_2") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_BKUP", "MCH2_BKUP_2") iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(4000, 7000) ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_BKUP_3") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_BKUP", "MCH2_BKUP_3") iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1000, 3000) ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_BKUP_4") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_BKUP", "MCH2_BKUP_4") ENDIF ENDIF ENDIF ENDIF DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_WEAPON) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_PREV_WEAPON) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON) ENDIF bOkToHangFromHook = FALSE ELSE //SET_PLAYER_FORCED_ZOOM(PLAYER_ID(), FALSE) ENDIF // IF NOT HAS_LABEL_BEEN_TRIGGERED("SwitchToFranklin") // IF IS_PED_AIMING_FROM_COVER(PLAYER_PED(CHAR_FRANKLIN)) // SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_ForcedToStayInCover, TRUE) // ENDIF // ENDIF IF HAS_LABEL_BEEN_TRIGGERED("FranklinGrapple") IF NOT HAS_LABEL_BEEN_TRIGGERED("PrepMichaelAnim") IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON) DETACH_ENTITY(PLAYER_PED(CHAR_MICHAEL)) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED(CHAR_MICHAEL)) SET_ENABLE_BOUND_ANKLES(PLAYER_PED(CHAR_MICHAEL), FALSE) bOkToMoveRail = FALSE bOkToHangFromHook = FALSE SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_MICHAEL), TRUE) TASK_PLAY_ANIM_ADVANCED(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall", <<994.205, -2150.821, 29.474>> + <<-0.09, 0.40, -0.00>>, <<0.0, 0.0, 0.0>>, INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_FORCE_START | AF_NOT_INTERRUPTABLE | AF_EXTRACT_INITIAL_OFFSET | AF_OVERRIDE_PHYSICS | AF_IGNORE_GRAVITY, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) //0.552) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) SET_ENTITY_HEADING(PLAYER_PED(CHAR_MICHAEL), 350.8180) ELSE SET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall", 0.0) SET_ENTITY_ANIM_SPEED(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall", 0.0) FILL_PUSH_IN_DATA(pushInData, PLAYER_PED(CHAR_MICHAEL), CHAR_MICHAEL, 0.75, 800, 800, 500, 400, PUSH_IN_SPEED_UP_PROPORTION) SET_LABEL_AS_TRIGGERED("PrepMichaelAnim", TRUE) ENDIF ELIF HAS_LABEL_BEEN_TRIGGERED("StartMichaelAnim") IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") SET_ENTITY_ANIM_SPEED(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall", 1.0) ENDIF bRadar = TRUE // INT iTolerance // // iTolerance = 16 // // INT iLTSx, iLTSy, iRTSx, iRTSy // // GET_CONTROL_VALUE_OF_ANALOGUE_STICKS(iLTSx, iLTSy, iRTSx, iRTSy) // // IF (iLTSx < -iTolerance OR iLTSx > iTolerance) // OR (iLTSy < -iTolerance OR iLTSy > iTolerance) // IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") // AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") > 0.775 // CLEAR_PED_TASKS(PLAYER_PED(CHAR_MICHAEL)) // // SET_ENTITY_HEADING(PLAYER_PED(CHAR_MICHAEL), 350.8180) // // FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) // ENDIF // ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MichaelFallShot") IF (IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") > 0.258) SET_PED_SHOOTS_AT_COORD(PLAYER_PED(CHAR_MICHAEL), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)) + <<0.0, 0.0, 2.0>>) INT iFramePass FOR iFramePass = 0 TO 10 DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE() PRINTLN("DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()") WAIT_WITH_DEATH_CHECKS(0) ENDFOR START_PARTICLE_FX_NON_LOOPED_AT_COORD("scr_mich2_spark_impact", <<994.175659, -2150.427490, 32.231403>>, VECTOR_ZERO) SET_LABEL_AS_TRIGGERED("MichaelFallShot", TRUE) ENDIF ENDIF //Push In IF GET_CAM_VIEW_MODE_FOR_CONTEXT(GET_CAM_ACTIVE_VIEW_MODE_CONTEXT()) = CAM_VIEW_MODE_FIRST_PERSON IF NOT HAS_LABEL_BEEN_TRIGGERED("MichaelFallPushIn") IF (IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") > 0.85) PRINTLN("PUSH IN CAM ACTIVE!") IF HANDLE_PUSH_IN(pushInData, DEFAULT, DEFAULT, DEFAULT, DEFAULT, FALSE) SET_LABEL_AS_TRIGGERED("MichaelFallPushIn", TRUE) PRINTLN("SET_LABEL_AS_TRIGGERED(\"MichaelFallPushIn\", TRUE)") ENDIF ENDIF ENDIF ENDIF IF (IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") > 0.99) OR NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") OR HAS_LABEL_BEEN_TRIGGERED("MichaelFallPushIn") SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE, SPC_LEAVE_CAMERA_CONTROL_ON) SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_MICHAEL), FALSE) IF GET_CAM_VIEW_MODE_FOR_CONTEXT(GET_CAM_ACTIVE_VIEW_MODE_CONTEXT()) = CAM_VIEW_MODE_FIRST_PERSON CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED(CHAR_MICHAEL)) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(0) ENDIF // IF GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON // ANIMPOSTFX_PLAY("CamPushInMichael", 0, FALSE) // ENDIF // CLEAR_PED_TASKS(PLAYER_PED(CHAR_MICHAEL)) // // SET_ENTITY_HEADING(PLAYER_PED(CHAR_MICHAEL), 350.8180) // // FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) ENDIF DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA) ENDIF ELSE bOkToHangFromHook = TRUE ENDIF IF HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCF1") IF IS_GAMEPLAY_CAM_RENDERING() AND NOT IS_INTERPOLATING_FROM_SCRIPT_CAMS() IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD) = PERFORMING_TASK INT iTolerance iTolerance = 16 INT iLTSx, iLTSy, iRTSx, iRTSy GET_CONTROL_VALUE_OF_ANALOGUE_STICKS(iLTSx, iLTSy, iRTSx, iRTSy) IF (iLTSx < -iTolerance OR iLTSx > iTolerance) OR (iLTSy < -iTolerance OR iLTSy > iTolerance) CLEAR_PED_TASKS(PLAYER_PED_ID()) ENDIF ENDIF ELIF IS_INTERPOLATING_FROM_SCRIPT_CAMS() IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD) = PERFORMING_TASK SET_GAMEPLAY_CAM_RELATIVE_HEADING(-6.0 - (GET_ENTITY_HEADING(PLAYER_PED_ID()) - 90.0)) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LR) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_UD) ENDIF ENDIF ENDIF IF IS_INTERPOLATING_FROM_SCRIPT_CAMS() DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LR) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_UD) ENDIF //Open Combat IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat9") INT iEnemiesRemain = 5 IF IS_PED_INJURED(sEnemyBackup[0].pedIndex) iEnemiesRemain-- ENDIF IF IS_PED_INJURED(sEnemyBackup[1].pedIndex) iEnemiesRemain-- ENDIF IF IS_PED_INJURED(sEnemyBackup[2].pedIndex) iEnemiesRemain-- ENDIF IF IS_PED_INJURED(sEnemyBackup[3].pedIndex) iEnemiesRemain-- ENDIF IF IS_PED_INJURED(sEnemyBackup[4].pedIndex) iEnemiesRemain-- ENDIF IF iEnemiesRemain <= 1 VECTOR vPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID()) createEnemy(sEnemyBackup[7], <<982.8243, -2144.1726, 28.4757>>, 314.9142, WEAPONTYPE_PISTOL) createEnemy(sEnemyBackup[8], <<986.0364, -2144.4543, 28.4759>>, 318.1739, WEAPONTYPE_PISTOL) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, <<988.5842, -2143.4475, 28.4759>>, <>, PEDMOVE_RUN, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyBackup[7].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_COORD(NULL, <<988.7651, -2139.6868, 28.4759>>, <>, PEDMOVE_RUN, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyBackup[8].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(sEnemyBackup[7].pedIndex, TRUE) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(sEnemyBackup[8].pedIndex, TRUE) SET_PED_ANGLED_DEFENSIVE_AREA(sEnemyBackup[7].pedIndex, <<994.424316, -2143.735352, 27.976158>>, <<984.857361, -2131.580078, 32.475563>>, 10.0) SET_PED_COMBAT_MOVEMENT(sEnemyBackup[7].pedIndex, CM_WILLADVANCE) SET_PED_ANGLED_DEFENSIVE_AREA(sEnemyBackup[8].pedIndex, <<994.424316, -2143.735352, 27.976158>>, <<984.857361, -2131.580078, 32.475563>>, 10.0) SET_PED_COMBAT_MOVEMENT(sEnemyBackup[8].pedIndex, CM_WILLADVANCE) iDamageTimer = GET_GAME_TIMER() + 15000 iAdvanceTimer = GET_GAME_TIMER() + 15000 SET_LABEL_AS_TRIGGERED("OpenCombat9", TRUE) ENDIF ELSE IF GET_GAME_TIMER() > iDamageTimer IF NOT IS_PED_INJURED(sEnemyBackup[7].pedIndex) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(sEnemyBackup[7].pedIndex, FALSE) ENDIF IF NOT IS_PED_INJURED(sEnemyBackup[8].pedIndex) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(sEnemyBackup[8].pedIndex, FALSE) ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_FLANK_RESPONSE") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) IF NOT IS_PED_INJURED(sEnemyBackup[7].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[8].pedIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_FLANK") CREATE_CONVERSATION_ADV("MCH2_FLANK") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_MOREF") CREATE_CONVERSATION_ADV("MCH2_MOREF", CONV_PRIORITY_MEDIUM, FALSE) SET_LABEL_AS_TRIGGERED("MCH2_FLANK_RESPONSE", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF //Open Combat IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat10") INT iEnemiesRemain = 5 IF IS_PED_INJURED(sEnemyBackup[0].pedIndex) iEnemiesRemain-- ENDIF IF IS_PED_INJURED(sEnemyBackup[1].pedIndex) iEnemiesRemain-- ENDIF IF IS_PED_INJURED(sEnemyBackup[2].pedIndex) iEnemiesRemain-- ENDIF IF IS_PED_INJURED(sEnemyBackup[3].pedIndex) iEnemiesRemain-- ENDIF IF IS_PED_INJURED(sEnemyBackup[4].pedIndex) iEnemiesRemain-- ENDIF IF (iEnemiesRemain <= 1 AND (IS_PED_INJURED(sEnemyBackup[7].pedIndex) OR IS_PED_INJURED(sEnemyBackup[8].pedIndex))) OR (HAS_LABEL_BEEN_TRIGGERED("OpenCombat9") AND GET_GAME_TIMER() > iAdvanceTimer) createEnemy(sEnemyBackup[9], <<993.0953, -2105.2952, 29.4752>>, 204.5829, WEAPONTYPE_PISTOL) createEnemy(sEnemyBackup[10], <<993.6476, -2106.8474, 29.4752>>, 261.5278, WEAPONTYPE_SMG) createEnemy(sEnemyBackup[11], <<994.7681, -2106.3376, 29.4753>>, 186.8079, WEAPONTYPE_SMG) SET_PED_ANGLED_DEFENSIVE_AREA(sEnemyBackup[9].pedIndex, <<994.966064, -2130.581299, 28.225883>>, <<993.716187, -2143.722168, 32.476128>>, 10.0) SET_PED_COMBAT_MOVEMENT(sEnemyBackup[9].pedIndex, CM_WILLADVANCE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyBackup[9].pedIndex, 500.0) SET_PED_ANGLED_DEFENSIVE_AREA(sEnemyBackup[10].pedIndex, <<994.966064, -2130.581299, 28.225883>>, <<993.716187, -2143.722168, 32.476128>>, 10.0) SET_PED_COMBAT_MOVEMENT(sEnemyBackup[10].pedIndex, CM_WILLADVANCE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyBackup[10].pedIndex, 500.0) SET_ENTITY_HEALTH(sEnemyBackup[11].pedIndex, 105) SET_PED_COMBAT_MOVEMENT(sEnemyBackup[11].pedIndex, CM_STATIONARY) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyBackup[11].pedIndex, <<999.9770, -2137.3657, 29.2547>>, 1.5, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyBackup[11].pedIndex, TRUE) TASK_GO_STRAIGHT_TO_COORD(sEnemyBackup[11].pedIndex, <<1002.3436, -2114.6580, 29.4758>>, PEDMOVE_RUN) SET_PED_CAN_BE_TARGETTED(sEnemyBackup[11].pedIndex, FALSE) SET_LABEL_AS_TRIGGERED("OpenCombat10", TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(sEnemyBackup[11].pedIndex) AND NOT IS_PED_INJURED(sEnemyBackup[11].pedIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat10a") IF IS_ENTITY_AT_COORD(sEnemyBackup[11].pedIndex, <<1002.3436, -2114.6580, 29.4758>>, <<2.0, 2.0, 2.0>>) SET_PED_POSITION(sEnemyBackup[11].pedIndex, <<1000.0, -2132.2, 29.4763>>, 173.1776) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<999.9770, -2137.3657, 29.2547>>, PLAYER_PED_ID(), PEDMOVE_WALK, TRUE, 0.1, 1, FALSE) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<994.3035, -2136.5476, 29.2231>>, PLAYER_PED_ID(), PEDMOVE_RUN, TRUE, 0.1, 1, FALSE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyBackup[11].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) REMOVE_PED_DEFENSIVE_AREA(sEnemyBackup[11].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyBackup[11].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyBackup[11].pedIndex, CM_WILLADVANCE) SET_PED_CAN_BE_TARGETTED(sEnemyBackup[11].pedIndex, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat10a", TRUE) ENDIF ELSE IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_MACHINE_RESPONSE") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) IF NOT IS_PED_INJURED(sEnemyBackup[7].pedIndex) OR NOT IS_PED_INJURED(sEnemyBackup[8].pedIndex) IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_MACHINE") CREATE_CONVERSATION_ADV("MCH2_MACHINE") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_MOREG") CREATE_CONVERSATION_ADV("MCH2_MOREG", CONV_PRIORITY_MEDIUM, FALSE) SET_LABEL_AS_TRIGGERED("MCH2_MACHINE_RESPONSE", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF IS_PED_INJURED(sEnemyBackup[0].pedIndex) AND IS_PED_INJURED(sEnemyBackup[1].pedIndex) AND IS_PED_INJURED(sEnemyBackup[2].pedIndex) AND IS_PED_INJURED(sEnemyBackup[3].pedIndex) AND IS_PED_INJURED(sEnemyBackup[4].pedIndex) AND IS_PED_INJURED(sEnemyBackup[7].pedIndex) AND IS_PED_INJURED(sEnemyBackup[8].pedIndex) AND IS_PED_INJURED(sEnemyBackup[9].pedIndex) AND IS_PED_INJURED(sEnemyBackup[10].pedIndex) AND IS_PED_INJURED(sEnemyBackup[11].pedIndex) IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED) = PERFORMING_TASK CLEAR_PED_TASKS(PLAYER_PED_ID()) ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("SwitchToFranklin") SET_SELECTOR_PED_HINT(sSelectorPeds, SELECTOR_PED_FRANKLIN) ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCF1") IF IS_PED_IN_COMBAT(PLAYER_PED(CHAR_FRANKLIN)) CLEAR_PED_TASKS(PLAYER_PED(CHAR_FRANKLIN)) TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED(CHAR_FRANKLIN), <<996.3146, -2142.4307, 28.4762>>, -1, FALSE, 1.0, TRUE, TRUE, covPoint[13], TRUE) PRINTLN("Franklin was in combat, so we clear his tasks to put him into cover!") ENDIF IF NOT IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<996.3133, -2142.4089, 28.4762>>, <<2.0, 2.0, 2.0>>) IF GET_SCRIPT_TASK_STATUS(PLAYER_PED(CHAR_FRANKLIN), SCRIPT_TASK_PERFORM_SEQUENCE) != PERFORMING_TASK OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, <<996.2867, -2143.0442, 28.4763>>, <<994.3478, -2136.1184, 29.2463>>, PEDMOVE_RUN, TRUE) TASK_PUT_PED_DIRECTLY_INTO_COVER(NULL, <<996.3146, -2142.4307, 28.4762>>, -1, FALSE, 1.0, TRUE, TRUE, covPoint[13], TRUE) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(PLAYER_PED(CHAR_FRANKLIN), seqMain) CLEAR_SEQUENCE_TASK(seqMain) PRINTLN("Franklin wasn't in the right spot, so he gets a sequence to enter cover in the right place!") ENDIF ENDIF IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_AHEAD_1") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_AHEAD", "MCH2_AHEAD_1") PRINTLN("All the enemies are dead, so we can switch to Franklin!") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_AHEAD_2") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_AHEAD", "MCH2_AHEAD_2") // ELIF NOT HAS_LABEL_BEEN_TRIGGERED("SwitchToFranklin") // AND GET_PLAYER_PED_ENUM(PLAYER_PED_ID()) = CHAR_MICHAEL // PRINT_ADV("MCH2_FSWITCH") ENDIF ENDIF // ELIF NOT HAS_LABEL_BEEN_TRIGGERED("OneFrameDisableFirstPersonCam") // DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE() PRINTLN("DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()") // // SET_LABEL_AS_TRIGGERED("OneFrameDisableFirstPersonCam", TRUE) ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) IF HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCF1") AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCF2") IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<993.211975, -2149.697754, 31.476280>>, <<8.0, 8.0, 3.0>>) CREATE_CONVERSATION_ADV("MCH2_CLEAR") ENDIF ENDIF ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("MCH2_AHEAD_1") REQUEST_SCRIPT_AUDIO_BANK("Michael_2_Break_Free") IF NOT sCamDetails.bRun IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL OR (IS_PED_INJURED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) OR iSetPiece[SET_PIECE_GRAPPLE] > 4) IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_intro_p_one") AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_winning_p_one") AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_losing_p_one") AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_a_p_one") AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_b_p_one") AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") AND NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) IF (NOT HAS_LABEL_BEEN_TRIGGERED("SwitchToFranklin") //UPDATE_SELECTOR_HUD(sSelectorPeds) AND IS_PED_IN_COVER(PLAYER_PED(CHAR_FRANKLIN))) IF NOT HAS_SELECTOR_PED_BEEN_SELECTED(sSelectorPeds, SELECTOR_PED_MULTIPLAYER) CLEAR_PRINTS() MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) //Stats INFORM_MISSION_STATS_OF_INCREMENT(MIC2_TIMES_SWITCHED) // IF NOT HAS_LABEL_BEEN_TRIGGERED("SwitchToFranklin") // MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) // ELSE // //Stats // INFORM_MISSION_STATS_OF_INCREMENT(MIC2_TIMES_SWITCHED) // ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCF1") GET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), wtLastWeapon) ENDIF sCamDetails.pedTo = sSelectorPeds.pedID[sSelectorPeds.eNewSelectorPed] sCamDetails.bRun = TRUE ENDIF ENDIF ENDIF ENDIF ELSE DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA) IF NOT (IS_PLAYER_SWITCH_IN_PROGRESS() AND GET_PLAYER_SHORT_SWITCH_STATE() >= SHORT_SWITCH_STATE_OUTRO) DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE() PRINTLN("DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()") ENDIF IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED_SHORT_RANGE(sCamDetails) //RUN_CAM_SPLINE_FROM_PLAYER_TO_PED_RACE(sCamDetails) //Returns FALSE when the camera spline is complete IF sCamDetails.bOKToSwitchPed IF NOT sCamDetails.bPedSwitched TAKE_CONTROL_OF_PED_FLAGS eTakeControlFlags = TCF_NONE IF NOT HAS_LABEL_BEEN_TRIGGERED("SwitchToFranklin") eTakeControlFlags = TCF_CLEAR_TASK_INTERRUPT_CHECKS SET_LABEL_AS_TRIGGERED("SwitchToFranklin", TRUE) ENDIF IF TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE, eTakeControlFlags) //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Update the relationship groups IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupBuddy) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF SET_PED_DEFENSIVE_AREA_ATTACHED_TO_PED(PLAYER_PED(CHAR_FRANKLIN), PLAYER_PED(CHAR_MICHAEL), <<5.0, 0.0, 5.0>>, <<-5.0, 0.0, -5.0>>, 5.0, TRUE) SET_PED_DEFENSIVE_AREA_ATTACHED_TO_PED(PLAYER_PED(CHAR_MICHAEL), PLAYER_PED(CHAR_FRANKLIN), <<5.0, 0.0, 5.0>>, <<-5.0, 0.0, -5.0>>, 5.0, TRUE) SET_RAGDOLL_BLOCKING_FLAGS(PLAYER_PED(CHAR_MICHAEL), RBF_BULLET_IMPACT | RBF_PLAYER_BUMP | RBF_PLAYER_RAGDOLL_BUMP) SET_RAGDOLL_BLOCKING_FLAGS(PLAYER_PED(CHAR_FRANKLIN), RBF_BULLET_IMPACT) SAFE_REMOVE_BLIP(blipMichael) SAFE_REMOVE_BLIP(blipFranklin) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) SAFE_ADD_BLIP_PED(blipMichael, sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE) SET_PED_COMBAT_ATTRIBUTES(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CA_DISABLE_PIN_DOWN_OTHERS, TRUE) IF IS_ENTITY_ATTACHED(PLAYER_PED(CHAR_MICHAEL)) TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_react_c", INSTANT_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_HOLD_LAST_FRAME | AF_NOT_INTERRUPTABLE) //TASK_PLAY_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictHang, "idle", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) ENDIF ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) SAFE_ADD_BLIP_PED(blipFranklin, sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], FALSE) SET_PED_COMBAT_ATTRIBUTES(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], CA_DISABLE_PIN_DOWN_OTHERS, TRUE) ENDIF SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_ForcedToStayInCover, FALSE) SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), TRUE) SET_PED_USING_ACTION_MODE(NOT_PLAYER_PED_ID(), TRUE, -1, "DEFAULT_ACTION") IF GET_ENTITY_HEALTH(PLAYER_PED(CHAR_MICHAEL)) < GET_PED_MAX_HEALTH(PLAYER_PED(CHAR_MICHAEL)) / 2 SET_ENTITY_HEALTH(PLAYER_PED(CHAR_MICHAEL), GET_PED_MAX_HEALTH(PLAYER_PED(CHAR_MICHAEL)) / 2) ENDIF IF GET_ENTITY_HEALTH(PLAYER_PED(CHAR_FRANKLIN)) < GET_PED_MAX_HEALTH(PLAYER_PED(CHAR_FRANKLIN)) / 2 SET_ENTITY_HEALTH(PLAYER_PED(CHAR_FRANKLIN), GET_PED_MAX_HEALTH(PLAYER_PED(CHAR_FRANKLIN)) / 2) ENDIF IF iCutsceneStage > 0 iCutsceneStage-- PRINTLN("iCutsceneStage = ", iCutsceneStage) //Should re-assign the tasks ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCF1") //First switch task for Michael ATTACH_ENTITY_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook, 0, <<0.0, -0.1, -1.68>> , <<0.0, 0.0, 0.0>>, TRUE, TRUE) IF wtLastWeapon != WEAPONTYPE_UNARMED IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_FRANKLIN), wtLastWeapon) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), wtLastWeapon, 350, TRUE) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), wtLastWeapon, TRUE) ELSE IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, 350, TRUE) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, TRUE) ENDIF //Audio PLAY_AUDIO(MIC2_BACK_TO_FRANK) LOAD_AUDIO(MIC3_FRANK_DOWN) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) CREATE_CONVERSATION_ADV("MCH2_ESCF1") ELSE SET_LABEL_AS_TRIGGERED("MCH2_ESCF1", TRUE) ENDIF CREATE_PICKUP(PICKUP_WEAPON_SAWNOFFSHOTGUN, <<995.77649, -2126.69238, 29.47581>>) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF sCamDetails.bPedSwitched = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT DOES_CAM_EXIST(sCamDetails.camID) OR (DOES_CAM_EXIST(sCamDetails.camID) AND NOT IS_CAM_ACTIVE(sCamDetails.camID)) // IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(NOT_PLAYER_PED_ID()), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 25.0 // AND NOT IS_ENTITY_ON_SCREEN(NOT_PLAYER_PED_ID()) // IF iHealthStore = -1 // iHealthStore = GET_ENTITY_HEALTH(NOT_PLAYER_PED_ID()) // SET_ENTITY_HEALTH(NOT_PLAYER_PED_ID(), 101) // ENDIF // ELIF iHealthStore > -1 // SET_ENTITY_HEALTH(NOT_PLAYER_PED_ID(), iHealthStore) // iHealthStore = -1 // ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(NOT_PLAYER_PED_ID()), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 60.0 IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL eMissionFail = failFranklinAbandon ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN eMissionFail = failMichaelAbandon ENDIF missionFailed() ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCF1") AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCM") AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCF2") IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) CREATE_CONVERSATION_ADV("MCH2_ESCM") ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCF1") AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_ESCF2") IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<996.047791, -2125.919189, 31.225800>>, <<5.0, 4.0, 3.0>>) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) CREATE_CONVERSATION_ADV("MCH2_ESCF2") ENDIF ENDIF ENDIF IF (IS_PED_INJURED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) AND iSetPiece[SET_PIECE_GRAPPLE] > 5) IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_intro_p_one") AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_winning_p_one") AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_losing_p_one") AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_a_p_one") AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_b_p_one") AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_MICHAEL), sAnimDictMic2Hook, "michael_meat_hook_fall") AND NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) ADVANCE_STAGE() ENDIF ENDIF //Grapple SWITCH iSetPiece[SET_PIECE_GRAPPLE] CASE 0 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) //IF GET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) < 400 //OR IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex), 5.0) //OR IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<997.968079, -2106.348145, 31.975391>>, <<8.0, 5.0, 2.5>>) IF NOT HAS_LABEL_BEEN_TRIGGERED("AbandonGrapple") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<984.412720, -2102.345703, 29.301226>>, <<981.532898, -2130.348389, 35.475380>>, 15.0) PRINT_ADV("CMN_MLEAVE", DEFAULT_GOD_TEXT_TIME, FALSE) IF NOT IS_PED_INJURED(sEnemyBackup[5].pedIndex) CLEAR_PED_TASKS(sEnemyBackup[5].pedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyBackup[5].pedIndex, TRUE) SET_PED_ACCURACY(sEnemyBackup[5].pedIndex, 80) SET_PED_COMBAT_ATTRIBUTES(sEnemyBackup[5].pedIndex, CA_OPEN_COMBAT_WHEN_DEFENSIVE_AREA_IS_REACHED, FALSE) SET_PED_COMBAT_MOVEMENT(sEnemyBackup[5].pedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_PED(sEnemyBackup[5].pedIndex, PLAYER_PED(CHAR_MICHAEL), VECTOR_ZERO, 10.0) TASK_COMBAT_PED(sEnemyBackup[5].pedIndex, PLAYER_PED(CHAR_MICHAEL)) ENDIF IF NOT IS_PED_INJURED(sEnemyBackup[6].pedIndex) CLEAR_PED_TASKS(sEnemyBackup[6].pedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyBackup[6].pedIndex, TRUE) SET_PED_ACCURACY(sEnemyBackup[6].pedIndex, 80) SET_PED_COMBAT_ATTRIBUTES(sEnemyBackup[6].pedIndex, CA_OPEN_COMBAT_WHEN_DEFENSIVE_AREA_IS_REACHED, FALSE) SET_PED_COMBAT_MOVEMENT(sEnemyBackup[6].pedIndex, CM_DEFENSIVE) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_PED(sEnemyBackup[6].pedIndex, PLAYER_PED(CHAR_MICHAEL), VECTOR_ZERO, 10.0) TASK_COMBAT_PED(sEnemyBackup[6].pedIndex, PLAYER_PED(CHAR_MICHAEL)) ENDIF SET_LABEL_AS_TRIGGERED("AbandonGrapple", TRUE) ENDIF ELSE IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<984.412720, -2102.345703, 29.301226>>, <<981.532898, -2130.348389, 35.475380>>, 15.0) IF NOT IS_PED_INJURED(sEnemyBackup[5].pedIndex) IF IS_ENTITY_AT_COORD(sEnemyBackup[5].pedIndex, <<995.896423, -2148.686768, 31.476355>>, <<10.0, 10.0, 3.0>>) APPLY_DAMAGE_TO_PED(PLAYER_PED(CHAR_MICHAEL), 1000, TRUE) SET_PED_TO_RAGDOLL(PLAYER_PED(CHAR_MICHAEL), 10000, 10000, TASK_RELAX, FALSE, FALSE) //Pin the ankle to the bottom of the hook VECTOR vRightFootAttach vRightFootAttach = <<-0.075, -0.1, -0.85>> ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(PLAYER_PED(CHAR_MICHAEL), objHook, GET_PED_BONE_INDEX(PLAYER_PED(CHAR_MICHAEL), BONETAG_R_FOOT), -1, vRightFootAttach, VECTOR_ZERO, VECTOR_ZERO, -1.0, TRUE, FALSE, FALSE, FALSE) ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(PLAYER_PED(CHAR_MICHAEL), objHook, GET_PED_BONE_INDEX(PLAYER_PED(CHAR_MICHAEL), BONETAG_L_FOOT), -1, <<-vRightFootAttach.X, vRightFootAttach.Y, vRightFootAttach.Z>>, VECTOR_ZERO, VECTOR_ZERO, -1.0, TRUE, FALSE, FALSE, FALSE) ENDIF ENDIF IF NOT IS_PED_INJURED(sEnemyBackup[6].pedIndex) IF IS_ENTITY_AT_COORD(sEnemyBackup[6].pedIndex, <<995.896423, -2148.686768, 31.476355>>, <<10.0, 10.0, 3.0>>) APPLY_DAMAGE_TO_PED(PLAYER_PED(CHAR_MICHAEL), 1000, TRUE) SET_PED_TO_RAGDOLL(PLAYER_PED(CHAR_MICHAEL), 10000, 10000, TASK_RELAX, FALSE, FALSE) //Pin the ankle to the bottom of the hook VECTOR vRightFootAttach vRightFootAttach = <<-0.075, -0.1, -0.85>> ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(PLAYER_PED(CHAR_MICHAEL), objHook, GET_PED_BONE_INDEX(PLAYER_PED(CHAR_MICHAEL), BONETAG_R_FOOT), -1, vRightFootAttach, VECTOR_ZERO, VECTOR_ZERO, -1.0, TRUE, FALSE, FALSE, FALSE) ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(PLAYER_PED(CHAR_MICHAEL), objHook, GET_PED_BONE_INDEX(PLAYER_PED(CHAR_MICHAEL), BONETAG_L_FOOT), -1, <<-vRightFootAttach.X, vRightFootAttach.Y, vRightFootAttach.Z>>, VECTOR_ZERO, VECTOR_ZERO, -1.0, TRUE, FALSE, FALSE, FALSE) ENDIF ENDIF ENDIF IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<971.733765, -2122.363770, 29.477753>>, <<989.067078, -2124.301025, 34.475548>>, 5.0) eMissionFail = failMichaelAbandon missionFailed() ENDIF ENDIF IF IS_PED_INJURED(sEnemyBackup[5].pedIndex) AND IS_PED_INJURED(sEnemyBackup[6].pedIndex) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, TRUE) IF NOT HAS_PED_GOT_WEAPON(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, WEAPONTYPE_KNIFE) GIVE_WEAPON_TO_PED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, WEAPONTYPE_KNIFE, INFINITE_AMMO, TRUE) ENDIF SET_CURRENT_PED_WEAPON(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, WEAPONTYPE_KNIFE, TRUE) SETTIMERB(0) iSetPiece[SET_PIECE_GRAPPLE]++ ENDIF ENDIF BREAK CASE 1 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) // BOOL bClearOfEnemies // // bClearOfEnemies = TRUE // REPEAT COUNT_OF(sEnemyBackup) i // IF DOES_ENTITY_EXIST(sEnemyBackup[i].pedIndex) // AND NOT IS_PED_INJURED(sEnemyBackup[i].pedIndex) // IF IS_ENTITY_AT_COORD(sEnemyBackup[i].pedIndex, <<997.968079, -2106.348145, 31.975391>>, <<8.0, 5.0, 2.5>>) // bClearOfEnemies = FALSE // ENDIF // ENDIF // ENDREPEAT // IF IS_PED_INJURED(sEnemyBackup[5].pedIndex) // AND IS_PED_INJURED(sEnemyBackup[6].pedIndex) // // ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("AbandonGrapple") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<984.412720, -2102.345703, 29.301226>>, <<981.532898, -2130.348389, 35.475380>>, 15.0) PRINT_ADV("CMN_MLEAVE", DEFAULT_GOD_TEXT_TIME, FALSE) SET_LABEL_AS_TRIGGERED("AbandonGrapple", TRUE) ENDIF ELSE IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<971.733765, -2122.363770, 29.477753>>, <<989.067078, -2124.301025, 34.475548>>, 5.0) eMissionFail = failMichaelAbandon missionFailed() ENDIF ENDIF IF (IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<987.029297, -2105.918701, 29.391869>>, <<999.674927, -2104.281738, 34.211304>>, 7.0) AND TIMERB() > 2000) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_FRANKLIN), <<989.328735, -2108.531250, 29.475145>>, <<989.938782, -2102.828369, 34.225105>>, 3.75) IF NOT IS_PED_RAGDOLL(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) //, SPC_LEAVE_CAMERA_CONTROL_ON) INT i REPEAT COUNT_OF(sEnemyBackup) i IF DOES_ENTITY_EXIST(sEnemyBackup[i].pedIndex) IF NOT IS_PED_INJURED(sEnemyBackup[i].pedIndex) SET_ENTITY_VISIBLE(sEnemyBackup[i].pedIndex, FALSE) FREEZE_ENTITY_POSITION(sEnemyBackup[i].pedIndex, TRUE) ELIF IS_ENTITY_IN_ANGLED_AREA(sEnemyBackup[i].pedIndex, <<991.811279, -2105.769775, 28.975157>>, <<999.906250, -2107.010254, 33.475464>>, 3.0) SAFE_DELETE_PED(sEnemyBackup[i].pedIndex) ENDIF ENDIF ENDREPEAT IF NOT HAS_PED_GOT_WEAPON(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, WEAPONTYPE_KNIFE) GIVE_WEAPON_TO_PED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, WEAPONTYPE_KNIFE, INFINITE_AMMO, TRUE) ENDIF SET_CURRENT_PED_WEAPON(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, WEAPONTYPE_KNIFE, TRUE) GET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), wtLastWeapon) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_UNARMED, TRUE) SAFE_ADD_BLIP_PED(sEnemySetPiece[SET_PIECE_GRAPPLE].blipIndex, sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, TRUE) //Cam IF NOT DOES_CAM_EXIST(camAnim) camAnim = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE) ENDIF PLAY_CAM_ANIM(camAnim, "mic_2_ig_11_intro_cam", sAnimDictMic2IG11, <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>) SET_CAM_ACTIVE(camAnim, TRUE) RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) HANG_UP_AND_PUT_AWAY_PHONE(TRUE) HIDE_HUD_AND_RADAR_THIS_FRAME() SET_ENTITY_VISIBLE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, TRUE) CLEAR_AREA(<<997.0422, -2107.2380, 29.4754>>, 10.0, TRUE) SET_ENTITY_NO_COLLISION_ENTITY(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, PLAYER_PED(CHAR_FRANKLIN), FALSE) SET_ENTITY_NO_COLLISION_ENTITY(PLAYER_PED(CHAR_FRANKLIN), sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, FALSE) // OPEN_SEQUENCE_TASK(seqMain) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_intro_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) //, 0.373) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_winning_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_losing_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_winning_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_losing_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_winning_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_losing_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_winning_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_losing_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_a_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION | AF_HOLD_LAST_FRAME, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // CLOSE_SEQUENCE_TASK(seqMain) // TASK_PERFORM_SEQUENCE(PLAYER_PED(CHAR_FRANKLIN), seqMain) // CLEAR_SEQUENCE_TASK(seqMain) // // FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) // // OPEN_SEQUENCE_TASK(seqMain) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_intro_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) //, 0.373) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_winning_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_losing_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_winning_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_losing_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_winning_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_losing_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_winning_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_losing_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // TASK_PLAY_ANIM_ADVANCED(NULL, sAnimDictMic2IG11, "mic_2_ig_11_a_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // CLOSE_SEQUENCE_TASK(seqMain) // TASK_PERFORM_SEQUENCE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, seqMain) // CLEAR_SEQUENCE_TASK(seqMain) // // FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage = 1 SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, PCF_DontActivateRagdollFromBulletImpact, FALSE) SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, PCF_DontActivateRagdollFromExplosions, FALSE) SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, PCF_DontActivateRagdollFromElectrocution, FALSE) SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, PCF_DontActivateRagdollFromFire, FALSE) CLEAR_RAGDOLL_BLOCKING_FLAGS(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, RBF_BULLET_IMPACT | RBF_EXPLOSION | RBF_ELECTROCUTION | RBF_FIRE | RBF_RUBBER_BULLET) SET_ENTITY_PROOFS(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, FALSE, FALSE, FALSE, FALSE, FALSE) SET_ENTITY_INVINCIBLE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, FALSE) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, 105) //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOT_FROM_MEATHOOK") STOP_AUDIO_SCENE("MI_2_SHOOT_FROM_MEATHOOK") ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_FRANKLIN_KNIFE_ATTACK") START_AUDIO_SCENE("MI_2_FRANKLIN_KNIFE_ATTACK") ENDIF //Audio PLAY_AUDIO(MIC3_FRANK_DOWN) SETTIMERB(0) eSwitchCamState = SWITCH_CAM_REQUEST_ASSETS HANDLE_SWITCH_CAM_FRANKLIN_GRAPPLE_TO_MICHAEL(scsSwitchCam_FranklinGrappleToMichael) IF NOT bVideoRecording REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGH) bVideoRecording = TRUE ENDIF iSetPiece[SET_PIECE_GRAPPLE]++ ENDIF ENDIF ENDIF BREAK CASE 2 HIDE_HUD_AND_RADAR_THIS_FRAME() IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 0.350 //IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_intro_goon") //AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_intro_goon") >= 0.350 //AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_intro_goon") > 0.650 IF bVideoRecording REPLAY_STOP_EVENT() bVideoRecording = FALSE ENDIF MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE) //Blocking SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_FRANKLIN), TRUE) //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Update the relationship groups IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupBuddy) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF SAFE_REMOVE_BLIP(blipMichael) SAFE_REMOVE_BLIP(blipFranklin) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) SAFE_ADD_BLIP_PED(blipMichael, sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) SAFE_ADD_BLIP_PED(blipFranklin, sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], FALSE) ENDIF SETTIMERB(0) eSwitchCamState = SWITCH_CAM_SETUP_SPLINE iSetPiece[SET_PIECE_GRAPPLE]++ ENDIF BREAK CASE 3 HIDE_HUD_AND_RADAR_THIS_FRAME() INT i // IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_intro_goon") // AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_intro_goon") > 0.750 //0.650 REPEAT COUNT_OF(sEnemyBackup) i IF DOES_ENTITY_EXIST(sEnemyBackup[i].pedIndex) AND NOT IS_PED_INJURED(sEnemyBackup[i].pedIndex) SET_ENTITY_VISIBLE(sEnemyBackup[i].pedIndex, TRUE) FREEZE_ENTITY_POSITION(sEnemyBackup[i].pedIndex, FALSE) ENDIF ENDREPEAT IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, 600) SET_PED_SUFFERS_CRITICAL_HITS(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, FALSE) ENDIF TASK_AIM_GUN_SCRIPTED(PLAYER_PED(CHAR_MICHAEL), SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN) PRINTLN("SHOOTING/HANGING UPSIDE DOWN!") IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, 350, TRUE) ENDIF IF GET_AMMO_IN_PED_WEAPON(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL) < (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_COMBATPISTOL) * 2) SET_PED_AMMO(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_COMBATPISTOL) * 2)) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, TRUE) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10.0) //Cam // IF NOT DOES_CAM_EXIST(camMain) // camMain = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE) // ENDIF // // SET_CAM_PARAMS(camMain, GET_CAM_COORD(camAnim), GET_CAM_ROT(camAnim), GET_CAM_FOV(camAnim)) // // SET_CAM_PARAMS(camMain, // <<996.274475, -2126.295410, 30.160732>>, // <<-2.658349, 0.699294, -10.082686>>, // 44.001450, // DEFAULT_INTERP_TO_FROM_GAME, // GRAPH_TYPE_ACCEL, // GRAPH_TYPE_ACCEL) // // SET_CAM_ACTIVE(camMain, TRUE) //RENDER_SCRIPT_CAMS(FALSE, TRUE, DEFAULT_INTERP_TO_FROM_GAME * 2, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(MIC2_TIME_TO_SAVE_FRANKLIN) //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_FRANKLIN_KNIFE_ATTACK") STOP_AUDIO_SCENE("MI_2_FRANKLIN_KNIFE_ATTACK") ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_SPLINE_2") START_AUDIO_SCENE("MI_2_SPLINE_2") ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_GRAPPLE]++ // ENDIF BREAK CASE 4 IF wtLastWeapon != WEAPONTYPE_UNARMED REQUEST_WEAPON_ASSET(wtLastWeapon) ELSE REQUEST_WEAPON_ASSET(WEAPONTYPE_ASSAULTRIFLE) ENDIF // IF IS_CAM_RENDERING(camMain) // RENDER_SCRIPT_CAMS(FALSE, TRUE, DEFAULT_INTERP_TO_FROM_GAME * 2, FALSE) // SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) // //// SET_LABEL_AS_TRIGGERED("FranklinGrapple", TRUE) // // INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(MIC2_TIME_TO_SAVE_FRANKLIN) // ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("SwitchBackToMichael") IF HANDLE_SWITCH_CAM_FRANKLIN_GRAPPLE_TO_MICHAEL(scsSwitchCam_FranklinGrappleToMichael) //IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), GET_FINAL_RENDERED_CAM_COORD()) < 2.0 //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_SPLINE_2") STOP_AUDIO_SCENE("MI_2_SPLINE_2") ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_SAVE_FRANKLIN") START_AUDIO_SCENE("MI_2_SAVE_FRANKLIN") ENDIF SET_LABEL_AS_TRIGGERED("SwitchBackToMichael", TRUE) ENDIF DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_PC) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_SECONDARY) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ACCURATE_AIM) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_IN) ENDIF //[MF] Stop gameplay cam shake for after we return to Mike IF bFrankGrappleToMike_GameplayCamShakeActivated IF TIMERB() > iFrankGrappleToMike_GameplayCamShakeDuration STOP_GAMEPLAY_CAM_SHAKING(FALSE) bFrankGrappleToMike_GameplayCamShakeActivated = FALSE ENDIF ENDIF IF NOT SAFE_IS_PLAYER_CONTROL_ON() IF eSwitchCamState != SWITCH_CAM_PLAYING_SPLINE HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_RETICLE) HIDE_HUD_AND_RADAR_THIS_FRAME() DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_PC) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_SECONDARY) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ACCURATE_AIM) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_IN) ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), GET_FINAL_RENDERED_CAM_COORD()) < 2.0 SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) ENDIF ENDIF IF IS_INTERPOLATING_FROM_SCRIPT_CAMS() OR eSwitchCamState = SWITCH_CAM_PLAYING_SPLINE HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_RETICLE) HIDE_HUD_AND_RADAR_THIS_FRAME() DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_PC) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_SECONDARY) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ACCURATE_AIM) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SNIPER_ZOOM_IN) DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA) ENDIF //Audio IF NOT HAS_LABEL_BEEN_TRIGGERED("FranklinSaved") IF NOT IS_MUSIC_ONESHOT_PLAYING() LOAD_AUDIO(MIC2_FRANK_SAVED) SET_LABEL_AS_TRIGGERED("FranklinSaved", TRUE) ENDIF ENDIF // IF IS_PED_INJURED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) IF GET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) < 600 TASK_PLAY_ANIM_ADVANCED(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_b_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION | AF_IGNORE_GRAVITY, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) TASK_PLAY_ANIM_ADVANCED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_b_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, INSTANT_BLEND_IN, SLOW_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION | AF_IGNORE_GRAVITY | AF_ENDS_IN_DEAD_POSE, 0.469, EULER_YXZ, AIK_DISABLE_LEG_IK) SET_PED_DROPS_WEAPON(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_FRANKLIN), TRUE, -1, "DEFAULT_ACTION") KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() CREATE_CONVERSATION_ADV("MCH2_SAVE") REPLAY_RECORD_BACK_FOR_TIME(4.0, 8.0, REPLAY_IMPORTANCE_HIGHEST) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_GRAPPLE].blipIndex) //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_SAVE_FRANKLIN") STOP_AUDIO_SCENE("MI_2_SAVE_FRANKLIN") ENDIF IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_ESCAPE_SHOOTOUT") START_AUDIO_SCENE("MI_2_ESCAPE_SHOOTOUT") ENDIF //Audio PLAY_AUDIO(MIC2_FRANK_SAVED) INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED(FALSE, MIC2_TIME_TO_SAVE_FRANKLIN) IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE) ENDIF SET_CAM_PARAMS(camMain, <<995.838806, -2109.341309, 30.128569>>, <<6.531624, 0.0, -44.823853>>, 33.426998) SET_CAM_PARAMS(camMain, <<996.001099, -2109.178223, 30.154921>>, <<6.531624, 0.0, -44.823853>>, 33.426998, 3000, GRAPH_TYPE_SIN_ACCEL_DECEL, GRAPH_TYPE_SIN_ACCEL_DECEL) SET_CAM_ACTIVE(camMain, TRUE) RENDER_SCRIPT_CAMS(TRUE, FALSE) SHAKE_CAM(camMain, "MEDIUM_EXPLOSION_SHAKE", 0.2) SET_LABEL_AS_TRIGGERED("FranklinGrapple", TRUE) //[MF] Safety stop gameplay cam shake for after we return to Mike IF bFrankGrappleToMike_GameplayCamShakeActivated STOP_GAMEPLAY_CAM_SHAKING(FALSE) bFrankGrappleToMike_GameplayCamShakeActivated = FALSE ENDIF iSetPiece[SET_PIECE_GRAPPLE]++ ENDIF // IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<997.893860, -2107.579834, 31.975397>>, <<8.0, 4.5, 2.5>>) // SET_PED_CAPSULE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, 0.75) // // IF NOT IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_a_goon") // AND NOT (iGrappleStage >= 10 // AND (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 0.373)) // TASK_PLAY_ANIM_ADVANCED(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_a_p_one", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, SLOW_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION | AF_HOLD_LAST_FRAME, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // // TASK_PLAY_ANIM_ADVANCED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_a_goon", <<997.380, -2103.649, 29.450 + 0.07>>, <<0.0, 0.0, -95.0>>, SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) // ENDIF // ENDIF // IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_a_goon") // AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_a_goon") >= 0.373 IF iGrappleStage >= 10 AND (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 0.373) CLEAR_TEXT() ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("scr_mich2_blood_stab") // IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_a_goon") // AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_a_goon") >= 0.400 IF iGrappleStage >= 10 AND (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 0.400) //START_PARTICLE_FX_NON_LOOPED_AT_COORD("scr_mich2_blood_stab", <<998.649719, -2107.086182, 29.821081>>, VECTOR_ZERO) START_PARTICLE_FX_NON_LOOPED_ON_ENTITY("scr_mich2_blood_stab", sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, VECTOR_ZERO, VECTOR_ZERO) SET_LABEL_AS_TRIGGERED("scr_mich2_blood_stab", TRUE) ENDIF ENDIF // IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_a_goon") // AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_a_goon") >= 0.600 IF iGrappleStage >= 10 AND (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 0.600) bRadar = FALSE DISPLAY_RADAR(FALSE) DISPLAY_HUD(FALSE) eMissionFail = failFranklinDied missionFailed() ENDIF BREAK CASE 5 IF IS_CAM_SHAKING(camMain) IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_b_p_one") OR (IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_b_p_one") AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_b_p_one") >= 0.15) STOP_CAM_SHAKING(camMain) ENDIF ENDIF IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_b_p_one") OR (IS_ENTITY_PLAYING_ANIM(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_b_p_one") AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED(CHAR_FRANKLIN), sAnimDictMic2IG11, "mic_2_ig_11_b_p_one") >= 0.75) REPLAY_RECORD_BACK_FOR_TIME(4.0) RENDER_SCRIPT_CAMS(FALSE, FALSE) SET_LABEL_AS_TRIGGERED("StartMichaelAnim", TRUE) SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), TRUE) SET_PED_USING_ACTION_MODE(NOT_PLAYER_PED_ID(), TRUE, -1, "DEFAULT_ACTION") SET_PED_ACCURACY(NOT_PLAYER_PED_ID(), 20) IF wtLastWeapon != WEAPONTYPE_UNARMED SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), wtLastWeapon, TRUE) ELSE IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, 350, TRUE) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, TRUE) ENDIF SET_ENTITY_HEALTH(PLAYER_PED(CHAR_FRANKLIN), GET_PED_MAX_HEALTH(PLAYER_PED(CHAR_FRANKLIN))) //Blocking SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_FRANKLIN), TRUE) IF iCutsceneStage > 0 iCutsceneStage-- PRINTLN("iCutsceneStage = ", iCutsceneStage) //Should re-assign the tasks ENDIF iSetPiece[SET_PIECE_GRAPPLE]++ ENDIF BREAK ENDSWITCH IF iSetPiece[SET_PIECE_GRAPPLE] <= 4 SWITCH iGrappleStage CASE 0 //Do nothing BREAK CASE 1 sceneGrapple = CREATE_SYNCHRONIZED_SCENE(vGrapplePos, vGrappleRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_intro_p_one", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_intro_goon", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage++ BREAK CASE 2 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) OR (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 1.0) sceneGrapple = CREATE_SYNCHRONIZED_SCENE(vGrapplePos, vGrappleRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_winning_p_one", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_winning_goon", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage++ ENDIF BREAK CASE 3 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) OR (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 1.0) sceneGrapple = CREATE_SYNCHRONIZED_SCENE(vGrapplePos, vGrappleRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_losing_p_one", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_losing_goon", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage++ ENDIF BREAK CASE 4 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) OR (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 1.0) sceneGrapple = CREATE_SYNCHRONIZED_SCENE(vGrapplePos, vGrappleRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_winning_p_one", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_winning_goon", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage++ ENDIF BREAK CASE 5 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) OR (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 1.0) sceneGrapple = CREATE_SYNCHRONIZED_SCENE(vGrapplePos, vGrappleRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_losing_p_one", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_losing_goon", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage++ ENDIF BREAK CASE 6 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) OR (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 1.0) sceneGrapple = CREATE_SYNCHRONIZED_SCENE(vGrapplePos, vGrappleRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_winning_p_one", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_winning_goon", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage++ ENDIF BREAK CASE 7 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) OR (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 1.0) sceneGrapple = CREATE_SYNCHRONIZED_SCENE(vGrapplePos, vGrappleRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_losing_p_one", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_losing_goon", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage++ ENDIF BREAK CASE 8 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) OR (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 1.0) sceneGrapple = CREATE_SYNCHRONIZED_SCENE(vGrapplePos, vGrappleRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_winning_p_one", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_winning_goon", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage++ ENDIF BREAK CASE 9 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) OR (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 1.0) sceneGrapple = CREATE_SYNCHRONIZED_SCENE(vGrapplePos, vGrappleRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_losing_p_one", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_losing_goon", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage++ ENDIF BREAK CASE 10 IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) OR (IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 1.0) sceneGrapple = CREATE_SYNCHRONIZED_SCENE(vGrapplePos, vGrappleRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_FRANKLIN), sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_a_p_one", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_FRANKLIN)) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sceneGrapple, sAnimDictMic2IG11, "mic_2_ig_11_a_goon", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, DEFAULT, DEFAULT, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) iGrappleStage++ ENDIF BREAK ENDSWITCH ENDIF IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) AND GET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex) >= 600 AND iSetPiece[SET_PIECE_GRAPPLE] > 1 // AND NOT (IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_a_goon") // AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, sAnimDictMic2IG11, "mic_2_ig_11_a_goon") >= 0.373) AND NOT (iGrappleStage >= 10 AND IS_SYNCHRONIZED_SCENE_RUNNING(sceneGrapple) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneGrapple) >= 0.373) IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) //IF GET_GAME_TIMER() > iDialogueTimer[0] IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_KNIFE_1") REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_HIGHEST) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 8, sEnemySetPiece[SET_PIECE_GRAPPLE].pedIndex, "MCH2GOON") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_KNIFE", "MCH2_KNIFE_1") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_KNIFE_2") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_KNIFE", "MCH2_KNIFE_2") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_KNIFE_3") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_KNIFE", "MCH2_KNIFE_3") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_KNIFE_4") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_KNIFE", "MCH2_KNIFE_4") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_KNIFE_5") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_KNIFE", "MCH2_KNIFE_5") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_KNIFE_6") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_KNIFE", "MCH2_KNIFE_6") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TRAP_1") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TRAP", "MCH2_TRAP_1") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TRAP_2") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TRAP", "MCH2_TRAP_2") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TRAP_3") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TRAP", "MCH2_TRAP_3") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TRAP_4") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TRAP", "MCH2_TRAP_4") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TRAP_5") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TRAP", "MCH2_TRAP_5") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TRAP_6") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TRAP", "MCH2_TRAP_6") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TRAP_7") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TRAP", "MCH2_TRAP_7") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TRAP_8") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TRAP", "MCH2_TRAP_8") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TRAP_9") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TRAP", "MCH2_TRAP_9") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_TRAP_10") PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_TRAP", "MCH2_TRAP_10") ENDIF // iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(3000, 5000) //ENDIF ENDIF ENDIF //Kill enemies who ragdoll inside the navmesh blocking area INT i REPEAT COUNT_OF(sEnemyBackup) i IF DOES_ENTITY_EXIST(sEnemyBackup[i].pedIndex) AND NOT IS_PED_INJURED(sEnemyBackup[i].pedIndex) // SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE) // DRAW_DEBUG_POLY_ANGLED_AREA(<<991.279846, -2131.790283, 29.475735>>, <<993.158691, -2111.559814, 34.475296>>, 4.5) // DRAW_DEBUG_POLY_ANGLED_AREA(<<1000.158203, -2132.114014, 29.476189>>, <<1001.959473, -2111.474365, 34.475670>>, 5.25) IF IS_ENTITY_IN_ANGLED_AREA(sEnemyBackup[i].pedIndex, <<991.279846, -2131.790283, 29.475735>>, <<993.158691, -2111.559814, 34.475296>>, 4.5) OR IS_ENTITY_IN_ANGLED_AREA(sEnemyBackup[i].pedIndex, <<1000.158203, -2132.114014, 29.476189>>, <<1001.959473, -2111.474365, 34.475670>>, 5.25) IF IS_PED_RAGDOLL(sEnemyBackup[i].pedIndex) SET_ENTITY_HEALTH(sEnemyBackup[i].pedIndex, 5) APPLY_DAMAGE_TO_PED(sEnemyBackup[i].pedIndex, 500, FALSE) PRINTLN("sEnemyBackup[", i, "].pedIndex ragdolled into a navmesh blocking area and had to be killed.") ELSE APPLY_DAMAGE_TO_PED(sEnemyBackup[i].pedIndex, 1, FALSE) ENDIF ENDIF ENDIF ENDREPEAT //Update Players navmesh blocknig area so the buddy won't run into him... IF iNavBlock[0] = 0 iNavBlock[0] = ADD_NAVMESH_BLOCKING_OBJECT(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<0.75, 0.75, 1.0>>, (GET_ENTITY_HEADING(PLAYER_PED_ID()) / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[0] = ", iNavBlock[1]) ELSE UPDATE_NAVMESH_BLOCKING_OBJECT(iNavBlock[0], GET_ENTITY_COORDS(PLAYER_PED_ID()), <<0.75, 0.75, 1.0>>, (GET_ENTITY_HEADING(PLAYER_PED_ID()) / 360) * 6.28) ENDIF ENDIF IF CLEANUP_STAGE() //Cleanup (Blips, peds, variables etc.) //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_SHOOT_FROM_MEATHOOK") STOP_AUDIO_SCENE("MI_2_SHOOT_FROM_MEATHOOK") ENDIF //Cheat DISABLE_CHEAT(CHEAT_TYPE_GIVE_WEAPONS, FALSE) SET_SELECTOR_PED_HINT(sSelectorPeds, SELECTOR_PED_FRANKLIN, FALSE) SET_SELECTOR_PED_HINT(sSelectorPeds, SELECTOR_PED_MICHAEL, FALSE) INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED(FALSE, MIC2_TIME_TO_SAVE_FRANKLIN) SAFE_REMOVE_BLIP(blipMichael) SAFE_REMOVE_BLIP(blipFranklin) SAFE_REMOVE_BLIP(blipDestination) IF IS_ENTITY_ATTACHED(PLAYER_PED(CHAR_MICHAEL)) DETACH_ENTITY(PLAYER_PED(CHAR_MICHAEL)) SET_ENABLE_BOUND_ANKLES(PLAYER_PED(CHAR_MICHAEL), FALSE) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) ENDIF SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_ForcedToStayInCover, FALSE) IF DOES_CAM_EXIST(camAnim) DESTROY_CAM(camAnim) ENDIF INT i REPEAT COUNT_OF(sEnemyBackup) i IF DOES_ENTITY_EXIST(sEnemyBackup[i].pedIndex) AND NOT IS_PED_INJURED(sEnemyBackup[i].pedIndex) SET_ENTITY_VISIBLE(sEnemyBackup[i].pedIndex, TRUE) FREEZE_ENTITY_POSITION(sEnemyBackup[i].pedIndex, FALSE) ENDIF ENDREPEAT REPEAT iEnemyBackup i SET_PED_AS_NO_LONGER_NEEDED(sEnemyBackup[i].pedIndex) SAFE_REMOVE_BLIP(sEnemyBackup[i].blipIndex) ENDREPEAT REPEAT iEnemySetPiece i SET_PED_AS_NO_LONGER_NEEDED(sEnemySetPiece[i].pedIndex) SAFE_REMOVE_BLIP(sEnemySetPiece[i].blipIndex) ENDREPEAT RELEASE_NAMED_SCRIPT_AUDIO_BANK("Michael_2_Break_Free") REMOVE_CLIP_SET(GET_CLIP_SET_FOR_SCRIPTED_GUN_TASK(SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN)) CLEAR_MISSION_LOCATE_STUFF(sLocatesData, TRUE) eMissionObjective = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) + 1) ENDIF ENDPROC PROC michaelFree() IF INIT_STAGE() //Replay SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(replayMichaelFree), "stageMichaelFree") //Uncapped bSetUncapped = TRUE //Wanted SET_MAX_WANTED_LEVEL(0) SET_WANTED_LEVEL_MULTIPLIER(0.0) //Ambulances etc. ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, FALSE) ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_GANGS, FALSE) IF CAN_CREATE_RANDOM_COPS() SET_CREATE_RANDOM_COPS(FALSE) ENDIF //Player SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) //Radar bRadar = TRUE //Vehicle IF NOT DOES_ENTITY_EXIST(vehHachiRoku) vehHachiRoku = CREATE_VEHICLE(COQUETTE, <<950.4739, -2104.9517, 29.6107>>, 106.1659) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehHachiRoku, TRUE) SET_VEHICLE_COLOURS(vehHachiRoku, 4, 0) SET_VEHICLE_EXTRA_COLOURS(vehHachiRoku, 0, 0) SET_VEHICLE_ON_GROUND_PROPERLY(vehHachiRoku) SET_VEHICLE_TYRES_CAN_BURST(vehHachiRoku, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(COQUETTE) ENDIF IF NOT DOES_ENTITY_EXIST(vehEscape) vehEscape = CREATE_VEHICLE(FELTZER2, <<953.9548, -2113.3518, 29.5516>>, 88.1350) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehEscape, TRUE) SET_VEHICLE_COLOURS(vehEscape, 38, 0) SET_VEHICLE_ON_GROUND_PROPERLY(vehEscape) SET_VEHICLE_TYRES_CAN_BURST(vehEscape, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(FELTZER2) ENDIF //Rail bOkToMoveRail = FALSE bOkToHangFromHook = FALSE //Audio PLAY_AUDIO(MIC2_FRANK_SAVED) #IF IS_DEBUG_BUILD IF bAutoSkipping = FALSE #ENDIF //Audio Scene IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_ESCAPE_SHOOTOUT") START_AUDIO_SCENE("MI_2_ESCAPE_SHOOTOUT") ENDIF SAFE_ADD_BLIP_PED(blipFranklin, sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], FALSE) //Crates IF NOT DOES_ENTITY_EXIST(objCrate[0]) objCrate[0] = CREATE_OBJECT_NO_OFFSET(PROP_WATERCRATE_01, <<985.1165, -2111.0317, 29.4751>>) RETAIN_ENTITY_IN_INTERIOR(objCrate[0], intAbattoir) ENDIF IF NOT DOES_ENTITY_EXIST(objCrate[1]) objCrate[1] = CREATE_OBJECT_NO_OFFSET(PROP_WATERCRATE_01, <<977.4531, -2128.1602, 29.4753>>) RETAIN_ENTITY_IN_INTERIOR(objCrate[1], intAbattoir) ENDIF IF NOT DOES_ENTITY_EXIST(objCrate[2]) objCrate[2] = CREATE_OBJECT_NO_OFFSET(PROP_WATERCRATE_01, <<987.7, -2125.6, 29.4753>>) RETAIN_ENTITY_IN_INTERIOR(objCrate[2], intAbattoir) ENDIF //Cover IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<996.3627, -2142.4551, 28.4762>>) covPoint[13] = ADD_COVER_POINT(<<996.3627, -2142.4551, 28.4762>>, 4.7376, COVUSE_WALLTORIGHT, COVHEIGHT_TOOHIGH, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<993.2383, -2131.0708, 29.4758>>) covPoint[16] = ADD_COVER_POINT(<<993.2383, -2131.0708, 29.4758>>, 11.4085, COVUSE_WALLTOLEFT, COVHEIGHT_LOW, COVARC_120) ENDIF IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<989.3762, -2108.0239, 29.4751>>) covPoint[17] = ADD_COVER_POINT(<<989.3762, -2108.0239, 29.4751>>, 178.0079, COVUSE_WALLTOLEFT, COVHEIGHT_TOOHIGH, COVARC_120, TRUE) ENDIF ADD_COVER_BLOCKING_AREA(<<985.11951, -2110.06934, 29.47508>>, <<984.31635, -2110.86963, 29.47506>>, TRUE, TRUE, TRUE) ADD_COVER_BLOCKING_AREA(<<990.234863, -2109.403076, 29.475147>>, <<991.734863, -2107.903076, 35.475147>>, TRUE, TRUE, TRUE) ADD_COVER_BLOCKING_AREA(<<984.292725, -2125.887451, 29.475412>>, <<985.292725, -2124.887451, 33.475412>>, TRUE, TRUE, TRUE) ADD_COVER_BLOCKING_AREA(<<971.352966, -2122.628662, 30.562727>> - <<0.25, 0.25, 1.25>>, <<971.352966, -2122.628662, 30.562727>> + <<0.25, 0.25, 1.25>>, TRUE, TRUE, TRUE) ADD_COVER_BLOCKING_AREA(<<967.890320,-2120.730469,31.229494>> - <<0.75, 1.0, 1.0>>, <<967.890320,-2120.730469,31.229494>> + <<0.75, 1.0, 1.0>>, TRUE, TRUE, TRUE) //Navmesh Blocking Areas IF iNavBlock[1] = 0 iNavBlock[1] = ADD_NAVMESH_BLOCKING_OBJECT(<<992.0, -2121.8, 29.5>>, <<4.0, 20.0, 10.0>>, (-5.0 / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[1] = ", iNavBlock[1]) ENDIF IF iNavBlock[2] = 0 iNavBlock[2] = ADD_NAVMESH_BLOCKING_OBJECT(<<1001.1, -2121.8, 29.5>>, <<4.6, 20.0, 10.0>>, (-5.0 / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[2] = ", iNavBlock[2]) ENDIF IF iNavBlock[3] = 0 iNavBlock[3] = ADD_NAVMESH_BLOCKING_OBJECT(<<984.1, -2135.5, 29.0>>, <<8.3, 8.0, 10.0>>, (-5.250 / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[3] = ", iNavBlock[3]) ENDIF IF iNavBlock[4] = 0 iNavBlock[4] = ADD_NAVMESH_BLOCKING_OBJECT(<<984.791199, -2115.926270, 31.313723>>, <<1.75, 3.75, 2.0>>, 0.0) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[4] = ", iNavBlock[4]) ENDIF //Enemies //Set Piece createEnemy(sEnemySetPiece[SET_PIECE_CONVEYOR], <<981.4547, -2120.6746, 29.4753>>, 333.5943, WEAPONTYPE_ASSAULTRIFLE) //Checkme createEnemy(sEnemySetPiece[SET_PIECE_COW], <<967.1338, -2106.4326, 30.4775>>, 176.0, WEAPONTYPE_PISTOL) IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, intAbattoir) //SET_PED_CAN_RAGDOLL(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, FALSE) SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, PCF_DontActivateRagdollFromBulletImpact, TRUE) //SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, PCF_DontActivateRagdollFromExplosions, TRUE) SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, PCF_DontActivateRagdollFromElectrocution, TRUE) SET_PED_CONFIG_FLAG(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, PCF_DontActivateRagdollFromFire, TRUE) SET_RAGDOLL_BLOCKING_FLAGS(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, RBF_BULLET_IMPACT | RBF_EXPLOSION | RBF_ELECTROCUTION | RBF_FIRE | RBF_RUBBER_BULLET) //SET_ENTITY_PROOFS(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, FALSE, FALSE, TRUE, FALSE, FALSE) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, CM_STATIONARY) SET_PED_SUFFERS_CRITICAL_HITS(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, FALSE) SET_PED_MAX_HEALTH(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, 1000) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, 1000) ENDIF IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_COW].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemySetPiece[SET_PIECE_COW].pedIndex, intAbattoir) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[SET_PIECE_COW].pedIndex, CM_STATIONARY) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_COW].pedIndex, TRUE) ENDIF //Escape createEnemy(sEnemyEscape[0], <<985.5591, -2120.3320, 29.4990>>, 73.0589, WEAPONTYPE_SMG, G_M_M_CHIGOON_01) SET_PED_COMBAT_MOVEMENT(sEnemyEscape[0].pedIndex, CM_DEFENSIVE) createEnemy(sEnemyEscape[1], <<973.8496, -2126.1538, 29.4987>>, 341.4595, WEAPONTYPE_ASSAULTRIFLE) sEnemyEscape[1].pedCheck[0] = sEnemyEscape[0].pedIndex sEnemyEscape[1].eAdvanceStyle[0] = GUN_TO_POINT sEnemyEscape[1].vPoint[0] = <<984.9330, -2126.6907, 29.4991>> sEnemyEscape[1].fSpeed[0] = PEDMOVE_WALK //createEnemy(sEnemyEscape[2], <<977.23, -2116.37, 30.4615>>, -65.1603, WEAPONTYPE_SMG) createEnemy(sEnemyEscape[3], <<965.7297, -2126.3198, 30.4936>>, 269.6515, WEAPONTYPE_PUMPSHOTGUN, G_M_M_CHIGOON_01) sEnemyEscape[3].vLocate[0] = <<976.414978, -2125.813965, 31.498732>> sEnemyEscape[3].vLocSize[0] = <<15.0, 5.0, 2.0>> sEnemyEscape[3].eAdvanceStyle[0] = GUN_TO_POINT sEnemyEscape[3].vPoint[0] = <<959.6390, -2125.6313, 30.4828>> sEnemyEscape[3].fSpeed[0] = 0.5 createEnemy(sEnemyEscape[4], <<967.5165, -2121.6035, 30.4793>>, 175.4117, WEAPONTYPE_PISTOL, G_M_M_CHIGOON_01) SET_PED_SPHERE_DEFENSIVE_AREA(sEnemyEscape[4].pedIndex, <<967.5165, -2121.6035, 30.4793>>, 1.5) TASK_SEEK_COVER_TO_COORDS(sEnemyEscape[4].pedIndex, <<967.5165, -2121.6035, 30.4793>>, <<978.9468, -2125.8413, 29.4752>>, -1, TRUE) createEnemy(sEnemyEscape[5], <<968.5446, -2105.6531, 30.4971>>, 93.5294, WEAPONTYPE_SMG) createEnemy(sEnemyEscape[6], <<952.9742, -2124.7236, 30.4485>>, 266.8633, WEAPONTYPE_PISTOL) createEnemy(sEnemyEscape[7], <<958.5165, -2123.0886, 30.4577>>, 263.1990, WEAPONTYPE_PISTOL) INT i REPEAT COUNT_OF(sEnemyEscape) i IF DOES_ENTITY_EXIST(sEnemyEscape[i].pedIndex) //RETAIN_ENTITY_IN_INTERIOR(sEnemyEscape[i].pedIndex, intAbattoir) ENDIF ENDREPEAT #IF IS_DEBUG_BUILD REPEAT COUNT_OF(sEnemyEscape) i IF NOT IS_PED_INJURED(sEnemyEscape[i].pedIndex) ASSIGN_DEBUG_NAMES(sEnemyEscape[i].pedIndex, "sEnemyEscape ", i) sEnemyEscape[i].sDebugName = CONCATENATE_STRINGS("sEnemyEscape ", GET_STRING_FROM_INT(i)) ENDIF ENDREPEAT #ENDIF //Michael SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_MICHAEL), PCF_RunFromFiresAndExplosions, FALSE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_MICHAEL), PCF_DisableExplosionReactions, TRUE) SET_PED_COMBAT_ATTRIBUTES(PLAYER_PED(CHAR_MICHAEL), CA_DISABLE_BULLET_REACTIONS, TRUE) SET_PED_COMBAT_ATTRIBUTES(PLAYER_PED(CHAR_MICHAEL), CA_SWITCH_TO_ADVANCE_IF_CANT_FIND_COVER, FALSE) SET_PED_COMBAT_MOVEMENT(PLAYER_PED(CHAR_MICHAEL), CM_DEFENSIVE) SET_PED_ACCURACY(PLAYER_PED(CHAR_MICHAEL), 20) SET_RAGDOLL_BLOCKING_FLAGS(PLAYER_PED(CHAR_MICHAEL), RBF_BULLET_IMPACT | RBF_PLAYER_BUMP | RBF_PLAYER_RAGDOLL_BUMP) SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_MICHAEL), TRUE, -1, "DEFAULT_ACTION") //Franklin Combat SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_RunFromFiresAndExplosions, FALSE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_DisableExplosionReactions, TRUE) SET_PED_COMBAT_ATTRIBUTES(PLAYER_PED(CHAR_FRANKLIN), CA_DISABLE_BULLET_REACTIONS, TRUE) SET_PED_COMBAT_ATTRIBUTES(PLAYER_PED(CHAR_FRANKLIN), CA_SWITCH_TO_ADVANCE_IF_CANT_FIND_COVER, FALSE) SET_PED_COMBAT_ATTRIBUTES(PLAYER_PED(CHAR_FRANKLIN), CA_DISABLE_PINNED_DOWN, TRUE) SET_PED_COMBAT_MOVEMENT(PLAYER_PED(CHAR_FRANKLIN), CM_DEFENSIVE) SET_PED_ACCURACY(PLAYER_PED(CHAR_FRANKLIN), 20) SET_RAGDOLL_BLOCKING_FLAGS(PLAYER_PED(CHAR_FRANKLIN), RBF_BULLET_IMPACT) IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, 350, TRUE) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, TRUE) SET_ENTITY_PROOFS(PLAYER_PED(CHAR_FRANKLIN), FALSE, FALSE, FALSE, FALSE, FALSE) SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_FRANKLIN), TRUE, -1, "DEFAULT_ACTION") //Skip Michael Forwards! iCurrentNode = 31 vRailCurrent = sRailNodes[31].vPos SET_ENTITY_COORDS_NO_OFFSET(objHook, sRailNodes[31].vPos) SET_ENTITY_ROTATION(objHook, <<0.0, 0.0, -6.6>>) //sRailNodes[31].vRot FREEZE_ENTITY_POSITION(objHook, TRUE) #IF IS_DEBUG_BUILD ENDIF #ENDIF IF SKIPPED_STAGE() SET_PED_POSITION(PLAYER_PED(CHAR_MICHAEL), <<993.9323, -2150.0239, 28.4763>>, 354.8923, FALSE) SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<998.3578, -2106.8503, 29.4754>>, 84.7433, FALSE) //Freeze SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_MICHAEL), TRUE) SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_FRANKLIN), TRUE) //Pin Interior IF intAbattoir = NULL intAbattoir = GET_INTERIOR_AT_COORDS_WITH_TYPE(<<990.9518, -2178.6208, 29.0257>>, "v_abattoir") ENDIF PIN_INTERIOR_IN_MEMORY(intAbattoir) WHILE NOT IS_INTERIOR_READY(intAbattoir) PRINTLN("PINNING INTERIOR...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE bPinnedAbattoir = TRUE //Unfreeze SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_MICHAEL), FALSE) SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_FRANKLIN), FALSE) IF NOT bReplaySkip LOAD_SCENE_ADV(<<996.5976, -2148.9912, 29.0>>) ENDIF WAIT_WITH_DEATH_CHECKS(0) MAKE_PICKUPS() REQUEST_WEAPON_ASSET(WEAPONTYPE_COMBATPISTOL) REQUEST_WEAPON_ASSET(WEAPONTYPE_ASSAULTRIFLE) WHILE NOT HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_COMBATPISTOL) OR NOT HAS_WEAPON_ASSET_LOADED(WEAPONTYPE_ASSAULTRIFLE) PRINTLN("LOADING WEAPON ASSETS (WEAPONTYPE_COMBATPISTOL)...") PRINTLN("LOADING WEAPON ASSETS (WEAPONTYPE_ASSAULTRIFLE)...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE REMOVE_ALL_PED_WEAPONS(PLAYER_PED(CHAR_MICHAEL)) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, 350, TRUE) SET_PED_AMMO(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, 350) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED(CHAR_MICHAEL)) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) //Franklin IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, 350, TRUE) ENDIF enumCharacterList eCharFail = GET_CURRENT_PLAYER_PED_ENUM() IF GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail)) != WEAPONTYPE_UNARMED AND GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail)) != WEAPONTYPE_INVALID AND HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail))) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), GET_FAIL_WEAPON(ENUM_TO_INT(eCharFail)), TRUE) ELSE SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_ASSAULTRIFLE, TRUE) ENDIF //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Audio PLAY_AUDIO(MIC2_MICHAEL_ESCAPE_RT) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF ENDIF ELSE SWITCH iCutsceneStage CASE 0 IF NOT HAS_LABEL_BEEN_TRIGGERED("FreeMichaelProgress") IF NOT IS_MESSAGE_BEING_DISPLAYED() AND (NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) //Blip SAFE_ADD_BLIP_LOCATION(blipDestination, <<960.7275, -2105.6614, 30.9001>>) //Objective PRINT_ADV("MCH2_ESCABA") ADVANCE_CUTSCENE() ENDIF ELSE //The AI behaviour should always progress after the initial wait for player has been reached ADVANCE_CUTSCENE() ENDIF BREAK CASE 1 IF (IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<996.805237, -2107.241699, 34.475368>>, <<8.0, 5.0, 5.0>>) AND (NOT IS_ENTITY_PLAYING_ANIM(NOT_PLAYER_PED_ID(), sAnimDictMic2FranklinBeckon, "beckon_a_player1") AND NOT IS_ENTITY_PLAYING_ANIM(NOT_PLAYER_PED_ID(), sAnimDictMic2FranklinBeckon, "beckon_b_player1"))) OR HAS_LABEL_BEEN_TRIGGERED("FreeMichaelProgress") IF NOT IS_PED_INJURED(sEnemyEscape[0].pedIndex) OR NOT IS_PED_INJURED(sEnemyEscape[1].pedIndex) SET_PED_SPHERE_DEFENSIVE_AREA(NOT_PLAYER_PED_ID(), <<985.3551, -2110.1902, 29.4751>>, 10.0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NOT_PLAYER_PED_ID(), FALSE) SET_PED_COMBAT_ATTRIBUTES(NOT_PLAYER_PED_ID(), CA_CAN_IGNORE_BLOCKED_LOS_WEIGHTING, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NOT_PLAYER_PED_ID(), 100.0, COMBAT_PED_DISABLE_AIM_INTRO) ENDIF SET_LABEL_AS_TRIGGERED("FreeMichaelProgress", TRUE) ADVANCE_CUTSCENE() ELSE IF IS_ENTITY_AT_COORD(NOT_PLAYER_PED_ID(), <<996.805237, -2107.241699, 34.475368>>, <<8.0, 5.0, 5.0>>) IF NOT IS_PED_FACING_PED(NOT_PLAYER_PED_ID(), PLAYER_PED_ID(), 60.0) IF GET_SCRIPT_TASK_STATUS(NOT_PLAYER_PED_ID(), SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY) != PERFORMING_TASK AND GET_SCRIPT_TASK_STATUS(NOT_PLAYER_PED_ID(), SCRIPT_TASK_PERFORM_SEQUENCE) != PERFORMING_TASK TASK_TURN_PED_TO_FACE_COORD(NOT_PLAYER_PED_ID(), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) ENDIF ELSE IF GET_GAME_TIMER() > iDialogueTimer[1] IF NOT IS_ENTITY_PLAYING_ANIM(NOT_PLAYER_PED_ID(), sAnimDictMic2FranklinBeckon, "beckon_a_player1") AND NOT IS_ENTITY_PLAYING_ANIM(NOT_PLAYER_PED_ID(), sAnimDictMic2FranklinBeckon, "beckon_b_player1") INT iRandom iRandom = GET_RANDOM_INT_IN_RANGE(0, 2) IF iRandom = 0 TASK_PLAY_ANIM(NOT_PLAYER_PED_ID(), sAnimDictMic2FranklinBeckon, "beckon_a_player1", REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_UPPERBODY | AF_SECONDARY) ELIF iRandom = 1 TASK_PLAY_ANIM(NOT_PLAYER_PED_ID(), sAnimDictMic2FranklinBeckon, "beckon_b_player1", REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_UPPERBODY | AF_SECONDARY) ENDIF IF (NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) IF iDialogueLineCount[4] = -1 iDialogueLineCount[4] = 4 ENDIF IF iDialogueLineCount[4] > 0 IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN)), GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL))) < 50.0 enumSubtitlesState eSubtitles IF NOT IS_MESSAGE_BEING_DISPLAYED() eSubtitles = DISPLAY_SUBTITLES ELSE eSubtitles = DO_NOT_DISPLAY_SUBTITLES ENDIF CREATE_CONVERSATION_ADV("MCH2_MWRONG", CONV_PRIORITY_MEDIUM, FALSE, eSubtitles) iDialogueLineCount[4]-- ENDIF ENDIF ENDIF iDialogueTimer[1] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(5000, 7500) ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 2 IF IS_PED_INJURED(sEnemyEscape[0].pedIndex) AND IS_PED_INJURED(sEnemyEscape[1].pedIndex) //AND IS_PED_INJURED(sEnemyEscape[2].pedIndex) AND IS_PED_INJURED(sEnemySetPiece[SET_PIECE_MINCER].pedIndex) IF NOT IS_PED_INJURED(sEnemyEscape[3].pedIndex) OR NOT IS_PED_INJURED(sEnemyEscape[4].pedIndex) //Combat CLEAR_PED_TASKS(NOT_PLAYER_PED_ID()) SET_PED_SPHERE_DEFENSIVE_AREA(NOT_PLAYER_PED_ID(), <<972.0844, -2122.0654, 29.4749>>, 2.0, TRUE) SET_PED_SPHERE_DEFENSIVE_AREA(NOT_PLAYER_PED_ID(), <<978.3341, -2128.0117, 29.4753>>, 2.0, TRUE, TRUE) SET_PED_COMBAT_ATTRIBUTES(NOT_PLAYER_PED_ID(), CA_CAN_IGNORE_BLOCKED_LOS_WEIGHTING, FALSE) IF NOT IS_ENTITY_AT_COORD(NOT_PLAYER_PED_ID(), <<972.0844, -2122.0654, 29.4749>>, <<4.0, 4.0, 3.0>>) AND NOT IS_ENTITY_AT_COORD(NOT_PLAYER_PED_ID(), <<978.3341, -2128.0117, 29.4753>>, <<4.0, 4.0, 3.0>>) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, <<985.8, -2126.6, 29.4753>>, <<963.8723, -2125.1963, 30.4913>>, PEDMOVE_RUN, TRUE, 2.0) //TASK_SEEK_COVER_TO_COORDS(NULL, <<978.3341, -2128.0117, 29.4753>>, <<963.8723, -2125.1963, 30.4913>>, 1000, TRUE) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(NOT_PLAYER_PED_ID(), seqMain) CLEAR_SEQUENCE_TASK(seqMain) ENDIF ENDIF ADVANCE_CUTSCENE() ENDIF BREAK CASE 3 IF IS_PED_INJURED(sEnemyEscape[3].pedIndex) AND IS_PED_INJURED(sEnemyEscape[4].pedIndex) AND IS_PED_INJURED(sEnemyEscape[6].pedIndex) AND IS_PED_INJURED(sEnemyEscape[7].pedIndex) IF NOT IS_PED_INJURED(sEnemyEscape[5].pedIndex) //AND NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_COW].pedIndex) //sEnemyEscape[6].pedIndex) //Combat CLEAR_PED_TASKS(NOT_PLAYER_PED_ID()) SET_PED_SPHERE_DEFENSIVE_AREA(NOT_PLAYER_PED_ID(), <<968.1083, -2122.2932, 30.4033>>, 2.0, TRUE) SET_PED_SPHERE_DEFENSIVE_AREA(NOT_PLAYER_PED_ID(), <<962.6502, -2125.5088, 30.4637>>, 4.0, TRUE, TRUE) IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<968.1083, -2122.2932, 30.4033>>, <<2.0, 2.0, 2.0>>) IF NOT IS_ENTITY_AT_COORD(NOT_PLAYER_PED_ID(), <<968.1083, -2122.2932, 30.4033>>, <<4.0, 4.0, 3.0>>) AND NOT IS_ENTITY_AT_COORD(NOT_PLAYER_PED_ID(), <<962.6502, -2125.5088, 30.4637>>, <<4.0, 4.0, 3.0>>) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_AND_AIM_AT_HATED_ENTITIES_NEAR_COORD(NULL, <<968.2432, -2122.7563, 30.3472>>, <<965.9512, -2111.9126, 30.4946>>, PEDMOVE_RUN, TRUE, 1.0, 4.0, TRUE, ENAV_NO_STOPPING, GO_TO_AIM_AT_GOTO_COORD_IF_TARGET_LOS_BLOCKED) TASK_PUT_PED_DIRECTLY_INTO_COVER(NULL, <<968.0346, -2122.3384, 30.4009>>, -1, TRUE, 1.0, TRUE, TRUE, NULL, TRUE) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(NOT_PLAYER_PED_ID(), seqMain) CLEAR_SEQUENCE_TASK(seqMain) ENDIF ENDIF ENDIF ADVANCE_CUTSCENE() ENDIF BREAK CASE 4 IF GET_SCRIPT_TASK_STATUS(NOT_PLAYER_PED_ID(), SCRIPT_TASK_PERFORM_SEQUENCE) = PERFORMING_TASK SET_PED_RESET_FLAG(NOT_PLAYER_PED_ID(), PRF_BlockCustomAIEntryAnims, TRUE) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<968.0346, -2122.3384, 30.4009>>, <<2.0, 2.0, 2.0>>) AND IS_PED_IN_COVER(PLAYER_PED_ID()) CLEAR_PED_TASKS(NOT_PLAYER_PED_ID()) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NOT_PLAYER_PED_ID(), FALSE) ENDIF ENDIF IF NOT IS_PED_IN_COMBAT(NOT_PLAYER_PED_ID()) AND IS_PED_IN_COVER(NOT_PLAYER_PED_ID()) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NOT_PLAYER_PED_ID(), 50.0) ENDIF IF IS_PED_INJURED(sEnemyEscape[5].pedIndex) AND IS_PED_INJURED(sEnemySetPiece[SET_PIECE_COW].pedIndex) //sEnemyEscape[6].pedIndex) //Combat CLEAR_PED_TASKS(NOT_PLAYER_PED_ID()) REMOVE_PED_DEFENSIVE_AREA(NOT_PLAYER_PED_ID()) REMOVE_PED_DEFENSIVE_AREA(NOT_PLAYER_PED_ID(), TRUE) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<957.6793, -2107.4541, 29.5544>>, PEDMOVE_RUN, DEFAULT_TIME_NEVER_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT, 89.4953) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, FALSE) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(NOT_PLAYER_PED_ID(), seqMain) CLEAR_SEQUENCE_TASK(seqMain) ADVANCE_CUTSCENE() ENDIF BREAK ENDSWITCH IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF HAS_LABEL_BEEN_TRIGGERED("FreeMichaelProgress") IF GET_GAME_TIMER() > iDialogueTimer[0] IF iDialogueStage = 0 IF iDialogueLineCount[iDialogueStage] = -1 iDialogueLineCount[iDialogueStage] = 4 ENDIF ELIF iDialogueStage = 1 IF iDialogueLineCount[iDialogueStage] = -1 iDialogueLineCount[iDialogueStage] = 6 ENDIF ELIF iDialogueStage = 2 IF iDialogueLineCount[iDialogueStage] = -1 iDialogueLineCount[iDialogueStage] = 4 ENDIF ELIF iDialogueStage = 3 IF iDialogueLineCount[iDialogueStage] = -1 iDialogueLineCount[iDialogueStage] = 6 ENDIF ENDIF IF iDialogueLineCount[iDialogueStage] > 0 IF DOES_ENTITY_EXIST(pedClosestEnemy) AND NOT IS_ENTITY_DEAD(pedClosestEnemy) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy)) < 20.0 AND IS_ENTITY_ON_SCREEN(pedClosestEnemy) IF iDialogueStage = 0 CREATE_CONVERSATION_ADV("MCH2_ESCRF", CONV_PRIORITY_MEDIUM, FALSE) ELIF iDialogueStage = 1 ADD_PED_FOR_DIALOGUE(sPedsForConversation, 5, pedClosestEnemy, "MCH2CHIN3") CREATE_CONVERSATION_ADV("MCH2_AFTER", CONV_PRIORITY_MEDIUM, FALSE) ELIF iDialogueStage = 2 PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_ESCRM", "MCH2_ESCRM_02") //CREATE_CONVERSATION_ADV("MCH2_ESCRM", CONV_PRIORITY_MEDIUM, FALSE) ELIF iDialogueStage = 3 ADD_PED_FOR_DIALOGUE(sPedsForConversation, 6, pedClosestEnemy, "MCH2CHIN4") CREATE_CONVERSATION_ADV("MCH2_AFTER4", CONV_PRIORITY_MEDIUM, FALSE) ENDIF iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(4000, 7000) iDialogueLineCount[iDialogueStage]-- ENDIF ENDIF IF iDialogueStage < 3 iDialogueStage++ ELSE iDialogueStage = 0 ENDIF ENDIF ENDIF ENDIF //Open Combat IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat11") IF NOT IS_PED_INJURED(sEnemyEscape[0].pedIndex) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<986.739502, -2109.038330, 31.225237>>, <<3.0, 4.0, 3.0>>) OPEN_SEQUENCE_TASK(seqMain) TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(NULL, TRUE) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<987.7, -2110.5, 29.4990>>, PLAYER_PED_ID(), PEDMOVE_RUN, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyEscape[0].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) SET_PED_DEFENSIVE_SPHERE_ATTACHED_TO_PED(sEnemyEscape[0].pedIndex, PLAYER_PED_ID(), VECTOR_ZERO, 3.0) //REMOVE_PED_DEFENSIVE_AREA(sEnemyEscape[0].pedIndex) //SET_PED_COMBAT_ATTRIBUTES(sEnemyEscape[0].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) //SET_PED_COMBAT_MOVEMENT(sEnemyEscape[0].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyEscape[0].pedIndex, CA_CAN_CHARGE, TRUE) SET_PED_CONFIG_FLAG(sEnemyEscape[0].pedIndex, PCF_TreatAsPlayerDuringTargeting, TRUE) SET_LABEL_AS_TRIGGERED("OpenCombat11", TRUE) ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat12") IF NOT IS_PED_INJURED(sEnemyEscape[1].pedIndex) IF IS_PED_INJURED(sEnemyEscape[0].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyEscape[1].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyEscape[1].pedIndex, CM_WILLADVANCE) SET_LABEL_AS_TRIGGERED("OpenCombat12", TRUE) ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OpenCombat13") IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<976.414978, -2125.813965, 31.498732>>, <<15.0, 5.0, 2.0>>) SET_PED_COMBAT_ATTRIBUTES(sEnemyEscape[3].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyEscape[3].pedIndex, CM_WILLADVANCE) REMOVE_PED_DEFENSIVE_AREA(sEnemyEscape[6].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyEscape[6].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyEscape[6].pedIndex, CM_WILLADVANCE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyEscape[6].pedIndex, 500.0) REMOVE_PED_DEFENSIVE_AREA(sEnemyEscape[7].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyEscape[7].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemyEscape[7].pedIndex, CM_WILLADVANCE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyEscape[7].pedIndex, 500.0) SET_LABEL_AS_TRIGGERED("OpenCombat13", TRUE) ENDIF ENDIF IF NOT sCamDetails.bRun IF iCutsceneStage <= 4 IF UPDATE_SELECTOR_HUD(sSelectorPeds) // Returns TRUE when the player has made a selection IF NOT HAS_SELECTOR_PED_BEEN_SELECTED(sSelectorPeds, SELECTOR_PED_MULTIPLAYER) CLEAR_PRINTS() //Stats INFORM_MISSION_STATS_OF_INCREMENT(MIC2_TIMES_SWITCHED) sCamDetails.pedTo = sSelectorPeds.pedID[sSelectorPeds.eNewSelectorPed] sCamDetails.bRun = TRUE ENDIF ENDIF ENDIF ELSE IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED_SHORT_RANGE(sCamDetails) IF sCamDetails.bOKToSwitchPed IF NOT sCamDetails.bPedSwitched IF TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE, TCF_NONE) //Dialogue REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 0) REMOVE_PED_FOR_DIALOGUE(sPedsForConversation, 1) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 0, PLAYER_PED(CHAR_MICHAEL), "MICHAEL") ADD_PED_FOR_DIALOGUE(sPedsForConversation, 1, PLAYER_PED(CHAR_FRANKLIN), "FRANKLIN") //Update the relationship groups IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_MICHAEL]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_MICHAEL], relGroupBuddy) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[CHAR_FRANKLIN]) SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[CHAR_FRANKLIN], relGroupBuddy) ENDIF SET_PED_DEFENSIVE_AREA_ATTACHED_TO_PED(PLAYER_PED(CHAR_FRANKLIN), PLAYER_PED(CHAR_MICHAEL), <<5.0, 0.0, 5.0>>, <<-5.0, 0.0, -5.0>>, 5.0, TRUE) SET_PED_DEFENSIVE_AREA_ATTACHED_TO_PED(PLAYER_PED(CHAR_MICHAEL), PLAYER_PED(CHAR_FRANKLIN), <<5.0, 0.0, 5.0>>, <<-5.0, 0.0, -5.0>>, 5.0, TRUE) SET_RAGDOLL_BLOCKING_FLAGS(PLAYER_PED(CHAR_MICHAEL), RBF_BULLET_IMPACT | RBF_PLAYER_BUMP | RBF_PLAYER_RAGDOLL_BUMP) SET_RAGDOLL_BLOCKING_FLAGS(PLAYER_PED(CHAR_FRANKLIN), RBF_BULLET_IMPACT) SAFE_REMOVE_BLIP(blipMichael) SAFE_REMOVE_BLIP(blipFranklin) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) SAFE_ADD_BLIP_PED(blipMichael, sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE) SET_PED_COMBAT_ATTRIBUTES(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], CA_DISABLE_PIN_DOWN_OTHERS, TRUE) ENDIF IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) SAFE_ADD_BLIP_PED(blipFranklin, sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], FALSE) SET_PED_COMBAT_ATTRIBUTES(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], CA_DISABLE_PIN_DOWN_OTHERS, TRUE) ENDIF SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), TRUE) SET_PED_USING_ACTION_MODE(NOT_PLAYER_PED_ID(), TRUE, -1, "DEFAULT_ACTION") IF GET_ENTITY_HEALTH(PLAYER_PED(CHAR_MICHAEL)) < GET_PED_MAX_HEALTH(PLAYER_PED(CHAR_MICHAEL)) / 2 SET_ENTITY_HEALTH(PLAYER_PED(CHAR_MICHAEL), GET_PED_MAX_HEALTH(PLAYER_PED(CHAR_MICHAEL)) / 2) ENDIF IF GET_ENTITY_HEALTH(PLAYER_PED(CHAR_FRANKLIN)) < GET_PED_MAX_HEALTH(PLAYER_PED(CHAR_FRANKLIN)) / 2 SET_ENTITY_HEALTH(PLAYER_PED(CHAR_FRANKLIN), GET_PED_MAX_HEALTH(PLAYER_PED(CHAR_FRANKLIN)) / 2) ENDIF IF iCutsceneStage > 0 iCutsceneStage-- PRINTLN("iCutsceneStage = ", iCutsceneStage) //Should re-assign the tasks ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL IF NOT HAS_PED_GOT_WEAPON(NOT_PLAYER_PED_ID(), WEAPONTYPE_COMBATPISTOL) GIVE_WEAPON_TO_PED(NOT_PLAYER_PED_ID(), WEAPONTYPE_COMBATPISTOL, (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_COMBATPISTOL) * 2), TRUE) ENDIF IF GET_AMMO_IN_PED_WEAPON(NOT_PLAYER_PED_ID(), WEAPONTYPE_COMBATPISTOL) < (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_COMBATPISTOL) * 2) SET_PED_AMMO(NOT_PLAYER_PED_ID(), WEAPONTYPE_COMBATPISTOL, (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_COMBATPISTOL) * 2)) ENDIF SET_CURRENT_PED_WEAPON(NOT_PLAYER_PED_ID(), WEAPONTYPE_COMBATPISTOL, TRUE) ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN IF NOT HAS_PED_GOT_WEAPON(NOT_PLAYER_PED_ID(), WEAPONTYPE_ASSAULTRIFLE) GIVE_WEAPON_TO_PED(NOT_PLAYER_PED_ID(), WEAPONTYPE_ASSAULTRIFLE, (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_ASSAULTRIFLE) * 2), TRUE) ENDIF IF GET_AMMO_IN_PED_WEAPON(NOT_PLAYER_PED_ID(), WEAPONTYPE_ASSAULTRIFLE) < (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_ASSAULTRIFLE) * 2) SET_PED_AMMO(NOT_PLAYER_PED_ID(), WEAPONTYPE_ASSAULTRIFLE, (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_ASSAULTRIFLE) * 2)) ENDIF SET_CURRENT_PED_WEAPON(NOT_PLAYER_PED_ID(), WEAPONTYPE_ASSAULTRIFLE, TRUE) ENDIF sCamDetails.bPedSwitched = TRUE ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT DOES_CAM_EXIST(sCamDetails.camID) OR (DOES_CAM_EXIST(sCamDetails.camID) AND NOT IS_CAM_ACTIVE(sCamDetails.camID)) // IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(NOT_PLAYER_PED_ID()), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 25.0 // AND NOT IS_ENTITY_ON_SCREEN(NOT_PLAYER_PED_ID()) // AND iHealthStore = -1 // iHealthStore = GET_ENTITY_HEALTH(NOT_PLAYER_PED_ID()) // SET_ENTITY_HEALTH(NOT_PLAYER_PED_ID(), 101) // ELIF iHealthStore > -1 // SET_ENTITY_HEALTH(NOT_PLAYER_PED_ID(), iHealthStore) // iHealthStore = -1 // ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(NOT_PLAYER_PED_ID()), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 60.0 IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL eMissionFail = failFranklinAbandon ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN eMissionFail = failMichaelAbandon ENDIF missionFailed() ENDIF ENDIF BOOL bEnemiesDead = TRUE INT i REPEAT COUNT_OF(sEnemyEscape) i IF DOES_ENTITY_EXIST(sEnemyEscape[i].pedIndex) IF NOT IS_PED_INJURED(sEnemyEscape[i].pedIndex) bEnemiesDead = FALSE ENDIF ENDIF ENDREPEAT REPEAT COUNT_OF(sEnemySetPiece) i IF DOES_ENTITY_EXIST(sEnemySetPiece[i].pedIndex) IF NOT IS_PED_INJURED(sEnemySetPiece[i].pedIndex) bEnemiesDead = FALSE ENDIF ENDIF ENDREPEAT IF bEnemiesDead = TRUE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) CREATE_CONVERSATION_ADV("MCH2_ESCF3") ENDIF ENDIF IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_WAYM") AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_WAYF") IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(NOT_PLAYER_PED_ID()), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 15.0 IF IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_MICHAEL), <<966.969360, -2115.812988, 32.474960>>, <<4.0, 13.0, 3.0>>) IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL CREATE_CONVERSATION_ADV("MCH2_WAYM") ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN CREATE_CONVERSATION_ADV("MCH2_WAYF") ENDIF ENDIF ENDIF ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("ProgressStage") IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<958.522461, -2105.835449, 33.043030>>, <<4.0, 4.0, 2.5>>) AND NOT IS_PED_IN_COMBAT(NOT_PLAYER_PED_ID()) SET_LABEL_AS_TRIGGERED("ProgressStage", TRUE) ENDIF ELIF iCutsceneStage > 4 ADVANCE_STAGE() ENDIF //Enemies can charge IF NOT HAS_LABEL_BEEN_TRIGGERED("EnemiesCanCharge1") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<988.917908, -2108.542236, 29.475147>>, <<989.372009, -2102.780029, 33.475086>>, 4.5) SET_PED_COMBAT_ATTRIBUTES(sEnemyEscape[0].pedIndex, CA_CAN_CHARGE, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemyEscape[1].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("EnemiesCanCharge1", TRUE) ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("EnemiesCanCharge2") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<988.862610, -2126.699219, 29.475573>>, <<967.577759, -2124.836182, 34.478863>>, 7.0) REPEAT COUNT_OF(sEnemyEscape) i IF i > 1 AND i != 5 IF DOES_ENTITY_EXIST(sEnemyEscape[i].pedIndex) AND NOT IS_PED_INJURED(sEnemyEscape[i].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemyEscape[i].pedIndex, CA_CAN_CHARGE, TRUE) ENDIF ENDIF ENDREPEAT SET_LABEL_AS_TRIGGERED("EnemiesCanCharge2", TRUE) ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("EnemiesCanCharge3") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<960.695251, -2124.824463, 30.460133>>, <<967.684204, -2125.457520, 34.436863>>, 7.0) SET_PED_COMBAT_ATTRIBUTES(sEnemyEscape[5].pedIndex, CA_CAN_CHARGE, TRUE) SET_LABEL_AS_TRIGGERED("EnemiesCanCharge3", TRUE) ENDIF ENDIF //Conveyor SWITCH iSetPiece[SET_PIECE_CONVEYOR] CASE 0 IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex) PED_BONETAG pbt GET_PED_LAST_DAMAGE_BONE(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, pbt) IF NOT IS_PED_IN_COMBAT(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<987.460327, -2105.635498, 31.975031>>, <<4.0, 3.5, 2.5>>) OR IS_ENTITY_AT_COORD(NOT_PLAYER_PED_ID(), <<987.460327, -2105.635498, 31.975031>>, <<4.0, 3.5, 2.5>>) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, 500.0) ENDIF ENDIF IF NOT IS_ENTITY_DEAD(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex) IF GET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex) < 925 OR pbt = BONETAG_HEAD OR IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, GET_ENTITY_COORDS(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex), 5.0) IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex) IF IS_ENTITY_AT_COORD(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, <<981.4547, -2120.6746, 29.4753>>, <<0.5, 0.5, 3.5>>) AND IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<984.946350, -2110.417969, 31.975075>>, <<7.0, 7.5, 5.0>>) INFORM_MISSION_STATS_OF_INCREMENT(MIC2_UNIQUE_TRIAD_DEATHS) SET_PED_CAN_BE_TARGETTED(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, FALSE) //TASK_PLAY_ANIM_ADVANCED(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor", <<980.074, -2121.410, 29.482>>, <<0.0, 0.0, 0.0>>, SLOW_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_OVERRIDE_PHYSICS | AF_IGNORE_GRAVITY | AF_HOLD_LAST_FRAME, 0.0, EULER_YXZ, AIK_DISABLE_LEG_IK) sceneConveyor = CREATE_SYNCHRONIZED_SCENE(<<980.074, -2121.410, 29.482>>, <<0.0, 0.0, 0.0>>) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, sceneConveyor, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor", SLOW_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, RBF_NONE, SLOW_BLEND_IN, AIK_DISABLE_LEG_IK) SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(sceneConveyor, TRUE) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex) SET_ENTITY_INVINCIBLE(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, TRUE) SET_PED_CAN_BE_TARGETTED(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, FALSE) PLAY_PAIN(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, AUD_DAMAGE_REASON_SCREAM_PANIC) IF NOT bVideoRecording REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGH) bVideoRecording = TRUE ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_CONVEYOR]++ ELSE SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, 5) APPLY_DAMAGE_TO_PED(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, 500, FALSE) SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_CONVEYOR].blipIndex) iSetPiece[SET_PIECE_CONVEYOR] = 100 ENDIF ENDIF ENDIF ENDIF ENDIF BREAK CASE 1 IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneConveyor) //IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor") AND GET_SYNCHRONIZED_SCENE_PHASE(sceneConveyor) >= 0.254 //AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor") > 0.254 SETTIMERB(0) iSetPiece[SET_PIECE_CONVEYOR]++ ENDIF BREAK CASE 2 IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneConveyor) //IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor") AND GET_SYNCHRONIZED_SCENE_PHASE(sceneConveyor) >= 0.413 //AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor") > 0.413 SHAKE_CAM(camMain, "ROAD_VIBRATION_SHAKE", 4.0) SETTIMERB(0) iSetPiece[SET_PIECE_CONVEYOR]++ ENDIF BREAK CASE 3 IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneConveyor) //IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor") AND GET_SYNCHRONIZED_SCENE_PHASE(sceneConveyor) >= 0.525 //AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor") > 0.525 //Audio Scene IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_GRINDER_2") START_AUDIO_SCENE("MI_2_GRINDER_2") ENDIF PLAY_PAIN(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, AUD_DAMAGE_REASON_ON_FIRE) START_PARTICLE_FX_NON_LOOPED_AT_COORD("scr_abattoir_ped_minced", <<976.72, -2120.27, 31.5>>, VECTOR_ZERO) PLAY_SOUND_FROM_COORD(-1, "MINCER_FALL", <<976.72, -2120.27, 31.5>>, "MICHAEL_2_SOUNDS") IF NOT IS_MESSAGE_BEING_DISPLAYED() AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF DOES_ENTITY_EXIST(pedClosestEnemy) AND NOT IS_PED_INJURED(pedClosestEnemy) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(pedClosestEnemy)) < 20.0 ADD_PED_FOR_DIALOGUE(sPedsForConversation, 7, pedClosestEnemy, "MCH2CHIN5") CREATE_CONVERSATION_ADV("MCH2_EWW5") ENDIF ENDIF ENDIF SETTIMERB(0) iSetPiece[SET_PIECE_CONVEYOR]++ ENDIF BREAK CASE 4 IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneConveyor) //IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor") AND GET_SYNCHRONIZED_SCENE_PHASE(sceneConveyor) >= 1.000 //AND GET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor") >= 1.000 IF bVideoRecording REPLAY_STOP_EVENT() bVideoRecording = FALSE ENDIF //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_GRINDER_2") STOP_AUDIO_SCENE("MI_2_GRINDER_2") ENDIF SET_ENTITY_INVINCIBLE(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, FALSE) IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex) SET_ENTITY_HEALTH(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, 5) APPLY_DAMAGE_TO_PED(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex, 500, FALSE) ENDIF SAFE_REMOVE_BLIP(sEnemySetPiece[SET_PIECE_CONVEYOR].blipIndex) SAFE_DELETE_PED(sEnemySetPiece[SET_PIECE_CONVEYOR].pedIndex) // SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) // // STOP_CAM_SHAKING(camMain, TRUE) // RENDER_SCRIPT_CAMS(FALSE, FALSE) // SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) SETTIMERB(0) iSetPiece[SET_PIECE_CONVEYOR]++ ENDIF BREAK // CASE 5 // IF TIMERB() > 1000 // SET_ENTITY_INVINCIBLE(PLAYER_PED_ID(), FALSE) // // SETTIMERB(0) // iSetPiece[SET_PIECE_CONVEYOR]++ // ENDIF // BREAK ENDSWITCH // IF NOT IS_GAMEPLAY_CAM_RENDERING() // IF iSetPiece[SET_PIECE_CONVEYOR] > 2 // AND iSetPiece[SET_PIECE_CONVEYOR] < 100 // IF DOES_ENTITY_EXIST(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex) // IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY() // IF IS_ENTITY_PLAYING_ANIM(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor") // SET_ENTITY_ANIM_CURRENT_TIME(sEnemySetPiece[SET_PIECE_CUTTER].pedIndex, sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor", 1.000) // ENDIF // // iSetPiece[SET_PIECE_CONVEYOR] = 4 // ENDIF // ENDIF // ENDIF // ENDIF //Cow SWITCH iSetPiece[SET_PIECE_COW] CASE 0 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_COW].pedIndex) IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2SetPiece2) objCow = CREATE_OBJECT_NO_OFFSET(V_IND_COO_HALF, <<967.0997, -2108.2424, 34.3186>>) iSetPiece[SET_PIECE_COW]++ ENDIF ENDIF BREAK CASE 1 IF DOES_ENTITY_EXIST(objCow) IF DOES_ENTITY_HAVE_DRAWABLE(objCow) sceneCow = CREATE_SYNCHRONIZED_SCENE(sceneCowPos, sceneCowRot) TASK_SYNCHRONIZED_SCENE(sEnemySetPiece[SET_PIECE_COW].pedIndex, sceneCow, sAnimDictMic2SetPiece2, "goon_pushcow_goon", INSTANT_BLEND_IN, WALK_BLEND_OUT) FORCE_PED_AI_AND_ANIMATION_UPDATE(sEnemySetPiece[SET_PIECE_COW].pedIndex) PLAY_SYNCHRONIZED_ENTITY_ANIM(objCow, sceneCow, "goon_pushcow_beef", sAnimDictMic2SetPiece2, INSTANT_BLEND_IN, WALK_BLEND_OUT) SET_SYNCHRONIZED_SCENE_PHASE(sceneCow, 0.250) SET_SYNCHRONIZED_SCENE_RATE(sceneCow, 0.0) iSetPiece[SET_PIECE_COW]++ ENDIF ENDIF BREAK CASE 2 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_COW].pedIndex) IF IS_SYNCHRONIZED_SCENE_RUNNING(sceneCow) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<967.617432, -2124.157959, 32.474319>>, <<1.5, 4.5, 2.5>>) SET_SYNCHRONIZED_SCENE_RATE(sceneCow, 1.0) IF NOT HAS_PED_GOT_WEAPON(sEnemySetPiece[SET_PIECE_COW].pedIndex, WEAPONTYPE_PISTOL) GIVE_WEAPON_TO_PED(sEnemySetPiece[SET_PIECE_COW].pedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO, TRUE) ENDIF SET_CURRENT_PED_WEAPON(sEnemySetPiece[SET_PIECE_COW].pedIndex, WEAPONTYPE_PISTOL, TRUE) PLAY_PED_AMBIENT_SPEECH(sEnemySetPiece[SET_PIECE_COW].pedIndex, "GENERIC_WAR_CRY", SPEECH_PARAMS_FORCE_SHOUTED_CLEAR) IF sfxCow = -1 sfxCow = GET_SOUND_ID() PLAY_SOUND_FROM_ENTITY(sfxCow, "MEAT_SLIDE", objCow, "MICHAEL_2_SOUNDS") //MIC_2_MEAT_SLIDE_ON_STOP_MASTER ENDIF iSetPiece[SET_PIECE_COW]++ ENDIF ENDIF ENDIF BREAK CASE 3 IF NOT IS_PED_INJURED(sEnemySetPiece[SET_PIECE_COW].pedIndex) IF (IS_SYNCHRONIZED_SCENE_RUNNING(sceneCow) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneCow) >= 1.0) OR NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneCow) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemySetPiece[SET_PIECE_COW].pedIndex, FALSE) REMOVE_PED_DEFENSIVE_AREA(sEnemySetPiece[SET_PIECE_COW].pedIndex) SET_PED_COMBAT_ATTRIBUTES(sEnemySetPiece[SET_PIECE_COW].pedIndex, CA_REMOVE_AREA_SET_WILL_ADVANCE_WHEN_DEFENSIVE_AREA_REACHED, TRUE) SET_PED_COMBAT_MOVEMENT(sEnemySetPiece[SET_PIECE_COW].pedIndex, CM_WILLADVANCE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemySetPiece[SET_PIECE_COW].pedIndex, 500.0) iSetPiece[SET_PIECE_COW]++ ELIF GET_GAME_TIMER() > iCowShootTimer IF HAS_PED_GOT_WEAPON(sEnemySetPiece[SET_PIECE_COW].pedIndex, WEAPONTYPE_PISTOL) SET_PED_SHOOTS_AT_COORD(sEnemySetPiece[SET_PIECE_COW].pedIndex, GET_PED_BONE_COORDS(PLAYER_PED_ID(), BONETAG_HEAD, VECTOR_ZERO)) ENDIF iCowShootTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(200, 500) ENDIF ENDIF IF (IS_SYNCHRONIZED_SCENE_RUNNING(sceneCow) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneCow) >= 1.0) OR NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneCow) IF sfxCow != -1 STOP_SOUND(sfxCow) RELEASE_SOUND_ID(sfxCow) sfxCow = -1 ENDIF ENDIF BREAK ENDSWITCH //Update Players navmesh blocknig area so the buddy won't run into him... IF iNavBlock[0] = 0 iNavBlock[0] = ADD_NAVMESH_BLOCKING_OBJECT(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<0.75, 0.75, 1.0>>, (GET_ENTITY_HEADING(PLAYER_PED_ID()) / 360) * 6.28) PRINTLN("ADD_NAVMESH_BLOCKING_OBJECT | iNavBlock[0] = ", iNavBlock[1]) ELSE UPDATE_NAVMESH_BLOCKING_OBJECT(iNavBlock[0], GET_ENTITY_COORDS(PLAYER_PED_ID()), <<0.75, 0.75, 1.0>>, (GET_ENTITY_HEADING(PLAYER_PED_ID()) / 360) * 6.28) ENDIF ENDIF IF CLEANUP_STAGE() //Cleanup (Blips, peds, variables etc.) //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_ESCAPE_SHOOTOUT") STOP_AUDIO_SCENE("MI_2_ESCAPE_SHOOTOUT") ENDIF IF sfxCow != -1 STOP_SOUND(sfxCow) RELEASE_SOUND_ID(sfxCow) sfxCow = -1 ENDIF // SAFE_REMOVE_BLIP(blipMichael) // SAFE_REMOVE_BLIP(blipFranklin) SAFE_REMOVE_BLIP(blipDestination) IF DOES_CAM_EXIST(camAnim) DESTROY_CAM(camAnim) ENDIF INT i REPEAT COUNT_OF(covPoint) i REMOVE_COVER_POINT(covPoint[i]) ENDREPEAT REPEAT iEnemySetPiece i SET_PED_AS_NO_LONGER_NEEDED(sEnemySetPiece[i].pedIndex) SAFE_REMOVE_BLIP(sEnemySetPiece[i].blipIndex) ENDREPEAT REPEAT iEnemyEscape i SET_PED_AS_NO_LONGER_NEEDED(sEnemyEscape[i].pedIndex) SAFE_REMOVE_BLIP(sEnemyEscape[i].blipIndex) ENDREPEAT SAFE_DELETE_OBJECT(objHook) SAFE_DELETE_OBJECT(objChain) SAFE_DELETE_OBJECT(objPadlock) REPEAT COUNT_OF(objCrate) i SAFE_DELETE_OBJECT(objCrate[i]) ENDREPEAT REPEAT COUNT_OF(objCigarette) i IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxCigarette[i]) STOP_PARTICLE_FX_LOOPED(ptfxCigarette[i]) ENDIF SAFE_DELETE_OBJECT(objCigarette[i]) ENDREPEAT REPEAT COUNT_OF(vehEnemy) i SAFE_DELETE_VEHICLE(vehEnemy[i]) ENDREPEAT SET_MODEL_AS_NO_LONGER_NEEDED(PROP_LD_HOOK) SET_MODEL_AS_NO_LONGER_NEEDED(PROP_CS_PADLOCK) SET_MODEL_AS_NO_LONGER_NEEDED(PROP_CS_LEG_CHAIN_01) SET_MODEL_AS_NO_LONGER_NEEDED(BISON) SET_MODEL_AS_NO_LONGER_NEEDED(GET_WEAPONTYPE_MODEL(WEAPONTYPE_COMBATPISTOL)) SET_MODEL_AS_NO_LONGER_NEEDED(PROP_WATERCRATE_01) SET_MODEL_AS_NO_LONGER_NEEDED(V_IND_COO_HALF) REMOVE_PTFX_ASSET() CLEAR_MISSION_LOCATE_STUFF(sLocatesData, TRUE) eMissionObjective = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) + 1) ENDIF ENDPROC PROC triadsChase() IF INIT_STAGE() //Replay SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(replayTriadsChase), "stageTriadsChase", TRUE) SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_MICHAEL), TRUE) SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_FRANKLIN), TRUE) //Uncapped bSetUncapped = TRUE //Wanted SET_MAX_WANTED_LEVEL(0) SET_WANTED_LEVEL_MULTIPLIER(0.0) //Ambulances etc. ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, FALSE) ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, FALSE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, FALSE) ENABLE_DISPATCH_SERVICE(DT_GANGS, FALSE) IF CAN_CREATE_RANDOM_COPS() SET_CREATE_RANDOM_COPS(FALSE) ENDIF SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) // IF NOT IS_ENTITY_AT_COORD(PLAYER_PED(CHAR_FRANKLIN), <<962.994446, -2107.998047, 32.986130>>,<<10.0, 7.0, 2.5>>) // SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<965.1993, -2108.8315, 30.4914>>, 63.8301) // ENDIF //Blocking of Temporary Events SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_FRANKLIN), FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_MICHAEL), FALSE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_FRANKLIN), PCF_GetOutUndriveableVehicle, FALSE) SET_PED_CONFIG_FLAG(PLAYER_PED(CHAR_MICHAEL), PCF_GetOutUndriveableVehicle, FALSE) //Objective //PRINT_ADV("MCH2_GCLEAR") //Audio PLAY_AUDIO(MIC2_VEHICLE_READY) LOAD_AUDIO(MIC2_LOSE_TRIADS) // SET_INITIAL_PLAYER_STATION("RADIO_01_CLASS_ROCK") // // FREEZE_RADIO_STATION("RADIO_01_CLASS_ROCK") // // SET_RADIO_AUTO_UNFREEZE(FALSE) // // SET_RADIO_TRACK("RADIO_01_CLASS_ROCK", "MIC2_OVER_RADIO") //Taxi DISABLE_TAXI_HAILING(TRUE) IF SKIPPED_STAGE() SET_PED_POSITION(PLAYER_PED(CHAR_MICHAEL), <<961.6073, -2107.3604, 30.7408>>, 47.8221, FALSE) SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<960.3185, -2105.0186, 30.9585>>, 99.0454) SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_MICHAEL), TRUE) SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_FRANKLIN), TRUE) IF NOT bReplaySkip LOAD_SCENE_ADV(<<961.2763, -2106.1240, 30.5098>>) ENDIF IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, 350, TRUE) ENDIF SET_PED_AMMO(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, 350) SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_MICHAEL), GET_BEST_PED_WEAPON(PLAYER_PED(CHAR_MICHAEL)), TRUE) //Audio PLAY_AUDIO(MIC2_TRIADS_CHASE_RT) SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_MICHAEL), FALSE) SAFE_FREEZE_ENTITY_POSITION(PLAYER_PED(CHAR_FRANKLIN), FALSE) FORCE_PED_MOTION_STATE(PLAYER_PED(CHAR_FRANKLIN), MS_ON_FOOT_IDLE) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) SAFE_ADD_BLIP_PED(blipMichael, sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], FALSE) ELIF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) SAFE_ADD_BLIP_PED(blipMichael, sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], FALSE) ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF ENDIF ELSE REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2175707 SWITCH iCutsceneStage CASE 0 IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_DRV1") REPLAY_RECORD_BACK_FOR_TIME(4.0, 10.0, REPLAY_IMPORTANCE_HIGHEST) CREATE_CONVERSATION_ADV("MCH2_DRV1") ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_SEECAR") IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED(CHAR_MICHAEL), <<942.229126, -2109.321777, 29.255819>>, <<962.332581, -2109.342529, 33.953644>>, 16.5) CREATE_CONVERSATION_ADV("MCH2_SEECAR") ENDIF ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_GETCAR") AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_MDRIVE") IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN CREATE_CONVERSATION_ADV("MCH2_GETCAR") ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL CREATE_CONVERSATION_ADV("MCH2_MDRIVE") ENDIF ENDIF ENDIF IF (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) OR NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<946.914734, -2113.857910, 27.548405>>, <<972.384338, -2116.126465, 35.474815>>, 28.0)) AND (intAbattoir != NULL AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) != intAbattoir AND GET_INTERIOR_FROM_ENTITY(NOT_PLAYER_PED_ID()) != intAbattoir) IF (DOES_ENTITY_EXIST(vehHachiRoku) AND NOT IS_ENTITY_DEAD(vehHachiRoku)) AND NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehHachiRoku) vehEnemyChase[0] = vehHachiRoku ELIF (DOES_ENTITY_EXIST(vehEscape) AND NOT IS_ENTITY_DEAD(vehEscape)) AND NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehEscape) vehEnemyChase[0] = vehEscape ENDIF IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) //Michael driveby weapon IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, GET_WEAPON_CLIP_SIZE(WEAPONTYPE_COMBATPISTOL) * 5, TRUE) ENDIF IF GET_AMMO_IN_PED_WEAPON(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL) < (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_COMBATPISTOL) * 5) SET_PED_AMMO(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_COMBATPISTOL) * 5)) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_MICHAEL), WEAPONTYPE_COMBATPISTOL, TRUE) //Franklin driveby weapon IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PISTOL) GIVE_WEAPON_TO_PED(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PISTOL, 350, TRUE) ENDIF IF GET_AMMO_IN_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PISTOL) < (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_PISTOL) * 5) SET_PED_AMMO(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PISTOL, (GET_WEAPON_CLIP_SIZE(WEAPONTYPE_PISTOL) * 5)) ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED(CHAR_FRANKLIN), WEAPONTYPE_PISTOL, TRUE) ENDIF ADVANCE_CUTSCENE() ENDIF BREAK CASE 1 IF NOT DOES_ENTITY_EXIST(sEnemyChase[0].pedIndex) AND NOT DOES_ENTITY_EXIST(sEnemyChase[1].pedIndex) createEnemy(sEnemyChase[0], <<965.9470, -2109.8545, 30.4696>>, 56.7835, WEAPONTYPE_PISTOL) createEnemy(sEnemyChase[1], <<968.0931, -2110.3267, 30.4746>>, 56.7835, WEAPONTYPE_SMG, G_M_M_CHIGOON_01) SET_PED_COMBAT_MOVEMENT(sEnemyChase[0].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_MOVEMENT(sEnemyChase[1].pedIndex, CM_WILLADVANCE) SET_PED_COMBAT_ATTRIBUTES(sEnemyChase[0].pedIndex, CA_AGGRESSIVE, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemyChase[1].pedIndex, CA_AGGRESSIVE, TRUE) REMOVE_PED_DEFENSIVE_AREA(sEnemyChase[0].pedIndex) REMOVE_PED_DEFENSIVE_AREA(sEnemyChase[1].pedIndex) GIVE_WEAPON_TO_PED(sEnemyChase[1].pedIndex, WEAPONTYPE_PISTOL, INFINITE_AMMO, FALSE, FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyChase[0].pedIndex, TRUE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sEnemyChase[1].pedIndex, TRUE) OPEN_SEQUENCE_TASK(seqMain) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<960.2808, -2106.7200, 30.9505>>, PLAYER_PED_ID(), PEDMOVE_RUN, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyChase[0].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) OPEN_SEQUENCE_TASK(seqMain) TASK_GO_TO_COORD_WHILE_AIMING_AT_ENTITY(NULL, <<960.2409, -2104.9978, 30.9505>>, PLAYER_PED_ID(), PEDMOVE_RUN, TRUE) TASK_COMBAT_HATED_TARGETS_AROUND_PED(NULL, 100.0) CLOSE_SEQUENCE_TASK(seqMain) TASK_PERFORM_SEQUENCE(sEnemyChase[1].pedIndex, seqMain) CLEAR_SEQUENCE_TASK(seqMain) INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(MIC2_TIME_TO_LOSE_TRIADS) ENDIF IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<941.783325, -2112.604248, 27.505041>>, <<972.538818, -2114.131592, 35.474781>>, 25.0) IF (DOES_ENTITY_EXIST(sEnemyChase[0].pedIndex) AND NOT IS_PED_INJURED(sEnemyChase[0].pedIndex)) OR (DOES_ENTITY_EXIST(sEnemyChase[1].pedIndex) AND NOT IS_PED_INJURED(sEnemyChase[1].pedIndex)) //Audio PLAY_AUDIO(MIC2_LOSE_TRIADS) ENDIF ADVANCE_CUTSCENE() ENDIF BREAK CASE 2 IF IS_PED_INJURED(sEnemyChase[0].pedIndex) AND IS_PED_INJURED(sEnemyChase[1].pedIndex) ADVANCE_CUTSCENE() ELSE IF ((NOT IS_PED_INJURED(sEnemyChase[0].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[0].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 350.0) OR IS_PED_INJURED(sEnemyChase[0].pedIndex)) AND ((NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[1].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 350.0) OR IS_PED_INJURED(sEnemyChase[1].pedIndex)) OR GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-858.0734, 157.1951, 63.7158>>) < 200.0 ADVANCE_CUTSCENE() ENDIF ENDIF IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF TIMERA() > 1500 IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_DRV2") AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_AFTERUS") IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN))) < 25.0 AND ((DOES_ENTITY_EXIST(sEnemyChase[0].pedIndex) AND NOT IS_PED_INJURED(sEnemyChase[0].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[0].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 100.0) OR (DOES_ENTITY_EXIST(sEnemyChase[1].pedIndex) AND NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[1].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 100.0) OR (DOES_ENTITY_EXIST(vehEnemyChase[0]) AND NOT IS_ENTITY_DEAD(vehEnemyChase[0]) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehEnemyChase[0]), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 150.0)) IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN CREATE_CONVERSATION_ADV("MCH2_DRV2") ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL CREATE_CONVERSATION_ADV("MCH2_AFTERUS") ENDIF ENDIF ELIF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_LOSEM") AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_LOSE") IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_PED_IN_VEHICLE(NOT_PLAYER_PED_ID(), GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN))) < 25.0 AND ((DOES_ENTITY_EXIST(sEnemyChase[0].pedIndex) AND NOT IS_PED_INJURED(sEnemyChase[0].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[0].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 100.0) OR (DOES_ENTITY_EXIST(sEnemyChase[1].pedIndex) AND NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[1].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 100.0) OR (DOES_ENTITY_EXIST(vehEnemyChase[0]) AND NOT IS_ENTITY_DEAD(vehEnemyChase[0]) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehEnemyChase[0]), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 150.0)) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_MICHAEL)) AND GET_PED_IN_VEHICLE_SEAT(GET_VEHICLE_PED_IS_IN(PLAYER_PED(CHAR_MICHAEL)), VS_DRIVER) = PLAYER_PED(CHAR_MICHAEL) CREATE_CONVERSATION_ADV("MCH2_LOSEM") ELIF IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) AND GET_PED_IN_VEHICLE_SEAT(GET_VEHICLE_PED_IS_IN(PLAYER_PED(CHAR_FRANKLIN)), VS_DRIVER) = PLAYER_PED(CHAR_FRANKLIN) CREATE_CONVERSATION_ADV("MCH2_LOSE") ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(vehEscape) AND NOT IS_ENTITY_DEAD(vehEscape) IF NOT GET_VEHICLE_TYRES_CAN_BURST(vehEscape) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehEscape), <<965.9470, -2109.8545, 30.4696>>) > 50.0 SET_VEHICLE_TYRES_CAN_BURST(vehEscape, TRUE) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(vehHachiRoku) AND NOT IS_ENTITY_DEAD(vehHachiRoku) IF NOT GET_VEHICLE_TYRES_CAN_BURST(vehHachiRoku) IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehHachiRoku), <<965.9470, -2109.8545, 30.4696>>) > 50.0 SET_VEHICLE_TYRES_CAN_BURST(vehHachiRoku, TRUE) ENDIF ENDIF ENDIF BOOL bCloseCombat bCloseCombat = TRUE IF NOT IS_PED_INJURED(sEnemyChase[0].pedIndex) IF ((IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND GET_ENTITY_SPEED(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) < 3.0) OR NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[0].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 15.0 SET_PED_COMBAT_ATTRIBUTES(sEnemyChase[0].pedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemyChase[0].pedIndex, CA_USE_VEHICLE, FALSE) ELIF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[0].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 25.0 AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehEnemyChase[0]), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 25.0 SET_PED_COMBAT_ATTRIBUTES(sEnemyChase[0].pedIndex, CA_LEAVE_VEHICLES, FALSE) SET_PED_COMBAT_ATTRIBUTES(sEnemyChase[0].pedIndex, CA_USE_VEHICLE, TRUE) bCloseCombat = FALSE ENDIF ENDIF IF NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) IF ((IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND GET_ENTITY_SPEED(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) < 3.0) OR NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[1].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 15.0 SET_PED_COMBAT_ATTRIBUTES(sEnemyChase[1].pedIndex, CA_LEAVE_VEHICLES, TRUE) SET_PED_COMBAT_ATTRIBUTES(sEnemyChase[1].pedIndex, CA_USE_VEHICLE, FALSE) ELIF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[1].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 25.0 AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehEnemyChase[0]), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 25.0 SET_PED_COMBAT_ATTRIBUTES(sEnemyChase[1].pedIndex, CA_LEAVE_VEHICLES, FALSE) SET_PED_COMBAT_ATTRIBUTES(sEnemyChase[1].pedIndex, CA_USE_VEHICLE, TRUE) bCloseCombat = FALSE ENDIF ENDIF IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF NOT IS_PED_INJURED(sEnemyChase[0].pedIndex) IF NOT IS_ENTITY_DEAD(vehEnemyChase[0]) IF IS_PED_IN_ANY_VEHICLE(sEnemyChase[0].pedIndex) AND NOT IS_PED_GETTING_INTO_A_VEHICLE(sEnemyChase[0].pedIndex) AND (IS_PED_INJURED(sEnemyChase[1].pedIndex) OR (NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) AND IS_PED_IN_ANY_VEHICLE(sEnemyChase[1].pedIndex) AND NOT IS_PED_GETTING_INTO_A_VEHICLE(sEnemyChase[1].pedIndex))) VECTOR vClosestRoad FLOAT fClosestRoad INT iClosestRoad GET_NTH_CLOSEST_VEHICLE_NODE_WITH_HEADING(GET_ENTITY_COORDS(PLAYER_PED_ID()), 1, vClosestRoad, fClosestRoad, iClosestRoad, NF_NONE) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) AND NOT IS_PED_IN_FLYING_VEHICLE(PLAYER_PED_ID()) AND NOT IS_PED_IN_ANY_BOAT(PLAYER_PED_ID()) AND NOT IS_ENTITY_IN_WATER(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) AND GET_ENTITY_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) > 5.0 AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vCurrentPoint) > 30.0 - (GET_VEHICLE_ESTIMATED_MAX_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) / 5.0) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vClosestRoad) < (5.0 + iClosestRoad) vChasePoint = vCurrentPoint fChasePoint = fCurrentPoint vCurrentPoint = GET_ENTITY_COORDS(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) fCurrentPoint = GET_ENTITY_HEADING(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) ENDIF IF IS_PED_IN_ANY_VEHICLE(sEnemyChase[0].pedIndex) IF (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_ENTITY_IN_WATER(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))) OR IS_ENTITY_IN_WATER(PLAYER_PED_ID()) IF GET_SCRIPT_TASK_STATUS(sEnemyChase[0].pedIndex, SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED) != PERFORMING_TASK TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyChase[0].pedIndex, 500.0) ENDIF ELSE IF GET_SCRIPT_TASK_STATUS(sEnemyChase[0].pedIndex, SCRIPT_TASK_VEHICLE_CHASE) != PERFORMING_TASK TASK_VEHICLE_CHASE(sEnemyChase[0].pedIndex, PLAYER_PED_ID()) ENDIF ENDIF ENDIF IF NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) IF GET_SCRIPT_TASK_STATUS(sEnemyChase[1].pedIndex, SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED) != PERFORMING_TASK TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyChase[1].pedIndex, 500.0) ENDIF ENDIF IF IS_ENTITY_ON_SCREEN(vehEnemyChase[0]) OR IS_SPHERE_VISIBLE(vChasePoint, 5.0) iChaseTimer[CHASE_TIMER_CAR] = GET_GAME_TIMER() + 3000 ELIF GET_GAME_TIMER() > iChaseTimer[CHASE_TIMER_CAR] AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(vehEnemyChase[0])) > 40.0 - (GET_VEHICLE_ESTIMATED_MAX_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) / 5.0) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vChasePoint) > 20.0 - (GET_VEHICLE_ESTIMATED_MAX_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) / 5.0) IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) AND NOT IS_PED_IN_FLYING_VEHICLE(PLAYER_PED_ID()) AND NOT IS_PED_IN_ANY_BOAT(PLAYER_PED_ID()) IF NOT IS_VECTOR_ZERO(vChasePoint) CLEAR_AREA(vChasePoint, 3.0, TRUE) SET_VEHICLE_POSITION(vehEnemyChase[0], vChasePoint, fChasePoint) SET_VEHICLE_FORWARD_SPEED(vehEnemyChase[0], 10.0) SET_VEHICLE_ENGINE_ON(vehEnemyChase[0], TRUE, TRUE) iChaseTimer[CHASE_TIMER_CAR] = GET_GAME_TIMER() + (6000 - CLAMP_INT(ROUND(GET_VEHICLE_ESTIMATED_MAX_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) * GET_VEHICLE_ESTIMATED_MAX_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))), 0, 3000)) ENDIF ENDIF ENDIF ELSE IF NOT bCloseCombat IF NOT IS_PED_IN_VEHICLE(sEnemyChase[0].pedIndex, vehEnemyChase[0]) AND NOT IS_PED_GETTING_INTO_A_VEHICLE(sEnemyChase[0].pedIndex) AND IS_VEHICLE_SEAT_FREE(vehEnemyChase[0], VS_DRIVER) IF (IS_ENTITY_ON_SCREEN(sEnemyChase[0].pedIndex) AND NOT IS_ENTITY_OCCLUDED(sEnemyChase[0].pedIndex)) OR IS_SPHERE_VISIBLE(GET_ENTITY_COORDS(sEnemyChase[0].pedIndex), 1.0) IF GET_SCRIPT_TASK_STATUS(sEnemyChase[0].pedIndex, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK TASK_ENTER_VEHICLE(sEnemyChase[0].pedIndex, vehEnemyChase[0], DEFAULT_TIME_NEVER_WARP) ENDIF iChaseTimer[CHASE_TIMER_ENEMY_1] = GET_GAME_TIMER() + 5000 ELIF GET_GAME_TIMER() > iChaseTimer[CHASE_TIMER_ENEMY_1] AND (NOT IS_ENTITY_ON_SCREEN(vehEnemyChase[0]) AND IS_ENTITY_OCCLUDED(vehEnemyChase[0]) AND NOT IS_SPHERE_VISIBLE(GET_ENTITY_COORDS(vehEnemyChase[0]), 2.0)) SET_PED_INTO_VEHICLE(sEnemyChase[0].pedIndex, vehEnemyChase[0]) ENDIF ENDIF IF NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) IF NOT IS_PED_IN_VEHICLE(sEnemyChase[1].pedIndex, vehEnemyChase[0]) AND NOT IS_PED_GETTING_INTO_A_VEHICLE(sEnemyChase[1].pedIndex) AND IS_VEHICLE_SEAT_FREE(vehEnemyChase[0], VS_FRONT_RIGHT) IF (IS_ENTITY_ON_SCREEN(sEnemyChase[1].pedIndex) AND NOT IS_ENTITY_OCCLUDED(sEnemyChase[1].pedIndex)) OR IS_SPHERE_VISIBLE(GET_ENTITY_COORDS(sEnemyChase[1].pedIndex), 1.0) IF GET_SCRIPT_TASK_STATUS(sEnemyChase[1].pedIndex, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK TASK_ENTER_VEHICLE(sEnemyChase[1].pedIndex, vehEnemyChase[0], DEFAULT_TIME_NEVER_WARP, VS_FRONT_RIGHT) ENDIF iChaseTimer[CHASE_TIMER_ENEMY_2] = GET_GAME_TIMER() + 5000 ELIF GET_GAME_TIMER() > iChaseTimer[CHASE_TIMER_ENEMY_2] AND (NOT IS_ENTITY_ON_SCREEN(vehEnemyChase[0]) AND IS_ENTITY_OCCLUDED(vehEnemyChase[0]) AND NOT IS_SPHERE_VISIBLE(GET_ENTITY_COORDS(vehEnemyChase[0]), 2.0)) SET_PED_INTO_VEHICLE(sEnemyChase[1].pedIndex, vehEnemyChase[0], VS_FRONT_RIGHT) ENDIF ENDIF ENDIF ELSE IF GET_SCRIPT_TASK_STATUS(sEnemyChase[0].pedIndex, SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED) != PERFORMING_TASK TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyChase[0].pedIndex, 500.0) ENDIF IF NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) IF GET_SCRIPT_TASK_STATUS(sEnemyChase[1].pedIndex, SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED) != PERFORMING_TASK TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyChase[1].pedIndex, 500.0) ENDIF ENDIF ENDIF ENDIF ELSE IF GET_SCRIPT_TASK_STATUS(sEnemyChase[0].pedIndex, SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED) != PERFORMING_TASK TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyChase[0].pedIndex, 500.0) ENDIF IF NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) IF GET_SCRIPT_TASK_STATUS(sEnemyChase[1].pedIndex, SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED) != PERFORMING_TASK TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyChase[1].pedIndex, 500.0) ENDIF ENDIF ENDIF ELSE IF NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) IF GET_SCRIPT_TASK_STATUS(sEnemyChase[1].pedIndex, SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED) != PERFORMING_TASK TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyChase[1].pedIndex, 500.0) ENDIF ENDIF ENDIF ELSE IF NOT IS_PED_INJURED(sEnemyChase[0].pedIndex) IF GET_SCRIPT_TASK_STATUS(sEnemyChase[0].pedIndex, SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED) != PERFORMING_TASK TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyChase[0].pedIndex, 500.0) ENDIF ENDIF IF NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) IF GET_SCRIPT_TASK_STATUS(sEnemyChase[1].pedIndex, SCRIPT_TASK_COMBAT_HATED_TARGETS_AROUND_PED) != PERFORMING_TASK TASK_COMBAT_HATED_TARGETS_AROUND_PED(sEnemyChase[1].pedIndex, 500.0) ENDIF ENDIF ENDIF IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF HAS_LABEL_BEEN_TRIGGERED("MCH2_DRV2") AND HAS_LABEL_BEEN_TRIGGERED("MCH2_LOSE") IF GET_GAME_TIMER() > iDialogueTimer[0] IF iDialogueLineCount[0] = -1 iDialogueLineCount[0] = 4 ELIF iDialogueLineCount[1] = -1 iDialogueLineCount[1] = 4 ELIF iDialogueLineCount[2] = -1 iDialogueLineCount[2] = 4 ELIF iDialogueLineCount[3] = -1 iDialogueLineCount[3] = 4 ELIF iDialogueLineCount[4] = -1 iDialogueLineCount[4] = 5 ENDIF IF iDialogueLineCount[iDialogueStage] > 0 IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN))) < 25.0 AND ((DOES_ENTITY_EXIST(sEnemyChase[0].pedIndex) AND NOT IS_PED_INJURED(sEnemyChase[0].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[0].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 100.0) OR (DOES_ENTITY_EXIST(sEnemyChase[1].pedIndex) AND NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[1].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 100.0) OR (DOES_ENTITY_EXIST(vehEnemyChase[0]) AND NOT IS_ENTITY_DEAD(vehEnemyChase[0]) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehEnemyChase[0]), GET_ENTITY_COORDS(PLAYER_PED_ID())) < 150.0)) IF iDialogueStage = 0 IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_MICHAEL)) IF GET_PED_IN_VEHICLE_SEAT(GET_VEHICLE_PED_IS_IN(PLAYER_PED(CHAR_MICHAEL)), VS_DRIVER) = PLAYER_PED(CHAR_MICHAEL) CREATE_CONVERSATION_ADV("MCH2_TRY", CONV_PRIORITY_MEDIUM, FALSE) ELSE CREATE_CONVERSATION_ADV("MCH2_DRV2M", CONV_PRIORITY_MEDIUM, FALSE) ENDIF iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(5000, 7500) iDialogueLineCount[iDialogueStage]-- ENDIF ELIF iDialogueStage = 1 IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED(CHAR_FRANKLIN)) IF GET_PED_IN_VEHICLE_SEAT(GET_VEHICLE_PED_IS_IN(PLAYER_PED(CHAR_FRANKLIN)), VS_DRIVER) = PLAYER_PED(CHAR_FRANKLIN) CREATE_CONVERSATION_ADV("MCH2_DRV2F", CONV_PRIORITY_MEDIUM, FALSE) ELSE CREATE_CONVERSATION_ADV("MCH2_GOGO", CONV_PRIORITY_MEDIUM, FALSE) ENDIF iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(5000, 7500) iDialogueLineCount[iDialogueStage]-- ENDIF ELIF iDialogueStage = 2 IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND DOES_ENTITY_EXIST(sEnemyChase[0].pedIndex) AND NOT IS_PED_INJURED(sEnemyChase[0].pedIndex) AND IS_PED_IN_ANY_VEHICLE(sEnemyChase[0].pedIndex) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 8, sEnemyChase[0].pedIndex, "MCH2CHIN6") CREATE_CONVERSATION_ADV("MCH2_CHASE", CONV_PRIORITY_MEDIUM, FALSE) iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(5000, 7500) iDialogueLineCount[iDialogueStage]-- ENDIF ELIF iDialogueStage = 3 IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND DOES_ENTITY_EXIST(sEnemyChase[1].pedIndex) AND NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) AND IS_PED_IN_ANY_VEHICLE(sEnemyChase[1].pedIndex) ADD_PED_FOR_DIALOGUE(sPedsForConversation, 8, sEnemyChase[1].pedIndex, "MCH2CHIN6") CREATE_CONVERSATION_ADV("MCH2_CHASE2", CONV_PRIORITY_MEDIUM, FALSE) iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(5000, 7500) iDialogueLineCount[iDialogueStage]-- ENDIF ELIF iDialogueStage = 4 CREATE_CONVERSATION_ADV("MCH2_TRIADS", CONV_PRIORITY_MEDIUM, FALSE) iDialogueTimer[0] = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(5000, 7500) iDialogueLineCount[iDialogueStage]-- ENDIF ENDIF IF iDialogueStage < 4 iDialogueStage++ ELSE iDialogueStage = 0 ENDIF ENDIF ENDIF ENDIF ENDIF BREAK ENDSWITCH IF NOT IS_PED_INJURED(sEnemyChase[0].pedIndex) AND NOT IS_PED_IN_ANY_VEHICLE(sEnemyChase[0].pedIndex) SAFE_ADD_BLIP_PED(sEnemyChase[0].blipIndex, sEnemyChase[0].pedIndex) ENDIF IF NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) AND NOT IS_PED_IN_ANY_VEHICLE(sEnemyChase[1].pedIndex) SAFE_ADD_BLIP_PED(sEnemyChase[1].blipIndex, sEnemyChase[1].pedIndex) ENDIF IF IS_PED_INJURED(sEnemyChase[0].pedIndex) OR IS_PED_IN_ANY_VEHICLE(sEnemyChase[0].pedIndex) SAFE_REMOVE_BLIP(sEnemyChase[0].blipIndex) ENDIF IF IS_PED_INJURED(sEnemyChase[1].pedIndex) OR IS_PED_IN_ANY_VEHICLE(sEnemyChase[1].pedIndex) SAFE_REMOVE_BLIP(sEnemyChase[1].blipIndex) ENDIF IF DOES_ENTITY_EXIST(vehEnemyChase[0]) AND NOT IS_ENTITY_DEAD(vehEnemyChase[0]) IF IS_PAUSE_MENU_ACTIVE() IF DOES_BLIP_EXIST(blipEnemyVan[0]) SET_BLIP_COORDS(blipEnemyVan[0], GET_ENTITY_COORDS(vehEnemyChase[0])) ENDIF ENDIF IF NOT IS_PED_INJURED(sEnemyChase[0].pedIndex) AND IS_PED_IN_ANY_VEHICLE(sEnemyChase[0].pedIndex) OR NOT IS_PED_INJURED(sEnemyChase[1].pedIndex) AND IS_PED_IN_ANY_VEHICLE(sEnemyChase[1].pedIndex) ADD_ENTITY_TO_AUDIO_MIX_GROUP(vehEnemyChase[0], "MI_2_ENEMY_CAR") IF NOT DOES_BLIP_EXIST(blipEnemyVan[0]) blipEnemyVan[0] = ADD_BLIP_FOR_COORD(GET_ENTITY_COORDS(vehEnemyChase[0])) SET_BLIP_COLOUR(blipEnemyVan[0], BLIP_COLOUR_RED) SET_BLIP_PRIORITY(blipEnemyVan[0], BLIPPRIORITY_HIGHEST) SET_BLIP_NAME_FROM_TEXT_FILE(blipEnemyVan[0], "MCH2_BLIPVEH") ENDIF VECTOR vEnemyChase = GET_ENTITY_COORDS(vehEnemyChase[0]) VECTOR vBlipChase = GET_BLIP_COORDS(blipEnemyVan[0]) FLOAT fModifier = 1.0 + CLAMP((GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(vehEnemyChase[0])) / 4), 0.0, 15.0) vBlipChase.X = vBlipChase.X +@ (((vEnemyChase.X - vBlipChase.X) / fModifier) * 15) vBlipChase.Y = vBlipChase.Y +@ (((vEnemyChase.Y - vBlipChase.Y) / fModifier) * 15) vBlipChase.Z = vBlipChase.Z +@ (((vEnemyChase.Z - vBlipChase.Z) / fModifier) * 15) SET_BLIP_COORDS(blipEnemyVan[0], vBlipChase) ELSE REMOVE_ENTITY_FROM_AUDIO_MIX_GROUP(vehEnemyChase[0]) ENDIF ENDIF IF (IS_PED_INJURED(sEnemyChase[0].pedIndex) OR NOT IS_PED_IN_ANY_VEHICLE(sEnemyChase[0].pedIndex)) AND (IS_PED_INJURED(sEnemyChase[1].pedIndex) OR NOT IS_PED_IN_ANY_VEHICLE(sEnemyChase[1].pedIndex)) SAFE_REMOVE_BLIP(blipEnemyVan[0]) ENDIF //Fail IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN))) > 250.0 IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL eMissionFail = failFranklinAbandon ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN eMissionFail = failMichaelAbandon ENDIF missionFailed() ENDIF IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) //Audio Scene IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_ESCAPE_IN_CAR") START_AUDIO_SCENE("MI_2_ESCAPE_IN_CAR") ENDIF ENDIF IF DOES_BLIP_EXIST(blipMichael) OR DOES_BLIP_EXIST(blipFranklin) VEHICLE_INDEX vehCurrent IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) vehCurrent = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) ENDIF IF DOES_ENTITY_EXIST(vehCurrent) AND NOT IS_ENTITY_DEAD(vehCurrent) AND IS_PED_IN_VEHICLE(NOT_PLAYER_PED_ID(), vehCurrent) SAFE_REMOVE_BLIP(blipMichael) SAFE_REMOVE_BLIP(blipFranklin) SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_MICHAEL), FALSE) SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_FRANKLIN), FALSE) ENDIF ENDIF IF iCutsceneStage > 0 IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_PED_IN_VEHICLE(NOT_PLAYER_PED_ID(), GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) IF IS_VEHICLE_STOPPED(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())) CREATE_CONVERSATION_ADV("MCH2_WHY") ENDIF SET_LABEL_AS_TRIGGERED("InCarTogether", TRUE) ELIF HAS_LABEL_BEEN_TRIGGERED("InCarTogether") CREATE_CONVERSATION_ADV("MCH2_WHY2") ENDIF ENDIF ENDIF ENDIF IF NOT IS_PED_INJURED(PLAYER_PED(CHAR_MICHAEL)) SAFE_REMOVE_BLIP(blipMichael) SAFE_REMOVE_BLIP(blipFranklin) STRING sCommonLeave IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL sCommonLeave = "CMN_FLEAVE" ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN sCommonLeave = "CMN_MLEAVE" ENDIF VECTOR vLocSize vLocSize = <> #IF IS_DEBUG_BUILD DONT_DO_J_SKIP(sLocatesData) #ENDIF IF IS_PLAYER_AT_LOCATION_WITH_BUDDY_ANY_MEANS(sLocatesData, <<-858.0734, 157.1951, 63.7158>>, vLocSize, TRUE, NOT_PLAYER_PED_ID(), "MCH2_GMCSH", sCommonLeave, FALSE, TRUE) OR iCutsceneStage > 2 SET_LABEL_AS_TRIGGERED("MCH2_GMCSH", TRUE) CLEAR_PED_TASKS(NOT_PLAYER_PED_ID()) //Audio PLAY_AUDIO(MIC2_TRIADS_LOST) ADVANCE_STAGE() ENDIF ENDIF ENDIF IF CLEANUP_STAGE() //Cleanup (Blips, peds, variables etc.) //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_ESCAPE_IN_CAR") STOP_AUDIO_SCENE("MI_2_ESCAPE_IN_CAR") ENDIF INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED(FALSE, MIC2_TIME_TO_LOSE_TRIADS) SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_MICHAEL), FALSE) SET_PED_USING_ACTION_MODE(PLAYER_PED(CHAR_FRANKLIN), FALSE) // IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN // MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) // TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds) // // IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) // SET_PED_RELATIONSHIP_GROUP_HASH(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], relGroupBuddy) // ENDIF // ENDIF INT i REPEAT COUNT_OF(sEnemyChase) i IF DOES_ENTITY_EXIST(sEnemyChase[i].pedIndex) IF NOT IS_PED_INJURED(sEnemyChase[i].pedIndex) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(sEnemyChase[i].pedIndex), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 250.0 SAFE_DELETE_PED(sEnemyChase[i].pedIndex) ELSE SET_PED_AS_NO_LONGER_NEEDED(sEnemyChase[i].pedIndex) ENDIF SAFE_REMOVE_BLIP(sEnemyChase[i].blipIndex) ENDIF ENDREPEAT REPEAT COUNT_OF(vehEnemyChase) i IF DOES_ENTITY_EXIST(vehEnemyChase[i]) IF NOT IS_ENTITY_DEAD(vehEnemyChase[i]) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(vehEnemyChase[i]), GET_ENTITY_COORDS(PLAYER_PED_ID())) > 250.0 SAFE_DELETE_VEHICLE(vehEnemyChase[i]) ELSE SET_VEHICLE_AS_NO_LONGER_NEEDED(vehEnemyChase[i]) ENDIF SAFE_REMOVE_BLIP(blipEnemyVan[i]) ENDIF ENDREPEAT IF DOES_ENTITY_EXIST(objCow) SET_OBJECT_AS_NO_LONGER_NEEDED(objCow) ENDIF SET_VEHICLE_AS_NO_LONGER_NEEDED(vehHachiRoku) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehEscape) SET_MODEL_AS_NO_LONGER_NEEDED(G_M_M_CHIGOON_01) SET_MODEL_AS_NO_LONGER_NEEDED(G_M_M_CHIGOON_02) SET_MODEL_AS_NO_LONGER_NEEDED(BISON) SET_MODEL_AS_NO_LONGER_NEEDED(FELTZER2) SET_MODEL_AS_NO_LONGER_NEEDED(COQUETTE) REMOVE_CLIP_SET("MOVE_STRAFE@COP") REMOVE_CLIP_SET("move_ped_strafing") //SET_ANIM_DICT_AS_LOADED(sAnimDictMic2, TRUE) //Odd fix - something to do with clipsets and anim dicts removing together? SAFE_REMOVE_BLIP(blipMichael) SAFE_REMOVE_BLIP(blipFranklin) //Taxi DISABLE_TAXI_HAILING(FALSE) CLEAR_MISSION_LOCATE_STUFF(sLocatesData, TRUE) eMissionObjective = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) + 1) ENDIF ENDPROC PROC backToMichaels() IF INIT_STAGE() //Wanted SET_MAX_WANTED_LEVEL(6) SET_WANTED_LEVEL_MULTIPLIER(1.0) //Ambulances etc. ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE) ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE) ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE) ENABLE_DISPATCH_SERVICE(DT_GANGS, TRUE) IF NOT CAN_CREATE_RANDOM_COPS() SET_CREATE_RANDOM_COPS(TRUE) ENDIF //Audio Scene IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_DRIVE_HOME") START_AUDIO_SCENE("MI_2_DRIVE_HOME") ENDIF REPLAY_RECORD_BACK_FOR_TIME(3.0, 10.0, REPLAY_IMPORTANCE_HIGHEST) //Audio LOAD_AUDIO(MIC2_RADIO_SETUP) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_MICHAEL), FALSE) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED(CHAR_FRANKLIN), FALSE) IF SKIPPED_STAGE() SET_PED_POSITION(PLAYER_PED(CHAR_MICHAEL), <<961.2763, -2106.1240, 30.5098>>, 89.0595, FALSE) SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<961.0361, -2104.6360, 30.5076>>, 100.5089) IF NOT bReplaySkip LOAD_SCENE_ADV(<<961.2763, -2106.1240, 30.5098>>) ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF ENDIF ELSE SWITCH iCutsceneStage CASE 0 //Cutscene IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-858.0734, 157.1951, 63.7158>>) < DEFAULT_CUTSCENE_LOAD_DIST / 4.0 REQUEST_CUTSCENE("mic_2_mcs_3_concat") //Request Cutscene Variations - mic_2_mcs_3_concat IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Franklin", PLAYER_PED(CHAR_FRANKLIN)) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED(CHAR_MICHAEL)) ENDIF ELIF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-858.0734, 157.1951, 63.7158>>) > DEFAULT_CUTSCENE_UNLOAD_DIST / 4.0 IF HAS_CUTSCENE_LOADED() REMOVE_CUTSCENE() ENDIF ENDIF VECTOR vLocSize vLocSize = <> STRING sCommonLeave IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL sCommonLeave = "CMN_FLEAVE" ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN sCommonLeave = "CMN_MLEAVE" ENDIF VEHICLE_INDEX vehArrive #IF IS_DEBUG_BUILD DONT_DO_J_SKIP(sLocatesData) #ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("OutroCutArrive") SAFE_REMOVE_BLIP(blipMichael) SAFE_REMOVE_BLIP(blipFranklin) IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_GMCSH") IF IS_PLAYER_AT_LOCATION_WITH_BUDDY_ANY_MEANS(sLocatesData, <<-858.0734, 157.1951, 63.7158>>, vLocSize, TRUE, NOT_PLAYER_PED_ID(), "MCH2_GMCSH", sCommonLeave, FALSE, TRUE) IF CAN_PLAYER_START_CUTSCENE() IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) vehArrive = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) ENDIF IF DOES_ENTITY_EXIST(vehArrive) AND NOT IS_ENTITY_DEAD(vehArrive) SET_LABEL_AS_TRIGGERED("OutroCutArrive", TRUE) ELSE ADVANCE_STAGE() ENDIF ENDIF ENDIF ELSE IF IS_PLAYER_AT_LOCATION_WITH_BUDDY_ANY_MEANS(sLocatesData, <<-858.0734, 157.1951, 63.7158>>, vLocSize, TRUE, NOT_PLAYER_PED_ID(), "", sCommonLeave, FALSE, TRUE) IF CAN_PLAYER_START_CUTSCENE() IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) vehArrive = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) ENDIF IF DOES_ENTITY_EXIST(vehArrive) AND NOT IS_ENTITY_DEAD(vehArrive) SET_LABEL_AS_TRIGGERED("OutroCutArrive", TRUE) ELSE ADVANCE_STAGE() ENDIF ENDIF ENDIF ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("OutroCutArrive") //B* 2135862: Force multihead blinders on early SET_MULTIHEAD_SAFE(TRUE) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) vehArrive = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) ENDIF IF DOES_ENTITY_EXIST(vehArrive) IF IS_VEHICLE_ON_ALL_WHEELS(vehArrive) BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(vehArrive, DEFAULT, DEFAULT, DEFAULT, TRUE) ENDIF IF IS_VEHICLE_STOPPED(vehArrive) IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_LEAVE_ANY_VEHICLE) <> PERFORMING_TASK TASK_LEAVE_ANY_VEHICLE(PLAYER_PED_ID(), 400, ECF_DONT_DEFAULT_WARP_IF_DOOR_BLOCKED) ENDIF IF GET_SCRIPT_TASK_STATUS(NOT_PLAYER_PED_ID(), SCRIPT_TASK_LEAVE_ANY_VEHICLE) <> PERFORMING_TASK TASK_LEAVE_ANY_VEHICLE(NOT_PLAYER_PED_ID(), 800, ECF_DONT_DEFAULT_WARP_IF_DOOR_BLOCKED) ENDIF ENDIF ENDIF IF (GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()) = NULL OR (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND NOT IS_ENTRY_POINT_FOR_SEAT_CLEAR(PLAYER_PED_ID(), GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), GET_SEAT_PED_IS_IN(PLAYER_PED_ID())))) AND (GET_VEHICLE_PED_IS_USING(NOT_PLAYER_PED_ID()) = NULL OR (IS_PED_IN_ANY_VEHICLE(NOT_PLAYER_PED_ID()) AND NOT IS_ENTRY_POINT_FOR_SEAT_CLEAR(NOT_PLAYER_PED_ID(), GET_VEHICLE_PED_IS_IN(NOT_PLAYER_PED_ID()), GET_SEAT_PED_IS_IN(NOT_PLAYER_PED_ID())))) ADVANCE_STAGE() ENDIF ENDIF IF NOT IS_MESSAGE_BEING_DISPLAYED() AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-858.0734, 157.1951, 63.7158>>) >= 200.0 IF GET_FAILS_COUNT_TOTAL_FOR_THIS_MISSION_SCRIPT() % 2 = 0 CREATE_CONVERSATION_ADV("MCH2_DRV3") ELSE CREATE_CONVERSATION_ADV("MCH2_BANTER") ENDIF ELSE SET_LABEL_AS_TRIGGERED("MCH2_DRV3", TRUE) SET_LABEL_AS_TRIGGERED("MCH2_BANTER", TRUE) ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("ItsOver") IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) PLAY_AUDIO(MIC2_RADIO_SETUP) ELSE PLAY_AUDIO(MIC2_OVER) ENDIF SET_LABEL_AS_TRIGGERED("ItsOver", TRUE) ENDIF ENDIF IF HAS_LABEL_BEEN_TRIGGERED("MCH2_DRV3") OR HAS_LABEL_BEEN_TRIGGERED("MCH2_BANTER") IF IS_THIS_CONVERSATION_ONGOING_OR_QUEUED("MCH2_DRV3") OR IS_THIS_CONVERSATION_ONGOING_OR_QUEUED("MCH2_BANTER") IF NOT DOES_BLIP_EXIST(sLocatesData.LocationBlip) //IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED() PAUSE_FACE_TO_FACE_CONVERSATION(TRUE) //ENDIF ELSE //IF IS_FACE_TO_FACE_CONVERSATION_PAUSED() PAUSE_FACE_TO_FACE_CONVERSATION(FALSE) //ENDIF ENDIF ENDIF ENDIF IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL)), GET_ENTITY_COORDS(PLAYER_PED(CHAR_FRANKLIN))) > 250.0 IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL eMissionFail = failFranklinAbandon ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN eMissionFail = failMichaelAbandon ENDIF missionFailed() ENDIF BREAK ENDSWITCH ENDIF IF CLEANUP_STAGE() //Cleanup (Blips, peds, variables etc.) //Audio Scene IF IS_AUDIO_SCENE_ACTIVE("MI_2_DRIVE_HOME") STOP_AUDIO_SCENE("MI_2_DRIVE_HOME") ENDIF eMissionObjective = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) + 1) ENDIF ENDPROC PROC cutEnd() IF INIT_STAGE() SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) bRadar = FALSE #IF IS_DEBUG_BUILD IF bAutoSkipping = FALSE #ENDIF //Roads SET_ROADS_IN_AREA(<<-877.67, 224.67, 72.30>>, <<-853.08, 125.01, 56.63>>, FALSE) //Cutscene REQUEST_CUTSCENE("mic_2_mcs_3_concat") //Interior intMansion = GET_INTERIOR_AT_COORDS_WITH_TYPE(<<-812.1879, 179.9663, 71.1639>>, "V_Michael") PIN_INTERIOR_IN_MEMORY(intMansion) #IF IS_DEBUG_BUILD ENDIF #ENDIF IF SKIPPED_STAGE() SET_PED_POSITION(PLAYER_PED(CHAR_MICHAEL), <<-860.1198, 157.7610, 63.9212>>, 339.3617, FALSE) SET_PED_POSITION(PLAYER_PED(CHAR_FRANKLIN), <<-859.0430, 160.0430, 64.3859>>, 156.8454, FALSE) IF NOT bReplaySkip LOAD_SCENE_ADV(<<-860.1198, 157.7610, 63.9212>>, 20.0) ENDIF SET_GAMEPLAY_CAM_RELATIVE_HEADING(0) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10) ENDIF ELSE //Request Cutscene Variations - mic_2_mcs_3_concat IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Franklin", PLAYER_PED(CHAR_FRANKLIN)) SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED(CHAR_MICHAEL)) ENDIF SWITCH iCutsceneStage CASE 0 IF (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_VEHICLE_STOPPED(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))) OR NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF HAS_THIS_CUTSCENE_LOADED_WITH_FAILSAFE("mic_2_mcs_3_concat") CLEAR_TEXT() // IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN // MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) // TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE, TCF_CLEAR_TASK_INTERRUPT_CHECKS) // // SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) // ENDIF // // IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) // REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL], "Michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) // ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_MICHAEL) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE, TCF_CLEAR_TASK_INTERRUPT_CHECKS) SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) ENDIF REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_MICHAEL), CEO_PRESERVE_FACE_BLOOD_DAMAGE | CEO_PRESERVE_BODY_BLOOD_DAMAGE) IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) ENDIF // vehEnd = GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()) // // IF DOES_ENTITY_EXIST(vehEnd) // AND NOT IS_ENTITY_DEAD(vehEnd) // SET_ENTITY_AS_MISSION_ENTITY(vehEnd) // // SET_VEHICLE_ENGINE_ON(vehEnd, FALSE, TRUE) // SET_VEHICLE_RADIO_ENABLED(vehEnd, FALSE) // // REGISTER_ENTITY_FOR_CUTSCENE(vehEnd, "MIC2_Car", CU_ANIMATE_EXISTING_SCRIPT_ENTITY) // ENDIF // REGISTER_ENTITY_FOR_CUTSCENE(NULL, "MIC2_Car", CU_DONT_ANIMATE_ENTITY, COQUETTE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) REPLAY_RECORD_BACK_FOR_TIME(5.0, 0.0, REPLAY_IMPORTANCE_HIGHEST) REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) START_CUTSCENE() WAIT_WITH_DEATH_CHECKS(0) CLEAR_PED_BLOOD_DAMAGE(PLAYER_PED(CHAR_MICHAEL)) APPLY_PED_DAMAGE_PACK(PLAYER_PED(CHAR_MICHAEL), "SCR_Torture", 0.0, 1.0) CLEAR_AREA(<<-857.7942, 159.1706, 64.1449>>, 100.0, TRUE) IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(500) ENDIF ADVANCE_CUTSCENE() ENDIF ENDIF BREAK CASE 1 //Remove Peds and Cars from the cutscene SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0) SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0) IF NOT HAS_LABEL_BEEN_TRIGGERED("MichaelInjuries") ENTITY_INDEX entityMichael entityMichael = GET_ENTITY_INDEX_OF_CUTSCENE_ENTITY("Michael", PLAYER_ZERO) IF DOES_ENTITY_EXIST(entityMichael) AND NOT IS_ENTITY_DEAD(entityMichael) APPLY_PED_DAMAGE_PACK(PLAYER_PED(CHAR_MICHAEL), "SCR_Torture", 0.0, 1.0) SET_LABEL_AS_TRIGGERED("MichaelInjuries", TRUE) ENDIF ENDIF IF NOT HAS_LABEL_BEEN_TRIGGERED("FadeOutEnd") IF GET_CUTSCENE_TIME() > ROUND(116.000000 * 1000.0) IF NOT IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_OUT(2000) ENDIF SET_LABEL_AS_TRIGGERED("FadeOutEnd", TRUE) ENDIF IF WAS_CUTSCENE_SKIPPED() SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, TRUE, FALSE) ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("MIC2_Car") IF DOES_ENTITY_EXIST(vehEnd) AND NOT IS_ENTITY_DEAD(vehEnd) SET_VEHICLE_POSITION(vehEnd, <<-858.4802, 154.9797, 63.5643>>, -5.3912) SET_VEHICLE_ON_GROUND_PROPERLY(vehEnd) ACTIVATE_PHYSICS(vehEnd) SET_VEHICLE_RADIO_ENABLED(vehEnd, TRUE) ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_CAMERA() IF NOT IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_OUT(0) ENDIF REPLAY_STOP_EVENT() SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) //SET_GAMEPLAY_CAM_RELATIVE_HEADING(64.7 - GET_ENTITY_HEADING(PLAYER_PED_ID())) SET_GAMEPLAY_CAM_RELATIVE_PITCH(-10.0) ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin") SAFE_DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) // IF DOES_ENTITY_EXIST(vehEnd) // AND NOT IS_ENTITY_DEAD(vehEnd) // SET_PED_POSITION(PLAYER_PED_ID(), <<-860.5838, 153.3469, 62.9417>>, 359.1850, FALSE) // TASK_ENTER_VEHICLE(PLAYER_PED_ID(), vehEnd, DEFAULT_TIME_NEVER_WARP, VS_DRIVER, PEDMOVE_WALK) // FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK) // ELSE // SET_PED_POSITION(PLAYER_PED_ID(), <<-854.4845, 147.4481, 61.7792>>, 180.0839, FALSE) // SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 750, 177.1006, FALSE) // FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK) // ENDIF ENDIF IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael") IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneWashFace) IF NOT DOES_CAM_EXIST(camAnim) camAnim = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE) ENDIF sceneWashFace = CREATE_SYNCHRONIZED_SCENE(sceneWashFacePos, sceneWashFaceRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_MICHAEL), sceneWashFace, sAnimDictMic2WashFace, "michael_washing_face", INSTANT_BLEND_IN, WALK_BLEND_OUT) PLAY_SYNCHRONIZED_CAM_ANIM(camAnim, sceneWashFace, "michael_washing_face_cam", sAnimDictMic2WashFace) SET_SYNCHRONIZED_SCENE_PHASE(sceneWashFace, 0.250) SET_SYNCHRONIZED_SCENE_RATE(sceneWashFace, 0.0) ENDIF ENDIF IF HAS_CUTSCENE_FINISHED() LOAD_SCENE_ADV(<<-803.2339, 169.1168, 75.7405>>, 20.0) IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneWashFace) IF NOT DOES_CAM_EXIST(camAnim) camAnim = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE) ENDIF sceneWashFace = CREATE_SYNCHRONIZED_SCENE(sceneWashFacePos, sceneWashFaceRot) TASK_SYNCHRONIZED_SCENE(PLAYER_PED(CHAR_MICHAEL), sceneWashFace, sAnimDictMic2WashFace, "michael_washing_face", INSTANT_BLEND_IN, WALK_BLEND_OUT) PLAY_SYNCHRONIZED_CAM_ANIM(camAnim, sceneWashFace, "michael_washing_face_cam", sAnimDictMic2WashFace) SET_SYNCHRONIZED_SCENE_PHASE(sceneWashFace, 0.250) SET_SYNCHRONIZED_SCENE_RATE(sceneWashFace, 0.0) ENDIF SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) //Clear Blood CLEAR_PED_BLOOD_DAMAGE(PLAYER_PED(CHAR_MICHAEL)) //Restore previous clothes //RESTORE_PLAYER_PED_VARIATIONS(PLAYER_PED(CHAR_MICHAEL)) WHILE NOT SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED(CHAR_MICHAEL), COMP_TYPE_OUTFIT, OUTFIT_P0_NAVY_SUIT, FALSE) WAIT_WITH_DEATH_CHECKS(0) ENDWHILE TRIGGER_MISSION_STATS_UI(TRUE, TRUE) HIDE_LOADING_ON_FADE_THIS_FRAME() iAdvanceTimer = GET_GAME_TIMER() + 30000 ADVANCE_CUTSCENE() ENDIF BREAK CASE 2 HIDE_LOADING_ON_FADE_THIS_FRAME() REQUEST_SCRIPT_AUDIO_BANK("FAM5_WASH_FACE") IF (IS_SYNCHRONIZED_SCENE_RUNNING(sceneWashFace) AND HAVE_ALL_STREAMING_REQUESTS_COMPLETED(PLAYER_PED(CHAR_MICHAEL))) OR GET_GAME_TIMER() > iAdvanceTimer OR GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watcher")) < 1 IF (g_bResultScreenDisplaying) OR GET_GAME_TIMER() > iAdvanceTimer OR GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watcher")) < 1 ADVANCE_CUTSCENE() ENDIF ENDIF BREAK CASE 3 HIDE_LOADING_ON_FADE_THIS_FRAME() IF (REQUEST_SCRIPT_AUDIO_BANK("FAM5_WASH_FACE") AND IS_SYNCHRONIZED_SCENE_RUNNING(sceneWashFace) AND HAVE_ALL_STREAMING_REQUESTS_COMPLETED(PLAYER_PED(CHAR_MICHAEL))) OR GET_GAME_TIMER() > iAdvanceTimer OR GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watcher")) < 1 IF (NOT g_bResultScreenDisplaying) OR GET_GAME_TIMER() > iAdvanceTimer OR GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watcher")) < 1 WAIT_WITH_DEATH_CHECKS(500) SET_CLOCK_TIME(11, 0, 0) // IF NOT DOES_CAM_EXIST(camMain) // camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) // ENDIF // // SET_CAM_PARAMS(camMain, // <<-804.204712, 168.047638, 76.793808>>, // <<5.523620, 0.0, -6.194664>>, // 45.0) // // SET_CAM_PARAMS(camMain, // <<-804.204712, 168.047638, 76.793808>>, // <<6.774823, 0.0, -8.368400>>, // 45.0, // 5000) // // SET_CAM_ACTIVE(camMain, TRUE) // // STOP_CAM_SHAKING(camMain, TRUE) REQUEST_PTFX_ASSET() WHILE NOT HAS_PTFX_ASSET_LOADED() WAIT(0) PRINTSTRING("LOADING PARTICLES") PRINTNL() ENDWHILE RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_SYNCHRONIZED_SCENE_PHASE(sceneWashFace, 0.250) SET_SYNCHRONIZED_SCENE_RATE(sceneWashFace, 1.0) START_PARTICLE_FX_NON_LOOPED_ON_PED_BONE("scr_pts_headsplash", PLAYER_PED_ID(), VECTOR_ZERO, VECTOR_ZERO, BONETAG_PH_L_HAND) IF NOT IS_SCREEN_FADED_IN() AND NOT IS_SCREEN_FADING_IN() DO_SCREEN_FADE_IN(2000) ENDIF ADVANCE_CUTSCENE() ENDIF ENDIF BREAK CASE 4 IF (IS_SYNCHRONIZED_SCENE_RUNNING(sceneWashFace) AND GET_SYNCHRONIZED_SCENE_PHASE(sceneWashFace) >= 0.875) OR NOT IS_SYNCHRONIZED_SCENE_RUNNING(sceneWashFace) RENDER_SCRIPT_CAMS(FALSE, TRUE, DEFAULT_INTERP_TO_FROM_GAME, FALSE) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) CLEAR_PED_TASKS(PLAYER_PED_ID()) SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2000, 21.0, FALSE) FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) ADVANCE_CUTSCENE() ENDIF BREAK CASE 5 IF NOT IS_INTERPOLATING_FROM_SCRIPT_CAMS() ADVANCE_STAGE() ENDIF BREAK ENDSWITCH ENDIF IF CLEANUP_STAGE() //Cleanup (Blips, peds, variables etc.) IF DOES_CAM_EXIST(camAnim) DESTROY_CAM(camAnim) ENDIF SAFE_DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) //SAFE_DELETE_PED(sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]) SAFE_REMOVE_BLIP(blipDestination) eMissionObjective = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) + 1) ENDIF ENDPROC //══════════════════════════════════╡ DEBUG ╞════════════════════════════════════ #IF IS_DEBUG_BUILD PROC debugRoutine() IF bAutoSkipping = TRUE IF ENUM_TO_INT(eMissionObjective) >= ENUM_TO_INT(eMissionObjectiveAutoJSkip) // IF IS_SCREEN_FADED_OUT() // DO_SCREEN_FADE_IN(500) // // WHILE IS_SCREEN_FADING_IN() // WAIT(0) // ENDWHILE // ENDIF eMissionObjectiveAutoJSkip = initMission bAutoSkipping = FALSE bSkipped = TRUE ENDIF ENDIF IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S) CLEAR_TEXT() //Cutscene WHILE NOT HAS_CUTSCENE_FINISHED() STOP_CUTSCENE(TRUE) PRINTLN("STOPPING CUTSCENE...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE REMOVE_CUTSCENE() WHILE HAS_CUTSCENE_LOADED() PRINTLN("REMOVING CUTSCENE...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE missionPassed() ELIF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F) CLEAR_TEXT() //Cutscene WHILE NOT HAS_CUTSCENE_FINISHED() STOP_CUTSCENE(TRUE) PRINTLN("STOPPING CUTSCENE...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE REMOVE_CUTSCENE() WHILE HAS_CUTSCENE_LOADED() PRINTLN("REMOVING CUTSCENE...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE missionFailed() ELIF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J) OR ENUM_TO_INT(eMissionObjective) < ENUM_TO_INT(eMissionObjectiveAutoJSkip) IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J) bSkipped = TRUE ENDIF IF NOT IS_SCREEN_FADED_OUT() AND NOT IS_SCREEN_FADING_OUT() DO_SCREEN_FADE_OUT(500) WHILE NOT IS_SCREEN_FADED_OUT() WAIT_WITH_DEATH_CHECKS(0) ENDWHILE ENDIF SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) CLEAR_TEXT() //Cutscene WHILE NOT HAS_CUTSCENE_FINISHED() STOP_CUTSCENE(TRUE) PRINTLN("STOPPING CUTSCENE...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE REMOVE_CUTSCENE() WHILE HAS_CUTSCENE_LOADED() PRINTLN("REMOVING CUTSCENE...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE ADVANCE_STAGE() TEXT_LABEL txtLabel txtLabel = "Stage: " txtLabel += ENUM_TO_INT(eMissionObjective) PRINTSTRING(txtLabel) PRINTNL() ELIF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P) OR LAUNCH_MISSION_STAGE_MENU(SkipMenuStruct, iStageSkipMenu, ENUM_TO_INT(eMissionObjective)) IF bAutoSkipping = FALSE bAutoSkipping = TRUE IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P) eMissionObjectiveAutoJSkip = INT_TO_ENUM(MissionObjective, ENUM_TO_INT(eMissionObjective) - 1) ELSE eMissionObjectiveAutoJSkip = INT_TO_ENUM(MissionObjective, iStageSkipMenu) ENDIF eMissionObjective = initMission DO_SCREEN_FADE_OUT(500) WHILE NOT IS_SCREEN_FADED_OUT() WAIT(0) ENDWHILE //Cutscene WHILE NOT HAS_CUTSCENE_FINISHED() STOP_CUTSCENE(TRUE) PRINTLN("STOPPING CUTSCENE...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE REMOVE_CUTSCENE() WHILE HAS_CUTSCENE_LOADED() PRINTLN("REMOVING CUTSCENE...") WAIT_WITH_DEATH_CHECKS(0) ENDWHILE MISSION_CLEANUP(TRUE) CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 10000.0, TRUE) ENDIF ENDIF ENDPROC #ENDIF //══════════════════════════════╡ MISSION SCRIPT ╞═══════════════════════════════ SCRIPT IF HAS_FORCE_CLEANUP_OCCURRED() IF DOES_ENTITY_EXIST(NOT_PLAYER_PED_ID()) AND NOT IS_PED_INJURED(NOT_PLAYER_PED_ID()) IF IS_ENTITY_ATTACHED(NOT_PLAYER_PED_ID()) g_bDontLetBuddiesReactToNextPlayerDeath = TRUE ENDIF SET_PED_KEEP_TASK(NOT_PLAYER_PED_ID(), TRUE) ENDIF IF DOES_ENTITY_EXIST(objHook) IF DOES_ENTITY_EXIST(PLAYER_PED(CHAR_MICHAEL)) AND IS_PED_INJURED(PLAYER_PED(CHAR_MICHAEL)) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL), FALSE), GET_ENTITY_COORDS(objHook)) < 5.0 AND ARE_COORDS_IN_3D_AREA(GET_ENTITY_COORDS(PLAYER_PED(CHAR_MICHAEL), FALSE), <<994.382935, -2150.192871, 31.976345>> - <<1.0, 1.0, 2.5>>, <<994.382935, -2150.192871, 31.976345>> + <<1.0, 1.0, 2.5>>) //Pin the ankle to the bottom of the hook VECTOR vRightFootAttach vRightFootAttach = <<-0.075, -0.1, -0.85>> ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(PLAYER_PED(CHAR_MICHAEL), objHook, GET_PED_BONE_INDEX(PLAYER_PED(CHAR_MICHAEL), BONETAG_R_FOOT), -1, vRightFootAttach, VECTOR_ZERO, VECTOR_ZERO, -1.0, TRUE, FALSE, FALSE, FALSE) ATTACH_ENTITY_TO_ENTITY_PHYSICALLY(PLAYER_PED(CHAR_MICHAEL), objHook, GET_PED_BONE_INDEX(PLAYER_PED(CHAR_MICHAEL), BONETAG_L_FOOT), -1, <<-vRightFootAttach.X, vRightFootAttach.Y, vRightFootAttach.Z>>, VECTOR_ZERO, VECTOR_ZERO, -1.0, TRUE, FALSE, FALSE, FALSE) ENDIF ENDIF Mission_Flow_Mission_Force_Cleanup() enumCharacterList eCharFail = GET_CURRENT_PLAYER_PED_ENUM() STORE_FAIL_WEAPON(PLAYER_PED_ID(), ENUM_TO_INT(eCharFail)) //Because Michael is restricted you are switched to Franklin, so we need to check if he's in the building IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<967.567566, -2195.217529, 25.539518>>, <<972.950378, -2098.676270, 49.888527>>, 70.0) MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<933.0538, -2162.6216, 29.5012>>, 96.4993) SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION(<<929.5760, -2162.3455, 29.3527>>, 175.2960) ENDIF SET_MICHAEL_UNAVAILABLE_ON_FAIL() MISSION_CLEANUP(FALSE, TRUE) ENDIF SET_MISSION_FLAG(TRUE) //═══════════════════════════════╡ MISSION LOOP ╞════════════════════════════════ #IF IS_DEBUG_BUILD MissionNames() #ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[3]) //Franklin IF NOT IS_PED_INJURED(g_sTriggerSceneAssets.ped[3]) //Transfer the global index to a local index and grab ownership of the entity. sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = g_sTriggerSceneAssets.ped[3] SET_ENTITY_AS_MISSION_ENTITY(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], TRUE, TRUE) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[0]) //Denise IF NOT IS_PED_INJURED(g_sTriggerSceneAssets.ped[0]) //Transfer the global index to a local index and grab ownership of the entity. pedDenise = g_sTriggerSceneAssets.ped[0] SET_ENTITY_AS_MISSION_ENTITY(pedDenise, TRUE, TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[1]) //Friend 1 IF NOT IS_PED_INJURED(g_sTriggerSceneAssets.ped[1]) //Transfer the global index to a local index and grab ownership of the entity. pedFriend1 = g_sTriggerSceneAssets.ped[1] SET_ENTITY_AS_MISSION_ENTITY(pedFriend1, TRUE, TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[2]) //Friend 2 IF NOT IS_PED_INJURED(g_sTriggerSceneAssets.ped[2]) //Transfer the global index to a local index and grab ownership of the entity. pedFriend2 = g_sTriggerSceneAssets.ped[2] SET_ENTITY_AS_MISSION_ENTITY(pedFriend2, TRUE, TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[0]) //Animated Door //Transfer the global index to a local index and grab ownership of the entity. objDoorAnim = g_sTriggerSceneAssets.object[0] SET_ENTITY_AS_MISSION_ENTITY(objDoorAnim, TRUE, TRUE) ENDIF IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[1]) //Real Door //Transfer the global index to a local index and grab ownership of the entity. objDoorReal = g_sTriggerSceneAssets.object[1] SET_ENTITY_AS_MISSION_ENTITY(objDoorReal, TRUE, TRUE) ENDIF IF NOT IS_REPLAY_IN_PROGRESS() //Safely reposition players vehicle IF GET_PLAYER_PED_ENUM(PLAYER_PED_ID()) != CHAR_TREVOR IF DOES_ENTITY_EXIST(PLAYER_PED_ID()) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()) != NULL vehFranklin = GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()) PRINTLN("vehIndex = GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())") ELIF GET_PLAYERS_LAST_VEHICLE() != NULL vehFranklin = GET_PLAYERS_LAST_VEHICLE() PRINTLN("vehIndex = GET_PLAYERS_LAST_VEHICLE()") IF IS_ENTITY_DEAD(vehFranklin) OR (NOT IS_ENTITY_DEAD(vehFranklin) AND GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(vehFranklin)) > 50.0) vehFranklin = NULL PRINTLN("vehIndex = NULL") ENDIF ENDIF IF DOES_ENTITY_EXIST(vehFranklin) SET_ENTITY_AS_MISSION_ENTITY(vehFranklin, TRUE, TRUE) PRINTLN("SET_ENTITY_AS_MISSION_ENTITY(vehIndex)") SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehFranklin, TRUE) ENDIF ENDIF ENDIF ENDIF IF HAS_THIS_CUTSCENE_LOADED("MIC_2_INT") PED_INDEX pedLastPlayer pedLastPlayer = PLAYER_PED_ID() IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN MAKE_SELECTOR_PED_SELECTION(sSelectorPeds, SELECTOR_PED_FRANKLIN) TAKE_CONTROL_OF_SELECTOR_PED(sSelectorPeds, TRUE, TRUE, TCF_CLEAR_TASK_INTERRUPT_CHECKS) SET_GAMEPLAY_CAM_FOLLOW_PED_THIS_UPDATE(pedLastPlayer) SET_LABEL_AS_TRIGGERED("SwitchFX[MIC_2_INT]", TRUE) ENDIF ENDIF IF DOES_ENTITY_EXIST(PLAYER_PED_ID()) IF NOT IS_PED_INJURED(PLAYER_PED_ID()) CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) ENDIF ENDIF REGISTER_ENTITY_FOR_CUTSCENE(pedIntro, "Knocked_Out_Ped", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, G_M_Y_FAMCA_01) IF DOES_ENTITY_EXIST(pedDenise) REGISTER_ENTITY_FOR_CUTSCENE(pedDenise, "DENISE", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) ENDIF IF DOES_ENTITY_EXIST(pedFriend1) REGISTER_ENTITY_FOR_CUTSCENE(pedFriend1, "Denises_Friend_1", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) ENDIF IF DOES_ENTITY_EXIST(pedFriend2) REGISTER_ENTITY_FOR_CUTSCENE(pedFriend2, "Denises_Friend_2", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_FRANKLIN IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]) REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_FRANKLIN)) ELSE REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN], "Franklin", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_FRANKLIN)) ENDIF ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() != CHAR_TREVOR IF DOES_ENTITY_EXIST(sSelectorPeds.pedID[SELECTOR_PED_TREVOR]) REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], "Trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_TREVOR)) ELSE REGISTER_ENTITY_FOR_CUTSCENE(sSelectorPeds.pedID[SELECTOR_PED_TREVOR], "Trevor", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, GET_PLAYER_PED_MODEL(CHAR_TREVOR)) ENDIF ENDIF SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) START_CUTSCENE() SET_EVERYONE_IGNORE_PLAYER(PLAYER_ID(), TRUE) bPreloaded = TRUE ENDIF ENDIF MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_MISSION_MICHAEL_2) PRINTLN("Michael 2 - Mission Launch Check") WHILE (TRUE) //Video Recorder REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_FreshMeat") // #IF IS_DEBUG_BUILD // SPLINE_CAM_EDITOR() // #ENDIF INT i //Fail Checks DEATH_CHECKS() // Temp fix to force the interior to uncap when you're close to it. IF bSetUncapped IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE), <<993.818237, -2180.848389, 31.164871>>) < 240.0 SET_INTERIOR_CAPPED(INTERIOR_V_ABATTOIR, FALSE) bSetUncapped = FALSE ENDIF ENDIF //Deadly deadly mincers IF NOT IS_SCREEN_FADED_OUT() IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<975.882324, -2166.031006, 28.599106>>, <<973.063477, -2165.699951, 30.599342>>, 1.75) OR (IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<993.639832, -2161.967773, 29.369600>>, <<991.663147, -2161.787354, 32.325283>>, 2.0) AND NOT IS_PED_JUMPING(PLAYER_PED_ID())) OR (IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<976.623962, -2119.597168, 30.455158>>, <<976.444641, -2121.593750, 33.455223>>, 2.0) AND NOT IS_PED_JUMPING(PLAYER_PED_ID())) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<998.518921, -2139.156494, 27.753616>>, <<998.213562, -2142.145020, 32.753616>>, 2.0) IF NOT GET_PLAYER_INVINCIBLE(PLAYER_ID()) AND NOT IS_ENTITY_ATTACHED(PLAYER_PED_ID()) IF NOT IS_PED_RAGDOLL(PLAYER_PED_ID()) SET_HIGH_FALL_TASK(PLAYER_PED_ID(), 10000, 10000) ENDIF IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<998.392700,-2140.970215,30.976324>>, <<10.0, 12.0, 2.5 >>) REQUEST_SCRIPT_AUDIO_BANK("Michael_2_Chopped_Up") ENDIF IF (HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2SetPiece1) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2SetPiece2)) OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<998.518921, -2139.156494, 27.753616>>, <<998.213562, -2142.145020, 32.753616>>, 2.0) IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<993.639832, -2161.967773, 29.369600>>, <<991.663147, -2161.787354, 32.325283>>, 2.0) START_PARTICLE_FX_NON_LOOPED_AT_COORD("scr_abattoir_ped_minced", <<992.7037, -2161.9229, 31.8097 - 1.0>>, VECTOR_ZERO) PLAY_SOUND_FROM_COORD(-1, "MINCER_FALL", <<992.7037, -2161.9229, 31.8097 - 1.0>>, "MICHAEL_2_SOUNDS") SET_CONTROL_SHAKE(PLAYER_CONTROL, 100, 100) //Cam IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) ENDIF SET_CAM_PARAMS(camMain, <<990.255493, -2156.313232, 31.377579>>, <<-1.060463, 0.0,-153.399750>>, 17.464592) SET_CAM_ACTIVE(camMain, TRUE) SHAKE_CAM(camMain, "ROAD_VIBRATION_SHAKE", 2.0) RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) HANG_UP_AND_PUT_AWAY_PHONE(TRUE) TASK_PLAY_ANIM_ADVANCED(PLAYER_PED_ID(), sAnimDictMic2SetPiece1, "goonfall_into_grinder", <<990.626, -2161.452, 31.691>>, <<0.0, 0.0, 90.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_OVERRIDE_PHYSICS | AF_IGNORE_GRAVITY | AF_HOLD_LAST_FRAME, 0.215, EULER_YXZ, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) WAIT_WITH_DEATH_CHECKS(1000) DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME) WHILE NOT IS_SCREEN_FADED_OUT() WAIT_WITH_DEATH_CHECKS(0) ENDWHILE CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) SET_PED_POSITION(PLAYER_PED_ID(), <<990.255493, -2156.313232, 31.377579>>, 0.0, FALSE) ELIF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<976.623962, -2119.597168, 30.455158>>, <<976.444641, -2121.593750, 33.455223>>, 2.0) START_PARTICLE_FX_NON_LOOPED_AT_COORD("scr_abattoir_ped_minced", <<976.72, -2120.27, 31.5>>, VECTOR_ZERO) PLAY_SOUND_FROM_COORD(-1, "MINCER_FALL", <<976.72, -2120.27, 31.5>>, "MICHAEL_2_SOUNDS") SET_CONTROL_SHAKE(PLAYER_CONTROL, 100, 100) //Cam IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) ENDIF SET_CAM_PARAMS(camMain, <<974.021423, -2116.019531, 32.641281>>, <<-3.792372, 0.0, -151.450134>>, 30.157396) SET_CAM_ACTIVE(camMain, TRUE) SHAKE_CAM(camMain, "ROAD_VIBRATION_SHAKE", 2.0) RENDER_SCRIPT_CAMS(TRUE, FALSE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) HANG_UP_AND_PUT_AWAY_PHONE(TRUE) TASK_PLAY_ANIM_ADVANCED(PLAYER_PED_ID(), sAnimDictMic2SetPiece2, "goon_fall_onto_conveyor", <<980.074, -2121.410, 29.482>>, <<0.0, 0.0, 0.0>>, INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_FORCE_START | AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_OVERRIDE_PHYSICS | AF_IGNORE_GRAVITY | AF_HOLD_LAST_FRAME, 0.559, EULER_YXZ, AIK_DISABLE_LEG_IK) FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) WAIT_WITH_DEATH_CHECKS(1000) DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME) WHILE NOT IS_SCREEN_FADED_OUT() WAIT_WITH_DEATH_CHECKS(0) ENDWHILE CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) SET_PED_POSITION(PLAYER_PED_ID(), <<974.021423, -2116.019531, 32.641281>>, 0.0, FALSE) ELIF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<998.518921, -2139.156494, 27.753616>>, <<998.213562, -2142.145020, 32.753616>>, 2.0) //Cam IF NOT DOES_CAM_EXIST(camMain) camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", TRUE) ENDIF SET_CAM_PARAMS(camMain, <<989.861145, -2144.378174, 31.004501>>, <<-3.873163, 0.0, -79.889450>>, 38.757084, 0) SET_CAM_PARAMS(camMain, <<989.861145, -2144.378174, 31.004501>>, <<-3.873163, 0.0, -79.889450>>, 35.423241, 1000, GRAPH_TYPE_DECEL, GRAPH_TYPE_DECEL) SHAKE_CAM(camMain, "ROAD_VIBRATION_SHAKE", 1.0) RENDER_SCRIPT_CAMS(TRUE, FALSE) START_PARTICLE_FX_NON_LOOPED_ON_ENTITY("scr_abattoir_ped_sliced", PLAYER_PED_ID(), <<0.0, -0.1, -1.0>>, <<0.0, 0.0, 84.0>>, 0.8) SET_CONTROL_SHAKE(PLAYER_CONTROL, 100, 100) IF REQUEST_SCRIPT_AUDIO_BANK("Michael_2_Chopped_Up") PLAY_SOUND_FROM_ENTITY(-1, "MIC_2_CHOPPED_UP_JUMPIN_MASTER", PLAYER_PED_ID()) ENDIF WAIT_WITH_DEATH_CHECKS(1500) IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN eMissionFail = failFranklinDied ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL eMissionFail = failMichaelDied ENDIF missionFailed() ENDIF ENDIF SET_ENTITY_HEALTH(PLAYER_PED_ID(), 0) ENDIF ENDIF ENDIF //Interior Pinning - Abattoir IF intAbattoir = NULL intAbattoir = GET_INTERIOR_AT_COORDS_WITH_TYPE(<<990.9518, -2178.6208, 29.0257>>, "v_abattoir") ENDIF IF intAbattoir != NULL IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = intAbattoir IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_LEAVE_ANY_VEHICLE) <> WAITING_TO_START_TASK AND GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_LEAVE_ANY_VEHICLE) <> PERFORMING_TASK AND GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_LEAVE_ANY_VEHICLE) <> DORMANT_TASK TASK_LEAVE_ANY_VEHICLE(PLAYER_PED_ID()) ENDIF ENDIF DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ENTER) ENDIF ENDIF IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<961.281494, -2217.055420, 24.568760>>, <<974.338867, -2067.088379, 79.930626>>, 120.0) IF intAbattoir != NULL IF bPinnedAbattoir = FALSE PIN_INTERIOR_IN_MEMORY(intAbattoir) IF NOT IS_INTERIOR_READY(intAbattoir) PRINTLN("PINNING INTERIOR...") ELSE bPinnedAbattoir = TRUE ENDIF ENDIF ENDIF ELIF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<959.795593, -2254.591309, 24.537045>>, <<979.547913, -2022.923828, 87.146744>>, 150.0) IF intAbattoir <> NULL IF bPinnedAbattoir = TRUE SAFE_DELETE_OBJECT(objCow) //Fix for bug 2022984 UNPIN_INTERIOR(intAbattoir) bPinnedAbattoir = FALSE ENDIF ENDIF ENDIF IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<976.138733, -2084.538330, 29.001110>>, <<966.163025, -2202.844727, 44.551697>>, 100.0) IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(iEntranceDoor) ADD_DOOR_TO_SYSTEM(iEntranceDoor, V_ILEV_ABBMAINDOOR, <<962.0958, -2183.8306, 31.0619>>) ENDIF IF IS_DOOR_REGISTERED_WITH_SYSTEM(iEntranceDoor) IF DOOR_SYSTEM_GET_OPEN_RATIO(iEntranceDoor) <> 1.0 OR DOOR_SYSTEM_GET_DOOR_STATE(iEntranceDoor) != DOORSTATE_FORCE_LOCKED_THIS_FRAME DOOR_SYSTEM_SET_OPEN_RATIO(iEntranceDoor, 1.0, FALSE, FALSE) DOOR_SYSTEM_SET_DOOR_STATE(iEntranceDoor, DOORSTATE_FORCE_LOCKED_THIS_FRAME, FALSE, TRUE) ENDIF ENDIF ENDIF // IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL // IF DOES_ENTITY_EXIST(objHook) // IF NOT (IS_ENTITY_ATTACHED_TO_ENTITY(PLAYER_PED(CHAR_MICHAEL), objHook) // AND bReattach = FALSE) // IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = intAbattoir // SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisablePlayerAutoVaulting, TRUE) // DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_JUMP) // //DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_FRONTEND_X) // ENDIF // ENDIF // ENDIF // ENDIF //Shutter Door IF eMissionObjective >= stageMichaelEscape AND eMissionObjective < stageCutEnd IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<962.529602, -2105.850342, 30.0>>, <<50.0, 40.0, 30.0>>) IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(iExitDoor) ADD_DOOR_TO_SYSTEM(iExitDoor, PROP_ABAT_SLIDE, <<962.9084, -2105.8137, 34.6432>>) ENDIF IF IS_DOOR_REGISTERED_WITH_SYSTEM(iExitDoor) IF DOOR_SYSTEM_GET_OPEN_RATIO(iExitDoor) <> 1.0 OR DOOR_SYSTEM_GET_DOOR_STATE(iExitDoor) != DOORSTATE_FORCE_LOCKED_THIS_FRAME DOOR_SYSTEM_SET_OPEN_RATIO(iExitDoor, 1.0, FALSE, FALSE) DOOR_SYSTEM_SET_DOOR_STATE(iExitDoor, DOORSTATE_FORCE_LOCKED_THIS_FRAME, FALSE, TRUE) ENDIF ENDIF ENDIF ELSE IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(iExitDoor) ADD_DOOR_TO_SYSTEM(iExitDoor, PROP_ABAT_SLIDE, <<962.9084, -2105.8137, 34.6432>>) ENDIF IF IS_DOOR_REGISTERED_WITH_SYSTEM(iExitDoor) IF DOOR_SYSTEM_GET_OPEN_RATIO(iExitDoor) <> 0.0 OR DOOR_SYSTEM_GET_DOOR_STATE(iExitDoor) != DOORSTATE_FORCE_LOCKED_THIS_FRAME DOOR_SYSTEM_SET_OPEN_RATIO(iExitDoor, 0.0, FALSE, FALSE) DOOR_SYSTEM_SET_DOOR_STATE(iExitDoor, DOORSTATE_FORCE_LOCKED_THIS_FRAME, FALSE, TRUE) ENDIF ENDIF ENDIF //Animated Machines IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = intAbattoir IF NOT DOES_ENTITY_EXIST(objGrinder) IF bGrabGrinder = FALSE IF iDoesObjectOfTypeExistAtCoords = 0 IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<993.48, -2161.49, 29.96>>, 2.0, V_ILEV_ABMINCER) objGrinder = GET_CLOSEST_OBJECT_OF_TYPE(<<993.48, -2161.49, 29.96>>, 2.0, V_ILEV_ABMINCER) IF objGrinder != NULL bGrabGrinder = TRUE ENDIF ENDIF ENDIF ENDIF ELSE IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMachine) IF NOT IS_ENTITY_PLAYING_ANIM(objGrinder, sAnimDictMachine, "beefsplitter_loop") IF DOES_ENTITY_HAVE_DRAWABLE(objGrinder) PLAY_ENTITY_ANIM(objGrinder, "beefsplitter_loop", sAnimDictMachine, INSTANT_BLEND_IN, TRUE, FALSE) SET_CAN_CLIMB_ON_ENTITY(objGrinder, FALSE) ENDIF ENDIF ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(objCutter) IF bGrabCutter = FALSE IF iDoesObjectOfTypeExistAtCoords = 1 IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<998.49, -2140.63, 28.47>>, 2.0, P_BEEFSPLITTER_S) objCutter = GET_CLOSEST_OBJECT_OF_TYPE(<<998.49, -2140.63, 28.47>>, 2.0, P_BEEFSPLITTER_S) #IF IS_DEBUG_BUILD PRINTLN("objCutter = GET_CLOSEST_OBJECT_OF_TYPE(<<998.49, -2140.63, 28.47>>, 2.0, P_BEEFSPLITTER_S)") #ENDIF IF objCutter != NULL bGrabCutter = TRUE #IF IS_DEBUG_BUILD PRINTLN("bGrabCutter = TRUE") #ENDIF ENDIF ENDIF ENDIF ENDIF ELSE IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMachine) IF NOT IS_ENTITY_PLAYING_ANIM(objCutter, sAnimDictMachine, "beefsplitter_loop") IF DOES_ENTITY_HAVE_DRAWABLE(objCutter) PLAY_ENTITY_ANIM(objCutter, "beefsplitter_loop", sAnimDictMachine, INSTANT_BLEND_IN, TRUE, FALSE) #IF IS_DEBUG_BUILD PRINTLN("PLAY_ENTITY_ANIM(objCutter, 'beefsplitter_loop', sAnimDictMachine, INSTANT_BLEND_IN, TRUE, FALSE)") #ENDIF SET_CAN_CLIMB_ON_ENTITY(objCutter, FALSE) ENDIF ENDIF ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(objMincer) IF bGrabMincer = FALSE IF iDoesObjectOfTypeExistAtCoords = 2 IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<975.99, -2120.83, 30.94>>, 2.0, V_ILEV_ABMINCER) objMincer = GET_CLOSEST_OBJECT_OF_TYPE(<<975.99, -2120.83, 30.94>>, 2.0, V_ILEV_ABMINCER) IF objMincer != NULL bGrabMincer = TRUE ENDIF ENDIF ENDIF ENDIF ELSE IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMachine) IF NOT IS_ENTITY_PLAYING_ANIM(objMincer, sAnimDictMachine, "beefsplitter_loop") IF DOES_ENTITY_HAVE_DRAWABLE(objMincer) PLAY_ENTITY_ANIM(objMincer, "beefsplitter_loop", sAnimDictMachine, INSTANT_BLEND_IN, TRUE, FALSE) SET_CAN_CLIMB_ON_ENTITY(objMincer, FALSE) ENDIF ENDIF ENDIF ENDIF iDoesObjectOfTypeExistAtCoords++ IF iDoesObjectOfTypeExistAtCoords > 2 iDoesObjectOfTypeExistAtCoords = 0 ENDIF ELSE IF DOES_ENTITY_EXIST(objGrinder) SET_OBJECT_AS_NO_LONGER_NEEDED(objGrinder) bGrabGrinder = FALSE ENDIF IF DOES_ENTITY_EXIST(objCutter) SET_OBJECT_AS_NO_LONGER_NEEDED(objCutter) bGrabCutter = FALSE ENDIF IF DOES_ENTITY_EXIST(objMincer) SET_OBJECT_AS_NO_LONGER_NEEDED(objMincer) bGrabMincer = FALSE ENDIF IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<962.529602, -2105.850342, 30.0>>, <<50.0, 40.0, 30.0>>) UNLOAD_ANIM_DICT(sAnimDictMachine) ENDIF ENDIF //Blips UPDATE_BLIP_FLASH_TIMERS() //Switch SWITCH_CONTROL() //Rail IF eMissionObjective > initMission AND eMissionObjective <= stageMichaelEscape AND NOT IS_CUTSCENE_PLAYING() IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Hook) UPDATE_RAIL_MOVE() IF bOkToMoveRail IF iTimerNode <> iCurrentNode fDistFromFinalNode = 0 FOR i = iCurrentNode + 1 TO iRailNodeToStopAt fDistFromFinalNode += GET_DISTANCE_BETWEEN_COORDS(sRailNodes[CLAMP_INT(i, 0, COUNT_OF(sRailNodes) - 1)].vPos, sRailNodes[CLAMP_INT(i + 1, 0, COUNT_OF(sRailNodes) - 1)].vPos) ENDFOR iTimerNode = iCurrentNode ENDIF fDistFromCurrentNode = GET_DISTANCE_BETWEEN_COORDS(vRailCurrent, sRailNodes[CLAMP_INT(iCurrentNode + 1, 0, COUNT_OF(sRailNodes) - 1)].vPos) IF IS_SELECTOR_ONSCREEN(TRUE) SET_SWITCH_WHEEL_AND_STATS_UNDER_HUD_THIS_FRAME() ELIF IS_SELECTOR_ONSCREEN(FALSE) SET_SWITCH_WHEEL_UNDER_HUD_THIS_FRAME() ELIF (IS_PHONE_ONSCREEN(TRUE) OR IS_CELLPHONE_TRACKIFY_IN_USE()) AND NOT (IS_PLAYER_IN_FIRST_PERSON_CAMERA()) SET_PHONE_UNDER_HUD_THIS_FRAME() ENDIF IF NOT IS_PLAYER_SWITCH_IN_PROGRESS() AND eSwitchCamState = SWITCH_CAM_IDLE IF GET_IS_HIDEF() OR NOT IS_PHONE_ONSCREEN(TRUE) IF NOT g_bCurrentlyUsingTelescope DRAW_GENERIC_METER(ROUND(fDistFromFinalNode + fDistFromCurrentNode), ROUND(fDistTotalFirstFinalNode), "MCH2_TIMER", HUD_COLOUR_WHITE, -1, HUDORDER_TOP) ENDIF ENDIF ENDIF ENDIF //PRINTLN("iTotalRailNodes - iCurrentNode / iTotalRailNodes = ", iTotalRailNodes - iCurrentNode, ", ", iTotalRailNodes) ENDIF ENDIF IF bBlood = FALSE OR pedBlood != GET_CURRENT_PLAYER_PED_ENUM() IF DOES_ENTITY_EXIST(PLAYER_PED(CHAR_MICHAEL)) AND NOT IS_PED_INJURED(PLAYER_PED(CHAR_MICHAEL)) IF DOES_ENTITY_HAVE_DRAWABLE(PLAYER_PED(CHAR_MICHAEL)) AND DOES_ENTITY_HAVE_PHYSICS(PLAYER_PED(CHAR_MICHAEL)) IF IS_ENTITY_ON_SCREEN(PLAYER_PED(CHAR_MICHAEL)) AND NOT IS_SCREEN_FADED_OUT() APPLY_PED_DAMAGE_PACK(PLAYER_PED(CHAR_MICHAEL), "SCR_Torture", 0.0, 1.0) pedBlood = GET_CURRENT_PLAYER_PED_ENUM() bBlood = TRUE #IF IS_DEBUG_BUILD PRINTLN("APPLY_PED_BLOOD_DAMAGE_BY_ZONE - bBlood = TRUE") #ENDIF ENDIF ENDIF ENDIF ENDIF //Combat REPEAT COUNT_OF(sEnemyShootout) i ADVANCE_COMBAT_UPDATE(sEnemyShootout[i]) ENDREPEAT REPEAT COUNT_OF(sEnemyEscape) i ADVANCE_COMBAT_UPDATE(sEnemyEscape[i]) ENDREPEAT REPEAT COUNT_OF(sEnemyBackup) i ADVANCE_COMBAT_UPDATE(sEnemyBackup[i]) ENDREPEAT //Debug Routine #IF IS_DEBUG_BUILD debugRoutine() #ENDIF //Hide HUD/Radar IF bRadar = FALSE DISPLAY_RADAR(FALSE) DISPLAY_HUD(FALSE) ELSE DISPLAY_RADAR(TRUE) DISPLAY_HUD(TRUE) ENDIF //Phone // IF NOT IS_GAMEPLAY_CAM_RENDERING() // #IF IS_DEBUG_BUILD AND NOT IS_CAM_RENDERING(GET_DEBUG_CAM()) #ENDIF // AND NOT IS_PED_GETTING_INTO_A_VEHICLE(PLAYER_PED_ID()) //Work around for bug 946097 // AND NOT GET_IS_TASK_ACTIVE(PLAYER_PED_ID(), CODE_TASK_EXIT_VEHICLE) // AND IS_PLAYER_SWITCH_IN_PROGRESS() // HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_WEAPON_ICON) // HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH) // HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_CASH_CHANGE) // HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_AREA_NAME) // HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_DISTRICT_NAME) // HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_STREET_NAME) // HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_VEHICLE_NAME) // // IF NOT IS_CELLPHONE_DISABLED() // DISABLE_CELLPHONE(TRUE) PRINTLN("DISABLE_CELLPHONE(TRUE) 1") // ENDIF // ENDIF //Audio Scene IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL AND eMissionObjective < stageMichaelEscape IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_MICHAEL_ON_MEATHOOK") START_AUDIO_SCENE("MI_2_MICHAEL_ON_MEATHOOK") ENDIF ELSE IF IS_AUDIO_SCENE_ACTIVE("MI_2_MICHAEL_ON_MEATHOOK") STOP_AUDIO_SCENE("MI_2_MICHAEL_ON_MEATHOOK") ENDIF ENDIF IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN AND eMissionObjective = stageFindMichael IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_AUDIO_SCENE_ACTIVE("MI_2_DRIVE_TO_SLAUGHTERHOUSE") STOP_AUDIO_SCENE("MI_2_DRIVE_TO_SLAUGHTERHOUSE") ENDIF ELSE IF NOT IS_AUDIO_SCENE_ACTIVE("MI_2_DRIVE_TO_SLAUGHTERHOUSE") START_AUDIO_SCENE("MI_2_DRIVE_TO_SLAUGHTERHOUSE") ENDIF ENDIF ELSE IF IS_AUDIO_SCENE_ACTIVE("MI_2_DRIVE_TO_SLAUGHTERHOUSE") STOP_AUDIO_SCENE("MI_2_DRIVE_TO_SLAUGHTERHOUSE") ENDIF ENDIF //Temporary Radar IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL AND eMissionObjective < stageMichaelEscape AND NOT IS_PLAYER_SWITCH_IN_PROGRESS() // IF NOT IS_CELLPHONE_DISABLED() // DISABLE_CELLPHONE(TRUE) PRINTLN("DISABLE_CELLPHONE(TRUE) 2") // ENDIF DISPLAY_RADAR(FALSE) ELSE IF eMissionObjective <> stageCutIntro AND NOT (eMissionObjective = stageFindMichael AND iCutsceneStage = 0) IF IS_GAMEPLAY_CAM_RENDERING() IF IS_CELLPHONE_DISABLED() IF NOT IS_PLAYER_SWITCH_IN_PROGRESS() DISABLE_CELLPHONE(FALSE) PRINTLN("DISABLE_CELLPHONE(FALSE) 1") ENDIF ENDIF ENDIF ENDIF ENDIF //Rolling Start IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) OR DOES_CAM_EXIST(scsSwitchCam_MichaelToFranklin.ciSpline) IF DOES_ENTITY_EXIST(vehFranklin) AND NOT IS_ENTITY_DEAD(vehFranklin) AND IS_PED_IN_VEHICLE(PLAYER_PED(CHAR_FRANKLIN), vehFranklin) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehFranklin) IF NOT HAS_LABEL_BEEN_TRIGGERED("RollingStartSkip") SWITCH_STATE switchState INT switchIndex //[MF] Make sure we're not in a custom switch cam. IF eSwitchCamState = SWITCH_CAM_IDLE switchState = GET_PLAYER_SWITCH_STATE() switchIndex = GET_PLAYER_SWITCH_JUMP_CUT_INDEX() ENDIF IF (switchState = SWITCH_STATE_JUMPCUT_DESCENT AND switchIndex = 0) OR (DOES_CAM_EXIST(scsSwitchCam_MichaelToFranklin.ciSpline) AND GET_CAM_SPLINE_NODE_INDEX(scsSwitchCam_MichaelToFranklin.ciSpline) >= scsSwitchCam_MichaelToFranklin.iCamSwitchFocusNode) PRINTLN("STARTING FRANKLIN'S CAR MOVING...") SET_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehFranklin, GET_TOTAL_DURATION_OF_VEHICLE_RECORDING(001, "ALrollingstart") - 4000.0) SET_PLAYBACK_SPEED(vehFranklin, 1.0) FORCE_PLAYBACK_RECORDED_VEHICLE_UPDATE(vehFranklin) SET_PLAYBACK_TO_USE_AI(vehFranklin) //START_PLAYBACK_RECORDED_VEHICLE_USING_AI(vehFranklin, 001, "ALrollingstart", GET_VEHICLE_ESTIMATED_MAX_SPEED(vehFranklin) / 2.0) SET_VEHICLE_FORWARD_SPEED(vehFranklin, GET_VEHICLE_ESTIMATED_MAX_SPEED(vehFranklin) / 2.0) SET_VEHICLE_ENGINE_ON(vehFranklin, TRUE, TRUE) CLEAR_AREA(GET_ENTITY_COORDS(vehFranklin, FALSE), 100.0, TRUE) SET_LABEL_AS_TRIGGERED("RollingStartSkip", TRUE) ENDIF ELSE IF NOT IS_PLAYER_SWITCH_IN_PROGRESS() AND NOT IS_PLAYER_PED_SWITCH_IN_PROGRESS() AND eSwitchCamState = SWITCH_CAM_IDLE IF HAS_LABEL_BEEN_TRIGGERED("RollingStartSkip") INT iXValue, iYValue iXValue = ROUND(GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_VEH_MOVE_LR) * 255.0) iYValue = ROUND(GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_VEH_MOVE_UD) * 255.0) IF (iXValue < -50 OR iXValue > 50) OR (iYValue < -50 OR iYValue > 50) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_AIM) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_EXIT) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_HORN) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_BRAKE) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_ATTACK) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_ATTACK2) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_CIN_CAM) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_HEADLIGHT) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_ACCELERATE) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_HANDBRAKE) OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_VEH_DUCK) //FLOAT fSpeed = GET_ENTITY_SPEED(vehFranklin) STOP_PLAYBACK_RECORDED_VEHICLE(vehFranklin) //SET_VEHICLE_FORWARD_SPEED(vehFranklin, fSpeed) SET_LABEL_AS_TRIGGERED("RollingStartStop", TRUE) ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF ENDIF //Bin Bag Items // IF eMissionObjective >= stageAbattoirShootout AND eMissionObjective <= stageBackToMichaels // IF NOT DOES_ENTITY_EXIST(objBinBag) // IF NOT HAS_LABEL_BEEN_TRIGGERED("ReclaimedGuns") // IF NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_WEAPON_1") // AND NOT HAS_LABEL_BEEN_TRIGGERED("MCH2_WEAPON_2") // IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<968.464600, -2122.092773, 32.316872>>, <<21.0, 10.0, 3.0>>) // IF HAS_MODEL_LOADED_CHECK(PROP_RUB_BINBAG_SD_02) // objBinBag = CREATE_OBJECT(PROP_RUB_BINBAG_SD_02, <<948.190002, -2124.189941, 31.780001>>) // // SET_ENTITY_COORDS(objBinBag, <<948.190002, -2124.189941, 31.780001>>) // SET_ENTITY_ROTATION(objBinBag, <<0.0, 0.0, 9.167327>>) // // FREEZE_ENTITY_POSITION(objBinBag, TRUE) // // SET_MODEL_AS_NO_LONGER_NEEDED(PROP_RUB_BINBAG_SD_02) // ENDIF // ENDIF // ENDIF // ENDIF // ELSE // IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<963.873108, -2124.677002, 33.467842>>, <<4.0, 4.0, 3.0>>) // IF NOT HAS_LABEL_BEEN_TRIGGERED("ReclaimedGuns") // IF NOT DOES_BLIP_EXIST(blipGuns) // blipGuns = CREATE_BLIP_FOR_OBJECT(objBinBag) // // PRINT_HELP_ADV("MCH2_STASHHLP") // ENDIF // ENDIF // // IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() // AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) // IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL // PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_WEAPON", "MCH2_WEAPON_1") // ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN // PLAY_SINGLE_LINE_FROM_CONVERSATION_ADV("MCH2_WEAPON", "MCH2_WEAPON_2") // ENDIF // ENDIF // ENDIF // // IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<948.621826, -2124.189697, 33.438431>>, <<1.75, 1.75, 3.0>>) // OR NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<948.621826, -2124.189697, 25.438431>>, <<50.0, 50.0, 50.0>>) // IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<948.621826, -2124.189697, 33.438431>>, <<1.75, 1.75, 3.0>>) // PLAY_SOUND_FROM_COORD(-1, "PICKUP_WEAPON_DEFAULT", GET_ENTITY_COORDS(objBinBag), "HUD_FRONTEND_WEAPONS_PICKUPS_SOUNDSET") // // IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL // RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT(PLAYER_PED(CHAR_MICHAEL), FALSE) // ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN // SET_LABEL_AS_TRIGGERED("RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT", TRUE) // ENDIF // ENDIF // // SAFE_DELETE_OBJECT(objBinBag) // SAFE_REMOVE_BLIP(blipGuns) // // SET_LABEL_AS_TRIGGERED("ReclaimedGuns", TRUE) // ENDIF // ENDIF // // IF HAS_LABEL_BEEN_TRIGGERED("RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT") // IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) // AND IS_PED_IN_VEHICLE(NOT_PLAYER_PED_ID(), GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())) // IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() // AND (NOT IS_MESSAGE_BEING_DISPLAYED() OR GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) = 0) // CREATE_CONVERSATION_ADV("MCH2_WEAPON2") // // RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT(PLAYER_PED(CHAR_MICHAEL), FALSE) // // SET_LABEL_AS_TRIGGERED("RESTORE_PLAYER_PED_WEAPONS_IN_SNAPSHOT", FALSE) // ENDIF // ENDIF // ENDIF // ENDIF IF bPhoneSwitch IF IS_PLAYER_SWITCH_IN_PROGRESS() AND bFranklinToMichael = FALSE AND GET_PLAYER_SWITCH_TYPE() != SWITCH_TYPE_SHORT SWITCH_STATE switchState IF IS_PLAYER_SWITCH_IN_PROGRESS() switchState = GET_PLAYER_SWITCH_STATE() ENDIF PRINTLN("switchState = ", switchState) IF (NOT IS_PLAYER_SWITCH_IN_PROGRESS() AND IS_GAMEPLAY_CAM_RENDERING()) OR (IS_PLAYER_SWITCH_IN_PROGRESS() AND switchState >= SWITCH_STATE_OUTRO_HOLD) DISABLE_CELLPHONE(FALSE) PRINTLN("DISABLE_CELLPHONE(FALSE) 2") LAUNCH_TRACKIFY_IMMEDIATELY(TRUE) bPhoneSwitch = FALSE PRINTLN("bPhoneSwitch = FALSE LAUNCH_TRACKIFY_IMMEDIATELY()") ENDIF ENDIF ENDIF IF bHaltVehicle VEHICLE_INDEX vehBringToHalt vehBringToHalt = GET_VEHICLE_PED_IS_IN(PLAYER_PED(CHAR_FRANKLIN)) IF DOES_ENTITY_EXIST(vehBringToHalt) AND NOT IS_ENTITY_DEAD(vehBringToHalt) IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(vehBringToHalt, DEFAULT_VEH_STOPPING_DISTANCE * 2, 1, 0.5, TRUE) SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) bHaltVehicle = FALSE ENDIF ELSE SAFE_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) bHaltVehicle = FALSE ENDIF ENDIF //Stats INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(PLAYER_PED_ID(), MIC2_DAMAGE) IF GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()) != NULL INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()), MIC2_MAX_SPEED) INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()), MIC2_CAR_DAMAGE) ELSE INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(NULL, MIC2_MAX_SPEED) INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(NULL, MIC2_CAR_DAMAGE) ENDIF //Kills a Ped INT iEventCount = 0 STRUCT_ENTITY_ID sei = CONSTRUCT_ENTITY_ID() EVENT_NAMES eventType REPEAT GET_NUMBER_OF_EVENTS(SCRIPT_EVENT_QUEUE_AI) iEventCount eventType = GET_EVENT_AT_INDEX(SCRIPT_EVENT_QUEUE_AI, iEventCount) SWITCH (eventType) CASE EVENT_ENTITY_DESTROYED //Figure out what type of entity it is GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_AI, iEventCount, sei, SIZE_OF(STRUCT_ENTITY_ID)) IF DOES_ENTITY_EXIST(sei.EntityId)//sei.EntityId IF IS_ENTITY_A_PED(sei.EntityId) IF IS_ENTITY_A_MISSION_ENTITY(sei.EntityId) INFORM_MISSION_STATS_OF_INCREMENT(MIC2_KILLS) // ELSE // INFORM_MISSION_STATS_OF_INCREMENT(MIC2_INNOCENTS_KILLED) ENDIF ENDIF ENDIF BREAK ENDSWITCH ENDREPEAT // WEAPON_TYPE wtCurrentUpdate = WEAPONTYPE_UNARMED // GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), wtCurrentUpdate) // // IF wtCurrent != wtCurrentUpdate // OR iAmmo = -1 // wtCurrent = wtCurrentUpdate // iAmmo = GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), wtCurrent) // ENDIF // // IF GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), wtCurrent) < iAmmo // INT iDifference = iAmmo - GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), wtCurrent) // // REPEAT iDifference i // INFORM_MISSION_STATS_OF_INCREMENT(MIC2_BULLETS_FIRED) // ENDREPEAT // // iAmmo = GET_AMMO_IN_PED_WEAPON(PLAYER_PED_ID(), wtCurrent) // ENDIF // IF IS_CELLPHONE_TRACKIFY_IN_USE() // INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(MIC2_TRACKIFY_APP_USE) // ELSE // INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED(FALSE, MIC2_TRACKIFY_APP_USE) // ENDIF IF IS_WAYPOINT_ACTIVE() INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(MIC2_WAYPOINT_USED) ENDIF // IF IS_SPECIAL_ABILITY_ACTIVE(PLAYER_ID()) // INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(MIC2_SPECIAL_ABILITY_TIME) // ELSE // INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED() // ENDIF //INFORM_MISSION_STATS_OF_INCREMENT(MIC2_) //Stop peds attacking player SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(PLAYER_ID()) LOAD_UNLOAD_ASSETS() AUDIO_CONTROLLER() //Instance Priority IF eMissionObjective >= stageAbattoirShootout AND eMissionObjective <= stageMichaelEscape SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_SHOOTING) ELIF eMissionObjective = stageTriadsChase SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_DRIVING) ELSE SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE) ENDIF //Replay Camera SWITCH eMissionObjective CASE stageAbattoirShootout CASE stageSwitchToMichael CASE stageMichaelEscape CASE stageMichaelFree REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2220869 BREAK ENDSWITCH //Objective switch SWITCH eMissionObjective CASE initMission initialiseMission() BREAK CASE stageCutIntro IF HAS_MODEL_LOADED_CHECK(GET_PLAYER_PED_MODEL(CHAR_FRANKLIN)) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2LeadOut) AND HAS_ANIM_DICT_LOADED_CHECK("cellphone@") AND HAS_MODEL_LOADED_CHECK(Prop_phone_ING_03) AND HAS_MODEL_LOADED_CHECK(mn_FrankPhoneDisplay) cutIntro() ENDIF BREAK CASE stageFindMichael IF HAS_MODEL_LOADED_CHECK(GET_PLAYER_PED_MODEL(CHAR_MICHAEL)) AND HAS_MODEL_LOADED_CHECK(G_M_M_CHIGOON_01) AND HAS_MODEL_LOADED_CHECK(G_M_M_CHIGOON_02) AND HAS_MODEL_LOADED_CHECK(CSB_CHIN_GOON) AND HAS_MODEL_LOADED_CHECK(PROP_LD_HOOK) AND HAS_MODEL_LOADED_CHECK(PROP_CS_PADLOCK) AND HAS_MODEL_LOADED_CHECK(PROP_CS_LEG_CHAIN_01) AND HAS_MODEL_LOADED_CHECK(BISON) AND HAS_MODEL_LOADED_CHECK(Prop_phone_ING_03) AND HAS_MODEL_LOADED_CHECK(mn_FrankPhoneDisplay) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Hook) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Smoking) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictIdle1) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictIdle2) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictIdle3) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictIdle4) AND HAS_ANIM_DICT_LOADED_CHECK("shake_cam_all@") AND HAS_ANIM_DICT_LOADED_CHECK("cellphone@") AND HAS_CLIP_SET_LOADED("MOVE_STRAFE@COP") AND HAS_RECORDING_LOADED_CHECK(001, "ALrollingstart") findMichael() ENDIF BREAK CASE stageAbattoirShootout IF HAS_MODEL_LOADED_CHECK(G_M_M_CHIGOON_01) AND HAS_MODEL_LOADED_CHECK(G_M_M_CHIGOON_02) AND HAS_MODEL_LOADED_CHECK(BISON) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Hook) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2SetPiece1) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Smoking) AND HAS_CLIP_SET_LOADED("move_ped_strafing") AND HAS_CLIP_SET_LOADED("MOVE_STRAFE@COP") abattoirShootout() ENDIF BREAK CASE stageSwitchToMichael IF HAS_MODEL_LOADED_CHECK(GET_WEAPONTYPE_MODEL(WEAPONTYPE_COMBATPISTOL)) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Hook) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Switch) AND HAS_CLIP_SET_LOADED(GET_CLIP_SET_FOR_SCRIPTED_GUN_TASK(SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN)) AND HAS_CLIP_SET_LOADED("MOVE_STRAFE@COP") switchToMichael() ENDIF BREAK CASE stageMichaelEscape IF HAS_MODEL_LOADED_CHECK(GET_WEAPONTYPE_MODEL(WEAPONTYPE_COMBATPISTOL)) AND HAS_MODEL_LOADED_CHECK(G_M_M_CHIGOON_01) AND HAS_MODEL_LOADED_CHECK(G_M_M_CHIGOON_02) AND HAS_MODEL_LOADED_CHECK(FELTZER2) AND HAS_MODEL_LOADED_CHECK(COQUETTE) AND HAS_MODEL_LOADED_CHECK(BISON) AND HAS_MODEL_LOADED_CHECK(PROP_WATERCRATE_01) AND HAS_MODEL_LOADED_CHECK(V_IND_COO_HALF) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Hook) AND HAS_CLIP_SET_LOADED(GET_CLIP_SET_FOR_SCRIPTED_GUN_TASK(SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN)) AND HAS_CLIP_SET_LOADED("MOVE_STRAFE@COP") michaelEscape() ENDIF BREAK CASE stageMichaelFree IF HAS_MODEL_LOADED_CHECK(GET_WEAPONTYPE_MODEL(WEAPONTYPE_COMBATPISTOL)) AND HAS_MODEL_LOADED_CHECK(G_M_M_CHIGOON_01) AND HAS_MODEL_LOADED_CHECK(G_M_M_CHIGOON_02) AND HAS_MODEL_LOADED_CHECK(FELTZER2) AND HAS_MODEL_LOADED_CHECK(COQUETTE) AND HAS_MODEL_LOADED_CHECK(BISON) AND HAS_MODEL_LOADED_CHECK(PROP_WATERCRATE_01) AND HAS_MODEL_LOADED_CHECK(V_IND_COO_HALF) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2Hook) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2SetPiece2) AND HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2FranklinBeckon) AND HAS_CLIP_SET_LOADED(GET_CLIP_SET_FOR_SCRIPTED_GUN_TASK(SCRIPTED_GUN_TASK_HANGING_UPSIDE_DOWN)) AND HAS_CLIP_SET_LOADED("MOVE_STRAFE@COP") michaelFree() ENDIF BREAK CASE stageTriadsChase IF HAS_MODEL_LOADED_CHECK(BISON) AND HAS_MODEL_LOADED_CHECK(FELTZER2) AND HAS_MODEL_LOADED_CHECK(COQUETTE) AND HAS_CLIP_SET_LOADED("MOVE_STRAFE@COP") triadsChase() ENDIF BREAK CASE stageBackToMichaels backToMichaels() BREAK CASE stageCutEnd IF HAS_ANIM_DICT_LOADED_CHECK(sAnimDictMic2WashFace) cutEnd() ENDIF BREAK CASE passMission missionPassed() BREAK CASE failMission missionFailed() BREAK ENDSWITCH IF eMissionObjective >= stageSwitchToMichael AND eMissionObjective <= stageMichaelEscape IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON IF NOT IS_PLAYER_SWITCH_IN_PROGRESS() AND NOT HAS_LABEL_BEEN_TRIGGERED("MichaelFallPushIn") DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE() PRINTLN("DISABLE_ON_FOOT_FIRST_PERSON_VIEW_THIS_UPDATE()") ENDIF ENDIF ENDIF ENDIF #IF IS_DEBUG_BUILD UPDATE_SPLINE_CAM_WIDGETS(scsSwitchCam_FranklinToMichael) UPDATE_SPLINE_CAM_WIDGETS(scsSwitchCam_FranklinInCarToMichael) UPDATE_SPLINE_CAM_WIDGETS(scsSwitchCam_MichaelToFranklin) UPDATE_SPLINE_CAM_WIDGETS(scsSwitchCam_FranklinGrappleToMichael) HANDLE_SWITCH_CAM_SCRIPT_SPECIFIC_WIDGETS() #ENDIF WAIT(0) ENDWHILE //Script should never reach here. Always terminate with cleanup function. ENDSCRIPT