10082 lines
389 KiB
Python
Executable File
10082 lines
389 KiB
Python
Executable File
|
|
///
|
|
/// Author: Michael Wadelin & Steven Kerrigan Date: Nov/2011
|
|
///
|
|
/// Michael is innstructed by lester to infiltrate the LifeInvader HQ and plant a bomb in the back
|
|
/// of a new, to be announced, device that they are working on.
|
|
/// Michael must get a disguise to blend in with the staff and then go to the HQ.
|
|
/// Once there he is mistaken for an IT guy and is coaxed into helping remove some porn malware from
|
|
/// one of the programmers PC's.
|
|
/// Once this is done you must plant the bomb then leave without alerting anyone to your presence.
|
|
|
|
//Compile out Title Update changes to header functions.
|
|
//Must be before includes.
|
|
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
|
|
|
/// Includes
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "commands_fire.sch"
|
|
USING "commands_script.sch"
|
|
USING "commands_pad.sch"
|
|
USING "commands_object.sch"
|
|
USING "commands_misc.sch"
|
|
USING "commands_player.sch"
|
|
USING "script_player.sch"
|
|
using "commands_streaming.sch"
|
|
using "commands_camera.sch"
|
|
USING "Commands_clock.sch"
|
|
USING "Commands_interiors.sch"
|
|
USING "dialogue_public.sch"
|
|
USING "cellphone_public.sch"
|
|
USING "chase_hint_cam.sch"
|
|
USING "flow_public_core_override.sch"
|
|
USING "cellphone_public.sch"
|
|
USING "script_blips.sch"
|
|
USING "script_maths.sch"
|
|
USING "commands_entity.sch"
|
|
USING "select_mission_stage.sch"
|
|
USING "replay_public.sch"
|
|
USING "commands_cutscene.sch"
|
|
USING "cutscene_public.sch"
|
|
USING "mission_stat_public.sch"
|
|
USING "locates_public.sch"
|
|
USING "player_ped_public.sch"
|
|
USING "CompletionPercentage_public.sch"
|
|
USING "shop_public.sch"
|
|
USING "shop_private.sch"
|
|
USING "building_control_public.sch"
|
|
USING "usefulcommands.sch"
|
|
USING "asset_management_public.sch"
|
|
USING "building_control_private.sch"
|
|
USING "ambient_common.sch"
|
|
USING "cellphone_public.sch"
|
|
USING "clearmissionarea.sch"
|
|
USING "rc_threat_public.sch"
|
|
USING "tv_control_public.sch"
|
|
USING "finance_control_public.sch"
|
|
USING "commands_recording.sch"
|
|
|
|
/*
|
|
_ _ _______ ______ _ _______ ______ _ _______ ______
|
|
(_) (_)(_______)(_____ \ | |(_______)(____ \ (_) (_______) / _____)
|
|
_ _ _______ _____) )| | _______ ____) ) _ _____ ( (____
|
|
| | | || ___ || __ / | || ___ || __ ( | | | ___) \____ \
|
|
\ \ / / | | | || | \ \ | || | | || |__) )| |_____ | |_____ _____) )
|
|
\___/ |_| |_||_| |_||_||_| |_||______/ |_______)|_______)(______/
|
|
*/
|
|
|
|
// Constants
|
|
//---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
CONST_INT STAGE_ENTRY 0
|
|
CONST_INT STAGE_EXIT -1
|
|
|
|
CONST_INT I_NUM_CUTSCENES 5
|
|
CONST_INT I_NUM_Z_MENU_ELEMENTS 11 + I_NUM_CUTSCENES
|
|
|
|
CONST_FLOAT F_DIST_LI_PED_STOPS 25.0
|
|
|
|
TEXT_LABEL_23 str_wp_engineer_route = "lester1a_follow_e"
|
|
|
|
TEXT_LABEL_23 str_dialogue = "LS1AAUD"
|
|
|
|
// ANIM Dictionaries
|
|
|
|
TEXT_LABEL_23 anim_dict_milk_lady = "misslester1aig_1"
|
|
TEXT_LABEL_63 anim_dict_coffee = "amb@world_human_drinking@coffee@male@idle_a"
|
|
|
|
TEXT_LABEL_23 anim_dict_interview_1st = "misslester1aig_2main"
|
|
TEXT_LABEL_23 anim_dict_interview_1st_exit = "misslester1aig_2exit"
|
|
TEXT_LABEL_23 anim_dict_interview_2nd = "misslester1aig_7main"
|
|
TEXT_LABEL_23 anim_dict_interview_2nd_exit = "misslester1aig_7exit"
|
|
|
|
TEXT_LABEL_23 anim_dict_airguitar_1st = "misslester1aig_3main"
|
|
TEXT_LABEL_23 anim_dict_airguitar_1st_exit = "misslester1aig_3exit"
|
|
TEXT_LABEL_23 anim_dict_airguitar_2nd = "misslester1aig_4main"
|
|
TEXT_LABEL_23 anim_dict_airguitar_2nd_exit = "misslester1aig_4exit"
|
|
|
|
TEXT_LABEL_23 anim_dict_boardroom_intro = "misslester1aig_5intro"
|
|
TEXT_LABEL_23 anim_dict_boardroom_main = "misslester1aig_5main"
|
|
TEXT_LABEL_23 anim_dict_boardroom_exit = "misslester1aig_5exit"
|
|
|
|
TEXT_LABEL_23 anim_dict_paper_throw = "misslester1aig_6"
|
|
|
|
TEXT_LABEL_23 anim_dict_engineer_airguitar = "misslester1aig_9"
|
|
|
|
// Audio scenes
|
|
TEXT_LABEL_31 aScene_noise_blocker = "FAKE_INTERIOR_OCCLUSION_SCENE"
|
|
|
|
|
|
// Assisted routes
|
|
TEXT_LABEL_15 al_stairs_up = "life_up"
|
|
TEXT_LABEL_15 al_stairs_down = "invad_exit"
|
|
// TEXT_LABEL_15 al_door1 = "life_door1"
|
|
// TEXT_LABEL_15 al_door2 = "invad_door2"
|
|
|
|
|
|
// model names
|
|
MODEL_NAMES mod_hipster_main = IG_LIFEINVAD_01
|
|
MODEL_NAMES mod_hipster_m = A_M_Y_HIPSTER_01
|
|
MODEL_NAMES mod_hipster_f = A_F_Y_HIPSTER_01
|
|
MODEL_NAMES mod_hipster_f_heel = A_F_Y_HIPSTER_04
|
|
MODEL_NAMES mod_chair = Prop_Off_Chair_01
|
|
MODEL_NAMES mod_cup = PROP_CS_PAPER_CUP
|
|
MODEL_NAMES mod_milk_carton = PROP_CS_MILK_01
|
|
|
|
CONST_FLOAT DOORS_KEEP_CURRENT_RATIO 100.0
|
|
|
|
// 1B merged constants
|
|
|
|
//CAMERA CONST
|
|
CONST_INT MAX_CAM_SHOTS_POS 4
|
|
CONST_INT MAX_CAM_SHOTS_ROT 4
|
|
|
|
TEXT_LABEL_15 str_new_overlay = "breaking_news"
|
|
|
|
TEXT_LABEL_31 ad_ig_1 = "misslester1b"
|
|
|
|
CONST_INT i_start_speech 5000
|
|
CONST_INT i_keynote_duration 175137
|
|
CONST_INT i_detonate_window_open 77083
|
|
CONST_INT i_detonate_window_close 170000 //150000
|
|
CONST_INT i_remove_help 148000
|
|
|
|
CONST_INT i_signal_lost_start 11950
|
|
CONST_INT i_signal_lost_duration 7000
|
|
|
|
VECTOR ig_1_coord = <<-803.9083, 171.8480, 72.8347>>
|
|
VECTOR ig_1_rot = << 0.000, 0.000, 297.2519 >>
|
|
|
|
VECTOR v_home_living_room = << -802.4717, 175.9820, 71.8348 >>
|
|
|
|
VECTOR v_sf3d_tv_coord = <<-800.158, 173.603, 74.38>>
|
|
VECTOR v_sf3d_tv_rot = <<0,0,69.130>>
|
|
VECTOR v_sf3d_tv_scale = <<1,1,1>>
|
|
VECTOR v_sf3d_tv_world_size = <<3.163,1.783,1>>
|
|
|
|
//TV CAMERA VECTORS
|
|
VECTOR vCamPos[MAX_CAM_SHOTS_POS]
|
|
VECTOR vCamRot[MAX_CAM_SHOTS_ROT]
|
|
|
|
// Enumerators
|
|
//---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
// List of synced scenes
|
|
ENUM synced_scene_flag
|
|
ssf_lead_in,
|
|
ssf_ambient_milk_lady,
|
|
ssf_ambient_interview,
|
|
ssf_ambient_office,
|
|
ssf_ambient_paper_throw,
|
|
ssf_ambient_boardroom_main,
|
|
ssf_ambient_boardroom_additional,
|
|
ssf_engineer_air_guitar,
|
|
ssf_tracey,
|
|
ssf_num_scenes
|
|
ENDENUM
|
|
|
|
// List of peds in the mission
|
|
ENUM mission_ped_flag
|
|
mpf_mike,
|
|
mpf_shop,
|
|
|
|
mpf_lester,
|
|
|
|
// guy who goes out for a smoke
|
|
mpf_smoker,
|
|
|
|
mpf_milk_f,
|
|
mpf_coffee_1,
|
|
mpf_coffee_2,
|
|
|
|
mpf_receptionist_f,
|
|
|
|
// interview scene
|
|
mpf_hr,
|
|
mpf_gamer,
|
|
mpf_interviewee_m,
|
|
mpf_interviewee_f,
|
|
mpf_interviewer,
|
|
|
|
// paper throwers
|
|
mpf_office_paper_m,
|
|
mpf_office_paper_f,
|
|
|
|
// office peds
|
|
mpf_office_boss,
|
|
mpf_office_a,
|
|
mpf_office_b,
|
|
mpf_office_c,
|
|
mpf_office_d,
|
|
|
|
// board room peds
|
|
mpf_boardroom_norris,
|
|
mpf_boardroom_m_a,
|
|
mpf_boardroom_m_b,
|
|
mpf_boardroom_m_e,
|
|
mpf_boardroom_m_f,
|
|
//mpf_boardroom_f_a,
|
|
mpf_boardroom_f_b,
|
|
mpf_boardroom_f_c,
|
|
|
|
// Family
|
|
mpf_tracey,
|
|
|
|
mpf_num_peds
|
|
ENDENUM
|
|
|
|
// list of mission objects
|
|
ENUM mission_objects_flag
|
|
mof_wheelchair,
|
|
mof_smokers_chair,
|
|
mof_paper_ball,
|
|
mof_hacky_sack,
|
|
mof_prototype_case,
|
|
mof_office_boss_chair,
|
|
mof_office_a_chair,
|
|
mof_office_b_chair,
|
|
mof_office_c_chair,
|
|
mof_office_d_chair,
|
|
mof_office_thrower_m_chair,
|
|
mof_office_thrower_f_chair,
|
|
mof_boardroom_spare_chair_a,
|
|
mof_boardroom_spare_chair_b,
|
|
mof_boardroom_spare_chair_c,
|
|
mof_boardroom_spare_chair_d,
|
|
mof_boardroom_m_a_chair,
|
|
mof_boardroom_m_b_chair,
|
|
mof_boardroom_m_e_chair,
|
|
mof_boardroom_m_f_chair,
|
|
//mof_boardroom_f_a_chair,
|
|
mof_boardroom_f_b_chair,
|
|
mof_boardroom_f_c_chair,
|
|
mof_jay_norris_chair,
|
|
mof_receptionist_chair,
|
|
mof_milk_carton,
|
|
mof_cup,
|
|
mof_cup_1,
|
|
mof_cup_2,
|
|
mof_cupboard_door,
|
|
mof_mike_rucksack,
|
|
mof_tv_remote,
|
|
mof_phone,
|
|
mof_num_objs
|
|
ENDENUM
|
|
|
|
// List of mission events
|
|
ENUM mission_event_flag
|
|
mef_lester_phone_call,
|
|
mef_lester_phone_call_2,
|
|
mef_manage_bag,
|
|
mef_engineer_follow,
|
|
mef_ambient_milk,
|
|
mef_ambient_interview,
|
|
mef_ambient_office, // air guitaring as you enter
|
|
mef_ambient_paper_throw,
|
|
mef_ambient_boardroom, // board room meeting
|
|
mef_ambient_receptionist,
|
|
mef_engineer_air_guitar,
|
|
mef_ambient_dialogue, // manages the ambient dialogue in the office
|
|
mef_tracey,
|
|
mef_num_events
|
|
ENDENUM
|
|
|
|
// List of mission stages
|
|
ENUM mission_stage_flag
|
|
msf_st0_intro_cutscene = 0,
|
|
msf_st1_get_clothes,
|
|
msf_st2_go_to_offices,
|
|
msf_st3_go_to_computer,
|
|
msf_st4_mini_game,
|
|
msf_st5_plant_bomb,
|
|
msf_st6_leave_building,
|
|
msf_st7_go_home,
|
|
msf_st8_tv_start,
|
|
msf_st9_tv_detonate,
|
|
msf_st10_mission_passed,
|
|
|
|
msf_num_stages
|
|
ENDENUM
|
|
|
|
// Describes the current stage management state
|
|
ENUM STAGE_SWITCHSTATE
|
|
STAGESWITCH_IDLE,
|
|
STAGESWITCH_REQUESTED,
|
|
STAGESWITCH_EXITING,
|
|
STAGESWITCH_ENTERING
|
|
ENDENUM
|
|
|
|
//CAMERA ENUMS
|
|
ENUM CAM_SHOTS
|
|
CAMS_ULTRA = 0,
|
|
CAMS_CLOSE,
|
|
CAMS_ROOM,
|
|
CAMS_SCRIPT
|
|
ENDENUM
|
|
|
|
//ANIM STATE MACHINE ENUMS
|
|
ENUM MIKE_ANIM_STATE
|
|
MAS_NULL,
|
|
MAS_R_IDLE,
|
|
MAS_R_FIDG,
|
|
MAS_R_PRESS,
|
|
MAS_R_PRESS_HOLD_INTRO,
|
|
MAS_R_PRESS_HOLD_LOOP,
|
|
MAS_R_PRESS_HOLD_OUTRO,
|
|
MAS_P_INTO,
|
|
MAS_P_AWAY,
|
|
MAS_P_IDLE,
|
|
MAS_P_SCROLL,
|
|
MAS_P_PRESS,
|
|
MAS_P_DETO_INTRO,
|
|
MAS_P_DETO_WAIT,
|
|
MAS_P_DETO_REACT,
|
|
MAS_P_OUTRO
|
|
ENDENUM
|
|
|
|
// List of minigame feedback flags
|
|
ENUM minigame_scaleform_flags
|
|
mgsf_nothing = 0,
|
|
mgsf_pc_window = 40,
|
|
mgsf_av_open = 2,
|
|
mgsf_av_start_clean = 50,
|
|
mgsf_av_exterminate = 51,
|
|
mgsf_av_popup_close = 60
|
|
ENDENUM
|
|
|
|
// List of all the fail conditions
|
|
ENUM mission_fail_flag
|
|
mff_lester_dead,
|
|
mff_blew_your_cover,
|
|
mff_bomb_plant_failed,
|
|
mff_store_closed,
|
|
mff_insufficient_fund_for_disguise,
|
|
mff_did_not_kill_target,
|
|
mff_tracey_dead,
|
|
mff_tracey_threat,
|
|
mff_wanted_home,
|
|
mff_debug_forced,
|
|
mff_default, // used when a specific condition isn't specified
|
|
mff_num_fails
|
|
ENDENUM
|
|
|
|
ENUM mission_door_flags
|
|
mdf_office_board_room_l,
|
|
mdf_office_board_room_r,
|
|
mdf_office_slide_1,
|
|
mdf_office_slide_2,
|
|
mdf_num_doors
|
|
ENDENUM
|
|
|
|
ENUM ENGINEER_FOLLOW_ENUM
|
|
EFE_START = 1,
|
|
EFE_TO_DESK,
|
|
EFE_WAITING_ON_ROUTE_START,
|
|
EFE_WAITING_ON_ROUTE,
|
|
EFE_WAITING_AT_END
|
|
ENDENUM
|
|
|
|
ENUM TRIGGER_SOUND_STATES
|
|
TSS_NULL,
|
|
TSS_WAIT_PLAY_REMOTE_RING,
|
|
TSS_REMOTE_RING,
|
|
TSS_WAIT_ANSWER,
|
|
TSS_ANSWER,
|
|
TSS_END
|
|
ENDENUM
|
|
|
|
|
|
// Structs
|
|
//---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
// Event struct
|
|
STRUCT MISSION_EVENT_STRUCT
|
|
INT iTimeStamp
|
|
INT iStage
|
|
INT iDelay
|
|
BOOL bTriggered
|
|
BOOL bComplete
|
|
BOOL bPaused
|
|
BOOL bAnimDictPrestreamed
|
|
BOOL bSafeAfterSkip
|
|
ENDSTRUCT
|
|
|
|
STRUCT POPUP_STRUCT
|
|
INT iType = -1 // if this does not get initialised to something other than 1 it is considered not used
|
|
BOOL bClosed = TRUE
|
|
FLOAT fPosX
|
|
FLOAT fPosY
|
|
BOOL bSfxPlaying = FALSE
|
|
INT iSfxLoop = -1
|
|
ENDSTRUCT
|
|
|
|
// struct is used so I can different between props I've added myself and ones that I've grabbed and used from the interior
|
|
STRUCT PROP_STRUCT
|
|
OBJECT_INDEX id
|
|
BOOL bCustom
|
|
BOOL bInSynchedScene
|
|
MODEL_NAMES model
|
|
VECTOR v_coord
|
|
BOOL bDoNotReset
|
|
STRING adName
|
|
STRING animName
|
|
ENDSTRUCT
|
|
|
|
// Struct used to hold info about doors
|
|
STRUCT DOOR_STRUCT
|
|
INT iHash = -1
|
|
BOOL bChangingState
|
|
FLOAT fDesiredOpenRatio
|
|
FLOAT fStartOpenRatio
|
|
BOOL bDesiredLockState
|
|
INT iInterpTime
|
|
INT iTimeStamp
|
|
ENDSTRUCT
|
|
|
|
// Variables
|
|
//---------------------------------------------------------------------------------------------------------------------------------------------------
|
|
|
|
// locations: vectors & headings
|
|
VECTOR v_LestersHouseParkingCoord = <<1283.7845, -1728.9476, 51.8119>>
|
|
CONST_FLOAT f_LestersHouseParkingHeading 115.1431
|
|
VECTOR v_ShopBlip = << 127.6313, -209.8459, 53.5463 >>
|
|
VECTOR v_bin_coord = << -1054.357, -240.242, 43.217 >>
|
|
VECTOR v_bin_rot = << 0.0, 0.0, 27.5>>
|
|
VECTOR v_engineer_monitor = <<-1059.61, -244.62, 43.92>>
|
|
VECTOR v_coffee_guy_1_coord = << -1066.5713, -244.5061, 39.7332 >>
|
|
VECTOR v_coffee_guy_1_rot = <<0,0,85.0757>>
|
|
VECTOR v_coffee_guy_2_coord = << -1067.689, -243.949, 39.7332 >>
|
|
VECTOR v_coffee_guy_2_rot = <<0,0,-117.5>>
|
|
VECTOR v_LifeInvaderCarParkCoord = <<-1049.6331, -220.7515, 36.9051>>
|
|
VECTOR v_offices_foot = << -1044.3571, -229.9086, 38.0141 >>
|
|
FLOAT f_LifeInvaderCarParkHeading = 246.7054
|
|
VECTOR v_BagCoord = <<-1053.15, -230.89, 43.92>>
|
|
VECTOR v_BagRot = <<90.0, -58.0, 0.0>>
|
|
VECTOR vBoardRoomSceneRootCoord = << -1044.4253, -235.0814, 43.021 >>
|
|
VECTOR vBoardRoomSceneRootRot = << -0.000, 0.000, 118.800 >>
|
|
|
|
// entity indices
|
|
INTERIOR_INSTANCE_INDEX interior_offices
|
|
INTERIOR_INSTANCE_INDEX interior_lesters
|
|
INTERIOR_INSTANCE_INDEX interior_living_room
|
|
DOOR_STRUCT sDoors[mdf_num_doors]
|
|
|
|
// general variables
|
|
INT iFailTimer = -1
|
|
SEQUENCE_INDEX seq
|
|
BLIP_INDEX blip_Objective
|
|
SCALEFORM_INDEX mov
|
|
SCALEFORM_RETURN_INDEX minigame_return_index
|
|
SCALEFORM_RETURN_INDEX last_popup_return_index
|
|
LOCATES_HEADER_DATA locates_data
|
|
structPedsForConversation sConvo
|
|
TEXT_LABEL_23 str_paused_root
|
|
TEXT_LABEL_23 str_paused_label
|
|
SCENARIO_BLOCKING_INDEX sbi_offices
|
|
INT i_road_node_speed_zone
|
|
REL_GROUP_HASH rel_Friend
|
|
REL_GROUP_HASH REL_FAMILY
|
|
|
|
// Flags
|
|
BOOL bObtainedClothing = FALSE
|
|
BOOL bSideEntranceObjective = FALSE
|
|
BOOL bStreamCutScene = FALSE
|
|
BOOL bRequestedPreload = FALSE
|
|
BOOL bDisableConspicuousBehavior = FALSE
|
|
BOOL bAllowRunning = FALSE
|
|
BOOL bHasChanged = FALSE
|
|
BOOL bLookingAtReceptionist = FALSE
|
|
INT iLesterCallTimer = 0
|
|
BOOL bCutsceneExitHasFired = FALSE
|
|
BOOL bCamExited = FALSE
|
|
BOOL bSwappedMonitorToPopups = FALSE
|
|
BOOL bSwappedMonitorToClean = FALSE
|
|
BOOL bLestersDoorLocked = FALSE
|
|
BOOL b_IsPlayingConvoIG9 = FALSE
|
|
INT i_EngineerBye = 0
|
|
BOOL bFirstThrow = FALSE
|
|
BOOL bWasBrowsingClothesLastFrame = FALSE
|
|
INT i_ReceptionistTalkCount = 0
|
|
INT i_LIChokePointStage = 0
|
|
INT i_CoughCounter = 0
|
|
INT i_CoughTimer = 0
|
|
BOOL b_MiniGameScaleformSetUp = FALSE
|
|
INT i_EngineerCovoTimer = 0
|
|
BOOL bReadyToStartWalkChatConvo = FALSE
|
|
BOOL bStartedCoffeeDrinkingAnims1 = FALSE
|
|
BOOL bStartedCoffeeDrinkingAnims2 = FALSE
|
|
STRING strMinigameConvo = ""
|
|
BOOL bPlayedClosePopupsFirstConvo = FALSE
|
|
INT iTimeSinceLastMinigameConvo = 0
|
|
BOOL bLifeInvaderGuyLastToSpeak = FALSE
|
|
BOOL bJustThrown = FALSE
|
|
BOOL b_CanFailForNotEnoughFunds = FALSE
|
|
INT i_min_required_funds = 0
|
|
INT i_most_expensive_gilet = 0
|
|
INT i_most_expensive_shorts = 0
|
|
BOOL bBringVehicleToHalt = FALSE
|
|
BOOL bAdditionalIsLooping = FALSE
|
|
INT iShopCutsceneTimer = 0
|
|
INT iLeaveShopConvo = 0
|
|
BOOL bExitStateCam = FALSE
|
|
BOOL bExitStateMike = FALSE
|
|
STRING strShopHelp
|
|
BOOL bCanInterruptAnim = FALSE
|
|
BOOL bPlayerIsBlockedForLeadIn = FALSE
|
|
BOOL bReplayRecordEventStarted = FALSE
|
|
|
|
BLIP_INDEX blip_clothes[3]
|
|
PED_COMP_NAME_ENUM playerTorsoPrev
|
|
PED_COMP_NAME_ENUM playerLegsPrev
|
|
|
|
INT syncedIDs[ssf_num_scenes]
|
|
PED_INDEX peds[mpf_num_peds]
|
|
PROP_STRUCT objects[mof_num_objs]
|
|
MISSION_EVENT_STRUCT mEvents[mef_num_events] // events array
|
|
ASSET_MANAGEMENT_DATA sAssetData
|
|
CUTSCENE_PED_VARIATION sCutscenePedVariationRegister[10]
|
|
VEHICLE_INDEX veh_replay
|
|
VEHICLE_INDEX veh_Tracey
|
|
|
|
// Stage/Skip stuff
|
|
STAGE_SWITCHSTATE stageSwitch // current switching status
|
|
INT mission_stage // current mission stage
|
|
INT mission_substage // current mission substage (switch flag used in stage procs)
|
|
INT requestedStage // the stage requested by a stage switch
|
|
INT iStageTimer
|
|
INT iStageManagementTimer
|
|
BOOL bDoSkip
|
|
INT iSkipToStage
|
|
INT iPassTimer // url:bugstar:2099721
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
WIDGET_GROUP_ID widget_debug
|
|
MissionStageMenuTextStruct zMenuNames[I_NUM_Z_MENU_ELEMENTS]
|
|
BOOL bDisplayEventDebug
|
|
BOOL b_debug_PrintToConsole
|
|
INT i_debug_PopupsOpen
|
|
BOOL b_debug_window_open
|
|
#ENDIF
|
|
|
|
// Dialogue stuff
|
|
INT i_ambient_dialogue_timer
|
|
INT i_ambient_dialogue_delay
|
|
BOOL b_OfficeSceneChat
|
|
BOOL b_dia_new_guy
|
|
|
|
// Mini game stuff
|
|
POPUP_STRUCT sPopups[12]
|
|
INT iIcons[6]
|
|
INT iPopupHelp = 0
|
|
INT iReopenTimeStamp = 0
|
|
INT iPopupsSFXPlaying = 0
|
|
INT iLastPopupClosed = -1
|
|
BOOL bIsAVOpen = FALSE
|
|
INT iPrevScanBar = 0
|
|
BOOL bScanPaused = FALSE
|
|
INT iScanStutter = 0
|
|
INT iSFX_FindVirus = 0
|
|
INT iScanTimer = 0
|
|
INT iCurrentPopup = 0
|
|
INT iExterminateTimer = 0
|
|
FLOAT fInputAccum = 0.0
|
|
INT iPopupOpenStage = 0
|
|
INT iUsablePopups
|
|
FLOAT f_PCMousePosPrevX = 0.5
|
|
FLOAT f_PCMousePosPrevY = 0.5
|
|
|
|
INT iPaperThrow // paper throw anim index
|
|
INT i_piano_airguitar_loop_count
|
|
|
|
INT iDetonationTimer = -1
|
|
INT iDetonationCallTimer = 0
|
|
|
|
TRIGGER_SOUND_STATES eSoundState = TSS_WAIT_PLAY_REMOTE_RING
|
|
INT iSoundID = -1
|
|
INT iSoundTimer
|
|
|
|
BOOL bExterminated = FALSE
|
|
|
|
SCALEFORM_INDEX sfi_news_overlay
|
|
BOOL bTVTurnedOn = FALSE
|
|
MIKE_ANIM_STATE eAnimState = MAS_NULL
|
|
INT iAnimDelay = -1
|
|
BOOL bDelaying = FALSE
|
|
BOOL bChangedChannel = FALSE
|
|
BOOL bDetonated = FALSE
|
|
BOOL bHouseAssetsRequested = FALSE
|
|
BOOL bExpireChannelObj = FALSE
|
|
BOOL bTVTurnedOff = FALSE
|
|
BOOL bExpireDetonateConv = FALSE
|
|
|
|
//TV camera
|
|
CAM_SHOTS eCameraCurrent = CAMS_SCRIPT
|
|
CAMERA_INDEX cam_tv
|
|
|
|
BOOL bCursorSnap = TRUE // Cursor snap toggle - true for PC MOUSE false otherwise.
|
|
|
|
|
|
// Grabs the name of the mission stage
|
|
FUNC STRING GET_MISSION_STAGE_NAME(mission_stage_flag eStage)
|
|
|
|
STRING sResult
|
|
|
|
SWITCH eStage
|
|
CASE msf_st0_intro_cutscene sResult = "0. Intro Cutscene" BREAK
|
|
CASE msf_st1_get_clothes sResult = "1. Get Programmer Clothes" BREAK
|
|
CASE msf_st2_go_to_offices sResult = "2. Goto LifeInvader Offices" BREAK
|
|
CASE msf_st3_go_to_computer sResult = "3. Follow Programmer to his PC" BREAK
|
|
CASE msf_st4_mini_game sResult = "4. Pop-Up Mini Game" BREAK
|
|
CASE msf_st5_plant_bomb sResult = "5. Plant the Bomb" BREAK
|
|
CASE msf_st6_leave_building sResult = "6. Exit Building" BREAK
|
|
CASE msf_st7_go_home sResult = "7. Go Home" BREAK
|
|
CASE msf_st8_tv_start sResult = "8. TV Start" BREAK
|
|
CASE msf_st9_tv_detonate sResult = "9. TV Detonate" BREAK
|
|
CASE msf_st10_mission_passed sResult = "10. Mission Passed" BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN sResult
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_ENTITY_TOO_BIG(ENTITY_INDEX entity, VECTOR vMaxAllowableSize)
|
|
IF NOT IS_VECTOR_ZERO(vMaxAllowableSize)
|
|
IF DOES_ENTITY_EXIST(entity)
|
|
model_names eModel
|
|
eModel = GET_ENTITY_MODEL(entity)
|
|
|
|
vector vSizeMin,vSizeMax
|
|
GET_MODEL_DIMENSIONS(eModel,vSizeMin,vSizeMax)
|
|
|
|
//choppers seem to have unreasonably large dimensions. Much larger than their blades.
|
|
If IS_THIS_MODEL_A_HELI(eModel)
|
|
vMaxAllowableSize.x += 3
|
|
vMaxAllowableSize.y += 3
|
|
ENDIF
|
|
|
|
IF vSizeMax.x - vSizeMin.x > vMaxAllowableSize.x
|
|
CPRINTLN(DEBUG_MIKE, "IS_ENTITY_TOO_BIG - entity X too large")
|
|
RETURN TRUE
|
|
ELIF vSizeMax.y - vSizeMin.y > vMaxAllowableSize.y
|
|
CPRINTLN(DEBUG_MIKE, "IS_ENTITY_TOO_BIG - entity Y too large")
|
|
RETURN TRUE
|
|
ELIF vSizeMax.z - vSizeMin.z > vMaxAllowableSize.z
|
|
CPRINTLN(DEBUG_MIKE, "IS_ENTITY_TOO_BIG - entity Z too large")
|
|
RETURN TRUE
|
|
ELSE
|
|
CPRINTLN(DEBUG_MIKE, "IS_ENTITY_TOO_BIG - entity within size limits")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
// DOOR MANAGEMENT
|
|
|
|
//PURPOSE: Adds a new door to the doors array
|
|
PROC Doors_Add_New(INT iDoor, VECTOR vCoord, MODEL_NAMES model, BOOL bResetDoor = FALSE)
|
|
TEXT_LABEL_23 strDoorName = "LESTER1A_DOOR_"
|
|
strDoorName += iDoor
|
|
|
|
sDoors[iDoor].iHash = GET_HASH_KEY(strDoorName)
|
|
ADD_DOOR_TO_SYSTEM(sDoors[iDoor].iHash, model, vCoord, FALSE)
|
|
|
|
IF bResetDoor
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(sDoors[iDoor].iHash, 1.0)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(sDoors[iDoor].iHash, DOORSTATE_FORCE_CLOSED_THIS_FRAME)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(sDoors[iDoor].iHash, DOORSTATE_FORCE_LOCKED_THIS_FRAME)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
FUNC BOOL Is_Door_LockState_Locked(DOOR_STATE_ENUM eDoorState)
|
|
IF eDoorState = DOORSTATE_LOCKED
|
|
OR eDoorState = DOORSTATE_FORCE_LOCKED_THIS_FRAME
|
|
OR eDoorState = DOORSTATE_FORCE_LOCKED_UNTIL_OUT_OF_AREA
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
//PURPOSE: Changes the state of the door
|
|
PROC Doors_Set_State(INT iDoor, BOOL lockState, FLOAT openRatio, INT iTime = 0)
|
|
IF sDoors[iDoor].iHash != 0
|
|
// No update over time, do NOW!
|
|
IF iTime <= 0
|
|
IF openRatio != DOORS_KEEP_CURRENT_RATIO
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(sDoors[iDoor].iHash, openRatio, FALSE, TRUE)
|
|
ENDIF
|
|
|
|
IF lockState
|
|
DOOR_SYSTEM_SET_DOOR_STATE(sDoors[iDoor].iHash, DOORSTATE_LOCKED, FALSE, TRUE)
|
|
ELSE
|
|
DOOR_SYSTEM_SET_DOOR_STATE(sDoors[iDoor].iHash, DOORSTATE_UNLOCKED, FALSE, TRUE)
|
|
ENDIF
|
|
|
|
sDoors[iDoor].iTimeStamp = 0
|
|
sDoors[iDoor].iInterpTime = 0
|
|
|
|
// Needs updating over time, mark for frame by frame update
|
|
ELIF openRatio != DOORS_KEEP_CURRENT_RATIO
|
|
sDoors[iDoor].bChangingState = TRUE
|
|
sDoors[iDoor].bDesiredLockState = lockState
|
|
sDoors[iDoor].fDesiredOpenRatio = openRatio
|
|
|
|
sDoors[iDoor].iTimeStamp = GET_GAME_TIMER()
|
|
sDoors[iDoor].iInterpTime = iTime
|
|
|
|
sDoors[iDoor].fStartOpenRatio = DOOR_SYSTEM_GET_OPEN_RATIO(sDoors[iDoor].iHash)
|
|
ELSE
|
|
SCRIPT_ASSERT("DOOR_SYSTEM: CANNOT OPEN DOOR OVER TIME TO KEEP THE SAME DOOR RATIO, POINTLESS!")
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//PURPOSE: Obtains the state of the door
|
|
PROC Doors_Get_State(INT iDoor, BOOL &bLockState, FLOAT &fOpenRatio)
|
|
IF sDoors[iDoor].iHash != 0
|
|
fOpenRatio = DOOR_SYSTEM_GET_OPEN_RATIO(sDoors[iDoor].iHash)
|
|
DOOR_STATE_ENUM eDoorState = DOOR_SYSTEM_GET_DOOR_STATE(sDoors[iDoor].iHash)
|
|
//DOOR_STATE_ENUM eDoorState = DOOR_SYSTEM_GET_DOOR_PENDING_STATE(sDoors[iDoor].iHash)
|
|
|
|
bLockState = Is_Door_LockState_Locked(eDoorState)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//PURPOSE: Resets all the doors streamed in
|
|
PROC Doors_Reset_All()
|
|
INT x
|
|
REPEAT COUNT_OF(sDoors) x
|
|
IF sDoors[x].iHash != 0
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(sDoors[x].iHash, 0.0, FALSE, TRUE)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(sDoors[x].iHash, DOORSTATE_UNLOCKED, FALSE, TRUE)
|
|
ENDIF
|
|
|
|
sDoors[x].bChangingState = FALSE
|
|
sDoors[x].iInterpTime = 0
|
|
sDoors[x].iTimeStamp = 0
|
|
sDoors[x].fDesiredOpenRatio = 0.0
|
|
sDoors[x].bDesiredLockState = FALSE
|
|
sDoors[x].fStartOpenRatio = 0.0
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
|
|
//PURPOSE: Manage locking and opening of doors
|
|
PROC Manage_Doors()
|
|
INT i
|
|
FOR i = 0 TO enum_to_int(mdf_num_doors) -1
|
|
IF sDoors[i].iHash != 0
|
|
AND sDoors[i].bChangingState
|
|
|
|
BOOL bLockState = FALSE
|
|
FLOAT fOpenRatio = 0.0
|
|
Doors_Get_State(i, bLockState, fOpenRatio)
|
|
|
|
// If state does not match then update to new state
|
|
IF bLockState != sDoors[i].bDesiredLockState
|
|
OR fOpenRatio != sDoors[i].fDesiredOpenRatio
|
|
|
|
IF sDoors[i].iInterpTime > 0
|
|
AND sDoors[i].iTimeStamp > 0
|
|
|
|
FLOAT fInterpProg = CLAMP((GET_GAME_TIMER() - sDoors[i].iTimeStamp)/TO_FLOAT(sDoors[i].iInterpTime), 0.0, 1.0)
|
|
// PRINTLN("fInterpProg: ", fInterpProg)
|
|
// SCRIPT_ASSERT("DOOR SYSTEM: DOOR PROG CALC")
|
|
IF fInterpProg != 1.0
|
|
|
|
// change in progress
|
|
fOpenRatio = sDoors[i].fStartOpenRatio + (fInterpProg * (sDoors[i].fDesiredOpenRatio - sDoors[i].fStartOpenRatio))
|
|
bLockState = TRUE
|
|
|
|
// PRINTLN("DOOR SYSTEM: CALCULATED OPEN RATIO: ", fOpenRatio)
|
|
// PRINTLN("DOOR SYSTEM: startRatio: ", sDoors[i].fStartOpenRatio)
|
|
// PRINTLN("DOOR SYSTEM: desiredRatio: ", sDoors[i].fDesiredOpenRatio)
|
|
// PRINTLN("DOOR SYSTEM: currentRatio: ", fOpenRatio)
|
|
// SCRIPT_ASSERT("DOOR SYSTEM: PROCESSING DOOR SWING")
|
|
ELSE
|
|
// SCRIPT_ASSERT("DOOR SYSTEM: DOOR FINISHED")
|
|
|
|
// door finished
|
|
bLockState = sDoors[i].bDesiredLockState
|
|
fOpenRatio = sDoors[i].fDesiredOpenRatio
|
|
sDoors[i].bChangingState = FALSE
|
|
|
|
sDoors[i].iInterpTime = 0
|
|
sDoors[i].iTimeStamp = 0
|
|
sDoors[i].bChangingState = FALSE
|
|
ENDIF
|
|
ELSE
|
|
// SCRIPT_ASSERT("DOOR SYSTEM: DOOR NOT INTERP TIME SET!")
|
|
// Set to the desired values as no time was present
|
|
IF sDoors[i].bDesiredLockState
|
|
bLockState = TRUE
|
|
ELSE
|
|
bLockState = FALSE
|
|
ENDIF
|
|
fOpenRatio = sDoors[i].fDesiredOpenRatio
|
|
|
|
sDoors[i].iInterpTime = 0
|
|
sDoors[i].iTimeStamp = 0
|
|
sDoors[i].bChangingState = FALSE
|
|
ENDIF
|
|
|
|
IF fOpenRatio != DOORS_KEEP_CURRENT_RATIO
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(sDoors[i].iHash, fOpenRatio, FALSE, TRUE)
|
|
ENDIF
|
|
|
|
// Set the door
|
|
IF bLockState
|
|
DOOR_SYSTEM_SET_DOOR_STATE(sDoors[i].iHash, DOORSTATE_LOCKED, FALSE, TRUE)
|
|
ELSE
|
|
DOOR_SYSTEM_SET_DOOR_STATE(sDoors[i].iHash, DOORSTATE_UNLOCKED, FALSE, TRUE)
|
|
ENDIF
|
|
ELSE
|
|
// PRINTLN("CurrentLockState: ", bLockState)
|
|
// PRINTLN("CurrentOpenRatio: ", fOpenRatio)
|
|
// PRINTLN("DesiredLockState: ", sDoors[i].bDesiredLockState)
|
|
// PRINTLN("DesiredOpenRatio: ", sDoors[i].fDesiredOpenRatio)
|
|
// SCRIPT_ASSERT("DOOR SYSTEM: DOOR ALREADY SET")
|
|
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(sDoors[i].iHash, fOpenRatio, FALSE, TRUE)
|
|
|
|
// Set the door
|
|
IF bLockState
|
|
DOOR_SYSTEM_SET_DOOR_STATE(sDoors[i].iHash, DOORSTATE_LOCKED, FALSE, TRUE)
|
|
ELSE
|
|
DOOR_SYSTEM_SET_DOOR_STATE(sDoors[i].iHash, DOORSTATE_UNLOCKED, FALSE, TRUE)
|
|
ENDIF
|
|
|
|
// door already in the desired stage
|
|
sDoors[i].iInterpTime = 0
|
|
sDoors[i].iTimeStamp = 0
|
|
sDoors[i].bChangingState = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if an entity is ready, to be animated, drawn, be seen by the player, etc
|
|
/// PARAMS:
|
|
/// entity - entity you are testing
|
|
/// RETURNS:
|
|
/// Returns TRUE if the entity is ready
|
|
FUNC BOOL IS_ENTITY_READY(ENTITY_INDEX entity)
|
|
|
|
IF DOES_ENTITY_EXIST(entity)
|
|
SWITCH GET_ENTITY_TYPE(entity)
|
|
CASE ET_PED
|
|
IF NOT IS_PED_INJURED(GET_PED_INDEX_FROM_ENTITY_INDEX(entity))
|
|
AND DOES_ENTITY_HAVE_DRAWABLE(entity)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
CASE ET_VEHICLE
|
|
IF IS_VEHICLE_DRIVEABLE(GET_VEHICLE_INDEX_FROM_ENTITY_INDEX(entity))
|
|
AND DOES_ENTITY_HAVE_DRAWABLE(entity)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
CASE ET_OBJECT
|
|
IF DOES_ENTITY_HAVE_DRAWABLE(entity)
|
|
RETURN TRUE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Puts the player in default variation of programmer outfit and sets it as acquired
|
|
PROC PUT_PLAYER_IN_PROGRAMMER_OUTFIT()
|
|
|
|
IF g_replay.iReplayInt[0] = -1
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_0, TRUE)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, TORSO_P0_GILET_0)
|
|
ELSE
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, int_to_enum(PED_COMP_NAME_ENUM, g_replay.iReplayInt[0]), TRUE)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO, int_to_enum(PED_COMP_NAME_ENUM, g_replay.iReplayInt[0]))
|
|
ENDIF
|
|
|
|
IF g_replay.iReplayInt[1] = -1
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_0, TRUE)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_0)
|
|
ELSE
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, int_to_enum(PED_COMP_NAME_ENUM, g_replay.iReplayInt[1]), TRUE)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS, int_to_enum(PED_COMP_NAME_ENUM, g_replay.iReplayInt[1]))
|
|
ENDIF
|
|
|
|
SET_PLAYER_HAS_CHANGE_CLOTHES_ON_MISSION(CHAR_MICHAEL)
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets any porgrammer outfit items as not acquired and puts player in the default outfit
|
|
PROC REMOVE_PROGRAMMER_OUTFIT()
|
|
|
|
// torsos
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_0)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_0, FALSE)
|
|
ENDIF
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_1)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_1, FALSE)
|
|
ENDIF
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_2)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_2, FALSE)
|
|
ENDIF
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_3)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_3, FALSE)
|
|
ENDIF
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_4)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_4, FALSE)
|
|
ENDIF
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_5)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_5, FALSE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_0)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_0, FALSE)
|
|
ENDIF
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_1)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_1, FALSE)
|
|
ENDIF
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_2)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_2, FALSE)
|
|
ENDIF
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_3)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_3, FALSE)
|
|
ENDIF
|
|
IF NOT IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_4)
|
|
SET_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_4, FALSE)
|
|
ENDIF
|
|
|
|
RESTORE_PLAYER_PED_VARIATIONS(PLAYER_PED_ID())
|
|
//SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_OUTFIT, OUTFIT_P0_DEFAULT, FALSE)
|
|
|
|
ENDPROC
|
|
|
|
//PURPOSE: Create blocking areas
|
|
PROC Add_Scenario_Blocking()
|
|
|
|
// Lesters
|
|
SET_ROADS_IN_ANGLED_AREA(<<1368.168823,-1686.163818,68.780426>>, <<1189.980713,-1764.964233,31.711254>>, 91.5, FALSE, FALSE)
|
|
|
|
// Store
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<130.635315,-199.948563,55.317688>> - <<12.187500,14.375000,2.125000>>,
|
|
<<130.635315,-199.948563,55.317688>> + <<12.187500,14.375000,2.125000>>, FALSE)
|
|
|
|
REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(<<130.635315,-199.948563,55.317688>> - <<12.187500,14.375000,2.125000>>,
|
|
<<130.635315,-199.948563,55.317688>> + <<12.187500,14.375000,2.125000>>)
|
|
CLEAR_AREA_OF_VEHICLES(<<128.87, -205.99, 53.52>>, 30.0)
|
|
|
|
// block the whole of the offices
|
|
sbi_offices = ADD_SCENARIO_BLOCKING_AREA(<<-1057.517822,-238.242065,48.295681>> - <<43.000000,29.000000,11.812500>>,
|
|
<<-1057.517822,-238.242065,48.295681>> + <<43.000000,29.000000,11.812500>>, TRUE)
|
|
SET_PED_PATHS_IN_AREA(<<-1057.517822,-238.242065,48.295681>> - <<43.000000,29.000000,11.812500>>,
|
|
<<-1057.517822,-238.242065,48.295681>> + <<43.000000,29.000000,11.812500>>, FALSE)
|
|
SET_PED_NON_CREATION_AREA(<<-1057.517822,-238.242065,48.295681>> - <<43.000000,29.000000,11.812500>>,
|
|
<<-1057.517822,-238.242065,48.295681>> + <<43.000000,29.000000,11.812500>>)
|
|
CLEAR_AREA_OF_PEDS(<<-1057.517822,-238.242065,48.295681>>, 266.250)
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-1057.517822,-238.242065,48.295681>> - <<43.000000,29.000000,11.812500>>,
|
|
<<-1057.517822,-238.242065,48.295681>> + <<43.000000,29.000000,11.812500>>, FALSE)
|
|
|
|
ENDPROC
|
|
|
|
PROC Reset_Scenario_Blocking()
|
|
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<1368.168823,-1686.163818,68.780426>>, <<1189.980713,-1764.964233,31.711254>>, 91.5)
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-1057.517822,-238.242065,48.295681>> - <<43.000000,29.000000,11.812500>>,
|
|
<<-1057.517822,-238.242065,48.295681>> + <<43.000000,29.000000,11.812500>>, TRUE)
|
|
SET_PED_PATHS_IN_AREA(<<-1057.517822,-238.242065,48.295681>> - <<43.000000,29.000000,11.812500>>,
|
|
<<-1057.517822,-238.242065,48.295681>> + <<43.000000,29.000000,11.812500>>, TRUE)
|
|
CLEAR_PED_NON_CREATION_AREA()
|
|
REMOVE_SCENARIO_BLOCKING_AREA(sbi_offices)
|
|
REMOVE_SCENARIO_BLOCKING_AREAS()
|
|
ENDPROC
|
|
|
|
//PURPOSE: Lines up the peds chairs
|
|
FUNC BOOL Lineup_Boardroom_Chairs()
|
|
|
|
// SPARE CHAIR[A]
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_spare_chair_a].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1043.98, -238.39, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
objects[mof_boardroom_spare_chair_a].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1043.98, -238.39, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
SET_ENTITY_COORDS(objects[mof_boardroom_spare_chair_a].id, <<-1043.74, -238.72, 43.02>>)
|
|
SET_ENTITY_ROTATION(objects[mof_boardroom_spare_chair_a].id, <<0.00, 0.00, 152.50>>)
|
|
FREEZE_ENTITY_POSITION(objects[mof_boardroom_spare_chair_a].id, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// SPARE CHAIR[B]
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_spare_chair_b].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1046.38, -233.24, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
objects[mof_boardroom_spare_chair_b].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1046.38, -233.24, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
SET_ENTITY_COORDS(objects[mof_boardroom_spare_chair_b].id, <<-1046.89, -232.61, 43.02>>)
|
|
SET_ENTITY_ROTATION(objects[mof_boardroom_spare_chair_b].id, <<0.00, 0.00, 63.15>>)
|
|
FREEZE_ENTITY_POSITION(objects[mof_boardroom_spare_chair_b].id, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// SPARE CHAIR[C]
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_spare_chair_c].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1044.53, -232.09, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
objects[mof_boardroom_spare_chair_c].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1044.53, -232.09, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
SET_ENTITY_COORDS(objects[mof_boardroom_spare_chair_c].id, <<-1044.78, -231.92, 43.02>>)
|
|
SET_ENTITY_ROTATION(objects[mof_boardroom_spare_chair_c].id, <<-0.00, 0.00, -27.50>>)
|
|
FREEZE_ENTITY_POSITION(objects[mof_boardroom_spare_chair_c].id, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// SPARE CHAIR[D]
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_spare_chair_d].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1042.13, -237.24, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
objects[mof_boardroom_spare_chair_d].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1042.13, -237.24, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
SET_ENTITY_COORDS(objects[mof_boardroom_spare_chair_d].id, <<-1041.90, -237.63, 43.02>>)
|
|
SET_ENTITY_ROTATION(objects[mof_boardroom_spare_chair_d].id, <<-0.00, 0.00, -92.50>>)
|
|
FREEZE_ENTITY_POSITION(objects[mof_boardroom_spare_chair_d].id, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// MALE[A]
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_m_a_chair].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1043.03, -235.22, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
AND NOT IS_PED_INJURED(peds[mpf_boardroom_m_a])
|
|
objects[mof_boardroom_m_a_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1043.03, -235.22, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
SET_ENTITY_COORDS(objects[mof_boardroom_m_a_chair].id, <<-1042.8325, -235.5175, 43.0300>>)
|
|
SET_ENTITY_ROTATION(objects[mof_boardroom_m_a_chair].id, <<-0.00, -0.04, -72.11>>)
|
|
FREEZE_ENTITY_POSITION(objects[mof_boardroom_m_a_chair].id, TRUE)
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_boardroom_m_a_chair].id, peds[mpf_boardroom_m_a], FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// MALE[B]
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_m_b_chair].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1045.90, -234.22, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
AND NOT IS_PED_INJURED(peds[mpf_boardroom_m_b])
|
|
objects[mof_boardroom_m_b_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1045.90, -234.22, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
SET_ENTITY_COORDS(objects[mof_boardroom_m_b_chair].id, <<-1046.3765, -234.1675, 43.0300>>)
|
|
SET_ENTITY_ROTATION(objects[mof_boardroom_m_b_chair].id, <<-0.03, -0.03, 88.64>>)
|
|
FREEZE_ENTITY_POSITION(objects[mof_boardroom_m_b_chair].id, TRUE)
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_boardroom_m_b_chair].id, peds[mpf_boardroom_m_b], FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// MALE[E]
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_m_e_chair].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1043.49, -234.33, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
AND NOT IS_PED_INJURED(peds[mpf_boardroom_m_e])
|
|
objects[mof_boardroom_m_e_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1043.49, -234.33, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
SET_ENTITY_COORDS(objects[mof_boardroom_m_e_chair].id, <<-1043.3405, -234.2000, 43.0300>>)
|
|
SET_ENTITY_ROTATION(objects[mof_boardroom_m_e_chair].id, <<-0.0300, -0.0300, -61.9200>>)
|
|
FREEZE_ENTITY_POSITION(objects[mof_boardroom_m_e_chair].id, TRUE)
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_boardroom_m_e_chair].id, peds[mpf_boardroom_m_e], FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// MALE[F]
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_m_f_chair].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1045.02, -236.15, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
AND NOT IS_PED_INJURED(peds[mpf_boardroom_m_f])
|
|
objects[mof_boardroom_m_f_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1045.02, -236.15, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
SET_ENTITY_COORDS(objects[mof_boardroom_m_f_chair].id,<<-1044.9955, -236.9400, 43.0225>>)
|
|
SET_ENTITY_ROTATION(objects[mof_boardroom_m_f_chair].id, <<0.0000, 0.0700, 121.7650>>)
|
|
FREEZE_ENTITY_POSITION(objects[mof_boardroom_m_f_chair].id, TRUE)
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_boardroom_m_f_chair].id, peds[mpf_boardroom_m_f], FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// // FEMALE[A]
|
|
// IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_f_a_chair].id)
|
|
// IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1044.06, -233.34, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
// AND NOT IS_PED_INJURED(peds[mpf_boardroom_f_a])
|
|
// objects[mof_boardroom_f_a_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1044.06, -233.34, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
// SET_ENTITY_COORDS(objects[mof_boardroom_f_a_chair].id, <<-1044.1935, -233.0600, 43.0175>>)
|
|
// SET_ENTITY_ROTATION(objects[mof_boardroom_f_a_chair].id, <<0.0000, 0.0000, -50.7650>>)
|
|
// FREEZE_ENTITY_POSITION(objects[mof_boardroom_f_a_chair].id, TRUE)
|
|
// SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_boardroom_f_a_chair].id, peds[mpf_boardroom_f_a], FALSE)
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
// FEMALE[B]
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_f_b_chair].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1045.48, -235.26, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
AND NOT IS_PED_INJURED(peds[mpf_boardroom_f_b])
|
|
objects[mof_boardroom_f_b_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1045.48, -235.26, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
SET_ENTITY_COORDS(objects[mof_boardroom_f_b_chair].id, <<-1045.6705, -235.5025, 43.0300>>)
|
|
SET_ENTITY_ROTATION(objects[mof_boardroom_f_b_chair].id, <<0.0200, 0.0200, 120.5900>>)
|
|
FREEZE_ENTITY_POSITION(objects[mof_boardroom_f_b_chair].id, TRUE)
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_boardroom_f_b_chair].id, peds[mpf_boardroom_f_b], FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// FEMALE[C]
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_boardroom_f_c_chair].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1044.45, -237.14, 43.02>>,0.5, PROP_OFF_CHAIR_01)
|
|
AND NOT IS_PED_INJURED(peds[mpf_boardroom_f_c])
|
|
objects[mof_boardroom_f_c_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1044.45, -237.14, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
SET_ENTITY_COORDS(objects[mof_boardroom_f_c_chair].id, <<-1044.2515, -237.9050, 43.0300>>)
|
|
SET_ENTITY_ROTATION(objects[mof_boardroom_f_c_chair].id, <<0.0000, 0.0000, 129.2400>>)
|
|
FREEZE_ENTITY_POSITION(objects[mof_boardroom_f_c_chair].id, TRUE)
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_boardroom_f_c_chair].id, peds[mpf_boardroom_f_c], FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// IF DOES_ENTITY_EXIST(objects[mof_boardroom_f_a_chair].id)
|
|
IF DOES_ENTITY_EXIST(objects[mof_boardroom_f_b_chair].id)
|
|
AND DOES_ENTITY_EXIST(objects[mof_boardroom_f_c_chair].id)
|
|
AND DOES_ENTITY_EXIST(objects[mof_boardroom_m_a_chair].id)
|
|
AND DOES_ENTITY_EXIST(objects[mof_boardroom_m_b_chair].id)
|
|
AND DOES_ENTITY_EXIST(objects[mof_boardroom_m_e_chair].id)
|
|
AND DOES_ENTITY_EXIST(objects[mof_boardroom_m_f_chair].id)
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
PROC SAFE_PLAY_SYNCHRONIZED_ENTITY(PROP_STRUCT &prop, INT sceneID, STRING animName, STRING animDict, FLOAT fBlendIn, FLOAT fBlendOut, SYNCED_SCENE_PLAYBACK_FLAGS eFlags = SYNCED_SCENE_NONE)
|
|
|
|
prop.v_coord = <<0,0,0>>
|
|
prop.model = DUMMY_MODEL_FOR_SCRIPT
|
|
prop.bInSynchedScene = TRUE
|
|
prop.adName = animDict
|
|
prop.animName = animName
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(prop.id, sceneID, animName, animDict, fBlendIn, fBlendOut, enum_to_int(eFlags))
|
|
|
|
ENDPROC
|
|
|
|
//PURPOSE: Keeps track of a map entity playing a synched scene
|
|
PROC SAFE_PLAY_SYNCHRONIZED_MAP_ENTITY_ANIM(PROP_STRUCT &prop, VECTOR vCoord, MODEL_NAMES model, INT sceneID, STRING animDict, STRING animName, FLOAT fBlend)
|
|
prop.id = NULL
|
|
prop.bCustom = FALSE
|
|
prop.v_coord = vCoord
|
|
prop.model = model
|
|
prop.bInSynchedScene = TRUE
|
|
|
|
PLAY_SYNCHRONIZED_MAP_ENTITY_ANIM(vCoord, 1.0, model, sceneId, animName, animDict, fBlend)
|
|
ENDPROC
|
|
|
|
//PURPOSE: Will choose the right way to stop an synched prop
|
|
PROC SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(PROP_STRUCT &prop, FLOAT fBlend)
|
|
IF prop.bInSynchedScene
|
|
IF prop.id = NULL
|
|
IF (NOT IS_VECTOR_ZERO(prop.v_coord))
|
|
AND prop.model != DUMMY_MODEL_FOR_SCRIPT
|
|
STOP_SYNCHRONIZED_MAP_ENTITY_ANIM(prop.v_coord, 1.0, prop.model, fBlend)
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(prop.adName)
|
|
AND NOT IS_STRING_NULL_OR_EMPTY(prop.animName)
|
|
IF IS_ENTITY_PLAYING_ANIM(prop.id, prop.adName, prop.animName)
|
|
STOP_SYNCHRONIZED_ENTITY_ANIM(prop.id, fBlend, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
prop.model = DUMMY_MODEL_FOR_SCRIPT
|
|
prop.adName = ""
|
|
prop.animName = ""
|
|
prop.bInSynchedScene = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// create a prop using the prop struct
|
|
PROC Create_Prop(PROP_STRUCT &prop, MODEL_NAMES model, VECTOR pos, FLOAT fHeading = 0.0)
|
|
prop.id = CREATE_OBJECT(model, pos)
|
|
prop.bCustom = TRUE
|
|
|
|
IF fHeading != 0
|
|
SET_ENTITY_HEADING(prop.id, fHeading)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//PURPOSE: Safely blip a coordindate
|
|
PROC SAFE_BLIP_COORD(BLIP_INDEX &blip, VECTOR vec, BOOL bShowRoute = FALSE)
|
|
SAFE_REMOVE_BLIP(blip)
|
|
blip = CREATE_BLIP_FOR_COORD(vec, bShowRoute)
|
|
ENDPROC
|
|
|
|
//PURPOSE: Safely blip a ped
|
|
PROC SAFE_BLIP_PED(BLIP_INDEX &blip, PED_INDEX ped, BOOL bIsEnemy = FALSE)
|
|
SAFE_REMOVE_BLIP(blip)
|
|
blip = CREATE_BLIP_FOR_PED(ped, bIsEnemy)
|
|
ENDPROC
|
|
|
|
//PURPOSE: Safely blip a vehicle
|
|
PROC SAFE_BLIP_VEHICLE(BLIP_INDEX &blip, VEHICLE_INDEX veh, BOOL bIsEnemy = FALSE)
|
|
SAFE_REMOVE_BLIP(blip)
|
|
blip = CREATE_BLIP_FOR_VEHICLE(veh, bIsEnemy)
|
|
ENDPROC
|
|
|
|
//PURPOSE: Safely blip an object
|
|
PROC SAFE_BLIP_OBJECT(BLIP_INDEX &blip, OBJECT_INDEX objID)
|
|
SAFE_REMOVE_BLIP(blip)
|
|
blip = CREATE_BLIP_FOR_OBJECT(objID)
|
|
ENDPROC
|
|
|
|
//PURPOSE: Counts the number of popups open.
|
|
FUNC INT GET_POPUPS_OPEN()
|
|
INT count, x
|
|
FOR x = 0 TO 11
|
|
IF NOT sPopups[x].bClosed count++ ENDIF
|
|
ENDFOR
|
|
|
|
RETURN count
|
|
ENDFUNC
|
|
|
|
PROC DISABLE_PLAYERS_WEAPONS_THIS_FRAME()
|
|
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON_UNARMED)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON_MELEE)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON_HANDGUN)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON_SHOTGUN)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON_SMG)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON_AUTO_RIFLE)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON_SNIPER)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON_HEAVY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SELECT_WEAPON_SPECIAL)
|
|
|
|
// force unarmed
|
|
WEAPON_TYPE playerWeap
|
|
IF GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), playerWeap)
|
|
IF !(playerWeap = WEAPONTYPE_UNARMED OR playerWeap = WEAPONTYPE_OBJECT)
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
//PURPOSE: To set the correct ped variation for the li
|
|
PROC Set_Life_Invader_Office_Ped_Variation(mission_ped_flag mpf)
|
|
IF DOES_ENTITY_EXIST(peds[mpf])
|
|
AND (NOT IS_PED_INJURED(peds[mpf]))
|
|
PED_VARIATION_STRUCT sPedVar
|
|
|
|
INT i
|
|
REPEAT NUM_PED_COMPONENTS i
|
|
sPedVar.iDrawableVariation[i] = -1
|
|
sPedVar.iTextureVariation[i] = -1
|
|
ENDREPEAT
|
|
|
|
SWITCH mpf
|
|
CASE mpf_boardroom_norris
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
BREAK
|
|
CASE mpf_interviewer
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 3
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_interviewee_m
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_interviewee_f
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAND] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAND] = 0
|
|
BREAK
|
|
CASE mpf_gamer
|
|
FALLTHRU
|
|
CASE mpf_coffee_1
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 2
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 4
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_milk_f
|
|
FALLTHRU
|
|
CASE mpf_hr
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAND] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAND] = 0
|
|
BREAK
|
|
CASE mpf_coffee_2
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_office_a
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 2
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_office_b
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_office_c
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_office_d
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_office_boss
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 2
|
|
BREAK
|
|
CASE mpf_office_paper_f
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAND] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAND] = 0
|
|
BREAK
|
|
CASE mpf_office_paper_m
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_boardroom_m_a
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_boardroom_m_b
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 5
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_boardroom_m_e
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
CASE mpf_boardroom_m_f
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_SPECIAL] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_SPECIAL] = 0
|
|
BREAK
|
|
// CASE mpf_boardroom_f_a
|
|
// sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
// sPedVar.iTextureVariation[PED_COMP_HEAD] = 0
|
|
//
|
|
// sPedVar.iDrawableVariation[PED_COMP_HAIR] = 0
|
|
// sPedVar.iTextureVariation[PED_COMP_HAIR] = 2
|
|
//
|
|
// sPedVar.iDrawableVariation[PED_COMP_TORSO] = 1
|
|
// sPedVar.iTextureVariation[PED_COMP_TORSO] = 1
|
|
//
|
|
// sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
// sPedVar.iTextureVariation[PED_COMP_LEG] = 0
|
|
//
|
|
// sPedVar.iDrawableVariation[PED_COMP_HAND] = 0
|
|
// sPedVar.iTextureVariation[PED_COMP_HAND] = 0
|
|
// BREAK
|
|
CASE mpf_boardroom_f_b
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAND] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAND] = 0
|
|
BREAK
|
|
CASE mpf_boardroom_f_c
|
|
sPedVar.iDrawableVariation[PED_COMP_HEAD] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HEAD] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAIR] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_HAIR] = 1
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_TORSO] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_TORSO] = 2
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_LEG] = 1
|
|
sPedVar.iTextureVariation[PED_COMP_LEG] = 0
|
|
|
|
sPedVar.iDrawableVariation[PED_COMP_HAND] = 0
|
|
sPedVar.iTextureVariation[PED_COMP_HAND] = 0
|
|
BREAK
|
|
DEFAULT
|
|
SCRIPT_ASSERT("Not a life invader office ped, possibly a player ped or jaynorris")
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
REPEAT NUM_PED_COMPONENTS i
|
|
IF sPedVar.iDrawableVariation[i] != -1
|
|
OR sPedVar.iTextureVariation[i] != -1
|
|
SET_PED_COMPONENT_VARIATION(peds[mpf], int_to_enum(PED_COMPONENT, i), sPedVar.iDrawableVariation[i], sPedVar.iTextureVariation[i])
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_PLAYER_VISIBLY_TARGETTING_TRACY()
|
|
|
|
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND DOES_ENTITY_EXIST(peds[mpf_tracey])
|
|
AND NOT IS_PED_INJURED(peds[mpf_tracey])
|
|
IF IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(), peds[mpf_tracey])
|
|
OR IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), peds[mpf_tracey])
|
|
|
|
// player is targetting ped, set targetting dist based on whether he is using melee or ranged attac
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-804.21313, 182.88890, 75.42337>>, <<-796.66968, 186.31412, 71.60547>>, 10.69) // player is in kitchen
|
|
IF CAN_PED_SEE_PLAYER(peds[mpf_tracey]) // player can be seen by other ped
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL HAS_PLAYER_THREATENED_TRACY()
|
|
|
|
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND DOES_ENTITY_EXIST(peds[mpf_tracey])
|
|
AND NOT IS_PED_INJURED(peds[mpf_tracey])
|
|
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(peds[mpf_tracey], PLAYER_PED_ID())
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF IS_PLAYER_SHOOTING_NEAR_PED(peds[mpf_tracey], TRUE)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
IF IS_PLAYER_VISIBLY_TARGETTING_TRACY()
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
|
|
PROC SET_TRACY_VARS()
|
|
SET_PED_COMPONENT_VARIATION(peds[mpf_tracey], PED_COMP_TORSO, 1, 1)
|
|
SET_PED_COMPONENT_VARIATION(peds[mpf_tracey], PED_COMP_LEG, 5, 0)
|
|
SET_PED_COMPONENT_VARIATION(peds[mpf_tracey], PED_COMP_FEET, 2, 0)
|
|
SET_PED_COMPONENT_VARIATION(peds[mpf_tracey], PED_COMP_SPECIAL, 1,0)
|
|
ENDPROC
|
|
|
|
PROC MONITOR_PLAYER_BEING_ARMED()
|
|
IF IS_INTERIOR_SCENE()
|
|
AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_living_room
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
|
|
|
|
IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_MELEE|WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
|
|
GIVE_WEAPON_TO_PED(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, -1)
|
|
ENDIF
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC MONITOR_SOUNDS()
|
|
#IF IS_DEBUG_BUILD
|
|
IF eSoundState > TSS_WAIT_PLAY_REMOTE_RING
|
|
CPRINTLN(DEBUG_MIKE, "GET_GAME_TIMER() - iSoundTimer == ", GET_GAME_TIMER() - iSoundTimer)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
SWITCH eSoundState
|
|
CASE TSS_WAIT_PLAY_REMOTE_RING
|
|
IF bDetonated
|
|
|
|
IF iSoundID = -1
|
|
iSoundID = GET_SOUND_ID()
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objects[mof_phone].id)
|
|
PLAY_SOUND_FROM_ENTITY(iSoundID, "Remote_Ring", objects[mof_phone].id, "Phone_SoundSet_Michael")
|
|
iSoundTimer = GET_GAME_TIMER()
|
|
eSoundState = TSS_WAIT_ANSWER
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TSS_WAIT_ANSWER
|
|
|
|
IF iSoundID = -1
|
|
iSoundID = GET_SOUND_ID()
|
|
ENDIF
|
|
|
|
IF (GET_GAME_TIMER() - iSoundTimer) > 5000
|
|
IF NOT HAS_SOUND_FINISHED(iSoundID)
|
|
STOP_SOUND(iSoundID)
|
|
ENDIF
|
|
PLAY_SOUND_FROM_ENTITY(iSoundID, "Answer_Phone", objects[mof_phone].id, "Lester1B_Sounds")
|
|
iSoundTimer = GET_GAME_TIMER()
|
|
eSoundState = TSS_END
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC SWITCH_CAMERA(CAM_SHOTS nextCam, INT iInterpTime = 0)
|
|
FLOAT fov = GET_CAM_FOV(cam_tv)
|
|
SET_CAM_PARAMS(cam_tv, vCamPos[nextCam], vCamRot[nextCam], fov, iInterpTime)
|
|
eCameraCurrent = nextCam
|
|
ENDPROC
|
|
|
|
PROC CYCLE_CAMERAS()
|
|
// Cycle through cameras
|
|
IF DOES_CAM_EXIST(cam_tv)
|
|
IF IS_CAM_ACTIVE(cam_tv)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
IF IS_DISABLED_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
IF IS_XBOX360_VERSION () // Has no CAMERA_ULTRA_CLOSE
|
|
SWITCH eCameraCurrent
|
|
CASE CAMS_CLOSE
|
|
SWITCH_CAMERA(CAMS_ROOM)
|
|
BREAK
|
|
|
|
CASE CAMS_ROOM
|
|
SWITCH_CAMERA(CAMS_SCRIPT)
|
|
BREAK
|
|
|
|
CASE CAMS_SCRIPT
|
|
SWITCH_CAMERA(CAMS_CLOSE)
|
|
BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
SWITCH eCameraCurrent
|
|
CASE CAMS_ULTRA
|
|
SWITCH_CAMERA(CAMS_CLOSE)
|
|
BREAK
|
|
|
|
CASE CAMS_CLOSE
|
|
SWITCH_CAMERA(CAMS_ROOM)
|
|
BREAK
|
|
|
|
CASE CAMS_ROOM
|
|
SWITCH_CAMERA(CAMS_SCRIPT)
|
|
BREAK
|
|
|
|
CASE CAMS_SCRIPT
|
|
SWITCH_CAMERA(CAMS_ULTRA)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC STRING GET_ANIM_STRING(MIKE_ANIM_STATE anim)
|
|
SWITCH anim
|
|
|
|
CASE MAS_R_IDLE
|
|
RETURN "michael_tv_remote_idle"
|
|
BREAK
|
|
|
|
CASE MAS_R_FIDG
|
|
RETURN "michael_tv_remote_fidget"
|
|
BREAK
|
|
|
|
CASE MAS_R_PRESS
|
|
RETURN "michael_tv_remote_button_press_faster" //"micheal_tv_remote_button_press"
|
|
FALLTHRU
|
|
|
|
CASE MAS_R_PRESS_HOLD_INTRO
|
|
RETURN "michael_tv_remote_volume_into"
|
|
BREAK
|
|
|
|
CASE MAS_R_PRESS_HOLD_LOOP
|
|
RETURN "michael_tv_remote_volume"
|
|
BREAK
|
|
|
|
CASE MAS_R_PRESS_HOLD_OUTRO
|
|
RETURN "michael_tv_remote_volume_outro"
|
|
BREAK
|
|
|
|
CASE MAS_P_INTO
|
|
RETURN "michael_phone_into"
|
|
BREAK
|
|
|
|
CASE MAS_P_AWAY
|
|
RETURN "michael_phone_menu_exit"
|
|
BREAK
|
|
|
|
CASE MAS_P_IDLE
|
|
RETURN "michael_phone_idle"
|
|
BREAK
|
|
|
|
CASE MAS_P_SCROLL
|
|
RETURN "michael_phone_single_screen_scroll"
|
|
BREAK
|
|
|
|
CASE MAS_P_PRESS
|
|
RETURN "michael_phone_single_screen_press"
|
|
BREAK
|
|
|
|
CASE MAS_P_DETO_INTRO
|
|
RETURN "michael_phone_detonate_to_wait_idle"
|
|
BREAK
|
|
|
|
CASE MAS_P_DETO_WAIT
|
|
RETURN "michael_wait_idle"
|
|
BREAK
|
|
|
|
CASE MAS_P_DETO_REACT
|
|
RETURN "michael_explosion_reaction_to_wait_idle"
|
|
BREAK
|
|
|
|
CASE MAS_P_OUTRO
|
|
RETURN "michael_wait_idle_to_standing_idle_leadout"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN "NONE"
|
|
ENDFUNC
|
|
|
|
PROC SET_NEW_ANIM_TASK(MIKE_ANIM_STATE anim, FLOAT BlendIn = INSTANT_BLEND_IN, FLOAT BlendOut = NORMAL_BLEND_OUT, ANIMATION_FLAGS flags = AF_DEFAULT, BOOL bForceUpdate = FALSE)
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(anim))
|
|
TASK_PLAY_ANIM_ADVANCED(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(anim), ig_1_coord, ig_1_rot, BlendIn, BlendOut, -1, flags, 0, DEFAULT, AIK_DISABLE_LEG_IK)
|
|
IF bForceUpdate
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
ENDIF
|
|
eAnimState = anim
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL HAS_USED_PHONE_NAV()
|
|
IF IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_CELLPHONE_UP)
|
|
OR IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_CELLPHONE_DOWN)
|
|
OR IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_CELLPHONE_LEFT)
|
|
OR IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_CELLPHONE_RIGHT)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL MONITOR_FOR_ANIM_END()
|
|
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_IDLE))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_IDLE)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_FIDG))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_FIDG)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_PRESS))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_PRESS)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_PRESS_HOLD_INTRO))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_PRESS_HOLD_INTRO)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_PRESS_HOLD_LOOP))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_PRESS_HOLD_LOOP)) > 0.9
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_PRESS_HOLD_OUTRO))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_PRESS_HOLD_OUTRO)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_INTO))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_INTO)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_AWAY))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_AWAY)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_IDLE))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_IDLE)) > 0.9
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_SCROLL))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_SCROLL)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_PRESS))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_PRESS)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_DETO_INTRO))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_DETO_INTRO)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_DETO_WAIT))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_DETO_WAIT)) > 0.9
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_DETO_REACT))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_DETO_REACT)) >= 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_OUTRO))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_OUTRO)) > 1.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_PLAYER_CHANGING_VOLUME()
|
|
INT iAxis, iDeadZone
|
|
iDeadZone = 32
|
|
|
|
iAxis = GET_CONTROL_VALUE(FRONTEND_CONTROL,INPUT_FRONTEND_AXIS_Y) - 127
|
|
|
|
IF iAxis > 0+iDeadzone
|
|
OR iAxis < 0-iDeadzone
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
PROC PRINT_MICHAEL_ANIM_STAGE()
|
|
|
|
TEXT_LABEL_63 strDebug
|
|
strDebug = "MichaelAnimStage: "
|
|
|
|
SWITCH eAnimState
|
|
CASE MAS_NULL strDebug += "MAS_NULL" BREAK
|
|
CASE MAS_R_IDLE strDebug += "MAS_R_IDLE" BREAK
|
|
CASE MAS_R_FIDG strDebug += "MAS_R_FIDG" BREAK
|
|
CASE MAS_R_PRESS strDebug += "MAS_R_PRESS" BREAK
|
|
CASE MAS_R_PRESS_HOLD_INTRO strDebug += "MAS_R_PRESS_INTRO" BREAK
|
|
CASE MAS_R_PRESS_HOLD_LOOP strDebug += "MAS_R_PRESS_LOOP" BREAK
|
|
CASE MAS_R_PRESS_HOLD_OUTRO strDebug += "MAS_R_PRESS_OUTRO" BREAK
|
|
CASE MAS_P_INTO strDebug += "MAS_P_INTO" BREAK
|
|
CASE MAS_P_AWAY strDebug += "MAS_P_AWAY" BREAK
|
|
CASE MAS_P_IDLE strDebug += "MAS_P_IDLE" BREAK
|
|
CASE MAS_P_SCROLL strDebug += "MAS_P_SCROLL" BREAK
|
|
CASE MAS_P_PRESS strDebug += "MAS_P_PRESS" BREAK
|
|
CASE MAS_P_DETO_INTRO strDebug += "MAS_P_DETO_INTRO" BREAK
|
|
CASE MAS_P_DETO_WAIT strDebug += "MAS_P_DETO_WAIT" BREAK
|
|
CASE MAS_P_DETO_REACT strDebug += "MAS_P_DETO_REACT" BREAK
|
|
CASE MAS_P_OUTRO strDebug += "MAS_P_OUTRO" BREAK
|
|
ENDSWITCH
|
|
|
|
DRAW_DEBUG_TEXT_2D(strDebug, <<0.1, 0.5, 0.0>>, 255, 255, 255, 255)
|
|
strDebug = "TV timer: "
|
|
strDebug += GET_GAME_TIMER() - iDetonationTimer
|
|
DRAW_DEBUG_TEXT_2D(strDebug, <<0.1, 0.525, 0.0>>, 255, 255, 255, 255)
|
|
strDebug = "Detonate timer: "
|
|
strDebug += GET_GAME_TIMER() - iDetonationCallTimer
|
|
DRAW_DEBUG_TEXT_2D(strDebug, <<0.1, 0.55, 0.0>>, 255, 255, 255, 255)
|
|
|
|
ENDPROC
|
|
|
|
#ENDIF
|
|
|
|
PROC MICHAEL_ANIM_MANAGER(BOOL bCallingEnabled)
|
|
|
|
IF eAnimState = MAS_P_DETO_INTRO
|
|
OR eAnimState = MAS_P_DETO_WAIT
|
|
OR eAnimState = MAS_P_DETO_REACT
|
|
OR eAnimState = MAS_P_OUTRO
|
|
RUN_TV_TRANSPORT_CONTROLS(FALSE, FALSE)
|
|
ELSE
|
|
RUN_TV_TRANSPORT_CONTROLS(FALSE)
|
|
ENDIF
|
|
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_SECONDARY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SPECIAL_ABILITY_PC)
|
|
|
|
IF bCallingEnabled
|
|
AND (eAnimState = MAS_R_IDLE
|
|
OR eAnimState = MAS_R_FIDG
|
|
OR eAnimState = MAS_P_IDLE
|
|
OR eAnimState = MAS_P_AWAY
|
|
OR eAnimState = MAS_P_DETO_INTRO
|
|
OR eAnimState = MAS_P_DETO_REACT
|
|
OR eAnimState = MAS_P_DETO_WAIT
|
|
OR eAnimState = MAS_P_INTO
|
|
OR eAnimState = MAS_P_OUTRO
|
|
OR eAnimState = MAS_P_PRESS
|
|
OR eAnimState = MAS_P_SCROLL)
|
|
|
|
IF IS_CELLPHONE_DISABLED()
|
|
DISABLE_CELLPHONE(FALSE)
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IS_CELLPHONE_DISABLED()
|
|
DISABLE_CELLPHONE(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF eAnimState = MAS_R_IDLE
|
|
OR eAnimState = MAS_R_FIDG
|
|
|
|
// Just got the phone out, transition to phone idle
|
|
IF IS_PHONE_ONSCREEN(FALSE)
|
|
SET_NEW_ANIM_TASK(MAS_P_INTO, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
|
|
// Play change channel anim
|
|
ELIF IS_INPUT_ATTEMPTING_TO_CHANGE_CHANNEL(TRUE)
|
|
AND NOT bChangedChannel
|
|
IF IS_ENTITY_ALIVE(objects[mof_tv_remote].id)
|
|
//PLAY_SOUND_FROM_ENTITY(-1, "MICHAEL_SOFA_TV_CHANGE_CHANNEL_MASTER", objects[mof_tv_remote].id)
|
|
CPRINTLN(DEBUG_MIKE, "PLAYING SOUND: IDLE/FIDGET channel change")
|
|
ENDIF
|
|
SET_NEW_ANIM_TASK(MAS_R_PRESS, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
|
|
// Go to changing vol loop
|
|
ELIF IS_PLAYER_CHANGING_VOLUME()
|
|
|
|
SET_NEW_ANIM_TASK(MAS_R_PRESS_HOLD_INTRO, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
SWITCH eAnimState
|
|
|
|
CASE MAS_R_IDLE
|
|
|
|
// do a fidget idle
|
|
IF bDelaying
|
|
IF (GET_GAME_TIMER() - iAnimDelay) >= 8000
|
|
bDelaying = FALSE
|
|
SET_NEW_ANIM_TASK(MAS_R_FIDG, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MAS_R_FIDG
|
|
// back to idle
|
|
IF MONITOR_FOR_ANIM_END()
|
|
bDelaying = TRUE
|
|
iAnimDelay = GET_GAME_TIMER()
|
|
SET_NEW_ANIM_TASK(MAS_R_IDLE, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_LOOPING|AF_IGNORE_GRAVITY)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_R_PRESS
|
|
|
|
// back to idle
|
|
IF MONITOR_FOR_ANIM_END()
|
|
SET_NEW_ANIM_TASK(MAS_R_IDLE, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_LOOPING|AF_IGNORE_GRAVITY)
|
|
|
|
// repeat another press
|
|
ELIF IS_INPUT_ATTEMPTING_TO_CHANGE_CHANNEL(TRUE)
|
|
IF IS_ENTITY_ALIVE(objects[mof_tv_remote].id)
|
|
//PLAY_SOUND_FROM_ENTITY(-1, "MICHAEL_SOFA_CHANGE_CHANNEL_MASTER", objects[mof_tv_remote].id)
|
|
CPRINTLN(DEBUG_MIKE, "PLAYING SOUND: MAS_R_PRESS channel change")
|
|
ENDIF
|
|
SET_NEW_ANIM_TASK(MAS_R_PRESS, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_R_PRESS_HOLD_INTRO
|
|
// go to the hold loop
|
|
IF MONITOR_FOR_ANIM_END()
|
|
SET_NEW_ANIM_TASK(MAS_R_PRESS_HOLD_LOOP, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_LOOPING)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_R_PRESS_HOLD_LOOP
|
|
// Stop holding volume, go to volume loop outro
|
|
IF NOT IS_PLAYER_CHANGING_VOLUME()
|
|
SET_NEW_ANIM_TASK(MAS_R_PRESS_HOLD_OUTRO, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_R_PRESS_HOLD_OUTRO
|
|
// back to idle
|
|
IF MONITOR_FOR_ANIM_END()
|
|
SET_NEW_ANIM_TASK(MAS_R_IDLE, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_LOOPING|AF_IGNORE_GRAVITY)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_P_INTO
|
|
// called detonate
|
|
IF HAS_CONTACT_BEEN_SELECTED_IN_CONTACTS_LIST(CHAR_DETONATEPHONE)
|
|
AND bCallingEnabled
|
|
SET_NEW_ANIM_TASK(MAS_P_DETO_INTRO, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
// start the idle anim
|
|
ELIF MONITOR_FOR_ANIM_END()
|
|
SET_NEW_ANIM_TASK(MAS_P_IDLE, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_LOOPING|AF_IGNORE_GRAVITY)
|
|
g_TheContactInvolvedinCall = NO_CHARACTER
|
|
|
|
// Manage spawning the phone prop
|
|
ELSE
|
|
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_INTO))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_INTO)) > 0.376
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_phone].id)
|
|
objects[mof_phone].id = CREATE_OBJECT(Prop_Phone_ING, GET_PED_BONE_COORDS(PLAYER_PED_ID(), BONETAG_PH_R_HAND, <<0,0,0>>))
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_phone].id, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_P_IDLE
|
|
IF NOT bDetonated
|
|
// called detonate
|
|
IF HAS_CONTACT_BEEN_SELECTED_IN_CONTACTS_LIST(CHAR_DETONATEPHONE)
|
|
AND bCallingEnabled
|
|
SET_NEW_ANIM_TASK(MAS_P_DETO_INTRO, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
// put the phone away
|
|
ELIF NOT IS_PHONE_ONSCREEN(TRUE)
|
|
CPRINTLN(DEBUG_MIKE, "HAS JUST PUT PHONE AWAY")
|
|
SET_NEW_ANIM_TASK(MAS_P_AWAY, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
// browsing the phone
|
|
ELIF HAS_USED_PHONE_NAV()
|
|
SET_NEW_ANIM_TASK(MAS_P_SCROLL, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
// press accept on the phone
|
|
ELIF IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_CELLPHONE_SELECT)
|
|
AND NOT IS_CONTACTS_LIST_ON_SCREEN()
|
|
CPRINTLN(DEBUG_MIKE, "INPUT_CELLPHONE_SELECT IS_CONTROL_JUST_PRESSED")
|
|
SET_NEW_ANIM_TASK(MAS_P_PRESS, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
// pressed cancel on the phone
|
|
ELIF IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_CELLPHONE_CANCEL)
|
|
CPRINTLN(DEBUG_MIKE, "INPUT_CELLPHONE_CANCEL IS_CONTROL_JUST_PRESSED")
|
|
SET_NEW_ANIM_TASK(MAS_P_PRESS, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_P_AWAY
|
|
// go back to the remote idle
|
|
IF MONITOR_FOR_ANIM_END()
|
|
SET_NEW_ANIM_TASK(MAS_R_IDLE, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_LOOPING|AF_IGNORE_GRAVITY)
|
|
// manage deleting the phone prop
|
|
ELIF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_AWAY))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_AWAY)) > 0.376
|
|
IF DOES_ENTITY_EXIST(objects[mof_phone].id)
|
|
DELETE_OBJECT(objects[mof_phone].id)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_P_SCROLL
|
|
// called detonate
|
|
IF HAS_CONTACT_BEEN_SELECTED_IN_CONTACTS_LIST(CHAR_DETONATEPHONE)
|
|
AND bCallingEnabled
|
|
SET_NEW_ANIM_TASK(MAS_P_DETO_INTRO, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
// called detonate
|
|
ELIF HAS_CONTACT_BEEN_SELECTED_IN_CONTACTS_LIST(CHAR_DETONATEPHONE)
|
|
AND bCallingEnabled
|
|
SET_NEW_ANIM_TASK(MAS_P_DETO_INTRO, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
// back to phone idle
|
|
ELIF MONITOR_FOR_ANIM_END()
|
|
SET_NEW_ANIM_TASK(MAS_P_IDLE, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_LOOPING|AF_IGNORE_GRAVITY)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_P_PRESS
|
|
// called detonate
|
|
IF HAS_CONTACT_BEEN_SELECTED_IN_CONTACTS_LIST(CHAR_DETONATEPHONE)
|
|
AND bCallingEnabled
|
|
SET_NEW_ANIM_TASK(MAS_P_DETO_INTRO, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
// back to phone idle
|
|
ELIF MONITOR_FOR_ANIM_END()
|
|
SET_NEW_ANIM_TASK(MAS_P_IDLE, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_LOOPING|AF_IGNORE_GRAVITY)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_P_DETO_INTRO
|
|
IF NOT bDetonated
|
|
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_DETO_INTRO))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_DETO_INTRO)) > 0.305
|
|
SET_TV_CHANNEL(TVCHANNELTYPE_CHANNEL_SCRIPT)
|
|
//PLAY_TV_CHANNEL_WITH_PLAYLIST( TV_LOC_MICHAEL_PROJECTOR, TVCHANNELTYPE_CHANNEL_SCRIPT, TV_PLAYLIST_SPECIAL_INVADER_EXP, TRUE)
|
|
SETTIMERA(0)
|
|
DISABLE_CELLPHONE(TRUE)
|
|
bDetonated = TRUE
|
|
iDetonationCallTimer = GET_GAME_TIMER()
|
|
REPLAY_START_EVENT()
|
|
bReplayRecordEventStarted = TRUE
|
|
CPRINTLN( DEBUG_MIKE, "MICHAEL_ANIM_MANAGER() - MAS_P_DETO_INTRO called REPLAY_START_EVENT()" )
|
|
ELIF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_DETO_INTRO)) > 0.200
|
|
IF NOT bExpireDetonateConv
|
|
bExpireDetonateConv = CREATE_CONVERSATION(sConvo, str_dialogue, "LS1B_TV", CONV_PRIORITY_MEDIUM)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF MONITOR_FOR_ANIM_END()
|
|
SET_NEW_ANIM_TASK(MAS_P_DETO_WAIT, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_LOOPING|AF_IGNORE_GRAVITY)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_P_DETO_WAIT
|
|
IF NOT IS_SAFE_TO_START_CONVERSATION()
|
|
ENABLE_MOVIE_SUBTITLES(FALSE)
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ELSE
|
|
IF GET_GAME_TIMER() - iDetonationCallTimer > 6500
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1B_REACT", CONV_PRIORITY_HIGH)
|
|
SET_NEW_ANIM_TASK(MAS_P_DETO_REACT, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_P_DETO_REACT
|
|
IF MONITOR_FOR_ANIM_END()
|
|
SET_NEW_ANIM_TASK(MAS_P_OUTRO, INSTANT_BLEND_IN, WALK_BLEND_OUT, AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MAS_P_OUTRO
|
|
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_OUTRO))
|
|
IF GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_OUTRO)) > 0.321
|
|
SAFE_DELETE_OBJECT(objects[mof_tv_remote].id)
|
|
SAFE_DELETE_OBJECT(objects[mof_phone].id)
|
|
IF bReplayRecordEventStarted
|
|
REPLAY_STOP_EVENT()
|
|
CPRINTLN( DEBUG_MIKE, "MICHAEL_ANIM_MANAGER() - MAS_P_OUTRO called REPLAY_STOP_EVENT()" )
|
|
bReplayRecordEventStarted = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bDisplayEventDebug
|
|
PRINT_MICHAEL_ANIM_STAGE()
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
// Triggers an event
|
|
// returns false if already triggered, true if just triggered
|
|
FUNC BOOL Trigger_Event(mission_event_flag event, INT delay = 0)
|
|
|
|
IF mEvents[event].bTriggered = TRUE
|
|
OR mEvents[event].bComplete = TRUE
|
|
RETURN FALSE // already triggered, do nothing
|
|
ELSE
|
|
mEvents[event].bTriggered = TRUE
|
|
mEvents[event].bComplete = FALSE
|
|
mEvents[event].iTimeStamp = GET_GAME_TIMER()
|
|
mEvents[event].iDelay = delay
|
|
mEvents[event].iStage = 1
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
// Check if the given event has triggered
|
|
FUNC BOOL Is_Event_Triggered(mission_event_flag event)
|
|
RETURN mEvents[ENUM_TO_INT(event)].bTriggered
|
|
ENDFUNC
|
|
|
|
// Checks if the given event is complete
|
|
FUNC BOOL Is_Event_Complete(mission_event_flag event)
|
|
RETURN mEvents[ENUM_TO_INT(event)].bComplete
|
|
ENDFUNC
|
|
|
|
// Kill event
|
|
PROC Kill_Event(mission_event_flag event)
|
|
IF IS_EVENT_TRIGGERED(event)
|
|
AND (NOT IS_EVENT_COMPLETE(event))
|
|
mEvents[event].bComplete = TRUE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// Resets the given event
|
|
PROC Reset_Event(mission_event_flag event)
|
|
mEvents[ENUM_TO_INT(event)].bTriggered = FALSE
|
|
mEvents[ENUM_TO_INT(event)].bComplete = FALSE
|
|
mEvents[ENUM_TO_INT(event)].iTimeStamp = 0
|
|
mEvents[ENUM_TO_INT(event)].iDelay = 0
|
|
mEvents[ENUM_TO_INT(event)].iStage= 1
|
|
mEvents[ENUM_TO_INT(event)].bPaused = FALSE
|
|
mEvents[ENUM_TO_INT(event)].bAnimDictPrestreamed = FALSE
|
|
mEvents[ENUM_TO_INT(event)].bSafeAfterSkip = FALSE
|
|
ENDPROC
|
|
|
|
// Resets all the events in the mission
|
|
PROC Reset_All_Events()
|
|
INT i
|
|
FOR i = 0 TO ENUM_TO_INT(mef_num_events)-1
|
|
IF IS_EVENT_TRIGGERED(INT_TO_ENUM(mission_event_flag, i))
|
|
RESET_EVENT(INT_TO_ENUM(mission_event_flag, i))
|
|
ENDIF
|
|
ENDFOR
|
|
ENDPROC
|
|
|
|
// Used to delay events internally insde their procs
|
|
PROC Add_Event_Delay(mission_event_flag event, INT ms)
|
|
mEvents[event].iTimeStamp = GET_GAME_TIMER()
|
|
mEvents[event].iDelay = ms
|
|
ENDPROC
|
|
|
|
// Manages the swap between stages
|
|
PROC Mission_Stage_Management()
|
|
SWITCH stageSwitch
|
|
CASE STAGESWITCH_REQUESTED
|
|
CPRINTLN(DEBUG_MIKE_UTIL, "[StageManagement] Stage switch requested from stage:", mission_stage, " to stage:", requestedStage)
|
|
stageSwitch = STAGESWITCH_EXITING
|
|
mission_substage = STAGE_EXIT
|
|
BREAK
|
|
CASE STAGESWITCH_EXITING
|
|
CPRINTLN(DEBUG_MIKE_UTIL, "[StageManagement] Exiting stage: ", mission_stage)
|
|
stageSwitch = STAGESWITCH_ENTERING
|
|
mission_substage = STAGE_ENTRY
|
|
mission_stage = requestedStage
|
|
iStageTimer = GET_GAME_TIMER()
|
|
BREAK
|
|
CASE STAGESWITCH_ENTERING
|
|
CPRINTLN(DEBUG_MIKE_UTIL, "[StageManagement] Entered stage: ", mission_stage)
|
|
requestedStage = -1
|
|
stageSwitch = STAGESWITCH_IDLE
|
|
BREAK
|
|
CASE STAGESWITCH_IDLE
|
|
IF (GET_GAME_TIMER() - iStageManagementTimer) > 2500
|
|
CPRINTLN(DEBUG_MIKE_UTIL, "[StageManagement] Stage: ", mission_stage, " Substage: ", mission_substage)
|
|
iStageManagementTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
// Set stage, will only switch while stage switch management is idle
|
|
// returns false if not idle
|
|
FUNC BOOL Mission_Set_Stage(mission_stage_flag newStage)
|
|
IF stageSwitch = STAGESWITCH_IDLE
|
|
requestedStage = enum_to_int(newStage)
|
|
stageSwitch = STAGESWITCH_REQUESTED
|
|
return TRUE
|
|
ELSE
|
|
return FALSE
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
PROC Mission_Cleanup()
|
|
KILL_ANY_CONVERSATION()
|
|
CLEAR_PRINTS()
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
RESET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID())
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), TRUE)
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_PhoneDisableTalkingAnimations, FALSE)
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_PhoneDisableTextingAnimations, FALSE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(veh_replay)
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), veh_replay)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(veh_replay)
|
|
ELSE
|
|
DELETE_VEHICLE(veh_replay)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
INT i
|
|
FOR i = 0 TO enum_to_int(mof_num_objs)-1
|
|
IF DOES_ENTITY_EXIST(objects[i].id)
|
|
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[i], INSTANT_BLEND_OUT)
|
|
|
|
IF IS_ENTITY_ATTACHED(objects[i].id)
|
|
DETACH_ENTITY(objects[i].id)
|
|
ENDIF
|
|
|
|
VECTOR vPos
|
|
|
|
IF objects[i].bCustom
|
|
vPos = GET_ENTITY_COORDS(objects[i].id)
|
|
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[i].id)
|
|
CLEAR_AREA(vPos, 0.5, TRUE, TRUE, FALSE, FALSE)
|
|
objects[i].bCustom = FALSE
|
|
ELSE
|
|
vPos = GET_ENTITY_COORDS(objects[i].id)
|
|
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[i].id)
|
|
IF NOT objects[i].bDoNotReset
|
|
CLEAR_AREA(vPos, 0.5, TRUE, TRUE, FALSE, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
FOR i = enum_to_int(mpf_shop) + 1 TO enum_to_int(mpf_num_peds)-1
|
|
IF DOES_ENTITY_EXIST(peds[i])
|
|
AND (NOT IS_PED_INJURED(peds[i]))
|
|
IF GET_SCRIPT_TASK_STATUS(peds[i], SCRIPT_TASK_SYNCHRONIZED_SCENE) = PERFORMING_TASK
|
|
CLEAR_PED_TASKS(peds[i])
|
|
ENDIF
|
|
|
|
SET_PED_AS_NO_LONGER_NEEDED(peds[i])
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
mission_door_flags x
|
|
REPEAT COUNT_OF(sDoors) x
|
|
IF sDoors[x].iHash != -1
|
|
AND IS_DOOR_REGISTERED_WITH_SYSTEM(sDoors[x].iHash)
|
|
REMOVE_DOOR_FROM_SYSTEM(sDoors[x].iHash)
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
IF DOES_ENTITY_EXIST(veh_Tracey)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(veh_Tracey)
|
|
ENDIF
|
|
|
|
RELEASE_AMBIENT_AUDIO_BANK()
|
|
RELEASE_SOUND_ID(iSFX_FindVirus)
|
|
UNREGISTER_SCRIPT_WITH_AUDIO()
|
|
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
SET_DOOR_STATE(DOORNAME_LESTER_F, DOORSTATE_LOCKED)
|
|
|
|
SAFE_REMOVE_BLIP(blip_clothes[0])
|
|
SAFE_REMOVE_BLIP(blip_clothes[1])
|
|
SAFE_REMOVE_BLIP(blip_clothes[2])
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE(aScene_noise_blocker)
|
|
STOP_AUDIO_SCENE(aScene_noise_blocker)
|
|
ENDIF
|
|
|
|
SHUTDOWN_PC_SCRIPTED_CONTROLS()
|
|
|
|
CLEAR_WEATHER_TYPE_PERSIST()
|
|
|
|
Reset_Scenario_Blocking()
|
|
|
|
SET_PLAYER_PED_DATA_IN_CUTSCENES(TRUE)
|
|
|
|
DISABLE_CELLPHONE(FALSE)
|
|
|
|
g_bLaptopMissionSuppressed = FALSE
|
|
|
|
DISPLAY_RADAR(TRUE)
|
|
DISPLAY_HUD(TRUE)
|
|
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
|
|
SET_SHOP_DIALOGUE_IS_BLOCKED(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
|
|
REMOVE_CONTACT_FROM_INDIVIDUAL_PHONEBOOK(CHAR_DETONATEPHONE, MICHAEL_BOOK)
|
|
HANG_UP_AND_PUT_AWAY_PHONE()
|
|
|
|
SET_AMBIENT_ZONE_LIST_STATE_PERSISTENT("AZL_LESTERS_DOGS", TRUE, TRUE)
|
|
ENABLE_MOVIE_SUBTITLES(TRUE)
|
|
|
|
SET_INTERIOR_CAPPED(INTERIOR_V_LESTERS, TRUE)
|
|
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_INVADER_OFFICE_INTERIOR, BUILDINGSTATE_NORMAL, TRUE )
|
|
|
|
ENDPROC
|
|
|
|
PROC Mission_Reset_Everything()
|
|
|
|
// set michael back to normal attire
|
|
RESET_PLAYER_HAS_CHANGE_CLOTHES_ON_MISSION(CHAR_MICHAEL, bHasChanged)
|
|
|
|
RESTORE_PLAYER_PED_VARIATIONS(PLAYER_PED_ID())
|
|
REMOVE_PROGRAMMER_OUTFIT()
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
RESET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID())
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), TRUE)
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_PhoneDisableTalkingAnimations, FALSE)
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_PhoneDisableTextingAnimations, FALSE)
|
|
ENDIF
|
|
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
IF IS_CUTSCENE_ACTIVE()
|
|
STOP_CUTSCENE()
|
|
REMOVE_CUTSCENE()
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
ENDIF
|
|
|
|
RESET_ALL_EVENTS()
|
|
CLEAR_MISSION_LOCATE_STUFF(locates_data)
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
KILL_ANY_CONVERSATION()
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
DESTROY_ALL_CAMS()
|
|
SET_DOOR_STATE(DOORNAME_LESTER_F, DOORSTATE_LOCKED)
|
|
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 0)
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 3)
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 4)
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 5)
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 6)
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 7)
|
|
|
|
INT i
|
|
// Delete all props
|
|
FOR i = 0 TO enum_to_int(mof_num_objs)-1
|
|
IF DOES_ENTITY_EXIST(objects[i].id)
|
|
IF objects[i].bCustom
|
|
DELETE_OBJECT(objects[i].id)
|
|
objects[i].bCustom = FALSE
|
|
ELSE
|
|
VECTOR vPos
|
|
vPos = GET_ENTITY_COORDS(objects[i].id)
|
|
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[i].id)
|
|
CLEAR_AREA(vPos, 1.0, TRUE, TRUE, FALSE, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
objects[i].bInSynchedScene = FALSE
|
|
objects[i].v_coord = <<0,0,0>>
|
|
objects[i].bCustom = FALSE
|
|
objects[i].adName = ""
|
|
objects[i].animName = ""
|
|
objects[i].model = DUMMY_MODEL_FOR_SCRIPT
|
|
objects[i].bDoNotReset = FALSE
|
|
ENDFOR
|
|
|
|
// Delete all peds
|
|
FOR i = enum_to_int(mpf_shop) + 1 TO enum_to_int(mpf_num_peds)-1
|
|
IF DOES_ENTITY_EXIST(peds[i])
|
|
DELETE_PED(peds[i])
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
IF DOES_ENTITY_EXIST(veh_Tracey)
|
|
DELETE_VEHICLE(veh_Tracey)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(veh_replay)
|
|
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), veh_replay)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
ENDIF
|
|
DELETE_VEHICLE(veh_replay)
|
|
ENDIF
|
|
|
|
// remove objective blip
|
|
IF DOES_BLIP_EXIST(blip_Objective)
|
|
REMOVE_BLIP(blip_Objective)
|
|
ENDIF
|
|
|
|
FOR i = 0 TO 11
|
|
IF sPopups[i].iType != -1
|
|
IF sPopups[i].iSfxLoop != -1
|
|
STOP_SOUND(sPopups[i].iSfxLoop)
|
|
ENDIF
|
|
sPopups[i].bClosed = FALSE
|
|
sPopups[i].bSfxPlaying = FALSE
|
|
ELSE
|
|
sPopups[i].bClosed = TRUE
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
REPEAT COUNT_OF(syncedIDs) i
|
|
syncedIDs[i] = -1
|
|
ENDREPEAT
|
|
|
|
REPEAT COUNT_OF(blip_clothes) i
|
|
SAFE_REMOVE_BLIP(blip_clothes[i])
|
|
ENDREPEAT
|
|
|
|
IF bReplayRecordEventStarted
|
|
REPLAY_CANCEL_EVENT()
|
|
ENDIF
|
|
bReplayRecordEventStarted = FALSE
|
|
|
|
// Reset flags
|
|
iPaperThrow = 0
|
|
iScanTimer = 0
|
|
iPrevScanBar = 0
|
|
iScanStutter = 0
|
|
bObtainedClothing = FALSE
|
|
iPopupHelp = 0
|
|
bIsAVOpen = FALSE
|
|
iCurrentPopup = 0
|
|
iExterminateTimer = 0
|
|
fInputAccum = 0.0
|
|
bSideEntranceObjective = FALSE
|
|
bAllowRunning = FALSE
|
|
bDisableConspicuousBehavior = FALSE
|
|
bAllowRunning = FALSE
|
|
b_MiniGameScaleformSetUp = FALSE
|
|
g_QuickSaveDisabledByScript = FALSE
|
|
bTVTurnedOff = FALSE
|
|
bTVTurnedOn = FALSE
|
|
|
|
Reset_Scenario_Blocking()
|
|
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE()
|
|
|
|
// clear the life invader building of all peds
|
|
CLEAR_AREA_OF_PEDS(<< -1061.6774, -242.1771, 43.0213 >>, 50.0)
|
|
|
|
DELETE_TEXT_MESSAGE_BY_LABEL_FROM_CURRENT_PLAYER("LES1A_TXT1")
|
|
DELETE_TEXT_MESSAGE_BY_LABEL_FROM_CURRENT_PLAYER("LES1A_TXT2")
|
|
|
|
CLEAR_AUTO_LAUNCH_TO_TEXT_MESSAGE_APP_FOR_THIS_SP_CHARACTER(CHAR_MICHAEL)
|
|
REMOVE_CONTACT_FROM_INDIVIDUAL_PHONEBOOK(CHAR_DETONATEPHONE, MICHAEL_BOOK)
|
|
|
|
DISABLE_CELLPHONE(FALSE)
|
|
|
|
STOP_AUDIO_SCENES()
|
|
|
|
DISPLAY_RADAR(TRUE)
|
|
DISPLAY_HUD(TRUE)
|
|
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
SET_AMBIENT_ZONE_LIST_STATE_PERSISTENT("AZL_LESTERS_DOGS", TRUE, TRUE)
|
|
ENABLE_MOVIE_SUBTITLES(TRUE)
|
|
|
|
MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_MISSION_LESTER_1)
|
|
|
|
ENDPROC
|
|
|
|
PROC Mission_Passed()
|
|
CLEAR_PRINTS()
|
|
CLEAR_PLAYER_WANTED_LEVEL( PLAYER_ID() )
|
|
|
|
Mission_Cleanup()
|
|
Mission_Flow_Mission_Passed()
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
// Fail param handles printing fail text
|
|
PROC Mission_Failed(mission_fail_flag fail_condition)
|
|
|
|
// Force failed - player death, arrested, switch to Multiplayer, etc
|
|
IF fail_condition = mff_default
|
|
MISSION_FLOW_MISSION_FORCE_CLEANUP()
|
|
Mission_Cleanup()
|
|
|
|
// Normal mission failed
|
|
ELSE
|
|
// Process fail msg
|
|
STRING strFailMsg
|
|
SWITCH fail_condition
|
|
CASE mff_blew_your_cover
|
|
strFailMsg = "LES1A_F1"
|
|
BREAK
|
|
CASE mff_bomb_plant_failed
|
|
strFailMsg = "LES1A_F2"
|
|
BREAK
|
|
CASE mff_store_closed
|
|
strFailMsg = "LES1A_F3"
|
|
BREAK
|
|
CASE mff_insufficient_fund_for_disguise
|
|
strFailMsg = "LES1A_F5"
|
|
BREAK
|
|
CASE mff_lester_dead
|
|
strFailMsg = "LES1A_F4"
|
|
BREAK
|
|
CASE mff_did_not_kill_target
|
|
strFailMsg = "F_DETONATE"
|
|
BREAK
|
|
CASE mff_tracey_dead
|
|
strFailMsg = "F_TRACY_DEAD"
|
|
BREAK
|
|
CASE mff_tracey_threat
|
|
strFailMsg = "F_TRACEY_FLED"
|
|
BREAK
|
|
CASE mff_wanted_home
|
|
strFailMsg = "F_WANT_HOME"
|
|
BREAK
|
|
CASE mff_debug_forced
|
|
strFailMsg = "LES1A_FF"
|
|
BREAK
|
|
CASE mff_default
|
|
DEFAULT
|
|
strFailMsg = "LES1A_DF"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON(strFailMsg)
|
|
|
|
WHILE NOT GET_MISSION_FLOW_SAFE_TO_CLEANUP()
|
|
//Maintain anything that could look weird during fade out (e.g. enemies walking off).
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
// check if we need to respawn the player in a different position,
|
|
// if so call MISSION_FLOW_SET_FAIL_WARP_LOCATION() + SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION here
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_offices
|
|
MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<-1048.4845, -219.1426, 36.8756>>, 234.6454)
|
|
SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION(v_LifeInvaderCarParkCoord, f_LifeInvaderCarParkHeading)
|
|
|
|
ELIF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_lesters
|
|
MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<1282.1167, -1736.8835, 51.2234>>, 22.2041)
|
|
|
|
// is michael sitting watching the tv when failing
|
|
ELIF mission_stage = enum_to_int(msf_st8_tv_start)
|
|
OR mission_stage = enum_to_int(msf_st9_tv_detonate)
|
|
OR mission_stage = enum_to_int(msf_st10_mission_passed)
|
|
MISSION_FLOW_SET_FAIL_WARP_LOCATION(<<-802.8600, 172.6933, 71.8447>>, 286.1387)
|
|
ENDIF
|
|
|
|
SET_SHOP_IS_AVAILABLE(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
|
|
IF fail_condition = mff_debug_forced
|
|
Mission_Reset_Everything()
|
|
ENDIF
|
|
|
|
RESTORE_MISSION_START_OUTFIT()
|
|
MISSION_CLEANUP() // must only take 1 frame and terminate the thread
|
|
RESTORE_STANDARD_CHANNELS()
|
|
|
|
PRINTLN("Lester1A: Failed - MSG:", strFailMsg, ", FailCondition: ", fail_condition)
|
|
ENDIF
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
//PURPOSE: Checks for mission fail conditions
|
|
PROC Mission_Checks()
|
|
INT i
|
|
IF mission_stage = enum_to_int(msf_st0_intro_cutscene)
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
VEHICLE_INDEX veh_TempVeh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
|
|
IF DOES_ENTITY_EXIST(veh_TempVeh)
|
|
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(veh_TempVeh)
|
|
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(veh_TempVeh)
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(null)
|
|
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(null)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
|
|
IF DOES_ENTITY_EXIST(peds[mpf_lester])
|
|
IF IS_PED_INJURED(peds[mpf_lester])
|
|
OR IS_ENTITY_ON_FIRE(peds[mpf_lester])
|
|
Mission_Failed(mff_lester_dead)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Blow your cover if your use weapons in/around the life invader building, at any point during the mission
|
|
IF (IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1010.514221,-215.746918,36.917801>>, <<-1136.744751,-279.693207,66.870827>>, 88.437500)
|
|
AND IS_PED_SHOOTING(PLAYER_PED_ID()))
|
|
OR IS_BULLET_IN_BOX(<<-1109.98, -263.37, 37.73>>, <<-1008.46, -216.71, 56.92>>, TRUE)
|
|
OR IS_PROJECTILE_IN_AREA(<<-1109.98, -263.37, 37.73>>, <<-1008.46, -216.71, 56.92>>, TRUE)
|
|
Mission_Failed(mff_blew_your_cover)
|
|
ENDIF
|
|
|
|
// has ped blown cover by driving vehicle into building
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_offices
|
|
Mission_Failed(mff_blew_your_cover)
|
|
ENDIF
|
|
|
|
// life invader engineer is injured
|
|
IF DOES_ENTITY_EXIST(peds[mpf_smoker])
|
|
AND IS_PED_INJURED(peds[mpf_smoker])
|
|
Mission_Failed(mff_blew_your_cover)
|
|
ENDIF
|
|
|
|
// driving a stupid vehicle that draws attention around the life invader offices
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1010.514221,-215.746918,36.917801>>, <<-1136.744751,-279.693207,66.870827>>, 88.437500)
|
|
AND (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND (IS_PED_IN_ANY_HELI(PLAYER_PED_ID())
|
|
OR IS_PED_IN_ANY_PLANE(PLAYER_PED_ID())
|
|
OR IS_PED_IN_ANY_BOAT(PLAYER_PED_ID())
|
|
OR IS_VEHICLE_SIREN_ON(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())))
|
|
OR GET_PED_PARACHUTE_STATE(PLAYER_PED_ID()) != PPS_INVALID)
|
|
|
|
Mission_Failed(mff_blew_your_cover)
|
|
|
|
// ped has brought a vehicle up to the entrance of the building
|
|
ELIF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1043.089844,-228.149597,38.013393>>, <<-1047.865967,-230.596863,48.139465>>, 7.875000)
|
|
AND IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
|
|
Mission_Failed(mff_blew_your_cover)
|
|
ENDIF
|
|
|
|
// Any vehicles near the doors of the life invader building will blow the cover
|
|
IF IS_ANY_VEHICLE_NEAR_POINT(<<-1045.633789,-230.615540,38.093407>>, 2.0)
|
|
AND IS_ANY_VEHICLE_NEAR_POINT(<<-1082.183594,-259.889313,36.814720>>, 2.0)
|
|
Mission_Failed(mff_blew_your_cover)
|
|
ENDIF
|
|
|
|
IF mission_stage = enum_to_int(msf_st1_get_clothes)
|
|
AND b_CanFailForNotEnoughFunds
|
|
AND NOT IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
|
|
BOOL bHasGillet, bHasShorts
|
|
|
|
IF IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_0)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_1)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_2)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_3)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_4)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_TORSO, TORSO_P0_GILET_5)
|
|
bHasGillet = TRUE
|
|
ENDIF
|
|
|
|
IF IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_0)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_1)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_2)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_3)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_4)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_CARGO_SHORTS_4)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_0)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_1)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_2)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_3)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_4)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_5)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_6)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_7)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_8)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_9)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_10)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_11)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_12)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_13)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_14)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_LONG_SHORTS_15)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_0)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_1)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_2)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_3)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_4)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_5)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_6)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_7)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_8)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_9)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_10)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_11)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_12)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_13)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_14)
|
|
OR IS_PED_COMP_ITEM_ACQUIRED_SP(GET_PLAYER_PED_MODEL(CHAR_MICHAEL), COMP_TYPE_LEGS, LEGS_P0_YOGA_15)
|
|
bHasShorts = TRUE
|
|
ENDIF
|
|
|
|
IF NOT bHasGillet
|
|
AND NOT bHasShorts
|
|
IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) < i_min_required_funds
|
|
Mission_Failed(mff_insufficient_fund_for_disguise)
|
|
ENDIF
|
|
ELIF NOT bHasGillet
|
|
IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) < i_most_expensive_gilet
|
|
Mission_Failed(mff_insufficient_fund_for_disguise)
|
|
ENDIF
|
|
ELIF NOT bHasShorts
|
|
IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) < i_most_expensive_shorts
|
|
Mission_Failed(mff_insufficient_fund_for_disguise)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF mission_stage <= enum_to_int(msf_st2_go_to_offices)
|
|
// If shop is closed before you get your disguise then fail
|
|
IF mission_stage > enum_to_int(msf_st0_intro_cutscene)
|
|
AND NOT IS_SHOP_OPEN_FOR_BUSINESS(CLOTHES_SHOP_M_04_HW)
|
|
AND bObtainedClothing = FALSE
|
|
Mission_Failed(mff_store_closed)
|
|
ENDIF
|
|
|
|
IF mission_substage < 4
|
|
AND mission_substage != STAGE_EXIT
|
|
// Fail if player enteres offices before being told to (i.e. without disguise)
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_offices
|
|
Mission_Failed(mff_blew_your_cover)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF mission_stage >= enum_to_int(msf_st2_go_to_offices)
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_offices
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE(aScene_noise_blocker)
|
|
START_AUDIO_SCENE(aScene_noise_blocker)
|
|
ENDIF
|
|
ELSE
|
|
IF IS_AUDIO_SCENE_ACTIVE(aScene_noise_blocker)
|
|
STOP_AUDIO_SCENE(aScene_noise_blocker)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF mission_stage >= enum_to_int(msf_st3_go_to_computer)
|
|
|
|
// Check if any of the life invader peds are injured, if so fail
|
|
FOR i = enum_to_int(mpf_smoker) TO enum_to_int(mpf_boardroom_f_c)
|
|
IF DOES_ENTITY_EXIST(peds[i])
|
|
IF IS_PED_INJURED(peds[i])
|
|
Mission_Failed(mff_blew_your_cover)
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
// Check player hasn't left the area
|
|
IF mission_stage <= enum_to_int(msf_st5_plant_bomb)
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) != interior_offices
|
|
|
|
IF iFailTimer < 0
|
|
iFailTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
|
|
// Only fail once player has been out of building for 3 seconds
|
|
IF GET_GAME_TIMER() - iFailTimer > 3000
|
|
IF mission_stage = enum_to_int(msf_st3_go_to_computer)
|
|
// Give enough time for the player to have walked into the building
|
|
IF GET_GAME_TIMER() - iStageTimer > 5000
|
|
Mission_Failed(mff_bomb_plant_failed)
|
|
ENDIF
|
|
ELSE
|
|
Mission_Failed(mff_bomb_plant_failed)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
// Reset timer
|
|
iFailTimer = -1
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF mission_stage <= enum_to_int(msf_st6_leave_building)
|
|
// start checking for attacking of people once player arrives at the life invader offices
|
|
IF HAS_PLAYER_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
Mission_Failed(mff_blew_your_cover)
|
|
ENDIF
|
|
IF IS_PED_SHOOTING(PLAYER_PED_ID())
|
|
Mission_Failed(mff_blew_your_cover)
|
|
ENDIF
|
|
IF IS_PED_IN_COMBAT(PLAYER_PED_ID())
|
|
Mission_Failed(mff_blew_your_cover)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF mission_stage >= enum_to_int(msf_st7_go_home)
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_living_room
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
Mission_Failed(mff_wanted_home)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Player cannot equip a weapon while they have the bag on or their conspicuous behavior is disabled
|
|
IF bDisableConspicuousBehavior
|
|
DISABLE_PLAYERS_WEAPONS_THIS_FRAME()
|
|
ENDIF
|
|
|
|
IF bDisableConspicuousBehavior
|
|
|
|
IF NOT bAllowRunning
|
|
// force the player to walk only
|
|
SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SPRINT)
|
|
ENDIF
|
|
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_JUMP)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_DUCK)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_COVER)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_HEAVY)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_MELEE_ATTACK_LIGHT)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_ATTACK)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_ATTACK2)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_AIM)
|
|
SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_DisablePlayerAutoVaulting, true)
|
|
|
|
IF NOT IS_CELLPHONE_DISABLED()
|
|
DISABLE_CELLPHONE(TRUE)
|
|
ENDIF
|
|
ELSE
|
|
IF mission_stage < enum_to_int(msf_st8_tv_start)
|
|
IF IS_CELLPHONE_DISABLED()
|
|
DISABLE_CELLPHONE(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// 2140700 - can see ped creation/deletion during the LI office.
|
|
mission_stage_flag eStage = int_to_enum(mission_stage_flag, mission_stage)
|
|
IF eStage = msf_st3_go_to_computer
|
|
OR eStage = msf_st4_mini_game
|
|
OR eStage = msf_st5_plant_bomb
|
|
OR eStage = msf_st6_leave_building
|
|
// 2061975 - blocking camera movement while watching the TV
|
|
OR eStage = msf_st8_tv_start
|
|
OR eStage = msf_st9_tv_detonate
|
|
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME()
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
/*
|
|
_______ _ _ _______ _______ _______ ______
|
|
(_______)(_) (_)(_______)(_______)(_______)/ _____)
|
|
_____ _ _ _____ _ _ _ ( (____
|
|
| ___) | | | || ___) | | | | | | \____ \
|
|
| |_____ \ \ / / | |_____ | | | | | | _____) )
|
|
|_______) \___/ |_______)|_| |_| |_| (______/
|
|
*/
|
|
|
|
FUNC STRING Get_Event_Name(mission_event_flag mef)
|
|
STRING result
|
|
SWITCH mef
|
|
CASE mef_lester_phone_call result = "Phone Call" BREAK
|
|
CASE mef_lester_phone_call_2 result = "Phone Call 2" BREAK
|
|
CASE mef_manage_bag result = "Manage bag" BREAK
|
|
CASE mef_ambient_boardroom result = "Boardroom" BREAK
|
|
CASE mef_ambient_interview result = "Interview" BREAK
|
|
CASE mef_ambient_milk result = "Milk Lady" BREAK
|
|
CASE mef_ambient_office result = "Office AirGuitar" BREAK
|
|
CASE mef_ambient_paper_throw result = "Paper Throw" BREAK
|
|
CASE mef_ambient_receptionist result = "Receptionist" BREAK
|
|
CASE mef_engineer_air_guitar result = "Engineer Airguitar" BREAK
|
|
CASE mef_engineer_follow result = "Engineer Follow" BREAK
|
|
CASE mef_ambient_dialogue result = "DIA: Ambient Office" BREAK
|
|
CASE mef_tracey result = "Manage Tracey" BREAK
|
|
DEFAULT result = "UNKNOWN" BREAK
|
|
ENDSWITCH
|
|
RETURN result
|
|
ENDFUNC
|
|
|
|
PROC event_lester_phone_call()
|
|
SWITCH mEvents[mef_lester_phone_call].iStage
|
|
CASE 1
|
|
iLesterCallTimer = 0
|
|
mEvents[mef_lester_phone_call].iStage++
|
|
BREAK
|
|
CASE 2
|
|
// got into a vehicle, start the timer for 5 seconds
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
iLesterCallTimer = GET_GAME_TIMER() + 5000
|
|
mEvents[mef_lester_phone_call].iStage = 4
|
|
|
|
// moved away from the shop, start the timer for 15000 seconds
|
|
ELIF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), << 127.7614, -209.5459, 53.5500 >>) >= 30.0
|
|
iLesterCallTimer = GET_GAME_TIMER() + 15000
|
|
mEvents[mef_lester_phone_call].iStage = 3
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
// if gotten in a vehicle then reset the timer by jumping back a stage
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
mEvents[mef_lester_phone_call].iStage--
|
|
ENDIF
|
|
FALLTHRU
|
|
CASE 4
|
|
IF GET_GAME_TIMER() > iLesterCallTimer
|
|
|
|
// Player has a wanted level, send them a text instead from lester
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
mEvents[mef_lester_phone_call].iStage = 7
|
|
// phone lester
|
|
ELSE
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 8)
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 8, null, "LESTER")
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF PLAYER_CALL_CHAR_CELLPHONE(sConvo, CHAR_LESTER, str_dialogue, "LES_1A_CALL", CONV_PRIORITY_HIGH)
|
|
mEvents[mef_lester_phone_call].iStage = 5
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
// phone call finished
|
|
IF IS_CALLING_ANY_CONTACT()
|
|
mEvents[mef_lester_phone_call].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
IF NOT IS_CALLING_ANY_CONTACT()
|
|
|
|
// Phone call was interrupted, delay next stage...
|
|
IF WAS_LAST_CELLPHONE_CALL_INTERRUPTED()
|
|
OR HAS_CELLPHONE_JUST_BEEN_FORCED_AWAY()
|
|
|
|
Add_Event_Delay(mef_lester_phone_call, 10000)
|
|
mEvents[mef_lester_phone_call].iStage++
|
|
|
|
ELSE
|
|
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 8)
|
|
Kill_Event(mef_lester_phone_call)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 7
|
|
// .... send text message containing info.
|
|
SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_LESTER, "LES1A_TXT2", TXTMSG_UNLOCKED, TXTMSG_CRITICAL)
|
|
Kill_Event(mef_lester_phone_call)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC event_lester_phone_call_2()
|
|
|
|
SWITCH mEvents[mef_lester_phone_call_2].iStage
|
|
CASE 1
|
|
// PLayer is out of the offices and can no longer get back in
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) != interior_offices
|
|
AND DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_L)) = DOORSTATE_LOCKED AND ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_L))) <= 0.1
|
|
AND DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_R)) = DOORSTATE_LOCKED AND ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_R))) <= 0.1
|
|
AND DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_REAR_L)) = DOORSTATE_LOCKED AND ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(enum_to_int(DOORHASH_LIFE_INVADER_REAR_L))) <= 0.1
|
|
AND DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_REAR_R)) = DOORSTATE_LOCKED AND ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(enum_to_int(DOORHASH_LIFE_INVADER_REAR_R))) <= 0.1
|
|
iLesterCallTimer = GET_GAME_TIMER() + 5000
|
|
mEvents[mef_lester_phone_call_2].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF GET_GAME_TIMER() > iLesterCallTimer
|
|
OR IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 8)
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 8, null, "LESTER")
|
|
mEvents[mef_lester_phone_call_2].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF PLAYER_CALL_CHAR_CELLPHONE(sConvo, CHAR_LESTER, str_dialogue, "LES1A_01", CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT)
|
|
mEvents[mef_lester_phone_call_2].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
IF IS_CALLING_ANY_CONTACT()
|
|
mEvents[mef_lester_phone_call_2].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
// phone call finished
|
|
IF NOT IS_CALLING_ANY_CONTACT()
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 8)
|
|
Kill_Event(mef_lester_phone_call_2)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
PROC event_manage_bag()
|
|
SWITCH mEvents[mef_manage_bag].iStage
|
|
CASE 1
|
|
IF GET_PED_DRAWABLE_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL2) = 9
|
|
PRELOAD_PED_COMP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_NONE)
|
|
//SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 0, 0)
|
|
mEvents[mef_manage_bag].iStage = 2
|
|
ELSE
|
|
PRELOAD_PED_COMP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK)
|
|
//SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 9, 0)
|
|
mEvents[mef_manage_bag].iStage = 3
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
// Remove bag
|
|
IF GET_PED_DRAWABLE_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL2) != 9
|
|
OR (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) OR ((IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP() AND NOT IS_PLAYER_BROWSING_ITEMS_IN_SHOP(CLOTHES_SHOP_M_04_HW)) AND NOT IS_GAMEPLAY_CAM_RENDERING()))
|
|
//SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 0, 0)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_NONE, FALSE)
|
|
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
|
|
//SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 9, 0)
|
|
PRELOAD_PED_COMP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK)
|
|
|
|
IF IS_PED_ON_ANY_BIKE(PLAYER_PED_ID())
|
|
mEvents[mef_manage_bag].iStage = 4
|
|
ELSE
|
|
mEvents[mef_manage_bag].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
// Add bag
|
|
IF GET_PED_DRAWABLE_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL2) = 9
|
|
OR (NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND NOT IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP())
|
|
|
|
//SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 9, 0)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK, FALSE)
|
|
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
|
|
//SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 0, 0)
|
|
PRELOAD_PED_COMP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_NONE)
|
|
|
|
mEvents[mef_manage_bag].iStage--
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
IF NOT IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
mEvents[mef_manage_bag].iStage = 2
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Manage clipset
|
|
WEAPON_TYPE eCurrentWeapon
|
|
GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), eCurrentWeapon)
|
|
|
|
IF GET_PED_DRAWABLE_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL2) = 9
|
|
AND eCurrentWeapon = WEAPONTYPE_UNARMED
|
|
IF HAS_ANIM_DICT_LOADED("MOVE_P_M_ZERO_RUCKSACK")
|
|
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(), "MOVE_P_M_ZERO_RUCKSACK")
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
ELSE
|
|
RESET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID())
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), TRUE)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC event_engineer_follow()
|
|
|
|
IF DOES_ENTITY_EXIST(peds[mpf_smoker])
|
|
AND NOT IS_PED_INJURED(peds[mpf_smoker])
|
|
|
|
IF EFE_START = INT_TO_ENUM(ENGINEER_FOLLOW_ENUM, mEvents[mef_engineer_follow].iStage)
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_smoker], TRUE)
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_FOLLOW_WAYPOINT_RECORDING(null, str_wp_engineer_route, 3, EWAYPOINT_START_TASK_EXACTSTOP)
|
|
TASK_LOOK_AT_ENTITY(null, PLAYER_PED_ID(), -1)
|
|
TASK_ACHIEVE_HEADING(null, 160.0)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_smoker], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
FORCE_PED_MOTION_STATE(peds[mpf_smoker], MS_ON_FOOT_WALK, false, FAUS_CUTSCENE_EXIT)
|
|
|
|
Load_Asset_AnimDict(sAssetData, "AMB@WORLD_HUMAN_STAND_IMPATIENT@MALE@No_Sign@base")
|
|
Load_Asset_AnimDict(sAssetData, "AMB@WORLD_HUMAN_STAND_IMPATIENT@MALE@No_Sign@idle_a")
|
|
|
|
SWITCH GET_RANDOM_INT_IN_RANGE(0, 2)
|
|
CASE 0 str_paused_root = "LS1A_WLKCT2" BREAK
|
|
CASE 1 str_paused_root = "LS1A_WLKCT3" BREAK
|
|
//CASE 2 str_paused_root = "LS1A_WLKCT" BREAK
|
|
ENDSWITCH
|
|
str_paused_label = ""
|
|
i_LIChokePointStage = 0
|
|
bReadyToStartWalkChatConvo = FALSE
|
|
b_OfficeSceneChat = FALSE
|
|
mEvents[mef_engineer_follow].bSafeAfterSkip = TRUE
|
|
mEvents[mef_engineer_follow].iTimeStamp = 0
|
|
mEvents[mef_engineer_follow].iStage = enum_to_int(EFE_TO_DESK)
|
|
|
|
ELSE
|
|
|
|
FLOAT f_dist_between = VDIST2(GET_ENTITY_COORDS(peds[mpf_smoker]), GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
|
|
// Process look at
|
|
IF f_dist_between < 36 // 6^2
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), peds[mpf_smoker], -1, SLF_DEFAULT, SLF_LOOKAT_VERY_HIGH)
|
|
ELIF f_dist_between >= 100 // 10^2
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
// Enable the door opening search and IK for the LI ped when he nears the door
|
|
IF VDIST2(<<-1063.57, -241.33, 39.91>>, GET_ENTITY_COORDS(peds[mpf_smoker])) < F_DIST_LI_PED_STOPS
|
|
SET_PED_RESET_FLAG(peds[mpf_smoker], PRF_SearchForClosestDoor, TRUE)
|
|
SET_PED_CONFIG_FLAG(peds[mpf_smoker], PCF_OpenDoorArmIK, TRUE)
|
|
ELSE
|
|
SET_PED_CONFIG_FLAG(peds[mpf_smoker], PCF_OpenDoorArmIK, FALSE)
|
|
ENDIF
|
|
|
|
BOOL bDoChokePointCheck
|
|
|
|
// Choke points
|
|
SWITCH i_LIChokePointStage
|
|
CASE 0
|
|
IF IS_ENTITY_IN_ANGLED_AREA(peds[mpf_smoker], <<-1061.159058,-240.230515,38.733181>>, <<-1066.040039,-242.661133,41.858181>>, 2.937500)
|
|
bDoChokePointCheck = TRUE
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF IS_ENTITY_IN_ANGLED_AREA(peds[mpf_smoker], <<-1066.657715,-247.583450,38.733181>>, <<-1070.308838,-243.851654,43.312668>>, 2.937500)
|
|
bDoChokePointCheck = TRUE
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF IS_ENTITY_IN_ANGLED_AREA(peds[mpf_smoker], <<-1074.717285,-242.909637,42.689636>>, <<-1079.151611,-245.258301,46.146278>>, 7.062500)
|
|
bDoChokePointCheck = TRUE
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_ENTITY_IN_ANGLED_AREA(peds[mpf_smoker], <<-1075.363159,-248.935425,43.021278>>, <<-1070.266357,-250.371078,46.146278>>, 7.062500)
|
|
bDoChokePointCheck = TRUE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SWITCH INT_TO_ENUM(ENGINEER_FOLLOW_ENUM, mEvents[mef_engineer_follow].iStage)
|
|
CASE EFE_TO_DESK
|
|
|
|
IF NOT IS_SCRIPT_TASK_RUNNING_OR_STARTING(peds[mpf_smoker], SCRIPT_TASK_PERFORM_SEQUENCE)
|
|
mEvents[mef_engineer_follow].iStage = enum_to_int(EFE_WAITING_AT_END)
|
|
ELSE
|
|
|
|
IF bDoChokePointCheck
|
|
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_offices
|
|
AND VDIST2(GET_ENTITY_COORDS(peds[mpf_smoker]), GET_ENTITY_COORDS(PLAYER_PED_ID())) < F_DIST_LI_PED_STOPS
|
|
// don't stop ped walking and move on to the next choke point check
|
|
i_LIChokePointStage++
|
|
ELSE
|
|
// Not in range, pause
|
|
WAYPOINT_PLAYBACK_PAUSE(peds[mpf_smoker], TRUE)
|
|
|
|
// Store current convo
|
|
IF NOT b_OfficeSceneChat
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_PED_IN_CURRENT_CONVERSATION(peds[mpf_smoker])
|
|
str_paused_root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
str_paused_label = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
ENDIF
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
mEvents[mef_engineer_follow].iStage = ENUM_TO_INT(EFE_WAITING_ON_ROUTE_START)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE EFE_WAITING_ON_ROUTE_START FALLTHRU
|
|
CASE EFE_WAITING_ON_ROUTE
|
|
|
|
IF WAYPOINT_PLAYBACK_GET_IS_PAUSED(peds[mpf_smoker])
|
|
IF bDoChokePointCheck
|
|
// Resume playback
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_offices
|
|
AND f_dist_between < F_DIST_LI_PED_STOPS // 5 squared
|
|
|
|
WAYPOINT_PLAYBACK_RESUME(peds[mpf_smoker], FALSE)
|
|
|
|
IF NOT b_OfficeSceneChat
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
mEvents[mef_engineer_follow].iStage = enum_to_int(EFE_TO_DESK)
|
|
i_LIChokePointStage++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE EFE_WAITING_AT_END
|
|
|
|
IF NOT IS_SCRIPT_TASK_RUNNING_OR_STARTING(peds[mpf_smoker], SCRIPT_TASK_PERFORM_SEQUENCE)
|
|
AND NOT IS_SCRIPT_TASK_RUNNING_OR_STARTING(peds[mpf_smoker], SCRIPT_TASK_PLAY_ANIM)
|
|
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_PLAY_ANIM(null, "AMB@WORLD_HUMAN_STAND_IMPATIENT@MALE@No_Sign@base", "base", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM(null, "AMB@WORLD_HUMAN_STAND_IMPATIENT@MALE@No_Sign@idle_a", "idle_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM(null, "AMB@WORLD_HUMAN_STAND_IMPATIENT@MALE@No_Sign@base", "base", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM(null, "AMB@WORLD_HUMAN_STAND_IMPATIENT@MALE@No_Sign@idle_a", "idle_b", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM(null, "AMB@WORLD_HUMAN_STAND_IMPATIENT@MALE@No_Sign@base", "base", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM(null, "AMB@WORLD_HUMAN_STAND_IMPATIENT@MALE@No_Sign@idle_a", "idle_c", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
SET_SEQUENCE_TO_REPEAT(seq, REPEAT_FOREVER)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_smoker], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
//DIALOGUE
|
|
// start the convo off again if it wasn't finished when interupted
|
|
IF NOT b_OfficeSceneChat
|
|
SWITCH int_to_enum(ENGINEER_FOLLOW_ENUM, mEvents[mef_engineer_follow].iStage)
|
|
CASE EFE_TO_DESK
|
|
|
|
IF i_LIChokePointStage = 4
|
|
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF CREATE_CONVERSATION(sConvo, "LS1AAUD", "LS1A_POINT", CONV_PRIORITY_HIGH)
|
|
str_paused_root = ""
|
|
str_paused_label = ""
|
|
i_LIChokePointStage++
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF bReadyToStartWalkChatConvo
|
|
AND NOT IS_STRING_NULL_OR_EMPTY(str_paused_root)
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF IS_STRING_NULL_OR_EMPTY(str_paused_label)
|
|
IF CREATE_CONVERSATION(sConvo, "LS1AAUD", str_paused_root, CONV_PRIORITY_HIGH)
|
|
str_paused_root = ""
|
|
ENDIF
|
|
ELSE
|
|
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(sConvo, "LS1AAUD", str_paused_root, str_paused_label, CONV_PRIORITY_HIGH)
|
|
str_paused_root = ""
|
|
str_paused_label = ""
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
BREAK
|
|
CASE EFE_WAITING_ON_ROUTE_START FALLTHRU
|
|
CASE EFE_WAITING_ON_ROUTE
|
|
// player is still close enough to get berrated by the engineer for being slow.
|
|
IF f_dist_between <= F_DIST_LI_PED_STOPS // 5 squared
|
|
OR (f_dist_between < 144.0 // 12 squared
|
|
AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_offices)
|
|
|
|
IF GET_GAME_TIMER() - mEvents[mef_engineer_follow].iTimeStamp >= 7000
|
|
IF NOT b_OfficeSceneChat
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
|
|
IF INT_TO_ENUM(ENGINEER_FOLLOW_ENUM, mEvents[mef_engineer_follow].iStage) = EFE_WAITING_ON_ROUTE_START
|
|
IF CREATE_CONVERSATION(sConvo, "LS1AAUD", "LS1A_LFTB", CONV_PRIORITY_HIGH)
|
|
mEvents[mef_engineer_follow].iTimeStamp = GET_GAME_TIMER()
|
|
mEvents[mef_engineer_follow].iStage = enum_to_int(EFE_WAITING_ON_ROUTE)
|
|
ENDIF
|
|
ELSE
|
|
IF CREATE_CONVERSATION(sConvo, "LS1AAUD", "LS1A_COMON", CONV_PRIORITY_HIGH)
|
|
mEvents[mef_engineer_follow].iTimeStamp = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ELSE
|
|
mEvents[mef_engineer_follow].iTimeStamp = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
IF NOT b_OfficeSceneChat
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
// Ped is dead stop this event
|
|
Kill_Event(mef_engineer_follow)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC event_ambient_milk_lady()
|
|
SWITCH mEvents[mef_ambient_milk].iStage
|
|
CASE 1
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1075.434814,-244.675262,43.021240>>, <<-1076.745728,-242.233261,47.445156>>, 1.500000)
|
|
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_milk_lady)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_coffee)
|
|
Load_Asset_Model(sAssetData, mod_cup)
|
|
Load_Asset_Model(sAssetData, mod_milk_carton)
|
|
|
|
mEvents[mef_ambient_milk].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF HAS_MODEL_LOADED(mod_hipster_f)
|
|
AND HAS_MODEL_LOADED(mod_hipster_m)
|
|
AND HAS_MODEL_LOADED(mod_cup)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_milk_lady)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_coffee)
|
|
peds[mpf_milk_f] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_f, << -1066.2509, -241.2682, 38.7331 >>, 68.4967)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_milk_f)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_milk_f], TRUE)
|
|
|
|
peds[mpf_coffee_1] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, v_coffee_guy_1_coord, v_coffee_guy_1_rot.z)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_coffee_1)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_coffee_1], TRUE)
|
|
|
|
peds[mpf_coffee_2] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, v_coffee_guy_2_coord, v_coffee_guy_2_rot.z)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_coffee_2)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_coffee_2], TRUE)
|
|
|
|
// Create the milk
|
|
Create_Prop(objects[mof_milk_carton], mod_milk_carton, GET_PED_BONE_COORDS(peds[mpf_milk_f], BONETAG_PH_R_HAND, <<0,0,0>>))
|
|
Unload_Asset_Model(sAssetData, mod_milk_carton)
|
|
|
|
// Create the cups
|
|
Create_Prop(objects[mof_cup], mod_cup, << -1066.8055, -241.0743, 39.7336 >> )
|
|
SET_ENTITY_COORDS_NO_OFFSET(objects[mof_cup].id, << -1066.8055, -241.0743, 39.7336 >> )
|
|
FREEZE_ENTITY_POSITION(objects[mof_cup].id, TRUE)
|
|
Create_Prop(objects[mof_cup_1], mod_cup, GET_PED_BONE_COORDS(peds[mpf_coffee_1], BONETAG_PH_R_HAND, <<0,0,0>>))
|
|
Create_Prop(objects[mof_cup_2], mod_cup, GET_PED_BONE_COORDS(peds[mpf_coffee_2], BONETAG_PH_R_HAND, <<0,0,0>>))
|
|
Unload_Asset_Model(sAssetData, mod_cup)
|
|
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_cup_1].id, peds[mpf_coffee_1], GET_PED_BONE_INDEX(peds[mpf_coffee_1], BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_cup_2].id, peds[mpf_coffee_2], GET_PED_BONE_INDEX(peds[mpf_coffee_2], BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
|
|
|
|
bStartedCoffeeDrinkingAnims1 = FALSE
|
|
bStartedCoffeeDrinkingAnims2 = FALSE
|
|
|
|
mEvents[mef_ambient_milk].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), <<-1068.971436,-246.413971,38.733139>>, <<-1070.091431,-244.426758,42.951130>>, 4.000000)
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 4)
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 4, peds[mpf_milk_f], "Woman")
|
|
mEvents[mef_ambient_milk].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
AND IS_ENTITY_READY(peds[mpf_milk_f])
|
|
//AND IS_ENTITY_READY(objects[mof_cupboard_door].id)
|
|
IF CREATE_CONVERSATION(sConvo, "LS1AAUD", "LES_1A_IG_1", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
|
|
// Task milk lady
|
|
syncedIDs[ssf_ambient_milk_lady] = CREATE_SYNCHRONIZED_SCENE(<<-1065.19, -240.00, 39.65>>, <<-0.00, 0.00, 27.50>>)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_milk_f], syncedIDs[ssf_ambient_milk_lady], anim_dict_milk_lady, "milkLady_f", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT | SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_EXPAND_PED_CAPSULE_FROM_SKELETON, RBF_PLAYER_IMPACT)
|
|
SAFE_PLAY_SYNCHRONIZED_MAP_ENTITY_ANIM(objects[mof_cupboard_door], <<-1065.91, -240.78, 39.17>>, PROP_CUB_DOOR_LIFEBLURB, syncedIDs[ssf_ambient_milk_lady], anim_dict_milk_lady, "milklady_cupboard", INSTANT_BLEND_IN)
|
|
SET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_ambient_milk_lady], 0.2)
|
|
|
|
mEvents[mef_ambient_milk].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
IF IS_ENTITY_READY(peds[mpf_milk_f])
|
|
|
|
FLOAT fScenePhase
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(syncedIDs[ssf_ambient_milk_lady])
|
|
fScenePhase = GET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_ambient_milk_lady])
|
|
ELSE
|
|
fScenePhase = 1.0
|
|
ENDIF
|
|
|
|
// scene not running because its been interupted or is finished
|
|
IF GET_SCRIPT_TASK_STATUS(peds[mpf_milk_f], SCRIPT_TASK_SYNCHRONIZED_SCENE) != PERFORMING_TASK
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
IF DOES_ENTITY_EXIST(objects[mof_cup].id)
|
|
DETACH_ENTITY(objects[mof_cup].id)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(objects[mof_milk_carton].id)
|
|
DETACH_ENTITY(objects[mof_milk_carton].id)
|
|
ENDIF
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(null, PLAYER_PED_ID(), 2000)
|
|
TASK_LOOK_AT_ENTITY(null, PLAYER_PED_ID(), -1, SLF_USE_TORSO)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_milk_f], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
|
|
mEvents[mef_ambient_milk].iStage++
|
|
|
|
// Scene has reached the end
|
|
// OR player has walked off from the scene
|
|
ELIF fScenePhase = 1.0
|
|
OR GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), peds[mpf_milk_f]) > 8.5
|
|
|
|
syncedIDs[ssf_ambient_milk_lady] = CREATE_SYNCHRONIZED_SCENE(<<-1065.19, -240.00, 39.65>>, <<-0.00, 0.00, 27.50>>)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_milk_f], syncedIDs[ssf_ambient_milk_lady], anim_dict_milk_lady, "milkLady_exitLoop_f", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_EXPAND_PED_CAPSULE_FROM_SKELETON, RBF_PLAYER_IMPACT)
|
|
SAFE_PLAY_SYNCHRONIZED_MAP_ENTITY_ANIM(objects[mof_cupboard_door], <<-1065.91, -240.78, 39.17>>, PROP_CUB_DOOR_LIFEBLURB, syncedIDs[ssf_ambient_milk_lady], anim_dict_milk_lady, "milklady_exitloop_cupboard", NORMAL_BLEND_IN)
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_milk_lady], TRUE)
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
IF DOES_ENTITY_EXIST(objects[mof_milk_carton].id)
|
|
IF IS_ENTITY_ATTACHED(objects[mof_milk_carton].id)
|
|
DETACH_ENTITY(objects[mof_milk_carton].id)
|
|
ENDIF
|
|
DELETE_OBJECT(objects[mof_milk_carton].id)
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_ATTACHED(objects[mof_cup].id)
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_cup].id, peds[mpf_milk_f], GET_PED_BONE_INDEX(peds[mpf_milk_f], BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
|
|
ENDIF
|
|
|
|
mEvents[mef_ambient_milk].iStage++
|
|
|
|
// Otherwise do anim event checks for attaching and detaching objects
|
|
ELSE
|
|
IF DOES_ENTITY_EXIST(objects[mof_milk_carton].id)
|
|
IF NOT IS_ENTITY_ATTACHED(objects[mof_milk_carton].id)
|
|
IF fScenePhase >= 0.119
|
|
CPRINTLN(DEBUG_MIKE, "Attaching Milk Carton")
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_milk_carton].id, peds[mpf_milk_f], GET_PED_BONE_INDEX(peds[mpf_milk_f], BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
|
|
ENDIF
|
|
ELSE
|
|
IF fScenePhase >= 0.386
|
|
CPRINTLN(DEBUG_MIKE, "Detaching Milk Carton")
|
|
DETACH_ENTITY(objects[mof_milk_carton].id, FALSE)
|
|
FREEZE_ENTITY_POSITION(objects[mof_milk_carton].id, TRUE)
|
|
DELETE_OBJECT(objects[mof_milk_carton].id)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_ATTACHED(objects[mof_cup].id)
|
|
IF fScenePhase >= 0.755
|
|
FREEZE_ENTITY_POSITION(objects[mof_cup].id, FALSE)
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_cup].id, peds[mpf_milk_f], GET_PED_BONE_INDEX(peds[mpf_milk_f], BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
|
|
VECTOR vCupCoord
|
|
vCupCoord = GET_PED_BONE_COORDS( peds[mpf_milk_f], BONETAG_PH_R_HAND, <<0,0,0>>)
|
|
CPRINTLN(DEBUG_MIKE, vCupCoord)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
IF NOT mEvents[mef_ambient_milk].bComplete
|
|
IF mEvents[mef_ambient_milk].iStage > 4
|
|
|
|
IF IS_ENTITY_READY(peds[mpf_coffee_1])
|
|
|
|
IF NOT IS_SCRIPT_TASK_RUNNING_OR_STARTING(peds[mpf_coffee_1], SCRIPT_TASK_PERFORM_SEQUENCE)
|
|
|
|
IF NOT bStartedCoffeeDrinkingAnims1
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_PLAY_ANIM_ADVANCED(null, anim_dict_coffee, "idle_a", v_coffee_guy_1_coord, v_coffee_guy_1_rot, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM_ADVANCED(null, anim_dict_coffee, "idle_b", v_coffee_guy_1_coord, v_coffee_guy_1_rot, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM_ADVANCED(null, anim_dict_coffee, "idle_b", v_coffee_guy_1_coord, v_coffee_guy_1_rot, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM_ADVANCED(null, anim_dict_coffee, "idle_a", v_coffee_guy_1_coord, v_coffee_guy_1_rot, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM_ADVANCED(null, anim_dict_coffee, "idle_b", v_coffee_guy_1_coord, v_coffee_guy_1_rot, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
SET_SEQUENCE_TO_REPEAT(seq, REPEAT_FOREVER)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_coffee_1], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
bStartedCoffeeDrinkingAnims1 = TRUE
|
|
ELSE
|
|
IF IS_ENTITY_ATTACHED(objects[mof_cup_1].id)
|
|
DETACH_ENTITY(objects[mof_cup_1].id)
|
|
ENDIF
|
|
|
|
SET_PED_KEEP_TASK(peds[mpf_coffee_1], TRUE)
|
|
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(null, PLAYER_PED_ID())
|
|
TASK_STAND_STILL(null, 3000)
|
|
TASK_WANDER_STANDARD(null)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_coffee_1], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
|
|
TASK_LOOK_AT_ENTITY(peds[mpf_coffee_1], PLAYER_PED_ID(), 5000, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
|
|
|
|
SET_PED_AS_NO_LONGER_NEEDED(peds[mpf_coffee_1])
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_READY(peds[mpf_coffee_2])
|
|
|
|
IF NOT IS_SCRIPT_TASK_RUNNING_OR_STARTING(peds[mpf_coffee_2], SCRIPT_TASK_PERFORM_SEQUENCE)
|
|
|
|
IF NOT bStartedCoffeeDrinkingAnims2
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_PLAY_ANIM_ADVANCED(null, anim_dict_coffee, "idle_b", v_coffee_guy_2_coord, v_coffee_guy_2_rot, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM_ADVANCED(null, anim_dict_coffee, "idle_c", v_coffee_guy_2_coord, v_coffee_guy_2_rot, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM_ADVANCED(null, anim_dict_coffee, "idle_b", v_coffee_guy_2_coord, v_coffee_guy_2_rot, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM_ADVANCED(null, anim_dict_coffee, "idle_a", v_coffee_guy_2_coord, v_coffee_guy_2_rot, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
TASK_PLAY_ANIM_ADVANCED(null, anim_dict_coffee, "idle_b", v_coffee_guy_2_coord, v_coffee_guy_2_rot, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1)
|
|
SET_SEQUENCE_TO_REPEAT(seq, REPEAT_FOREVER)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_coffee_2], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
bStartedCoffeeDrinkingAnims2 = TRUE
|
|
ELSE
|
|
IF IS_ENTITY_ATTACHED(objects[mof_cup_2].id)
|
|
DETACH_ENTITY(objects[mof_cup_2].id)
|
|
ENDIF
|
|
|
|
SET_PED_KEEP_TASK(peds[mpf_coffee_2], TRUE)
|
|
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(null, PLAYER_PED_ID())
|
|
TASK_STAND_STILL(null, 3000)
|
|
TASK_WANDER_STANDARD(null)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_coffee_2], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
|
|
TASK_LOOK_AT_ENTITY(peds[mpf_coffee_2], PLAYER_PED_ID(), 5000, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
|
|
|
|
SET_PED_AS_NO_LONGER_NEEDED(peds[mpf_coffee_2])
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
BOOL bIntervieweeFemaleGreet
|
|
|
|
PROC event_ambient_interview()
|
|
|
|
VECTOR vInterviewCoord = <<-1080.48, -244.68, 43.96>> //<< -1080.203, -244.499, 43.96 >>
|
|
VECTOR vInterviewRot = <<-0.00, 0.00, 27.50>> //<< 0.000, 0.000, 27.440 >>
|
|
|
|
// track and store scene progress
|
|
float fSceneProg
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(syncedIDs[ssf_ambient_interview])
|
|
fSceneProg = GET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_ambient_interview])
|
|
ELSE
|
|
fSceneProg = 1.0
|
|
ENDIF
|
|
|
|
SWITCH mEvents[mef_ambient_interview].iStage
|
|
CASE 1
|
|
// delete all existing peds in this scene
|
|
IF DOES_ENTITY_EXIST(peds[mpf_interviewee_f]) DELETE_PED(peds[mpf_interviewee_f]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_interviewee_m]) DELETE_PED(peds[mpf_interviewee_m]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_interviewer]) DELETE_PED(peds[mpf_interviewer]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_hr]) DELETE_PED(peds[mpf_hr]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_gamer]) DELETE_PED(peds[mpf_gamer]) ENDIF
|
|
IF DOES_ENTITY_EXIST(objects[mof_hacky_sack].id) DELETE_OBJECT(objects[mof_hacky_sack].id) ENDIF
|
|
|
|
SWITCH int_to_enum(mission_stage_flag, mission_stage)
|
|
CASE msf_st3_go_to_computer
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1070.653687,-243.591553,40.611217>>, <<-1072.526489,-240.037018,44.762821>>, 3.250000)
|
|
AND HAS_MODEL_LOADED(mod_hipster_m)
|
|
AND HAS_MODEL_LOADED(mod_hipster_f_heel)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_interview_1st)
|
|
peds[mpf_hr] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_f_heel, << -1076.32, -246.03, 44.04 >>, 93.97)
|
|
peds[mpf_gamer] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1078.2277, -246.6952, 43.0211 >>, 184.1198)
|
|
peds[mpf_interviewee_m] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1076.4138, -248.0054, 43.0211 >>, 295.9542)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_hr)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_gamer)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_interviewee_m)
|
|
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
|
|
mEvents[mef_ambient_interview].iStage++
|
|
ELSE
|
|
IF NOT b_OfficeSceneChat
|
|
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1068.451660,-243.964478,38.733181>>, <<-1063.518066,-241.417603,42.012131>>, 8.375000)
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
b_OfficeSceneChat = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE msf_st4_mini_game FALLTHRU
|
|
CASE msf_st5_plant_bomb
|
|
IF HAS_MODEL_LOADED(mod_hipster_m)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_interview_1st_exit)
|
|
peds[mpf_gamer] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1078.2277, -246.6952, 43.0211 >>, 184.1198)
|
|
peds[mpf_interviewee_m] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1076.4138, -248.0054, 43.0211 >>, 295.9542)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_gamer)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_interviewee_m)
|
|
|
|
mEvents[mef_ambient_interview].iStage = 4
|
|
ENDIF
|
|
BREAK
|
|
CASE msf_st6_leave_building
|
|
IF HAS_MODEL_LOADED(mod_hipster_m)
|
|
AND HAS_MODEL_LOADED(mod_hipster_f_heel)
|
|
AND HAS_MODEL_LOADED(PROP_HACKY_SACK_01)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_interview_2nd)
|
|
mEvents[mef_ambient_interview].iStage = 5
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
bIntervieweeFemaleGreet = FALSE
|
|
BREAK
|
|
CASE 2
|
|
IF IS_ENTITY_READY(peds[mpf_gamer])
|
|
AND IS_ENTITY_READY(peds[mpf_hr])
|
|
AND IS_ENTITY_READY(peds[mpf_interviewee_m])
|
|
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 4)
|
|
REMOVE_PED_FOR_DIALOGUE(sConvo, 5)
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 4, peds[mpf_hr], "LIHRLady")
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 5, peds[mpf_interviewee_m], "LIInterviewee")
|
|
|
|
CLEAR_PED_TASKS(peds[mpf_gamer])
|
|
CLEAR_PED_TASKS(peds[mpf_interviewee_m])
|
|
|
|
syncedIDs[ssf_ambient_interview] = CREATE_SYNCHRONIZED_SCENE(vInterviewCoord, vInterviewRot)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_gamer], syncedIDs[ssf_ambient_interview], anim_dict_interview_1st, "hr_greet_gamer", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_interviewee_m], syncedIDs[ssf_ambient_interview], anim_dict_interview_1st, "hr_greet_m", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_hr], syncedIDs[ssf_ambient_interview], anim_dict_interview_1st, "hr_greet_f", INSTANT_BLEND_IN, WALK_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_TAG_SYNC_OUT, RBF_PLAYER_IMPACT)
|
|
|
|
mEvents[mef_ambient_interview].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LES_1A_IG_2", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
|
|
mEvents[mef_ambient_interview].iStage++
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
// scene is over, play exit loop
|
|
IF fSceneProg = 1.0
|
|
IF HAS_ANIM_DICT_LOADED(anim_dict_interview_1st_exit)
|
|
AND IS_ENTITY_READY(peds[mpf_gamer])
|
|
AND IS_ENTITY_READY(peds[mpf_interviewee_m])
|
|
|
|
CLEAR_PED_TASKS(peds[mpf_gamer])
|
|
CLEAR_PED_TASKS(peds[mpf_interviewee_m])
|
|
|
|
// syncedIDs[ssf_ambient_interview] = CREATE_SYNCHRONIZED_SCENE(vInterviewCoord, vInterviewRot)
|
|
// TASK_SYNCHRONIZED_SCENE(peds[mpf_gamer], syncedIDs[ssf_ambient_interview], anim_dict_interview_1st_exit, "hr_greet_exitloop_gamer", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
|
|
// TASK_SYNCHRONIZED_SCENE(peds[mpf_interviewee_m], syncedIDs[ssf_ambient_interview], anim_dict_interview_1st_exit, "hr_greet_exitloop_m", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_LOOP_WITHIN_SCENE, RBF_PLAYER_IMPACT)
|
|
// SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_interview], TRUE)
|
|
TASK_PLAY_ANIM_ADVANCED(peds[mpf_gamer], anim_dict_interview_1st_exit, "hr_greet_exitloop_gamer", vInterviewCoord, vInterviewRot, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0 , EULER_YXZ, AIK_DISABLE_LEG_IK)
|
|
TASK_PLAY_ANIM_ADVANCED(peds[mpf_interviewee_m], anim_dict_interview_1st_exit, "hr_greet_exitloop_m", vInterviewCoord, vInterviewRot, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE | AF_EXTRACT_INITIAL_OFFSET | AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION, 0 , EULER_YXZ, AIK_DISABLE_LEG_IK)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_gamer])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_interviewee_m])
|
|
|
|
IF NOT IS_PED_INJURED(peds[mpf_hr])
|
|
SET_PED_AS_NO_LONGER_NEEDED(peds[mpf_hr])
|
|
ENDIF
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_interview_1st)
|
|
|
|
mEvents[mef_ambient_interview].bAnimDictPrestreamed = FALSE
|
|
mEvents[mef_ambient_interview].iStage++
|
|
ENDIF
|
|
ELSE
|
|
SET_PED_RESET_FLAG(peds[mpf_interviewee_m], PRF_ExpandPedCapsuleFromSkeleton, TRUE)
|
|
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1072.958252,-250.495453,43.021278>>, <<-1069.429810,-248.660156,45.833778>>, 3.750000)
|
|
IF IS_PED_IN_CURRENT_CONVERSATION(peds[mpf_hr])
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Seamless exit for HR
|
|
IF IS_ENTITY_READY(peds[mpf_hr])
|
|
IF GET_SCRIPT_TASK_STATUS(peds[mpf_hr], SCRIPT_TASK_SYNCHRONIZED_SCENE) = PERFORMING_TASK
|
|
AND HAS_ANIM_EVENT_FIRED(peds[mpf_hr], GET_HASH_KEY("ENDS_IN_RUN"))
|
|
CPRINTLN(DEBUG_MIKE, "SeamlessExit: HR")
|
|
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_FORCE_MOTION_STATE(null, enum_to_int(MS_ON_FOOT_WALK))
|
|
TASK_GO_STRAIGHT_TO_COORD(null, <<-1071.8040, -241.9532, 41.2713>>, PEDMOVE_WALK)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(null, << -1065.5614, -241.8892, 38.7332 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING, 37.5678)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_hr], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Load the exit loop anims
|
|
IF mEvents[mef_ambient_interview].bAnimDictPrestreamed = FALSE
|
|
AND fSceneProg > 0.8
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_interview_1st_exit)
|
|
Load_Asset_Model(sAssetData, PROP_HACKY_SACK_01)
|
|
mEvents[mef_ambient_interview].bAnimDictPrestreamed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
// after bomb plant set up new interview scene
|
|
IF mission_stage >= enum_to_int(msf_st6_leave_building)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_interview_2nd)
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1068.497192,-248.066208,43.021240>>, <<-1069.539673,-248.631180,45.521240>>, 4.000000)
|
|
|
|
IF DOES_ENTITY_EXIST(peds[mpf_gamer]) DELETE_PED(peds[mpf_gamer]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_hr]) DELETE_PED(peds[mpf_hr]) ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(peds[mpf_interviewee_m])
|
|
IF NOT IS_PED_INJURED(peds[mpf_interviewee_m])
|
|
CLEAR_PED_TASKS(peds[mpf_interviewee_m])
|
|
ENDIF
|
|
ELSE
|
|
peds[mpf_interviewee_m] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1076.4138, -248.0054, 43.0211 >>, 295.9542)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_interviewee_m)
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(peds[mpf_interviewee_f])
|
|
peds[mpf_interviewee_f] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_f_heel, << -1082.2778, -247.6897, 43.0211 >> , 0.0)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_interviewee_f)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(peds[mpf_interviewer])
|
|
peds[mpf_interviewer] = CREATE_PED(PEDTYPE_MISSION,mod_hipster_m, << -1080.5645, -246.6328, 43.0211 >> , 0.0)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_interviewer)
|
|
ENDIF
|
|
|
|
Create_Prop(objects[mof_hacky_sack], PROP_HACKY_SACK_01, << -1081.5645, -246.6328, 43.0211 >>)
|
|
Unload_Asset_Model(sAssetData, PROP_HACKY_SACK_01)
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_hacky_sack].id, peds[mpf_interviewer], get_ped_bone_index(peds[mpf_interviewer], BONETAG_PH_R_HAND), <<0,0,0>>,<<0,0,0>>, TRUE)
|
|
|
|
//Swap out the dictionaries at this point
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_interview_1st_exit)
|
|
|
|
mEvents[mef_ambient_interview].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
IF IS_ENTITY_READY(peds[mpf_interviewer])
|
|
AND IS_ENTITY_READY(peds[mpf_interviewee_f])
|
|
AND IS_ENTITY_READY(peds[mpf_interviewee_m])
|
|
|
|
CLEAR_PED_TASKS(peds[mpf_interviewer])
|
|
CLEAR_PED_TASKS(peds[mpf_interviewee_m])
|
|
CLEAR_PED_TASKS(peds[mpf_interviewee_f])
|
|
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 4, peds[mpf_interviewer], "LIInterviewer")
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 5, peds[mpf_interviewee_m], "LIInterviewee")
|
|
|
|
mEvents[mef_ambient_interview].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 7
|
|
IF IS_ENTITY_READY(peds[mpf_interviewer])
|
|
AND IS_ENTITY_READY(peds[mpf_interviewee_f])
|
|
AND IS_ENTITY_READY(peds[mpf_interviewee_m])
|
|
IF CREATE_CONVERSATION(sConvo, "LS1AAUD", "LES_1A_IG_7", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
|
|
syncedIDs[ssf_ambient_interview] = CREATE_SYNCHRONIZED_SCENE(vInterviewCoord, vInterviewRot)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_interviewee_f], syncedIDs[ssf_ambient_interview], anim_dict_interview_2nd, "interview_f", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_interviewee_m], syncedIDs[ssf_ambient_interview], anim_dict_interview_2nd, "interview_m", INSTANT_BLEND_IN, WALK_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_TAG_SYNC_OUT, RBF_PLAYER_IMPACT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_interviewer], syncedIDs[ssf_ambient_interview], anim_dict_interview_2nd, "interview_boss", INSTANT_BLEND_IN, WALK_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_TAG_SYNC_OUT, RBF_PLAYER_IMPACT)
|
|
SET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_ambient_interview], 0.1)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(syncedIDs[ssf_ambient_interview], FALSE)
|
|
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_interview_2nd_exit)
|
|
|
|
mEvents[mef_ambient_interview].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 8
|
|
IF IS_ENTITY_READY(peds[mpf_interviewer])
|
|
AND IS_ENTITY_READY(peds[mpf_interviewee_f])
|
|
AND IS_ENTITY_READY(peds[mpf_interviewee_m])
|
|
// Detach the hacky sack
|
|
IF DOES_ENTITY_EXIST(objects[mof_hacky_sack].id)
|
|
AND IS_ENTITY_ATTACHED(objects[mof_hacky_sack].id)
|
|
AND IS_ENTITY_IN_ANGLED_AREA(objects[mof_hacky_sack].id, <<-1082.668457,-247.492935,43.021118>>, <<-1082.259766,-247.488403,43.121117>>, 0.350000)
|
|
DETACH_ENTITY(objects[mof_hacky_sack].id)
|
|
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[mof_hacky_sack].id)
|
|
ENDIF
|
|
|
|
// seamless exit, interviewer
|
|
IF GET_SCRIPT_TASK_STATUS(peds[mpf_interviewer], SCRIPT_TASK_SYNCHRONIZED_SCENE) = PERFORMING_TASK
|
|
IF HAS_ANIM_EVENT_FIRED(peds[mpf_interviewer], GET_HASH_KEY("ENDS_IN_WALK"))
|
|
|
|
CPRINTLN(DEBUG_MIKE, "SeamlessExit: Interviewer")
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_FORCE_MOTION_STATE(null, enum_to_int(MS_ON_FOOT_WALK))
|
|
//TASK_GO_STRAIGHT_TO_COORD(null, << -1073.7821, -250.8327, 43.0213 >>, PEDMOVE_WALK)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(null, << -1048.6239, -238.3391, 43.0213 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT, 288.1765)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_interviewer], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// seamless exit, interviewee
|
|
IF GET_SCRIPT_TASK_STATUS(peds[mpf_interviewee_m], SCRIPT_TASK_SYNCHRONIZED_SCENE) = PERFORMING_TASK
|
|
IF HAS_ANIM_EVENT_FIRED(peds[mpf_interviewee_m], GET_HASH_KEY("ENDS_IN_WALK"))
|
|
|
|
CPRINTLN(DEBUG_MIKE, "SeamlessExit: Interviewee_m")
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_FORCE_MOTION_STATE(null, enum_to_int(MS_ON_FOOT_WALK))
|
|
//TASK_GO_STRAIGHT_TO_COORD(null, << -1073.7821, -250.8327, 43.0213 >>, PEDMOVE_WALK)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(null, << -1051.1515, -236.2580, 43.0213 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_DEFAULT, 237.9632)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_interviewee_m], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_ANIM_DICT_LOADED(anim_dict_interview_2nd_exit)
|
|
IF fSceneProg = 1.0
|
|
CLEAR_PED_TASKS (peds[mpf_interviewee_f])
|
|
|
|
syncedIDs[ssf_ambient_interview] = CREATE_SYNCHRONIZED_SCENE(vInterviewCoord, vInterviewRot)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_interviewee_f], syncedIDs[ssf_ambient_interview], anim_dict_interview_2nd_exit, "interview_exitloop_f", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_PLAYER_IMPACT)
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_interview], true)
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_interview_2nd)
|
|
mEvents[mef_ambient_interview].bAnimDictPrestreamed = FALSE
|
|
mEvents[mef_ambient_interview].iStage++
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_MIKE, "EXIT LOOP DICTIONARY HAS NOT LOADED!")
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 9
|
|
mEvents[mef_ambient_interview].iStage++
|
|
|
|
// // Finished, walking to the boardroom
|
|
// IF NOT IS_SCRIPT_TASK_RUNNING_OR_STARTING(peds[mpf_interviewer], SCRIPT_TASK_PERFORM_SEQUENCE)
|
|
// IF IS_SAFE_TO_START_CONVERSATION()
|
|
// AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), peds[mpf_interviewer]) < 3.0
|
|
// IF CREATE_CONVERSATION(sConvo, str_dialogue, "LES1A_WATCH", CONV_PRIORITY_HIGH)
|
|
// mEvents[mef_ambient_interview].iStage++
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
IF DOES_ENTITY_EXIST(peds[mpf_interviewee_f])
|
|
AND NOT IS_PED_INJURED(peds[mpf_interviewee_f])
|
|
IF NOT bIntervieweeFemaleGreet
|
|
AND mEvents[mef_ambient_interview].iStage > 8
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), peds[mpf_interviewee_f]) < 3.0
|
|
IF NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_interviewee_f])
|
|
PLAY_PED_AMBIENT_SPEECH(peds[mpf_interviewee_f], "GENERIC_HI", SPEECH_PARAMS_FORCE)
|
|
bIntervieweeFemaleGreet = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
ENDPROC
|
|
|
|
PROC event_ambient_office()
|
|
// track and store scene progress
|
|
FLOAT fSceneProg
|
|
BOOL bCreatePeds
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(syncedIDs[ssf_ambient_office])
|
|
fSceneProg = GET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_ambient_office])
|
|
ELSE
|
|
fSceneProg = 1.0
|
|
ENDIF
|
|
|
|
SWITCH mEvents[mef_ambient_office].iStage
|
|
CASE 1
|
|
// Firstly check all assets are ready for this to begin
|
|
BOOL bAreAssetsReady
|
|
|
|
IF HAS_MODEL_LOADED(mod_hipster_m)
|
|
|
|
SWITCH int_to_enum(mission_stage_flag, mission_stage)
|
|
CASE msf_st3_go_to_computer
|
|
IF HAS_ANIM_DICT_LOADED(anim_dict_airguitar_1st)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_airguitar_1st_exit)
|
|
AND HAS_MODEL_LOADED(PROP_MONITOR_01D)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1082.850098,-244.797516,42.795040>>, <<-1073.899292,-248.911301,45.521118>>, 1.000000)
|
|
IF NOT bSwappedMonitorToPopups
|
|
CREATE_MODEL_SWAP(v_engineer_monitor, 1.0, PROP_MONITOR_LI, PROP_MONITOR_01D, TRUE)
|
|
Unload_Asset_Model(sAssetData, PROP_MONITOR_01D)
|
|
bSwappedMonitorToPopups = TRUE
|
|
ENDIF
|
|
bCreatePeds = TRUE
|
|
bAreAssetsReady = TRUE
|
|
mEvents[mef_ambient_office].iStage = 101
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE msf_st4_mini_game
|
|
FALLTHRU
|
|
CASE msf_st5_plant_bomb
|
|
IF HAS_ANIM_DICT_LOADED(anim_dict_airguitar_1st_exit)
|
|
bCreatePeds = TRUE
|
|
bAreAssetsReady = TRUE
|
|
mEvents[mef_ambient_office].iStage = 3
|
|
ENDIF
|
|
BREAK
|
|
CASE msf_st6_leave_building
|
|
IF HAS_ANIM_DICT_LOADED(anim_dict_airguitar_2nd)
|
|
bCreatePeds = TRUE
|
|
bAreAssetsReady = TRUE
|
|
mEvents[mef_ambient_office].iStage = 5
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF bAreAssetsReady
|
|
AND bCreatePeds
|
|
IF DOES_ENTITY_EXIST(peds[mpf_office_boss]) DELETE_PED(peds[mpf_office_boss]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_office_a]) DELETE_PED(peds[mpf_office_a]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_office_b]) DELETE_PED(peds[mpf_office_b]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_office_c]) DELETE_PED(peds[mpf_office_c]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_office_d]) DELETE_PED(peds[mpf_office_d]) ENDIF
|
|
|
|
peds[mpf_office_boss] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1064.7488, -238.4493, 43.0211 >>, 54.0951)
|
|
peds[mpf_office_a] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1064.7488, -238.4493, 43.0211 >>, 54.0951)
|
|
peds[mpf_office_b] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1064.7488, -238.4493, 43.0211 >>, 54.0951)
|
|
peds[mpf_office_c] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1064.7488, -238.4493, 43.0211 >>, 54.0951)
|
|
peds[mpf_office_d] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1063.5718, -246.7145, 44.0194 >>, -22.918)
|
|
SET_PED_NAME_DEBUG(peds[mpf_office_boss], "OFFICE_boss")
|
|
SET_PED_NAME_DEBUG(peds[mpf_office_a], "OFFICE_a")
|
|
SET_PED_NAME_DEBUG(peds[mpf_office_b], "OFFICE_b")
|
|
SET_PED_NAME_DEBUG(peds[mpf_office_c], "OFFICE_c")
|
|
SET_PED_NAME_DEBUG(peds[mpf_office_d], "OFFICE_d")
|
|
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_office_boss)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_office_a)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_office_b)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_office_c)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_office_d)
|
|
|
|
// set up chairs
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_office_boss_chair].id)
|
|
objects[mof_office_boss_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1068.0780,-238.9636,43.0229>>, 1.0, mod_chair)
|
|
IF DOES_ENTITY_EXIST(objects[mof_office_boss_chair].id)
|
|
SET_ENTITY_COORDS_NO_OFFSET(objects[mof_office_boss_chair].id, <<-1068.0780,-238.9636,43.0229>>)
|
|
SET_ENTITY_ROTATION(objects[mof_office_boss_chair].id, <<-0.0000, -0.0000, 52.50>>)
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_office_boss_chair].id, peds[mpf_office_boss], FALSE)
|
|
FREEZE_ENTITY_POSITION(objects[mof_office_boss_chair].id, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_office_a_chair].id)
|
|
objects[mof_office_a_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1066.25, -238.04, 43.02>>, 1.0, mod_chair)
|
|
IF DOES_ENTITY_EXIST(objects[mof_office_a_chair].id)
|
|
IF (mEvents[mef_ambient_office].iStage = 3)
|
|
OR (mEvents[mef_ambient_office].iStage = 4)
|
|
SET_ENTITY_COORDS_NO_OFFSET(objects[mof_office_a_chair].id, <<-1065.5271, -237.9645, 43.0258>>)
|
|
SET_ENTITY_ROTATION(objects[mof_office_a_chair].id, <<-0.1264, 0.0338, -88.9461>>)
|
|
ELSE
|
|
//ATTACH_ENTITY_TO_ENTITY(objects[mof_office_a_chair].id, peds[mpf_office_a], get_ped_bone_index(peds[mpf_office_a], BONETAG_PH_R_HAND),<<0,0,0>>,<<0,0,0>>)
|
|
ENDIF
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_office_a_chair].id, peds[mpf_office_a], FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_office_b_chair].id)
|
|
objects[mof_office_b_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1065.51, -239.51, 43.02>>, 1.0, mod_chair)
|
|
IF DOES_ENTITY_EXIST(objects[mof_office_b_chair].id)
|
|
IF (mEvents[mef_ambient_office].iStage = 3)
|
|
OR (mEvents[mef_ambient_office].iStage = 4)
|
|
SET_ENTITY_COORDS_NO_OFFSET(objects[mof_office_b_chair].id, <<-1064.8973, -240.5339, 43.0251>>)
|
|
SET_ENTITY_ROTATION(objects[mof_office_b_chair].id, <<-0.0000, -0.0005, 167.7005>>)
|
|
ELSE
|
|
//ATTACH_ENTITY_TO_ENTITY(objects[mof_office_b_chair].id, peds[mpf_office_b], get_ped_bone_index(peds[mpf_office_b], BONETAG_PH_R_HAND),<<0,0,0>>,<<0,0,0>>)
|
|
ENDIF
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_office_b_chair].id, peds[mpf_office_b], FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_office_c_chair].id)
|
|
objects[mof_office_c_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1057.86, -243.51, 43.02>>, 1.0, mod_chair)
|
|
IF DOES_ENTITY_EXIST(objects[mof_office_c_chair].id)
|
|
SET_ENTITY_COORDS_NO_OFFSET(objects[mof_office_c_chair].id, <<-1058.1906, -243.0693, 43.0229>>)
|
|
SET_ENTITY_ROTATION(objects[mof_office_c_chair].id, <<-0.0000, -0.0000, -134.5749>>)
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_office_c_chair].id, peds[mpf_office_c], FALSE)
|
|
FREEZE_ENTITY_POSITION(objects[mof_office_c_chair].id, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_office_d_chair].id)
|
|
objects[mof_office_d_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1063.61, -246.65, 43.02>>, 1.0, mod_chair)
|
|
IF DOES_ENTITY_EXIST(objects[mof_office_d_chair].id)
|
|
|
|
IF mission_stage < enum_to_int(msf_st4_mini_game)
|
|
SET_ENTITY_COORDS(objects[mof_office_d_chair].id, <<-1063.832, -246.746, 43.023>>)
|
|
SET_ENTITY_ROTATION(objects[mof_office_d_chair].id, <<-0.04, 0.04, 159.275>>)
|
|
CPRINTLN(DEBUG_MIKE, "[CHAIR D] Moved inside of event_ambient_office()")
|
|
ENDIF
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_office_d_chair].id, peds[mpf_office_d], FALSE)
|
|
|
|
//FREEZE_ENTITY_POSITION(objects[mof_office_d_chair].id, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 101
|
|
IF IS_ENTITY_READY(peds[mpf_office_c])
|
|
AND IS_ENTITY_READY(peds[mpf_office_d])
|
|
AND IS_ENTITY_READY(objects[mof_office_d_chair].id)
|
|
|
|
syncedIDs[ssf_ambient_office] = CREATE_SYNCHRONIZED_SCENE(<< -1067.002, -239.245, 43.021 >>, << -0.000, 0.000, 27.750 >>)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_c], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st_exit, "air_guitar_01_exitloop_c", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_d], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st_exit, "air_guitar_01_exitloop_d", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_d_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_exitloop_chair_d", anim_dict_airguitar_1st_exit, NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_office], TRUE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_c])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_d])
|
|
|
|
mEvents[mef_ambient_office].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 102
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1068.843140,-246.079193,42.771278>>, <<-1067.171875,-249.250885,46.783058>>, 5.750000)
|
|
AND REQUEST_MISSION_AUDIO_BANK("Lester1A_01")
|
|
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 7, peds[mpf_office_boss], "LIOffice1")
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 8, peds[mpf_office_a], "LIOffice2")
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 6, peds[mpf_office_b], "LIOfficeGroup")
|
|
|
|
INT i
|
|
FOR i = 0 TO iUsablePopups-1
|
|
IF sPopups[i].iType != -1
|
|
AND sPopups[i].iSfxLoop != -1
|
|
AND sPopups[i].bSfxPlaying = FALSE
|
|
STRING strSFX
|
|
IF iPopupsSFXPlaying < 6
|
|
SWITCH (iPopupsSFXPlaying)
|
|
CASE 0 strSFX = "POPUP_MUSIC_01" BREAK
|
|
CASE 1 strSFX = "POPUP_MUSIC_02" BREAK
|
|
CASE 2 strSFX = "POPUP_MUSIC_03" BREAK
|
|
CASE 3 strSFX = "POPUP_MUSIC_04" BREAK
|
|
CASE 4 strSFX = "POPUP_MUSIC_05" BREAK
|
|
CASE 5 strSFX = "POPUP_MUSIC_06" BREAK
|
|
DEFAULT strSFX = "POPUP_MUSIC_RND" BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
strSFX = "POPUP_MUSIC_RND"
|
|
ENDIF
|
|
PLAY_SOUND_FROM_COORD(sPopups[i].iSfxLoop, strSFX, <<-1059.63, -244.61, 43.92>>, "LESTER1A_SOUNDS")
|
|
SET_VARIABLE_ON_SOUND(sPopups[i].iSfxLoop, "State", 0)
|
|
CPRINTLN(DEBUG_MIKE, "INIT_MINIGAME PLAY POPUP LOOP SFX:", i)
|
|
sPopups[i].bSfxPlaying = TRUE
|
|
iPopupsSFXPlaying++
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
REPEAT COUNT_OF(sPopups) i
|
|
IF sPopups[i].bSfxPlaying
|
|
AND sPopups[i].iSfxLoop != -1
|
|
SET_VARIABLE_ON_SOUND(sPopups[i].iSfxLoop, "TracksPlaying", TO_FLOAT(CLAMP_INT(iPopupsSFXPlaying, 1, 12)))
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
mEvents[mef_ambient_office].iStage = 2
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
// first phase main animation
|
|
IF IS_ENTITY_READY(peds[mpf_office_a])
|
|
AND IS_ENTITY_READY(peds[mpf_office_b])
|
|
AND IS_ENTITY_READY(peds[mpf_office_c])
|
|
AND IS_ENTITY_READY(peds[mpf_office_d])
|
|
AND IS_ENTITY_READY(peds[mpf_office_boss])
|
|
AND IS_ENTITY_READY(objects[mof_office_a_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_b_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_d_chair].id)
|
|
IF (IS_SAFE_TO_START_CONVERSATION()
|
|
AND CREATE_CONVERSATION(sConvo, str_dialogue, "LES_1A_IG_3", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES))
|
|
OR IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
syncedIDs[ssf_ambient_office] = CREATE_SYNCHRONIZED_SCENE(<< -1067.002, -239.245, 43.021 >>, << -0.000, 0.000, 27.750 >>)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_office_boss], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st, "air_guitar_01_boss", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_office_a], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st, "air_guitar_01_a", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_office_b], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st, "air_guitar_01_b", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_office_c], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st, "air_guitar_01_c", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_office_d], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st, "air_guitar_01_d", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_boss])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_a])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_b])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_c])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_d])
|
|
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_boss_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_chair_boss", anim_dict_airguitar_1st, NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_a_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_chair_a", anim_dict_airguitar_1st, NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_b_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_chair_b", anim_dict_airguitar_1st, NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_d_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_chair_d", anim_dict_airguitar_1st, NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
|
|
|
|
mEvents[mef_ambient_office].bSafeAfterSkip = TRUE
|
|
mEvents[mef_ambient_office].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
// first phase exit loop
|
|
IF fSceneProg = 1.0
|
|
OR (IS_CUTSCENE_PLAYING() AND mission_stage = enum_to_int(msf_st4_mini_game) AND mission_substage > 5)
|
|
IF IS_ENTITY_READY(peds[mpf_office_a])
|
|
AND IS_ENTITY_READY(peds[mpf_office_b])
|
|
AND IS_ENTITY_READY(peds[mpf_office_c])
|
|
AND IS_ENTITY_READY(peds[mpf_office_d])
|
|
AND IS_ENTITY_READY(peds[mpf_office_boss])
|
|
AND IS_ENTITY_READY(objects[mof_office_a_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_b_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_d_chair].id)
|
|
|
|
syncedIDs[ssf_ambient_office] = CREATE_SYNCHRONIZED_SCENE(<< -1067.002, -239.245, 43.021 >>, << -0.000, 0.000, 27.750 >>)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_boss], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st_exit, "air_guitar_01_exitloop_boss", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_a], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st_exit, "air_guitar_01_exitloop_a", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_b], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st_exit, "air_guitar_01_exitloop_b", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_c], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st_exit, "air_guitar_01_exitloop_c", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_boss])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_a])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_b])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_c])
|
|
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_boss_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_exitloop_chair_boss", anim_dict_airguitar_1st_exit, NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_a_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_exitloop_chair_a", anim_dict_airguitar_1st_exit, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_b_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_exitloop_chair_b", anim_dict_airguitar_1st_exit, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
|
|
IF mission_stage < enum_to_int(msf_st4_mini_game)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_d], syncedIDs[ssf_ambient_office], anim_dict_airguitar_1st_exit, "air_guitar_01_exitloop_d", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_d_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_exitloop_chair_d", anim_dict_airguitar_1st_exit, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_d])
|
|
ENDIF
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_office], TRUE)
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_1st)
|
|
|
|
mEvents[mef_ambient_office].bSafeAfterSkip = TRUE
|
|
mEvents[mef_ambient_office].bAnimDictPrestreamed = FALSE
|
|
mEvents[mef_ambient_office].iStage++
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_PED_INJURED(peds[mpf_office_boss])
|
|
IF IS_PED_IN_CURRENT_CONVERSATION(peds[mpf_office_boss])
|
|
AND VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-1066.78, -239.63, 43.86>>) > 225 // 15^2
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// stream in the exit loop
|
|
IF mEvents[mef_ambient_office].bAnimDictPrestreamed = FALSE
|
|
AND fSceneProg > 0.8
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_airguitar_1st_exit)
|
|
mEvents[mef_ambient_office].bAnimDictPrestreamed = TRUE
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(peds[mpf_office_boss])
|
|
IF (fSceneProg > 0.745 AND fSceneProg < 0.930)
|
|
IF NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_boss])
|
|
CPRINTLN(DEBUG_MIKE, "PLAY_PED_AMBIENT_SPEECH: AIRROCKING")
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_boss], "AIRROCKING", "LIENGINEER2", SPEECH_PARAMS_FORCE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(peds[mpf_office_d])
|
|
// Process drumming ambient speech
|
|
IF (fSceneProg > 0.745 AND fSceneProg < 0.930)
|
|
IF NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_d])
|
|
CPRINTLN(DEBUG_MIKE, "PLAY_PED_AMBIENT_SPEECH: Drumming")
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_d], "DRUMMING", "AIRDRUMMER", SPEECH_PARAMS_FORCE)
|
|
ENDIF
|
|
ELSE
|
|
IF IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_d])
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_office_d])
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
IF mission_stage >= enum_to_int(msf_st6_leave_building)
|
|
mEvents[mef_ambient_office].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
// second office scene
|
|
IF IS_ENTITY_READY(peds[mpf_office_a])
|
|
AND IS_ENTITY_READY(peds[mpf_office_b])
|
|
AND IS_ENTITY_READY(peds[mpf_office_c])
|
|
AND IS_ENTITY_READY(peds[mpf_office_d])
|
|
AND IS_ENTITY_READY(peds[mpf_office_boss])
|
|
AND IS_ENTITY_READY(objects[mof_office_a_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_b_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_d_chair].id)
|
|
|
|
CLEAR_PED_TASKS(peds[mpf_office_boss])
|
|
CLEAR_PED_TASKS(peds[mpf_office_a])
|
|
CLEAR_PED_TASKS(peds[mpf_office_b])
|
|
CLEAR_PED_TASKS(peds[mpf_office_c])
|
|
CLEAR_PED_TASKS(peds[mpf_office_d])
|
|
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_a_chair], INSTANT_BLEND_OUT)
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_b_chair], INSTANT_BLEND_OUT)
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_d_chair], INSTANT_BLEND_OUT)
|
|
|
|
syncedIDs[ssf_ambient_office] = CREATE_SYNCHRONIZED_SCENE(<< -1067.002, -239.245, 43.021 >>, << -0.000, 0.000, 27.750 >>)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_boss], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd, "air_guitar_02_boss", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_a], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd, "air_guitar_02_a", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_b], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd, "air_guitar_02_b", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_c], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd, "air_guitar_02_c", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_d], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd, "air_guitar_02_d", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_boss])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_a])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_b])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_c])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_d])
|
|
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_a_chair], syncedIDs[ssf_ambient_office], "air_guitar_02_chair_a", anim_dict_airguitar_2nd, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_b_chair], syncedIDs[ssf_ambient_office], "air_guitar_02_chair_b", anim_dict_airguitar_2nd, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_d_chair], syncedIDs[ssf_ambient_office], "air_guitar_02_chair_d", anim_dict_airguitar_2nd, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_1st_exit)
|
|
|
|
mEvents[mef_ambient_office].bSafeAfterSkip = TRUE
|
|
mEvents[mef_ambient_office].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
// second phase exit loop
|
|
IF fSceneProg = 1.0
|
|
IF IS_ENTITY_READY(peds[mpf_office_a])
|
|
AND IS_ENTITY_READY(peds[mpf_office_b])
|
|
AND IS_ENTITY_READY(peds[mpf_office_c])
|
|
AND IS_ENTITY_READY(peds[mpf_office_d])
|
|
AND IS_ENTITY_READY(peds[mpf_office_boss])
|
|
AND IS_ENTITY_READY(objects[mof_office_a_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_b_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_d_chair].id)
|
|
|
|
CLEAR_PED_TASKS(peds[mpf_office_boss])
|
|
CLEAR_PED_TASKS(peds[mpf_office_a])
|
|
CLEAR_PED_TASKS(peds[mpf_office_b])
|
|
CLEAR_PED_TASKS(peds[mpf_office_c])
|
|
CLEAR_PED_TASKS(peds[mpf_office_d])
|
|
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_a_chair], INSTANT_BLEND_OUT)
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_b_chair], INSTANT_BLEND_OUT)
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_d_chair], INSTANT_BLEND_OUT)
|
|
|
|
syncedIDs[ssf_ambient_office] = CREATE_SYNCHRONIZED_SCENE(<< -1067.002, -239.245, 43.021 >>, << -0.000, 0.000, 27.750 >>)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_boss], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd_exit, "air_guitar_02_exit_boss", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_a], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd_exit, "air_guitar_02_exit_a", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_b], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd_exit, "air_guitar_02_exit_b", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_c], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd_exit, "air_guitar_02_exit_c", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_d], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd_exit, "air_guitar_02_exit_d", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_boss])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_a])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_b])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_c])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_d])
|
|
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_a_chair], syncedIDs[ssf_ambient_office], "air_guitar_02_exit_chair_a", anim_dict_airguitar_2nd_exit, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_b_chair], syncedIDs[ssf_ambient_office], "air_guitar_02_exit_chair_b", anim_dict_airguitar_2nd_exit, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_d_chair], syncedIDs[ssf_ambient_office], "air_guitar_02_exit_chair_d", anim_dict_airguitar_2nd_exit, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
|
|
// cut off drumming
|
|
IF IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_d])
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_office_d])
|
|
ENDIF
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_2nd)
|
|
mEvents[mef_ambient_office].iStage++
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_PED_INJURED(peds[mpf_office_boss])
|
|
IF IS_PED_IN_CURRENT_CONVERSATION(peds[mpf_office_boss])
|
|
AND VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-1066.78, -239.63, 43.86>>) > 225 // 15^2
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Stream in the exit loops
|
|
IF mEvents[mef_ambient_office].bAnimDictPrestreamed = FALSE
|
|
AND fSceneProg > 0.8
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_airguitar_2nd_exit)
|
|
mEvents[mef_ambient_office].bAnimDictPrestreamed = TRUE
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(peds[mpf_office_d])
|
|
IF (fSceneProg > 0.135 AND fSceneProg < 0.216)
|
|
OR (fSceneProg > 0.329 AND fSceneProg < 0.419)
|
|
OR (fSceneProg > 0.824 AND fSceneProg < 0.99)
|
|
IF NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_d])
|
|
CPRINTLN(DEBUG_MIKE, "PLAY_PED_AMBIENT_SPEECH: Drumming")
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_d], "DRUMMING", "AIRDRUMMER", SPEECH_PARAMS_FORCE)
|
|
ENDIF
|
|
ELSE
|
|
// cut off drumming
|
|
IF IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_d])
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_office_d])
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 7
|
|
IF fSceneProg >= 1.0
|
|
IF IS_ENTITY_READY(peds[mpf_office_a])
|
|
AND IS_ENTITY_READY(peds[mpf_office_b])
|
|
AND IS_ENTITY_READY(peds[mpf_office_c])
|
|
AND IS_ENTITY_READY(peds[mpf_office_d])
|
|
AND IS_ENTITY_READY(peds[mpf_office_boss])
|
|
AND IS_ENTITY_READY(objects[mof_office_a_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_b_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_d_chair].id)
|
|
|
|
CLEAR_PED_TASKS(peds[mpf_office_boss])
|
|
CLEAR_PED_TASKS(peds[mpf_office_a])
|
|
CLEAR_PED_TASKS(peds[mpf_office_b])
|
|
CLEAR_PED_TASKS(peds[mpf_office_c])
|
|
CLEAR_PED_TASKS(peds[mpf_office_d])
|
|
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_boss_chair], INSTANT_BLEND_OUT)
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_a_chair], INSTANT_BLEND_OUT)
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_b_chair], INSTANT_BLEND_OUT)
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_d_chair], INSTANT_BLEND_OUT)
|
|
|
|
syncedIDs[ssf_ambient_office] = CREATE_SYNCHRONIZED_SCENE(<< -1067.002, -239.245, 43.021 >>, << -0.000, 0.000, 27.750 >>)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_boss], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd_exit, "air_guitar_01_exitloop_boss", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_a], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd_exit, "air_guitar_01_exitloop_a", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_b], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd_exit, "air_guitar_01_exitloop_b", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_c], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd_exit, "air_guitar_01_exitloop_c", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_d], syncedIDs[ssf_ambient_office], anim_dict_airguitar_2nd_exit, "air_guitar_01_exitloop_d", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_boss])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_a])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_b])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_c])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_d])
|
|
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_boss_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_exitloop_chair_boss", anim_dict_airguitar_2nd_exit, NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_a_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_exitloop_chair_a", anim_dict_airguitar_2nd_exit, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
//SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_b_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_exitloop_chair_b", anim_dict_airguitar_2nd_exit, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_d_chair], syncedIDs[ssf_ambient_office], "air_guitar_01_exitloop_chair_d", anim_dict_airguitar_2nd_exit, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_office], TRUE)
|
|
|
|
// cut off drumming
|
|
IF IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_d])
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_office_d])
|
|
ENDIF
|
|
|
|
mEvents[mef_ambient_office].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
PROC event_ambient_paper_throw()
|
|
|
|
IF mEvents[mef_ambient_paper_throw].iStage = 1
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_office_thrower_f_chair].id)
|
|
AND DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<< -1054.1595, -241.7358, 43.6537 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
objects[mof_office_thrower_f_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<< -1054.1595, -241.7358, 43.6537 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_office_thrower_m_chair].id)
|
|
AND DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<< -1053.2346, -245.2269, 43.6272 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
objects[mof_office_thrower_m_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<< -1053.2346, -245.2269, 43.6272 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
ENDIF
|
|
|
|
IF HAS_MODEL_LOADED(mod_hipster_m)
|
|
AND HAS_MODEL_LOADED(mod_hipster_f)
|
|
AND HAS_MODEL_LOADED(PROP_PAPER_BALL)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_paper_throw)
|
|
AND DOES_ENTITY_EXIST(objects[mof_office_thrower_f_chair].id)
|
|
AND DOES_ENTITY_EXIST(objects[mof_office_thrower_m_chair].id)
|
|
AND (NOT IS_CUTSCENE_PLAYING() OR GET_CUTSCENE_TIME() > 3700)
|
|
|
|
// create the paper throwing peds
|
|
peds[mpf_office_paper_f] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_f, << -1054.9045, -241.1034, 43.0211 >>, 297.0785)
|
|
peds[mpf_office_paper_m] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, << -1053.4689, -243.6800, 43.0211 >>, 118.6611)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_office_paper_f)
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_office_paper_m)
|
|
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_office_thrower_f_chair].id, peds[mpf_office_paper_f], FALSE)
|
|
SET_ENTITY_NO_COLLISION_ENTITY(objects[mof_office_thrower_m_chair].id, peds[mpf_office_paper_m], FALSE)
|
|
|
|
iPaperThrow = 1
|
|
bFirstThrow = TRUE
|
|
bJustThrown = FALSE
|
|
mEvents[mef_ambient_paper_throw].iStage++
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF mEvents[mef_ambient_paper_throw].iStage > 1
|
|
|
|
SWITCH mEvents[mef_ambient_paper_throw].iStage
|
|
CASE 2
|
|
|
|
// Do random throw anim once base has finished
|
|
IF IS_ENTITY_READY(peds[mpf_office_paper_f])
|
|
AND IS_ENTITY_READY(peds[mpf_office_paper_m])
|
|
AND IS_ENTITY_READY(objects[mof_office_thrower_f_chair].id)
|
|
AND IS_ENTITY_READY(objects[mof_office_thrower_m_chair].id)
|
|
|
|
FLOAT fRandProb
|
|
fRandProb = GET_RANDOM_FLOAT_IN_RANGE(0.0, 1.0)
|
|
|
|
// scene is already running and has reached the end
|
|
// probability test: 60% chance of the paper throw happening
|
|
// peds not already speaking ambient dialogue
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(syncedIDs[ssf_ambient_paper_throw])
|
|
AND GET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_ambient_paper_throw]) = 1.0
|
|
AND (fRandProb <= 0.60 OR bFirstThrow)
|
|
AND NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_paper_f])
|
|
AND NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_paper_m])
|
|
AND NOT bJustThrown
|
|
|
|
// its the first throw, iPaperThrow = 1 and the player is walking down the office
|
|
// OR not first throw
|
|
AND ((bFirstThrow AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1060.480835,-240.979706,43.021118>>, <<-1053.232910,-237.168442,45.771118>>, 3.750000))
|
|
OR NOT bFirstThrow)
|
|
|
|
STRING paper_anims_f, paper_anims_m, paper_anims_f_chair, paper_anims_m_chair, paper_anims_ball
|
|
SWITCH iPaperThrow
|
|
CASE 0
|
|
paper_anims_f = "paper_throw_01_f"
|
|
paper_anims_m = "paper_throw_01_m"
|
|
paper_anims_f_chair = "paper_throw_01_f_chair"
|
|
paper_anims_m_chair = "paper_throw_01_m_chair"
|
|
paper_anims_ball = "paper_throw_01_paper_ball"
|
|
BREAK
|
|
CASE 1
|
|
paper_anims_f = "paper_throw_03_f"
|
|
paper_anims_m = "paper_throw_03_m"
|
|
paper_anims_f_chair = "paper_throw_03_f_chair"
|
|
paper_anims_m_chair = "paper_throw_03_m_chair"
|
|
paper_anims_ball = "paper_throw_03_paper_ball"
|
|
BREAK
|
|
CASE 2
|
|
paper_anims_f = "paper_throw_06_f"
|
|
paper_anims_m = "paper_throw_06_m"
|
|
paper_anims_f_chair = "paper_throw_06_f_chair"
|
|
paper_anims_m_chair = "paper_throw_06_m_chair"
|
|
paper_anims_ball = "paper_throw_06_paper_ball"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// create paper ball
|
|
Create_Prop(objects[mof_paper_ball], PROP_PAPER_BALL, << -1052.7799, -245.6611, 43.0211 >>)
|
|
SET_ENTITY_COLLISION(objects[mof_paper_ball].id, FALSE)
|
|
//ATTACH_ENTITY_TO_ENTITY(objects[mof_paper_ball].id, peds[mpf_office_paper_m], get_ped_bone_index(peds[mpf_office_paper_m], BONETAG_PH_L_HAND),<<0,0,0>>,<<0,0,0>>)
|
|
|
|
syncedIDs[ssf_ambient_paper_throw] = CREATE_SYNCHRONIZED_SCENE(v_bin_coord, v_bin_rot)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_paper_f], syncedIDs[ssf_ambient_paper_throw], anim_dict_paper_throw, paper_anims_f, SLOW_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_paper_m], syncedIDs[ssf_ambient_paper_throw], anim_dict_paper_throw, paper_anims_m, SLOW_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_thrower_f_chair], syncedIDs[ssf_ambient_paper_throw], paper_anims_f_chair, anim_dict_paper_throw, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_thrower_m_chair], syncedIDs[ssf_ambient_paper_throw], paper_anims_m_chair, anim_dict_paper_throw, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_paper_ball], syncedIDs[ssf_ambient_paper_throw], paper_anims_ball, anim_dict_paper_throw, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_paper_m])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_paper_f])
|
|
|
|
bFirstThrow = FALSE
|
|
bJustThrown = TRUE
|
|
|
|
iPaperThrow++
|
|
IF iPaperThrow > 2
|
|
iPaperThrow = 0
|
|
ENDIF
|
|
mEvents[mef_ambient_paper_throw].iStage++
|
|
|
|
// none of the above conditions were met, if anim has finished restart the loop section
|
|
ELIF NOT IS_SYNCHRONIZED_SCENE_RUNNING(syncedIDs[ssf_ambient_paper_throw])
|
|
OR GET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_ambient_paper_throw]) = 1.0
|
|
|
|
syncedIDs[ssf_ambient_paper_throw] = CREATE_SYNCHRONIZED_SCENE(v_bin_coord, v_bin_rot)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_paper_f], syncedIDs[ssf_ambient_paper_throw], anim_dict_paper_throw, "paper_throw_base_f", NORMAL_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_office_paper_m], syncedIDs[ssf_ambient_paper_throw], anim_dict_paper_throw, "paper_throw_base_m", NORMAL_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT )
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_thrower_f_chair], syncedIDs[ssf_ambient_paper_throw], "paper_throw_base_f_chair", anim_dict_paper_throw, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_office_thrower_m_chair], syncedIDs[ssf_ambient_paper_throw], "paper_throw_base_m_chair", anim_dict_paper_throw, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_paper_m])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_paper_f])
|
|
bJustThrown = FALSE
|
|
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-1053.111084,-242.029358,43.021278>>) < 24.3838 // 4.938 squared
|
|
IF GET_RANDOM_INT_IN_RANGE(0, 2) = 0
|
|
AND NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_paper_f])
|
|
SWITCH GET_RANDOM_INT_IN_RANGE(0, 2)
|
|
CASE 0
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_paper_f], "LES1A_BEAA", "LIFEINVADERF3", SPEECH_PARAMS_FORCE)
|
|
CDEBUG1LN(DEBUG_MIKE, "[Lester1A] PaperThrow F - AMB DIA A")
|
|
BREAK
|
|
CASE 1
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_paper_f], "LES1A_BFAA", "LIFEINVADERF3", SPEECH_PARAMS_FORCE)
|
|
CDEBUG1LN(DEBUG_MIKE, "[Lester1A] PaperThrow F - AMB DIA B")
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ELIF NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_paper_m])
|
|
SWITCH GET_RANDOM_INT_IN_RANGE(0, 2)
|
|
CASE 0
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_paper_m], "LES1A_AYAA", "LIFEINVADERM3", SPEECH_PARAMS_FORCE)
|
|
CDEBUG1LN(DEBUG_MIKE, "[Lester1A] PaperThrow M - AMB DIA A")
|
|
BREAK
|
|
CASE 1
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_paper_m], "LES1A_AZAA", "LIFEINVADERM3", SPEECH_PARAMS_FORCE)
|
|
CDEBUG1LN(DEBUG_MIKE, "[Lester1A] PaperThrow M - AMB DIA B")
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
// Check if paper ball has hit the bin locate to detach it from the animation
|
|
IF IS_ENTITY_IN_ANGLED_AREA(objects[mof_paper_ball].id, <<-1054.525757,-240.298752,43.021118>>, <<-1054.168579,-240.197128,43.121117>>, 0.500000)
|
|
OR IS_ENTITY_IN_ANGLED_AREA(objects[mof_paper_ball].id, <<-1053.177979,-241.098190,43.021118>>, <<-1053.063232,-241.393219,43.121117>>, 0.500000)
|
|
IF IS_ENTITY_ATTACHED(objects[mof_paper_ball].id)
|
|
DETACH_ENTITY(objects[mof_paper_ball].id)
|
|
ELSE
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_paper_ball], NORMAL_BLEND_OUT)
|
|
ENDIF
|
|
FREEZE_ENTITY_POSITION(objects[mof_paper_ball].id,TRUE)
|
|
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[mof_paper_ball].id)
|
|
mEvents[mef_ambient_paper_throw].iStage = 2
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC event_ambient_boardroom()
|
|
// track and store scene progress
|
|
float fSceneProg_main
|
|
float fSceneProg_additional
|
|
BOOL bCreatePeds
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(syncedIDs[ssf_ambient_boardroom_main])
|
|
fSceneProg_main = GET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_ambient_boardroom_main])
|
|
ELSE
|
|
fSceneProg_main = 1.0
|
|
ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(syncedIDs[ssf_ambient_boardroom_additional])
|
|
fSceneProg_additional = GET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_ambient_boardroom_additional])
|
|
ELSE
|
|
fSceneProg_additional = 1.0
|
|
ENDIF
|
|
|
|
// Creation
|
|
IF mEvents[mef_ambient_boardroom].iStage = 1
|
|
IF HAS_MODEL_LOADED(IG_JAY_NORRIS)
|
|
AND HAS_MODEL_LOADED(mod_hipster_m)
|
|
AND HAS_MODEL_LOADED(mod_hipster_f)
|
|
AND (NOT IS_CUTSCENE_PLAYING() OR GET_CUTSCENE_TIME() > 3700)
|
|
SWITCH int_to_enum(mission_stage_flag, mission_stage)
|
|
CASE msf_st3_go_to_computer
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1082.850098,-244.797516,42.795040>>, <<-1073.899292,-248.911301,45.521118>>, 1.000000)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_boardroom_main)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_boardroom_intro)
|
|
bCreatePeds = TRUE
|
|
mEvents[mef_ambient_boardroom].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE msf_st4_mini_game FALLTHRU
|
|
CASE msf_st5_plant_bomb
|
|
IF HAS_ANIM_DICT_LOADED(anim_dict_boardroom_main)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_boardroom_intro)
|
|
bCreatePeds = TRUE
|
|
mEvents[mef_ambient_boardroom].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE msf_st6_leave_building
|
|
IF HAS_ANIM_DICT_LOADED(anim_dict_boardroom_main)
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_boardroom_intro)
|
|
bCreatePeds = TRUE
|
|
mEvents[mef_ambient_boardroom].iStage++
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF bCreatePeds
|
|
CPRINTLN(DEBUG_MIKE, "[***LS1***] event_ambient_boardroom() CREATING PEDS")
|
|
|
|
IF DOES_ENTITY_EXIST(peds[mpf_boardroom_norris])
|
|
CLEAR_PED_TASKS(peds[mpf_boardroom_norris])
|
|
ELSE
|
|
peds[mpf_boardroom_norris] = CREATE_PED(PEDTYPE_MISSION, IG_JAY_NORRIS, <<-1045.5, -229.0, 43.41>>, 0)
|
|
SET_PED_NAME_DEBUG(peds[mpf_boardroom_norris], "JayNorris")
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_boardroom_norris)
|
|
ENDIF
|
|
// IF DOES_ENTITY_EXIST(peds[mpf_boardroom_f_a])
|
|
// CLEAR_PED_TASKS(peds[mpf_boardroom_f_a])
|
|
// ELSE
|
|
// peds[mpf_boardroom_f_a] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_f, <<-1045.07, -229.78, 43.41>>, 0)
|
|
// SET_PED_NAME_DEBUG(peds[mpf_boardroom_f_a], "BoardFemaleA")
|
|
// Set_Life_Invader_Office_Ped_Variation(mpf_boardroom_f_a)
|
|
// ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_boardroom_f_b])
|
|
CLEAR_PED_TASKS(peds[mpf_boardroom_f_b])
|
|
ELSE
|
|
peds[mpf_boardroom_f_b] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_f, <<-1045.07, -229.78, 43.41>>, 0)
|
|
SET_PED_NAME_DEBUG(peds[mpf_boardroom_f_b], "BoardFemaleB")
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_boardroom_f_b)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_boardroom_f_c])
|
|
CLEAR_PED_TASKS(peds[mpf_boardroom_f_c])
|
|
ELSE
|
|
peds[mpf_boardroom_f_c] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_f, <<-1045.07, -229.78, 43.41>>, 0)
|
|
SET_PED_NAME_DEBUG(peds[mpf_boardroom_f_c], "BoardFemaleC")
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_boardroom_f_c)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_boardroom_m_a])
|
|
CLEAR_PED_TASKS(peds[mpf_boardroom_m_a])
|
|
ELSE
|
|
peds[mpf_boardroom_m_a] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, <<-1045.07, -229.78, 43.41>>, 0)
|
|
SET_PED_NAME_DEBUG(peds[mpf_boardroom_m_a], "BoardMaleA")
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_boardroom_m_a)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_boardroom_m_b])
|
|
CLEAR_PED_TASKS(peds[mpf_boardroom_m_b])
|
|
ELSE
|
|
peds[mpf_boardroom_m_b] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, <<-1045.07, -229.78, 43.41>>, 0)
|
|
SET_PED_NAME_DEBUG(peds[mpf_boardroom_m_b], "BoardMaleB")
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_boardroom_m_b)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_boardroom_m_e])
|
|
CLEAR_PED_TASKS(peds[mpf_boardroom_m_e])
|
|
ELSE
|
|
peds[mpf_boardroom_m_e] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, <<-1045.07, -229.78, 43.41>>, 0)
|
|
SET_PED_NAME_DEBUG(peds[mpf_boardroom_m_e], "BoardMaleE")
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_boardroom_m_e)
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_boardroom_m_f])
|
|
CLEAR_PED_TASKS(peds[mpf_boardroom_m_f])
|
|
ELSE
|
|
peds[mpf_boardroom_m_f] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_m, <<-1045.07, -229.78, 43.41>>, 0)
|
|
SET_PED_NAME_DEBUG(peds[mpf_boardroom_m_f], "BoardMaleF")
|
|
Set_Life_Invader_Office_Ped_Variation(mpf_boardroom_m_f)
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_jay_norris_chair].id)
|
|
Create_Prop(objects[mof_jay_norris_chair], Prop_Off_Chair_01, <<-1045.07, -229.78, 43.41>>)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objects[mof_jay_norris_chair].id)
|
|
IF NOT IS_ENTITY_ATTACHED_TO_ENTITY(objects[mof_jay_norris_chair].id, peds[mpf_boardroom_norris])
|
|
IF IS_ENTITY_ATTACHED(objects[mof_jay_norris_chair].id)
|
|
DETACH_ENTITY(objects[mof_jay_norris_chair].id, false, TRUE)
|
|
ENDIF
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_jay_norris_chair].id, peds[mpf_boardroom_norris],get_ped_bone_index(peds[mpf_boardroom_norris], BONETAG_PH_R_HAND),<<0,0,0>>,<<0,0,0>>)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF mEvents[mef_ambient_boardroom].iStage > 1
|
|
|
|
TEXT_LABEL_31 strBoardRoomConvo
|
|
TEXT_LABEL_31 strBoardRoomAnimDictionary[5]
|
|
TEXT_LABEL_31 strBoardRoomAnim[5]
|
|
|
|
SWITCH mEvents[mef_ambient_boardroom].iStage
|
|
CASE 2
|
|
IF Lineup_Boardroom_Chairs()
|
|
bAdditionalIsLooping = FALSE
|
|
mEvents[mef_ambient_boardroom].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
// intro loop
|
|
IF IS_ENTITY_READY(peds[mpf_boardroom_norris])
|
|
//AND IS_ENTITY_READY(peds[mpf_boardroom_f_a])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_c])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_a])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_e])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_f])
|
|
|
|
syncedIDs[ssf_ambient_boardroom_main] = CREATE_SYNCHRONIZED_SCENE(vBoardRoomSceneRootCoord, vBoardRoomSceneRootRot)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_norris], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_intro, "boardroom_intro_jaynorris", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_a], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_intro, "boardroom_intro_m_a", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_b], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_intro, "boardroom_intro_m_b", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_f], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_intro, "boardroom_intro_m_f", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_boardroom_main], TRUE)
|
|
|
|
syncedIDs[ssf_ambient_boardroom_additional] = CREATE_SYNCHRONIZED_SCENE(vBoardRoomSceneRootCoord, vBoardRoomSceneRootRot)
|
|
// TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_a], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_intro, "boardroom_intro_f_a", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_b], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_intro, "boardroom_intro_f_b", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_c], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_intro, "boardroom_intro_f_c", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_e], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_intro, "boardroom_intro_m_e", INSTANT_BLEND_IN, NORMAL_BLEND_OUT )
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_boardroom_additional], TRUE)
|
|
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_norris])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_a])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_b])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_f])
|
|
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_f_a])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_f_b])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_f_c])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_e])
|
|
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_boardroom_main)
|
|
mEvents[mef_ambient_boardroom].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 4 FALLTHRU
|
|
CASE 6 FALLTHRU
|
|
CASE 8
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1047.747314,-238.057571,43.021240>>, <<-1050.871216,-239.662491,45.921116>>, 10.000000)
|
|
|
|
IF NOT IS_SAFE_TO_START_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ELSE
|
|
// main anim phase
|
|
IF HAS_ANIM_DICT_LOADED(anim_dict_boardroom_main)
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_norris])
|
|
// AND IS_ENTITY_READY(peds[mpf_boardroom_f_a])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_c])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_a])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_e])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_f])
|
|
|
|
SWITCH mEvents[mef_ambient_boardroom].iStage
|
|
CASE 4
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 5, peds[mpf_boardroom_norris], "JAYNORRIS")
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 6, peds[mpf_boardroom_m_a], "LIBoard3")
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 7, peds[mpf_boardroom_m_f], "LIBoard1")
|
|
|
|
strBoardRoomConvo = "LES_1A_IG_5a"
|
|
strBoardRoomAnimDictionary[0] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[0] = "LES_1A_IG_5a_jayNorris"
|
|
strBoardRoomAnimDictionary[1] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[1] = "LES_1A_IG_5a_jNor_chair"
|
|
strBoardRoomAnimDictionary[2] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[2] = "LES_1A_IG_5a_m_a"
|
|
strBoardRoomAnimDictionary[3] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[3] = "LES_1A_IG_5a_m_b"
|
|
strBoardRoomAnimDictionary[4] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[4] = "LES_1A_IG_5a_m_f"
|
|
BREAK
|
|
CASE 6
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 5, peds[mpf_boardroom_norris], "JAYNORRIS")
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 8, peds[mpf_boardroom_m_a], "LIBoard2")
|
|
|
|
strBoardRoomConvo = "LES_1A_IG_5b"
|
|
strBoardRoomAnimDictionary[0] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[0] = "LES_1A_IG_5b_jayNorris"
|
|
strBoardRoomAnimDictionary[1] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[1] = "LES_1A_IG_5b_jNor_chair"
|
|
strBoardRoomAnimDictionary[2] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[2] = "LES_1A_IG_5b_m_a"
|
|
strBoardRoomAnimDictionary[3] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[3] = "LES_1A_IG_5b_m_b"
|
|
strBoardRoomAnimDictionary[4] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[4] = "LES_1A_IG_5b_m_f"
|
|
BREAK
|
|
CASE 8
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 5, peds[mpf_boardroom_norris], "JAYNORRIS")
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 6, peds[mpf_boardroom_m_a], "LIBoard3")
|
|
|
|
strBoardRoomConvo = "LES_1A_IG_5c"
|
|
strBoardRoomAnimDictionary[0] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[0] = "LES_1A_IG_5c_jayNorris"
|
|
strBoardRoomAnimDictionary[1] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[1] = "LES_1A_IG_5c_jNor_chair"
|
|
strBoardRoomAnimDictionary[2] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[2] = "LES_1A_IG_5c_m_a"
|
|
strBoardRoomAnimDictionary[3] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[3] = "LES_1A_IG_5c_m_b"
|
|
strBoardRoomAnimDictionary[4] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[4] = "LES_1A_IG_5c_m_f"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, strBoardRoomConvo, CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES)
|
|
|
|
syncedIDs[ssf_ambient_boardroom_main] = CREATE_SYNCHRONIZED_SCENE(vBoardRoomSceneRootCoord, vBoardRoomSceneRootRot)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_norris], syncedIDs[ssf_ambient_boardroom_main], strBoardRoomAnimDictionary[0], strBoardRoomAnim[0], NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
IF IS_ENTITY_ATTACHED(objects[mof_jay_norris_chair].id)
|
|
DETACH_ENTITY(objects[mof_jay_norris_chair].id)
|
|
ENDIF
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_jay_norris_chair], syncedIDs[ssf_ambient_boardroom_main], strBoardRoomAnim[1], strBoardRoomAnimDictionary[1], NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_a], syncedIDs[ssf_ambient_boardroom_main], strBoardRoomAnimDictionary[2], strBoardRoomAnim[2], NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_b], syncedIDs[ssf_ambient_boardroom_main], strBoardRoomAnimDictionary[3], strBoardRoomAnim[3], NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_f], syncedIDs[ssf_ambient_boardroom_main], strBoardRoomAnimDictionary[4], strBoardRoomAnim[4], NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_norris])
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_a])
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_b])
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_f])
|
|
|
|
IF mEvents[mef_ambient_boardroom].iStage = 4
|
|
syncedIDs[ssf_ambient_boardroom_additional] = CREATE_SYNCHRONIZED_SCENE(vBoardRoomSceneRootCoord, vBoardRoomSceneRootRot)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_e], syncedIDs[ssf_ambient_boardroom_additional],anim_dict_boardroom_main, "boardroom_react_m_e", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
// TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_a], syncedIDs[ssf_ambient_boardroom_additional],anim_dict_boardroom_main, "boardroom_react_f_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_b], syncedIDs[ssf_ambient_boardroom_additional],anim_dict_boardroom_main, "boardroom_react_f_b", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_c], syncedIDs[ssf_ambient_boardroom_additional],anim_dict_boardroom_main, "boardroom_react_f_c", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_f_a])
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_f_b])
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_f_c])
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_e])
|
|
ENDIF
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_boardroom_intro)
|
|
|
|
mEvents[mef_ambient_boardroom].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 5 FALLTHRU
|
|
CASE 7
|
|
IF fSceneProg_main = 1.0
|
|
IF HAS_ANIM_DICT_LOADED(anim_dict_boardroom_main)
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_norris])
|
|
// AND IS_ENTITY_READY(peds[mpf_boardroom_f_a])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_c])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_a])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_e])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_f])
|
|
|
|
SWITCH mEvents[mef_ambient_boardroom].iStage
|
|
CASE 5
|
|
strBoardRoomAnimDictionary[0] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[0] = "idle_01_jayNorris"
|
|
strBoardRoomAnimDictionary[1] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[1] = "idle_01_jNor_chair"
|
|
strBoardRoomAnimDictionary[2] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[2] = "idle_01_m_a"
|
|
strBoardRoomAnimDictionary[3] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[3] = "idle_01_m_b"
|
|
strBoardRoomAnimDictionary[4] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[4] = "idle_01_m_f"
|
|
BREAK
|
|
CASE 7
|
|
strBoardRoomAnimDictionary[0] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[0] = "idle_02_jayNorris"
|
|
strBoardRoomAnimDictionary[1] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[1] = "idle_02_jNor_chair"
|
|
strBoardRoomAnimDictionary[2] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[2] = "idle_01_m_a"
|
|
strBoardRoomAnimDictionary[3] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[3] = "idle_01_m_b"
|
|
strBoardRoomAnimDictionary[4] = anim_dict_boardroom_main
|
|
strBoardRoomAnim[4] = "idle_01_m_f"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
syncedIDs[ssf_ambient_boardroom_main] = CREATE_SYNCHRONIZED_SCENE(vBoardRoomSceneRootCoord, vBoardRoomSceneRootRot)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_norris], syncedIDs[ssf_ambient_boardroom_main], strBoardRoomAnimDictionary[0], strBoardRoomAnim[0], NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
IF IS_ENTITY_ATTACHED(objects[mof_jay_norris_chair].id)
|
|
DETACH_ENTITY(objects[mof_jay_norris_chair].id)
|
|
ENDIF
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_jay_norris_chair], syncedIDs[ssf_ambient_boardroom_main], strBoardRoomAnim[1], strBoardRoomAnimDictionary[1], NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_a], syncedIDs[ssf_ambient_boardroom_main], strBoardRoomAnimDictionary[2], strBoardRoomAnim[2], NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_b], syncedIDs[ssf_ambient_boardroom_main], strBoardRoomAnimDictionary[3], strBoardRoomAnim[3], NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_f], syncedIDs[ssf_ambient_boardroom_main], strBoardRoomAnimDictionary[4], strBoardRoomAnim[4], NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_boardroom_main], TRUE)
|
|
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_norris])
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_a])
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_b])
|
|
// FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_boardroom_m_f])
|
|
|
|
Add_Event_Delay(mef_ambient_boardroom, 3500)
|
|
mEvents[mef_ambient_boardroom].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 9
|
|
// Into exit
|
|
IF fSceneProg_main = 1.0
|
|
IF IS_ENTITY_READY(peds[mpf_boardroom_norris])
|
|
// AND IS_ENTITY_READY(peds[mpf_boardroom_f_a])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_c])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_a])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_e])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_f])
|
|
|
|
syncedIDs[ssf_ambient_boardroom_main] = CREATE_SYNCHRONIZED_SCENE(vBoardRoomSceneRootCoord, vBoardRoomSceneRootRot)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_norris], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_exit, "boardroom_into_exit_jaynorris", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_a], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_exit, "boardroom_into_exit_m_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_b], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_exit, "boardroom_into_exit_m_b", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_f], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_exit, "boardroom_into_exit_m_f", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
|
|
syncedIDs[ssf_ambient_boardroom_additional] = CREATE_SYNCHRONIZED_SCENE(vBoardRoomSceneRootCoord, vBoardRoomSceneRootRot)
|
|
// TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_a], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_exit, "boardroom_into_exit_f_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_b], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_exit, "boardroom_into_exit_f_b", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_c], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_exit, "boardroom_into_exit_f_c", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_e], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_exit, "boardroom_into_exit_m_e", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_boardroom_main)
|
|
|
|
mEvents[mef_ambient_boardroom].iStage++
|
|
ENDIF
|
|
// Prestream the outro anims
|
|
ELIF mEvents[mef_ambient_boardroom].bAnimDictPrestreamed = FALSE
|
|
AND fSceneProg_main > 0.8
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_boardroom_exit)
|
|
mEvents[mef_ambient_boardroom].bAnimDictPrestreamed = TRUE
|
|
ENDIF
|
|
BREAK
|
|
CASE 10
|
|
IF fSceneProg_main = 1.0
|
|
AND HAS_ANIM_DICT_LOADED(anim_dict_boardroom_exit)
|
|
IF IS_ENTITY_READY(peds[mpf_boardroom_norris])
|
|
// AND IS_ENTITY_READY(peds[mpf_boardroom_f_a])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_c])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_a])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_e])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_f])
|
|
|
|
syncedIDs[ssf_ambient_boardroom_main] = CREATE_SYNCHRONIZED_SCENE(vBoardRoomSceneRootCoord, vBoardRoomSceneRootRot)
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_norris], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_exit, "boardroom_exitloop_jaynorris", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_a], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_exit, "boardroom_exitloop_m_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_b], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_exit, "boardroom_exitloop_m_b", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_f], syncedIDs[ssf_ambient_boardroom_main], anim_dict_boardroom_exit, "boardroom_exitloop_m_f", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_boardroom_main], TRUE)
|
|
|
|
syncedIDs[ssf_ambient_boardroom_additional] = CREATE_SYNCHRONIZED_SCENE(vBoardRoomSceneRootCoord, vBoardRoomSceneRootRot)
|
|
// TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_a], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_exit, "boardroom_exitloop_f_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_b], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_exit, "boardroom_exitloop_f_b", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_c], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_exit, "boardroom_exitloop_f_c", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_e], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_exit, "boardroom_exitloop_m_e", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_boardroom_additional], TRUE)
|
|
|
|
mEvents[mef_ambient_boardroom].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF mEvents[mef_ambient_boardroom].iStage > 4
|
|
// shortened non essential anims looped bit
|
|
IF NOT bAdditionalIsLooping
|
|
IF fSceneProg_additional = 1.0
|
|
|
|
// IF IS_ENTITY_READY(peds[mpf_boardroom_f_a])
|
|
IF IS_ENTITY_READY(peds[mpf_boardroom_f_b])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_f_c])
|
|
AND IS_ENTITY_READY(peds[mpf_boardroom_m_e])
|
|
|
|
// CLEAR_PED_TASKS(peds[mpf_boardroom_f_a])
|
|
CLEAR_PED_TASKS(peds[mpf_boardroom_f_b])
|
|
CLEAR_PED_TASKS(peds[mpf_boardroom_f_c])
|
|
CLEAR_PED_TASKS(peds[mpf_boardroom_m_e])
|
|
|
|
syncedIDs[ssf_ambient_boardroom_additional] = CREATE_SYNCHRONIZED_SCENE(vBoardRoomSceneRootCoord, vBoardRoomSceneRootRot)
|
|
// TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_a], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_main, "boardroom_listen_loop_f_a", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_b], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_main, "boardroom_listen_loop_f_b", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_f_c], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_main, "boardroom_listen_loop_f_c", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
TASK_SYNCHRONIZED_SCENE (peds[mpf_boardroom_m_e], syncedIDs[ssf_ambient_boardroom_additional], anim_dict_boardroom_main, "boardroom_listen_loop_m_e", NORMAL_BLEND_IN, NORMAL_BLEND_OUT )
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_ambient_boardroom_additional], TRUE)
|
|
|
|
bAdditionalIsLooping = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC event_engineer_air_guitar
|
|
|
|
SWITCH mEvents[mef_engineer_air_guitar].iStage
|
|
CASE 1
|
|
IF NOT IS_PED_INJURED(peds[mpf_smoker])
|
|
AND NOT IS_PED_INJURED(peds[mpf_office_d])
|
|
SWITCH int_to_enum(mission_stage_flag, mission_stage)
|
|
CASE msf_st5_plant_bomb
|
|
IF HAS_ANIM_DICT_LOADED(anim_dict_engineer_airguitar)
|
|
AND DOES_ENTITY_EXIST(objects[mof_office_d_chair].id)
|
|
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_d_chair], INSTANT_BLEND_OUT)
|
|
|
|
FREEZE_ENTITY_POSITION(objects[mof_office_d_chair].id, FALSE)
|
|
SET_ENTITY_COORDS(objects[mof_office_d_chair].id, <<-1063.9155, -246.8907, 43.0306>>)
|
|
SET_ENTITY_HEADING(objects[mof_office_d_chair].id, 121.360)
|
|
FREEZE_ENTITY_POSITION(objects[mof_office_d_chair].id, TRUE)
|
|
CPRINTLN(DEBUG_MIKE, "[CHAIR D] Moved inside of event_engineer_air_guitar()")
|
|
i_piano_airguitar_loop_count = 0
|
|
b_IsPlayingConvoIG9 = FALSE
|
|
mEvents[mef_engineer_air_guitar].iStage = 2
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF IS_ENTITY_READY(peds[mpf_smoker])
|
|
AND IS_ENTITY_READY(peds[mpf_office_d])
|
|
|
|
// Michael gets near and mocks the guys
|
|
IF NOT b_IsPlayingConvoIG9
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1065.365601,-241.407578,43.028111>>, <<-1063.174927,-245.603302,45.292542>>, 3.500000)
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1A_WTF", CONV_PRIORITY_HIGH)
|
|
b_IsPlayingConvoIG9 = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(syncedIDs[ssf_engineer_air_guitar])
|
|
OR GET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_engineer_air_guitar]) = 1.0
|
|
|
|
IF b_IsPlayingConvoIG9
|
|
OR i_piano_airguitar_loop_count > 10
|
|
|
|
syncedIDs[ssf_engineer_air_guitar] = CREATE_SYNCHRONIZED_SCENE(<<-1063.542, -245.794, 43.032 >>, <<0.0,0.0,27.800>>)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_smoker], syncedIDs[ssf_engineer_air_guitar], anim_dict_engineer_airguitar, "idle_to_sit_pedb", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, RBF_PLAYER_IMPACT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_office_d], syncedIDs[ssf_engineer_air_guitar], anim_dict_engineer_airguitar, "idle_to_sit_peda", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, RBF_PLAYER_IMPACT)
|
|
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_smoker])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_d])
|
|
|
|
IF IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_d])
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_office_d])
|
|
ENDIF
|
|
|
|
IF IS_AMBIENT_SPEECH_PLAYING(peds[mpf_smoker])
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_smoker])
|
|
ENDIF
|
|
|
|
mEvents[mef_engineer_air_guitar].iStage++
|
|
|
|
// Carry on another loop
|
|
ELSE
|
|
|
|
syncedIDs[ssf_engineer_air_guitar] = CREATE_SYNCHRONIZED_SCENE(<<-1063.542, -245.794, 43.032 >>, <<0.0,0.0,27.800>>)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_smoker], syncedIDs[ssf_engineer_air_guitar], anim_dict_engineer_airguitar, "idle_standing_pedb", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, RBF_PLAYER_IMPACT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_office_d], syncedIDs[ssf_engineer_air_guitar], anim_dict_engineer_airguitar, "idle_standing_peda", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, RBF_PLAYER_IMPACT)
|
|
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_smoker])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_d])
|
|
|
|
i_piano_airguitar_loop_count++
|
|
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF NOT b_IsPlayingConvoIG9
|
|
// making air guitar noises until the loop has finished
|
|
IF NOT IS_PED_INJURED(peds[mpf_smoker])
|
|
IF NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_smoker])
|
|
CPRINTLN(DEBUG_MIKE, "PLAY_PED_AMBIENT_SPEECH: LES_1A_AIRG")
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_smoker], "GUITAR", "LIEngineer", SPEECH_PARAMS_FORCE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(peds[mpf_office_d])
|
|
IF NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_d])
|
|
CPRINTLN(DEBUG_MIKE, "PLAY_PED_AMBIENT_SPEECH: Air Piano")
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_d], "PIANO", "AIRPIANIST", SPEECH_PARAMS_FORCE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(syncedIDs[ssf_engineer_air_guitar])
|
|
OR GET_SYNCHRONIZED_SCENE_PHASE(syncedIDs[ssf_engineer_air_guitar]) = 1.0
|
|
|
|
IF IS_ENTITY_READY(peds[mpf_office_d])
|
|
AND IS_ENTITY_READY(peds[mpf_smoker])
|
|
|
|
syncedIDs[ssf_engineer_air_guitar] = CREATE_SYNCHRONIZED_SCENE(<<-1063.542, -245.794, 43.032 >>, <<0.0,0.0,27.800>>)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_smoker], syncedIDs[ssf_engineer_air_guitar], anim_dict_engineer_airguitar, "idle_sitting_pedb", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, RBF_PLAYER_IMPACT)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_office_d], syncedIDs[ssf_engineer_air_guitar], anim_dict_engineer_airguitar, "idle_sitting_peda", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, RBF_PLAYER_IMPACT)
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_engineer_air_guitar], TRUE)
|
|
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_smoker])
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_office_d])
|
|
|
|
mEvents[mef_engineer_air_guitar].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
FALLTHRU
|
|
CASE 4
|
|
IF b_IsPlayingConvoIG9
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1A_EXPLAIN", CONV_PRIORITY_HIGH)
|
|
|
|
IF IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_d])
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_office_d])
|
|
ENDIF
|
|
|
|
IF IS_AMBIENT_SPEECH_PLAYING(peds[mpf_smoker])
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_smoker])
|
|
ENDIF
|
|
|
|
b_IsPlayingConvoIG9 = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF mEvents[mef_engineer_air_guitar].iStage = 4
|
|
mEvents[mef_engineer_air_guitar].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
Add_Event_Delay(mef_engineer_air_guitar, 5000)
|
|
mEvents[mef_engineer_air_guitar].iStage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), <<-1063.45, -245.74, 43.14>>) <= 2.750
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1A_RETURN", CONV_PRIORITY_HIGH)
|
|
mEvents[mef_engineer_air_guitar].iStage--
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC event_ambient_receptionist()
|
|
|
|
// While not at the stage where you can go to life invader stream the receptionist in/out and lock the doors
|
|
IF mission_stage < ENUM_TO_INT(msf_st3_go_to_computer)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(peds[mpf_receptionist_f])
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-1088.11, -262.09, 36.79>>) < 30.0
|
|
Load_Asset_Model(sAssetData, mod_hipster_f)
|
|
|
|
IF HAS_MODEL_LOADED(mod_hipster_f)
|
|
CLEAR_AREA_OF_PEDS(<< -1084.3562, -246.5053, 36.7634 >>,5.0)
|
|
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_R, DOORSTATE_LOCKED)
|
|
|
|
IF DOES_SCENARIO_EXIST_IN_AREA(<<-1083.76, -246.05, 37.41>>, 2.0, FALSE)
|
|
AND DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1083.87, -246.33, 36.76>>, 0.5, PROP_OFF_CHAIR_01)
|
|
|
|
IF DOES_ENTITY_EXIST(objects[mof_receptionist_chair].id)
|
|
// Grab and freeze the chair
|
|
objects[mof_receptionist_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1083.87, -246.33, 36.76>>, 0.5, PROP_OFF_CHAIR_01)
|
|
objects[mof_receptionist_chair].bDoNotReset = TRUE
|
|
FREEZE_ENTITY_POSITION(objects[mof_receptionist_chair].id, TRUE)
|
|
ENDIF
|
|
|
|
// Create receptionist, put in the using computer scenario
|
|
peds[mpf_receptionist_f] = CREATE_PED(PEDTYPE_MISSION,mod_hipster_f, << -1085.3929, -248.0326, 36.7632 >>, 187.3241)
|
|
SET_ENTITY_COLLISION(peds[mpf_receptionist_f], FALSE)
|
|
TASK_USE_NEAREST_SCENARIO_TO_COORD_WARP(peds[mpf_receptionist_f], <<-1083.76, -246.05, 37.41>>, 2.0)
|
|
FREEZE_ENTITY_POSITION(peds[mpf_receptionist_f], TRUE)
|
|
SET_PED_KEEP_TASK(peds[mpf_receptionist_f], TRUE)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-1083.87, -246.33, 36.76>>) > 35.0
|
|
DELETE_PED(peds[mpf_receptionist_f])
|
|
Unload_Asset_Model(sAssetData, mod_hipster_f)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
// once in lifeinvader at the correct mission stage
|
|
ELSE
|
|
|
|
SWITCH mEvents[mef_ambient_receptionist].iStage
|
|
CASE 1
|
|
bLookingAtReceptionist = FALSE
|
|
i_ReceptionistTalkCount = 0
|
|
mEvents[mef_ambient_receptionist].iStage++
|
|
BREAK
|
|
CASE 2
|
|
IF HAS_MODEL_LOADED(mod_hipster_f)
|
|
CLEAR_AREA_OF_PEDS(<< -1084.3562, -246.5053, 36.7634 >>,5.0)
|
|
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_R, DOORSTATE_LOCKED)
|
|
|
|
IF DOES_SCENARIO_EXIST_IN_AREA(<<-1083.76, -246.05, 37.41>>, 2.0, FALSE)
|
|
AND DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1083.87, -246.33, 36.76>>, 0.5, PROP_OFF_CHAIR_01)
|
|
|
|
// Grab and freeze the chair
|
|
IF DOES_ENTITY_EXIST(objects[mof_receptionist_chair].id)
|
|
objects[mof_receptionist_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1083.87, -246.33, 36.76>>, 0.5, PROP_OFF_CHAIR_01)
|
|
objects[mof_receptionist_chair].bDoNotReset = TRUE
|
|
FREEZE_ENTITY_POSITION(objects[mof_receptionist_chair].id, TRUE)
|
|
ENDIF
|
|
|
|
// Create receptionist, put in the using computer scenario
|
|
peds[mpf_receptionist_f] = CREATE_PED(PEDTYPE_MISSION,mod_hipster_f, << -1085.3929, -248.0326, 36.7632 >>, 187.3241)
|
|
SET_ENTITY_COLLISION(peds[mpf_receptionist_f], FALSE)
|
|
TASK_USE_NEAREST_SCENARIO_TO_COORD_WARP(peds[mpf_receptionist_f], <<-1083.76, -246.05, 37.41>>, 2.0)
|
|
FREEZE_ENTITY_POSITION(peds[mpf_receptionist_f], TRUE)
|
|
SET_PED_KEEP_TASK(peds[mpf_receptionist_f], TRUE)
|
|
|
|
mEvents[mef_ambient_receptionist].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_INTERIOR_SCENE()
|
|
|
|
SWITCH int_to_enum(mission_stage_flag, mission_stage)
|
|
CASE msf_st3_go_to_computer FALLTHRU
|
|
CASE msf_st4_mini_game FALLTHRU
|
|
CASE msf_st5_plant_bomb
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-1083.435059,-245.203964,36.763268>>) < 34.4569 // 5.875000 squared
|
|
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 4, peds[mpf_receptionist_f], "LIReceptionist")
|
|
|
|
IF NOT IS_SAFE_TO_START_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ELSE
|
|
IF i_ReceptionistTalkCount < 3
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1A_REC2", CONV_PRIORITY_HIGH)
|
|
mEvents[mef_ambient_receptionist].iStage = -301
|
|
i_ReceptionistTalkCount++
|
|
ENDIF
|
|
ELIF i_ReceptionistTalkCount < 7
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1A_REC3", CONV_PRIORITY_HIGH)
|
|
mEvents[mef_ambient_receptionist].iStage = -301
|
|
i_ReceptionistTalkCount++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE msf_st6_leave_building
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1084.703857,-253.404266,36.513294>>, <<-1081.726074,-259.221130,39.759724>>, 10.750000)
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 4, peds[mpf_receptionist_f], "LIReceptionist")
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF CREATE_CONVERSATION(sConvo, "LS1AAUD", "LS1A_REC", CONV_PRIORITY_VERY_HIGH)
|
|
Add_Event_Delay(mef_ambient_receptionist, 2000)
|
|
mEvents[mef_ambient_receptionist].iStage++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
BREAK
|
|
CASE -301
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
mEvents[mef_ambient_receptionist].iStage = 3
|
|
Add_Event_Delay(mef_ambient_receptionist, GET_RANDOM_INT_IN_RANGE(5000, 7500))
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
// play unlock sound
|
|
PLAY_SOUND_FROM_COORD(-1, "UNLOCK_DOOR", <<-1080.40, -257.84, 37.92>>, "LESTER1A_SOUNDS")
|
|
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_L, DOORSTATE_UNLOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_R, DOORSTATE_UNLOCKED)
|
|
|
|
mEvents[mef_ambient_receptionist].iStage++
|
|
BREAK
|
|
CASE 5
|
|
IF NOT IS_INTERIOR_SCENE()
|
|
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
mEvents[mef_ambient_receptionist].bComplete = TRUE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF NOT IS_PED_INJURED(peds[mpf_receptionist_f])
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SWITCH int_to_enum(mission_stage_flag, mission_stage)
|
|
CASE msf_st3_go_to_computer FALLTHRU
|
|
CASE msf_st4_mini_game FALLTHRU
|
|
CASE msf_st5_plant_bomb
|
|
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-1083.435059,-245.203964,36.763268>>) < 34.4569 // 5.875000 squared
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), peds[mpf_receptionist_f], -1)
|
|
TASK_LOOK_AT_ENTITY(peds[mpf_receptionist_f], PLAYER_PED_ID(), -1)
|
|
ELSE
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
TASK_CLEAR_LOOK_AT(peds[mpf_receptionist_f])
|
|
ENDIF
|
|
BREAK
|
|
CASE msf_st6_leave_building
|
|
IF mEvents[mef_ambient_receptionist].iStage > 3
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1088.850708,-254.181381,39.258392>>, <<-1074.995361,-246.906158,36.513264>>, 11.625000)
|
|
IF NOT bLookingAtReceptionist
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), peds[mpf_receptionist_f], -1)
|
|
TASK_LOOK_AT_ENTITY(peds[mpf_receptionist_f], PLAYER_PED_ID(), -1)
|
|
bLookingAtReceptionist = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF bLookingAtReceptionist
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
TASK_CLEAR_LOOK_AT(peds[mpf_receptionist_f])
|
|
bLookingAtReceptionist = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC event_ambient_dialogue()
|
|
SWITCH mEvents[mef_ambient_dialogue].iStage
|
|
CASE 1
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1067.389893,-247.876862,43.021278>>, <<-1051.009766,-239.455734,46.958778>>, 10.000000)
|
|
AND GET_GAME_TIMER() - i_ambient_dialogue_timer >= i_ambient_dialogue_delay
|
|
AND NOT IS_CUTSCENE_PLAYING()
|
|
|
|
// In range of first guy on the end
|
|
IF mission_stage != enum_to_int(msf_st5_plant_bomb)
|
|
AND (NOT Is_Event_Triggered(mef_engineer_air_guitar) OR Is_Event_Complete(mef_engineer_air_guitar))
|
|
AND NOT IS_PED_INJURED(peds[mpf_office_d])
|
|
AND NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_d])
|
|
AND VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-1063.654053,-246.729340,43.021278>>) < 10.5625 // 3.25 squared
|
|
|
|
SWITCH GET_RANDOM_INT_IN_RANGE(0, 2)
|
|
CASE 0
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_d], "LES1A_AUAA", "LIFEINVADERM1", SPEECH_PARAMS_FORCE)
|
|
BREAK
|
|
CASE 1
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_d], "LES1A_AVAA", "LIFEINVADERM1", SPEECH_PARAMS_FORCE)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
mEvents[mef_ambient_dialogue].iStage++
|
|
|
|
// Walk pass the guy sitting by the pillar (black guy in the green)
|
|
ELIF NOT IS_PED_INJURED(peds[mpf_office_c])
|
|
AND NOT IS_AMBIENT_SPEECH_PLAYING(peds[mpf_office_c])
|
|
AND VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), <<-1058.56, -242.61, 43.02>>) < 10.5625 // 3.25 squared
|
|
|
|
IF mission_stage >= enum_to_int(msf_st5_plant_bomb)
|
|
AND NOT b_dia_new_guy
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_c], "LES1A_AXAA", "LIFEINVADERM1", SPEECH_PARAMS_FORCE)
|
|
b_dia_new_guy = TRUE
|
|
ELSE
|
|
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE(peds[mpf_office_c], "LES1A_AWAA", "LIFEINVADERM1", SPEECH_PARAMS_FORCE)
|
|
ENDIF
|
|
|
|
mEvents[mef_ambient_dialogue].iStage++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
i_ambient_dialogue_timer = GET_GAME_TIMER()
|
|
i_ambient_dialogue_delay = GET_RANDOM_INT_IN_RANGE(7000, 12000)
|
|
mEvents[mef_ambient_dialogue].iStage--
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC event_tracey()
|
|
|
|
IF IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), v_home_living_room, 200)
|
|
IF NOT DOES_ENTITY_EXIST(veh_Tracey)
|
|
CREATE_NPC_VEHICLE(veh_Tracey, CHAR_TRACEY, <<-813.3314, 159.8796, 70.3280>>, 112.3623, TRUE)
|
|
ENDIF
|
|
ELIF NOT IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), v_home_living_room, 230)
|
|
IF DOES_ENTITY_EXIST(veh_Tracey)
|
|
DELETE_VEHICLE(veh_Tracey)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), v_home_living_room, 100)
|
|
IF NOT bHouseAssetsRequested
|
|
Load_Asset_Interior(sAssetData, interior_living_room)
|
|
Load_Asset_Model(sAssetData, GET_NPC_PED_MODEL(CHAR_TRACEY))
|
|
Load_Asset_Model(sAssetData, PROP_CS_REMOTE_01)
|
|
Load_Asset_Model(sAssetData, Prop_Phone_ING)
|
|
Load_Asset_AnimDict(sAssetData, "misslester1b")
|
|
bHouseAssetsRequested = TRUE
|
|
ENDIF
|
|
ELIF NOT IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), v_home_living_room, 110)
|
|
IF bHouseAssetsRequested
|
|
Unload_Asset_Interior(sAssetData, interior_living_room)
|
|
Unload_Asset_Model(sAssetData, GET_NPC_PED_MODEL(CHAR_TRACEY))
|
|
Unload_Asset_Model(sAssetData, PROP_CS_REMOTE_01)
|
|
Unload_Asset_Model(sAssetData, Prop_Phone_ING)
|
|
Unload_Asset_Anim_Dict(sAssetData, "misslester1b")
|
|
bHouseAssetsRequested = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bHouseAssetsRequested
|
|
// Blip and instruct the player to go to the living room
|
|
IF NOT DOES_ENTITY_EXIST(peds[mpf_tracey])
|
|
AND HAS_MODEL_LOADED(GET_NPC_PED_MODEL(CHAR_TRACEY))
|
|
AND HAS_MODEL_LOADED(PROP_CS_REMOTE_01)
|
|
AND HAS_ANIM_DICT_LOADED("misslester1b")
|
|
IF CREATE_NPC_PED_ON_FOOT(peds[mpf_tracey], CHAR_TRACEY, << -803.0255, 172.6011, 71.8348 >>, 129.7437)
|
|
SET_PED_CAN_BE_TARGETTED(peds[mpf_tracey], FALSE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(peds[mpf_tracey], REL_FAMILY)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_tracey], TRUE)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_tv_remote].id)
|
|
Create_Prop(objects[mof_tv_remote], PROP_CS_REMOTE_01, GET_PED_BONE_COORDS(peds[mpf_tracey], BONETAG_PH_L_HAND, <<0,0,0>>))
|
|
Unload_Asset_Model(sAssetData, PROP_CS_REMOTE_01)
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_tv_remote].id, peds[mpf_tracey], GET_PED_BONE_INDEX(peds[mpf_tracey], BONETAG_PH_L_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
|
|
ENDIF
|
|
|
|
SET_TRACY_VARS()
|
|
syncedIDs[ssf_tracey] = CREATE_SYNCHRONIZED_SCENE(<< -803.510, 171.950, 71.840 >>, << 0.000, 0.000, 120.320 >>)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_tracey], syncedIDs[ssf_tracey], "misslester1b", "watchtv", INSTANT_BLEND_IN, WALK_BLEND_OUT)
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_tracey], TRUE)
|
|
SET_STATIC_EMITTER_ENABLED("SE_MICHAELS_HOUSE_RADIO", FALSE)
|
|
CREATE_MODEL_HIDE(<<-804.44751, 172.79373, 72.34801>>, 0.5, PROP_CS_REMOTE_01, FALSE)
|
|
|
|
Unload_Asset_Model(sAssetData, GET_NPC_PED_MODEL(CHAR_TRACEY))
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
REMOVE_MODEL_HIDE(<<-804.44751, 172.79373, 72.34801>>, 0.5, PROP_CS_REMOTE_01, FALSE)
|
|
|
|
IF DOES_ENTITY_EXIST(objects[mof_tv_remote].id)
|
|
DELETE_OBJECT(objects[mof_tv_remote].id)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(peds[mpf_tracey])
|
|
DELETE_PED(peds[mpf_tracey])
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
//PURPOSE: Draws event debug information
|
|
PROC Display_Event_Debug_Info()
|
|
#IF IS_DEBUG_BUILD
|
|
CONST_FLOAT f_left 0.05 // 0.1
|
|
CONST_FLOAT f_top 0.05 // 0.1
|
|
CONST_FLOAT f_spacing 0.05
|
|
CONST_FLOAT f_txt_scale 0.4
|
|
CONST_INT i_event_offset 3
|
|
|
|
CONST_FLOAT f_name_offset 0.03
|
|
CONST_FLOAT f_status_offset 0.17
|
|
CONST_FLOAT f_stage_offset 0.25
|
|
|
|
INT i_active_count = 0
|
|
BOOL bShowAllEvents
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_END)
|
|
bShowAllEvents = TRUE
|
|
ELSE
|
|
bShowAllEvents = FALSE
|
|
ENDIF
|
|
|
|
INT i
|
|
FOR i = 0 TO enum_to_int(mef_num_events)-1
|
|
IF bShowAllEvents
|
|
i_active_count++
|
|
ELSE
|
|
IF mEvents[i].bComplete
|
|
i_active_count++
|
|
ELIF mEvents[i].bTriggered
|
|
i_active_count++
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
// If none active then there will be one line in there saying nothing is active
|
|
DRAW_RECT_FROM_CORNER(f_left-0.01, f_top-0.01, 0.35, (f_txt_scale * 0.05 * (i_active_count+i_event_offset+1)) + 0.02, 0,0,0, 150)
|
|
|
|
TEXT_LABEL_23 str_debug_info = "Mission Stage: "
|
|
str_debug_info += (mission_stage)
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left, f_top, "STRING", str_debug_info)
|
|
|
|
str_debug_info = "Mission Substage: "
|
|
str_debug_info += (mission_substage)
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left + 0.12, f_top, "STRING", str_debug_info)
|
|
|
|
str_debug_info = "Assets: "
|
|
str_debug_info += Get_Num_Assets_Loaded(sAssetData)
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left + 0.27, f_top, "STRING", str_debug_info)
|
|
|
|
i_active_count = 0
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left, f_top+((i_event_offset-1)*f_spacing*f_txt_scale), "STRING", "ID")
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left+f_name_offset, f_top+((i_event_offset-1)*f_spacing*f_txt_scale), "STRING", "Name")
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left+f_status_offset, f_top+((i_event_offset-1)*f_spacing*f_txt_scale), "STRING", "Status")
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left+f_stage_offset, f_top+((i_event_offset-1)*f_spacing*f_txt_scale), "STRING", "Stage")
|
|
|
|
FOR i = 0 TO enum_to_int(mef_num_events)-1
|
|
INT debug_draw_col_r, debug_draw_col_g, debug_draw_col_b
|
|
BOOL bDrawThisEvent
|
|
TEXT_LABEL_23 str_debug_status
|
|
bDrawThisEvent = FALSE
|
|
|
|
IF mEvents[i].bComplete
|
|
str_debug_status = "Complete"
|
|
debug_draw_col_r = 68
|
|
debug_draw_col_g = 255
|
|
debug_draw_col_b = 40
|
|
bDrawThisEvent = TRUE
|
|
i_active_count++
|
|
ELIF mEvents[i].bTriggered
|
|
str_debug_status = "Running"
|
|
debug_draw_col_r = 255
|
|
debug_draw_col_g = 191
|
|
debug_draw_col_b = 0
|
|
bDrawThisEvent = TRUE
|
|
i_active_count++
|
|
ELSE
|
|
str_debug_status = "Idle"
|
|
debug_draw_col_r = 77
|
|
debug_draw_col_g = 77
|
|
debug_draw_col_b = 77
|
|
IF bShowAllEvents
|
|
bDrawThisEvent = TRUE
|
|
i_active_count++
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bDrawThisEvent
|
|
// ID
|
|
str_debug_info = ""
|
|
str_debug_info += i
|
|
SET_TEXT_COLOUR(debug_draw_col_r,debug_draw_col_g,debug_draw_col_b, 255)
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left, f_top+((i_active_count+i_event_offset)*f_spacing*f_txt_scale), "STRING", str_debug_info)
|
|
|
|
// Name
|
|
str_debug_info = ""
|
|
str_debug_info += Get_Event_Name(int_to_enum(mission_event_flag, i))
|
|
SET_TEXT_COLOUR(debug_draw_col_r,debug_draw_col_g,debug_draw_col_b, 255)
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left+f_name_offset, f_top+((i_active_count+i_event_offset)*f_spacing*f_txt_scale), "STRING", str_debug_info)
|
|
|
|
// Status
|
|
SET_TEXT_COLOUR(debug_draw_col_r,debug_draw_col_g,debug_draw_col_b, 255)
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left+f_status_offset, f_top+((i_active_count+i_event_offset)*f_spacing*f_txt_scale), "STRING", str_debug_status)
|
|
|
|
// Stage
|
|
str_debug_info = ""
|
|
str_debug_info += mEvents[i].iStage
|
|
SET_TEXT_COLOUR(debug_draw_col_r,debug_draw_col_g,debug_draw_col_b, 255)
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left+f_stage_offset, f_top+((i_active_count+i_event_offset)*f_spacing*f_txt_scale), "STRING", str_debug_info)
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
IF i_active_count = 0
|
|
SET_TEXT_COLOUR(163, 163, 163, 255)
|
|
SET_TEXT_SCALE(f_txt_scale, f_txt_scale)
|
|
DISPLAY_TEXT_WITH_LITERAL_STRING(f_left, f_top+(i_event_offset*f_spacing*f_txt_scale), "STRING", "no active mission events")
|
|
ENDIF
|
|
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
PROC Manage_Mission_Events()
|
|
INT i
|
|
FOR i = 0 TO enum_to_int(mef_num_events)-1
|
|
|
|
// make sure the event has triggered but is not complete
|
|
IF (mEvents[i].bTriggered = TRUE)
|
|
AND (mEvents[i].bComplete != TRUE)
|
|
|
|
// calculate time passed since event was triggered
|
|
INT iTimePassed = GET_GAME_TIMER() - mEvents[i].iTimeStamp
|
|
|
|
// if past the delay enter the event logic otherwise, do nothing
|
|
IF iTimePassed > mEvents[i].iDelay
|
|
|
|
// Select the correct vent
|
|
SWITCH int_to_enum(mission_event_flag, i)
|
|
|
|
CASE mef_lester_phone_call event_lester_phone_call() BREAK
|
|
CASE mef_lester_phone_call_2 event_lester_phone_call_2() BREAK
|
|
CASE mef_manage_bag event_manage_bag() BREAK
|
|
CASE mef_engineer_follow event_engineer_follow() BREAK
|
|
CASE mef_ambient_milk event_ambient_milk_lady() BREAK
|
|
CASE mef_ambient_interview event_ambient_interview() BREAK
|
|
CASE mef_ambient_boardroom event_ambient_boardroom() BREAK
|
|
CASE mef_ambient_office event_ambient_office() BREAK
|
|
CASE mef_ambient_paper_throw event_ambient_paper_throw() BREAK
|
|
CASE mef_ambient_receptionist event_ambient_receptionist() BREAK
|
|
CASE mef_engineer_air_guitar event_engineer_air_guitar() BREAK
|
|
CASE mef_ambient_dialogue event_ambient_dialogue() BREAK
|
|
CASE mef_tracey event_tracey() BREAK
|
|
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
// Toggle event debug info on/off
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_HOME)
|
|
bDisplayEventDebug = NOT bDisplayEventDebug
|
|
IF bDisplayEventDebug
|
|
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
|
|
ELSE
|
|
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bDisplayEventDebug
|
|
Display_Event_Debug_Info()
|
|
ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
/*
|
|
_______ _ ______ ______ _ _______ _______ _______ _ _______ _ _ _
|
|
(_______)| | / _____)/ _____)| |(_______)(_______) (_______)(_) (_______)(_)(_)(_)
|
|
_ _ _ | |( (____ ( (____ | | _ _ _ _ _____ _ _ _ _ _ _
|
|
| ||_|| || | \____ \ \____ \ | || | | || | | | | ___) | | | | | || || || |
|
|
| | | || | _____) )_____) )| || |___| || | | | | | | |_____| |___| || || || |
|
|
|_| |_||_|(______/(______/ |_| \_____/ |_| |_| |_| |_______)\_____/ \_____/
|
|
*/
|
|
|
|
//PURPOSE: Checks wthether its ok to let the screen fade in yet
|
|
PROC IS_SKIP_OK_TO_FADE_IN_NOW(BOOL bUpdateEvents, BOOL bShopOpen)
|
|
|
|
BOOL bRunLoop = TRUE
|
|
WHILE bRunLoop
|
|
BOOL bFinished = TRUE
|
|
|
|
IF bUpdateEvents
|
|
Manage_Mission_Events()
|
|
ENDIF
|
|
|
|
IF Is_Event_Triggered(mef_ambient_office)
|
|
IF NOT mEvents[mef_ambient_office].bSafeAfterSkip
|
|
bFinished = FALSE
|
|
CPRINTLN(DEBUG_MIKE, "IS_SKIP_OK_TO_FADE_IN_NOW() NOT FINISHED: EVENT mef_ambient_office not ready")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF Is_Event_Triggered(mef_engineer_follow)
|
|
IF NOT mEvents[mef_engineer_follow].bSafeAfterSkip
|
|
bFinished = FALSE
|
|
CPRINTLN(DEBUG_MIKE, "IS_SKIP_OK_TO_FADE_IN_NOW() NOT FINISHED: EVENT mef_engineer_follow not ready")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF NOT HAVE_ALL_STREAMING_REQUESTS_COMPLETED(PLAYER_PED_ID())
|
|
bFinished = FALSE
|
|
CPRINTLN(DEBUG_MIKE, "IS_SKIP_OK_TO_FADE_IN_NOW() NOT FINISHED: Player streaming requests not finished")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bShopOpen
|
|
IF NOT IS_SHOP_OPEN_FOR_BUSINESS(CLOTHES_SHOP_M_04_HW)
|
|
bFinished = FALSE
|
|
CPRINTLN(DEBUG_MIKE, "IS_SKIP_OK_TO_FADE_IN_NOW() NOT FINISHED: Shop Not Open")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bFinished
|
|
bRunLoop = FALSE
|
|
CPRINTLN(DEBUG_MIKE, "IS_SKIP_OK_TO_FADE_IN_NOW() FINISHED")
|
|
ELSE
|
|
WAIT(0)
|
|
CPRINTLN(DEBUG_MIKE, "IS_SKIP_OK_TO_FADE_IN_NOW(BOOL bUpdateEvents:", bUpdateEvents," BOOL bShopOpen:", bShopOpen)
|
|
ENDIF
|
|
ENDWHILE
|
|
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
Unload_Asset_NewLoadScene(sAssetData)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC GET_SKIP_STAGE_COORD_AND_HEADING(mission_stage_flag eStage, VECTOR &vCoord, FLOAT &fHeading)
|
|
|
|
SWITCH eStage
|
|
CASE msf_st0_intro_cutscene vCoord = <<1274.3231, -1710.7501, 53.7715>> fHeading = 0.0 BREAK
|
|
CASE msf_st1_get_clothes vCoord = <<1279.1504, -1729.9221, 51.5473>> fHeading = 202.8531 BREAK
|
|
CASE msf_st2_go_to_offices vCoord = <<126.6064, -212.3286, 53.5578>> fHeading = 341.1025 BREAK
|
|
CASE msf_st3_go_to_computer vCoord = <<-1047.9139, -233.2071, 38.0145>> fHeading = 124.0412 BREAK
|
|
CASE msf_st4_mini_game vCoord = <<-1060.9747, -244.5783, 43.0211>> fHeading = 21.5040 BREAK
|
|
CASE msf_st5_plant_bomb vCoord = <<-1060.9747, -244.5783, 43.0211>> fHeading = 21.5040 BREAK
|
|
CASE msf_st6_leave_building vCoord = <<-1055.0518, -231.8623, 43.0211>> fHeading = 203.6044 BREAK
|
|
CASE msf_st7_go_home vCoord = <<-1080.3341, -263.5708, 36.7904>> fHeading = 286.3264 BREAK
|
|
CASE msf_st8_tv_start vCoord = <<-803.3376, 172.3380, 71.8447>> fHeading = 284.5370 BREAK
|
|
CASE msf_st9_tv_detonate vCoord = <<-803.3376, 172.3380, 71.8447>> fHeading = 284.5370 BREAK
|
|
CASE msf_st10_mission_passed vCoord = <<-803.3376, 172.3380, 71.8447>> fHeading = 284.5370 BREAK
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
PROC MISSION_STAGE_SKIP()
|
|
VECTOR vPlayerPos
|
|
|
|
// a skip has been made
|
|
IF bDoSkip = TRUE
|
|
|
|
// Begin the skip if the switching is idle
|
|
IF stageSwitch = STAGESWITCH_IDLE
|
|
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
IF NOT IS_SCREEN_FADING_OUT()
|
|
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME_SHORT)
|
|
ENDIF
|
|
ELSE
|
|
Mission_Set_Stage(int_to_enum(mission_stage_flag, iSkipToStage))
|
|
ENDIF
|
|
|
|
// needs to be carried out before states own entering stage
|
|
ELIF stageSwitch = STAGESWITCH_ENTERING
|
|
|
|
//MISSION_STAT_SYSTEM_ALERT_TIME_WARP()
|
|
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), true)
|
|
|
|
Mission_Reset_Everything()
|
|
IF IS_CUTSCENE_ACTIVE()
|
|
REMOVE_CUTSCENE()
|
|
ENDIF
|
|
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 0, PLAYER_PED_ID(), "MICHAEL")
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
|
|
Start_Skip_Streaming(sAssetData)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
|
|
ENDIF
|
|
|
|
// Warping
|
|
// -----------------------------------------------
|
|
|
|
IF NOT IS_REPLAY_BEING_SET_UP()
|
|
|
|
CPRINTLN(DEBUG_MIKE, "MISSION_STAGE_SKIP() Performing NON-REPLAY skip warping")
|
|
|
|
VECTOR vWarpCoord
|
|
FLOAT fWarpHeading
|
|
GET_SKIP_STAGE_COORD_AND_HEADING(int_to_enum(mission_stage_flag, iSkipToStage), vWarpCoord, fWarpHeading)
|
|
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), vWarpCoord)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), fWarpHeading)
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
|
|
Load_Asset_NewLoadScene_Sphere(sAssetData, vWarpCoord, 50.0)
|
|
|
|
CPRINTLN(DEBUG_MIKE, "MISSION_STAGE_SKIP() NON-REPLAY skip warp coord ", vWarpCoord, " warp heading ", fWarpHeading)
|
|
|
|
ENDIF
|
|
|
|
// Asset loading
|
|
// -----------------------------------------------
|
|
CPRINTLN(DEBUG_MIKE, "MISSION_STAGE_SKIP() Requesting assets")
|
|
SWITCH int_to_enum(mission_stage_flag, mission_stage)
|
|
CASE msf_st0_intro_cutscene
|
|
REQUEST_CUTSCENE("lester_1_int")
|
|
Register_Ped_Prop_For_Cutscene(sCutscenePedVariationRegister, "Lester", ANCHOR_EYES, 0,0)
|
|
Load_Asset_Model(sAssetData, IG_LESTERCREST)
|
|
Load_Asset_Model(sAssetData, Prop_WheelChair_01_S)
|
|
BREAK
|
|
CASE msf_st1_get_clothes
|
|
Load_Asset_AnimDict(sAssetData, "MOVE_P_M_ZERO_RUCKSACK")
|
|
BREAK
|
|
CASE msf_st2_go_to_offices
|
|
Load_Asset_AnimDict(sAssetData, "MOVE_P_M_ZERO_RUCKSACK")
|
|
BREAK
|
|
CASE msf_st3_go_to_computer
|
|
Load_Asset_Model(sAssetData, mod_hipster_main)
|
|
Load_Asset_Model(sAssetData, mod_hipster_m)
|
|
Load_Asset_Model(sAssetData, mod_hipster_f)
|
|
Load_Asset_Model(sAssetData, mod_hipster_f_heel)
|
|
Load_Asset_Waypoint(sAssetData, str_wp_engineer_route)
|
|
Load_Asset_AnimDict(sAssetData, "MOVE_P_M_ZERO_RUCKSACK")
|
|
// Load_Asset_AssistedLine(sAssetData, al_door1)
|
|
// Load_Asset_AssistedLine(sAssetData, al_door2)
|
|
BREAK
|
|
CASE msf_st4_mini_game
|
|
Load_Asset_Audiobank(sAssetData, "COMPUTERS")
|
|
Load_Asset_Audiobank(sAssetData, "Lester1A_01")
|
|
Load_Asset_Audiobank(sAssetData, "Lester1A_Qub3d")
|
|
Load_Asset_Model(sAssetData, mod_hipster_main)
|
|
Load_Asset_Scaleform(sAssetData, "desktop_pc", mov)
|
|
// Load_Asset_AssistedLine(sAssetData, al_door1)
|
|
// Load_Asset_AssistedLine(sAssetData, al_door2)
|
|
Load_Asset_AnimDict(sAssetData, "MOVE_P_M_ZERO_RUCKSACK")
|
|
BREAK
|
|
CASE msf_st5_plant_bomb
|
|
Load_Asset_Model(sAssetData, IG_JAY_NORRIS)
|
|
Load_Asset_Model(sAssetData, mod_hipster_main)
|
|
Load_Asset_Model(sAssetData, mod_hipster_m)
|
|
Load_Asset_Model(sAssetData, mod_hipster_f)
|
|
Load_Asset_Model(sAssetData, mod_hipster_f_heel)
|
|
Load_Asset_Model(sAssetData, PROP_PAPER_BALL)
|
|
Load_Asset_Model(sAssetData, PROP_MONITOR_01C)
|
|
Load_Asset_AnimDict(sAssetData, "MOVE_P_M_ZERO_RUCKSACK")
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_boardroom_main)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_boardroom_intro)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_paper_throw)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_interview_1st_exit)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_airguitar_1st_exit)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_engineer_airguitar)
|
|
Load_Asset_Model(sAssetData, Prop_Off_Chair_01)
|
|
// Load_Asset_AssistedLine(sAssetData, al_door1)
|
|
// Load_Asset_AssistedLine(sAssetData, al_door2)
|
|
Load_Asset_Audiobank(sAssetData, "Lester1A_01")
|
|
Load_Asset_Audiobank(sAssetData, "Lester1A_Qub3d")
|
|
BREAK
|
|
CASE msf_st6_leave_building
|
|
Load_Asset_Model(sAssetData, IG_JAY_NORRIS)
|
|
Load_Asset_Model(sAssetData, Prop_Off_Chair_01)
|
|
Load_Asset_Model(sAssetData, mod_hipster_main)
|
|
Load_Asset_Model(sAssetData, mod_hipster_m)
|
|
Load_Asset_Model(sAssetData, mod_hipster_f)
|
|
Load_Asset_Model(sAssetData, mod_hipster_f_heel)
|
|
Load_Asset_Model(sAssetData, PROP_PAPER_BALL)
|
|
Load_Asset_Model(sAssetData, PROP_HACKY_SACK_01)
|
|
Load_Asset_Model(sAssetData, PROP_MONITOR_01C)
|
|
Load_Asset_Model(sAssetData, P_MICHAEL_BACKPACK_S)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_paper_throw)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_interview_2nd)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_boardroom_main)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_boardroom_intro)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_airguitar_2nd)
|
|
// Load_Asset_AssistedLine(sAssetData, al_door1)
|
|
// Load_Asset_AssistedLine(sAssetData, al_door2)
|
|
// Load_Asset_AssistedLine(sAssetData, al_stairs_down)
|
|
Load_Asset_Audiobank(sAssetData, "Lester1A_01")
|
|
Load_Asset_Audiobank(sAssetData, "Lester1A_Qub3d")
|
|
Load_Asset_AnimDict(sAssetData, "amb@prop_human_seat_computer@male@base")
|
|
BREAK
|
|
CASE msf_st7_go_home
|
|
Load_Asset_Model(sAssetData, mod_hipster_f)
|
|
BREAK
|
|
CASE msf_st8_tv_start
|
|
Load_Asset_Model(sAssetData, GET_NPC_PED_MODEL(CHAR_TRACEY))
|
|
Load_Asset_Model(sAssetData, PROP_CS_REMOTE_01)
|
|
Load_Asset_Model(sAssetData, Prop_Phone_ING)
|
|
Load_Asset_AnimDict(sAssetData, ad_ig_1)
|
|
Load_Asset_Audiobank(sAssetData, "Lester1B")
|
|
Load_Asset_Audiobank(sAssetData, "SAFEHOUSE_MICHAEL_SIT_SOFA")
|
|
BREAK
|
|
CASE msf_st9_tv_detonate
|
|
Load_Asset_Model(sAssetData, GET_NPC_PED_MODEL(CHAR_TRACEY))
|
|
Load_Asset_Model(sAssetData, PROP_CS_REMOTE_01)
|
|
Load_Asset_Model(sAssetData, Prop_Phone_ING)
|
|
Load_Asset_AnimDict(sAssetData, ad_ig_1)
|
|
Load_Asset_Audiobank(sAssetData, "Lester1B")
|
|
Load_Asset_Audiobank(sAssetData, "SAFEHOUSE_MICHAEL_SIT_SOFA")
|
|
BREAK
|
|
CASE msf_st10_mission_passed
|
|
Load_Asset_NewLoadScene_Sphere(sAssetData, <<-803.3376, 172.3380, 71.8447>>, 10.0)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
WHILE NOT Update_Skip_Streaming(sAssetData)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
CPRINTLN(DEBUG_MIKE, "MISSION_STAGE_SKIP() Skip streaming complete")
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
CDEBUG1LN(DEBUG_MIKE, "MISSION_STAGE_SKIP() replay checkpoint vehicle available, loading now.")
|
|
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
|
|
WHILE NOT HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
|
|
WAIT(0)
|
|
CDEBUG1LN(DEBUG_MIKE, "MISSION_STAGE_SKIP() waiting for HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()")
|
|
ENDWHILE
|
|
ENDIF
|
|
|
|
IF bRequestedPreload
|
|
CDEBUG1LN(DEBUG_MIKE, "Starting: Preload Ped Variation")
|
|
WHILE NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(PLAYER_PED_ID())
|
|
WAIT(0)
|
|
CDEBUG1LN(DEBUG_MIKE, "Waiting on: Preload Ped Variation")
|
|
ENDWHILE
|
|
bRequestedPreload = TRUE
|
|
CDEBUG1LN(DEBUG_MIKE, "Finished: Preload Ped Variation")
|
|
ENDIF
|
|
|
|
BOOL bSkipFadeIn
|
|
|
|
// Set up the mission for that current stage
|
|
SWITCH int_to_enum(mission_stage_flag, mission_stage)
|
|
|
|
CASE msf_st0_intro_cutscene
|
|
|
|
g_QuickSaveDisabledByScript = TRUE
|
|
|
|
g_sTriggerSceneAssets.ped[0] = CREATE_PED(PEDTYPE_MISSION, IG_LESTERCREST, <<1275.3646, -1710.7744, 53.7715>>, 333.7887)
|
|
g_sTriggerSceneAssets.object[0] = CREATE_OBJECT(Prop_WheelChair_01_S, <<1275.3646, -1710.7744, 53.7715>>)
|
|
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
|
|
Add_Scenario_Blocking()
|
|
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(FALSE, TRUE)
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(0.0)
|
|
SET_MAX_WANTED_LEVEL(0)
|
|
|
|
bSkipFadeIn = TRUE
|
|
|
|
BREAK
|
|
|
|
// Skip to drive to clothes shop
|
|
CASE msf_st1_get_clothes
|
|
|
|
SET_CLOCK_TIME(7,0,0)
|
|
|
|
g_replay.iReplayInt[0] = -1
|
|
g_replay.iReplayInt[1] = -1
|
|
g_replay.iReplayInt[2] = -1
|
|
REMOVE_PROGRAMMER_OUTFIT()
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
veh_replay = CREATE_REPLAY_CHECKPOINT_VEHICLE(v_LestersHouseParkingCoord, f_LestersHouseParkingHeading)
|
|
ENDIF
|
|
|
|
Trigger_Event(mef_manage_bag)
|
|
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
//SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(),PED_COMP_SPECIAL2,9,0,0)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK, FALSE)
|
|
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(), "MOVE_P_M_ZERO_RUCKSACK")
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), FALSE)
|
|
|
|
Add_Scenario_Blocking()
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
IF DOES_ENTITY_EXIST(veh_replay)
|
|
END_REPLAY_SETUP(veh_replay, VS_DRIVER)
|
|
ELSE
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
ENDIF
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(FALSE, TRUE)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
BREAK
|
|
|
|
// Skip leaving the clothes shop
|
|
CASE msf_st2_go_to_offices
|
|
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
|
|
CLEAR_AREA(v_ShopBlip, 25.0, TRUE)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
veh_replay = CREATE_REPLAY_CHECKPOINT_VEHICLE(<< 127.5399, -197.6886, 53.4039 >>, 251.4021)
|
|
ENDIF
|
|
|
|
// Make him look like a programmer
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
PUT_PLAYER_IN_PROGRAMMER_OUTFIT()
|
|
//SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(),PED_COMP_SPECIAL2,9,0,0)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK, FALSE)
|
|
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(), "MOVE_P_M_ZERO_RUCKSACK")
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), FALSE)
|
|
|
|
Trigger_Event(mef_ambient_receptionist)
|
|
Trigger_Event(mef_manage_bag)
|
|
|
|
Add_Scenario_Blocking()
|
|
|
|
bObtainedClothing = TRUE
|
|
|
|
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(FALSE, FALSE)
|
|
|
|
SET_DOOR_STATE(GET_SHOP_DOOR_NAME(CLOTHES_SHOP_M_04_HW, 0), DOORSTATE_UNLOCKED)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 3000)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
BREAK
|
|
CASE msf_st3_go_to_computer
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
|
|
WAYPOINT_RECORDING_GET_COORD(str_wp_engineer_route, 1, vPlayerPos)
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), vPlayerPos)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 124.0412)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
veh_replay = CREATE_REPLAY_CHECKPOINT_VEHICLE(v_LifeInvaderCarParkCoord, f_LifeInvaderCarParkHeading)
|
|
ENDIF
|
|
|
|
// Make him look like a programmer
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
PUT_PLAYER_IN_PROGRAMMER_OUTFIT()
|
|
//SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(),PED_COMP_SPECIAL2,9,0,0)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK, FALSE)
|
|
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(), "MOVE_P_M_ZERO_RUCKSACK")
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), FALSE)
|
|
|
|
// create other ped
|
|
WAYPOINT_RECORDING_GET_COORD(str_wp_engineer_route, 2, vPlayerPos)
|
|
peds[mpf_smoker] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_main, vPlayerPos, 118.9741)
|
|
|
|
SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(peds[mpf_smoker], FALSE)
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 3, peds[mpf_smoker], "LIEngineer")
|
|
|
|
Trigger_Event(mef_ambient_receptionist)
|
|
mEvents[mef_engineer_follow].bSafeAfterSkip = FALSE
|
|
Trigger_Event(mef_engineer_follow)
|
|
|
|
Add_Scenario_Blocking()
|
|
|
|
bObtainedClothing = TRUE
|
|
bDisableConspicuousBehavior = TRUE
|
|
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_L, DOORSTATE_UNLOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_R, DOORSTATE_UNLOCKED)
|
|
|
|
START_AUDIO_SCENE("LESTER_1A_FOLLOW_PROGRAMMER")
|
|
|
|
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(TRUE, FALSE)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2000, 117.8704, FALSE)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
BREAK
|
|
CASE msf_st4_mini_game
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
veh_replay = CREATE_REPLAY_CHECKPOINT_VEHICLE(v_LifeInvaderCarParkCoord, f_LifeInvaderCarParkHeading)
|
|
ENDIF
|
|
|
|
// Make him look like a programmer
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
PUT_PLAYER_IN_PROGRAMMER_OUTFIT()
|
|
//SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(),PED_COMP_SPECIAL2,0,0)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK, FALSE)
|
|
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(), "MOVE_P_M_ZERO_RUCKSACK")
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), FALSE)
|
|
|
|
// create other ped
|
|
peds[mpf_smoker] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_main, << -1063.4578, -243.7453, 43.0347 >>, 260.8757)
|
|
SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(peds[mpf_smoker], FALSE)
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 3, peds[mpf_smoker], "LIEngineer")
|
|
|
|
Add_Scenario_Blocking()
|
|
|
|
bObtainedClothing = TRUE
|
|
bDisableConspicuousBehavior = TRUE
|
|
|
|
SET_DOOR_STATE(DOORNAME_LINVADER_OFFICE_UP, DOORSTATE_UNLOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_L, DOORSTATE_UNLOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_R, DOORSTATE_UNLOCKED)
|
|
|
|
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(FALSE, FALSE)
|
|
|
|
INT i
|
|
FOR i = 0 TO iUsablePopups-1
|
|
IF sPopups[i].iType != -1
|
|
AND sPopups[i].iSfxLoop != -1
|
|
AND sPopups[i].bSfxPlaying = FALSE
|
|
STRING strSFX
|
|
IF iPopupsSFXPlaying < 6
|
|
SWITCH (iPopupsSFXPlaying)
|
|
CASE 0 strSFX = "POPUP_MUSIC_01" BREAK
|
|
CASE 1 strSFX = "POPUP_MUSIC_02" BREAK
|
|
CASE 2 strSFX = "POPUP_MUSIC_03" BREAK
|
|
CASE 3 strSFX = "POPUP_MUSIC_04" BREAK
|
|
CASE 4 strSFX = "POPUP_MUSIC_05" BREAK
|
|
CASE 5 strSFX = "POPUP_MUSIC_06" BREAK
|
|
DEFAULT strSFX = "POPUP_MUSIC_RND" BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
strSFX = "POPUP_MUSIC_RND"
|
|
ENDIF
|
|
PLAY_SOUND_FROM_COORD(sPopups[i].iSfxLoop, strSFX, <<-1059.63, -244.61, 43.92>>, "LESTER1A_SOUNDS")
|
|
SET_VARIABLE_ON_SOUND(sPopups[i].iSfxLoop, "State", 2)
|
|
CPRINTLN(DEBUG_MIKE, "MINI GAME Porn popup sfx started with volume 2 for popup: ", i)
|
|
sPopups[i].bSfxPlaying = TRUE
|
|
iPopupsSFXPlaying++
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
REPEAT COUNT_OF(sPopups) i
|
|
IF sPopups[i].bSfxPlaying
|
|
AND sPopups[i].iSfxLoop != -1
|
|
SET_VARIABLE_ON_SOUND(sPopups[i].iSfxLoop, "TracksPlaying", TO_FLOAT(CLAMP_INT(iPopupsSFXPlaying, 1, 12)))
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
WHILE NOT DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<< -1060.1737, -245.2477, 43.6942 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
WAIT(0)
|
|
CDEBUG1LN(DEBUG_MIKE, "MISSION_STAGE_SKIP() can't find the programmer's chair")
|
|
ENDWHILE
|
|
objects[mof_smokers_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<< -1060.1737, -245.2477, 43.6942 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
BREAK
|
|
|
|
CASE msf_st5_plant_bomb
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
veh_replay = CREATE_REPLAY_CHECKPOINT_VEHICLE(v_LifeInvaderCarParkCoord, f_LifeInvaderCarParkHeading)
|
|
ENDIF
|
|
|
|
// Make him look like a programmer
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
PUT_PLAYER_IN_PROGRAMMER_OUTFIT()
|
|
//SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(),PED_COMP_SPECIAL2,9,0,0)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK, FALSE)
|
|
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(), "MOVE_P_M_ZERO_RUCKSACK")
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), FALSE)
|
|
|
|
// create other ped
|
|
peds[mpf_smoker] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_main, << -1063.4578, -243.7453, 43.0347 >>, 260.8757)
|
|
SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(peds[mpf_smoker], FALSE)
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 3, peds[mpf_smoker], "LIEngineer")
|
|
|
|
Trigger_Event(mef_ambient_receptionist)
|
|
Trigger_Event(mef_ambient_office)
|
|
Trigger_Event(mef_ambient_interview)
|
|
Trigger_Event(mef_ambient_boardroom)
|
|
Trigger_Event(mef_ambient_paper_throw)
|
|
Trigger_Event(mef_engineer_air_guitar)
|
|
Trigger_Event(mef_ambient_dialogue)
|
|
|
|
Add_Scenario_Blocking()
|
|
|
|
bObtainedClothing = TRUE
|
|
bDisableConspicuousBehavior = TRUE
|
|
|
|
SET_DOOR_STATE(DOORNAME_LINVADER_OFFICE_UP, DOORSTATE_UNLOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_L, DOORSTATE_UNLOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_R, DOORSTATE_UNLOCKED)
|
|
|
|
START_AUDIO_SCENE("LESTER_1A_RIG_EXPLOSIVE")
|
|
|
|
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(TRUE, FALSE)
|
|
|
|
WHILE NOT DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<< -1060.1737, -245.2477, 43.6942 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
WAIT(0)
|
|
CDEBUG1LN(DEBUG_MIKE, "MISSION_STAGE_SKIP() can't find the programmer's chair")
|
|
ENDWHILE
|
|
objects[mof_smokers_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<< -1060.1737, -245.2477, 43.6942 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
|
|
IF NOT bSwappedMonitorToClean
|
|
IF bSwappedMonitorToPopups
|
|
CREATE_MODEL_SWAP(v_engineer_monitor, 1.0, PROP_MONITOR_01D, PROP_MONITOR_01C, TRUE)
|
|
ELSE
|
|
CREATE_MODEL_SWAP(v_engineer_monitor, 1.0, PROP_MONITOR_LI, PROP_MONITOR_01C, TRUE)
|
|
ENDIF
|
|
Unload_Asset_Model(sAssetData, PROP_MONITOR_01C)
|
|
bSwappedMonitorToClean = TRUE
|
|
ENDIF
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_IDLE, FALSE, FAUS_CUTSCENE_EXIT)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
BREAK
|
|
CASE msf_st6_leave_building
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
SET_DOOR_STATE(DOORNAME_LINVADER_OFFICE_UP, DOORSTATE_UNLOCKED)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
veh_replay = CREATE_REPLAY_CHECKPOINT_VEHICLE(v_LifeInvaderCarParkCoord, f_LifeInvaderCarParkHeading)
|
|
ENDIF
|
|
|
|
// Make him look like a programmer
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
PUT_PLAYER_IN_PROGRAMMER_OUTFIT()
|
|
|
|
peds[mpf_smoker] = CREATE_PED(PEDTYPE_MISSION, mod_hipster_main, << -1062.2268, -243.1470, 43.0212 >>, 293.0184)
|
|
SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(peds[mpf_smoker], FALSE)
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 3, peds[mpf_smoker], "LIEngineer")
|
|
|
|
TRIGGER_EVENT(mef_ambient_office)
|
|
TRIGGER_EVENT(mef_ambient_interview)
|
|
TRIGGER_EVENT(mef_ambient_boardroom)
|
|
TRIGGER_EVENT(mef_ambient_paper_throw)
|
|
//Trigger_Event(mef_engineer_air_guitar)
|
|
TRIGGER_EVENT(mef_ambient_receptionist)
|
|
Trigger_Event(mef_ambient_dialogue)
|
|
|
|
Add_Scenario_Blocking()
|
|
|
|
bObtainedClothing = TRUE
|
|
bDisableConspicuousBehavior = TRUE
|
|
|
|
Create_Prop(objects[mof_mike_rucksack], P_MICHAEL_BACKPACK_S, v_BagCoord)
|
|
SET_ENTITY_COLLISION(objects[mof_mike_rucksack].id, FALSE)
|
|
SET_ENTITY_COORDS(objects[mof_mike_rucksack].id, v_BagCoord)
|
|
SET_ENTITY_ROTATION(objects[mof_mike_rucksack].id, v_BagRot)
|
|
FREEZE_ENTITY_POSITION(objects[mof_mike_rucksack].id, TRUE)
|
|
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_L, DOORSTATE_UNLOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_R, DOORSTATE_UNLOCKED)
|
|
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(enum_to_int(DOORHASH_LINVADER_OFFICE_UP), 0.0, TRUE, TRUE)
|
|
|
|
START_AUDIO_SCENE("LESTER_1A_LEAVE_OFFICE")
|
|
|
|
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(TRUE, FALSE)
|
|
|
|
WHILE NOT DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<< -1060.1737, -245.2477, 43.6942 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
WAIT(0)
|
|
CDEBUG1LN(DEBUG_MIKE, "MISSION_STAGE_SKIP() can't find the programmer's chair")
|
|
ENDWHILE
|
|
objects[mof_smokers_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<< -1060.1737, -245.2477, 43.6942 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
|
|
IF NOT bSwappedMonitorToClean
|
|
IF bSwappedMonitorToPopups
|
|
CREATE_MODEL_SWAP(v_engineer_monitor, 1.0, PROP_MONITOR_01D, PROP_MONITOR_01C, TRUE)
|
|
ELSE
|
|
CREATE_MODEL_SWAP(v_engineer_monitor, 1.0, PROP_MONITOR_LI, PROP_MONITOR_01C, TRUE)
|
|
ENDIF
|
|
Unload_Asset_Model(sAssetData, PROP_MONITOR_01C)
|
|
bSwappedMonitorToClean = TRUE
|
|
ENDIF
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
BREAK
|
|
CASE msf_st7_go_home
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
PUT_PLAYER_IN_PROGRAMMER_OUTFIT()
|
|
bObtainedClothing = TRUE
|
|
|
|
SET_DOOR_STATE(DOORNAME_LINVADER_OFFICE_UP, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_R, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_R, DOORSTATE_LOCKED)
|
|
|
|
TRIGGER_EVENT(mef_ambient_receptionist)
|
|
Trigger_Event(mef_tracey)
|
|
|
|
bDisableConspicuousBehavior = FALSE
|
|
bAllowRunning = TRUE
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
veh_replay = CREATE_REPLAY_CHECKPOINT_VEHICLE(v_LifeInvaderCarParkCoord, f_LifeInvaderCarParkHeading)
|
|
ENDIF
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(FALSE, TRUE)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(0.1)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
BREAK
|
|
CASE msf_st8_tv_start
|
|
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
PUT_PLAYER_IN_PROGRAMMER_OUTFIT()
|
|
bObtainedClothing = TRUE
|
|
|
|
bDisableConspicuousBehavior = FALSE
|
|
bAllowRunning = TRUE
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
veh_replay = CREATE_REPLAY_CHECKPOINT_VEHICLE(<<-827.0287, 175.9394, 69.8927>>, 331.2491)
|
|
ENDIF
|
|
|
|
SET_DOOR_STATE(DOORNAME_LINVADER_OFFICE_UP, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_R, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_R, DOORSTATE_LOCKED)
|
|
|
|
Create_Prop(objects[mof_tv_remote], PROP_CS_REMOTE_01, GET_PED_BONE_COORDS(PLAYER_PED_ID(), BONETAG_PH_L_HAND, <<0,0,0>>))
|
|
Unload_Asset_Model(sAssetData, PROP_CS_REMOTE_01)
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_tv_remote].id, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_L_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
|
|
cam_tv = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, vCamPos[CAMS_SCRIPT], vCamRot[CAMS_SCRIPT], 40.0, TRUE)
|
|
SHAKE_CAM(cam_tv, "HAND_SHAKE", 0.3)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
DISPLAY_RADAR(FALSE)
|
|
DISPLAY_HUD(FALSE)
|
|
|
|
SET_NEW_ANIM_TASK(MAS_R_IDLE, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_LOOPING|AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME, TRUE)
|
|
|
|
WHILE NOT IS_TV_SCRIPT_AVAILABLE_FOR_USE(TV_LOC_MICHAEL_PROJECTOR)
|
|
wait(0)
|
|
ENDWHILE
|
|
|
|
START_AMBIENT_TV_PLAYBACK(TV_LOC_MICHAEL_PROJECTOR)
|
|
PLAY_TV_CHANNEL_WITH_PLAYLIST(TV_LOC_MICHAEL_PROJECTOR, TVCHANNELTYPE_CHANNEL_2, TV_PLAYLIST_SPECIAL_LEST1_INTRO_FAME_OR_SHAME, TRUE)
|
|
bTVTurnedOn = TRUE
|
|
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(FALSE, TRUE)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
BREAK
|
|
CASE msf_st9_tv_detonate
|
|
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
PUT_PLAYER_IN_PROGRAMMER_OUTFIT()
|
|
bObtainedClothing = TRUE
|
|
|
|
SET_DOOR_STATE(DOORNAME_LINVADER_OFFICE_UP, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_R, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_R, DOORSTATE_LOCKED)
|
|
|
|
Create_Prop(objects[mof_tv_remote], PROP_CS_REMOTE_01, GET_PED_BONE_COORDS(PLAYER_PED_ID(), BONETAG_PH_L_HAND, <<0,0,0>>))
|
|
Unload_Asset_Model(sAssetData, PROP_CS_REMOTE_01)
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_tv_remote].id, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_L_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
|
|
|
|
bDisableConspicuousBehavior = FALSE
|
|
bAllowRunning = TRUE
|
|
bExterminated = TRUE
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
veh_replay = CREATE_REPLAY_CHECKPOINT_VEHICLE(<<-827.0287, 175.9394, 69.8927>>, 331.2491)
|
|
ENDIF
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
cam_tv = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, vCamPos[CAMS_SCRIPT], vCamRot[CAMS_SCRIPT], 40.0, TRUE)
|
|
SHAKE_CAM(cam_tv, "HAND_SHAKE", 0.3)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
DISPLAY_RADAR(FALSE)
|
|
DISPLAY_HUD(FALSE)
|
|
|
|
SET_NEW_ANIM_TASK(MAS_R_IDLE, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_LOOPING|AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY|AF_HOLD_LAST_FRAME, TRUE)
|
|
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(FALSE, TRUE)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
BREAK
|
|
CASE msf_st10_mission_passed
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
PUT_PLAYER_IN_PROGRAMMER_OUTFIT()
|
|
bObtainedClothing = TRUE
|
|
|
|
SET_DOOR_STATE(DOORNAME_LINVADER_OFFICE_UP, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_R, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_R, DOORSTATE_LOCKED)
|
|
|
|
bDisableConspicuousBehavior = FALSE
|
|
bAllowRunning = TRUE
|
|
bExterminated = TRUE
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE()
|
|
WHILE NOT HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
|
|
wait(0)
|
|
ENDWHILE
|
|
veh_replay = CREATE_REPLAY_CHECKPOINT_VEHICLE(<<-827.0287, 175.9394, 69.8927>>, 331.2491)
|
|
ENDIF
|
|
|
|
IF IS_REPLAY_BEING_SET_UP()
|
|
END_REPLAY_SETUP()
|
|
ENDIF
|
|
IS_SKIP_OK_TO_FADE_IN_NOW(FALSE, TRUE)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
CPRINTLN(DEBUG_MIKE, "MISSION_STAGE_SKIP() Skip finished")
|
|
|
|
IF (IS_SCREEN_FADED_OUT()
|
|
OR NOT IS_SCREEN_FADING_IN())
|
|
AND NOT bSkipFadeIn
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
CPRINTLN(DEBUG_MIKE, "MISSION_STAGE_SKIP() Fading in")
|
|
ENDIF
|
|
|
|
bDoSkip = FALSE
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
// Check is a skip is being asked for
|
|
ELIF IS_SCREEN_FADED_IN()
|
|
AND NOT IS_CUTSCENE_PLAYING()
|
|
|
|
INT iCurrentStage
|
|
INT iReturnStage
|
|
|
|
IF TRANSLATE_TO_Z_MENU(zMenuNames, mission_stage, iCurrentStage)
|
|
|
|
DONT_DO_J_SKIP(locates_data)
|
|
IF LAUNCH_MISSION_STAGE_MENU(zMenuNames, iReturnStage, iCurrentStage, FALSE, "Lester 1", FALSE, TRUE, DEFAULT, DEFAULT, DEFAULT, TRUE)
|
|
|
|
iSkipToStage = TRANSLATE_FROM_Z_MENU(zMenuNames, iReturnStage)
|
|
|
|
IF IS_CUTSCENE_ACTIVE()
|
|
STOP_CUTSCENE()
|
|
REMOVE_CUTSCENE()
|
|
ENDIF
|
|
|
|
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
|
|
bDoSkip = TRUE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
//PURPOSE: Sets up the mission
|
|
PROC Mission_Setup()
|
|
|
|
SET_MISSION_FLAG(TRUE)
|
|
|
|
// Handle replay
|
|
//----------------------------------------------------------------------
|
|
IF IS_REPLAY_IN_PROGRESS() // RETRIES
|
|
OR IS_REPEAT_PLAY_ACTIVE() // REPLAY VIA START MENU
|
|
|
|
IF IS_REPEAT_PLAY_ACTIVE()
|
|
SET_INTERIOR_CAPPED(INTERIOR_V_LESTERS, FALSE)
|
|
ENDIF
|
|
|
|
IF IS_REPLAY_IN_PROGRESS()
|
|
|
|
iSkipToStage = GET_REPLAY_MID_MISSION_STAGE()
|
|
CPRINTLN(DEBUG_MIKE, "LES1A: Get_Replay_Mid_Mission_Stage() = ", iSkipToStage)
|
|
IF g_bShitskipAccepted
|
|
iSkipToStage += 1
|
|
CPRINTLN(DEBUG_MIKE, "LES1A: g_bShitskipAccepted")
|
|
ENDIF
|
|
|
|
ELIF IS_REPEAT_PLAY_ACTIVE()
|
|
|
|
g_replay.iReplayInt[0] = -1
|
|
g_replay.iReplayInt[1] = -1
|
|
g_replay.iReplayInt[2] = -1
|
|
iSkipToStage = 0
|
|
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_MIKE, "LES1A: Checkpoint skipping to ", iSkipToStage)
|
|
|
|
// Translate checkpoint into mission stage
|
|
SWITCH iSkipToStage
|
|
CASE 0 iSkipToStage = enum_to_int(msf_st0_intro_cutscene) BREAK
|
|
CASE 1 iSkipToStage = enum_to_int(msf_st1_get_clothes) BREAK
|
|
CASE 2 iSkipToStage = enum_to_int(msf_st2_go_to_offices) BREAK
|
|
CASE 3 iSkipToStage = enum_to_int(msf_st3_go_to_computer) BREAK
|
|
CASE 4 iSkipToStage = enum_to_int(msf_st5_plant_bomb) BREAK
|
|
CASE 5 iSkipToStage = enum_to_int(msf_st6_leave_building) BREAK
|
|
CASE 6 iSkipToStage = enum_to_int(msf_st7_go_home) BREAK
|
|
CASE 7 iSkipToStage = enum_to_int(msf_st8_tv_start) BREAK
|
|
CASE 8 iSkipToStage = enum_to_int(msf_st10_mission_passed) BREAK
|
|
ENDSWITCH
|
|
|
|
CPRINTLN(DEBUG_MIKE, "LES1A: stage skipping to ", GET_MISSION_STAGE_NAME(int_to_enum(mission_stage_flag, iSkipToStage)))
|
|
|
|
// New replay streaming
|
|
IF IS_REPLAY_IN_PROGRESS()
|
|
VECTOR vSkipToCoord
|
|
FLOAT fSkipToHeading
|
|
GET_SKIP_STAGE_COORD_AND_HEADING(int_to_enum(mission_stage_flag, iSkipToStage), vSkipToCoord, fSkipToHeading)
|
|
START_REPLAY_SETUP(vSkipToCoord, fSkipToHeading)
|
|
CPRINTLN(DEBUG_MIKE, "LES1A: Using replay warp system - Warp Coord ", vSkipToCoord, " Warp Heading ", fSkipToHeading)
|
|
ENDIF
|
|
|
|
bDoSkip = TRUE
|
|
ELSE
|
|
g_replay.iReplayInt[0] = -1
|
|
g_replay.iReplayInt[1] = -1
|
|
g_replay.iReplayInt[2] = -1
|
|
ENDIF
|
|
|
|
SET_BUILDING_STATE(BUILDINGNAME_IPL_INVADER_OFFICE_INTERIOR, BUILDINGSTATE_DESTROYED )
|
|
|
|
// Regular Setup procedure
|
|
//----------------------------------------------------------------------
|
|
REQUEST_ADDITIONAL_TEXT("LEST1", MISSION_TEXT_SLOT)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
zMenuNames[0].sTxtLabel = "CUTSCENE: LES_1A_INT"
|
|
zMenuNames[1].sTxtLabel = GET_MISSION_STAGE_NAME(msf_st1_get_clothes)
|
|
zMenuNames[2].sTxtLabel = GET_MISSION_STAGE_NAME(msf_st2_go_to_offices)
|
|
zMenuNames[3].sTxtLabel = "CUTSCENE: LES_1A_MCS_1"
|
|
zMenuNames[3].bSelectable = FALSE
|
|
zMenuNames[4].sTxtLabel = GET_MISSION_STAGE_NAME(msf_st3_go_to_computer)
|
|
zMenuNames[5].sTxtLabel = "CUTSCENE: LES_1A_MCS_2"
|
|
zMenuNames[5].bSelectable = FALSE
|
|
zMenuNames[6].sTxtLabel = GET_MISSION_STAGE_NAME(msf_st4_mini_game)
|
|
zMenuNames[7].sTxtLabel = "CUTSCENE: LES_1A_MCS_3"
|
|
zMenuNames[7].bSelectable = FALSE
|
|
zMenuNames[8].sTxtLabel = GET_MISSION_STAGE_NAME(msf_st5_plant_bomb)
|
|
zMenuNames[9].sTxtLabel = "CUTSCENE: LES_1A_MCS_4"
|
|
zMenuNames[9].bSelectable = FALSE
|
|
zMenuNames[10].sTxtLabel = GET_MISSION_STAGE_NAME(msf_st6_leave_building)
|
|
zMenuNames[11].sTxtLabel = GET_MISSION_STAGE_NAME(msf_st7_go_home)
|
|
zMenuNames[12].sTxtLabel = "CUTSCENE: LES_1B_MCS_1"
|
|
zMenuNames[12].bSelectable = FALSE
|
|
zMenuNames[13].sTxtLabel = GET_MISSION_STAGE_NAME(msf_st8_tv_start)
|
|
zMenuNames[14].sTxtLabel = GET_MISSION_STAGE_NAME(msf_st9_tv_detonate)
|
|
zMenuNames[15].sTxtLabel = GET_MISSION_STAGE_NAME(msf_st10_mission_passed)
|
|
|
|
widget_debug = START_WIDGET_GROUP("Lester1a_widget")
|
|
ADD_WIDGET_BOOL("Open Window", b_debug_window_open)
|
|
START_WIDGET_GROUP("Minigame Debug")
|
|
ADD_WIDGET_INT_READ_ONLY( "Popups help index", iPopupHelp)
|
|
ADD_WIDGET_INT_READ_ONLY( "Popups currently open", i_debug_PopupsOpen)
|
|
ADD_WIDGET_INT_READ_ONLY( "Popups with sfx playing", iPopupsSFXPlaying)
|
|
ADD_WIDGET_INT_READ_ONLY( "Last popup closed", iLastPopupClosed)
|
|
ADD_WIDGET_BOOL( "PrintToConsole", b_debug_PrintToConsole)
|
|
ADD_WIDGET_BOOL( "IsAVOpen", bIsAVOpen)
|
|
ADD_WIDGET_INT_READ_ONLY( "Usable popups", iUsablePopups)
|
|
STOP_WIDGET_GROUP()
|
|
START_WIDGET_GROUP("Minigame Popups Open")
|
|
ADD_WIDGET_BOOL("Popup 0", sPopups[0].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 1", sPopups[1].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 2", sPopups[2].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 3", sPopups[3].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 4", sPopups[4].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 5", sPopups[5].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 6", sPopups[6].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 7", sPopups[7].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 8", sPopups[8].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 9", sPopups[9].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 10", sPopups[10].bClosed)
|
|
ADD_WIDGET_BOOL("Popup 11", sPopups[11].bClosed)
|
|
STOP_WIDGET_GROUP()
|
|
STOP_WIDGET_GROUP()
|
|
SET_LOCATES_HEADER_WIDGET_GROUP(widget_debug)
|
|
#ENDIF
|
|
|
|
// Clear costume & remove costume, so player has to buy it again
|
|
RESTORE_PLAYER_PED_VARIATIONS(PLAYER_PED_ID())
|
|
REMOVE_PROGRAMMER_OUTFIT()
|
|
|
|
peds[mpf_mike] = PLAYER_PED_ID()
|
|
|
|
// Reset the shop and make sure it is open.
|
|
FORCE_SHOP_RESET(CLOTHES_SHOP_M_04_HW)
|
|
SET_SHOP_IS_AVAILABLE(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
|
|
// Minigame initialisation
|
|
// Icons
|
|
iIcons[0] = 8
|
|
iIcons[1] = 2
|
|
iIcons[2] = 14
|
|
iIcons[3] = 5
|
|
iIcons[4] = 11
|
|
iIcons[5] = 17
|
|
|
|
IF GET_IS_WIDESCREEN()
|
|
|
|
// Set the advert types
|
|
sPopups[0].iType = 2
|
|
sPopups[1].iType = 0
|
|
sPopups[2].iType = 5
|
|
sPopups[3].iType = 7
|
|
sPopups[4].iType = 1
|
|
sPopups[5].iType = 3
|
|
sPopups[6].iType = 4
|
|
sPopups[7].iType = 11
|
|
sPopups[8].iType = 8
|
|
sPopups[9].iType = 9
|
|
sPopups[10].iType = 10
|
|
sPopups[11].iType = 6
|
|
|
|
// set the 0 to cover the AV icon
|
|
sPopups[0].fPosX = 0.1 sPopups[0].fPosY = 0.20833333333333334
|
|
sPopups[1].fPosX = 0.13671875 sPopups[1].fPosY = 0.06944444444444445
|
|
sPopups[2].fPosX = 0.078125 sPopups[2].fPosY = 0.1388888888888889
|
|
sPopups[3].fPosX = 0.3125 sPopups[3].fPosY = 0.05
|
|
sPopups[4].fPosX = 0.5 sPopups[4].fPosY = 0.05
|
|
sPopups[5].fPosX = 0.4296875 sPopups[5].fPosY = 0.4
|
|
sPopups[6].fPosX = 0.1171875 sPopups[6].fPosY = 0.4444444444444444
|
|
sPopups[7].fPosX = 0.390625 sPopups[7].fPosY = 0.0
|
|
sPopups[8].fPosX = 0.5078125 sPopups[8].fPosY = 0.4166666666666667
|
|
sPopups[9].fPosX = 0.025 sPopups[9].fPosY = 0.45
|
|
sPopups[10].fPosX = 0.3125 sPopups[10].fPosY = 0.20833333333333334
|
|
sPopups[11].fPosX = 0.3515625 sPopups[11].fPosY = 0.2777777777777778
|
|
|
|
ELSE
|
|
|
|
// Set the advert types
|
|
sPopups[0].iType = 2
|
|
sPopups[1].iType = 5
|
|
sPopups[2].iType = 3
|
|
sPopups[3].iType = 4
|
|
sPopups[4].iType = 8
|
|
sPopups[5].iType = 9
|
|
sPopups[6].iType = 10
|
|
sPopups[7].iType = 6
|
|
|
|
// set the 0 to cover the AV icon
|
|
sPopups[0].fPosX = 0.0390625 sPopups[0].fPosY = 0.2083
|
|
sPopups[1].fPosX = 0.078125 sPopups[1].fPosY = 0.1388
|
|
sPopups[2].fPosX = 0.4296875 sPopups[2].fPosY = 0.5000
|
|
sPopups[3].fPosX = 0.1171875 sPopups[3].fPosY = 0.4444
|
|
sPopups[4].fPosX = 0.35 sPopups[4].fPosY = 0.4166
|
|
sPopups[5].fPosX = 0.05859375 sPopups[5].fPosY = 0.4861
|
|
sPopups[6].fPosX = 0.3125 sPopups[6].fPosY = 0.2083
|
|
sPopups[7].fPosX = 0.3515625 sPopups[7].fPosY = 0.2777
|
|
|
|
ENDIF
|
|
|
|
REGISTER_SCRIPT_WITH_AUDIO()
|
|
|
|
// work out how many usable popups there are and get them a sound ID
|
|
iUsablePopups = 0
|
|
INT i
|
|
FOR i = 0 TO 11
|
|
IF sPopups[i].iType != -1
|
|
sPopups[i].bClosed = FALSE
|
|
sPopups[i].iSfxLoop = GET_SOUND_ID()
|
|
sPopups[i].bSfxPlaying = FALSE
|
|
iUsablePopups++
|
|
ELSE
|
|
sPopups[i].bClosed = TRUE
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
iSFX_FindVirus = GET_SOUND_ID()
|
|
|
|
interior_lesters = GET_INTERIOR_AT_COORDS_WITH_TYPE(<<1273.7292, -1712.0665, 53.7715>>, "v_lesters")
|
|
interior_offices = GET_INTERIOR_AT_COORDS_WITH_TYPE(<< -1047.5997, -232.3503, 38.0135 >>, "v_faceoffice")
|
|
interior_living_room = GET_INTERIOR_AT_COORDS_WITH_TYPE(<< -803.1297, 171.9331, 71.8348 >>, "v_michael")
|
|
bHasChanged = GET_PLAYER_HAS_CHANGE_CLOTHES_ON_MISSION(CHAR_MICHAEL)
|
|
|
|
Doors_Add_New(enum_to_int(mdf_office_board_room_l), <<-1048.28, -236.82, 44.17>>, V_ILEV_FIB_DOOR2)
|
|
Doors_Add_New(enum_to_int(mdf_office_board_room_r), <<-1047.08, -239.12, 44.17>>, V_ILEV_FIB_DOOR2)
|
|
Doors_Add_New(enum_to_int(mdf_office_slide_1), <<-1063.84, -240.65, 43.02>>, V_ILEV_FB_SL_DOOR01)
|
|
Doors_Add_New(enum_to_int(mdf_office_slide_2), <<-1057.77, -237.48, 43.02>>, V_ILEV_FB_SL_DOOR01)
|
|
|
|
// These doors are locked for the duration of the mission
|
|
Doors_Set_State(enum_to_int(mdf_office_slide_1), TRUE, 0.0)
|
|
Doors_Set_State(enum_to_int(mdf_office_slide_2), TRUE, 0.0)
|
|
Doors_Set_State(enum_to_int(mdf_office_board_room_l), TRUE, 0.0)
|
|
Doors_Set_State(enum_to_int(mdf_office_board_room_r), TRUE, 0.0)
|
|
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_R, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_R, DOORSTATE_LOCKED)
|
|
|
|
Add_Scenario_Blocking()
|
|
|
|
REPEAT COUNT_OF(syncedIDs) i
|
|
syncedIDs[i] = -1
|
|
ENDREPEAT
|
|
|
|
//B* 2091976: the data should be set-up by the trigger scene cutscene. This does not happein in a repeat play
|
|
IF IS_REPEAT_PLAY_ACTIVE()
|
|
CPRINTLN(debug_dan,"Setting player data in cutscene")
|
|
SET_PLAYER_PED_DATA_IN_CUTSCENES(TRUE)
|
|
ELSE
|
|
SET_PLAYER_PED_DATA_IN_CUTSCENES(FALSE)
|
|
ENDIF
|
|
|
|
SET_PED_MODEL_IS_SUPPRESSED(mod_hipster_main, TRUE)
|
|
SET_PED_MODEL_IS_SUPPRESSED(CS_LIFEINVAD_01, TRUE)
|
|
|
|
ADD_RELATIONSHIP_GROUP("REL_FREIND", rel_Friend)
|
|
ADD_RELATIONSHIP_GROUP("Family", REL_FAMILY)
|
|
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, rel_Friend)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, REL_FAMILY)
|
|
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, rel_Friend, RELGROUPHASH_PLAYER)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, rel_Friend, REL_FAMILY)
|
|
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, RELGROUPHASH_PLAYER, REL_FAMILY)
|
|
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE, REL_FAMILY, rel_Friend)
|
|
|
|
g_bLaptopMissionSuppressed = TRUE
|
|
|
|
|
|
PED_COMP_ITEM_DATA_STRUCT sClothesData
|
|
|
|
PED_COMP_NAME_ENUM eComp
|
|
FOR eComp = TORSO_P0_GILET_0 TO TORSO_P0_GILET_5
|
|
sClothesData = GET_PED_COMP_DATA_FOR_ITEM_MICHAEL_TORSO(eComp)
|
|
IF sClothesData.iCost > i_most_expensive_gilet
|
|
i_most_expensive_gilet = sClothesData.iCost
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
FOR eComp = LEGS_P0_CARGO_SHORTS_0 TO LEGS_P0_CARGO_SHORTS_4
|
|
sClothesData = GET_PED_COMP_DATA_FOR_ITEM_MICHAEL_LEGS(eComp)
|
|
IF sClothesData.iCost > i_most_expensive_shorts
|
|
i_most_expensive_shorts = sClothesData.iCost
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
i_min_required_funds = i_most_expensive_gilet + i_most_expensive_shorts
|
|
|
|
CLEAR_PLAYER_WANTED_LEVEL(PLAYER_ID())
|
|
SET_WANTED_LEVEL_MULTIPLIER(0.0)
|
|
SET_MAX_WANTED_LEVEL(0)
|
|
|
|
// LESTER 1B merge----------------------------------------------------------------------------
|
|
|
|
vCamPos[CAMS_ULTRA] = <<-802.252747,173.037430,74.357079>>
|
|
vCamRot[CAMS_ULTRA] = <<0.914659,-0.000000,-69.592506>>
|
|
|
|
vCamPos[CAMS_CLOSE] = <<-804.174622,172.362076,74.324562>>
|
|
vCamRot[CAMS_CLOSE] = <<0.914659,-0.000000,-71.189026>>
|
|
|
|
vCamPos[CAMS_ROOM] = <<-804.157471,170.530487,73.041122>>
|
|
vCamRot[CAMS_ROOM] = <<14.629187,0.000000,-54.176620>>
|
|
|
|
vCamPos[CAMS_SCRIPT] = <<-805.6417, 171.1509, 73.2577>>
|
|
vCamRot[CAMS_SCRIPT] = <<2.1993, 0.0000, -68.9021>>
|
|
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 0, PLAYER_PED_ID(), "MICHAEL")
|
|
|
|
ENDPROC
|
|
|
|
PED_COMP_NAME_ENUM eHeadProp
|
|
|
|
PROC ST0_Intro_Cutscene()
|
|
|
|
VECTOR v_mike_coord_post_cutscene = <<1273.7292, -1712.0665, 53.7715>>
|
|
CONST_FLOAT f_mike_heading_post_cutscene 202.4595
|
|
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
|
|
// grab entities from trigger scene
|
|
IF NOT DOES_ENTITY_EXIST(peds[mpf_lester])
|
|
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.ped[0])
|
|
peds[mpf_lester] = g_sTriggerSceneAssets.ped[0]
|
|
SET_ENTITY_AS_MISSION_ENTITY(peds[mpf_lester], TRUE, TRUE)
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(peds[mpf_lester], REL_FRIEND)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_wheelchair].id)
|
|
IF DOES_ENTITY_EXIST(g_sTriggerSceneAssets.object[0])
|
|
objects[mof_wheelchair].id = g_sTriggerSceneAssets.object[0]
|
|
SET_ENTITY_AS_MISSION_ENTITY(objects[mof_wheelchair].id, TRUE, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// once grabbed deal with the players vehicle
|
|
IF DOES_ENTITY_EXIST(peds[mpf_lester])
|
|
AND DOES_ENTITY_EXIST(objects[mof_wheelchair].id)
|
|
AND NOT IS_PED_INJURED(peds[mpf_lester])
|
|
|
|
SET_ROADS_IN_ANGLED_AREA(<<1368.168823,-1686.163818,68.780426>>, <<1189.980713,-1764.964233,31.711254>>, 91.5, FALSE, FALSE)
|
|
i_road_node_speed_zone = ADD_ROAD_NODE_SPEED_ZONE(<<1279.403320,-1730.470703,51.567390>>, 20.312500, 0.0, FALSE)
|
|
|
|
SET_AMBIENT_ZONE_LIST_STATE_PERSISTENT("AZL_LESTERS_DOGS", FALSE, TRUE)
|
|
|
|
Load_Asset_AnimDict(sAssetData, "MissLester1ALeadInOut")
|
|
//MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_MISSION_LESTER_1)
|
|
|
|
SET_DOOR_STATE(DOORNAME_LESTER_F, DOORSTATE_UNLOCKED)
|
|
|
|
eHeadProp = DUMMY_PED_COMP
|
|
mission_substage++
|
|
|
|
ENDIF
|
|
|
|
SET_INTERIOR_CAPPED(INTERIOR_V_LESTERS, FALSE)
|
|
BREAK
|
|
CASE 1
|
|
IF HAS_CUTSCENE_LOADED()
|
|
AND NOT IS_PED_INJURED(peds[mpf_lester])
|
|
AND DOES_ENTITY_EXIST(objects[mof_wheelchair].id)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
|
|
SET_ALL_RANDOM_PEDS_FLEE(PLAYER_ID(), TRUE)
|
|
|
|
REGISTER_ENTITY_FOR_CUTSCENE(peds[mpf_lester], "Lester", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(objects[mof_wheelchair].id, "Wheelchair_Lester", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
|
|
Load_Asset_AnimDict(sAssetData, "MOVE_P_M_ZERO_RUCKSACK")
|
|
//SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 9, 0)
|
|
PRELOAD_PED_COMP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK)
|
|
|
|
eHeadProp = GET_PROP_ITEM_FROM_VARIATIONS( PLAYER_PED_ID(), GET_PED_PROP_INDEX( PLAYER_PED_ID(), ANCHOR_HEAD ), GET_PED_PROP_TEXTURE_INDEX( PLAYER_PED_ID(), ANCHOR_HEAD ), ANCHOR_HEAD )
|
|
CPRINTLN( DEBUG_MIKE, "eHeadProp = ", ENUM_TO_INT( eHeadProp ) )
|
|
IF ENUM_TO_INT(eHeadProp) != 0
|
|
PRELOAD_PED_COMP( PLAYER_PED_ID(), COMP_TYPE_PROPS, eHeadProp )
|
|
ENDIF
|
|
|
|
|
|
|
|
START_CUTSCENE()
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
bCutsceneExitHasFired = FALSE
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE)
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<1275.838989,-1719.560547,53.539257>>, <<1270.735229,-1708.342651,56.788410>>, 9.687500, v_LestersHouseParkingCoord, f_LestersHouseParkingHeading)
|
|
SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(v_LestersHouseParkingCoord, f_LestersHouseParkingHeading)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(), FALSE)
|
|
|
|
CLEAR_PED_PROP(PLAYER_PED_ID(), ANCHOR_EYES)
|
|
CLEAR_PED_PROP(PLAYER_PED_ID(), ANCHOR_HEAD)
|
|
|
|
REMOVE_PED_HELMET(PLAYER_PED_ID(), TRUE)
|
|
|
|
CLEAR_AREA_OF_PEDS(<<1272.145630,-1716.185547,55.141109>>, 23.750000)
|
|
CLEAR_AREA_OF_PEDS(<<1283.72, -1751.16, 51.03>>, 12.688)
|
|
|
|
SET_CLOCK_TIME(7,0,0)
|
|
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),WEAPONTYPE_UNARMED,TRUE)
|
|
//SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 9, 0)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK, FALSE)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_PROPS, eHeadProp, FALSE)
|
|
|
|
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(), "MOVE_P_M_ZERO_RUCKSACK")
|
|
RELEASE_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
//AND GET_CAM_VIEW_MODE_FOR_CONTEXT( CAM_VIEW_MODE_CONTEXT_ON_FOOT ) != CAM_VIEW_MODE_FIRST_PERSON // 2001919
|
|
// set player on the steps
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), v_mike_coord_post_cutscene)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), f_mike_heading_post_cutscene)
|
|
ENDIF
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 1000)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
REPLAY_STOP_EVENT()
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 6.0)
|
|
bCutsceneExitHasFired = TRUE
|
|
ENDIF
|
|
|
|
IF bCutsceneExitHasFired
|
|
AND HAS_ANIM_DICT_LOADED("MissLester1ALeadInOut")
|
|
AND HAS_ANIM_DICT_LOADED("MOVE_P_M_ZERO_RUCKSACK")
|
|
|
|
// set roads back to normal
|
|
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<1368.168823,-1686.163818,68.780426>>, <<1189.980713,-1764.964233,31.711254>>, 91.5)
|
|
IF i_road_node_speed_zone != -1
|
|
REMOVE_ROAD_NODE_SPEED_ZONE(i_road_node_speed_zone)
|
|
i_road_node_speed_zone = -1
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(peds[mpf_lester])
|
|
syncedIDs[ssf_lead_in] = CREATE_SYNCHRONIZED_SCENE(<<1277.661, -1713.688, 54.410>>, <<0,0,-151.560>>)
|
|
TASK_SYNCHRONIZED_SCENE(peds[mpf_lester], syncedIDs[ssf_lead_in], "MissLester1ALeadInOut", "Lester_1_INT_LeadIn_loop_Lester", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS, RBF_MELEE | RBF_PLAYER_IMPACT)
|
|
SAFE_PLAY_SYNCHRONIZED_ENTITY(objects[mof_wheelchair], syncedIDs[ssf_lead_in], "Lester_1_INT_LeadIn_loop_wChair", "MissLester1ALeadInOut", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS)
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(syncedIDs[ssf_lead_in], TRUE)
|
|
ENDIF
|
|
|
|
PLAY_PAIN(peds[mpf_lester], AUD_DAMAGE_REASON_COUGH)
|
|
|
|
SET_ALL_RANDOM_PEDS_FLEE(PLAYER_ID(), FALSE)
|
|
bCutsceneExitHasFired = FALSE
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
// fade screen in if faded out
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
Mission_Set_Stage(msf_st1_get_clothes)
|
|
BREAK
|
|
CASE STAGE_EXIT
|
|
|
|
|
|
|
|
// any code to run before the stage exits
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
|
|
ENDPROC
|
|
|
|
PROC ST1_Get_Clothing()
|
|
|
|
VECTOR v_GilletBlipCoord = <<126.87, -218.96, 53.56>>
|
|
VECTOR v_ShortsBlipCoord = <<130.71, -217.81, 53.56>>
|
|
|
|
// shop cutscene streaming
|
|
IF mission_substage <= 7
|
|
AND mission_substage != STAGE_EXIT
|
|
IF NOT DOES_ENTITY_EXIST(peds[mpf_shop])
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), v_ShopBlip) < DEFAULT_CUTSCENE_LOAD_DIST
|
|
IF GET_CLOSEST_PED(<<127.11, -224.48, 53.56>>, 2.0, FALSE, TRUE, peds[mpf_shop], FALSE, TRUE)
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 8, peds[mpf_shop], "SHOPASSISTANT")
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), v_ShopBlip) > DEFAULT_CUTSCENE_UNLOAD_DIST
|
|
peds[mpf_shop] = NULL
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF mission_substage < 6
|
|
AND mission_substage != STAGE_EXIT
|
|
IF NOT IS_CUTSCENE_ACTIVE()
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), v_ShopBlip) < DEFAULT_CUTSCENE_LOAD_DIST
|
|
AND DOES_ENTITY_EXIST(peds[mpf_shop])
|
|
REQUEST_CUTSCENE("LES_1A_MCS_0")
|
|
Register_Ped_Variation_For_Cutscene_From_Ped(sCutscenePedVariationRegister, PLAYER_PED_ID(), "Michael")
|
|
Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister, "Michael", PED_COMP_SPECIAL2, 9, 0)
|
|
Register_Ped_Prop_For_Cutscene(sCutscenePedVariationRegister, "Michael", ANCHOR_HEAD, -1, 0)
|
|
Register_Ped_Variation_For_Cutscene_From_Ped(sCutscenePedVariationRegister, peds[mpf_shop], "Shop_Assistant")
|
|
LOAD_SHOP_INTRO_ASSETS(CLOTHES_SHOP_M_04_HW)
|
|
ENDIF
|
|
ELSE
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), v_ShopBlip) > DEFAULT_CUTSCENE_UNLOAD_DIST
|
|
OR IS_PLAYER_CHANGING_CLOTHES()
|
|
Reset_Cutscene_Ped_Variation_Streaming(sCutscenePedVariationRegister)
|
|
REMOVE_CUTSCENE()
|
|
UNLOAD_SHOP_INTRO_ASSETS(CLOTHES_SHOP_M_04_HW)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF (mission_substage > 3 OR IS_PLAYER_IN_SHOP(CLOTHES_SHOP_M_04_HW) )
|
|
AND mission_substage < 6
|
|
AND mission_substage != STAGE_EXIT
|
|
IF NOT bPlayerIsBlockedForLeadIn
|
|
BLOCK_PLAYER_FOR_LEAD_IN(TRUE)
|
|
bPlayerIsBlockedForLeadIn = TRUE
|
|
ENDIF
|
|
UPDATE_BLOCKED_PLAYER_FOR_LEAD_IN(TRUE)
|
|
ELSE
|
|
IF bPlayerIsBlockedForLeadIn
|
|
CLEAR_BLOCKED_PLAYER_FOR_LEAD_IN()
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
bPlayerIsBlockedForLeadIn = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
b_CanFailForNotEnoughFunds = FALSE
|
|
|
|
IF IS_SHOP_OPEN_FOR_BUSINESS(CLOTHES_SHOP_M_04_HW)
|
|
TRIGGER_EVENT(mef_ambient_receptionist)
|
|
bSideEntranceObjective = FALSE
|
|
bLestersDoorLocked = FALSE
|
|
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_L, DOORSTATE_LOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_REAR_R, DOORSTATE_LOCKED)
|
|
|
|
SET_WEATHER_TYPE_OVERTIME_PERSIST("EXTRASUNNY", 120)
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(1, "1. Get clothes", FALSE, FALSE)
|
|
|
|
SET_SHOP_DIALOGUE_IS_BLOCKED(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
|
|
Trigger_Event(mef_manage_bag)
|
|
|
|
bPlayerIsBlockedForLeadIn = FALSE
|
|
mission_substage++
|
|
ENDIF
|
|
|
|
SET_INTERIOR_CAPPED(INTERIOR_V_LESTERS, FALSE)
|
|
BREAK
|
|
CASE 1
|
|
IF IS_PLAYER_AT_ANGLED_AREA_ANY_MEANS(locates_data,
|
|
v_ShopBlip,
|
|
<<128.484558,-207.428040,53.576126>>, <<127.086388,-211.525604,56.738232>>, 4.937500,
|
|
TRUE, "LES1A_1", TRUE, TRUE)
|
|
OR (IS_PLAYER_IN_SHOP(CLOTHES_SHOP_M_04_HW) AND NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0))
|
|
|
|
CLEAR_MISSION_LOCATE_STUFF(locates_data)
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("LESTER_1A_DRIVE_TO_STORE")
|
|
STOP_AUDIO_SCENE("LESTER_1A_DRIVE_TO_STORE")
|
|
ENDIF
|
|
START_AUDIO_SCENE("LESTER_1A_BUY_CLOTHES")
|
|
|
|
// if player does not have enoug cash, send the text and credit their account
|
|
IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) < i_min_required_funds
|
|
INT iMoneyToGive
|
|
iMoneyToGive = CLAMP_INT(200 - GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()), 100, 200)
|
|
SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_LESTER, "LES1A_TXT1", TXTMSG_UNLOCKED, TXTMSG_CRITICAL)
|
|
CREDIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_LESTER, iMoneyToGive)
|
|
ENDIF
|
|
|
|
mission_substage++
|
|
|
|
ELSE
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("LESTER_1A_DRIVE_TO_STORE")
|
|
START_AUDIO_SCENE("LESTER_1A_DRIVE_TO_STORE")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE 2
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 2.0)
|
|
mission_substage++
|
|
ENDIF
|
|
ELSE
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_PLAYER_AT_LOCATION_ON_FOOT(locates_data,
|
|
<<126.0279, -222.9916, 53.5578>>, << 8.0, 9.0, LOCATE_SIZE_HEIGHT>>, FALSE,
|
|
"", TRUE, TRUE)
|
|
|
|
CLEAR_MISSION_LOCATE_STUFF(locates_data)
|
|
CLEAR_PRINTS()
|
|
|
|
IF NOT IS_GAMEPLAY_HINT_ACTIVE()
|
|
AND DOES_ENTITY_EXIST(peds[mpf_shop])
|
|
AND NOT IS_PED_INJURED(peds[mpf_shop])
|
|
SET_GAMEPLAY_ENTITY_HINT(peds[mpf_shop], <<0,0,0>>, TRUE, -1)
|
|
SET_GAMEPLAY_HINT_FOV(30.0)
|
|
SET_GAMEPLAY_HINT_FOLLOW_DISTANCE_SCALAR(0.7)
|
|
SET_GAMEPLAY_HINT_BASE_ORBIT_PITCH_OFFSET(0.0)
|
|
SET_GAMEPLAY_HINT_CAMERA_RELATIVE_SIDE_OFFSET(-0.02)
|
|
SET_GAMEPLAY_HINT_CAMERA_RELATIVE_VERTICAL_OFFSET(0.1)
|
|
ENDIF
|
|
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD( PLAYER_PED_ID(), <<125.9931, -221.0858, 53.5578>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP, DEFAULT, DEFAULT, 193.8799 )
|
|
|
|
mission_substage++
|
|
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LES1A_MCS0LI", CONV_PRIORITY_HIGH)
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
IF IS_CUTSCENE_ACTIVE()
|
|
AND HAS_CUTSCENE_LOADED()
|
|
AND NOT IS_PED_INJURED(peds[mpf_shop])
|
|
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(7.0, 0.0)
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Michael", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(peds[mpf_shop], "Shop_Assistant", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
START_CUTSCENE()
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE,DEFAULT,FALSE)
|
|
|
|
SET_ALL_RANDOM_PEDS_FLEE(PLAYER_ID(), TRUE)
|
|
|
|
strShopHelp = ""
|
|
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
IF IS_GAMEPLAY_HINT_ACTIVE()
|
|
STOP_GAMEPLAY_HINT(TRUE)
|
|
ENDIF
|
|
|
|
IF bPlayerIsBlockedForLeadIn
|
|
CLEAR_BLOCKED_PLAYER_FOR_LEAD_IN()
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_CUT_THIS_FRAME()
|
|
|
|
// Help text 1
|
|
IF GET_CUTSCENE_TIME() > 4000 AND GET_CUTSCENE_TIME() < 5000
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
strShopHelp = "LS1_SHOPHLP_1"
|
|
|
|
ELIF GET_CUTSCENE_TIME() > 7500 AND GET_CUTSCENE_TIME() < 13000
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
strShopHelp = ""
|
|
|
|
// Help text 2
|
|
ELIF GET_CUTSCENE_TIME() > 13000 AND GET_CUTSCENE_TIME() < 15000
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
strShopHelp = "LS1_SHOPHLP_2"
|
|
// Help text 3
|
|
ELIF GET_CUTSCENE_TIME() > 18000 AND GET_CUTSCENE_TIME() < 20000
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
strShopHelp = "LS1_SHOPHLP_3"
|
|
ELSE
|
|
IF GET_CUTSCENE_TIME() > 22000
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
strShopHelp = ""
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(strShopHelp)
|
|
DISPLAY_SHOP_INTRO_MESSAGE(CLOTHES_SHOP_M_04_HW, strShopHelp)
|
|
ELSE
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
REPLAY_STOP_EVENT()
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 6.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
PRINT_NOW("LES1A_2", DEFAULT_GOD_TEXT_TIME, 1)
|
|
|
|
SAFE_BLIP_COORD(blip_clothes[0], v_GilletBlipCoord)
|
|
SAFE_BLIP_COORD(blip_clothes[1], v_ShortsBlipCoord)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE,DEFAULT,FALSE)
|
|
|
|
UNLOAD_SHOP_INTRO_ASSETS(CLOTHES_SHOP_M_04_HW)
|
|
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 1000)
|
|
|
|
SET_ALL_RANDOM_PEDS_FLEE(PLAYER_ID(), FALSE)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
b_CanFailForNotEnoughFunds = TRUE
|
|
iShopCutsceneTimer = GET_GAME_TIMER() + 3000
|
|
|
|
strShopHelp = ""
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 7
|
|
IF IS_PLAYER_IN_SHOP(CLOTHES_SHOP_M_04_HW)
|
|
|
|
IF GET_GAME_TIMER() > iShopCutsceneTimer
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
ENDIF
|
|
|
|
BOOL bHasTorso, bHasLegs, bChangedTorso, bChangedLegs
|
|
PED_COMP_NAME_ENUM playerTorso
|
|
PED_COMP_NAME_ENUM playerLegs
|
|
PED_COMP_TYPE_ENUM eCompTypeLastPreviewed
|
|
PED_COMP_NAME_ENUM eCompNameLastPreviewed
|
|
|
|
IF bWasBrowsingClothesLastFrame
|
|
|
|
CPRINTLN(DEBUG_MIKE, "**** FINISHED BROWSING IN SHOP ****")
|
|
|
|
playerTorso = GET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO)
|
|
playerLegs = GET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS)
|
|
|
|
GET_CLOTHING_ITEM_PLAYER_LAST_PREVIEWED(CHAR_MICHAEL, eCompTypeLastPreviewed, eCompNameLastPreviewed)
|
|
|
|
CPRINTLN(DEBUG_MIKE, "**** TORSO: ", playerTorso, " ****")
|
|
CPRINTLN(DEBUG_MIKE, "**** LEGS: ", playerLegs, " ****")
|
|
|
|
IF playerTorsoPrev != playerTorso
|
|
bChangedTorso = TRUE
|
|
ENDIF
|
|
|
|
IF playerLegsPrev != playerLegs
|
|
bChangedLegs = TRUE
|
|
ENDIF
|
|
|
|
// Check TORSO
|
|
IF playerTorso = TORSO_P0_GILET_0
|
|
OR playerTorso = TORSO_P0_GILET_1
|
|
OR playerTorso = TORSO_P0_GILET_2
|
|
OR playerTorso = TORSO_P0_GILET_3
|
|
OR playerTorso = TORSO_P0_GILET_4
|
|
OR playerTorso = TORSO_P0_GILET_5
|
|
CPRINTLN(DEBUG_MIKE, "**** Removing Torso Blip ****")
|
|
SAFE_REMOVE_BLIP(blip_clothes[0])
|
|
bHasTorso = TRUE
|
|
ELIF NOT DOES_BLIP_EXIST(blip_clothes[0])
|
|
SAFE_BLIP_COORD(blip_clothes[0], v_GilletBlipCoord)
|
|
CPRINTLN(DEBUG_MIKE, "**** Adding Torso Blip ****")
|
|
ENDIF
|
|
|
|
// CHECK LEGS
|
|
IF playerLegs = LEGS_P0_CARGO_SHORTS_0
|
|
OR playerLegs = LEGS_P0_CARGO_SHORTS_1
|
|
OR playerLegs = LEGS_P0_CARGO_SHORTS_2
|
|
OR playerLegs = LEGS_P0_CARGO_SHORTS_3
|
|
OR playerLegs = LEGS_P0_CARGO_SHORTS_4
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_0
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_1
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_2
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_3
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_4
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_5
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_6
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_7
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_8
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_9
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_10
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_11
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_12
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_13
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_14
|
|
OR playerLegs = LEGS_P0_LONG_SHORTS_15
|
|
OR playerLegs = LEGS_P0_YOGA_0
|
|
OR playerLegs = LEGS_P0_YOGA_1
|
|
OR playerLegs = LEGS_P0_YOGA_2
|
|
OR playerLegs = LEGS_P0_YOGA_3
|
|
OR playerLegs = LEGS_P0_YOGA_4
|
|
OR playerLegs = LEGS_P0_YOGA_5
|
|
OR playerLegs = LEGS_P0_YOGA_6
|
|
OR playerLegs = LEGS_P0_YOGA_7
|
|
OR playerLegs = LEGS_P0_YOGA_8
|
|
OR playerLegs = LEGS_P0_YOGA_9
|
|
OR playerLegs = LEGS_P0_YOGA_10
|
|
OR playerLegs = LEGS_P0_YOGA_11
|
|
OR playerLegs = LEGS_P0_YOGA_12
|
|
OR playerLegs = LEGS_P0_YOGA_13
|
|
OR playerLegs = LEGS_P0_YOGA_14
|
|
OR playerLegs = LEGS_P0_YOGA_15
|
|
CPRINTLN(DEBUG_MIKE, "**** Removing Leg Blip ****")
|
|
SAFE_REMOVE_BLIP(blip_clothes[1])
|
|
bHasLegs = TRUE
|
|
ELIF NOT DOES_BLIP_EXIST(blip_clothes[1])
|
|
SAFE_BLIP_COORD(blip_clothes[1], v_ShortsBlipCoord)
|
|
CPRINTLN(DEBUG_MIKE, "**** Adding Leg Blip ****")
|
|
ENDIF
|
|
|
|
// Changed something and outfit was completed
|
|
IF NOT DOES_BLIP_EXIST(blip_clothes[0])
|
|
AND NOT DOES_BLIP_EXIST(blip_clothes[1])
|
|
AND ((bChangedTorso AND eCompTypeLastPreviewed = COMP_TYPE_TORSO)
|
|
OR (bChangedLegs AND eCompTypeLastPreviewed = COMP_TYPE_LEGS))
|
|
|
|
IF IS_STRING_NULL_OR_EMPTY(strShopHelp)
|
|
strShopHelp = "LES1A_FULL"
|
|
ENDIF
|
|
|
|
// Changed a torso component
|
|
ELIF bChangedTorso AND eCompTypeLastPreviewed = COMP_TYPE_TORSO
|
|
// Incorrect
|
|
IF DOES_BLIP_EXIST(blip_clothes[0])
|
|
IF IS_STRING_NULL_OR_EMPTY(strShopHelp)
|
|
strShopHelp = "LES1A_UP_N"
|
|
ENDIF
|
|
// Correct
|
|
ELSE
|
|
IF IS_STRING_NULL_OR_EMPTY(strShopHelp)
|
|
strShopHelp = "LES1A_UP_Y"
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Changed a leg componeent
|
|
ELIF bChangedLegs AND eCompTypeLastPreviewed = COMP_TYPE_LEGS
|
|
// Incorrect
|
|
IF DOES_BLIP_EXIST(blip_clothes[1])
|
|
IF IS_STRING_NULL_OR_EMPTY(strShopHelp)
|
|
strShopHelp = "LES1A_LOW_N"
|
|
ENDIF
|
|
// Correct
|
|
ELSE
|
|
IF IS_STRING_NULL_OR_EMPTY(strShopHelp)
|
|
strShopHelp = "LES1A_LOW_Y"
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
// Changed something and it was wrong
|
|
IF (bChangedTorso AND DOES_BLIP_EXIST(blip_clothes[0]) AND eCompTypeLastPreviewed = COMP_TYPE_TORSO)
|
|
OR (bChangedLegs AND DOES_BLIP_EXIST(blip_clothes[1]) AND eCompTypeLastPreviewed = COMP_TYPE_LEGS)
|
|
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
PRINT_HELP("LES1A_H2", 3000)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELIF NOT IS_PLAYER_BROWSING_ITEMS_IN_SHOP(CLOTHES_SHOP_M_04_HW)
|
|
|
|
// Update legs while not browsing
|
|
playerTorsoPrev = GET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_TORSO)
|
|
playerLegsPrev = GET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_LEGS)
|
|
//CPRINTLN(DEBUG_MIKE, "**** UPDATE PREV TORSO TO: ", playerTorsoPrev, " ****")
|
|
//CPRINTLN(DEBUG_MIKE, "**** UPDATE PREV LEGS TO: ", playerLegsPrev, " ****")
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(strShopHelp)
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, strShopHelp, CONV_PRIORITY_HIGH)
|
|
strShopHelp = ""
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
// Update the browsing last frame var
|
|
IF NOT IS_PLAYER_BROWSING_ITEMS_IN_SHOP(CLOTHES_SHOP_M_04_HW)
|
|
bWasBrowsingClothesLastFrame = FALSE
|
|
ELSE
|
|
bWasBrowsingClothesLastFrame = TRUE
|
|
ENDIF
|
|
|
|
// once bought remove the blip and block the player from buying other clothes
|
|
IF NOT IS_PLAYER_BROWSING_ITEMS_IN_SHOP(CLOTHES_SHOP_M_04_HW)
|
|
AND bHasTorso AND bHasLegs
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, TRUE)
|
|
bObtainedClothing = TRUE
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(locates_data)
|
|
|
|
// Store costume for replays
|
|
g_replay.iReplayInt[0] = enum_to_int(playerTorso)
|
|
g_replay.iReplayInt[1] = enum_to_int(playerLegs)
|
|
|
|
CLEAR_HELP()
|
|
Mission_Set_Stage(msf_st2_go_to_offices)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE STAGE_EXIT
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
|
|
IF IS_VALID_INTERIOR(interior_lesters)
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) != interior_lesters
|
|
IF NOT bLestersDoorLocked
|
|
IF DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LESTER_F)) = DOORSTATE_LOCKED
|
|
IF ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(enum_to_int(DOORHASH_LESTER_F))) < 0.1
|
|
g_QuickSaveDisabledByScript = FALSE
|
|
bLestersDoorLocked = TRUE
|
|
ENDIF
|
|
ELSE
|
|
SET_DOOR_STATE(DOORNAME_LESTER_F, DOORSTATE_LOCKED)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
DISABLE_PLAYERS_WEAPONS_THIS_FRAME()
|
|
DISABLE_CONTROL_ACTION( PLAYER_CONTROL, INPUT_JUMP )
|
|
|
|
IF NOT IS_PED_INJURED(peds[mpf_lester])
|
|
IF i_CoughCounter < 2
|
|
AND GET_GAME_TIMER() > i_CoughTimer
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 8, peds[mpf_lester], "Lester")
|
|
PLAY_PAIN(peds[mpf_lester], AUD_DAMAGE_REASON_COUGH)
|
|
i_CoughTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1000, 5000)
|
|
i_CoughCounter++
|
|
ELSE
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
AND GET_GAME_TIMER() > i_CoughTimer
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LES1A_LEAVE", CONV_PRIORITY_HIGH)
|
|
i_CoughTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(12000, 15000)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_DOOR_STATE(DOORNAME_LESTER_F, DOORSTATE_UNLOCKED)
|
|
bLestersDoorLocked = FALSE
|
|
g_QuickSaveDisabledByScript = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(peds[mpf_lester])
|
|
AND NOT IS_PED_INJURED(peds[mpf_lester])
|
|
AND (VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(peds[mpf_lester])) > 900 // 30 squared
|
|
OR bLestersDoorLocked)
|
|
Unload_Asset_Anim_Dict(sAssetData, "MissLester1ALeadInOut")
|
|
IF IS_ENTITY_ATTACHED(objects[mof_wheelchair].id)
|
|
DETACH_ENTITY(objects[mof_wheelchair].id)
|
|
ENDIF
|
|
DELETE_OBJECT(objects[mof_wheelchair].id)
|
|
DELETE_PED(peds[mpf_lester])
|
|
// 1979116
|
|
MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_MISSION_LESTER_1)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC ST2_Go_To_Lifeinvader()
|
|
|
|
VECTOR v_offices_roadside = << -1057.9395, -224.8114, 37.1567 >> //<< -1053.5070, -215.3025, 36.7002 >>
|
|
|
|
IF NOT IS_INTERIOR_SCENE()
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("LESTER_1A_BUY_CLOTHES")
|
|
STOP_AUDIO_SCENE("LESTER_1A_BUY_CLOTHES")
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(2, "2. Goto Lifeinvader offices", FALSE, FALSE)
|
|
Trigger_Event(mef_lester_phone_call)
|
|
|
|
bBringVehicleToHalt = FALSE
|
|
bExitStateCam = FALSE
|
|
bExitStateMike = FALSE
|
|
iLeaveShopConvo = 0
|
|
|
|
SET_INTERIOR_CAPPED(INTERIOR_V_LESTERS, TRUE)
|
|
|
|
mission_substage++
|
|
BREAK
|
|
CASE 1
|
|
|
|
SWITCH iLeaveShopConvo
|
|
CASE 0
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(strShopHelp)
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, strShopHelp, CONV_PRIORITY_HIGH)
|
|
strShopHelp = ""
|
|
iLeaveShopConvo++
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
iLeaveShopConvo++
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF IS_PLAYER_IN_SHOP(CLOTHES_SHOP_M_04_HW)
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LES1A_LUCK", CONV_PRIORITY_HIGH)
|
|
iLeaveShopConvo++
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
iLeaveShopConvo = 3
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF IS_PLAYER_IN_SHOP(CLOTHES_SHOP_M_04_HW)
|
|
IF IS_PLAYER_IN_SHOP(CLOTHES_SHOP_M_04_HW)
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
AND NOT IS_AMBIENT_SPEECH_PLAYING(PLAYER_PED_ID())
|
|
PLAY_PED_AMBIENT_SPEECH(PLAYER_PED_ID(), "GENERIC_BYE", SPEECH_PARAMS_FORCE)
|
|
iLeaveShopConvo++
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
iLeaveShopConvo = 3
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
|
|
AND IS_SAFE_TO_DISPLAY_GODTEXT()
|
|
CLEAR_BIT(locates_data.iLocatesBitSet, BS_INITIAL_GOD_TEXT_PRINTED)
|
|
iLeaveShopConvo++
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
TEXT_LABEL_15 strObjective
|
|
IF iLeaveShopConvo > 2
|
|
OR (NOT IS_MESSAGE_BEING_DISPLAYED() AND NOT IS_SUBTITLE_PREFERENCE_SWITCHED_ON())
|
|
IF NOT bSideEntranceObjective
|
|
strObjective = "LES1A_3"
|
|
ELSE
|
|
strObjective = "LES1A_4"
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_CUTSCENE_ACTIVE()
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), v_offices_foot) < DEFAULT_CUTSCENE_LOAD_DIST
|
|
REQUEST_CUTSCENE("LES_1A_MCS_1")
|
|
Register_Ped_Variation_For_Cutscene_From_Ped(sCutscenePedVariationRegister, PLAYER_PED_ID(), "Michael")
|
|
Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister, "Michael", PED_COMP_SPECIAL2, 9, 0)
|
|
|
|
Load_Asset_Model(sAssetData, mod_hipster_main)
|
|
Load_Asset_Interior(sAssetData, interior_offices)
|
|
Load_Asset_Waypoint(sAssetData, str_wp_engineer_route)
|
|
ENDIF
|
|
ELSE
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), v_offices_foot) > DEFAULT_CUTSCENE_UNLOAD_DIST
|
|
REMOVE_CUTSCENE()
|
|
Unload_Asset_Model(sAssetData, mod_hipster_main)
|
|
Unload_Asset_Interior(sAssetData, interior_offices)
|
|
Unload_Asset_Waypoint(sAssetData, str_wp_engineer_route)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND NOT bSideEntranceObjective
|
|
|
|
IF IS_PLAYER_AT_ANGLED_AREA_IN_ANY_VEHICLE(locates_data, v_offices_roadside,
|
|
<<-1046.286865,-219.515488,36.808811>>, <<-1068.808472,-231.234207,38.173355>>, 5.312500, TRUE,
|
|
strObjective, "", TRUE)
|
|
|
|
CLEAR_BIT(locates_data.iLocatesBitSet, BS_INITIAL_GOD_TEXT_PRINTED)
|
|
bSideEntranceObjective = TRUE
|
|
bBringVehicleToHalt = TRUE
|
|
|
|
ELSE
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("LESTER_1A_DRIVE_TO_LIFEINVADER")
|
|
START_AUDIO_SCENE("LESTER_1A_DRIVE_TO_LIFEINVADER")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF IS_PLAYER_AT_ANGLED_AREA_ON_FOOT(locates_data, v_offices_foot,
|
|
<<-1043.331787,-231.809570,37.764164>>, <<-1045.451904,-224.953644,40.952034>>, 4.625000, FALSE,
|
|
strObjective, TRUE, TRUE, RADAR_TRACE_INVALID, FALSE)
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(5.0, 0.0)
|
|
|
|
mission_substage++
|
|
|
|
ELSE
|
|
IF NOT bSideEntranceObjective
|
|
AND VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), v_offices_foot) <= 900 // 30 squared
|
|
CLEAR_BIT(locates_data.iLocatesBitSet, BS_INITIAL_GOD_TEXT_PRINTED)
|
|
bSideEntranceObjective = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bBringVehicleToHalt
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 4.0, 1, 0.0)
|
|
bBringVehicleToHalt = FALSE
|
|
ENDIF
|
|
ELSE
|
|
bBringVehicleToHalt = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bSideEntranceObjective
|
|
IF IS_AUDIO_SCENE_ACTIVE("LESTER_1A_DRIVE_TO_LIFEINVADER")
|
|
STOP_AUDIO_SCENE("LESTER_1A_DRIVE_TO_LIFEINVADER")
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
// cut scene has loaded, create ped and start smokers cutscene
|
|
IF HAS_CUTSCENE_LOADED()
|
|
AND GET_IS_WAYPOINT_RECORDING_LOADED(str_wp_engineer_route)
|
|
Kill_Event(mef_lester_phone_call)
|
|
Load_Asset_AnimDict(sAssetData, "MOVE_P_M_ZERO_RUCKSACK")
|
|
|
|
REGISTER_ENTITY_FOR_CUTSCENE(null, "Life_invader_Engineer", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, mod_hipster_main)
|
|
START_CUTSCENE()
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE,DEFAULT,FALSE)
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
VEHICLE_INDEX vehTemp
|
|
vehTemp = GET_PLAYERS_LAST_VEHICLE()
|
|
|
|
// Use the size limit resolve function with a larger area for vehicles that are too big
|
|
IF DOES_ENTITY_EXIST(vehTemp)
|
|
AND IS_ENTITY_TOO_BIG(vehTemp, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<-1048.717651,-212.836868,36.700832>>, <<-1027.840088,-233.548004,39.983681>>, 22.750000,
|
|
<<-1053.5105, -222.5092, 37.0833>>, 241.3186, GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR())
|
|
ELSE
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-1043.131470,-221.360596,36.801144>>, <<-1034.720215,-237.289597,42.920845>>, 16.812500,
|
|
<<-1053.5105, -222.5092, 37.0833>>, 241.3186)
|
|
ENDIF
|
|
|
|
CLEAR_AREA_OF_PROJECTILES(v_offices_foot, 20.0)
|
|
CLEAR_AREA_OF_PEDS(v_offices_foot, 20.0)
|
|
CLEAR_PED_BLOOD_DAMAGE(PLAYER_PED_ID())
|
|
REMOVE_PED_HELMET(PLAYER_PED_ID(), TRUE)
|
|
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(), FALSE)
|
|
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
|
|
// grab the ped index from the cutscene and set the correct variation and dialogue stuff
|
|
IF NOT DOES_ENTITY_EXIST(peds[mpf_smoker])
|
|
ENTITY_INDEX cutscene_entity
|
|
cutscene_entity = GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Life_invader_Engineer", mod_hipster_main)
|
|
IF DOES_ENTITY_EXIST(cutscene_entity)
|
|
peds[mpf_smoker] = GET_PED_INDEX_FROM_ENTITY_INDEX(cutscene_entity)
|
|
mission_substage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
|
|
// IF IS_CUTSCENE_PLAYING()
|
|
// IF NOT bReplayRecordEventStarted
|
|
// IF GET_CUTSCENE_TIME() >= 50500
|
|
// AND GET_CUTSCENE_TIME() < 57500
|
|
// REPLAY_START_EVENT()
|
|
// bReplayRecordEventStarted = TRUE
|
|
// ENDIF
|
|
// ELSE
|
|
// IF GET_CUTSCENE_TIME() >= 57500
|
|
// REPLAY_STOP_EVENT()
|
|
// bReplayRecordEventStarted = FALSE
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_offices
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("LESTER_1A_FOLLOW_PROGRAMMER")
|
|
START_AUDIO_SCENE("LESTER_1A_FOLLOW_PROGRAMMER")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
REPLAY_STOP_EVENT()
|
|
CPRINTLN(DEBUG_MIKE, "LES1A: CAMERA EXITED @ ", GET_GAME_TIMER())
|
|
bExitStateCam = TRUE
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Life_invader_Engineer")
|
|
VECTOR vWpCoord
|
|
WAYPOINT_RECORDING_GET_COORD(str_wp_engineer_route, 2, vWpCoord)
|
|
SET_ENTITY_COORDS(peds[mpf_smoker], vWpCoord)
|
|
SET_ENTITY_HEADING(peds[mpf_smoker], 113.2956)
|
|
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 3, peds[mpf_smoker], "LIEngineer")
|
|
Trigger_Event(mef_engineer_follow)
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
|
|
CPRINTLN(DEBUG_MIKE, "LES1A: MICHAEL EXITED @ ", GET_GAME_TIMER())
|
|
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(), "MOVE_P_M_ZERO_RUCKSACK")
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), FALSE)
|
|
|
|
// mikes state
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 4000, 115.2213, FALSE)
|
|
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
AND GET_CAM_VIEW_MODE_FOR_CONTEXT( CAM_VIEW_MODE_CONTEXT_ON_FOOT ) = CAM_VIEW_MODE_FIRST_PERSON
|
|
SET_ENTITY_COORDS( PLAYER_PED_ID(), <<-1046.6028, -232.4546, 38.0140>> )
|
|
SET_ENTITY_HEADING( PLAYER_PED_ID(), 117.5673 )
|
|
ENDIF
|
|
|
|
REMOVE_PARTICLE_FX_IN_RANGE(<< -1047.5804, -230.8085, 39.8967 >>, 10.0)
|
|
|
|
bExitStateMike = TRUE
|
|
bDisableConspicuousBehavior = TRUE
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE,DEFAULT,FALSE)
|
|
|
|
ENDIF
|
|
|
|
IF bExitStateMike AND NOT bExitStateCam
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(115.2213 - GET_ENTITY_HEADING(PLAYER_PED_ID()))
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
ENDIF
|
|
|
|
IF bExitStateCam AND bExitStateMike
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
REMOVE_CUTSCENE()
|
|
Mission_Set_Stage(msf_st3_go_to_computer)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
PROC ST3_Walkthrough_Offices()
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(3, "3. Follow Programmer", FALSE, FALSE)
|
|
|
|
// load the sit down at pc cutscene
|
|
REQUEST_CUTSCENE("LES_1A_MCS_2")
|
|
Register_Ped_Variation_For_Cutscene_From_Ped(sCutscenePedVariationRegister, PLAYER_PED_ID(), "Michael")
|
|
|
|
bStreamCutScene = FALSE
|
|
|
|
// load ambient models and animations
|
|
Load_Asset_Model(sAssetData, mod_hipster_m)
|
|
Load_Asset_Model(sAssetData, mod_hipster_f)
|
|
Load_Asset_Model(sAssetData, mod_hipster_f_heel)
|
|
Load_Asset_Model(sAssetData, IG_JAY_NORRIS)
|
|
Load_Asset_Model(sAssetData, PROP_PAPER_BALL)
|
|
Load_Asset_Model(sAssetData, Prop_Off_Chair_01)
|
|
Load_Asset_Model(sAssetData, PROP_MONITOR_01D)
|
|
|
|
Load_Asset_Audiobank(sAssetData, "COMPUTERS")
|
|
Load_Asset_Audiobank(sAssetData, "Lester1A_01")
|
|
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_paper_throw)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_boardroom_main)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_boardroom_intro) // boardroom with jay norris
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_interview_1st)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_airguitar_1st)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_airguitar_1st_exit)
|
|
|
|
Load_Asset_AssistedLine(sAssetData, al_stairs_up)
|
|
|
|
Load_Asset_Audiobank(sAssetData, "Lester1A_Qub3d")
|
|
|
|
Load_Asset_Scaleform(sAssetData, "desktop_pc", mov)
|
|
|
|
|
|
Kill_Event(mef_manage_bag)
|
|
|
|
IF NOT IS_PED_INJURED(peds[mpf_smoker])
|
|
SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(peds[mpf_smoker], FALSE)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
ENDIF
|
|
|
|
SET_DOOR_STATE(DOORNAME_LINVADER_OFFICE_UP, DOORSTATE_UNLOCKED)
|
|
|
|
PRINT_NOW("LES1A_5",DEFAULT_GOD_TEXT_TIME,1)
|
|
blip_Objective = CREATE_BLIP_FOR_PED(peds[mpf_smoker],FALSE)
|
|
bReadyToStartWalkChatConvo = TRUE
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 6.0)
|
|
|
|
mission_substage++
|
|
BREAK
|
|
CASE 1
|
|
// trigger ambient ped scenes
|
|
TRIGGER_EVENT(mef_ambient_interview)
|
|
TRIGGER_EVENT(mef_ambient_office)
|
|
TRIGGER_EVENT(mef_ambient_boardroom)
|
|
TRIGGER_EVENT(mef_ambient_paper_throw)
|
|
Trigger_Event(mef_ambient_dialogue)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_smokers_chair].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<< -1060.1737, -245.2477, 43.6942 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
objects[mof_smokers_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<< -1060.1737, -245.2477, 43.6942 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(peds[mpf_smoker])
|
|
// As player gets there kick off the cutscene
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1064.362793,-240.885773,43.041534>>, <<-1062.236572,-245.067993,44.896278>>, 1.500000)
|
|
IF NOT IS_PED_INJURED(peds[mpf_smoker])
|
|
AND HAS_CUTSCENE_LOADED()
|
|
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
|
|
REMOVE_BLIP(blip_Objective)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
Kill_Event(mef_engineer_follow)
|
|
|
|
REGISTER_ENTITY_FOR_CUTSCENE(peds[mpf_smoker], "Life_invader_Engineer", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(objects[mof_smokers_chair].id, "LifeInvad_Chair", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PROP_OFF_CHAIR_01)
|
|
START_CUTSCENE()
|
|
REPLAY_RECORD_BACK_FOR_TIME(6.0, 0.0)
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("LESTER_1A_FOLLOW_PROGRAMMER")
|
|
STOP_AUDIO_SCENE("LESTER_1A_FOLLOW_PROGRAMMER")
|
|
ENDIF
|
|
|
|
INT i
|
|
FOR i = 0 TO iUsablePopups-1
|
|
IF sPopups[i].iType != -1
|
|
AND sPopups[i].iSfxLoop != -1
|
|
AND sPopups[i].bSfxPlaying
|
|
SET_VARIABLE_ON_SOUND(sPopups[i].iSfxLoop, "State", 1)
|
|
CPRINTLN(DEBUG_MIKE, "MINI GAME porn popups sfx volume set to 1 for popup: ", i)
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
// CLEAN UP OF AMBIENT CRAP WHILE SCALEFORM IS IN USE
|
|
Reset_Event(mef_ambient_interview)
|
|
IF DOES_ENTITY_EXIST(peds[mpf_hr]) DELETE_PED(peds[mpf_hr]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_interviewee_m]) DELETE_PED(peds[mpf_interviewee_m]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_interviewee_f]) DELETE_PED(peds[mpf_interviewee_f]) ENDIF
|
|
IF DOES_ENTITY_EXIST(peds[mpf_gamer]) DELETE_PED(peds[mpf_gamer]) ENDIF
|
|
|
|
// begin unloading assets and stopping synched scenes
|
|
Unload_Asset_Model(sAssetData, IG_JAY_NORRIS)
|
|
Unload_Asset_Model(sAssetData, Prop_Off_Chair_01)
|
|
Unload_Asset_Anim_Dict(sAssetData, "MOVE_P_M_ZERO_RUCKSACK")
|
|
Unload_Asset_AssistedLine(sAssetData, al_stairs_up)
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, "AMB@WORLD_HUMAN_STAND_IMPATIENT@MALE@No_Sign@base")
|
|
Unload_Asset_Anim_Dict(sAssetData, "AMB@WORLD_HUMAN_STAND_IMPATIENT@MALE@No_Sign@idle_a")
|
|
|
|
b_MiniGameScaleformSetUp = FALSE
|
|
Mission_Set_Stage(msf_st4_mini_game)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF NOT bStreamCutScene
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Michael", PLAYER_PED_ID())
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_SPECIAL2,0,0)
|
|
bStreamCutScene = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC ST4_Mini_Game()
|
|
INT i
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD)
|
|
ALLOW_ALTERNATIVE_SCRIPT_CONTROLS_LAYOUT(FRONTEND_CONTROL)
|
|
|
|
// Get player input and pass to scaleform
|
|
minigame_scaleform_flags scaleform_return
|
|
|
|
IF mission_substage >= 1 AND mission_substage < 5
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
IF bCursorSnap = TRUE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_SNAP_SPEED")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( 0.0 )
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
bCursorSnap = FALSE
|
|
ENDIF
|
|
ELSE
|
|
IF bCursorSnap = FALSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_SNAP_SPEED")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( 500.0 )
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
bCursorSnap = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_USING_CURSOR( FRONTEND_CONTROL )
|
|
|
|
FLOAT f_PCMousePosX, f_PCMousePosY
|
|
|
|
// No snap if using mouse on PC.
|
|
|
|
f_PCMousePosX = GET_CONTROL_UNBOUND_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X )
|
|
f_PCMousePosY = GET_CONTROL_UNBOUND_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y )
|
|
|
|
IF f_PCMousePosPrevX != f_PCMousePosX
|
|
OR f_PCMousePosPrevY != f_PCMousePosY
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_CURSOR")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( f_PCMousePosX )
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( f_PCMousePosY )
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
fInputAccum += TIMESTEP() // used to trigger the next help text
|
|
|
|
ENDIF
|
|
|
|
f_PCMousePosPrevX = f_PCMousePosX
|
|
f_PCMousePosPrevY = f_PCMousePosY
|
|
|
|
|
|
ELSE
|
|
|
|
INT iPadLeftX,iPadLeftY,iPadRightX,iPadRightY
|
|
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS_UNBOUND(iPadLeftX,iPadLeftY,iPadRightX,iPadRightY)
|
|
|
|
IF iPadLeftX != 0
|
|
OR iPadLeftY != 0
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "MOVE_CURSOR")
|
|
// Adjusted input to be framerate dependant for smoothness
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( f_CursorChangeX * 0.3)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( TO_FLOAT( iPadLeftX ) * 5 * TIMESTEP())
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( f_CursorChangeY * 0.3)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( TO_FLOAT( iPadLeftY ) * 5 * TIMESTEP())
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
fInputAccum += TIMESTEP() // used to trigger the next help text
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
// #IF IS_DEBUG_BUILD
|
|
//
|
|
// // Debug functionality to test directly passing in a cursor position to the scaleform
|
|
//
|
|
// FLOAT fCursorPosX, fCursorPosY
|
|
//
|
|
// IF IS_CONTROL_PRESSED( FRONTEND_CONTROL, INPUT_SCRIPT_PAD_LEFT )
|
|
//
|
|
// fCursorPosX = 0.25
|
|
//
|
|
// ELIF IS_CONTROL_PRESSED( FRONTEND_CONTROL, INPUT_SCRIPT_PAD_RIGHT )
|
|
//
|
|
// fCursorPosX = 0.75
|
|
//
|
|
// ENDIF
|
|
//
|
|
// IF IS_CONTROL_PRESSED( FRONTEND_CONTROL, INPUT_SCRIPT_PAD_UP )
|
|
//
|
|
// fCursorPosY = 0.25
|
|
//
|
|
// ELIF IS_CONTROL_PRESSED( FRONTEND_CONTROL, INPUT_SCRIPT_PAD_DOWN )
|
|
//
|
|
// fCursorPosY = 0.75
|
|
//
|
|
// ENDIF
|
|
//
|
|
// IF fCursorPosX != 0.0
|
|
// OR fCursorPosY != 0.0
|
|
//
|
|
// BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_CURSOR")
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( fCursorPosX )
|
|
// SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT( fCursorPosY )
|
|
// END_SCALEFORM_MOVIE_METHOD()
|
|
//
|
|
// ENDIF
|
|
//
|
|
// #ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
i_debug_PopupsOpen = GET_POPUPS_OPEN()
|
|
#ENDIF
|
|
|
|
// Process mouse click return
|
|
IF NOT IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(minigame_return_index)
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_FRONTEND_ACCEPT)
|
|
OR IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CURSOR_ACCEPT)
|
|
CDEBUG1LN(DEBUG_MIKE, "Scaleform: Calling SET_INPUT_EVENT on mouse click")
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_INPUT_EVENT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_CROSS))
|
|
minigame_return_index = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE()
|
|
ENDIF
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_MIKE, "Scaleform: Obtaininging mouse click return value")
|
|
scaleform_return = int_to_enum(minigame_scaleform_flags, GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(minigame_return_index))
|
|
CDEBUG1LN(DEBUG_MIKE, "Scaleform: Returned: ", scaleform_return)
|
|
|
|
IF iPopupHelp = 0
|
|
AND fInputAccum >= 0.25
|
|
CLEAR_HELP()
|
|
iPopupHelp = 1
|
|
ENDIF
|
|
|
|
PLAY_SOUND_FRONTEND(-1,"COMPUTERS_MOUSE_CLICK")
|
|
INFORM_MISSION_STATS_OF_INCREMENT(LES1A_MOUSE_CLICKS)
|
|
ENDIF
|
|
|
|
// Process Last popup return
|
|
IF IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(last_popup_return_index)
|
|
CDEBUG1LN(DEBUG_MIKE, "Scaleform: Obtaininging last popup retrun value")
|
|
INT iLast = GET_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_INT(last_popup_return_index)
|
|
CDEBUG1LN(DEBUG_MIKE, "Scaleform: Returned: ", iLast)
|
|
|
|
IF iLast != -1
|
|
iLastPopupClosed = iLast
|
|
sPopups[iLast].bClosed = TRUE
|
|
|
|
// Stop the sfx if it has one
|
|
IF sPopups[iLast].bSfxPlaying
|
|
AND sPopups[iLast].iSfxLoop != -1
|
|
STOP_SOUND(sPopups[iLast].iSfxLoop)
|
|
CPRINTLN(DEBUG_MIKE, "CLOSE POPUP STOP POPUP LOOP SFX:", iLast)
|
|
sPopups[iLast].bSfxPlaying = FALSE
|
|
iPopupsSFXPlaying--
|
|
ENDIF
|
|
|
|
// look for if icon has been revealed
|
|
IF iPopupHelp < 2
|
|
IF sPopups[0].bClosed
|
|
CLEAR_HELP()
|
|
IF GET_POPUPS_OPEN() = 0
|
|
iPopupHelp = 3
|
|
ELSE
|
|
iPopupHelp = 2
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
PLAY_SOUND_FRONTEND(-1,"CLOSE_WINDOW", "LESTER1A_SOUNDS")
|
|
INFORM_MISSION_STATS_OF_INCREMENT(LES1A_POPUPS_CLOSED)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF mission_substage >= 1
|
|
IF NOT bSwappedMonitorToClean
|
|
AND HAS_MODEL_LOADED(PROP_MONITOR_01C)
|
|
IF bSwappedMonitorToPopups
|
|
CREATE_MODEL_SWAP(v_engineer_monitor, 1.0, PROP_MONITOR_01D, PROP_MONITOR_01C, TRUE)
|
|
ELSE
|
|
CREATE_MODEL_SWAP(v_engineer_monitor, 1.0, PROP_MONITOR_LI, PROP_MONITOR_01C, TRUE)
|
|
ENDIF
|
|
Unload_Asset_Model(sAssetData, PROP_MONITOR_01C)
|
|
bSwappedMonitorToClean = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
IF NOT b_MiniGameScaleformSetUp
|
|
AND HAS_SCALEFORM_MOVIE_LOADED(mov)
|
|
|
|
// set up icons
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_PROGRAM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iIcons[0])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LES1A_ANTVI")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_PROGRAM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iIcons[1])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LES1A_MYCOM")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_PROGRAM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iIcons[2])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(7)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LES1A_EXT")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_PROGRAM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iIcons[3])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(8)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LES1A_FOLD")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_PROGRAM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iIcons[4])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(9)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LES1A_PRINT")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "ADD_PROGRAM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iIcons[5])
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(10)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LES1A_TRASH")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
// position the popup locations
|
|
FOR i = 0 TO 11
|
|
IF sPopups[i].iType != -1
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(i)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(sPopups[i].iType)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(sPopups[i].fPosX)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(sPopups[i].fPosY)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ELSE
|
|
sPopups[i].bClosed = TRUE
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
// Run the virus popups
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "RUN_PROGRAM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(3)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
b_MiniGameScaleformSetUp = TRUE
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
REPLAY_STOP_EVENT()
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("LifeInvad_Chair")
|
|
// position the chair
|
|
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
OR HAS_CUTSCENE_FINISHED()
|
|
|
|
SET_ENTITY_COORDS(objects[mof_smokers_chair].id, <<-1060.36, -244.97, 43.02>>)
|
|
SET_ENTITY_HEADING(objects[mof_smokers_chair].id, 117.456348)
|
|
|
|
IF NOT IS_SCRIPT_TASK_RUNNING_OR_STARTING(PLAYER_PED_ID(), SCRIPT_TASK_USE_NEAREST_SCENARIO_TO_POS)
|
|
IF DOES_SCENARIO_OF_TYPE_EXIST_IN_AREA(GET_ENTITY_COORDS(objects[mof_smokers_chair].id), "PROP_HUMAN_SEAT_COMPUTER", 1.5, FALSE)
|
|
TASK_USE_NEAREST_SCENARIO_CHAIN_TO_COORD_WARP(PLAYER_PED_ID(), GET_ENTITY_COORDS(objects[mof_smokers_chair].id), 1.5, -1)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(mov)
|
|
#IF IS_DEBUG_BUILD
|
|
Start_New_Metrics_Stage("4. Popup Minigame")
|
|
#ENDIF
|
|
|
|
//Load_Asset_String(str_wp_to_bomb_room)
|
|
IF IS_SCRIPTED_CONVERSATION_ONGOING()
|
|
KILL_ANY_CONVERSATION()
|
|
ENDIF
|
|
|
|
strMinigameConvo = "LS1A_LOOK"
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
REMOVE_CUTSCENE()
|
|
|
|
DISPLAY_RADAR(FALSE)
|
|
DISPLAY_HUD(FALSE)
|
|
CLEAR_PRINTS()
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0)
|
|
|
|
//Activate multihead blinders
|
|
SET_MULTIHEAD_SAFE(TRUE,TRUE)
|
|
|
|
// CLean up remaining
|
|
Reset_Event(mef_ambient_boardroom)
|
|
Reset_Event(mef_ambient_office)
|
|
Reset_Event(mef_ambient_paper_throw)
|
|
|
|
mission_ped_flag x
|
|
// Remove paper throwing and air guitaring peds
|
|
FOR x = mpf_office_paper_m TO mpf_office_d
|
|
IF DOES_ENTITY_EXIST(peds[x]) DELETE_PED(peds[x]) ENDIF
|
|
ENDFOR
|
|
|
|
// remove boardroom peds
|
|
FOR x = mpf_boardroom_norris TO mpf_boardroom_f_c
|
|
IF DOES_ENTITY_EXIST(peds[x]) DELETE_PED(peds[x]) ENDIF
|
|
ENDFOR
|
|
|
|
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_a_chair], INSTANT_BLEND_OUT)
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_b_chair], INSTANT_BLEND_OUT)
|
|
SAFE_STOP_SYNCHRONIZED_ENTITY_ANIM(objects[mof_office_d_chair], INSTANT_BLEND_OUT)
|
|
|
|
UnLoad_Asset_Model(sAssetData, mod_hipster_m)
|
|
Unload_Asset_Model(sAssetData, mod_hipster_f)
|
|
Unload_Asset_Model(sAssetData, mod_hipster_f_heel)
|
|
|
|
Unload_Asset_Model(sAssetData, PROP_PAPER_BALL)
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_boardroom_main)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_boardroom_intro)
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_paper_throw)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_1st)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_1st_exit)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_2nd)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_2nd_exit)
|
|
|
|
Load_Asset_Model(sAssetData, PROP_MONITOR_01C)
|
|
bSwappedMonitorToClean = FALSE
|
|
|
|
// Reset the chairs
|
|
mission_objects_flag iChairs
|
|
FOR iChairs = mof_boardroom_m_a_chair TO mof_boardroom_f_c_chair
|
|
IF DOES_ENTITY_EXIST(objects[iChairs].id)
|
|
VECTOR vPos
|
|
vPos = GET_ENTITY_COORDS(objects[iChairs].id)
|
|
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[iChairs].id)
|
|
CLEAR_AREA(vPos, 1.0, TRUE, TRUE, FALSE, FALSE)
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(LES1A_CLEAR_POPUPS)
|
|
|
|
INIT_PC_SCRIPTED_CONTROLS("Lester1A_PopUpMinigame")
|
|
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("LESTER_1A_POPUP_MINIGAME")
|
|
START_AUDIO_SCENE("LESTER_1A_POPUP_MINIGAME")
|
|
ENDIF
|
|
|
|
FOR i = 0 TO iUsablePopups-1
|
|
IF sPopups[i].iType != -1
|
|
AND sPopups[i].iSfxLoop != -1
|
|
AND sPopups[i].bSfxPlaying
|
|
SET_VARIABLE_ON_SOUND(sPopups[i].iSfxLoop, "State", 2)
|
|
CPRINTLN(DEBUG_MIKE, "MINI GAME porn popups sfx volume set to 2 for popup: ", i)
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
iReopenTimeStamp = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(3000, 4000)
|
|
iPopupOpenStage = 0
|
|
|
|
bPlayedClosePopupsFirstConvo = FALSE
|
|
|
|
mission_substage++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 1 //draws the popupminigame page and waits for photo upload
|
|
// load the get up mini cutscene
|
|
IF NOT IS_CUTSCENE_ACTIVE()
|
|
REQUEST_CUTSCENE("LES_1A_MCS_3")
|
|
bStreamCutScene = FALSE
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_smokers_chair].id)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<< -1060.1737, -245.2477, 43.6942 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
objects[mof_smokers_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<< -1060.1737, -245.2477, 43.6942 >>, 1.0, PROP_OFF_CHAIR_01)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// print help text
|
|
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
IF iPopupHelp = 0
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
PRINT_HELP_FOREVER("LES1A_16_KM") // move the mouse...
|
|
ELSE
|
|
PRINT_HELP_FOREVER("LES1A_16") // move the mouse...
|
|
ENDIF
|
|
ELIF iPopupHelp = 1
|
|
PRINT_HELP_FOREVER("LES1A_161") // reveal the shortcut
|
|
ELIF iPopupHelp = 2
|
|
PRINT_HELP_FOREVER("LES1A_162") // close all the popups....
|
|
ELIF iPopupHelp = 3
|
|
PRINT_HELP_FOREVER("LES1A_17") // run the AV...
|
|
ELIF iPopupHelp = 4
|
|
PRINT_HELP_FOREVER("LES1A_18") // click scan...
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_POPUPS_OPEN() = 0
|
|
IF iPopupHelp < 3
|
|
CLEAR_HELP()
|
|
iPopupHelp = 3
|
|
strMinigameConvo = "LS1A_SOFT"
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_GAME_TIMER() > iReopenTimeStamp
|
|
|
|
iReopenTimeStamp = GET_GAME_TIMER()
|
|
IF iScanTimer != 0
|
|
iReopenTimeStamp += GET_RANDOM_INT_IN_RANGE(100, 250)
|
|
ELSE
|
|
SWITCH iPopupOpenStage
|
|
CASE 0
|
|
iReopenTimeStamp += GET_RANDOM_INT_IN_RANGE(3000, 4000)
|
|
BREAK
|
|
CASE 1
|
|
iReopenTimeStamp += GET_RANDOM_INT_IN_RANGE(500, 1000)
|
|
BREAK
|
|
CASE 2 FALLTHRU
|
|
CASE 3
|
|
iReopenTimeStamp += GET_RANDOM_INT_IN_RANGE(6000, 7000)
|
|
BREAK
|
|
DEFAULT
|
|
IF GET_POPUPS_OPEN() = 0
|
|
iReopenTimeStamp += 10000
|
|
ELSE
|
|
iReopenTimeStamp += GET_RANDOM_INT_IN_RANGE(7000, 10000)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
IF GET_POPUPS_OPEN() < iUsablePopups-1
|
|
//AND iScanTimer != 0
|
|
|
|
iPopupOpenStage++
|
|
|
|
/* Find a random popup to reopen
|
|
* The popup cannot be one that is already open
|
|
* Nor can it be the last one to be closed
|
|
*/
|
|
INT nextToReopen
|
|
nextToReopen = -1
|
|
WHILE nextToReopen = -1
|
|
OR nextToReopen = iLastPopupClosed
|
|
OR NOT sPopups[nextToReopen].bClosed
|
|
nextToReopen = GET_RANDOM_INT_IN_RANGE(0, iUsablePopups)
|
|
ENDWHILE
|
|
|
|
// Prompt scaleform to open a popup
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "OPEN_POPUP")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(nextToReopen)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
// Play opening sounds and advert music
|
|
PLAY_SOUND_FRONTEND(-1,"OPEN_WINDOW", "LESTER1A_SOUNDS")
|
|
sPopups[nextToReopen].bClosed = FALSE
|
|
IF sPopups[nextToReopen].bSfxPlaying = FALSE
|
|
AND sPopups[nextToReopen].iSfxLoop != -1
|
|
STRING strSFX
|
|
IF iPopupsSFXPlaying < 6
|
|
SWITCH (iPopupsSFXPlaying)
|
|
CASE 0 strSFX = "POPUP_MUSIC_01" BREAK
|
|
CASE 1 strSFX = "POPUP_MUSIC_02" BREAK
|
|
CASE 2 strSFX = "POPUP_MUSIC_03" BREAK
|
|
CASE 3 strSFX = "POPUP_MUSIC_04" BREAK
|
|
CASE 4 strSFX = "POPUP_MUSIC_05" BREAK
|
|
CASE 5 strSFX = "POPUP_MUSIC_06" BREAK
|
|
DEFAULT strSFX = "POPUP_MUSIC_RND" BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
strSFX = "POPUP_MUSIC_RND"
|
|
ENDIF
|
|
PLAY_SOUND_FROM_COORD(sPopups[nextToReopen].iSfxLoop, strSFX, <<-1059.63, -244.61, 43.92>>, "LESTER1A_SOUNDS")
|
|
SET_VARIABLE_ON_SOUND(sPopups[nextToReopen].iSfxLoop, "State", 2)
|
|
//PLAY_SOUND_FRONTEND(sPopups[nextToReopen].iSfxLoop, strSFX, "LESTER1A_SOUNDS")
|
|
CPRINTLN(DEBUG_MIKE, "REOPEN POPUP PLAY POPUP LOOP SFX:", nextToReopen)
|
|
sPopups[nextToReopen].bSfxPlaying = TRUE
|
|
iPopupsSFXPlaying++
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Process feedback from scaleform movie
|
|
SWITCH scaleform_return
|
|
|
|
CASE mgsf_av_open
|
|
|
|
IF NOT bIsAVOpen
|
|
IF GET_POPUPS_OPEN() > 0
|
|
CPRINTLN(DEBUG_MIKE, "AV Open: Close popups first!")
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "OPEN_ANTIVIRUS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LES1A_AV2")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
IF NOT bPlayedClosePopupsFirstConvo
|
|
strMinigameConvo = "LS1A_CLICK"
|
|
bPlayedClosePopupsFirstConvo = TRUE
|
|
ENDIF
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ELSE
|
|
CPRINTLN(DEBUG_MIKE, "AV Open: Opened")
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "OPEN_ANTIVIRUS")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("LES1A_AV1")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
bIsAVOpen = TRUE
|
|
IF iPopupHelp != 4
|
|
CLEAR_HELP()
|
|
iPopupHelp = 4
|
|
strMinigameConvo = "LS1A_SCAN"
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Popup closed
|
|
CASE mgsf_av_popup_close
|
|
// Get the last popup closed
|
|
IF NOT IS_SCALEFORM_MOVIE_METHOD_RETURN_VALUE_READY(last_popup_return_index)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "LAST_POPUP_CLOSED")
|
|
last_popup_return_index = END_SCALEFORM_MOVIE_METHOD_RETURN_VALUE()
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Antivirus clean started
|
|
CASE mgsf_av_start_clean
|
|
|
|
IF bIsAVOpen
|
|
PLAY_SOUND_FRONTEND(iSFX_FindVirus,"FINDING_VIRUS", "LESTER1A_SOUNDS")
|
|
IF iPopupHelp != 5
|
|
CLEAR_HELP()
|
|
iPopupHelp = 5
|
|
strMinigameConvo = "LS1A_SCAN2"
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
|
|
iScanTimer = GET_GAME_TIMER()
|
|
iReopenTimeStamp = iScanTimer + 100
|
|
ENDIF
|
|
BREAK
|
|
|
|
// Start exterminate
|
|
CASE mgsf_av_exterminate
|
|
|
|
IF bIsAVOpen
|
|
CLEAR_HELP()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED()
|
|
iCurrentPopup = 0
|
|
strMinigameConvo = "LS1A_DALEK"
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Update scan
|
|
IF iScanTimer != 0
|
|
INT iTimePassed, iScanBar
|
|
iTimePassed = GET_GAME_TIMER() - iScanTimer
|
|
|
|
SWITCH iScanStutter
|
|
CASE 0
|
|
// Progress up to 85% over 1 seconds
|
|
IF iTimePassed >= 1000
|
|
STOP_SOUND(iSFX_FindVirus)
|
|
iScanStutter++
|
|
ELSE
|
|
iPrevScanBar = iScanBar
|
|
iScanBar = ROUND((TO_FLOAT(iTimePassed)/1000.0) * 85.0)
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF iTimePassed >= 3000
|
|
PLAY_SOUND_FRONTEND(iSFX_FindVirus,"FINDING_VIRUS", "LESTER1A_SOUNDS")
|
|
iScanStutter++
|
|
ELSE
|
|
// Pause for 1 second
|
|
IF NOT bScanPaused
|
|
bScanPaused = TRUE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PLAY_SCAN_ANIM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF iTimePassed >= 3250
|
|
STOP_SOUND(iSFX_FindVirus)
|
|
iScanStutter++
|
|
ELSE
|
|
IF bScanPaused
|
|
bScanPaused = FALSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PLAY_SCAN_ANIM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
iPrevScanBar = iScanBar
|
|
iScanBar = ROUND((TO_FLOAT(iTimePassed-3000)/250.0) * 1.0) + 85
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF iTimePassed >= 3750
|
|
PLAY_SOUND_FRONTEND(iSFX_FindVirus,"FINDING_VIRUS", "LESTER1A_SOUNDS")
|
|
iScanStutter++
|
|
ELSE
|
|
// Pause for 1/2 second
|
|
IF NOT bScanPaused
|
|
bScanPaused = TRUE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PLAY_SCAN_ANIM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
IF iTimePassed >= 4500
|
|
STOP_SOUND(iSFX_FindVirus)
|
|
iScanStutter++
|
|
ELSE
|
|
IF bScanPaused
|
|
bScanPaused = FALSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PLAY_SCAN_ANIM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
iPrevScanBar = iScanBar
|
|
iScanBar = ROUND((TO_FLOAT(iTimePassed-3750)/750.0) * 3.0) + 86
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
IF iTimePassed >= 4650
|
|
PLAY_SOUND_FRONTEND(iSFX_FindVirus,"FINDING_VIRUS", "LESTER1A_SOUNDS")
|
|
iScanStutter++
|
|
ELSE
|
|
IF NOT bScanPaused
|
|
bScanPaused = TRUE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PLAY_SCAN_ANIM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
IF iTimePassed >= 5000
|
|
STOP_SOUND(iSFX_FindVirus)
|
|
iScanStutter++
|
|
ELSE
|
|
IF bScanPaused
|
|
bScanPaused = FALSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PLAY_SCAN_ANIM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
iPrevScanBar = iScanBar
|
|
iScanBar = ROUND((TO_FLOAT(iTimePassed-4650)/350.0) * 3.0) + 89
|
|
ENDIF
|
|
BREAK
|
|
CASE 7
|
|
IF iTimePassed >= 6500
|
|
PLAY_SOUND_FRONTEND(iSFX_FindVirus,"FINDING_VIRUS", "LESTER1A_SOUNDS")
|
|
iScanStutter++
|
|
ELSE
|
|
IF NOT bScanPaused
|
|
bScanPaused = TRUE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PLAY_SCAN_ANIM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 8
|
|
IF iTimePassed >= 6850
|
|
STOP_SOUND(iSFX_FindVirus)
|
|
iScanStutter++
|
|
ELSE
|
|
IF bScanPaused
|
|
bScanPaused = FALSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PLAY_SCAN_ANIM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
iPrevScanBar = iScanBar
|
|
iScanBar = ROUND((TO_FLOAT(iTimePassed-6500)/350.0) * 2.0) + 92
|
|
ENDIF
|
|
BREAK
|
|
CASE 9
|
|
IF iTimePassed >= 7350
|
|
PLAY_SOUND_FRONTEND(iSFX_FindVirus,"FINDING_VIRUS", "LESTER1A_SOUNDS")
|
|
iScanStutter++
|
|
ELSE
|
|
IF NOT bScanPaused
|
|
bScanPaused = TRUE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PLAY_SCAN_ANIM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 10
|
|
IF iTimePassed >= 8600
|
|
STOP_SOUND(iSFX_FindVirus)
|
|
iScanStutter++
|
|
ELSE
|
|
IF bScanPaused
|
|
bScanPaused = FALSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "PLAY_SCAN_ANIM")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
iPrevScanBar = iScanBar
|
|
iScanBar = ROUND((TO_FLOAT(iTimePassed-7350)/1250.0) * 6.0) + 94
|
|
ENDIF
|
|
BREAK
|
|
CASE 11
|
|
STOP_SOUND(iSFX_FindVirus)
|
|
PLAY_SOUND(-1, "Virus_Eradicated", "LESTER1A_SOUNDS")
|
|
iPrevScanBar = iScanBar
|
|
iScanBar = 100
|
|
iScanTimer = 0
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Udates the scan bar
|
|
IF iPrevScanBar != iScanBar
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "SET_SCAN_BAR")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iScanBar)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
// Manage volume of sound fx
|
|
INT j
|
|
REPEAT COUNT_OF(sPopups) j
|
|
IF sPopups[j].bSfxPlaying
|
|
AND sPopups[j].iSfxLoop != -1
|
|
SET_VARIABLE_ON_SOUND(sPopups[j].iSfxLoop, "TracksPlaying", TO_FLOAT(CLAMP_INT(iPopupsSFXPlaying, 1, 12)))
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0)
|
|
BREAK
|
|
CASE 2
|
|
BOOL bClosedOne
|
|
|
|
IF GET_GAME_TIMER() - iExterminateTimer >= 100
|
|
WHILE NOT bClosedOne
|
|
IF iCurrentPopup >= iUsablePopups
|
|
SETTIMERA(0)
|
|
bClosedOne = TRUE // set to true just to cause the loop to exit
|
|
|
|
mission_substage++
|
|
ELIF NOT sPopups[iCurrentPopup].bClosed
|
|
AND sPopups[iCurrentPopup].iType != -1
|
|
|
|
// Close the popup
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov, "CLOSE_POPUP")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iCurrentPopup)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
// kill the sfx
|
|
IF sPopups[iCurrentPopup].bSfxPlaying
|
|
AND sPopups[iCurrentPopup].iSfxLoop != -1
|
|
STOP_SOUND(sPopups[iCurrentPopup].iSfxLoop)
|
|
CPRINTLN(DEBUG_MIKE, "EXTERMINATE STOP POPUP LOOP SFX:", iCurrentPopup)
|
|
sPopups[iCurrentPopup].bSfxPlaying = FALSE
|
|
ENDIF
|
|
|
|
PLAY_SOUND_FRONTEND(-1,"CLOSE_WINDOW", "LESTER1A_SOUNDS")
|
|
|
|
sPopups[iCurrentPopup].bClosed = TRUE
|
|
iExterminateTimer = GET_GAME_TIMER()
|
|
bClosedOne = TRUE
|
|
ELSE
|
|
bClosedOne = FALSE
|
|
ENDIF
|
|
|
|
iCurrentPopup++
|
|
ENDWHILE
|
|
ENDIF
|
|
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0)
|
|
BREAK
|
|
CASE 3
|
|
strMinigameConvo = "DONTPLAY"
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1A_PASS", CONV_PRIORITY_HIGH)
|
|
mission_substage++
|
|
ENDIF
|
|
ENDIF
|
|
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0)
|
|
BREAK
|
|
CASE 4
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED()
|
|
mission_substage++
|
|
ENDIF
|
|
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0)
|
|
BREAK
|
|
CASE 5
|
|
DRAW_SCALEFORM_MOVIE_FULLSCREEN(mov,255,255,255,0)
|
|
|
|
// do cutscene
|
|
IF HAS_CUTSCENE_LOADED()
|
|
//This should keep the blinders on
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
IF NOT IS_PED_INJURED(peds[mpf_smoker])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(peds[mpf_smoker], "Life_invader_Engineer", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(objects[mof_smokers_chair].id, "LifeInvad_Chair", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PROP_OFF_CHAIR_01)
|
|
|
|
START_CUTSCENE()
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("LESTER_1A_POPUP_MINIGAME")
|
|
STOP_AUDIO_SCENE("LESTER_1A_POPUP_MINIGAME")
|
|
ENDIF
|
|
|
|
// Load all the assets back in
|
|
Load_Asset_Model(sAssetData, IG_JAY_NORRIS)
|
|
Load_Asset_Model(sAssetData, mod_hipster_m)
|
|
Load_Asset_Model(sAssetData, mod_hipster_f)
|
|
Load_Asset_Model(sAssetData, mod_hipster_f_heel)
|
|
|
|
Load_Asset_Model(sAssetData, PROP_PAPER_BALL)
|
|
Load_Asset_Model(sAssetData, Prop_Off_Chair_01)
|
|
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_airguitar_1st_exit)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_interview_1st_exit)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_paper_throw)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_boardroom_main)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_boardroom_intro) // boardroom with jay norris
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_engineer_airguitar)
|
|
Load_Asset_AnimDict(sAssetData, "MOVE_P_M_ZERO_RUCKSACK")
|
|
|
|
TRIGGER_EVENT(mef_ambient_receptionist)
|
|
TRIGGER_EVENT(mef_ambient_office)
|
|
TRIGGER_EVENT(mef_ambient_interview)
|
|
TRIGGER_EVENT(mef_ambient_boardroom)
|
|
TRIGGER_EVENT(mef_ambient_paper_throw)
|
|
|
|
DISPLAY_RADAR(TRUE)
|
|
DISPLAY_HUD(TRUE)
|
|
|
|
SHUTDOWN_PC_SCRIPTED_CONTROLS()
|
|
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 6
|
|
Unload_Asset_ScaleForm(sAssetData, mov)
|
|
bExitStateCam = FALSE
|
|
bExitStateMike = FALSE
|
|
mission_substage++
|
|
BREAK
|
|
CASE 7
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("LifeInvad_Chair")
|
|
FREEZE_ENTITY_POSITION(objects[mof_smokers_chair].id, TRUE)
|
|
bExitStateCam = TRUE
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("MICHAEL")
|
|
REPLAY_STOP_EVENT()
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 6.0)
|
|
//SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 9, 0)
|
|
SET_PED_COMP_ITEM_CURRENT_SP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK, FALSE)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
|
|
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(), "MOVE_P_M_ZERO_RUCKSACK")
|
|
|
|
START_AUDIO_SCENE("LESTER_1A_RIG_EXPLOSIVE")
|
|
|
|
Trigger_Event(mef_engineer_air_guitar)
|
|
bExitStateMike = TRUE
|
|
ENDIF
|
|
|
|
IF bExitStateMike
|
|
AND bExitStateCam
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
Mission_Set_Stage(msf_st5_plant_bomb)
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE STAGE_EXIT
|
|
DISPLAY_RADAR(TRUE)
|
|
DISPLAY_HUD(TRUE)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF mission_substage = 1
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF iTimeSinceLastMinigameConvo = -1
|
|
iTimeSinceLastMinigameConvo = GET_GAME_TIMER()
|
|
ENDIF
|
|
ELSE
|
|
iTimeSinceLastMinigameConvo = -1
|
|
ENDIF
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(strMinigameConvo)
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, strMinigameConvo, CONV_PRIORITY_HIGH)
|
|
IF ARE_STRINGS_EQUAL(strMinigameConvo, "LS1A_LOOK")
|
|
strMinigameConvo = "LS1A_PCCHT"
|
|
ELSE
|
|
strMinigameConvo = ""
|
|
ENDIF
|
|
iTimeSinceLastMinigameConvo = -1
|
|
bLifeInvaderGuyLastToSpeak = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT ARE_STRINGS_EQUAL(strMinigameConvo, "DONTPLAY")
|
|
IF (iTimeSinceLastMinigameConvo != -1 AND GET_GAME_TIMER() - iTimeSinceLastMinigameConvo > 3500)
|
|
OR bLifeInvaderGuyLastToSpeak
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
IF NOT bLifeInvaderGuyLastToSpeak
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1A_ENCOUR", CONV_PRIORITY_HIGH)
|
|
bLifeInvaderGuyLastToSpeak = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1A_DEAL", CONV_PRIORITY_HIGH)
|
|
bLifeInvaderGuyLastToSpeak = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF NOT bStreamCutScene
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
//SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Michael", PLAYER_PED_ID())
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID())
|
|
//SET_PED_PRELOAD_VARIATION_DATA(PLAYER_PED_ID(), PED_COMP_SPECIAL2, 9, 0)
|
|
PRELOAD_PED_COMP(PLAYER_PED_ID(), COMP_TYPE_SPECIAL2, SPECIAL2_P0_RUCKSACK)
|
|
bStreamCutScene = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC ST5_Plant_Bomb()
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1053.66, -231.77, 43.99>>, 0.5, PROP_SECURITY_CASE_01)
|
|
objects[mof_prototype_case].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1053.66, -231.77, 43.99>>, 0.5, PROP_SECURITY_CASE_01)
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(4, "5. Plant the bomb", FALSE, FALSE)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
PRINT_NOW("LES1A_6",DEFAULT_GOD_TEXT_TIME,1)
|
|
blip_Objective = CREATE_BLIP_FOR_OBJECT(objects[mof_prototype_case].id)
|
|
SET_BLIP_NAME_FROM_TEXT_FILE(blip_Objective, "PROTOTYPE")
|
|
|
|
bCamExited = FALSE
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF NOT IS_CUTSCENE_ACTIVE()
|
|
REQUEST_CUTSCENE("LES_1A_MCS_4")
|
|
bStreamCutScene = FALSE
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
// play bomb plant cutscene
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1053.825439,-234.700668,43.021164>>, <<-1057.149414,-234.353485,46.205666>>, 1.000000)
|
|
AND HAS_CUTSCENE_LOADED()
|
|
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE,DEFAULT,FALSE)
|
|
START_CUTSCENE()
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE)
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("LESTER_1A_RIG_EXPLOSIVE")
|
|
STOP_AUDIO_SCENE("LESTER_1A_RIG_EXPLOSIVE")
|
|
ENDIF
|
|
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_airguitar_2nd)
|
|
Load_Asset_AnimDict(sAssetData, anim_dict_interview_2nd)
|
|
Load_Asset_AnimDict(sAssetData, "amb@prop_human_seat_computer@male@base")
|
|
Load_Asset_Model(sAssetData, P_MICHAEL_BACKPACK_S)
|
|
|
|
Kill_Event(mef_engineer_air_guitar)
|
|
|
|
RESET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID())
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS(PLAYER_PED_ID(), TRUE)
|
|
|
|
SAFE_REMOVE_BLIP(blip_Objective)
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(6.0, 0.0)
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
// Reset the chair incase its been moved
|
|
IF DOES_ENTITY_EXIST(objects[mof_smokers_chair].id)
|
|
VECTOR vPos
|
|
vPos = GET_ENTITY_COORDS(objects[mof_smokers_chair].id)
|
|
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[mof_smokers_chair].id)
|
|
CLEAR_AREA(vPos, 1.0, TRUE, TRUE, FALSE, FALSE)
|
|
ENDIF
|
|
|
|
/*
|
|
IF IS_CUTSCENE_PLAYING()
|
|
IF NOT bReplayRecordEventStarted
|
|
IF GET_CUTSCENE_TIME() >= 8000
|
|
AND GET_CUTSCENE_TIME() < 19250
|
|
REPLAY_START_EVENT()
|
|
bReplayRecordEventStarted = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF GET_CUTSCENE_TIME() >= 19250
|
|
REPLAY_STOP_EVENT()
|
|
bReplayRecordEventStarted = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
*/
|
|
|
|
IF NOT bCamExited
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
REPLAY_STOP_EVENT()
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 8.0)
|
|
bCamExited = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bCamExited
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE,DEFAULT,FALSE)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_mike_rucksack].id)
|
|
AND HAS_MODEL_LOADED(P_MICHAEL_BACKPACK_S)
|
|
Create_Prop(objects[mof_mike_rucksack], P_MICHAEL_BACKPACK_S, v_BagCoord)
|
|
SET_ENTITY_COLLISION(objects[mof_mike_rucksack].id, FALSE)
|
|
SET_ENTITY_COORDS(objects[mof_mike_rucksack].id, v_BagCoord)
|
|
SET_ENTITY_ROTATION(objects[mof_mike_rucksack].id, v_BagRot)
|
|
FREEZE_ENTITY_POSITION(objects[mof_mike_rucksack].id, TRUE)
|
|
ENDIF
|
|
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 1000)
|
|
|
|
START_AUDIO_SCENE("LESTER_1A_LEAVE_OFFICE")
|
|
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
IF IS_SCREEN_FADED_OUT()
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
IF IS_DOOR_REGISTERED_WITH_SYSTEM(enum_to_int(DOORHASH_LINVADER_OFFICE_UP))
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(enum_to_int(DOORHASH_LINVADER_OFFICE_UP), 0.0)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(enum_to_int(DOORHASH_LINVADER_OFFICE_UP), DOORSTATE_FORCE_LOCKED_THIS_FRAME, TRUE, TRUE)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(enum_to_int(DOORHASH_LINVADER_OFFICE_UP), DOORSTATE_FORCE_UNLOCKED_THIS_FRAME, TRUE, TRUE)
|
|
CDEBUG1LN(DEBUG_MIKE, "LES1A &&&&&& Closed office door after skipping cutscene")
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_MIKE, "LES1A &&&&&& Office door NOT registered with door system")
|
|
ENDIF
|
|
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
ELIF IS_SCREEN_FADED_IN()
|
|
Mission_Set_Stage(msf_st6_leave_building)
|
|
ENDIF
|
|
BREAK
|
|
CASE STAGE_EXIT
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF NOT bStreamCutScene
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Michael", PLAYER_PED_ID())
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Michael", PED_COMP_SPECIAL2,9,0)
|
|
bStreamCutScene = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC ST6_Leave_Building()
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(5, "6. Leave the building", FALSE, FALSE)
|
|
|
|
Load_Asset_AnimDict(sAssetData, "AMB@PROP_HUMAN_SEAT_COMPUTER@MALE@IDLE_B")
|
|
Load_Asset_AssistedLine(sAssetData, al_stairs_down)
|
|
TRIGGER_EVENT(mef_ambient_milk)
|
|
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_L, DOORSTATE_UNLOCKED)
|
|
SET_DOOR_STATE(DOORNAME_LIFE_INVADER_FRONT_R, DOORSTATE_UNLOCKED)
|
|
|
|
PRINT_NOW("LES1A_7",DEFAULT_GOD_TEXT_TIME,1)
|
|
|
|
i_EngineerBye = 0
|
|
mission_substage++
|
|
BREAK
|
|
CASE 1
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) != interior_offices
|
|
|
|
bAllowRunning = TRUE
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("LESTER_1A_LEAVE_OFFICE")
|
|
STOP_AUDIO_SCENE("LESTER_1A_LEAVE_OFFICE")
|
|
ENDIF
|
|
|
|
Mission_Set_Stage(msf_st7_go_home)
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
SWITCH i_EngineerBye
|
|
CASE 0
|
|
// stop the engineer animating and stick him in his chair.
|
|
IF NOT IS_PED_INJURED(peds[mpf_smoker])
|
|
AND DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1060.18, -245.31, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
AND HAS_ANIM_DICT_LOADED("amb@prop_human_seat_computer@male@base")
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_smokers_chair].id)
|
|
objects[mof_smokers_chair].id = GET_CLOSEST_OBJECT_OF_TYPE(<<-1060.18, -245.31, 43.02>>, 0.5, PROP_OFF_CHAIR_01)
|
|
ENDIF
|
|
|
|
// Move and freeze the chair
|
|
SET_ENTITY_COORDS(objects[mof_smokers_chair].id, <<-1060.36, -244.97, 43.02>>)
|
|
SET_ENTITY_HEADING(objects[mof_smokers_chair].id, 117.456348)
|
|
FREEZE_ENTITY_POSITION(objects[mof_smokers_chair].id, TRUE)
|
|
|
|
CLEAR_PED_TASKS(peds[mpf_smoker])
|
|
SET_RAGDOLL_BLOCKING_FLAGS(peds[mpf_smoker], RBF_PLAYER_IMPACT)
|
|
|
|
TASK_PLAY_ANIM_ADVANCED(peds[mpf_smoker], "amb@prop_human_seat_computer@male@base", "base",
|
|
<<-1060.36, -244.96, 43.52>>, <<0,0,-62.4523997>>, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_OVERRIDE_PHYSICS)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_smoker])
|
|
|
|
|
|
IF IS_AMBIENT_SPEECH_PLAYING(peds[mpf_smoker])
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(peds[mpf_smoker])
|
|
ENDIF
|
|
|
|
i_EngineerBye++
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
// walks past the programmer
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1058.017456,-237.587067,43.021278>>, <<-1053.271118,-246.440964,48.722553>>, 3.812500)
|
|
i_EngineerBye++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF NOT IS_SAFE_TO_START_CONVERSATION()
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ADD_PED_FOR_DIALOGUE(sConvo, 3, peds[mpf_smoker], "LIEngineer")
|
|
|
|
ELIF HAS_ANIM_DICT_LOADED("AMB@PROP_HUMAN_SEAT_COMPUTER@MALE@IDLE_B")
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1A_BYE", CONV_PRIORITY_HIGH)
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(2.0, 5.0)
|
|
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_PLAY_ANIM_ADVANCED(null, "AMB@PROP_HUMAN_SEAT_COMPUTER@MALE@IDLE_B", "IDLE_E",
|
|
<<-1060.36, -244.96, 43.52>>, <<0,0,-62.4523997>>, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_OVERRIDE_PHYSICS)
|
|
TASK_PLAY_ANIM_ADVANCED(null, "amb@prop_human_seat_computer@male@base", "base",
|
|
<<-1060.36, -244.96, 43.52>>, <<0,0,-62.4523997>>, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_OVERRIDE_PHYSICS)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
TASK_PERFORM_SEQUENCE(peds[mpf_smoker], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), peds[mpf_smoker], 5000, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
|
|
TASK_LOOK_AT_ENTITY(peds[mpf_smoker], PLAYER_PED_ID(), 4000, SLF_WHILE_NOT_IN_FOV, SLF_LOOKAT_VERY_HIGH)
|
|
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(peds[mpf_smoker])
|
|
i_EngineerCovoTimer = GET_GAME_TIMER()
|
|
i_EngineerBye++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND NOT IS_AMBIENT_SPEECH_PLAYING(PLAYER_PED_ID())
|
|
PLAY_PED_AMBIENT_SPEECH(PLAYER_PED_ID(), "GENERIC_BYE", SPEECH_PARAMS_FORCE)
|
|
i_EngineerBye++
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
IF NOT IS_PED_INJURED(peds[mpf_smoker])
|
|
AND VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(peds[mpf_smoker])) < 7.5625 // 2.75^2
|
|
IF IS_SAFE_TO_START_CONVERSATION()
|
|
AND GET_GAME_TIMER() - i_EngineerCovoTimer > 8000
|
|
IF CREATE_CONVERSATION(sConvo, str_dialogue, "LS1A_HANG", CONV_PRIORITY_HIGH)
|
|
i_EngineerCovoTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
PROC ST7_Go_Home()
|
|
MONITOR_PLAYER_BEING_ARMED()
|
|
|
|
// rob - 2161097
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(peds[mpf_receptionist_f])
|
|
IF IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), peds[mpf_receptionist_f], <<5,5,5>>)
|
|
SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK)
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_SPRINT)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_living_room
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF NOT IS_SCRIPT_TASK_RUNNING_OR_STARTING(PLAYER_PED_ID(), SCRIPT_TASK_LEAVE_ANY_VEHICLE)
|
|
TASK_LEAVE_ANY_VEHICLE(PLAYER_PED_ID())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ENTER)
|
|
ENDIF
|
|
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(6, "7. Go home", FALSE, FALSE)
|
|
Trigger_Event(mef_lester_phone_call_2)
|
|
|
|
SET_PLAYER_CAN_CHANGE_CLOTHES_ON_MISSION(TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(CLOTHES_SHOP_M_04_HW, FALSE)
|
|
|
|
Trigger_Event(mef_tracey)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(0.1)
|
|
|
|
bTVTurnedOn = FALSE
|
|
bTVTurnedOff = FALSE
|
|
mission_substage++
|
|
BREAK
|
|
CASE 1
|
|
|
|
IF IS_PLAYER_AT_ANGLED_AREA_ON_FOOT(locates_data, v_home_living_room,
|
|
<<-805.352295,177.564972,71.848480>>, <<-801.704163,168.162628,74.974594>>, 9.037500,
|
|
TRUE, "WATCH_KEYNOTE", TRUE)
|
|
|
|
IF HAS_CUTSCENE_LOADED()
|
|
AND bTVTurnedOn
|
|
|
|
IF DOES_ENTITY_EXIST(peds[mpf_receptionist_f])
|
|
DELETE_PED(peds[mpf_receptionist_f])
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objects[mof_receptionist_chair].id)
|
|
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[mof_receptionist_chair].id)
|
|
ENDIF
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, "AMB@PROP_HUMAN_SEAT_COMPUTER@MALE@IDLE_B")
|
|
|
|
CLEAR_MISSION_LOCATE_STUFF(locates_data)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
IF NOT IS_PED_INJURED(peds[mpf_tracey])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(peds[mpf_tracey], "Tracy", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
START_CUTSCENE(CUTSCENE_SUPPRESS_FP_TRANSITION_FLASH)
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(5.0, 0.0)
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
Kill_Event(mef_tracey)
|
|
|
|
INFORM_MISSION_STATS_SYSTEM_OF_INGAME_CUTSCENE_START()
|
|
|
|
Load_Asset_AnimDict(sAssetData, ad_ig_1)
|
|
Load_Asset_Audiobank(sAssetData, "Lester1B")
|
|
Load_Asset_Audiobank(sAssetData, "SAFEHOUSE_MICHAEL_SIT_SOFA")
|
|
|
|
ENABLE_MOVIE_SUBTITLES(FALSE)
|
|
mission_substage++
|
|
ELSE
|
|
IF NOT HAS_CUTSCENE_LOADED()
|
|
DRAW_DEBUG_TEXT_2D("WAITING FOR: cutscene", <<0.5, 0.5, 0.0>>, 255,0,0,255)
|
|
PRINTLN("[Lester1] WAITING FOR: cutscene")
|
|
ENDIF
|
|
IF NOT bTVTurnedOn
|
|
DRAW_DEBUG_TEXT_2D("WAITING FOR: bTVTurnedOn", <<0.5, 0.55, 0.0>>, 255,0,0,255)
|
|
PRINTLN("[Lester1] WAITING FOR: bTVTurnedOn")
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_living_room
|
|
AND IS_SAFE_TO_START_CONVERSATION()
|
|
ENABLE_MOVIE_SUBTITLES(TRUE)
|
|
ELSE
|
|
ENABLE_MOVIE_SUBTITLES(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// cutscene stream
|
|
IF NOT IS_CUTSCENE_ACTIVE()
|
|
IF DOES_ENTITY_EXIST(peds[mpf_tracey])
|
|
AND GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), v_home_living_room) < DEFAULT_CUTSCENE_LOAD_DIST
|
|
REQUEST_CUTSCENE("LES_1B_MCS_1")
|
|
Register_Ped_Variation_For_Cutscene_From_Ped(sCutscenePedVariationRegister, PLAYER_PED_ID(), "Michael")
|
|
Register_Ped_Variation_For_Cutscene_From_Ped(sCutscenePedVariationRegister, peds[mpf_tracey], "Tracy")
|
|
ENDIF
|
|
ELSE
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), v_home_living_room) > DEFAULT_CUTSCENE_UNLOAD_DIST
|
|
OR IS_PLAYER_CHANGING_CLOTHES()
|
|
REMOVE_CUTSCENE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Enable the living room projector
|
|
IF NOT bTVTurnedOn
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), v_home_living_room) < DEFAULT_CUTSCENE_LOAD_DIST
|
|
IF IS_TV_SCRIPT_AVAILABLE_FOR_USE(TV_LOC_MICHAEL_PROJECTOR)
|
|
RESTORE_STANDARD_CHANNELS()
|
|
START_AMBIENT_TV_PLAYBACK(TV_LOC_MICHAEL_PROJECTOR, TVCHANNELTYPE_CHANNEL_2, TV_PLAYLIST_SPECIAL_LEST1_INTRO_FAME_OR_SHAME, FALSE, TRUE)
|
|
bTVTurnedOn = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF bTVTurnedOn
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), v_home_living_room) > DEFAULT_CUTSCENE_UNLOAD_DIST
|
|
IF IS_TV_SCRIPT_AVAILABLE_FOR_USE(TV_LOC_MICHAEL_PROJECTOR)
|
|
STOP_TV_PLAYBACK(TRUE, TV_LOC_MICHAEL_PROJECTOR)
|
|
ENDIF
|
|
bTVTurnedOn = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Lock life invader offices
|
|
IF bDisableConspicuousBehavior
|
|
IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = interior_offices
|
|
|
|
DOOR_SYSTEM_SET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_L), DOORSTATE_UNLOCKED)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_R), DOORSTATE_UNLOCKED)
|
|
|
|
DOOR_SYSTEM_SET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_REAR_L), DOORSTATE_UNLOCKED)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_REAR_R), DOORSTATE_UNLOCKED)
|
|
|
|
ELSE
|
|
|
|
|
|
BOOL bHasLockedBoth
|
|
bHasLockedBoth = TRUE
|
|
IF DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_REAR_L)) != DOORSTATE_LOCKED
|
|
OR DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_REAR_R)) != DOORSTATE_LOCKED
|
|
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1081.791260,-260.706299,36.803814>>, <<-1082.800537,-258.813782,39.825764>>, 3.250000)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_REAR_L), DOORSTATE_LOCKED)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_REAR_R), DOORSTATE_LOCKED)
|
|
ELSE
|
|
bHasLockedBoth = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_L)) != DOORSTATE_LOCKED
|
|
OR DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_R)) != DOORSTATE_LOCKED
|
|
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1044.870972,-230.183853,38.014164>>, <<-1046.881226,-231.225525,41.074177>>, 3.250000)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_L), DOORSTATE_LOCKED)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_R), DOORSTATE_LOCKED)
|
|
ELSE
|
|
bHasLockedBoth = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bHasLockedBoth
|
|
|
|
IF DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_L)) = DOORSTATE_LOCKED AND ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_L))) <= 0.1
|
|
AND DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_R)) = DOORSTATE_LOCKED AND ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(enum_to_int(DOORHASH_LIFE_INVADER_FRONT_R))) <= 0.1
|
|
AND DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_REAR_L)) = DOORSTATE_LOCKED AND ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(enum_to_int(DOORHASH_LIFE_INVADER_REAR_L))) <= 0.1
|
|
AND DOOR_SYSTEM_GET_DOOR_STATE(enum_to_int(DOORHASH_LIFE_INVADER_REAR_R)) = DOORSTATE_LOCKED AND ABSF(DOOR_SYSTEM_GET_OPEN_RATIO(enum_to_int(DOORHASH_LIFE_INVADER_REAR_R))) <= 0.1
|
|
|
|
Kill_Event(mef_ambient_milk)
|
|
Kill_Event(mef_ambient_interview)
|
|
Kill_Event(mef_ambient_office)
|
|
Kill_Event(mef_ambient_boardroom)
|
|
Kill_Event(mef_ambient_paper_throw)
|
|
Kill_Event(mef_ambient_dialogue)
|
|
Kill_Event(mef_engineer_air_guitar)
|
|
|
|
Unload_Asset_Interior(sAssetData, interior_offices)
|
|
|
|
Unload_Asset_Model(sAssetData, mod_hipster_f)
|
|
Unload_Asset_Model(sAssetData, mod_hipster_f_heel)
|
|
Unload_Asset_Model(sAssetData, mod_hipster_main)
|
|
Unload_Asset_Model(sAssetData, mod_hipster_m)
|
|
Unload_Asset_Model(sAssetData, mod_chair)
|
|
Unload_Asset_Model(sAssetData, IG_JAY_NORRIS)
|
|
Unload_Asset_Model(sAssetData, PROP_PAPER_BALL)
|
|
Unload_Asset_Model(sAssetData, PROP_HACKY_SACK_01)
|
|
Unload_Asset_Model(sAssetData, P_MICHAEL_BACKPACK_S)
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_1st)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_1st_exit)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_2nd)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_airguitar_2nd_exit)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_boardroom_main)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_boardroom_intro)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_boardroom_main)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_boardroom_exit)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_coffee)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_engineer_airguitar)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_interview_1st)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_interview_1st_exit)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_interview_2nd)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_interview_2nd_exit)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_milk_lady)
|
|
Unload_Asset_Anim_Dict(sAssetData, anim_dict_paper_throw)
|
|
|
|
Unload_Asset_Anim_Dict(sAssetData, "amb@prop_human_seat_computer@male@base")
|
|
|
|
Unload_Asset_Audio_Bank(sAssetData, "Lester1A_Qub3d")
|
|
Unload_Asset_Audio_Bank(sAssetData, "Lester1A")
|
|
Unload_Asset_Audio_Bank(sAssetData, "COMPUTERS")
|
|
|
|
mission_ped_flag ePed
|
|
FOR ePed = mpf_smoker TO mpf_boardroom_f_c
|
|
IF ePed != mpf_receptionist_f
|
|
IF DOES_ENTITY_EXIST(peds[ePed])
|
|
DELETE_PED(peds[ePed])
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
mission_objects_flag eObj
|
|
FOR eObj = mof_smokers_chair TO mof_mike_rucksack
|
|
IF eObj != mof_receptionist_chair
|
|
IF DOES_ENTITY_EXIST(objects[eObj].id)
|
|
SET_OBJECT_AS_NO_LONGER_NEEDED(objects[eObj].id)
|
|
ENDIF
|
|
ENDIF
|
|
ENDFOR
|
|
|
|
bDisableConspicuousBehavior = FALSE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_PLAYER_THREATENED_TRACY()
|
|
IF IS_PED_UNINJURED(peds[mpf_tracey])
|
|
TASK_SMART_FLEE_PED(peds[mpf_tracey], PLAYER_PED_ID(), 200, -1)
|
|
SET_PED_KEEP_TASK(peds[mpf_tracey], TRUE)
|
|
Mission_Failed(mff_tracey_threat)
|
|
ELSE
|
|
Mission_Failed(mff_tracey_dead)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE 2
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-805.352295,177.564972,71.848480>>, <<-801.704163,168.162628,74.974594>>, 9.037500, <<-828.2097, 179.0565, 70.2544>>, 154.3327, TRUE, FALSE)
|
|
REMOVE_PED_HELMET(PLAYER_PED_ID(), TRUE)
|
|
|
|
SAFE_DELETE_OBJECT(objects[mof_tv_remote].id)
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_CUTSCENE_ACTIVE()
|
|
AND IS_CUTSCENE_PLAYING()
|
|
ENABLE_MOVIE_SUBTITLES(TRUE)
|
|
iDetonationTimer = -1
|
|
Mission_Set_Stage(msf_st8_tv_start)
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
BOOL bEnteredAsFirstPerson
|
|
|
|
PROC ST8_TV_Start()
|
|
MONITOR_PLAYER_BEING_ARMED()
|
|
CYCLE_CAMERAS()
|
|
|
|
BOOL bWindowOpen
|
|
BOOL bWindowClose
|
|
|
|
IF iDetonationTimer != -1
|
|
IF GET_GAME_TIMER() - iDetonationTimer > i_detonate_window_open
|
|
#IF IS_DEBUG_BUILD
|
|
OR b_debug_window_open
|
|
#ENDIF
|
|
bWindowOpen = TRUE
|
|
ENDIF
|
|
|
|
IF GET_GAME_TIMER() - iDetonationTimer > i_detonate_window_close
|
|
bWindowClose = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bWindowOpen AND NOT bWindowClose
|
|
MICHAEL_ANIM_MANAGER(TRUE)
|
|
ELSE
|
|
MICHAEL_ANIM_MANAGER(FALSE)
|
|
ENDIF
|
|
MONITOR_SOUNDS()
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
OR NOT IS_CUTSCENE_ACTIVE()
|
|
IF NOT DOES_CAM_EXIST(cam_tv)
|
|
cam_tv = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED, vCamPos[CAMS_SCRIPT], vCamRot[CAMS_SCRIPT], 40.0, TRUE)
|
|
SHAKE_CAM(cam_tv, "HAND_SHAKE", 0.3)
|
|
ENDIF
|
|
// 1987687
|
|
IF GET_CAM_VIEW_MODE_FOR_CONTEXT( CAM_VIEW_MODE_CONTEXT_ON_FOOT ) = CAM_VIEW_MODE_FIRST_PERSON
|
|
bEnteredAsFirstPerson = TRUE
|
|
SET_CAM_VIEW_MODE_FOR_CONTEXT( CAM_VIEW_MODE_CONTEXT_ON_FOOT, CAM_VIEW_MODE_THIRD_PERSON )
|
|
ENDIF
|
|
ENABLE_MOVIE_SUBTITLES(TRUE)
|
|
SET_CAM_ACTIVE(cam_tv, TRUE)
|
|
DISPLAY_RADAR(FALSE)
|
|
DISPLAY_HUD(FALSE)
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Tracey")
|
|
SAFE_DELETE_PED(peds[mpf_tracey])
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
OR NOT IS_CUTSCENE_ACTIVE()
|
|
|
|
REPLAY_STOP_EVENT()
|
|
|
|
IF DOES_CAM_EXIST(cam_tv)
|
|
IF IS_CAM_ACTIVE(cam_tv)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_R_IDLE), ANIM_SCRIPT)
|
|
IF NOT IS_SCRIPT_TASK_RUNNING_OR_STARTING(PLAYER_PED_ID(), SCRIPT_TASK_PLAY_ANIM)
|
|
SET_NEW_ANIM_TASK(MAS_R_IDLE, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, AF_LOOPING|AF_TURN_OFF_COLLISION|AF_IGNORE_GRAVITY, TRUE)
|
|
ENDIF
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_PhoneDisableTalkingAnimations, TRUE)
|
|
SET_PED_CONFIG_FLAG(PLAYER_PED_ID(), PCF_PhoneDisableTextingAnimations, TRUE)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objects[mof_tv_remote].id)
|
|
Create_Prop(objects[mof_tv_remote], PROP_CS_REMOTE_01, GET_PED_BONE_COORDS(PLAYER_PED_ID(), BONETAG_PH_L_HAND, <<0,0,0>>))
|
|
Unload_Asset_Model(sAssetData, PROP_CS_REMOTE_01)
|
|
ATTACH_ENTITY_TO_ENTITY(objects[mof_tv_remote].id, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_L_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
|
|
ENDIF
|
|
|
|
eAnimState = MAS_R_IDLE
|
|
iAnimDelay = GET_GAME_TIMER()
|
|
bDelaying = TRUE
|
|
|
|
DISABLE_CELLPHONE(TRUE)
|
|
ENDIF
|
|
|
|
IF NOT IS_CUTSCENE_ACTIVE()
|
|
|
|
//Preload next TV segment. Attempt to fix: 1843791 - waiting for possible code fix.
|
|
//Load_Asset_Scaleform(sAssetData, str_new_overlay, sfi_news_overlay)
|
|
|
|
ADD_CONTACT_TO_PHONEBOOK(CHAR_DETONATEPHONE, MICHAEL_BOOK, FALSE)
|
|
SET_CALL_PREVENTED_FOR_CHAR_DETONATEPHONE(TRUE)
|
|
|
|
SET_TV_CHANNEL_PLAYLIST(TVCHANNELTYPE_CHANNEL_SCRIPT, GET_XML_PLAYLIST_FOR_TV_PLAYLIST(TV_PLAYLIST_SPECIAL_INVADER_EXP), FALSE)
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(7, "8. Start TV", TRUE, FALSE)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
|
|
CLEAR_HELP()
|
|
PRINT_HELP_FOREVER("TV_HLP_LEST1B_1")
|
|
INFORM_MISSION_STATS_SYSTEM_OF_INGAME_CUTSCENE_END()
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF IS_INPUT_ATTEMPTING_TO_CHANGE_CHANNEL(TRUE)
|
|
// add detonate contact to phone
|
|
PLAY_TV_CHANNEL_WITH_PLAYLIST(TV_LOC_MICHAEL_PROJECTOR, TVCHANNELTYPE_CHANNEL_2, TV_PLAYLIST_SPECIAL_INVADER, TRUE)
|
|
CLEAR_HELP()
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED("FIND_NEWS")
|
|
CLEAR_THIS_PRINT("FIND_NEWS")
|
|
ENDIF
|
|
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(LES1B_TIME_WATCHING)
|
|
bChangedChannel = TRUE
|
|
iDetonationTimer = GET_GAME_TIMER()
|
|
mission_substage++
|
|
ELSE
|
|
IF IS_SCREEN_FADED_IN()
|
|
AND NOT IS_SCREEN_FADING_IN()
|
|
IF NOT bExpireChannelObj
|
|
PRINT_NOW("FIND_NEWS", DEFAULT_GOD_TEXT_TIME, 0)
|
|
bExpireChannelObj = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF (GET_GAME_TIMER() - iDetonationTimer) > i_start_speech
|
|
PRINT_HELP("WAIT_TO_DETONATE", 23000)
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF bWindowOpen
|
|
g_TVStockMarketIntro_CellphoneTimer = 10049
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 4
|
|
IF IS_PHONE_ONSCREEN()
|
|
DISABLE_CELLPHONE_CAMERA_APP_THIS_FRAME_ONLY()
|
|
DISABLE_CELLPHONE_INTERNET_APP_THIS_FRAME_ONLY()
|
|
FORCE_SELECTION_OF_THIS_CONTACT_ONLY(CHAR_DETONATEPHONE)
|
|
ENDIF
|
|
|
|
// Jump to detonated stage
|
|
IF bDetonated
|
|
// player has called the contact trigger the next scene
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
Mission_Set_Stage(msf_st9_tv_detonate)
|
|
|
|
ELSE
|
|
IF bWindowClose
|
|
CLEAR_PRINTS()
|
|
CLEAR_HELP()
|
|
bDetonated = FALSE
|
|
Mission_Set_Stage(msf_st10_mission_passed)
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC ST9_TV_Detonate()
|
|
// CPRINTLN(DEBUG_MIKE, "TIMERA() =============== ", TIMERA())
|
|
MONITOR_PLAYER_BEING_ARMED()
|
|
MICHAEL_ANIM_MANAGER(FALSE)
|
|
CYCLE_CAMERAS()
|
|
MONITOR_SOUNDS()
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
SETTIMERA(0)
|
|
Load_Asset_Scaleform(sAssetData, str_new_overlay, sfi_news_overlay)
|
|
bExterminated = TRUE
|
|
mission_substage++
|
|
BREAK
|
|
CASE 1
|
|
// Show the signal lost scaleform
|
|
IF TIMERA() > i_signal_lost_start
|
|
AND HAS_SCALEFORM_MOVIE_LOADED(sfi_news_overlay)
|
|
RESTORE_STANDARD_CHANNELS()
|
|
SET_TV_CHANNEL(TVCHANNELTYPE_CHANNEL_1)
|
|
STOP_AMBIENT_TV_PLAYBACK(TV_LOC_MICHAEL_PROJECTOR)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(sfi_news_overlay, "SHOW_STATIC")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
// PRELOAD_BROWSER()
|
|
SETTIMERA(0)
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF TIMERA() < i_signal_lost_duration
|
|
IF NOT bTVTurnedOff
|
|
RESTORE_STANDARD_CHANNELS()
|
|
SET_TV_CHANNEL(TVCHANNELTYPE_CHANNEL_NONE)
|
|
CLEAR_TV_CHANNEL_PLAYLIST(TVCHANNELTYPE_CHANNEL_SCRIPT) // to clear up the "special" script channel
|
|
CPRINTLN(DEBUG_MIKE, "Turning off Tv under scaleform")
|
|
bTVTurnedOff = TRUE
|
|
ENDIF
|
|
SET_STATIC_EMITTER_ENABLED("SE_MICHAELS_HOUSE_RADIO", FALSE)
|
|
DRAW_SCALEFORM_MOVIE_3D_SOLID(sfi_news_overlay, v_sf3d_tv_coord, v_sf3d_tv_rot, v_sf3d_tv_scale, v_sf3d_tv_world_size)
|
|
ELSE
|
|
IF eCameraCurrent != CAMS_SCRIPT
|
|
SWITCH_CAMERA(CAMS_SCRIPT, 2000)
|
|
ENDIF
|
|
SET_STATIC_EMITTER_ENABLED("SE_MICHAELS_HOUSE_RADIO", TRUE)
|
|
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED()
|
|
mission_substage++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
|
|
START_AUDIO_SCENE("LESTER_1A_AFTER_EXPLOSION")
|
|
|
|
SET_NEW_ANIM_TASK(MAS_P_OUTRO, NORMAL_BLEND_IN, WALK_BLEND_OUT, AF_TURN_OFF_COLLISION)
|
|
Mission_Set_Stage(msf_st10_mission_passed)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC ST10_Mission_Passed()
|
|
MONITOR_PLAYER_BEING_ARMED()
|
|
MICHAEL_ANIM_MANAGER(FALSE)
|
|
SWITCH mission_substage
|
|
CASE STAGE_ENTRY
|
|
REMOVE_CONTACT_FROM_INDIVIDUAL_PHONEBOOK(CHAR_DETONATEPHONE, MICHAEL_BOOK)
|
|
|
|
IF bExterminated
|
|
IF NOT IsPedPerformingTask(PLAYER_PED_ID(), SCRIPT_TASK_PLAY_ANIM)
|
|
OR (IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_OUTRO))
|
|
AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_OUTRO)) > 0.64)
|
|
|
|
CPRINTLN(DEBUG_MIKE, "TRIGGERED BLEND OUT")
|
|
RELEASE_TV_FOR_PLAYER_CONTROL(TV_LOC_MICHAEL_PROJECTOR)
|
|
|
|
IF bEnteredAsFirstPerson
|
|
SET_CAM_VIEW_MODE_FOR_CONTEXT( CAM_VIEW_MODE_CONTEXT_ON_FOOT, CAM_VIEW_MODE_FIRST_PERSON )
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(cam_tv)
|
|
DESTROY_CAM(cam_tv)
|
|
ENDIF
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
RENDER_SCRIPT_CAMS(FALSE, TRUE, 3000)
|
|
|
|
bCanInterruptAnim = FALSE
|
|
iPassTimer = GET_GAME_TIMER()
|
|
mission_substage++
|
|
ENDIF
|
|
ELSE
|
|
REMOVE_MODEL_HIDE(<<-804.44751, 172.79373, 72.34801>>, 0.5, PROP_CS_REMOTE_01, TRUE)
|
|
Mission_Failed(mff_did_not_kill_target)
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF NOT bCanInterruptAnim
|
|
IF IsPedPerformingTask(PLAYER_PED_ID(), SCRIPT_TASK_PLAY_ANIM)
|
|
IF HAS_ANIM_EVENT_FIRED(PLAYER_PED_ID(), HASH("WalkInterruptible"))
|
|
bCanInterruptAnim = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BOOL bDoInterrupt
|
|
IF bCanInterruptAnim
|
|
IF GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_UD) != 0
|
|
OR GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_LR) != 0
|
|
bDoInterrupt = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// url:bugstar:2099721
|
|
IF (GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) != CAM_VIEW_MODE_FIRST_PERSON)
|
|
OR (GET_GAME_TIMER() - iPassTimer) >= 4000
|
|
IF NOT IsPedPerformingTask(PLAYER_PED_ID(), SCRIPT_TASK_PLAY_ANIM)
|
|
OR (IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_OUTRO), ANIM_SCRIPT)
|
|
AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_OUTRO)) >= 0.831)
|
|
|
|
CPRINTLN( DEBUG_MIKE, "MAS_P_OUTRO blend out started @ ", GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(), ad_ig_1, GET_ANIM_STRING(MAS_P_OUTRO)) )
|
|
|
|
SET_STATIC_EMITTER_ENABLED("SE_MICHAELS_HOUSE_RADIO", TRUE)
|
|
REMOVE_MODEL_HIDE(<<-804.44751, 172.79373, 72.34801>>, 0.5, PROP_CS_REMOTE_01, TRUE)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
// SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_SkipOnFootIdleIntro, TRUE)
|
|
// FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_IDLE, TRUE)
|
|
|
|
Mission_Passed()
|
|
|
|
ELIF bDoInterrupt
|
|
|
|
SET_STATIC_EMITTER_ENABLED("SE_MICHAELS_HOUSE_RADIO", TRUE)
|
|
REMOVE_MODEL_HIDE(<<-804.44751, 172.79373, 72.34801>>, 0.5, PROP_CS_REMOTE_01, TRUE)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
Mission_Passed()
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC Mission_Flow()
|
|
|
|
mission_stage_flag eStage = int_to_enum(mission_stage_flag, mission_stage)
|
|
|
|
SWITCH eStage
|
|
|
|
CASE msf_st0_intro_cutscene ST0_Intro_Cutscene() BREAK
|
|
CASE msf_st1_get_clothes ST1_Get_Clothing() BREAK
|
|
CASE msf_st2_go_to_offices ST2_Go_To_Lifeinvader() BREAK
|
|
CASE msf_st3_go_to_computer ST3_Walkthrough_Offices() BREAK
|
|
CASE msf_st4_mini_game ST4_Mini_Game() BREAK
|
|
CASE msf_st5_plant_bomb ST5_Plant_Bomb() BREAK
|
|
CASE msf_st6_leave_building ST6_Leave_Building() BREAK
|
|
CASE msf_st7_go_home ST7_Go_Home() BREAK
|
|
CASE msf_st8_tv_start ST8_TV_Start() BREAK
|
|
CASE msf_st9_tv_detonate ST9_TV_Detonate() BREAK
|
|
CASE msf_st10_mission_passed ST10_Mission_Passed() BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_FriendRequest")
|
|
ENDPROC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
PROC Process_Debugging()
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)
|
|
Mission_Passed()
|
|
ENDIF
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_f)
|
|
Mission_Failed(mff_debug_forced)
|
|
ENDIF
|
|
DONT_DO_J_SKIP(locates_data)
|
|
ENDPROC
|
|
|
|
#ENDIF
|
|
|
|
/*
|
|
______ _______ ______ _ ______ _______ _ _______ _______ ______
|
|
/ _____)(_______)(_____ \ | |(_____ \(_______) (_) (_______)(_______)(_____ \
|
|
( (____ _ _____) )| | _____) ) _ _ _ _ _ _ _____) )
|
|
\____ \ | | | __ / | || ____/ | | | | | | | || | | || ____/
|
|
_____) )| |_____ | | \ \ | || | | | | |_____| |___| || |___| || |
|
|
(______/ \______)|_| |_||_||_| |_| |_______)\_____/ \_____/ |_|
|
|
*/
|
|
|
|
SCRIPT
|
|
IF HAS_FORCE_CLEANUP_OCCURRED()
|
|
Mission_Failed(mff_default)
|
|
ENDIF
|
|
|
|
REQUEST_BAWSAQ_STOCK_PRICE_VALUES() // 1480767 - makes sure player has prices in time for end of mission
|
|
|
|
Mission_Setup()
|
|
|
|
WHILE TRUE
|
|
WAIT(0)
|
|
#IF IS_DEBUG_BUILD
|
|
Process_Debugging()
|
|
#ENDIF
|
|
|
|
Update_Asset_Management_System(sAssetData) // Deals with loading any assets and keeps track of what has been loaded
|
|
Update_Cutscene_Prestreaming(sCutscenePedVariationRegister)
|
|
|
|
Mission_Checks() // Mission scenario checks; fails, disables running at certain points, etc
|
|
Manage_Mission_Events() // manage any events triggered
|
|
Mission_Stage_Management() // manage any stage switching stuff
|
|
Mission_Stage_Skip() // processes any stage skipping that is required
|
|
Manage_Doors()
|
|
Mission_Flow() // process the mission flow
|
|
ENDWHILE
|
|
|
|
ENDSCRIPT
|