12116 lines
418 KiB
Python
Executable File
12116 lines
418 KiB
Python
Executable File
//|=======================================================================================|
|
|
//| Author: Craig Vincent / Lukasz Bogaj Date: 08/06/2013 |
|
|
//|=======================================================================================|
|
|
//| FAMILY6.sc |
|
|
//| REUNITE FAMILY |
|
|
//| |
|
|
//|=======================================================================================|
|
|
|
|
//Compile out Title Update changes to header functions.
|
|
//Must be before includes.
|
|
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
|
|
|
//===================================== INCLUDE FILES ====================================|
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
|
|
//Commands headers
|
|
USING "commands_streaming.sch"
|
|
USING "commands_interiors.sch"
|
|
USING "commands_graphics.sch"
|
|
USING "commands_itemsets.sch"
|
|
USING "commands_vehicle.sch"
|
|
USING "commands_player.sch"
|
|
USING "commands_script.sch"
|
|
USING "commands_object.sch"
|
|
USING "commands_camera.sch"
|
|
USING "commands_audio.sch"
|
|
USING "commands_clock.sch"
|
|
USING "commands_debug.sch"
|
|
USING "commands_task.sch"
|
|
USING "commands_fire.sch"
|
|
USING "commands_hud.sch"
|
|
USING "commands_pad.sch"
|
|
USING "commands_ped.sch"
|
|
USING "commands_recording.sch"
|
|
|
|
//Script headers
|
|
USING "script_blips.sch"
|
|
USING "select_mission_stage.sch"
|
|
USING "model_enums.sch"
|
|
USING "script_player.sch"
|
|
USING "script_misc.sch"
|
|
USING "taxi_functions.sch"
|
|
USING "taxi_functions.sch"
|
|
USING "timeLapse.sch"
|
|
USING "RC_helper_functions.sch"
|
|
|
|
//Public headers
|
|
USING "CompletionPercentage_public.sch"
|
|
USING "mission_stat_public.sch"
|
|
USING "player_ped_scenes.sch"
|
|
USING "cutscene_public.sch"
|
|
USING "carsteal_public.sch"
|
|
USING "locates_public.sch"
|
|
USING "replay_public.sch"
|
|
USING "family_public.sch"
|
|
USING "shop_public.sch"
|
|
USING "yoga.sch"
|
|
|
|
//Debug headers
|
|
#IF IS_DEBUG_BUILD
|
|
USING "shared_debug.sch"
|
|
USING "script_debug.sch"
|
|
#ENDIF
|
|
|
|
//===================================== ENUMS & STRUCTS ==================================|
|
|
|
|
/// PURPOSE: Specifies stages of the mission.
|
|
ENUM MISSION_STAGES
|
|
MISSION_STAGE_PRE_INTRO = 0, //Pre into scripted cutscene showing player enter the house
|
|
MISSION_STAGE_CUTSCENE_INTRO_P1 = 1, //Intro cutscene part 1 - fam_6_int
|
|
MISSION_STAGE_TIMELAPSE = 2, //Timelapse
|
|
MISSION_STAGE_CUTSCENE_INTRO_P2 = 3, //Intro cutscene part 2 - fam_6_int_p3_t7
|
|
MISSION_STAGE_DRIVE_TO_BEAN_MACHINE = 4, //Go to Bean Machine with Jimmy
|
|
MISSION_STAGE_CUTSCENE_BEAN_MACHINE = 5, //Bean Machine cutscene -
|
|
MISSION_STAGE_DRIVE_TO_TRACEY = 6, //Go to tatto parlor with Jimmy
|
|
MISSION_STAGE_CUTSCENE_SHOP_1 = 7, //
|
|
MISSION_STAGE_PIERCE_LAZLOW = 8,
|
|
MISSION_STAGE_CUTSCENE_SHOP_2 = 9,
|
|
MISSION_STAGE_TATTOO_LAZLOW = 10,
|
|
MISSION_STAGE_CUTSCENE_SHOP_3 = 11,
|
|
MISSION_STAGE_CUT_LAZLOW_HAIR = 12,
|
|
MISSION_STAGE_CUTSCENE_SHOP_4 = 13,
|
|
MISSION_STAGE_DRIVE_TO_SHRINK = 14,
|
|
MISSION_STAGE_CUTSCENE_SHRINK = 15,
|
|
MISSION_STAGE_DRIVE_HOME = 16,
|
|
MISSION_STAGE_CUTSCENE_END = 17,
|
|
|
|
MISSION_STAGE_PASSED, //Mission passed
|
|
MISSION_STAGE_FAILED //Mission failed
|
|
ENDENUM
|
|
|
|
/// PURPOSE: Specifies mission fail reasons.
|
|
ENUM MISSION_FAILS
|
|
MISSION_FAIL_EMPTY = 0, //Generic fail
|
|
MISSION_FAIL_AMANDA_DEAD, //Amanda dead
|
|
MISSION_FAIL_FABIEN_DEAD, //Fabien dead
|
|
MISSION_FAIL_JIMMY_DEAD, //Jimmy dead
|
|
MISSION_FAIL_TRACEY_DEAD, //Tracey dead
|
|
MISSION_FAIL_LAZLOW_DEAD, //Lazlow dead
|
|
MISSION_FAIL_AMANDAS_CAR_DEAD, //Amanda's car destroyed
|
|
MISSION_FAIL_AMANDA_SCARED_OFF, //Amanda scared off by player behaviour
|
|
MISSION_FAIL_AMANDA_LEFT_BEHIND, //Amanda left behind
|
|
MISSION_FAIL_JIMMY_LEFT_BEHIND, //Jimmy left behind
|
|
MISSION_FAIL_TRACEY_LEFT_BEHIND, //Tracey left behind
|
|
MISSION_FAIL_FAMILY_LEFT_BEHIND, //Family left behind
|
|
MISSION_FAIL_BEAN_MACHINE_SMASHED, //Bean machine smashed by player vehicle
|
|
MISSION_FAIL_FORCE_FAIL, //Debug forced fail
|
|
|
|
MAX_MISSION_FAILS
|
|
ENDENUM
|
|
|
|
/// PURPOSE: Specifies mid-mission checkpoints for mission retry.
|
|
ENUM MID_MISSION_STAGES
|
|
MID_MISSION_STAGE_DRIVE_TO_BEAN_MACHINE = 0, //Checkpoint at MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
MID_MISSION_STAGE_CUTSCENE_BEAN_MACHINE = 1, //Checkpoint at MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
MID_MISSION_STAGE_DRIVE_TO_TRACEY = 2, //Checkpoint at MISSION_STAGE_DRIVE_TO_TRACEY
|
|
MID_MISSION_STAGE_PIERCE_LAZLOW = 3, //Checkpoint at MISSION_STAGE_PIERCE_LAZLOW
|
|
MID_MISSION_STAGE_DRIVE_TO_SHRINK = 4, //Checkpoint at MISSION_STAGE_DRIVE_TO_SHRINK
|
|
MID_MISSION_STAGE_DRIVE_HOME = 5 //Checkpoint at MISSION_STAGE_DRIVE_HOME
|
|
ENDENUM
|
|
|
|
ENUM PIERCING_STAGES
|
|
PIERCING_IDLE = 0,
|
|
PIERCING_BROW = 1,
|
|
PIERCING_EAR = 2,
|
|
PIERCING_NOSE = 3
|
|
ENDENUM
|
|
|
|
ENUM TATTOOING_STAGES
|
|
TATTOOING_IDLE = 0,
|
|
TATTOOING_CHEST = 1,
|
|
TATTOOING_BACK = 2
|
|
ENDENUM
|
|
|
|
ENUM TATTOO_BUTTONS
|
|
STYLE_ONE_UP = 0,
|
|
STYLE_ONE_DIAGONAL_UP_RIGHT,
|
|
STYLE_ONE_RIGHT,
|
|
STYLE_ONE_DIAGONAL_DOWN_RIGHT,
|
|
STYLE_ONE_DOWN,
|
|
STYLE_ONE_DIAGONAL_DOWN_LEFT,
|
|
STYLE_ONE_LEFT,
|
|
STYLE_ONE_DIAGONAL_UP_LEFT,
|
|
|
|
RIGHT_STICK_UP,
|
|
RIGHT_STICK_DIAGONAL_UP_RIGHT,
|
|
RIGHT_STICK_RIGHT,
|
|
RIGHT_STICK_DIAGONAL_DOWN_RIGHT,
|
|
RIGHT_STICK_DOWN,
|
|
RIGHT_STICK_DIAGONAL_DOWN_LEFT,
|
|
RIGHT_STICK_LEFT,
|
|
RIGHT_STICK_DIAGONAL_UP_LEFT,
|
|
SPACER
|
|
ENDENUM
|
|
|
|
/// PURPOSE: Specifies details of mission peds.
|
|
STRUCT PED_STRUCT
|
|
PED_INDEX PedIndex //Ped Index
|
|
BLIP_INDEX BlipIndex //Ped's Blip Index
|
|
VECTOR vPosition //Ped's start location
|
|
FLOAT fHeading //Ped's start heading
|
|
MODEL_NAMES ModelName //Ped's model
|
|
INT iProgress //Ped's progress
|
|
INT iPedConversationTimer //Ped's conversation timer
|
|
INT iTimer //Ped's timer
|
|
BOOL bComponentVariationsSet
|
|
ENDSTRUCT
|
|
|
|
/// PURPOSE: Specifies details of mission vehicles.
|
|
STRUCT VEH_STRUCT
|
|
VEHICLE_INDEX VehicleIndex //Vehicle index
|
|
BLIP_INDEX BlipIndex //Vehicle blip
|
|
VECTOR vPosition //Vehicle postion
|
|
FLOAT fHeading //Vehicle heading
|
|
MODEL_NAMES ModelName //Vehicle model
|
|
ENDSTRUCT
|
|
|
|
/// PURPOSE: Specifies details of mission specific objects.
|
|
STRUCT OBJECT_STRUCT
|
|
OBJECT_INDEX ObjectIndex //Object index
|
|
MODEL_NAMES ModelName //Object model
|
|
VECTOR vPosition //Object postion
|
|
VECTOR vRotation //Object rotation
|
|
VECTOR vOffset //Object offset
|
|
ENDSTRUCT
|
|
|
|
/// PURPOSE: Stores player postion and heading.
|
|
STRUCT LOCATION_STRUCT
|
|
VECTOR vPosition //Player position
|
|
FLOAT fHeading //Player heading
|
|
ENDSTRUCT
|
|
|
|
//|======================================= CONSTANTS =====================================|
|
|
|
|
CONST_INT MAX_MODELS 10
|
|
CONST_INT MAX_ANIMATIONS 8
|
|
CONST_INT IDEAL_MISSION_START_TIME 7
|
|
|
|
FLOAT TATTOO_BUTTONS_X = 0.6
|
|
FLOAT TATTOO_BUTTONS_Y = 0.795
|
|
TWEAK_FLOAT TATTOO_BUTTONS_WIDTH 0.390
|
|
TWEAK_FLOAT TATTOO_BUTTONS_HEIGHT 0.10425 //0.139 * 0.75
|
|
TWEAK_FLOAT TATTOO_BUTTONS_SCALE 1.2
|
|
|
|
VECTOR vMichaelsHousePosition = << -824.89, 180.72, 70.57 >>
|
|
VECTOR vBeanMachinePosition = << -632.30, 255.25, 80.46 >>
|
|
VECTOR vTattooShopPosition = << 299.31, 174.02, 102.98 >>
|
|
VECTOR vTattooShopDoorPosition = << 320.84, 177.82, 102.56 >>
|
|
VECTOR vShrinkOfficePosition = << -1899.75, -561.64, 10.78 >>
|
|
VECTOR vShrinkInteriorPosition = << -1903.60, -573.20, 19.10 >>
|
|
|
|
VECTOR vBeanMachineScenePosition = << -626.917, 244.277, 80.9 >>
|
|
VECTOR vBeanMachineSceneRotation = << 0.0, 0.0, -6.530 >>
|
|
|
|
VECTOR vTattooShopScenePosition = << 320.57, 181.39, 103.79 >>
|
|
VECTOR vTattooShopSceneRotation = << 0.0, 0.0, -111.08>>
|
|
|
|
VECTOR vScissorsScenePosition = << 322.200, 180.990, 102.600 >>
|
|
VECTOR vScissorsSceneRotation = << 0.0, 0.0, 80.0 >>
|
|
|
|
VECTOR vLazlowLeadoutPosition = << 323.225, 179.725, 103.600 >>
|
|
VECTOR vLazlowLeadoutRotation = << 0.000, 0.000, 113.400 >>
|
|
|
|
VECTOR vTatguyLeadoutPosition = << 321.525, 182.075, 103.570 >>
|
|
VECTOR vTatguyLeadoutRotation = << 0.000, 0.000, -162.720 >>
|
|
|
|
//======================================== VARIABLES =====================================|
|
|
|
|
MISSION_STAGES eMissionStage = MISSION_STAGE_PRE_INTRO
|
|
MISSION_FAILS eMissionFail = MISSION_FAIL_EMPTY
|
|
PIERCING_STAGES ePiercingStage = PIERCING_IDLE
|
|
TATTOOING_STAGES eTattooingStage = TATTOOING_IDLE
|
|
TATTOO_BUTTONS eTattooDirection
|
|
|
|
//mission peds
|
|
PED_STRUCT psJimmy
|
|
PED_STRUCT psAmanda
|
|
PED_STRUCT psFabien
|
|
PED_STRUCT psTracey
|
|
PED_STRUCT psLazlow
|
|
PED_STRUCT psTatguy
|
|
PED_STRUCT psHipster
|
|
|
|
//mission vehicles
|
|
VEH_STRUCT vsAmandasCar
|
|
VEH_STRUCT vsMichaelsCar
|
|
|
|
//mission objects
|
|
OBJECT_STRUCT osMug
|
|
OBJECT_STRUCT osShirt
|
|
OBJECT_STRUCT osLaptop
|
|
OBJECT_STRUCT osScissors
|
|
OBJECT_STRUCT osPonyTail
|
|
OBJECT_STRUCT osPiercingGun
|
|
OBJECT_STRUCT osTattooNeedle
|
|
OBJECT_STRUCT osLeftDoorDummy
|
|
OBJECT_STRUCT osRightDoorDummy
|
|
|
|
LOCATES_HEADER_DATA sLocatesData
|
|
LOCATION_STRUCT MissionPosition
|
|
|
|
structTimelapse sTimelapse
|
|
structPedsForConversation FAM6Conversation
|
|
|
|
//progress counters
|
|
INT iStageSetupProgress
|
|
INT iMissionStageProgress
|
|
INT iAmandaProgress
|
|
INT iLazlowLeadoutProgress
|
|
INT iBeanMachineSceneProgress
|
|
INT iTattooParlorSceneProgress
|
|
|
|
BOOL bSkipFlag
|
|
BOOL bReplayFlag
|
|
BOOL bLoadingFlag
|
|
BOOL bStageReplayInProgress
|
|
|
|
//asset request counters
|
|
INT iModelsRequested
|
|
INT iAnimationsRequested
|
|
|
|
BOOL bEar
|
|
BOOL bNose
|
|
BOOL bBrow
|
|
BOOL bChestTattoo
|
|
|
|
BOOL bCutsceneSkipped
|
|
BOOL bTimelapseTriggered
|
|
BOOL bTimelapseCutsceneSkipped
|
|
BOOL bCutsceneAssetsRequested
|
|
BOOL bHouseEntryCutsceneSkipped
|
|
BOOL bDestinationReached
|
|
BOOL bLeadInTriggered
|
|
BOOL bVehicleReversed
|
|
BOOL bSetSRLForcePrestream
|
|
BOOL bLookAtAmandaActive
|
|
|
|
BOOL bPCControlsSetup = FALSE
|
|
|
|
INT iTODAdditionalHours
|
|
|
|
INT iSpeedZone
|
|
|
|
INT iHouseEnterSceneID = -1
|
|
INT iTattooShopSceneID = -1
|
|
INT iPierceSceneID = -1
|
|
INT iScissorsSceneID = -1
|
|
|
|
INT iScaleformProgressPad
|
|
INT iScaleformProgressKBM
|
|
FLOAT fTattooSpeed
|
|
FLOAT fTattooPosition
|
|
BOOL bTattooInputReady
|
|
BOOL bScaleformDrawing
|
|
|
|
BOOL bCustomRouteActive
|
|
BOOL bStopUsingDefaultRoute
|
|
BOOL bPlayerPedScriptTaskInterrupted
|
|
|
|
INT iTattooSoundID
|
|
INT iTattooCameraProgress
|
|
INT iIdle1ConversationCounter
|
|
INT iIdle2ConversationCounter
|
|
INT iIdle3ConversationCounter
|
|
INT iIdleConversationcounter
|
|
|
|
INT iAwayConversationTimer
|
|
INT iAwayConversationCounter
|
|
|
|
|
|
INT iStruggleConversationTimer
|
|
|
|
BOOL bPlayerHitPed
|
|
BOOL bPlayerActingBad
|
|
BOOL bFamilyArrivedAtHouse
|
|
INT iLoseCopsReminderCount
|
|
INT iLoseCopsReminderTimer
|
|
INT iPlayerOffenceTimer
|
|
INT iPlayerOffencesCount
|
|
INT iBadConversationCount
|
|
INT iHitPedConversationCount
|
|
INT iCopsLostConversationCount
|
|
BOOL bRunConversationPausingCheck
|
|
BOOL bCurrentConversationInterrupted
|
|
INT iConversationTimer, iConversationCounter
|
|
TEXT_LABEL_23 CurrentConversationRoot, CurrentConversationLabel
|
|
|
|
PTFX_ID ptfxHair
|
|
CAMERA_INDEX ScriptedCamera, AnimatedCamera
|
|
SCENARIO_BLOCKING_INDEX BeanMachineScenarioBlockingIndex
|
|
SCENARIO_BLOCKING_INDEX TattooParlorScenarioBlockingIndex
|
|
SCALEFORM_INDEX mov
|
|
SCALEFORM_INDEX mov_kb
|
|
|
|
TEXT_LABEL LabelFAM6SHRINK = "FAM6_SHRINK"
|
|
|
|
BOOL bReplayStopEventTriggered, bReplayStartEventTriggered
|
|
|
|
//|========================================= ARRAYS ======================================|
|
|
|
|
//text printing
|
|
INT iTriggeredTextHashes[30]
|
|
INT iNumTextHashesStored
|
|
|
|
BOOL FailFlags[MAX_MISSION_FAILS]
|
|
|
|
//asset arrays
|
|
MODEL_NAMES MissionModels[MAX_MODELS]
|
|
STRING MissionAnimations[MAX_ANIMATIONS]
|
|
|
|
//|========================= MISCELLANEOUS PROCEDURES & FUNCTIONS ========================|
|
|
|
|
// Initialise PC controls for peircing and tatooing minigames
|
|
PROC SETUP_PC_CONTROLS()
|
|
|
|
IF IS_PC_VERSION()
|
|
IF NOT bPCControlsSetup
|
|
INIT_PC_SCRIPTED_CONTROLS( "FAMILY6")
|
|
bPCControlsSetup = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC CLEANUP_PC_CONTROLS()
|
|
IF IS_PC_VERSION()
|
|
IF bPCControlsSetup
|
|
SHUTDOWN_PC_SCRIPTED_CONTROLS()
|
|
bPCControlsSetup = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
FUNC BOOL HAS_SCALEFORM_LOADED()
|
|
|
|
IF IS_PC_VERSION()
|
|
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(mov)
|
|
AND HAS_SCALEFORM_MOVIE_LOADED(mov_kb)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF HAS_SCALEFORM_MOVIE_LOADED(mov)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC RESET_MISSION_FLAGS()
|
|
|
|
//reset setup progress to 1, so that iSetupProgress = 0 only runs once, on initial mission load.
|
|
iStageSetupProgress = 1
|
|
|
|
iMissionStageProgress = 0
|
|
iAmandaProgress = 0
|
|
iLazlowLeadoutProgress = 0
|
|
iBeanMachineSceneProgress = 0
|
|
iTattooParlorSceneProgress = 0
|
|
|
|
bStageReplayInProgress = FALSE
|
|
|
|
bDestinationReached = FALSE
|
|
bLeadInTriggered = FALSE
|
|
bCutsceneSkipped = FALSE
|
|
bTimelapseCutsceneSkipped = FALSE
|
|
bCutsceneAssetsRequested = FALSE
|
|
|
|
bScaleformDrawing = FALSE
|
|
|
|
bLookAtAmandaActive = FALSE
|
|
|
|
bCustomRouteActive = FALSE
|
|
bStopUsingDefaultRoute = FALSE
|
|
bPlayerPedScriptTaskInterrupted = FALSE
|
|
|
|
bPlayerHitPed = FALSE
|
|
bPlayerActingBad = FALSE
|
|
bFamilyArrivedAtHouse = FALSE
|
|
iLoseCopsReminderCount = 0
|
|
iLoseCopsReminderTimer = 0
|
|
iPlayerOffenceTimer = 0
|
|
iPlayerOffencesCount = 0
|
|
iBadConversationCount = 0
|
|
iHitPedConversationCount = 0
|
|
iCopsLostConversationCount = 0
|
|
iConversationTimer = 0
|
|
iConversationCounter = 0
|
|
CurrentConversationRoot = ""
|
|
CurrentConversationLabel = ""
|
|
bRunConversationPausingCheck = FALSE
|
|
bCurrentConversationInterrupted = FALSE
|
|
|
|
iIdleConversationcounter = 0
|
|
iIdle1Conversationcounter = 0
|
|
iIdle2Conversationcounter = 0
|
|
iIdle3ConversationCounter = 0
|
|
iStruggleConversationTimer = 0
|
|
|
|
iAwayConversationTimer = 0
|
|
iAwayConversationCounter = 0
|
|
|
|
LabelFAM6SHRINK = "FAM6_SHRINK"
|
|
|
|
bSetSRLForcePrestream = FALSE
|
|
|
|
bReplayStopEventTriggered = FALSE
|
|
bReplayStartEventTriggered = FALSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mission flags and progress counters are reset.")
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC REMOVE_LABEL_ARRAY_SPACES()
|
|
INT iArrayLength = COUNT_OF(iTriggeredTextHashes)
|
|
INT i = 0
|
|
|
|
REPEAT (iArrayLength - 1) i
|
|
IF iTriggeredTextHashes[i] = 0
|
|
IF iTriggeredTextHashes[i+1] != 0
|
|
iTriggeredTextHashes[i] = iTriggeredTextHashes[i+1]
|
|
iTriggeredTextHashes[i+1] = 0
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
FUNC INT GET_LABEL_INDEX(INT iLabelHash)
|
|
INT i = 0
|
|
|
|
REPEAT iNumTextHashesStored i
|
|
IF iTriggeredTextHashes[i] = iLabelHash
|
|
RETURN i
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN -1
|
|
ENDFUNC
|
|
|
|
FUNC BOOL HAS_LABEL_BEEN_TRIGGERED(STRING strLabel)
|
|
INT iHash = GET_HASH_KEY(strLabel)
|
|
|
|
IF GET_LABEL_INDEX(iHash) != -1
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC SET_LABEL_AS_TRIGGERED(STRING strLabel, BOOL bTrigger)
|
|
INT iHash = GET_HASH_KEY(strLabel)
|
|
|
|
IF bTrigger
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED(strLabel)
|
|
INT iArraySize = COUNT_OF(iTriggeredTextHashes)
|
|
|
|
IF iNumTextHashesStored < iArraySize
|
|
iTriggeredTextHashes[iNumTextHashesStored] = iHash
|
|
iNumTextHashesStored++
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": SET_LABEL_AS_TRIGGERED(): ", strLabel, " TRUE.")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": SET_LABEL_AS_TRIGGERED(): ", iNumTextHashesStored, "/", COUNT_OF(iTriggeredTextHashes), ".")
|
|
#ENDIF
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
SCRIPT_ASSERT("SET_LABEL_AS_TRIGGERED: Label array is full.")
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
INT iIndex = GET_LABEL_INDEX(iHash)
|
|
IF iIndex != -1
|
|
iTriggeredTextHashes[iIndex] = 0
|
|
REMOVE_LABEL_ARRAY_SPACES()
|
|
iNumTextHashesStored--
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": SET_LABEL_AS_TRIGGERED(): ", strLabel, " FALSE.")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": SET_LABEL_AS_TRIGGERED(): ", iNumTextHashesStored, "/", COUNT_OF(iTriggeredTextHashes), ".")
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CLEAR_TRIGGERED_LABELS()
|
|
INT iArraySize = COUNT_OF(iTriggeredTextHashes)
|
|
INT i = 0
|
|
|
|
REPEAT iArraySize i
|
|
iTriggeredTextHashes[i] = 0
|
|
ENDREPEAT
|
|
|
|
iNumTextHashesStored = 0
|
|
ENDPROC
|
|
|
|
PROC UPDATE_TRIGGERED_LABEL(TEXT_LABEL &sLabel)
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(sLabel) //if the label is not empty, which means not yet printed by locates header
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED(sLabel) //if it was not set as triggered by script
|
|
|
|
IF IS_THIS_PRINT_BEING_DISPLAYED(sLabel) //if the label was displayed on screen
|
|
|
|
SET_LABEL_AS_TRIGGERED(sLabel, TRUE) //mark it as triggered
|
|
|
|
ENDIF
|
|
|
|
ELSE //if the label was set as triggered by script,
|
|
//which means it was printed by locates header
|
|
IF NOT IS_THIS_PRINT_BEING_DISPLAYED(sLabel) //but is not currently being printed, cleared off screen or timed out
|
|
|
|
sLabel = "" //mark is as empty
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC SCENARIO_BLOCKING_INDEX CREATE_SCENARIO_BLOCKING_AREA(VECTOR vPosition, VECTOR vSize)
|
|
RETURN ADD_SCENARIO_BLOCKING_AREA(<< vPosition.x - vSize.x, vPosition.y - vSize.y, vPosition.z - vSize.z >>,
|
|
<< vPosition.x + vSize.x, vPosition.y + vSize.y, vPosition.z + vSize.z >>)
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Sets all fail flags to specified boolean value.
|
|
/// PARAMS:
|
|
/// bNewBool - Boolean value to set all flags to TRUE or FALSE.
|
|
PROC SET_FAIL_FLAGS(BOOL bNewBool)
|
|
|
|
INT i = 0
|
|
|
|
FOR i = 0 TO ( COUNT_OF(FailFlags) - 1 )
|
|
|
|
FailFlags[i] = bNewBool
|
|
|
|
ENDFOR
|
|
|
|
ENDPROC
|
|
|
|
PROC SET_JIMMY_PED_COMPONENT_VARIATIONS(BOOL &bComponentVariationsSet)
|
|
IF ( bComponentVariationsSet = FALSE )
|
|
IF DOES_ENTITY_EXIST(psJimmy.PedIndex)
|
|
IF NOT IS_ENTITY_DEAD(psJimmy.PedIndex)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_BERD, 0, 0) //(berd) //berd 1 for cutscenes
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_HAIR, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_TORSO, 4, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_LEG, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_HAND, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_FEET, 0, 0) //(feet)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_TEETH, 0, 0) //(teef)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_SPECIAL, 3, 0) //(accs)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_SPECIAL2, 0, 0) //(task)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_DECL, 2, 0) //(decl)
|
|
bComponentVariationsSet = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_BERD, 1, 0) //(berd)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_HAIR, 0, 0) //(hair)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_TORSO, 4, 0) //(uppr)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_LEG, 0, 0) //(lowr)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_HAND, 0, 0) //(hand)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_FEET, 0, 0) //(feet)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_TEETH, 0, 0) //(teef)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_SPECIAL, 3, 0) //(accs)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_SPECIAL2, 0, 0) //(task)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Jimmy", PED_COMP_DECL, 2, 0) //(decl)
|
|
ENDPROC
|
|
|
|
PROC SET_TRACEY_PED_COMPONENT_VARIATIONS(BOOL &bComponentVariationsSet)
|
|
IF ( bComponentVariationsSet = FALSE )
|
|
IF DOES_ENTITY_EXIST(psTracey.PedIndex)
|
|
IF NOT IS_ENTITY_DEAD(psTracey.PedIndex)
|
|
SET_PED_PROP_INDEX(psTracey.PedIndex, ANCHOR_HEAD, 0, 0)
|
|
SET_PED_COMPONENT_VARIATION(psTracey.PedIndex, PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(psTracey.PedIndex, PED_COMP_HAIR, 3, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(psTracey.PedIndex, PED_COMP_TORSO, 4, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(psTracey.PedIndex, PED_COMP_LEG, 4, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(psTracey.PedIndex, PED_COMP_HAND, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(psTracey.PedIndex, PED_COMP_FEET, 2, 0) //(feet)
|
|
SET_PED_COMPONENT_VARIATION(psTracey.PedIndex, PED_COMP_TEETH, 0, 0) //(teef)
|
|
SET_PED_COMPONENT_VARIATION(psTracey.PedIndex, PED_COMP_SPECIAL, 3, 0) //(accs)
|
|
bComponentVariationsSet = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_CUTSCENE_PED_PROP_VARIATION("Tracy", ANCHOR_HEAD, 0, 0)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Tracy", PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Tracy", PED_COMP_HAIR, 3, 0) //(hair)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Tracy", PED_COMP_TORSO, 4, 0) //(uppr)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Tracy", PED_COMP_LEG, 4, 0) //(lowr)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Tracy", PED_COMP_HAND, 0, 0) //(hand)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Tracy", PED_COMP_FEET, 2, 0) //(feet)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Tracy", PED_COMP_TEETH, 0, 0) //(teef)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Tracy", PED_COMP_SPECIAL, 3, 0) //(accs)
|
|
ENDPROC
|
|
|
|
PROC SET_AMANDA_PED_COMPONENT_VARIATIONS(BOOL &bComponentVariationsSet)
|
|
IF ( bComponentVariationsSet = FALSE )
|
|
IF DOES_ENTITY_EXIST(psAmanda.PedIndex)
|
|
IF NOT IS_ENTITY_DEAD(psAmanda.PedIndex)
|
|
SET_PED_COMPONENT_VARIATION(psAmanda.PedIndex, PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(psAmanda.PedIndex, PED_COMP_BERD, 0, 0) //(berd)
|
|
SET_PED_COMPONENT_VARIATION(psAmanda.PedIndex, PED_COMP_HAIR, 4, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(psAmanda.PedIndex, PED_COMP_TORSO, 5, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(psAmanda.PedIndex, PED_COMP_LEG, 5, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(psAmanda.PedIndex, PED_COMP_HAND, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(psAmanda.PedIndex, PED_COMP_TEETH, 0, 0) //(teef)
|
|
SET_PED_COMPONENT_VARIATION(psAmanda.PedIndex, PED_COMP_SPECIAL, 0, 0) //(accs)
|
|
SET_PED_COMPONENT_VARIATION(psAmanda.PedIndex, PED_COMP_DECL, 1, 0) //(decl)
|
|
bComponentVariationsSet = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_AMANDA_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Amanda", PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Amanda", PED_COMP_BERD, 0, 0) //(berd)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Amanda", PED_COMP_HAIR, 4, 0) //(hair)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Amanda", PED_COMP_TORSO, 5, 0) //(uppr)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Amanda", PED_COMP_LEG, 5, 0) //(lowr)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Amanda", PED_COMP_HAND, 0, 0) //(hand)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Amanda", PED_COMP_TEETH, 0, 0) //(teef)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Amanda", PED_COMP_SPECIAL, 0, 0) //(accs)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Amanda", PED_COMP_DECL, 1, 0) //(decl)
|
|
ENDPROC
|
|
|
|
PROC SET_FABIEN_PED_COMPONENT_VARIATIONS(BOOL &bComponentVariationsSet)
|
|
IF ( bComponentVariationsSet = FALSE )
|
|
IF DOES_ENTITY_EXIST(psFabien.PedIndex)
|
|
IF NOT IS_ENTITY_DEAD(psFabien.PedIndex)
|
|
SET_PED_COMPONENT_VARIATION(psFabien.PedIndex, PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(psFabien.PedIndex, PED_COMP_HAIR, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(psFabien.PedIndex, PED_COMP_TORSO, 1, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(psFabien.PedIndex, PED_COMP_LEG, 1, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(psFabien.PedIndex, PED_COMP_HAND, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(psFabien.PedIndex, PED_COMP_TEETH, 0, 0) //(teef)
|
|
SET_PED_COMPONENT_VARIATION(psFabien.PedIndex, PED_COMP_SPECIAL, 1, 0) //(accs)
|
|
bComponentVariationsSet = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_FABIEN_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Fabien", PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Fabien", PED_COMP_HAIR, 0, 0) //(hair)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Fabien", PED_COMP_TORSO, 1, 0) //(uppr)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Fabien", PED_COMP_LEG, 1, 0) //(lowr)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Fabien", PED_COMP_HAND, 0, 0) //(hand)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Fabien", PED_COMP_TEETH, 0, 0) //(teef)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Fabien", PED_COMP_SPECIAL, 1, 0) //(accs)
|
|
ENDPROC
|
|
|
|
PROC SET_LAZLOW_PED_COMPONENT_VARIATIONS(BOOL &bComponentVariationsSet, BOOL bShirtOff, BOOL bPierced, BOOL bHairCut, BOOL bTattooed, BOOL bChestTattooed)
|
|
IF ( bComponentVariationsSet = FALSE )
|
|
IF DOES_ENTITY_EXIST(psLazlow.PedIndex)
|
|
IF NOT IS_ENTITY_DEAD(psLazlow.PedIndex)
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_LEG, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_HAND, 0, 0) //(hand)
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_FEET, 1, 0) //(feet)
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_TEETH, 0, 0) //(teef)
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL, 0, 0) //(accs)
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_DECL, 0, 0) //(decl)
|
|
|
|
IF bHairCut = FALSE
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_HAIR, 0, 0) //(hair)
|
|
ELSE
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_HAIR, 1, 0) //(hair)
|
|
ENDIF
|
|
IF bShirtOff = FALSE
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_TORSO, 2, 0) //(uppr)
|
|
ELSE
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_TORSO, 1, 0) //uppr
|
|
ENDIF
|
|
IF bPierced = FALSE
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL2, 0, 0) //(task)
|
|
ELSE
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL2, 0, 7) //task
|
|
ENDIF
|
|
IF bTattooed
|
|
IF bChestTattooed
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_DECL, 0, 5) //decl
|
|
ELSE
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_DECL, 1, 5) //decl
|
|
ENDIF
|
|
ELSE
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_DECL, 0, 0) //decl
|
|
ENDIF
|
|
bComponentVariationsSet = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(BOOL bShirtOff, BOOL bPierced, BOOL bHairCut, BOOL bTattooed, BOOL bChestTattooed)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_LEG, 0, 0) //(lowr)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_HAND, 0, 0) //(hand)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_FEET, 1, 0) //(feet)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_TEETH, 0, 0) //(teef)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_SPECIAL, 0, 0) //(accs)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_DECL, 0, 0) //(decl)
|
|
IF bHairCut = FALSE
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_HAIR, 0, 0) //(hair)
|
|
ELSE
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_HAIR, 1, 0) //(hair)
|
|
ENDIF
|
|
IF bShirtOff = FALSE
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_TORSO, 2, 0) //(uppr)
|
|
ELSE
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_TORSO, 1, 0) //uppr
|
|
ENDIF
|
|
IF bPierced = FALSE
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_SPECIAL2, 0, 0) //(task)
|
|
ELSE
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_SPECIAL2, 0, 7) //task
|
|
ENDIF
|
|
IF bTattooed
|
|
IF bChestTattooed
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_DECL, 0, 5) //decl
|
|
ELSE
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_DECL, 1, 5) //decl
|
|
ENDIF
|
|
ELSE
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION("Lazlow", PED_COMP_DECL, 0, 0) //decl
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_TATGUY_PED_COMPONENT_VARIATIONS(BOOL &bComponentVariationsSet)
|
|
IF ( bComponentVariationsSet = FALSE )
|
|
IF DOES_ENTITY_EXIST(psTatguy.PedIndex)
|
|
IF NOT IS_ENTITY_DEAD(psTatguy.PedIndex)
|
|
SET_PED_COMPONENT_VARIATION(psTatguy.PedIndex, PED_COMP_HEAD, 0, 0) //(head)
|
|
SET_PED_COMPONENT_VARIATION(psTatguy.PedIndex, PED_COMP_HAIR, 0, 0) //(hair)
|
|
SET_PED_COMPONENT_VARIATION(psTatguy.PedIndex, PED_COMP_TORSO, 0, 0) //(uppr)
|
|
SET_PED_COMPONENT_VARIATION(psTatguy.PedIndex, PED_COMP_LEG, 0, 0) //(lowr)
|
|
SET_PED_COMPONENT_VARIATION(psTatguy.PedIndex, PED_COMP_FEET, 0, 0) //(feet)
|
|
SET_PED_COMPONENT_VARIATION(psTatguy.PedIndex, PED_COMP_DECL, 0, 0) //(decl)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_VEHICLE_REVERSING(VEHICLE_INDEX VehicleIndex)
|
|
|
|
IF DOES_ENTITY_EXIST(VehicleIndex)
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(VehicleIndex)
|
|
|
|
VECTOR vVelocity = GET_ENTITY_SPEED_VECTOR(VehicleIndex, TRUE)
|
|
|
|
IF ( vVelocity.y < -1.0 )
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC RUN_INTERIOR_UNPINNING_CHECK(VECTOR vInteriorCoords, FLOAT fRadius)
|
|
|
|
IF NOT ARE_VECTORS_EQUAL(vInteriorCoords, << 0.0, 0.0, 0.0 >>) //don't check the interior if the coordinates are not valid
|
|
|
|
IF IS_INTERIOR_READY(GET_INTERIOR_AT_COORDS(vInteriorCoords)) //unpin the interior if it is pinned and player is away from it
|
|
|
|
IF ( GET_DISTANCE_BETWEEN_COORDS(vInteriorCoords, GET_ENTITY_COORDS(PLAYER_PED_ID()), TRUE) > fRadius )
|
|
|
|
UNPIN_INTERIOR(GET_INTERIOR_AT_COORDS(vInteriorCoords))
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Unpinning interior at coordinates ", vInteriorCoords, " in memory.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Warps specified ped to new coordinates and sets specified ped's new heading.
|
|
/// PARAMS:
|
|
/// ped - PED_INDEX to warp.
|
|
/// vNewPosition - VECTOR coordinates specifying new ped's position.
|
|
/// fNewHeading - FLOAT specifying new ped's heading.
|
|
/// bKeepVehicle - Specifies if ped should keep vehicle they are currently in.
|
|
/// bResetGameplayCamera - Specifies if gameplay camera should be positioned behind player's back. Works only for PLAYER_PED_ID().
|
|
/// bLoadScene - Specifies if scene at new provided coordinates should be loaded. Works only for PLAYER_PED_ID().
|
|
PROC WARP_PED(PED_INDEX ped, VECTOR vNewPosition, FLOAT fNewHeading, BOOL bKeepVehicle, BOOL bResetGameplayCamera, BOOL bLoadScene)
|
|
|
|
IF NOT IS_PED_INJURED(ped)
|
|
|
|
IF ( bKeepVehicle = TRUE )
|
|
SET_PED_COORDS_KEEP_VEHICLE(ped, vNewPosition)
|
|
ELIF ( bKeepVehicle = FALSE )
|
|
SET_ENTITY_COORDS(ped, vNewPosition)
|
|
ENDIF
|
|
|
|
SET_ENTITY_HEADING(ped, fNewHeading)
|
|
|
|
IF ( ped = PLAYER_PED_ID())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Warping player ped to coordinates ", vNewPosition, " and heading ", fNewHeading, ".")
|
|
#ENDIF
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
SET_PLAYER_CLOTH_PIN_FRAMES(PLAYER_ID(), 1)
|
|
ENDIF
|
|
|
|
IF ( bResetGameplayCamera = TRUE)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
|
|
ENDIF
|
|
|
|
IF ( bLoadScene = TRUE )
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling LOAD_SCENE() at coordinates ", vNewPosition, ". This might take a while to load.")
|
|
#ENDIF
|
|
|
|
LOAD_SCENE(vNewPosition)
|
|
|
|
ENDIF
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Warping ped to coordinates ", vNewPosition, " and heading ", fNewHeading, ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC CLEANUP_PED(PED_STRUCT &ped, BOOL bDelete = FALSE, BOOL bDeathOnly = TRUE, BOOL bKeepTask = TRUE)
|
|
|
|
IF ( bDelete = FALSE )
|
|
|
|
IF DOES_ENTITY_EXIST(ped.PedIndex)
|
|
|
|
IF ( bDeathOnly = TRUE )
|
|
|
|
IF IS_PED_INJURED(ped.PedIndex)
|
|
|
|
SET_PED_AS_NO_LONGER_NEEDED(ped.PedIndex)
|
|
|
|
IF DOES_BLIP_EXIST(ped.BlipIndex)
|
|
REMOVE_BLIP(ped.BlipIndex)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELIF ( bDeathOnly = FALSE )
|
|
|
|
IF NOT IS_PED_INJURED(ped.PedIndex)
|
|
|
|
IF IS_PED_GROUP_MEMBER(ped.PedIndex, PLAYER_GROUP_ID())
|
|
REMOVE_PED_FROM_GROUP(ped.PedIndex)
|
|
ENDIF
|
|
|
|
SET_PED_KEEP_TASK(ped.PedIndex, bKeepTask)
|
|
SET_PED_AS_NO_LONGER_NEEDED(ped.PedIndex)
|
|
|
|
IF DOES_BLIP_EXIST(ped.BlipIndex)
|
|
REMOVE_BLIP(ped.BlipIndex)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELIF ( bDelete = TRUE )
|
|
|
|
IF DOES_ENTITY_EXIST(ped.PedIndex)
|
|
|
|
IF NOT IS_PED_INJURED(ped.PedIndex)
|
|
IF IS_PED_GROUP_MEMBER(ped.PedIndex, PLAYER_GROUP_ID())
|
|
REMOVE_PED_FROM_GROUP(ped.PedIndex)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
DELETE_PED(ped.PedIndex)
|
|
|
|
IF DOES_BLIP_EXIST(ped.BlipIndex)
|
|
REMOVE_BLIP(ped.BlipIndex)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ped.iTimer = 0
|
|
ped.iProgress = 0
|
|
ped.bComponentVariationsSet = FALSE
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC CLEANUP_MISSION_OBJECT(OBJECT_STRUCT &osObject, BOOL bDelete = FALSE)
|
|
|
|
IF DOES_ENTITY_EXIST(osObject.ObjectIndex)
|
|
|
|
IF IS_ENTITY_ATTACHED(osObject.ObjectIndex)
|
|
DETACH_ENTITY(osObject.ObjectIndex)
|
|
ENDIF
|
|
|
|
IF ( bDelete = TRUE )
|
|
DELETE_OBJECT(osObject.ObjectIndex)
|
|
ELSE
|
|
SET_OBJECT_AS_NO_LONGER_NEEDED(osObject.ObjectIndex)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC INT GET_VEHICLE_EXIT_DELAY(PED_INDEX PedIndex, VEHICLE_INDEX VehicleIndex)
|
|
|
|
IF IS_PED_SITTING_IN_THIS_VEHICLE(PedIndex, VehicleIndex)
|
|
|
|
SWITCH GET_PED_VEHICLE_SEAT(PedIndex, VehicleIndex)
|
|
CASE VS_DRIVER
|
|
RETURN 1250
|
|
BREAK
|
|
CASE VS_FRONT_RIGHT
|
|
RETURN 1500
|
|
BREAK
|
|
CASE VS_BACK_LEFT
|
|
RETURN 250
|
|
BREAK
|
|
CASE VS_BACK_RIGHT
|
|
RETURN 50
|
|
BREAK
|
|
DEFAULT
|
|
RETURN 0
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
|
|
RETURN 0
|
|
|
|
ENDFUNC
|
|
|
|
//|======================= DEBUG VARIABLES, PROCEDURES & FUNCTIONS =======================|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
//mission skip menu variables
|
|
MissionStageMenuTextStruct SkipMenu[18]
|
|
INT iReturnStage
|
|
BOOL bStageResetFlag
|
|
|
|
WIDGET_GROUP_ID Family6Widgets
|
|
|
|
/// PURPOSE:
|
|
/// Returns string name of the specified mission stage.
|
|
/// PARAMS:
|
|
/// eStage - Mission stage to get string name for.
|
|
/// RETURNS:
|
|
/// String name of the specified mission stage.
|
|
FUNC STRING GET_MISSION_STAGE_NAME_FOR_DEBUG(MISSION_STAGES eStage)
|
|
|
|
SWITCH eStage
|
|
|
|
CASE MISSION_STAGE_PRE_INTRO
|
|
RETURN "MISSION_STAGE_PRE_INTRO"
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P1
|
|
RETURN "MISSION_STAGE_CUTSCENE_INTRO_P1"
|
|
BREAK
|
|
CASE MISSION_STAGE_TIMELAPSE
|
|
RETURN "MISSION_STAGE_TIMELAPSE"
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P2
|
|
RETURN "MISSION_STAGE_CUTSCENE_INTRO_P2"
|
|
BREAK
|
|
CASE MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
RETURN "MISSION_STAGE_DRIVE_TO_BEAN_MACHINE"
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
RETURN "MISSION_STAGE_CUTSCENE_BEAN_MACHINE"
|
|
BREAK
|
|
CASE MISSION_STAGE_DRIVE_TO_TRACEY
|
|
RETURN "MISSION_STAGE_DRIVE_TO_TRACEY"
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_1
|
|
RETURN "MISSION_STAGE_CUTSCENE_SHOP_1"
|
|
BREAK
|
|
CASE MISSION_STAGE_PIERCE_LAZLOW
|
|
RETURN "MISSION_STAGE_PIERCE_LAZLOW"
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_2
|
|
RETURN "MISSION_STAGE_CUTSCENE_SHOP_2"
|
|
BREAK
|
|
CASE MISSION_STAGE_TATTOO_LAZLOW
|
|
RETURN "MISSION_STAGE_TATTOO_LAZLOW"
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_3
|
|
RETURN "MISSION_STAGE_CUTSCENE_SHOP_3"
|
|
BREAK
|
|
CASE MISSION_STAGE_CUT_LAZLOW_HAIR
|
|
RETURN "MISSION_STAGE_CUT_LAZLOW_HAIR"
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_4
|
|
RETURN "MISSION_STAGE_CUTSCENE_SHOP_4"
|
|
BREAK
|
|
CASE MISSION_STAGE_DRIVE_TO_SHRINK
|
|
RETURN "MISSION_STAGE_DRIVE_TO_SHRINK"
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_SHRINK
|
|
RETURN "MISSION_STAGE_CUTSCENE_SHRINK"
|
|
BREAK
|
|
CASE MISSION_STAGE_DRIVE_HOME
|
|
RETURN "MISSION_STAGE_DRIVE_HOME"
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_END
|
|
RETURN "MISSION_STAGE_CUTSCENE_END"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN "INCORRECT_MISSION_STAGE"
|
|
|
|
ENDFUNC
|
|
|
|
PROC CREATE_DEBUG_WIDGETS()
|
|
|
|
Family6Widgets = START_WIDGET_GROUP("Mission: Family6")
|
|
|
|
START_WIDGET_GROUP("Tattoo Buttons")
|
|
ADD_WIDGET_FLOAT_SLIDER("TATTOO_BUTTONS_X", TATTOO_BUTTONS_X, 0.0, 1.0, 0.001)
|
|
ADD_WIDGET_FLOAT_SLIDER("TATTOO_BUTTONS_Y", TATTOO_BUTTONS_Y, 0.0, 1.0, 0.001)
|
|
ADD_WIDGET_FLOAT_SLIDER("TATTOO_BUTTONS_WIDTH", TATTOO_BUTTONS_WIDTH, 0.0, 1.0, 0.001)
|
|
ADD_WIDGET_FLOAT_SLIDER("TATTOO_BUTTONS_HEIGHT", TATTOO_BUTTONS_HEIGHT, 0.0, 1.0, 0.001)
|
|
ADD_WIDGET_FLOAT_SLIDER("TATTOO_BUTTONS_SCALE", TATTOO_BUTTONS_SCALE, 0.0, 2.0, 0.001)
|
|
STOP_WIDGET_GROUP()
|
|
|
|
STOP_WIDGET_GROUP()
|
|
|
|
SET_LOCATES_HEADER_WIDGET_GROUP(Family6Widgets)
|
|
|
|
ENDPROC
|
|
|
|
PROC DELETE_DEBUG_WIDGETS()
|
|
IF DOES_WIDGET_GROUP_EXIST(Family6Widgets)
|
|
DELETE_WIDGET_GROUP(Family6Widgets)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CREATE_DEBUG_MISSION_STAGE_MENU()
|
|
|
|
SkipMenu[0].sTxtLabel = "PRE INTRO"
|
|
SkipMenu[1].sTxtLabel = "CUT - INTRO P1 - FAM_6_INT"
|
|
SkipMenu[2].sTxtLabel = "TIMELAPSE"
|
|
SkipMenu[3].sTxtLabel = "CUT - INTRO P2 - FAM_6_INT_P3_T7"
|
|
SkipMenu[4].sTxtLabel = "DRIVE TO BEAN MACHINE"
|
|
SkipMenu[5].sTxtLabel = "CUT - BEAN MACHINE - FAM_6_MCS_1"
|
|
SkipMenu[6].sTxtLabel = "DRIVE TO TRACEY"
|
|
SkipMenu[7].sTxtLabel = "CUT - SHOP 1 - FAM_6_MCS_2_CONCAT"
|
|
SkipMenu[8].sTxtLabel = "PIERCE LAZLOW"
|
|
SkipMenu[9].sTxtLabel = "CUT - SHOP 2 - FAM_6_MCS_3"
|
|
SkipMenu[10].sTxtLabel = "TATTOO LAZLOW"
|
|
SkipMenu[11].sTxtLabel = "CUT - SHOP 3 - FAM_6_MCS_4"
|
|
SkipMenu[12].sTxtLabel = "CUT LAZLOW HAIR"
|
|
SkipMenu[13].sTxtLabel = "CUT - SHOP 4 - FAM_6_MCS_5"
|
|
SkipMenu[14].sTxtLabel = "DRIVE TO SHRINK"
|
|
SkipMenu[15].sTxtLabel = "CUT - SHRINK - FAM_6_MCS_6"
|
|
SkipMenu[16].sTxtLabel = "DRIVE HOME"
|
|
SkipMenu[17].sTxtLabel = "CUT - END - FAM_6_MCS_6_P4_B"
|
|
|
|
ENDPROC
|
|
|
|
PROC RUN_DEBUG_PASS_AND_FAIL_CHECK(MISSION_STAGES &eStage, MISSION_FAILS &eFailReason)
|
|
|
|
IF IS_KEYBOARD_KEY_PRESSED (KEY_S)
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
ENDIF
|
|
eStage = MISSION_STAGE_PASSED
|
|
ENDIF
|
|
|
|
IF IS_KEYBOARD_KEY_PRESSED (KEY_F)
|
|
eStage = MISSION_STAGE_FAILED
|
|
eFailReason = MISSION_FAIL_FORCE_FAIL
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Performs a screen fade in with a wait for a specified time.
|
|
/// PARAMS:
|
|
/// iTime - Duration of the fade in miliseconds.
|
|
PROC DO_SCREEN_FADE_IN_FOR_DEBUG(INT iTime)
|
|
|
|
IF NOT IS_SCREEN_FADED_IN()
|
|
|
|
DO_SCREEN_FADE_IN(iTime)
|
|
|
|
WHILE NOT IS_SCREEN_FADED_IN()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Performs a screen fade out with a wait for a specified time.
|
|
/// PARAMS:
|
|
/// iTime - Duration of the fade in miliseconds.
|
|
PROC DO_SCREEN_FADE_OUT_FOR_DEBUG(INT iTime)
|
|
|
|
IF NOT IS_SCREEN_FADED_OUT()
|
|
|
|
DO_SCREEN_FADE_OUT(iTime)
|
|
|
|
WHILE NOT IS_SCREEN_FADED_OUT()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Stops an active mocap cutscene and waits until it has finished.
|
|
PROC DO_SAFE_STOP_CUTSCENE()
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE)
|
|
STOP_CUTSCENE(TRUE)
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) //needs to be called to make sure all scripted systems work correctly when cutscene is skipped
|
|
ENDIF
|
|
|
|
WHILE NOT HAS_CUTSCENE_FINISHED()
|
|
WAIT(0)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Waiting for the cutscene to finish.")
|
|
#ENDIF
|
|
ENDWHILE
|
|
|
|
ENDPROC
|
|
|
|
PROC RUN_MISSION_STAGE_CLEANUP_FOR_DEBUG()
|
|
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Starting mission stage cleanup.")
|
|
|
|
KILL_PHONE_CONVERSATION()
|
|
HANG_UP_AND_PUT_AWAY_PHONE(TRUE)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
|
|
REMOVE_CUTSCENE()
|
|
|
|
IF ( bReplayStartEventTriggered = TRUE )
|
|
REPLAY_STOP_EVENT()
|
|
ENDIF
|
|
|
|
CLEANUP_PED(psJimmy, TRUE)
|
|
CLEANUP_PED(psAmanda, TRUE)
|
|
CLEANUP_PED(psFabien, TRUE)
|
|
CLEANUP_PED(psTracey, TRUE)
|
|
CLEANUP_PED(psLazlow, TRUE)
|
|
CLEANUP_PED(psHipster, TRUE)
|
|
CLEANUP_PED(psTatguy, TRUE)
|
|
|
|
IF DOES_ENTITY_EXIST(osLeftDoorDummy.ObjectIndex)
|
|
REMOVE_MODEL_HIDE(osLeftDoorDummy.vPosition, 1.0, osLeftDoorDummy.ModelName)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osRightDoorDummy.ObjectIndex)
|
|
REMOVE_MODEL_HIDE(osRightDoorDummy.vPosition, 1.0, osRightDoorDummy.ModelName)
|
|
ENDIF
|
|
|
|
CLEANUP_MISSION_OBJECT(osMug, TRUE)
|
|
CLEANUP_MISSION_OBJECT(osShirt, TRUE)
|
|
CLEANUP_MISSION_OBJECT(osLaptop, TRUE)
|
|
CLEANUP_MISSION_OBJECT(osScissors, TRUE)
|
|
CLEANUP_MISSION_OBJECT(osPonyTail, TRUE)
|
|
CLEANUP_MISSION_OBJECT(osPiercingGun, TRUE)
|
|
CLEANUP_MISSION_OBJECT(osTattooNeedle, TRUE)
|
|
CLEANUP_MISSION_OBJECT(osLeftDoorDummy, TRUE)
|
|
CLEANUP_MISSION_OBJECT(osRightDoorDummy, TRUE)
|
|
|
|
IF DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
DELETE_VEHICLE(vsMichaelsCar.VehicleIndex)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(vsAmandasCar.VehicleIndex)
|
|
DELETE_VEHICLE(vsAmandasCar.VehicleIndex)
|
|
ENDIF
|
|
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxHair)
|
|
STOP_PARTICLE_FX_LOOPED(ptfxHair)
|
|
ENDIF
|
|
|
|
IF NOT HAS_SOUND_FINISHED(iTattooSoundID)
|
|
STOP_SOUND(iTattooSoundID)
|
|
ENDIF
|
|
|
|
STOP_AUDIO_SCENES()
|
|
REMOVE_PTFX_ASSET()
|
|
RELEASE_SCRIPT_AUDIO_BANK()
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov)
|
|
|
|
IF IS_PC_VERSION()
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov_kb)
|
|
ENDIF
|
|
|
|
//remove anim dictionaries
|
|
REMOVE_ANIM_DICT("missfam2mcs_intp1")
|
|
REMOVE_ANIM_DICT("missfam6ig_1_pierce")
|
|
REMOVE_ANIM_DICT("missfam6ig_7_tattoo")
|
|
REMOVE_ANIM_DICT("missfam6ig_8_ponytail")
|
|
REMOVE_ANIM_DICT("missfam6leadinoutfam_6_mcs_1")
|
|
REMOVE_ANIM_DICT("missfam6leadinoutfam_6_mcs_2")
|
|
REMOVE_ANIM_DICT("missfam6leadinoutfam_6_mcs_5")
|
|
REMOVE_ANIM_DICT("amb@world_human_stand_impatient@female@no_sign@idle_a")
|
|
|
|
IF NOT HAS_SOUND_FINISHED(iTattooSoundID)
|
|
STOP_SOUND(iTattooSoundID)
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
DISPLAY_HUD(TRUE)
|
|
DISPLAY_RADAR(TRUE)
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
CLEAR_TRIGGERED_LABELS()
|
|
|
|
//DISABLE_TAXI_HAILING(FALSE)
|
|
|
|
REMOVE_ROAD_NODE_SPEED_ZONE(iSpeedZone)
|
|
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished mission stage cleanup.")
|
|
|
|
ENDPROC
|
|
|
|
PROC RUN_DEBUG_MISSION_STAGE_MENU(INT &iSelectedStage, MISSION_STAGES &eStage, BOOL &bSkipActive, BOOL &bResetStage)
|
|
|
|
IF LAUNCH_MISSION_STAGE_MENU(SkipMenu, iSelectedStage, ENUM_TO_INT(eStage), FALSE, "FAMILY 6")
|
|
|
|
DO_SCREEN_FADE_OUT_FOR_DEBUG(DEFAULT_FADE_TIME)
|
|
|
|
DO_SAFE_STOP_CUTSCENE()
|
|
|
|
CLEAR_PRINTS()
|
|
|
|
CLEAR_HELP()
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
RUN_MISSION_STAGE_CLEANUP_FOR_DEBUG()
|
|
|
|
eStage = INT_TO_ENUM(MISSION_STAGES, iSelectedStage)
|
|
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Current mission stage changed to ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), " via mission stage menu.")
|
|
|
|
//reset the debug stage reset flag
|
|
bResetStage = FALSE
|
|
|
|
bSkipActive = TRUE
|
|
|
|
RESET_MISSION_FLAGS()
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC RUN_DEBUG_SKIPS(MISSION_STAGES &eStage, BOOL &bSkipActive, BOOL &bResetStage)
|
|
|
|
INT iCurrentStage = ENUM_TO_INT(eStage)
|
|
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
|
|
|
|
IF eStage <> MISSION_STAGE_CUTSCENE_END
|
|
|
|
DO_SCREEN_FADE_OUT_FOR_DEBUG(DEFAULT_FADE_TIME)
|
|
|
|
DO_SAFE_STOP_CUTSCENE()
|
|
|
|
CLEAR_PRINTS()
|
|
|
|
CLEAR_HELP()
|
|
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
|
|
RUN_MISSION_STAGE_CLEANUP_FOR_DEBUG()
|
|
|
|
iCurrentStage++
|
|
|
|
eStage = INT_TO_ENUM(MISSION_STAGES, iCurrentStage)
|
|
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Current mission stage changed to ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), " via J skip.")
|
|
|
|
//reset the debug stage reset flag
|
|
bResetStage = FALSE
|
|
|
|
bSkipActive = TRUE
|
|
|
|
RESET_MISSION_FLAGS()
|
|
|
|
ENDIF
|
|
|
|
ELIF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)
|
|
|
|
IF eStage <> MISSION_STAGE_PRE_INTRO
|
|
|
|
DO_SCREEN_FADE_OUT_FOR_DEBUG(DEFAULT_FADE_TIME)
|
|
|
|
DO_SAFE_STOP_CUTSCENE()
|
|
|
|
CLEAR_PRINTS()
|
|
|
|
CLEAR_HELP()
|
|
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
|
|
RUN_MISSION_STAGE_CLEANUP_FOR_DEBUG()
|
|
|
|
IF ( bResetStage = FALSE )
|
|
|
|
iCurrentStage--
|
|
|
|
eStage = INT_TO_ENUM(MISSION_STAGES, iCurrentStage)
|
|
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Current mission stage changed to ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), " via P skip.")
|
|
|
|
ELIF ( bResetStage = TRUE )
|
|
|
|
eStage = INT_TO_ENUM(MISSION_STAGES, iCurrentStage)
|
|
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Current mission stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), " reset via P skip.")
|
|
|
|
ENDIF
|
|
|
|
//reset the debug stage reset flag
|
|
bResetStage = FALSE
|
|
|
|
bSkipActive = TRUE
|
|
|
|
RESET_MISSION_FLAGS()
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
#ENDIF
|
|
|
|
//|===================== END DEBUG VARIABLES, PROCEDURES & FUNCTIONS =====================|
|
|
|
|
/// PURPOSE:
|
|
/// Adds a model to model request array.
|
|
/// PARAMS:
|
|
/// ModelName - Model name being requested.
|
|
/// array - MODEL_NAMES array to add the requested model name to.
|
|
/// iArrayLength - Maximum length of the array.
|
|
/// iModelsAlreadyRequested - Number of models already requested in this array.
|
|
PROC ADD_MODEL_REQUEST_TO_ARRAY(MODEL_NAMES ModelName, MODEL_NAMES &array[], INT iArrayLength, INT &iModelsAlreadyRequested)
|
|
|
|
INT i = 0
|
|
|
|
BOOL bModelAlreadyRequested = FALSE
|
|
|
|
IF ( iModelsAlreadyRequested >= 0 )
|
|
|
|
IF ( iModelsAlreadyRequested <= ( iArrayLength - 1 ) )
|
|
|
|
//loop through the array (from 0 to number of models already requested)
|
|
//to see if the array already contains the model name being requested
|
|
//modify the boolean flag if the model was found in array, otherwise leave the flag unchanged
|
|
FOR i = 0 TO ( iModelsAlreadyRequested )
|
|
|
|
IF ( array[i] = ModelName )
|
|
|
|
bModelAlreadyRequested = TRUE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requested model ", GET_MODEL_NAME_FOR_DEBUG(ModelName), " is already in model array.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
IF ( bModelAlreadyRequested = FALSE )
|
|
|
|
REQUEST_MODEL(ModelName)
|
|
|
|
//iModelsAlreadyRequested will be the model array index of the model being requested
|
|
array[iModelsAlreadyRequested] = ModelName
|
|
|
|
iModelsAlreadyRequested++
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requested model ", GET_MODEL_NAME_FOR_DEBUG(ModelName), " and added to model array.")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Number of models requested: ", iModelsAlreadyRequested, ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
SCRIPT_ASSERT("Number of requested models is greater than the length of the model array.")
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
SCRIPT_ASSERT("Number of requested models is less than 0.")
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if all requested models from model array are loaded into memory.
|
|
/// PARAMS:
|
|
/// array - MODEL_NAMES array holding the models.
|
|
/// iModelsAlreadyRequested - Number of already requested models. Should be greated than 0, since 0 means no models have been requested.
|
|
/// RETURNS:
|
|
/// TRUE if all models from model array are loaded into memory. FALSE if otherwise.
|
|
FUNC BOOL ARE_REQUESTED_MODELS_LOADED(MODEL_NAMES &array[], INT &iModelsAlreadyRequested)
|
|
|
|
INT i = 0
|
|
|
|
IF ( iModelsAlreadyRequested > 0 )
|
|
|
|
FOR i = 0 TO ( iModelsAlreadyRequested - 1 )
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Model in array[", i, "]: ", GET_MODEL_NAME_FOR_DEBUG(array[i]), ".")
|
|
#ENDIF
|
|
|
|
IF NOT HAS_MODEL_LOADED(array[i])
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Model ", GET_MODEL_NAME_FOR_DEBUG(array[i]), " is loading.")
|
|
#ENDIF
|
|
|
|
//if the model is not loaded keep requesting it
|
|
REQUEST_MODEL(array[i])
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requesting model ", GET_MODEL_NAME_FOR_DEBUG(array[i]), ".")
|
|
#ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Models from model array loaded. Number of models loaded: ", iModelsAlreadyRequested, ".")
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Cleans model array from requested models.
|
|
/// PARAMS:
|
|
/// array - MODEL_NAMES array.
|
|
/// iModelsAlreadyRequested - Number of already requested models. Should be greated than 0, since 0 means no models have been requested.
|
|
PROC CLEANUP_MODEL_ARRAY(MODEL_NAMES &array[], INT &iModelsAlreadyRequested)
|
|
|
|
INT i = 0
|
|
|
|
IF ( iModelsAlreadyRequested > 0 )
|
|
|
|
FOR i = 0 TO ( iModelsAlreadyRequested - 1 )
|
|
|
|
IF array[i] <> DUMMY_MODEL_FOR_SCRIPT
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(array[i])
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Model ", GET_MODEL_NAME_FOR_DEBUG(array[i]), " cleaned up from model array by setting it as no longer needed.")
|
|
#ENDIF
|
|
|
|
array[i] = DUMMY_MODEL_FOR_SCRIPT
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
ENDIF
|
|
|
|
iModelsAlreadyRequested = 0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Model array cleaned up. Number of requested models set to 0.")
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if two strings are equal.
|
|
/// PARAMS:
|
|
/// sString1 - First string.
|
|
/// sString2 - Second string.
|
|
/// RETURNS:
|
|
/// TRUE if strings are equal, FALSE if otherwise or if any of the strings is empty or NULL.
|
|
FUNC BOOL IS_STRING_EQUAL_TO_STRING(STRING sString1, STRING sString2)
|
|
|
|
IF NOT Is_String_Null_Or_Empty(sString1)
|
|
AND NOT Is_String_Null_Or_Empty(sString2)
|
|
|
|
RETURN ARE_STRINGS_EQUAL(sString1, sString2)
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Adds animation dictionary to animation request array.
|
|
/// PARAMS:
|
|
/// sAnimName - Name of the animation dictionary to request.
|
|
/// array - STRING array containing requested animations.
|
|
/// iArrayLength - Maximum length of the array
|
|
/// iAnimationsAlreadyRequested - Number of animations already requested in this array.
|
|
PROC ADD_ANIMATION_REQUEST_TO_ARRAY(STRING sAnimName, STRING &array[], INT iArrayLength, INT &iAnimationsAlreadyRequested)
|
|
|
|
INT i = 0
|
|
|
|
BOOL bAnimationRequested
|
|
|
|
IF ( iAnimationsAlreadyRequested >= 0 )
|
|
|
|
IF ( iAnimationsAlreadyRequested <= (iArrayLength - 1 ) )
|
|
|
|
FOR i = 0 TO ( iAnimationsAlreadyRequested )
|
|
|
|
IF IS_STRING_EQUAL_TO_STRING(sAnimName, array[i])
|
|
|
|
bAnimationRequested = TRUE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requested animation ", sAnimName, " is already in animation array.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
IF ( bAnimationRequested = FALSE )
|
|
|
|
REQUEST_ANIM_DICT(sAnimName)
|
|
|
|
array[iAnimationsAlreadyRequested] = sAnimName
|
|
|
|
iAnimationsAlreadyRequested++
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requested animation ", sAnimName, " and added to animation array.")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Number of animations requested: ", iAnimationsAlreadyRequested, ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
SCRIPT_ASSERT("Number of requested animations is greater than the length of the animation array.")
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
SCRIPT_ASSERT("Number of requested animations is less than 0.")
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if all requested animations are loaded into memory.
|
|
/// PARAMS:
|
|
/// array - STRING array containing requested animations.
|
|
/// iAnimationsAlreadyRequested - Number of animations already requested in this array.
|
|
/// RETURNS:
|
|
/// TRUE if all requested animations from animation array are loaded into memory. FALSE if otherwise.
|
|
FUNC BOOL ARE_REQUESTED_ANIMATIONS_LOADED(STRING &array[], INT &iAnimationsAlreadyRequested)
|
|
|
|
INT i = 0
|
|
|
|
IF ( iAnimationsAlreadyRequested > 0 )
|
|
|
|
FOR i = 0 TO ( iAnimationsAlreadyRequested - 1 )
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Animation dictionary in array[", i, "]: ", array[i], ".")
|
|
#ENDIF
|
|
|
|
IF NOT HAS_ANIM_DICT_LOADED(array[i])
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Animation dictionary ", array[i], " is loading.")
|
|
#ENDIF
|
|
|
|
//if the animation dictionary is not loaded keep requesting it
|
|
REQUEST_ANIM_DICT(array[i])
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requesting animation dictionary ", array[i], ".")
|
|
#ENDIF
|
|
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ENDFOR
|
|
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Animations from animation array loaded. Number of animations loaded: ", iAnimationsAlreadyRequested, ".")
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Cleans animation array from requested animations.
|
|
/// PARAMS:
|
|
/// array - STRING array of animations to clean.
|
|
/// iAnimationsAlreadyRequested - Number of animations already requested in this array.
|
|
PROC CLEANUP_ANIMATION_ARRAY(STRING &array[], INT &iAnimationsAlreadyRequested)
|
|
|
|
INT i = 0
|
|
|
|
STRING sNull = NULL
|
|
|
|
IF ( iAnimationsAlreadyRequested > 0 )
|
|
|
|
FOR i = 0 TO ( iAnimationsAlreadyRequested - 1 )
|
|
|
|
//brute force remove animation dictionary from memory
|
|
|
|
REMOVE_ANIM_DICT(array[i])
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Animation dictionary ", array[i], " removed from memory and cleaned up from animation array.")
|
|
#ENDIF
|
|
|
|
array[i] = sNull
|
|
|
|
ENDFOR
|
|
|
|
ENDIF
|
|
|
|
iAnimationsAlreadyRequested = 0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Animation array cleaned up. Number of requested animations set to 0.")
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if the specified mocap cutscene has loaded.
|
|
/// Removes any other loaded mocap cutscene and requests the specified cutscene until it is loaded.
|
|
/// PARAMS:
|
|
/// sSceneName - Mocap cutscene name to check for being loaded.
|
|
/// CutsceneSection - Cutscene section specifying at what section to start the cutscene. Use CS_SECTION_1 to play from start.
|
|
/// RETURNS:
|
|
/// TRUE if the specified cutscene has loaded, FALSE if otherwise.
|
|
FUNC BOOL HAS_REQUESTED_CUTSCENE_LOADED(STRING sSceneName, CUTSCENE_SECTION CutsceneSection = CS_SECTION_1)
|
|
|
|
//check if the specified cutscene has loaded first
|
|
IF HAS_THIS_CUTSCENE_LOADED_WITH_FAILSAFE(sSceneName)
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
//if the expected reuqested cutscene has not loaded, but there already is a loaded cutscene
|
|
//then remove it and keep requesting specified mocap cutscene
|
|
IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
|
|
|
|
REMOVE_CUTSCENE()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": HAS_REQUESTED_CUTSCENE_LOADED() Removing cutscene from memory, because cutscene ", sSceneName, " was expected to be loaded.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF ( CutsceneSection = CS_SECTION_1)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Cutscene ", sSceneName, " is loading.")
|
|
#ENDIF
|
|
|
|
//if the cutscene is not loaded, keep requesting it
|
|
REQUEST_CUTSCENE(sSceneName)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requesting ", sSceneName, ".")
|
|
#ENDIF
|
|
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Cutscene ", sSceneName, " is loading with playback list.")
|
|
#ENDIF
|
|
|
|
//if the cutscene is not loaded, keep requesting it
|
|
REQUEST_CUTSCENE_WITH_PLAYBACK_LIST(sSceneName, CutsceneSection)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Requesting ", sSceneName, " cutscene with playback list.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC SET_MISSION_PED_PROPERTIES(PED_INDEX PedIndex, REL_GROUP_HASH relGroupHash, BOOL bCanFlyThroughWindscreen, BOOL bKeepRelGroupOnCleanup,
|
|
BOOL bCanBeTargetted, BOOL bIsEnemy)
|
|
|
|
IF DOES_ENTITY_EXIST(PedIndex)
|
|
IF NOT IS_PED_INJURED(PedIndex)
|
|
|
|
SET_PED_CONFIG_FLAG(PedIndex, PCF_OpenDoorArmIK, TRUE)
|
|
SET_PED_CONFIG_FLAG(PedIndex, PCF_RunFromFiresAndExplosions, FALSE)
|
|
SET_PED_CONFIG_FLAG(PedIndex, PCF_WillFlyThroughWindscreen, bCanFlyThroughWindscreen)
|
|
SET_PED_CONFIG_FLAG(PedIndex, PCF_KeepRelationshipGroupAfterCleanUp, bKeepRelGroupOnCleanup)
|
|
SET_PED_CAN_BE_TARGETTED(PedIndex, bCanBeTargetted)
|
|
SET_PED_AS_ENEMY(PedIndex, bIsEnemy)
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PedIndex, TRUE)
|
|
SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT(PedIndex, TRUE)
|
|
|
|
|
|
|
|
|
|
SET_PED_LOD_MULTIPLIER(PedIndex, 5.0)
|
|
|
|
IF ( relGroupHash != RELGROUPHASH_NO_RELATIONSHIP )
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(PedIndex, relGroupHash)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC SET_VEHICLE_AS_MISSION_CRITICAL(VEH_STRUCT &vehicle, BOOL bMissionCritical)
|
|
|
|
SET_VEHICLE_HAS_STRONG_AXLES(vehicle.VehicleIndex, bMissionCritical)
|
|
|
|
//limit damage that can be done to the vehicle
|
|
SET_VEHICLE_CAN_LEAK_OIL(vehicle.VehicleIndex, NOT bMissionCritical)
|
|
SET_VEHICLE_CAN_LEAK_PETROL(vehicle.VehicleIndex, NOT bMissionCritical)
|
|
|
|
//make the vehicle not attach to tow truck if mission critical
|
|
SET_VEHICLE_AUTOMATICALLY_ATTACHES(vehicle.VehicleIndex, NOT bMissionCritical)
|
|
|
|
IF IS_THIS_MODEL_A_CAR(vehicle.ModelName)
|
|
SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vehicle.VehicleIndex, SC_DOOR_FRONT_LEFT, NOT bMissionCritical)
|
|
SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vehicle.VehicleIndex, SC_DOOR_FRONT_RIGHT, NOT bMissionCritical)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Creates a ped or player ped to be used by player and returns TRUE if such pad was created successfully.
|
|
/// PARAMS:
|
|
/// psPed - PED_STRUCT containg ped details, like PED_INDEX, blip, coordinates, heading, model etc.
|
|
/// bPlayerPed - Boolean indicating if a player ped or NPC ped should be created.
|
|
/// relGroupHash - Relationship group hash for the created ped.
|
|
/// bCreateBlip - Boolean indicating if a blip for this ped should be created.
|
|
/// eCharacter - Enum specifying character from story characters list. Use NO_CHARACTER for characters not stored in that list and provide a MODEL_NAMES in PED_STRUCT.
|
|
/// bCanFlyThroughWindscreen - Sets if ped can fly through windscreen when car crashes.
|
|
/// bCanBeTargetted - Sets if ped can be targetted by player.
|
|
/// bIsEnemy - Sets if ped is considered an enemy.
|
|
/// VehicleIndex - Specify a vehicle index if ped should be created inside a vehicle. IF not use NULL.
|
|
/// eVehicleSeat - Vehicle seat enum for peds created in vehicles.
|
|
/// RETURNS:
|
|
/// TRUE if ped was created successfully, FALSE if otherwise.
|
|
FUNC BOOL HAS_MISSION_PED_BEEN_CREATED(PED_STRUCT &psPed, BOOL bPlayerPed, REL_GROUP_HASH relGroupHash, BOOL bCreateBlip, enumCharacterList eCharacter,
|
|
BOOL bCanFlyThroughWindscreen = FALSE, BOOL bCanBeTargetted = FALSE, BOOL bIsEnemy = FALSE, VEHICLE_INDEX VehicleIndex = NULL,
|
|
VEHICLE_SEAT eVehicleSeat = VS_DRIVER, BOOL bKeepRelGroupOnCleanup = TRUE #IF IS_DEBUG_BUILD, STRING sDebugName = NULL #ENDIF)
|
|
|
|
IF ( bPlayerPed = FALSE ) //create non player ped
|
|
|
|
IF NOT DOES_ENTITY_EXIST(psPed.PedIndex)
|
|
|
|
REQUEST_MODEL(psPed.ModelName)
|
|
|
|
IF HAS_MODEL_LOADED(psPed.ModelName)
|
|
|
|
IF ( VehicleIndex = NULL ) //create ped outside of vehicle
|
|
|
|
IF ( eCharacter = NO_CHARACTER ) //use MODEL_NAMES stored in the PED_STRUCT if no character was specified
|
|
|
|
psPed.PedIndex = CREATE_PED(PEDTYPE_MISSION, psPed.ModelName, psPed.vPosition, psPed.fHeading)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(psPed.ModelName)
|
|
|
|
ELSE //use character name to define the ped MODEL_NAMES
|
|
|
|
IF CREATE_NPC_PED_ON_FOOT(psPed.PedIndex, eCharacter, psPed.vPosition, psPed.fHeading)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(psPed.ModelName)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psPed.PedIndex)
|
|
|
|
SET_MISSION_PED_PROPERTIES(psPed.PedIndex, relGroupHash, bCanFlyThroughWindscreen, bKeepRelGroupOnCleanup,
|
|
bCanBeTargetted, bIsEnemy)
|
|
|
|
IF ( bCreateBlip = TRUE )
|
|
psPed.BlipIndex = CREATE_BLIP_FOR_ENTITY(psPed.PedIndex, FALSE)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT Is_String_Null_Or_Empty(sDebugName)
|
|
SET_PED_NAME_DEBUG(psPed.PedIndex, sDebugName)
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created mission ped ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " at coordinates ", psPed.vPosition, ".")
|
|
ELSE
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created mission ped with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " at coordinates ", psPed.vPosition, ".")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
ELIF ( VehicleIndex != NULL ) //create ped in a vehicle
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(VehicleIndex)
|
|
|
|
IF ( eCharacter = NO_CHARACTER ) //use MODEL_NAMES stored in the PED_STRUCT
|
|
|
|
psPed.PedIndex = CREATE_PED_INSIDE_VEHICLE(VehicleIndex, PEDTYPE_MISSION, psPed.ModelName, eVehicleSeat)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(psPed.ModelName)
|
|
|
|
ELSE //use character name to define the ped MODEL_NAMES
|
|
|
|
IF CREATE_NPC_PED_INSIDE_VEHICLE(psPed.PedIndex, eCharacter, VehicleIndex, eVehicleSeat)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(psPed.ModelName)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psPed.PedIndex)
|
|
|
|
SET_MISSION_PED_PROPERTIES(psPed.PedIndex, relGroupHash, bCanFlyThroughWindscreen, bKeepRelGroupOnCleanup,
|
|
bCanBeTargetted, bIsEnemy)
|
|
|
|
IF ( bCreateBlip = TRUE )
|
|
psPed.BlipIndex = CREATE_BLIP_FOR_ENTITY(psPed.PedIndex, FALSE)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT Is_String_Null_Or_Empty(sDebugName)
|
|
SET_PED_NAME_DEBUG(psPed.PedIndex, sDebugName)
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created mission ped ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " in vehicle.")
|
|
ELSE
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created mission ped with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " in vehicle.")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
//if the ped already exists return true
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
|
|
ELIF ( bPlayerPed = TRUE ) //create player ped, for example a ped that player can hotswap to and take control of
|
|
|
|
IF NOT DOES_ENTITY_EXIST(psPed.PedIndex)
|
|
|
|
IF ( VehicleIndex = NULL ) //create player ped outside of vehicle
|
|
|
|
IF CREATE_PLAYER_PED_ON_FOOT(psPed.PedIndex, eCharacter, psPed.vPosition, psPed.fHeading, TRUE)
|
|
|
|
SET_MISSION_PED_PROPERTIES(psPed.PedIndex, relGroupHash, bCanFlyThroughWindscreen, bKeepRelGroupOnCleanup,
|
|
bCanBeTargetted, bIsEnemy)
|
|
|
|
IF ( bCreateBlip = TRUE )
|
|
psPed.BlipIndex = CREATE_BLIP_FOR_ENTITY(psPed.PedIndex, FALSE)
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT Is_String_Null_Or_Empty(sDebugName)
|
|
SET_PED_NAME_DEBUG(psPed.PedIndex, sDebugName)
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player ped ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " at coordinates ", psPed.vPosition, ".")
|
|
ELSE
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player ped with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), " at coordinates ", psPed.vPosition, ".")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ELIF ( VehicleIndex != NULL ) //create player ped in a vehicle
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(VehicleIndex)
|
|
|
|
IF CREATE_PLAYER_PED_INSIDE_VEHICLE(psPed.PedIndex, eCharacter, VehicleIndex, eVehicleSeat, TRUE)
|
|
|
|
SET_MISSION_PED_PROPERTIES(psPed.PedIndex, relGroupHash, bCanFlyThroughWindscreen, bKeepRelGroupOnCleanup,
|
|
bCanBeTargetted, bIsEnemy)
|
|
|
|
IF ( bCreateBlip = TRUE )
|
|
psPed.BlipIndex = CREATE_BLIP_FOR_ENTITY(psPed.PedIndex, FALSE)
|
|
ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT Is_String_Null_Or_Empty(sDebugName)
|
|
SET_PED_NAME_DEBUG(psPed.PedIndex, sDebugName)
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player ped ", sDebugName, " in vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), ".")
|
|
ELSE
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player ped in vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(psPed.ModelName), ".")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
//if the ped already exists, return true
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Creates vehicle to be used on a mission by player and returns TRUE if such vehicle was created successfully.
|
|
/// PARAMS:
|
|
/// vsVehicle - VEH_STRUCT containing model, position and heading of the vehicle.
|
|
/// bPlayerVehicle - If set to TRUE will create player specific vehicles using CREATE_PLAYER_VEHICLE()
|
|
/// bCarStealVehicle - If set to TRUE will create car steal strand vehicle with a specific command. Works when bPlayerVehicle is FALSE.
|
|
/// eCharacter - Character enum indicating which character specific vehicle to create.
|
|
/// bMissionCritical - Sets the vehicle to be unable to leak oil/petrol and break off doors. Set to TRUE to stop these damage types to vehicle.
|
|
/// iColourCombination - Colour combination of the vehicle.
|
|
/// iColour1 - Colour 1 of the vehicle.
|
|
/// iColour2 - Colour 2 of the vehicle.
|
|
/// RETURNS:
|
|
/// TRUE if vehicle was created, FALSE if otherwise.
|
|
FUNC BOOL HAS_MISSION_VEHICLE_BEEN_CREATED(VEH_STRUCT &vsVehicle, BOOL bPlayerVehicle = FALSE, BOOL bCarStealVehicle = FALSE, enumCharacterList eCharacter = CHAR_MICHAEL,
|
|
BOOL bMissionCritical = TRUE, INT iColourCombination = -1, INT iColour1 = -1, INT iColour2 = -1
|
|
#IF IS_DEBUG_BUILD, STRING sDebugName = NULL #ENDIF)
|
|
|
|
//create any vehicle that can be used on a mission by player
|
|
IF ( bPlayerVehicle = FALSE )
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vsVehicle.VehicleIndex)
|
|
|
|
REQUEST_MODEL(vsVehicle.ModelName)
|
|
|
|
IF HAS_MODEL_LOADED(vsVehicle.ModelName)
|
|
|
|
IF( bCarStealVehicle = TRUE )
|
|
|
|
vsVehicle.VehicleIndex = CREATE_CAR_STEAL_STRAND_CAR(vsVehicle.ModelName, vsVehicle.vPosition, vsVehicle.fHeading)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(vsVehicle.ModelName)
|
|
|
|
ELSE
|
|
|
|
IF ( eCharacter = NO_CHARACTER )
|
|
|
|
vsVehicle.VehicleIndex = CREATE_VEHICLE(vsVehicle.ModelName, vsVehicle.vPosition, vsVehicle.fHeading)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(vsVehicle.ModelName)
|
|
|
|
ELSE //create npc vehicle based on the character enum specified
|
|
|
|
IF CREATE_NPC_VEHICLE(vsVehicle.VehicleIndex, eCharacter, vsVehicle.vPosition, vsVehicle.fHeading)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(vsVehicle.ModelName)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vsVehicle.VehicleIndex)
|
|
|
|
//set vehicle colours, if they are provided
|
|
IF ( iColour1 != -1)
|
|
AND ( iColour2 != -1 )
|
|
SET_VEHICLE_COLOURS(vsVehicle.VehicleIndex, iColour1, iColour2)
|
|
ENDIF
|
|
|
|
//set vehicle colour combination, if it is provided
|
|
IF ( iColourCombination != -1 )
|
|
SET_VEHICLE_COLOUR_COMBINATION(vsVehicle.VehicleIndex, iColourCombination)
|
|
ENDIF
|
|
|
|
SET_VEHICLE_HAS_STRONG_AXLES(vsVehicle.VehicleIndex, bMissionCritical)
|
|
|
|
//limit damage that can be done to the vehicle
|
|
SET_VEHICLE_CAN_LEAK_OIL(vsVehicle.VehicleIndex, NOT bMissionCritical)
|
|
SET_VEHICLE_CAN_LEAK_PETROL(vsVehicle.VehicleIndex, NOT bMissionCritical)
|
|
|
|
//make the vehicle not attach to tow truck if mission critical
|
|
SET_VEHICLE_AUTOMATICALLY_ATTACHES(vsVehicle.VehicleIndex, NOT bMissionCritical)
|
|
|
|
IF IS_THIS_MODEL_A_CAR(vsVehicle.ModelName)
|
|
SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVehicle.VehicleIndex, SC_DOOR_FRONT_LEFT, NOT bMissionCritical)
|
|
SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVehicle.VehicleIndex, SC_DOOR_FRONT_RIGHT, NOT bMissionCritical)
|
|
ENDIF
|
|
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsVehicle.VehicleIndex)
|
|
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT Is_String_Null_Or_Empty(sDebugName)
|
|
SET_VEHICLE_NAME_DEBUG(vsVehicle.VehicleIndex, sDebugName)
|
|
IF ( bCarStealVehicle = TRUE )
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created car steal strand vehicle ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".")
|
|
ELSE
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created vehicle ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".")
|
|
ENDIF
|
|
ELSE
|
|
IF ( bCarStealVehicle = TRUE )
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created car steal strand vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".")
|
|
ELSE
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".")
|
|
ENDIF
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ELSE //if the vehicle exists, return true
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
//create player specific vehicle
|
|
ELIF ( bPlayerVehicle = TRUE )
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vsVehicle.VehicleIndex)
|
|
|
|
//delete all previous instances of player ped vehicle in the world
|
|
DELETE_ALL_SCRIPT_CREATED_PLAYER_VEHICLES(eCharacter)
|
|
|
|
//call the player vehicle creation until it returns true
|
|
IF CREATE_PLAYER_VEHICLE(vsVehicle.VehicleIndex, eCharacter, vsVehicle.vPosition, vsVehicle.fHeading, TRUE)
|
|
|
|
SET_VEHICLE_HAS_STRONG_AXLES(vsVehicle.VehicleIndex, bMissionCritical)
|
|
|
|
//limit damage that can be done to the vehicle
|
|
SET_VEHICLE_CAN_LEAK_OIL(vsVehicle.VehicleIndex, NOT bMissionCritical)
|
|
SET_VEHICLE_CAN_LEAK_PETROL(vsVehicle.VehicleIndex, NOT bMissionCritical)
|
|
|
|
//make the vehicle not attach to tow truck if mission critical
|
|
SET_VEHICLE_AUTOMATICALLY_ATTACHES(vsVehicle.VehicleIndex, NOT bMissionCritical)
|
|
|
|
IF IS_THIS_MODEL_A_CAR(vsVehicle.ModelName)
|
|
SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVehicle.VehicleIndex, SC_DOOR_FRONT_LEFT, NOT bMissionCritical)
|
|
SET_DOOR_ALLOWED_TO_BE_BROKEN_OFF(vsVehicle.VehicleIndex, SC_DOOR_FRONT_RIGHT, NOT bMissionCritical)
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT Is_String_Null_Or_Empty(sDebugName)
|
|
SET_VEHICLE_NAME_DEBUG(vsVehicle.VehicleIndex, sDebugName)
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player vehicle ", sDebugName, " with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".")
|
|
ELSE
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created player vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(vsVehicle.ModelName), " at coordinates ", vsVehicle.vPosition, ".")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ELSE //if the vehicle exists, return true
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Creates an object and returns TRUE if such object was created successfully.
|
|
/// PARAMS:
|
|
/// osObject - OBJECT_STRUCT containing model, position and rotation of the object.
|
|
/// bFreezeObject - Specify if this object's position should be frozen.
|
|
/// RETURNS:
|
|
/// TRUE if object was created, FALSE if otherwise.
|
|
FUNC BOOL HAS_MISSION_OBJECT_BEEN_CREATED(OBJECT_STRUCT &osObject, BOOL bFreezeObject = FALSE)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(osObject.ObjectIndex)
|
|
|
|
REQUEST_MODEL(osObject.ModelName)
|
|
|
|
IF HAS_MODEL_LOADED(osObject.ModelName)
|
|
|
|
osObject.ObjectIndex = CREATE_OBJECT(osObject.ModelName, osObject.vPosition)
|
|
|
|
SET_ENTITY_COORDS_NO_OFFSET(osObject.ObjectIndex, osObject.vPosition)
|
|
SET_ENTITY_ROTATION(osObject.ObjectIndex, osObject.vRotation)
|
|
SET_ENTITY_INVINCIBLE(osObject.ObjectIndex, TRUE)
|
|
FREEZE_ENTITY_POSITION(osObject.ObjectIndex, bFreezeObject)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(osObject.ModelName)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created object with model ", GET_MODEL_NAME_FOR_DEBUG(osObject.ModelName), " at coordinates ", osObject.vPosition, ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osObject.ObjectIndex)
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC BUILD_REQUEST_BANK_FOR_MISSION_STAGE(MISSION_STAGES eStage)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Building request bank for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
SWITCH eStage
|
|
|
|
CASE MISSION_STAGE_PRE_INTRO
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P1
|
|
CASE MISSION_STAGE_TIMELAPSE
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P2
|
|
//request nothing here
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
IF NOT DOES_ENTITY_EXIST(psJimmy.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psJimmy.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
IF NOT DOES_ENTITY_EXIST(psJimmy.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psJimmy.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(psAmanda.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psAmanda.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(psFabien.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psFabien.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(vsAmandasCar.VehicleIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(vsAmandasCar.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_TRACEY
|
|
IF NOT DOES_ENTITY_EXIST(psJimmy.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psJimmy.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_1
|
|
IF NOT DOES_ENTITY_EXIST(psJimmy.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psJimmy.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(psTracey.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psTracey.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(psLazlow.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psLazlow.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_SHRINK
|
|
IF NOT DOES_ENTITY_EXIST(psJimmy.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psJimmy.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(psTracey.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psTracey.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(psLazlow.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psLazlow.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(psTatguy.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psTatguy.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
ADD_ANIMATION_REQUEST_TO_ARRAY("missfam6leadinoutfam_6_mcs_5", MissionAnimations, MAX_ANIMATIONS, iAnimationsRequested)
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHRINK
|
|
CASE MISSION_STAGE_DRIVE_HOME
|
|
CASE MISSION_STAGE_CUTSCENE_END
|
|
IF NOT DOES_ENTITY_EXIST(psJimmy.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psJimmy.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(psTracey.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psTracey.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(psAmanda.PedIndex)
|
|
ADD_MODEL_REQUEST_TO_ARRAY(psAmanda.ModelName, MissionModels, MAX_MODELS, iModelsRequested)
|
|
ENDIF
|
|
BREAK
|
|
|
|
DEFAULT
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished building request bank for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks for various mission fail conditions. Redirects mission flow to MISSION_STAGE_FAILED when one of fail conditions is true.
|
|
/// PARAMS:
|
|
/// eStage - Current mission stage.
|
|
/// eFail - Mission fail reason.
|
|
PROC RUN_FAIL_CHECKS(MISSION_STAGES &eStage, MISSION_FAILS &eFail)
|
|
|
|
IF eStage <> MISSION_STAGE_PASSED
|
|
AND eStage <> MISSION_STAGE_FAILED
|
|
|
|
IF NOT IS_CUTSCENE_PLAYING()
|
|
|
|
IF DOES_ENTITY_EXIST(psJimmy.PedIndex)
|
|
IF ( FailFlags[MISSION_FAIL_JIMMY_DEAD] = TRUE )
|
|
IF IS_PED_INJURED(psJimmy.PedIndex)
|
|
OR IS_ENTITY_DEAD(psJimmy.PedIndex)
|
|
eFail = MISSION_FAIL_JIMMY_DEAD
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
IF ( FailFlags[MISSION_FAIL_JIMMY_LEFT_BEHIND] = TRUE )
|
|
OR ( FailFlags[MISSION_FAIL_FAMILY_LEFT_BEHIND] = TRUE )
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psJimmy.PedIndex) > ABANDON_BUDDY_FAIL_RANGE
|
|
IF ( FailFlags[MISSION_FAIL_TRACEY_LEFT_BEHIND] = TRUE )
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psTracey.PedIndex) > ABANDON_BUDDY_FAIL_RANGE / 2
|
|
eFail = MISSION_FAIL_FAMILY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF ( FailFlags[MISSION_FAIL_AMANDA_LEFT_BEHIND] = TRUE )
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psAmanda.PedIndex) > ABANDON_BUDDY_FAIL_RANGE / 2
|
|
eFail = MISSION_FAIL_FAMILY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF ( eFail = MISSION_FAIL_EMPTY )
|
|
eFail = MISSION_FAIL_JIMMY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
IF ( eStage = MISSION_STAGE_DRIVE_TO_BEAN_MACHINE )
|
|
IF DOES_BLIP_EXIST(sLocatesData.BuddyBlipID[0]) OR NOT IS_PED_IN_GROUP(psJimmy.PedIndex)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-641.87726, 247.57806, 80.30839>>, <<-607.46051, 244.61778, 87.00999>>, 22.0)
|
|
eFail = MISSION_FAIL_JIMMY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF ( eStage = MISSION_STAGE_DRIVE_TO_SHRINK )
|
|
IF DOES_BLIP_EXIST(sLocatesData.BuddyBlipID[1]) OR NOT IS_PED_IN_GROUP(psJimmy.PedIndex)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1894.675781,-567.717773,10.614735>>, <<-1906.339966,-557.923096,13.812391>>, 16.0)
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
IF DOES_BLIP_EXIST(sLocatesData.BuddyBlipID[0]) OR NOT IS_PED_IN_GROUP(psTracey.PedIndex)
|
|
eFail = MISSION_FAIL_FAMILY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
IF ( eFail = MISSION_FAIL_EMPTY )
|
|
eFail = MISSION_FAIL_JIMMY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(psTracey.PedIndex)
|
|
IF ( FailFlags[MISSION_FAIL_TRACEY_DEAD] = TRUE )
|
|
IF IS_PED_INJURED(psTracey.PedIndex)
|
|
OR IS_ENTITY_DEAD(psTracey.PedIndex)
|
|
eFail = MISSION_FAIL_TRACEY_DEAD
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
IF ( FailFlags[MISSION_FAIL_TRACEY_LEFT_BEHIND] = TRUE )
|
|
OR ( FailFlags[MISSION_FAIL_FAMILY_LEFT_BEHIND] = TRUE )
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psTracey.PedIndex) > ABANDON_BUDDY_FAIL_RANGE
|
|
IF ( FailFlags[MISSION_FAIL_JIMMY_LEFT_BEHIND] = TRUE )
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psJimmy.PedIndex) > ABANDON_BUDDY_FAIL_RANGE / 2
|
|
eFail = MISSION_FAIL_FAMILY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF ( FailFlags[MISSION_FAIL_AMANDA_LEFT_BEHIND] = TRUE )
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psAmanda.PedIndex) > ABANDON_BUDDY_FAIL_RANGE / 2
|
|
eFail = MISSION_FAIL_FAMILY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF ( eFail = MISSION_FAIL_EMPTY )
|
|
eFail = MISSION_FAIL_TRACEY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
IF ( eStage = MISSION_STAGE_DRIVE_TO_SHRINK )
|
|
IF DOES_BLIP_EXIST(sLocatesData.BuddyBlipID[0]) OR NOT IS_PED_IN_GROUP(psTracey.PedIndex)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1894.675781,-567.717773,10.614735>>, <<-1906.339966,-557.923096,13.812391>>, 16.0)
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF DOES_BLIP_EXIST(sLocatesData.BuddyBlipID[1]) OR NOT IS_PED_IN_GROUP(psJimmy.PedIndex)
|
|
eFail = MISSION_FAIL_FAMILY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
IF ( eFail = MISSION_FAIL_EMPTY )
|
|
eFail = MISSION_FAIL_TRACEY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(psAmanda.PedIndex)
|
|
IF ( FailFlags[MISSION_FAIL_AMANDA_DEAD] = TRUE )
|
|
IF IS_PED_INJURED(psAmanda.PedIndex)
|
|
OR IS_ENTITY_DEAD(psAmanda.PedIndex)
|
|
eFail = MISSION_FAIL_AMANDA_DEAD
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
IF ( FailFlags[MISSION_FAIL_AMANDA_LEFT_BEHIND] = TRUE )
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psAmanda.PedIndex) > ABANDON_BUDDY_FAIL_RANGE
|
|
IF ( FailFlags[MISSION_FAIL_JIMMY_LEFT_BEHIND] = TRUE )
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psJimmy.PedIndex) > ABANDON_BUDDY_FAIL_RANGE / 2
|
|
eFail = MISSION_FAIL_FAMILY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF ( FailFlags[MISSION_FAIL_TRACEY_LEFT_BEHIND] = TRUE )
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psTracey.PedIndex) > ABANDON_BUDDY_FAIL_RANGE / 2
|
|
eFail = MISSION_FAIL_FAMILY_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF ( eFail = MISSION_FAIL_EMPTY )
|
|
eFail = MISSION_FAIL_AMANDA_LEFT_BEHIND
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF ( FailFlags[MISSION_FAIL_AMANDA_SCARED_OFF] = TRUE )
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
IF HAS_PED_RECEIVED_EVENT(psAmanda.PedIndex, EVENT_EXPLOSION)
|
|
OR HAS_PED_RECEIVED_EVENT(psAmanda.PedIndex, EVENT_SHOCKING_EXPLOSION)
|
|
OR HAS_PED_RECEIVED_EVENT(psAmanda.PedIndex, EVENT_SHOT_FIRED)
|
|
OR HAS_PED_RECEIVED_EVENT(psAmanda.PedIndex, EVENT_SHOT_FIRED_WHIZZED_BY)
|
|
OR HAS_PED_RECEIVED_EVENT(psAmanda.PedIndex, EVENT_SHOT_FIRED_BULLET_IMPACT)
|
|
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(psAmanda.PedIndex, PLAYER_PED_ID())
|
|
eFail = MISSION_FAIL_AMANDA_SCARED_OFF
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
IF eStage = MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-641.87726, 247.57806, 80.30839>>, <<-607.46051, 244.61778, 87.00999>>, 22.0)
|
|
eFail = MISSION_FAIL_AMANDA_SCARED_OFF
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF eStage = MISSION_STAGE_DRIVE_TO_SHRINK
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1894.675781,-567.717773,10.614735>>, <<-1906.339966,-557.923096,13.812391>>, 16.0)
|
|
eFail = MISSION_FAIL_AMANDA_SCARED_OFF
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ( FailFlags[MISSION_FAIL_BEAN_MACHINE_SMASHED] = TRUE )
|
|
IF eStage = MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE()) AND NOT IS_ENTITY_DEAD(GET_PLAYERS_LAST_VEHICLE())
|
|
IF IS_ENTITY_IN_ANGLED_AREA(GET_PLAYERS_LAST_VEHICLE(), <<-615.175964,241.813858,80.011978>>, <<-638.159058,239.557037,85.011978>>, 8.0)
|
|
OR IS_ENTITY_IN_ANGLED_AREA(GET_PLAYERS_LAST_VEHICLE(), <<-615.159668,243.767014,80.011978>>, <<-638.516357,246.040314,84.995193>>, 4.0)
|
|
IF HAS_ENTITY_COLLIDED_WITH_ANYTHING(GET_PLAYERS_LAST_VEHICLE())
|
|
eFail = MISSION_FAIL_BEAN_MACHINE_SMASHED
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(psFabien.PedIndex)
|
|
IF ( FailFlags[MISSION_FAIL_FABIEN_DEAD] = TRUE )
|
|
IF IS_PED_INJURED(psFabien.PedIndex)
|
|
OR IS_ENTITY_DEAD(psFabien.PedIndex)
|
|
eFail = MISSION_FAIL_FABIEN_DEAD
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(psLazlow.PedIndex)
|
|
IF ( FailFlags[MISSION_FAIL_LAZLOW_DEAD] = TRUE )
|
|
IF IS_PED_INJURED(psLazlow.PedIndex)
|
|
OR IS_ENTITY_DEAD(psLazlow.PedIndex)
|
|
eFail = MISSION_FAIL_LAZLOW_DEAD
|
|
eStage = MISSION_STAGE_FAILED
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets mission as failed and provides mission flow with reason to print on screen.
|
|
/// PARAMS:
|
|
/// eFailReason - One of MISSION_FAILS values.
|
|
PROC SET_MISSION_FAILED_WITH_REASON(MISSION_FAILS &eFailReason)
|
|
|
|
SWITCH eFailReason
|
|
|
|
CASE MISSION_FAIL_JIMMY_DEAD
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("CMN_JDIED")
|
|
BREAK
|
|
CASE MISSION_FAIL_TRACEY_DEAD
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("CMN_TCDIED")
|
|
BREAK
|
|
CASE MISSION_FAIL_AMANDA_DEAD
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("CMN_ADIED")
|
|
BREAK
|
|
CASE MISSION_FAIL_FABIEN_DEAD
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("FAM6_FAILFD")
|
|
BREAK
|
|
CASE MISSION_FAIL_LAZLOW_DEAD
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("FAM6_FAILLAZ")
|
|
BREAK
|
|
CASE MISSION_FAIL_AMANDA_SCARED_OFF
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("FAM6_FAILBMA")
|
|
BREAK
|
|
CASE MISSION_FAIL_AMANDAS_CAR_DEAD
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("FAM6_FAILACD")
|
|
BREAK
|
|
CASE MISSION_FAIL_FAMILY_LEFT_BEHIND
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("FAM6_FFAMILY")
|
|
BREAK
|
|
CASE MISSION_FAIL_JIMMY_LEFT_BEHIND
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("CMN_JLEFT")
|
|
BREAK
|
|
CASE MISSION_FAIL_TRACEY_LEFT_BEHIND
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("CMN_TCLEFT")
|
|
BREAK
|
|
CASE MISSION_FAIL_AMANDA_LEFT_BEHIND
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("CMN_ALEFT")
|
|
BREAK
|
|
CASE MISSION_FAIL_BEAN_MACHINE_SMASHED
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("FAM6_FBMSMASH")
|
|
BREAK
|
|
CASE MISSION_FAIL_EMPTY
|
|
CASE MISSION_FAIL_FORCE_FAIL
|
|
MISSION_FLOW_MISSION_FAILED_WITH_REASON("FAM6_FAILDB")
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets mission stage enum for replay.
|
|
/// PARAMS:
|
|
/// eStage - Mission stage enum variable.
|
|
/// iValue - Mid-mission replay value returned by the script when replaying the mission.
|
|
PROC SET_MISSION_STAGE_FOR_REPLAY(MISSION_STAGES &eStage, INT iValue)
|
|
|
|
IF iValue = ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_BEAN_MACHINE)
|
|
|
|
eStage = MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
|
|
ELIF iValue = ENUM_TO_INT(MID_MISSION_STAGE_CUTSCENE_BEAN_MACHINE)
|
|
|
|
eStage = MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
|
|
ELIF iValue = ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_TRACEY)
|
|
|
|
eStage = MISSION_STAGE_DRIVE_TO_TRACEY
|
|
|
|
ELIF iValue = ENUM_TO_INT(MID_MISSION_STAGE_PIERCE_LAZLOW)
|
|
|
|
eStage = MISSION_STAGE_PIERCE_LAZLOW
|
|
|
|
ELIF iValue = ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_SHRINK)
|
|
|
|
eStage = MISSION_STAGE_DRIVE_TO_SHRINK
|
|
|
|
ELIF iValue = ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_HOME)
|
|
|
|
eStage = MISSION_STAGE_DRIVE_HOME
|
|
|
|
ENDIF
|
|
|
|
bStageReplayInProgress = TRUE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mission is being replayed at stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC MISSION_STAGES GET_NEXT_MISSION_STAGE_FOR_SHITSKIP(MISSION_STAGES eStage)
|
|
|
|
INT iNextStage //get next mission stage in mission flow, if this is not a special case stage
|
|
MISSION_STAGES eNextStage
|
|
|
|
iNextStage = ENUM_TO_INT(eStage) + 1
|
|
eNextStage = INT_TO_ENUM(MISSION_STAGES, iNextStage)
|
|
|
|
RETURN eNextStage
|
|
|
|
ENDFUNC
|
|
|
|
PROC INITIALISE_ARRAYS_FOR_MISSION_STAGE(MISSION_STAGES eStage)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Initialising arrays for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
osLeftDoorDummy.vPosition = <<-816.7160, 179.0980, 72.8274>>
|
|
osLeftDoorDummy.ModelName = V_ILEV_MM_DOORM_L
|
|
|
|
osRightDoorDummy.vPosition = <<-816.1068, 177.5108, 72.8274>>
|
|
osRightDoorDummy.ModelName = V_ILEV_MM_DOORM_R
|
|
|
|
SWITCH eStage
|
|
|
|
CASE MISSION_STAGE_PRE_INTRO
|
|
|
|
MissionPosition.vPosition = <<-822.7947, 176.4619, 70.2210>>
|
|
MissionPosition.fHeading = 292.6546
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P1
|
|
CASE MISSION_STAGE_TIMELAPSE
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P2
|
|
CASE MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
|
|
MissionPosition.vPosition = <<-807.5781, 176.1437, 71.8347>>
|
|
MissionPosition.fHeading = 17.2773
|
|
|
|
psJimmy.vPosition = <<-808.7352, 178.4024, 71.1531>>
|
|
psJimmy.fHeading = 44.4325
|
|
psJimmy.ModelName = GET_NPC_PED_MODEL(CHAR_JIMMY)
|
|
|
|
vsMichaelsCar.vPosition = << -824.3593, 179.5045, 70.4652 >>
|
|
vsMichaelsCar.fHeading = 137.1847
|
|
vsMichaelsCar.ModelName = GET_PLAYER_VEH_MODEL(CHAR_MICHAEL)
|
|
|
|
vsAmandasCar.vPosition = <<-622.3307, 253.6852, 80.5665>>
|
|
vsAmandasCar.fHeading = 263.3081
|
|
vsAmandasCar.ModelName = GET_NPC_VEH_MODEL(CHAR_AMANDA)
|
|
|
|
psAmanda.vPosition = <<-626.1675, 244.5767, 80.8952>>
|
|
psAmanda.fHeading = 265.6175
|
|
psAmanda.ModelName = GET_NPC_PED_MODEL(CHAR_AMANDA)
|
|
|
|
psFabien.vPosition = <<-623.6904, 244.6078, 80.8952>>
|
|
psFabien.fHeading = 85.7330
|
|
psFabien.ModelName = IG_FABIEN
|
|
|
|
psHipster.vPosition = <<-622.4567, 243.7266, 80.8952>>
|
|
psHipster.fHeading = 274.1241
|
|
psHipster.ModelName = CSB_SCREEN_WRITER
|
|
|
|
osLaptop.vPosition = <<-621.67029, 244.90756, 81.69887>>
|
|
osLaptop.vRotation = << 0.0, 0.0, 0.0 >>
|
|
osLaptop.ModelName = P_LAPTOP_02_S
|
|
|
|
osMug.vPosition = << -625.02, 245.39, 81.69 >>
|
|
osMug.vRotation = << 0.0, 0.0, 0.0 >>
|
|
osMug.ModelName = PROP_MUG_04
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
|
|
MissionPosition.vPosition = <<-628.1871, 246.2558, 80.6955>>
|
|
MissionPosition.fHeading = 358.2773
|
|
|
|
psJimmy.vPosition = <<-629.4871, 248.0318, 80.5708>>
|
|
psJimmy.fHeading = 1.8819
|
|
psJimmy.ModelName = GET_NPC_PED_MODEL(CHAR_JIMMY)
|
|
|
|
vsMichaelsCar.vPosition = <<-630.5650, 255.2820, 80.5020>>
|
|
vsMichaelsCar.fHeading = 265.1243
|
|
vsMichaelsCar.ModelName = GET_PLAYER_VEH_MODEL(CHAR_MICHAEL)
|
|
|
|
vsAmandasCar.vPosition = <<-622.3307, 253.6852, 80.5665>>
|
|
vsAmandasCar.fHeading = 263.3081
|
|
vsAmandasCar.ModelName = GET_NPC_VEH_MODEL(CHAR_AMANDA)
|
|
|
|
psAmanda.vPosition = <<-626.1675, 244.5767, 80.8952>>
|
|
psAmanda.fHeading = 265.6175
|
|
psAmanda.ModelName = GET_NPC_PED_MODEL(CHAR_AMANDA)
|
|
|
|
psFabien.vPosition = <<-623.6904, 244.6078, 80.8952>>
|
|
psFabien.fHeading = 85.7330
|
|
psFabien.ModelName = IG_FABIEN
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_TRACEY
|
|
|
|
MissionPosition.vPosition = <<-628.1871, 246.2558, 80.6955>>
|
|
MissionPosition.fHeading = 358.2910
|
|
|
|
psJimmy.vPosition = <<-629.4871, 248.0318, 80.5708>>
|
|
psJimmy.fHeading = 1.8819
|
|
psJimmy.ModelName = GET_NPC_PED_MODEL(CHAR_JIMMY)
|
|
|
|
vsMichaelsCar.vPosition = <<-630.5650, 255.2820, 80.5020>>
|
|
vsMichaelsCar.fHeading = 265.1243
|
|
vsMichaelsCar.ModelName = GET_PLAYER_VEH_MODEL(CHAR_MICHAEL)
|
|
|
|
psTracey.vPosition = <<321.6396, 181.2119, 102.5865>>
|
|
psTracey.fHeading = 196.2891
|
|
psTracey.ModelName = GET_NPC_PED_MODEL(CHAR_TRACEY)
|
|
|
|
psLazlow.vPosition = <<321.0728, 180.1358, 102.5865>>
|
|
psLazlow.fHeading = 349.9787
|
|
psLazlow.ModelName = CS_LAZLOW
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_1
|
|
CASE MISSION_STAGE_PIERCE_LAZLOW
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_2
|
|
CASE MISSION_STAGE_TATTOO_LAZLOW
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_3
|
|
CASE MISSION_STAGE_CUT_LAZLOW_HAIR
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_4
|
|
|
|
MissionPosition.vPosition = <<323.8220, 179.8134, 102.5865>>
|
|
MissionPosition.fHeading = 62.0417
|
|
|
|
vsMichaelsCar.vPosition = <<300.6550, 173.2841, 102.9553>>
|
|
vsMichaelsCar.fHeading = 69.9177
|
|
vsMichaelsCar.ModelName = GET_PLAYER_VEH_MODEL(CHAR_MICHAEL)
|
|
|
|
psJimmy.vPosition = <<321.65167, 182.52638, 102.58653>>
|
|
psJimmy.fHeading = -115.96
|
|
psJimmy.ModelName = GET_NPC_PED_MODEL(CHAR_JIMMY)
|
|
|
|
psTracey.vPosition = <<321.58789, 181.57816, 102.58653>>
|
|
psTracey.fHeading = -100.54
|
|
psTracey.ModelName = GET_NPC_PED_MODEL(CHAR_TRACEY)
|
|
|
|
psLazlow.vPosition = <<321.8900, 182.1672, 102.5865>>
|
|
psLazlow.fHeading = 214.4331
|
|
psLazlow.ModelName = CS_LAZLOW
|
|
|
|
psTatguy.vPosition = <<322.07504, 182.24998, 102.58653>>
|
|
psTatguy.fHeading = -153.83
|
|
psTatguy.ModelName = U_M_Y_TATTOO_01
|
|
|
|
osShirt.vPosition = << 0.0, 0.0, 0.0 >>
|
|
osShirt.vRotation = << 0.0, 0.0, 0.0 >>
|
|
osShirt.ModelName = P_LAZLOW_SHIRT_S
|
|
|
|
osPonyTail.vPosition = << 322.68, 179.47, 102.59 >>
|
|
osPonyTail.vRotation = << 0.0, 0.0, 0.0 >>
|
|
osPonyTail.ModelName = P_CS_LAZ_PTAIL_S
|
|
|
|
osPiercingGun.vPosition = << 322.28, 183.48, 102.59 >>
|
|
osPiercingGun.vRotation = << 0.0, 0.0, 0.0 >>
|
|
osPiercingGun.ModelName = PROP_PIERCING_GUN
|
|
|
|
osTattooNeedle.vPosition = << 322.28, 183.48, 102.59 >>
|
|
osTattooNeedle.vRotation = << 0.0, 0.0, 0.0 >>
|
|
osTattooNeedle.ModelName = V_ILEV_TA_TATGUN
|
|
|
|
osScissors.vPosition = << 322.28, 183.48, 102.59 >>
|
|
osScissors.vRotation = << 0.0, 0.0, 0.0 >>
|
|
osScissors.ModelName = PROP_CS_SCISSORS
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_SHRINK
|
|
|
|
MissionPosition.vPosition = <<315.4439, 175.3920, 102.8468>>//<<315.4439, 175.3920, 102.8468>>
|
|
MissionPosition.fHeading = 106.3951//92.4830
|
|
|
|
vsMichaelsCar.vPosition = <<300.6550, 173.2841, 102.9553>>
|
|
vsMichaelsCar.fHeading = 69.9177
|
|
vsMichaelsCar.ModelName = GET_PLAYER_VEH_MODEL(CHAR_MICHAEL)
|
|
|
|
psJimmy.vPosition = <<313.6881, 174.4399, 102.8722>>
|
|
psJimmy.fHeading = 101.0260
|
|
psJimmy.ModelName = GET_NPC_PED_MODEL(CHAR_JIMMY)
|
|
|
|
psTracey.vPosition = <<313.3786, 176.4375, 102.8908>>
|
|
psTracey.fHeading = 95.2572
|
|
psTracey.ModelName = GET_NPC_PED_MODEL(CHAR_TRACEY)
|
|
|
|
psLazlow.vPosition = <<321.8900, 182.1672, 102.5865>>
|
|
psLazlow.fHeading = 214.4331
|
|
psLazlow.ModelName = CS_LAZLOW
|
|
|
|
psTatguy.vPosition = <<322.07504, 182.24998, 102.58653>>
|
|
psTatguy.fHeading = -153.83
|
|
psTatguy.ModelName = U_M_Y_TATTOO_01
|
|
|
|
psAmanda.vPosition = <<-1906.76477, -559.85950, 10.79799>>
|
|
psAmanda.fHeading = -88.88
|
|
psAmanda.ModelName = GET_NPC_PED_MODEL(CHAR_AMANDA)
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHRINK
|
|
CASE MISSION_STAGE_DRIVE_HOME
|
|
|
|
MissionPosition.vPosition = <<-1902.8654, -558.0767, 10.7794>>
|
|
MissionPosition.fHeading = 225.8389
|
|
|
|
vsMichaelsCar.vPosition = <<-1898.9677, -561.0737, 10.7827>>
|
|
vsMichaelsCar.fHeading = 321.4044
|
|
vsMichaelsCar.ModelName = GET_PLAYER_VEH_MODEL(CHAR_MICHAEL)
|
|
|
|
psJimmy.vPosition = <<-1904.7207, -560.4189, 10.7980>>
|
|
psJimmy.fHeading = 238.9373
|
|
psJimmy.ModelName = GET_NPC_PED_MODEL(CHAR_JIMMY)
|
|
|
|
psTracey.vPosition = <<-1903.3005, -560.9316, 10.7980>>
|
|
psTracey.fHeading = 224.1973
|
|
psTracey.ModelName = GET_NPC_PED_MODEL(CHAR_TRACEY)
|
|
|
|
psAmanda.vPosition = <<-1899.4695, -557.8484, 10.7553>>
|
|
psAmanda.fHeading = 227.6959
|
|
psAmanda.ModelName = GET_NPC_PED_MODEL(CHAR_AMANDA)
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_END
|
|
|
|
MissionPosition.vPosition = <<-823.1286, 176.7446, 70.2141>>
|
|
MissionPosition.fHeading = 292.7178
|
|
|
|
vsMichaelsCar.vPosition = <<-825.6646, 180.1217, 70.4785>>
|
|
vsMichaelsCar.fHeading = 316.5125
|
|
vsMichaelsCar.ModelName = GET_PLAYER_VEH_MODEL(CHAR_MICHAEL)
|
|
|
|
psJimmy.vPosition = <<-822.4412, 175.9556, 70.3352>>
|
|
psJimmy.fHeading = 293.9573
|
|
psJimmy.ModelName = GET_NPC_PED_MODEL(CHAR_JIMMY)
|
|
|
|
psTracey.vPosition = <<-821.4911, 175.1127, 70.5573>>
|
|
psTracey.fHeading = 284.8115
|
|
psTracey.ModelName = GET_NPC_PED_MODEL(CHAR_TRACEY)
|
|
|
|
psAmanda.vPosition = <<-820.2170, 175.4369, 70.6240>>
|
|
psAmanda.fHeading = 284.8128
|
|
psAmanda.ModelName = GET_NPC_PED_MODEL(CHAR_AMANDA)
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished initialising arrays for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_LOADED(MISSION_STAGES eStage, INT &iSetupProgress, BOOL &bStageLoaded, BOOL &bStageSkippedTo, BOOL &bStageReplayed)
|
|
|
|
//handle initial mission setup
|
|
IF ( iSetupProgress = 0 )
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Starting initial mission loading.")
|
|
#ENDIF
|
|
|
|
//clear the screen of any text displayed before mission started
|
|
CLEAR_PRINTS()
|
|
|
|
//load the mission text
|
|
REQUEST_ADDITIONAL_TEXT("FAM6", MISSION_TEXT_SLOT)
|
|
|
|
WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
//suppress player's car model
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(GET_NPC_VEH_MODEL(CHAR_AMANDA), TRUE)
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(GET_PLAYER_VEH_MODEL(CHAR_MICHAEL), TRUE)
|
|
|
|
//DISABLE_TAXI_HAILING(TRUE)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DISABLE_VEHICLE_GEN_ON_MISSION(TRUE)
|
|
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_MICHAEL_SAVEHOUSE)
|
|
DELETE_ALL_SCRIPT_CREATED_PLAYER_VEHICLES(CHAR_MICHAEL)
|
|
ENDIF
|
|
|
|
LOCK_SHOP_DOORS(TATTOO_PARLOUR_01_HW, TRUE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(TATTOO_PARLOUR_01_HW, TRUE)
|
|
SET_SHOP_DIALOGUE_IS_BLOCKED(TATTOO_PARLOUR_01_HW, TRUE)
|
|
SET_SHOP_IS_OPEN_FOR_BUSINESS(TATTOO_PARLOUR_01_HW, FALSE)
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(TATTOO_PARLOUR_01_HW, TRUE)
|
|
SET_SHOP_IS_TEMPORARILY_UNAVAILABLE(TATTOO_PARLOUR_01_HW, TRUE)
|
|
FORCE_SHOP_CLEANUP(TATTOO_PARLOUR_01_HW)
|
|
SET_INTERIOR_DISABLED(INTERIOR_V_PSYCHEOFFICE, FALSE)
|
|
|
|
//bean machine
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< -614.28 - 10.0, 252.81 - 4.0, 81.66 - 2.0 >>, << -614.28 + 10.0, 252.81 + 4.0, 81.66 + 2.0 >>, FALSE)
|
|
REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(<< -614.28 - 10.0, 252.81 - 4.0, 81.66 - 2.0 >>, << -614.28 + 10.0, 252.81 + 4.0, 81.66 + 2.0 >>)
|
|
|
|
//tattoo parlor
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< 295.26 - 8.0, 175.57 - 4.0, 104.06 - 2.0>>, << 295.26 + 8.0, 175.57 + 4.0, 104.06 + 2.0>>, FALSE)
|
|
REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(<< 295.26 - 8.0, 175.57 - 4.0, 104.06 - 2.0>>, << 295.26 + 8.0, 175.57 + 4.0, 104.06 + 2.0>>)
|
|
|
|
//shrink office
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<< -1894.98 - 4.0, -565.30 - 4.0, 12.68 - 2.0 >>, << -1894.98 + 4.0, -565.30 + 4.0, 12.68 + 2.0 >>, FALSE)
|
|
REMOVE_VEHICLES_FROM_GENERATORS_IN_AREA(<< -1894.98 - 4.0, -565.30 - 4.0, 12.68 - 2.0 >>, << -1894.98 + 4.0, -565.30 + 4.0, 12.68 + 2.0 >>)
|
|
|
|
BeanMachineScenarioBlockingIndex = CREATE_SCENARIO_BLOCKING_AREA(<< -627.05, 243.58, 82.89 >>, << 16.0, 12.0, 4.0 >>)
|
|
TattooParlorScenarioBlockingIndex = CREATE_SCENARIO_BLOCKING_AREA(<< 295.59, 174.36, 104.05 >>, << 6.0, 3.0, 2.0 >>)
|
|
|
|
iTattooSoundID = GET_SOUND_ID()
|
|
|
|
IF DOES_GROUP_EXIST(PLAYER_GROUP_ID())
|
|
SET_GROUP_FORMATION_SPACING(PLAYER_GROUP_ID(), 3.5)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling SET_GROUP_FORMATION_SPACING() for PLAYER_GROUP_ID().")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF IS_REPLAY_IN_PROGRESS()
|
|
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
|
|
ENDIF
|
|
|
|
IF NOT IS_REPLAY_IN_PROGRESS()
|
|
g_replay.iReplayInt[0] = ENUM_TO_INT(TATTOOING_IDLE) //reset the global variable when not a retry, used for Lazlow's tattoo info
|
|
ELSE
|
|
//do nothing, read this global variable later when creating Lazlow's tattoo
|
|
ENDIF
|
|
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished initial mission loading.")
|
|
#ENDIF
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
//run this each time new mission stage needs to be loaded
|
|
IF ( iSetupProgress = 1 )
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Started mission stage loading for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
bStageLoaded = FALSE
|
|
|
|
//initialise arrays for peds, vehicles and objects
|
|
INITIALISE_ARRAYS_FOR_MISSION_STAGE(eStage)
|
|
|
|
//cleanup the asset arrays so that they are ready to be populated with assets needed for the stage being loaded
|
|
CLEANUP_MODEL_ARRAY(MissionModels, iModelsRequested)
|
|
CLEANUP_ANIMATION_ARRAY(MissionAnimations, iAnimationsRequested)
|
|
|
|
//clear triggered text labels
|
|
CLEAR_TRIGGERED_LABELS()
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
//handle player positioning when current stage is being skipped to or played normally
|
|
//fade in the screen if it was faded out due to skipping
|
|
IF ( iSetupProgress = 2 )
|
|
|
|
//stage was skipped to or is being replayed
|
|
IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE )
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Warping player ped to new position for mission stage being loaded due to skipping or replay.")
|
|
#ENDIF
|
|
|
|
WARP_PED(PLAYER_PED_ID(), MissionPosition.vPosition, MissionPosition.fHeading, FALSE, TRUE, FALSE)
|
|
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
CLEAR_PED_WETNESS(PLAYER_PED_ID())
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
|
|
CLEAR_PED_DECORATIONS(PLAYER_PED_ID())
|
|
CLEAR_PED_BLOOD_DAMAGE(PLAYER_PED_ID())
|
|
RESET_PED_VISIBLE_DAMAGE(PLAYER_PED_ID())
|
|
RESTORE_PLAYER_PED_TATTOOS(PLAYER_PED_ID())
|
|
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
|
|
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(), FALSE)
|
|
SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(), FALSE)
|
|
|
|
SET_FORCE_FOOTSTEP_UPDATE(PLAYER_PED_ID(), FALSE)
|
|
|
|
STOP_FIRE_IN_RANGE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 1000.0)
|
|
REMOVE_DECALS_IN_RANGE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 1000.0)
|
|
REMOVE_PARTICLE_FX_IN_RANGE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 1000.0)
|
|
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
|
|
SET_ENTITY_HEALTH(PLAYER_PED_ID(), GET_PED_MAX_HEALTH(PLAYER_PED_ID()))
|
|
ENDIF
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0)
|
|
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
|
|
ENDIF
|
|
|
|
bVehicleReversed = FALSE
|
|
|
|
ENDIF
|
|
|
|
IF ( bStageReplayed = TRUE )
|
|
START_REPLAY_SETUP( MissionPosition.vPosition, MissionPosition.fHeading)
|
|
ENDIF
|
|
|
|
//request assets needed for current stage
|
|
BUILD_REQUEST_BANK_FOR_MISSION_STAGE(eStage)
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
//handle loading of mission models that have been requested in the previous stage in BUILD_REQUEST_BANK_FOR_MISSION_STAGE()
|
|
//handle loading of mission animations that been requested in the previous stage in BUILD_REQUEST_BANK_FOR_MISSION_STAGE()
|
|
IF ( iSetupProgress = 3 )
|
|
|
|
IF ARE_REQUESTED_MODELS_LOADED(MissionModels, iModelsRequested)
|
|
IF ARE_REQUESTED_ANIMATIONS_LOADED(MissionAnimations, iAnimationsRequested)
|
|
iSetupProgress++
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
//handle creating vehicles/peds and setting up fail flags
|
|
//run this each time new mission stage needs to be loaded
|
|
//THIS SETUP SECTION ASSUMES THAT ALL REQUIRED ASSETS HAVE BEEN ALREADY LOADED TO MEMORY IN PREVIOUS SETUP SECTIONS
|
|
IF ( iSetupProgress = 4 )
|
|
|
|
SET_FAIL_FLAGS(FALSE)
|
|
|
|
SWITCH eStage
|
|
|
|
CASE MISSION_STAGE_PRE_INTRO
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P1
|
|
CASE MISSION_STAGE_TIMELAPSE
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P2
|
|
|
|
IF IS_REPEAT_PLAY_ACTIVE() //create mission vehicle on mission repeat play only
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsMichaelsCar, TRUE, FALSE, CHAR_MICHAEL)
|
|
OVERRIDE_REPLAY_CHECKPOINT_VEHICLE(vsMichaelsCar.VehicleIndex)
|
|
iSetupProgress++
|
|
ENDIF
|
|
ELSE //move on if not repeat play
|
|
iSetupProgress++
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
|
|
FailFlags[MISSION_FAIL_JIMMY_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_JIMMY_LEFT_BEHIND] = TRUE
|
|
|
|
FailFlags[MISSION_FAIL_AMANDA_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_FABIEN_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_AMANDA_SCARED_OFF] = TRUE
|
|
FailFlags[MISSION_FAIL_BEAN_MACHINE_SMASHED]= TRUE
|
|
|
|
IF HAS_MISSION_PED_BEEN_CREATED(psJimmy, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_JIMMY)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE() //and snapshot vehicle data exists
|
|
|
|
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
|
|
|
|
IF HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
|
|
|
|
vsMichaelsCar.VehicleIndex = CREATE_REPLAY_CHECKPOINT_VEHICLE(vsMichaelsCar.vPosition, vsMichaelsCar.fHeading)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsMichaelsCar.VehicleIndex)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SET_VEHICLE_NAME_DEBUG(vsMichaelsCar.VehicleIndex, "RC_Michaels_Car")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Creating replay checkpoint vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL()), ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsMichaelsCar, TRUE, FALSE, CHAR_MICHAEL)
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsAmandasCar, FALSE, FALSE, CHAR_AMANDA)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psJimmy, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_JIMMY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psAmanda, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_AMANDA)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psFabien, FALSE, RELGROUPHASH_PLAYER, FALSE, NO_CHARACTER)
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vsAmandasCar.VehicleIndex)
|
|
LOWER_CONVERTIBLE_ROOF(vsAmandasCar.VehicleIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE() //and snapshot vehicle data exists
|
|
|
|
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
|
|
|
|
IF HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
|
|
|
|
vsMichaelsCar.VehicleIndex = CREATE_REPLAY_CHECKPOINT_VEHICLE(vsMichaelsCar.vPosition, vsMichaelsCar.fHeading)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsMichaelsCar.VehicleIndex)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SET_VEHICLE_NAME_DEBUG(vsMichaelsCar.VehicleIndex, "RC_Michaels_Car")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Creating replay checkpoint vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL()), ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsMichaelsCar, TRUE, FALSE, CHAR_MICHAEL)
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_TRACEY
|
|
|
|
FailFlags[MISSION_FAIL_JIMMY_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_JIMMY_LEFT_BEHIND] = TRUE
|
|
|
|
FailFlags[MISSION_FAIL_AMANDA_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_FABIEN_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_TRACEY_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_LAZLOW_DEAD] = TRUE
|
|
|
|
IF HAS_MISSION_PED_BEEN_CREATED(psJimmy, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_JIMMY)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE() //and snapshot vehicle data exists
|
|
|
|
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
|
|
|
|
IF HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
|
|
|
|
vsMichaelsCar.VehicleIndex = CREATE_REPLAY_CHECKPOINT_VEHICLE(vsMichaelsCar.vPosition, vsMichaelsCar.fHeading)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsMichaelsCar.VehicleIndex)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SET_VEHICLE_NAME_DEBUG(vsMichaelsCar.VehicleIndex, "RC_Michaels_Car")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Creating replay checkpoint vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL()), ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsMichaelsCar, TRUE, FALSE, CHAR_MICHAEL)
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_1
|
|
CASE MISSION_STAGE_PIERCE_LAZLOW
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_2
|
|
CASE MISSION_STAGE_TATTOO_LAZLOW
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_3
|
|
CASE MISSION_STAGE_CUT_LAZLOW_HAIR
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_4
|
|
|
|
FailFlags[MISSION_FAIL_JIMMY_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_TRACEY_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_LAZLOW_DEAD] = TRUE
|
|
|
|
IF HAS_MISSION_PED_BEEN_CREATED(psJimmy, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_JIMMY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psTracey, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_TRACEY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psLazlow, FALSE, RELGROUPHASH_PLAYER, FALSE, NO_CHARACTER)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE() //and snapshot vehicle data exists
|
|
|
|
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
|
|
|
|
IF HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
|
|
|
|
vsMichaelsCar.VehicleIndex = CREATE_REPLAY_CHECKPOINT_VEHICLE(vsMichaelsCar.vPosition, vsMichaelsCar.fHeading)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsMichaelsCar.VehicleIndex)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SET_VEHICLE_NAME_DEBUG(vsMichaelsCar.VehicleIndex, "RC_Michaels_Car")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Creating replay checkpoint vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL()), ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsMichaelsCar, TRUE, FALSE, CHAR_MICHAEL)
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_SHRINK
|
|
|
|
FailFlags[MISSION_FAIL_JIMMY_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_JIMMY_LEFT_BEHIND] = TRUE
|
|
|
|
FailFlags[MISSION_FAIL_TRACEY_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_TRACEY_LEFT_BEHIND] = TRUE
|
|
|
|
FailFlags[MISSION_FAIL_FAMILY_LEFT_BEHIND] = TRUE
|
|
|
|
FailFlags[MISSION_FAIL_LAZLOW_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_AMANDA_DEAD] = TRUE
|
|
|
|
FailFlags[MISSION_FAIL_AMANDA_SCARED_OFF] = TRUE
|
|
|
|
IF HAS_MISSION_PED_BEEN_CREATED(psJimmy, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_JIMMY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psTracey, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_TRACEY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psLazlow, FALSE, RELGROUPHASH_PLAYER, FALSE, NO_CHARACTER)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psTatguy, FALSE, RELGROUPHASH_PLAYER, FALSE, NO_CHARACTER)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE() //and snapshot vehicle data exists
|
|
|
|
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
|
|
|
|
IF HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
|
|
|
|
vsMichaelsCar.VehicleIndex = CREATE_REPLAY_CHECKPOINT_VEHICLE(vsMichaelsCar.vPosition, vsMichaelsCar.fHeading)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsMichaelsCar.VehicleIndex)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SET_VEHICLE_NAME_DEBUG(vsMichaelsCar.VehicleIndex, "RC_Michaels_Car")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Creating replay checkpoint vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL()), ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsMichaelsCar, TRUE, FALSE, CHAR_MICHAEL)
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHRINK
|
|
|
|
IF HAS_MISSION_PED_BEEN_CREATED(psJimmy, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_JIMMY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psTracey, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_TRACEY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psAmanda, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_AMANDA)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE() //and snapshot vehicle data exists
|
|
|
|
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
|
|
|
|
IF HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
|
|
|
|
vsMichaelsCar.VehicleIndex = CREATE_REPLAY_CHECKPOINT_VEHICLE(vsMichaelsCar.vPosition, vsMichaelsCar.fHeading)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsMichaelsCar.VehicleIndex)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SET_VEHICLE_NAME_DEBUG(vsMichaelsCar.VehicleIndex, "RC_Michaels_Car")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Creating replay checkpoint vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL()), ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsMichaelsCar, TRUE, FALSE, CHAR_MICHAEL)
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_HOME
|
|
|
|
FailFlags[MISSION_FAIL_JIMMY_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_JIMMY_LEFT_BEHIND] = TRUE
|
|
|
|
FailFlags[MISSION_FAIL_TRACEY_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_TRACEY_LEFT_BEHIND] = TRUE
|
|
|
|
FailFlags[MISSION_FAIL_AMANDA_DEAD] = TRUE
|
|
FailFlags[MISSION_FAIL_AMANDA_LEFT_BEHIND] = TRUE
|
|
|
|
FailFlags[MISSION_FAIL_FAMILY_LEFT_BEHIND] = TRUE
|
|
|
|
IF HAS_MISSION_PED_BEEN_CREATED(psJimmy, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_JIMMY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psTracey, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_TRACEY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psAmanda, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_AMANDA)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
|
|
IF IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE() //and snapshot vehicle data exists
|
|
|
|
REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL()
|
|
|
|
IF HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED()
|
|
|
|
vsMichaelsCar.VehicleIndex = CREATE_REPLAY_CHECKPOINT_VEHICLE(vsMichaelsCar.vPosition, vsMichaelsCar.fHeading)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsMichaelsCar.VehicleIndex)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SET_VEHICLE_NAME_DEBUG(vsMichaelsCar.VehicleIndex, "RC_Michaels_Car")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Creating replay checkpoint vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_REPLAY_CHECKPOINT_VEHICLE_MODEL()), ".")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsMichaelsCar, TRUE, FALSE, CHAR_MICHAEL)
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_END
|
|
|
|
IF HAS_MISSION_PED_BEEN_CREATED(psJimmy, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_JIMMY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psTracey, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_TRACEY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psAmanda, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_AMANDA)
|
|
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsMichaelsCar, TRUE, FALSE, CHAR_MICHAEL)
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
DEFAULT
|
|
iSetupProgress++
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
SET_JIMMY_PED_COMPONENT_VARIATIONS(psJimmy.bComponentVariationsSet)
|
|
SET_TRACEY_PED_COMPONENT_VARIATIONS(psTracey.bComponentVariationsSet)
|
|
SET_AMANDA_PED_COMPONENT_VARIATIONS(psAmanda.bComponentVariationsSet)
|
|
SET_FABIEN_PED_COMPONENT_VARIATIONS(psFabien.bComponentVariationsSet)
|
|
SET_TATGUY_PED_COMPONENT_VARIATIONS(psTatguy.bComponentVariationsSet)
|
|
|
|
SWITCH eMissionStage
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_1
|
|
CASE MISSION_STAGE_PIERCE_LAZLOW
|
|
SET_LAZLOW_PED_COMPONENT_VARIATIONS(psLazlow.bComponentVariationsSet, FALSE, FALSE, FALSE, FALSE, FALSE)
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_2
|
|
CASE MISSION_STAGE_TATTOO_LAZLOW
|
|
SET_LAZLOW_PED_COMPONENT_VARIATIONS(psLazlow.bComponentVariationsSet, TRUE, TRUE, FALSE, FALSE, FALSE)
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_3
|
|
CASE MISSION_STAGE_CUT_LAZLOW_HAIR
|
|
SET_LAZLOW_PED_COMPONENT_VARIATIONS(psLazlow.bComponentVariationsSet, TRUE, TRUE, FALSE, TRUE, bChestTattoo)
|
|
BREAK
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_4
|
|
BREAK
|
|
CASE MISSION_STAGE_DRIVE_TO_SHRINK
|
|
|
|
//fix for B*1918478, read Lazlow's tattoo info from a global int when retrying this stage
|
|
IF ( bStageReplayed = TRUE )
|
|
IF ( g_replay.iReplayInt[0] = ENUM_TO_INT(TATTOOING_CHEST) )
|
|
bChestTattoo = TRUE
|
|
ELIF ( g_replay.iReplayInt[0] = ENUM_TO_INT(TATTOOING_BACK) )
|
|
bChestTattoo = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_LAZLOW_PED_COMPONENT_VARIATIONS(psLazlow.bComponentVariationsSet, TRUE, TRUE, TRUE, TRUE, bChestTattoo)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
|
|
IF ( iSetupProgress = 5 )
|
|
|
|
DISABLE_CELLPHONE(FALSE)
|
|
|
|
REMOVE_PED_FOR_DIALOGUE(FAM6Conversation, 0) //Michael
|
|
REMOVE_PED_FOR_DIALOGUE(FAM6Conversation, 1) //Jimmy
|
|
REMOVE_PED_FOR_DIALOGUE(FAM6Conversation, 2) //Tracey/Lazlow
|
|
REMOVE_PED_FOR_DIALOGUE(FAM6Conversation, 4) //Amanda
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
ADD_PED_FOR_DIALOGUE(FAM6Conversation, 0, PLAYER_PED_ID(), "MICHAEL")
|
|
ENDIF
|
|
|
|
SWITCH eStage
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
CASE MISSION_STAGE_DRIVE_TO_TRACEY
|
|
CASE MISSION_STAGE_DRIVE_TO_SHRINK
|
|
CASE MISSION_STAGE_DRIVE_HOME
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
ADD_PED_FOR_DIALOGUE(FAM6Conversation, 1, psJimmy.PedIndex, "JIMMY")
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
ADD_PED_FOR_DIALOGUE(FAM6Conversation, 2, psTracey.PedIndex, "TRACEY")
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
ADD_PED_FOR_DIALOGUE(FAM6Conversation, 4, psAmanda.PedIndex, "AMANDA")
|
|
ENDIF
|
|
|
|
//add peds here
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_PIERCE_LAZLOW
|
|
CASE MISSION_STAGE_TATTOO_LAZLOW
|
|
CASE MISSION_STAGE_CUT_LAZLOW_HAIR
|
|
|
|
DISABLE_CELLPHONE(TRUE)
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
ADD_PED_FOR_DIALOGUE(FAM6Conversation, 2, psLazlow.PedIndex, "LAZLOW")
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
DEFAULT
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
SWITCH eStage
|
|
CASE MISSION_STAGE_PRE_INTRO
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P1
|
|
CASE MISSION_STAGE_TIMELAPSE
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P2
|
|
CASE MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_1
|
|
CASE MISSION_STAGE_PIERCE_LAZLOW
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_2
|
|
CASE MISSION_STAGE_TATTOO_LAZLOW
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_3
|
|
CASE MISSION_STAGE_CUT_LAZLOW_HAIR
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_4
|
|
CASE MISSION_STAGE_CUTSCENE_SHRINK
|
|
CASE MISSION_STAGE_CUTSCENE_END
|
|
DISPLAY_HUD(FALSE)
|
|
DISPLAY_RADAR(FALSE)
|
|
BREAK
|
|
|
|
DEFAULT
|
|
DISPLAY_HUD(TRUE)
|
|
DISPLAY_RADAR(TRUE)
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
SWITCH eStage
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_1
|
|
CASE MISSION_STAGE_PIERCE_LAZLOW
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_2
|
|
CASE MISSION_STAGE_TATTOO_LAZLOW
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_3
|
|
CASE MISSION_STAGE_CUT_LAZLOW_HAIR
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_4
|
|
SET_MAX_WANTED_LEVEL(0)
|
|
SET_CREATE_RANDOM_COPS(FALSE)
|
|
SET_WANTED_LEVEL_MULTIPLIER(0.0)
|
|
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0)
|
|
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
|
|
BREAK
|
|
DEFAULT
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
SET_CREATE_RANDOM_COPS(TRUE)
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
DISABLE_TAXI_HAILING(FALSE) //enable taxi hailing for every stage by default
|
|
|
|
SWITCH eStage
|
|
CASE MISSION_STAGE_DRIVE_HOME
|
|
DISABLE_TAXI_HAILING(TRUE) //disable taxi hailing for drive home stage, see B*1715392
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
IF ( iSetupProgress = 6 )
|
|
|
|
//stage was skipped to or is being replayed
|
|
IF ( bStageSkippedTo = TRUE OR bStageReplayed = TRUE )
|
|
|
|
IF ( bStageReplayed = TRUE )
|
|
|
|
END_REPLAY_SETUP(NULL, DEFAULT, FALSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling END_REPLAY_SETUP().")
|
|
#ENDIF
|
|
|
|
ELSE
|
|
|
|
NEW_LOAD_SCENE_START_SPHERE(GET_ENTITY_COORDS(PLAYER_PED_ID()), 20.0)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling NEW_LOAD_SCENE_START_SPHERE() at coordinates ", MissionPosition.vPosition, " for mission replay or stage skip. This might take a while to load.")
|
|
#ENDIF
|
|
|
|
INT iLoadSceneTimer = GET_GAME_TIMER() + 15000
|
|
|
|
WHILE IS_NEW_LOAD_SCENE_ACTIVE()
|
|
AND NOT IS_NEW_LOAD_SCENE_LOADED()
|
|
AND GET_GAME_TIMER() < iLoadSceneTimer
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Load scene timer: ", iLoadSceneTimer - GET_GAME_TIMER(), ".")
|
|
#ENDIF
|
|
|
|
WAIT(0)
|
|
|
|
ENDWHILE
|
|
|
|
NEW_LOAD_SCENE_STOP()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling NEW_LOAD_SCENE_STOP().")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
|
|
//handle fade in for each mission stage
|
|
//some stages start with or require a fade out
|
|
SWITCH eStage
|
|
|
|
CASE MISSION_STAGE_PRE_INTRO
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P1
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P2
|
|
CASE MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
CASE MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
CASE MISSION_STAGE_DRIVE_TO_TRACEY
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_1
|
|
CASE MISSION_STAGE_PIERCE_LAZLOW
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_2
|
|
CASE MISSION_STAGE_TATTOO_LAZLOW
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_3
|
|
CASE MISSION_STAGE_CUT_LAZLOW_HAIR
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_4
|
|
CASE MISSION_STAGE_DRIVE_TO_SHRINK
|
|
CASE MISSION_STAGE_CUTSCENE_SHRINK
|
|
CASE MISSION_STAGE_CUTSCENE_END
|
|
CASE MISSION_STAGE_DRIVE_HOME
|
|
|
|
//do not fade in, mission stage will handle a fade in from fade out
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Halting loading screen fade in for skip to a mission stage that will fade the screen in.")
|
|
#ENDIF
|
|
|
|
BREAK
|
|
|
|
DEFAULT
|
|
|
|
//fade in
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling a loading screen fade in.")
|
|
#ENDIF
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
IF ( iSetupProgress = 7 )
|
|
|
|
SWITCH eStage
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_BEAN_MACHINE), "STAGE 0: DRIVE TO BEAN", FALSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_BEAN_MACHINE), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_CUTSCENE_BEAN_MACHINE), "STAGE 1: BEAN CUTSCENE", FALSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_CUTSCENE_BEAN_MACHINE), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_TRACEY
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_TRACEY), "STAGE 2: DRIVE TO TRACEY", FALSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_TRACEY), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_PIERCE_LAZLOW
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_PIERCE_LAZLOW), "STAGE 3: DADDY ISSUES", FALSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_PIERCE_LAZLOW), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_SHRINK
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_SHRINK), "STAGE 4: DRIVE TO SHRINK", FALSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_SHRINK), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
BREAK
|
|
|
|
|
|
CASE MISSION_STAGE_DRIVE_HOME
|
|
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_HOME), "STAGE 5: SHRINK CUTSCENE", TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting replay mid-mission checkpoint to ", ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_HOME), " for stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
IF ( iSetupProgress = 8 )
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished mission stage loading for ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eStage), ".")
|
|
#ENDIF
|
|
|
|
bStageLoaded = TRUE
|
|
bStageReplayed = FALSE
|
|
bStageSkippedTo = FALSE
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
iSetupProgress++
|
|
|
|
ENDIF
|
|
|
|
IF ( iSetupProgress = 9 )
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC MISSION_CLEANUP()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Starting mission cleanup.")
|
|
DELETE_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
IF ( bReplayStartEventTriggered = TRUE )
|
|
REPLAY_STOP_EVENT()
|
|
ENDIF
|
|
|
|
CLEANUP_PED(psJimmy, IS_SCREEN_FADED_OUT(), FALSE)
|
|
CLEANUP_PED(psTracey, IS_SCREEN_FADED_OUT(), FALSE)
|
|
CLEANUP_PED(psAmanda, IS_SCREEN_FADED_OUT(), FALSE)
|
|
CLEANUP_PED(psFabien, IS_SCREEN_FADED_OUT(), FALSE)
|
|
CLEANUP_PED(psLazlow, IS_SCREEN_FADED_OUT(), FALSE)
|
|
CLEANUP_PED(psHipster, IS_SCREEN_FADED_OUT(), FALSE)
|
|
CLEANUP_PED(psTatguy, IS_SCREEN_FADED_OUT(), FALSE)
|
|
|
|
IF DOES_ENTITY_EXIST(osLeftDoorDummy.ObjectIndex)
|
|
REMOVE_MODEL_HIDE(osLeftDoorDummy.vPosition, 1.0, osLeftDoorDummy.ModelName)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osRightDoorDummy.ObjectIndex)
|
|
REMOVE_MODEL_HIDE(osRightDoorDummy.vPosition, 1.0, osRightDoorDummy.ModelName)
|
|
ENDIF
|
|
|
|
CLEANUP_MISSION_OBJECT(osMug, IS_SCREEN_FADED_OUT())
|
|
CLEANUP_MISSION_OBJECT(osShirt, IS_SCREEN_FADED_OUT())
|
|
CLEANUP_MISSION_OBJECT(osLaptop, IS_SCREEN_FADED_OUT())
|
|
CLEANUP_MISSION_OBJECT(osScissors, IS_SCREEN_FADED_OUT())
|
|
CLEANUP_MISSION_OBJECT(osPonyTail, IS_SCREEN_FADED_OUT())
|
|
CLEANUP_MISSION_OBJECT(osPiercingGun, IS_SCREEN_FADED_OUT())
|
|
CLEANUP_MISSION_OBJECT(osTattooNeedle, IS_SCREEN_FADED_OUT())
|
|
CLEANUP_MISSION_OBJECT(osLeftDoorDummy, IS_SCREEN_FADED_OUT())
|
|
CLEANUP_MISSION_OBJECT(osRightDoorDummy, IS_SCREEN_FADED_OUT())
|
|
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxHair)
|
|
STOP_PARTICLE_FX_LOOPED(ptfxHair)
|
|
ENDIF
|
|
|
|
IF NOT HAS_SOUND_FINISHED(iTattooSoundID)
|
|
STOP_SOUND(iTattooSoundID)
|
|
ENDIF
|
|
|
|
STOP_AUDIO_SCENES()
|
|
REMOVE_PTFX_ASSET()
|
|
RELEASE_SCRIPT_AUDIO_BANK()
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov)
|
|
|
|
IF IS_PC_VERSION()
|
|
SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(mov_kb)
|
|
ENDIF
|
|
|
|
KillAllConversations()
|
|
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(GET_NPC_VEH_MODEL(CHAR_AMANDA), FALSE)
|
|
SET_VEHICLE_MODEL_IS_SUPPRESSED(GET_PLAYER_VEH_MODEL(CHAR_MICHAEL), FALSE)
|
|
|
|
IF DOES_CAM_EXIST(AnimatedCamera)
|
|
DESTROY_CAM(AnimatedCamera)
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
DESTROY_CAM(ScriptedCamera)
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
DISPLAY_HUD(TRUE)
|
|
DISPLAY_RADAR(TRUE)
|
|
|
|
DISABLE_CELLPHONE(FALSE)
|
|
DISABLE_TAXI_HAILING(FALSE)
|
|
DISABLE_VEHICLE_GEN_ON_MISSION(FALSE)
|
|
|
|
LOCK_SHOP_DOORS(TATTOO_PARLOUR_01_HW, FALSE)
|
|
SET_SHOP_LOCATES_ARE_BLOCKED(TATTOO_PARLOUR_01_HW, FALSE)
|
|
SET_SHOP_DIALOGUE_IS_BLOCKED(TATTOO_PARLOUR_01_HW, FALSE)
|
|
SET_SHOP_IS_OPEN_FOR_BUSINESS(TATTOO_PARLOUR_01_HW, TRUE)
|
|
SET_SHOP_HAS_RUN_ENTRY_INTRO(TATTOO_PARLOUR_01_HW, FALSE)
|
|
SET_SHOP_IS_TEMPORARILY_UNAVAILABLE(TATTOO_PARLOUR_01_HW, FALSE)
|
|
FORCE_SHOP_CLEANUP(TATTOO_PARLOUR_01_HW)
|
|
|
|
SET_INTERIOR_DISABLED(INTERIOR_V_PSYCHEOFFICE, TRUE)
|
|
|
|
SET_MAX_WANTED_LEVEL(5)
|
|
SET_CREATE_RANDOM_COPS(TRUE)
|
|
SET_WANTED_LEVEL_MULTIPLIER(1.0)
|
|
|
|
CLEAR_WEATHER_TYPE_PERSIST()
|
|
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE()
|
|
REMOVE_ROAD_NODE_SPEED_ZONE(iSpeedZone)
|
|
REMOVE_SCENARIO_BLOCKING_AREA(BeanMachineScenarioBlockingIndex)
|
|
REMOVE_SCENARIO_BLOCKING_AREA(TattooParlorScenarioBlockingIndex)
|
|
|
|
CLEANUP_PC_CONTROLS()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Finished mission cleanup.")
|
|
#ENDIF
|
|
|
|
ENDPROC
|
|
|
|
//|=============================== MISSION STAGES FUNCTIONS ==============================|
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_PRE_INTRO_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
IF GET_IS_TASK_ACTIVE(PLAYER_PED_ID(), CODE_TASK_EXIT_VEHICLE)
|
|
OR GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_LEAVE_VEHICLE) = PERFORMING_TASK
|
|
OR GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_LEAVE_ANY_VEHICLE) = PERFORMING_TASK
|
|
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
REQUEST_ANIM_DICT("missfam2mcs_intp1")
|
|
|
|
REQUEST_MODEL(osLeftDoorDummy.ModelName)
|
|
REQUEST_MODEL(osRightDoorDummy.ModelName)
|
|
|
|
IF HAS_ANIM_DICT_LOADED("missfam2mcs_intp1")
|
|
AND HAS_MODEL_LOADED(osLeftDoorDummy.ModelName)
|
|
AND HAS_MODEL_LOADED(osRightDoorDummy.ModelName)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iHouseEnterSceneID)
|
|
|
|
STOP_FIRE_IN_RANGE(<< -817.305, 179.330, 71.241 >>, 20.0)
|
|
REMOVE_DECALS_IN_RANGE(<< -817.305, 179.330, 71.241 >>, 20.0)
|
|
CLEAR_AREA_OF_PROJECTILES(<< -817.305, 179.330, 71.241 >>, 20.0)
|
|
REMOVE_PARTICLE_FX_IN_RANGE(<< -817.305, 179.330, 71.241 >>, 20.0)
|
|
|
|
iHouseEnterSceneID = CREATE_SYNCHRONIZED_SCENE(<< -817.305, 179.330, 71.225 >>, << 0.0, 0.0, -113.0 >>)
|
|
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(iHouseEnterSceneID, TRUE)
|
|
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED)
|
|
HIDE_PED_WEAPON_FOR_SCRIPTED_CUTSCENE(PLAYER_PED_ID(), TRUE)
|
|
|
|
SET_FORCE_FOOTSTEP_UPDATE(PLAYER_PED_ID(), TRUE)
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iHouseEnterSceneID, "missfam2mcs_intp1", "fam_2_int_p1_michael",
|
|
INSTANT_BLEND_IN, INSTANT_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
|
|
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_F_L))
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_M_MANSION_F_L), 1.0, FALSE, FALSE)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_M_MANSION_F_L), DOORSTATE_LOCKED, FALSE, TRUE)
|
|
ENDIF
|
|
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_F_R))
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_M_MANSION_F_R), -1.0, FALSE, FALSE)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_M_MANSION_F_R), DOORSTATE_LOCKED, FALSE, TRUE)
|
|
ENDIF
|
|
|
|
CREATE_MODEL_HIDE(osLeftDoorDummy.vPosition, 1.0, osLeftDoorDummy.ModelName, FALSE)
|
|
CREATE_MODEL_HIDE(osRightDoorDummy.vPosition, 1.0, osRightDoorDummy.ModelName, FALSE)
|
|
|
|
osLeftDoorDummy.ObjectIndex = CREATE_OBJECT(osLeftDoorDummy.ModelName, <<-816.72, 179.10, 72.83>>)
|
|
osRightDoorDummy.ObjectIndex = CREATE_OBJECT(osRightDoorDummy.ModelName, <<-816.11, 177.51, 72.83>>)
|
|
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(osLeftDoorDummy.ObjectIndex, iHouseEnterSceneID, "fam_2_int_p1_doorl", "missfam2mcs_intp1", INSTANT_BLEND_IN, INSTANT_BLEND_OUT)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(osRightDoorDummy.ObjectIndex, iHouseEnterSceneID, "fam_2_int_p1_doorr", "missfam2mcs_intp1", INSTANT_BLEND_IN, INSTANT_BLEND_OUT)
|
|
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(osLeftDoorDummy.ObjectIndex)
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(osRightDoorDummy.ObjectIndex)
|
|
|
|
DESTROY_ALL_CAMS()
|
|
|
|
ScriptedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE)
|
|
|
|
PLAY_SYNCHRONIZED_CAM_ANIM(ScriptedCamera, iHouseEnterSceneID, "fam5_intro_cam", "missfam2mcs_intp1")
|
|
|
|
CLEAR_HELP(TRUE)
|
|
DISPLAY_HUD(FALSE)
|
|
DISPLAY_RADAR(FALSE)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(osLeftDoorDummy.ModelName)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(osRightDoorDummy.ModelName)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
|
|
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
|
|
|
|
IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE())
|
|
AND IS_VEHICLE_DRIVEABLE(GET_PLAYERS_LAST_VEHICLE(), TRUE) AND NOT IS_ENTITY_ON_FIRE(GET_PLAYERS_LAST_VEHICLE())
|
|
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE())
|
|
SET_ENTITY_AS_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE())
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting last player vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(GET_PLAYERS_LAST_VEHICLE())), " as mission entity.")
|
|
#ENDIF
|
|
|
|
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_MISSION_VEH)
|
|
SET_VEHICLE_DOORS_SHUT(GET_PLAYERS_LAST_VEHICLE())
|
|
SET_VEHICLE_ENGINE_ON(GET_PLAYERS_LAST_VEHICLE(), FALSE, TRUE)
|
|
SET_ENTITY_COORDS(GET_PLAYERS_LAST_VEHICLE(), << -825.8718, 157.3143, 69.4619 >>)
|
|
SET_ENTITY_HEADING(GET_PLAYERS_LAST_VEHICLE(), 90.0)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(GET_PLAYERS_LAST_VEHICLE())
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CLEAR_AREA(<< -817.305, 179.330, 71.241 >>, 500.0, TRUE)
|
|
CLEAR_AREA_OF_PEDS(<< -817.305, 179.330, 71.241 >>, 500.0)
|
|
CLEAR_AREA_OF_COPS(<< -817.305, 179.330, 71.241 >>, 500.0)
|
|
CLEAR_AREA_OF_VEHICLES(<< -817.305, 179.330, 71.241 >>, 500.0)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 4
|
|
|
|
REQUEST_CUTSCENE("fam_6_int")
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
bCutsceneAssetsRequested = TRUE
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting cutscene ped components for intro cutscene peds during stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), ".")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting bCutsceneAssetsRequested to ", bCutsceneAssetsRequested, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
|
|
IF ( bHouseEntryCutsceneSkipped = FALSE )
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iHouseEnterSceneID)
|
|
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(iHouseEnterSceneID) >= 0.99
|
|
|
|
IF ( bCutsceneAssetsRequested = TRUE )
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY()
|
|
|
|
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
|
|
|
|
bHouseEntryCutsceneSkipped = TRUE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Pre intro cutscene skipped by the player.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
|
|
IF ( bCutsceneAssetsRequested = TRUE )
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
|
|
SET_FORCE_FOOTSTEP_UPDATE(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
|
|
STOP_SYNCHRONIZED_ENTITY_ANIM(osLeftDoorDummy.ObjectIndex, 0, FALSE)
|
|
STOP_SYNCHRONIZED_ENTITY_ANIM(osRightDoorDummy.ObjectIndex, 0, FALSE)
|
|
|
|
IF DOES_ENTITY_EXIST(osLeftDoorDummy.ObjectIndex)
|
|
DELETE_OBJECT(osLeftDoorDummy.ObjectIndex)
|
|
REMOVE_MODEL_HIDE(osLeftDoorDummy.vPosition, 1.0, osLeftDoorDummy.ModelName)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osRightDoorDummy.ObjectIndex)
|
|
DELETE_OBJECT(osRightDoorDummy.ObjectIndex)
|
|
REMOVE_MODEL_HIDE(osRightDoorDummy.vPosition, 1.0, osRightDoorDummy.ModelName)
|
|
ENDIF
|
|
|
|
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_F_L))
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_M_MANSION_F_L), 0.0, FALSE, FALSE)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_M_MANSION_F_L), DOORSTATE_FORCE_UNLOCKED_THIS_FRAME, FALSE, TRUE)
|
|
ENDIF
|
|
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_F_R))
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_M_MANSION_F_R), 0.0, FALSE, FALSE)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_M_MANSION_F_R), DOORSTATE_FORCE_UNLOCKED_THIS_FRAME, FALSE, TRUE)
|
|
ENDIF
|
|
|
|
REMOVE_ANIM_DICT("missfam2mcs_intp1")
|
|
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
DESTROY_CAM(ScriptedCamera)
|
|
DESTROY_ALL_CAMS()
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 5
|
|
|
|
IF ( bHouseEntryCutsceneSkipped = FALSE )
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SET_FORCE_FOOTSTEP_UPDATE(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_CUTSCENE_INTRO_P1_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF HAS_REQUESTED_CUTSCENE_LOADED("fam_6_int")
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
START_CUTSCENE()
|
|
|
|
//REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ELSE
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1 //fade screen in if screen was faded out due to shit skip or debug skip
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
DESTROY_CAM(ScriptedCamera)
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
|
|
IF IS_VEHICLE_GEN_AVAILABLE(VEHGEN_MICHAEL_SAVEHOUSE)
|
|
AND DOES_ENTITY_EXIST(GET_VEHICLE_GEN_VEHICLE_INDEX(VEHGEN_MICHAEL_SAVEHOUSE))
|
|
AND IS_VEHICLE_DRIVEABLE(GET_VEHICLE_GEN_VEHICLE_INDEX(VEHGEN_MICHAEL_SAVEHOUSE), TRUE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Vehicle gen vehicle VEHGEN_MICHAEL_SAVEHOUSE is available for mission use.")
|
|
#ENDIF
|
|
|
|
IF NOT DOES_ENTITY_BELONG_TO_THIS_SCRIPT(GET_VEHICLE_GEN_VEHICLE_INDEX(VEHGEN_MICHAEL_SAVEHOUSE))
|
|
|
|
SET_ENTITY_AS_MISSION_ENTITY(GET_VEHICLE_GEN_VEHICLE_INDEX(VEHGEN_MICHAEL_SAVEHOUSE), TRUE, TRUE)
|
|
|
|
vsMichaelsCar.VehicleIndex = GET_VEHICLE_GEN_VEHICLE_INDEX(VEHGEN_MICHAEL_SAVEHOUSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting vehicle gen vehicle VEHGEN_MICHAEL_SAVEHOUSE as mission entity.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
|
|
STOP_FIRE_IN_RANGE(GET_ENTITY_COORDS(vsMichaelsCar.VehicleIndex), 2.5)
|
|
SET_ENTITY_HEALTH(vsMichaelsCar.VehicleIndex, GET_ENTITY_HEALTH(vsMichaelsCar.VehicleIndex) + 500)
|
|
SET_VEHICLE_ENGINE_HEALTH(vsMichaelsCar.VehicleIndex, GET_VEHICLE_ENGINE_HEALTH(vsMichaelsCar.VehicleIndex) + 500)
|
|
SET_VEHICLE_PETROL_TANK_HEALTH(vsMichaelsCar.VehicleIndex, GET_VEHICLE_PETROL_TANK_HEALTH(vsMichaelsCar.VehicleIndex) + 500)
|
|
|
|
SET_VEHICLE_AS_MISSION_CRITICAL(vsMichaelsCar, TRUE)
|
|
SET_VEHICLE_ENGINE_ON(vsMichaelsCar.VehicleIndex, FALSE, TRUE)
|
|
SET_ENTITY_COORDS(vsMichaelsCar.VehicleIndex, vsMichaelsCar.vPosition)
|
|
SET_ENTITY_HEADING(vsMichaelsCar.VehicleIndex, vsMichaelsCar.fHeading)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsMichaelsCar.VehicleIndex)
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF IS_REPLAY_START_VEHICLE_AVAILABLE()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Replay start vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_REPLAY_START_VEHICLE_MODEL()), " is available.")
|
|
#ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(GET_PLAYERS_LAST_VEHICLE())
|
|
AND IS_VEHICLE_DRIVEABLE(GET_PLAYERS_LAST_VEHICLE(), TRUE) AND NOT IS_ENTITY_ON_FIRE(GET_PLAYERS_LAST_VEHICLE())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Last player vehicle is model ", GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(GET_PLAYERS_LAST_VEHICLE())), " which is allowed for mission.")
|
|
#ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE())
|
|
SET_ENTITY_AS_MISSION_ENTITY(GET_PLAYERS_LAST_VEHICLE())
|
|
ENDIF
|
|
|
|
vsMichaelsCar.VehicleIndex = GET_PLAYERS_LAST_VEHICLE()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting last player vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(GET_PLAYERS_LAST_VEHICLE())), " as mission entity.")
|
|
#ENDIF
|
|
|
|
SET_VEHICLE_AS_MISSION_CRITICAL(vsMichaelsCar, TRUE)
|
|
SET_ENTITY_HEALTH(vsMichaelsCar.VehicleIndex, GET_ENTITY_HEALTH(vsMichaelsCar.VehicleIndex) + 500)
|
|
SET_VEHICLE_ENGINE_HEALTH(vsMichaelsCar.VehicleIndex, GET_VEHICLE_ENGINE_HEALTH(vsMichaelsCar.VehicleIndex) + 500)
|
|
SET_VEHICLE_PETROL_TANK_HEALTH(vsMichaelsCar.VehicleIndex, GET_VEHICLE_PETROL_TANK_HEALTH(vsMichaelsCar.VehicleIndex) + 500)
|
|
STOP_FIRE_IN_RANGE(GET_ENTITY_COORDS(vsMichaelsCar.VehicleIndex), 2.5)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_ENGINE_ON(vsMichaelsCar.VehicleIndex, FALSE, TRUE)
|
|
SET_ENTITY_COORDS(vsMichaelsCar.VehicleIndex, vsMichaelsCar.vPosition)
|
|
SET_ENTITY_HEADING(vsMichaelsCar.VehicleIndex, vsMichaelsCar.fHeading)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsMichaelsCar.VehicleIndex)
|
|
|
|
ELSE
|
|
|
|
DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_MISSION_VEH)
|
|
SET_VEHICLE_DOORS_SHUT(GET_PLAYERS_LAST_VEHICLE(), TRUE)
|
|
SET_VEHICLE_ENGINE_ON(GET_PLAYERS_LAST_VEHICLE(), FALSE, TRUE)
|
|
SET_MISSION_VEHICLE_GEN_VEHICLE(GET_PLAYERS_LAST_VEHICLE(), << -825.8718, 157.3143, 69.4619 >>, 90.0)
|
|
CLEAR_MUST_LEAVE_AREA_VEHICLE_GEN_FLAG(VEHGEN_MISSION_VEH)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting last player vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(GET_PLAYERS_LAST_VEHICLE())), " as mission vehicle gen vehicle.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex)
|
|
OVERRIDE_REPLAY_CHECKPOINT_VEHICLE(vsMichaelsCar.VehicleIndex)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Overriding replay checkpoint vehicle with vehicle with model ", GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(vsMichaelsCar.VehicleIndex)), ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
DISABLE_VEHICLE_GEN_ON_MISSION(TRUE)
|
|
//DELETE_VEHICLE_GEN_VEHICLE(VEHGEN_MICHAEL_SAVEHOUSE)
|
|
//DELETE_ALL_SCRIPT_CREATED_PLAYER_VEHICLES(CHAR_MICHAEL)
|
|
|
|
CLEAR_AREA(MissionPosition.vPosition, 500.0, TRUE)
|
|
CLEAR_AREA_OF_PEDS(MissionPosition.vPosition, 500.0)
|
|
CLEAR_AREA_OF_COPS(MissionPosition.vPosition, 500.0)
|
|
CLEAR_AREA_OF_VEHICLES(MissionPosition.vPosition, 500.0)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE,DEFAULT,FALSE) //Don't disable multihead fade after intro_P1
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF NOT DOES_CAM_EXIST(ScriptedCamera)
|
|
ScriptedCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE)
|
|
SET_CAM_PARAMS(ScriptedCamera, <<-776.580688,181.103302,72.205902>>,<<11.813498,0.000000,95.727486>>,46.725498)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
// REPLAY_STOP_EVENT()
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) //if cutscene was skipped, fade out and don't fade in
|
|
bCutsceneSkipped = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_TIMELAPSE_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF ( bTimelapseCutsceneSkipped = FALSE )
|
|
|
|
IF REQUEST_SCRIPT_AUDIO_BANK("TIME_LAPSE")
|
|
|
|
STRUCTTIMELAPSE sLocalTimelapse
|
|
|
|
sTimelapse = sLocalTimelapse //reset timelapse struct
|
|
sTimelapse.splineCamera = CREATE_CAM("DEFAULT_SPLINE_CAMERA") //create timelapse camera
|
|
|
|
ADD_CAM_SPLINE_NODE(sTimelapse.splineCamera, <<-776.5807, 181.1033, 72.2059>>,<<11.8135, -0.0000, 95.7275>>, 5500)
|
|
ADD_CAM_SPLINE_NODE(sTimelapse.splineCamera, <<-776.8288, 181.0926, 72.2551>>,<<11.8134, -0.0000, 95.7284>>, 5500)
|
|
SET_CAM_FOV(sTimelapse.splineCamera, 46.7255)
|
|
SET_CAM_ACTIVE(sTimelapse.splineCamera, TRUE)
|
|
|
|
SET_TODS_CUTSCENE_RUNNING(sTimelapse, TRUE)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
INT iCurrentHour, iStartTime, iEndTime
|
|
|
|
iCurrentHour = GET_CLOCK_HOURS()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Current time hour is ", iCurrentHour, ".")
|
|
#ENDIF
|
|
|
|
iTODAdditionalHours = 0
|
|
|
|
GET_SP_MISSION_TOD_WINDOW_TIME(SP_MISSION_FAMILY_6, iStartTime, iEndTime)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iStarttime is ", iStartTime, " and iEndTime is ", iEndTime, ".")
|
|
#ENDIF
|
|
|
|
IF iCurrentHour < iEndTime AND iCurrentHour >= iEndTime - 2
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Current time hour needs additional hours added for the skip.")
|
|
#ENDIF
|
|
iTODAdditionalHours = 24
|
|
ELSE
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Current time hour does not need additional hours added for the skip.")
|
|
#ENDIF
|
|
iTODAdditionalHours = 0
|
|
ENDIF
|
|
|
|
WARP_PED(PLAYER_PED_ID(), MissionPosition.vPosition, MissionPosition.fHeading, FALSE, FALSE, FALSE)
|
|
|
|
bTimelapseTriggered = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
REQUEST_CUTSCENE("fam_6_int_p3_t7")
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
bCutsceneAssetsRequested = TRUE
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting cutscene ped components for intro cutscene peds during stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), ".")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting bCutsceneAssetsRequested to ", bCutsceneAssetsRequested, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF ( bTimelapseCutsceneSkipped = FALSE )
|
|
|
|
IF DOES_CAM_EXIST(sTimelapse.splineCamera)
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
DESTROY_CAM(ScriptedCamera)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF SKIP_TO_TIME_DURING_SPLINE_CAMERA(IDEAL_MISSION_START_TIME, 0, "EXTRASUNNY", "cirrocumulus", sTimelapse, DEFAULT, iTODAdditionalHours)
|
|
|
|
RELEASE_NAMED_SCRIPT_AUDIO_BANK("TIME_LAPSE")
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
IF ( bCutsceneAssetsRequested = TRUE )
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY()
|
|
|
|
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
|
|
|
|
bTimelapseCutsceneSkipped = TRUE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Timelapse cutscene skipped by the player.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
|
|
IF NOT HAS_SOUND_FINISHED(sTimelapse.iSplineStageSound)
|
|
STOP_SOUND(sTimelapse.iSplineStageSound)
|
|
RELEASE_NAMED_SCRIPT_AUDIO_BANK("TIME_LAPSE")
|
|
ENDIF
|
|
|
|
IF ( bCutsceneAssetsRequested = TRUE )
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
RETURN TRUE
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_CUTSCENE_INTRO_P2_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF HAS_REQUESTED_CUTSCENE_LOADED("fam_6_int_p3_t7")
|
|
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psJimmy.PedIndex, "Jimmy", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, psJimmy.ModelName)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
START_CUTSCENE()
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ELSE
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1 //fade screen in if screen was faded out due to shit skip or debug skip
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
IF ( bTimelapseTriggered = TRUE )
|
|
SET_TODS_CUTSCENE_RUNNING(sTimelapse, FALSE)
|
|
SET_CLOCK_TIME(IDEAL_MISSION_START_TIME, 0, 0)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting clock time after time lapse cutscene.")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
|
|
|
|
IF NOT HAS_SOUND_FINISHED(sTimelapse.iSplineStageSound)
|
|
STOP_SOUND(sTimelapse.iSplineStageSound)
|
|
RELEASE_NAMED_SCRIPT_AUDIO_BANK("TIME_LAPSE")
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
DESTROY_CAM(ScriptedCamera)
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
|
|
IF DOES_ENTITY_EXIST(osLeftDoorDummy.ObjectIndex)
|
|
DELETE_OBJECT(osLeftDoorDummy.ObjectIndex)
|
|
REMOVE_MODEL_HIDE(osLeftDoorDummy.vPosition, 1.0, osLeftDoorDummy.ModelName)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osRightDoorDummy.ObjectIndex)
|
|
DELETE_OBJECT(osRightDoorDummy.ObjectIndex)
|
|
REMOVE_MODEL_HIDE(osRightDoorDummy.vPosition, 1.0, osRightDoorDummy.ModelName)
|
|
ENDIF
|
|
|
|
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_F_L))
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_M_MANSION_F_L), 0.0, FALSE, FALSE)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_M_MANSION_F_L), DOORSTATE_FORCE_UNLOCKED_THIS_FRAME, FALSE, TRUE)
|
|
ENDIF
|
|
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_M_MANSION_F_R))
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_M_MANSION_F_R), 0.0, FALSE, FALSE)
|
|
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_M_MANSION_F_R), DOORSTATE_FORCE_UNLOCKED_THIS_FRAME, FALSE, TRUE)
|
|
ENDIF
|
|
|
|
REMOVE_ANIM_DICT("missfam2mcs_intp1") //remove anim dictionary from previous scripted cutscene
|
|
|
|
REQUEST_MODEL(osLaptop.ModelName)
|
|
REQUEST_MODEL(psAmanda.ModelName)
|
|
REQUEST_MODEL(psFabien.ModelName)
|
|
REQUEST_MODEL(psHipster.ModelName)
|
|
REQUEST_MODEL(vsAmandasCar.ModelName)
|
|
REQUEST_ANIM_DICT("missfam6leadinoutfam_6_mcs_1") //request assets for Bean Machine scene after the intro cutscene
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
//create Jimmy's ped during the intro mocap cutscene
|
|
IF NOT DOES_ENTITY_EXIST(psJimmy.PedIndex)
|
|
IF DOES_CUTSCENE_ENTITY_EXIST("Jimmy")
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Jimmy"))
|
|
|
|
psJimmy.PedIndex = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Jimmy"))
|
|
|
|
SET_MISSION_PED_PROPERTIES(psJimmy.PedIndex, RELGROUPHASH_PLAYER, FALSE, TRUE, FALSE, FALSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Set up properites for mission player ped Jimmy created in the intro cutscene.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
REPLAY_STOP_EVENT()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(17.2773 - GET_ENTITY_HEADING(PLAYER_PED_ID()))
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Michael.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
SEQUENCE_INDEX SequenceIndex
|
|
CLEAR_SEQUENCE_TASK(SequenceIndex)
|
|
OPEN_SEQUENCE_TASK(SequenceIndex)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -809.27, 179.55, 71.15 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -811.32, 180.11, 71.15 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -813.17, 179.48, 71.16 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -813.92, 179.22, 71.16 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_SUPPRESS_EXACT_STOP)
|
|
CLOSE_SEQUENCE_TASK(SequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), SequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(SequenceIndex)
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Jimmy")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Jimmy.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(psJimmy.PedIndex, << -819.95709, 177.42998, 70.60026 >>, PEDMOVE_WALK)
|
|
FORCE_PED_MOTION_STATE(psJimmy.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
ENDIF
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_BERD, 0, 0)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
|
|
IF ( bCutsceneSkipped = TRUE )
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
WARP_PED(psJimmy.PedIndex, psJimmy.vPosition, psJimmy.fHeading, FALSE, FALSE, FALSE)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(psJimmy.PedIndex, << -819.95709, 177.42998, 70.60026 >>, PEDMOVE_WALK)
|
|
FORCE_PED_MOTION_STATE(psJimmy.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
WARP_PED(PLAYER_PED_ID(), MissionPosition.vPosition, MissionPosition.fHeading, FALSE, TRUE, FALSE)
|
|
SEQUENCE_INDEX SequenceIndex
|
|
CLEAR_SEQUENCE_TASK(SequenceIndex)
|
|
OPEN_SEQUENCE_TASK(SequenceIndex)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -809.27, 179.55, 71.15 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -811.32, 180.11, 71.15 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -813.17, 179.48, 71.16 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -813.92, 179.22, 71.16 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_SUPPRESS_EXACT_STOP)
|
|
CLOSE_SEQUENCE_TASK(SequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), SequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(SequenceIndex)
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
ENDIF
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
|
|
WAIT(250)
|
|
|
|
ENDIF
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) //if cutscene was skipped, fade out and don't fade in
|
|
bCutsceneSkipped = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC MANAGE_CONVERSATIONS_DURING_GO_TO_BEAN_MACHINE()
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TOGO")
|
|
IF IS_SCREEN_FADED_IN() AND NOT IS_SCREEN_FADING_IN()
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_TOGO", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TOGO", TRUE)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_BEAN")
|
|
AND NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_BEAN2")
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psJimmy.PedIndex)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", PICK_STRING(bStageReplayInProgress, "FAM6_BEAN2", "FAM6_BEAN"), CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED(PICK_STRING(bStageReplayInProgress, "FAM6_BEAN2", "FAM6_BEAN"), TRUE)
|
|
bRunConversationPausingCheck = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//if main conversation was interrupted, resume it from the next label
|
|
IF ( bCurrentConversationInterrupted = TRUE )
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_JBAD")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JWARN")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT")
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_BEAN")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_BEAN2")
|
|
|
|
//play conversation for Jimmy saying cops were lost and it's safe to go to shrink
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JLOST_3")
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT") //this will only play if conversation to lose cops was triggered
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JLOST")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JLOST", CONV_PRIORITY_MEDIUM)
|
|
iCopsLostConversationCount++
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOST", TRUE)
|
|
IF ( iCopsLostConversationCount >= 3)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOST_3", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//resume the interrupted coversation
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
AND NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationLabel)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_BEAN") //resume only the main conversations
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_BEAN2")
|
|
|
|
|
|
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(FAM6Conversation, "FAM6AUD", CurrentConversationRoot, CurrentConversationLabel, CONV_PRIORITY_MEDIUM)
|
|
bCurrentConversationInterrupted = FALSE
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JBAD", FALSE) //mark all the interrupt conversations as not triggered
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOST", FALSE)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JWANT", FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
|
|
//resume paused conversations when player gets back in the car
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
//IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
//PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
//ENDIF
|
|
//ENDIF
|
|
|
|
ELSE //locates header blip does not exist
|
|
|
|
//play interrupt conversation when player becomes wanted
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
|
|
IF ( bCurrentConversationInterrupted = FALSE )
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_BEAN")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_BEAN2")
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_BEAN")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_BEAN2")
|
|
bCurrentConversationInterrupted = TRUE
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
CurrentConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF ( bCurrentConversationInterrupted = TRUE )
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT")
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JWANT", CONV_PRIORITY_HIGH)
|
|
iPlayerOffencesCount++
|
|
iLoseCopsReminderTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(10000, 12500)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JWANT", TRUE)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JLOSE_5")
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT")
|
|
IF GET_GAME_TIMER() - iLoseCopsReminderTimer > 0
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JLOSE", CONV_PRIORITY_MEDIUM)
|
|
iLoseCopsReminderCount++
|
|
iLoseCopsReminderTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(12500, 15000)
|
|
IF ( iLoseCopsReminderCount >= 5 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOSE_5", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//keep reseting those flags during wanted level as the player might be driving recklessly
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
|
|
ELSE
|
|
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
// IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
// PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
// ENDIF
|
|
//ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
//play interrupt conversations for player offences
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF ( GET_GAME_TIMER() - iPlayerOffenceTimer > 5000 )
|
|
|
|
//play conversation for player running over peds
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JBAD_5")
|
|
AND NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JWARN_6")
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF HAS_PLAYER_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
AND HAS_ENTITY_COLLIDED_WITH_ANYTHING(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
bPlayerHitPed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PED_SHOOTING(PLAYER_PED_ID()) //add more conditions here if needed
|
|
bPlayerActingBad = TRUE
|
|
ENDIF
|
|
|
|
IF ( bPlayerHitPed = TRUE OR bPlayerActingBad = TRUE )
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_BEAN")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_BEAN2")
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_BEAN")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_BEAN2")
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
CurrentConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
bCurrentConversationInterrupted = TRUE
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JBAD", CONV_PRIORITY_MEDIUM)
|
|
iPlayerOffencesCount++
|
|
iBadConversationCount++
|
|
bPlayerHitPed = FALSE
|
|
bPlayerActingBad = FALSE
|
|
iPlayerOffenceTimer = GET_GAME_TIMER()
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JBAD", TRUE)
|
|
IF ( iBadConversationCount >= 5 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JBAD_5", TRUE)
|
|
ENDIF
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_STEAL")
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF IS_PED_JACKING(PLAYER_PED_ID())
|
|
IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(psJimmy.PedIndex, PLAYER_PED_ID())
|
|
OR HAS_ENTITY_CLEAR_LOS_TO_ENTITY_IN_FRONT(psJimmy.PedIndex, PLAYER_PED_ID())
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_STEAL", CONV_PRIORITY_MEDIUM)
|
|
//
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_MCS1LI")
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
AND NOT IS_PED_INJURED(psFabien.PedIndex)
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF ( bLeadInTriggered = TRUE )
|
|
IF IS_ENTITY_PLAYING_ANIM(psAmanda.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_amanda")
|
|
OR IS_ENTITY_PLAYING_ANIM(psFabien.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_fabien")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_MCS1LI", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_MCS1LI", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_MOM")
|
|
IF ( bDestinationReached = TRUE AND bLeadInTriggered = FALSE )
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psJimmy.PedIndex) < 10.0
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_MOM", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_MOM", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_COME")
|
|
IF ( bDestinationReached = TRUE AND bLeadInTriggered = FALSE )
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psJimmy.PedIndex) < 10.0
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_COME", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_COME", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_MOM2")
|
|
IF ( bDestinationReached = TRUE AND bLeadInTriggered = FALSE )
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF GET_DISTANCE_BETWEEN_PEDS(PLAYER_PED_ID(), psJimmy.PedIndex) < 10.0
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_MOM2", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_MOM2", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF ( bRunConversationPausingCheck = TRUE )
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_PED_IN_VEHICLE(psJimmy.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psJimmy.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(psJimmy.PedIndex, PLAYER_PED_ID()) < 10
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC MANAGE_BEAN_MACHINE_SCENE(INT &iProgress)
|
|
|
|
SWITCH iProgress
|
|
|
|
CASE 0
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vBeanMachineScenePosition) < 225.0
|
|
|
|
iProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1 //create dealer ped and door object to animate
|
|
|
|
REQUEST_MODEL(osLaptop.ModelName)
|
|
REQUEST_MODEL(psAmanda.ModelName)
|
|
REQUEST_MODEL(psFabien.ModelName)
|
|
REQUEST_MODEL(psHipster.ModelName)
|
|
REQUEST_MODEL(vsAmandasCar.ModelName)
|
|
REQUEST_ANIM_DICT("missfam6leadinoutfam_6_mcs_1")
|
|
|
|
IF HAS_MODEL_LOADED(osLaptop.ModelName)
|
|
AND HAS_MODEL_LOADED(psAmanda.ModelName)
|
|
AND HAS_MODEL_LOADED(psFabien.ModelName)
|
|
AND HAS_MODEL_LOADED(psHipster.ModelName)
|
|
AND HAS_MODEL_LOADED(vsAmandasCar.ModelName)
|
|
AND HAS_ANIM_DICT_LOADED("missfam6leadinoutfam_6_mcs_1")
|
|
|
|
//CLEAR_AREA()
|
|
|
|
IF HAS_MISSION_VEHICLE_BEEN_CREATED(vsAmandasCar, FALSE, FALSE, CHAR_AMANDA)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psAmanda, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_AMANDA)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psFabien, FALSE, RELGROUPHASH_PLAYER, FALSE, NO_CHARACTER)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psHipster, FALSE, RELGROUPHASH_NO_RELATIONSHIP, FALSE, NO_CHARACTER)
|
|
AND HAS_MISSION_OBJECT_BEEN_CREATED(osLaptop) AND HAS_MISSION_OBJECT_BEEN_CREATED(osMug)
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vsAmandasCar.VehicleIndex)
|
|
SET_VEHICLE_AS_MISSION_CRITICAL(vsAmandasCar, TRUE)
|
|
LOWER_CONVERTIBLE_ROOF(vsAmandasCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vsAmandasCar.VehicleIndex, FALSE)
|
|
ENDIF
|
|
|
|
SET_FABIEN_PED_COMPONENT_VARIATIONS(psFabien.bComponentVariationsSet)
|
|
ADD_PED_FOR_DIALOGUE(FAM6Conversation, 4, psFabien.PedIndex, "FABIAN")
|
|
|
|
SET_AMANDA_PED_COMPONENT_VARIATIONS(psAmanda.bComponentVariationsSet)
|
|
ADD_PED_FOR_DIALOGUE(FAM6Conversation, 5, psAmanda.PedIndex, "AMANDA")
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
TASK_PLAY_ANIM_ADVANCED(psAmanda.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_loop_a_amanda",
|
|
vBeanMachineScenePosition, vBeanMachineSceneRotation, INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
|
|
-1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_LOOPING)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psAmanda.PedIndex)
|
|
SET_ENTITY_LOAD_COLLISION_FLAG(psAmanda.PedIndex, TRUE)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psAmanda.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psFabien.PedIndex)
|
|
TASK_PLAY_ANIM_ADVANCED(psFabien.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_loop_b_fabien",
|
|
vBeanMachineScenePosition, vBeanMachineSceneRotation, INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
|
|
-1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_LOOPING)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psFabien.PedIndex)
|
|
SET_ENTITY_LOAD_COLLISION_FLAG(psFabien.PedIndex, TRUE)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psFabien.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psHipster.PedIndex)
|
|
TASK_PLAY_ANIM_ADVANCED(psHipster.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_loop_c_laptop_girl",
|
|
vBeanMachineScenePosition, vBeanMachineSceneRotation, INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
|
|
-1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_LOOPING)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psHipster.PedIndex)
|
|
SET_ENTITY_LOAD_COLLISION_FLAG(psHipster.PedIndex, TRUE)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psHipster.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osLaptop.ObjectIndex)
|
|
IF NOT IS_ENTITY_DEAD(osLaptop.ObjectIndex)
|
|
IF NOT IS_PED_INJURED(psHipster.PedIndex)
|
|
ATTACH_ENTITY_TO_ENTITY(osLaptop.ObjectIndex, psHipster.PedIndex, GET_PED_BONE_INDEX(psHipster.PedIndex,BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osMug.ObjectIndex)
|
|
IF NOT IS_ENTITY_DEAD(osMug.ObjectIndex)
|
|
IF NOT IS_PED_INJURED(psFabien.PedIndex)
|
|
ATTACH_ENTITY_TO_ENTITY(osMug.ObjectIndex, psFabien.PedIndex, GET_PED_BONE_INDEX(psFabien.PedIndex, BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(osLaptop.ModelName)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(psAmanda.ModelName)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(psFabien.ModelName)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(psHipster.ModelName)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(vsAmandasCar.ModelName)
|
|
|
|
iProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF ( bLeadInTriggered = TRUE )
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
TASK_PLAY_ANIM_ADVANCED(psAmanda.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_amanda",
|
|
vBeanMachineScenePosition, vBeanMachineSceneRotation, NORMAL_BLEND_IN, NORMAL_BLEND_OUT,
|
|
-1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_HOLD_LAST_FRAME)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psAmanda.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psAmanda.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psFabien.PedIndex)
|
|
TASK_PLAY_ANIM_ADVANCED(psFabien.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_fabien",
|
|
vBeanMachineScenePosition, vBeanMachineSceneRotation, NORMAL_BLEND_IN, NORMAL_BLEND_OUT,
|
|
-1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_HOLD_LAST_FRAME)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psFabien.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psFabien.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psHipster.PedIndex)
|
|
TASK_PLAY_ANIM_ADVANCED(psHipster.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_laptop_girl",
|
|
vBeanMachineScenePosition, vBeanMachineSceneRotation, NORMAL_BLEND_IN, NORMAL_BLEND_OUT,
|
|
-1, AF_EXTRACT_INITIAL_OFFSET | AF_NOT_INTERRUPTABLE | AF_HOLD_LAST_FRAME)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psHipster.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psHipster.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
iProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
IF IS_ENTITY_PLAYING_ANIM(psAmanda.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_amanda")
|
|
SET_ENTITY_ANIM_SPEED(psAmanda.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_amanda", 0.9)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psFabien.PedIndex)
|
|
IF IS_ENTITY_PLAYING_ANIM(psFabien.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_fabien")
|
|
SET_ENTITY_ANIM_SPEED(psFabien.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_fabien", 0.9)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psHipster.PedIndex)
|
|
IF IS_ENTITY_PLAYING_ANIM(psHipster.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_laptop_girl")
|
|
SET_ENTITY_ANIM_SPEED(psHipster.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_laptop_girl", 0.9)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_DRIVE_TO_BEAN_MACHINE_COMPLETED(INT &iStageProgress)
|
|
|
|
SET_BIT(sLocatesData.iLocatesBitSet, BS_DONT_DO_J_SKIP)
|
|
|
|
SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(PLAYER_ID())
|
|
MANAGE_CONVERSATIONS_DURING_GO_TO_BEAN_MACHINE()
|
|
MANAGE_BEAN_MACHINE_SCENE(iBeanMachineSceneProgress)
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
SET_PED_RESET_FLAG(psJimmy.PedIndex,PRF_SearchForClosestDoor, TRUE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(sLocatesData.vehStartCar)
|
|
AND NOT IS_ENTITY_DEAD(sLocatesData.vehStartCar)
|
|
AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sLocatesData.vehStartCar, TRUE)
|
|
IF NOT IS_PED_IN_VEHICLE(psJimmy.PedIndex, sLocatesData.vehStartCar, TRUE)
|
|
DISABLE_LOCATES_CLEAR_BUDDY_TASKS_IF_ENTERING_NEAREST_VEHICLE(sLocatesData, TRUE)
|
|
ENDIF
|
|
ELSE
|
|
DISABLE_LOCATES_CLEAR_BUDDY_TASKS_IF_ENTERING_NEAREST_VEHICLE(sLocatesData, FALSE)
|
|
ENDIF
|
|
|
|
//handle requestting mocap cutscene
|
|
IF IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR IS_PLAYER_CHANGING_CLOTHES()
|
|
|
|
IF HAS_THIS_CUTSCENE_LOADED("fam_6_mcs_1")
|
|
OR HAS_CUTSCENE_LOADED()
|
|
OR IS_CUTSCENE_ACTIVE()
|
|
REMOVE_CUTSCENE()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player browsing items in a shop or changing clothes. Removing cutscene.")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vBeanMachinePosition) < DEFAULT_CUTSCENE_LOAD_DIST
|
|
|
|
REQUEST_CUTSCENE("fam_6_mcs_1")
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID()) //Michael's variations
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_AMANDA_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_FABIEN_CUTSCENE_COMPONENT_VARIATIONS()
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF HAS_THIS_CUTSCENE_LOADED("fam_6_mcs_1")
|
|
OR HAS_CUTSCENE_LOADED()
|
|
OR IS_CUTSCENE_ACTIVE()
|
|
REMOVE_CUTSCENE()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player too far away from destination to keep cutscene in memory. Removing cutscene.")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PERFORM_SEQUENCE) = PERFORMING_TASK
|
|
IF ( bPlayerPedScriptTaskInterrupted = FALSE )
|
|
IF IS_SCREEN_FADED_IN() AND NOT IS_SCREEN_FADING_IN()
|
|
IF IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_JUMP)
|
|
OR IS_CONTROL_PRESSED(PLAYER_CONTROL, INPUT_SPRINT)
|
|
OR (ROUND(GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_LR) * 255.0) < -20 OR ROUND(GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_LR) * 255.0) > 20)
|
|
OR (ROUND(GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_UD) * 255.0) < -20 OR ROUND(GET_CONTROL_NORMAL(PLAYER_CONTROL, INPUT_MOVE_UD) * 255.0) > 20)
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
bPlayerPedScriptTaskInterrupted = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF ( GET_SCRIPT_TASK_STATUS(psJimmy.PedIndex, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK )
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(psJimmy.PedIndex, << -819.95709, 177.42998, 70.60026 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING | ENAV_GO_FAR_AS_POSSIBLE_IF_TARGET_NAVMESH_NOT_LOADED)
|
|
FORCE_PED_MOTION_STATE(psJimmy.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF ( GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PERFORM_SEQUENCE) != PERFORMING_TASK )
|
|
SEQUENCE_INDEX SequenceIndex
|
|
CLEAR_SEQUENCE_TASK(SequenceIndex)
|
|
OPEN_SEQUENCE_TASK(SequenceIndex)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -809.27, 179.55, 71.15 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING | ENAV_GO_FAR_AS_POSSIBLE_IF_TARGET_NAVMESH_NOT_LOADED)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -811.32, 180.11, 71.15 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING | ENAV_GO_FAR_AS_POSSIBLE_IF_TARGET_NAVMESH_NOT_LOADED)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -813.17, 179.48, 71.16 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING | ENAV_GO_FAR_AS_POSSIBLE_IF_TARGET_NAVMESH_NOT_LOADED)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -813.92, 179.22, 71.16 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_SUPPRESS_EXACT_STOP)
|
|
CLOSE_SEQUENCE_TASK(SequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), SequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(SequenceIndex)
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
WAIT(2)
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_TOGO")
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 5.0, REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
SET_LOCATES_BUDDIES_TO_GET_INTO_NEAREST_CAR(sLocatesData, vsMichaelsCar.VehicleIndex)
|
|
|
|
START_AUDIO_SCENE("FAMILY_6_DRIVE_TO_AMANDA")
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IS_PLAYER_AT_LOCATION_WITH_BUDDY_ANY_MEANS(sLocatesData, vBeanMachinePosition, DEFAULT_LOCATES_SIZE_VECTOR(), TRUE, psJimmy.PedIndex, "FAM6_YOGA", "CMN_JLEAVE", FALSE, TRUE)
|
|
|
|
//do the check to progress the stage here
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psJimmy.PedIndex)
|
|
|
|
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-630.973633,255.312454,82.295090>>, <<6.000000,4.000000,2.000000>>)
|
|
AND IS_ENTITY_AT_COORD(psJimmy.PedIndex, <<-630.973633,255.312454,82.295090>>, <<6.000000,4.000000,2.000000>>)
|
|
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION() //kill conversations and let last line play out
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(6.0, 4.0, REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-641.87726, 247.57806, 80.30839>>, <<-607.46051, 244.61778, 87.00999>>, 22.0)
|
|
AND IS_ENTITY_IN_ANGLED_AREA(psJimmy.PedIndex, <<-641.87726, 247.57806, 80.30839>>, <<-607.46051, 244.61778, 87.00999>>, 22.0)
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION() //kill conversations and let last line play out
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ELSE
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION() //kill conversations and let last line play out
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()), 5.0)
|
|
|
|
IF NOT IS_SCRIPTED_CONVERSATION_ONGOING() //check if scripted conversations are not ongoing using native command
|
|
OR NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() //check if any conversations are not ongoing using script command
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF NOT IS_SCRIPTED_CONVERSATION_ONGOING() //check if scripted conversations are not ongoing using native command
|
|
OR NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() //check if any conversations are not ongoing using script command
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
IS_PLAYER_AT_LOCATION_WITH_BUDDY_ANY_MEANS(sLocatesData, <<-628.04919, 242.85347, 80.89529>>, DEFAULT_LOCATES_SIZE_VECTOR(), TRUE, psJimmy.PedIndex, "", "", FALSE, TRUE)
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-641.87726, 247.57806, 80.30839>>, <<-607.46051, 244.61778, 87.00999>>, 22.0)
|
|
|
|
UPDATE_BLOCKED_PLAYER_FOR_LEAD_IN(TRUE)
|
|
SUPPRESS_CONTEXT_BUTTON_ACTIONS_THIS_FRAME()
|
|
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED)
|
|
HIDE_PED_WEAPON_FOR_SCRIPTED_CUTSCENE(PLAYER_PED_ID(), TRUE)
|
|
|
|
SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK)
|
|
|
|
IF ( bLookAtAmandaActive = FALSE )
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), psAmanda.PedIndex, INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV)
|
|
bLookAtAmandaActive = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF ( bLookAtAmandaActive = TRUE )
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
bLookAtAmandaActive = FALSE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_PED_GROUP_MEMBER(psJimmy.PedIndex, PLAYER_GROUP_ID())
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-641.87726, 247.57806, 80.30839>>, <<-607.46051, 244.61778, 87.00999>>, 22.0)
|
|
//AND IS_ENTITY_IN_ANGLED_AREA(psJimmy.PedIndex, <<-641.87726, 247.57806, 80.30839>>, <<-607.46051, 244.61778, 87.00999>>, 22.0)
|
|
|
|
bLeadInTriggered = TRUE
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ( bLeadInTriggered = TRUE )
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-629.12653, 242.94969, 80.89502>>, <<-621.01813, 242.78120, 83>>, 3.5)
|
|
OR IS_ENTITY_IN_ANGLED_AREA(psJimmy.PedIndex, <<-629.12653, 242.94969, 80.89502>>, <<-621.01813, 242.78120, 83>>, 3.5)
|
|
OR ( IS_ENTITY_PLAYING_ANIM(psAmanda.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_amanda") AND GET_ENTITY_ANIM_CURRENT_TIME(psAmanda.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_amanda") >= 0.99 )
|
|
OR ( IS_ENTITY_PLAYING_ANIM(psFabien.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_fabien") AND GET_ENTITY_ANIM_CURRENT_TIME(psFabien.PedIndex, "missfam6leadinoutfam_6_mcs_1", "leadin_action_fabien") >= 0.99 )
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_CUTSCENE_BEAN_MACHINE_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF HAS_REQUESTED_CUTSCENE_LOADED("fam_6_mcs_1")
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psJimmy.PedIndex, "Jimmy", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psJimmy.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psAmanda.PedIndex, "Amanda", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psAmanda.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psFabien.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psFabien.PedIndex, "Fabien", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psFabien.ModelName)
|
|
ENDIF
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vsAmandasCar.VehicleIndex)
|
|
SET_VEHICLE_LOD_MULTIPLIER(vsAmandasCar.VehicleIndex, 2.0)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(vsAmandasCar.VehicleIndex, "Amandas_Car", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psHipster.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psHipster.PedIndex, "Laptop_Girl", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osLaptop.ObjectIndex)
|
|
IF NOT IS_ENTITY_DEAD(osLaptop.ObjectIndex)
|
|
IF IS_ENTITY_ATTACHED(osLaptop.ObjectIndex)
|
|
DETACH_ENTITY(osLaptop.ObjectIndex, FALSE, TRUE)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(osLaptop.ObjectIndex, "Fam_Laptop", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
|
|
|
|
STOP_AUDIO_SCENES()
|
|
START_CUTSCENE()
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ELSE
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_AMANDA_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_FABIEN_CUTSCENE_COMPONENT_VARIATIONS()
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1 //fade screen in if screen was faded out due to shit skip or debug skip
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
VEHICLE_INDEX LastPlayerVehicleIndex
|
|
|
|
LastPlayerVehicleIndex = GET_PLAYERS_LAST_VEHICLE()
|
|
|
|
IF DOES_ENTITY_EXIST(LastPlayerVehicleIndex)
|
|
IF NOT IS_ENTITY_DEAD(LastPlayerVehicleIndex)
|
|
|
|
IF IS_VEHICLE_AVAILABLE_TO_SNAPSHOT(PLAYER_PED_ID(), LastPlayerVehicleIndex, TRUE)
|
|
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(LastPlayerVehicleIndex)
|
|
|
|
SET_ENTITY_AS_MISSION_ENTITY(LastPlayerVehicleIndex)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(vsMichaelsCar.VehicleIndex)
|
|
|
|
vsMichaelsCar.VehicleIndex = LastPlayerVehicleIndex
|
|
ENDIF
|
|
|
|
STOP_VEHICLE_FIRE(LastPlayerVehicleIndex)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(LastPlayerVehicleIndex, TRUE)
|
|
SET_VEHICLE_ENGINE_ON(LastPlayerVehicleIndex, FALSE, TRUE)
|
|
SET_ENTITY_COORDS(LastPlayerVehicleIndex, vsMichaelsCar.vPosition)
|
|
SET_ENTITY_HEADING(LastPlayerVehicleIndex, vsMichaelsCar.fHeading)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(LastPlayerVehicleIndex)
|
|
|
|
|
|
SET_VEHICLE_LOD_MULTIPLIER(LastPlayerVehicleIndex, 2.0)
|
|
|
|
OVERRIDE_REPLAY_CHECKPOINT_VEHICLE(LastPlayerVehicleIndex)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
CLEANUP_MISSION_OBJECT(osMug, TRUE)
|
|
REMOVE_ANIM_DICT("missfam6leadinoutfam_6_mcs_1")
|
|
|
|
CLEAR_AREA_OF_PEDS(MissionPosition.vPosition, 10.0)
|
|
CLEAR_AREA_OF_OBJECTS(MissionPosition.vPosition, 10.0)
|
|
CLEAR_AREA_OF_VEHICLES(MissionPosition.vPosition, 10.0)
|
|
CLEAR_AREA_OF_PROJECTILES(MissionPosition.vPosition, 10.0)
|
|
REMOVE_PARTICLE_FX_IN_RANGE(MissionPosition.vPosition, 10.0)
|
|
|
|
iSpeedZone = ADD_ROAD_NODE_SPEED_ZONE(<< -643.08, 249.90, 80.27 >>, 15.0, 5.0)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
REPLAY_STOP_EVENT()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(vsAmandasCar.VehicleIndex) AND NOT IS_ENTITY_DEAD(vsAmandasCar.VehicleIndex)
|
|
SET_FORCE_HD_VEHICLE(vsAmandasCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(vsAmandasCar.VehicleIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex) AND NOT IS_ENTITY_DEAD(vsMichaelsCar.VehicleIndex)
|
|
SET_FORCE_HD_VEHICLE(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(vsMichaelsCar.VehicleIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Michael.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF ( bCutsceneSkipped = TRUE )
|
|
WARP_PED(PLAYER_PED_ID(), MissionPosition.vPosition, MissionPosition.fHeading, FALSE, FALSE, FALSE)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
ENDIF
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2000)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Jimmy")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Jimmy.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_BERD, 0, 0)
|
|
IF ( bCutsceneSkipped = TRUE )
|
|
WARP_PED(psJimmy.PedIndex, psJimmy.vPosition, psJimmy.fHeading, FALSE, FALSE, FALSE)
|
|
ENDIF
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(psJimmy.PedIndex, <<-629.51685, 248.82660, 80.57744>>, PEDMOVE_WALK, DEFAULT_TIME_NEVER_WARP, DEFAULT_NAVMESH_RADIUS, ENAV_SUPPRESS_EXACT_STOP)
|
|
FORCE_PED_MOTION_STATE(psJimmy.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Amanda")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Amanda.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex) AND IS_VEHICLE_DRIVEABLE(vsAmandasCar.VehicleIndex)
|
|
SET_VEHICLE_DOORS_SHUT(vsAmandasCar.VehicleIndex, TRUE)
|
|
SET_PED_INTO_VEHICLE(psAmanda.PedIndex, vsAmandasCar.VehicleIndex, VS_DRIVER)
|
|
TASK_VEHICLE_DRIVE_WANDER(psAmanda.PedIndex, vsAmandasCar.VehicleIndex, 30, DRIVINGMODE_AVOIDCARS)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Fabien")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Fabien.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psFabien.PedIndex) AND IS_VEHICLE_DRIVEABLE(vsAmandasCar.VehicleIndex)
|
|
SET_PED_INTO_VEHICLE(psFabien.PedIndex, vsAmandasCar.VehicleIndex, VS_FRONT_RIGHT)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Amandas_car")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Amandas_car.")
|
|
#ENDIF
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vsAmandasCar.VehicleIndex)
|
|
SET_VEHICLE_DOORS_SHUT(vsAmandasCar.VehicleIndex, TRUE)
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(vsAmandasCar.VehicleIndex) //fix for B*1808939
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Calling FORCE_ENTITY_AI_AND_ANIMATION_UPDATE() for Amandas_car.")
|
|
#ENDIF
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(vsAmandasCar.VehicleIndex)
|
|
SET_VEHICLE_ENGINE_ON(vsAmandasCar.VehicleIndex, TRUE, TRUE)
|
|
SET_VEHICLE_FORWARD_SPEED(vsAmandasCar.VehicleIndex, 5)
|
|
PLAY_SOUND_FROM_ENTITY(-1, "Amanda_Pulls_Away", vsAmandasCar.VehicleIndex, "FAMILY_6_SOUNDS")
|
|
START_AUDIO_SCENE("FAMILY_6_AMANDA_PULLS_AWAY")
|
|
ADD_ENTITY_TO_AUDIO_MIX_GROUP(vsAmandasCar.VehicleIndex, "FAMILY_6_AMANDA_PULLS_AWAY_GROUP")
|
|
SET_AUDIO_VEHICLE_PRIORITY(vsAmandasCar.VehicleIndex, AUDIO_VEHICLE_PRIORITY_MAX)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
|
|
IF ( bCutsceneSkipped = TRUE )
|
|
CLEANUP_PED(psAmanda, TRUE)
|
|
CLEANUP_PED(psFabien, TRUE)
|
|
IF DOES_ENTITY_EXIST(vsAmandasCar.VehicleIndex)
|
|
DELETE_VEHICLE(vsAmandasCar.VehicleIndex)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
REMOVE_ROAD_NODE_SPEED_ZONE(iSpeedZone)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) //if cutscene was skipped, fade out and don't fade in
|
|
bCutsceneSkipped = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC MANAGE_CONVERSATIONS_DURING_GO_TO_TRACEY()
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JIM")
|
|
IF IS_SCREEN_FADED_IN() AND NOT IS_SCREEN_FADING_IN()
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JIM", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JIM", TRUE)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TATT2")
|
|
AND NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TATTOO")
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psJimmy.PedIndex)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", PICK_STRING(bStageReplayInProgress, "FAM6_TATT2", "FAM6_TATTOO"), CONV_PRIORITY_MEDIUM)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
SET_LABEL_AS_TRIGGERED(PICK_STRING(bStageReplayInProgress, "FAM6_TATT2", "FAM6_TATTOO"), TRUE)
|
|
bRunConversationPausingCheck = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//if main conversation was interrupted, resume it from the next label
|
|
IF ( bCurrentConversationInterrupted = TRUE )
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_JBAD")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JWARN")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT")
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_TATT2")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_TATTOO")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK")
|
|
|
|
//play conversation for Jimmy saying cops were lost and it's safe to go to shrink
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JLOST_3")
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT") //this will only play if conversation to lose cops was triggered
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JLOST")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JLOST", CONV_PRIORITY_MEDIUM)
|
|
iCopsLostConversationCount++
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOST", TRUE)
|
|
IF ( iCopsLostConversationCount >= 3)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOST_3", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//resume the interrupted coversation
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
AND NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationLabel)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_TATT2") //resume only the main conversations
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_TATTOO")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_JTALK")
|
|
|
|
IF ( iPlayerOffencesCount >= 3 )
|
|
AND NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK")
|
|
//if player commited more than 3 offences and the weird conversation did not trigger
|
|
//let the weird conversations trigger first before it can be resumed
|
|
ELSE
|
|
//resume conversation from specific root and line label
|
|
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(FAM6Conversation, "FAM6AUD", CurrentConversationRoot, CurrentConversationLabel, CONV_PRIORITY_MEDIUM)
|
|
bCurrentConversationInterrupted = FALSE
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JBAD", FALSE) //mark all the interrupt conversations as not triggered
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOST", FALSE)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JWANT", FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
|
|
//resume paused conversations when player gets back in the car
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
//IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
//PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
//ENDIF
|
|
//ENDIF
|
|
|
|
ELSE //locates header blip does not exist
|
|
|
|
//play interrupt conversation when player becomes wanted
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
|
|
IF ( bCurrentConversationInterrupted = FALSE )
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_TATT2")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_TATTOO")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK")
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_TATT2")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_TATTOO")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_JTALK")
|
|
bCurrentConversationInterrupted = TRUE
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
CurrentConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF ( bCurrentConversationInterrupted = TRUE )
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT")
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JWANT", CONV_PRIORITY_HIGH)
|
|
iPlayerOffencesCount++
|
|
iLoseCopsReminderTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(10000, 12500)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JWANT", TRUE)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JLOSE_5")
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT")
|
|
IF GET_GAME_TIMER() - iLoseCopsReminderTimer > 0
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JLOSE", CONV_PRIORITY_MEDIUM)
|
|
iLoseCopsReminderCount++
|
|
iLoseCopsReminderTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(12500, 15000)
|
|
IF ( iLoseCopsReminderCount >= 5 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOSE_5", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//keep reseting those flags during wanted level as the player might be driving recklessly
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
|
|
ELSE
|
|
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
// IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
// PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
// ENDIF
|
|
//ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
//play interrupt conversations for player offences
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF ( GET_GAME_TIMER() - iPlayerOffenceTimer > 5000 )
|
|
|
|
//play conversation for player running over peds
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JBAD_5")
|
|
AND NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JWARN_6")
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF HAS_PLAYER_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
AND HAS_ENTITY_COLLIDED_WITH_ANYTHING(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
bPlayerHitPed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PED_SHOOTING(PLAYER_PED_ID()) //add more conditions here if needed
|
|
bPlayerActingBad = TRUE
|
|
ENDIF
|
|
|
|
IF ( bPlayerHitPed = TRUE OR bPlayerActingBad = TRUE )
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_TATT2")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_TATTOO")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK")
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_TATT2")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_TATTOO")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_JTALK")
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
CurrentConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
bCurrentConversationInterrupted = TRUE
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK") //if jimmy did no start his talk for player messing around
|
|
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JBAD", CONV_PRIORITY_MEDIUM)
|
|
iPlayerOffencesCount++
|
|
iBadConversationCount++
|
|
bPlayerHitPed = FALSE
|
|
bPlayerActingBad = FALSE
|
|
iPlayerOffenceTimer = GET_GAME_TIMER()
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JBAD", TRUE)
|
|
IF ( iBadConversationCount >= 5 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JBAD_5", TRUE)
|
|
ENDIF
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ELSE //if jimmy started his talk for player messing around
|
|
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JWARN", CONV_PRIORITY_MEDIUM)
|
|
iPlayerOffencesCount++
|
|
iBadConversationCount++
|
|
bPlayerHitPed = FALSE
|
|
bPlayerActingBad = FALSE
|
|
iPlayerOffenceTimer = GET_GAME_TIMER()
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JWARN", TRUE)
|
|
IF ( iBadConversationCount >= 6 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JWARN_6", TRUE)
|
|
ENDIF
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//play conversation when more than 3 offences have been commited
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK")
|
|
IF ( iPlayerOffencesCount >= 3 )
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_PED_IN_VEHICLE(psJimmy.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JTALK", CONV_PRIORITY_MEDIUM)
|
|
bCurrentConversationInterrupted = FALSE
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JTALK", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_ARRIVE")
|
|
IF ( bDestinationReached = TRUE )
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_ARRIVE", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_ARRIVE", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF ( bRunConversationPausingCheck = TRUE )
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_PED_IN_VEHICLE(psJimmy.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psJimmy.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(psJimmy.PedIndex, PLAYER_PED_ID()) < 10
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC MANAGE_TATTOO_PARLOR_SCENE(INT &iProgress)
|
|
|
|
SWITCH iProgress
|
|
|
|
CASE 0
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vTattooShopScenePosition) < 150.0
|
|
|
|
iProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
REQUEST_MODEL(psTracey.ModelName)
|
|
REQUEST_MODEL(psLazlow.ModelName)
|
|
|
|
REQUEST_ANIM_DICT("missfam6leadinoutfam_6_mcs_2")
|
|
|
|
IF HAS_MODEL_LOADED(psTracey.ModelName)
|
|
AND HAS_MODEL_LOADED(psLazlow.ModelName)
|
|
AND HAS_ANIM_DICT_LOADED("missfam6leadinoutfam_6_mcs_2")
|
|
|
|
IF HAS_MISSION_PED_BEEN_CREATED(psTracey, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_TRACEY)
|
|
AND HAS_MISSION_PED_BEEN_CREATED(psLazlow, FALSE, RELGROUPHASH_PLAYER, FALSE, NO_CHARACTER)
|
|
|
|
SET_TRACEY_PED_COMPONENT_VARIATIONS(psTracey.bComponentVariationsSet)
|
|
SET_LAZLOW_PED_COMPONENT_VARIATIONS(psLazlow.bComponentVariationsSet, FALSE, FALSE, FALSE, FALSE, FALSE)
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iTattooShopSceneID)
|
|
|
|
iTattooShopSceneID = CREATE_SYNCHRONIZED_SCENE(vTattooShopScenePosition, vTattooShopSceneRotation)
|
|
|
|
SET_SYNCHRONIZED_SCENE_LOOPED(iTattooShopSceneID, TRUE)
|
|
|
|
TASK_SYNCHRONIZED_SCENE(psTracey.PedIndex, iTattooShopSceneID, "missfam6leadinoutfam_6_mcs_2", "_leadin_loop_tracy", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psTracey.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTracey.PedIndex, TRUE)
|
|
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iTattooShopSceneID, "missfam6leadinoutfam_6_mcs_2", "_leadin_loop_lazlow", INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psLazlow.PedIndex, TRUE)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(psTracey.ModelName)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(psLazlow.ModelName)
|
|
|
|
iProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
PROC MANAGE_AMANDA_AND_FABIEN_DURING_GO_TO_TRACEY()
|
|
|
|
IF DOES_ENTITY_EXIST(psFabien.PedIndex)
|
|
AND DOES_ENTITY_EXIST(psAmanda.PedIndex)
|
|
AND DOES_ENTITY_EXIST(vsAmandasCar.VehicleIndex)
|
|
|
|
IF NOT IS_ENTITY_DEAD(psFabien.PedIndex)
|
|
AND NOT IS_ENTITY_DEAD(psAmanda.PedIndex)
|
|
AND NOT IS_ENTITY_DEAD(vsAmandasCar.VehicleIndex)
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(vsAmandasCar.VehicleIndex)) > 125.0
|
|
|
|
SET_PED_KEEP_TASK(psAmanda.PedIndex, TRUE)
|
|
SET_PED_AS_NO_LONGER_NEEDED(psAmanda.PedIndex)
|
|
|
|
SET_PED_KEEP_TASK(psFabien.PedIndex, TRUE)
|
|
SET_PED_AS_NO_LONGER_NEEDED(psFabien.PedIndex)
|
|
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(vsAmandasCar.VehicleIndex)
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_DRIVE_TO_TRACEY_COMPLETED(INT &iStageProgress)
|
|
|
|
SET_BIT(sLocatesData.iLocatesBitSet, BS_DONT_DO_J_SKIP)
|
|
|
|
MANAGE_CONVERSATIONS_DURING_GO_TO_TRACEY()
|
|
MANAGE_AMANDA_AND_FABIEN_DURING_GO_TO_TRACEY()
|
|
MANAGE_TATTOO_PARLOR_SCENE(iTattooParlorSceneProgress)
|
|
|
|
//handle requestting mocap cutscene
|
|
IF IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR IS_PLAYER_CHANGING_CLOTHES()
|
|
|
|
IF HAS_THIS_CUTSCENE_LOADED("fam_6_mcs_2_concat")
|
|
OR HAS_CUTSCENE_LOADED()
|
|
OR IS_CUTSCENE_ACTIVE()
|
|
REMOVE_CUTSCENE()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player browsing items in a shop or changing clothes. Removing cutscene.")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vTattooShopPosition) < DEFAULT_CUTSCENE_LOAD_DIST / 2
|
|
|
|
REQUEST_CUTSCENE("fam_6_mcs_2_concat")
|
|
|
|
IF NOT IS_INTERIOR_READY(GET_INTERIOR_AT_COORDS(vTattooShopScenePosition))
|
|
PIN_INTERIOR_IN_MEMORY(GET_INTERIOR_AT_COORDS(vTattooShopScenePosition))
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Pinning interior at coordinates ", vTattooShopScenePosition, " in memory.")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID())
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(FALSE, FALSE, FALSE, FALSE, FALSE)
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF IS_INTERIOR_READY(GET_INTERIOR_AT_COORDS(vTattooShopScenePosition))
|
|
UNPIN_INTERIOR(GET_INTERIOR_AT_COORDS(vTattooShopScenePosition))
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Unpinning interior at coordinates ", vTattooShopScenePosition, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_THIS_CUTSCENE_LOADED("fam_6_mcs_2_concat")
|
|
OR HAS_CUTSCENE_LOADED()
|
|
OR IS_CUTSCENE_ACTIVE()
|
|
REMOVE_CUTSCENE()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player too far away from destination to keep cutscene in memory. Removing cutscene.")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF IS_SCREEN_FADED_OUT()
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2000)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF ( GET_SCRIPT_TASK_STATUS(psJimmy.PedIndex, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK )
|
|
IF DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex) AND NOT IS_ENTITY_DEAD(vsMichaelsCar.VehicleIndex)
|
|
TASK_ENTER_VEHICLE(psJimmy.PedIndex, vsMichaelsCar.VehicleIndex, DEFAULT_TIME_BEFORE_WARP * 3, VS_FRONT_RIGHT, PEDMOVE_WALK)
|
|
FORCE_PED_MOTION_STATE(psJimmy.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
WAIT(2)
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_JIM")
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 6.0, REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
SET_LOCATES_BUDDIES_TO_GET_INTO_NEAREST_CAR(sLocatesData, vsMichaelsCar.VehicleIndex)
|
|
|
|
START_AUDIO_SCENE("FAMILY_6_DRIVE_TO_TATTOO")
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IS_PLAYER_AT_LOCATION_WITH_BUDDY_ANY_MEANS(sLocatesData, vTattooShopPosition, DEFAULT_LOCATES_SIZE_VECTOR(), TRUE, psJimmy.PedIndex, "FAM6_TATTOO", "CMN_JLEAVE", FALSE, TRUE)
|
|
|
|
//do the check to progress the stage here
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psJimmy.PedIndex)
|
|
|
|
//locate to park the car
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<302.371002,172.648605,102.820877>>, <<294.813934,175.443298,106.071678>>, 5.0)
|
|
AND IS_ENTITY_IN_ANGLED_AREA(psJimmy.PedIndex, <<302.371002,172.648605,102.820877>>, <<294.813934,175.443298,106.071678>>, 5.0)
|
|
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION() //kill conversations and let last line play out
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
//bigger locate around the tattoo parlor entrance
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<320.562500,178.723297,102.389084>>, <<317.622711,170.784821,106.276665>>, 12.5)
|
|
AND IS_ENTITY_IN_ANGLED_AREA(psJimmy.PedIndex, <<320.562500,178.723297,102.389084>>, <<317.622711,170.784821,106.276665>>, 12.5)
|
|
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION() //kill conversations and let last line play out
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<314.117126,180.860062,102.418434>>, <<309.434204,168.080780,106.292229>>, 28.0)
|
|
AND IS_ENTITY_IN_ANGLED_AREA(psJimmy.PedIndex, <<314.117126,180.860062,102.418434>>, <<309.434204,168.080780,106.292229>>, 28.0)
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION() //kill conversations and let last line play out
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ELSE
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION() //kill conversations and let last line play out
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
//player is on foot in the locate, jimmy is in player group but not in locate but still nearby, fix for B*1982582
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<314.117126,180.860062,102.418434>>, <<309.434204,168.080780,106.292229>>, 28.0)
|
|
IF NOT IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex) AND IS_PED_IN_GROUP(psJimmy.PedIndex)
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION() //kill conversations and let last line play out
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()), DEFAULT_VEH_STOPPING_DISTANCE)
|
|
|
|
IF NOT IS_SCRIPTED_CONVERSATION_ONGOING() //check if scripted conversations are not ongoing using native command
|
|
OR NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() //check if any conversations are not ongoing using script command
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF NOT IS_SCRIPTED_CONVERSATION_ONGOING() //check if scripted conversations are not ongoing using native command
|
|
OR NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() //check if any conversations are not ongoing using script command
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
IS_PLAYER_AT_LOCATION_WITH_BUDDY_ANY_MEANS(sLocatesData, vTattooShopDoorPosition, DEFAULT_LOCATES_SIZE_VECTOR(), TRUE, psJimmy.PedIndex, "", "", FALSE, TRUE)
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<309.861786,176.901199,101.957222>>, <<324.602966,171.513519,106.653946>>, 15.0)
|
|
|
|
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
|
|
UPDATE_BLOCKED_PLAYER_FOR_LEAD_IN(TRUE)
|
|
SUPPRESS_CONTEXT_BUTTON_ACTIONS_THIS_FRAME()
|
|
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED)
|
|
HIDE_PED_WEAPON_FOR_SCRIPTED_CUTSCENE(PLAYER_PED_ID(), TRUE)
|
|
|
|
SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(), PEDMOVE_WALK)
|
|
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<321.037598,178.496094,102.441963>>, <<319.134644,173.429993,106.266571>>, 6.0)
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 4
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()), 3.0)
|
|
|
|
TASK_LEAVE_ANY_VEHICLE(PLAYER_PED_ID())
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(4.0, 6.0, REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ELSE
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(4.0, 6.0, REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 5
|
|
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
|
|
CLEANUP_PED(psAmanda, TRUE)
|
|
CLEANUP_PED(psFabien, TRUE)
|
|
IF DOES_ENTITY_EXIST(vsAmandasCar.VehicleIndex)
|
|
DELETE_VEHICLE(vsAmandasCar.VehicleIndex)
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_CUTSCENE_SHOP_1_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF HAS_REQUESTED_CUTSCENE_LOADED("fam_6_mcs_2_concat")
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF IS_PED_GROUP_MEMBER(psJimmy.PedIndex, PLAYER_GROUP_ID())
|
|
REMOVE_PED_FROM_GROUP(psJimmy.PedIndex)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psJimmy.PedIndex, "Jimmy", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psJimmy.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psTracey.PedIndex, "Tracy", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psTracey.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psLazlow.PedIndex, "Lazlow", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psLazlow.ModelName)
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
STOP_AUDIO_SCENES()
|
|
START_CUTSCENE()
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ELSE
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(FALSE, FALSE, FALSE, FALSE, FALSE)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1 //fade screen in if screen was faded out due to shit skip or debug skip
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
VEHICLE_INDEX LastPlayerVehicleIndex
|
|
|
|
LastPlayerVehicleIndex = GET_PLAYERS_LAST_VEHICLE()
|
|
|
|
IF DOES_ENTITY_EXIST(LastPlayerVehicleIndex)
|
|
IF NOT IS_ENTITY_DEAD(LastPlayerVehicleIndex)
|
|
|
|
IF IS_VEHICLE_AVAILABLE_TO_SNAPSHOT(PLAYER_PED_ID(), LastPlayerVehicleIndex, TRUE)
|
|
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(LastPlayerVehicleIndex)
|
|
|
|
SET_ENTITY_AS_MISSION_ENTITY(LastPlayerVehicleIndex)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(vsMichaelsCar.VehicleIndex)
|
|
|
|
vsMichaelsCar.VehicleIndex = LastPlayerVehicleIndex
|
|
ENDIF
|
|
|
|
STOP_VEHICLE_FIRE(LastPlayerVehicleIndex)
|
|
|
|
SET_ENTITY_COORDS(LastPlayerVehicleIndex, vsMichaelsCar.vPosition)
|
|
SET_ENTITY_HEADING(LastPlayerVehicleIndex, vsMichaelsCar.fHeading)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(LastPlayerVehicleIndex)
|
|
SET_VEHICLE_DOORS_SHUT(LastPlayerVehicleIndex, TRUE)
|
|
SET_VEHICLE_ENGINE_ON(LastPlayerVehicleIndex, FALSE, TRUE)
|
|
|
|
OVERRIDE_REPLAY_CHECKPOINT_VEHICLE(LastPlayerVehicleIndex)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
REMOVE_ANIM_DICT("missfam6leadinoutfam_6_mcs_2")
|
|
|
|
CLEAR_AREA_OF_COPS(MissionPosition.vPosition, 100.0)
|
|
CLEAR_AREA_OF_PEDS(MissionPosition.vPosition, 100.0)
|
|
CLEAR_AREA_OF_OBJECTS(MissionPosition.vPosition, 100.0)
|
|
CLEAR_AREA_OF_VEHICLES(MissionPosition.vPosition, 100.0)
|
|
CLEAR_AREA_OF_PROJECTILES(MissionPosition.vPosition, 100.0)
|
|
REMOVE_PARTICLE_FX_IN_RANGE(MissionPosition.vPosition, 100.0)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
REQUEST_MODEL(osPiercingGun.ModelName)
|
|
REQUEST_ANIM_DICT("missfam6ig_1_pierce")
|
|
REQUEST_ANIM_DICT("missfam6ig_7_tattoo")
|
|
REQUEST_SCRIPT_AUDIO_BANK("FAM6_PIERCING_GUN")
|
|
|
|
IF NOT DOES_CAM_EXIST(ScriptedCamera)
|
|
ScriptedCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE)
|
|
SET_CAM_PARAMS(ScriptedCamera, << 323.4799, 178.8823, 104.7932 >>, << -23.9135, 13.3903, -17.3261 >>, 25.0)
|
|
SHAKE_CAM(ScriptedCamera,"HAND_SHAKE",0.5)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
|
|
IF NOT DOES_CAM_EXIST(AnimatedCamera)
|
|
AnimatedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, FALSE)
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_CAMERA() returned true for camera.")
|
|
#ENDIF
|
|
|
|
REPLAY_STOP_EVENT()
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Jimmy")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Jimmy.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_BERD, 0, 0)
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
WARP_PED(psJimmy.PedIndex, psJimmy.vPosition, psJimmy.fHeading, FALSE, FALSE, FALSE)
|
|
TASK_PLAY_ANIM(psJimmy.PedIndex, "missfam6ig_7_tattoo", "ig_7_idle_01_jimmy", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psJimmy.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psJimmy.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Tracy")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Tracy.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
WARP_PED(psTracey.PedIndex, psTracey.vPosition, psTracey.fHeading, FALSE, FALSE, FALSE)
|
|
TASK_PLAY_ANIM(psTracey.PedIndex, "missfam6ig_7_tattoo", "ig_7_idle_02_tracey", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psTracey.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTracey.PedIndex, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Lazlow")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Lazlow.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Michael.")
|
|
#ENDIF
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
|
|
IF HAS_MODEL_LOADED(osPiercingGun.ModelName)
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_1_pierce")
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_7_tattoo")
|
|
AND REQUEST_SCRIPT_AUDIO_BANK("FAM6_PIERCING_GUN")
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID)
|
|
|
|
iPierceSceneID = CREATE_SYNCHRONIZED_SCENE(<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
|
|
IF HAS_MISSION_OBJECT_BEEN_CREATED(osPiercingGun)
|
|
IF DOES_ENTITY_EXIST(osPiercingGun.ObjectIndex) AND NOT IS_ENTITY_DEAD(osPiercingGun.ObjectIndex)
|
|
ATTACH_ENTITY_TO_ENTITY(osPiercingGun.ObjectIndex, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0.0, 0.0, 0.0>>, <<0.0, 0.0, 0.0>>)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iPierceSceneID, "missfam6ig_1_pierce", "ig_1_loop_michael", INSTANT_BLEND_IN, SLOW_BLEND_OUT )
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iPierceSceneID, "missfam6ig_1_pierce", "ig_1_loop_lazlow", INSTANT_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT )
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
|
|
IF ( bCutsceneSkipped = TRUE )
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID)
|
|
|
|
IF HAS_MODEL_LOADED(osPiercingGun.ModelName)
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_1_pierce")
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_7_tattoo")
|
|
AND REQUEST_SCRIPT_AUDIO_BANK("FAM6_PIERCING_GUN")
|
|
|
|
iPierceSceneID = CREATE_SYNCHRONIZED_SCENE(<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
|
|
IF HAS_MISSION_OBJECT_BEEN_CREATED(osPiercingGun)
|
|
IF DOES_ENTITY_EXIST(osPiercingGun.ObjectIndex) AND NOT IS_ENTITY_DEAD(osPiercingGun.ObjectIndex)
|
|
ATTACH_ENTITY_TO_ENTITY(osPiercingGun.ObjectIndex, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0.0, 0.0, 0.0>>, <<0.0, 0.0, 0.0>>)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iPierceSceneID, "missfam6ig_1_pierce", "ig_1_loop_michael", INSTANT_BLEND_IN, SLOW_BLEND_OUT )
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iPierceSceneID, "missfam6ig_1_pierce", "ig_1_loop_lazlow", INSTANT_BLEND_IN, SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT )
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
WARP_PED(psJimmy.PedIndex, psJimmy.vPosition, psJimmy.fHeading, FALSE, FALSE, FALSE)
|
|
TASK_PLAY_ANIM(psJimmy.PedIndex, "missfam6ig_7_tattoo", "ig_7_idle_01_jimmy", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psJimmy.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psJimmy.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
WARP_PED(psTracey.PedIndex, psTracey.vPosition, psTracey.fHeading, FALSE, FALSE, FALSE)
|
|
TASK_PLAY_ANIM(psTracey.PedIndex, "missfam6ig_7_tattoo", "ig_7_idle_02_tracey", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psTracey.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTracey.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) //if cutscene was skipped, fade out and don't fade in
|
|
bCutsceneSkipped = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(osPiercingGun.ModelName)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC MANAGE_PIERCING_HELP_TEXT()
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
AND DOES_CAM_EXIST(AnimatedCamera)
|
|
IF IS_CAM_ACTIVE(ScriptedCamera)
|
|
AND NOT IS_CAM_ACTIVE(AnimatedCamera)
|
|
IF IS_SCREEN_FADED_IN()
|
|
AND NOT IS_SCREEN_FADING_IN()
|
|
IF NOT bBrow AND NOT bNose AND NOT bEar
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_PIERC0")
|
|
PRINT_HELP_FOREVER("FAM6_PIERC0")
|
|
SET_LABEL_AS_TRIGGERED("FAM6_PIERC0", TRUE)
|
|
ENDIF
|
|
ELIF NOT bBrow AND NOT bNose AND bEar
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_PIERC1")
|
|
PRINT_HELP_FOREVER("FAM6_PIERC1")
|
|
SET_LABEL_AS_TRIGGERED("FAM6_PIERC1", TRUE)
|
|
ENDIF
|
|
ELIF NOT bBrow AND bNose AND NOT bEar
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_PIERC2")
|
|
PRINT_HELP_FOREVER("FAM6_PIERC2")
|
|
SET_LABEL_AS_TRIGGERED("FAM6_PIERC2", TRUE)
|
|
ENDIF
|
|
ELIF bBrow AND NOT bNose AND NOT bEar
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_PIERC3")
|
|
PRINT_HELP_FOREVER("FAM6_PIERC3")
|
|
SET_LABEL_AS_TRIGGERED("FAM6_PIERC3", TRUE)
|
|
ENDIF
|
|
ELIF NOT bBrow AND bNose AND bEar
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_PIERC4")
|
|
PRINT_HELP_FOREVER("FAM6_PIERC4")
|
|
SET_LABEL_AS_TRIGGERED("FAM6_PIERC4", TRUE)
|
|
ENDIF
|
|
ELIF bBrow AND NOT bNose AND bEar
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_PIERC5")
|
|
PRINT_HELP_FOREVER("FAM6_PIERC5")
|
|
SET_LABEL_AS_TRIGGERED("FAM6_PIERC5", TRUE)
|
|
ENDIF
|
|
ELIF bBrow AND bNose AND NOT bEar
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_PIERC6")
|
|
PRINT_HELP_FOREVER("FAM6_PIERC6")
|
|
SET_LABEL_AS_TRIGGERED("FAM6_PIERC6", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC MANAGE_PIERCING_STAGES()
|
|
|
|
SWITCH ePiercingStage
|
|
|
|
CASE PIERCING_IDLE
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID)
|
|
|
|
IF ( iConversationTimer != 0 )
|
|
IF GET_GAME_TIMER() - iConversationTimer > 0
|
|
|
|
IF NOT bBrow AND NOT bNose AND NOT bEar
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_IDLEP_5")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_IDLEP", CONV_PRIORITY_MEDIUM)
|
|
iIdleConversationcounter++
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(7500, 12500)
|
|
IF ( iIdleConversationcounter >= 5 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_IDLEP_5", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
SWITCH GET_RANDOM_INT_IN_RANGE(0, 3)
|
|
|
|
CASE 0
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_IDLEP_5")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_IDLEP", CONV_PRIORITY_MEDIUM)
|
|
iIdleConversationcounter++
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(7500, 12500)
|
|
IF ( iIdleConversationcounter >= 5 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_IDLEP_5", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE 1
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_P1_3")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_P1", CONV_PRIORITY_MEDIUM)
|
|
iIdle1Conversationcounter++
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(7500, 12500)
|
|
IF ( iIdle1Conversationcounter >= 3 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_P1_3", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE 2
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_P2_2")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_P2", CONV_PRIORITY_MEDIUM)
|
|
iIdle2Conversationcounter++
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(7500, 12500)
|
|
IF ( iIdle2Conversationcounter >= 2 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_P2_2", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ( iStruggleConversationTimer != 0 )
|
|
IF GET_GAME_TIMER() - iStruggleConversationTimer > 0
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_STRUG", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
iStruggleConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(3500, 6000)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE PIERCING_BROW
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID) AND GET_SYNCHRONIZED_SCENE_PHASE(iPierceSceneID) >= 0.068
|
|
|
|
SET_CONTROL_SHAKE(PLAYER_CONTROL, 200, 256)
|
|
PLAY_SOUND_FROM_ENTITY(-1, "Pierce", osPiercingGun.ObjectIndex, "FAMILY_6_SOUNDS")
|
|
|
|
IF ( iConversationCounter < 2 )
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_BROW", CONV_PRIORITY_MEDIUM)
|
|
iConversationCounter++
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT bEar AND NOT bNose
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL2, 0, 2)
|
|
ELIF bEar AND NOT bNose
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL2, 0, 5)
|
|
ELIF NOT bEar AND bNose
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL2, 0, 6)
|
|
ELIF bEar AND bNose
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL2, 0, 7)
|
|
ENDIF
|
|
|
|
ePiercingStage = PIERCING_IDLE
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1000, 2000)
|
|
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE PIERCING_NOSE
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID) AND GET_SYNCHRONIZED_SCENE_PHASE(iPierceSceneID) >= 0.075
|
|
|
|
SET_CONTROL_SHAKE(PLAYER_CONTROL, 200, 256)
|
|
PLAY_SOUND_FROM_ENTITY(-1, "Pierce", osPiercingGun.ObjectIndex, "FAMILY_6_SOUNDS")
|
|
|
|
IF ( iConversationCounter < 2 )
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_NOSE", CONV_PRIORITY_MEDIUM)
|
|
iConversationCounter++
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT bEar AND NOT bBrow
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL2, 0, 3)
|
|
ELIF bEar AND NOT bBrow
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL2, 0, 4)
|
|
ELIF NOT bEar AND bBrow
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL2, 0, 6)
|
|
ELIF bEar AND bBrow
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_SPECIAL2, 0, 7)
|
|
ENDIF
|
|
|
|
ePiercingStage = PIERCING_IDLE
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1000, 2000)
|
|
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE PIERCING_EAR
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID) AND GET_SYNCHRONIZED_SCENE_PHASE(iPierceSceneID) >= 0.07
|
|
|
|
SET_CONTROL_SHAKE(PLAYER_CONTROL, 200, 256)
|
|
PLAY_SOUND_FROM_ENTITY(-1, "Pierce", osPiercingGun.ObjectIndex, "FAMILY_6_SOUNDS")
|
|
|
|
IF ( iConversationCounter < 2 )
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_EAR", CONV_PRIORITY_MEDIUM)
|
|
iConversationCounter++
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT bNose AND NOT bBrow
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_SPECIAL2,0,1)
|
|
ELIF bNose AND NOT bBrow
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_SPECIAL2,0,4)
|
|
ELIF NOT bNose AND bBrow
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_SPECIAL2,0,5)
|
|
ELIF bNose AND bBrow
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_SPECIAL2,0,7)
|
|
ENDIF
|
|
|
|
ePiercingStage = PIERCING_IDLE
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1000, 2000)
|
|
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_PIERCE_LAZLOW_COMPLETED(INT &iStageProgress)
|
|
|
|
MANAGE_PIERCING_STAGES()
|
|
MANAGE_PIERCING_HELP_TEXT()
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID)
|
|
|
|
REQUEST_MODEL(osPiercingGun.ModelName)
|
|
REQUEST_ANIM_DICT("missfam6ig_1_pierce")
|
|
REQUEST_ANIM_DICT("missfam6ig_7_tattoo")
|
|
REQUEST_SCRIPT_AUDIO_BANK("FAM6_PIERCING_GUN")
|
|
|
|
IF HAS_MODEL_LOADED(osPiercingGun.ModelName)
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_1_pierce")
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_7_tattoo")
|
|
AND REQUEST_SCRIPT_AUDIO_BANK("FAM6_PIERCING_GUN")
|
|
|
|
iPierceSceneID = CREATE_SYNCHRONIZED_SCENE(<< 324.130, 181.290, 102.600 >>, << 0, 0, -22.320 >>)
|
|
|
|
IF HAS_MISSION_OBJECT_BEEN_CREATED(osPiercingGun)
|
|
IF DOES_ENTITY_EXIST(osPiercingGun.ObjectIndex) AND NOT IS_ENTITY_DEAD(osPiercingGun.ObjectIndex)
|
|
ATTACH_ENTITY_TO_ENTITY(osPiercingGun.ObjectIndex, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0.0, 0.0, 0.0>>, <<0.0, 0.0, 0.0>>)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iPierceSceneID, "missfam6ig_1_pierce", "ig_1_loop_michael", INSTANT_BLEND_IN, SLOW_BLEND_OUT )
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iPierceSceneID, "missfam6ig_1_pierce", "ig_1_loop_lazlow", INSTANT_BLEND_IN, SLOW_BLEND_OUT )
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
ENDIF
|
|
|
|
IF NOT DOES_CAM_EXIST(ScriptedCamera)
|
|
ScriptedCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE)
|
|
SET_CAM_PARAMS(ScriptedCamera, << 323.4799, 178.8823, 104.7932 >>, << -23.9135, 13.3903, -17.3261 >>, 25.0)
|
|
SHAKE_CAM(ScriptedCamera,"HAND_SHAKE",0.5)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
|
|
IF NOT DOES_CAM_EXIST(AnimatedCamera)
|
|
AnimatedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, FALSE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
WARP_PED(psJimmy.PedIndex, psJimmy.vPosition, psJimmy.fHeading, FALSE, FALSE, FALSE)
|
|
TASK_PLAY_ANIM(psJimmy.PedIndex, "missfam6ig_7_tattoo", "ig_7_idle_01_jimmy", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psJimmy.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psJimmy.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
WARP_PED(psTracey.PedIndex, psTracey.vPosition, psTracey.fHeading, FALSE, FALSE, FALSE)
|
|
TASK_PLAY_ANIM(psTracey.PedIndex, "missfam6ig_7_tattoo", "ig_7_idle_02_tracey", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psTracey.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTracey.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(osPiercingGun.ModelName)
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
bEar = FALSE
|
|
bNose = FALSE
|
|
bBrow = FALSE
|
|
iStruggleConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1000, 1500)
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(250, 1000)
|
|
iConversationCounter = 0
|
|
iIdle1Conversationcounter = 0
|
|
iIdle2Conversationcounter = 0
|
|
iIdleConversationcounter = 0
|
|
ePiercingStage = PIERCING_IDLE
|
|
|
|
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(FAM6_PIERCING_TIME)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
START_AUDIO_SCENE("FAMILY_6_PIERCE_LAZLOW_MG")
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGH)
|
|
bReplayStartEventTriggered = TRUE
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
SETUP_PC_CONTROLS()
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 101
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID) AND GET_SYNCHRONIZED_SCENE_PHASE(iPierceSceneID) >= 1
|
|
|
|
SET_CAM_ACTIVE(AnimatedCamera, FALSE)
|
|
SET_CAM_ACTIVE(ScriptedCamera, TRUE)
|
|
|
|
iPierceSceneID = CREATE_SYNCHRONIZED_SCENE(<< 324.130, 181.290, 102.600 >>, << 0, 0, -22.320 >>)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iPierceSceneID, "missfam6ig_1_pierce", "ig_1_loop_michael", SLOW_BLEND_IN, SLOW_BLEND_OUT )
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iPierceSceneID, "missfam6ig_1_pierce", "ig_1_loop_lazlow",SLOW_BLEND_IN, SLOW_BLEND_OUT )
|
|
ENDIF
|
|
|
|
iStageProgress = 1
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID)
|
|
AND GET_SYNCHRONIZED_SCENE_PHASE(iPierceSceneID) >= 1
|
|
|
|
iPierceSceneID = CREATE_SYNCHRONIZED_SCENE(<< 324.130, 181.290, 102.600 >>, << 0, 0, -22.320 >>)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iPierceSceneID, "missfam6ig_1_pierce", "ig_1_loop_michael", SLOW_BLEND_IN, SLOW_BLEND_OUT )
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iPierceSceneID, "missfam6ig_1_pierce", "ig_1_loop_lazlow",SLOW_BLEND_IN, SLOW_BLEND_OUT )
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iPierceSceneID)
|
|
IF (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_SCRIPT_RDOWN) AND NOT bEar)
|
|
|
|
iPierceSceneID = CREATE_SYNCHRONIZED_SCENE(<< 324.130, 181.290, 102.600 >>, << 0.0, 0.0, -22.320 >>)
|
|
|
|
SET_CAM_ACTIVE(AnimatedCamera, TRUE)
|
|
PLAY_CAM_ANIM(AnimatedCamera,"ig_1_ear_cam","missfam6ig_1_pierce",<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>,CAF_LOOPING)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iPierceSceneID, "missfam6ig_1_pierce", "ig_1_ear_michael", SLOW_BLEND_IN, SLOW_BLEND_OUT )
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iPierceSceneID, "missfam6ig_1_pierce", "ig_1_ear_lazlow", SLOW_BLEND_IN, SLOW_BLEND_OUT )
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
TASK_PLAY_ANIM(psJimmy.PedIndex,"missfam6ig_7_tattoo", "ig_7_idle_01_jimmy", INSTANT_BLEND_IN, INSTANT_BLEND_OUT,-1,AF_LOOPING)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
TASK_PLAY_ANIM(psTracey.PedIndex,"missfam6ig_7_tattoo", "ig_7_idle_03_tracey", INSTANT_BLEND_IN, INSTANT_BLEND_OUT,-1,AF_LOOPING)
|
|
ENDIF
|
|
|
|
bEar = TRUE
|
|
ePiercingStage = PIERCING_EAR
|
|
|
|
IF bNose AND bBrow
|
|
iStageProgress++
|
|
ELSE
|
|
iStageProgress = 101
|
|
ENDIF
|
|
|
|
ELIF (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_SCRIPT_RRIGHT) AND NOT bNose)
|
|
|
|
iPierceSceneID = CREATE_SYNCHRONIZED_SCENE(<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
|
|
SET_CAM_ACTIVE(AnimatedCamera, TRUE)
|
|
PLAY_CAM_ANIM(AnimatedCamera, "ig_1_nose_cam", "missfam6ig_1_pierce", << 324.130, 181.290, 102.600 >>, << 0.0, 0.0, -22.320 >>, CAF_LOOPING)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iPierceSceneID, "missfam6ig_1_pierce", "ig_1_nose_michael", SLOW_BLEND_IN, SLOW_BLEND_OUT )
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iPierceSceneID, "missfam6ig_1_pierce", "ig_1_nose_lazlow", SLOW_BLEND_IN, SLOW_BLEND_OUT )
|
|
ENDIF
|
|
|
|
bNose = TRUE
|
|
ePiercingStage = PIERCING_NOSE
|
|
|
|
IF bEar AND bBrow
|
|
iStageProgress++
|
|
ELSE
|
|
iStageProgress = 101
|
|
ENDIF
|
|
|
|
ELIF (IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_SCRIPT_RLEFT) AND NOT bBrow)
|
|
|
|
iPierceSceneID = CREATE_SYNCHRONIZED_SCENE(<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
|
|
SET_CAM_ACTIVE(AnimatedCamera, TRUE)
|
|
PLAY_CAM_ANIM(AnimatedCamera,"ig_1_brow_cam","missfam6ig_1_pierce",<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>,CAF_LOOPING)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iPierceSceneID, "missfam6ig_1_pierce", "ig_1_brow_michael", SLOW_BLEND_IN, SLOW_BLEND_OUT )
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iPierceSceneID, "missfam6ig_1_pierce", "ig_1_brow_lazlow", SLOW_BLEND_IN, SLOW_BLEND_OUT )
|
|
ENDIF
|
|
|
|
bBrow = TRUE
|
|
ePiercingStage = PIERCING_BROW
|
|
|
|
IF bEar AND bNose
|
|
iStageProgress++
|
|
ELSE
|
|
iStageProgress = 101
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF HAS_ANIM_EVENT_FIRED(PLAYER_PED_ID(), GET_HASH_KEY("last_piercing"))
|
|
IF ( bCutsceneAssetsRequested = TRUE )
|
|
|
|
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED()
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
IF ( bReplayStartEventTriggered = TRUE )
|
|
IF ( bReplayStopEventTriggered = FALSE )
|
|
REPLAY_STOP_EVENT()
|
|
bReplayStopEventTriggered = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CLEANUP_PC_CONTROLS()
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
|
|
IF ( iConversationCounter >= 2 )
|
|
REQUEST_CUTSCENE("fam_6_mcs_3") //request the cutscene after two piercings have been done
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(FALSE, TRUE, FALSE, FALSE, FALSE)
|
|
bCutsceneAssetsRequested = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_CUTSCENE_SHOP_2_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF HAS_REQUESTED_CUTSCENE_LOADED("fam_6_mcs_3")
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF IS_PED_GROUP_MEMBER(psJimmy.PedIndex, PLAYER_GROUP_ID())
|
|
REMOVE_PED_FROM_GROUP(psJimmy.PedIndex)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psJimmy.PedIndex, "Jimmy", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psJimmy.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psTracey.PedIndex, "Tracy", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psTracey.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psLazlow.PedIndex, "Lazlow", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psLazlow.ModelName)
|
|
ENDIF
|
|
|
|
REGISTER_ENTITY_FOR_CUTSCENE(osShirt.ObjectIndex, "Lazlow_Shirt", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, osShirt.ModelName)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(osTattooNeedle.ObjectIndex, "Tattoo_Gun", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, osTattooNeedle.ModelName)
|
|
|
|
IF DOES_ENTITY_EXIST(osPiercingGun.ObjectIndex)
|
|
IF NOT IS_ENTITY_DEAD(osPiercingGun.ObjectIndex)
|
|
IF IS_ENTITY_ATTACHED(osPiercingGun.ObjectIndex)
|
|
DETACH_ENTITY(osPiercingGun.ObjectIndex, FALSE, TRUE)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(osPiercingGun.ObjectIndex, "Piercing_Gun", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, osPiercingGun.ModelName)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
STOP_AUDIO_SCENES()
|
|
START_CUTSCENE()
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ELSE
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(FALSE, TRUE, FALSE, FALSE, FALSE)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1 //fade screen in if screen was faded out due to shit skip or debug skip
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
REMOVE_ANIM_DICT("missfam6ig_1_pierce")
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
DESTROY_CAM(ScriptedCamera)
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(AnimatedCamera)
|
|
DESTROY_CAM(AnimatedCamera)
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
REQUEST_MODEL(osTattooNeedle.ModelName)
|
|
REQUEST_ANIM_DICT("missfam6ig_7_tattoo")
|
|
|
|
mov = REQUEST_SCALEFORM_MOVIE("tattoo_buttons")
|
|
|
|
IF IS_PC_VERSION()
|
|
mov_kb = REQUEST_SCALEFORM_MOVIE("tattoo_keys")
|
|
ENDIF
|
|
|
|
IF NOT DOES_CAM_EXIST(ScriptedCamera)
|
|
ScriptedCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE)
|
|
SET_CAM_PARAMS(ScriptedCamera, << 326.1551, 179.2442, 104.5627 >>, << -36.8795, 13.4340, 33.8400 >>, 52.0, 0)
|
|
SHAKE_CAM(ScriptedCamera,"HAND_SHAKE",0.5)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
|
|
IF NOT DOES_CAM_EXIST(AnimatedCamera)
|
|
AnimatedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, FALSE)
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(osShirt.ObjectIndex)
|
|
IF DOES_CUTSCENE_ENTITY_EXIST("Lazlow_Shirt")
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Lazlow_Shirt"))
|
|
osShirt.ObjectIndex = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Lazlow_Shirt"))
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created object Lazlow_Shirt in the cutscene.")
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(osTattooNeedle.ObjectIndex)
|
|
IF DOES_CUTSCENE_ENTITY_EXIST("Tattoo_Gun")
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Tattoo_Gun"))
|
|
osTattooNeedle.ObjectIndex = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Tattoo_Gun"))
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Created object Tattoo_Gun in the cutscene.")
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
REPLAY_STOP_EVENT()
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Lazlow_Shirt")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Lazlow_Shirt.")
|
|
#ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osShirt.ObjectIndex)
|
|
IF NOT IS_ENTITY_DEAD(osShirt.ObjectIndex)
|
|
SET_ENTITY_INVINCIBLE(osShirt.ObjectIndex, TRUE)
|
|
FREEZE_ENTITY_POSITION(osShirt.ObjectIndex, TRUE)
|
|
SET_ENTITY_COLLISION(osShirt.ObjectIndex, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Piercing_Gun")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Piercing_Gun.")
|
|
#ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osPiercingGun.ObjectIndex)
|
|
IF NOT IS_ENTITY_DEAD(osPiercingGun.ObjectIndex)
|
|
SET_ENTITY_INVINCIBLE(osPiercingGun.ObjectIndex, TRUE)
|
|
FREEZE_ENTITY_POSITION(osPiercingGun.ObjectIndex, TRUE)
|
|
SET_ENTITY_COLLISION(osPiercingGun.ObjectIndex, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Tattoo_Gun")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Tattoo_Gun.")
|
|
#ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osTattooNeedle.ObjectIndex)
|
|
IF NOT IS_ENTITY_DEAD(osTattooNeedle.ObjectIndex)
|
|
IF NOT IS_ENTITY_ATTACHED(osTattooNeedle.ObjectIndex)
|
|
ATTACH_ENTITY_TO_ENTITY(osTattooNeedle.ObjectIndex, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Jimmy")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Jimmy.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_BERD, 0, 0)
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
SEQUENCE_INDEX JimmySequenceIndex
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
OPEN_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, psLazlow.PedIndex)
|
|
TASK_PLAY_ANIM(NULL, "missfam6ig_7_tattoo", "ig_7_idle_02_jimmy", WALK_BLEND_IN, WALK_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
CLOSE_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(psJimmy.PedIndex, JimmySequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psJimmy.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psJimmy.PedIndex, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Tracy")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Tracy.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
TASK_PLAY_ANIM(psTracey.PedIndex, "missfam6ig_7_tattoo", "ig_7_idle_01_tracey", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psTracey.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTracey.PedIndex, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Michael.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
VECTOR vMichaelPosition, vMichaelRotation
|
|
vMichaelPosition = GET_ANIM_INITIAL_OFFSET_POSITION("missfam6ig_7_tattoo","ig_7_loop_michael",<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
vMichaelRotation = GET_ANIM_INITIAL_OFFSET_ROTATION("missfam6ig_7_tattoo","ig_7_loop_michael",<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
SET_ENTITY_ROTATION(PLAYER_PED_ID(), vMichaelRotation)
|
|
SET_ENTITY_COORDS_NO_OFFSET(PLAYER_PED_ID(), vMichaelPosition)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Lazlow")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Lazlow.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
VECTOR vLazlowPosition, vLazlowRotation
|
|
vLazlowPosition = GET_ANIM_INITIAL_OFFSET_POSITION("missfam6ig_7_tattoo","ig_7_loop_lazlow",<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
vLazlowRotation = GET_ANIM_INITIAL_OFFSET_ROTATION("missfam6ig_7_tattoo","ig_7_loop_lazlow",<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
SET_ENTITY_ROTATION(psLazlow.PedIndex, vLazlowRotation)
|
|
SET_ENTITY_COORDS_NO_OFFSET(psLazlow.PedIndex, vLazlowPosition)
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_TORSO, 1, 0)
|
|
ENDIF
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
|
|
IF NOT IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
AND NOT IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
|
|
IF HAS_SCALEFORM_LOADED()
|
|
AND HAS_MODEL_LOADED(osTattooNeedle.ModelName)
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_7_tattoo")
|
|
|
|
IF HAS_MISSION_OBJECT_BEEN_CREATED(osTattooNeedle)
|
|
IF NOT IS_ENTITY_ATTACHED(osTattooNeedle.ObjectIndex)
|
|
ATTACH_ENTITY_TO_ENTITY(osTattooNeedle.ObjectIndex, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_MOVE_NETWORK_ADVANCED_BY_NAME(PLAYER_PED_ID(), "minigame_tattoo_michael_parts", << 324.130, 181.290, 102.600 >>, << 0.0, 0.0, -22.320 >>)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_MOVE_NETWORK_ADVANCED_BY_NAME(psLazlow.PedIndex, "minigame_tattoo_lazlow_parts",<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex, FALSE, TRUE) //fix for B*1567738, CS_LAZLOW not being in synch
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
IF ( bCutsceneSkipped = TRUE )
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
|
|
IF NOT IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
AND NOT IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
|
|
IF HAS_SCALEFORM_LOADED()
|
|
AND HAS_MODEL_LOADED(osTattooNeedle.ModelName)
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_7_tattoo")
|
|
|
|
IF HAS_MISSION_OBJECT_BEEN_CREATED(osTattooNeedle)
|
|
ATTACH_ENTITY_TO_ENTITY(osTattooNeedle.ObjectIndex, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_MOVE_NETWORK_ADVANCED_BY_NAME(PLAYER_PED_ID(), "minigame_tattoo_michael_parts", << 324.130, 181.290, 102.600 >>, << 0.0, 0.0, -22.320 >>)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_MOVE_NETWORK_ADVANCED_BY_NAME(psLazlow.PedIndex, "minigame_tattoo_lazlow_parts",<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
SEQUENCE_INDEX JimmySequenceIndex
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
OPEN_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, psLazlow.PedIndex)
|
|
TASK_PLAY_ANIM(NULL, "missfam6ig_7_tattoo", "ig_7_idle_02_jimmy", WALK_BLEND_IN, WALK_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
CLOSE_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(psJimmy.PedIndex, JimmySequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psJimmy.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psJimmy.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
TASK_PLAY_ANIM(psTracey.PedIndex, "missfam6ig_7_tattoo", "ig_7_idle_01_tracey", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psTracey.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTracey.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) //if cutscene was skipped, fade out and don't fade in
|
|
bCutsceneSkipped = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(osTattooNeedle.ModelName)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
//don't fade in here, wait with fade in the next stage
|
|
//this should fix issues like B*2079140 where move task was given but peds don't perform it just yet
|
|
//IF IS_SCREEN_FADED_OUT()
|
|
// DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
//ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC MANAGE_TATTOO_STAGES()
|
|
|
|
IF HAS_SOUND_FINISHED(iTattooSoundID)
|
|
PLAY_SOUND_FROM_ENTITY(iTattooSoundID, "Tattoo", osTattooNeedle.ObjectIndex, "FAMILY_6_SOUNDS")
|
|
ENDIF
|
|
|
|
SWITCH eTattooingStage
|
|
|
|
CASE TATTOOING_IDLE
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
IF ( iConversationTimer != 0 )
|
|
IF GET_GAME_TIMER() - iConversationTimer > 0
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_IDLET_3")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_IDLET", CONV_PRIORITY_MEDIUM)
|
|
iConversationCounter++
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(9000, 12000)
|
|
IF ( iConversationCounter >= 3 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_IDLET_3", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ( iStruggleConversationTimer != 0 )
|
|
IF GET_GAME_TIMER() - iStruggleConversationTimer > 0
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_STRUG", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
iStruggleConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(3500, 6000)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE TATTOOING_CHEST
|
|
|
|
IF fTattooPosition < 0.95
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
IF ( iConversationTimer != 0 )
|
|
IF GET_GAME_TIMER() - iConversationTimer > 0
|
|
|
|
SWITCH GET_RANDOM_INT_IN_RANGE(0, 4)
|
|
CASE 0
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TATC_3")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_TATC", CONV_PRIORITY_MEDIUM)
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(6000, 9000)
|
|
iIdleConversationcounter++
|
|
IF ( iIdleConversationcounter >= 3 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TATC_3", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TATA_14")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_TATA", CONV_PRIORITY_MEDIUM)
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(6000, 9000)
|
|
iIdle1Conversationcounter++
|
|
IF ( iIdle1Conversationcounter >= 14 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TATA_14", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TATM_8")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_TATM", CONV_PRIORITY_MEDIUM)
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(6000, 9000)
|
|
iIdle2Conversationcounter++
|
|
IF ( iIdle2Conversationcounter >= 8 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TATM_8", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_REACT_3")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_REACT", CONV_PRIORITY_MEDIUM)
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(6000, 9000)
|
|
iIdle3Conversationcounter++
|
|
IF ( iIdle3Conversationcounter >= 3 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_REACT_3", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ( iStruggleConversationTimer != 0 )
|
|
IF GET_GAME_TIMER() - iStruggleConversationTimer > 0
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_STRUG", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
iStruggleConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(3500, 6000)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH iTattooCameraProgress
|
|
CASE 0
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
bScaleformDrawing = TRUE
|
|
PLAY_CAM_ANIM(AnimatedCamera, "front_cam", "missfam6ig_7_tattoo", << 324.130, 181.290, 102.600 >>, << 0, 0, -22.320 >>, CAF_LOOPING)
|
|
iTattooCameraProgress++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF fTattooPosition > 0.96
|
|
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
// KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
//ENDIF
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_TATFIN", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TATFIN", TRUE)
|
|
iTattooCameraProgress++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
|
|
CASE TATTOOING_BACK
|
|
|
|
IF fTattooPosition < 0.95
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
IF ( iConversationTimer != 0 )
|
|
IF GET_GAME_TIMER() - iConversationTimer > 0
|
|
|
|
SWITCH GET_RANDOM_INT_IN_RANGE(0, 3)
|
|
CASE 0
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TATB_4")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_TATB", CONV_PRIORITY_MEDIUM)
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(6000, 9000)
|
|
iIdleConversationcounter++
|
|
IF ( iIdleConversationcounter >= 4 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TATB_4", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TATA_14")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_TATA", CONV_PRIORITY_MEDIUM)
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(6000, 9000)
|
|
iIdle1Conversationcounter++
|
|
IF ( iIdle1Conversationcounter >= 14 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TATA_14", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TATM_8")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_TATM", CONV_PRIORITY_MEDIUM)
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(6000, 9000)
|
|
iIdle2Conversationcounter++
|
|
IF ( iIdle2Conversationcounter >= 8 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TATM_8", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_REACT_3")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_REACT", CONV_PRIORITY_MEDIUM)
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(6000, 9000)
|
|
iIdle3Conversationcounter++
|
|
IF ( iIdle3Conversationcounter >= 3 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_REACT_3", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ( iStruggleConversationTimer != 0 )
|
|
IF GET_GAME_TIMER() - iStruggleConversationTimer > 0
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_STRUG", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
iStruggleConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(3500, 6000)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH iTattooCameraProgress
|
|
CASE 0
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
bScaleformDrawing = TRUE
|
|
PLAY_CAM_ANIM(AnimatedCamera, "back_cam", "missfam6ig_7_tattoo", << 324.130, 181.290, 102.600 >>, << 0.0, 0.0, -22.320 >>, CAF_LOOPING)
|
|
iTattooCameraProgress++
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 1
|
|
IF fTattooPosition > 0.96
|
|
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
// KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
//ENDIF
|
|
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_TATFIN", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TATFIN", TRUE)
|
|
iTattooCameraProgress++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC CHEST_DRAWING(SCALEFORM_INDEX &localMov, INT &iScaleformProgress)
|
|
|
|
switch iScaleformProgress
|
|
case 0
|
|
bTattooInputReady = false
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(SPACER))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
iScaleformProgress++
|
|
endif
|
|
break
|
|
case 1
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_DOWN_LEFT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DOWN))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_DOWN_RIGHT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
iScaleformProgress++
|
|
break
|
|
case 2
|
|
iScaleformProgress++
|
|
break
|
|
case 3
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_LEFT
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
break
|
|
case 4
|
|
if fTattooPosition >= 0.066
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "PartOne")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "PartOne")
|
|
IF BEGIN_SCALEFORM_MOVIE_METHOD(localMov, "ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_UP))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_DOWN
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.066
|
|
bTattooInputReady = TRUE
|
|
iScaleformProgress++
|
|
ELSE
|
|
bTattooInputReady = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
case 5
|
|
if fTattooPosition >= 0.133
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_UP_RIGHT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_RIGHT
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.133
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
break
|
|
case 6
|
|
if fTattooPosition >= 0.2
|
|
bTattooInputReady = false
|
|
fTattooPosition = 0.2
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "PartTwo")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "PartTwo")
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_DECL,0,1)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_RIGHT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_UP
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.2
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
break
|
|
case 7
|
|
if fTattooPosition >= 0.4
|
|
bTattooInputReady = false
|
|
fTattooPosition = 0.4
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "PartThree")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "PartThree")
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_DOWN_RIGHT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.4
|
|
iScaleformProgress++
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_UP_RIGHT
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_DECL,0,2)
|
|
bTattooInputReady = true
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
break
|
|
case 8
|
|
if fTattooPosition >= 0.466
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DOWN))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.466
|
|
eTattooDirection = RIGHT_STICK_RIGHT
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
break
|
|
case 9
|
|
if fTattooPosition >= 0.533
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_DOWN_RIGHT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_RIGHT
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.533
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
|
|
endif
|
|
break
|
|
case 10
|
|
if fTattooPosition >= 0.6
|
|
fTattooPosition = 0.6
|
|
bTattooInputReady = false
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "PartFour")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "PartFour")
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_DECL,0,3)
|
|
eTattooDirection = RIGHT_STICK_DOWN
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DOWN))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.6
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
break
|
|
case 11
|
|
if fTattooPosition >= 0.8
|
|
fTattooPosition = 0.8
|
|
bTattooInputReady = false
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "PartFive")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "PartFive")
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_DOWN_LEFT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_DECL,0,4)
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_RIGHT
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.8
|
|
iScaleformProgress++
|
|
bTattooInputReady = true
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
break
|
|
case 12
|
|
if fTattooPosition >= 0.866
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(SPACER))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_DOWN
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.866
|
|
iScaleformProgress++
|
|
bTattooInputReady = true
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
break
|
|
case 13
|
|
if fTattooPosition >= 0.933
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(SPACER))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_LEFT
|
|
bTattooInputReady = true
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.933
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 14
|
|
IF fTattooPosition >= 0.99
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(SPACER))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 1
|
|
iScaleformProgress = 0
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_DECL,0,5)
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_LEFT
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC BACK_DRAWING(SCALEFORM_INDEX &localMov, INT &iScaleformProgress)
|
|
switch iScaleformProgress
|
|
case 0
|
|
//scale form
|
|
bTattooInputReady = false
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(SPACER))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
iScaleformProgress++
|
|
endif
|
|
break
|
|
case 1
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_DOWN_LEFT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DOWN))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_DOWN_RIGHT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
iScaleformProgress++
|
|
break
|
|
case 2
|
|
iScaleformProgress++
|
|
break
|
|
case 3
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_LEFT
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
break
|
|
case 4
|
|
if fTattooPosition >= 0.066
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "BackPartOne")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "BackPartOne")
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_UP))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_DOWN
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.066
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
break
|
|
case 5
|
|
if fTattooPosition >= 0.133
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_UP_RIGHT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_RIGHT
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.133
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
break
|
|
case 6
|
|
if fTattooPosition >= 0.2
|
|
bTattooInputReady = false
|
|
fTattooPosition = 0.2
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "BackPartTwo")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "BackPartTwo")
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_DECL,1,1)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_RIGHT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_UP
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.2
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
break
|
|
case 7
|
|
if fTattooPosition >= 0.4
|
|
bTattooInputReady = false
|
|
fTattooPosition = 0.4
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "BackPartThree")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "BackPartThree")
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_DOWN_RIGHT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.4
|
|
iScaleformProgress++
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_UP_RIGHT
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_DECL,1,2)
|
|
bTattooInputReady = true
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
break
|
|
case 8
|
|
if fTattooPosition >= 0.466
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DOWN))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.466
|
|
eTattooDirection = RIGHT_STICK_RIGHT
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
break
|
|
case 9
|
|
if fTattooPosition >= 0.533
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_DOWN_RIGHT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_RIGHT
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.533
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
|
|
endif
|
|
break
|
|
case 10
|
|
if fTattooPosition >= 0.6
|
|
fTattooPosition = 0.6
|
|
bTattooInputReady = false
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "BackPartFour")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "BackPartFour")
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_DECL,1,3)
|
|
eTattooDirection = RIGHT_STICK_DOWN
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DOWN))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.6
|
|
bTattooInputReady = true
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
break
|
|
case 11
|
|
if fTattooPosition >= 0.8
|
|
fTattooPosition = 0.8
|
|
bTattooInputReady = false
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
and IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "BackPartFive")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "BackPartFive")
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(RIGHT_STICK_DIAGONAL_DOWN_LEFT))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_DECL,1,4)
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_RIGHT
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.8
|
|
iScaleformProgress++
|
|
bTattooInputReady = true
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
endif
|
|
endif
|
|
break
|
|
case 12
|
|
if fTattooPosition >= 0.866
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(SPACER))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_DOWN
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.866
|
|
iScaleformProgress++
|
|
bTattooInputReady = true
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
break
|
|
case 13
|
|
if fTattooPosition >= 0.933
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(SPACER))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_LEFT
|
|
bTattooInputReady = true
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 0.933
|
|
iScaleformProgress++
|
|
else
|
|
bTattooInputReady = false
|
|
endif
|
|
endif
|
|
break
|
|
case 14
|
|
if fTattooPosition >= 0.99
|
|
if BEGIN_SCALEFORM_MOVIE_METHOD(localMov,"ADD_BUTTON")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(enum_to_int(SPACER))
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
fTattooSpeed = 0.005
|
|
fTattooPosition = 1
|
|
iScaleformProgress = 0
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex,PED_COMP_DECL,1,5)
|
|
eTattooDirection = RIGHT_STICK_DIAGONAL_DOWN_LEFT
|
|
endif
|
|
endif
|
|
break
|
|
endswitch
|
|
endproc
|
|
|
|
PROC MANAGE_TATTOO_MOVE()
|
|
|
|
SCALEFORM_INDEX mov_local
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL)
|
|
mov_local = mov_kb
|
|
|
|
ELSE
|
|
mov_local = mov
|
|
|
|
ENDIF
|
|
|
|
IF bScaleformDrawing
|
|
|
|
INT i_right_stick_x, i_right_stick_y, angle
|
|
FLOAT increase_val, Max_val
|
|
|
|
angle = GET_STICK_ROTATION_ANGLE(STICK_RIGHT)
|
|
i_right_stick_x = FLOOR(GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_X) * 127)
|
|
i_right_stick_y = FLOOR(GET_CONTROL_NORMAL(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y) * 127)
|
|
|
|
|
|
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
|
|
|
|
//DISPLAY_TEXT_WITH_NUMBER( 0.6, 0.1, "NUMBER", iRightX )
|
|
//DISPLAY_TEXT_WITH_NUMBER( 0.6, 0.2, "NUMBER", iRightY )
|
|
|
|
// Make input 'sticky' so it doesn't auto-centre.
|
|
IF ( i_right_stick_x = 0 AND i_right_stick_y = 0 )
|
|
|
|
i_right_stick_x = iStickXPrev
|
|
i_right_stick_y = iStickYPrev
|
|
|
|
ENDIF
|
|
|
|
iStickXPrev = i_right_stick_x
|
|
iStickYPrev = i_right_stick_y
|
|
|
|
ENDIF
|
|
|
|
IF HAS_SCALEFORM_LOADED()
|
|
|
|
SET_SCRIPT_GFX_DRAW_BEHIND_PAUSEMENU(FALSE)
|
|
SET_WIDESCREEN_FORMAT(WIDESCREEN_FORMAT_CENTRE)
|
|
|
|
IF ( GET_IS_WIDESCREEN() = FALSE )
|
|
OR ( GET_PROFILE_SETTING(PROFILE_DISPLAY_LANGUAGE) = ENUM_TO_INT(LANGUAGE_KOREAN) )
|
|
OR ( GET_PROFILE_SETTING(PROFILE_DISPLAY_LANGUAGE) = ENUM_TO_INT(LANGUAGE_CHINESE) )
|
|
OR ( GET_PROFILE_SETTING(PROFILE_DISPLAY_LANGUAGE) = ENUM_TO_INT(LANGUAGE_JAPANESE) )
|
|
OR ( GET_PROFILE_SETTING(PROFILE_DISPLAY_LANGUAGE) = ENUM_TO_INT(LANGUAGE_CHINESE_SIMPLIFIED) )
|
|
TATTOO_BUTTONS_Y = 0.745
|
|
ENDIF
|
|
|
|
IF NOT IS_PAUSE_MENU_ACTIVE()
|
|
DRAW_SCALEFORM_MOVIE(mov_local, TATTOO_BUTTONS_X, TATTOO_BUTTONS_Y,
|
|
TATTOO_BUTTONS_WIDTH * TATTOO_BUTTONS_SCALE, TATTOO_BUTTONS_HEIGHT * TATTOO_BUTTONS_SCALE, 100, 100, 100, 255)
|
|
ENDIF
|
|
|
|
IF eTattooingStage = TATTOOING_CHEST
|
|
fTattooSpeed = 0.005
|
|
CHEST_DRAWING(mov, iScaleformProgressPad)
|
|
|
|
IF IS_PC_VERSION()
|
|
CHEST_DRAWING(mov_kb, iScaleformProgressKBM)
|
|
ENDIF
|
|
ELIF eTattooingStage = TATTOOING_BACK
|
|
fTattooSpeed = 0.005
|
|
BACK_DRAWING(mov, iScaleformProgressPad)
|
|
IF IS_PC_VERSION()
|
|
BACK_DRAWING(mov_kb, iScaleformProgressKBM)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bTattooInputReady
|
|
|
|
IF NOT IS_STICK_IN_DEAD_ZONE(STICK_RIGHT)
|
|
|
|
switch eTattooDirection
|
|
case RIGHT_STICK_UP
|
|
if i_right_stick_x >= -40
|
|
and i_right_stick_x <= 40
|
|
max_val = -127
|
|
increase_val = clamp(TO_FLOAT(i_right_stick_y),max_val,0)
|
|
endif
|
|
break
|
|
|
|
case RIGHT_STICK_DIAGONAL_UP_RIGHT
|
|
if i_right_stick_x >= 45
|
|
and i_right_stick_y <= -45
|
|
max_val = 192
|
|
increase_val = clamp(TO_FLOAT((i_right_stick_x + -i_right_stick_y)),0,max_val)
|
|
endif
|
|
break
|
|
|
|
case RIGHT_STICK_RIGHT
|
|
if i_right_stick_y >= -40
|
|
and i_right_stick_y <= 40
|
|
max_val = 127
|
|
increase_val = clamp(TO_FLOAT(i_right_stick_x),0,max_val)
|
|
endif
|
|
break
|
|
|
|
case RIGHT_STICK_DIAGONAL_DOWN_RIGHT
|
|
if i_right_stick_x >= 45
|
|
and i_right_stick_y >= 45
|
|
max_val = 192
|
|
increase_val = clamp(TO_FLOAT((i_right_stick_x + i_right_stick_y)),0,max_val)
|
|
endif
|
|
break
|
|
|
|
case RIGHT_STICK_DOWN
|
|
if i_right_stick_x >= -40
|
|
and i_right_stick_x <= 40
|
|
max_val = 127
|
|
increase_val = clamp(TO_FLOAT(i_right_stick_y),0,max_val)
|
|
endif
|
|
break
|
|
case RIGHT_STICK_DIAGONAL_DOWN_LEFT
|
|
if i_right_stick_x <= -45
|
|
and i_right_stick_y >= 45
|
|
max_val = 192
|
|
increase_val = clamp(TO_FLOAT((-i_right_stick_x + i_right_stick_y)),0,max_val)
|
|
endif
|
|
break
|
|
case RIGHT_STICK_LEFT
|
|
if i_right_stick_y >= -40
|
|
and i_right_stick_y <= 40
|
|
max_val = -127
|
|
increase_val = clamp(TO_FLOAT(i_right_stick_x),max_val,0)
|
|
endif
|
|
break
|
|
case RIGHT_STICK_DIAGONAL_UP_LEFT
|
|
if i_right_stick_x <= -45
|
|
and i_right_stick_y <= -45
|
|
max_val = 192
|
|
increase_val = clamp(TO_FLOAT((-i_right_stick_x + -i_right_stick_y)),0,max_val)
|
|
endif
|
|
break
|
|
endswitch
|
|
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DRAW_DEBUG_TEXT_2D(GET_STRING_FROM_FLOAT(increase_val), << 0.5, 0.5, 0.0 >>)
|
|
#ENDIF
|
|
|
|
IF NOT IS_STICK_IN_DEAD_ZONE(STICK_RIGHT)
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov_local, "SET_STICK_POINTER_ANGLE")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(angle) //pass in the current stick angle
|
|
IF ABSF(increase_val) > 0.0
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(HUD_COLOUR_YOGA)) //pass in the colour when stick is in position
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(HUD_COLOUR_WHITE)) //reset the color when stick is not in position
|
|
ENDIF
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ELSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(mov_local, "SET_STICK_POINTER_ANGLE")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(-1) //reset the stick and set default color
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
|
|
//work out percentage * speed
|
|
float increasePercentage = (increase_val / max_val)
|
|
FLOAT f_vel_y = increasePercentage * fTattooSpeed
|
|
|
|
IF NOT HAS_SOUND_FINISHED(iTattooSoundID)
|
|
SET_VARIABLE_ON_SOUND(iTattooSoundID,"DoTattoo",increasePercentage)
|
|
ENDIF
|
|
|
|
IF increasePercentage <= 0
|
|
SET_CONTROL_SHAKE(PLAYER_CONTROL,100,50)
|
|
ELSE
|
|
SET_CONTROL_SHAKE(PLAYER_CONTROL,250,ROUND(256*increasePercentage))
|
|
ENDIF
|
|
|
|
fTattooPosition = clamp((fTattooPosition + f_vel_y),0,1)
|
|
|
|
ELSE
|
|
|
|
SET_CONTROL_SHAKE(PLAYER_CONTROL, 100, 50)
|
|
|
|
IF NOT HAS_SOUND_FINISHED(iTattooSoundID)
|
|
SET_VARIABLE_ON_SOUND(iTattooSoundID, "DoTattoo", 0)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_TATTOO_LAZLOW_COMPLETED(INT &iStageProgress)
|
|
|
|
MANAGE_TATTOO_STAGES()
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
bChestTattoo = FALSE
|
|
eTattooingStage = TATTOOING_IDLE
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
|
|
IF NOT IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
AND NOT IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
|
|
REQUEST_MODEL(osTattooNeedle.ModelName)
|
|
REQUEST_ANIM_DICT("missfam6ig_7_tattoo")
|
|
|
|
mov = REQUEST_SCALEFORM_MOVIE("tattoo_buttons")
|
|
|
|
IF IS_PC_VERSION()
|
|
mov_kb = REQUEST_SCALEFORM_MOVIE("tattoo_keys")
|
|
ENDIF
|
|
|
|
IF HAS_SCALEFORM_LOADED()
|
|
AND HAS_MODEL_LOADED(osTattooNeedle.ModelName)
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_7_tattoo")
|
|
|
|
IF HAS_MISSION_OBJECT_BEEN_CREATED(osTattooNeedle)
|
|
ATTACH_ENTITY_TO_ENTITY(osTattooNeedle.ObjectIndex, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
ENDIF
|
|
|
|
TASK_MOVE_NETWORK_ADVANCED_BY_NAME(PLAYER_PED_ID(), "minigame_tattoo_michael_parts", << 324.130, 181.290, 102.600 >>, << 0.0, 0.0, -22.320 >>)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
|
|
TASK_MOVE_NETWORK_ADVANCED_BY_NAME(psLazlow.PedIndex, "minigame_tattoo_lazlow_parts",<< 324.130, 181.290, 102.600 >>,<< 0, 0, -22.320 >>)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
|
|
IF NOT DOES_CAM_EXIST(ScriptedCamera)
|
|
ScriptedCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE)
|
|
SET_CAM_PARAMS(ScriptedCamera, << 326.1551, 179.2442, 104.5627 >>, << -36.8795, 13.4340, 33.8400 >>, 52.0)
|
|
SHAKE_CAM(ScriptedCamera,"HAND_SHAKE",0.5)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
|
|
IF NOT DOES_CAM_EXIST(AnimatedCamera)
|
|
AnimatedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, FALSE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
SEQUENCE_INDEX JimmySequenceIndex
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
OPEN_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, psLazlow.PedIndex)
|
|
TASK_PLAY_ANIM(NULL, "missfam6ig_7_tattoo", "ig_7_idle_02_jimmy", WALK_BLEND_IN, WALK_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
CLOSE_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(psJimmy.PedIndex, JimmySequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psJimmy.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psJimmy.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
TASK_PLAY_ANIM(psTracey.PedIndex, "missfam6ig_7_tattoo", "ig_7_idle_01_tracey", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psTracey.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTracey.PedIndex, TRUE)
|
|
ENDIF
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(osTattooNeedle.ModelName)
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
iConversationCounter = 0
|
|
iIdleConversationcounter = 0
|
|
iIdle1Conversationcounter = 0
|
|
iIdle2Conversationcounter = 0
|
|
iStruggleConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1000, 1500)
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(250, 1000)
|
|
iScaleformProgressPad = 0
|
|
iScaleformProgressKBM = 0
|
|
iTattooCameraProgress = 0
|
|
fTattooPosition = 0.0
|
|
bChestTattoo = FALSE
|
|
bTattooInputReady = FALSE
|
|
eTattooingStage = TATTOOING_IDLE
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
START_AUDIO_SCENE("FAMILY_6_TATTOO_LAZLOW_MG")
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
bReplayStartEventTriggered = TRUE
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
SETUP_PC_CONTROLS()
|
|
iStickXPrev = 0
|
|
iStickYPrev = 0
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IF IS_SCREEN_FADED_IN()
|
|
AND NOT IS_SCREEN_FADING_IN()
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TATCH")
|
|
PRINT_HELP_FOREVER("FAM6_TATCH")
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TATCH", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
|
|
IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RRIGHT)
|
|
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "back")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "back")
|
|
|
|
SET_CAM_ACTIVE(AnimatedCamera, TRUE)
|
|
PLAY_CAM_ANIM(AnimatedCamera, "ig_7_back_intro_cam", "missfam6ig_7_tattoo", << 324.130, 181.290, 102.600 >>, << 0.0, 0.0, -22.320 >>)
|
|
|
|
bChestTattoo = FALSE
|
|
eTattooingStage = TATTOOING_BACK
|
|
g_replay.iReplayInt[0] = ENUM_TO_INT(TATTOOING_BACK) //fix for B*1918478, store Lazlow's tattoo info in a global int for next stage retry
|
|
|
|
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(FAM6_FRONT_OR_BACK)
|
|
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(FAM6_TATTOO_TIME)
|
|
|
|
iStageProgress++
|
|
|
|
ELIF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RLEFT)
|
|
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "front")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "front")
|
|
|
|
SET_CAM_ACTIVE(AnimatedCamera, TRUE)
|
|
PLAY_CAM_ANIM(AnimatedCamera, "ig_7_front_intro_cam", "missfam6ig_7_tattoo", << 324.130, 181.290, 102.600 >>, << 0.0, 0.0, -22.320 >>)
|
|
|
|
bChestTattoo = TRUE
|
|
eTattooingStage = TATTOOING_CHEST
|
|
g_replay.iReplayInt[0] = ENUM_TO_INT(TATTOOING_CHEST) //fix for B*1918478, store Lazlow's tattoo info in a global int for next stage retry
|
|
|
|
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(FAM6_TATTOO_TIME)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(500, 1500)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
IF IS_SCREEN_FADED_IN()
|
|
AND NOT IS_SCREEN_FADING_IN()
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_TAT")
|
|
PRINT_HELP_FOREVER("FAM6_TAT")
|
|
SET_LABEL_AS_TRIGGERED("FAM6_TAT", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
MANAGE_TATTOO_MOVE()
|
|
MANAGE_TATTOO_STAGES()
|
|
|
|
IF fTattooPosition >= 1.0
|
|
|
|
IF IS_HELP_MESSAGE_BEING_DISPLAYED()
|
|
CLEAR_HELP(TRUE)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 4
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_TATFIN")
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
IF fTattooPosition >= 1.0
|
|
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(PLAYER_PED_ID(), "success")
|
|
REQUEST_TASK_MOVE_NETWORK_STATE_TRANSITION(psLazlow.PedIndex, "success")
|
|
|
|
INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED()
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 5
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_ACTIVE(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_ACTIVE(psLazlow.PedIndex)
|
|
IF IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(PLAYER_PED_ID())
|
|
AND IS_TASK_MOVE_NETWORK_READY_FOR_TRANSITION(psLazlow.PedIndex)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
IF ( bReplayStartEventTriggered = TRUE )
|
|
IF ( bReplayStopEventTriggered = FALSE )
|
|
REPLAY_STOP_EVENT()
|
|
bReplayStopEventTriggered = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CLEANUP_PC_CONTROLS()
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
SWITCH eTattooingStage
|
|
CASE TATTOOING_BACK
|
|
REQUEST_CUTSCENE_WITH_PLAYBACK_LIST("fam_6_mcs_4", CS_SECTION_1 | CS_SECTION_2 | CS_SECTION_5)
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(TRUE, TRUE, FALSE, TRUE, bChestTattoo)
|
|
bCutsceneAssetsRequested = TRUE
|
|
ENDIF
|
|
|
|
BREAK
|
|
CASE TATTOOING_CHEST
|
|
REQUEST_CUTSCENE_WITH_PLAYBACK_LIST("fam_6_mcs_4", CS_SECTION_3 | CS_SECTION_4 | CS_SECTION_5)
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(TRUE, TRUE, FALSE, TRUE, bChestTattoo)
|
|
bCutsceneAssetsRequested = TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_CUTSCENE_SHOP_3_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
REQUEST_ANIM_DICT("missfam6ig_7_tattoo")
|
|
|
|
SWITCH eTattooingStage
|
|
|
|
CASE TATTOOING_IDLE
|
|
CASE TATTOOING_BACK
|
|
|
|
bChestTattoo = FALSE
|
|
|
|
IF HAS_REQUESTED_CUTSCENE_LOADED("fam_6_mcs_4", CS_SECTION_1 | CS_SECTION_2 | CS_SECTION_5) AND HAS_ANIM_DICT_LOADED("missfam6ig_7_tattoo")
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psLazlow.PedIndex, "Lazlow", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psLazlow.ModelName)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osTattooNeedle.ObjectIndex)
|
|
|
|
IF NOT HAS_SOUND_FINISHED(iTattooSoundID)
|
|
STOP_SOUND(iTattooSoundID)
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_DEAD(osTattooNeedle.ObjectIndex)
|
|
IF IS_ENTITY_ATTACHED(osTattooNeedle.ObjectIndex)
|
|
DETACH_ENTITY(osTattooNeedle.ObjectIndex, FALSE, TRUE)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(osTattooNeedle.ObjectIndex, "Tattoo_Gun", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, osTattooNeedle.ModelName)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
STOP_AUDIO_SCENES()
|
|
START_CUTSCENE()
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ELSE
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(TRUE, TRUE, FALSE, TRUE, bChestTattoo)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE TATTOOING_CHEST
|
|
|
|
bChestTattoo = TRUE
|
|
|
|
IF HAS_REQUESTED_CUTSCENE_LOADED("fam_6_mcs_4", CS_SECTION_3 | CS_SECTION_4 | CS_SECTION_5) AND HAS_ANIM_DICT_LOADED("missfam6ig_7_tattoo")
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psLazlow.PedIndex, "Lazlow", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psLazlow.ModelName)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osTattooNeedle.ObjectIndex)
|
|
|
|
IF NOT HAS_SOUND_FINISHED(iTattooSoundID)
|
|
STOP_SOUND(iTattooSoundID)
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_DEAD(osTattooNeedle.ObjectIndex)
|
|
IF IS_ENTITY_ATTACHED(osTattooNeedle.ObjectIndex)
|
|
DETACH_ENTITY(osTattooNeedle.ObjectIndex, FALSE, TRUE)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(osTattooNeedle.ObjectIndex, "Tattoo_Gun", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, osTattooNeedle.ModelName)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
STOP_AUDIO_SCENES()
|
|
START_CUTSCENE()
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ELSE
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(TRUE, TRUE, FALSE, TRUE, bChestTattoo)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
CLEANUP_MISSION_OBJECT(osShirt, TRUE)
|
|
CLEANUP_MISSION_OBJECT(osPiercingGun, TRUE)
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
DESTROY_CAM(ScriptedCamera)
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(AnimatedCamera)
|
|
DESTROY_CAM(AnimatedCamera)
|
|
ENDIF
|
|
|
|
//give tasks to jimmy and tracey as they are not part of this cutscene
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
WARP_PED(psTracey.PedIndex, <<321.58142, 181.34822, 102.58653>>, -125.61, FALSE, FALSE, FALSE)
|
|
TASK_PLAY_ANIM(psTracey.PedIndex, "missfam6ig_7_tattoo", "ig_7_idle_01_tracey", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
TASK_LOOK_AT_ENTITY(psTracey.PedIndex, psLazlow.PedIndex, INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psTracey.PedIndex)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
WARP_PED(psJimmy.PedIndex, <<321.65167, 182.52638, 102.58653>>, -115.96, FALSE, FALSE, FALSE)
|
|
SEQUENCE_INDEX JimmySequenceIndex
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
OPEN_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_TURN_PED_TO_FACE_ENTITY(NULL, psLazlow.PedIndex)
|
|
TASK_PLAY_ANIM(NULL, "missfam6ig_7_tattoo", "ig_7_idle_02_jimmy", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
CLOSE_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(psJimmy.PedIndex, JimmySequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_LOOK_AT_COORD(psJimmy.PedIndex, <<324.57983, 178.60126, 102.59248>>, INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psJimmy.PedIndex)
|
|
ENDIF
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
REQUEST_PTFX_ASSET()
|
|
REQUEST_MODEL(osScissors.ModelName)
|
|
REQUEST_MODEL(osPonyTail.ModelName)
|
|
REQUEST_ANIM_DICT("missfam6ig_8_ponytail")
|
|
REQUEST_SCRIPT_AUDIO_BANK("FAM6_PONYTAIL")
|
|
|
|
IF NOT DOES_CAM_EXIST(ScriptedCamera)
|
|
ScriptedCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE)
|
|
SET_CAM_PARAMS(ScriptedCamera, <<323.9763, 177.9908, 102.7844>>, <<23.5296, 13.8430, -15.5478>>, 45.0)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Michael.")
|
|
#ENDIF
|
|
REPLAY_STOP_EVENT()
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Lazlow")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Lazlow.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED() OR CAN_SET_EXIT_STATE_FOR_CAMERA() //fix for lighting pop when cutscene ends
|
|
|
|
IF HAS_PTFX_ASSET_LOADED()
|
|
AND HAS_MODEL_LOADED(osScissors.ModelName)
|
|
AND REQUEST_SCRIPT_AUDIO_BANK("FAM6_PONYTAIL")
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_8_ponytail")
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScissorsSceneID)
|
|
|
|
iScissorsSceneID = CREATE_SYNCHRONIZED_SCENE(vScissorsScenePosition, vScissorsSceneRotation)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iScissorsSceneID, "missfam6ig_8_ponytail", "ig_7_loop_michael", INSTANT_BLEND_IN, SLOW_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iScissorsSceneID, "missfam6ig_8_ponytail", "ig_7_loop_lazlow", INSTANT_BLEND_IN, SLOW_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
ENDIF
|
|
|
|
IF HAS_MISSION_OBJECT_BEEN_CREATED(osScissors)
|
|
IF DOES_ENTITY_EXIST(osScissors.ObjectIndex) AND NOT IS_ENTITY_DEAD(osScissors.ObjectIndex)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(osScissors.ObjectIndex, iScissorsSceneID, "ig_7_loop_scissors", "missfam6ig_8_ponytail", INSTANT_BLEND_IN, SLOW_BLEND_OUT)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT DOES_CAM_EXIST(AnimatedCamera)
|
|
AnimatedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE)
|
|
PLAY_CAM_ANIM(AnimatedCamera, "ig_7_Loop_cam", "missfam6ig_8_ponytail", vScissorsScenePosition, vScissorsSceneRotation, CAF_LOOPING)
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(osScissors.ModelName)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) //if cutscene was skipped, fade out and don't fade in
|
|
bCutsceneSkipped = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_CUT_LAZLOW_HAIR_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScissorsSceneID)
|
|
|
|
REQUEST_PTFX_ASSET()
|
|
REQUEST_MODEL(osScissors.ModelName)
|
|
REQUEST_MODEL(osPonyTail.ModelName)
|
|
REQUEST_ANIM_DICT("missfam6ig_8_ponytail")
|
|
REQUEST_SCRIPT_AUDIO_BANK("FAM6_PONYTAIL")
|
|
|
|
IF HAS_PTFX_ASSET_LOADED()
|
|
AND HAS_MODEL_LOADED(osScissors.ModelName)
|
|
AND HAS_MODEL_LOADED(osPonyTail.ModelName)
|
|
AND REQUEST_SCRIPT_AUDIO_BANK("FAM6_PONYTAIL")
|
|
AND HAS_ANIM_DICT_LOADED("missfam6ig_8_ponytail")
|
|
|
|
iScissorsSceneID = CREATE_SYNCHRONIZED_SCENE(vScissorsScenePosition, vScissorsSceneRotation)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iScissorsSceneID, "missfam6ig_8_ponytail", "ig_7_loop_michael", INSTANT_BLEND_IN, SLOW_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iScissorsSceneID, "missfam6ig_8_ponytail", "ig_7_loop_lazlow", INSTANT_BLEND_IN, SLOW_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
ENDIF
|
|
|
|
IF HAS_MISSION_OBJECT_BEEN_CREATED(osScissors)
|
|
IF DOES_ENTITY_EXIST(osScissors.ObjectIndex) AND NOT IS_ENTITY_DEAD(osScissors.ObjectIndex)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(osScissors.ObjectIndex, iScissorsSceneID, "ig_7_loop_scissors", "missfam6ig_8_ponytail", INSTANT_BLEND_IN, SLOW_BLEND_OUT)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT DOES_CAM_EXIST(AnimatedCamera)
|
|
AnimatedCamera = CREATE_CAMERA(CAMTYPE_ANIMATED, TRUE)
|
|
PLAY_CAM_ANIM(AnimatedCamera, "ig_7_Loop_cam", "missfam6ig_8_ponytail", vScissorsScenePosition, vScissorsSceneRotation, CAF_LOOPING)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(osScissors.ModelName)
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
iConversationTimer = 0
|
|
iConversationCounter = 0
|
|
iStruggleConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(1000, 1500)
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
START_AUDIO_SCENE("FAMILY_6_HAIRCUT_LAZLOW_MG")
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGH)
|
|
bReplayStartEventTriggered = TRUE
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IF IS_SCREEN_FADED_IN()
|
|
AND NOT IS_SCREEN_FADING_IN()
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_SCIS")
|
|
PRINT_HELP_FOREVER("FAM6_SCIS")
|
|
SET_LABEL_AS_TRIGGERED("FAM6_SCIS", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScissorsSceneID)
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_IDLES_4")
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF GET_GAME_TIMER() - iConversationTimer > 0
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_IDLES", CONV_PRIORITY_MEDIUM)
|
|
iConversationCounter++
|
|
iConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(9000, 12000)
|
|
IF ( iConversationCounter >= 4 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_IDLES_4", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ( iStruggleConversationTimer != 0 )
|
|
IF GET_GAME_TIMER() - iStruggleConversationTimer > 0
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_STRUG", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
|
|
iStruggleConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(3500, 6000)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iScissorsSceneID)
|
|
OR ( IS_SYNCHRONIZED_SCENE_RUNNING(iScissorsSceneID) AND GET_SYNCHRONIZED_SCENE_PHASE(iScissorsSceneID) >= 1.0 )
|
|
|
|
iScissorsSceneID = CREATE_SYNCHRONIZED_SCENE(vScissorsScenePosition, vScissorsSceneRotation)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iScissorsSceneID, "missfam6ig_8_ponytail", "ig_7_loop_michael", SLOW_BLEND_IN, SLOW_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iScissorsSceneID, "missfam6ig_8_ponytail", "ig_7_loop_lazlow", SLOW_BLEND_IN, SLOW_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osScissors.ObjectIndex) AND NOT IS_ENTITY_DEAD(osScissors.ObjectIndex)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(osScissors.ObjectIndex, iScissorsSceneID, "ig_7_loop_scissors", "missfam6ig_8_ponytail", SLOW_BLEND_IN, SLOW_BLEND_OUT)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScissorsSceneID) AND IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_SCRIPT_RDOWN)
|
|
|
|
iScissorsSceneID = CREATE_SYNCHRONIZED_SCENE(vScissorsScenePosition, vScissorsSceneRotation)
|
|
|
|
IF HAS_MISSION_OBJECT_BEEN_CREATED(osPonyTail, FALSE)
|
|
IF DOES_ENTITY_EXIST(osPonyTail.ObjectIndex) AND NOT IS_ENTITY_DEAD(osPonyTail.ObjectIndex)
|
|
ATTACH_ENTITY_TO_ENTITY(osPonyTail.ObjectIndex, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_L_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
PLAY_CAM_ANIM(AnimatedCamera, "ig_7_Outro_Cam","missfam6ig_8_ponytail", vScissorsScenePosition, vScissorsSceneRotation)
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), iScissorsSceneID, "missfam6ig_8_ponytail", "ig_7_outro_michael", SLOW_BLEND_IN, SLOW_BLEND_OUT)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
TASK_SYNCHRONIZED_SCENE(psLazlow.PedIndex, iScissorsSceneID, "missfam6ig_8_ponytail", "ig_7_outro_lazlow", SLOW_BLEND_IN, SLOW_BLEND_OUT)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osScissors.ObjectIndex) AND NOT IS_ENTITY_DEAD(osScissors.ObjectIndex)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(osScissors.ObjectIndex,iScissorsSceneID, "ig_7_outro_scissors", "missfam6ig_8_ponytail", SLOW_BLEND_IN, SLOW_BLEND_OUT)
|
|
ENDIF
|
|
|
|
CLEAR_HELP()
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScissorsSceneID) AND GET_SYNCHRONIZED_SCENE_PHASE(iScissorsSceneID) >= 0.05
|
|
|
|
SET_CONTROL_SHAKE(PLAYER_CONTROL, 150, 120)
|
|
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(psLazlow.PedIndex)
|
|
|
|
PLAY_SOUND_FROM_ENTITY(-1, "Snip_Ponytail",osScissors.ObjectIndex, "FAMILY_6_SOUNDS")
|
|
|
|
SET_PED_COMPONENT_VARIATION(psLazlow.PedIndex, PED_COMP_HAIR, 1, 0)
|
|
|
|
ptfxHair = START_PARTICLE_FX_LOOPED_ON_PED_BONE("cs_fam6_hair_snip", PLAYER_PED_ID(), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>, BONETAG_PH_L_HAND)
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(3.0, 4.0, REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iScissorsSceneID)
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(iScissorsSceneID) >= 0.85
|
|
OR ( GET_SYNCHRONIZED_SCENE_PHASE(iScissorsSceneID) >= 0.45 AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() )
|
|
IF ( bCutsceneAssetsRequested = TRUE )
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
IF ( bReplayStartEventTriggered = TRUE )
|
|
IF ( bReplayStopEventTriggered = FALSE )
|
|
REPLAY_STOP_EVENT()
|
|
bReplayStopEventTriggered = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
REQUEST_CUTSCENE("fam_6_mcs_5")
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(TRUE, TRUE, TRUE, TRUE, bChestTattoo)
|
|
bCutsceneAssetsRequested = TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_CUTSCENE_SHOP_4_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF HAS_REQUESTED_CUTSCENE_LOADED("fam_6_mcs_5")
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psJimmy.PedIndex, "Jimmy", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psJimmy.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psTracey.PedIndex, "Tracy", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psTracey.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psLazlow.PedIndex, "Lazlow", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psLazlow.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTatguy.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psTatguy.PedIndex, "Tattooist", CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, psTatguy.ModelName)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osScissors.ObjectIndex)
|
|
IF NOT IS_ENTITY_DEAD(osScissors.ObjectIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(osScissors.ObjectIndex, "Tattoo_Scissors", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, osScissors.ModelName)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(osPonyTail.ObjectIndex)
|
|
IF NOT IS_ENTITY_DEAD(osPonyTail.ObjectIndex)
|
|
IF IS_ENTITY_ATTACHED(osPonyTail.ObjectIndex)
|
|
DETACH_ENTITY(osPonyTail.ObjectIndex, FALSE, TRUE)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(osPonyTail.ObjectIndex, "Lazlow_Pony", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, osPonyTail.ModelName)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
STOP_AUDIO_SCENES()
|
|
START_CUTSCENE()
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ELSE
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID())
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_LAZLOW_CUTSCENE_COMPONENT_VARIATIONS(TRUE, TRUE, TRUE, TRUE, bChestTattoo)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
DESTROY_CAM(ScriptedCamera)
|
|
ENDIF
|
|
|
|
IF DOES_CAM_EXIST(AnimatedCamera)
|
|
DESTROY_CAM(AnimatedCamera)
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxHair)
|
|
STOP_PARTICLE_FX_LOOPED(ptfxHair)
|
|
ENDIF
|
|
|
|
REMOVE_PTFX_ASSET()
|
|
RELEASE_SCRIPT_AUDIO_BANK()
|
|
REMOVE_ANIM_DICT("missfam6ig_1_pierce")
|
|
REMOVE_ANIM_DICT("missfam6ig_7_tattoo")
|
|
REMOVE_ANIM_DICT("missfam6ig_8_ponytail")
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
REQUEST_ANIM_DICT("missfam6leadinoutfam_6_mcs_5")
|
|
|
|
IF NOT DOES_ENTITY_EXIST(psTatguy.PedIndex)
|
|
IF DOES_CUTSCENE_ENTITY_EXIST("Tattooist")
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Tattooist"))
|
|
|
|
psTatguy.PedIndex = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Tattooist"))
|
|
|
|
SET_MISSION_PED_PROPERTIES(psTatguy.PedIndex, RELGROUPHASH_PLAYER, FALSE, TRUE, FALSE, FALSE)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Set up properites for mission player ped Tattooist created in the intro cutscene.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
REPLAY_STOP_EVENT()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Michael.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
WARP_PED(PLAYER_PED_ID(), <<315.4439, 175.3920, 102.8468>>, 106.3951, FALSE, FALSE, FALSE)
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT, TRUE)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2500)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Jimmy")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Jimmy.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_BERD, 0, 0)
|
|
WARP_PED(psJimmy.PedIndex, <<313.6881, 174.4399, 102.8722>>, 101.0260, FALSE, FALSE, FALSE)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(psJimmy.PedIndex, <<306.69650, 171.19496, 102.97732>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING | ENAV_GO_FAR_AS_POSSIBLE_IF_TARGET_NAVMESH_NOT_LOADED)
|
|
FORCE_PED_MOTION_STATE(psJimmy.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Tracy")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Tracy.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
WARP_PED(psTracey.PedIndex, <<313.3786, 176.4375, 102.8908>>, 95.2572, FALSE, FALSE, FALSE)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(psTracey.PedIndex, <<306.20856, 174.41803, 103.00662>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING | ENAV_GO_FAR_AS_POSSIBLE_IF_TARGET_NAVMESH_NOT_LOADED)
|
|
FORCE_PED_MOTION_STATE(psTracey.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Lazlow")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Lazlow.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
IF HAS_ANIM_DICT_LOADED("missfam6leadinoutfam_6_mcs_5")
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(psLazlow.PedIndex, "missfam6leadinoutfam_6_mcs_5","_leadout_loop_lazlow")
|
|
TASK_PLAY_ANIM_ADVANCED(psLazlow.PedIndex, "missfam6leadinoutfam_6_mcs_5","_leadout_loop_lazlow",
|
|
vLazlowLeadoutPosition, vLazlowLeadoutRotation, INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
|
|
-1, AF_EXTRACT_INITIAL_OFFSET | AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psLazlow.PedIndex, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Tattooist")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Tattooist.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTatguy.PedIndex)
|
|
IF HAS_ANIM_DICT_LOADED("missfam6leadinoutfam_6_mcs_5")
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(psTatguy.PedIndex, "missfam6leadinoutfam_6_mcs_5","_leadout_loop_tattoo_guy")
|
|
TASK_PLAY_ANIM_ADVANCED(psTatguy.PedIndex, "missfam6leadinoutfam_6_mcs_5","_leadout_loop_tattoo_guy",
|
|
vTatguyLeadoutPosition, vTatguyLeadoutRotation, INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
|
|
-1, AF_EXTRACT_INITIAL_OFFSET | AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psTatguy.PedIndex)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psTatguy.PedIndex, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) //if cutscene was skipped, fade out and don't fade in
|
|
bCutsceneSkipped = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC MANAGE_CONVERSATIONS_DURING_GO_TO_SHRINK()
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_DRF0")
|
|
IF IS_SCREEN_FADED_IN() AND NOT IS_SCREEN_FADING_IN()
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_DRF0", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_DRF0", TRUE)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
|
|
//kill the first conversation if player is away from buddies
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
TEXT_LABEL_23 LocalCurrentConversationLabel = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(LocalCurrentConversationLabel)
|
|
IF ARE_STRINGS_EQUAL(LocalCurrentConversationLabel, "FAM6_DRF0")
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(psJimmy.PedIndex, PLAYER_PED_ID()) > 10
|
|
AND GET_DISTANCE_BETWEEN_ENTITIES(psTracey.PedIndex, PLAYER_PED_ID()) > 10
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_DRF1")
|
|
AND NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_DRF2")
|
|
IF HAS_LABEL_BEEN_TRIGGERED(LabelFAM6SHRINK) OR IS_STRING_NULL_OR_EMPTY(LabelFAM6SHRINK)
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_PED_IN_VEHICLE(psJimmy.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
AND IS_PED_IN_VEHICLE(psTracey.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", PICK_STRING(bStageReplayInProgress, "FAM6_DRF1", "FAM6_DRF2"), CONV_PRIORITY_MEDIUM)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
SET_LABEL_AS_TRIGGERED(PICK_STRING(bStageReplayInProgress, "FAM6_DRF1", "FAM6_DRF2"), TRUE)
|
|
bRunConversationPausingCheck = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//if main conversation was interrupted, resume it from the next label
|
|
IF ( bCurrentConversationInterrupted = TRUE )
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_JBAD")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JWARN")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT")
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_DRF1")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_DRF2")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK2")
|
|
//play conversation for Jimmy saying cops were lost and it's safe to go to shrink
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JLOST_3")
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT") //this will only play if conversation to lose cops was triggered
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JLOST")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JLOST", CONV_PRIORITY_MEDIUM)
|
|
iCopsLostConversationCount++
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOST", TRUE)
|
|
IF ( iCopsLostConversationCount >= 3)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOST_3", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//resume the interrupted coversation
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
AND NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationLabel)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_DRF1") //resume only the main conversations
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_DRF2")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_JTALK2")
|
|
IF ( iPlayerOffencesCount >= 3 )
|
|
AND NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK2")
|
|
//if player commited more than 3 offences and the weird conversation did not trigger
|
|
//let the weird conversations trigger first before it can be resumed
|
|
ELSE
|
|
//resume conversation from specific root and line label
|
|
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(FAM6Conversation, "FAM6AUD", CurrentConversationRoot, CurrentConversationLabel, CONV_PRIORITY_MEDIUM)
|
|
bCurrentConversationInterrupted = FALSE
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JBAD", FALSE) //mark all the interrupt conversations as not triggered
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOST", FALSE)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JWANT", FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
|
|
//resume paused conversations when player gets back in the car
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
//IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
//PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
//ENDIF
|
|
//ENDIF
|
|
|
|
ELSE //locates header blip does not exist
|
|
|
|
//play interrupt conversation when player becomes wanted
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
|
|
IF ( bCurrentConversationInterrupted = FALSE )
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_DRF1")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_DRF2")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK2")
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_DRF1")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_DRF2")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_JTALK2")
|
|
bCurrentConversationInterrupted = TRUE
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
CurrentConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF ( bCurrentConversationInterrupted = TRUE )
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT")
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JWANT", CONV_PRIORITY_HIGH)
|
|
iPlayerOffencesCount++
|
|
iLoseCopsReminderTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(10000, 12500)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JWANT", TRUE)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JLOSE_5")
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_JWANT")
|
|
IF GET_GAME_TIMER() - iLoseCopsReminderTimer > 0
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JLOSE", CONV_PRIORITY_MEDIUM)
|
|
iLoseCopsReminderCount++
|
|
iLoseCopsReminderTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(12500, 15000)
|
|
IF ( iLoseCopsReminderCount >= 5 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JLOSE_5", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//keep reseting those flags during wanted level as the player might be driving recklessly
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
|
|
ELSE
|
|
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
// IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
// PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
// ENDIF
|
|
//ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
//play interrupt conversations for player offences
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF ( GET_GAME_TIMER() - iPlayerOffenceTimer > 5000 )
|
|
|
|
//play conversation for player running over peds
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JBAD_5")
|
|
AND NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JWARN_6")
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF HAS_PLAYER_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
AND HAS_ENTITY_COLLIDED_WITH_ANYTHING(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
bPlayerHitPed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_PED_SHOOTING(PLAYER_PED_ID()) //add more conditions here if needed
|
|
bPlayerActingBad = TRUE
|
|
ENDIF
|
|
|
|
IF ( bPlayerHitPed = TRUE OR bPlayerActingBad = TRUE )
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_DRF1")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_DRF2")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK2")
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_DRF1")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_DRF2")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_JTALK2")
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
CurrentConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CurrentConversationRoot = ", CurrentConversationRoot, ".")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CurrentConversationLabel = ", CurrentConversationLabel, ".")
|
|
#ENDIF
|
|
bCurrentConversationInterrupted = TRUE
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK2") //if jimmy did no start his talk for player messing around
|
|
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JBAD", CONV_PRIORITY_MEDIUM)
|
|
iPlayerOffencesCount++
|
|
iBadConversationCount++
|
|
bPlayerHitPed = FALSE
|
|
bPlayerActingBad = FALSE
|
|
iPlayerOffenceTimer = GET_GAME_TIMER()
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JBAD", TRUE)
|
|
IF ( iBadConversationCount >= 5 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JBAD_5", TRUE)
|
|
ENDIF
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ELSE //if jimmy started his talk for player messing around
|
|
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JWARN", CONV_PRIORITY_MEDIUM)
|
|
iPlayerOffencesCount++
|
|
iBadConversationCount++
|
|
bPlayerHitPed = FALSE
|
|
bPlayerActingBad = FALSE
|
|
iPlayerOffenceTimer = GET_GAME_TIMER()
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JWARN", TRUE)
|
|
IF ( iBadConversationCount >= 6 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JWARN_6", TRUE)
|
|
ENDIF
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//play conversation when more than 3 offences have been commited
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_JTALK2")
|
|
IF ( iPlayerOffencesCount >= 3 )
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_PED_IN_VEHICLE(psJimmy.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
AND IS_PED_IN_VEHICLE(psTracey.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_JTALK2", CONV_PRIORITY_MEDIUM)
|
|
bCurrentConversationInterrupted = FALSE
|
|
SET_LABEL_AS_TRIGGERED("FAM6_JTALK2", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_GREET")
|
|
IF ( bDestinationReached = TRUE )
|
|
bRunConversationPausingCheck = FALSE
|
|
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
ENDIF
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_GREET", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_GREET", TRUE)
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
TASK_LOOK_AT_ENTITY(psAmanda.PedIndex, PLAYER_PED_ID(), INFINITE_TASK_TIME,
|
|
SLF_WHILE_NOT_IN_FOV | SLF_FAST_TURN_RATE | SLF_USE_TORSO, SLF_LOOKAT_VERY_HIGH)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF ( bRunConversationPausingCheck = TRUE )
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_PED_IN_VEHICLE(psJimmy.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
AND IS_PED_IN_VEHICLE(psTracey.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psJimmy.PedIndex)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psTracey.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(psJimmy.PedIndex, PLAYER_PED_ID()) < 10
|
|
AND GET_DISTANCE_BETWEEN_ENTITIES(psTracey.PedIndex, PLAYER_PED_ID()) < 10
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC MANAGE_LAZLOW_LEADOUT_DURING_GO_TO_SHRINK(INT &iProgress)
|
|
|
|
SWITCH iProgress
|
|
|
|
CASE 0
|
|
|
|
REQUEST_ANIM_DICT("missfam6leadinoutfam_6_mcs_5")
|
|
|
|
IF HAS_ANIM_DICT_LOADED("missfam6leadinoutfam_6_mcs_5")
|
|
|
|
IF NOT IS_PED_INJURED(psLazlow.PedIndex)
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(psLazlow.PedIndex, "missfam6leadinoutfam_6_mcs_5","_leadout_loop_lazlow")
|
|
TASK_PLAY_ANIM_ADVANCED(psLazlow.PedIndex, "missfam6leadinoutfam_6_mcs_5","_leadout_loop_lazlow",
|
|
vLazlowLeadoutPosition, vLazlowLeadoutRotation, INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
|
|
-1, AF_EXTRACT_INITIAL_OFFSET | AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psLazlow.PedIndex)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTatguy.PedIndex)
|
|
IF NOT IS_ENTITY_PLAYING_ANIM(psTatguy.PedIndex, "missfam6leadinoutfam_6_mcs_5","_leadout_loop_tattoo_guy")
|
|
TASK_PLAY_ANIM_ADVANCED(psTatguy.PedIndex, "missfam6leadinoutfam_6_mcs_5","_leadout_loop_tattoo_guy",
|
|
vTatguyLeadoutPosition, vTatguyLeadoutRotation, INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
|
|
-1, AF_EXTRACT_INITIAL_OFFSET | AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(psTatguy.PedIndex)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
iAwayConversationCounter = 0
|
|
iAwayConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(3000, 5000)
|
|
|
|
|
|
iProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IF DOES_ENTITY_EXIST(psLazlow.PedIndex)
|
|
IF NOT IS_ENTITY_DEAD(psLazlow.PedIndex)
|
|
IF IS_ENTITY_PLAYING_ANIM(psLazlow.PedIndex, "missfam6leadinoutfam_6_mcs_5","_leadout_loop_lazlow")
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_AWAY_3")
|
|
IF GET_GAME_TIMER() - iAwayConversationTimer > 0
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<320.446808,178.033951,104.459259>>, << 1.5, 1.5, 2.0 >>)
|
|
ADD_PED_FOR_DIALOGUE(FAM6Conversation, 3, psLazlow.PedIndex, "LAZLOW")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_AWAY", CONV_PRIORITY_MEDIUM)
|
|
TASK_LOOK_AT_ENTITY(psLazlow.PedIndex, PLAYER_PED_ID(), 3000, SLF_WHILE_NOT_IN_FOV)
|
|
iAwayConversationCounter++
|
|
iAwayConversationTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(5000, 10000)
|
|
IF ( iAwayConversationCounter >= 3)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_AWAY_3", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vLazlowLeadoutPosition) > 150.0
|
|
|
|
CLEANUP_PED(psLazlow, TRUE)
|
|
CLEANUP_PED(psTatguy, TRUE)
|
|
REMOVE_ANIM_DICT("missfam6leadinoutfam_6_mcs_5")
|
|
|
|
iProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
PROC MANAGE_AMANDA_DURING_GO_TO_SHRINK(INT &iProgress)
|
|
|
|
SWITCH iProgress
|
|
|
|
CASE 0
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vShrinkOfficePosition) < DEFAULT_CUTSCENE_LOAD_DIST * 2
|
|
|
|
iProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
REQUEST_MODEL(psAmanda.ModelName)
|
|
REQUEST_ANIM_DICT("amb@world_human_stand_impatient@female@no_sign@idle_a")
|
|
|
|
IF HAS_MODEL_LOADED(psAmanda.ModelName)
|
|
AND HAS_ANIM_DICT_LOADED("amb@world_human_stand_impatient@female@no_sign@idle_a")
|
|
|
|
CLEAR_AREA(psAmanda.vPosition, 3.0, TRUE)
|
|
|
|
IF HAS_MISSION_PED_BEEN_CREATED(psAmanda, FALSE, RELGROUPHASH_PLAYER, FALSE, CHAR_AMANDA)
|
|
|
|
ADD_PED_FOR_DIALOGUE(FAM6Conversation, 4, psAmanda.PedIndex, "AMANDA")
|
|
SET_AMANDA_PED_COMPONENT_VARIATIONS(psAmanda.bComponentVariationsSet)
|
|
|
|
TASK_LOOK_AT_ENTITY(psAmanda.PedIndex, PLAYER_PED_ID(), INFINITE_TASK_TIME, SLF_WHILE_NOT_IN_FOV)
|
|
TASK_PLAY_ANIM(psAmanda.PedIndex, "amb@world_human_stand_impatient@female@no_sign@idle_a", "idle_c",
|
|
NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE |
|
|
AF_USE_KINEMATIC_PHYSICS | AF_USE_MOVER_EXTRACTION)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(psAmanda.PedIndex, TRUE)
|
|
|
|
SET_RAGDOLL_BLOCKING_FLAGS(psAmanda.PedIndex, RBF_MELEE)
|
|
SET_RAGDOLL_BLOCKING_FLAGS(psAmanda.PedIndex, RBF_PLAYER_BUMP)
|
|
SET_RAGDOLL_BLOCKING_FLAGS(psAmanda.PedIndex, RBF_PLAYER_IMPACT)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(psAmanda.ModelName)
|
|
|
|
iProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
IF IS_ENTITY_PLAYING_ANIM(psAmanda.PedIndex, "amb@world_human_stand_impatient@female@no_sign@idle_a", "idle_c")
|
|
SET_PED_CAPSULE(psAmanda.PedIndex, 0.25)
|
|
SET_PED_RESET_FLAG(psAmanda.PedIndex, PRF_ExpandPedCapsuleFromSkeleton, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_DRIVE_TO_SHRINK_COMPLETED(INT &iStageProgress)
|
|
|
|
//don't use locates header J skip
|
|
SET_BIT(sLocatesData.iLocatesBitSet, BS_DONT_DO_J_SKIP)
|
|
|
|
UPDATE_TRIGGERED_LABEL(LabelFAM6SHRINK)
|
|
MANAGE_CONVERSATIONS_DURING_GO_TO_SHRINK()
|
|
MANAGE_AMANDA_DURING_GO_TO_SHRINK(iAmandaProgress)
|
|
RUN_INTERIOR_UNPINNING_CHECK(vTattooShopScenePosition, 100.0)
|
|
MANAGE_LAZLOW_LEADOUT_DURING_GO_TO_SHRINK(iLazlowLeadoutProgress)
|
|
|
|
IF DOES_ENTITY_EXIST(sLocatesData.vehStartCar)
|
|
AND NOT IS_ENTITY_DEAD(sLocatesData.vehStartCar)
|
|
AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), sLocatesData.vehStartCar, TRUE)
|
|
IF NOT IS_PED_IN_VEHICLE(psJimmy.PedIndex, sLocatesData.vehStartCar, TRUE)
|
|
OR NOT IS_PED_IN_VEHICLE(psTracey.PedIndex, sLocatesData.vehStartCar, TRUE)
|
|
DISABLE_LOCATES_CLEAR_BUDDY_TASKS_IF_ENTERING_NEAREST_VEHICLE(sLocatesData, TRUE)
|
|
ENDIF
|
|
ELSE
|
|
DISABLE_LOCATES_CLEAR_BUDDY_TASKS_IF_ENTERING_NEAREST_VEHICLE(sLocatesData, FALSE)
|
|
ENDIF
|
|
|
|
IF IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR IS_PLAYER_CHANGING_CLOTHES()
|
|
|
|
IF HAS_THIS_CUTSCENE_LOADED("fam_6_mcs_6")
|
|
OR HAS_CUTSCENE_LOADED()
|
|
OR IS_CUTSCENE_ACTIVE()
|
|
REMOVE_CUTSCENE()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player browsing items in a shop or changing clothes. Removing cutscene.")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vShrinkOfficePosition) < DEFAULT_CUTSCENE_LOAD_DIST
|
|
|
|
REQUEST_CUTSCENE("fam_6_mcs_6")
|
|
|
|
IF NOT IS_INTERIOR_READY(GET_INTERIOR_AT_COORDS(vShrinkInteriorPosition))
|
|
PIN_INTERIOR_IN_MEMORY(GET_INTERIOR_AT_COORDS(vShrinkInteriorPosition))
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Pinning interior at coordinates ", vShrinkInteriorPosition, " in memory.")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID())
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_AMANDA_CUTSCENE_COMPONENT_VARIATIONS()
|
|
bCutsceneAssetsRequested = TRUE
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting cutscene ped components for cutscene peds from peds during stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), ".")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting bCutsceneAssetsRequested to ", bCutsceneAssetsRequested, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vShrinkOfficePosition) > DEFAULT_CUTSCENE_UNLOAD_DIST * 2
|
|
|
|
IF IS_INTERIOR_READY(GET_INTERIOR_AT_COORDS(vShrinkInteriorPosition))
|
|
UNPIN_INTERIOR(GET_INTERIOR_AT_COORDS(vShrinkInteriorPosition))
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Unpinning interior at coordinates ", vShrinkInteriorPosition, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF HAS_THIS_CUTSCENE_LOADED("fam_6_mcs_6")
|
|
OR HAS_CUTSCENE_LOADED()
|
|
OR IS_CUTSCENE_ACTIVE()
|
|
REMOVE_CUTSCENE()
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(BALLER)
|
|
bCutsceneAssetsRequested = FALSE
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player too far away from destination to keep cutscene in memory. Removing cutscene.")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting bCutsceneAssetsRequested to ", bCutsceneAssetsRequested, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF IS_SCREEN_FADED_OUT()
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVE_WALK, 2500)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF ( GET_SCRIPT_TASK_STATUS(psJimmy.PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) != PERFORMING_TASK )
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(psJimmy.PedIndex, <<306.69650, 171.19496, 102.97732>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING | ENAV_GO_FAR_AS_POSSIBLE_IF_TARGET_NAVMESH_NOT_LOADED)
|
|
FORCE_PED_MOTION_STATE(psJimmy.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
IF ( GET_SCRIPT_TASK_STATUS(psTracey.PedIndex, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) != PERFORMING_TASK )
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(psTracey.PedIndex, <<306.20856, 174.41803, 103.00662>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING | ENAV_GO_FAR_AS_POSSIBLE_IF_TARGET_NAVMESH_NOT_LOADED)
|
|
FORCE_PED_MOTION_STATE(psTracey.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
WAIT(2)
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_DRF0")
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 15.0, REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
SET_LOCATES_BUDDIES_TO_GET_INTO_NEAREST_CAR(sLocatesData, vsMichaelsCar.VehicleIndex)
|
|
|
|
START_AUDIO_SCENE("FAMILY_6_DRIVE_TO_THERAPIST")
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IS_PLAYER_AT_LOCATION_WITH_BUDDIES_ANY_MEANS(sLocatesData, vShrinkOfficePosition, DEFAULT_LOCATES_SIZE_VECTOR(), TRUE,
|
|
psTracey.PedIndex, psJimmy.PedIndex, NULL, LabelFAM6SHRINK, "CMN_TCLEAVE", "CMN_JLEAVE", "", "FAM6_FAM", FALSE, TRUE)
|
|
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psJimmy.PedIndex)
|
|
AND ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psTracey.PedIndex)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1894.675781,-567.717773,10.614735>>, <<-1906.339966,-557.923096,13.812391>>, 8.0)
|
|
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ELSE
|
|
IF IS_PED_GROUP_MEMBER(psJimmy.PedIndex, PLAYER_GROUP_ID())
|
|
AND IS_PED_GROUP_MEMBER(psTracey.PedIndex, PLAYER_GROUP_ID())
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1894.675781,-567.717773,10.614735>>, <<-1906.339966,-557.923096,13.812391>>, 8.0)
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psJimmy.PedIndex)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psTracey.PedIndex)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1894.675781,-567.717773,10.614735>>, <<-1906.339966,-557.923096,13.812391>>, 16.0)
|
|
AND IS_ENTITY_IN_ANGLED_AREA(psJimmy.PedIndex, <<-1894.675781,-567.717773,10.614735>>, <<-1906.339966,-557.923096,13.812391>>, 16.0)
|
|
AND IS_ENTITY_IN_ANGLED_AREA(psTracey.PedIndex, <<-1894.675781,-567.717773,10.614735>>, <<-1906.339966,-557.923096,13.812391>>, 16.0)
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
bDestinationReached = TRUE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()), 2.5)
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
iStageProgress++
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
iStageProgress++
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
bLeadInTriggered = TRUE
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
SEQUENCE_INDEX JimmySequenceIndex
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
OPEN_SEQUENCE_TASK(JimmySequenceIndex)
|
|
IF IS_PED_IN_ANY_VEHICLE(psJimmy.PedIndex)
|
|
TASK_LEAVE_ANY_VEHICLE(NULL, GET_VEHICLE_EXIT_DELAY(psJimmy.PedIndex, GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())))
|
|
ENDIF
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1913.51172, -568.23083, 10.82617>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
CLOSE_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(psJimmy.PedIndex, JimmySequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
SEQUENCE_INDEX TraceySequenceIndex
|
|
CLEAR_SEQUENCE_TASK(TraceySequenceIndex)
|
|
OPEN_SEQUENCE_TASK(TraceySequenceIndex)
|
|
IF IS_PED_IN_ANY_VEHICLE(psTracey.PedIndex)
|
|
TASK_LEAVE_ANY_VEHICLE(NULL, GET_VEHICLE_EXIT_DELAY(psTracey.PedIndex, GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())))
|
|
ENDIF
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1913.51172, -568.23083, 10.82617>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
CLOSE_SEQUENCE_TASK(TraceySequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(psTracey.PedIndex, TraceySequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(TraceySequenceIndex)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SEQUENCE_INDEX PlayerSequenceIndex
|
|
CLEAR_SEQUENCE_TASK(PlayerSequenceIndex)
|
|
OPEN_SEQUENCE_TASK(PlayerSequenceIndex)
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
TASK_LEAVE_ANY_VEHICLE(NULL, GET_VEHICLE_EXIT_DELAY(PLAYER_PED_ID(), GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())))
|
|
ENDIF
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1913.51172, -568.23083, 10.82617>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
CLOSE_SEQUENCE_TASK(PlayerSequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), PlayerSequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(PlayerSequenceIndex)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
BREAK
|
|
|
|
CASE 4
|
|
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psJimmy.PedIndex)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psTracey.PedIndex)
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
CLEAR_RAGDOLL_BLOCKING_FLAGS(psAmanda.PedIndex, RBF_MELEE)
|
|
CLEAR_RAGDOLL_BLOCKING_FLAGS(psAmanda.PedIndex, RBF_PLAYER_BUMP)
|
|
CLEAR_RAGDOLL_BLOCKING_FLAGS(psAmanda.PedIndex, RBF_PLAYER_IMPACT)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(psAmanda.PedIndex, <<-1913.51172, -568.23083, 10.82617>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
|
|
ScriptedCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE)
|
|
SET_CAM_PARAMS(ScriptedCamera, <<-1887.2565, -532.6524, 21.8295>>, <<-8.7969, 1.7310, 154.3490>>, 36.7)
|
|
SET_CAM_PARAMS(ScriptedCamera, <<-1887.3967, -532.7990, 23.3122>>, <<-9.4823, 1.7310, 154.3490>>, 36.7,
|
|
15000, GRAPH_TYPE_LINEAR, GRAPH_TYPE_LINEAR)
|
|
SHAKE_CAM(ScriptedCamera,"HAND_SHAKE",0.1)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(16.0, 0.0, REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
DISPLAY_HUD(FALSE)
|
|
DISPLAY_RADAR(FALSE)
|
|
|
|
psAmanda.iTimer = GET_GAME_TIMER()
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 5
|
|
|
|
IF GET_GAME_TIMER() - psAmanda.iTimer > 3000
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
IF ( bCutsceneAssetsRequested = TRUE )
|
|
|
|
CLEANUP_PED(psLazlow, TRUE)
|
|
CLEANUP_PED(psTatguy, TRUE)
|
|
REMOVE_ANIM_DICT("missfam6leadinoutfam_6_mcs_5")
|
|
REMOVE_ANIM_DICT("amb@world_human_stand_impatient@female@no_sign@idle_a")
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
TASK_CLEAR_LOOK_AT(psAmanda.PedIndex)
|
|
ENDIF
|
|
|
|
REPLAY_STOP_EVENT()
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_CUTSCENE_SHRINK_COMPLETED(INT &iStageProgress)
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF HAS_REQUESTED_CUTSCENE_LOADED("fam_6_mcs_6")
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
IF IS_PED_GROUP_MEMBER(psJimmy.PedIndex, PLAYER_GROUP_ID())
|
|
REMOVE_PED_FROM_GROUP(psJimmy.PedIndex)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psJimmy.PedIndex, "Jimmy", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psJimmy.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
IF IS_PED_GROUP_MEMBER(psTracey.PedIndex, PLAYER_GROUP_ID())
|
|
REMOVE_PED_FROM_GROUP(psTracey.PedIndex)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psTracey.PedIndex, "Tracy", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psTracey.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psAmanda.PedIndex, "Amanda", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, psAmanda.ModelName)
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
|
|
STOP_AUDIO_SCENES()
|
|
START_CUTSCENE(CUTSCENE_DELAY_ENABLING_PLAYER_CONTROL_FOR_UP_TO_DATE_GAMEPLAY_CAMERA)
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
iStageProgress++
|
|
|
|
ELSE
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_AMANDA_CUTSCENE_COMPONENT_VARIATIONS()
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
VEHICLE_INDEX LastPlayerVehicleIndex
|
|
|
|
LastPlayerVehicleIndex = GET_PLAYERS_LAST_VEHICLE()
|
|
|
|
IF DOES_ENTITY_EXIST(LastPlayerVehicleIndex)
|
|
IF NOT IS_ENTITY_DEAD(LastPlayerVehicleIndex)
|
|
|
|
IF IS_VEHICLE_AVAILABLE_TO_SNAPSHOT(PLAYER_PED_ID(), LastPlayerVehicleIndex, TRUE)
|
|
|
|
IF NOT IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(LastPlayerVehicleIndex))
|
|
AND NOT IS_THIS_MODEL_A_PLANE(GET_ENTITY_MODEL(LastPlayerVehicleIndex))
|
|
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(LastPlayerVehicleIndex)
|
|
|
|
SET_ENTITY_AS_MISSION_ENTITY(LastPlayerVehicleIndex)
|
|
SET_VEHICLE_AS_NO_LONGER_NEEDED(vsMichaelsCar.VehicleIndex)
|
|
|
|
vsMichaelsCar.VehicleIndex = LastPlayerVehicleIndex
|
|
ENDIF
|
|
|
|
STOP_VEHICLE_FIRE(LastPlayerVehicleIndex)
|
|
|
|
SET_ENTITY_COORDS(LastPlayerVehicleIndex, vsMichaelsCar.vPosition)
|
|
SET_ENTITY_HEADING(LastPlayerVehicleIndex, vsMichaelsCar.fHeading)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(LastPlayerVehicleIndex)
|
|
SET_VEHICLE_DOORS_SHUT(LastPlayerVehicleIndex, TRUE)
|
|
SET_VEHICLE_ENGINE_ON(LastPlayerVehicleIndex, FALSE, TRUE)
|
|
|
|
|
|
SET_VEHICLE_LOD_MULTIPLIER(LastPlayerVehicleIndex, 2.0)
|
|
REQUEST_VEHICLE_HIGH_DETAIL_MODEL(LastPlayerVehicleIndex)
|
|
|
|
OVERRIDE_REPLAY_CHECKPOINT_VEHICLE(LastPlayerVehicleIndex)
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
CLEAR_AREA_OF_PEDS(MissionPosition.vPosition, 100.0)
|
|
CLEAR_AREA_OF_OBJECTS(MissionPosition.vPosition, 100.0)
|
|
CLEAR_AREA_OF_VEHICLES(MissionPosition.vPosition, 100.0)
|
|
CLEAR_AREA_OF_PROJECTILES(MissionPosition.vPosition, 100.0)
|
|
REMOVE_PARTICLE_FX_IN_RANGE(MissionPosition.vPosition, 100.0)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex) AND NOT IS_ENTITY_DEAD(vsMichaelsCar.VehicleIndex)
|
|
SET_FORCE_HD_VEHICLE(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(vsMichaelsCar.VehicleIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Michael.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Amanda")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Amanda.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
IF IS_VEHICLE_DRIVEABLE(vsMichaelsCar.VehicleIndex)
|
|
FORCE_PED_MOTION_STATE(psAmanda.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
TASK_ENTER_VEHICLE(psAmanda.PedIndex, vsMichaelsCar.VehicleIndex, DEFAULT_TIME_BEFORE_WARP ,VS_FRONT_RIGHT, PEDMOVE_WALK)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Tracy")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Tracy.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
IF IS_VEHICLE_DRIVEABLE(vsMichaelsCar.VehicleIndex)
|
|
FORCE_PED_MOTION_STATE(psTracey.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
TASK_ENTER_VEHICLE(psTracey.PedIndex, vsMichaelsCar.VehicleIndex, DEFAULT_TIME_BEFORE_WARP ,VS_BACK_RIGHT, PEDMOVE_WALK)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Jimmy")
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY() returned true for Jimmy.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
|
|
SET_PED_COMPONENT_VARIATION(psJimmy.PedIndex, PED_COMP_BERD, 0, 0)
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vsMichaelsCar.VehicleIndex)
|
|
FORCE_PED_MOTION_STATE(psJimmy.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
|
|
TASK_ENTER_VEHICLE(psJimmy.PedIndex, vsMichaelsCar.VehicleIndex, DEFAULT_TIME_BEFORE_WARP ,VS_BACK_LEFT, PEDMOVE_WALK)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": CAN_SET_EXIT_STATE_FOR_CAMERA() returned true.")
|
|
#ENDIF
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
|
|
REPLAY_STOP_EVENT()
|
|
|
|
IF ( bCutsceneSkipped = TRUE )
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
WARP_PED(PLAYER_PED_ID(), MissionPosition.vPosition, MissionPosition.fHeading, FALSE, FALSE, FALSE)
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
DEBIT_BANK_ACCOUNT(CHAR_MICHAEL, BAAC_SHRINK, 4000)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
IF ( bCutsceneSkipped = FALSE )
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, FALSE, FALSE) //if cutscene was skipped, fade out and don't fade in
|
|
bCutsceneSkipped = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC MANAGE_CONVERSATIONS_DURING_GO_HOME()
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_HOME")
|
|
IF IS_SCREEN_FADED_IN() AND NOT IS_SCREEN_FADING_IN()
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_HOME", CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_HOME", TRUE)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_CHAT1")
|
|
AND NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_CHAT2")
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_PED_IN_VEHICLE(psJimmy.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
AND IS_PED_IN_VEHICLE(psTracey.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
AND IS_PED_IN_VEHICLE(psAmanda.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", PICK_STRING(bStageReplayInProgress, "FAM6_CHAT2", "FAM6_CHAT1"), CONV_PRIORITY_MEDIUM)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_ENTITY_LAST_DAMAGE_ENTITY(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
SET_LABEL_AS_TRIGGERED(PICK_STRING(bStageReplayInProgress, "FAM6_CHAT2", "FAM6_CHAT1"), TRUE)
|
|
bRunConversationPausingCheck = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//if main conversation was interrupted, resume it from the next label
|
|
IF ( bCurrentConversationInterrupted = TRUE )
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_BAD")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_HITPED")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_WANTED")
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_CHAT1")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_CHAT2")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_WEIRD")
|
|
|
|
//play conversation for Amanda saying cops were lost and it's safe to go back to house (3 random variations)
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_LOSE_3")
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_WANTED") //this will only play if conversation to lose cops was triggered
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_LOSE")
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_LOSE", CONV_PRIORITY_MEDIUM)
|
|
iCopsLostConversationCount++
|
|
SET_LABEL_AS_TRIGGERED("FAM6_LOSE", TRUE)
|
|
IF ( iCopsLostConversationCount >= 3)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_LOSE_3", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//resume the interrupted coversation
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
AND NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationLabel)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_CHAT1") //resume only the main conversations
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_CHAT2")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_WEIRD")
|
|
|
|
IF ( iPlayerOffencesCount >= 3 )
|
|
AND NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_WEIRD")
|
|
//if player commited more than 3 offences and the weird conversation did not trigger
|
|
//let the weird conversations trigger first before it can be resumed
|
|
ELSE
|
|
//resume conversation from specific root and line label
|
|
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(FAM6Conversation, "FAM6AUD", CurrentConversationRoot, CurrentConversationLabel, CONV_PRIORITY_MEDIUM)
|
|
bCurrentConversationInterrupted = FALSE
|
|
SET_LABEL_AS_TRIGGERED("FAM6_BAD", FALSE) //mark all the interrupt conversations as not triggered
|
|
SET_LABEL_AS_TRIGGERED("FAM6_LOSE", FALSE)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_HITPED", FALSE)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_WANTED", FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
|
|
//resume paused conversations when player gets back in the car
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
//IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
//PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
//ENDIF
|
|
//ENDIF
|
|
|
|
ELSE //locates header blip does not exist
|
|
|
|
//play interrupt conversation when player becomes wanted
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
|
|
IF ( bCurrentConversationInterrupted = FALSE )
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_CHAT1")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_CHAT2")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_WEIRD")
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_CHAT1")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_CHAT2")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_WEIRD")
|
|
bCurrentConversationInterrupted = TRUE
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
CurrentConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF ( bCurrentConversationInterrupted = TRUE )
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_WANTED")
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_WANTED", CONV_PRIORITY_HIGH)
|
|
iPlayerOffencesCount++
|
|
SET_LABEL_AS_TRIGGERED("FAM6_WANTED", TRUE)
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//keep reseting those flags during wanted level as the player might be driving recklessly
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
|
|
ELSE
|
|
|
|
//IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
// IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
// PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
// ENDIF
|
|
//ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
//play interrupt conversations for player offences
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF ( GET_GAME_TIMER() - iPlayerOffenceTimer > 5000 )
|
|
|
|
//play conversation for player running over peds
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_HITPED_5")
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF HAS_PLAYER_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
AND HAS_ENTITY_COLLIDED_WITH_ANYTHING(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
bPlayerHitPed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ( bPlayerHitPed = TRUE )
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_CHAT1")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_CHAT2")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_WEIRD")
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_CHAT1")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_CHAT2")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_WEIRD")
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
CurrentConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
bCurrentConversationInterrupted = TRUE
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_HITPED", CONV_PRIORITY_MEDIUM)
|
|
iPlayerOffencesCount++
|
|
iHitPedConversationCount++
|
|
bPlayerHitPed = FALSE
|
|
iPlayerOffenceTimer = GET_GAME_TIMER()
|
|
SET_LABEL_AS_TRIGGERED("FAM6_HITPED", TRUE)
|
|
IF ( iHitPedConversationCount >= 5 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_HITPED_5", TRUE)
|
|
ENDIF
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//play conversation for player shooting, acting bad etc
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_BAD_3")
|
|
|
|
IF IS_PED_SHOOTING(PLAYER_PED_ID()) //add more conditions here if needed
|
|
bPlayerActingBad = TRUE
|
|
ENDIF
|
|
|
|
IF ( bPlayerActingBad = TRUE)
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_CHAT1")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_CHAT2")
|
|
OR HAS_LABEL_BEEN_TRIGGERED("FAM6_WEIRD")
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
IF NOT IS_STRING_NULL_OR_EMPTY(CurrentConversationRoot)
|
|
IF ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_CHAT1")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_CHAT2")
|
|
OR ARE_STRINGS_EQUAL(CurrentConversationRoot, "FAM6_WEIRD")
|
|
CurrentConversationRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
CurrentConversationLabel = GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
bCurrentConversationInterrupted = TRUE
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_BAD", CONV_PRIORITY_MEDIUM)
|
|
iPlayerOffencesCount++
|
|
iBadConversationCount++
|
|
bPlayerActingBad = FALSE
|
|
iPlayerOffenceTimer = GET_GAME_TIMER()
|
|
SET_LABEL_AS_TRIGGERED("FAM6_BAD", TRUE)
|
|
IF ( iBadConversationCount >= 3 )
|
|
SET_LABEL_AS_TRIGGERED("FAM6_BAD_3", TRUE)
|
|
ENDIF
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": iPlayerOffencesCount: ", iPlayerOffencesCount, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_PED(PLAYER_ID())
|
|
CLEAR_PLAYER_HAS_DAMAGED_AT_LEAST_ONE_NON_ANIMAL_PED(PLAYER_ID())
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//play conversation for player being weird when more than 3 offences have been commited
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_WEIRD")
|
|
IF ( iPlayerOffencesCount >= 3 )
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_PED_IN_VEHICLE(psJimmy.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
AND IS_PED_IN_VEHICLE(psTracey.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
AND IS_PED_IN_VEHICLE(psAmanda.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation, "FAM6AUD", "FAM6_WEIRD", CONV_PRIORITY_MEDIUM)
|
|
bCurrentConversationInterrupted = FALSE
|
|
SET_LABEL_AS_TRIGGERED("FAM6_WEIRD", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT HAS_LABEL_BEEN_TRIGGERED("FAM6_HOUSE")
|
|
IF ( bFamilyArrivedAtHouse = FALSE )
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF GET_DISTANCE_BETWEEN_COORDS(vMichaelsHousePosition, GET_ENTITY_COORDS(PLAYER_PED_ID())) < 50
|
|
IF NOT IS_ANY_TEXT_BEING_DISPLAYED(sLocatesData, IAT_IGNORE_GOD_TEXT_IF_SUBTITLES_OFF)
|
|
IF CREATE_CONVERSATION(FAM6Conversation,"FAM6AUD","FAM6_HOUSE",CONV_PRIORITY_MEDIUM)
|
|
SET_LABEL_AS_TRIGGERED("FAM6_HOUSE", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF ( bRunConversationPausingCheck = TRUE )
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_PED_IN_VEHICLE(psJimmy.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
AND IS_PED_IN_VEHICLE(psTracey.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
AND IS_PED_IN_VEHICLE(psAmanda.PedIndex, GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()))
|
|
//AND DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELIF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psJimmy.PedIndex)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psTracey.PedIndex)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psAmanda.PedIndex)
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(psJimmy.PedIndex, PLAYER_PED_ID()) < 10
|
|
AND GET_DISTANCE_BETWEEN_ENTITIES(psTracey.PedIndex, PLAYER_PED_ID()) < 10
|
|
AND GET_DISTANCE_BETWEEN_ENTITIES(psAmanda.PedIndex, PLAYER_PED_ID()) < 10
|
|
//AND DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF NOT IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
PAUSE_FACE_TO_FACE_CONVERSATION(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_DRIVE_HOME_COMPLETED(INT &iStageProgress)
|
|
|
|
//don't use locates header J skip
|
|
SET_BIT(sLocatesData.iLocatesBitSet, BS_DONT_DO_J_SKIP)
|
|
|
|
MANAGE_CONVERSATIONS_DURING_GO_HOME()
|
|
RUN_INTERIOR_UNPINNING_CHECK(vShrinkInteriorPosition, 30.0)
|
|
|
|
IF IS_PLAYER_BROWSING_ITEMS_IN_ANY_SHOP()
|
|
OR IS_PLAYER_CHANGING_CLOTHES()
|
|
|
|
IF HAS_THIS_CUTSCENE_LOADED("fam_6_mcs_6_p4_b")
|
|
OR HAS_CUTSCENE_LOADED()
|
|
OR IS_CUTSCENE_ACTIVE()
|
|
REMOVE_CUTSCENE()
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player browsing items in a shop or changing clothes. Removing cutscene.")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vMichaelsHousePosition) < DEFAULT_CUTSCENE_LOAD_DIST
|
|
|
|
REQUEST_CUTSCENE("fam_6_mcs_6_p4_b")
|
|
|
|
IF ( bSetSRLForcePrestream = FALSE )
|
|
SET_SRL_FORCE_PRESTREAM(SRL_PRESTREAM_FORCE_OFF)
|
|
bSetSRLForcePrestream = TRUE
|
|
ENDIF
|
|
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID())
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_AMANDA_CUTSCENE_COMPONENT_VARIATIONS()
|
|
bCutsceneAssetsRequested = TRUE
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting cutscene ped components for cutscene peds from peds during stage ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), ".")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting bCutsceneAssetsRequested to ", bCutsceneAssetsRequested, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF HAS_THIS_CUTSCENE_LOADED("fam_6_mcs_6_p4_b")
|
|
OR HAS_CUTSCENE_LOADED()
|
|
OR IS_CUTSCENE_ACTIVE()
|
|
REMOVE_CUTSCENE()
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(BALLER)
|
|
bCutsceneAssetsRequested = FALSE
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Player too far away from destination to keep cutscene in memory. Removing cutscene.")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting bCutsceneAssetsRequested to ", bCutsceneAssetsRequested, ".")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex) AND IS_VEHICLE_DRIVEABLE(vsMichaelsCar.VehicleIndex)
|
|
IF ( GET_SCRIPT_TASK_STATUS(psJimmy.PedIndex, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK )
|
|
TASK_ENTER_VEHICLE(psJimmy.PedIndex, vsMichaelsCar.VehicleIndex, DEFAULT_TIME_BEFORE_WARP * 3, VS_BACK_LEFT, PEDMOVE_WALK)
|
|
FORCE_PED_MOTION_STATE(psJimmy.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex) AND IS_VEHICLE_DRIVEABLE(vsMichaelsCar.VehicleIndex)
|
|
IF ( GET_SCRIPT_TASK_STATUS(psTracey.PedIndex, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK )
|
|
TASK_ENTER_VEHICLE(psTracey.PedIndex, vsMichaelsCar.VehicleIndex, DEFAULT_TIME_BEFORE_WARP * 3, VS_BACK_RIGHT, PEDMOVE_WALK)
|
|
FORCE_PED_MOTION_STATE(psTracey.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex) AND IS_VEHICLE_DRIVEABLE(vsMichaelsCar.VehicleIndex)
|
|
IF ( GET_SCRIPT_TASK_STATUS(psAmanda.PedIndex, SCRIPT_TASK_ENTER_VEHICLE) != PERFORMING_TASK )
|
|
TASK_ENTER_VEHICLE(psAmanda.PedIndex, vsMichaelsCar.VehicleIndex, DEFAULT_TIME_BEFORE_WARP * 3, VS_FRONT_RIGHT, PEDMOVE_WALK)
|
|
FORCE_PED_MOTION_STATE(psAmanda.PedIndex, MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
WAIT(2)
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
IF HAS_LABEL_BEEN_TRIGGERED("FAM6_HOME")
|
|
|
|
SET_LOCATES_BUDDIES_TO_GET_INTO_NEAREST_CAR(sLocatesData, vsMichaelsCar.VehicleIndex)
|
|
|
|
START_AUDIO_SCENE("FAMILY_6_DRIVE_HOME")
|
|
|
|
bVehicleReversed = FALSE
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IF ( bStopUsingDefaultRoute = FALSE )
|
|
IF ( bCustomRouteActive = FALSE )
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
SET_GPS_DISABLED_ZONE(<< -1908.517456 - 24.0, -518.293640 - 24.0, 17.816877 - 8.0 >>,
|
|
<< -1908.517456 + 24.0, -518.293640 + 24.0, 17.816877 + 8.0 >>)
|
|
|
|
bCustomRouteActive = TRUE
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF NOT DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
SET_GPS_DISABLED_ZONE(<< 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
bCustomRouteActive = FALSE
|
|
ENDIF
|
|
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
|
|
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), << -1908.517456, -518.293640, 17.816877 >>, << 24.0, 24.0, 8.0 >>)
|
|
OR NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-1901.539307,-537.078613,17.767612>>, <<36.000000,32.000000,8.000000>>)
|
|
|
|
SET_GPS_DISABLED_ZONE(<< 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
|
|
|
|
bStopUsingDefaultRoute = TRUE
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IS_PLAYER_AT_LOCATION_WITH_BUDDIES_ANY_MEANS(sLocatesData, vMichaelsHousePosition, DEFAULT_LOCATES_SIZE_VECTOR(),
|
|
TRUE, psAmanda.PedIndex, psJimmy.PedIndex, psTracey.PedIndex, "FAM6_DHOUSE",
|
|
"CMN_ALEAVE", "CMN_JLEAVE", "CMN_TCLEAVE", "FAM6_FAM", FALSE, TRUE)
|
|
|
|
IF DOES_BLIP_EXIST(sLocatesData.LocationBlip)
|
|
IF ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psJimmy.PedIndex)
|
|
AND ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psAmanda.PedIndex)
|
|
AND ARE_PEDS_IN_THE_SAME_VEHICLE(PLAYER_PED_ID(), psTracey.PedIndex)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-826.59497, 177.70781, 68.15234>>, <<-823.29541, 183.13243, 75.85941>>, 5.54)
|
|
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), <<-825.972961,179.888916,72.441452>>, << 10.0, 10.0, 4.0 >>)
|
|
AND IS_ENTITY_AT_COORD(psJimmy.PedIndex, <<-825.972961,179.888916,72.441452>>, << 10.0, 10.0, 4.0 >>)
|
|
AND IS_ENTITY_AT_COORD(psAmanda.PedIndex, <<-825.972961,179.888916,72.441452>>, << 10.0, 10.0, 4.0 >>)
|
|
AND IS_ENTITY_AT_COORD(psTracey.PedIndex, <<-825.972961,179.888916,72.441452>>, << 10.0, 10.0, 4.0 >>)
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
IF IS_VEHICLE_ON_ALL_WHEELS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData)
|
|
|
|
KILL_ANY_CONVERSATION()
|
|
KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
|
|
IF ( bVehicleReversed = FALSE )
|
|
IF IS_VEHICLE_REVERSING(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
bVehicleReversed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()), 5.0)
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
iStageProgress++
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
iStageProgress++
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
SEQUENCE_INDEX JimmySequenceIndex
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
OPEN_SEQUENCE_TASK(JimmySequenceIndex)
|
|
IF IS_PED_IN_ANY_VEHICLE(psJimmy.PedIndex)
|
|
TASK_LEAVE_ANY_VEHICLE(NULL, GET_VEHICLE_EXIT_DELAY(psJimmy.PedIndex, GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())))
|
|
ENDIF
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -817.9304, 177.7482, 71.2278 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -808.3328, 171.4540, 75.7457 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
CLOSE_SEQUENCE_TASK(JimmySequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(psJimmy.PedIndex, JimmySequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(JimmySequenceIndex)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
SEQUENCE_INDEX TraceySequenceIndex
|
|
CLEAR_SEQUENCE_TASK(TraceySequenceIndex)
|
|
OPEN_SEQUENCE_TASK(TraceySequenceIndex)
|
|
IF IS_PED_IN_ANY_VEHICLE(psTracey.PedIndex)
|
|
TASK_LEAVE_ANY_VEHICLE(NULL, GET_VEHICLE_EXIT_DELAY(psTracey.PedIndex, GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())))
|
|
ENDIF
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -817.9304, 177.7482, 71.2278 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -803.5399, 177.6053, 75.7483 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
CLOSE_SEQUENCE_TASK(TraceySequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(psTracey.PedIndex, TraceySequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(TraceySequenceIndex)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
SEQUENCE_INDEX AmandaSequenceIndex
|
|
CLEAR_SEQUENCE_TASK(AmandaSequenceIndex)
|
|
OPEN_SEQUENCE_TASK(AmandaSequenceIndex)
|
|
IF IS_PED_IN_ANY_VEHICLE(psAmanda.PedIndex)
|
|
TASK_LEAVE_ANY_VEHICLE(NULL, GET_VEHICLE_EXIT_DELAY(psAmanda.PedIndex, GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())))
|
|
ENDIF
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-817.93042, 177.74828, 71.22781>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-798.39508, 183.62172, 71.60547>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-775.53857, 183.19688, 71.83523>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
CLOSE_SEQUENCE_TASK(AmandaSequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(psAmanda.PedIndex, AmandaSequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(AmandaSequenceIndex)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
SEQUENCE_INDEX PlayerSequenceIndex
|
|
CLEAR_SEQUENCE_TASK(PlayerSequenceIndex)
|
|
OPEN_SEQUENCE_TASK(PlayerSequenceIndex)
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
TASK_LEAVE_ANY_VEHICLE(NULL, GET_VEHICLE_EXIT_DELAY(PLAYER_PED_ID(), GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID())))
|
|
ENDIF
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << -819.05, 177.24, 70.83 >>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP * 3)
|
|
CLOSE_SEQUENCE_TASK(PlayerSequenceIndex)
|
|
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), PlayerSequenceIndex)
|
|
CLEAR_SEQUENCE_TASK(PlayerSequenceIndex)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
BREAK
|
|
|
|
CASE 4
|
|
|
|
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psJimmy.PedIndex)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psTracey.PedIndex)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(psAmanda.PedIndex)
|
|
|
|
IF ( bCutsceneAssetsRequested = TRUE ) //progress if cutscene ped variations were requested
|
|
//otherwise cutscene might play with default ped variations
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_MISSION_STAGE_CUTSCENE_END_COMPLETED(INT &iStageProgress)
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
SET_USE_HI_DOF()
|
|
ENDIF
|
|
|
|
SWITCH iStageProgress
|
|
|
|
CASE 0
|
|
|
|
IF HAS_REQUESTED_CUTSCENE_LOADED("fam_6_mcs_6_p4_b")
|
|
|
|
IF NOT IS_PED_INJURED(psJimmy.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psJimmy.PedIndex, "Jimmy", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, psJimmy.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psTracey.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psTracey.PedIndex, "Tracy", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, psTracey.ModelName)
|
|
ENDIF
|
|
|
|
IF NOT IS_PED_INJURED(psAmanda.PedIndex)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(psAmanda.PedIndex, "Amanda", CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY, psAmanda.ModelName)
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE)
|
|
REPLAY_RECORD_BACK_FOR_TIME(10.0, 0.0)
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST)
|
|
|
|
STOP_AUDIO_SCENES()
|
|
START_CUTSCENE(CUTSCENE_CREATE_OBJECTS_AT_SCENE_ORIGIN)
|
|
|
|
iStageProgress++
|
|
|
|
ELSE
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE("Michael", PLAYER_PED_ID(), PLAYER_ZERO)
|
|
SET_JIMMY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_TRACEY_CUTSCENE_COMPONENT_VARIATIONS()
|
|
SET_AMANDA_CUTSCENE_COMPONENT_VARIATIONS()
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 1
|
|
|
|
IF IS_CUTSCENE_PLAYING()
|
|
|
|
VEHICLE_INDEX LastPlayerVehicleIndex
|
|
|
|
LastPlayerVehicleIndex = GET_PLAYERS_LAST_VEHICLE()
|
|
|
|
IF DOES_ENTITY_EXIST(LastPlayerVehicleIndex)
|
|
|
|
IF NOT IS_ENTITY_DEAD(LastPlayerVehicleIndex)
|
|
|
|
//if last player vehicle is in the cutscene area and would interfere with cutscene entities
|
|
IF IS_ENTITY_IN_ANGLED_AREA(LastPlayerVehicleIndex, <<-822.864136,175.135193,69.303169>>, <<-815.251099,178.129684,76.153091>>, 8.0)
|
|
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(LastPlayerVehicleIndex)
|
|
SET_ENTITY_AS_MISSION_ENTITY(LastPlayerVehicleIndex)
|
|
ENDIF
|
|
|
|
STOP_VEHICLE_FIRE(LastPlayerVehicleIndex)
|
|
|
|
SET_ENTITY_COORDS(LastPlayerVehicleIndex, vsMichaelsCar.vPosition)
|
|
SET_ENTITY_HEADING(LastPlayerVehicleIndex, vsMichaelsCar.fHeading)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(LastPlayerVehicleIndex, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(LastPlayerVehicleIndex)
|
|
SET_VEHICLE_ENGINE_ON(LastPlayerVehicleIndex, FALSE, TRUE)
|
|
|
|
ENDIF
|
|
|
|
IF GET_DISTANCE_BETWEEN_COORDS(vMichaelsHousePosition, GET_ENTITY_COORDS(LastPlayerVehicleIndex)) < 15.0
|
|
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(LastPlayerVehicleIndex)
|
|
SET_ENTITY_AS_MISSION_ENTITY(LastPlayerVehicleIndex)
|
|
ENDIF
|
|
|
|
STOP_VEHICLE_FIRE(LastPlayerVehicleIndex)
|
|
|
|
SET_ENTITY_COORDS(LastPlayerVehicleIndex, vsMichaelsCar.vPosition)
|
|
SET_ENTITY_HEADING(LastPlayerVehicleIndex, PICK_FLOAT(bVehicleReversed, 136.4846, vsMichaelsCar.fHeading))
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(LastPlayerVehicleIndex)
|
|
SET_VEHICLE_DOORS_SHUT(LastPlayerVehicleIndex, TRUE)
|
|
SET_VEHICLE_ENGINE_ON(LastPlayerVehicleIndex, FALSE, TRUE)
|
|
|
|
|
|
SET_VEHICLE_LOD_MULTIPLIER(LastPlayerVehicleIndex, 2.0)
|
|
REQUEST_VEHICLE_HIGH_DETAIL_MODEL(LastPlayerVehicleIndex)
|
|
|
|
IF DOES_VEHICLE_OVERLAP_ANGLED_AREA(LastPlayerVehicleIndex, <<-828.601990,176.916138,67.952744>>,
|
|
<<-822.840515,183.031448,74.878098>>, 4.0)
|
|
|
|
//reposition last player vehicle across the street
|
|
SET_ENTITY_COORDS(LastPlayerVehicleIndex, << -867.9103, 158.2215, 63.9014 >>)
|
|
SET_ENTITY_HEADING(LastPlayerVehicleIndex, 174.2918)
|
|
|
|
SET_VEHICLE_DOORS_SHUT(LastPlayerVehicleIndex, TRUE)
|
|
SET_VEHICLE_ON_GROUND_PROPERLY(LastPlayerVehicleIndex)
|
|
SET_VEHICLE_ENGINE_ON(LastPlayerVehicleIndex, FALSE, TRUE)
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
DESTROY_ALL_CAMS()
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
CLEAR_AREA_OF_PEDS(MissionPosition.vPosition, 100.0)
|
|
CLEAR_AREA_OF_OBJECTS(MissionPosition.vPosition, 100.0)
|
|
CLEAR_AREA_OF_VEHICLES(MissionPosition.vPosition, 100.0)
|
|
CLEAR_AREA_OF_PROJECTILES(MissionPosition.vPosition, 100.0)
|
|
REMOVE_PARTICLE_FX_IN_RANGE(MissionPosition.vPosition, 100.0)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 2
|
|
|
|
IF DOES_ENTITY_EXIST(vsMichaelsCar.VehicleIndex) AND NOT IS_ENTITY_DEAD(vsMichaelsCar.VehicleIndex)
|
|
SET_FORCE_HD_VEHICLE(vsMichaelsCar.VehicleIndex, TRUE)
|
|
SET_VEHICLE_WILL_FORCE_OTHER_VEHICLES_TO_STOP(vsMichaelsCar.VehicleIndex, TRUE)
|
|
ENDIF
|
|
|
|
IF NOT DOES_CAM_EXIST(ScriptedCamera)
|
|
|
|
ScriptedCamera = CREATE_CAMERA(CAMTYPE_SCRIPTED, TRUE)
|
|
|
|
SET_CAM_PARAMS(ScriptedCamera, <<-844.676208,180.998871,73.017410>>,<<5.071437,-0.000056,-101.571411>>,33.000000)
|
|
SET_CAM_DOF_PLANES(ScriptedCamera, 4.3662, 8.608, 1000.913, 10069.130)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
REPLAY_STOP_EVENT()
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
IF IS_SCREEN_FADED_OUT()
|
|
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 3
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
IF IS_CAM_RENDERING(ScriptedCamera)
|
|
|
|
TRIGGER_MISSION_STATS_UI(TRUE, TRUE)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 4
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
IF IS_CAM_RENDERING(ScriptedCamera)
|
|
|
|
IF ( g_bResultScreenDisplaying = TRUE )
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 5
|
|
|
|
IF DOES_CAM_EXIST(ScriptedCamera)
|
|
IF IS_CAM_RENDERING(ScriptedCamera)
|
|
|
|
IF ( g_bResultScreenDisplaying = FALSE )
|
|
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
|
|
iStageProgress++
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE 6
|
|
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
IF IS_SCREEN_FADED_IN()
|
|
DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME)
|
|
ENDIF
|
|
|
|
IF IS_SCREEN_FADED_OUT() AND NOT IS_SCREEN_FADING_OUT()
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
//|============================= END MISSION STAGES FUNCTIONS ============================|
|
|
|
|
//|=================================== MAIN SCRIPT LOOP ==================================|
|
|
|
|
SCRIPT
|
|
|
|
SET_MISSION_FLAG (TRUE)
|
|
|
|
//check for death or arrest
|
|
IF HAS_FORCE_CLEANUP_OCCURRED()
|
|
|
|
MISSION_FLOW_MISSION_FORCE_CLEANUP()
|
|
|
|
MISSION_CLEANUP()
|
|
|
|
TERMINATE_THIS_THREAD()
|
|
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CREATE_DEBUG_MISSION_STAGE_MENU()
|
|
CREATE_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
IF IS_REPLAY_IN_PROGRESS()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mission replay is in progress.")
|
|
#ENDIF
|
|
|
|
SET_MISSION_STAGE_FOR_REPLAY(eMissionStage, GET_REPLAY_MID_MISSION_STAGE())
|
|
|
|
bReplayFlag = TRUE
|
|
|
|
//handle shitskip message
|
|
IF ( g_bShitSkipAccepted = TRUE )
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Shitskip accepted by the player.")
|
|
#ENDIF
|
|
|
|
eMissionStage = GET_NEXT_MISSION_STAGE_FOR_SHITSKIP(eMissionStage)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Shitskip changed mission stage to ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), ".")
|
|
#ENDIF
|
|
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Shitskip not triggered.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(ENUM_TO_INT(MID_MISSION_STAGE_DRIVE_TO_BEAN_MACHINE), "STAGE 0: DRIVE TO BEAN", FALSE)
|
|
ENDIF
|
|
|
|
IF IS_REPEAT_PLAY_ACTIVE()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Repeat play is active.")
|
|
#ENDIF
|
|
|
|
IF NOT IS_REPLAY_IN_PROGRESS()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Repeat play is active and mission replay is not in progress.")
|
|
#ENDIF
|
|
|
|
eMissionStage = MISSION_STAGE_CUTSCENE_INTRO_P1
|
|
|
|
bReplayFlag = TRUE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Setting local replay flag to TRUE for stage loading.")
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mission stage is ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), " for repeat play and no mission replay.")
|
|
#ENDIF
|
|
|
|
ELSE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Repeat play is active and mission replay is in progress.")
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Mission stage is ", GET_MISSION_STAGE_NAME_FOR_DEBUG(eMissionStage), " for repeat play and mission replay.")
|
|
#ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
// PC custom keyboard and mouse control scheme
|
|
bPCControlsSetup = FALSE
|
|
|
|
WHILE TRUE
|
|
|
|
//check each frame if mission is failed due to fail conditions
|
|
//check only if mission stage loading has finished
|
|
//check mission stats for vehicle damage and vehicle speed
|
|
IF ( bLoadingFlag = TRUE )
|
|
RUN_FAIL_CHECKS(eMissionStage, eMissionFail)
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()))
|
|
ELSE
|
|
INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(NULL)
|
|
INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(NULL)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_ReuniteFamily")
|
|
|
|
SWITCH eMissionStage
|
|
|
|
CASE MISSION_STAGE_PRE_INTRO
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME()
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_PRE_INTRO_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_CUTSCENE_INTRO_P1
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P1
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_CUTSCENE_INTRO_P1_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_TIMELAPSE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_TIMELAPSE
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_TIMELAPSE_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_CUTSCENE_INTRO_P2
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_INTRO_P2
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_CUTSCENE_INTRO_P2_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_BEAN_MACHINE
|
|
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()), vBeanMachinePosition) < 150
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.5)
|
|
ENDIF
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_DRIVE_TO_BEAN_MACHINE_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_BEAN_MACHINE
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.5)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.5)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_CUTSCENE_BEAN_MACHINE_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_DRIVE_TO_TRACEY
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_TRACEY
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_DRIVE_TO_TRACEY_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_CUTSCENE_SHOP_1
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_1
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_CUTSCENE_SHOP_1_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_PIERCE_LAZLOW
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_PIERCE_LAZLOW
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_PIERCE_LAZLOW_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_CUTSCENE_SHOP_2
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_2
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_CUTSCENE_SHOP_2_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_TATTOO_LAZLOW
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_TATTOO_LAZLOW
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_TATTOO_LAZLOW_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_CUTSCENE_SHOP_3
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_3
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_CUTSCENE_SHOP_3_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_CUT_LAZLOW_HAIR
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUT_LAZLOW_HAIR
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_CUT_LAZLOW_HAIR_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_CUTSCENE_SHOP_4
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHOP_4
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.75)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.50)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_CUTSCENE_SHOP_4_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_DRIVE_TO_SHRINK
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_TO_SHRINK
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_DRIVE_TO_SHRINK_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_CUTSCENE_SHRINK
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_SHRINK
|
|
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.0)
|
|
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(0.75)
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_CUTSCENE_SHRINK_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_DRIVE_HOME
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_DRIVE_HOME
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_DRIVE_HOME_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_CUTSCENE_END
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_CUTSCENE_END
|
|
IF IS_MISSION_STAGE_LOADED(eMissionStage, iStageSetupProgress, bLoadingFlag, bSkipFlag, bReplayFlag)
|
|
IF IS_MISSION_STAGE_CUTSCENE_END_COMPLETED(iMissionStageProgress)
|
|
RESET_MISSION_FLAGS()
|
|
eMissionStage = MISSION_STAGE_PASSED
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_PASSED
|
|
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
KILL_ANY_CONVERSATION()
|
|
|
|
MISSION_FLOW_MISSION_PASSED()
|
|
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
TRIGGER_SPECIFIC_SWITCH_AND_WAIT(PR_SCENE_T_NAKED_ISLAND , ENUM_TO_INT(SWITCH_FLAG_SKIP_INTRO))
|
|
UpdatePostMissionInfo(g_savedGlobals.sPlayerData.sInfo, CHAR_MICHAEL, PR_SCENE_Ma_FAMILY6) //#1570801
|
|
ENDIF
|
|
|
|
MISSION_CLEANUP()
|
|
TERMINATE_THIS_THREAD()
|
|
|
|
BREAK
|
|
|
|
CASE MISSION_STAGE_FAILED
|
|
|
|
SET_MISSION_FAILED_WITH_REASON(eMissionFail)
|
|
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
KILL_ANY_CONVERSATION()
|
|
|
|
WHILE NOT GET_MISSION_FLOW_SAFE_TO_CLEANUP()
|
|
WAIT(0)
|
|
#IF IS_DEBUG_BUILD
|
|
PRINTLN(GET_THIS_SCRIPT_NAME(), ": Waiting for GET_MISSION_FLOW_SAFE_TO_CLEANUP() to return TRUE.")
|
|
#ENDIF
|
|
ENDWHILE
|
|
|
|
MISSION_CLEANUP()
|
|
TERMINATE_THIS_THREAD()
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD //handle debug functionality
|
|
RUN_DEBUG_PASS_AND_FAIL_CHECK(eMissionStage, eMissionFail) //handle key_f and key_s presses
|
|
RUN_DEBUG_MISSION_STAGE_MENU(iReturnStage, eMissionStage, bSkipFlag, bStageResetFlag) //handle z-skip menu
|
|
RUN_DEBUG_SKIPS(eMissionStage, bSkipFlag, bStageResetFlag) //handle j-skip and p-skip
|
|
#ENDIF
|
|
|
|
WAIT(0)
|
|
|
|
ENDWHILE
|
|
|
|
ENDSCRIPT
|