// MISSION NAME : Minute1.sc // AUTHOR : Kev Edwards // DESCRIPTION : Help minutemen round up some mariachi band members //Compile out Title Update changes to header functions. //Must be before includes. //CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R. USING "rage_builtins.sch" USING "globals.sch" USING "cutscene_public.sch" USING "commands_cutscene.sch" USING "commands_entity.sch" USING "commands_script.sch" USING "script_player.sch" USING "randomChar_public.sch" USING "dialogue_public.sch" USING "script_ped.sch" USING "dialogue_public.sch" USING "RC_Helper_Functions.sch" USING "initial_scenes_Minute.sch" USING "drunk_public.sch" USING "CompletionPercentage_public.sch" USING "RC_Threat_public.sch" USING "chase_hint_cam.sch" CHASE_HINT_CAM_STRUCT localChaseHintCamStruct #IF IS_DEBUG_BUILD USING "select_mission_stage.sch" #ENDIF USING "commands_event.sch" // Required to use REMOVE_ALL_SHOCKING_EVENTS USING "emergency_call.sch" // Required to use SUPPRESS_EMERGENCY_CALLS USING "commands_recording.sch" g_structRCScriptArgs sRCLauncherDataLocal CONST_INT CP_GO_TO_BAR 0 // Checkpoints CONST_INT CP_GO_IN_BAR 1 CONST_INT CP_CAR_CHASE 2 CONST_INT CP_MISSION_PASSED 3 // Only used for shitskips CONST_INT Z_SKIP_INTRO 0 // Z Skips CONST_INT Z_SKIP_GO_TO_BAR 1 CONST_INT Z_SKIP_GO_INSIDE_BAR 2 CONST_INT Z_SKIP_CHASE_CAR 3 CONST_INT Z_SKIP_STUN_MARIACHI 4 CONST_INT Z_SKIP_MISSION_PASSED 5 ENUM MIN1_MISSION_STATE stateNULL, stateIntro, stateGoToBar, stateGoInsideBar, stateGoOutsideBar, stateChaseMariachiCar, stateStunMariachiPeds, stateLeaveArea, stateMissionPassed, stateFailed, NUM_MISSION_STATES ENDENUM MIN1_MISSION_STATE missionState = stateIntro // Stores the current MIN1_MISSION_STATE MIN1_MISSION_STATE missionStateSkip = stateNULL // Used if needing to change to a MIN1_MISSION_STATE out of sequence ENUM MIN1_STATE_MACHINE MIN1_STATE_MACHINE_SETUP, MIN1_STATE_MACHINE_LOOP, MIN1_STATE_MACHINE_CLEANUP ENDENUM MIN1_STATE_MACHINE missionStateMachine = MIN1_STATE_MACHINE_SETUP ENUM FAILED_REASON FAILED_DEFAULT = 0, FAILED_JOE_DIED, FAILED_JOSEF_DIED, FAILED_PATROL_VEHICLE_WRECKED, FAILED_MARIACHI_DIED, FAILED_MARIACHI_INJURED, FAILED_ABANDONED_BUDDIES, FAILED_MARIACHI_ESCAPED, FAILED_JOE_INJURED, FAILED_JOSEF_INJURED, FAILED_ALERTED_COPS, FAILED_THREW_EXPLOSIVES, FAILED_PATROL_VEHICLE_ATTACKED, FAILED_ABANDONED_JOE ENDENUM FAILED_REASON failReason STRING failString ENUM PATROL_VEHICLE_STATUS PV_STATUS_PLAYER_NOT_INSIDE, PV_STATUS_LOSE_WANTED_LEVEL, PV_STATUS_GO_TO_DESTINATION ENDENUM PATROL_VEHICLE_STATUS pvStatus ENUM MARIACHI_STATUS MARIACHI_EXITING_HIS_VEHICLE, MARIACHI_WAITING_TO_BE_STUNNED, MARIACHI_HAS_BEEN_STUNNED, MARIACHI_AFTER_STUNNED, MARIACHI_GOING_TO_PATROL_VEHICLE, MARIACHI_ENTERING_PATROL_VEHICLE, MARIACHI_SAT_IN_PATROL_VEHICLE ENDENUM ENUM BUDDY_STATUS BUDDY_WAITING_TO_GET_OUT, BUDDY_GOING_TO_MARIACHI_PED, BUDDY_AIMING_AT_MARIACHI_PED, BUDDY_TRYING_TO_ENTER_PATROL_VEHICLE, BUDDY_ENTERING_PATROL_VEHICLE, BUDDY_SAT_IN_PATROL_VEHICLE ENDENUM BOOL bZSkipping = FALSE // Changes to TRUE if z skipping to prevent subsequent mission state changes etc #IF IS_DEBUG_BUILD CONST_INT MAX_SKIP_MENU_LENGTH 5 MissionStageMenuTextStruct mSkipMenu[MAX_SKIP_MENU_LENGTH] WIDGET_GROUP_ID widgetGroup BOOL bDebug_PrintToTTY = TRUE INT iDebugSkipTime // Prevents skipping instantaneously #ENDIF VECTOR vPlayerCarRespot = <<323.6060, 3415.3496, 35.6612>> CONST_FLOAT fPlayerCarRespot 254.7861 CONST_INT NUM_PED_MODELS 2 MODEL_NAMES modelPed[NUM_PED_MODELS] CONST_INT MIN1_MODEL_MARIACHI_PED 0 CONST_INT MIN1_MODEL_DRUNK_PED_1 1 INT iCutsceneStage INT iLeadInTimer SEQUENCE_INDEX seqTrevorLeadIn VEHICLE_INDEX vehCamperVan structPedsForConversation sConversation BOOL bStartedArrivedAtBarConversation BOOL bStartedInBarConversation BOOL bStartedDrunkPedConversation BOOL bStartedBumpDrunkConversation BOOL bStartedGetOutHereConversation BOOL bStartedOutsideBarConversation BOOL bStartedChaseVanConversation BOOL bStartedOffRoadConversation BOOL bStartedCrashedConversation BOOL bStartedStunThemConversation BOOL bStartedLeaveAreaConversation BOOL bStartedCyaConversation BOOL bStartedDriveToBarConversation BOOL bFinishedDriveToBarConversation BOOL bStartedStopDriveConversation BOOL bStartedWrongWayConversation BOOL bStartedAlmostThereConversation BOOL bStartedBringVehicleConversation BOOL bStartedNoJoeConversation BOOL bStartedGoBackForJoeConversation BOOL bStartedFleeConversation INT iWaitConversationsPlayed INT iGetInConversationsPlayed INT iStoppedConversationsPlayed BOOL bPatrolVehicleStoppedDuringChase INT iFarBehindConversationsPlayed BOOL bPlayedFarBehindConversation INT iExitedVehicleConversationsPlayed INT iGetBackInVehicleConversationsPlayed INT iGotBackInVehicleConversationsPlayed BOOL bAllowPlayExitedVehicleConversation BOOL bAllowPlayGetBackInVehicleConversation BOOL bAllowPlayGotBackInVehicleConversation BOOL bStartedSingingStream CONST_INT NUM_CRASH_CONVERSATIONS 4 VECTOR vCrashConversationPos[NUM_CRASH_CONVERSATIONS] BOOL bStartedCrashConversation[NUM_CRASH_CONVERSATIONS] INT iDoneCrashConversations TEXT_LABEL_23 tSavedConversationRoot TEXT_LABEL_23 tSavedConversationLabel MODEL_NAMES modelPatrolVehicle VEHICLE_INDEX vehPatrolVehicle BLIP_INDEX blipPatrolVehicle INT iNumToldToGetInPatrolVehicle INT iNumToldToGoToDestination BOOL bDisplayObjective BOOL bPatrolVehicleDrivingAway BOOL bDoneRollingStart BOOL bPlayerIsCurrentlyInPatrolVehicle FLOAT fWrongWayDistance MODEL_NAMES modelMariachiCar VEHICLE_INDEX vehMariachiCar VECTOR vMariachiCar = << 1996.5011, 3063.1003, 46.7716 >> FLOAT fMariachiCar = 56.146961 BOOL bUsePlaybackAIForMariachiCar INT iRequiredHealth FLOAT fCurrentPositionInRecording BLIP_INDEX blipDestination VECTOR vBarInside = << 1989.8622, 3047.6040, 46.21511 >> VECTOR vBarOutside = << 1990.9784, 3054.2000, 46.2149 >> INTERIOR_INSTANCE_INDEX interiorBar BOOL bIsInteriorPinned STRUCT COMPANION PED_INDEX ped VEHICLE_SEAT seatStart VEHICLE_SEAT seatEnd BUDDY_STATUS status INT iInsultTimer INT iNumInsultsGiven INT iDelayBeforeNextInsult ENDSTRUCT CONST_INT NUM_BUDDIES 2 COMPANION pedBuddy[NUM_BUDDIES] CONST_INT JOE 0 CONST_INT JOSEF 1 BLIP_INDEX blipJoe CONST_INT NUM_MARIACHI_PEDS 2 PED_INDEX pedMariachi[NUM_MARIACHI_PEDS] BLIP_INDEX blipMariachi[NUM_MARIACHI_PEDS] VEHICLE_SEAT seatMariachi[NUM_MARIACHI_PEDS] MARIACHI_STATUS statusMariachi[NUM_MARIACHI_PEDS] BOOL bPlayedStunnedConversation[NUM_MARIACHI_PEDS] BOOL bPlayedSoberConversation[NUM_MARIACHI_PEDS] BOOL bCheckForTazeredAgain[NUM_MARIACHI_PEDS] BOOL bHasBeenTazeredAgain[NUM_MARIACHI_PEDS] FLOAT fSeekOffsetFromPatrolVehicle[NUM_MARIACHI_PEDS] CONST_INT NUM_MARIACHI_DRUNK_CONVERSATIONS 4 CONST_INT NUM_MARIACHI_BUMP_CONVERSATIONS 3 CONST_INT NUM_MARIACHI_AIM_CONVERSATIONS 2 CONST_INT NUM_MARIACHI_SHOCK_CONVERSATIONS 1// There are 3 conversations for each mariachi but we only want to play 1 of each CONST_INT NUM_MARIACHI_WALK_CONVERSATIONS 2 INT iMariachiConversationTimer[NUM_MARIACHI_PEDS] INT iMariachiConversationDelay[NUM_MARIACHI_PEDS] INT iNumPlayedDrunkConversations[NUM_MARIACHI_PEDS] INT iNumPlayedBumpConversations[NUM_MARIACHI_PEDS] INT iNumPlayedAimConversations[NUM_MARIACHI_PEDS] INT iNumPlayedShockConversations[NUM_MARIACHI_PEDS] INT iNumPlayedWalkConversations[NUM_MARIACHI_PEDS] INT iMariachiExitVehicleTimer[NUM_MARIACHI_PEDS] INT iPlayedStunnedConversation CONST_INT NUM_HURRY_STUN_CONVERSATIONS 5 TEXT_LABEL_15 sHurryStunConversation[NUM_HURRY_STUN_CONVERSATIONS] INT iHurryStunConversationsPlayed INT iTimesStunnedMoreThanNecessary INT iCurrentTimesStunnedDialogue CONST_INT NUM_TIMES_STUNNED_DIALOGUE 3 STRING sTimesStunnedDialogueString[NUM_TIMES_STUNNED_DIALOGUE] CONST_INT NUM_SHOT_VEHICLE_DIALOGUE 2 INT iCurrentShotVehicleDialogue STRING sShotVehicleDialogueString[NUM_SHOT_VEHICLE_DIALOGUE] VECTOR vOpenGroundWanderArea = <<2698.87769, 4110.84863, 42.11631>> PED_INDEX pedWalkOutBar VECTOR vWalkOutBarPed = << 1989.4276, 3051.9133, 46.1256 >> CONST_FLOAT fWalkOutBarPed 332.6105 BOOL bPedGoneOutDoor PED_INDEX pedJanet BOOL bDoneJanetTalk FLOAT fFailDist INT iSingingDialogueTimer INT iChaseDialogueTimer INT iStunGunDialogueTimer INT iNotStunnedDialogueTimer INT iRollingStartTimer INT iLookAroundTimer INT iWaitConversationTimer INT iMariachiCarTyresBurstTimer INT iPatrolVehicleTyresBurstTimer CONST_INT NUM_CHASE_CONVERSATIONS 7 BOOL bDoneChaseConversation[NUM_CHASE_CONVERSATIONS] TEXT_LABEL_15 sChaseConversation[NUM_CHASE_CONVERSATIONS] INT iDoneChaseConversations REL_GROUP_HASH relGroupFriendly SEQUENCE_INDEX fleeSequence SEQUENCE_INDEX drunkSequence VEHICLE_INDEX vehForReplay INT iWantedFailedTimer INT iDisableReplayCameraTimer //Fix for bug 2258455 /// PURPOSE: /// Used in every MIN1_STATE_MACHINE_SETUP. Advances state machine to MIN1_STATE_MACHINE_LOOP. PROC MIN1_STATE_SETUP(#IF IS_DEBUG_BUILD STRING s_text #ENDIF) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Initialising ", s_text) ENDIF #ENDIF bZSkipping = FALSE #IF IS_DEBUG_BUILD iDebugSkipTime = GET_GAME_TIMER() #ENDIF missionStateMachine = MIN1_STATE_MACHINE_LOOP ENDPROC /// PURPOSE: /// Used in every MIN1_STATE_MACHINE_CLEANUP. Advances state machine to MIN1_STATE_MACHINE_SETUP. PROC MIN1_STATE_CLEANUP(#IF IS_DEBUG_BUILD STRING s_text #ENDIF) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Cleaning up ", s_text) ENDIF #ENDIF CLEAR_PRINTS() CLEAR_HELP(TRUE) IF missionStateSkip = stateNULL missionState = INT_TO_ENUM(MIN1_MISSION_STATE, ENUM_TO_INT(missionState) + 1) ELSE missionState = missionStateSkip ENDIF missionStateSkip = stateNULL missionStateMachine = MIN1_STATE_MACHINE_SETUP ENDPROC /// PURPOSE: /// Models required for a mission state are all loaded when the mission state inits, but this is a safety check to ensure a model is loaded before subsequently creating an entity using it. PROC MIN1_ENSURE_MODEL_IS_LOADED(MODEL_NAMES e_model) REQUEST_MODEL(e_model) IF NOT HAS_MODEL_LOADED(e_model) WHILE NOT HAS_MODEL_LOADED(e_model) WAIT(0) ENDWHILE ENDIF ENDPROC /// PURPOSE: /// Safely creates a vehicle. PROC MIN1_CREATE_VEHICLE(VEHICLE_INDEX &veh_to_create, MODEL_NAMES e_model, VECTOR v_pos, FLOAT f_heading = 0.0, FLOAT fDirt = 0.0) IF NOT DOES_ENTITY_EXIST(veh_to_create) MIN1_ENSURE_MODEL_IS_LOADED(e_model) veh_to_create = CREATE_VEHICLE(e_model, v_pos, f_heading) SET_VEHICLE_DIRT_LEVEL(veh_to_create, fDirt) ENDIF ENDPROC /// PURPOSE: /// Safely spawn a ped. PROC MIN1_CREATE_PED(PED_INDEX &ped_to_create, MODEL_NAMES e_model, VECTOR v_pos, FLOAT f_heading = 0.0) IF NOT DOES_ENTITY_EXIST(ped_to_create) MIN1_ENSURE_MODEL_IS_LOADED(e_model) ped_to_create = CREATE_PED(PEDTYPE_MISSION, e_model, v_pos, f_heading) SET_PED_DEFAULT_COMPONENT_VARIATION(ped_to_create) REMOVE_ALL_PED_WEAPONS(ped_to_create) ENDIF ENDPROC /// PURPOSE: /// Safely spawn a ped inside a vehicle. PROC MIN1_CREATE_PED_IN_VEHICLE(VEHICLE_INDEX veh, PED_INDEX &ped_to_create, MODEL_NAMES e_model, VEHICLE_SEAT seat) IF NOT DOES_ENTITY_EXIST(ped_to_create) AND DOES_ENTITY_EXIST(veh) MIN1_ENSURE_MODEL_IS_LOADED(e_model) ped_to_create = CREATE_PED_INSIDE_VEHICLE(veh, PEDTYPE_MISSION, e_model, seat) SET_PED_DEFAULT_COMPONENT_VARIATION(ped_to_create) REMOVE_ALL_PED_WEAPONS(ped_to_create) ENDIF ENDPROC /// PURPOSE: /// Safely remove all blips in this mission. PROC MIN1_REMOVE_ALL_BLIPS() SAFE_REMOVE_BLIP(blipPatrolVehicle) SAFE_REMOVE_BLIP(blipDestination) SAFE_REMOVE_BLIP(blipMariachi[0]) SAFE_REMOVE_BLIP(blipMariachi[1]) SAFE_REMOVE_BLIP(blipJoe) ENDPROC /// PURPOSE: /// Safely remove all vehicles in this mission. PROC MIN1_REMOVE_ALL_VEHICLES(BOOL b_delete = FALSE) IF IS_ENTITY_ALIVE(vehMariachiCar) SET_ENTITY_LOAD_COLLISION_FLAG(vehMariachiCar, FALSE) ENDIF IF IS_ENTITY_ALIVE(vehPatrolVehicle) AND DOES_VEHICLE_HAVE_STUCK_VEHICLE_CHECK(vehPatrolVehicle) REMOVE_VEHICLE_STUCK_CHECK(vehPatrolVehicle) ENDIF IF b_delete = TRUE SAFE_DELETE_VEHICLE(vehMariachiCar) SAFE_DELETE_VEHICLE(vehCamperVan) SAFE_RELEASE_VEHICLE(vehPatrolVehicle) // Prevents the patrol vehicle being deleted at the end of the mission SAFE_DELETE_VEHICLE(vehForReplay) ELSE SAFE_RELEASE_VEHICLE(vehMariachiCar) SAFE_RELEASE_VEHICLE(vehCamperVan) SAFE_RELEASE_VEHICLE(vehPatrolVehicle) SAFE_RELEASE_VEHICLE(vehForReplay) ENDIF ENDPROC /// PURPOSE: /// Safely remove all peds in this mission. PROC MIN1_REMOVE_ALL_PEDS(BOOL b_delete = FALSE, BOOL b_terminate_mission = TRUE) IF b_delete = TRUE IF b_terminate_mission = TRUE SAFE_DELETE_PED(pedBuddy[JOE].ped) SAFE_DELETE_PED(pedBuddy[JOSEF].ped) ENDIF SAFE_DELETE_PED(pedWalkOutBar) SAFE_DELETE_PED(pedMariachi[0]) SAFE_DELETE_PED(pedMariachi[1]) SAFE_DELETE_PED(pedJanet) ELSE IF b_terminate_mission = TRUE SAFE_RELEASE_PED(pedBuddy[JOE].ped) SAFE_RELEASE_PED(pedBuddy[JOSEF].ped) ENDIF SAFE_RELEASE_PED(pedWalkOutBar) SAFE_RELEASE_PED(pedMariachi[0]) SAFE_RELEASE_PED(pedMariachi[1]) SAFE_RELEASE_PED(pedJanet) ENDIF ENDPROC /// PURPOSE: /// Ensures props that the Mariachi car smashes through have their full physics loaded. Fixes B*578109. PROC MIN1_SET_PROPS_TO_USE_FULL_PHYSICS(BOOL b_enable) IF b_enable = TRUE CREATE_FORCED_OBJECT(<<2142.74, 3355.45, 44.44>>,5,prop_fnc_farm_01e,TRUE) CREATE_FORCED_OBJECT(<<2146.07, 3351.57, 44.50>>,5,prop_fnclink_01d,TRUE) CREATE_FORCED_OBJECT(<<2067.85, 3266.79, 44.45>>,5,prop_sign_road_03a,TRUE) // B*1098655 ELSE REMOVE_FORCED_OBJECT(<<2142.74, 3355.45, 44.44>>,5,prop_fnc_farm_01e) REMOVE_FORCED_OBJECT(<<2146.07, 3351.57, 44.50>>,5,prop_fnclink_01d) REMOVE_FORCED_OBJECT(<<2067.85, 3266.79, 44.45>>,5,prop_sign_road_03a) ENDIF ENDPROC /// PURPOSE: /// Switches off the road nodes along the road at the start of the car chase. PROC MIN1_CHANGE_ROAD_NODES_FOR_CAR_CHASE(BOOL b_set_on) IF b_set_on = TRUE SET_ROADS_BACK_TO_ORIGINAL(<<1906,3000,0>>, <<2150,3500,100>>) ELSE SET_ROADS_IN_AREA(<<1906,3000,0>>, <<2150,3500,100>>, FALSE) CLEAR_AREA_OF_VEHICLES(<<1995.33972, 3061.05371, 46.04894>>, 10, FALSE, FALSE, TRUE, TRUE) CLEAR_AREA_OF_VEHICLES(<<1958.77063, 3090.40576, 45.94596>>, 40, FALSE, FALSE, TRUE, TRUE) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Set road nodes off at start of car chase") ENDIF #ENDIF ENDIF ENDPROC /// PURPOSE: /// Clean up everything conceivably setup in this mission. /// PARAMS: /// b_delete_entities - TRUE if should delete entites, FALSE if should remove entities for elegant cleanup. /// b_terminate_mission - TRUE if cleaning up before terminating, FALSE if cleaning up before a debug skip. PROC MIN1_MISSION_CLEANUP(BOOL b_delete_entities = FALSE, BOOL b_terminate_mission = FALSE) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Cleaning up mission...") ENDIF #ENDIF CLEAR_PRINTS() CLEAR_HELP() KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() KILL_CHASE_HINT_CAM(localChaseHintCamStruct) REMOVE_PED_FOR_DIALOGUE(sConversation, 2) // Trevor REMOVE_PED_FOR_DIALOGUE(sConversation, 3) // Joe REMOVE_PED_FOR_DIALOGUE(sConversation, 4) // Josef REMOVE_PED_FOR_DIALOGUE(sConversation, 5) // Drunken hillbilly REMOVE_PED_FOR_DIALOGUE(sConversation, 6) // Mariachi van ped REMOVE_PED_FOR_DIALOGUE(sConversation, 7) // Mariachi van ped REMOVE_PED_FOR_DIALOGUE(sConversation, 8) // Bar woman IF IS_ENTITY_ALIVE(vehMariachiCar) SET_LAST_DRIVEN_VEHICLE(vehMariachiCar) // B*1423496 Make sure the mariachi car doesn't get removed IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehMariachiCar) STOP_PLAYBACK_RECORDED_VEHICLE(vehMariachiCar) ENDIF ENDIF IF IS_ENTITY_ALIVE(vehPatrolVehicle) // Re-enable damage when we're going to clean up the mission SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(vehPatrolVehicle, FALSE) SET_ENTITY_PROOFS(vehPatrolVehicle, FALSE, FALSE, FALSE, FALSE, FALSE) ENDIF MIN1_REMOVE_ALL_BLIPS() MIN1_REMOVE_ALL_PEDS(b_delete_entities) MIN1_REMOVE_ALL_VEHICLES(b_delete_entities) REMOVE_VEHICLE_RECORDING(500, "Min1_Van") INT i = 0 REPEAT NUM_PED_MODELS i SET_MODEL_AS_NO_LONGER_NEEDED(modelPed[i]) ENDREPEAT SET_VEHICLE_MODEL_IS_SUPPRESSED(modelMariachiCar, FALSE) SET_VEHICLE_MODEL_IS_SUPPRESSED(modelPatrolVehicle, FALSE) SET_MODEL_AS_NO_LONGER_NEEDED(modelMariachiCar) SET_MODEL_AS_NO_LONGER_NEEDED(modelPatrolVehicle) UNPIN_INTERIOR(interiorBar) MIN1_SET_PROPS_TO_USE_FULL_PHYSICS(FALSE) MIN1_CHANGE_ROAD_NODES_FOR_CAR_CHASE(TRUE) REMOVE_ANIM_DICT("missminuteman_1ig_1") TRIGGER_MUSIC_EVENT("MM1_STOP") IF IS_AUDIO_SCENE_ACTIVE("MINUTE_01_SCENE") STOP_AUDIO_SCENE("MINUTE_01_SCENE") ENDIF REMOVE_VEHICLE_ASSET(modelPatrolVehicle) REMOVE_ANIM_DICT("move_m@drunk@verydrunk") REMOVE_ANIM_SET("MOVE_M@BAIL_BOND_NOT_TAZERED") REMOVE_ANIM_SET("MOVE_M@BAIL_BOND_TAZERED") RC_CleanupSceneEntities(sRCLauncherDataLocal, FALSE) SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE) STOP_STREAM() // Mariachi singing IF b_terminate_mission = TRUE SET_CREATE_RANDOM_COPS(TRUE) SET_CREATE_RANDOM_COPS_ON_SCENARIOS(TRUE) RELEASE_SUPPRESSED_EMERGENCY_CALLS() // B*1472113 - Prevent player calling the cops SET_RANDOM_TRAINS(TRUE) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<322,3409,35>>-<<40,40,40>>, <<322,3409,35>>+<<40,40,40>>, TRUE) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< 2710.43, 4141.74, 42.92 >> - <<100.0, 100.0, 100.0>>, << 2710.43, 4141.74, 42.92 >> + <<100.0, 100.0, 100.0>>, TRUE) // B*2082981 #IF IS_DEBUG_BUILD IF DOES_WIDGET_GROUP_EXIST(widgetGroup) DELETE_WIDGET_GROUP(widgetGroup) ENDIF #ENDIF ENDIF #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Cleaned up mission") ENDIF #ENDIF ENDPROC /// PURPOSE: /// Standard RC mission cleanup function. PROC Script_Cleanup() // Ensure launcher is cleaned up RC_CLEANUP_LAUNCHER() IF (Random_Character_Cleanup_If_Triggered()) MIN1_MISSION_CLEANUP(FALSE, TRUE) ENDIF RC_CleanupSceneEntities(sRCLauncherDataLocal, FALSE) TERMINATE_THIS_THREAD() ENDPROC /// PURPOSE: /// Standard RC mission passed function. PROC Script_Passed() SET_PLAYER_PED_WEAPON_UNLOCKED(CHAR_MICHAEL, WEAPONTYPE_STUNGUN, TRUE, TRUE) // See B*1138740 SET_PLAYER_PED_WEAPON_UNLOCKED(CHAR_FRANKLIN, WEAPONTYPE_STUNGUN, TRUE, TRUE) SET_PLAYER_PED_WEAPON_UNLOCKED(CHAR_TREVOR, WEAPONTYPE_STUNGUN, TRUE, TRUE) ADD_CONTACT_TO_PHONEBOOK(CHAR_JOE, TREVOR_BOOK) WAIT(0) ADD_CONTACT_TO_PHONEBOOK(CHAR_JOSEF, TREVOR_BOOK) CREDIT_BANK_ACCOUNT(CHAR_TREVOR, BAAC_UNLOGGED_SMALL_ACTION, 500) // See B*1207293 // See B*1341071 Random_Character_Passed(CP_RAND_C_MIN1) Script_Cleanup() ENDPROC /// PURPOSE: /// Mission failed function. PROC MIN1_MISSION_FAILED(FAILED_REASON reason = FAILED_DEFAULT) IF bZSkipping = FALSE failReason = reason missionStateMachine = MIN1_STATE_MACHINE_CLEANUP missionStateSkip = stateFailed ENDIF ENDPROC /// PURPOSE: /// Puts the desired ped into a group friendly to the player. PROC MIN1_SET_PED_AS_PLAYER_FRIEND(PED_INDEX ped_to_set_as_friend) IF IS_ENTITY_ALIVE(ped_to_set_as_friend) relGroupFriendly = GET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID()) SET_PED_RELATIONSHIP_GROUP_HASH(ped_to_set_as_friend, relGroupFriendly) SET_PED_CONFIG_FLAG(ped_to_set_as_friend, PCF_KeepRelationshipGroupAfterCleanUp, TRUE) ENDIF ENDPROC /// PURPOSE: /// Set up mission prior to going into any mission states. PROC MIN1_MISSION_SETUP() #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Starting mission setup...") ENDIF #ENDIF failReason = FAILED_DEFAULT REQUEST_ADDITIONAL_TEXT("MIN1", MISSION_TEXT_SLOT) WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT) WAIT(0) ENDWHILE #IF IS_DEBUG_BUILD mSkipMenu[Z_SKIP_INTRO].sTxtLabel = "Intro - mmb_1_rcm" mSkipMenu[Z_SKIP_GO_TO_BAR].sTxtLabel = "Go to bar" mSkipMenu[Z_SKIP_GO_INSIDE_BAR].sTxtLabel = "Enter bar" mSkipMenu[Z_SKIP_CHASE_CAR].sTxtLabel = "Car chase" mSkipMenu[Z_SKIP_STUN_MARIACHI].sTxtLabel = "Stun Mariachi" IF NOT DOES_WIDGET_GROUP_EXIST(widgetGroup) widgetGroup = START_WIDGET_GROUP("Minute 1 widgets") ADD_WIDGET_BOOL("TTY Toggle - Print Mission Debug Info", bDebug_PrintToTTY) STOP_WIDGET_GROUP() ENDIF #ENDIF modelMariachiCar = TORNADO4 modelPatrolVehicle = PRANGER modelPed[MIN1_MODEL_MARIACHI_PED] = S_M_M_MARIACHI_01 modelPed[MIN1_MODEL_DRUNK_PED_1] = A_M_M_HILLBILLY_01 pedBuddy[JOE].seatStart = VS_FRONT_RIGHT pedBuddy[JOSEF].seatStart = VS_BACK_RIGHT pedBuddy[JOE].seatEnd = VS_DRIVER pedBuddy[JOSEF].seatEnd = VS_FRONT_RIGHT interiorBar = GET_INTERIOR_AT_COORDS(vBarInside) iCurrentShotVehicleDialogue = 0 sShotVehicleDialogueString[0] = "MIN1_SHOOT1" sShotVehicleDialogueString[1] = "MIN1_SHOOT2" vCrashConversationPos[0] = <<2212.9785, 3478.3857, 47.9132>> vCrashConversationPos[1] = <<2268.7229, 3601.1167, 46.2687>> vCrashConversationPos[2] = <<2392.1316, 3710.2808, 48.0988>> vCrashConversationPos[3] = <<2632.2820, 3854.4854, 64.1631>> tSavedConversationRoot = "" iPatrolVehicleTyresBurstTimer = GET_GAME_TIMER() REQUEST_VEHICLE_ASSET(modelPatrolVehicle) // B*1037225 - Prestream vehicle anims in case player exits car after the intro mocap SUPPRESS_EMERGENCY_CALLS() // B*1472113 - Prevent player calling the cops SET_CREATE_RANDOM_COPS(FALSE) SET_CREATE_RANDOM_COPS_ON_SCENARIOS(FALSE) //IF IS_REPEAT_PLAY_ACTIVE() // Remove the stun gun regardless IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) AND HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_STUNGUN) REMOVE_WEAPON_FROM_PED(PLAYER_PED_ID(), WEAPONTYPE_STUNGUN) // B*1351410 #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Player already had a stun gun so removed it") ENDIF #ENDIF ENDIF iWantedFailedTimer = -1 SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< 2710.43, 4141.74, 42.92 >> - <<100.0, 100.0, 100.0>>, << 2710.43, 4141.74, 42.92 >> + <<100.0, 100.0, 100.0>>, FALSE) // B*2082981 #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Finished mission setup") ENDIF #ENDIF ENDPROC /// PURPOSE: /// Loads the assets for the required mission stage. PROC MIN1_LOAD_ASSETS_FOR_MISSION_STATE(MIN1_MISSION_STATE current_state) SWITCH current_state CASE stateIntro REQUEST_MODEL(modelPatrolVehicle) BREAK CASE stateGoInsideBar REQUEST_MODEL(modelPed[MIN1_MODEL_DRUNK_PED_1]) BREAK CASE stateGoOutsideBar REQUEST_MODEL(modelMariachiCar) REQUEST_MODEL(modelPed[MIN1_MODEL_MARIACHI_PED]) REQUEST_VEHICLE_RECORDING(500, "Min1_Van") REQUEST_VEHICLE_RECORDING(500, "Min1_PV") REQUEST_ANIM_DICT("missminuteman_1ig_1") BREAK CASE stateStunMariachiPeds REQUEST_ANIM_DICT("missminuteman_1ig_2") REQUEST_ANIM_SET("MOVE_M@BAIL_BOND_NOT_TAZERED") REQUEST_ANIM_SET("MOVE_M@BAIL_BOND_TAZERED") BREAK CASE stateMissionPassed REQUEST_MODEL(modelMariachiCar) BREAK ENDSWITCH BOOL b_assets_loaded = FALSE WHILE b_assets_loaded = FALSE SWITCH current_state CASE stateIntro IF HAS_MODEL_LOADED(modelPatrolVehicle) SET_VEHICLE_MODEL_IS_SUPPRESSED(modelPatrolVehicle, TRUE) b_assets_loaded = TRUE ENDIF BREAK CASE stateGoInsideBar IF HAS_MODEL_LOADED(modelPed[MIN1_MODEL_DRUNK_PED_1]) b_assets_loaded = TRUE ENDIF BREAK CASE stateGoOutsideBar IF HAS_MODEL_LOADED(modelMariachiCar) AND HAS_MODEL_LOADED(modelPed[MIN1_MODEL_MARIACHI_PED]) AND HAS_VEHICLE_RECORDING_BEEN_LOADED(500, "Min1_Van") AND HAS_VEHICLE_RECORDING_BEEN_LOADED(500, "Min1_PV") AND HAS_ANIM_DICT_LOADED("missminuteman_1ig_1") SET_VEHICLE_MODEL_IS_SUPPRESSED(modelMariachiCar, TRUE) b_assets_loaded = TRUE ENDIF BREAK CASE stateStunMariachiPeds IF HAS_ANIM_DICT_LOADED("missminuteman_1ig_2") AND HAS_CLIP_SET_LOADED("MOVE_M@BAIL_BOND_NOT_TAZERED") AND HAS_CLIP_SET_LOADED("MOVE_M@BAIL_BOND_TAZERED") b_assets_loaded = TRUE ENDIF BREAK CASE stateMissionPassed IF HAS_MODEL_LOADED(modelMariachiCar) b_assets_loaded = TRUE ENDIF BREAK ENDSWITCH #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Loading assets...") ENDIF #ENDIF WAIT(0) ENDWHILE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Assets loaded") ENDIF #ENDIF ENDPROC /// PURPOSE: /// Teleports the patrol vehicle for a debug skip, and ensures Trevor, Joe and Josef are sat inside it. /// PARAMS: /// b_recreate - TRUE if we need to delete and recreate the patrol vehicle. /// b_set_rotation - TRUE if starting at the car chase so the car's rotation needs setting for the rolling start car recording, FALSE if simply create the patrol vehicle at the pos and heading. PROC MIN1_SETUP_PATROL_VEHICLE(VECTOR v_spawn_pos, FLOAT f_spawn_pos, BOOL b_set_for_rolling_start = FALSE) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Starting setting up patrol vehicle...") ENDIF #ENDIF IF NOT IS_ENTITY_ALIVE(vehPatrolVehicle) MIN1_LOAD_ASSETS_FOR_MISSION_STATE(stateIntro) MIN1_CREATE_VEHICLE(vehPatrolVehicle, modelPatrolVehicle, v_spawn_pos, f_spawn_pos, 10) SET_MODEL_AS_NO_LONGER_NEEDED(modelPatrolVehicle) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Patrol vehicle didn't exist so created it") ENDIF #ENDIF ENDIF IF NOT IS_ENTITY_ALIVE(pedBuddy[JOE].ped) AND IS_ENTITY_ALIVE(vehPatrolVehicle) WHILE NOT CREATE_NPC_PED_INSIDE_VEHICLE(pedBuddy[JOE].ped, CHAR_JOE, vehPatrolVehicle, pedBuddy[JOE].seatStart) WAIT(0) ENDWHILE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Joe didn't exist so created him") ENDIF #ENDIF ENDIF IF NOT IS_ENTITY_ALIVE(pedBuddy[JOSEF].ped) AND IS_ENTITY_ALIVE(vehPatrolVehicle) WHILE NOT CREATE_NPC_PED_INSIDE_VEHICLE(pedBuddy[JOSEF].ped, CHAR_JOSEF, vehPatrolVehicle, pedBuddy[JOSEF].seatStart) WAIT(0) ENDWHILE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Josef didn't exist so created him") ENDIF #ENDIF ENDIF IF IS_ENTITY_ALIVE(vehPatrolVehicle) SET_ENTITY_AS_MISSION_ENTITY(vehPatrolVehicle, TRUE, TRUE) IF b_set_for_rolling_start = TRUE START_PLAYBACK_RECORDED_VEHICLE(vehPatrolVehicle, 500, "Min1_PV") PAUSE_PLAYBACK_RECORDED_VEHICLE(vehPatrolVehicle) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehPatrolVehicle, 1500) ELSE SET_VEHICLE_ON_GROUND_PROPERLY(vehPatrolVehicle) ENDIF SET_VEHICLE_AS_RESTRICTED(vehPatrolVehicle, 0) SET_VEHICLE_ALARM(vehPatrolVehicle, FALSE) SET_VEHICLE_DOORS_LOCKED(vehPatrolVehicle, VEHICLELOCK_UNLOCKED) SET_VEHICLE_ALARM(vehPatrolVehicle, FALSE) SET_VEHICLE_CAN_LEAK_OIL(vehPatrolVehicle, FALSE) SET_VEHICLE_CAN_LEAK_PETROL(vehPatrolVehicle, FALSE) SET_DISABLE_PRETEND_OCCUPANTS(vehPatrolVehicle, TRUE) SET_ENTITY_LOD_DIST(vehPatrolVehicle, 200) SET_VEHICLE_DIRT_LEVEL(vehPatrolVehicle, 10) SET_VEHICLE_STRONG(vehPatrolVehicle, TRUE) SET_VEHICLE_HAS_STRONG_AXLES(vehPatrolVehicle, TRUE) INT i = 0 REPEAT NUM_BUDDIES i IF IS_ENTITY_ALIVE(pedBuddy[i].ped) IF i = 1 // Setting a hat on Joe causes B*1509088 SET_PED_PROP_INDEX(pedBuddy[i].ped, ANCHOR_HEAD, 0) ENDIF SET_PED_PROP_INDEX(pedBuddy[i].ped, ANCHOR_EYES, 0) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedBuddy[i].ped, TRUE) IF NOT IS_PED_IN_VEHICLE(pedBuddy[i].ped, vehPatrolVehicle) FREEZE_ENTITY_POSITION(pedBuddy[i].ped, FALSE) // B*886344 SET_PED_INTO_VEHICLE(pedBuddy[i].ped, vehPatrolVehicle, pedBuddy[i].seatStart) ENDIF MIN1_SET_PED_AS_PLAYER_FRIEND(pedBuddy[i].ped) SET_PED_CAN_BE_TARGETTED(pedBuddy[i].ped, FALSE) SET_PED_CAN_BE_DRAGGED_OUT(pedBuddy[i].ped, FALSE) SET_PED_CONFIG_FLAG(pedBuddy[i].ped, PCF_WillFlyThroughWindscreen, FALSE) SET_PED_CONFIG_FLAG(pedBuddy[i].ped, PCF_GetOutUndriveableVehicle, FALSE) // See B*922227 SET_PED_CONFIG_FLAG(pedBuddy[i].ped, PCF_GetOutBurningVehicle, TRUE) SET_PED_CONFIG_FLAG(pedBuddy[i].ped, PCF_RunFromFiresAndExplosions, TRUE) SET_PED_CONFIG_FLAG(pedBuddy[i].ped, PCF_UseKinematicModeWhenStationary, FALSE) SET_PED_CONFIG_FLAG(pedBuddy[i].ped, PCF_DontAllowToBeDraggedOutOfVehicle, TRUE) SET_PED_CONFIG_FLAG(pedBuddy[i].ped, PCF_DontInfluenceWantedLevel, TRUE) SET_PED_CONFIG_FLAG(pedBuddy[i].ped, PCF_ForceDirectEntry, TRUE) SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(pedBuddy[i].ped, FALSE) SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(pedBuddy[i].ped, TRUE) IF i = JOE ADD_PED_FOR_DIALOGUE(sConversation, 3, pedBuddy[JOE].ped, "JOE") ELSE ADD_PED_FOR_DIALOGUE(sConversation, 4, pedBuddy[JOSEF].ped, "JOSEF") ENDIF ENDIF ENDREPEAT IF NOT IS_REPLAY_BEING_SET_UP() IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle) SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle, VS_DRIVER) ENDIF ENDIF ENDIF ADD_PED_FOR_DIALOGUE(sConversation, 2, PLAYER_PED_ID(), "TREVOR") #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Finished setting up patrol vehicle") ENDIF #ENDIF ENDPROC /// PURPOSE: /// Create the car and Mariachi occupants. PROC MIN1_SPAWN_MARIACHI_CAR(VECTOR v_spawn_pos, FLOAT f_spawn_pos, FLOAT f_skip_to_carrec_time, BOOL b_set_rotation = TRUE) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started creating Mariachi car and occupants...") ENDIF #ENDIF CLEAR_AREA_OF_PROJECTILES(v_spawn_pos, 10) CLEAR_AREA_OF_PROJECTILES(<<2032.00610, 3308.28491, 45.05850>>, 250) // For B*1084769 STOP_FIRE_IN_RANGE(v_spawn_pos, 10) // For B*1119875 MIN1_LOAD_ASSETS_FOR_MISSION_STATE(stateGoOutsideBar) MIN1_CREATE_VEHICLE(vehMariachiCar, modelMariachiCar, v_spawn_pos, f_spawn_pos, 15) SET_MODEL_AS_NO_LONGER_NEEDED(modelMariachiCar) IF IS_ENTITY_ALIVE(vehMariachiCar) IF b_set_rotation = TRUE SET_ENTITY_ROTATION(vehMariachiCar, GET_ROTATION_OF_VEHICLE_RECORDING_ID_AT_TIME(GET_VEHICLE_RECORDING_ID(500, "Min1_Van"), 0)) ENDIF SET_ENTITY_LOAD_COLLISION_FLAG(vehMariachiCar, TRUE) SET_ENTITY_LOD_DIST(vehMariachiCar, 200) SET_DISABLE_PRETEND_OCCUPANTS(vehMariachiCar, TRUE) SET_VEHICLE_HAS_STRONG_AXLES(vehMariachiCar, TRUE) MIN1_CREATE_PED_IN_VEHICLE(vehMariachiCar, pedMariachi[0], modelPed[MIN1_MODEL_MARIACHI_PED], VS_DRIVER) MIN1_CREATE_PED_IN_VEHICLE(vehMariachiCar, pedMariachi[1], modelPed[MIN1_MODEL_MARIACHI_PED], VS_FRONT_RIGHT) IF f_skip_to_carrec_time > -1 START_PLAYBACK_RECORDED_VEHICLE(vehMariachiCar, 500, "Min1_Van") PAUSE_PLAYBACK_RECORDED_VEHICLE(vehMariachiCar) SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehMariachiCar, f_skip_to_carrec_time) ENDIF ENDIF SET_MODEL_AS_NO_LONGER_NEEDED(modelPed[MIN1_MODEL_MARIACHI_PED]) INT i = 0 REPEAT NUM_MARIACHI_PEDS i IF IS_ENTITY_ALIVE(pedMariachi[i]) SET_ENTITY_HEALTH(pedMariachi[i], 400) SET_PED_MAX_HEALTH(pedMariachi[i], 400) SET_PED_CONFIG_FLAG(pedMariachi[i], PCF_WillFlyThroughWindscreen, FALSE) //SET_PED_CONFIG_FLAG(pedMariachi[i], PCF_GetOutUndriveableVehicle, TRUE) // See B*905867 SET_PED_CONFIG_FLAG(pedMariachi[i], PCF_GetOutBurningVehicle, TRUE) SET_PED_CONFIG_FLAG(pedMariachi[i], PCF_RunFromFiresAndExplosions, TRUE) SET_PED_CONFIG_FLAG(pedMariachi[i], PCF_PedsJackingMeDontGetIn, TRUE) SET_PED_CONFIG_FLAG(pedMariachi[i], PCF_DontInfluenceWantedLevel, TRUE) SET_PED_CONFIG_FLAG(pedMariachi[i], PCF_ForceDirectEntry, TRUE) SET_PED_CONFIG_FLAG(pedMariachi[i], PCF_DisableGoToWritheWhenInjured, TRUE) // Hopefully fixes B*1407704 SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(pedMariachi[i], TRUE) SET_PED_SUFFERS_CRITICAL_HITS(pedMariachi[i], FALSE) SET_PED_CAN_BE_TARGETTED(pedMariachi[i], FALSE) SET_ENTITY_LOD_DIST(pedMariachi[i], 200) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedMariachi[i], TRUE) IF i = 0 ADD_PED_FOR_DIALOGUE(sConversation, 6, pedMariachi[i], "MARIACHI1") SET_PED_COMPONENT_VARIATION(pedMariachi[i], INT_TO_ENUM(PED_COMPONENT,0), 0, 2, 0) //(head) ELSE ADD_PED_FOR_DIALOGUE(sConversation, 7, pedMariachi[i], "MARIACHI2") SET_PED_COMPONENT_VARIATION(pedMariachi[i], INT_TO_ENUM(PED_COMPONENT,0), 2, 1, 0) //(head) ENDIF ENDIF ENDREPEAT #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Finished creating Mariachi car") ENDIF #ENDIF ENDPROC /// PURPOSE: /// Handles debug skipping. /// PARAMS: /// i_new_state - The state to debug skip to. PROC MIN1_DEBUG_SKIP_STATE(INT i_new_state) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Starting debug skip to ", i_new_state, "...") ENDIF #ENDIF RC_START_Z_SKIP() bZSkipping = TRUE tSavedConversationRoot = "" IF NOT IS_REPLAY_BEING_SET_UP() SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), GET_ENTITY_COORDS(PLAYER_PED_ID())) // If doing a z skip ensure he's warped out of the patrol vehicle cos we need to delete it ENDIF MIN1_MISSION_CLEANUP(TRUE) REMOVE_ALL_SHOCKING_EVENTS(FALSE) // B*1469724 - Try to let scenario peds respawn immediately REMOVE_SHOCKING_EVENT_SPAWN_BLOCKING_AREAS() // B*1407724 - And another try CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), 100, TRUE) iCurrentShotVehicleDialogue = 0 SWITCH i_new_state CASE Z_SKIP_INTRO missionStateSkip = stateIntro BREAK CASE Z_SKIP_GO_TO_BAR MIN1_SETUP_PATROL_VEHICLE(<<321.687347,3408.640625,35.343765>>, -105.797066) CREATE_VEHICLE_FOR_REPLAY(vehForReplay, vPlayerCarRespot, fPlayerCarRespot, FALSE, FALSE, FALSE, FALSE, FALSE) missionStateSkip = stateGoToBar BREAK CASE Z_SKIP_GO_INSIDE_BAR MIN1_SETUP_PATROL_VEHICLE(<< 1981.662720,3076.814209,46.637543 >>, -140.250092) bIsInteriorPinned = FALSE missionStateSkip = stateGoInsideBar BREAK CASE Z_SKIP_CHASE_CAR MIN1_LOAD_ASSETS_FOR_MISSION_STATE(stateGoOutsideBar) MIN1_SETUP_PATROL_VEHICLE(<< 1995.8782, 3058.1973, 46.6988 >>, 45.833717, TRUE) MIN1_SPAWN_MARIACHI_CAR(vMariachiCar, fMariachiCar, 4000) MIN1_CHANGE_ROAD_NODES_FOR_CAR_CHASE(FALSE) missionStateSkip = stateChaseMariachiCar BREAK CASE Z_SKIP_STUN_MARIACHI MIN1_LOAD_ASSETS_FOR_MISSION_STATE(stateGoOutsideBar) MIN1_SETUP_PATROL_VEHICLE(<< 2673.9829, 4277.2314, 43.6559 >>, 25.4114) MIN1_SPAWN_MARIACHI_CAR(<< 2668.0261, 4288.9590, 43.7695 >>, 28.0026, -1, FALSE) missionStateSkip = stateStunMariachiPeds BREAK CASE Z_SKIP_MISSION_PASSED MIN1_LOAD_ASSETS_FOR_MISSION_STATE(stateMissionPassed) IF NOT IS_REPLAY_BEING_SET_UP() SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<2698.2053, 4135.9048, 42.8234>>, 323.4031) ENDIF MIN1_CREATE_VEHICLE(vehMariachiCar, modelMariachiCar, <<2699.6541, 4141.0044, 42.6652>>, 312.6240, 15) SET_MODEL_AS_NO_LONGER_NEEDED(modelMariachiCar) missionStateSkip = stateMissionPassed BREAK ENDSWITCH IF NOT IS_REPLAY_BEING_SET_UP() WAIT_FOR_WORLD_TO_LOAD(GET_ENTITY_COORDS(PLAYER_PED_ID())) ENDIF IF i_new_state = Z_SKIP_CHASE_CAR bStartedOutsideBarConversation = TRUE // If retrying the player is already in the patrol vehicle so don't play this ENDIF IF i_new_state = Z_SKIP_GO_TO_BAR OR i_new_state = Z_SKIP_GO_INSIDE_BAR OR i_new_state = Z_SKIP_CHASE_CAR OR i_new_state = Z_SKIP_STUN_MARIACHI END_REPLAY_SETUP(vehPatrolVehicle) ELSE END_REPLAY_SETUP() ENDIF IF i_new_state = Z_SKIP_MISSION_PASSED SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) SAFE_FADE_SCREEN_IN_FROM_BLACK() // Screen needs to be fully faded back in before the mission complete GUI stuff will display ENDIF IF i_new_state = Z_SKIP_INTRO RC_END_Z_SKIP(TRUE, FALSE) ELSE RC_END_Z_SKIP() ENDIF missionStateMachine = MIN1_STATE_MACHINE_CLEANUP #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Finished debug skip to ", i_new_state) ENDIF #ENDIF ENDPROC /// PURPOSE: /// Setup Joe/Josef for cutscene. PROC MIN1_SETUP_JOE_JOSEF_CUTSCENE_PROPS() IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY() // B*1420964 #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_MISSION, "MINUTE1: CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY is TRUE") #ENDIF //SET_CUTSCENE_PED_PROP_VARIATION("Joe", ANCHOR_HEAD, 0, 0) // Setting a hat on Joe causes B*1509088 SET_CUTSCENE_PED_PROP_VARIATION("Joe", ANCHOR_EYES, 0, 0) SET_CUTSCENE_PED_PROP_VARIATION("Josef", ANCHOR_HEAD, 0, 0) SET_CUTSCENE_PED_PROP_VARIATION("Josef", ANCHOR_EYES, 0, 0) ENDIF ENDPROC /// PURPOSE: /// Make/stop Joe and Josef look at the player. PROC MIN1_MAKE_BUDDIES_LOOK_AT_PLAYER(BOOL b_look_at_player) INT i = 0 REPEAT NUM_BUDDIES i IF IS_ENTITY_ALIVE(pedBuddy[i].ped) IF b_look_at_player TASK_LOOK_AT_ENTITY(pedBuddy[i].ped, PLAYER_PED_ID(), -1, SLF_WHILE_NOT_IN_FOV) ELSE TASK_CLEAR_LOOK_AT(pedBuddy[i].ped) ENDIF ENDIF ENDREPEAT IF b_look_at_player #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Made buddies look at player") ENDIF #ENDIF ELSE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopped buddies looking at player") ENDIF #ENDIF ENDIF ENDPROC /// PURPOSE: /// Returns TRUE if the player is in the patrol vehicle. FUNC BOOL MIN1_IS_PLAYER_IN_PATROL_VEHICLE() IF IS_ENTITY_ALIVE(vehPatrolVehicle) AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle) RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Returns TRUE if a conversation can be played. FUNC BOOL MIN1_ALLOW_CONVERSATION_TO_PLAY(BOOL b_check_for_interrupted_conversations = TRUE, BOOL b_check_for_god_text = TRUE) IF bZSkipping = TRUE RETURN FALSE ENDIF IF b_check_for_god_text = TRUE // If FALSE the conversation is set to not display subtitles ever, so play conversation regardless of whether there is god text onscreen or not AND IS_MESSAGE_BEING_DISPLAYED() AND GET_PROFILE_SETTING(PROFILE_DISPLAY_SUBTITLES) > 0 // B*665755 Support playing conversations over god text when subtitles are turned off RETURN FALSE ENDIF IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() RETURN FALSE ENDIF IF b_check_for_interrupted_conversations = TRUE AND NOT ARE_STRINGS_EQUAL(tSavedConversationRoot, "") // A conversation has been interrupted and still needs to be restored RETURN FALSE ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Handles playing the conversation if the player exits the player vehicle. PROC MIN1_MANAGE_EXIT_VEHICLE_CONVERSATION() IF bStartedStopDriveConversation = FALSE AND missionState = stateGoToBar AND MIN1_ALLOW_CONVERSATION_TO_PLAY(FALSE) AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_GETSOUT", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_GETSOUT conversation") ENDIF #ENDIF bStartedStopDriveConversation = TRUE ENDIF ENDPROC /// PURPOSE: /// State machine for objectives whenever the player is expected to drive in the patrol vehicle. PROC MIN1_MANAGE_PATROL_VEHICLE_OBJECTIVES() IF IS_ENTITY_ALIVE(vehPatrolVehicle) SWITCH pvStatus CASE PV_STATUS_PLAYER_NOT_INSIDE IF missionState = stateGoToBar AND GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0 SAFE_REMOVE_BLIP(blipPatrolVehicle) bDisplayObjective = TRUE pvStatus = PV_STATUS_LOSE_WANTED_LEVEL ELSE HANDLE_BUDDY_HEAD_TRACK_WHILE_ENTERING_VEHICLE() IF MIN1_IS_PLAYER_IN_PATROL_VEHICLE() CLEAR_PRINTS() SAFE_REMOVE_BLIP(blipPatrolVehicle) bDisplayObjective = TRUE IF missionState = stateGoToBar pvStatus = PV_STATUS_LOSE_WANTED_LEVEL ELSE pvStatus = PV_STATUS_GO_TO_DESTINATION ENDIF ELSE IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() AND NOT DOES_BLIP_EXIST(blipPatrolVehicle) blipPatrolVehicle = CREATE_VEHICLE_BLIP(vehPatrolVehicle) IF iNumToldToGetInPatrolVehicle = 0 PRINT_NOW("MIN1_01", 5000, 1) // Get in the ~b~patrol vehicle. iNumToldToGetInPatrolVehicle++ ELIF iNumToldToGetInPatrolVehicle = 1 PRINT_NOW("MIN1_08", 5000, 1) // Get back in the ~b~patrol vehicle. iNumToldToGetInPatrolVehicle++ ELSE CLEAR_PRINTS() ENDIF ENDIF MIN1_MANAGE_EXIT_VEHICLE_CONVERSATION() ENDIF ENDIF BREAK CASE PV_STATUS_LOSE_WANTED_LEVEL IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0 CLEAR_PRINTS() IF MIN1_IS_PLAYER_IN_PATROL_VEHICLE() bDisplayObjective = TRUE pvStatus = PV_STATUS_GO_TO_DESTINATION ELSE pvStatus = PV_STATUS_PLAYER_NOT_INSIDE ENDIF ELIF bDisplayObjective = TRUE bDisplayObjective = FALSE PRINT_NOW("MIN1_02", 5000, 1) // Lose the cops. ENDIF BREAK CASE PV_STATUS_GO_TO_DESTINATION IF missionState = stateGoToBar AND GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0 SAFE_REMOVE_BLIP(blipDestination) bDisplayObjective = TRUE pvStatus = PV_STATUS_LOSE_WANTED_LEVEL ELSE IF MIN1_IS_PLAYER_IN_PATROL_VEHICLE() IF NOT DOES_BLIP_EXIST(blipDestination) SWITCH missionState CASE stateGoToBar blipDestination = CREATE_COORD_BLIP(vBarInside) BREAK CASE stateChaseMariachiCar IF IS_ENTITY_ALIVE(vehMariachiCar) blipDestination = CREATE_BLIP_FOR_VEHICLE(vehMariachiCar, TRUE) ENDIF BREAK ENDSWITCH ENDIF IF bDisplayObjective = TRUE bDisplayObjective = FALSE IF iNumToldToGoToDestination < 1 SWITCH missionState CASE stateGoToBar PRINT_NOW("MIN1_03", 5000, 1) // Go to the ~y~illegals. BREAK CASE stateChaseMariachiCar PRINT_NOW("MIN1_06", 5000, 1) // Stop the ~r~mariachi band's car. BREAK ENDSWITCH iNumToldToGoToDestination++ ELSE CLEAR_PRINTS() ENDIF MIN1_MAKE_BUDDIES_LOOK_AT_PLAYER(FALSE) ENDIF IF GET_VEHICLE_TYRES_CAN_BURST(vehPatrolVehicle) SET_VEHICLE_TYRES_CAN_BURST(vehPatrolVehicle, FALSE) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Set to can't burst patrol vehicle tyres") ENDIF #ENDIF ENDIF ELIF GET_ENTITY_SPEED(vehPatrolVehicle) < 1 SAFE_REMOVE_BLIP(blipDestination) MIN1_MAKE_BUDDIES_LOOK_AT_PLAYER(TRUE) IF NOT GET_VEHICLE_TYRES_CAN_BURST(vehPatrolVehicle) SET_VEHICLE_TYRES_CAN_BURST(vehPatrolVehicle, TRUE) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Set to can burst patrol vehicle tyres") ENDIF #ENDIF ENDIF pvStatus = PV_STATUS_PLAYER_NOT_INSIDE ELSE BRING_VEHICLE_TO_HALT(vehPatrolVehicle, 10.0, 1) ENDIF ENDIF BREAK ENDSWITCH ENDIF ENDPROC /// PURPOSE: /// Resets the patrol vehicle variables. PROC MIN1_RESET_PATROL_VEHICLE_VARS() iNumToldToGetInPatrolVehicle = 1 // B*1299260 iNumToldToGoToDestination = 0 bDisplayObjective = TRUE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Patrol vehicle vars reset") ENDIF #ENDIF ENDPROC /// PURPOSE: /// Resets the chase conversation variables. PROC MIN1_RESET_CHASE_CONVERSATION_VARS() INT i = 0 REPEAT NUM_CHASE_CONVERSATIONS i bDoneChaseConversation[i] = FALSE sChaseConversation[i] = "MIN1_CHASE" sChaseConversation[i] += (i+1) ENDREPEAT iDoneChaseConversations = 0 i = 0 REPEAT NUM_CRASH_CONVERSATIONS i bStartedCrashConversation[i] = FALSE ENDREPEAT iDoneCrashConversations = 0 ENDPROC /// PURPOSE: /// Resets the hurry stun conversation variables. PROC MIN1_RESET_HURRY_STUN_CONVERSATION_VARS() INT i = 0 REPEAT NUM_HURRY_STUN_CONVERSATIONS i sHurryStunConversation[i] = "MIN1_HURRY" sHurryStunConversation[i] += (i+1) ENDREPEAT iHurryStunConversationsPlayed = 0 ENDPROC /// PURPOSE: /// Handles playing the conversation when they've almost reached the bar. PROC MIN1_MANAGE_ALMOST_THERE_CONVERSATION() IF bStartedAlmostThereConversation = FALSE AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND IS_ENTITY_IN_RANGE_COORDS(vehPatrolVehicle, vBarOutside, 60) // Don't play until near to the bar AND NOT IS_ENTITY_IN_RANGE_COORDS(vehPatrolVehicle, vBarOutside, 40) // ...but not too near AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_ALMOST", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_ALMOST conversation") ENDIF #ENDIF bStartedAlmostThereConversation = TRUE ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversation if the player drives away from the bar. PROC MIN1_MANAGE_WRONG_WAY_CONVERSATION() IF bStartedWrongWayConversation = FALSE AND bFinishedDriveToBarConversation = TRUE AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(vehPatrolVehicle, vBarOutside) > fWrongWayDistance+50 AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_WRONG", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_WRONG conversation") ENDIF #ENDIF bStartedWrongWayConversation = TRUE ENDIF ENDPROC /// PURPOSE: /// Play the next drive to bar conversation in the sequence. PROC MIN1_MANAGE_DRIVE_TO_BAR_CONVERSATION() IF bFinishedDriveToBarConversation = FALSE IF bStartedDriveToBarConversation = FALSE IF MIN1_ALLOW_CONVERSATION_TO_PLAY() AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_DRIVEA", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_DRIVEA conversation") ENDIF #ENDIF bStartedDriveToBarConversation = TRUE ENDIF ELSE IF ARE_STRINGS_EQUAL(tSavedConversationRoot, "") IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() tSavedConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION() IF NOT MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND NOT IS_ENTITY_IN_RANGE_COORDS(vehPatrolVehicle, vBarOutside, 20) // B*1378563 Don't pause conversation as player has arrived at the bar tSavedConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT() #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping and storing conversation ", tSavedConversationRoot) ENDIF #ENDIF KILL_ANY_CONVERSATION() ENDIF ELIF ARE_STRINGS_EQUAL(tSavedConversationLabel, "NULL") // Wait until MIN1_DRIVEA conversation has finished bFinishedDriveToBarConversation = TRUE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Finished MIN1_DRIVEA conversation") ENDIF #ENDIF IF IS_ENTITY_ALIVE(vehPatrolVehicle) fWrongWayDistance = GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(vehPatrolVehicle, vBarOutside) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: fWrongWayDistance = ", fWrongWayDistance) ENDIF #ENDIF ENDIF ENDIF ELSE // A conversation has been stored so we need to check for conditions to restore it IF MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND MIN1_ALLOW_CONVERSATION_TO_PLAY(FALSE) AND CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sConversation, "MIN1AUD", tSavedConversationRoot, tSavedConversationLabel, CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Restoring conversation ", tSavedConversationRoot) ENDIF #ENDIF tSavedConversationRoot = "" ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Checks the player doesn't abandon the patrol vehicle, and fails the mission if necessary. PROC MIN1_MANAGE_ABANDONING_VEHICLE() IF bZSkipping = FALSE IF pvStatus = PV_STATUS_PLAYER_NOT_INSIDE OR pvStatus = PV_STATUS_LOSE_WANTED_LEVEL IF IS_ENTITY_ALIVE(vehPatrolVehicle) AND NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle) AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehPatrolVehicle) > 100 MIN1_MISSION_FAILED(FAILED_ABANDONED_BUDDIES) ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Pin/unpin interior depending on distance. See B*1080382. PROC MIN1_MANAGE_INTERIOR_PINNING() IF IS_ENTITY_IN_RANGE_COORDS(vehPatrolVehicle, vBarOutside, 100) IF bIsInteriorPinned = FALSE PIN_INTERIOR_IN_MEMORY(interiorBar) bIsInteriorPinned = TRUE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Pinned bar interior into memory") ENDIF #ENDIF ENDIF ELSE IF bIsInteriorPinned = TRUE UNPIN_INTERIOR(interiorBar) bIsInteriorPinned = FALSE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Unpinned bar interior from memory") ENDIF #ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// For B*1084002 - Prevent scenario peds in bar becoming agitated PROC MIN1_DISABLE_TREVOR_AGITATION_TRIGGERS() IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableAgitationTriggers, TRUE) SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableAgitation, TRUE) SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisableTalk, TRUE) ENDIF ENDPROC /// PURPOSE: /// Handles playing the arrived at bar conversation. PROC MIN1_MANAGE_ARRIVED_AT_BAR_CONVERSATION() IF MIN1_ALLOW_CONVERSATION_TO_PLAY() IF bStartedArrivedAtBarConversation = FALSE IF CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_ATBAR", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_ATBAR conversation") ENDIF #ENDIF bStartedArrivedAtBarConversation = TRUE ENDIF ELIF NOT DOES_BLIP_EXIST(blipDestination) blipDestination = CREATE_COORD_BLIP(vBarInside, BLIPPRIORITY_HIGH, FALSE) PRINT_NOW("MIN1_03", 5000, 1) // Go to the ~y~illegals. ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversations is the player remains in the car outside the bar. PROC MIN1_MANAGE_WAIT_CONVERSATIONS() IF iWaitConversationsPlayed < 5 AND (GET_GAME_TIMER() - iWaitConversationTimer) > 10000 AND MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_WAIT", CONV_PRIORITY_HIGH) iWaitConversationsPlayed++ #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_WAIT conversation, iWaitConversationsPlayed is now ", iWaitConversationsPlayed) ENDIF #ENDIF iWaitConversationTimer = GET_GAME_TIMER() ENDIF ENDPROC /// PURPOSE: /// See B*947514. Handles Trevor looking for the mariachi inside the bar. PROC MIN1_MANAGE_TREVOR_LOOKING_FOR_MARIACHI() IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) AND (GET_GAME_TIMER() - iLookAroundTimer) > 1500 AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interiorBar IF GET_RANDOM_INT_IN_RANGE(0, 2) = 0 TASK_LOOK_AT_COORD(PLAYER_PED_ID(), GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <>), 2000) ELSE TASK_LOOK_AT_COORD(PLAYER_PED_ID(), GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <>), 2000) ENDIF iLookAroundTimer = GET_GAME_TIMER() ENDIF ENDPROC /// PURPOSE: /// Handles playing Janet's dialogue when Trevor walks into the bar. PROC MIN1_MANAGE_JANET_CONVERSATION() IF bDoneJanetTalk = FALSE AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1987.802856,3055.128418,45.215298>>, <<1986.586548,3053.183838,48.215187>>, 1.500000) SET_SCENARIO_PEDS_TO_BE_RETURNED_BY_NEXT_COMMAND(TRUE) IF GET_CLOSEST_PED(<<1983.41, 3054.88, 47.01>>, 3, TRUE, TRUE, pedJanet) AND IS_ENTITY_ALIVE(pedJanet) IF GET_ENTITY_MODEL(pedJanet) = IG_JANET KILL_ANY_CONVERSATION() // Stop the drunk ped conversation if ongoing ADD_PED_FOR_DIALOGUE(sConversation, 8, pedJanet, "JANET") ADD_NON_CRITICAL_STANDARD_CONVERSATION_TO_BUFFER(sConversation, "MIN1AUD", "MIN1_BANNED", CONV_PRIORITY_AMBIENT_MEDIUM) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_BANNED conversation") ENDIF #ENDIF ELSE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Found a ped in the bar but it wasn't Janet, so no doing MIN1_BANNED conversation") ENDIF #ENDIF ENDIF bDoneJanetTalk = TRUE ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing the drunken hillbilly dialogue. PROC MIN1_MANAGE_DRUNK_PED_CONVERSATION() IF bStartedDrunkPedConversation = FALSE IF MIN1_ALLOW_CONVERSATION_TO_PLAY() ADD_NON_CRITICAL_STANDARD_CONVERSATION_TO_BUFFER(sConversation, "MIN1AUD", "MIN1_DRUNK", CONV_PRIORITY_AMBIENT_MEDIUM) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_DRUNK conversation") ENDIF #ENDIF bStartedDrunkPedConversation = TRUE ENDIF ELIF bStartedBumpDrunkConversation = FALSE IF IS_PED_FLEEING(pedWalkOutBar) CPRINTLN(DEBUG_MISSION, "pedWalkOutBar is now fleeing") IF RC_IS_THIS_CONVERSATION_ROOT_PLAYING("MIN1_DRUNK") CPRINTLN(DEBUG_MISSION, "MIN1_DRUNK was playing so killing the conversation") KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() ENDIF ADD_NON_CRITICAL_STANDARD_CONVERSATION_TO_BUFFER(sConversation, "MIN1AUD", "MIN1_BUMP", CONV_PRIORITY_AMBIENT_MEDIUM) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_BUMP conversation") ENDIF #ENDIF bStartedBumpDrunkConversation = TRUE ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles hurling the drunk out of the bar door when the player approaches. PROC MIN1_MANAGE_DRUNK_PED_OUT_DOOR() IF bZSkipping = FALSE // Stops ped being spawned if skipping to chase car section IF bPedGoneOutDoor = FALSE IF IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), vWalkOutBarPed, 20) AND NOT DOES_ENTITY_EXIST(pedWalkOutBar) MIN1_CREATE_PED(pedWalkOutBar, modelPed[MIN1_MODEL_DRUNK_PED_1], vWalkOutBarPed, fWalkOutBarPed) SET_MODEL_AS_NO_LONGER_NEEDED(modelPed[MIN1_MODEL_DRUNK_PED_1]) SET_PED_CONFIG_FLAG(pedWalkOutBar, PCF_OpenDoorArmIK, TRUE) // B*1299271 Make the ped search for the door SET_PED_COMBAT_ATTRIBUTES(pedWalkOutBar, CA_AGGRESSIVE, FALSE) SET_PED_COMBAT_ATTRIBUTES(pedWalkOutBar, CA_ALWAYS_FLEE, TRUE) SET_PED_FLEE_ATTRIBUTES(pedWalkOutBar, FA_USE_VEHICLE, FALSE) ADD_PED_FOR_DIALOGUE(sConversation, 5, pedWalkOutBar, "MIN1DRUNKMALE") OPEN_SEQUENCE_TASK(drunkSequence) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<1992.0579, 3056.1792, 46.0630>>, PEDMOVE_WALK) TASK_WANDER_IN_AREA(NULL, <<1994,3059,47>>, 5) CLOSE_SEQUENCE_TASK(drunkSequence) TASK_PERFORM_SEQUENCE(pedWalkOutBar, drunkSequence) CLEAR_SEQUENCE_TASK(drunkSequence) Make_Ped_Drunk_Constant(pedWalkOutBar) bPedGoneOutDoor = TRUE ENDIF ELIF IS_ENTITY_ALIVE(pedWalkOutBar) MIN1_MANAGE_DRUNK_PED_CONVERSATION() SET_PED_RESET_FLAG(pedWalkOutBar, PRF_SearchForClosestDoor, TRUE) // B*1299271 Make the ped search for the door ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles the conversation inside the bar. PROC MIN1_MANAGE_IN_BAR_CONVERSATION() IF MIN1_ALLOW_CONVERSATION_TO_PLAY() IF bStartedInBarConversation = FALSE IF CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_INBAR", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_INBAR conversation") ENDIF #ENDIF bStartedInBarConversation = TRUE ENDIF ELIF NOT DOES_BLIP_EXIST(blipPatrolVehicle) IF IS_ENTITY_ALIVE(vehPatrolVehicle) blipPatrolVehicle = CREATE_VEHICLE_BLIP(vehPatrolVehicle) PRINT_NOW("MIN1_01", DEFAULT_GOD_TEXT_TIME, 1) // Get in the ~b~patrol vehicle. ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles the conversation in which Joe tells Trevor to get outside. PROC MIN1_MANAGE_GET_OUT_HERE_CONVERSATION() IF bStartedGetOutHereConversation = FALSE AND MIN1_ALLOW_CONVERSATION_TO_PLAY(TRUE, FALSE) AND IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), <<1987.8, 3053.5, 46.1>>, 1.5) AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_GETOUT", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_GETOUT conversation") ENDIF #ENDIF bStartedGetOutHereConversation = TRUE ENDIF ENDPROC /// PURPOSE: /// Handles Joe telling the player to get into the patrol vehicle. PROC MIN1_MANAGE_OUTSIDE_BAR_CONVERSATIONS() IF bStartedOutsideBarConversation = FALSE IF MIN1_ALLOW_CONVERSATION_TO_PLAY(TRUE, FALSE) AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_OUTBAR", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_OUTBAR conversation") ENDIF #ENDIF REPLAY_RECORD_BACK_FOR_TIME(2.0, 4.0, REPLAY_IMPORTANCE_LOWEST) bStartedOutsideBarConversation = TRUE ENDIF ELIF bStartedChaseVanConversation = FALSE // Don't play these remainders if the player has got into the patrol vehicle IF iGetInConversationsPlayed < 3 AND NOT MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_WAIT2", CONV_PRIORITY_HIGH) iGetInConversationsPlayed++ #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_WAIT2 conversation, iGetInConversationsPlayed is now ", iGetInConversationsPlayed) ENDIF #ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversation upon spotting the Mariachi van. PROC MIN1_MANAGE_START_CHASE_CONVERSATION() IF bStartedOutsideBarConversation = TRUE IF bStartedChaseVanConversation = FALSE IF MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND (GET_GAME_TIMER() - iStunGunDialogueTimer) > 5000 AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_DRIVEB", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_DRIVEB conversation") ENDIF #ENDIF bStartedChaseVanConversation = TRUE bPlayerIsCurrentlyInPatrolVehicle = TRUE SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(CP_CAR_CHASE, "Car chase", TRUE) // B*853089 Don't set the checkpoint until the player has got into the patrol vehicle outside the bar ENDIF ELIF NOT HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_STUNGUN) // B*573295 IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() TEXT_LABEL_23 t_conversation_label = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION() IF ARE_STRINGS_EQUAL(t_conversation_label, "MIN1_DRIVEB_4") GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_STUNGUN, 200, TRUE) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_STUNGUN, TRUE) // B*1353528 PLAY_SOUND_FRONTEND(-1, "STUN_COLLECT", "MINUTE_MAN_01_SOUNDSET") #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Gave stun gun to player") ENDIF #ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing the anims on the mariachi peds while in their car. PROC MIN1_MANAGE_MARIACHI_ANIMS() IF bUsePlaybackAIForMariachiCar = FALSE // B*1256009 Prevent anim tasks stopping the ai playback task INT i_random INT i = 0 REPEAT NUM_MARIACHI_PEDS i IF IS_ENTITY_ALIVE(pedMariachi[i]) IF NOT IsPedPerformingTask(pedMariachi[i], SCRIPT_TASK_PLAY_ANIM) IF fCurrentPositionInRecording > 1100 i_random = 0 // Just use the base anims when nearing driving under AI playback ELSE i_random = GET_RANDOM_INT_IN_RANGE(0, 5) ENDIF IF i = 0 SWITCH i_random CASE 0 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_1", "base_drunk_mariachi_01", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE) BREAK CASE 1 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_1", "idle_sing_1_mariachi_01", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE) BREAK CASE 2 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_1", "idle_sing_2_mariachi_01", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE) BREAK CASE 3 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_1", "idle_tequila_mariachi_01", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE) BREAK CASE 4 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_1", "idle_waive_mariachi_01", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE) BREAK ENDSWITCH ELSE SWITCH i_random CASE 0 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_1", "base_drunk_mariachi_02", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE) BREAK CASE 1 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_1", "idle_sing_1_mariachi_02", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE) BREAK CASE 2 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_1", "idle_sing_2_mariachi_02", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE) BREAK CASE 3 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_1", "idle_tequila_mariachi_02", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE) BREAK CASE 4 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_1", "idle_waive_mariachi_02", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_NOT_INTERRUPTABLE) BREAK ENDSWITCH ENDIF ENDIF ENDIF ENDREPEAT ENDIF ENDPROC /// PURPOSE: /// Returns TRUE if we should play some drunken dialogue. FUNC BOOL MIN1_TRY_TO_PLAY_SINGING_DIALOGUE() IF fCurrentPositionInRecording > 1400 RETURN FALSE ENDIF IF bStartedChaseVanConversation = FALSE RETURN FALSE ENDIF IF (GET_GAME_TIMER() - iSingingDialogueTimer) < 10000 RETURN FALSE ENDIF IF IS_ENTITY_ALIVE(vehMariachiCar) AND NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), vehMariachiCar, 50) RETURN FALSE ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Handles playing the drunken Mariachi dialogue. PROC MIN1_MANAGE_SINGING_DIALOGUE() IF MIN1_TRY_TO_PLAY_SINGING_DIALOGUE() iSingingDialogueTimer = GET_GAME_TIMER() IF GET_RANDOM_INT_IN_RANGE(0, 2) = 0 ADD_NON_CRITICAL_STANDARD_CONVERSATION_TO_BUFFER(sConversation, "MIN1AUD", "MIN1_SING1", CONV_PRIORITY_AMBIENT_MEDIUM, DO_NOT_DISPLAY_SUBTITLES) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_SING1 dialogue") ENDIF #ENDIF ELSE ADD_NON_CRITICAL_STANDARD_CONVERSATION_TO_BUFFER(sConversation, "MIN1AUD", "MIN1_SING2", CONV_PRIORITY_AMBIENT_MEDIUM, DO_NOT_DISPLAY_SUBTITLES) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_SING2 dialogue") ENDIF #ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing the van chase dialogue from Joe and Josef. PROC MIN1_MANAGE_CHASE_CONVERSATIONS() IF iDoneChaseConversations < NUM_CHASE_CONVERSATIONS //AND fCurrentPositionInRecording < 1200 // B*1413441 Allow these conversations to play earlier AND fCurrentPositionInRecording < 1250 // B*1563150 Don't allow these conversation to play near the end of the chase AND bStartedChaseVanConversation = TRUE //AND bStartedOffRoadConversation = TRUE // B*1413441 Allow these conversations to play earlier AND (GET_GAME_TIMER() - iChaseDialogueTimer) > 12000 AND MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND IS_ENTITY_ALIVE(vehMariachiCar) AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), vehMariachiCar, 50) AND MIN1_ALLOW_CONVERSATION_TO_PLAY() INT i = GET_RANDOM_INT_IN_RANGE(0, NUM_CHASE_CONVERSATIONS) IF bDoneChaseConversation[i] = FALSE AND CREATE_CONVERSATION(sConversation, "MIN1AUD", sChaseConversation[i], CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started ", sChaseConversation[i], " dialogue") ENDIF #ENDIF bDoneChaseConversation[i] = TRUE iChaseDialogueTimer = GET_GAME_TIMER() iDoneChaseConversations++ #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: iDoneChaseConversations = ", iDoneChaseConversations) ENDIF #ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing conversations when the player lands after big jumps. PROC MIN1_MANAGE_CRASH_CONVERSATIONS() IF iDoneCrashConversations < NUM_CRASH_CONVERSATIONS AND MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND MIN1_ALLOW_CONVERSATION_TO_PLAY() INT i = 0 REPEAT NUM_CRASH_CONVERSATIONS i IF bStartedCrashConversation[i] = FALSE AND GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vCrashConversationPos[i]) < 10 AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_CRASH2", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_CRASH2 dialogue") ENDIF #ENDIF bStartedCrashConversation[i] = TRUE iDoneCrashConversations++ #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: iDoneCrashConversations = ", iDoneCrashConversations) ENDIF #ENDIF ENDIF ENDREPEAT ENDIF ENDPROC /// PURPOSE: /// Handles displaying the hint camera and text for the mariachi car. PROC MIN1_MANAGE_MARIACHI_CAR_FOCUS_CAMERA() IF bStartedChaseVanConversation = TRUE AND IS_ENTITY_ALIVE(vehMariachiCar) CONTROL_ENTITY_CHASE_HINT_CAM_IN_VEHICLE(localChaseHintCamStruct, vehMariachiCar, "MIN1_05") ENDIF ENDPROC /// PURPOSE: /// Returns TRUE if either Mariachi leaves the van (probably getting dragged out by the player). FUNC BOOL MIN1_HAS_EITHER_MARIACHI_LEFT_VAN() IF IS_ENTITY_ALIVE(vehMariachiCar) IF IS_ENTITY_ALIVE(pedMariachi[0]) AND NOT IS_PED_IN_VEHICLE(pedMariachi[0], vehMariachiCar) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: pedMariachi[0] left vehicle") ENDIF #ENDIF RETURN TRUE ENDIF IF IS_ENTITY_ALIVE(pedMariachi[1]) AND NOT IS_PED_IN_VEHICLE(pedMariachi[1], vehMariachiCar) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: pedMariachi[1] left vehicle") ENDIF #ENDIF RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Returns TRUE if either Mariachi is low on health (probably due to being shot by the player). FUNC BOOL MIN1_IF_EITHER_MARIACHI_ALMOST_DEAD() IF IS_ENTITY_ALIVE(vehMariachiCar) IF IS_ENTITY_ALIVE(pedMariachi[0]) AND GET_ENTITY_HEALTH(pedMariachi[0]) < 200 #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: pedMariachi[0] health low") ENDIF #ENDIF RETURN TRUE ENDIF IF IS_ENTITY_ALIVE(pedMariachi[1]) AND GET_ENTITY_HEALTH(pedMariachi[1]) < 200 #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: pedMariachi[1] health low") ENDIF #ENDIF RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Checks player distance to the Mariachi peds, and fails mission if the distance gets too far. PROC MIN1_MANAGE_ABANDONING_MARIACHI() IF bZSkipping = FALSE IF IS_ENTITY_ALIVE(vehMariachiCar) IF DOES_BLIP_EXIST(blipDestination) AND pvStatus = PV_STATUS_GO_TO_DESTINATION UPDATE_CHASE_BLIP(blipDestination, vehMariachiCar, fFailDist, 0.8) // B*904083 ENDIF ENDIF INT i = 0 REPEAT NUM_MARIACHI_PEDS i IF IS_ENTITY_ALIVE(pedMariachi[i]) AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedMariachi[i]) > fFailDist IF missionState = stateStunMariachiPeds AND IS_ENTITY_ALIVE(pedBuddy[JOE].ped) AND IS_ENTITY_ALIVE(pedBuddy[JOSEF].ped) AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedBuddy[JOE].ped) > (fFailDist/2) // B*1435725 Only fail for abandoning Joe/Josef if they're not in the patrol vehicle and are not close, else use FAILED_MARIACHI_ESCAPED AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedBuddy[JOSEF].ped) > (fFailDist/2) MIN1_MISSION_FAILED(FAILED_ABANDONED_BUDDIES) ELSE MIN1_MISSION_FAILED(FAILED_MARIACHI_ESCAPED) ENDIF ENDIF ENDREPEAT ENDIF ENDPROC /// PURPOSE: /// Manages loading and playing the mariachi singing stream. PROC MIN1_MANAGE_PLAYING_SINGING_STREAM() IF bStartedSingingStream = FALSE AND LOAD_STREAM("MARIACHI", "MINUTE_MAN_01_SOUNDSET") AND IS_ENTITY_ALIVE(vehMariachiCar) SET_AUDIO_FLAG("DisableReplayScriptStreamRecording", TRUE) PLAY_STREAM_FROM_VEHICLE(vehMariachiCar) // Mariachi singing SET_AUDIO_FLAG("DisableReplayScriptStreamRecording", FALSE) bStartedSingingStream = TRUE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started singing stream") ENDIF #ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversation in which Joe/Josef comment on the Mariachi driving offroad. PROC MIN1_MANAGE_OFFROAD_CONVERSATION() IF bStartedOffRoadConversation = FALSE AND fCurrentPositionInRecording > 450 AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND IS_ENTITY_ALIVE(vehMariachiCar) AND MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), vehMariachiCar, 75) AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_OFFROAD", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_OFFROAD conversation") ENDIF #ENDIF bStartedOffRoadConversation = TRUE ENDIF ENDPROC /// PURPOSE: /// Handles playing a conversation if the player stops his car during the chase. PROC MIN1_MANAGE_STOPPED_CONVERSATIONS() IF iStoppedConversationsPlayed < 3 AND IS_ENTITY_ALIVE(vehPatrolVehicle) IF bPatrolVehicleStoppedDuringChase = FALSE // Patrol vehicle is moving IF MIN1_ALLOW_CONVERSATION_TO_PLAY() AND MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND GET_ENTITY_SPEED(vehPatrolVehicle) < 1 AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_STOP", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_STOP conversation") ENDIF #ENDIF iStoppedConversationsPlayed++ #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: iStoppedConversationsPlayed = ", iStoppedConversationsPlayed) ENDIF #ENDIF bPatrolVehicleStoppedDuringChase = TRUE ENDIF ELSE // Patrol vehicle is stationary IF GET_ENTITY_SPEED(vehPatrolVehicle) > 2 bPatrolVehicleStoppedDuringChase = FALSE ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversation if the player lags behind in the chase. PROC MIN1_MANAGE_FAR_BEHIND_CONVERSATIONS() IF iFarBehindConversationsPlayed < 3 AND IS_ENTITY_ALIVE(vehPatrolVehicle) AND IS_ENTITY_ALIVE(vehMariachiCar) IF bPlayedFarBehindConversation = FALSE IF MIN1_ALLOW_CONVERSATION_TO_PLAY() AND MIN1_IS_PLAYER_IN_PATROL_VEHICLE() AND GET_DISTANCE_BETWEEN_ENTITIES(vehPatrolVehicle, vehMariachiCar) > 100 AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_BEHIND", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_BEHIND conversation") ENDIF #ENDIF iFarBehindConversationsPlayed++ #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: iFarBehindConversationsPlayed = ", iFarBehindConversationsPlayed) ENDIF #ENDIF bPlayedFarBehindConversation = TRUE ENDIF ELIF GET_DISTANCE_BETWEEN_ENTITIES(vehPatrolVehicle, vehMariachiCar) < 75 bPlayedFarBehindConversation = FALSE // Reset flag so we can check again for the player lagging far behind and play another random conversation ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversation if the player leaves the patrol vehicle during the chase. PROC MIN1_MANAGE_LEAVE_VEHICLE_CONVERSATIONS() IF bStartedChaseVanConversation = TRUE // Only start checking this after the player has got back in to start the start AND fCurrentPositionInRecording < 1465 // Chase has almost ended so don't play any of these conversations AND IS_ENTITY_ALIVE(vehPatrolVehicle) IF bPlayerIsCurrentlyInPatrolVehicle = TRUE IF NOT MIN1_IS_PLAYER_IN_PATROL_VEHICLE() #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Player exited patrol vehicle") ENDIF #ENDIF bPlayerIsCurrentlyInPatrolVehicle = FALSE bAllowPlayExitedVehicleConversation = TRUE bAllowPlayGetBackInVehicleConversation = TRUE ELIF MIN1_ALLOW_CONVERSATION_TO_PLAY() IF iGotBackInVehicleConversationsPlayed < 3 AND bAllowPlayGotBackInVehicleConversation = TRUE AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_GOGO", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_GOGO conversation") ENDIF #ENDIF iGotBackInVehicleConversationsPlayed++ #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: iGotBackInVehicleConversationsPlayed = ", iGotBackInVehicleConversationsPlayed) ENDIF #ENDIF bAllowPlayGotBackInVehicleConversation = FALSE ENDIF ENDIF ELSE IF MIN1_IS_PLAYER_IN_PATROL_VEHICLE() #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Player got in patrol vehicle") ENDIF #ENDIF bPlayerIsCurrentlyInPatrolVehicle = TRUE bAllowPlayGotBackInVehicleConversation = TRUE ELIF MIN1_ALLOW_CONVERSATION_TO_PLAY() IF iExitedVehicleConversationsPlayed < 3 AND bAllowPlayExitedVehicleConversation = TRUE AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_GETIN", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_GETIN conversation") ENDIF #ENDIF iExitedVehicleConversationsPlayed++ #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: iExitedVehicleConversationsPlayed = ", iExitedVehicleConversationsPlayed) ENDIF #ENDIF bAllowPlayExitedVehicleConversation = FALSE ENDIF IF iGetBackInVehicleConversationsPlayed < 3 AND bAllowPlayGetBackInVehicleConversation = TRUE AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_BACKIN", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_BACKIN conversation") ENDIF #ENDIF iGetBackInVehicleConversationsPlayed++ #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: iGetBackInVehicleConversationsPlayed = ", iGetBackInVehicleConversationsPlayed) ENDIF #ENDIF bAllowPlayGetBackInVehicleConversation = FALSE ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Ensure the long chase conversation get stopped when the chase ends. PROC MIN1_STOP_ANY_CHASE_CONVERSATIONS() IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() TEXT_LABEL_23 t_root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT() IF ARE_STRINGS_EQUAL(t_root, sChaseConversation[0]) OR ARE_STRINGS_EQUAL(t_root, sChaseConversation[1]) OR ARE_STRINGS_EQUAL(t_root, sChaseConversation[2]) OR ARE_STRINGS_EQUAL(t_root, sChaseConversation[3]) OR ARE_STRINGS_EQUAL(t_root, sChaseConversation[4]) OR ARE_STRINGS_EQUAL(t_root, sChaseConversation[5]) OR ARE_STRINGS_EQUAL(t_root, sChaseConversation[6]) KILL_FACE_TO_FACE_CONVERSATION() #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Car chase finished so stopped a long chase conversation") ENDIF #ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Returns true if the player is closer to the end of the chase route than the mariachi car. FUNC BOOL MIN1_IS_PLAYER_NEARER_TO_END_OF_ROUTE() IF IS_ENTITY_ALIVE(vehMariachiCar) AND IS_ENTITY_ALIVE(PLAYER_PED_ID()) FLOAT f_dist_mariachi = GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(vehMariachiCar, vOpenGroundWanderArea) FLOAT f_dist_player = GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vOpenGroundWanderArea) IF f_dist_player < f_dist_mariachi RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Returns true if the player is closer to the end of the chase route than the mariachi car. FUNC BOOL MIN1_IS_MARIACHI_CAR_DOING_JUMP() IF IS_ENTITY_ALIVE(vehMariachiCar) IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(vehMariachiCar, <<2262, 3590, 58>>) < 15 OR GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(vehMariachiCar, <<2387, 3705, 53>>) < 15 OR GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(vehMariachiCar, <<2620, 3853, 72>>) < 15 RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Handle starting the vehicle recording when there is a driver, and subsequently stopping the vehicle recording if the driver leaves. PROC MIN1_MANAGE_MARIACHI_CAR_RECORDING() IF IS_ENTITY_ALIVE(vehMariachiCar) AND IS_ENTITY_ALIVE(vehPatrolVehicle) AND IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehMariachiCar) fCurrentPositionInRecording = GET_POSITION_IN_RECORDING(vehMariachiCar) //#IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Recording playback pos = ", fCurrentPositionInRecording) ENDIF #ENDIF IF IS_VEHICLE_SEAT_FREE(vehMariachiCar) STOP_PLAYBACK_RECORDED_VEHICLE(vehMariachiCar) ELSE FLOAT fDist = GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), vehMariachiCar) IF bUsePlaybackAIForMariachiCar = FALSE IF fCurrentPositionInRecording > 1250 // See B*640795 - Go into AI mode when the mariachi car is passed all the hills bUsePlaybackAIForMariachiCar = TRUE SET_PLAYBACK_TO_USE_AI(vehMariachiCar, DRIVINGMODE_PLOUGHTHROUGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Setting Mariachi car to use AI") ENDIF #ENDIF ELSE IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle) SET_PLAYBACK_SPEED(vehMariachiCar, 0.7) ELIF MIN1_IS_PLAYER_NEARER_TO_END_OF_ROUTE() // B*1294781 Set to max speed if the player is closer to the end of the route SET_PLAYBACK_SPEED(vehMariachiCar, 1.7) ELIF MIN1_IS_MARIACHI_CAR_DOING_JUMP() // B*1294781 Set to normal speed if doing a jump SET_PLAYBACK_SPEED(vehMariachiCar, 1.0) ELIF fDist > 75 SET_PLAYBACK_SPEED(vehMariachiCar, 0.5) ELIF fDist > 30 SET_PLAYBACK_SPEED(vehMariachiCar, 1.0) ELIF fDist > 20 SET_PLAYBACK_SPEED(vehMariachiCar, 1.3) ELIF fDist > 10 SET_PLAYBACK_SPEED(vehMariachiCar, 1.5) ELSE SET_PLAYBACK_SPEED(vehMariachiCar, 1.7) ENDIF ENDIF ELSE IF fDist > 75 SET_PLAYBACK_SPEED(vehMariachiCar, 0.5) ELIF fDist > 30 SET_PLAYBACK_SPEED(vehMariachiCar, 1.0) ELSE SET_PLAYBACK_SPEED(vehMariachiCar, 1.3) ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Returns TRUE if the Mariachi vehicle has been damaged enough to stop or for some other reason. FUNC BOOL MIN1_SHOULD_MARIACHI_VEHICLE_STOP() IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehMariachiCar) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping Mariachi vehicle - playback not playing on car") ENDIF #ENDIF SET_VEHICLE_ENGINE_HEALTH(vehMariachiCar, 200) RETURN TRUE ELIF bStartedCrashedConversation = FALSE IF fCurrentPositionInRecording > 1465 AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), vehMariachiCar, 75) AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_CRASH", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_CRASH conversation") ENDIF #ENDIF bStartedCrashedConversation = TRUE ENDIF ENDIF IF MIN1_HAS_EITHER_MARIACHI_LEFT_VAN() #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping Mariachi vehicle - at least one of the Mariachi has left the vehicle") ENDIF #ENDIF RETURN TRUE ENDIF IF MIN1_IF_EITHER_MARIACHI_ALMOST_DEAD() #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping Mariachi vehicle - at least one of the Mariachi has low health") ENDIF #ENDIF RETURN TRUE ENDIF IF GET_ENTITY_HEALTH(vehMariachiCar) < iRequiredHealth #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping Mariachi vehicle - entity health lower than threshold") ENDIF #ENDIF RETURN TRUE ENDIF IF bUsePlaybackAIForMariachiCar = TRUE IF IS_VEHICLE_STOPPED(vehMariachiCar) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping Mariachi vehicle - IS_VEHICLE_STOPPED returned true") ENDIF #ENDIF RETURN TRUE ENDIF IF GET_ENTITY_SPEED(vehMariachiCar) < 0.5 #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping Mariachi vehicle - GET_ENTITY_SPEED less than 0.5") ENDIF #ENDIF RETURN TRUE ENDIF IF bUsePlaybackAIForMariachiCar = TRUE // Don't check while on car recording only while under AI playback AND IS_ENTITY_UPSIDEDOWN(vehMariachiCar) // B*1377842 Get the mariachi out as soon as their car is upsidedown #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping Mariachi vehicle - upside down") ENDIF #ENDIF RETURN TRUE ENDIF ENDIF IF (GET_GAME_TIMER() - iMariachiCarTyresBurstTimer) > 1000 // Check for burst tyres once a second INT iTyresBurst = 0 IF IS_VEHICLE_TYRE_BURST(vehMariachiCar, SC_WHEEL_CAR_REAR_LEFT) iTyresBurst++ ENDIF IF IS_VEHICLE_TYRE_BURST(vehMariachiCar, SC_WHEEL_CAR_REAR_RIGHT) iTyresBurst++ ENDIF IF IS_VEHICLE_TYRE_BURST(vehMariachiCar, SC_WHEEL_CAR_FRONT_LEFT) iTyresBurst++ ENDIF IF IS_VEHICLE_TYRE_BURST(vehMariachiCar, SC_WHEEL_CAR_FRONT_RIGHT) iTyresBurst++ ENDIF IF iTyresBurst > 1 // B*1001500 - Stop car if any 2 tyres are burst #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping Mariachi vehicle - 2 tyres are burst") ENDIF #ENDIF RETURN TRUE ELSE iMariachiCarTyresBurstTimer = GET_GAME_TIMER() ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Handles performing a rolling start on the player's vehicle. PROC MIN1_MANAGE_ROLLING_START() IF bDoneRollingStart = FALSE IF IS_VEHICLE_OK(vehPatrolVehicle) IF iRollingStartTimer = -1 iRollingStartTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Rolling start underway") ENDIF #ENDIF ELSE IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehPatrolVehicle) OR IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_VEH_ACCELERATE) OR IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_VEH_BRAKE) OR IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_VEH_MOVE_LEFT) OR IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_VEH_MOVE_RIGHT) OR IS_VEHICLE_SEAT_FREE(vehPatrolVehicle) OR (GET_GAME_TIMER() - iRollingStartTimer > 3000) IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehPatrolVehicle) STOP_PLAYBACK_RECORDED_VEHICLE(vehPatrolVehicle) ENDIF REMOVE_VEHICLE_RECORDING(500, "Min1_PV") bDoneRollingStart = TRUE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Rolling start finished") ENDIF #ENDIF ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversation in which Joe tells Trevor to stun the Mariachi. PROC MIN1_MANAGE_STUN_THEM_DIALOGUE() IF bStartedStunThemConversation = FALSE AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_STUN", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_STUN conversation") ENDIF #ENDIF bStartedStunThemConversation = TRUE PRINT_NOW("MIN1_07", DEFAULT_GOD_TEXT_TIME, 1) // Use the stun-gun on the ~r~Mariachi. ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversations when Trevor stuns the Mariachi. PROC MIN1_MANAGE_STUNNED_MARIACHI_DIALOGUE(INT i) IF bPlayedStunnedConversation[i] = FALSE IF MIN1_ALLOW_CONVERSATION_TO_PLAY() IF iPlayedStunnedConversation = 0 IF CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_CAR1", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_CAR1 conversation") ENDIF #ENDIF iPlayedStunnedConversation = 1 bPlayedStunnedConversation[i] = TRUE ENDIF ELIF iPlayedStunnedConversation = 1 IF CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_CAR2", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_CAR2 conversation") ENDIF #ENDIF iPlayedStunnedConversation = 2 bPlayedStunnedConversation[i] = TRUE ENDIF ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversations when the Mariachi sober up. PROC MIN1_MANAGE_SOBER_MARIACHI_DIALOGUE(INT i) IF bPlayedSoberConversation[i] = FALSE AND MIN1_ALLOW_CONVERSATION_TO_PLAY() IF i = 0 IF CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_SOBER1", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_SOBER1 conversation") ENDIF #ENDIF bPlayedSoberConversation[i] = TRUE ENDIF ELSE IF CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_SOBER2", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_SOBER2 conversation") ENDIF #ENDIF bPlayedSoberConversation[i] = TRUE ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Handles Joe telling the player to hurry up and stun the Mariachi. PROC MIN1_MANAGE_HURRY_STUN_DIALOGUE() IF iPlayedStunnedConversation < 2 // Don't play any of these conversations if player has stunned both Mariachi AND iHurryStunConversationsPlayed < NUM_HURRY_STUN_CONVERSATIONS AND bStartedStunThemConversation = TRUE // Wait until first told to stun them AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND IS_ENTITY_ALIVE(pedBuddy[JOE].ped) AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedBuddy[JOE].ped) < 50 AND (GET_GAME_TIMER() - iNotStunnedDialogueTimer) > 20000*(iHurryStunConversationsPlayed+1) AND CREATE_CONVERSATION(sConversation, "MIN1AUD", sHurryStunConversation[iHurryStunConversationsPlayed], CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started ", sHurryStunConversation[iHurryStunConversationsPlayed], " conversation") ENDIF #ENDIF iHurryStunConversationsPlayed++ ENDIF ENDPROC /// PURPOSE: /// Handles playing Joe and Josef's insults when shepherding a Mariachi into the patrol vehicle. PROC MIN1_MANAGE_JOE_JOSEF_INSULTS(INT i_buddy) IF pedBuddy[i_buddy].iNumInsultsGiven < 3 // Don't repeat any insults AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND (GET_GAME_TIMER() - pedBuddy[i_buddy].iInsultTimer) > pedBuddy[i_buddy].iDelayBeforeNextInsult AND NOT IS_ENTITY_IN_RANGE_ENTITY(vehPatrolVehicle, pedMariachi[i_buddy], 4) // Don't play if Mariachi is near to the patrol vehicle ie about to get in AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), pedMariachi[i_buddy], 50) // Don't play if Mariachi is far away from player IF i_buddy = JOE IF CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_INSULT1", CONV_PRIORITY_MEDIUM) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_INSULT1 conversation for Joe") ENDIF #ENDIF pedBuddy[i_buddy].iNumInsultsGiven++ pedBuddy[i_buddy].iInsultTimer = GET_GAME_TIMER() pedBuddy[i_buddy].iDelayBeforeNextInsult = GET_RANDOM_INT_IN_RANGE(8000, 10000) ENDIF ELSE IF CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_INSULT2", CONV_PRIORITY_MEDIUM) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_INSULT2 conversation for Josef") ENDIF #ENDIF pedBuddy[i_buddy].iNumInsultsGiven++ pedBuddy[i_buddy].iInsultTimer = GET_GAME_TIMER() pedBuddy[i_buddy].iDelayBeforeNextInsult = GET_RANDOM_INT_IN_RANGE(8000, 10000) ENDIF ENDIF ENDIF ENDPROC /// PURPOSE: /// Try to play one of the mariachi conversation when the objective is to stun them. PROC MIN1_PLAY_MARIACHI_CONVERSATION(INT i_ped, STRING string_to_play, INT &i_counter, INT i_max) IF i_counter < i_max AND IS_ENTITY_ALIVE(PLAYER_PED_ID()) AND IS_ENTITY_ALIVE(pedMariachi[i_ped]) AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedMariachi[i_ped]) < 50 TEXT_LABEL_15 text_to_play = string_to_play IF i_ped = 0 text_to_play += 1 ELSE text_to_play += 2 ENDIF IF CREATE_CONVERSATION(sConversation, "MIN1AUD", text_to_play, CONV_PRIORITY_HIGH) i_counter++ #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Played mariachi conversation ", text_to_play, " i_counter = ", i_counter, " i_max = ", i_max) ENDIF #ENDIF iMariachiConversationTimer[i_ped] = GET_GAME_TIMER() ENDIF ENDIF ENDPROC /// PURPOSE: /// Returns true if the mariachi has been damaged by an acceptable weapon. FUNC BOOL MIN1_HAS_MARIACHI_BEEN_DAMAGED_BY_ALLOWED_WEAPON(INT i) IF HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(pedMariachi[i], WEAPONTYPE_STUNGUN, GENERALWEAPON_TYPE_INVALID) OR HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(pedMariachi[i], WEAPONTYPE_UNARMED, GENERALWEAPON_TYPE_INVALID) RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Play all the dialogue while the mariachi are being marched to the patrol vehicle. PROC MIN1_MANAGE_GOING_TO_PATROL_VEHICLE_CONVERSATIONS(INT i) MIN1_MANAGE_SOBER_MARIACHI_DIALOGUE(i) IF (GET_GAME_TIMER() - iMariachiConversationTimer[i]) > iMariachiConversationDelay[i] IF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), pedMariachi[i]) MIN1_PLAY_MARIACHI_CONVERSATION(i, "MIN1_BUMP", iNumPlayedBumpConversations[i], NUM_MARIACHI_BUMP_CONVERSATIONS) ELSE MIN1_PLAY_MARIACHI_CONVERSATION(i, "MIN1_WALK", iNumPlayedWalkConversations[i], NUM_MARIACHI_WALK_CONVERSATIONS) ENDIF ENDIF MIN1_MANAGE_JOE_JOSEF_INSULTS(i) ENDPROC /// PURPOSE: /// Handles the drunken Mariachi getting into the patrol vehicle after being stunned. PROC MIN1_MANAGE_MARIACHI_GETTING_INTO_PATROL_VEHICLE() INT i = 0 IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) AND IS_ENTITY_ALIVE(vehPatrolVehicle) REPEAT NUM_MARIACHI_PEDS i IF IS_ENTITY_ALIVE(pedMariachi[i]) SWITCH statusMariachi[i] CASE MARIACHI_EXITING_HIS_VEHICLE IF NOT IS_PED_IN_ANY_VEHICLE(pedMariachi[i]) SET_PED_CAN_BE_TARGETTED(pedMariachi[i], TRUE) IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(pedMariachi[i], vOpenGroundWanderArea) < 25 TASK_WANDER_IN_AREA(pedMariachi[i], vOpenGroundWanderArea, 10, 0, 0) // See B*1167158 - If mariachi car reaches the end of its route set their wander area to a specific patch of open ground #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Mariachi ", i, " is in range of open ground wander area") ENDIF #ENDIF ELSE TASK_WANDER_IN_AREA(pedMariachi[i], GET_ENTITY_COORDS(pedMariachi[i]), 10, 0, 0) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Mariachi ", i, " is not in range of open ground wander area") ENDIF #ENDIF ENDIF statusMariachi[i] = MARIACHI_WAITING_TO_BE_STUNNED ELIF iMariachiExitVehicleTimer[i] > -1 IF (GET_GAME_TIMER() - iMariachiExitVehicleTimer[i]) > 3000 // B*1481321 - If failsafe timer has elapsed just warp them out somewhere if the door is blocked #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Mariachi ", i, " told to warp out if door is blocked") ENDIF #ENDIF TASK_LEAVE_ANY_VEHICLE(pedMariachi[i], 0, ECF_DONT_CLOSE_DOOR) iMariachiExitVehicleTimer[i] = -1 ENDIF ENDIF BREAK CASE MARIACHI_WAITING_TO_BE_STUNNED IF (GET_GAME_TIMER() - iMariachiConversationTimer[i]) > iMariachiConversationDelay[i] IF IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), pedMariachi[i]) OR IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(), pedMariachi[i]) MIN1_PLAY_MARIACHI_CONVERSATION(i, "MIN1_AIM", iNumPlayedAimConversations[i], NUM_MARIACHI_AIM_CONVERSATIONS) ELIF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), pedMariachi[i]) MIN1_PLAY_MARIACHI_CONVERSATION(i, "MIN1_BUMP", iNumPlayedBumpConversations[i], NUM_MARIACHI_BUMP_CONVERSATIONS) ELSE MIN1_PLAY_MARIACHI_CONVERSATION(i, "MIN1_DRNK", iNumPlayedDrunkConversations[i], NUM_MARIACHI_DRUNK_CONVERSATIONS) ENDIF ENDIF SET_PED_RESET_FLAG(pedMariachi[i], PRF_PreventAllMeleeTakedowns, TRUE) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(pedMariachi[i], PLAYER_PED_ID()) IF MIN1_HAS_MARIACHI_BEEN_DAMAGED_BY_ALLOWED_WEAPON(i) CLEAR_PED_LAST_WEAPON_DAMAGE(pedMariachi[i]) SAFE_REMOVE_BLIP(blipMariachi[i]) SET_PED_CAN_BE_TARGETTED(pedMariachi[i], FALSE) SET_PED_CAN_BE_DRAGGED_OUT(pedMariachi[i], FALSE) SET_PED_MOVEMENT_CLIPSET(pedMariachi[i], "MOVE_M@BAIL_BOND_NOT_TAZERED") #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Mariachi ", i, " now using MOVE_M@BAIL_BOND_NOT_TAZERED clipset") ENDIF #ENDIF statusMariachi[i] = MARIACHI_HAS_BEEN_STUNNED ENDIF ENDIF BREAK CASE MARIACHI_HAS_BEEN_STUNNED MIN1_PLAY_MARIACHI_CONVERSATION(i, "MIN1_SHOCK", iNumPlayedShockConversations[i], NUM_MARIACHI_SHOCK_CONVERSATIONS) MIN1_MANAGE_STUNNED_MARIACHI_DIALOGUE(i) IF NOT IS_PED_BEING_STUNNED(pedMariachi[i]) AND NOT IS_PED_GETTING_UP(pedMariachi[i]) TASK_CLEAR_LOOK_AT(pedMariachi[i]) Make_Ped_Sober(pedMariachi[i]) CLEAR_PED_TASKS(pedMariachi[i]) SET_PED_CAN_BE_DRAGGED_OUT(pedMariachi[i], FALSE) IF i = 0 TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_2", "tasered_1", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_TAG_SYNC_OUT) ELSE TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_2", "tasered_2", SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_TAG_SYNC_OUT) ENDIF statusMariachi[i] = MARIACHI_AFTER_STUNNED ENDIF BREAK CASE MARIACHI_AFTER_STUNNED MIN1_MANAGE_SOBER_MARIACHI_DIALOGUE(i) IF NOT IsPedPerformingTask(pedMariachi[i], SCRIPT_TASK_PLAY_ANIM) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Finished tazering anim on mariachi ", i) ENDIF #ENDIF pedBuddy[i].iNumInsultsGiven = 0 pedBuddy[i].iInsultTimer = GET_GAME_TIMER() // Start the timer for Joe/Josef's insults while shepherding the Mariachi into the patrol vehicle pedBuddy[i].iDelayBeforeNextInsult = 5000 statusMariachi[i] = MARIACHI_GOING_TO_PATROL_VEHICLE ENDIF BREAK CASE MARIACHI_GOING_TO_PATROL_VEHICLE IF bHasBeenTazeredAgain[i] = FALSE AND bCheckForTazeredAgain[i] = TRUE AND IS_PED_BEING_STUNNED(pedMariachi[i]) bHasBeenTazeredAgain[i] = TRUE SET_PED_MOVEMENT_CLIPSET(pedMariachi[i], "MOVE_M@BAIL_BOND_TAZERED") #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Mariachi ", i, " now using MOVE_M@BAIL_BOND_TAZERED clipset") ENDIF #ENDIF ENDIF IF NOT IS_PED_BEING_STUNNED(pedMariachi[i]) AND NOT IS_PED_GETTING_UP(pedMariachi[i]) bCheckForTazeredAgain[i] = TRUE // Don't check for tazered again until they've got up for the first time MIN1_MANAGE_GOING_TO_PATROL_VEHICLE_CONVERSATIONS(i) IF GET_DISTANCE_BETWEEN_ENTITIES(pedMariachi[i], vehPatrolVehicle) > 5 IF NOT IS_ENTITY_PLAYING_ANIM(pedMariachi[i], "missminuteman_1ig_2", "handsup_base") TASK_PLAY_ANIM(pedMariachi[i], "missminuteman_1ig_2", "handsup_base", REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_SECONDARY|AF_UPPERBODY|AF_LOOPING|AF_TAG_SYNC_CONTINUOUS) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Mariachi ", i, " playing hands up anim") ENDIF #ENDIF ENDIF IF NOT IsPedPerformingTask(pedMariachi[i], SCRIPT_TASK_GOTO_ENTITY_OFFSET) IF GET_DISTANCE_BETWEEN_ENTITIES(pedMariachi[i], vehPatrolVehicle) < 20 TASK_GOTO_ENTITY_OFFSET_XY(pedMariachi[i], vehPatrolVehicle, 20000, DEFAULT_SEEK_RADIUS, fSeekOffsetFromPatrolVehicle[i], 0.0, PEDMOVEBLENDRATIO_WALK) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Gave mariachi ", i," a task to go to the patrol vehicle, warp time is 20s") ENDIF #ENDIF ELIF GET_DISTANCE_BETWEEN_ENTITIES(pedMariachi[i], vehPatrolVehicle) < 40 // B*1470057 - Longer warp time if further away TASK_GOTO_ENTITY_OFFSET_XY(pedMariachi[i], vehPatrolVehicle, 40000, DEFAULT_SEEK_RADIUS, fSeekOffsetFromPatrolVehicle[i], 0.0, PEDMOVEBLENDRATIO_WALK) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Gave mariachi ", i," a task to go to the patrol vehicle, warp time is 40s") ENDIF #ENDIF ELSE TASK_GOTO_ENTITY_OFFSET_XY(pedMariachi[i], vehPatrolVehicle, 60000, DEFAULT_SEEK_RADIUS, fSeekOffsetFromPatrolVehicle[i], 0.0, PEDMOVEBLENDRATIO_WALK) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Gave mariachi ", i," a task to go to the patrol vehicle, warp time is 60s") ENDIF #ENDIF ENDIF ENDIF ELSE statusMariachi[i] = MARIACHI_ENTERING_PATROL_VEHICLE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Mariachi ", i, " close to patrol vehicle so progressing to MARIACHI_ENTERING_PATROL_VEHICLE") ENDIF #ENDIF ENDIF ENDIF BREAK CASE MARIACHI_ENTERING_PATROL_VEHICLE IF IS_PED_SITTING_IN_VEHICLE(pedMariachi[i], vehPatrolVehicle) // Changed to sitting in vehicle for B*899751 SET_PED_KEEP_TASK(pedMariachi[i], TRUE) statusMariachi[i] = MARIACHI_SAT_IN_PATROL_VEHICLE ELIF IS_PED_BEING_STUNNED(pedMariachi[i]) statusMariachi[i] = MARIACHI_GOING_TO_PATROL_VEHICLE ELSE MIN1_MANAGE_GOING_TO_PATROL_VEHICLE_CONVERSATIONS(i) IF IS_ENTITY_PLAYING_ANIM(pedMariachi[i], "missminuteman_1ig_2", "handsup_base") AND GET_DISTANCE_BETWEEN_ENTITIES(pedMariachi[i], vehPatrolVehicle) < 3 STOP_ANIM_TASK(pedMariachi[i], "missminuteman_1ig_2", "handsup_base", REALLY_SLOW_BLEND_OUT) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping mariachi ", i, " hands up anim") ENDIF #ENDIF ENDIF IF NOT IsPedPerformingTask(pedMariachi[i], SCRIPT_TASK_ENTER_VEHICLE) TASK_ENTER_VEHICLE(pedMariachi[i], vehPatrolVehicle, 20000, seatMariachi[i], PEDMOVEBLENDRATIO_WALK, ECF_JACK_ANYONE|ECF_WARP_IF_DOOR_IS_BLOCKED) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Gave mariachi ", i," a task to enter the patrol vehicle, warp time is 20s") ENDIF #ENDIF ENDIF ENDIF BREAK CASE MARIACHI_SAT_IN_PATROL_VEHICLE IF IS_ENTITY_PLAYING_ANIM(pedMariachi[i], "missminuteman_1ig_2", "handsup_base") STOP_ANIM_TASK(pedMariachi[i], "missminuteman_1ig_2", "handsup_base", INSTANT_BLEND_OUT) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Stopping mariachi ", i, " hands up anim") ENDIF #ENDIF ENDIF IF NOT IS_PED_SITTING_IN_VEHICLE(pedMariachi[i], vehPatrolVehicle) // B*1235814 - Make mariachi get back in if player stuns him while in the vehicle statusMariachi[i] = MARIACHI_GOING_TO_PATROL_VEHICLE ENDIF BREAK ENDSWITCH ENDIF ENDREPEAT ENDIF ENDPROC /// PURPOSE: /// Returns TRUE if both Mariachi are stunned by stun-guns. FUNC BOOL MIN1_ARE_BOTH_MARIACHI_STUNNED() IF statusMariachi[0] > MARIACHI_HAS_BEEN_STUNNED AND statusMariachi[1] > MARIACHI_HAS_BEEN_STUNNED RETURN TRUE ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Returns TRUE if Joe/Josef should leave the patrol vehicle. FUNC BOOL MIN1_SHOULD_BUDDY_GET_OUT() IF MIN1_ARE_BOTH_MARIACHI_STUNNED() RETURN TRUE ENDIF IF IS_ENTITY_ALIVE(vehPatrolVehicle) IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle) RETURN TRUE ENDIF IF IS_ENTITY_ALIVE(vehMariachiCar) AND GET_ENTITY_SPEED(vehPatrolVehicle) < 1 AND GET_DISTANCE_BETWEEN_ENTITIES(vehPatrolVehicle, vehMariachiCar) < 30 RETURN TRUE // Vehicle is almost stationary and within 30 metres ENDIF ENDIF RETURN FALSE ENDFUNC /// PURPOSE: /// Handles Joe/Josef aiming at the drunken Mariachi getting into the patrol vehicle. PROC MIN1_MANAGE_BUDDIES_GUARDING_MARIACHI() INT i = 0 IF IS_ENTITY_ALIVE(vehPatrolVehicle) REPEAT NUM_BUDDIES i IF IS_ENTITY_ALIVE(pedBuddy[i].ped) AND IS_ENTITY_ALIVE(pedMariachi[i]) SWITCH pedBuddy[i].status CASE BUDDY_WAITING_TO_GET_OUT IF MIN1_SHOULD_BUDDY_GET_OUT() GIVE_WEAPON_TO_PED(pedBuddy[i].ped, WEAPONTYPE_STUNGUN, 200, TRUE) BRING_VEHICLE_TO_HALT(vehPatrolVehicle, 10.0, 2) // B*1397040 Prevent driving away with Josef still in the patrol vehicle TASK_LEAVE_ANY_VEHICLE(pedBuddy[i].ped, i*1500 + 250, ECF_DONT_CLOSE_DOOR|ECF_DONT_WAIT_FOR_VEHICLE_TO_STOP) pedBuddy[i].status = BUDDY_GOING_TO_MARIACHI_PED ENDIF BREAK CASE BUDDY_GOING_TO_MARIACHI_PED IF NOT IS_PED_IN_VEHICLE(pedBuddy[i].ped, vehPatrolVehicle) IF IS_ENTITY_IN_RANGE_ENTITY(pedBuddy[i].ped, pedMariachi[i], 5) SET_PED_CONFIG_FLAG(pedBuddy[i].ped, PCF_UseKinematicModeWhenStationary, TRUE) // See B*771704 - Only set this when not in a car pedBuddy[i].status = BUDDY_AIMING_AT_MARIACHI_PED ELIF NOT IsPedPerformingTask(pedBuddy[i].ped, SCRIPT_TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY) SET_PED_CONFIG_FLAG(pedBuddy[i].ped, PCF_UseKinematicModeWhenStationary, TRUE) // See B*771704 - Only set this when not in a car TASK_GO_TO_ENTITY_WHILE_AIMING_AT_ENTITY(pedBuddy[i].ped, pedMariachi[i], pedMariachi[i], PEDMOVEBLENDRATIO_RUN, FALSE) ENDIF ENDIF BREAK CASE BUDDY_AIMING_AT_MARIACHI_PED IF statusMariachi[i] = MARIACHI_SAT_IN_PATROL_VEHICLE pedBuddy[i].status = BUDDY_TRYING_TO_ENTER_PATROL_VEHICLE ELSE IF NOT IS_ENTITY_IN_RANGE_ENTITY(pedBuddy[i].ped, pedMariachi[i], 6) pedBuddy[i].status = BUDDY_GOING_TO_MARIACHI_PED ELIF NOT IsPedPerformingTask(pedBuddy[i].ped, SCRIPT_TASK_AIM_GUN_AT_ENTITY) TASK_AIM_GUN_AT_ENTITY(pedBuddy[i].ped, pedMariachi[i], -1) ENDIF ENDIF BREAK CASE BUDDY_TRYING_TO_ENTER_PATROL_VEHICLE IF IS_VEHICLE_SEAT_FREE(vehPatrolVehicle, pedBuddy[i].seatEnd) IF i = JOE SAFE_REMOVE_BLIP(blipJoe) IF IS_THIS_PRINT_BEING_DISPLAYED("MIN1_10") // Park near ~b~Joe ~s~and exit the vehicle. CLEAR_PRINTS() ENDIF SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehPatrolVehicle, FALSE) // When Joe is told to enter vehicle, prevent player screwing around by getting back in ELSE IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle) // Josef's seat is free but the player is in the patrol vehicle driver's seat AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND IS_ENTITY_IN_RANGE_ENTITY(pedBuddy[i].ped, vehPatrolVehicle, 50) AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_NOJOSEF", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_NOJOSEF conversation") ENDIF #ENDIF ENDIF ENDIF pedBuddy[i].status = BUDDY_ENTERING_PATROL_VEHICLE ELSE IF i = JOE // Joe needs to play dialogue and display an objective, Josef doesn't IF NOT DOES_BLIP_EXIST(blipJoe) blipJoe = CREATE_PED_BLIP(pedBuddy[i].ped, TRUE, TRUE) PRINT_NOW("MIN1_10", DEFAULT_GOD_TEXT_TIME, 1) // Park near ~b~Joe ~s~and exit the vehicle. ENDIF IF bStartedBringVehicleConversation = FALSE IF MIN1_ALLOW_CONVERSATION_TO_PLAY(TRUE, FALSE) AND IS_ENTITY_IN_RANGE_ENTITY(pedBuddy[i].ped, vehPatrolVehicle, 50) AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_BRING", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES) // No subs cos will be displaying at same time as MIN1_10 god text #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_BRING conversation") ENDIF #ENDIF bStartedBringVehicleConversation = TRUE ENDIF ELSE IF bStartedNoJoeConversation = FALSE AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND IS_ENTITY_IN_RANGE_ENTITY(pedBuddy[i].ped, vehPatrolVehicle, 50) AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_NOJO", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_NOJO conversation") ENDIF #ENDIF bStartedNoJoeConversation = TRUE ENDIF ENDIF ENDIF IF NOT IS_ENTITY_IN_RANGE_ENTITY(pedBuddy[i].ped, vehPatrolVehicle, 100) MIN1_MISSION_FAILED(FAILED_ABANDONED_JOE) ELIF NOT IS_ENTITY_IN_RANGE_ENTITY(pedBuddy[i].ped, vehPatrolVehicle, 10) IF NOT IsPedPerformingTask(pedBuddy[i].ped, SCRIPT_TASK_GO_TO_ENTITY) TASK_GO_TO_ENTITY(pedBuddy[i].ped, vehPatrolVehicle, 30000, 5.0, PEDMOVEBLENDRATIO_RUN) ENDIF ELIF NOT IS_PED_FACING_PED(pedBuddy[i].ped, PLAYER_PED_ID(), 30) TASK_TURN_PED_TO_FACE_ENTITY(pedBuddy[i].ped, PLAYER_PED_ID()) ELIF NOT IsPedPerformingTask(pedBuddy[i].ped, SCRIPT_TASK_STAND_STILL) TASK_STAND_STILL(pedBuddy[i].ped, -1) ENDIF ENDIF BREAK CASE BUDDY_ENTERING_PATROL_VEHICLE IF IS_PED_IN_VEHICLE(pedBuddy[i].ped, vehPatrolVehicle) SET_PED_KEEP_TASK(pedBuddy[i].ped, TRUE) pedBuddy[i].status = BUDDY_SAT_IN_PATROL_VEHICLE ELIF NOT IsPedPerformingTask(pedBuddy[i].ped, SCRIPT_TASK_ENTER_VEHICLE) // See B*929660 - Deal with the TASK_ENTER_VEHICLE stopping for whatever reason TASK_ENTER_VEHICLE(pedBuddy[i].ped, vehPatrolVehicle, 30000, pedBuddy[i].seatEnd, PEDMOVEBLENDRATIO_WALK, ECF_JACK_ANYONE|ECF_WARP_IF_DOOR_IS_BLOCKED) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Gave buddy ", i," a task to enter the patrol vehicle") ENDIF #ENDIF ENDIF BREAK CASE BUDDY_SAT_IN_PATROL_VEHICLE IF bStartedGoBackForJoeConversation = FALSE AND i = JOSEF AND statusMariachi[0] = MARIACHI_SAT_IN_PATROL_VEHICLE AND statusMariachi[1] = MARIACHI_SAT_IN_PATROL_VEHICLE AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle) // Player is in the patrol vehicle with Josef and the two mariachis so Josef needs to say something AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_GOBACK2", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_GOBACK2 conversation") ENDIF #ENDIF bStartedGoBackForJoeConversation = TRUE ENDIF BREAK ENDSWITCH ENDIF ENDREPEAT ENDIF ENDPROC /// PURPOSE: /// Plays the next line of dialogue to warn the player about excessively stunning the Mariachi. PROC MIN1_PLAY_NEXT_TIMES_STUNNED_DIALOGUE() IF iCurrentTimesStunnedDialogue < NUM_TIMES_STUNNED_DIALOGUE AND (statusMariachi[0] != MARIACHI_SAT_IN_PATROL_VEHICLE OR statusMariachi[1] != MARIACHI_SAT_IN_PATROL_VEHICLE) // B*1515716 - If queued up don't allow this to play if they've both subsequently got in the vehicle AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND CREATE_CONVERSATION(sConversation, "MIN1AUD", sTimesStunnedDialogueString[iCurrentTimesStunnedDialogue], CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_STOP conversation ", iCurrentTimesStunnedDialogue) ENDIF #ENDIF iCurrentTimesStunnedDialogue++ ENDIF ENDPROC /// PURPOSE: /// Handles playing dialogue if the player keeps stunning the Mariachi peds. PROC MIN1_MANAGE_EXCESSIVE_STUN_DIALOGUE() INT i = 0 REPEAT NUM_MARIACHI_PEDS i IF statusMariachi[i] > MARIACHI_WAITING_TO_BE_STUNNED AND IS_ENTITY_ALIVE(pedMariachi[i]) AND IS_PED_SHOOTING(PLAYER_PED_ID()) AND HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(pedMariachi[i], WEAPONTYPE_STUNGUN) CLEAR_PED_LAST_WEAPON_DAMAGE(pedMariachi[i]) iTimesStunnedMoreThanNecessary++ IF iTimesStunnedMoreThanNecessary >= 8 SET_ENTITY_HEALTH(pedMariachi[i], 0) ENDIF #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: iTimesStunnedMoreThanNecessary = ", iTimesStunnedMoreThanNecessary) ENDIF #ENDIF ENDIF ENDREPEAT IF iTimesStunnedMoreThanNecessary < 8 AND iTimesStunnedMoreThanNecessary > (iCurrentTimesStunnedDialogue*2) MIN1_PLAY_NEXT_TIMES_STUNNED_DIALOGUE() ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversation in which Joe tells Trevor his task is done. PROC MIN1_MANAGE_LEAVE_AREA_DIALOGUE() IF bStartedLeaveAreaConversation = FALSE AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_OUTRO", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_OUTRO conversation") ENDIF #ENDIF bStartedLeaveAreaConversation = TRUE ENDIF ENDPROC /// PURPOSE: /// Handles playing the conversation in which Joe/Josef say cya to Trevor. PROC MIN1_MANAGE_CYA_DIALOGUE() IF bStartedCyaConversation = FALSE AND MIN1_ALLOW_CONVERSATION_TO_PLAY() AND CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_CYA", CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_CYA conversation") ENDIF #ENDIF REPLAY_RECORD_BACK_FOR_TIME(2.0, 3.5, REPLAY_IMPORTANCE_LOWEST) bStartedCyaConversation = TRUE ENDIF ENDPROC /// PURPOSE: /// Fails the mission if the player stuns anyone while the patrol vehicle is driving away. See B*1235814. PROC MIN1_HANDLE_PLAYER_STUNNING_PEDS_WHEN_DRIVING_AWAY() INT i = 0 REPEAT NUM_BUDDIES i IF IS_ENTITY_ALIVE(pedBuddy[i].ped) AND IS_PED_BEING_STUNNED(pedBuddy[i].ped) AND GET_ENTITY_HEALTH(pedBuddy[i].ped) > 0 SET_ENTITY_HEALTH(pedBuddy[i].ped, 0) ENDIF ENDREPEAT i = 0 REPEAT NUM_MARIACHI_PEDS i IF IS_ENTITY_ALIVE(pedMariachi[i]) AND IS_PED_BEING_STUNNED(pedMariachi[i]) AND GET_ENTITY_HEALTH(pedMariachi[i]) > 0 SET_ENTITY_HEALTH(pedMariachi[i], 0) ENDIF ENDREPEAT ENDPROC /// PURPOSE: /// Handles the patrol vehicle driving off when Joe, Josef and both Mariachi are inside it. PROC MIN1_MANAGE_BUDDIES_DRIVING_AWAY() IF pedBuddy[0].status = BUDDY_SAT_IN_PATROL_VEHICLE AND pedBuddy[1].status = BUDDY_SAT_IN_PATROL_VEHICLE AND statusMariachi[0] = MARIACHI_SAT_IN_PATROL_VEHICLE AND statusMariachi[1] = MARIACHI_SAT_IN_PATROL_VEHICLE AND IS_ENTITY_ALIVE(vehPatrolVehicle) AND IS_ENTITY_ALIVE(pedBuddy[0].ped) SET_VEHICLE_SIREN(vehPatrolVehicle, FALSE) TASK_VEHICLE_DRIVE_WANDER(pedBuddy[0].ped, vehPatrolVehicle, 10, DRIVINGMODE_STOPFORCARS) // B*870427 SET_ENTITY_ONLY_DAMAGED_BY_PLAYER(vehPatrolVehicle, TRUE) // B*538720 Attempt 1 SET_ENTITY_PROOFS(vehPatrolVehicle, FALSE, FALSE, FALSE, TRUE, FALSE) // B*538720 Attempt 2 //ADD_VEHICLE_STUCK_CHECK_WITH_WARP(vehPatrolVehicle, 10, 5000, TRUE, TRUE, TRUE, 10) // Increased from 1000ms to 5000ms to fix B*1294783 // Commented out, causes B*1532500 IF GET_VEHICLE_ENGINE_HEALTH(vehPatrolVehicle) < 500 SET_VEHICLE_ENGINE_HEALTH(vehPatrolVehicle, 500) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: vehPatrolVehicle engine health set to 500") ENDIF #ENDIF ENDIF IF GET_ENTITY_HEALTH(vehPatrolVehicle) < 500 SET_ENTITY_HEALTH(vehPatrolVehicle, 500) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: vehPatrolVehicle health set to 500") ENDIF #ENDIF ENDIF IF IS_VEHICLE_TYRE_BURST(vehPatrolVehicle, SC_WHEEL_CAR_FRONT_LEFT) SET_VEHICLE_TYRE_FIXED(vehPatrolVehicle, SC_WHEEL_CAR_FRONT_LEFT) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: vehPatrolVehicle tyre SC_WHEEL_CAR_FRONT_LEFT fixed") ENDIF #ENDIF ENDIF IF IS_VEHICLE_TYRE_BURST(vehPatrolVehicle, SC_WHEEL_CAR_FRONT_RIGHT) SET_VEHICLE_TYRE_FIXED(vehPatrolVehicle, SC_WHEEL_CAR_FRONT_RIGHT) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: vehPatrolVehicle tyre SC_WHEEL_CAR_FRONT_RIGHT fixed") ENDIF #ENDIF ENDIF IF IS_VEHICLE_TYRE_BURST(vehPatrolVehicle, SC_WHEEL_CAR_REAR_LEFT) SET_VEHICLE_TYRE_FIXED(vehPatrolVehicle, SC_WHEEL_CAR_REAR_LEFT) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: vehPatrolVehicle tyre SC_WHEEL_CAR_REAR_LEFT fixed") ENDIF #ENDIF ENDIF IF IS_VEHICLE_TYRE_BURST(vehPatrolVehicle, SC_WHEEL_CAR_REAR_RIGHT) SET_VEHICLE_TYRE_FIXED(vehPatrolVehicle, SC_WHEEL_CAR_REAR_RIGHT) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: vehPatrolVehicle tyre SC_WHEEL_CAR_REAR_RIGHT fixed") ENDIF #ENDIF ENDIF bPatrolVehicleDrivingAway = TRUE ENDIF ENDPROC /// PURPOSE: /// Returns true if the player is more than 50 metres away from Joe, Josef, the patrol vehicle and both Mariachi peds. FUNC BOOL MIN1_IS_PLAYER_FAR_AWAY_FROM_ENTITIES() INT i IF IS_ENTITY_ALIVE(vehPatrolVehicle) AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), vehPatrolVehicle, 50) RETURN FALSE ENDIF i = 0 REPEAT NUM_BUDDIES i IF IS_ENTITY_ALIVE(pedBuddy[i].ped) AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), pedBuddy[i].ped, 50) RETURN FALSE ENDIF ENDREPEAT i = 0 REPEAT NUM_MARIACHI_PEDS i IF IS_ENTITY_ALIVE(pedMariachi[i]) AND IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), pedMariachi[i], 50) RETURN FALSE ENDIF ENDREPEAT RETURN TRUE ENDFUNC /// PURPOSE: /// Handles playing the dialogue if the player fails the mission causing Joe/Josef to flee. PROC MIN1_MANAGE_JOE_JOSEF_FLEE_DIALOGUE() IF bStartedFleeConversation = FALSE AND failReason != FAILED_MARIACHI_ESCAPED // B*1083469 - Don't make Joe/Josef leave the car if the mariachi escape IF IS_ENTITY_ALIVE(pedBuddy[JOE].ped) ADD_PED_FOR_DIALOGUE(sConversation, 3, pedBuddy[JOE].ped, "JOE") IF CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_FLEE1", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_FLEE1 conversation") ENDIF #ENDIF bStartedFleeConversation = TRUE ENDIF ELIF IS_ENTITY_ALIVE(pedBuddy[JOSEF].ped) ADD_PED_FOR_DIALOGUE(sConversation, 4, pedBuddy[JOSEF].ped, "JOSEF") IF CREATE_CONVERSATION(sConversation, "MIN1AUD", "MIN1_FLEE2", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_FLEE2 conversation") ENDIF #ENDIF bStartedFleeConversation = TRUE ENDIF ELSE bStartedFleeConversation = TRUE ENDIF ENDIF ENDPROC /// PURPOSE: /// Mission is failing so set alive peds to flee from the player. PROC MIN1_SET_PED_TO_FLEE(PED_INDEX ped_to_flee) IF IS_ENTITY_ALIVE(ped_to_flee) IF IS_PED_IN_ANY_VEHICLE(ped_to_flee) VEHICLE_INDEX veh_ped_is_in = GET_VEHICLE_PED_IS_IN(ped_to_flee) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND veh_ped_is_in = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: A ped is in the player's vehicle, so exit and flee") ENDIF #ENDIF OPEN_SEQUENCE_TASK(fleeSequence) TASK_LEAVE_ANY_VEHICLE(NULL, GET_RANDOM_INT_IN_RANGE(0, 250)) TASK_SMART_FLEE_PED(NULL, PLAYER_PED_ID(), 100, -1) CLOSE_SEQUENCE_TASK(fleeSequence) TASK_PERFORM_SEQUENCE(ped_to_flee, fleeSequence) CLEAR_SEQUENCE_TASK(fleeSequence) ELSE SET_PED_COMBAT_ATTRIBUTES(ped_to_flee, CA_LEAVE_VEHICLES, FALSE) SET_PED_FLEE_ATTRIBUTES(ped_to_flee, FA_USE_VEHICLE, TRUE) IF GET_PED_IN_VEHICLE_SEAT(veh_ped_is_in, VS_DRIVER) = ped_to_flee IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(veh_ped_is_in) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: A ped is the driver of the vehicle, but carrec playback is ongoing so leave it running") ENDIF #ENDIF ELSE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: A ped is the driver of the vehicle, so set to drive wander") ENDIF #ENDIF TASK_VEHICLE_DRIVE_WANDER(ped_to_flee, veh_ped_is_in, 30, DRIVINGMODE_AVOIDCARS_RECKLESS) ENDIF ELSE IF GET_PED_IN_VEHICLE_SEAT(veh_ped_is_in, VS_FRONT_RIGHT) = ped_to_flee AND IS_VEHICLE_SEAT_FREE(veh_ped_is_in, VS_DRIVER) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: A ped is in the front right and the driver seat is free, so shuffle across then drive wander") ENDIF #ENDIF IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(veh_ped_is_in) STOP_PLAYBACK_RECORDED_VEHICLE(veh_ped_is_in) ENDIF OPEN_SEQUENCE_TASK(fleeSequence) TASK_SHUFFLE_TO_NEXT_VEHICLE_SEAT(NULL, veh_ped_is_in) TASK_VEHICLE_DRIVE_WANDER(NULL, veh_ped_is_in, 30, DRIVINGMODE_AVOIDCARS_RECKLESS) CLOSE_SEQUENCE_TASK(fleeSequence) TASK_PERFORM_SEQUENCE(ped_to_flee, fleeSequence) CLEAR_SEQUENCE_TASK(fleeSequence) ELSE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: A ped isn't in the player vehicle, but is sat in a rear seat or the driver seat is occupied by a non-player ped, so just flee") ENDIF #ENDIF TASK_SMART_FLEE_PED(ped_to_flee, PLAYER_PED_ID(), 100, -1) ENDIF ENDIF ENDIF ELSE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: A ped isn't in any vehicle, so just flee") ENDIF #ENDIF TASK_SMART_FLEE_PED(ped_to_flee, PLAYER_PED_ID(), 100, -1) ENDIF SET_PED_KEEP_TASK(ped_to_flee, TRUE) ENDIF ENDPROC /// PURPOSE: /// Plays the next line of dialogue to warn the player about shooting the patrol vehicle. PROC MIN1_PLAY_NEXT_SHOT_VEHICLE_DIALOGUE() IF MIN1_ALLOW_CONVERSATION_TO_PLAY(FALSE) AND CREATE_CONVERSATION(sConversation, "MIN1AUD", sShotVehicleDialogueString[iCurrentShotVehicleDialogue], CONV_PRIORITY_HIGH) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Started MIN1_SHOOT conversation ", iCurrentShotVehicleDialogue) ENDIF #ENDIF iCurrentShotVehicleDialogue++ ENDIF ENDPROC /// PURPOSE: /// Makes both buddies and both Mariachi flee the player. PROC MIN1_MAKE_BUDDIES_AND_MARIACHI_FLEE() IF failReason != FAILED_MARIACHI_ESCAPED // B*1083469 - Don't make Joe/Josef leave the car if the mariachi escape MIN1_SET_PED_TO_FLEE(pedBuddy[JOE].ped) MIN1_SET_PED_TO_FLEE(pedBuddy[JOSEF].ped) ENDIF MIN1_SET_PED_TO_FLEE(pedMariachi[0]) MIN1_SET_PED_TO_FLEE(pedMariachi[1]) ENDPROC /// PURPOSE: /// Stops playing ambient anims on the mission peds. PROC MIN1_STOP_AMBIENT_ANIMS_ON_PED(PED_INDEX ped) SET_PED_CAN_PLAY_AMBIENT_ANIMS(ped, FALSE) SET_PED_CAN_PLAY_AMBIENT_BASE_ANIMS(ped, FALSE) SET_PED_CAN_PLAY_GESTURE_ANIMS(ped, FALSE) ENDPROC /// PURPOSE: /// Death checks for any mission critical entities. PROC MIN1_DEATH_CHECKS() IF ENUM_TO_INT(missionState) < (ENUM_TO_INT(NUM_MISSION_STATES)-1) // Don't check during stateFailed IF ENUM_TO_INT(missionState) > ENUM_TO_INT(stateGoToBar) AND GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0 IF iWantedFailedTimer = -1 iWantedFailedTimer = GET_GAME_TIMER() ELIF (GET_GAME_TIMER() - iWantedFailedTimer) > 2000 MIN1_MISSION_FAILED(FAILED_ALERTED_COPS) ENDIF ENDIF IF DOES_ENTITY_EXIST(pedBuddy[JOE].ped) IF IS_ENTITY_DEAD(pedBuddy[JOE].ped) MIN1_MISSION_FAILED(FAILED_JOE_DIED) ELSE MIN1_STOP_AMBIENT_ANIMS_ON_PED(pedBuddy[JOE].ped) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(pedBuddy[JOE].ped, PLAYER_PED_ID()) MIN1_MISSION_FAILED(FAILED_JOE_INJURED) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(pedBuddy[JOSEF].ped) IF IS_ENTITY_DEAD(pedBuddy[JOSEF].ped) MIN1_MISSION_FAILED(FAILED_JOSEF_DIED) ELSE MIN1_STOP_AMBIENT_ANIMS_ON_PED(pedBuddy[JOSEF].ped) IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(pedBuddy[JOSEF].ped, PLAYER_PED_ID()) MIN1_MISSION_FAILED(FAILED_JOSEF_INJURED) ENDIF ENDIF ENDIF IF DOES_ENTITY_EXIST(vehPatrolVehicle) IF IS_ENTITY_DEAD(vehPatrolVehicle) MIN1_MISSION_FAILED(FAILED_PATROL_VEHICLE_WRECKED) ELSE IF HAS_VEHICLE_GOT_PROJECTILE_ATTACHED(PLAYER_PED_ID(), vehPatrolVehicle, WEAPONTYPE_STICKYBOMB) MIN1_MISSION_FAILED(FAILED_THREW_EXPLOSIVES) ENDIF IF IS_VEHICLE_DRIVEABLE(vehPatrolVehicle) IF ENUM_TO_INT(missionState) < ENUM_TO_INT(stateLeaveArea) // B*538720 Attempt 3 IF IS_VEHICLE_STUCK_TIMER_UP(vehPatrolVehicle, VEH_STUCK_HUNG_UP, HUNG_UP_TIME) OR IS_VEHICLE_STUCK_TIMER_UP(vehPatrolVehicle, VEH_STUCK_JAMMED, JAMMED_TIME) OR IS_VEHICLE_STUCK_TIMER_UP(vehPatrolVehicle, VEH_STUCK_ON_ROOF, ROOF_TIME) OR IS_VEHICLE_STUCK_TIMER_UP(vehPatrolVehicle, VEH_STUCK_ON_SIDE, ROOF_TIME) // Using ROOF_TIME instead of SIDE_TIME to fix B*934538 #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: vehPatrolVehicle is stuck") ENDIF #ENDIF MIN1_MISSION_FAILED(FAILED_PATROL_VEHICLE_WRECKED) ENDIF ENDIF IF ENUM_TO_INT(missionState) < ENUM_TO_INT(stateStunMariachiPeds) // Fail mission if player shoots at patrol vehicle when not inside it, but only prior to stunning objective AND IS_ENTITY_ALIVE(PLAYER_PED_ID()) AND NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle) AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(vehPatrolVehicle, PLAYER_PED_ID()) IF HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(vehPatrolVehicle, WEAPONTYPE_INVALID, GENERALWEAPON_TYPE_ANYWEAPON) IF HAS_ENTITY_BEEN_DAMAGED_BY_WEAPON(vehPatrolVehicle, WEAPONTYPE_UNARMED, GENERALWEAPON_TYPE_INVALID) // B*1433041 Don't check for damage when unarmed #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: vehPatrolVehicle was damaged by WEAPONTYPE_UNARMED so not incrementing iCurrentShotVehicleDialogue") ENDIF #ENDIF ELIF IS_ENTITY_ON_FIRE(vehPatrolVehicle) // B*1457651 B*1457673 #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: vehPatrolVehicle was damaged by fire so just fail mission") ENDIF #ENDIF MIN1_MISSION_FAILED(FAILED_PATROL_VEHICLE_ATTACKED) ELSE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: vehPatrolVehicle was damaged by GENERALWEAPON_TYPE_ANYWEAPON. iCurrentShotVehicleDialogue = ", iCurrentShotVehicleDialogue) ENDIF #ENDIF IF iCurrentShotVehicleDialogue = 0 OR iCurrentShotVehicleDialogue = 1 MIN1_PLAY_NEXT_SHOT_VEHICLE_DIALOGUE() ELIF MIN1_ALLOW_CONVERSATION_TO_PLAY(FALSE) MIN1_MISSION_FAILED(FAILED_PATROL_VEHICLE_ATTACKED) ENDIF ENDIF CLEAR_ENTITY_LAST_WEAPON_DAMAGE(vehPatrolVehicle) ENDIF CLEAR_ENTITY_LAST_DAMAGE_ENTITY(vehPatrolVehicle) ENDIF IF (GET_GAME_TIMER() - iPatrolVehicleTyresBurstTimer) > 1000 // Check for burst tyres once a second iPatrolVehicleTyresBurstTimer = GET_GAME_TIMER() IF IS_VEHICLE_TYRE_BURST(vehPatrolVehicle, SC_WHEEL_CAR_REAR_LEFT) AND IS_VEHICLE_TYRE_BURST(vehPatrolVehicle, SC_WHEEL_CAR_REAR_RIGHT) AND IS_VEHICLE_TYRE_BURST(vehPatrolVehicle, SC_WHEEL_CAR_FRONT_LEFT) AND IS_VEHICLE_TYRE_BURST(vehPatrolVehicle, SC_WHEEL_CAR_FRONT_RIGHT) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: All vehPatrolVehicle tyres burst") ENDIF #ENDIF MIN1_MISSION_FAILED(FAILED_PATROL_VEHICLE_ATTACKED) ENDIF ENDIF ELSE MIN1_MISSION_FAILED(FAILED_PATROL_VEHICLE_WRECKED) ENDIF ENDIF ENDIF INT i = 0 REPEAT NUM_MARIACHI_PEDS i IF DOES_ENTITY_EXIST(pedMariachi[i]) IF IS_ENTITY_DEAD(pedMariachi[i]) MIN1_MISSION_FAILED(FAILED_MARIACHI_DIED) ELSE MIN1_STOP_AMBIENT_ANIMS_ON_PED(pedMariachi[i]) IF NOT IS_PED_IN_ANY_VEHICLE(pedMariachi[i]) // Don't check for injuries when the player is chasing their car so he's allowed to pepper their car with gunfire AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(pedMariachi[i], PLAYER_PED_ID()) AND NOT MIN1_HAS_MARIACHI_BEEN_DAMAGED_BY_ALLOWED_WEAPON(i) MIN1_MISSION_FAILED(FAILED_MARIACHI_INJURED) ENDIF ENDIF ENDIF ENDREPEAT ENDIF ENDPROC /// PURPOSE: /// Main state for handling the intro cutscene. PROC MS_INTRO() SWITCH missionStateMachine CASE MIN1_STATE_MACHINE_SETUP MIN1_STATE_SETUP(#IF IS_DEBUG_BUILD "MS_INTRO" #ENDIF) RC_REQUEST_CUTSCENE("mmb_1_rcm", TRUE) MIN1_SETUP_JOE_JOSEF_CUTSCENE_PROPS() iCutsceneStage = 0 IF IS_SCREEN_FADED_IN() // Don't do gameplay hint if skipping to intro AND NOT IS_REPLAY_IN_PROGRESS() // Or if replaying mission AND IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[0]) AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[0]) > 7.0 AND NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<329.287262,3403.302246,34.502598>>, <<336.421509,3385.255615,39.405560>>, 20.000000) SET_GAMEPLAY_ENTITY_HINT(sRCLauncherDataLocal.pedID[0], (<<0, 0, 0>>), TRUE, -1, 3000) SET_GAMEPLAY_HINT_FOLLOW_DISTANCE_SCALAR(0.45) SET_GAMEPLAY_HINT_CAMERA_RELATIVE_SIDE_OFFSET(-0.01) SET_GAMEPLAY_HINT_FOV(25.00) SET_GAMEPLAY_HINT_CAMERA_BLEND_TO_FOLLOW_PED_MEDIUM_VIEW_MODE(TRUE) SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) OPEN_SEQUENCE_TASK(seqTrevorLeadIn) IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) TASK_LEAVE_ANY_VEHICLE(NULL) ENDIF TASK_FOLLOW_TO_OFFSET_OF_ENTITY(NULL, sRCLauncherDataLocal.pedID[0], <<0, -3, 0>>, PEDMOVEBLENDRATIO_WALK) TASK_TURN_PED_TO_FACE_ENTITY(NULL, sRCLauncherDataLocal.pedID[0]) CLOSE_SEQUENCE_TASK(seqTrevorLeadIn) TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seqTrevorLeadIn) CLEAR_SEQUENCE_TASK(seqTrevorLeadIn) iLeadInTimer = GET_GAME_TIMER() #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Doing leadin focus camera") ENDIF #ENDIF ELSE iLeadInTimer = -1 #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Not doing leadin focus camera") ENDIF #ENDIF ENDIF BREAK CASE MIN1_STATE_MACHINE_LOOP SWITCH iCutsceneStage CASE 0 MIN1_SETUP_JOE_JOSEF_CUTSCENE_PROPS() IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) RC_PLAYER_TRIGGER_SCENE_LOCK_IN() SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK) ENDIF IF iLeadInTimer = -1 OR (GET_GAME_TIMER() - iLeadInTimer) > 3000 IF RC_IS_CUTSCENE_OK_TO_START() IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOE]) pedBuddy[JOE].ped = sRCLauncherDataLocal.pedID[JOE] SET_ENTITY_AS_MISSION_ENTITY(pedBuddy[JOE].ped, TRUE, TRUE) REGISTER_ENTITY_FOR_CUTSCENE(pedBuddy[JOE].ped, "Joe", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_NPC_PED_MODEL(CHAR_JOE)) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: CU_ANIMATE_EXISTING_SCRIPT_ENTITY Joe") ENDIF #ENDIF ELSE REGISTER_ENTITY_FOR_CUTSCENE(pedBuddy[JOE].ped, "Joe", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, GET_NPC_PED_MODEL(CHAR_JOE)) ENDIF IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOSEF]) pedBuddy[JOSEF].ped = sRCLauncherDataLocal.pedID[JOSEF] SET_ENTITY_AS_MISSION_ENTITY(pedBuddy[JOSEF].ped, TRUE, TRUE) REGISTER_ENTITY_FOR_CUTSCENE(pedBuddy[JOSEF].ped, "Josef", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, GET_NPC_PED_MODEL(CHAR_JOSEF)) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: CU_ANIMATE_EXISTING_SCRIPT_ENTITY Josef") ENDIF #ENDIF ELSE REGISTER_ENTITY_FOR_CUTSCENE(pedBuddy[JOSEF].ped, "Josef", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, GET_NPC_PED_MODEL(CHAR_JOSEF)) ENDIF IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.vehID[0]) vehPatrolVehicle = sRCLauncherDataLocal.vehID[0] SET_ENTITY_AS_MISSION_ENTITY(vehPatrolVehicle, TRUE, TRUE) REGISTER_ENTITY_FOR_CUTSCENE(vehPatrolVehicle, "MMB_Patrol_Vehicle", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PRANGER) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: CU_ANIMATE_EXISTING_SCRIPT_ENTITY MMB_Patrol_Vehicle") ENDIF #ENDIF ELSE REGISTER_ENTITY_FOR_CUTSCENE(vehPatrolVehicle, "MMB_Patrol_Vehicle", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, PRANGER) ENDIF IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.vehID[1]) vehCamperVan = sRCLauncherDataLocal.vehID[1] SET_ENTITY_AS_MISSION_ENTITY(vehCamperVan, TRUE, TRUE) REGISTER_ENTITY_FOR_CUTSCENE(vehCamperVan, "MMB_Camper_Van", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, SURFER2) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: CU_ANIMATE_EXISTING_SCRIPT_ENTITY MMB_Camper_Van") ENDIF #ENDIF ELSE REGISTER_ENTITY_FOR_CUTSCENE(vehCamperVan, "MMB_Camper_Van", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, SURFER2) ENDIF RC_CLEANUP_LAUNCHER() REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW) START_CUTSCENE(CUTSCENE_PROCGRASS_FORCE_HD) // For B*1268419 IF IS_ENTITY_ALIVE(vehPatrolVehicle) SET_VEHICLE_MODEL_PLAYER_WILL_EXIT_SCENE(GET_ENTITY_MODEL(vehPatrolVehicle)) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: set_vehicle_model_player_will_exit_scene") ENDIF #ENDIF ENDIF iCutsceneStage++ ENDIF ENDIF BREAK CASE 1 IF IS_CUTSCENE_PLAYING() IF IS_GAMEPLAY_HINT_ACTIVE() STOP_GAMEPLAY_HINT() ENDIF RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<331.741241,3402.092529,34.439514>>, <<318.007355,3410.159668,38.728088>>, 5.000000, vPlayerCarRespot, fPlayerCarRespot, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR()) SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(vPlayerCarRespot, fPlayerCarRespot) RC_START_CUTSCENE_MODE(<<327.85, 3405.70, 35.73>>) SAFE_FADE_SCREEN_IN_FROM_BLACK(500, FALSE) // Just in case screen is faded out iCutsceneStage++ ENDIF BREAK CASE 2 IF IS_CUTSCENE_PLAYING() IF NOT DOES_ENTITY_EXIST(pedBuddy[JOE].ped) AND DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Joe")) pedBuddy[JOE].ped = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Joe")) SET_ENTITY_AS_MISSION_ENTITY(pedBuddy[JOE].ped, TRUE, TRUE) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Grabbed pedBuddy[JOE].ped from Joe") ENDIF #ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(pedBuddy[JOSEF].ped) AND DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Josef")) pedBuddy[JOSEF].ped = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Josef")) SET_ENTITY_AS_MISSION_ENTITY(pedBuddy[JOSEF].ped, TRUE, TRUE) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Grabbed pedBuddy[JOSEF].ped from Josef") ENDIF #ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(vehPatrolVehicle) AND DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("MMB_Patrol_Vehicle")) vehPatrolVehicle = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("MMB_Patrol_Vehicle")) SET_ENTITY_AS_MISSION_ENTITY(vehPatrolVehicle, TRUE, TRUE) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Grabbed vehPatrolVehicle from MMB_Patrol_Vehicle") ENDIF #ENDIF ENDIF IF NOT DOES_ENTITY_EXIST(vehCamperVan) AND DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("MMB_Camper_Van")) vehCamperVan = GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("MMB_Camper_Van")) SET_ENTITY_AS_MISSION_ENTITY(vehCamperVan, TRUE, TRUE) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Grabbed vehCamperVan from MMB_Camper_Van") ENDIF #ENDIF ENDIF ELSE SET_VEHICLE_DOORS_SHUT(vehPatrolVehicle, TRUE) // See B*1340763 - Ensure the doors are closed whether skipping or not SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0) // See B*1015583 - Should be a cut rather than a blend SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0) MIN1_SETUP_PATROL_VEHICLE(<<321.687347,3408.640625,35.343765>>, -105.797066) RC_END_CUTSCENE_MODE() #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: IS_CUTSCENE_PLAYING returned false") ENDIF #ENDIF missionStateMachine = MIN1_STATE_MACHINE_CLEANUP ENDIF BREAK ENDSWITCH BREAK CASE MIN1_STATE_MACHINE_CLEANUP REPLAY_STOP_EVENT() MIN1_STATE_CLEANUP(#IF IS_DEBUG_BUILD "MS_INTRO" #ENDIF) RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE) BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Main state for handling going to the bar. PROC MS_GO_TO_BAR() SWITCH missionStateMachine CASE MIN1_STATE_MACHINE_SETUP MIN1_STATE_SETUP(#IF IS_DEBUG_BUILD "MS_GO_TO_BAR" #ENDIF) SAFE_RELEASE_VEHICLE(vehCamperVan) SET_WANTED_LEVEL_MULTIPLIER(0.5) MIN1_RESET_PATROL_VEHICLE_VARS() pvStatus = PV_STATUS_GO_TO_DESTINATION bStartedDriveToBarConversation = FALSE bFinishedDriveToBarConversation = FALSE bStartedStopDriveConversation = FALSE bStartedWrongWayConversation = FALSE bStartedAlmostThereConversation = FALSE bIsInteriorPinned = FALSE REPLAY_RECORD_BACK_FOR_TIME(0.0, 10.0, REPLAY_IMPORTANCE_LOWEST) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<322,3409,35>>-<<40,40,40>>, <<322,3409,35>>+<<40,40,40>>, FALSE) // See B*1217223 - Stop trailers spawning BREAK CASE MIN1_STATE_MACHINE_LOOP IF IS_ENTITY_ALIVE(vehPatrolVehicle) IF IS_ENTITY_IN_RANGE_COORDS(vehPatrolVehicle, vBarOutside, 20) AND GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0 KILL_ANY_CONVERSATION() IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle) BRING_VEHICLE_TO_HALT(vehPatrolVehicle, 10.0, 1) ENDIF missionStateMachine = MIN1_STATE_MACHINE_CLEANUP ELSE MIN1_MANAGE_PATROL_VEHICLE_OBJECTIVES() MIN1_MANAGE_DRIVE_TO_BAR_CONVERSATION() MIN1_MANAGE_ALMOST_THERE_CONVERSATION() MIN1_MANAGE_WRONG_WAY_CONVERSATION() MIN1_MANAGE_ABANDONING_VEHICLE() MIN1_MANAGE_INTERIOR_PINNING() ENDIF IF IS_INTERIOR_READY(interiorBar) AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interiorBar MIN1_MISSION_FAILED(FAILED_ABANDONED_BUDDIES) ENDIF ENDIF BREAK CASE MIN1_STATE_MACHINE_CLEANUP MIN1_STATE_CLEANUP(#IF IS_DEBUG_BUILD "MS_GO_TO_BAR" #ENDIF) BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Main state for handling going inside the bar. PROC MS_GO_INSIDE_BAR() SWITCH missionStateMachine CASE MIN1_STATE_MACHINE_SETUP MIN1_STATE_SETUP(#IF IS_DEBUG_BUILD "MS_GO_INSIDE_BAR" #ENDIF) SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(CP_GO_IN_BAR, "Enter bar") MIN1_LOAD_ASSETS_FOR_MISSION_STATE(stateGoInsideBar) MIN1_MAKE_BUDDIES_LOOK_AT_PLAYER(TRUE) // See B*1793310 - bringing across the below fix from the ng branch as requested by Fredrik at SD SET_SCENARIO_PEDS_SPAWN_IN_SPHERE_AREA(<<1985.25757, 3048.66968, 46.21502>>, 7.0, 20) // B*1766485 - Ensure bar gets populated // B*1779653 Ensure peds don't visibly spawn in front of bar bStartedArrivedAtBarConversation = FALSE bStartedDrunkPedConversation = FALSE bStartedBumpDrunkConversation = FALSE iWaitConversationsPlayed = 0 bPedGoneOutDoor = FALSE bDoneJanetTalk = FALSE REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_LOWEST) SET_WANTED_LEVEL_MULTIPLIER(0.1) iLookAroundTimer = GET_GAME_TIMER() iWaitConversationTimer = GET_GAME_TIMER() BREAK CASE MIN1_STATE_MACHINE_LOOP MIN1_DISABLE_TREVOR_AGITATION_TRIGGERS() IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1991.563110,3049.608887,45.125618>>, <<1988.916260,3045.263184,48.125492>>, 5.000000) missionStateMachine = MIN1_STATE_MACHINE_CLEANUP ELSE MIN1_MANAGE_ARRIVED_AT_BAR_CONVERSATION() MIN1_MANAGE_WAIT_CONVERSATIONS() MIN1_MANAGE_DRUNK_PED_OUT_DOOR() MIN1_MANAGE_JANET_CONVERSATION() MIN1_MANAGE_TREVOR_LOOKING_FOR_MARIACHI() MIN1_MANAGE_INTERIOR_PINNING() ENDIF BREAK CASE MIN1_STATE_MACHINE_CLEANUP MIN1_STATE_CLEANUP(#IF IS_DEBUG_BUILD "MS_GO_INSIDE_BAR" #ENDIF) SAFE_REMOVE_BLIP(blipPatrolVehicle) SAFE_REMOVE_BLIP(blipDestination) SAFE_RELEASE_PED(pedWalkOutBar) SAFE_RELEASE_PED(pedJanet) IF IS_ENTITY_ALIVE(PLAYER_PED_ID()) TASK_CLEAR_LOOK_AT(PLAYER_PED_ID()) ENDIF BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Main state for handling returning back outside the bar. PROC MS_GO_OUTSIDE_BAR() SWITCH missionStateMachine CASE MIN1_STATE_MACHINE_SETUP MIN1_STATE_SETUP(#IF IS_DEBUG_BUILD "MS_GO_OUTSIDE_BAR" #ENDIF) KILL_ANY_CONVERSATION() // Stop the drunk ped conversation if ongoing IF IS_ENTITY_ALIVE(vehPatrolVehicle) SAFE_TELEPORT_ENTITY(vehPatrolVehicle, <<1995.878784,3058.194824,46.692181>>, 45.833717) SET_VEHICLE_FORWARD_SPEED(vehPatrolVehicle, 0.1) SET_ENTITY_HEALTH(vehPatrolVehicle, 1000) SET_VEHICLE_DOOR_OPEN(vehPatrolVehicle, SC_DOOR_FRONT_LEFT) ENDIF REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_LOWEST) MIN1_SPAWN_MARIACHI_CAR(vMariachiCar, fMariachiCar, 500) MIN1_CHANGE_ROAD_NODES_FOR_CAR_CHASE(FALSE) MIN1_MAKE_BUDDIES_LOOK_AT_PLAYER(TRUE) bStartedInBarConversation = FALSE bStartedGetOutHereConversation = FALSE bStartedOutsideBarConversation = FALSE iDisableReplayCameraTimer = GET_GAME_TIMER() + 1000 //Fix for bug 2223403 BREAK CASE MIN1_STATE_MACHINE_LOOP MIN1_DISABLE_TREVOR_AGITATION_TRIGGERS() IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<1990.334961,3053.546143,45.112350>>, <<1989.141846,3051.732666,48.112213>>, 3.000000) missionStateMachine = MIN1_STATE_MACHINE_CLEANUP ELSE MIN1_MANAGE_IN_BAR_CONVERSATION() MIN1_MANAGE_GET_OUT_HERE_CONVERSATION() ENDIF BREAK CASE MIN1_STATE_MACHINE_CLEANUP MIN1_STATE_CLEANUP(#IF IS_DEBUG_BUILD "MS_GO_OUTSIDE_BAR" #ENDIF) UNPIN_INTERIOR(interiorBar) BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Main state for handling chasing the Mariachi van. PROC MS_CHASE_MARIACHI_CAR() SWITCH missionStateMachine CASE MIN1_STATE_MACHINE_SETUP MIN1_STATE_SETUP(#IF IS_DEBUG_BUILD "MS_CHASE_MARIACHI_CAR" #ENDIF) MIN1_RESET_PATROL_VEHICLE_VARS() MIN1_RESET_CHASE_CONVERSATION_VARS() pvStatus = PV_STATUS_PLAYER_NOT_INSIDE iRequiredHealth = 500 fFailDist = 200 bStartedChaseVanConversation = FALSE bStartedSingingStream = FALSE IF IS_ENTITY_ALIVE(vehMariachiCar) IF NOT IS_AUDIO_SCENE_ACTIVE("MINUTE_01_SCENE") START_AUDIO_SCENE("MINUTE_01_SCENE") ENDIF ADD_ENTITY_TO_AUDIO_MIX_GROUP(vehMariachiCar,"MINUTE_01_SCENE_MARIACHI_VEHICLE") IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehMariachiCar) SET_VEHICLE_ACTIVE_DURING_PLAYBACK(vehMariachiCar, TRUE) // For B*1098655 UNPAUSE_PLAYBACK_RECORDED_VEHICLE(vehMariachiCar) ENDIF ENDIF IF IS_ENTITY_ALIVE(vehPatrolVehicle) AND IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehPatrolVehicle) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Replaying from checkpoint so do a rolling start") ENDIF #ENDIF bDoneRollingStart = FALSE iRollingStartTimer = -1 UNPAUSE_PLAYBACK_RECORDED_VEHICLE(vehPatrolVehicle) ELSE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Not replaying from checkpoint so don't do a rolling start") ENDIF #ENDIF bDoneRollingStart = TRUE ENDIF bUsePlaybackAIForMariachiCar = FALSE bStartedOffRoadConversation = FALSE bStartedCrashedConversation = FALSE iGetInConversationsPlayed = 0 iStoppedConversationsPlayed = 0 bPatrolVehicleStoppedDuringChase = FALSE iFarBehindConversationsPlayed = 0 iExitedVehicleConversationsPlayed = 0 iGetBackInVehicleConversationsPlayed = 0 iGotBackInVehicleConversationsPlayed = 0 bAllowPlayExitedVehicleConversation = FALSE bAllowPlayGetBackInVehicleConversation = FALSE bAllowPlayGotBackInVehicleConversation = FALSE bPlayedFarBehindConversation = FALSE REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_LOWEST) SET_WANTED_LEVEL_MULTIPLIER(0.1) WAIT(0) MIN1_SET_PROPS_TO_USE_FULL_PHYSICS(TRUE) iSingingDialogueTimer = GET_GAME_TIMER() iChaseDialogueTimer = GET_GAME_TIMER() iMariachiCarTyresBurstTimer = GET_GAME_TIMER() iStunGunDialogueTimer = GET_GAME_TIMER() SET_RANDOM_TRAINS(FALSE) DELETE_ALL_TRAINS() SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_DRIVING) INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(MIN1_FAST_STOP) BREAK CASE MIN1_STATE_MACHINE_LOOP SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.25) IF IS_ENTITY_ALIVE(vehMariachiCar) MIN1_MANAGE_MARIACHI_CAR_RECORDING() MIN1_MANAGE_ABANDONING_VEHICLE() MIN1_MANAGE_ABANDONING_MARIACHI() MIN1_MANAGE_PLAYING_SINGING_STREAM() IF MIN1_SHOULD_MARIACHI_VEHICLE_STOP() REPLAY_RECORD_BACK_FOR_TIME(5.0, 2.0, REPLAY_IMPORTANCE_LOWEST) INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED() IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehMariachiCar) STOP_PLAYBACK_RECORDED_VEHICLE(vehMariachiCar) ENDIF BRING_VEHICLE_TO_HALT(vehMariachiCar, 10.0, 1) REMOVE_VEHICLE_RECORDING(500, "Min1_Van") MIN1_STOP_ANY_CHASE_CONVERSATIONS() missionStateMachine = MIN1_STATE_MACHINE_CLEANUP ELSE MIN1_MANAGE_PATROL_VEHICLE_OBJECTIVES() MIN1_MANAGE_OUTSIDE_BAR_CONVERSATIONS() MIN1_MANAGE_START_CHASE_CONVERSATION() MIN1_MANAGE_SINGING_DIALOGUE() MIN1_MANAGE_OFFROAD_CONVERSATION() MIN1_MANAGE_STOPPED_CONVERSATIONS() MIN1_MANAGE_FAR_BEHIND_CONVERSATIONS() MIN1_MANAGE_LEAVE_VEHICLE_CONVERSATIONS() MIN1_MANAGE_CHASE_CONVERSATIONS() MIN1_MANAGE_CRASH_CONVERSATIONS() MIN1_MANAGE_MARIACHI_ANIMS() MIN1_MANAGE_MARIACHI_CAR_FOCUS_CAMERA() MIN1_MANAGE_ROLLING_START() ENDIF ENDIF BREAK CASE MIN1_STATE_MACHINE_CLEANUP MIN1_STATE_CLEANUP(#IF IS_DEBUG_BUILD "MS_CHASE_MARIACHI_CAR" #ENDIF) SAFE_REMOVE_BLIP(blipDestination) SAFE_REMOVE_BLIP(blipPatrolVehicle) KILL_CHASE_HINT_CAM(localChaseHintCamStruct) MIN1_MAKE_BUDDIES_LOOK_AT_PLAYER(FALSE) MIN1_SET_PROPS_TO_USE_FULL_PHYSICS(FALSE) TRIGGER_MUSIC_EVENT("MM1_STOP") STOP_STREAM() // Mariachi singing REMOVE_ANIM_DICT("missminuteman_1ig_1") BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Main state for handling stunning the Mariachi peds. PROC MS_STUN_MARIACHI_PEDS() INT i SWITCH missionStateMachine CASE MIN1_STATE_MACHINE_SETUP MIN1_STATE_SETUP(#IF IS_DEBUG_BUILD "MS_STUN_MARIACHI_PEDS" #ENDIF) IF NOT HAS_PED_GOT_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_STUNGUN) GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_STUNGUN, 200, TRUE) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_STUNGUN, TRUE) PLAY_SOUND_FRONTEND(-1, "STUN_COLLECT", "MINUTE_MAN_01_SOUNDSET") #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Gave stun gun to player") ENDIF #ENDIF ENDIF i = 0 REPEAT NUM_MARIACHI_PEDS i IF IS_ENTITY_ALIVE(pedMariachi[i]) CLEAR_ENTITY_LAST_WEAPON_DAMAGE(pedMariachi[i]) // Clear this otherwise it'll fail as soon as they leave their car if the player has shot one of them during the chase statusMariachi[i] = MARIACHI_EXITING_HIS_VEHICLE bPlayedStunnedConversation[i] = FALSE bPlayedSoberConversation[i] = FALSE bCheckForTazeredAgain[i] = FALSE bHasBeenTazeredAgain[i] = FALSE iMariachiConversationTimer[i] = GET_GAME_TIMER() iNumPlayedDrunkConversations[i] = 0 iNumPlayedBumpConversations[i] = 0 iNumPlayedAimConversations[i] = 0 iNumPlayedShockConversations[i] = 0 iNumPlayedWalkConversations[i] = 0 Make_Ped_Drunk_Constant(pedMariachi[i]) SET_PED_SUFFERS_CRITICAL_HITS(pedMariachi[i], TRUE) // B*1357897 Allow critical hits now he's out of the car TASK_LOOK_AT_ENTITY(pedMariachi[i], PLAYER_PED_ID(), -1, SLF_WHILE_NOT_IN_FOV) IF IS_PED_IN_ANY_VEHICLE(pedMariachi[i]) TASK_LEAVE_ANY_VEHICLE(pedMariachi[i], i*1500, ECF_DONT_CLOSE_DOOR|ECF_DONT_DEFAULT_WARP_IF_DOOR_BLOCKED) // Time delay so they don't get out in unison // B*1481321 Don't warp if door is blocked ENDIF IF NOT DOES_BLIP_EXIST(blipMariachi[i]) blipMariachi[i] = CREATE_BLIP_FOR_PED(pedMariachi[i], TRUE) ENDIF iMariachiExitVehicleTimer[i] = GET_GAME_TIMER() ENDIF ENDREPEAT iMariachiConversationDelay[0] = 8000 iMariachiConversationDelay[1] = 10000 MIN1_RESET_HURRY_STUN_CONVERSATION_VARS() pedBuddy[0].status = BUDDY_WAITING_TO_GET_OUT pedBuddy[1].status = BUDDY_WAITING_TO_GET_OUT fFailDist = 100 bStartedBringVehicleConversation = FALSE bStartedNoJoeConversation = FALSE bStartedGoBackForJoeConversation = FALSE bStartedStunThemConversation = FALSE iPlayedStunnedConversation = 0 iTimesStunnedMoreThanNecessary = 0 iCurrentTimesStunnedDialogue = 0 sTimesStunnedDialogueString[0] = "MIN1_STOP1" sTimesStunnedDialogueString[1] = "MIN1_STOP2" sTimesStunnedDialogueString[2] = "MIN1_STOP3" seatMariachi[0] = VS_BACK_LEFT seatMariachi[1] = VS_BACK_RIGHT fSeekOffsetFromPatrolVehicle[0] = -3.0 fSeekOffsetFromPatrolVehicle[1] = 3.0 iNotStunnedDialogueTimer = GET_GAME_TIMER() iSingingDialogueTimer = GET_GAME_TIMER() SET_WANTED_LEVEL_MULTIPLIER(0.1) REQUEST_VEHICLE_ASSET(modelPatrolVehicle) REQUEST_ANIM_DICT("move_m@drunk@verydrunk") // B*1312957 - Preload drunk walk anims MIN1_LOAD_ASSETS_FOR_MISSION_STATE(stateStunMariachiPeds) SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE) REPLAY_RECORD_BACK_FOR_TIME(5.0, 6.0, REPLAY_IMPORTANCE_LOWEST) BREAK CASE MIN1_STATE_MACHINE_LOOP SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0) // B*476749 - Limit the likelihood that ambient cars will drive through the area when everyone is out of their vehicles IF MIN1_ARE_BOTH_MARIACHI_STUNNED() missionStateMachine = MIN1_STATE_MACHINE_CLEANUP ELSE MIN1_MANAGE_ABANDONING_MARIACHI() MIN1_MANAGE_MARIACHI_GETTING_INTO_PATROL_VEHICLE() MIN1_MANAGE_BUDDIES_GUARDING_MARIACHI() MIN1_MANAGE_STUN_THEM_DIALOGUE() MIN1_MANAGE_HURRY_STUN_DIALOGUE() MIN1_MANAGE_EXCESSIVE_STUN_DIALOGUE() MIN1_MANAGE_SINGING_DIALOGUE() ENDIF BREAK CASE MIN1_STATE_MACHINE_CLEANUP REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_LOWEST) MIN1_STATE_CLEANUP(#IF IS_DEBUG_BUILD "MS_STUN_MARIACHI_PEDS" #ENDIF) BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Main state for handling the the Mariachi driving away at the end of the mission. INT iTimeOutDriveAway = -1 PROC MS_LEAVE_AREA() SWITCH missionStateMachine CASE MIN1_STATE_MACHINE_SETUP MIN1_STATE_SETUP(#IF IS_DEBUG_BUILD "MS_LEAVE_AREA" #ENDIF) MIN1_MAKE_BUDDIES_LOOK_AT_PLAYER(TRUE) bStartedLeaveAreaConversation = FALSE bStartedCyaConversation = FALSE bPatrolVehicleDrivingAway = FALSE BREAK CASE MIN1_STATE_MACHINE_LOOP IF MIN1_IS_PLAYER_FAR_AWAY_FROM_ENTITIES() OR (iTimeOutDriveAway >= 0 AND GET_GAME_TIMER() >= iTimeOutDriveAway) PRINTSTRING("timeout = ") PRINTINT(GET_GAME_TIMER() - iTimeOutDriveAway) PRINTNL() IF IS_ENTITY_ALIVE(vehMariachiCar) AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehMariachiCar) INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(MIN1_VEHICLE_TAKEN_AFTER_STUNS) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Achieved stat: MIN1_VEHICLE_TAKEN_AFTER_STUNS") ENDIF #ENDIF ENDIF missionStateMachine = MIN1_STATE_MACHINE_CLEANUP ELIF bPatrolVehicleDrivingAway = FALSE MIN1_MANAGE_ABANDONING_MARIACHI() MIN1_MANAGE_LEAVE_AREA_DIALOGUE() MIN1_MANAGE_MARIACHI_GETTING_INTO_PATROL_VEHICLE() MIN1_MANAGE_BUDDIES_GUARDING_MARIACHI() MIN1_MANAGE_BUDDIES_DRIVING_AWAY() MIN1_MANAGE_EXCESSIVE_STUN_DIALOGUE() ELSE IF iTimeOutDriveAway < 0 iTimeOutDriveAway = GET_GAME_TIMER() + 30000 ENDIF MIN1_MANAGE_CYA_DIALOGUE() MIN1_HANDLE_PLAYER_STUNNING_PEDS_WHEN_DRIVING_AWAY() ENDIF BREAK CASE MIN1_STATE_MACHINE_CLEANUP MIN1_STATE_CLEANUP(#IF IS_DEBUG_BUILD "MS_LEAVE_AREA" #ENDIF) SAFE_REMOVE_BLIP(blipJoe) BREAK ENDSWITCH ENDPROC /// PURPOSE: /// Starts the mission failed sequence. PROC MS_FAILED() SWITCH missionStateMachine CASE MIN1_STATE_MACHINE_SETUP MIN1_STATE_SETUP(#IF IS_DEBUG_BUILD "MS_FAILED" #ENDIF) CLEAR_PRINTS() CLEAR_HELP() MIN1_REMOVE_ALL_BLIPS() KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() TRIGGER_MUSIC_EVENT("MM1_FAIL") bStartedFleeConversation = FALSE MIN1_MAKE_BUDDIES_AND_MARIACHI_FLEE() IF IS_ENTITY_ALIVE(vehPatrolVehicle) AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehPatrolVehicle) BRING_VEHICLE_TO_HALT(vehPatrolVehicle, 10, 1) ENDIF SWITCH failReason CASE FAILED_DEFAULT #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_DEFAULT") ENDIF #ENDIF BREAK CASE FAILED_JOE_DIED #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_JOE_DIED") ENDIF #ENDIF failString = "MIN1_F1" // ~s~Joe died. BREAK CASE FAILED_JOSEF_DIED #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_JOSEF_DIED") ENDIF #ENDIF failString = "MIN1_F2" // ~s~Josef died. BREAK CASE FAILED_THREW_EXPLOSIVES #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_THREW_EXPLOSIVES") ENDIF #ENDIF failString = "MIN1_F3" // ~s~Trevor threw explosives at the patrol vehicle. BREAK CASE FAILED_PATROL_VEHICLE_WRECKED #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_PATROL_VEHICLE_WRECKED") ENDIF #ENDIF failString = "MIN1_F4" // ~s~The patrol vehicle was destroyed. BREAK CASE FAILED_MARIACHI_DIED #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_MARIACHI_DIED") ENDIF #ENDIF failString = "MIN1_F5" // ~s~A mariachi died. BREAK CASE FAILED_MARIACHI_INJURED #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_MARIACHI_INJURED") ENDIF #ENDIF failString = "MIN1_F6" // ~s~A mariachi was injured. BREAK CASE FAILED_ABANDONED_BUDDIES #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_ABANDONED_BUDDIES") ENDIF #ENDIF failString = "MIN1_F7" // ~s~Trevor abandoned Joe and Josef. BREAK CASE FAILED_MARIACHI_ESCAPED #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_MARIACHI_ESCAPED") ENDIF #ENDIF failString = "MIN1_F8" // ~s~The mariachi escaped. BREAK CASE FAILED_JOE_INJURED #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_JOE_INJURED") ENDIF #ENDIF failString = "MIN1_F9" // ~s~Joe was injured. BREAK CASE FAILED_JOSEF_INJURED #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_JOSEF_INJURED") ENDIF #ENDIF failString = "MIN1_F10" // ~s~Josef was injured. BREAK CASE FAILED_ALERTED_COPS #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_ALERTED_COPS") ENDIF #ENDIF failString = "MIN1_F12" // ~s~Trevor alerted the cops. BREAK CASE FAILED_PATROL_VEHICLE_ATTACKED #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_PATROL_VEHICLE_ATTACKED") ENDIF #ENDIF failString = "MIN1_F11" // ~s~The patrol vehicle was damaged. BREAK CASE FAILED_ABANDONED_JOE #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: MISSION_FAILED reason=FAILED_ABANDONED_JOE") ENDIF #ENDIF failString = "MIN1_F15" // ~s~Trevor abandoned Joe. BREAK ENDSWITCH IF failReason = FAILED_DEFAULT Random_Character_Failed() // no fail reason ELSE Random_Character_Failed_With_Reason(failString) ENDIF BREAK CASE MIN1_STATE_MACHINE_LOOP IF GET_MISSION_FLOW_SAFE_TO_CLEANUP() MIN1_STATE_CLEANUP(#IF IS_DEBUG_BUILD "MS_FAILED" #ENDIF) MIN1_REMOVE_ALL_PEDS(TRUE, TRUE) SAFE_DELETE_VEHICLE(vehMariachiCar) SAFE_DELETE_VEHICLE(vehCamperVan) SAFE_DELETE_VEHICLE(vehPatrolVehicle) Script_Cleanup() ELSE // not finished fading out: handle dialogue etc here MIN1_MANAGE_JOE_JOSEF_FLEE_DIALOGUE() ENDIF BREAK ENDSWITCH ENDPROC #IF IS_DEBUG_BUILD /// PURPOSE: /// Checks for debug keys being pressed. PROC DEBUG_Check_Debug_Keys() IF bZSkipping = FALSE AND (GET_GAME_TIMER() - iDebugSkipTime) > 1000 AND ENUM_TO_INT(missionState) < (ENUM_TO_INT(NUM_MISSION_STATES)-1) // Don't check during stateFailed IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: S key pressed so passing mission") ENDIF #ENDIF IF missionState = stateIntro WAIT_FOR_CUTSCENE_TO_STOP() ENDIF MIN1_MAKE_BUDDIES_AND_MARIACHI_FLEE() Script_Passed() ENDIF IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: F key pressed so failing mission") ENDIF #ENDIF IF missionState = stateIntro WAIT_FOR_CUTSCENE_TO_STOP() ENDIF MIN1_MAKE_BUDDIES_AND_MARIACHI_FLEE() MIN1_MISSION_FAILED(FAILED_DEFAULT) ENDIF IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: J key pressed so doing z skip forwards") ENDIF #ENDIF SWITCH missionState CASE stateIntro IF IS_CUTSCENE_ACTIVE() STOP_CUTSCENE() ENDIF BREAK CASE stateGoToBar MIN1_DEBUG_SKIP_STATE(Z_SKIP_GO_INSIDE_BAR) BREAK CASE stateGoInsideBar CASE stateGoOutsideBar MIN1_DEBUG_SKIP_STATE(Z_SKIP_CHASE_CAR) BREAK CASE stateChaseMariachiCar MIN1_DEBUG_SKIP_STATE(Z_SKIP_STUN_MARIACHI) BREAK CASE stateStunMariachiPeds CASE stateLeaveArea MIN1_DEBUG_SKIP_STATE(Z_SKIP_MISSION_PASSED) BREAK ENDSWITCH ENDIF IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: P key pressed so doing z skip backwards") ENDIF #ENDIF SWITCH missionState CASE stateGoToBar CASE stateGoInsideBar MIN1_DEBUG_SKIP_STATE(Z_SKIP_INTRO) BREAK CASE stateGoOutsideBar CASE stateChaseMariachiCar MIN1_DEBUG_SKIP_STATE(Z_SKIP_GO_INSIDE_BAR) BREAK CASE stateStunMariachiPeds MIN1_DEBUG_SKIP_STATE(Z_SKIP_CHASE_CAR) BREAK CASE stateLeaveArea MIN1_DEBUG_SKIP_STATE(Z_SKIP_STUN_MARIACHI) BREAK ENDSWITCH ENDIF INT i_new_state IF LAUNCH_MISSION_STAGE_MENU(mSkipMenu, i_new_state) #IF IS_DEBUG_BUILD IF bDebug_PrintToTTY CPRINTLN(DEBUG_MISSION, "MINUTE1: Z skip menu used so doing z skip") ENDIF #ENDIF MIN1_DEBUG_SKIP_STATE(i_new_state) ENDIF ENDIF ENDPROC #ENDIF SCRIPT(g_structRCScriptArgs sRCLauncherDataIn) sRCLauncherDataLocal = sRCLauncherDataIn RC_TakeEntityOwnership(sRCLauncherDataLocal) SET_MISSION_FLAG(TRUE) IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU)) PRINT_LAUNCHER_DEBUG("Force cleanup [TERMINATING]") Random_Character_Failed() Script_Cleanup() ENDIF MIN1_MISSION_SETUP() IF IS_REPLAY_IN_PROGRESS() RC_CleanupSceneEntities(sRCLauncherDataLocal, TRUE, TRUE) INT istage = GET_REPLAY_MID_MISSION_STAGE() IF g_bShitskipAccepted = TRUE istage++ ENDIF SWITCH istage CASE CP_GO_TO_BAR START_REPLAY_SETUP(<<321.9098, 3410.6528, 35.7119>>, 243.0269) MIN1_DEBUG_SKIP_STATE(Z_SKIP_GO_TO_BAR) BREAK CASE CP_GO_IN_BAR START_REPLAY_SETUP(<<1982.9250, 3078.1924, 45.9798>>, 216.8597) MIN1_DEBUG_SKIP_STATE(Z_SKIP_GO_INSIDE_BAR) BREAK CASE CP_CAR_CHASE START_REPLAY_SETUP(<<1993.5508, 3058.1018, 46.0548>>, 40.7551) MIN1_DEBUG_SKIP_STATE(Z_SKIP_CHASE_CAR) BREAK CASE CP_MISSION_PASSED START_REPLAY_SETUP(<<2698.2053, 4135.9048, 42.8234>>, 323.4031) MIN1_DEBUG_SKIP_STATE(Z_SKIP_MISSION_PASSED) BREAK ENDSWITCH ENDIF WHILE(TRUE) WAIT(0) REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_TCBP") IF iDisableReplayCameraTimer > GET_GAME_TIMER() REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2258455 ENDIF UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene) MIN1_DEATH_CHECKS() SWITCH missionState CASE stateIntro MS_INTRO() BREAK CASE stateGoToBar MS_GO_TO_BAR() BREAK CASE stateGoInsideBar MS_GO_INSIDE_BAR() BREAK CASE stateGoOutsideBar MS_GO_OUTSIDE_BAR() BREAK CASE stateChaseMariachiCar MS_CHASE_MARIACHI_CAR() BREAK CASE stateStunMariachiPeds MS_STUN_MARIACHI_PEDS() BREAK CASE stateLeaveArea MS_LEAVE_AREA() BREAK CASE stateMissionPassed Script_Passed() BREAK CASE stateFailed MS_FAILED() BREAK ENDSWITCH #IF IS_DEBUG_BUILD DEBUG_Check_Debug_Keys() #ENDIF ENDWHILE ENDSCRIPT