Files
2025-09-29 00:52:08 +02:00

12823 lines
436 KiB
Python
Executable File

//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
USING "CompletionPercentage_public.sch"
USING "randomChar_public.sch"
USING "RC_Launcher_public.sch"
USING "initial_scenes_Paparazzo.sch"
USING "chase_hint_cam.sch"
USING "commands_event.sch"
USING "event_public.sch"
USING "commands_recording.sch"
CONST_INT TOTAL_NUMBER_OF_TRAFFIC_CARS 100
CONST_INT TOTAL_NUMBER_OF_PARKED_CARS 15
CONST_INT TOTAL_NUMBER_OF_SET_PIECE_CARS 25
CONST_INT MAX_NUMBER_OF_TRAFFIC_CARS_PLAYING_BACK 22
CONST_INT MAX_NUMBER_OF_SET_PIECE_CARS_PLAYING_BACK 12
CONST_INT MAX_NUMBER_OF_PARKED_CARS_PLAYING_BACK 6
USING "traffic.sch"
#IF IS_DEBUG_BUILD
USING "select_mission_stage.sch"
#ENDIF
USING "RC_helper_functions.sch"
USING "RC_Threat_public.sch"
USING "taxi_functions.sch" //For B*1860244 - Blocking taxis during mission.
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : Paparazzo2.sc
// AUTHOR : Ste Kerrigan/Tom Kingsley
// DESCRIPTION : Beverly asks Franklin to help him get some
// filthy video footage of Vinewood starlet Poppy Michelle.
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// The Random Character - sRCLauncherDataLocal.pedID[0]
g_structRCScriptArgs sRCLauncherDataLocal
//INT iTestSound
VECTOR m_vCharPos = << -70.3883, 301.2539, 105.8003 >> //<< -70.3368, 302.4749, 106.0909 >>
FlOAT m_fCharHeading = 66.86 //336.2507
//----------------------
// CHECKPOINTS
//----------------------
//CONST_INT CP_AFTER_MOCAP 1 //following beverly down the road
CONST_INT CP_FILMING 1 //Filming Poppy
CONST_INT CP_GET_TO_CAR 2 //Running to the car
CONST_INT CP_CHASE 3 //The car chase
CONST_INT CP_OUTRO 4 //Outro
// Mission stages
ENUM MISSION_STAGE
MS_INIT = 0,
MS_INTRO, //Mocap
MS_FOLLOW_BEV_ROAD, //Running down the road with beverly
MS_FOLLOW_BEV_GUARDS, //Walking through the court yard past the hotel staff
MS_FOLLOW_TO_POPPY, //Run accross the pool
MS_CAMERA_TUTORIAL, //Bev explains the face recog
MS_FILM_POPPY, //film poppy zoomed in on her face
MS_GET_IN_ESCAPE_CAR, //player and bev run and get in bev's car
MS_CAR_CHASE, //player films poppy chasing them out the boot of the car
MS_OUTRO, //bev pulls over and takes the camera off franklin
MS_PASSED, //mission passed ---- not needed and should just be a call to the script_passed() func
MS_FAILED, //mission failed
MS_UBER_RECORD, //record uber recording ---- needs to be debug only
MS_POPPY_AND_UBA, //Play uber recording and record poppy ---- needs to be debug only
MS_SET_PIECE_RECORDING //Play uber recording and record setpeice car ---- needs to be debug only
ENDENUM
ENUM MISSION_REQ
RQ_CUTSCENE,
RQ_BUDDY,
RQ_POPPY,
RQ_SHAGGER,
RQ_BODYGUARD,
RQ_BODYGUARD_CARS,
RQ_HOTEL_STAFF,
RQ_BROOM,
RQ_RAG,
RQ_PLAYER_CAR,
RQ_ANIMS,
RQ_STAFF_ANIMS,
RQ_BEV_PED_RECORDING,
RQ_CAMERA,
RQ_CAMERA_CUTSCENE,
RQ_OUTRO_ANIMS,
RQ_CAMERA_WALK,
RQ_SPRITES,
RQ_UBER_PLAYER_CAR_REC,
RQ_POPPY_CAR_REC,
RQ_BODYGUARD_1_REC,
RQ_BODYGUARD_2_REC,
RQ_UBER_CAR_RECORDING,
RQ_POPPY_RECORDING,
RQ_SET_PEICE_RECORDING,
RQ_CHASE_SOUNDS,
RQ_TEXT
ENDENUM
ENUM SCRIPTED_CINE_CAM
SCC_START,
SCC_CONSTRUCTION_FOOR_CAM,
SCC_PAVEMENT_CAM,
SCC_CONSTRUCTION_CAM,
SCC_HOTEL_CAM,
SCC_CAM_PAN
ENDENUM
ENUM CAR_ENUMS
POPPY_CAR = 0,
SHAGGER_CAR = 1,
BODYGUARD_CAR = 2
ENDENUM
ENUM CHASE_CONVO_STAGE
CC_STAGE_1,
CC_STAGE_2,
CC_STAGE_3,
CC_NONE
ENDENUM
ENUM STAGE_STATES
SS_INIT,
SS_ACTIVE,
SS_CLEANUP,
SS_SKIPPED
ENDENUM
ENUM FAILED_REASONS
FR_POPPY_SCARED,
FR_BUDDY_DEAD,
FR_BUDDY_HARMED,
FR_BUDDY_THREAT,
FR_BADCAM,
FR_ATTENTION,
FR_SPOTTED,
FR_KILLED_INOCC,
FR_KILLED_POP,
FR_HARMED_POP,
FR_KILLED_SHAG,
FR_HARMED_SHAG,
FR_LEFT_AREA,
FR_LEFT_BUDDY,
FR_CAR_DEAD,
FR_WANTED,
FR_TOOK_TOO_LONG,
FR_BEV_LEFT_YOU,
FR_FOOTAGE_RUINED,
FR_NONE
ENDENUM
ENUM OUTRO_CUTSCENE_STAGES
OCS_CAMERA_CUT_1,
OCS_CAMERA_PAN,
OCS_CAMERA_PANING,
OCS_FIN
ENDENUM
ENUM CAR_CHASE_STAGE
CCS_PULL_OUT_CAR_1 = 5,
CCS_PULL_OUT_CAR_2 = 6,
CCS_CRASH_CAR_1 = 8,
CCS_CHASE_FIN = -1
ENDENUM
ENUM CHASE_SOUND_ORIGIN
CSO_POPPY,
CSO_SHAGGER,
CSO_BODYGUARD,
CSO_PLAYER
ENDENUM
ENUM STAFF_STATES
S_NULL,
S_WAIT_ACTIVE,
S_WALK_TALK,
S_STAND_TALK,
S_AMBIENT_BEHAVIOUR,
S_SEEN_GUN,
S_THREATENED,
S_THREATENED_WITH_GUN,
S_BUMPED,
S_RUN
ENDENUM
ENUM MAID_AMBIENT_STATE
M_AMB_WALKING_TO_POINT,
M_AMB_WASHING_WINDOW,
M_AMB_SMOKEING
ENDENUM
ENUM BOY_AMBIENT_STATE
B_AMB_WALKING_TO_POINT,
B_AMB_SWEEPING
ENDENUM
ENUM CAMERA_TUT_STAGE
CTS_INIT_EXPLAIN,
CTS_EXPLAINING,
CTS_WAIT_DONE
ENDENUM
ENUM CUTSCENE_STAGE
eCutInit,
eCutUpdate,
eCutCleanup
ENDENUM
CUTSCENE_STAGE eCutsceneState = eCutInit
//*************************************************************************************************************************************************
// :CONSTANTS:
//*************************************************************************************************************************************************
// Bev Waypoint Constants
CONST_INT MAX_BEV_WAYPOINTS 8
CONST_INT ROUTE_ROAD_START 0
CONST_INT ROUTE_STAIRS_1_BOTTOM 1
CONST_INT ROUTE_STAIRS_1_MIDDLE 2
CONST_INT ROUTE_STAIRS_1_TOP 3
CONST_INT ROUTE_ARCH_1 4
CONST_INT ROUTE_STAIRS_2_BOTTOM 5
CONST_INT ROUTE_POOL_STAIRS 6
CONST_INT ROUTE_POPPY 7
//General setup constants
CONST_INT MAX_CARS 3
CONST_INT MAX_STAFF 2
CONST_INT MAX_MAID_WORK_POINTS 5
CONST_INT MAX_BOY_WORK_POINTS 3
#IF IS_DEBUG_BUILD
CONST_INT MAX_CHASE_POINTS 34
VECTOR vChaseRoute[MAX_CHASE_POINTS]
INT iCurrentChasePos = 0 //only used when recording a new route
VECTOR vRouteCheckSize = <<9,9,10>> //used when recording uba chase, blips are created along the route and disapear when the player ped enters
#ENDIF
CONST_INT MAX_BEV_RECORDINGS 7
//camera control and filming
CONST_INT iFramesBeforeFilmingFail 60
CONST_INT DEAD_ZONE_CAM 0
CONST_INT NUM_ONSCREEN -3
CONST_INT NUM_ONSCREEN_CENTER 3//2//3
CONST_INT NUM_ONSCREEN_ZOOM_CENTER 4
CONST_INT NUM_OFF_SCREEN 5
CONST_INT MAX_FILM_FAILS_CHASE 6
CONST_INT MAX_FILM_FAILS 7//4
CONST_FLOAT CAM_TURN_RATE 0.0117 //0.0112
CONST_FLOAT CAM_MOUSE_TURN_RATE 20.0
CONST_FLOAT CAM_FOV_RATE 5.0
CONST_FLOAT ONSCREEN_CENTER 2.0
CONST_FLOAT ONSCREEN_JUST 1.5
CONST_FLOAT OFF_SCREEN 1.0
//Uba Recording
CONST_FLOAT POPPY_PLAYBACK_SPEED 0.9
//Prop Constant
CONST_INT MAX_SEX_SCENE_PROPS 4
//Dialogue constants
CONST_INT MAX_BAD_FILM_LINES1 4
CONST_INT MAX_ESCAPE_CHATTER_LINES 3
CONST_INT MAX_CHASE_CONVO_LINES2 17
CONST_FLOAT VIEW_ANGLE 78.0//90.0
//Sounds
CONST_INT MAX_SOUNDS 2
CONST_INT MAX_RUNNING_TIME_BEFORE_ATTENTION 78 //Max time the player can run around by the hotel staff before they fail
#IF IS_DEBUG_BUILD
CONST_INT MAX_SKIP_MENU_LENGTH 12
BOOL bPrintWidgetValuesToDebug = FALSE
#ENDIF
//*************************************************************************************************************************************************
// :VARIABLES:
//*************************************************************************************************************************************************
#IF NOT IS_JAPANESE_BUILD
INT poppy_shagging_scene
INT iBadFilmNoBev = 0
#ENDIF
#IF IS_JAPANESE_BUILD
INT iSeqJapaneseVersionConvo
INT iTimerJapaneseVersionNoticePlayer
BOOL bConvoJapaneseVersion
#ENDIF
INT poppy_shagging_scene2
INT poppy_shagging_scene_breakout
INT iSeqBadCamMissionFail
INT iTimerBadCamMissionFail
INT iTimerPoppyNoticePlayer
INT iTimerPlayerSentToCover
INT iTimerMaidUsingPhone
INT iTimerDrivebyReset
INT iTimerPlayerInEscapeCar
INT iTimerBadFilmConvo
INT iTimerCheckPlayerInRightCar
INT iTimerBadCam
INT iTimerStartStage
INT iTimerEscapeChatter
INT iTimerBevTut
INT iTimerBevInCar
INT iTimerMaidWalkingTalking
INT iTimerCutsceneFinished
INT iMaxRecogPercent
INT iZoomFunc
INT iTimerCamSwitch
INT iSeqTraffic
INT iReplayStage
INT iDoFixForStream = 0
INT iCoverSeq = 0
INT iFramesPlayerInCoverSpot = 0
INT iTimerGetInCarStage
INT iTimerBevSetOffWalking
INT iBadFilming = 0
INT iTimerBevSentToCover
INT iTimerStartedFilming
INT iPoppyAnimSeq
INT iCounterBevWaiting
INT iSeqBevRagdoll
INT iTimerBevRagdoll
INT iSeqMusic = 0
INT iCounterHelp
INT iTimerHelp
INT iClosestWaypointToPlayer
INT iSeqMaid = 0
INT iSeqPlayerHoldCam = 0
INT iFilmingStats
INT iTimerBevCoverTask
#IF NOT IS_JAPANESE_BUILD
INT iSeqPoppySubs
#ENDIF
INT iTimerBevIdleLines
INT iBevIdleLines
INT iShockBG
INT iShockPoppy
INT iShockBev
INT iShockJustin
INT iShockPoppyCrash
INT iFailsafe
BOOL bPlayerSentToCover
BOOL bPoppyCombatTask
BOOL bShaggerCombatTask
BOOL bPoppyCreated = FALSE
BOOL bOkForBevToTurn = FALSE
BOOL bConvoDontInterfere = FALSE
BOOL bConvoNowDude = FALSE
BOOL bLegIt = FALSE
BOOL bComeOn = FALSE
BOOL bDoingEndCut = FALSE
BOOL bBevStealth = FALSE
BOOL bBevSentToCover = FALSE
BOOL bPlayerGettingInCar = FALSE
BOOL bPassCamConvo = FALSE
BOOL bDialogueEndCut = FALSE
BOOL bSmallCrash
BOOL bPoppySmallCrash
BOOL bReachedChase = FALSE
BOOL bSetAudioPos = FALSE
BOOL bPoppyCrashDialogue = FALSE
BOOL bDoneSyncSceneBreakout = FALSE
BOOL bOpenBoot = FALSE
//BOOL bPassCar = FALSE
BOOL bPoppyGettingInCar = FALSE
BOOL bBevDrivingOff = FALSE
BOOL bPutCamInFranksHand = FALSE
BOOL bBevHitHisHead = FALSE
BOOL bHighRevSound = FALSE
BOOL bGoToBev = FALSE
BOOL bSetCarVisible = FALSE
BOOL bCSSetExitCam
BOOL bCSSetExitBev
BOOL bCSSetExitCar
BOOL bCSSetExitFranklin
BOOL bClearCoverTasks = FALSE
BOOL bCSSkipped = FALSE
BOOL bMakeCloudy = FALSE
BOOL bLockBootOpen = FALSE
BOOL bDoDelayedfade = FALSE
//BOOL bReplayUsed
BOOL bJumpedInPool
BOOL bDeckedGuard
BOOL bStaffThreatened
BOOL bPoppyBigCrash
BOOL bDStraight
BOOL bDTrunk
BOOL bDWorse
BOOL bDWhoa
BOOL bDMFer
BOOL bDRight
BOOL bDLeft
BOOL bDFuckU
BOOL bDMove
BOOL bDCrazy
BOOL bDTraffic
BOOL bDSteady
BOOL bDClose
BOOL bDJesus
BOOL bDConst
BOOL bSkipToEndOfChase
BOOL bDoneFirstPoppyCarOffset
BOOL bSwapCamPos
BOOL bOkToPassCam
BOOL bCamZooming
BOOL bRotRight
BOOL bMovePlayerCar
BOOL bBentleyGotBevStuck
FLOAT fCamFov
FLOAT fTimePosInRec
//FLOAT fCamZoomStrength
FLOAT fZOffest
FLOAT fXOffest
FLOAT fXOffestPoppy
FLOAT fXOffestBev
#IF NOT IS_JAPANESE_BUILD
FLOAT fSSPhase
FLOAT fGruntVol
BOOL bDone1stPersonFlash
#ENDIF
FLOAT fZoomAlpha
//FLOAT fTempCamZ
//FLOAT fTempCamZAlpha
FLOAT fLodScale = 1.0
STREAMVOL_ID StreamVol
BOOL bStreamvolCreated = FALSE
//FLOAT fCrashShockRange
OBJECT_INDEX objShagTable
OBJECT_INDEX objShagParasol
OBJECT_INDEX ObjPhone
OBJECT_INDEX objCam
OBJECT_INDEX objPipe1
PED_INDEX pedHotel[6]
PED_INDEX pedBuilder[5]
BOOL bHotelPedsSpawned
BOOL bHotelModelsRequested
BOOL bDoingFocusPush
INT iTimerFocusPush
VEHICLE_INDEX viCrashFuto
VEHICLE_INDEX vehTraffic[15]
PED_INDEX pedRandomDriver[15]
PED_INDEX pedTemp
PED_INDEX pedTempJustin
PED_INDEX pedTempBev
SCENARIO_BLOCKING_INDEX sbiPoppy
SCENARIO_BLOCKING_INDEX sbiClipboardGuys
SCENARIO_BLOCKING_INDEX mScenarioBlocker
SCENARIO_BLOCKING_INDEX sbiBuilders
INT iZoomSound = GET_SOUND_ID()
INT iSoundPoppyRevs = GET_SOUND_ID()
#IF NOT IS_JAPANESE_BUILD
INT iSexSound = GET_SOUND_ID()
INT iGruntSounds = GET_SOUND_ID()
#ENDIF
BOOL bDumpedBank
AI_BLIP_STRUCT bsHotelPed1
AI_BLIP_STRUCT bsHotelPed2
AI_BLIP_STRUCT bsHotelPed3
AI_BLIP_STRUCT bsHotelPed4
AI_BLIP_STRUCT bsHotelPed5
AI_BLIP_STRUCT bsPoppy
AI_BLIP_STRUCT bsJustin
AI_BLIP_STRUCT bsSecurity
AI_BLIP_STRUCT bsStaff1
AI_BLIP_STRUCT bsStaff2
TIMEOFDAY sTimeOfDay
INT iHour
VECTOR vPlayerStartPos = <<-74.1683, 299.9258, 105.4432>>//<< -71.8997, 299.1354, 105.3285 >>
VECTOR vAlleyPos = << -74, 300, 102>>
VECTOR vPlayerCarStartPos = << -78.9112, 299.3701, 105.4327 >>
VECTOR vBodyGuardCarPos[MAX_CARS]
VECTOR vSafeVec = <<0,0,0>> //used mostly in setup functions that require a vector in the args but dont neccessarily need one
VECTOR vCameraOffset = <<0,-2.1,0.6>> //<<0,-1.9,0.6>>
VECTOR vSexScene = << -29.4167, 302.7094, 111.6957 >> //position of the sex scene
VECTOR vAlleyPoint1 = << -75.1476, 359.3089, 111.4346 >>
VECTOR vAlleyPoint2 = << 41.4266, 312.7768, 140.2310 >>
VECTOR vBevRoute[MAX_BEV_WAYPOINTS]
FLOAT fPlayerDir = 235.4094 //starting player direction
FLOAT fPlayerCarDir = 249.8696
FLOAT fBodyGuardCarDir[MAX_CARS]
COVERPOINT_INDEX m_ciPap2 //For B*1819613
//VECTOR vPosRespot
//FLOAT fHeadingRespot
STRUCT A_PED
PED_INDEX piPed
VECTOR vPos
FLOAT fDir
ENDSTRUCT
/// PURPOSE: Stores info for spawining a prop
STRUCT A_PROP
OBJECT_INDEX oiProp
VECTOR vPos
VECTOR vRot
MODEL_NAMES mnModle
ENDSTRUCT
/// PURPOSE: The colour for the face tag
STRUCT BOXTAG_COLOUR
INT R = 0
INT G = 0
INT B = 255
ENDSTRUCT
/// PURPOSE: Holds chase sound relevent vars
STRUCT CHASE_SOUND
INT iExecuteTime
BOOL bPlayed
STRING sSoundName
CHASE_SOUND_ORIGIN eOrigin
ENDSTRUCT
STRING sSoundSet = "PAPARAZZO_02_SOUNDSETS"
STRUCT MAID_WORK_POINT
VECTOR vGOTO
FLOAT fFaceing
MAID_AMBIENT_STATE eStateToEnter
ENDSTRUCT
//Struct memeber vars
BOXTAG_COLOUR mBoxCol
A_PROP mSexSceneProps[MAX_SEX_SCENE_PROPS]
A_PED mBuddy
A_PED mPoppy
A_PED mShagger
A_PED mBodyGuard
A_PED mHotelStaff[MAX_STAFF]
CHASE_SOUND mFinalChaseSound[MAX_SOUNDS] //struct for the pipes
MAID_WORK_POINT mMaidWorkPoint[MAX_MAID_WORK_POINTS]
VECTOR vBoyWorkPoint[MAX_BOY_WORK_POINTS]
INT iMaidActiveWorkPoint = GET_RANDOM_INT_IN_RANGE(0, MAX_MAID_WORK_POINTS)
INT iBoyActiveWorkPoint = GET_RANDOM_INT_IN_RANGE(0, MAX_BOY_WORK_POINTS)
structPedsForConversation s_conversation_peds
#IF IS_DEBUG_BUILD
MissionStageMenuTextStruct s_skip_menu[MAX_SKIP_MENU_LENGTH]
#ENDIF
MODEL_NAMES mnPlayerCar = FQ2
MODEL_NAMES mnBodyGuardChaseCar[MAX_CARS]
#IF NOT IS_JAPANESE_BUILD
MODEL_NAMES mnShagger = U_M_Y_Justin //A_M_Y_BusiCas_01 //
#ENDIF
#IF IS_JAPANESE_BUILD
MODEL_NAMES mnShagger = A_M_Y_BusiCas_01 //
#ENDIF
MODEL_NAMES mnPoppy = U_F_Y_PoppyMich
MODEL_NAMES mnBodyGuards = S_M_M_BOUNCER_01//S_M_M_SECURITY_01// S_M_M_HighSec_01
MODEL_NAMES mnHotelStaff[MAX_STAFF]
BLIP_INDEX biGOTO
BLIP_INDEX biBuddyBlip
#IF IS_DEBUG_BUILD
WIDGET_GROUP_ID widgetGroup
#ENDIF
SEQUENCE_INDEX SeqMain
CAMERA_INDEX camMain
CAMERA_INDEX camMainCS
CAMERA_INDEX camInterp
CAMERA_INDEX camFrankFilm
CAMERA_INDEX camFrankFilm2
BOOL bCamInterp = FALSE
OBJECT_INDEX oiBroom
OBJECT_INDEX oiWindowRag
//****************************************************//
// Camera Variables //
//***************************************************//
//Used for controling the camera
FLOAT fCamHeadingMod = 0 //0
FLOAT fCamPitchMod = 0 //0
BOOL bUseLockedCam = FALSE
BOOL bUseFace = TRUE
//Camera Crosshair
//FLOAT fCross1HairHeight = 0.0020
//FLOAT fCross1HairWidth = 0.0300
//FLOAT fCross2HairHeight = 0.0440
//FLOAT fCross2HairWidth = 0.0020
FLOAT fCursorHeight = 0.013
FLOAT fCursorWidth = 0.013
FLOAT fCursorX1 = 0.4600
FLOAT fCursorY1 = 0.4570
FLOAT fCursorX2 = 0.5400
FLOAT fCursorY2 = 0.4570
FLOAT fCursorX3 = 0.4600
FLOAT fCursorY3 = 0.5480
FLOAT fCursorX4 = 0.5400
FLOAT fCursorY4 = 0.5480
INT iScaleMulti = 1500
FLOAT fMaxBox = 1.0
FLOAT fMinBox = 0.4
FLOAT fFaceOffset = 0
FLOAT fFaceOffsetz = 0
#IF NOT IS_JAPANESE_BUILD
FLOAT fBreakoutPhase = 0.877000//0.888042
#ENDIF
REL_GROUP_HASH relPoppyGroup
//*********************************************/ MISSION FLOW VARS /**************************************************//
//MISSION ENUMS
MISSION_STAGE eMissionStage = MS_INIT //track what MISSION stage we are at
STAGE_STATES eState = SS_INIT //Internal state tracking for mission stages
CHASE_CONVO_STAGE eChaseConvo = CC_STAGE_1 //What stage the chase dialogue is up to
SCRIPTED_CINE_CAM eScriptCamState = SCC_START //State for the cinematic camera cuts
CAMERA_TUT_STAGE eCamTutStage = CTS_INIT_EXPLAIN //Stage for the camera tutorial
STAFF_STATES eStaffState[MAX_STAFF]
MAID_AMBIENT_STATE eMaidAMBState = M_AMB_WALKING_TO_POINT //Maid state tracker
BOY_AMBIENT_STATE eBoyAMBState = B_AMB_WALKING_TO_POINT //Busboy state tracker
STRING sFailReason = NULL
MODEL_NAMES mnFailCarForPlayer = SADLER //car spawned for play when they fail --- curent replay system deletes this
BOOL bObjectiveShown = FALSE //flag for if the objective has been shown
BOOL bJumpSkip = FALSE //flag for if current MISSION state should clean up and move to the next state
BOOL bDebugSkipping
BOOL bExpireBevSpeech1 = FALSE
BOOL bExpireBevSpeech2 = FALSE
BOOL bExpireStaffSpeech = FALSE //Staff conversation tracking flag
BOOL bExpireSpottedSpeech = FALSE //If the player is spotted being suspisions
BOOL bEscapeConvExpired = FALSE //Conversation that happens while the player is running to the car
BOOL bEscapeConvExpired1 = FALSE //Second conversation that happens while the player is running to the car
BOOL bExpireBudThreatSpeech = FALSE //beverly running away
BOOL bExpireInactive = TRUE //This conv is expired to start and is reactivated if the player has been away from bev for a time
BOOL bWaving = TRUE //Track if Beverly is waving the player over
BOOL bCloseTooWarning = FALSE //Player gets too close to poppy
BOOL bExpireWarning = FALSE //Expires a state sensitive warning to the player
BOOL bExpireGetInCarText = FALSE //God text telling the player to get in bev's car
BOOL bExpireGetInCarFail = FALSE //Bev enters the car shouting at the player
BOOL bCreatedProps = FALSE
BOOL bCanCreateProps = FALSE
BOOL bCanCreatePoppy = FALSE
BOOL bPictureTaken = FALSE //Has Enough film has been taken
BOOL bLoadingFinIntro = FALSE //If loading has finished under the intro
BOOL bForceTutFin = FALSE //If the player doesn't keep the camera on poppy during the cam tut we force pass it so the mission can continue
BOOL bWrongCarTimerActivate = FALSE //has the timer started - used when the player enters a car that isnt the escape car
BOOL bIsBuddyInCarBeforePlayer = FALSE //has bev entered the car before bev
BOOL bSpotted = FALSE //has the player been spotted
BOOL bBudThreat = FALSE //has the player threatened bev
BOOL bPlayerFailed = FALSE //has the player failed
BOOL bStartScriptCineCam = FALSE //have we started the cam
BOOL bStartChaseCam = FALSE //Should we start the camera for the chase
BOOL bMiniCutDone = FALSE //Tracker bool to see if the drive off cutscene is finished
BOOL bDisableFail = FALSE
INT iRunningTime = 0
INT iCount //Used for loops - should really get rid of this and switch to a local var
INT iMissionState = 0 //Used in the jump stage function
INT iPlaybackProgress = 0 //Used to play back the UBER recording
INT iRedBlink = 0 //Used to turn the red REC on and off
INT iNumFilmFails = 0 //track the number of times the play has had a bad filming line
INT iFilmTime = 0 //Track how long the player has correctly filmed poppy
INT iInactivityTimer = 0 //Time how long the player has spent away from beverly
INT iWaveInactivityTimer = 0 //Used to trigger beverly waving to the player
INT iFailInactivityTimer = 0 //When this is active the player fails after X amount of time
INT iGetInCarTimer = 0 //Times the player when he should be in the escape car but isnt
INT iBevRoute = ROUTE_ROAD_START //Tracker for beverly's current waypoint
INT iBevShoutLines = 0
INT iCounterNotOnScreen = 0
FLOAT fPlaybackSpeed = POPPY_PLAYBACK_SPEED //Speed of the uba recording playback
BOOL bDoingDriveBy = FALSE //Track whether or not poppy is performing a drive by
//TEXT_LABEL sBeverlyPedRecording = "pap2_Bev_route7" //run round the path
//TEXT_LABEL sBeverlyPedRecording = "pap2_Bev_route8" //climb over other wall (blocked by fence)
//TEXT_LABEL sBeverlyPedRecording = "pap2_Bev_routeB" //climb over wall 2
TEXT_LABEL sBeverlyPedRecording = "pap2_Bev_routeC" //Run past poppy, go right and jump off wall
TEXT_LABEL sBeverlyPedRecording2 = "pap2_Bev_route9"
STRING sTextBlock = "PAP2AUD" //Variable for storing the mission Dialogue text block
//STRING sBadFilmLines[MAX_BAD_FILM_LINES1] //Bad film lines in the on foot section get more irrate as they go on so we iterate through them tracking how many times these are triggered
//STRING sChaseConvoLines[MAX_CHASE_CONVO_LINES2] //Chase lines happen at specific times so we play them in order
STRING sWeaponMoveClipset = "random@escape_paparazzi@standing@"//"move_ped_wpn_jerrycan_generic"
STRING sWeaponMoveClipsetFrank = "random@escape_paparazzi@standing@"//"move_ped_wpn_jerrycan_franklin"
INT iCurrentLine = 0
BOOL bLineSet = FALSE
#IF IS_DEBUG_BUILD
INT i_debug_jump_stage
INT iRecordingProgress = 0 //Used for the UBER recording
#ENDIF
BOOL bSkipPassMission = FALSE
VEHICLE_INDEX viPassCar //Car to spawn when the player has passed
VEHICLE_INDEX viChaseCars[MAX_CARS] //Poppy and bodyguards cars
VEHICLE_INDEX viPlayerCar //beverly's car
BOOL bDialogueGiveMe
BOOL bDialogueIllSue
BOOL bDialogueVirgin
BOOL bDialogueAnimals
BOOL bDialogueLosers
BOOL bDialogueYoga
INT iTimerPoppyChaseLine
/// PURPOSE:
/// Resets all mission variables
PROC RESET_MISSION_FLOW_VARS()
bExpireBevSpeech1 = FALSE
bExpireBevSpeech2 = FALSE
bExpireStaffSpeech = FALSE
bEscapeConvExpired = FALSE
bEscapeConvExpired1 = FALSE
bLineSet = FALSE
bDialogueGiveMe = FALSE
bDialogueIllSue = FALSE
bDialogueVirgin = FALSE
bDialogueAnimals = FALSE
bDialogueLosers = FALSE
bDialogueYoga = FALSE
bPassCamConvo = FALSE
bDialogueEndCut = FALSE
bPlayerGettingInCar = FALSE
bReachedChase = FALSE
bSmallCrash = FALSE
bPoppySmallCrash = FALSE
bPoppyCrashDialogue = FALSE
bDoneSyncSceneBreakout = FALSE
bOpenBoot = FALSE
bBevDrivingOff = FALSE
bBevHitHisHead = FALSE
bStreamvolCreated = FALSE
bHighRevSound = FALSE
bGoToBev = FALSE
bSetCarVisible = FALSE
//bPutCamInFranksHand = FALSE
bObjectiveShown = FALSE
bCloseTooWarning = FALSE
bExpireWarning = FALSE
bExpireGetInCarText = FALSE
bExpireGetInCarFail = FALSE
bConvoNowDude = FALSE
bConvoDontInterfere = FALSE
bLegIt = FALSE
bComeOn = FALSE
bCreatedProps = FALSE
bCanCreateProps = FALSE
bCanCreatePoppy = FALSE
bPoppyCreated = FALSE
bPictureTaken = FALSE
bLoadingFinIntro = FALSE
bForceTutFin = FALSE
bWrongCarTimerActivate = FALSE
bIsBuddyInCarBeforePlayer = FALSE
bStartScriptCineCam = FALSE
bStartChaseCam = FALSE
bMiniCutDone = FALSE
iRunningTime = 0
iPlaybackProgress = 0
iInactivityTimer = 0
iFilmTime = 0
iCurrentLine = 0
iSeqMaid = 0
iCoverSeq = 0
iBevRoute = ROUTE_ROAD_START
iFramesPlayerInCoverSpot = 0
iBadFilming = 0
iBevShoutLines = 0
iSeqMusic = 0
iSeqPlayerHoldCam = 0
bPlayerSentToCover = FALSE
bHotelModelsRequested = FALSE
bHotelPedsSpawned = FALSE
bBevSentToCover = FALSE
bClearCoverTasks = FALSE
bCSSkipped = FALSE
bOkToPassCam = FALSE
#IF NOT IS_JAPANESE_BUILD
iBadFilmNoBev = 0
#ENDIF
eChaseConvo = CC_STAGE_1
eScriptCamState = SCC_START
eCamTutStage = CTS_INIT_EXPLAIN
ENDPROC
/// PURPOSE:
/// Initialise uba traffic data
PROC UBER_TRAFFIC_DATA()
TrafficCarPos[0] = <<25.6387, 266.4447, 109.3633>> //108.8633
TrafficCarQuatX[0] = -0.0002
TrafficCarQuatY[0] = -0.0004
TrafficCarQuatZ[0] = 0.6374
TrafficCarQuatW[0] = 0.7705
TrafficCarRecording[0] = 2
TrafficCarStartime[0] = 3498.0000
TrafficCarModel[0] = Felon //Blista //CARBONIZZARE //DUMMY_MODEL_FOR_SCRIPT //TAXI //CARBONIZZARE
//TrafficCarID[0]
TrafficCarPos[1] = <<53.3845, 259.2507, 109.0939>>
TrafficCarQuatX[1] = 0.0028
TrafficCarQuatY[1] = 0.0014
TrafficCarQuatZ[1] = 0.5719
TrafficCarQuatW[1] = 0.8203
TrafficCarRecording[1] = 4
TrafficCarStartime[1] = 5346.0000
TrafficCarModel[1] = DUMMY_MODEL_FOR_SCRIPT //futo
TrafficCarPos[2] = <<54.6990, 249.2125, 109.5105>>
TrafficCarQuatX[2] = -0.0053
TrafficCarQuatY[2] = -0.0038
TrafficCarQuatZ[2] = 0.5759
TrafficCarQuatW[2] = 0.8175
TrafficCarRecording[2] = 5
TrafficCarStartime[2] = 5478.0000
TrafficCarModel[2] = rocoto
TrafficCarPos[3] = <<61.6959, 252.0383, 109.0729>>
TrafficCarQuatX[3] = 0.0073
TrafficCarQuatY[3] = 0.0053
TrafficCarQuatZ[3] = 0.5770
TrafficCarQuatW[3] = 0.8167
TrafficCarRecording[3] = 6
TrafficCarStartime[3] = 5742.0000
TrafficCarModel[3] = infernus
TrafficCarPos[4] = <<69.9301, 249.1113, 108.8189>>
TrafficCarQuatX[4] = 0.0138
TrafficCarQuatY[4] = 0.0098
TrafficCarQuatZ[4] = 0.5760
TrafficCarQuatW[4] = 0.8173
TrafficCarRecording[4] = 7
TrafficCarStartime[4] = 6336.0000
TrafficCarModel[4] = DUMMY_MODEL_FOR_SCRIPT //taxi !!!
TrafficCarPos[5] = <<69.6693, 243.7877, 108.6399>>
TrafficCarQuatX[5] = 0.0136
TrafficCarQuatY[5] = 0.0100
TrafficCarQuatZ[5] = 0.5746
TrafficCarQuatW[5] = 0.8183
TrafficCarRecording[5] = 8
TrafficCarStartime[5] = 6402.0000
TrafficCarModel[5] = TAXI //CARBONIZZARE
TrafficCarPos[6] = <<237.0279, 346.2748, 105.4462>>
TrafficCarQuatX[6] = 0.0020
TrafficCarQuatY[6] = -0.0029
TrafficCarQuatZ[6] = 0.8184
TrafficCarQuatW[6] = -0.5746
TrafficCarRecording[6] = 9
TrafficCarStartime[6] = 16434.0000
TrafficCarModel[6] = rocoto
TrafficCarPos[7] = <<347.3820, 320.5341, 103.8621>>
TrafficCarQuatX[7] = 0.0011
TrafficCarQuatY[7] = 0.0012
TrafficCarQuatZ[7] = 0.6188
TrafficCarQuatW[7] = 0.7855
TrafficCarRecording[7] = 10
TrafficCarStartime[7] = 20328.0000
TrafficCarModel[7] = bus
TrafficCarPos[8] = <<424.6772, 305.5897, 102.4288>>
TrafficCarQuatX[8] = -0.0055
TrafficCarQuatY[8] = 0.0230
TrafficCarQuatZ[8] = 0.4000
TrafficCarQuatW[8] = 0.9162
TrafficCarRecording[8] = 11
TrafficCarStartime[8] = 23958.0000
TrafficCarModel[8] = penumbra
TrafficCarPos[9] = <<423.8190, 290.4329, 102.8873>>
TrafficCarQuatX[9] = -0.0257
TrafficCarQuatY[9] = -0.0017
TrafficCarQuatZ[9] = 0.8050
TrafficCarQuatW[9] = -0.5927
TrafficCarRecording[9] = 12
TrafficCarStartime[9] = 24024.0000
TrafficCarModel[9] = rocoto
TrafficCarPos[10] = <<418.2715, 279.2705, 102.5196>>
TrafficCarQuatX[10] = 0.0001
TrafficCarQuatY[10] = 0.0000
TrafficCarQuatZ[10] = -0.1905
TrafficCarQuatW[10] = 0.9817
TrafficCarRecording[10] = 13
TrafficCarStartime[10] = 24486.0000
TrafficCarModel[10] = futo //taxi //pcj
TrafficCarID[10] = viCrashFuto
TrafficCarPos[11] = <<436.6275, 293.4052, 102.9222>>
TrafficCarQuatX[11] = 0.0057
TrafficCarQuatY[11] = 0.0037
TrafficCarQuatZ[11] = 0.5851
TrafficCarQuatW[11] = 0.8109
TrafficCarRecording[11] = 14
TrafficCarStartime[11] = 24552.0000
TrafficCarModel[11] = rocoto
TrafficCarPos[12] = <<568.5327, 245.2966, 102.6008>>
TrafficCarQuatX[12] = -0.0038
TrafficCarQuatY[12] = 0.0103
TrafficCarQuatZ[12] = 0.6916
TrafficCarQuatW[12] = 0.7222
TrafficCarRecording[12] = 15
TrafficCarStartime[12] = 30294.0000
TrafficCarModel[12] = futo
TrafficCarPos[13] = <<563.3254, 226.8358, 102.5454>>
TrafficCarQuatX[13] = 0.0315
TrafficCarQuatY[13] = -0.0056
TrafficCarQuatZ[13] = -0.1653
TrafficCarQuatW[13] = 0.9857
TrafficCarRecording[13] = 16
TrafficCarStartime[13] = 30360.0000
TrafficCarModel[13] = taxi
TrafficCarPos[14] = <<585.7031, 250.9805, 102.9546>>
TrafficCarQuatX[14] = 0.0005
TrafficCarQuatY[14] = -0.0193
TrafficCarQuatZ[14] = 0.3598
TrafficCarQuatW[14] = 0.9328
TrafficCarRecording[14] = 17
TrafficCarStartime[14] = 30888.0000
TrafficCarModel[14] = rocoto
TrafficCarPos[15] = <<641.6404, 224.2890, 97.9900>>
TrafficCarQuatX[15] = 0.0522
TrafficCarQuatY[15] = 0.0380
TrafficCarQuatZ[15] = 0.6146
TrafficCarQuatW[15] = 0.7862
TrafficCarRecording[15] = 18
TrafficCarStartime[15] = 33264.0000
TrafficCarModel[15] = penumbra
TrafficCarPos[16] = <<651.6318, 221.3143, 96.7827>>
TrafficCarQuatX[16] = 0.0519
TrafficCarQuatY[16] = 0.0379
TrafficCarQuatZ[16] = 0.5888
TrafficCarQuatW[16] = 0.8057
TrafficCarRecording[16] = 19
TrafficCarStartime[16] = 33726.0000
TrafficCarModel[16] = taxi
TrafficCarPos[17] = <<686.7967, 203.5349, 92.1762>>
TrafficCarQuatX[17] = 0.0316
TrafficCarQuatY[17] = -0.0462
TrafficCarQuatZ[17] = 0.8192
TrafficCarQuatW[17] = -0.5708
TrafficCarRecording[17] = 20
TrafficCarStartime[17] = 35244.0000
TrafficCarModel[17] = bus
TrafficCarPos[18] = <<558.3951, 44.7597, 94.2669>>
TrafficCarQuatX[18] = -0.0174
TrafficCarQuatY[18] = -0.0487
TrafficCarQuatZ[18] = 0.7204
TrafficCarQuatW[18] = -0.6916
TrafficCarRecording[18] = 110
TrafficCarStartime[18] = 44000.0000
TrafficCarModel[18] = bus
TrafficCarPos[19] = <<648.9051, 39.3727, 86.1631>>
TrafficCarQuatX[19] = 0.0453
TrafficCarQuatY[19] = 0.0236
TrafficCarQuatZ[19] = 0.5662
TrafficCarQuatW[19] = 0.8227
TrafficCarRecording[19] = 111
TrafficCarStartime[19] = 44000.0000
TrafficCarModel[19] = DUMMY_MODEL_FOR_SCRIPT
TrafficCarPos[20] = <<657.6167, 23.9452, 84.8269>>
TrafficCarQuatX[20] = 0.0184
TrafficCarQuatY[20] = -0.0273
TrafficCarQuatZ[20] = 0.8442
TrafficCarQuatW[20] = -0.5349
TrafficCarRecording[20] = 21
TrafficCarStartime[20] = 46596.0000
TrafficCarModel[20] = stratum
TrafficCarPos[21] = <<702.3966, 16.4575, 83.7715>>
TrafficCarQuatX[21] = 0.0095
TrafficCarQuatY[21] = 0.0053
TrafficCarQuatZ[21] = 0.4853
TrafficCarQuatW[21] = 0.8743
TrafficCarRecording[21] = 22
TrafficCarStartime[21] = 50292.0000
TrafficCarModel[21] = DUMMY_MODEL_FOR_SCRIPT //taxi
TrafficCarPos[22] = <<685.0597, -109.3147, 74.1404>>
TrafficCarQuatX[22] = -0.0189
TrafficCarQuatY[22] = 0.0245
TrafficCarQuatZ[22] = 0.4845
TrafficCarQuatW[22] = 0.8742
TrafficCarRecording[22] = 114
TrafficCarStartime[22] = 50610.3008
TrafficCarModel[22] = rocoto
TrafficCarPos[23] = <<702.9434, 9.8203, 83.7822>>
TrafficCarQuatX[23] = 0.0098
TrafficCarQuatY[23] = 0.0046
TrafficCarQuatZ[23] = 0.4938
TrafficCarQuatW[23] = 0.8695
TrafficCarRecording[23] = 23
TrafficCarStartime[23] = 51612.0000
TrafficCarModel[23] = DUMMY_MODEL_FOR_SCRIPT //taxi
TrafficCarPos[24] = <<611.2632, -68.2602, 72.7379>> //
TrafficCarQuatX[24] = 0.0478
TrafficCarQuatY[24] = -0.0234
TrafficCarQuatZ[24] = -0.5413
TrafficCarQuatW[24] = 0.8391
TrafficCarRecording[24] = 24
TrafficCarStartime[24] = 55506.0000
TrafficCarModel[24] = Felon //Blista //CARBONIZZARE
TrafficCarPos[25] = <<558.8278, -89.5658, 67.1954>>
TrafficCarQuatX[25] = 0.0763
TrafficCarQuatY[25] = 0.0202
TrafficCarQuatZ[25] = -0.5700
TrafficCarQuatW[25] = 0.8179
TrafficCarRecording[25] = 112
TrafficCarStartime[25] = 55610.3008
TrafficCarModel[25] = taxi
TrafficCarPos[26] = <<525.6269, -124.3243, 60.7692>>
TrafficCarQuatX[26] = 0.0799
TrafficCarQuatY[26] = 0.0173
TrafficCarQuatZ[26] = -0.2839
TrafficCarQuatW[26] = 0.9554
TrafficCarRecording[26] = 113
TrafficCarStartime[26] = 55610.3008
TrafficCarModel[26] = bus
TrafficCarPos[27] = <<546.6170, -83.7620, 67.0976>>
TrafficCarQuatX[27] = 0.1902
TrafficCarQuatY[27] = -0.1282
TrafficCarQuatZ[27] = 0.8789
TrafficCarQuatW[27] = 0.4182
TrafficCarRecording[27] = 25
TrafficCarStartime[27] = 58542.0000
TrafficCarModel[27] = taxi //PCJ
TrafficCarPos[28] = <<512.8046, -125.0119, 60.1147>>
TrafficCarQuatX[28] = 0.0016
TrafficCarQuatY[28] = -0.0689
TrafficCarQuatZ[28] = 0.9713
TrafficCarQuatW[28] = 0.2277
TrafficCarRecording[28] = 26
TrafficCarStartime[28] = 60588.0000
TrafficCarModel[28] = DUMMY_MODEL_FOR_SCRIPT //futo //BMX
TrafficCarPos[29] = <<321.9392, -109.2699, 67.8426>>
TrafficCarQuatX[29] = 0.0084
TrafficCarQuatY[29] = -0.0199
TrafficCarQuatZ[29] = 0.8069
TrafficCarQuatW[29] = -0.5903
TrafficCarRecording[29] = 27
TrafficCarStartime[29] = 69234.0000
TrafficCarModel[29] = CARBONIZZARE //penumbra
TrafficCarPos[30] = <<278.0286, -73.8002, 69.5330>>
TrafficCarQuatX[30] = 0.0043
TrafficCarQuatY[30] = 0.0017
TrafficCarQuatZ[30] = 0.9776
TrafficCarQuatW[30] = 0.2105
TrafficCarRecording[30] = 28
TrafficCarStartime[30] = 71346.0000
TrafficCarModel[30] = penumbra
TrafficCarPos[31] = <<276.3335, -111.5560, 69.3416>>
TrafficCarQuatX[31] = 0.0230
TrafficCarQuatY[31] = -0.0041
TrafficCarQuatZ[31] = -0.1834
TrafficCarQuatW[31] = 0.9828
TrafficCarRecording[31] = 29
TrafficCarStartime[31] = 71676.0000
TrafficCarModel[31] = futo
TrafficCarPos[32] = <<254.9427, -76.6293, 69.4554>>
TrafficCarQuatX[32] = -0.0030
TrafficCarQuatY[32] = 0.0042
TrafficCarQuatZ[32] = 0.8139
TrafficCarQuatW[32] = -0.5810
TrafficCarRecording[32] = 30
TrafficCarStartime[32] = 72204.0000
TrafficCarModel[32] = penumbra
TrafficCarPos[33] = <<236.3161, -186.5169, 54.7485>>
TrafficCarQuatX[33] = -0.0102
TrafficCarQuatY[33] = -0.0531
TrafficCarQuatZ[33] = 0.9836
TrafficCarQuatW[33] = 0.1720
TrafficCarRecording[33] = 31
TrafficCarStartime[33] = 76230.0000
TrafficCarModel[33] = futo
TrafficCarPos[34] = <<229.2940, -204.6162, 53.4777>>
TrafficCarQuatX[34] = 0.0007
TrafficCarQuatY[34] = -0.0002
TrafficCarQuatZ[34] = 0.9141
TrafficCarQuatW[34] = 0.4055
TrafficCarRecording[34] = 32
TrafficCarStartime[34] = 76230.0000
TrafficCarModel[34] = penumbra
TrafficCarPos[35] = <<234.9658, -223.4058, 53.6191>>
TrafficCarQuatX[35] = 0.0056
TrafficCarQuatY[35] = 0.0012
TrafficCarQuatZ[35] = 0.5698
TrafficCarQuatW[35] = 0.8218
TrafficCarRecording[35] = 34
TrafficCarStartime[35] = 77352.0000
TrafficCarModel[35] = taxi
TrafficCarPos[36] = <<221.0836, -222.9086, 54.1788>>
TrafficCarQuatX[36] = -0.0031
TrafficCarQuatY[36] = 0.0061
TrafficCarQuatZ[36] = 0.8252
TrafficCarQuatW[36] = -0.5647
TrafficCarRecording[36] = 35
TrafficCarStartime[36] = 77682.0000
TrafficCarModel[36] = mule
TrafficCarPos[37] = <<220.7465, -228.1144, 53.4656>>
TrafficCarQuatX[37] = -0.0019
TrafficCarQuatY[37] = 0.0030
TrafficCarQuatZ[37] = 0.8178
TrafficCarQuatW[37] = -0.5754
TrafficCarRecording[37] = 36
TrafficCarStartime[37] = 79134.0000
TrafficCarModel[37] = penumbra
TrafficCarPos[38] = <<203.5953, -342.6908, 43.6340>>
TrafficCarQuatX[38] = 0.0020
TrafficCarQuatY[38] = 0.0006
TrafficCarQuatZ[38] = 0.5637
TrafficCarQuatW[38] = 0.8260
TrafficCarRecording[38] = 37
TrafficCarStartime[38] = 82632.0000
TrafficCarModel[38] = taxi
TrafficCarPos[39] = <<176.7323, -365.8312, 43.0022>>
TrafficCarQuatX[39] = 0.0245
TrafficCarQuatY[39] = -0.0051
TrafficCarQuatZ[39] = -0.2020
TrafficCarQuatW[39] = 0.9791
TrafficCarRecording[39] = 38
TrafficCarStartime[39] = 84018.0000
TrafficCarModel[39] = dubsta
TrafficCarPos[40] = <<168.5778, -336.4375, 43.5013>>
TrafficCarQuatX[40] = -0.0022
TrafficCarQuatY[40] = 0.0015
TrafficCarQuatZ[40] = 0.8002
TrafficCarQuatW[40] = -0.5997
TrafficCarRecording[40] = 39
TrafficCarStartime[40] = 84084.0000
TrafficCarModel[40] = penumbra
TrafficCarPos[41] = <<4.1466, -372.4675, 39.3020>>
TrafficCarQuatX[41] = 0.0469
TrafficCarQuatY[41] = 0.0063
TrafficCarQuatZ[41] = -0.1880
TrafficCarQuatW[41] = 0.9810
TrafficCarRecording[41] = 40
TrafficCarStartime[41] = 93060.0000
TrafficCarModel[41] = taxi
TrafficCarPos[42] = <<14.6536, -491.7607, 33.9844>>
TrafficCarQuatX[42] = -0.0010
TrafficCarQuatY[42] = -0.0049
TrafficCarQuatZ[42] = 0.7513
TrafficCarQuatW[42] = 0.6599
TrafficCarRecording[42] = 41
TrafficCarStartime[42] = 96624.0000
TrafficCarModel[42] = bus
TrafficCarPos[43] = <<-10.2838, -420.3103, 39.1597>>
TrafficCarQuatX[43] = -0.0141
TrafficCarQuatY[43] = 0.0241
TrafficCarQuatZ[43] = -0.1440
TrafficCarQuatW[43] = 0.9892
TrafficCarRecording[43] = 42
TrafficCarStartime[43] = 97350.0000
TrafficCarModel[43] = tornado3
TrafficCarPos[44] = <<-14.9425, -417.0332, 39.2908>>
TrafficCarQuatX[44] = -0.0119
TrafficCarQuatY[44] = 0.0229
TrafficCarQuatZ[44] = -0.1418
TrafficCarQuatW[44] = 0.9896
TrafficCarRecording[44] = 43
TrafficCarStartime[44] = 97746.0000
TrafficCarModel[44] = tornado3
ENDPROC
/// PURPOSE:
/// Initialise the setpiece cars for the uba
PROC POPPY_SETPIECE_CAR()
// **** UBER RECORDED SET PIECE CARS **** !!
SetPieceCarPos[0] = <<-61.5962, 337.5525, 111.1293>>
SetPieceCarQuatX[0] = -0.0046
SetPieceCarQuatY[0] = -0.0506
SetPieceCarQuatZ[0] = 0.9800
SetPieceCarQuatW[0] = 0.1923
SetPieceCarRecording[0] = 101
SetPieceCarStartime[0] = 59.4000
SetPieceCarRecordingSpeed[0] = 1.0000
SetPieceCarModel[0] = rapidgt2
SetPieceCarID[0] = viChaseCars[POPPY_CAR]
SetPieceCarPos[1] = <<-62.3594, 322.6118, 109.7076>>
SetPieceCarQuatX[1] = -0.0241
SetPieceCarQuatY[1] = -0.0644
SetPieceCarQuatZ[1] = 0.9804
SetPieceCarQuatW[1] = 0.1845
SetPieceCarRecording[1] = 102
SetPieceCarStartime[1] = 1961.6000
SetPieceCarRecordingSpeed[1] = 1.0000
SetPieceCarModel[1] = landstalker
SetPieceCarID[1] = viChaseCars[SHAGGER_CAR]
SetPieceCarPos[2] = <<-68.0978, 309.2655, 107.7569>>
SetPieceCarQuatX[2] = -0.0147
SetPieceCarQuatY[2] = -0.0700
SetPieceCarQuatZ[2] = 0.9755
SetPieceCarQuatW[2] = 0.2082
SetPieceCarRecording[2] = 103
SetPieceCarStartime[2] = 5416.1958
SetPieceCarRecordingSpeed[2] = 1.0000
SetPieceCarModel[2] = landstalker
SetPieceCarID[2] = viChaseCars[BODYGUARD_CAR]
SetPieceCarPos[3] = <<654.7409, 37.7855, 85.6549>>
SetPieceCarQuatX[3] = 0.0329
SetPieceCarQuatY[3] = 0.0239
SetPieceCarQuatZ[3] = 0.5549
SetPieceCarQuatW[3] = 0.8309
SetPieceCarRecording[3] = 125
SetPieceCarStartime[3] = 44719.9922
SetPieceCarRecordingSpeed[3] = 1.0000
SetPieceCarModel[3] = taxi
SetPieceCarPos[4] = <<435.1409, -57.2070, 74.1370>>
SetPieceCarQuatX[4] = -0.0062
SetPieceCarQuatY[4] = -0.0807
SetPieceCarQuatZ[4] = 0.9560
SetPieceCarQuatW[4] = 0.2818
SetPieceCarRecording[4] = 150
SetPieceCarStartime[4] = 60000.0000
SetPieceCarRecordingSpeed[4] = 1.0000
SetPieceCarModel[4] = taxi
SetPieceCarPos[5] = <<371.1497, -244.7208, 53.7699>>
SetPieceCarQuatX[5] = 0.0223
SetPieceCarQuatY[5] = -0.0044
SetPieceCarQuatZ[5] = -0.1527
SetPieceCarQuatW[5] = 0.9880
SetPieceCarRecording[5] = 151
SetPieceCarStartime[5] = 60000.0000
SetPieceCarRecordingSpeed[5] = 1.0000
SetPieceCarModel[5] = fq2
SetPieceCarPos[6] = <<443.9521, -32.4616, 78.8341>>
SetPieceCarQuatX[6] = -0.0301
SetPieceCarQuatY[6] = -0.0745
SetPieceCarQuatZ[6] = 0.9603
SetPieceCarQuatW[6] = 0.2672
SetPieceCarRecording[6] = 152
SetPieceCarStartime[6] = 60000.0000
SetPieceCarRecordingSpeed[6] = 1.0000
SetPieceCarModel[6] = mule
SetPieceCarPos[7] = <<540.6125, -93.1815, 65.6238>>
SetPieceCarQuatX[7] = 0.1322
SetPieceCarQuatY[7] = -0.1121
SetPieceCarQuatZ[7] = 0.8787
SetPieceCarQuatW[7] = 0.4447
SetPieceCarRecording[7] = 120
SetPieceCarStartime[7] = 60610.3008
SetPieceCarRecordingSpeed[7] = 1.0000
SetPieceCarModel[7] = faggio2
//SetPieceCarID[7] = vehFaggio
/*
SetPieceCarPos[8] = <<546.8231, -89.1675, 66.5121>>
SetPieceCarQuatX[8] = 0.1339
SetPieceCarQuatY[8] = -0.1154
SetPieceCarQuatZ[8] = 0.8577
SetPieceCarQuatW[8] = 0.4828
SetPieceCarRecording[8] = 121
SetPieceCarStartime[8] = 60610.3008
SetPieceCarRecordingSpeed[8] = 1.0000
SetPieceCarModel[8] = DUMMY_MODEL_FOR_SCRIPT
*/
SetPieceCarPos[8] = <<243.4510, -202.3356, 53.8657>>
SetPieceCarQuatX[8] = 0.0356
SetPieceCarQuatY[8] = 0.0122
SetPieceCarQuatZ[8] = -0.1815
SetPieceCarQuatW[8] = 0.9827
SetPieceCarRecording[8] = 130
SetPieceCarStartime[8] = 70000.0000
SetPieceCarRecordingSpeed[8] = 1.0000
SetPieceCarModel[8] = SURFER2
/*
SetPieceCarPos[10] = <<179.6045, -371.7909, 43.0346>>
SetPieceCarQuatX[10] = 0.0282
SetPieceCarQuatY[10] = -0.0034
SetPieceCarQuatZ[10] = -0.2161
SetPieceCarQuatW[10] = 0.9760
SetPieceCarRecording[10] = 131
SetPieceCarStartime[10] = 72000.0000
SetPieceCarRecordingSpeed[10] = 1.0000
SetPieceCarModel[10] = DUMMY_MODEL_FOR_SCRIPT
*/
ENDPROC
PROC DO_FOCUS_PUSH()
FLOAT fHintFov = 35.0
FLOAT fHintFollow = 0.4//0.35
FLOAT fHintPitchOrbit = 0.000
FLOAT fHintSide = 0.1//0.07 //0.25 //-0.01
FLOAT fHintVert = 0.02//0.07 //-0.050
IF NOT IS_REPLAY_IN_PROGRESS()
AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[0])
AND IS_PED_UNINJURED(PLAYER_PED_ID())
AND bDoingFocusPush = TRUE
IF NOT IS_GAMEPLAY_HINT_ACTIVE()
/*
SET_PLAYER_CONTROL(PLAYER_ID(),FALSE)
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],-1)
IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],6)
TASK_FOLLOW_TO_OFFSET_OF_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],<<0,0,0>>,1,-1,0.5)
ELSE
TASK_TURN_PED_TO_FACE_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],-1)
ENDIF
*/
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],-1)
SET_GAMEPLAY_HINT_CAMERA_BLEND_TO_FOLLOW_PED_MEDIUM_VIEW_MODE(TRUE)
SET_GAMEPLAY_ENTITY_HINT(sRCLauncherDataLocal.pedID[0], <<0,0,0>>, TRUE, 30000)
SET_GAMEPLAY_HINT_FOV(fHintFov)
SET_GAMEPLAY_HINT_FOLLOW_DISTANCE_SCALAR(fHintFollow)
SET_GAMEPLAY_HINT_BASE_ORBIT_PITCH_OFFSET(fHintPitchOrbit)
SET_GAMEPLAY_HINT_CAMERA_RELATIVE_SIDE_OFFSET(fHintSide)
SET_GAMEPLAY_HINT_CAMERA_RELATIVE_VERTICAL_OFFSET(fHintVert)
iTimerFocusPush = GET_GAME_TIMER()
BLOCK_PLAYER_FOR_LEAD_IN(TRUE)
ELSE
/*
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],6)
//IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(),SCRIPT_TASK_FOLLOW_TO_OFFSET_OF_ENTITY) = PERFORMING_TASK
// iTimerFocusPush -= 500
//ENDIF
//IF NOT IS_PED_FACING_PED(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],45)
IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(),SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY) <> PERFORMING_TASK
CLEAR_PED_TASKS(PLAYER_PED_ID())
TASK_TURN_PED_TO_FACE_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],-1)
ENDIF
ENDIF
*/
UPDATE_BLOCKED_PLAYER_FOR_LEAD_IN(TRUE)
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],3)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-69.110252,302.947449,105.334381>>, <<-77.485947,306.753998,110.556976>>, 7.000000)
iTimerFocusPush -= 5000
ENDIF
SET_PED_MAX_MOVE_BLEND_RATIO(PLAYER_PED_ID(),1)
STOP_GAMEPLAY_HINT_BEING_CANCELLED_THIS_UPDATE(TRUE)
ENDIF
ENDIF
ENDPROC
PROC MAKE_CLOUDY_IF_NIGHT()
IF NOT bMakeCloudy
sTimeOfDay = GET_CURRENT_TIMEOFDAY()
iHour = GET_TIMEOFDAY_HOUR(sTimeOfDay)
IF iHour > 22
OR iHour < 5
CPRINTLN(DEBUG_MISSION, "MAKE CLOUDY")
CLEAR_WEATHER_TYPE_PERSIST()
SET_WEATHER_TYPE_OVERTIME_PERSIST("OVERCAST",10)
bMakeCloudy = TRUE
ENDIF
ENDIF
ENDPROC
FUNC BOOL HAS_PLAYER_KILLED_SOMEONE()
INT i = 0
IF Has_Ped_Been_Killed()
REPEAT Get_Number_Of_Ped_Killed_Events() i
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(Get_Index_Of_Killed_Ped(i), PLAYER_PED_ID(), FALSE)
RETURN TRUE
ENDIF
ENDREPEAT
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL HAS_PLAYER_INJURED_SOMEONE()
INT i = 0
IF Has_Ped_Been_Killed()
REPEAT Get_Number_Of_Ped_Killed_Events() i
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(Get_Index_Of_Killed_Ped(i), PLAYER_PED_ID(), FALSE)
RETURN TRUE
ENDIF
ENDREPEAT
ENDIF
RETURN FALSE
ENDFUNC
PROC CREATE_BUILDER_PEDS()
IF NOT DOES_ENTITY_EXIST(pedBuilder[0])
REQUEST_MODEL(S_M_Y_Construct_01)
IF NOT HAS_MODEL_LOADED(S_M_Y_Construct_01)
EXIT
ELSE
pedBuilder[0] = CREATE_PED(PEDTYPE_MISSION,S_M_Y_Construct_01,<<76.0832, -346.6293, 41.6255>>, 247.2738)
pedBuilder[1] = CREATE_PED(PEDTYPE_MISSION,S_M_Y_Construct_01,<<94.7224, -361.5001, 41.5291>>, 247.5127)
TASK_GO_TO_ENTITY(pedBuilder[0],pedBuilder[1],-1,1.0,1)
TASK_LOOK_AT_ENTITY(pedBuilder[1],PLAYER_PED_ID(),-1)
pedBuilder[2] = CREATE_PED(PEDTYPE_MISSION,S_M_Y_Construct_01,<<76.8379, -378.1883, 38.9214>>, 124.7959)
TASK_START_SCENARIO_IN_PLACE(pedBuilder[2],"WORLD_HUMAN_CLIPBOARD")
pedBuilder[3] = CREATE_PED(PEDTYPE_MISSION,S_M_Y_Construct_01,<<74.4935, -379.7711, 38.9214>>, 291.4748)
TASK_START_SCENARIO_IN_PLACE(pedBuilder[0],"WORLD_HUMAN_STAND_MOBILE")
pedBuilder[4] = CREATE_PED(PEDTYPE_MISSION,S_M_Y_Construct_01,<<68.7581, -402.9993, 38.9192>>, 291.2518)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_Construct_01)
ENDIF
ENDIF
ENDPROC
//0.835512 //Sync scene phase where they notice Franklin
PROC BREAKOUT_SYNC_SCENE_SPOT_PLAYER()
IF bDoneSyncSceneBreakout = FALSE
#IF NOT IS_JAPANESE_BUILD
poppy_shagging_scene_breakout = CREATE_SYNCHRONIZED_SCENE(<<-30.990408,301.092346,111.681885>>,<<0,0,0>>)
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(poppy_shagging_scene_breakout,FALSE)
#ENDIF
IF IS_PED_UNINJURED(mPoppy.piPed)
IF NOT HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mPoppy.piPed,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),-1)
#IF NOT IS_JAPANESE_BUILD
TASK_SYNCHRONIZED_SCENE (mPoppy.piPed, poppy_shagging_scene_breakout, "rcmpaparazzo_2", "shag_action_poppy", SLOW_BLEND_IN, slow_BLEND_OUT)
#ENDIF
#IF IS_JAPANESE_BUILD
TASK_TURN_PED_TO_FACE_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),-1)
#ENDIF
ELSE
TASK_SMART_FLEE_PED(mPoppy.piPed,PLAYER_PED_ID(),300,-1)
ENDIF
ENDIF
IF IS_PED_UNINJURED(mShagger.piPed)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mShagger.piPed,TRUE)
IF NOT HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mShagger.piPed,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mShagger.piPed,PLAYER_PED_ID(),-1)
#IF NOT IS_JAPANESE_BUILD
TASK_SYNCHRONIZED_SCENE (mShagger.piPed, poppy_shagging_scene_breakout, "rcmpaparazzo_2", "shag_action_a", SLOW_BLEND_IN, -2)
#ENDIF
#IF IS_JAPANESE_BUILD
TASK_TURN_PED_TO_FACE_ENTITY(mShagger.piPed,PLAYER_PED_ID(),-1)
#ENDIF
ELSE
TASK_SMART_FLEE_PED(mShagger.piPed,PLAYER_PED_ID(),300,-1)
ENDIF
ENDIF
#IF NOT IS_JAPANESE_BUILD
SET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene_breakout,0.835512)
#ENDIF
bDoneSyncSceneBreakout = TRUE
ENDIF
ENDPROC
/// PURPOSE:
/// Grabs the table that Poppy is getting shagged over and repositions it
PROC REPOSITION_SHAG_TABLE()
REQUEST_MODEL(prop_table_06)
REQUEST_MODEL(prop_parasol_03)
IF NOT DOES_ENTITY_EXIST(objShagTable)
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-30.860102,301.191986,112.116371>>,5.0,prop_table_06)
objShagTable = GET_CLOSEST_OBJECT_OF_TYPE(<<-30.860102,301.191986,112.116371>>,5.0,prop_table_06)
SET_ENTITY_COORDS(objShagTable,<<-30.860102,301.191986,112.027371>>) //<<-30.860102,301.191986,112.116371>> //112.050371 ---> //112.043371 <---
SET_ENTITY_ROTATION(objShagTable,<<-0.100693,-0.038488,80.437294>>)
FREEZE_ENTITY_POSITION(objShagTable,TRUE)
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(objShagParasol)
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-30.860102,301.191986,112.116371>>,5.0,prop_parasol_03)
objShagParasol = GET_CLOSEST_OBJECT_OF_TYPE(<<-30.860102,301.191986,112.116371>>,5.0,prop_parasol_03)
SET_ENTITY_COORDS(objShagParasol,<<-30.860102,301.191986,111.680336>>)
SET_ENTITY_ROTATION(objShagParasol,<<-0.100693,-0.038488,80.437294>>)
FREEZE_ENTITY_POSITION(objShagParasol,TRUE)
ENDIF
ENDIF
/*
IF NOT DOES_ENTITY_EXIST(objBin)
objBin = CREATE_OBJECT (prop_cs_bin_01, <<-37.376980,321.238312,111.706215>>)
SET_ENTITY_COORDS (objBin, <<-37.376980,321.238312,111.706215>>)
SET_ENTITY_ROTATION (objBin, <<-0.098811,0.017827,-24.255245>>)
FREEZE_ENTITY_POSITION(objBin,TRUE)
ENDIF
*/
ENDPROC
/// PURPOSE:
/// Print a string and put in a carriage return
/// PARAMS:
/// s - the string to print
PROC SK_PRINT(String s)
CPRINTLN(DEBUG_MISSION,s)
ENDPROC
PROC CLEAR_PED_AREAS()
//Ped clear areas
// 26.13, 275.37, 108.55 7244.102051 - 14124.618164 //after cs
// 672.90, 202.11, 92.69 36326.589844 - 45647.019531 //alley entrance
// 622.15, 63.69, 89.07 44000.0 - 50000.0 //alley exit
// 670.06, 2.94, 83.10 49000.0 - 56000.0 //corner of police station
// 493.26, -138.52, 58.97 58000.0 - 67694.289063 //badger
// 299.61, -111.56, 68.51 71936.148438 - 75888.992188 //corner top of hill (Poppy)
IF fTimePosInRec > 7244.102051
AND fTimePosInRec < 14124.618164
IF NOT IS_SPHERE_VISIBLE(<<26.13, 275.37, 108.55>>,25) //after cs
CLEAR_AREA_OF_PEDS(<<26.13, 275.37, 108.55>>,25)
ENDIF
ENDIF
IF fTimePosInRec > 36326.589844
AND fTimePosInRec < 45647.019531
IF NOT IS_SPHERE_VISIBLE(<<672.90, 202.11, 92.69>>,15) //alley entrance
CLEAR_AREA_OF_PEDS(<<672.90, 202.11, 92.69>>,15)
ENDIF
ENDIF
IF fTimePosInRec > 44000.0
AND fTimePosInRec < 50000.0
IF NOT IS_SPHERE_VISIBLE(<<622.15, 63.69, 89.07>>,15) //alley exit
CLEAR_AREA_OF_PEDS(<<622.15, 63.69, 89.07>>,15)
ENDIF
ENDIF
IF fTimePosInRec > 49000.0
AND fTimePosInRec < 56000.0
IF NOT IS_SPHERE_VISIBLE(<<670.06, 2.94, 83.10>>,20) //corner of police station
CLEAR_AREA_OF_PEDS(<<670.06, 2.94, 83.10>>,20)
ENDIF
ENDIF
IF fTimePosInRec > 58000.0
AND fTimePosInRec < 67694.289063
IF NOT IS_SPHERE_VISIBLE(<<493.26, -138.52, 58.97>>,15) //badger building
CLEAR_AREA_OF_PEDS(<<493.26, -138.52, 58.97>>,15)
ENDIF
ENDIF
IF fTimePosInRec > 70936.148438
AND fTimePosInRec < 76888.992188
IF NOT IS_SPHERE_VISIBLE(<<299.61, -111.56, 68.51>>,15) //corner top of hill (Poppy)
CLEAR_AREA_OF_PEDS(<<299.61, -111.56, 68.51>>,15)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Creates and attaches Poppy's phone
PROC ATTACH_POPPY_PHONE()
IF NOT DOES_ENTITY_EXIST(ObjPhone)
ObjPhone = CREATE_OBJECT_NO_OFFSET(Prop_NPC_Phone, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mPoppy.piPed,<<0.0,0.0,10.0>>))
SET_ENTITY_LOD_DIST(ObjPhone,100)
ENDIF
IF DOES_ENTITY_EXIST(ObjPhone)
IF NOT IS_ENTITY_ATTACHED(ObjPhone)
ATTACH_ENTITY_TO_ENTITY(ObjPhone, mPoppy.piPed, GET_PED_BONE_INDEX(mPoppy.piPed, BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
ENDIF
ENDIF
ENDPROC
PROC POPPY_ANGRY_ANIMS()
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
AND NOT IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene_breakout)
IF iPoppyAnimSeq = 0
REQUEST_ANIM_DICT("RANDOM@CAR_THIEF@waiting_ig_4")
iPoppyAnimSeq = 1
ELIF iPoppyAnimSeq = 1
IF HAS_ANIM_DICT_LOADED("RANDOM@CAR_THIEF@waiting_ig_4")
iPoppyAnimSeq = 2
TASK_PLAY_ANIM(mPoppy.piPed,"RANDOM@CAR_THIEF@waiting_ig_4","waiting",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1, AF_SECONDARY)
ENDIF
ELIF iPoppyAnimSeq = 2
IF NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"RANDOM@CAR_THIEF@waiting_ig_4","waiting")
TASK_PLAY_ANIM(mPoppy.piPed,"RANDOM@CAR_THIEF@waiting_ig_4","waiting",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1, AF_SECONDARY)
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Plays the sex anims on Poppy and Justin
/// PARAMS:
/// i - 0 is the looped anim and 1 is the scene
PROC PLAY_POPPY_SHAGGER_ANIM(INT i)
IF IS_PED_UNINJURED(mPoppy.piPed) AND IS_PED_UNINJURED(mShagger.piPed)
SWITCH i
CASE 0
#IF NOT IS_JAPANESE_BUILD
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene)
REPOSITION_SHAG_TABLE()
ATTACH_POPPY_PHONE()
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mShagger.piPed,TRUE)
poppy_shagging_scene = CREATE_SYNCHRONIZED_SCENE(<<-30.990408,301.092346,111.631885>>,<<0,0,0>>) //111.681885
SET_SYNCHRONIZED_SCENE_LOOPED(poppy_shagging_scene,TRUE)
TASK_SYNCHRONIZED_SCENE (mPoppy.piPed, poppy_shagging_scene, "rcmpaparazzo_2", "shag_loop_poppy", INSTANT_BLEND_IN, slow_BLEND_OUT ,SYNCED_SCENE_LOOP_WITHIN_SCENE)
TASK_SYNCHRONIZED_SCENE (mShagger.piPed, poppy_shagging_scene, "rcmpaparazzo_2", "shag_loop_a", INSTANT_BLEND_IN, slow_BLEND_OUT ,SYNCED_SCENE_LOOP_WITHIN_SCENE)
SK_PRINT("TK************ SYNCH SCENE1 STARTED ************TK")
ENDIF
#ENDIF
#IF IS_JAPANESE_BUILD
IF GET_SCRIPT_TASK_STATUS(mPoppy.piPed,SCRIPT_TASK_START_SCENARIO_AT_POSITION) <> PERFORMING_TASK
//SAFE_TELEPORT_ENTITY(mPoppy.piPed,<<-28.95, 300.81, 112.69>>,100.35)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mPoppy.piPed,TRUE)
TASK_START_SCENARIO_AT_POSITION(mPoppy.piPed,"WORLD_HUMAN_SMOKING",<<-28.95, 300.81, 112.69>>,100.35)
ENDIF
IF GET_SCRIPT_TASK_STATUS(mShagger.piPed,SCRIPT_TASK_START_SCENARIO_AT_POSITION) <> PERFORMING_TASK
//SAFE_TELEPORT_ENTITY(mShagger.piPed,<<-29.87, 300.57, 112.69>>,-53.25)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mShagger.piPed,TRUE)
TASK_START_SCENARIO_AT_POSITION(mShagger.piPed,"WORLD_HUMAN_SMOKING",<<-29.87, 300.57, 112.69>>,-53.25)
ENDIF
#ENDIF
BREAK
CASE 1
#IF NOT IS_JAPANESE_BUILD
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
REPOSITION_SHAG_TABLE()
ATTACH_POPPY_PHONE()
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mShagger.piPed,TRUE)
poppy_shagging_scene2 = CREATE_SYNCHRONIZED_SCENE(<<-30.990408,301.092346,111.681885>>,<<0,0,0>>)
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(poppy_shagging_scene2,FALSE)
TASK_SYNCHRONIZED_SCENE (mPoppy.piPed, poppy_shagging_scene2, "rcmpaparazzo_2", "shag_action_poppy", INSTANT_BLEND_IN, slow_BLEND_OUT)
TASK_SYNCHRONIZED_SCENE (mShagger.piPed, poppy_shagging_scene2, "rcmpaparazzo_2", "shag_action_a", INSTANT_BLEND_IN, -2)
PLAY_SYNCHRONIZED_AUDIO_EVENT(poppy_shagging_scene2)
//PLAY_STREAM_FROM_PED(mPoppy.piPed)
bSetAudioPos = FALSE
SK_PRINT("TK************ SYNCH SCENE2 STARTED - RESET AUDIO POSITION BOOL ************TK")
ENDIF
#ENDIF
#IF IS_JAPANESE_BUILD
IF GET_SCRIPT_TASK_STATUS(mPoppy.piPed,SCRIPT_TASK_START_SCENARIO_AT_POSITION) <> PERFORMING_TASK
//SAFE_TELEPORT_ENTITY(mPoppy.piPed,<<-28.95, 300.81, 112.69>>,100.35)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mPoppy.piPed,TRUE)
TASK_START_SCENARIO_AT_POSITION(mPoppy.piPed,"WORLD_HUMAN_SMOKING",<<-28.95, 300.81, 112.69>>,100.35)
ENDIF
IF GET_SCRIPT_TASK_STATUS(mShagger.piPed,SCRIPT_TASK_START_SCENARIO_AT_POSITION) <> PERFORMING_TASK
//SAFE_TELEPORT_ENTITY(mShagger.piPed,<<-29.87, 300.57, 112.69>>,-53.25)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mShagger.piPed,TRUE)
TASK_START_SCENARIO_AT_POSITION(mShagger.piPed,"WORLD_HUMAN_SMOKING",<<-29.87, 300.57, 112.69>>,-53.25)
ENDIF
#ENDIF
BREAK
ENDSWITCH
ENDIF
ENDPROC
PROC SETUP_SYNC_SCENES()
iDoFixForStream = 2
IF bPoppyCreated = TRUE
IF iDoFixForStream = 1
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
STOP_SYNCHRONIZED_AUDIO_EVENT(poppy_shagging_scene2)
//STOP_STREAM()
iDoFixForStream = 2
ENDIF
ELIF iDoFixForStream = 0
IF bSetAudioPos = FALSE
//INIT_SYNCH_SCENE_AUDIO_WITH_POSITION("PAP2_IG1_POPPYSEX",<<-30.990408,301.092346,112.681885>>)
INIT_SYNCH_SCENE_AUDIO_WITH_ENTITY("PAP2_IG1_POPPYSEX",mPoppy.piPed)
SK_PRINT("TK************ SETTING SYNCH SCENE AUDIO POSITION THIS FRAME ************TK")
bSetAudioPos = TRUE
ENDIF
IF PREPARE_SYNCHRONIZED_AUDIO_EVENT("PAP2_IG1_POPPYSEX",0) = TRUE
//IF LOAD_STREAM("CUTSCENES_PAP2_IG1_POPPYSEX_CENTER")
PLAY_POPPY_SHAGGER_ANIM(1)
iDoFixForStream = 1
ENDIF
ELIF iDoFixForStream = 2
IF IS_PED_UNINJURED(mPoppy.piPed)
IF bPlayerSentToCover = FALSE
PLAY_POPPY_SHAGGER_ANIM(0)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE: Create a load of traffic/parked cars
PROC DO_SCRIPTED_TRAFFIC()
IF iSeqTraffic = 0
REQUEST_MODEL(TAXI)
REQUEST_MODEL(BUS)
//REQUEST_MODEL(BLISTA)
//REQUEST_MODEL(MULE)
IF HAS_MODEL_LOADED(TAXI)
AND HAS_MODEL_LOADED(BUS)
//AND HAS_MODEL_LOADED(BLISTA)
//AND HAS_MODEL_LOADED(MULE)
iSeqTraffic = 1
ENDIF
ELIF iSeqTraffic = 1
vehTraffic[0] = CREATE_VEHICLE(TAXI,<<-61.5700, 263.6960, 102.3952>>, 96.8514)
pedRandomDriver[0] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[0])
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[0])
TASK_VEHICLE_DRIVE_TO_COORD(pedRandomDriver[0],vehTraffic[0],<<-196.7214, 263.6796, 91.2333>>,8.0,DRIVINGSTYLE_NORMAL,TAXI,DRIVINGMODE_PLOUGHTHROUGH,5.0,5.0)
vehTraffic[1] = CREATE_VEHICLE(BUS,<<-129.3595, 257.7685, 94.9980>>, 87.6350)
pedRandomDriver[1] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[1])
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[1])
TASK_VEHICLE_DRIVE_TO_COORD(pedRandomDriver[1],vehTraffic[1],<<-196.7214, 263.6796, 91.2333>>,8.0,DRIVINGSTYLE_NORMAL,BUS,DRIVINGMODE_PLOUGHTHROUGH,5.0,5.0)
/*
vehTraffic[2] = CREATE_VEHICLE(BLISTA,<<-114.7640, 263.0628, 96.0816>>, 91.6822)
pedRandomDriver[2] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[2])
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[2])
TASK_VEHICLE_DRIVE_TO_COORD(pedRandomDriver[2],vehTraffic[2],<<-213.4495, 269.5216, 90.9854>>,8.0,DRIVINGSTYLE_NORMAL,BLISTA,DRIVINGMODE_PLOUGHTHROUGH,5.0,5.0)
*/
vehTraffic[3] = CREATE_VEHICLE(TAXI,<<-189.8024, 253.4723, 91.4575>>, 262.6279)
pedRandomDriver[3] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[3])
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[3])
TASK_VEHICLE_DRIVE_TO_COORD(pedRandomDriver[3],vehTraffic[3],<<13.1838, 255.6287, 108.5748>>,8.0,DRIVINGSTYLE_NORMAL,TAXI,DRIVINGMODE_PLOUGHTHROUGH,5.0,5.0)
/*
vehTraffic[4] = CREATE_VEHICLE(MULE,<<-141.6916, 249.0392, 94.1239>>, 270.6987)
pedRandomDriver[4] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[4])
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[4])
TASK_VEHICLE_DRIVE_TO_COORD(pedRandomDriver[4],vehTraffic[4],<<13.1838, 255.6287, 108.5748>>,8.0,DRIVINGSTYLE_NORMAL,MULE,DRIVINGMODE_PLOUGHTHROUGH,5.0,5.0)
vehTraffic[5] = CREATE_VEHICLE(BLISTA,<<-70.2928, 254.0054, 101.2819>>, 276.1490)
pedRandomDriver[5] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[5])
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[5])
TASK_VEHICLE_DRIVE_TO_COORD(pedRandomDriver[5],vehTraffic[5],<<13.1838, 255.6287, 108.5748>>,8.0,DRIVINGSTYLE_NORMAL,BLISTA,DRIVINGMODE_PLOUGHTHROUGH,5.0,5.0)
*/
vehTraffic[6] = CREATE_VEHICLE(BUS,<<-175.1252, 247.2091, 91.9910>>, 265.0136)
pedRandomDriver[6] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[6])
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[6])
TASK_VEHICLE_DRIVE_TO_COORD(pedRandomDriver[6],vehTraffic[6],<<7.4758, 252.7416, 108.4110>>,8.0,DRIVINGSTYLE_NORMAL,BUS,DRIVINGMODE_PLOUGHTHROUGH,5.0,5.0)
vehTraffic[7] = CREATE_VEHICLE(TAXI,<<-98.9022, 246.2435, 97.7797>>, 274.0935)
pedRandomDriver[7] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[7])
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[7])
TASK_VEHICLE_DRIVE_TO_COORD(pedRandomDriver[7],vehTraffic[7],<<7.4758, 252.7416, 108.4110>>,8.0,DRIVINGSTYLE_NORMAL,TAXI,DRIVINGMODE_PLOUGHTHROUGH,5.0,5.0)
iSeqTraffic = 2
ELIF iSeqTraffic = 2
IF fTimePosInRec > 15815.714844
SAFE_RELEASE_PED(pedRandomDriver[0])
SAFE_RELEASE_PED(pedRandomDriver[1])
SAFE_RELEASE_PED(pedRandomDriver[2])
SAFE_RELEASE_PED(pedRandomDriver[3])
SAFE_RELEASE_PED(pedRandomDriver[4])
SAFE_RELEASE_PED(pedRandomDriver[5])
SAFE_RELEASE_PED(pedRandomDriver[6])
SAFE_RELEASE_PED(pedRandomDriver[7])
SAFE_RELEASE_VEHICLE(vehTraffic[0])
SAFE_RELEASE_VEHICLE(vehTraffic[1])
SAFE_RELEASE_VEHICLE(vehTraffic[2])
SAFE_RELEASE_VEHICLE(vehTraffic[3])
SAFE_RELEASE_VEHICLE(vehTraffic[4])
SAFE_RELEASE_VEHICLE(vehTraffic[5])
SAFE_RELEASE_VEHICLE(vehTraffic[6])
SAFE_RELEASE_VEHICLE(vehTraffic[7])
SET_MODEL_AS_NO_LONGER_NEEDED(BUS)
SET_MODEL_AS_NO_LONGER_NEEDED(TAXI)
iSeqTraffic = 7 //3
ENDIF
ELIF iSeqTraffic = 3
IF fTimePosInRec > 41719.378906
vehTraffic[8] = CREATE_VEHICLE(BUS,<<706.0617, 35.9678, 83.2352>>, 146.9535)
pedRandomDriver[8] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[8])
SET_VEHICLE_ENGINE_ON(vehTraffic[8],TRUE,TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[8])
vehTraffic[9] = CREATE_VEHICLE(BLISTA,<<699.3248, 35.4587, 83.1331>>, 147.9884)
pedRandomDriver[9] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[9])
SET_VEHICLE_ENGINE_ON(vehTraffic[9],TRUE,TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[9])
iSeqTraffic = 4
ENDIF
ELIF iSeqTraffic = 4
IF fTimePosInRec > 58743.738281
SAFE_RELEASE_PED(pedRandomDriver[8])
SAFE_RELEASE_PED(pedRandomDriver[9])
SAFE_RELEASE_VEHICLE(vehTraffic[8])
SAFE_RELEASE_VEHICLE(vehTraffic[9])
iSeqTraffic = 5
ENDIF
ELIF iSeqTraffic = 5
IF fTimePosInRec > 58743.738281
vehTraffic[10] = CREATE_VEHICLE(TAXI,<<511.5198, -180.5710, 52.8702>>, 10.0630)
pedRandomDriver[10] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[10])
SET_VEHICLE_ENGINE_ON(vehTraffic[10],TRUE,TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[10])
vehTraffic[11] = CREATE_VEHICLE(BLISTA,<<516.6854, -179.7204, 53.0255>>, 11.7232)
pedRandomDriver[11] = CREATE_RANDOM_PED_AS_DRIVER(vehTraffic[11])
SET_VEHICLE_ENGINE_ON(vehTraffic[11],TRUE,TRUE)
SET_VEHICLE_ON_GROUND_PROPERLY(vehTraffic[11])
iSeqTraffic = 6
ENDIF
ELIF iSeqTraffic = 6
IF fTimePosInRec > 72153.648438
SAFE_RELEASE_PED(pedRandomDriver[10])
SAFE_RELEASE_PED(pedRandomDriver[11])
SAFE_RELEASE_VEHICLE(vehTraffic[10])
SAFE_RELEASE_VEHICLE(vehTraffic[11])
iSeqTraffic = 7
ENDIF
ENDIF
/*
1 start 0.0 //outside hotel
cleanup 15815.714844
<<-61.5700, 263.6960, 102.3952>>, 96.8514
<<-129.3595, 257.7685, 94.9980>>, 87.6350 goto <<-196.7214, 263.6796, 91.2333>>
<<-114.7640, 263.0628, 96.0816>>, 91.6822 goto <<-213.4495, 269.5216, 90.9854>>
<<-189.8024, 253.4723, 91.4575>>, 262.6279
<<-141.6916, 249.0392, 94.1239>>, 270.6987
<<-70.2928, 254.0054, 101.2819>>, 276.1490 goto <<13.1838, 255.6287, 108.5748>>
<<-175.1252, 247.2091, 91.9910>>, 265.0136
<<-98.9022, 246.2435, 97.7797>>, 274.0935 goto <<7.4758, 252.7416, 108.4110>>
2 start 41719.378906 //end of alley & junction
cleanup 58743.738281
<<706.0617, 35.9678, 83.2352>>, 146.9535 //bus parked
<<699.3248, 35.4587, 83.1331>>, 147.9884 //blista parked
3 start 58743.738281 //next junction
cleanup 72153.648438
<<511.5198, -180.5710, 52.8702>>, 10.0630 //taxi parked
<<516.6854, -179.7204, 53.0255>>, 11.7232 //carbonizz parked
//don't do bad cam lines in building site
*/
ENDPROC
PROC DELETE_SCRIPTED_TRAFFIC()
SAFE_DELETE_PED(pedRandomDriver[0])
SAFE_DELETE_PED(pedRandomDriver[1])
SAFE_DELETE_PED(pedRandomDriver[2])
SAFE_DELETE_PED(pedRandomDriver[3])
SAFE_DELETE_PED(pedRandomDriver[4])
SAFE_DELETE_PED(pedRandomDriver[5])
SAFE_DELETE_PED(pedRandomDriver[6])
SAFE_DELETE_PED(pedRandomDriver[7])
SAFE_DELETE_VEHICLE(vehTraffic[0])
SAFE_DELETE_VEHICLE(vehTraffic[1])
SAFE_DELETE_VEHICLE(vehTraffic[2])
SAFE_DELETE_VEHICLE(vehTraffic[3])
SAFE_DELETE_VEHICLE(vehTraffic[4])
SAFE_DELETE_VEHICLE(vehTraffic[5])
SAFE_DELETE_VEHICLE(vehTraffic[6])
SAFE_DELETE_VEHICLE(vehTraffic[7])
ENDPROC
PROC DO_BEV_COVER_ANIMS()
INT iRand
SEQUENCE_INDEX seqBevCov
IF IS_PED_IN_COVER(mBuddy.piPed)
IF eMissionStage = MS_FOLLOW_TO_POPPY
OR eMissionStage = MS_FOLLOW_BEV_GUARDS
IF bPassCamConvo = FALSE
IF NOT bPlayerSentToCover
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_PASS", CONV_PRIORITY_HIGH) //Take my camera and film this shit, I'll keep a look out.
bPassCamConvo = TRUE
ENDIF
ELSE
bPassCamConvo = TRUE
ENDIF
ELSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF bGoToBev = FALSE
IF bPlayerSentToCover = FALSE
PRINT_NOW("PAP2_08", DEFAULT_GOD_TEXT_TIME,0) //Go to ~b~Beverly
bGoToBev = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF iCoverSeq = 0
REQUEST_ANIM_DICT("rcmpaparazzo_2")
REQUEST_CLIP_SET(sWeaponMoveClipset)
REQUEST_CLIP_SET(sWeaponMoveClipsetFrank)
iCoverSeq = 1
ELIF iCoverSeq = 1
IF HAS_ANIM_DICT_LOADED("rcmpaparazzo_2")
//AND GET_GAME_TIMER() > iTimerBevCoverTask + 2000
//AND HAS_CLIP_SET_LOADED(sWeaponMoveClipset)
iCoverSeq = 2
OPEN_SEQUENCE_TASK(seqBevCov)
TASK_PLAY_ANIM(NULL,"rcmpaparazzo_2","idle_l_corner_a",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1)
TASK_PLAY_ANIM(NULL,"rcmpaparazzo_2","idle_l_corner_b",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1)
TASK_PLAY_ANIM(NULL,"rcmpaparazzo_2","idle_l_corner_c",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1)
TASK_PLAY_ANIM(NULL,"rcmpaparazzo_2","idle_l_corner_b",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1)
TASK_PLAY_ANIM(NULL,"rcmpaparazzo_2","idle_l_corner_c",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1)
TASK_PLAY_ANIM(NULL,"rcmpaparazzo_2","idle_l_corner_a",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1)
TASK_PLAY_ANIM(NULL,"rcmpaparazzo_2","idle_l_corner_c",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1)
SET_SEQUENCE_TO_REPEAT(seqBevCov,REPEAT_FOREVER)
CLOSE_SEQUENCE_TASK(seqBevCov)
TASK_PERFORM_SEQUENCE(mBuddy.piPed,seqBevCov)
ENDIF
ELIF iCoverSeq = 2
IF NOT IS_ENTITY_PLAYING_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_a")
AND NOT IS_ENTITY_PLAYING_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_b")
AND NOT IS_ENTITY_PLAYING_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_c")
iRand = GET_RANDOM_INT_IN_RANGE(0,40)
IF iRand = 1
TASK_PLAY_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_a",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1)
ENDIF
IF iRand = 2
TASK_PLAY_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_b",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1)
ENDIF
IF iRand = 3
TASK_PLAY_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_c",SLOW_BLEND_IN,SLOW_BLEND_OUT,-1)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
//*************************************************************************************************************************************************
// :DEBUG FUNCTIONS:
//*************************************************************************************************************************************************
/// PURPOSE:
/// Prints a string then an int used for debuging vars
/// PARAMS:
/// s - String to print
/// i - The int to print
PROC SK_PRINT_INT(String s, INT i)
CPRINTLN(DEBUG_MISSION,s)
PRINTINT(i)
ENDPROC
/// PURPOSE:
/// Prints a string then a float used for debuging vars
/// PARAMS:
/// s - String to print
/// f - the float to print
PROC SK_PRINT_FLOAT(String s, FLOAT f)
CPRINTLN(DEBUG_MISSION,s)
PRINTFLOAT(f)
ENDPROC
#IF IS_DEBUG_BUILD
/// PURPOSE:
/// Creates widgets for rag
PROC SETUP_FOR_RAGE_WIDGETS()
widgetGroup = START_WIDGET_GROUP("STE PAP 2 WID")
START_WIDGET_GROUP("CAMERA TWEAKER")
ADD_WIDGET_BOOL("Use Locked Cam", bUseLockedCam)
ADD_WIDGET_BOOL("Use Face Recognition", bUseFace)
START_WIDGET_GROUP("CAMERA Variables")
/*
ADD_WIDGET_BOOL("Is Security", bIsSecurity)
ADD_WIDGET_BOOL("Is Low Tech", bIsLowTech)
ADD_WIDGET_BOOL("Show Rec", bShowRec)
ADD_WIDGET_INT_SLIDER("Max Static", iMaxStatic, 0, 100, 1)
ADD_WIDGET_INT_SLIDER("Min Static", iMinStatic, 0, 100, 1)
START_WIDGET_GROUP("Alt Cam OverLay")
ADD_WIDGET_BOOL("Just use scan", bJustUseScan)
ADD_WIDGET_BOOL("ON/Off Scan Lines", bOnScanLines)
ADD_WIDGET_INT_SLIDER("iScanAlpha", iScanAlpha, 0, 500, 1)
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("FACE BOX TAG")
ADD_WIDGET_INT_SLIDER("Scale Multi", iScaleMulti, 0, 3000, 1)
ADD_WIDGET_FLOAT_SLIDER("Max Box", fMaxBox, 0, 15, 0.001)
ADD_WIDGET_FLOAT_SLIDER("Min Box", fMinBox, 0, 15, 0.001)
ADD_WIDGET_FLOAT_SLIDER("Face Offset", fFaceOffset , -15, 15, 0.001)
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("CURSOR")
ADD_WIDGET_FLOAT_SLIDER("Cursor Height", fCursorHeight, 0, 2, 0.001)
ADD_WIDGET_FLOAT_SLIDER("Cursor Width", fCursorWidth, 0, 2, 0.001)
START_WIDGET_GROUP("Camera Crosshair 1")
//ADD_WIDGET_FLOAT_SLIDER("Cross 1 Hair Height", fCross1HairHeight, 0, 1, 0.001)
//ADD_WIDGET_FLOAT_SLIDER("Cross 1 Hair Width", fCross1HairWidth, 0, 1, 0.001)
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("Camera Crosshair 2")
//ADD_WIDGET_FLOAT_SLIDER("Cross 2 Hair Height", fCross2HairHeight, 0, 1, 0.001)
//ADD_WIDGET_FLOAT_SLIDER("Cross 2 Hair Width", fCross2HairWidth, 0, 1, 0.001)
STOP_WIDGET_GROUP()
//Cursor corner 1
START_WIDGET_GROUP("Cursor corner 1")
ADD_WIDGET_FLOAT_SLIDER("Cursor Height", fCursorX1, 0, 1, 0.001)
ADD_WIDGET_FLOAT_SLIDER("Cursor Width", fCursorY1, 0, 1, 0.001)
STOP_WIDGET_GROUP()
//Cursor corner 2
START_WIDGET_GROUP("Cursor corner 2")
ADD_WIDGET_FLOAT_SLIDER("Cursor Height", fCursorX2, 0, 1, 0.001)
ADD_WIDGET_FLOAT_SLIDER("Cursor Width", fCursorY2, 0, 1, 0.001)
STOP_WIDGET_GROUP()
//Cursor corner 3
START_WIDGET_GROUP("Cursor corner 3")
ADD_WIDGET_FLOAT_SLIDER("Cursor Height", fCursorX3, 0, 1, 0.001)
ADD_WIDGET_FLOAT_SLIDER("Cursor Width", fCursorY3, 0, 1, 0.001)
STOP_WIDGET_GROUP()
//Cursor corner 4
START_WIDGET_GROUP("Cursor corner 4")
ADD_WIDGET_FLOAT_SLIDER("Cursor Height", fCursorX4, 0, 1, 0.001)
ADD_WIDGET_FLOAT_SLIDER("Cursor Width", fCursorY4, 0, 1, 0.001)
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
*/
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("PRINTER")
ADD_WIDGET_BOOL("Print to debug file", bPrintWidgetValuesToDebug)
STOP_WIDGET_GROUP()
START_WIDGET_GROUP("MISC")
ADD_WIDGET_BOOL("DISABLE FAILING DURING CHASE", bDisableFail)
STOP_WIDGET_GROUP()
SET_UBER_PARENT_WIDGET_GROUP(widgetGroup)
STOP_WIDGET_GROUP()
ENDPROC
#ENDIF
//*************************************************************************************************************************************************
// :HELPER FUNCTIONS:
//*************************************************************************************************************************************************
//MISSION FLOW CONTROL
/// PURPOSE:
/// Advances or reverses the mission stage
/// Used in the clean up internal state of a mission stage
/// PARAMS:
/// bReverse - if true we go backwards through the mission stages
PROC NEXT_STAGE( BOOL bReverse = FALSE)
iMissionState = ENUM_TO_INT(eMissionStage)
IF NOT bReverse
eMissionStage = INT_TO_ENUM(MISSION_STAGE, (iMissionState + 1))
ELSE
IF iMissionState > 0
eMissionStage = INT_TO_ENUM(MISSION_STAGE, (iMissionState - 1))
ENDIF
ENDIF
bObjectiveShown = FALSE
eState = SS_INIT
ENDPROC
//General help
/// PURPOSE:
/// Checks to see if the player has injured a ped
/// Jump skip safe
/// PARAMS:
/// ped - The ped to be used in the checks
/// RETURNS:
/// TRUE if the player has damaged the ped
FUNC BOOL SAFE_MONITER_PED(PED_INDEX ped)
IF NOT bJumpSkip
IF DOES_ENTITY_EXIST(ped)
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(ped, PLAYER_PED_ID())
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Jump skip safe is drivable check
/// PARAMS:
/// vh - The vehicle to check
/// RETURNS:
/// TRUE if the vehicle is undriveable
FUNC BOOL SAFE_MONITER_CAR(VEHICLE_INDEX vh)
IF NOT bJumpSkip
IF DOES_ENTITY_EXIST(vh)
IF NOT IS_VEHICLE_DRIVEABLE(vh)
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Requests a model and waits for it to load
/// PARAMS:
/// _modname - The name of the model to load
/// _debugstring - used to debug
/// i - used to debug
/// RETURNS:
/// TRUE when the model is loaded
FUNC BOOL REQUEST_AND_CHECK_MODEL(MODEL_NAMES _modname, STRING _debugstring, INT i = 0)
REQUEST_MODEL(_modname)
IF i = 9999
SK_PRINT_INT(_debugstring, i)
ENDIF
IF HAS_MODEL_LOADED(_modname)
//SK_PRINT("MODEL LOADED")
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Unloads a model - Sets it as no longer needed
/// PARAMS:
/// _modname - The model to unload
PROC UNLOAD_MODEL(MODEL_NAMES _modname)
IF HAS_MODEL_LOADED(_modname)
SET_MODEL_AS_NO_LONGER_NEEDED(_modname)
ENDIF
ENDPROC
/// PURPOSE:
/// Spawns a ped and returns true if it was succesful. Requests the model and unloads it
/// PARAMS:
/// pedindex - The PED_INDEX to write the newly create ped to
/// model - The model to load and use to create the ped
/// pos - The position the ped should be created
/// dir - The heading the ped should have when created
/// RETURNS:
/// TRUE if the ped was created
FUNC BOOL SPAWN_PED(PED_INDEX &pedindex, MODEL_NAMES model, VECTOR pos, FLOAT dir)
IF NOT DOES_ENTITY_EXIST(pedindex)
IF REQUEST_AND_CHECK_MODEL(model,"Loading")
pedindex = CREATE_PED(PEDTYPE_MISSION, model, pos, dir)
SET_PED_DEFAULT_COMPONENT_VARIATION(pedindex)
IF DOES_ENTITY_EXIST(pedindex)
UNLOAD_MODEL(model)
RETURN TRUE
ENDIF
ENDIF
ELSE
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Spawns a vehicle and returns true if it was succesful - why does the is mission entity check return true
/// no matter what the out come of said check?
/// PARAMS:
/// vehicleindex - The VEHICLE_INDEX to write the newly create vehicle to
/// model - The model to load and use to create the vehicle
/// pos - The position the vehicle should be created
/// dir - The heading the vehicle should have when created
/// RETURNS:
/// TRUE if the vehicle was created
FUNC BOOL SPAWN_VEHICLE(VEHICLE_INDEX &vehicleindex, MODEL_NAMES model, VECTOR pos, FLOAT dir)
IF NOT DOES_ENTITY_EXIST(vehicleindex)
IF REQUEST_AND_CHECK_MODEL(model,"Loading")
vehicleindex = CREATE_VEHICLE(model, pos, dir)
IF DOES_ENTITY_EXIST(vehicleindex)
IF NOT IS_ENTITY_A_MISSION_ENTITY(vehicleindex)
SET_ENTITY_AS_MISSION_ENTITY(vehicleindex)
ENDIF
SET_VEHICLE_ON_GROUND_PROPERLY(vehicleindex)
UNLOAD_MODEL(model)
RETURN TRUE
ENDIF
ENDIF
ELSE
IF NOT IS_ENTITY_A_MISSION_ENTITY(vehicleindex)
SET_ENTITY_AS_MISSION_ENTITY(vehicleindex)
RETURN TRUE
ELSE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Spawns an object. And activates its physics
/// PARAMS:
/// objectindex - The OBJECT_INDEX to write the newly create object to
/// model - The model to load and use to create the object
/// pos - The position the object should be created
/// dir - The heading the object should have when created
/// RETURNS:
/// TRUE if the object was created
FUNC BOOL SPAWN_OBJECT(OBJECT_INDEX &objectindex, MODEL_NAMES model, VECTOR pos, FLOAT dir = 0.0)
IF NOT DOES_ENTITY_EXIST(objectindex)
IF REQUEST_AND_CHECK_MODEL(model,"Loading")
objectindex = CREATE_OBJECT(model, pos)
IF DOES_ENTITY_EXIST(objectindex)
SET_ENTITY_HEADING(objectindex, dir)
ACTIVATE_PHYSICS(objectindex)
RETURN TRUE
ENDIF
ENDIF
ELSE
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Makes a ped enter stealth movement or stop stealth movement, checks to see if the ped is in stealth movement first
/// PARAMS:
/// ped - The ped to stop or start stealth movement on
/// bShouldDuck - If true the function makes the ped enter stealth mode if they aren't already doing it
PROC ALTER_STEALTH(PED_INDEX ped, BOOL bShouldDuck)
IF bShouldDuck
SET_PED_STEALTH_MOVEMENT(ped,TRUE)
ELSE
SET_PED_STEALTH_MOVEMENT(ped,FALSE)
ENDIF
ENDPROC
/// PURPOSE:
/// Prints objective to the screen if the objective hasnt already been printed
/// PARAMS:
/// objstr - The text key to print
PROC PRINT_OBJ(String objstr)
IF NOT bObjectiveShown
PRINT_NOW(objstr, DEFAULT_GOD_TEXT_TIME,0)
bObjectiveShown = TRUE
ENDIF
ENDPROC
/// PURPOSE:
/// Checks to see if the player is at a given coord returns TRUE if the player is at the coords
/// PARAMS:
/// vpos - The position to check
/// vradius - The size of the area to check
/// RETURNS:
/// TRUE if the player is at the coords
FUNC BOOL IS_PLAYER_AT_COORDS(VECTOR vpos, VECTOR vradius)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vpos, vradius)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks to see if the player is near an entity returns TRUE if the player is near the entity
/// PARAMS:
/// entity - The enity to check
/// vradius - The size of the area to check
/// RETURNS:
/// TRUE if the player is at the entity in question, within the vradius
FUNC BOOL IS_PLAYER_AT_ENTITY(ENTITY_INDEX entity, VECTOR vradius)
IF IS_PED_UNINJURED(PLAYER_PED_ID()) AND IS_ENTITY_ALIVE(entity)
IF IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), entity, vradius)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
//PURPOSE:
/// PURPOSE:
/// Checkes to see if a ped is in a given vehicle, also does alive checks.
/// Returns TRUE if the given ped is in the given vehicle and they are all alive and well
/// PARAMS:
/// ped - Ped to check
/// veh - The vehicle to check they are in
/// RETURNS:
/// TRUE if the ped is in the vehicle and they are both alive and well
FUNC BOOL IS_SAFE_PED_IN_VEHICLE(PED_INDEX ped, VEHICLE_INDEX veh)
IF veh != NULL
IF IS_ENTITY_ALIVE(veh)
IF IS_PED_UNINJURED(ped)
IF IS_PED_IN_VEHICLE(ped,veh)
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Check if ped is in any vehichle and if vehichle is alive
/// PARAMS:
/// index - The ped to check
/// RETURNS:
/// TRUE if the ped is in a vehilce
FUNC VEHICLE_INDEX GET_SAFE_ANY_VEHICLE_PED_IN(PED_INDEX index)
IF IS_PED_IN_ANY_VEHICLE(index)
VEHICLE_INDEX currentVhc = GET_VEHICLE_PED_IS_IN(index)
IF IS_ENTITY_ALIVE(currentVhc)
RETURN currentVhc
ENDIF
ENDIF
RETURN NULL
ENDFUNC
PROC DO_PLAYER_HOLDING_CAMERA()
IF iSeqPlayerHoldCam = 0
REQUEST_CLIP_SET(sWeaponMoveClipsetFrank)
REQUEST_MODEL(Prop_Pap_Camera_01)
iSeqPlayerHoldCam = 1
ELIF iSeqPlayerHoldCam = 1
IF HAS_CLIP_SET_LOADED(sWeaponMoveClipsetFrank)
AND HAS_MODEL_LOADED(Prop_Pap_Camera_01)
iSeqPlayerHoldCam = 2
ENDIF
ELIF iSeqPlayerHoldCam = 2
IF NOT DOES_ENTITY_EXIST(objCam)
objCam = CREATE_OBJECT_NO_OFFSET(Prop_Pap_Camera_01, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(),<<0.0,0.0,10.0>>))
SET_ENTITY_VISIBLE(objCam,FALSE)
SET_ENTITY_COLLISION(objCam,FALSE)
ELSE
IF HAS_CLIP_SET_LOADED(sWeaponMoveClipsetFrank)
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(),sWeaponMoveClipsetFrank)
ELSE
REQUEST_CLIP_SET(sWeaponMoveClipsetFrank)
iSeqPlayerHoldCam = 1
ENDIF
IF NOT IS_ENTITY_ATTACHED_TO_ENTITY(objCam,PLAYER_PED_ID())
IF IS_ENTITY_ATTACHED(objCam)
DETACH_ENTITY(objCam)
ENDIF
//ATTACH_ENTITY_TO_ENTITY(objCam, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE)
SET_ENTITY_VISIBLE(objCam,TRUE)
ATTACH_ENTITY_TO_ENTITY(objCam, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
ENDIF
/*
IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "rcmpaparazzo1ig_1", "cam_pos_hand_override")
AND NOT IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_MELEE_ATTACK_LIGHT) //IS_PED_IN_MELEE_COMBAT(PLAYER_PED_ID())
AND NOT IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_MELEE_ATTACK_HEAVY) //IS_PED_IN_MELEE_COMBAT(PLAYER_PED_ID())
//TASK_PLAY_ANIM(PLAYER_PED_ID(), "rcmpaparazzo1ig_1", "cam_pos_hand_override", INSTANT_BLEND_IN, INSTANT_BLEND_OUT, -1, AF_SECONDARY | AF_UPPERBODY | AF_LOOPING)
ENDIF
*/
ENDIF
ENDIF
ENDPROC
PROC SETUP_DYNAMIC_MIXING()
IF NOT IS_AUDIO_SCENE_ACTIVE("PAPARAZZO_02_CHASE")
IF IS_VEHICLE_OK(viChaseCars[POPPY_CAR])
ADD_ENTITY_TO_AUDIO_MIX_GROUP(viChaseCars[POPPY_CAR], "PAPARAZZO_02_POPPY_CARS")
ENDIF
IF IS_VEHICLE_OK(viChaseCars[SHAGGER_CAR])
ADD_ENTITY_TO_AUDIO_MIX_GROUP(viChaseCars[SHAGGER_CAR], "PAPARAZZO_02_CHASE_JUSTIN_CAR")
//ADD_ENTITY_TO_AUDIO_MIX_GROUP(viChaseCars[SHAGGER_CAR], "PAPARAZZO_02_POPPY_CARS")
ENDIF
IF IS_VEHICLE_OK(viChaseCars[BODYGUARD_CAR])
ADD_ENTITY_TO_AUDIO_MIX_GROUP(viChaseCars[BODYGUARD_CAR], "PAPARAZZO_02_CHASE_SECURITY_CAR")
//ADD_ENTITY_TO_AUDIO_MIX_GROUP(viChaseCars[SHAGGER_CAR], "PAPARAZZO_02_POPPY_CARS")
ENDIF
START_AUDIO_SCENE("PAPARAZZO_02_CHASE")
ENDIF
ENDPROC
PROC REQUEST_HOTEL_MODELS()
IF bHotelModelsRequested = FALSE
REQUEST_MODEL(S_M_Y_BUSBOY_01)
REQUEST_MODEL(S_F_M_MAID_01)
REQUEST_MODEL(A_M_M_BEACH_02)
REQUEST_CLIP_SET("move_f@sexy@a")
REQUEST_WAYPOINT_RECORDING("Pap2_Maid")
bHotelModelsRequested = TRUE
ENDIF
ENDPROC
PROC SPAWN_HOTEL_PEDS()
IF IS_PED_UNINJURED(mHotelStaff[1].piPed)
AND IS_PED_UNINJURED(mHotelStaff[0].piPed)
IF HAS_MODEL_LOADED(S_M_Y_BUSBOY_01)
AND HAS_MODEL_LOADED(S_F_M_MAID_01)
AND HAS_MODEL_LOADED(A_M_M_BEACH_02)
AND HAS_CLIP_SET_LOADED("move_f@sexy@a")
ADD_ENTITY_TO_AUDIO_MIX_GROUP(mHotelStaff[1].piPed, "PAPARAZZO_HECTOR")
IF NOT IS_AUDIO_SCENE_ACTIVE("PAPARAZZO_02_INTRO")
START_AUDIO_SCENE("PAPARAZZO_02_INTRO")
ENDIF
pedHotel[2] = CREATE_PED(PEDTYPE_MISSION,S_M_Y_BUSBOY_01,<< 15.1052, 336.1419, 109.9186 >>, 237.5365) //busboy2
SET_PED_COMPONENT_VARIATION(pedHotel[2],PED_COMP_HEAD,0,1,0)
SET_PED_COMPONENT_VARIATION(pedHotel[2],PED_COMP_TORSO,1,1,0)
SET_PED_COMPONENT_VARIATION(pedHotel[2],PED_COMP_LEG,0,0,0)
TASK_START_SCENARIO_IN_PLACE(pedHotel[2],"WORLD_HUMAN_SMOKING")
pedHotel[3] = CREATE_PED(PEDTYPE_MISSION,S_F_M_MAID_01,<<16.381054,314.905975,110.918671>>, -119.928345) //maid2
SET_PED_COMPONENT_VARIATION(pedHotel[3],PED_COMP_HEAD,0,0,0)
SET_PED_COMPONENT_VARIATION(pedHotel[3],PED_COMP_HAIR,0,1,0)
SET_PED_COMPONENT_VARIATION(pedHotel[3],PED_COMP_TORSO,0,2,0)
SET_PED_COMPONENT_VARIATION(pedHotel[3],PED_COMP_LEG,0,2,0)
TASK_START_SCENARIO_IN_PLACE(pedHotel[3],"WORLD_HUMAN_MAID_CLEAN")
pedHotel[4] = CREATE_PED(PEDTYPE_MISSION,A_M_M_BEACH_02,<< 20.0922, 336.7069, 114.3914 >>, 154.9176) //tourist lean
SET_PED_COMPONENT_VARIATION(pedHotel[4],PED_COMP_HEAD,1,2,0)
SET_PED_COMPONENT_VARIATION(pedHotel[4],PED_COMP_TORSO,1,4,0)
SET_PED_COMPONENT_VARIATION(pedHotel[4],PED_COMP_LEG,0,5,0)
TASK_START_SCENARIO_IN_PLACE(pedHotel[4],"WORLD_HUMAN_AA_COFFEE")
pedHotel[5] = CREATE_PED(PEDTYPE_MISSION,A_M_M_BEACH_02,<< -8.6062, 337.2177, 112.1610 >>, 206.6986) //guy drinking and perving
SET_PED_COMPONENT_VARIATION(pedHotel[5],PED_COMP_HEAD,0,0,0)
SET_PED_COMPONENT_VARIATION(pedHotel[5],PED_COMP_TORSO,1,2,0)
SET_PED_COMPONENT_VARIATION(pedHotel[5],PED_COMP_LEG,0,0,0)
TASK_START_SCENARIO_IN_PLACE(pedHotel[5],"WORLD_HUMAN_DRINKING")
TASK_START_SCENARIO_AT_POSITION(mHotelStaff[1].piPed,"WORLD_HUMAN_SEAT_STEPS",<< 16.9840, 336.9486, 110.3190 >>, 157.6965)
SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(mHotelStaff[1].piPed,FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_Y_BUSBOY_01)
SET_MODEL_AS_NO_LONGER_NEEDED(S_F_M_MAID_01)
SET_MODEL_AS_NO_LONGER_NEEDED(A_M_M_BEACH_02)
SET_PED_MOVEMENT_CLIPSET(mHotelStaff[0].piPed,"move_f@sexy@a")
bHotelPedsSpawned = TRUE
ENDIF
ENDIF
ENDPROC
PROC DO_MAID_STUFF()
IF bHotelPedsSpawned = TRUE
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
TEXT_LABEL_23 root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF iSeqMaid = 0
IF IS_PED_UNINJURED(mBuddy.piPed)
AND NOT bBentleyGotBevStuck
IF IS_ENTITY_IN_RANGE_ENTITY(mHotelStaff[0].piPed,mBuddy.piPed,12.0)
OR IS_ENTITY_IN_RANGE_ENTITY(mHotelStaff[0].piPed,PLAYER_PED_ID(),12.0)
//IF ARE_STRINGS_EQUAL(root, "PAP2_STAFF")
iTimerMaidWalkingTalking = GET_GAME_TIMER()
//ADD_FOLLOW_NAVMESH_TO_PHONE_TASK(mHotelStaff[0].piPed, << 15.7379, 334.2191, 109.9186 >>)//MAID
TASK_FOLLOW_NAV_MESH_TO_COORD(mHotelStaff[0].piPed,<<16.6655, 332.9557, 109.9194>>,1.3,-1,2.0,ENAV_ACCURATE_WALKRUN_START,351.8812) //<< 15.7379, 334.2191, 109.9186 >>
iSeqMaid = 1
//ENDIF
ENDIF
ENDIF
ENDIF
IF iSeqMaid = 1
//IF NOT IS_STRING_NULL_OR_EMPTY(root)
IF ARE_STRINGS_EQUAL(root, "PAP2_STAFF")
IF GET_CURRENT_SCRIPTED_CONVERSATION_LINE() > 2
//TASK_USE_MOBILE_PHONE(mHotelStaff[0].piPed,FALSE)
TASK_FOLLOW_NAV_MESH_TO_COORD(mHotelStaff[0].piPed,<<16.6655, 332.9557, 109.9194>>,1.3,-1,2.0,ENAV_ACCURATE_WALKRUN_START,351.8812)
iSeqMaid = 2
ENDIF
ENDIF
//ENDIF
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
TASK_FOLLOW_NAV_MESH_TO_COORD(mHotelStaff[0].piPed,<<16.6655, 332.9557, 109.9194>>,1.3,-1,2.0,ENAV_ACCURATE_WALKRUN_START, 351.8812)
iSeqMaid = 2
ENDIF
ENDIF
IF iSeqMaid = 2
IF GET_IS_WAYPOINT_RECORDING_LOADED("Pap2_Maid")
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND GET_GAME_TIMER() > iTimerMaidWalkingTalking + 5000
TASK_FOLLOW_WAYPOINT_RECORDING(mHotelStaff[0].piPed,"Pap2_Maid",0,EWAYPOINT_START_FROM_CLOSEST_POINT)
iSeqMaid = 3
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC MONITOR_HOTEL_PEDS()
IF DOES_ENTITY_EXIST(pedHotel[5])
IF IS_PED_UNINJURED(pedHotel[5])
UPDATE_AI_PED_BLIP(pedHotel[5],bsHotelPed5)
IF IS_PED_RAGDOLL(pedHotel[5])
OR HAS_PLAYER_THREATENED_PED(pedHotel[5])
OR IS_PED_FLEEING(pedHotel[5])
bStaffThreatened = TRUE
bSpotted = TRUE
ENDIF
ELSE
bStaffThreatened = TRUE
bSpotted = TRUE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(pedHotel[1])
IF IS_PED_UNINJURED(pedHotel[1])
UPDATE_AI_PED_BLIP(pedHotel[1],bsHotelPed1)
IF IS_PED_RAGDOLL(pedHotel[1])
OR HAS_PLAYER_THREATENED_PED(pedHotel[1])
OR IS_PED_FLEEING(pedHotel[1])
bStaffThreatened = TRUE
bSpotted = TRUE
ENDIF
ELSE
bStaffThreatened = TRUE
bSpotted = TRUE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(pedHotel[3])
IF IS_PED_UNINJURED(pedHotel[3])
UPDATE_AI_PED_BLIP(pedHotel[3],bsHotelPed3)
IF IS_PED_RAGDOLL(pedHotel[3])
OR HAS_PLAYER_THREATENED_PED(pedHotel[3])
OR IS_PED_FLEEING(pedHotel[3])
bStaffThreatened = TRUE
bSpotted = TRUE
ENDIF
ELSE
bStaffThreatened = TRUE
bSpotted = TRUE
ENDIF
ENDIF
ENDPROC
PROC RELEASE_HOTEL_PEDS()
SAFE_RELEASE_PED(mHotelStaff[0].piPed)
SAFE_RELEASE_PED(mHotelStaff[1].piPed)
SAFE_RELEASE_PED(pedHotel[0])
SAFE_RELEASE_PED(pedHotel[1])
SAFE_RELEASE_PED(pedHotel[2])
SAFE_RELEASE_PED(pedHotel[3])
SAFE_RELEASE_PED(pedHotel[4])
SAFE_RELEASE_PED(pedHotel[5])
ENDPROC
PROC CLEANUP_HOTEL_PEDS()
SAFE_DELETE_PED(mHotelStaff[0].piPed)
SAFE_DELETE_PED(mHotelStaff[1].piPed)
SAFE_DELETE_PED(pedHotel[0])
SAFE_DELETE_PED(pedHotel[1])
SAFE_DELETE_PED(pedHotel[2])
SAFE_DELETE_PED(pedHotel[3])
SAFE_DELETE_PED(pedHotel[4])
SAFE_DELETE_PED(pedHotel[5])
ENDPROC
/// PURPOSE:
/// Spawns and sets up the ped with a debug name
/// PARAMS:
/// index - The PED_INDEX to write the newly created ped to
/// pos - The postion to create the ped at
/// fDir - The heading to give the new ped
/// modelName - The model to create the ped with
/// i - Debug number for Debug name
/// _name - The Debug name
/// RETURNS:
/// TRUE if the ped was created
FUNC BOOL SETUP_PED(PED_INDEX &index, VECTOR pos, FLOAT fDir, MODEL_NAMES modelName, INT i, STRING _name )
IF SPAWN_PED(index, modelName, pos, fDir)
//SK_PRINT("SPAWNED")
IF IS_PED_UNINJURED(index)
TEXT_LABEL tDebugName = _name
tDebugName += i
//SK_PRINT(tDebugName)
SET_PED_NAME_DEBUG(index, tDebugName)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Function to make beverly pull over and let the player out of the car
/// when the player has failed the car chase section of the mission
/// RETURNS:
/// TRUE when the player is outside of the car
FUNC BOOL PULLOVER_PLAYER_FAILED()
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF iSeqBadCamMissionFail = 0
iTimerBadCamMissionFail = GET_GAME_TIMER()
iSeqBadCamMissionFail = 1
ELIF iSeqBadCamMissionFail = 1
IF GET_GAME_TIMER() > iTimerBadCamMissionFail + 3000
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Cleans up the scripted video camera the player uses to film poppy
/// PARAMS:
/// walk - If false the player needs to be set to be visible
PROC CLEANUP_CAMERA(BOOL walk)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF DOES_CAM_EXIST(camMain)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
DESTROY_CAM(camMain)
//SET_GAMEPLAY_CAM_RELATIVE_HEADING()
ENDIF
IF NOT walk
SET_ENTITY_VISIBLE(PLAYER_PED_ID(),TRUE)
ELSE
SET_ENTITY_VISIBLE(PLAYER_PED_ID(),TRUE)
ENDIF
ENDIF
CLEAR_TIMECYCLE_MODIFIER()
CASCADE_SHADOWS_SET_DYNAMIC_DEPTH_VALUE(-1)
CASCADE_SHADOWS_INIT_SESSION()
ENDPROC
/// PURPOSE:
/// Tells Poppy and Lover to play their exit anims for the sex scene
PROC POPPY_SHAGGER_CHASE_PLAYER()
IF IS_PED_UNINJURED(mPoppy.piPed)
AND IS_PED_UNINJURED(mShagger.piPed)
FREEZE_ENTITY_POSITION(mPoppy.piPed, FALSE)
FREEZE_ENTITY_POSITION(mShagger.piPed, FALSE)
//poppy_end_shagging_scene = CREATE_SYNCHRONIZED_SCENE(<<-30.990408,301.092346,111.681885>>,<<0,0,0>>)
//TASK_SYNCHRONIZED_SCENE (mPoppy.piPed, poppy_end_shagging_scene, "rcmpaparazzo_2", "shag_notice_player_poppy", SLOW_BLEND_IN, slow_BLEND_OUT )
//TASK_SYNCHRONIZED_SCENE (mShagger.piPed, poppy_end_shagging_scene, "rcmpaparazzo_2", "shag_notice_player_a", SLOW_BLEND_IN, slow_BLEND_OUT )
iTimerPoppyNoticePlayer = GET_GAME_TIMER()
ENDIF
ENDPROC
/// PURPOSE:
/// Tells the body guard to attack the player
PROC BODYGUARDS_TO_CAR()
IF IS_PED_UNINJURED(mBodyGuard.piPed) AND IS_PED_UNINJURED(PLAYER_PED_ID())
TASK_COMBAT_PED(mBodyGuard.piPed, PLAYER_PED_ID())
ENDIF
ENDPROC
/// PURPOSE:
/// If no one is in the correct car then we warp them in to the correct car
/// - Could be functionised more
PROC WARP_EVERYONE_TO_CARS()
IF NOT IS_SAFE_PED_IN_VEHICLE(mBodyGuard.piPed, viChaseCars[BODYGUARD_CAR])
IF IS_PED_UNINJURED(mBodyGuard.piPed)
AND IS_ENTITY_ALIVE(viChaseCars[SHAGGER_CAR])
CLEAR_PED_TASKS_IMMEDIATELY(mBodyGuard.piPed)
TASK_WARP_PED_INTO_VEHICLE(mBodyGuard.piPed, viChaseCars[BODYGUARD_CAR])
ENDIF
ENDIF
IF NOT IS_SAFE_PED_IN_VEHICLE(mShagger.piPed, viChaseCars[SHAGGER_CAR])
IF IS_PED_UNINJURED(mShagger.piPed)
AND IS_ENTITY_ALIVE(viChaseCars[SHAGGER_CAR])
CLEAR_PED_TASKS_IMMEDIATELY(mShagger.piPed)
TASK_WARP_PED_INTO_VEHICLE(mShagger.piPed, viChaseCars[SHAGGER_CAR])
ENDIF
ENDIF
IF NOT IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
IF IS_PED_UNINJURED(mBuddy.piPed)
AND IS_ENTITY_ALIVE(viPlayerCar)
CLEAR_PED_TASKS_IMMEDIATELY(mBuddy.piPed)
TASK_WARP_PED_INTO_VEHICLE(mBuddy.piPed, viPlayerCar)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// IF anyone (including the player) isnt in their correct
/// car then we warp them in to the car
/// As this is used in skips we use the clear immediately
PROC WARP_EVERYONE_TO_CARS_SKIP()
IF bDoingEndCut = FALSE
IF NOT IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), viPlayerCar, VS_BACK_LEFT)
ENDIF
ENDIF
IF IS_PED_UNINJURED(mBuddy.piPed)
IF NOT IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
CLEAR_PED_TASKS_IMMEDIATELY(mBuddy.piPed)
SET_PED_INTO_VEHICLE(mBuddy.piPed, viPlayerCar)
ENDIF
ENDIF
IF IS_PED_UNINJURED(mPoppy.piPed)
IF NOT IS_SAFE_PED_IN_VEHICLE(mPoppy.piPed, viChaseCars[POPPY_CAR])
CLEAR_PED_TASKS_IMMEDIATELY(mPoppy.piPed)
SET_PED_INTO_VEHICLE(mPoppy.piPed, viChaseCars[POPPY_CAR])
ENDIF
ENDIF
IF IS_PED_UNINJURED(mShagger.piPed)
IF NOT IS_SAFE_PED_IN_VEHICLE(mShagger.piPed, viChaseCars[SHAGGER_CAR])
CLEAR_PED_TASKS_IMMEDIATELY(mShagger.piPed)
SET_PED_INTO_VEHICLE(mShagger.piPed, viChaseCars[SHAGGER_CAR])
ENDIF
ENDIF
IF IS_PED_UNINJURED(mBodyGuard.piPed)
IF IS_ENTITY_ALIVE(viChaseCars[BODYGUARD_CAR])
IF NOT IS_SAFE_PED_IN_VEHICLE(mBodyGuard.piPed, viChaseCars[BODYGUARD_CAR])
CLEAR_PED_TASKS_IMMEDIATELY(mBodyGuard.piPed)
SET_PED_INTO_VEHICLE(mBodyGuard.piPed, viChaseCars[BODYGUARD_CAR])
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks to see if the player is in a given area
/// -Can be deleted not used anymore
/// PARAMS:
/// vPointA - First point in the area
/// vPointB - Second point in the area
/// RETURNS:
/// TRUE if the player is in the area
FUNC BOOL IS_PLAYER_IN_AREA(VECTOR vPointA, VECTOR vPointB)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_ENTITY_IN_AREA(PLAYER_PED_ID(), vPointA, vPointB)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks to see if the player is in a car and in a specified area
/// PARAMS:
/// vPointA - First point in the area
/// vPointB - Second point in the area
/// RETURNS:
/// TRUE if the player is in a car and in the area
FUNC BOOL PLAYER_ENTERED_AREA_IN_VEHICLE(VECTOR vPointA, VECTOR vPointB)
IF IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), GET_SAFE_ANY_VEHICLE_PED_IN(PLAYER_PED_ID()))
IF IS_ENTITY_IN_AREA(PLAYER_PED_ID(), vPointA, vPointB, FALSE, TRUE, TM_IN_VEHICLE)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Plays a ped recording back on a ped
/// Checks they are a alive and not already running a recording be for applying the recording
/// PARAMS:
/// _ped - The ped to play the recording on
/// _recordingName - The name of the recording
/// RETURNS:
/// TRUE if the recording was applied
FUNC BOOL PLAY_PED_RECORDING_ON_PED(PED_INDEX _ped, TEXT_LABEL _recordingName)
IF IS_PED_UNINJURED(_ped)
IF NOT IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(_ped)
IF NOT IS_STRING_NULL(_recordingName)
IF GET_IS_WAYPOINT_RECORDING_LOADED(_recordingName)
TASK_FOLLOW_WAYPOINT_RECORDING(_ped, _recordingName,0,EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_USE_TIGHTER_TURN_SETTINGS | EWAYPOINT_NAVMESH_BACK_TO_WAYPOINT_IF_LEFT_ROUTE)
RETURN TRUE
ENDIF
ENDIF
ELSE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Loads a specified recording
/// PARAMS:
/// _recordingName - The name of the recording
/// RETURNS:
/// TRUE if the recording was loaded
FUNC BOOL LOAD_PED_RECORDING(TEXT_LABEL _recordingName)
IF NOT IS_STRING_NULL(_recordingName)
IF NOT GET_IS_WAYPOINT_RECORDING_LOADED(_recordingName)
REQUEST_WAYPOINT_RECORDING(_recordingName)
IF GET_IS_WAYPOINT_RECORDING_LOADED(_recordingName)
RETURN TRUE
ENDIF
ELSE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Unloads a specific recording
/// PARAMS:
/// _recordingName - The name of the recording
/// _id - The id of the recording - this is used here because a create the file string by
/// adding the recording name and the index together
PROC REMOVE_RECORDING(TEXT_LABEL _recordingName, INT _id = -1)
IF _id <> -1
_recordingName += _id
ENDIF
IF NOT IS_STRING_NULL(_recordingName)
IF GET_IS_WAYPOINT_RECORDING_LOADED(_recordingName)
REMOVE_WAYPOINT_RECORDING(_recordingName)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Creates a conversation at a specific point in a car recording (Time in recording > RecTime).
/// If there is already a conversation going on the convo will not play.
/// If it misses its window in the recording to play (Time in recording > fLimit) it will return true
/// as if the convo had taken place.
/// PARAMS:
/// ped - The ped to check is in the car
/// vhl - The car to check is playing a car recording and has the ped in it
/// RecTime - The time of the recording the conversation should play at.
/// fLimit - The cut off point where the time to play the conversation has expired
/// lineID - The line of dialogue to play
/// RETURNS:
/// TRUE if the conversation has been created or if the convosation window has been missed
FUNC BOOL CREATE_CAR_CONVERSATION(PED_INDEX ped, VEHICLE_INDEX vhl, FLOAT RecTime, FLOAT fLimit, STRING lineID)
//The car convosations can be overwritten by the bad filming lines hence the limited time it has to be played
IF NOT bLineSet
FLOAT fCurrent = 0.0
IF IS_ENTITY_ALIVE(vhl)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vhl)
fCurrent = GET_TIME_POSITION_IN_RECORDING(vhl)
IF IS_SAFE_PED_IN_VEHICLE(ped, vhl)
IF fCurrent >= RecTime //Is time in recording greater than the RecTime
AND fCurrent < fLimit // And is time in recording less than fLimit
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", lineID, CONV_PRIORITY_MEDIUM)
RETURN TRUE
ENDIF
ELIF fCurrent > RecTime //If time in recording is greater than both RecTime and fLimit
AND fCurrent > fLimit //return true as if the convo was played - allows the conversation to continue normally
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC HANDLE_POPPY_CHASE_DIALOGUE()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF IS_PED_UNINJURED(mPoppy.piPed)
IF IS_ENTITY_IN_RANGE_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),16.0)
IF IS_VEHICLE_OK(viPlayerCar)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
IF fTimePosInRec > 50000
AND fTimePosInRec < 60000
//Pathetic fucking losers!
IF bDialogueLosers = FALSE
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_POP", "PAP2_POP_6", CONV_PRIORITY_MEDIUM)
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_fuckinlosers", NORMAL_BLEND_IN, -2, -1) //,AF_SECONDARY | AF_UPPERBODY
bDialogueLosers = TRUE
iTimerPoppyChaseLine = GET_GAME_TIMER()
EXIT
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 72000
AND fTimePosInRec < 84000
//You're animals! I hate you!
IF bDialogueAnimals = FALSE
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_POP", "PAP2_POP_5", CONV_PRIORITY_MEDIUM)
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_ih8u", NORMAL_BLEND_IN, -2, -1)
bDialogueAnimals = TRUE
iTimerPoppyChaseLine = GET_GAME_TIMER()
EXIT
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_IN_RANGE_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),12.0)
//Give me that fucking camera!
IF bDialogueGiveMe = FALSE
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_POP", "PAP2_POP_1", CONV_PRIORITY_MEDIUM)
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_gimmethtcam", NORMAL_BLEND_IN, -2, -1)
bDialogueGiveMe = TRUE
iTimerPoppyChaseLine = GET_GAME_TIMER()
EXIT
ENDIF
ENDIF
IF GET_GAME_TIMER() > iTimerPoppyChaseLine + 9000
//I'll sue you if you post that shit!
IF bDialogueIllSue = FALSE
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_POP", "PAP2_POP_2", CONV_PRIORITY_MEDIUM)
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_illsueyou", NORMAL_BLEND_IN, -2, -1)
bDialogueIllSue = TRUE
iTimerPoppyChaseLine = GET_GAME_TIMER()
EXIT
ENDIF
ENDIF
/*
//Not that we were doing anything!
IF bDialogueNotThat = FALSE
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_POP", "PAP2_POP_3", CONV_PRIORITY_MEDIUM)
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_notdoinanythin", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,AF_SECONDARY | AF_UPPERBODY)
bDialogueNotThat = TRUE
iTimerPoppyChaseLine = GET_GAME_TIMER()
EXIT
ENDIF
ENDIF
*/
//I'm a virgin! He was helping me with homework!
IF bDialogueVirgin = FALSE
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_POP", "PAP2_POP_4", CONV_PRIORITY_MEDIUM)
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_imavirgin", NORMAL_BLEND_IN, -2, -1)
bDialogueVirgin = TRUE
iTimerPoppyChaseLine = GET_GAME_TIMER()
EXIT
ENDIF
ENDIF
IF IS_VEHICLE_OK(viPlayerCar)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
IF fTimePosInRec > 80000
//It was just yoga!
IF bDialogueYoga = FALSE
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_POP", "PAP2_POP_7", CONV_PRIORITY_MEDIUM)
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_itwasyoga", NORMAL_BLEND_IN, -2, -1)
bDialogueYoga = TRUE
iTimerPoppyChaseLine = GET_GAME_TIMER()
EXIT
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Manage playing the first and last chase conversations
/// The lines for filming are managed in MONITER_PED_ON_SCREEN
/// The fail lines can override any of these lines
PROC MANAGE_CHASE_CONVO()
IF eChaseConvo <> CC_NONE //AND bObjectiveShown
//IF NOT bLineSet
INT iConvo = ENUM_TO_INT(eChaseConvo)
SWITCH eChaseConvo
CASE CC_STAGE_1
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_CHASE1", CONV_PRIORITY_MEDIUM)
eChaseConvo = INT_TO_ENUM(CHASE_CONVO_STAGE, iConvo + 1) //we progress the conversation state
//SK_PRINT("TK************ SHOULD DO CONVO ************")
ELSE
//SK_PRINT("TK************ CONVO DIDNT TRIGGER ************")
ENDIF
BREAK
CASE CC_STAGE_2
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF fTimePosInRec > 11596.00
AND fTimePosInRec < 14864.00
IF NOT bDStraight //Straight road coming up, this is your chance to get a good shot of her.
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_1", CONV_PRIORITY_MEDIUM)
bDStraight = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 15284.760
AND fTimePosInRec < 21515.00
IF NOT bDTrunk //Man, you're not the one hanging out of the fucking trunk!
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_2", CONV_PRIORITY_MEDIUM)
bDTrunk = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 21655.770
AND fTimePosInRec < 25915.00
IF NOT bDWorse //Man, this is gonna get worse before it gets better.
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_3", CONV_PRIORITY_MEDIUM)
bDWorse = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 27990.730
AND fTimePosInRec < 28915.00
IF NOT bDWhoa //Whoa whoa, what the hell, man!?
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_4", CONV_PRIORITY_MEDIUM)
bDWhoa = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 31990.730
AND fTimePosInRec < 32990.00
IF NOT bDMFer //That motherfucker's right on top of us, dog!
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_5", CONV_PRIORITY_MEDIUM)
bDMFer = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 34769.360
AND fTimePosInRec < 38562.850
IF NOT bDRight //I'm taking a sharp right. Keep that camera on her!
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_6", CONV_PRIORITY_MEDIUM)
bDRight = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 45138.230
AND fTimePosInRec < 46245.230
IF NOT bDLeft //I'm gonna go left and cut across the intersection, hold on!
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_7", CONV_PRIORITY_MEDIUM)
bDLeft = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 49645.430
AND fTimePosInRec < 51045.230
IF NOT bDFuckU //Yeah fuck you too, man!
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_8", CONV_PRIORITY_MEDIUM)
bDFuckU = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 53299.310
AND fTimePosInRec < 59399.230
IF NOT bDMove //Move, come on, man! Hit the gas!
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_9", CONV_PRIORITY_MEDIUM)
bDMove = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 64999.310
AND fTimePosInRec < 66320.230
IF NOT bDCrazy //This crazy-ass bitch!
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_10", CONV_PRIORITY_MEDIUM)
bDCrazy = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 67320.230
AND fTimePosInRec < 69648.890
IF NOT bDTraffic //Shit, we've got traffic ahead
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_11", CONV_PRIORITY_MEDIUM)
bDTraffic = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 71493.890
AND fTimePosInRec < 73176.110
IF NOT bDSteady //Going left, keep it steady.
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_12", CONV_PRIORITY_MEDIUM)
bDSteady = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 75924.030
AND fTimePosInRec < 77366.810
IF NOT bDClose //Damn, that was close!
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_13", CONV_PRIORITY_MEDIUM)
bDClose = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 79366.810
AND fTimePosInRec < 81397.300
IF NOT bDJesus //Jesus, she's still on us!
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_14", CONV_PRIORITY_MEDIUM)
bDJesus = TRUE
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 83615.890
AND fTimePosInRec < 85489.720
IF NOT bDConst //Screw this, I'm going through the construction site.
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds,sTextBlock,"PAP2_CHASE2", "PAP2_CHASE2_15", CONV_PRIORITY_MEDIUM)
bDConst = TRUE
eChaseConvo = CC_STAGE_3
ENDIF
ENDIF
ENDIF
IF fTimePosInRec > 90000.0
eChaseConvo = CC_STAGE_3
ENDIF
/*
SWITCH iCurrentLine
CASE 0
IF CREATE_CAR_CONVERSATION(mBuddy.piPed, viPlayerCar, 11596.00, 14864.00,sChaseConvoLines[iCurrentLine] )//We got a long straight bit...
iCurrentLine++ // progress the line index
bLineSet = TRUE //set the line flage to true stopping any other conversations trying to start (unless they ignore the line set flag such as the failing dialogue)
ENDIF
BREAK
CASE 1
IF CREATE_CAR_CONVERSATION(PLAYER_PED_ID(), viPlayerCar, 15284.760, 20915.00, sChaseConvoLines[iCurrentLine] )//You're not the one hanging out...
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 2
IF CREATE_CAR_CONVERSATION(PLAYER_PED_ID(), viPlayerCar, 21655.770, 25915.00,sChaseConvoLines[iCurrentLine] ) //This is goin' to get worse before it gets better.
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 3
IF CREATE_CAR_CONVERSATION(PLAYER_PED_ID(), viPlayerCar, 27990.730, 28915.00,sChaseConvoLines[iCurrentLine] ) //Woah woah, fuck!
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 4
IF CREATE_CAR_CONVERSATION(PLAYER_PED_ID(), viPlayerCar, 31990.730, 32990.00,sChaseConvoLines[iCurrentLine] ) //This dick is catching up fast!
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 5
IF CREATE_CAR_CONVERSATION(mBuddy.piPed, viPlayerCar, 34769.360, 38562.850,sChaseConvoLines[iCurrentLine] ) // Goin' to take a sharp right down...
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 6
IF CREATE_CAR_CONVERSATION(mBuddy.piPed, viPlayerCar, 45138.230, 46245.230,sChaseConvoLines[iCurrentLine] ) //Turning left then am goin to cut right across...
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 7
IF CREATE_CAR_CONVERSATION(mBuddy.piPed, viPlayerCar, 49645.430, 50045.230,sChaseConvoLines[iCurrentLine] ) //Yeah fuck you too bitch!
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 8
IF CREATE_CAR_CONVERSATION(PLAYER_PED_ID(), viPlayerCar, 53299.310, 59399.230,sChaseConvoLines[iCurrentLine] ) //Speed the fuck up!
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 9
IF CREATE_CAR_CONVERSATION(PLAYER_PED_ID(), viPlayerCar, 64999.310, 67320.230,sChaseConvoLines[iCurrentLine] ) //Crazy bitch!
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 10
IF CREATE_CAR_CONVERSATION(mBuddy.piPed, viPlayerCar, 66823.250, 68648.890,sChaseConvoLines[iCurrentLine] ) // We got some traffic coming up.
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 11
IF CREATE_CAR_CONVERSATION(mBuddy.piPed, viPlayerCar, 71493.890, 73176.110,sChaseConvoLines[iCurrentLine] )//Taking this left, keep it steady.
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 12
IF CREATE_CAR_CONVERSATION(PLAYER_PED_ID(), viPlayerCar, 75924.030, 77366.810,sChaseConvoLines[iCurrentLine] ) // Shit the bed, that was close!
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 13
IF CREATE_CAR_CONVERSATION(mBuddy.piPed, viPlayerCar, 79366.810, 81397.300,sChaseConvoLines[iCurrentLine] ) //Fucking hell she's still on us!
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 14
IF CREATE_CAR_CONVERSATION(mBuddy.piPed, viPlayerCar, 83615.890, 85489.720,sChaseConvoLines[iCurrentLine] ) //Heading through the construction site...
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 15
IF CREATE_CAR_CONVERSATION(PLAYER_PED_ID(), viPlayerCar, 88000.460, 89000.720,sChaseConvoLines[iCurrentLine] ) //Fly mother fucker, fly!
iCurrentLine++
bLineSet = TRUE
ENDIF
BREAK
CASE 16
//IF CREATE_CAR_CONVERSATION(PLAYER_PED_ID(), viPlayerCar, 92372.300, 93000.720,sChaseConvoLines[iCurrentLine] ) //Boom! Stay down!
iCurrentLine++
bLineSet = TRUE
//ENDIF
BREAK
CASE 17
eChaseConvo = INT_TO_ENUM(CHASE_CONVO_STAGE, iConvo + 1)
BREAK
ENDSWITCH
*/
ENDIF
BREAK
CASE CC_STAGE_3
IF IS_ENTITY_ALIVE(viPlayerCar)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
IF GET_TIME_POSITION_IN_RECORDING(viPlayerCar) >= 94365.810
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_CHASE3", CONV_PRIORITY_VERY_HIGH)
OR GET_TIME_POSITION_IN_RECORDING(viPlayerCar) >= 100000.0
REPLAY_RECORD_BACK_FOR_TIME(10.0, 3.0, REPLAY_IMPORTANCE_LOW)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
bStartScriptCineCam = TRUE
eChaseConvo = INT_TO_ENUM(CHASE_CONVO_STAGE, iConvo + 1)
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
DEFAULT
BREAK
ENDSWITCH
//ELSE
//IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
// bLineSet = FALSE
//ENDIF
//ENDIF
ENDIF
/*
IF eChaseConvo < CC_STAGE_3
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
IF GET_TIME_POSITION_IN_RECORDING(viPlayerCar) >= 95000.0 //something went wrong so bail
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CPRINTLN(DEBUG_MISSION, "SOMETHING WENT WRONG WITH CONVO - BAIL!")
eChaseConvo = CC_STAGE_3
ENDIF
ENDIF
ENDIF
*/
ENDPROC
/// PURPOSE:
/// Checks to see if the maid dialogue has reached the point she should hang up her phone
/// Then hangs up her phone and tells her to go to a position by hector
PROC MONITER_MAID_PHONE()
IF GET_GAME_TIMER() > iTimerMaidUsingPhone + 13000
AND GET_GAME_TIMER() < iTimerMaidUsingPhone + 15000
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
IF GET_SCRIPT_TASK_STATUS(mHotelStaff[0].piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
SEQUENCE_INDEX Seq
OPEN_SEQUENCE_TASK(Seq)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, << 15.7815, 333.5496, 109.9190 >>,1.2, 30000)
CLOSE_SEQUENCE_TASK(Seq)
TASK_PERFORM_SEQUENCE(mHotelStaff[0].piPed, Seq)
CLEAR_SEQUENCE_TASK(Seq)
ENDIF
ENDIF
ENDIF
ENDPROC
////*****************************************************************************////
////**************************MISSION STATE FUNCTIONS****************************////
////*****************************************************************************////
/// PURPOSE:
/// Checks that the player can see a point in the world
/// If the player is close enough to the point before checking that they can see it
/// PARAMS:
/// vPos - The position to check
/// fRadius - The size of the sphere to check the player can see
/// distance - The max distance the player can be from the
/// position for the the visibility check to be considered
/// RETURNS:
/// TRUE if the player is close enough to the point and can see the point
FUNC BOOL CAN_PLAYER_SEE_POINT(VECTOR vPos, FLOAT fRadius = 5.0, INT distance = 120)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF GET_DISTANCE_BETWEEN_COORDS( GET_ENTITY_COORDS(PLAYER_PED_ID()), vPos) <= distance
IF IS_SPHERE_VISIBLE(vPos, fRadius)
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
#IF IS_DEBUG_BUILD
/// PURPOSE:
/// Moniters what point in the route the players car is
/// Can draw a debug sphere around the points on the route
PROC MONITER_ROUTE()//not really needed unless re-recording the route
IF IS_ENTITY_ALIVE(mBuddy.piPed)
IF IS_ENTITY_AT_COORD(mBuddy.piPed, vChaseRoute[iCurrentChasePos], vRouteCheckSize)
iCurrentChasePos++
IF iCurrentChasePos = MAX_CHASE_POINTS
iCurrentChasePos = -1
ELSE
//SAFE_REMOVE_BLIP(biGOTO)
//ADD_BLIP_LOCATION( biGOTO, vChaseRoute[iCurrentChasePos], FALSE)
ENDIF
ELSE
//SK_PRINT("DRAW SPHERE")
IF iCurrentChasePos <> -1
//DRAW_DEBUG_SPHERE(vChaseRoute[iCurrentChasePos], 5, 0, 255, 0, 100)
ENDIF
ENDIF
ENDIF
ENDPROC
#ENDIF
/// PURPOSE:
/// Checks to see if a peds head is in the middle of the screen
/// PARAMS:
/// ped - The ped who's head we are going to check is on screen
/// fScreenX - The X screen position to write the X screen position of the peds head
/// fScreenY - The Y screen position to write the Y screen position of the peds head
/// RETURNS:
/// TRUE if the peds head is on screen
FUNC BOOL IS_PED_IN_MIDDLE_OF_SCREEN(PED_INDEX ped, FLOAT &fScreenX , FLOAT &fScreenY )
IF IS_PED_UNINJURED(ped)
INT i = GET_PED_BONE_INDEX(ped, BONETAG_HEAD)
IF i <> -1
VECTOR pos = GET_WORLD_POSITION_OF_ENTITY_BONE(ped,i)
IF CAN_PLAYER_SEE_POINT(pos,2, 150)
GET_SCREEN_COORD_FROM_WORLD_COORD(pos, fScreenX, fScreenY)
IF DOES_CAM_EXIST(camMain)
IF GET_CAM_FOV(camMain) < 10
AND eMissionStage = MS_CAMERA_TUTORIAL
IF fScreenX > 0.2
AND fScreenX <0.8
AND fScreenY > 0.2
AND fScreenY < 0.8
RETURN TRUE
ENDIF
ELSE
IF fScreenX > 0.35
AND fScreenX <0.65
AND fScreenY > 0.35
AND fScreenY < 0.65
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Moniters whether the player and poppy are with in 10 meters of each other
/// and then gives her a driveby task so she flips the player the bird
PROC MONITER_POPPY_DRIVEBY()
IF NOT bDoingDriveBy
IF GET_DISTANCE_BETWEEN_ENTITIES(mPoppy.piPed, PLAYER_PED_ID()) < 10
IF IS_PED_UNINJURED(mPoppy.piPed)
AND IS_PED_UNINJURED(PLAYER_PED_ID())
IF NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_fuckinlosers")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_gimmethtcam")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_ih8u")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_illsueyou")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_imavirgin")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_itwasyoga")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_notdoinanythin")
IF IS_DRIVEBY_TASK_UNDERNEATH_DRIVING_TASK(mPoppy.piPed)
CLEAR_DRIVEBY_TASK_UNDERNEATH_DRIVING_TASK(mPoppy.piPed)
ENDIF
TASK_DRIVE_BY(mPoppy.piPed, PLAYER_PED_ID(), NULL, vSafeVec, 11,100, TRUE)//viPlayerCar
iTimerDrivebyReset = GET_GAME_TIMER()
bDoingDriveBy = TRUE //we are doing a drive by
ENDIF
ENDIF
ENDIF
ELSE
IF GET_GAME_TIMER() > iTimerDrivebyReset + 10000
IF IS_PED_UNINJURED(mPoppy.piPed)
IF GET_SCRIPT_TASK_STATUS(mPoppy.piPed,SCRIPT_TASK_DRIVE_BY) = PERFORMING_TASK
CLEAR_PED_TASKS(mPoppy.piPed)
bDoingDriveBy = FALSE //reset doing drive by flag
ENDIF
IF IS_DRIVEBY_TASK_UNDERNEATH_DRIVING_TASK(mPoppy.piPed)
CLEAR_DRIVEBY_TASK_UNDERNEATH_DRIVING_TASK(mPoppy.piPed) //if there is already a driveby task present remove it
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Increase the filming stats for the face recog box
/// the individual colours are changed over time till
/// the box is green.
/// If bCenter and bZoomed are both true the box locks on quicker
/// PARAMS:
/// bCenter - The camera is centered on targets face
/// bZoomed - The camera is zoomed in - only counts if the camera is centered as well
PROC INCREASE_FILMING_STATS(BOOL bCenter,BOOL bZoomed)
//FLOAT fRecog
//INT iRecogPercent
IF bCenter
IF bZoomed
mBoxCol.G += NUM_ONSCREEN_ZOOM_CENTER
mBoxCol.B += NUM_ONSCREEN_ZOOM_CENTER
mBoxCol.R -= NUM_ONSCREEN_ZOOM_CENTER
ELSE
mBoxCol.G += NUM_ONSCREEN_CENTER
mBoxCol.B += NUM_ONSCREEN_CENTER
mBoxCol.R -= NUM_ONSCREEN_CENTER
ENDIF
IF mBoxCol.R <= 0
mBoxCol.R = 0
ENDIF
IF mBoxCol.G >= 255
mBoxCol.G = 255
ENDIF
IF mBoxCol.B >= 123
mBoxCol.B = 123
ENDIF
ELSE
mBoxCol.G += NUM_ONSCREEN
mBoxCol.B += NUM_ONSCREEN
mBoxCol.R -= NUM_ONSCREEN
IF mBoxCol.G >= 255
mBoxCol.G = 255
ENDIF
IF mBoxCol.B >= 123
mBoxCol.B = 123
ENDIF
IF mBoxCol.R <= 0
mBoxCol.R = 0
ENDIF
ENDIF
IF mBoxCol.G = 255
++iFilmingStats
ENDIF
/*
IF eMissionStage = MS_CAR_CHASE
fRecog = TO_FLOAT(mBoxCol.G)
fRecog /= 255
fRecog *= 100
iRecogPercent = ROUND(fRecog)
IF iRecogPercent > iMaxRecogPercent
iMaxRecogPercent = iRecogPercent
//PRINTNL()
//PRINTINT(iMaxRecogPercent)
ENDIF
ENDIF
*/
ENDPROC
/// PURPOSE:
/// Reduce the filming stats for the face recog box tag
/// The colour of the box is turned to red
PROC DECREASE_FILMING_STATS()
//fOffScreen += OFF_SCREEN
mBoxCol.G -= NUM_OFF_SCREEN //Take away green
mBoxCol.B -= NUM_OFF_SCREEN //Take away blue
mBoxCol.R += NUM_OFF_SCREEN //add red
//clamp
IF mBoxCol.R >= 255
mBoxCol.R = 255
ENDIF
//clamp
IF mBoxCol.G <= 0
mBoxCol.G = 0
ENDIF
//clamp
IF mBoxCol.B <= 0
mBoxCol.B = 0
ENDIF
++iBadFilming
ENDPROC
/// PURPOSE:
/// Reset the box tag to red
PROC RESET_BOX_COL()
mBoxCol.R = 255
mBoxCol.G = 0
mBoxCol.B = 0
ENDPROC
/// PURPOSE:
/// Moniters whether a ped is on screen or not and adjusts their face box accordingly
/// PARAMS:
/// ped - The ped who's face we want to moniter
/// bOnScreen - The bool to write to with the result of IS_PED_IN_MIDDLE_OF_SCREEN
/// bChase - Are we doing the car chase
PROC MONITER_PED_ON_SCREEN(PED_INDEX ped, BOOL &bOnScreen, BOOL bChase = TRUE)
FLOAT fScreenX = 0.0
FLOAT fScreenY = 0.0
bOnscreen = IS_PED_IN_MIDDLE_OF_SCREEN(ped, fScreenX, fScreenY) //Checks the ped is in screen
IF bOnscreen //it is on screen
IF bChase
//MONITER_POPPY_DRIVEBY()
ENDIF
IF DOES_CAM_EXIST(camMain)
IF bChase
IF GET_CAM_FOV(camMain) < 13
INCREASE_FILMING_STATS(TRUE, TRUE)
--iCounterNotOnScreen
--iCounterNotOnScreen
ELSE
INCREASE_FILMING_STATS(TRUE, FALSE)
--iCounterNotOnScreen
ENDIF
ELSE
IF GET_CAM_FOV(camMain) < 13
INCREASE_FILMING_STATS(TRUE, TRUE)
ELSE
INCREASE_FILMING_STATS(TRUE, FALSE)
ENDIF
ENDIF
ENDIF
ELSE //its not on screen
IF IS_PED_UNINJURED(ped)
IF IS_ENTITY_ON_SCREEN(ped)
INCREASE_FILMING_STATS(FALSE, FALSE)
--iCounterNotOnScreen
/*
FLOAT fSX
FLOAT fSY
IF GET_SCREEN_COORD_FROM_WORLD_COORD(GET_ENTITY_COORDS(ped), fSX, fSY)
IF fSX > 0.4
//AND fSX < 0.6
AND fSY > 0.4
//AND fSY < 0.6
--iCounterNotOnScreen
ENDIF
ENDIF
*/
ELSE
DECREASE_FILMING_STATS()
++iCounterNotOnScreen
ENDIF
ENDIF
ENDIF
IF iCounterNotOnScreen < 0
iCounterNotOnScreen = 0
ENDIF
IF iCounterNotOnScreen > iFramesBeforeFilmingFail + 1
iCounterNotOnScreen = iFramesBeforeFilmingFail + 1
ENDIF
//PRINTINT(iCounterNotOnScreen)
//PRINTNL()
ENDPROC
/// PURPOSE:
/// Check the film time is at its limit
/// PARAMS:
/// Limit - The time you need to film for
/// RETURNS:
/// TRUE if film time is over the limit
FUNC BOOL IS_PIC_UNIQUE(INT Limit = 50)
IF iFilmTime > Limit
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Plays a sound from an entity
/// PARAMS:
/// i - The index of the Sound struct to access
/// Origin - The entity to play the sound from
PROC PLAY_CHASE_SOUND_ENTITY(INT i, ENTITY_INDEX Origin)
IF IS_ENTITY_ALIVE(Origin)
PLAY_SOUND_FROM_ENTITY(-1, mFinalChaseSound[i].sSoundName, Origin, sSoundSet)
mFinalChaseSound[i].bPlayed = TRUE
ENDIF
ENDPROC
/// PURPOSE:
/// Triggers the sound needed at the correct time in the car recording
/// PARAMS:
/// iChaseProgress - The current time in to the recording
//VECTOR vPoppyForward
PROC MONITER_SOUNDS(INT iChaseProgress)
INT i
FOR i = 0 TO (MAX_SOUNDS - 1)
IF NOT mFinalChaseSound[i].bPlayed
IF iChaseProgress >= mFinalChaseSound[i].iExecuteTime
SWITCH mFinalChaseSound[i].eOrigin
CASE CSO_POPPY
//IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<100.02, -397.11, 40.77>>,5,prop_pipes_02b)
//vPoppyForward = GET_ENTITY_FORWARD_VECTOR(viChaseCars[POPPY_CAR])
//objPipe1 = GET_CLOSEST_OBJECT_OF_TYPE(<<100.02, -397.11, 40.77>>,5,prop_pipes_02b)
//APPLY_FORCE_TO_ENTITY(objPipe1,APPLY_TYPE_EXTERNAL_FORCE,vPoppyForward,<<0,0,0>>,0,TRUE,TRUE,TRUE)
SMASH_VEHICLE_WINDOW(viChaseCars[POPPY_CAR],SC_WINDSCREEN_FRONT)
SET_VEHICLE_DAMAGE(viChaseCars[POPPY_CAR],<<99.92, -396.72, 40.74>>,200, 200, FALSE)
SET_VEHICLE_TYRE_BURST(viChaseCars[POPPY_CAR],SC_WHEEL_CAR_FRONT_LEFT)
SET_VEHICLE_TYRE_BURST(viChaseCars[POPPY_CAR],SC_WHEEL_CAR_FRONT_RIGHT)
TRIGGER_MUSIC_EVENT("PAP2_STOP")
SK_PRINT("++++++ APPLYING FORCE TO PIPES ++++++")
//ENDIF
PLAY_CHASE_SOUND_ENTITY(i, mPoppy.piPed)
BREAK
CASE CSO_PLAYER
//PLAY_CHASE_SOUND_ENTITY(i, PLAYER_PED_ID())
BREAK
ENDSWITCH
ENDIF
ENDIF
ENDFOR
ENDPROC
/// PURPOSE:
/// Sets up the FPS style filming camera
/// PARAMS:
/// walk - Should it be the walking camera or the car chase camera
/// RETURNS:
/// TRUE if the camera was created
FUNC BOOL SETUP_CAMERA(BOOL walk)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF walk
IF NOT DOES_CAM_EXIST(camMain)
camMain = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA",<<-33.4707, 318.6031, 113.3355>>, <<-1.6576, 0.0000, -170.9825>>, 45, TRUE)
IF eMissionStage <> MS_CAMERA_TUTORIAL
RENDER_SCRIPT_CAMS(TRUE, FALSE)
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
IF DOES_CAM_EXIST(camMain)
CASCADE_SHADOWS_SET_DYNAMIC_DEPTH_MODE(TRUE)
CASCADE_SHADOWS_SET_DYNAMIC_DEPTH_VALUE(16.0)
RETURN TRUE
ENDIF
ELSE
CASCADE_SHADOWS_SET_DYNAMIC_DEPTH_MODE(TRUE)
CASCADE_SHADOWS_SET_DYNAMIC_DEPTH_VALUE(16.0)
RETURN TRUE
ENDIF
ELSE
IF NOT DOES_CAM_EXIST(camMain)
IF IS_ENTITY_ALIVE(viPlayerCar) AND IS_PED_UNINJURED(PLAYER_PED_ID())
camMain = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA",GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viPlayerCar, vCameraOffset), <<0,0, -GET_ENTITY_HEADING(viPlayerCar)>>, 50, TRUE)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
IF DOES_CAM_EXIST(camMain)
RETURN TRUE
ENDIF
ENDIF
ELSE
IF IS_ENTITY_ALIVE(viPlayerCar) AND IS_PED_UNINJURED(PLAYER_PED_ID())
SET_CAM_PARAMS(camMain,GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viPlayerCar, vCameraOffset), <<0,0, -GET_ENTITY_HEADING(viPlayerCar)>>, 50)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE: WIP dof/motion blur effects
PROC DO_CAM_DOF_EFFECT()
/*
fCamFov = GET_CAM_FOV(camMain)
IF eMissionStage = MS_CAR_CHASE
IF fCamFov >= 45
OR fCamFov <= 25
fCamZoomStrength = 0
ENDIF
ELSE
IF fCamFov >= 45
OR fCamFov <= 7.5
fCamZoomStrength = 0
ENDIF
ENDIF
IF fCamZoomStrength > 0.4
fCamZoomStrength = 0.4
ENDIF
IF fCamZoomStrength < 0
fCamZoomStrength = 0
ENDIF
*/
/*
SET_CAM_MOTION_BLUR_STRENGTH(camMain,COSINE_INTERP_FLOAT(GET_CAM_MOTION_BLUR_STRENGTH(camMain),fCamZoomStrength/3,0.15))
SET_CAM_NEAR_DOF(camMain,0)
SET_CAM_FAR_DOF(camMain,COSINE_INTERP_FLOAT(GET_CAM_FAR_DOF(camMain),GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(),mPoppy.piPed) + 10.0,0.2))
SET_CAM_DOF_STRENGTH(camMain,COSINE_INTERP_FLOAT(GET_CAM_DOF_STRENGTH(camMain),fCamZoomStrength,0.2))
SET_USE_HI_DOF()
*/
IF bCamZooming
fZoomAlpha = fZoomAlpha - 0.2
ELSE
fZoomAlpha = fZoomAlpha + 0.1
ENDIF
IF fZoomAlpha > 1.0
fZoomAlpha = 1.0
ENDIF
IF fZoomAlpha < 0.0
fZoomAlpha = 0.0
ENDIF
SET_CAM_NEAR_DOF(camMain,2)
SET_CAM_FAR_DOF(camMain,COSINE_INTERP_FLOAT(20.0,60.0,fZoomAlpha))
SET_CAM_DOF_STRENGTH(camMain,0.5)
SET_USE_HI_DOF()
ENDPROC
/// PURPOSE:
/// Caps the pitch of the camera
/// PARAMS:
/// fPitch - The value of pitch to cap
/// min - the minimum value fPitch can be before its capped
/// max - the maximum value fPitch can be before its capped
/// RETURNS:
/// the capped pitch
FUNC FLOAT CAP_PITCH(FLOAT fPitch, FLOAT min= -50.0, FLOAT max= 40.0)
IF fPitch < min
fPitch = min
ENDIF
IF fPitch > max
fPitch = max
ENDIF
return fPitch
ENDFUNC
/// PURPOSE:
/// Caps the yaw of the camera
/// PARAMS:
/// fYaw - The value of yaw to cap
/// min - the minimum value fYaw can be before its capped
/// max -the maximum value fYaw can be before its capped
/// RETURNS:
/// The capped value of fYaw
FUNC FLOAT CAP_YAW(FLOAT fYaw, FLOAT min= -50.0, FLOAT max= 20.0)
IF fYaw < min
SK_PRINT("YAW CAPPED ----------")
fYaw = min
ENDIF
IF fYaw > max
SK_PRINT("YAW CAPPED ++++++++++")
fYaw = max
ENDIF
RETURN fYaw
ENDFUNC
/// PURPOSE:
/// Caps the angle the player can turn the camera
/// PARAMS:
/// fVal - The value to be capped
/// RETURNS:
/// The capped value
FUNC FLOAT CAP_TURNING_VALUE(FLOAT fVal)
IF fVal < -VIEW_ANGLE
fVal = -VIEW_ANGLE
ENDIF
IF fVal > VIEW_ANGLE
fVal = VIEW_ANGLE
ENDIF
RETURN fVal
ENDFUNC
/// PURPOSE:
/// uses input from the analog sticks to addjust the way the camera is looking
/// PARAMS:
/// vCam - The VECTOR to write the modified look at to
/// fFOV - The FLOAT to write the modified Zoom value
PROC DO_CAM_CONTROLS(VECTOR &vCam, FLOAT &fFOV, BOOL bIsOnFootCam = FALSE)
INT iStickPitch, iStickYaw, iIgnore, iZoom
FLOAT fStickPitch, fStickYaw
FLOAT fZoomSpeed
FLOAT fMaxZoom
fMaxZoom = 25
IF bIsOnFootCam
fMaxZoom = 7.5
ENDIF
IF IS_SNIPER_INVERTED()
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS_UNBOUND(iStickYaw,iStickPitch,iIgnore,iZoom)
ELSE
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS_UNBOUND(iIgnore,iZoom,iStickYaw,iStickPitch)
ENDIF
IF NOT IS_LOOK_INVERTED()
iStickPitch *= -1
ENDIF
IF NOT bIsOnFootCam
IF IS_SPHERE_VISIBLE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viPlayerCar,<<-2,-2.6,0>>),1.0)
bRotRight = TRUE
//SK_PRINT("FUCK YEAH")
ENDIF
ENDIF
// Use the sniper zoom so the zoom works on mousewheel
iZoom = FLOOR(GET_CONTROL_UNBOUND_NORMAL(FRONTEND_CONTROL, INPUT_SNIPER_ZOOM) * 127)
IF (iZoom < -DEAD_ZONE_CAM OR iZoom > DEAD_ZONE_CAM)
//IF iZoom =
fFOV += (TO_FLOAT(iZoom) / CAM_FOV_RATE) * TIMESTEP()
IF fFOV < fMaxZoom //The smaller the FOV the more zoomed in we are
fFOV = fMaxZoom
ELIF fFOV > 45
fFOV = 45
ENDIF
ENDIF
fZoomSpeed = ABSF(TO_FLOAT(iZoom) / 127)
#IF NOT IS_JAPANESE_BUILD
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
FLOAT fZoomamount
fZoomamount = fFOV - 7.5
fZoomamount = fZoomamount/37.5
IF fZoomamount > 0.6
fZoomamount = 0.6
ENDIF
//SET_VARIABLE_ON_SYNCH_SCENE_AUDIO("CAMERA_USED",fZoomamount) //it never worked
ENDIF
#ENDIF
IF fZoomSpeed < 0
fZoomSpeed = 0
ENDIF
IF fZoomSpeed > 1
fZoomSpeed = 1
ENDIF
IF fCamFov > fFOV
IF iZoomFunc = 1
IF NOT HAS_SOUND_FINISHED(iZoomSound)
STOP_SOUND(iZoomSound)
ENDIF
ENDIF
SET_VARIABLE_ON_SOUND(iZoomSound,"ZOOM_FUNCTION",0)
SET_VARIABLE_ON_SOUND(iZoomSound,"ZOOM_SPEED",fZoomSpeed)
IF HAS_SOUND_FINISHED(iZoomSound)
PLAY_SOUND_FRONTEND(iZoomSound,"ZOOM","PAPARAZZO_02_SOUNDSETS")
iZoomFunc = 0
ENDIF
bCamZooming = TRUE
ELIF fCamFov < fFOV
IF iZoomFunc = 0
IF NOT HAS_SOUND_FINISHED(iZoomSound)
STOP_SOUND(iZoomSound)
ENDIF
ENDIF
SET_VARIABLE_ON_SOUND(iZoomSound,"ZOOM_FUNCTION",1)
SET_VARIABLE_ON_SOUND(iZoomSound,"ZOOM_SPEED",fZoomSpeed)
IF HAS_SOUND_FINISHED(iZoomSound)
PLAY_SOUND_FRONTEND(iZoomSound,"ZOOM","PAPARAZZO_02_SOUNDSETS")
iZoomFunc = 1
ENDIF
bCamZooming = TRUE
ELIF fCamFov = fFOV
IF NOT HAS_SOUND_FINISHED(iZoomSound)
STOP_SOUND(iZoomSound)
ENDIF
bCamZooming = FALSE
ENDIF
IF (iStickYaw < -DEAD_ZONE_CAM OR iStickYaw > DEAD_ZONE_CAM OR IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) )
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
fStickYaw = GET_DISABLED_CONTROL_UNBOUND_NORMAL( PLAYER_CONTROL, INPUT_SCALED_LOOK_LR ) * CAM_MOUSE_TURN_RATE
ELSE
fStickYaw = ((TO_FLOAT(iStickYaw) * fFOV) * CAM_TURN_RATE) * TIMESTEP()
ENDIF
//
fCamHeadingMod += fStickYaw
//fCamHeadingMod = CAP_YAW(fCamHeadingMod)
//SF_PRINT_FLOAT("fCamHeadingMod*********************= ", fCamHeadingMod)
fCamHeadingMod = CAP_TURNING_VALUE(fCamHeadingMod)
/*SF_PRINT_FLOAT("fMaxTurning------------=== ", fMaxTurning)
SF_PRINT_FLOAT("fMinTurning--------------=== ", fMinTurning)
SF_PRINT_FLOAT("fCamHeadingMod-------------=== ", fCamHeadingMod)
*/
//SF_PRINT_FLOAT("CAPPED YAW ++++++++++++++++++++++++++++++++ ", fCamHeadingMod)
ENDIF
IF (iStickPitch < -DEAD_ZONE_CAM OR iStickPitch > DEAD_ZONE_CAM OR IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL))
IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL)
fStickPitch = GET_DISABLED_CONTROL_UNBOUND_NORMAL( PLAYER_CONTROL, INPUT_SCALED_LOOK_UD ) * -CAM_MOUSE_TURN_RATE
ELSE
fStickPitch = ((TO_FLOAT(iStickPitch) * fFOV) * CAM_TURN_RATE) * TIMESTEP()
ENDIF
//fStickPitch = CAP_PITCH(fStickPitch)
//SF_PRINT_FLOAT("CSTICK PITCH ", fStickPitch)
fCamPitchMod += fStickPitch
//SF_PRINT_FLOAT("fCamPitchMod1 ", fCamPitchMod)
fCamPitchMod = CAP_PITCH(fCamPitchMod)
//SF_PRINT_FLOAT("fCamPitchMod2 ", fCamPitchMod)
ENDIF
//SF_PRINT_FLOAT("WORLD YAW----------------------------------=== ", fWorldYaw)
IF eMissionStage = MS_CAR_CHASE
IF bUseLockedCam
vCam += <<fCamPitchMod,0, -fCamHeadingMod>>
ELSE
vCam += <<fStickPitch,0, -fStickYaw>>
ENDIF
ELSE
vCam += <<fStickPitch,0, -fStickYaw>>
ENDIF
ENDPROC
/// PURPOSE:
/// Updates the cameras position and lookat for the on foot style camera
PROC MANAGE_WALK_CAM()
SET_ENTITY_VISIBLE(PLAYER_PED_ID(),FALSE)
VECTOR vCameraRot = GET_CAM_ROT(camMain)
FLOAT fCameraFOV = GET_CAM_FOV(camMain)
DO_CAM_CONTROLS(vCameraRot, fCameraFOV, TRUE)
vCameraRot.x = CAP_PITCH(vCameraRot.x)
//SET_ENTITY_HEADING(PLAYER_PED_ID(), vCameraRot.z)
//SET_GAMEPLAY_CAM_RELATIVE_HEADING()
SET_CAM_PARAMS(camMain,
<< -33.4707, 318.6031, 113.3355 >>,
<<vCameraRot.x, GET_ENTITY_ROLL(PLAYER_PED_ID()), vCameraRot.z>>,
fCameraFOV)
ENDPROC
FUNC VECTOR GET_VECTOR_FROM_HEADING(FLOAT fHeading)
RETURN <<SIN(fHeading), COS(fHeading), 0.0>>
ENDFUNC
/// PURPOSE:
/// Updates the cam position and lookat during the chase
PROC MANAGE_CAR_CAM()
VECTOR vCameraRot = GET_CAM_ROT(camMain)
FLOAT fCameraFOV = GET_CAM_FOV(camMain)
FLOAT fRevCarHeading = GET_ENTITY_HEADING(viPlayerCar) - 180
VECTOR vCarForward
IF IS_ENTITY_ALIVE(viPlayerCar)
vCarForward = GET_ENTITY_FORWARD_VECTOR(viPlayerCar)
PROCESS_ENTITY_ATTACHMENTS(viPlayerCar)
ENDIF
VECTOR newf
vCarForward.x *= -1.0
vCarForward.y *= -1.0
vCarForward.z *= -1.0
newf.z = (GET_HEADING_FROM_VECTOR_2D(vCarForward.x, vCarForward.y)) //+ (3.142 / 2)
FLOAT fMaxTurning, fMinTurning
fMaxTurning = newf.z + VIEW_ANGLE
fMinTurning = newf.z - VIEW_ANGLE
VECTOR vCam = GET_VECTOR_FROM_HEADING(vCameraRot.z)
VECTOR vCar = GET_VECTOR_FROM_HEADING(fRevCarHeading)
FLOAT fAngle = GET_ANGLE_BETWEEN_2D_VECTORS(vCam.x,vCam.y,vCar.x,vCar.y)
IF fAngle >= VIEW_ANGLE
//DISABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_SCRIPT_RIGHT_AXIS_X)
//DISABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_RRIGHT)
/*
VECTOR vCarMinLock = GET_VECTOR_FROM_HEADING(fRevCarHeading - VIEW_ANGLE)
VECTOR vCarMaxLock = GET_VECTOR_FROM_HEADING(fRevCarHeading + VIEW_ANGLE)
FLOAT fClosestLockHeading
IF GET_ANGLE_BETWEEN_2D_VECTORS(vCam.x,vCam.y,vCarMinLock.x,vCarMinLock.y) < GET_ANGLE_BETWEEN_2D_VECTORS(vCam.x,vCam.y,vCarMaxLock.x,vCarMaxLock.y)
fClosestLockHeading = GET_HEADING_FROM_VECTOR_2D(vCarMinLock.x, vCarMinLock.y)
ELSE
fClosestLockHeading = GET_HEADING_FROM_VECTOR_2D(vCarMaxLock.x, vCarMaxLock.y)
ENDIF
vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fClosestLockHeading,0.5)
*/
/*
IF fAngle > VIEW_ANGLE + 5
vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fRevCarHeading,0.14)
ELIF fAngle > VIEW_ANGLE + 4
vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fRevCarHeading,0.13)
ELIF fAngle > VIEW_ANGLE + 3
vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fRevCarHeading,0.12)
ELIF fAngle > VIEW_ANGLE + 2
vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fRevCarHeading,0.11)
ELIF fAngle > VIEW_ANGLE + 1
vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fRevCarHeading,0.1)
ELSE
vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fRevCarHeading,0.09)
ENDIF
*/
//vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fRevCarHeading,fCamConstrainAlpha)
IF bRotRight
//fTempCamZ = COSINE_INTERP_FLOAT(vCameraRot.z,vCameraRot.z + fAngle,fCamConstrainAlpha)
//fTempCamZ = vCameraRot.z + fAngle/5//10
vCameraRot.z = fMinTurning
//vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fMinTurning,0.5)
ELSE
//fTempCamZ = COSINE_INTERP_FLOAT(vCameraRot.z,vCameraRot.z - fAngle,fCamConstrainAlpha)
//fTempCamZ = vCameraRot.z - fAngle/5//10
vCameraRot.z = fMaxTurning
//vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fMaxTurning,0.5)
ENDIF
//vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fTempCamZ,fAngle/200)
/*
IF fTempCamZAlpha > 1.0
fTempCamZAlpha = 1.0
ELSE
fTempCamZAlpha = fTempCamZAlpha + 1//0.1
ENDIF
*/
ELSE
/*
IF fTempCamZ <> 0
AND fTempCamZAlpha > 0
AND fTempCamZ <> vCameraRot.z
fTempCamZ = COSINE_INTERP_FLOAT(vCameraRot.z,fTempCamZ,fTempCamZAlpha)
vCameraRot.z = COSINE_INTERP_FLOAT(vCameraRot.z,fTempCamZ,0.1)
fTempCamZAlpha = fTempCamZAlpha - 1//0.1
ENDIF
*/
//ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_SCRIPT_RIGHT_AXIS_X)
//fCamConstrainAlpha = 0.18
bRotRight = FALSE
//ENABLE_CONTROL_ACTION(FRONTEND_CONTROL,INPUT_FRONTEND_RRIGHT)
ENDIF
IF bUseLockedCam
DO_CAM_CONTROLS(newf, fCameraFOV)
newf.z = CAP_YAW(newf.z, fMinTurning,fMaxTurning)
newf.x = CAP_PITCH(newf.x)
newf.y = GET_ENTITY_ROLL(viPlayerCar)
ELSE
DO_CAM_CONTROLS(vCameraRot, fCameraFOV)
//vCameraRot.z = CAP_YAW(vCameraRot.z, fMinTurning,fMaxTurning)
vCameraRot.x = CAP_PITCH(vCameraRot.x,-30,30)
vCameraRot.y = GET_ENTITY_ROLL(viPlayerCar)
ENDIF
VECTOR _Offset = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viPlayerCar, vCameraOffset)
IF bUseLockedCam
SET_CAM_PARAMS(camMain, _Offset, newf, fCameraFOV)
ELSE
SET_CAM_PARAMS(camMain, _Offset, <<vCameraRot.x,vCameraRot.y,vCameraRot.z>>, fCameraFOV)
ENDIF
ENDPROC
/// PURPOSE:
/// Works out the scale factor of the box tag based on the cameras zoom and
/// The players distance from the ped he's filming
/// And also gets the position of the peds head
/// PARAMS:
/// aPed - The ped the box tag is used on
/// pos - The position to write the position of the peds head
/// RETURNS:
/// The scale factor of the face recog box
FUNC FLOAT GET_BOX_TAG_SIZE(PED_INDEX aPed, VECTOR &pos)
IF IS_PED_UNINJURED(aPed)
INT i = GET_PED_BONE_INDEX(aPed, BONETAG_HEAD)
IF i <> -1
pos = GET_WORLD_POSITION_OF_ENTITY_BONE(aPed,i)
IF eMissionStage = MS_CAMERA_TUTORIAL
OR eMissionStage = MS_FILM_POPPY
#IF NOT IS_JAPANESE_BUILD
pos += <<fFaceOffset,0,fFaceOffsetZ>>
#ENDIF
#IF IS_JAPANESE_BUILD
pos += <<0,0,0.085>>
#ENDIF
ELSE
IF IS_PED_IN_ANY_VEHICLE(aPed)
//VECTOR vPoppyHead = GET_WORLD_POSITION_OF_ENTITY_BONE(aPed,i)
IF IS_PED_IN_ANY_VEHICLE(aPed)
AND NOT IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_fuckinlosers")
AND NOT IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_gimmethtcam")
AND NOT IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_ih8u")
AND NOT IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_illsueyou")
AND NOT IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_imavirgin")
AND NOT IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_itwasyoga")
AND NOT IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_notdoinanythin")
PROCESS_ENTITY_ATTACHMENTS(aPed)
pos = GET_PED_BONE_COORDS(aPed,BONETAG_HEAD,<<0,0,0>>)
pos.z = pos.z + 0.08
ELSE
/*
IF IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_gimmethtcam")
pos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(GET_VEHICLE_PED_IS_IN(aPed),<<-0.485,-0.28,0.40>>)
ELIF IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_illsueyou")
pos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(GET_VEHICLE_PED_IS_IN(aPed),<<-0.38,-0.28,0.39>>)
ELIF IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_imavirgin")
pos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(GET_VEHICLE_PED_IS_IN(aPed),<<-0.4,-0.17,0.40>>)
ELIF IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_fuckinlosers")
pos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(GET_VEHICLE_PED_IS(aPed),<<-0.48,-0.17,0.44>>)
ELIF IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_ih8u")
pos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(GET_VEHICLE_PED_IS_IN(aPed),<<-0.46,-0.21,0.40>>)
ELIF IS_ENTITY_PLAYING_ANIM(aPed,"rcmpaparazzo_2ig_3","pm_incar_itwasyoga")
pos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(GET_VEHICLE_PED_IS_IN(aPed),<<-0.48,-0.17,0.43>>)
ELSE
pos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(GET_VEHICLE_PED_IS_IN(aPed),<<-0.44,-0.3,0.40>>)
ENDIF
*/
PROCESS_ENTITY_ATTACHMENTS(aPed)
pos = GET_PED_BONE_COORDS(aPed,BONETAG_HEAD,<<0,0,0>>)
pos.z = pos.z + 0.08
ENDIF
//VECTOR vSpeed = GET_ENTITY_SPEED_VECTOR(GET_VEHICLE_PED_IS_IN(aPed))
//pos = GET_PED_BONE_COORDS(aPed,BONETAG_HEAD,<<vSpeed.x/10,vSpeed.y/10,vSpeed.z/100>>)
/*
IF WAS_PED_SKELETON_UPDATED(aPed)
pos = GET_PED_BONE_COORDS(aPed,BONETAG_HEAD,<<0,0,0>>)
ENDIF
*/
ENDIF
ENDIF
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF DOES_CAM_EXIST(camMain)
float fPedRange = GET_DISTANCE_BETWEEN_COORDS(pos,GET_ENTITY_COORDS(PLAYER_PED_ID()))
float fBoxScaler = iScaleMulti / (GET_CAM_FOV(camMain) * fPedRange)
if fBoxScaler < fMinBox
fBoxScaler = fMinBox
ENDIF
if fBoxScaler > fMaxBox
fBoxScaler = fMaxBox
ENDIF
RETURN fBoxScaler
ENDIF
ENDIF
ENDIF
ENDIF
RETURN 0.0
ENDFUNC
/// PURPOSE:
/// Draws the face tag box around the ped that needs filming
PROC DO_FACE_TAG(PED_INDEX ped)
VECTOR vPos
FLOAT fBoxTagScale
//fBoxTagScale = GET_BOX_TAG_SIZE(mPoppy.piPed, vPos)
fBoxTagScale = GET_BOX_TAG_SIZE(ped, vPos)
SET_SCRIPT_GFX_ALIGN(UI_ALIGN_IGNORE, UI_ALIGN_IGNORE)
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD)
SET_DRAW_ORIGIN(vPos)
fBoxTagScale *= 0.03
DRAW_SPRITE("helicopterhud", "hud_corner",-fBoxTagScale*0.5, -fBoxTagScale,0.013,0.013, 0, mBoxCol.R,mBoxCol.G,mBoxCol.B, 200,TRUE)
DRAW_SPRITE("helicopterhud", "hud_corner",fBoxTagScale*0.5, -fBoxTagScale,0.013,0.013,90, mBoxCol.R,mBoxCol.G,mBoxCol.B, 200,TRUE)
DRAW_SPRITE("helicopterhud", "hud_corner",-fBoxTagScale*0.5, fBoxTagScale,0.013,0.013,270, mBoxCol.R,mBoxCol.G,mBoxCol.B, 200,TRUE)
DRAW_SPRITE("helicopterhud", "hud_corner",fBoxTagScale*0.5, fBoxTagScale,0.013,0.013,180, mBoxCol.R,mBoxCol.G,mBoxCol.B, 200,TRUE)
CLEAR_DRAW_ORIGIN()
RESET_SCRIPT_GFX_ALIGN()
ENDPROC
/// PURPOSE:
/// Handles all the drawing of the camera UI
PROC DO_CAM_UI()
IF iRedBlink = 0
ENDIF
//IF iRedBlink > 10
// iRedBlink = 0
//ELSE
SET_TEXT_COLOUR(255,0,0,255)
DISPLAY_TEXT(0.8, 0.78, "PAP2_REC") //(0.8, 0.8, "PAP2_REC")
SET_TEXT_COLOUR(255,255,255,255)
iRedBlink++
//ENDIF
//DRAW_RECT(0.5, 0.5, fCross1HairWidth, fCross1HairHeight, 255, 255, 255, 150)
//DRAW_RECT(0.5, 0.5, fCross2HairWidth, fCross2HairHeight, 255, 255, 255, 150)
DRAW_SPRITE("helicopterhud", "hud_corner", fCursorX1, fCursorY1,fCursorWidth,fCursorHeight, 0, 255,255,255, 200,TRUE)
DRAW_SPRITE("helicopterhud", "hud_corner", fCursorX2, fCursorY2,fCursorWidth,fCursorHeight,90, 255,255,255, 200,TRUE)
DRAW_SPRITE("helicopterhud", "hud_corner", fCursorX3, fCursorY3,fCursorWidth,fCursorHeight,270, 255,255,255, 200,TRUE)
DRAW_SPRITE("helicopterhud", "hud_corner", fCursorX4, fCursorY4,fCursorWidth,fCursorHeight,180, 255,255,255, 200,TRUE)
ENDPROC
/// PURPOSE:
/// Main camera manager, contains all the functions used to maintain the camera
///
/// PARAMS:
/// bWalk - Is the camera on foot or in the car of the car chase
PROC MANAGE_CAMERA(BOOL bWalk = FALSE)
IF DOES_CAM_EXIST(camMain)
AND IS_ENTITY_ALIVE(viPlayerCar)
AND IS_PED_UNINJURED(PLAYER_PED_ID())
IF DOES_CAM_EXIST(camMainCS)
DESTROY_CAM(camMainCS)
ENDIF
IF DOES_CAM_EXIST(camFrankFilm)
DESTROY_CAM(camFrankFilm)
ENDIF
IF DOES_CAM_EXIST(camFrankFilm2)
DESTROY_CAM(camFrankFilm2)
ENDIF
SET_TIMECYCLE_MODIFIER("player_transition_scanlines") //scanline_cam //player_transition_no_scanlines //player_transition_scanlines
SET_TIMECYCLE_MODIFIER_STRENGTH(0.15)
IF bWalk
MANAGE_WALK_CAM()
ELSE
MANAGE_CAR_CAM()
//IF fTimePosInRec < 85000.0
//OVERRIDE_LODSCALE_THIS_FRAME(1.0)
//ENDIF
ENDIF
DO_CAM_UI()
IF bUseFace
AND NOT IS_PAUSE_MENU_ACTIVE()
DO_FACE_TAG(mPoppy.piPed)
ENDIF
SET_CAM_NEAR_DOF(camMain,2)
//SET_CAM_FAR_DOF(camMain,COSINE_INTERP_FLOAT(GET_CAM_FAR_DOF(camMain),GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(),mPoppy.piPed) + 10.0,0.2))
//SET_CAM_DOF_STRENGTH(camMain,COSINE_INTERP_FLOAT(GET_CAM_DOF_STRENGTH(camMain),fCamZoomStrength,0.2))
SET_CAM_FAR_DOF(camMain,60.0)
SET_CAM_DOF_STRENGTH(camMain,0.5) //0.5
SET_USE_HI_DOF()
//DO_CAM_DOF_EFFECT()
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_UP)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LEFT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_RIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_MOVE_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_MOVE_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_NEXT_RADIO)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_PREV_RADIO)
ENDIF
ENDPROC
/// PURPOSE:
/// Called when the player has failed
/// deletes blips and clears the screen of text and conversations are ended
/// PARAMS:
/// fail - An Enum of the fail reason used in a switch statment to pick the correct text to display
PROC MISSION_FAILED(FAILED_REASONS fail)
IF iSeqBadCamMissionFail = 0
CLEANUP_CAMERA(FALSE)
ELSE
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
MANAGE_CAMERA()
ENDIF
IF fail <> FR_BADCAM
CLEAR_PRINTS()
KILL_ANY_CONVERSATION()
ENDIF
SAFE_REMOVE_BLIP(biGOTO)
SAFE_REMOVE_BLIP(biBuddyBlip)
bPlayerFailed = TRUE
SWITCH fail
CASE FR_BUDDY_HARMED
sFailReason = "PAP2_FAILBUD" //~r~You harmed Beverly.
BREAK
CASE FR_BUDDY_DEAD
sFailReason = "PAP2_FAILBD" //~r~You killed Beverly.
BREAK
CASE FR_BUDDY_THREAT
sFailReason = "PAP2_FAILTHR" //~r~You scared Beverly off.
BREAK
CASE FR_BADCAM
SK_PRINT("TRYING TO PULL OVER")
sFailReason = "PAP2_BADCAM" //~r~You failed to get enough footage of Poppy.
BREAK
CASE FR_POPPY_SCARED
BREAKOUT_SYNC_SCENE_SPOT_PLAYER()
sFailReason = "PAP2_FAILPAT" //~r~You scared Poppy.
BREAK
CASE FR_SPOTTED
BREAKOUT_SYNC_SCENE_SPOT_PLAYER()
sFailReason = "PAP2_FAILATT"//"PAP2_FAILSPOTED" //~r~You were spotted.
BREAK
CASE FR_ATTENTION
sFailReason = "PAP2_FAILATT" //~r~You attracted attention.
BREAK
CASE FR_KILLED_INOCC
sFailReason = "PAP2_FAILATT"//"PAP2_FAILKIL" //~r~You harmed an innocent.
BREAK
CASE FR_KILLED_POP
IF eMissionStage < MS_CAMERA_TUTORIAL
BREAKOUT_SYNC_SCENE_SPOT_PLAYER()
ENDIF
sFailReason = "PAP2_FAILKPOP" //~r~You Killed Poppy.
BREAK
CASE FR_HARMED_POP
IF eMissionStage < MS_CAMERA_TUTORIAL
BREAKOUT_SYNC_SCENE_SPOT_PLAYER()
ENDIF
sFailReason = "PAP2_FAILPOP" //~r~You harmed Poppy.
BREAK
//CASE FR_LEFT_AREA
// sFailReason = "PAP2_FAILAREA" //~r~You left the area.
//BREAK
CASE FR_CAR_DEAD
sFailReason = "PAP2_FAILCAR" //~r~Beverly's ride was wrecked.
BREAK
CASE FR_WANTED
sFailReason = "PAP2_FAILWANT" //~r~You have attracted police attention.
BREAK
CASE FR_KILLED_SHAG
IF eMissionStage < MS_CAMERA_TUTORIAL
BREAKOUT_SYNC_SCENE_SPOT_PLAYER()
ENDIF
sFailReason = "PAP2_FAILKLOV" //~r~You killed Poppy's lover.
BREAK
CASE FR_HARMED_SHAG
IF eMissionStage < MS_CAMERA_TUTORIAL
BREAKOUT_SYNC_SCENE_SPOT_PLAYER()
ENDIF
sFailReason = "PAP2_FAILHLOV" //~r~You harmed Poppy's lover.
BREAK
CASE FR_LEFT_BUDDY
sFailReason = "PAP2_FAILLEFT" //~r~You left Beverly.
BREAK
CASE FR_TOOK_TOO_LONG
sFailReason = "PAP2_FAILONG" //~r~You took too long.
BREAK
CASE FR_BEV_LEFT_YOU
sFailReason = "PAP2_FAILHIND" //~r~Beverly left you behind.
BREAK
CASE FR_FOOTAGE_RUINED
sFailReason = "PAP2_FAILFR" //The footage was ruined.
BREAK
CASE FR_NONE
BREAK
ENDSWITCH
eMissionStage = MS_FAILED
eState = SS_INIT
ENDPROC
/// PURPOSE:
/// Creates a car for the player to use after passing the mission
PROC SPAWN_PLAYER_CAR_FOR_PASS()
IF NOT DOES_ENTITY_EXIST(viPassCar)
IF SPAWN_VEHICLE(viPassCar, mnFailCarForPlayer, << -84.9445, -570.4659, 35.8701 >>, 160.6980) //<< -103.2452, -625.9245, 35.1262 >>, 159.4764)
SK_PRINT ("LOADED... CAR")
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Sets up a stage requirment via a switch using an ENUM
/// Stage requirements include the hunter the saleform or the mission text etc.
/// PARAMS:
/// missionReq - The Enum of the required mission element e.g. RQ_TEXT
/// pos - The position the thing is spawned at - if no position is required the use vSafeVec
/// If spawning multiple things at once then have the postions already in the switch statement
/// as calling this func multiple times wont work as well with the other function that calls it
/// dir - This is the heading or direction you want the thing to face when spawned. Defaults to
/// 0.0
/// RETURNS:
/// TRUE when the thing required is created/loaded/setup or whatever.
///
FUNC BOOL SETUP_STAGE_REQUIREMENTS(MISSION_REQ missionReq,VECTOR pos, FLOAT dir=0.0)
INT iCounter = 0
SWITCH missionReq
CASE RQ_CUTSCENE
IF NOT HAS_THIS_CUTSCENE_LOADED("PAP_2_RCM_P2")
RC_REQUEST_CUTSCENE("PAP_2_RCM_P2")
WHILE NOT HAS_CUTSCENE_LOADED()
WAIT(0)
ENDWHILE
RETURN TRUE
ELSE
RETURN TRUE
ENDIF
BREAK
CASE RQ_BUDDY
IF IS_PED_UNINJURED(mBuddy.piPed)
IF NOT DOES_BLIP_EXIST(biBuddyBlip)
biBuddyBlip = CREATE_PED_BLIP(mBuddy.piPed,TRUE,TRUE)
ENDIF
SET_BLIP_SCALE(biBuddyBlip, BLIP_SIZE_PED)
SET_PED_CAN_ARM_IK(mBuddy.piPed,TRUE)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mBuddy.piPed, TRUE)
SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(mBuddy.piPed, FALSE)
STOP_PED_SPEAKING(mBuddy.piPed,TRUE)
DISABLE_PED_PAIN_AUDIO(mBuddy.piPed,TRUE)
SET_ENTITY_PROOFS(mBuddy.piPed,FALSE,FALSE,FALSE,TRUE,FALSE)
SAFE_TELEPORT_ENTITY(mBuddy.piPed, pos, dir)
ADD_PED_FOR_DIALOGUE(s_conversation_peds, 3, mBuddy.piPed, "BEVERLY")
ADD_PED_FOR_DIALOGUE(s_conversation_peds, 1, PLAYER_PED_ID(), "FRANKLIN")
WHILE NOT LOAD_PED_RECORDING(sBeverlyPedRecording2)
WAIT(0)
ENDWHILE
//SK_PRINT("TK************ BEV SETUP ************TK")
RETURN TRUE
ENDIF
RETURN FALSE
BREAK
CASE RQ_POPPY
IF SETUP_PED(mPoppy.piPed, pos, dir, mnPoppy, 0, "POPPY")
ADD_PED_FOR_DIALOGUE(s_conversation_peds, 6, mPoppy.piPed, "POPPY")
SET_PED_RELATIONSHIP_GROUP_HASH(mPoppy.piPed,relPoppyGroup)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mPoppy.piPed, TRUE)
SET_PED_COMBAT_ATTRIBUTES(mPoppy.piPed, CA_CAN_TAUNT_IN_VEHICLE, TRUE)
STOP_PED_SPEAKING(mPoppy.piPed,TRUE)
SET_PED_COMPONENT_VARIATION(mPoppy.piPed, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
SET_PED_COMPONENT_VARIATION(mPoppy.piPed, INT_TO_ENUM(PED_COMPONENT,2), 0, 0, 0) //(hair)
SET_PED_COMPONENT_VARIATION(mPoppy.piPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
#IF NOT IS_JAPANESE_BUILD
IF IS_REPLAY_IN_PROGRESS()
AND GET_REPLAY_MID_MISSION_STAGE() >= 2
SET_PED_COMPONENT_VARIATION(mPoppy.piPed, INT_TO_ENUM(PED_COMPONENT,4), 1, 0, 0) //(lowr)
ELSE
SET_PED_COMPONENT_VARIATION(mPoppy.piPed, INT_TO_ENUM(PED_COMPONENT,4), 2, 0, 0) //(lowr)
ENDIF
#ENDIF
#IF IS_JAPANESE_BUILD
SET_PED_COMPONENT_VARIATION(mPoppy.piPed, INT_TO_ENUM(PED_COMPONENT,4), 1, 0, 0) //(lowr)
#ENDIF
SET_PED_COMPONENT_VARIATION(mPoppy.piPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
SET_PED_LOD_MULTIPLIER(mPoppy.piPed,2.0)
//SK_PRINT("TK************ POPPY SETUP ************TK")
RETURN TRUE
ENDIF
RETURN FALSE
BREAK
CASE RQ_SHAGGER
IF SETUP_PED(mShagger.piPed, pos, dir, mnShagger, 0, "SHAGGER")
SET_PED_RELATIONSHIP_GROUP_HASH(mShagger.piPed,relPoppyGroup)
TASK_SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mShagger.piPed, TRUE)
SET_PED_COMBAT_ATTRIBUTES(mShagger.piPed, CA_CAN_TAUNT_IN_VEHICLE, TRUE)
SET_PED_COMBAT_ATTRIBUTES(mShagger.piPed, CA_USE_COVER, FALSE)
SET_PED_CONFIG_FLAG(mShagger.piPed, PCF_ForceControlledKnockout, TRUE)
SET_ENTITY_PROOFS(mShagger.piPed,FALSE,FALSE,FALSE,TRUE,FALSE)
#IF IS_JAPANESE_BUILD
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,0), 0, 1, 0) //(head)
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,2), 0, 1, 0) //(hair)
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 1, 0) //(lowr)
#ENDIF
#IF NOT IS_JAPANESE_BUILD
SET_PED_PROP_INDEX(mShagger.piPed, ANCHOR_EYES, 0)
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,0), 0, 0, 0) //(head)
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,2), 0, 0, 0) //(hair)
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,3), 0, 0, 0) //(uppr)
IF IS_REPLAY_IN_PROGRESS()
AND GET_REPLAY_MID_MISSION_STAGE() >= 2
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,4), 1, 0, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,6), 0, 0, 0) //(feet)
ELSE
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,4), 0, 0, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,6), 1, 0, 0) //(feet)
ENDIF
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,8), 0, 0, 0) //(accs)
#ENDIF
ADD_PED_FOR_DIALOGUE(s_conversation_peds, 7, mShagger.piPed, "pap2lover")
SET_PED_LOD_MULTIPLIER(mShagger.piPed,2.0)
//SK_PRINT("TK************ JUSTIN SETUP ************TK")
RETURN TRUE
ENDIF
RETURN FALSE
BREAK
CASE RQ_BODYGUARD
IF SETUP_PED(mBodyGuard.piPed, mBodyGuard.vPos, mBodyGuard.fDir, mnBodyGuards, 0, "BODYGUARD ")
SET_PED_SEEING_RANGE(mBodyGuard.piPed,50.0)
SET_PED_HEARING_RANGE(mBodyGuard.piPed,15.0)
SET_PED_ID_RANGE(mBodyGuard.piPed,20.0)
SET_PED_RELATIONSHIP_GROUP_HASH(mBodyGuard.piPed,relPoppyGroup)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mBodyGuard.piPed, TRUE)
SET_PED_DEFAULT_COMPONENT_VARIATION(mBodyGuard.piPed)
SET_PED_CONFIG_FLAG(mBodyGuard.piPed, PCF_ForceControlledKnockout, TRUE)
STOP_PED_SPEAKING(mBodyGuard.piPed,TRUE)
SET_PED_COMBAT_ATTRIBUTES(mBodyGuard.piPed, CA_USE_COVER, FALSE)
SET_ENTITY_PROOFS(mBodyGuard.piPed,FALSE,FALSE,FALSE,TRUE,FALSE)
//SK_PRINT("TK************ BODYGUARD SETUP ************TK")
RETURN TRUE
ENDIF
RETURN FALSE
BREAK
CASE RQ_BODYGUARD_CARS
FOR iCount = 0 TO (MAX_CARS-1)
IF iCount = 1
IF SPAWN_VEHICLE(viChaseCars[POPPY_CAR], mnBodyGuardChaseCar[POPPY_CAR], vBodyGuardCarPos[POPPY_CAR], fBodyGuardCarDir[POPPY_CAR])
SET_VEHICLE_MODEL_IS_SUPPRESSED(mnBodyGuardChaseCar[POPPY_CAR], TRUE)
IF IS_ENTITY_ALIVE(viChaseCars[POPPY_CAR])
SET_VEHICLE_COLOURS(viChaseCars[POPPY_CAR], 87,87) //78, 81, 87
SET_VEHICLE_EXTRA_COLOURS(viChaseCars[POPPY_CAR], 87,87)
SET_VEHICLE_CAN_LEAK_OIL(viChaseCars[POPPY_CAR], FALSE)
SET_VEHICLE_CAN_LEAK_PETROL(viChaseCars[POPPY_CAR], FALSE)
SET_VEHICLE_DOORS_LOCKED(viChaseCars[POPPY_CAR], VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
SET_ENTITY_PROOFS(viChaseCars[POPPY_CAR],FALSE,FALSE,FALSE,FALSE,FALSE)
SET_VEHICLE_NUMBER_PLATE_TEXT_INDEX(viChaseCars[POPPY_CAR], 0)
SET_VEHICLE_NUMBER_PLATE_TEXT(viChaseCars[POPPY_CAR],"P0PPYM14")
iCounter++
ENDIF
ENDIF
ELIF iCount = 2
IF SPAWN_VEHICLE(viChaseCars[SHAGGER_CAR], mnBodyGuardChaseCar[SHAGGER_CAR], vBodyGuardCarPos[SHAGGER_CAR], fBodyGuardCarDir[SHAGGER_CAR])
SET_VEHICLE_MODEL_IS_SUPPRESSED(mnBodyGuardChaseCar[SHAGGER_CAR], TRUE)
IF IS_ENTITY_ALIVE(viChaseCars[SHAGGER_CAR])
SET_VEHICLE_COLOURS(viChaseCars[SHAGGER_CAR], 0, 0)
SET_VEHICLE_EXTRA_COLOURS(viChaseCars[SHAGGER_CAR], 0, 0)
SET_VEHICLE_CAN_LEAK_OIL(viChaseCars[SHAGGER_CAR], FALSE)
SET_VEHICLE_CAN_LEAK_PETROL(viChaseCars[SHAGGER_CAR], FALSE)
SET_VEHICLE_DOORS_LOCKED(viChaseCars[SHAGGER_CAR], VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
SET_ENTITY_PROOFS(viChaseCars[SHAGGER_CAR],FALSE,FALSE,FALSE,FALSE,FALSE)
iCounter++
ENDIF
ENDIF
ELSE
IF SPAWN_VEHICLE(viChaseCars[BODYGUARD_CAR], mnBodyGuardChaseCar[BODYGUARD_CAR], vBodyGuardCarPos[BODYGUARD_CAR], fBodyGuardCarDir[BODYGUARD_CAR])
SET_VEHICLE_MODEL_IS_SUPPRESSED(mnBodyGuardChaseCar[BODYGUARD_CAR], TRUE)
IF IS_ENTITY_ALIVE(viChaseCars[BODYGUARD_CAR])
SET_VEHICLE_DOORS_LOCKED(viChaseCars[BODYGUARD_CAR], VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
SET_VEHICLE_CAN_LEAK_OIL(viChaseCars[BODYGUARD_CAR], FALSE)
SET_VEHICLE_CAN_LEAK_PETROL(viChaseCars[BODYGUARD_CAR], FALSE)
SET_VEHICLE_COLOURS(viChaseCars[BODYGUARD_CAR], 0, 0)
SET_VEHICLE_EXTRA_COLOURS(viChaseCars[BODYGUARD_CAR], 0, 0)
SET_ENTITY_PROOFS(viChaseCars[BODYGUARD_CAR],FALSE,FALSE,FALSE,FALSE,FALSE)
iCounter++
ENDIF
ENDIF
ENDIF
IF iCounter = (MAX_CARS)
//SK_PRINT("TK************ VEHICLES SETUP ************TK")
RETURN TRUE
ENDIF
ENDFOR
RETURN FALSE
BREAK
CASE RQ_HOTEL_STAFF
MODEL_NAMES modName
modName = DUMMY_MODEL_FOR_SCRIPT
FOR iCount = 0 TO (MAX_STAFF - 1)
IF iCount = 0
modName = mnHotelStaff[0]
ELSE
modName = mnHotelStaff[1]
ENDIF
IF modName <> DUMMY_MODEL_FOR_SCRIPT
IF SETUP_PED(mHotelStaff[iCount].piPed, mHotelStaff[iCount].vPos, mHotelStaff[iCount].fDir, modName, iCount, "HOTEL STAFF ")
IF iCount = 0
TASK_USE_MOBILE_PHONE(mHotelStaff[0].piPed, TRUE)
ADD_PED_FOR_DIALOGUE(s_conversation_peds, 4, mHotelStaff[iCount].piPed, "Pap2Maid")
ELSE
ADD_PED_FOR_DIALOGUE(s_conversation_peds, 5, mHotelStaff[iCount].piPed, "Pap2BusBoy")
ENDIF
SET_PED_RELATIONSHIP_GROUP_HASH(mHotelStaff[iCount].piPed,relPoppyGroup)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mHotelStaff[iCount].piPed, TRUE)
iCounter++
IF iCounter >= (MAX_STAFF)
//SK_PRINT("TK************ HOTEL STAFF SETUP ************TK")
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDFOR
BREAK
CASE RQ_BROOM
IF IS_PED_UNINJURED(mHotelStaff[1].piPed)
IF SPAWN_OBJECT(oiBroom, PROP_TOOL_BROOM, mHotelStaff[1].vPos)
IF NOT IS_ENTITY_DEAD(oiBroom)
ATTACH_ENTITY_TO_ENTITY(oiBroom, mHotelStaff[1].piPed, GET_PED_BONE_INDEX(mHotelStaff[1].piPed, BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
IF IS_ENTITY_ATTACHED(oiBroom)
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE RQ_RAG
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
IF SPAWN_OBJECT(oiWindowRag, PROP_RAG_01, mHotelStaff[0].vPos)
IF NOT IS_ENTITY_DEAD(oiWindowRag)
ATTACH_ENTITY_TO_ENTITY(oiWindowRag, mHotelStaff[0].piPed, GET_PED_BONE_INDEX(mHotelStaff[0].piPed, BONETAG_PH_R_HAND), << 0.0, 0.0, 0.0 >>, << 0.0, 0.0, 0.0 >>)
IF IS_ENTITY_ATTACHED(oiWindowRag)
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE RQ_PLAYER_CAR
IF SPAWN_VEHICLE(viPlayerCar, mnPlayerCar, pos,dir)
SET_VEHICLE_AS_RESTRICTED(viPlayerCar,0)
IF IS_ENTITY_ALIVE(viPlayerCar)
SET_VEHICLE_MODEL_IS_SUPPRESSED(mnPlayerCar, TRUE)
SET_VEHICLE_COLOUR_COMBINATION(viPlayerCar,7)
SET_VEHICLE_CAN_LEAK_OIL(viPlayerCar, FALSE)
SET_VEHICLE_CAN_LEAK_PETROL(viPlayerCar, FALSE)
SET_VEHICLE_NUMBER_PLATE_TEXT_INDEX(viPlayerCar, 0)
SET_VEHICLE_NUMBER_PLATE_TEXT(viPlayerCar,"P4P4R4Z0")
SET_ENTITY_PROOFS(viPlayerCar,FALSE,FALSE,FALSE,FALSE,FALSE)
IF eMissionStage <> MS_GET_IN_ESCAPE_CAR
SET_VEHICLE_DOORS_LOCKED(viPlayerCar, VEHICLELOCK_LOCKOUT_PLAYER_ONLY)
ENDIF
//SK_PRINT("TK************ PLAYER CAR SETUP ************TK")
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
BREAK
CASE RQ_ANIMS
REQUEST_ANIM_DICT("rcmpaparazzo_2")
#IF NOT IS_JAPANESE_BUILD
REQUEST_MODEL(Prop_NPC_Phone)
IF HAS_ANIM_DICT_LOADED("rcmpaparazzo_2")
AND HAS_MODEL_LOADED(Prop_NPC_Phone)
RETURN TRUE
ENDIF
#ENDIF
#IF IS_JAPANESE_BUILD
IF HAS_ANIM_DICT_LOADED("rcmpaparazzo_2")
RETURN TRUE
ENDIF
#ENDIF
RETURN FALSE
BREAK
CASE RQ_STAFF_ANIMS
RETURN TRUE
BREAK
CASE RQ_BEV_PED_RECORDING
IF LOAD_PED_RECORDING(sBeverlyPedRecording)
//SK_PRINT("TK************ WAYPOINTREC LOADED ************TK")
RETURN TRUE
ENDIF
//SK_PRINT("TK************ WAYPOINTREC LOAD FAILED! ************TK")
RETURN FALSE
BREAK
CASE RQ_CAMERA_WALK
IF SETUP_CAMERA(TRUE)
//SK_PRINT("TK************ WALK CAM SETUP ************TK")
RETURN TRUE
ENDIF
RETURN FALSE
BREAK
CASE RQ_CAMERA
IF SETUP_CAMERA(FALSE)
//SK_PRINT("TK************ CAM SETUP ************TK")
RETURN TRUE
ENDIF
RETURN FALSE
BREAK
CASE RQ_CAMERA_CUTSCENE
IF NOT DOES_CAM_EXIST(camMain)
camMain = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", pos, <<0,0, dir>>, 50, TRUE)
IF DOES_CAM_EXIST(camMain)
//SK_PRINT("TK************ CUTSCENE CAM SETUP ************TK")
RETURN TRUE
ENDIF
ELSE
RETURN TRUE
ENDIF
RETURN FALSE
BREAK
CASE RQ_SPRITES
REQUEST_STREAMED_TEXTURE_DICT("helicopterhud")
IF HAS_STREAMED_TEXTURE_DICT_LOADED("helicopterhud")
//SK_PRINT("TK************ HUD SETUP ************TK")
RETURN TRUE
ENDIF
BREAK
CASE RQ_OUTRO_ANIMS
REQUEST_ANIM_DICT("veh@std@ds@base")
IF HAS_ANIM_DICT_LOADED("veh@std@ds@base")
RETURN TRUE
ENDIF
RETURN FALSE
BREAK
CASE RQ_UBER_PLAYER_CAR_REC
REQUEST_VEHICLE_RECORDING(1, "PAP2UBA")
IF HAS_VEHICLE_RECORDING_BEEN_LOADED(1,"PAP2UBA")
IF IS_ENTITY_ALIVE(viPlayerCar)
SET_ENTITY_COORDS(viPlayerCar, vPlayerCarStartPos)
SET_ENTITY_QUATERNION(viPlayerCar, -0.0022, -0.0289, 0.7901, -0.6123)
//SK_PRINT("TK************ PLAYER CARREC SETUP ************TK")
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
BREAK
CASE RQ_POPPY_CAR_REC
REQUEST_VEHICLE_RECORDING(101,"PAP2UBA")
IF HAS_VEHICLE_RECORDING_BEEN_LOADED(101,"PAP2UBA")
IF IS_ENTITY_ALIVE(viChaseCars[POPPY_CAR])
SET_ENTITY_COORDS(viChaseCars[POPPY_CAR], << -61.5790, 337.5999, 111.1908 >>)
SET_ENTITY_QUATERNION(viChaseCars[POPPY_CAR], -0.0013, -0.0482, 0.9656, 0.2557)
//SK_PRINT("TK************ POPPY CARREC SETUP ************TK")
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
BREAK
CASE RQ_BODYGUARD_1_REC
REQUEST_VEHICLE_RECORDING(102,"PAP2UBA")
IF HAS_VEHICLE_RECORDING_BEEN_LOADED(102,"PAP2UBA")
IF IS_ENTITY_ALIVE(viChaseCars[SHAGGER_CAR])
SET_ENTITY_COORDS(viChaseCars[SHAGGER_CAR], << -62.3523, 322.6747, 109.7139 >>)
SET_ENTITY_QUATERNION(viChaseCars[SHAGGER_CAR], -0.0230, -0.0644, 0.9756, 0.2086)
//SK_PRINT("TK************ BODYGUARD1 CARREC SETUP ************TK")
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
BREAK
CASE RQ_BODYGUARD_2_REC
REQUEST_VEHICLE_RECORDING(103,"PAP2UBA")
IF HAS_VEHICLE_RECORDING_BEEN_LOADED(103,"PAP2UBA")
IF IS_ENTITY_ALIVE(viChaseCars[BODYGUARD_CAR])
SET_ENTITY_COORDS(viChaseCars[BODYGUARD_CAR], <<-68.0034, 309.4698, 107.7925>>)
SET_ENTITY_QUATERNION(viChaseCars[BODYGUARD_CAR], -0.0176, -0.0678, 0.9756, 0.2082)
//SK_PRINT("TK************ BODYGUARD2 CARREC SETUP ************TK")
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
BREAK
CASE RQ_UBER_CAR_RECORDING
IF IS_ENTITY_ALIVE(viPlayerCar)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
IF IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
#IF IS_DEBUG_BUILD
INIT_UBER_RECORDING("PAP2UBA")
iRecordingProgress++
//SK_PRINT("TK************ UBER CARREC SETUP ************TK")
RETURN TRUE
#ENDIF
ENDIF
ENDIF
RETURN FALSE
BREAK
CASE RQ_POPPY_RECORDING
REQUEST_VEHICLE_RECORDING(1, "PAP2UBA")
IF HAS_VEHICLE_RECORDING_BEEN_LOADED(1, "PAP2UBA")
AND REQUEST_AND_CHECK_MODEL(mnBodyGuardChaseCar[0], "POPPY CAR")
IF SPAWN_VEHICLE(viChaseCars[POPPY_CAR],mnBodyGuardChaseCar[0], << -61.5607, 337.6627, 110.5456 >>, 150.2983)
IF IS_ENTITY_ALIVE(viChaseCars[POPPY_CAR])
AND IS_ENTITY_ALIVE(viPlayerCar)
IF IS_PED_UNINJURED(PLAYER_PED_ID()) AND IS_PED_UNINJURED(mBuddy.piPed)
SET_PED_INTO_VEHICLE(mBuddy.piPed, viPlayerCar)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), viChaseCars[POPPY_CAR])
IF IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viChaseCars[POPPY_CAR])
AND IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
//SK_PRINT("TK************ POPPY UBER CARREC SETUP ************TK")
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
BREAK
CASE RQ_SET_PEICE_RECORDING
IF IS_ENTITY_ALIVE(viPlayerCar)
IF IS_PED_UNINJURED(mBuddy.piPed)
SET_PED_INTO_VEHICLE(mBuddy.piPed, viPlayerCar)
IF IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
RETURN TRUE
ENDIF
ENDIF
ENDIF
BREAK
CASE RQ_CHASE_SOUNDS
IF NOT bDumpedBank
RETURN TRUE
ENDIF
IF REQUEST_SCRIPT_AUDIO_BANK("SCRIPT\\PAPARAZZO_02_A")
AND REQUEST_SCRIPT_AUDIO_BANK("SCRIPT\\PAPARAZZO_02_B")
AND REQUEST_SCRIPT_AUDIO_BANK("SCRIPT\\PAPARAZZO_02_C")
//SK_PRINT("TK************ SOUNDS SETUP ************TK")
RETURN TRUE
ENDIF
BREAK
CASE RQ_TEXT
REQUEST_ADDITIONAL_TEXT("PAP2", MISSION_TEXT_SLOT)
//REQUEST_ADDITIONAL_TEXT("PAP2AUD", MISSION_DIALOGUE_TEXT_SLOT)
IF HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
//AND HAS_ADDITIONAL_TEXT_LOADED(MISSION_DIALOGUE_TEXT_SLOT)
RETURN TRUE
ENDIF
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Used to setup a mission stage(or state if you call it that) Uses a switch statement to pick which
/// set of SETUP_STAGE_REQUIREMENTS() to call. It checks to see if all the stage requirements are
/// setup and then does any other setup needed. such as setting the players position or switching a
/// bool to true or false etc.
/// Handles setting up stuff needed after a Z or p skip first then the normal setup takes place
/// PARAMS:
/// eStage - The mission state/stage that needs setting up
/// bJumped - Wether or not the state/stage has been jumped to using Z or P skips
/// RETURNS:
/// TRUE if everything required for a stage is loaded properly
FUNC BOOL SETUP_MISSION_STAGE(MISSION_STAGE eStage, BOOL bJumped = FALSE)
SWITCH eStage
CASE MS_INIT
IF bJumped //If we have jumped to this stage set up everything that might of been cleared buy the jump to funtions
bJumpSkip = FALSE // everything has been setup that is not key to this stage but is required to carry the mission on from this stage so reset the jump flag
RC_END_Z_SKIP()
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_TEXT, vSafeVec)
//AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_HOTEL_STAFF, vSafeVec)
//AND SETUP_STAGE_REQUIREMENTS(RQ_CHASE_SOUNDS, vSafeVec)
AND REQUEST_SCRIPT_AUDIO_BANK("PAPARAZZO_02_INTRO")
RETURN TRUE //all mission stage requirements set up return true and activate stage
ENDIF
ENDIF
BREAK
CASE MS_INTRO
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_CUTSCENE, vSafeVec)
//AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_HOTEL_STAFF, vSafeVec)
//AND SETUP_STAGE_REQUIREMENTS(RQ_CHASE_SOUNDS, vSafeVec)
AND REQUEST_SCRIPT_AUDIO_BANK("PAPARAZZO_02_INTRO")
RESET_MISSION_FLOW_VARS()
IF IS_PED_UNINJURED(mBuddy.piPed)
ALTER_STEALTH(mBuddy.piPed, FALSE)
ENDIF
bJumpSkip = FALSE
RC_END_Z_SKIP()
ENDIF
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, m_vCharPos, m_fCharHeading)
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-10.662442,283.070343,110.237289>>, <<-76.664360,301.181580,104.585754>>, 6.000000,<<-88.6147, 303.8292, 105.9208>>, 245.3452)
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-86.616211,297.277191,102.943222>>, <<-55.158104,286.539825,109.669701>>, 16.750000,<<-88.6147, 303.8292, 105.9208>>, 245.3452)
SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(<<0,0,0>>,0,TRUE,CHAR_FRANKLIN)
RC_START_CUTSCENE_MODE(m_vCharPos,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE)
iTimerStartStage = GET_GAME_TIMER()
RETURN TRUE
ENDIF
ENDIF
BREAK
CASE MS_FOLLOW_BEV_ROAD
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, m_vCharPos, 124)
AND SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
//AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_HOTEL_STAFF, vSafeVec)
//AND SETUP_STAGE_REQUIREMENTS(RQ_CHASE_SOUNDS, vSafeVec)
AND REQUEST_SCRIPT_AUDIO_BANK("PAPARAZZO_02_INTRO")
REPOSITION_SHAG_TABLE()
IF NOT IS_REPLAY_BEING_SET_UP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-72.5612, 298.2493, 105.2336>>, 247.2199)
ENDIF
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(),FALSE)
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
KILL_ANY_CONVERSATION()
RESET_MISSION_FLOW_VARS()
CLEAR_AREA_OF_PEDS(<<-73.9858, 299.3878, 105.4073>>, 80.0)// Area at start
IF IS_PED_UNINJURED(mBuddy.piPed)
ALTER_STEALTH(mBuddy.piPed, FALSE)
SAFE_TELEPORT_ENTITY(mBuddy.piPed, <<-70.7533, 299.0078, 105.3157>>, 247.7592,TRUE)
TASK_FOLLOW_NAV_MESH_TO_COORD(mBuddy.piPed,<<-60.9116, 295.3501, 105.0975>>,1)
ENDIF
CLEAR_PED_TASKS(PLAYER_PED_ID())
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(),<<-70.9722, 297.7738, 105.2184>>, 247.6793,TRUE)
TASK_FOLLOW_NAV_MESH_TO_COORD(PLAYER_PED_ID(),<<-63.1068, 294.9655, 105.0442>>,PEDMOVEBLENDRATIO_WALK,-1,1,ENAV_NO_STOPPING | ENAV_DONT_AVOID_PEDS | ENAV_DONT_AVOID_OBJECTS)
bJumpSkip = FALSE
END_REPLAY_SETUP()
CLEAR_PED_WETNESS(PLAYER_PED_ID())
RC_END_Z_SKIP(TRUE,FALSE)
iTimerStartStage = GET_GAME_TIMER()
bDoDelayedfade = TRUE
ENDIF
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_HOTEL_STAFF, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_STAFF_ANIMS, vSafeVec)
AND REQUEST_SCRIPT_AUDIO_BANK("PAPARAZZO_02_INTRO")
iTimerStartStage = GET_GAME_TIMER()
RETURN TRUE
ENDIF
ENDIF
BREAK
CASE MS_FOLLOW_BEV_GUARDS
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, << -13.3842, 282.4926, 107.2337 >>, 257.8720)
AND SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
//AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_HOTEL_STAFF, vSafeVec)
//AND SETUP_STAGE_REQUIREMENTS(RQ_CHASE_SOUNDS, vSafeVec)
AND REQUEST_SCRIPT_AUDIO_BANK("PAPARAZZO_02_INTRO")
REPOSITION_SHAG_TABLE()
IF NOT IS_REPLAY_BEING_SET_UP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), << -14.1493, 280.7966, 107.2078 >>, 317.7051)
ENDIF
KILL_ANY_CONVERSATION()
RESET_MISSION_FLOW_VARS()
iBevRoute = ROUTE_STAIRS_1_TOP
IF IS_PED_UNINJURED(mBuddy.piPed)
ALTER_STEALTH(mBuddy.piPed, FALSE)
ENDIF
bJumpSkip = FALSE
RC_END_Z_SKIP()
ENDIF
ELSE
iTimerStartStage = GET_GAME_TIMER()
RETURN TRUE
ENDIF
BREAK
CASE MS_FOLLOW_TO_POPPY
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, << -3.2270, 318.2857, 109.9195 >>, 63.3365)
AND SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
//AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_HOTEL_STAFF, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_POPPY, mPoppy.vPos, mPoppy.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_SHAGGER, mShagger.vPos, mShagger.fDir)
//AND SETUP_STAGE_REQUIREMENTS(RQ_CHASE_SOUNDS, vSafeVec)
AND REQUEST_SCRIPT_AUDIO_BANK("PAPARAZZO_02_INTRO")
REPOSITION_SHAG_TABLE()
IF NOT IS_REPLAY_BEING_SET_UP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), << -2.2002, 317.2632, 109.9189 >>, 60.7242)
ENDIF
SAFE_TELEPORT_ENTITY(mHotelStaff[0].piPed, << 11.2819, 324.9571, 109.9188 >>, 252.0409)
SAFE_TELEPORT_ENTITY(mHotelStaff[1].piPed, << 12.4255, 323.3313, 109.9188 >>, 54.7387)
KILL_ANY_CONVERSATION()
RESET_MISSION_FLOW_VARS()
iBevRoute = ROUTE_POOL_STAIRS
IF IS_PED_UNINJURED(mBuddy.piPed)
ALTER_STEALTH(mBuddy.piPed, FALSE)
ENDIF
RC_END_Z_SKIP()
bJumpSkip = FALSE
ENDIF
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_SPRITES, vSafeVec)
//AND REQUEST_SCRIPT_AUDIO_BANK("PAPARAZZO_02_INTRO")
bCanCreatePoppy = TRUE
bCanCreateProps = TRUE
bExpireStaffSpeech = TRUE
iTimerStartStage = GET_GAME_TIMER()
RETURN TRUE
ENDIF
ENDIF
BREAK
CASE MS_CAMERA_TUTORIAL
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, << -36.7532, 323.5341, 111.6957 >>, 165.7917)
AND SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_POPPY, mPoppy.vPos, mPoppy.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_SHAGGER, mShagger.vPos, mShagger.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_ANIMS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_SPRITES, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_CAMERA_WALK, vSafeVec)
//AND SETUP_STAGE_REQUIREMENTS(RQ_CHASE_SOUNDS, vSafeVec)
IF bSetAudioPos = FALSE
END_REPLAY_SETUP()
#IF NOT IS_JAPANESE_BUILD
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
STOP_SYNCHRONIZED_AUDIO_EVENT(poppy_shagging_scene2)
//STOP_STREAM()
ENDIF
//INIT_SYNCH_SCENE_AUDIO_WITH_POSITION("PAP2_IG1_POPPYSEX",<<-30.990408,301.092346,112.681885>>)
IF IS_ENTITY_ALIVE(mPoppy.piPed)
INIT_SYNCH_SCENE_AUDIO_WITH_ENTITY("PAP2_IG1_POPPYSEX",mPoppy.piPed)
ENDIF
#ENDIF
SK_PRINT("TK************ SETTING SYNCH SCENE AUDIO POSITION THIS FRAME ************TK")
bSetAudioPos = TRUE
ENDIF
#IF NOT IS_JAPANESE_BUILD
IF PREPARE_SYNCHRONIZED_AUDIO_EVENT("PAP2_IG1_POPPYSEX",0)
//IF LOAD_STREAM("CUTSCENES_PAP2_IG1_POPPYSEX_CENTER")
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
CLEAR_PED_WETNESS(PLAYER_PED_ID())
IF NOT IS_REPLAY_BEING_SET_UP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-33.6810, 320.9442, 111.6958>>, 182.6031)
ENDIF
//END_REPLAY_SETUP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(),<<-33.8491, 319.3350, 111.6960>>,184.4715)
TASK_PLAY_ANIM(PLAYER_PED_ID(),"rcmpaparazzo_2","idle_d",INSTANT_BLEND_IN,INSTANT_BLEND_OUT,-1,AF_LOOPING,0.4)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
//TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED_ID(),<<-33.1290, 318.9112, 111.6962>>,-1,TRUE,0,TRUE,FALSE,NULL)
WAIT(2000)
RESET_MISSION_FLOW_VARS()
REQUEST_ANIM_DICT("rcmpaparazzo_2")
REQUEST_CLIP_SET(sWeaponMoveClipset)
REQUEST_CLIP_SET(sWeaponMoveClipsetFrank)
iCoverSeq = 1
DO_PLAYER_HOLDING_CAMERA()
REPOSITION_SHAG_TABLE()
PLAY_POPPY_SHAGGER_ANIM(1)
SETUP_CAMERA(TRUE)
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
MANAGE_CAMERA(TRUE)
IF DOES_CAM_EXIST(camMain)
AND IS_PED_UNINJURED(mPoppy.piPed)
POINT_CAM_AT_ENTITY(camMain,mPoppy.piPed, vSafeVec)
ENDIF
TRIGGER_MUSIC_EVENT("PAP2_START")
bJumpSkip = FALSE
ELSE
SK_PRINT("TK************ PREPARE_SYNCHRONIZED_AUDIO_EVENT FAILED! ************TK")
ENDIF
#ENDIF
#IF IS_JAPANESE_BUILD
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
CLEAR_PED_WETNESS(PLAYER_PED_ID())
//IF NOT IS_REPLAY_BEING_SET_UP()
// SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-33.6810, 320.9442, 111.6958>>, 182.6031)
//ENDIF
END_REPLAY_SETUP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(),<<-33.8491, 319.3350, 111.6960>>,184.4715)
TASK_PLAY_ANIM(PLAYER_PED_ID(),"rcmpaparazzo_2","idle_d",INSTANT_BLEND_IN,INSTANT_BLEND_OUT,-1,AF_LOOPING,0.4)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
//TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED_ID(),<<-33.1290, 318.9112, 111.6962>>,-1,TRUE,0,TRUE,FALSE,NULL)
WAIT(2000)
RESET_MISSION_FLOW_VARS()
REQUEST_ANIM_DICT("rcmpaparazzo_2")
REQUEST_CLIP_SET(sWeaponMoveClipset)
REQUEST_CLIP_SET(sWeaponMoveClipsetFrank)
iCoverSeq = 1
DO_PLAYER_HOLDING_CAMERA()
REPOSITION_SHAG_TABLE()
PLAY_POPPY_SHAGGER_ANIM(1)
SETUP_CAMERA(TRUE)
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
MANAGE_CAMERA(TRUE)
IF DOES_CAM_EXIST(camMain)
AND IS_PED_UNINJURED(mPoppy.piPed)
POINT_CAM_AT_ENTITY(camMain,mPoppy.piPed, vSafeVec)
ENDIF
TRIGGER_MUSIC_EVENT("PAP2_START")
bJumpSkip = FALSE
#ENDIF
ENDIF
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_CAMERA_WALK, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_SPRITES, vSafeVec)
RETURN TRUE
ENDIF
ENDIF
BREAK
CASE MS_FILM_POPPY
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, << -36.7532, 323.5341, 111.6957 >>, 165.7917)
AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD, mBodyGuard.vPos)
AND SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos)
AND SETUP_STAGE_REQUIREMENTS(RQ_POPPY, mPoppy.vPos, mPoppy.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_SHAGGER, mShagger.vPos, mShagger.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_ANIMS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_SPRITES, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_CAMERA_WALK, vSafeVec)
//AND SETUP_STAGE_REQUIREMENTS(RQ_CHASE_SOUNDS, vSafeVec)
IF bSetAudioPos = FALSE
END_REPLAY_SETUP()
#IF NOT IS_JAPANESE_BUILD
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
STOP_SYNCHRONIZED_AUDIO_EVENT(poppy_shagging_scene2)
//STOP_STREAM()
ENDIF
//INIT_SYNCH_SCENE_AUDIO_WITH_POSITION("PAP2_IG1_POPPYSEX",<<-30.990408,301.092346,112.681885>>)
INIT_SYNCH_SCENE_AUDIO_WITH_ENTITY("PAP2_IG1_POPPYSEX",mPoppy.piPed)
#ENDIF
SK_PRINT("TK************ SETTING SYNCH SCENE AUDIO POSITION THIS FRAME ************TK")
bSetAudioPos = TRUE
ENDIF
#IF NOT IS_JAPANESE_BUILD
IF PREPARE_SYNCHRONIZED_AUDIO_EVENT("PAP2_IG1_POPPYSEX",0)
//IF LOAD_STREAM("CUTSCENES_PAP2_IG1_POPPYSEX_CENTER")
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
CLEAR_PED_WETNESS(PLAYER_PED_ID())
//IF NOT IS_REPLAY_BEING_SET_UP()
// SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-33.6810, 320.9442, 111.6958>>, 182.6031)
//ENDIF
//END_REPLAY_SETUP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(),<<-33.8491, 319.3350, 111.6960>>,184.4715)
TASK_PLAY_ANIM(PLAYER_PED_ID(),"rcmpaparazzo_2","idle_d",INSTANT_BLEND_IN,INSTANT_BLEND_OUT,-1,AF_LOOPING,0.4)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
//TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED_ID(),<<-33.1290, 318.9112, 111.6962>>,-1,TRUE,0,TRUE,FALSE,NULL)
WAIT(2000)
RESET_MISSION_FLOW_VARS()
DO_PLAYER_HOLDING_CAMERA()
REPOSITION_SHAG_TABLE()
PLAY_POPPY_SHAGGER_ANIM(1)
RESET_BOX_COL()
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
MANAGE_CAMERA(TRUE)
IF DOES_CAM_EXIST(camMain)
AND IS_PED_UNINJURED(mPoppy.piPed)
POINT_CAM_AT_ENTITY(camMain,mPoppy.piPed, vSafeVec)
ENDIF
TRIGGER_MUSIC_EVENT("PAP2_START")
SET_PLAYER_CONTROL(GET_PLAYER_INDEX(), FALSE)
bJumpSkip = FALSE
ELSE
SK_PRINT("TK************ PREPARE_SYNCHRONIZED_AUDIO_EVENT FAILED! ************TK")
ENDIF
#ENDIF
#IF IS_JAPANESE_BUILD
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
CLEAR_PED_WETNESS(PLAYER_PED_ID())
IF NOT IS_REPLAY_BEING_SET_UP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-33.6810, 320.9442, 111.6958>>, 182.6031)
ENDIF
END_REPLAY_SETUP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(),<<-33.8491, 319.3350, 111.6960>>,184.4715)
TASK_PLAY_ANIM(PLAYER_PED_ID(),"rcmpaparazzo_2","idle_d",INSTANT_BLEND_IN,INSTANT_BLEND_OUT,-1,AF_LOOPING,0.4)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
//TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED_ID(),<<-33.1290, 318.9112, 111.6962>>,-1,TRUE,0,TRUE,FALSE,NULL)
WAIT(2000)
RESET_MISSION_FLOW_VARS()
DO_PLAYER_HOLDING_CAMERA()
REPOSITION_SHAG_TABLE()
PLAY_POPPY_SHAGGER_ANIM(1)
RESET_BOX_COL()
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
MANAGE_CAMERA(TRUE)
IF DOES_CAM_EXIST(camMain)
AND IS_PED_UNINJURED(mPoppy.piPed)
POINT_CAM_AT_ENTITY(camMain,mPoppy.piPed, vSafeVec)
ENDIF
TRIGGER_MUSIC_EVENT("PAP2_START")
SET_PLAYER_CONTROL(GET_PLAYER_INDEX(), FALSE)
bJumpSkip = FALSE
#ENDIF
ENDIF
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_BEV_PED_RECORDING, vSafeVec)
IF IS_ENTITY_ALIVE(viPlayerCar)
SET_ENTITY_COORDS(viPlayerCar, vPlayerCarStartPos)
SET_ENTITY_QUATERNION(viPlayerCar, -0.0022, -0.0289, 0.7901, -0.6123)
ENDIF
eChaseConvo = CC_STAGE_1
RETURN TRUE
ENDIF
ENDIF
BREAK
CASE MS_GET_IN_ESCAPE_CAR
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, << -33.2434, 319.0200, 111.6952 >>, 154.2353)
AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_POPPY, mPoppy.vPos, mPoppy.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_SHAGGER, mShagger.vPos, mShagger.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_BEV_PED_RECORDING, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_CHASE_SOUNDS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_ANIMS, vSafeVec)
SAFE_TELEPORT_ENTITY(mBuddy.piPed, <<-36.5195, 326.0930, 111.6962>>, 187.1461)
CLEAR_PED_WETNESS(PLAYER_PED_ID())
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
IF NOT IS_REPLAY_BEING_SET_UP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-33.1227, 318.9001, 111.6958>>, 154.1067)
ENDIF
END_REPLAY_SETUP()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(),<<-33.8491, 319.3350, 111.6960>>,184.4715)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
//TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED_ID(),<<-33.1290, 318.9112, 111.6962>>,-1,TRUE,0,TRUE,FALSE,NULL)
#IF IS_JAPANESE_BUILD
SAFE_TELEPORT_ENTITY(mPoppy.piPed,<<-28.95, 300.81, 112.69>>,100.35)
SAFE_TELEPORT_ENTITY(mShagger.piPed,<<-29.87, 300.57, 112.69>>,-53.25)
PLAY_POPPY_SHAGGER_ANIM(1)
#ENDIF
WAIT(2000)
//SET_GAMEPLAY_CAM_RELATIVE_HEADING(32.2338)
//SET_GAMEPLAY_CAM_RELATIVE_PITCH(-13.3076)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(10.7485)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-9.8457)
KILL_ANY_CONVERSATION()
RESET_MISSION_FLOW_VARS()
DO_PLAYER_HOLDING_CAMERA()
BREAKOUT_SYNC_SCENE_SPOT_PLAYER()
#IF NOT IS_JAPANESE_BUILD
SET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene_breakout,fBreakoutPhase)
#ENDIF
DISPLAY_HUD(TRUE)
DISPLAY_RADAR(TRUE)
TRIGGER_MUSIC_EVENT("PAP2_SPOTTED_RESTART")
//TASK_PUT_PED_DIRECTLY_INTO_COVER(PLAYER_PED_ID(),<<-33.1290, 318.9112, 111.6962>>,-1,TRUE,0,TRUE,FALSE,NULL)
TASK_PLAY_ANIM(PLAYER_PED_ID(),"rcmpaparazzo_2","idle_d",INSTANT_BLEND_IN,SLOW_BLEND_OUT,-1,AF_DEFAULT,0.739)
WAIT(100)
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME,FALSE)
//SET_GAMEPLAY_CAM_RELATIVE_HEADING(32.2338)
//SET_GAMEPLAY_CAM_RELATIVE_PITCH(-13.3076)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(10.7485)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-9.8457)
bJumpSkip = FALSE
ENDIF
ELSE
IF NOT DOES_BLIP_EXIST(biBuddyBlip)
biBuddyBlip = CREATE_PED_BLIP(mBuddy.piPed,TRUE,TRUE)
ENDIF
IF IS_ENTITY_ALIVE(viPlayerCar)
SET_VEHICLE_DOORS_LOCKED(viPlayerCar, VEHICLELOCK_UNLOCKED)
SAFELY_SET_VEHICLE_ON_GROUND_PROPERLY(viPlayerCar)
ENDIF
IF SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_POPPY_CAR_REC, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_UBER_PLAYER_CAR_REC, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_1_REC, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_SPRITES, vSafeVec)
iTimerStartStage = GET_GAME_TIMER()
IF IS_PED_UNINJURED(mBuddy.piPed)
ALTER_STEALTH(mBuddy.piPed, FALSE)
ENDIF
RETURN TRUE
ENDIF
ENDIF
BREAK
CASE MS_CAR_CHASE
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, m_vCharPos, 344.7485)
AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_POPPY, mPoppy.vPos, mPoppy.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_SHAGGER, mShagger.vPos, mShagger.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD, mBodyGuard.vPos, mBodyGuard.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_UBER_PLAYER_CAR_REC, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_POPPY_CAR_REC, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_1_REC, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_SPRITES, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_CHASE_SOUNDS, vSafeVec)
RESET_MISSION_FLOW_VARS()
SAFE_TELEPORT_ENTITY(mBuddy.piPed, m_vCharPos, 344.7485)
ADD_PED_FOR_DIALOGUE(s_conversation_peds, 3, mBuddy.piPed, "BEVERLY")
ADD_PED_FOR_DIALOGUE(s_conversation_peds, 1, PLAYER_PED_ID(), "FRANKLIN")
END_REPLAY_SETUP()
WARP_EVERYONE_TO_CARS_SKIP()
IF IS_ENTITY_ALIVE(viPlayerCar)
SET_ENTITY_QUATERNION(viPlayerCar, -0.0022, -0.0289, 0.7901, -0.6123)
ENDIF
IF NOT IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
SET_PED_INTO_VEHICLE(mBuddy.piPed, viPlayerCar)
ENDIF
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()),200,TRUE)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
iTimerPlayerInEscapeCar = GET_GAME_TIMER()
iTimerPlayerInEscapeCar = iTimerPlayerInEscapeCar + 1000
iPlaybackProgress = 0
WAIT(100)
CLEAR_AREA_OF_PEDS(<<-73.9858, 299.3878, 105.4073>>, 80.0)// Area at start
RC_END_Z_SKIP(FALSE,FALSE)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
TRIGGER_MUSIC_EVENT("PAP2_CAR_RESTART")
bJumpSkip = FALSE
ENDIF
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_CHASE_SOUNDS, vSafeVec)
SAFE_REMOVE_BLIP(biGOTO)
iTimerStartStage = GET_GAME_TIMER()
RETURN TRUE
ENDIF
ENDIF
BREAK
CASE MS_OUTRO
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, << -69.2061, -523.7703, 39.2051 >>, 163.9675)
RENDER_SCRIPT_CAMS(FALSE,FALSE)
END_REPLAY_SETUP()
IF NOT IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), viPlayerCar, VS_BACK_RIGHT)
ENDIF
IF NOT IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
SET_PED_INTO_VEHICLE(mBuddy.piPed, viPlayerCar)
ENDIF
REQUEST_CUTSCENE("pap_2_mcs_1")
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_MISSION, "**** Requested CS ****")
#ENDIF
IF IS_ENTITY_ALIVE(viPlayerCar)
SET_ENTITY_COORDS(viPlayerCar, << -69.2061, -523.7703, 39.2051 >>)
SET_ENTITY_HEADING(viPlayerCar, 163.9675)
ENDIF
RESET_MISSION_FLOW_VARS()
bJumpSkip = FALSE
ENDIF
ELSE
iTimerStartStage = GET_GAME_TIMER()
RETURN TRUE
ENDIF
BREAK
CASE MS_UBER_RECORD
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS,vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, m_vCharPos, 344.7485)
iPlaybackProgress = 0
RC_END_Z_SKIP()
bJumpSkip = FALSE
ENDIF
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, m_vCharPos, 344.7485)
AND SETUP_STAGE_REQUIREMENTS(RQ_UBER_CAR_RECORDING, vSafeVec)
IF NOT IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
TASK_WARP_PED_INTO_VEHICLE(mBuddy.piPed, viPlayerCar, VS_BACK_LEFT)
ENDIF
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
BREAK
CASE MS_POPPY_AND_UBA
IF bJumped
IF SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS,vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, m_vCharPos, 344.7485)
iPlaybackProgress = 0
RC_END_Z_SKIP()
bJumpSkip = FALSE
ENDIF
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, vAlleyPos)
AND SETUP_STAGE_REQUIREMENTS(RQ_POPPY_RECORDING, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_UBER_PLAYER_CAR_REC, vSafeVec)
IF IS_ENTITY_ALIVE(viPlayerCar)
SET_ENTITY_COORDS(viPlayerCar, vPlayerCarStartPos)
SET_ENTITY_QUATERNION(viPlayerCar, -0.0022, -0.0289, 0.7901, -0.6123)
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
BREAK
CASE MS_SET_PIECE_RECORDING
IF bJumped
SK_PRINT("JUMPED")
iPlaybackProgress = 0
RC_END_Z_SKIP()
bJumpSkip = FALSE
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_BUDDY, vAlleyPos)
AND SETUP_STAGE_REQUIREMENTS(RQ_UBER_PLAYER_CAR_REC, vSafeVec)
AND SETUP_STAGE_REQUIREMENTS(RQ_SET_PEICE_RECORDING, vSafeVec)
IF IS_ENTITY_ALIVE(viPlayerCar)
SET_ENTITY_COORDS(viPlayerCar, vPlayerCarStartPos)
SET_ENTITY_QUATERNION(viPlayerCar, -0.0022, -0.0289, 0.7901, -0.6123)
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
// ===========================================================================================================
// Termination
// ===========================================================================================================
// -----------------------------------------------------------------------------------------------------------
// Script Cleanup
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE:
/// Turn off the ambient services
PROC SERVICES_TOGGLE(BOOL bOn)
//Wanted
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, bOn)
ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, bOn)
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, bOn)
ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, bOn)
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, bOn)
SET_SCENARIO_TYPE_ENABLED("WORLD_HUMAN_PAPARAZZI", bOn)
IF bOn
SET_WANTED_LEVEL_MULTIPLIER(1.0)
SET_MAX_WANTED_LEVEL(5)
ELSE
SET_MAX_WANTED_LEVEL(1)
SET_WANTED_LEVEL_MULTIPLIER(1)
ENDIF
ENDPROC
/// PURPOSE:
/// Deletes all mission entities and any other clean up
PROC CLEANUP()
ENABLE_SELECTOR()
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
PRINTSTRING("STAGE CLEANUP") PRINTNL()
CLEANUP_HOTEL_PEDS()
IF IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
IF GET_VEHICLE_DOOR_LOCK_STATUS(viPlayerCar) = VEHICLELOCK_LOCKED_PLAYER_INSIDE
SET_VEHICLE_DOORS_LOCKED(viPlayerCar, VEHICLELOCK_UNLOCKED)
ENDIF
IF IS_PED_UNINJURED(PLAYER_PED_ID())
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), vPlayerStartPos, fPlayerDir)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(viPlayerCar)
SET_VEHICLE_MODEL_IS_SUPPRESSED(mnPlayerCar, FALSE)
SAFE_DELETE_VEHICLE(viPlayerCar)
ENDIF
IF IS_PED_UNINJURED(mBuddy.piPed)
CLEAR_PED_TASKS_IMMEDIATELY(mBuddy.piPed)
ENDIF
SAFE_DELETE_PED(mPoppy.piPed)
SAFE_DELETE_PED(mBodyGuard.piPed)
SAFE_DELETE_PED(mShagger.piPed)
FOR iCount=0 TO (MAX_STAFF-1)
SAFE_DELETE_PED(mHotelStaff[iCount].piPed)
ENDFOR
IF bReachedChase = FALSE
FOR iCount=0 TO (MAX_CARS-1)
IF DOES_ENTITY_EXIST(viChaseCars[iCount])
SET_VEHICLE_MODEL_IS_SUPPRESSED(mnBodyGuardChaseCar[iCount], FALSE)
IF IS_ENTITY_A_MISSION_ENTITY(viChaseCars[iCount])
SAFE_DELETE_VEHICLE(viChaseCars[iCount])
ENDIF
ENDIF
ENDFOR
ELSE
SET_VEHICLE_MODEL_IS_SUPPRESSED(mnBodyGuardChaseCar[iCount], FALSE)
ENDIF
IF NOT IS_STRING_NULL(sBeverlyPedRecording)
IF GET_IS_WAYPOINT_RECORDING_LOADED(sBeverlyPedRecording)
REMOVE_WAYPOINT_RECORDING(sBeverlyPedRecording)
ENDIF
ENDIF
IF NOT IS_STRING_NULL(sBeverlyPedRecording2)
IF GET_IS_WAYPOINT_RECORDING_LOADED(sBeverlyPedRecording2)
REMOVE_WAYPOINT_RECORDING(sBeverlyPedRecording2)
ENDIF
ENDIF
CLEANUP_CAMERA(TRUE)
CLEANUP_CAMERA(FALSE)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
CLEAR_PRINTS()
REMOVE_PED_FOR_DIALOGUE(s_conversation_peds, 0)
REMOVE_PED_FOR_DIALOGUE(s_conversation_peds, 1)
REMOVE_PED_FOR_DIALOGUE(s_conversation_peds, 2)
REMOVE_PED_FOR_DIALOGUE(s_conversation_peds, 3)
REMOVE_PED_FOR_DIALOGUE(s_conversation_peds, 4)
SAFE_REMOVE_BLIP(biGOTO)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(),TRUE)
CLEANUP_UBER_PLAYBACK(TRUE)
//SET_FOLLOW_VEHICLE_CAM_VIEW_MODE(CAM_VIEW_MODE_THIRD_PERSON)
ENDPROC
PROC Script_Cleanup()
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
STOP_SYNCHRONIZED_AUDIO_EVENT(poppy_shagging_scene2)
ENDIF
CLEAR_PED_NON_CREATION_AREA()
//CASCADE_SHADOWS_INIT_SESSION()
TRIGGER_MUSIC_EVENT("PAP2_FAIL")
// Ensure launcher is terminated
RC_CLEANUP_LAUNCHER()
ENABLE_SELECTOR()
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_NONE)
RESET_SCRIPT_GFX_ALIGN()
IF IS_PED_UNINJURED(PLAYER_PED_ID())
RESET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID())
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED_ID(),FALSE)
ENDIF
IF bStreamvolCreated = TRUE
STREAMVOL_DELETE(StreamVol)
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("PAPARAZZO_02_CHASE")
STOP_AUDIO_SCENE("PAPARAZZO_02_CHASE")
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("PAPARAZZO_02_INTRO")
STOP_AUDIO_SCENE("PAPARAZZO_02_INTRO")
ENDIF
SET_AMBIENT_ZONE_STATE("AZ_PAPARAZZO_02_AMBIENCE",FALSE,TRUE)
SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(),FALSE,-1)
SET_AUDIO_FLAG("DisableAbortConversationForRagdoll", FALSE)
REMOVE_SCENARIO_BLOCKING_AREA(mScenarioBlocker)
REMOVE_COVER_POINT(m_ciPap2) //For B*1819613
DISABLE_TAXI_HAILING(FALSE) //For B*1860244 - Blocking taxis during mission.
// If the mission was triggered then additional mission cleanup will be required.
IF (Random_Character_Cleanup_If_Triggered())
PRINTSTRING("...Random Character Script was triggered so additional cleanup required") PRINTNL()
IF (DOES_ENTITY_EXIST(mBuddy.piPed))
IF IS_PED_UNINJURED(mBuddy.piPed)
IF NOT IS_PED_IN_ANY_VEHICLE(mBuddy.piPed)
TASK_WANDER_STANDARD(mBuddy.piPed)
ENDIF
SET_PED_KEEP_TASK(mBuddy.piPed, TRUE)
ENDIF
SAFE_RELEASE_PED(mBuddy.piPed)
ENDIF
DELETE_SCRIPTED_TRAFFIC()
STOP_CUTSCENE_IMMEDIATELY()
SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(prop_ss1_14_garage_door,<<-62.22, 352.75, 113.01>>,FALSE)
STOP_SOUND(iZoomSound)
//SK_PRINT("TK************ STOP ZOOM SOUND ************")
ENABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_COVER)
SAFE_DELETE_OBJECT(ObjPhone)
SAFE_RELEASE_OBJECT(objPipe1)
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[0])
IF NOT IS_ENTITY_DEAD(sRCLauncherDataLocal.objID[0])
DELETE_OBJECT(sRCLauncherDataLocal.objID[0])
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(objCam)
IF NOT IS_ENTITY_DEAD(objCam)
DELETE_OBJECT(objCam)
ENDIF
ENDIF
//ENABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_CHARACTER_WHEEL)
REMOVE_SCENARIO_BLOCKING_AREA(sbiBuilders)
REMOVE_SCENARIO_BLOCKING_AREA(sbiPoppy)
REMOVE_SCENARIO_BLOCKING_AREA(sbiClipboardGuys)
CLEAR_WEATHER_TYPE_PERSIST()
IF DOES_ENTITY_EXIST(viPlayerCar)
SET_VEHICLE_MODEL_IS_SUPPRESSED(mnPlayerCar, FALSE)
SAFE_RELEASE_VEHICLE(viPlayerCar)
ENDIF
/*
IF DOES_ENTITY_EXIST(viPassCar)
SAFE_RELEASE_VEHICLE(viPassCar)
ENDIF
*/
IF DOES_ENTITY_EXIST(mShagger.piPed)
SAFE_RELEASE_PED(mShagger.piPed)
ENDIF
IF DOES_ENTITY_EXIST(mPoppy.piPed)
SAFE_RELEASE_PED(mPoppy.piPed)
ENDIF
IF DOES_ENTITY_EXIST(mBodyGuard.piPed)
SAFE_RELEASE_PED(mBodyGuard.piPed)
ENDIF
FOR iCount=0 TO (MAX_STAFF-1)
IF DOES_ENTITY_EXIST(mHotelStaff[iCount].piPed)
SAFE_RELEASE_PED(mHotelStaff[iCount].piPed)
ENDIF
ENDFOR
IF IS_VEHICLE_OK(viChaseCars[POPPY_CAR])
SET_VEHICLE_DOORS_LOCKED(viChaseCars[POPPY_CAR], VEHICLELOCK_UNLOCKED)
ENDIF
FOR iCount=0 TO (MAX_CARS-1)
IF DOES_ENTITY_EXIST(viChaseCars[iCount]) // NEEDS TO WORK WITH NEW INITAL SCENE STUFF
SET_VEHICLE_MODEL_IS_SUPPRESSED(mnBodyGuardChaseCar[iCount], FALSE)
IF IS_VEHICLE_OK(viChaseCars[iCount])
SET_VEHICLE_DOORS_LOCKED(viChaseCars[iCount],VEHICLELOCK_UNLOCKED)
ENDIF
//SAFE_RELEASE_VEHICLE(viChaseCars[iCount])
ENDIF
ENDFOR
IF DOES_ENTITY_EXIST(oiBroom)
SAFE_RELEASE_OBJECT(oiBroom)
ENDIF
IF DOES_ENTITY_EXIST(oiWindowRag)
SAFE_RELEASE_OBJECT(oiWindowRag)
ENDIF
REMOVE_RELATIONSHIP_GROUP(relPoppyGroup)
ENABLE_DISPATCH_SERVICE(DT_POLICE_AUTOMOBILE, TRUE)
ENABLE_DISPATCH_SERVICE(DT_POLICE_HELICOPTER, TRUE)
ENABLE_DISPATCH_SERVICE(DT_FIRE_DEPARTMENT, TRUE)
ENABLE_DISPATCH_SERVICE(DT_SWAT_AUTOMOBILE, TRUE)
ENABLE_DISPATCH_SERVICE(DT_AMBULANCE_DEPARTMENT, TRUE)
CLEAR_PED_NON_CREATION_AREA()
SERVICES_TOGGLE(TRUE)
CLEANUP()
UNREGISTER_SCRIPT_WITH_AUDIO()
ELSE
RC_CleanupSceneEntities(sRCLauncherDataLocal)
ENDIF
ENDPROC
/// PURPOSE:
/// Deletes any blips that are valid
PROC REMOVE_BLIPS()
SAFE_REMOVE_BLIP(biBuddyBlip)
SAFE_REMOVE_BLIP(biGOTO)
ENDPROC
/// PURPOSE:
/// Standard delete all function used the wait for fail state
/// Safe deletes all peds, props and vehicles
PROC DELETE_ALL()
INT i
//DELETE PEDS
SAFE_DELETE_PED(mBuddy.piPed)
SAFE_DELETE_PED(mPoppy.piPed)
SAFE_DELETE_PED(mShagger.piPed)
SAFE_DELETE_PED(mBodyGuard.piPed)
FOR i=0 TO (MAX_STAFF-1)
SAFE_DELETE_PED(mHotelStaff[i].piPed)
ENDFOR
//VEHICLES
IF bReachedChase = TRUE
FOR i=0 TO (MAX_CARS-1)
SAFE_DELETE_VEHICLE(viChaseCars[i])
ENDFOR
ENDIF
IF bReachedChase = TRUE
SAFE_DELETE_VEHICLE(viPlayerCar)
ENDIF
//OBJECTS
FOR i=0 TO (MAX_SEX_SCENE_PROPS-1)
SAFE_DELETE_OBJECT(mSexSceneProps[i].oiProp)
ENDFOR
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Script Pass
// -----------------------------------------------------------------------------------------------------------
/// PURPOSE:
/// Pass function calls cleanup and termination
/// if the player debug passes this function warps him to the end
/// of the chasem, it will then complete
PROC Script_Passed()
CLEAR_PRINTS()
KILL_ANY_CONVERSATION()
SAFE_REMOVE_BLIP(biGOTO)
SAFE_REMOVE_BLIP(biBuddyBlip)
// CREDIT_BANK_ACCOUNT(CHAR_FRANKLIN, BAAC_UNLOGGED_SMALL_ACTION, 500) // Initially requested on B*1237043 - Removed on request as B*1317037
//IF bReplayUsed = FALSE
IF bJumpedInPool
//INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(PAP2_POOL_JUMP)
ENDIF
IF bDeckedGuard
//INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(PAP2_SECURITY_GUARD_CAR_HIT)
ENDIF
//2271 my max score
iMaxRecogPercent = ROUND(TO_FLOAT(iFilmingStats) /2271.0 * 100)
IF iMaxRecogPercent > 100
iMaxRecogPercent = 100
ENDIF
//IF iMaxRecogPercent > 50
INFORM_MISSION_STATS_OF_INCREMENT(PAP2_FACE_RECOG_PERCENT,iMaxRecogPercent)
//ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_MISSION, "STATS FACE RECOG")
PRINTNL()
PRINTINT(iMaxRecogPercent)
#ENDIF
//ENDIF
IF bSkipPassMission
IF IS_SCREEN_FADED_OUT()
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), << -71.0875, -522.2567, 39.3243 >>, 255.9742)
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME,FALSE)
bSkipPassMission = FALSE
ENDIF
ELSE
Random_Character_Passed(CP_RAND_C_PAP2)
Script_Cleanup()
IF IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
TASK_LEAVE_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
ENDIF
TERMINATE_THIS_THREAD()
ENDIF
ENDPROC
/// PURPOSE:
/// Waits for the screen to fade out then updates failed reason
PROC FAILED_WAIT_FOR_FADE()
IF iSeqBadCamMissionFail <> 0
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
MANAGE_CAMERA()
ENDIF
SWITCH eState
CASE SS_INIT
CLEAR_PRINTS()
CLEAR_HELP()
TRIGGER_MUSIC_EVENT("PAP2_FAIL")
IF bPutCamInFranksHand = TRUE
SK_PRINT("TK bPutCamInFranksHand = TRUE")
IF DOES_ENTITY_EXIST(objCam)
SK_PRINT("TK CAM EXISTS")
DETACH_ENTITY(objCam)
ATTACH_ENTITY_TO_ENTITY(objCam, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
ENDIF
ENDIF
IF NOT HAS_SOUND_FINISHED(iZoomSound)
STOP_SOUND(iZoomSound)
ENDIF
REMOVE_BLIPS()
IF NOT IS_STRING_NULL_OR_EMPTY(sFailReason)
Random_Character_Failed_With_Reason(sFailReason)
ELSE
Random_Character_Failed()
ENDIF
eState = SS_ACTIVE
BREAK
CASE SS_ACTIVE
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
// Do a check here to see if we need to warp the player at all
// (only set the fail warp locations if we can't leave the player where he was)
// MISSION_FLOW_SET_FAIL_WARP_LOCATION(<< -107.4400, 314.5400, 107.7151 >>, 239.2000)
// SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION(<< -101.5398, 308.9274, 106.9288 >>, 241.0294)
DELETE_ALL()
Script_Cleanup()
TERMINATE_THIS_THREAD()
ELSE
//SET_IK_TARGET(PLAYER_PED_ID(),IK_PART_ARM_RIGHT,mBuddy.piPed,GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND),<<0,0,0>>,ITF_ARM_TARGET_WRT_POINTHELPER)
// not finished fading out
// you may want to handle dialogue etc here.
ENDIF
BREAK
ENDSWITCH
ENDPROC
//*************************************************************************************************************************************************
// :SETUP FUNCTIONS:
//*************************************************************************************************************************************************
/// PURPOSE:
/// Passes strings in to the array of sBadFilmLines
PROC POPULATE_BADFILM_LINES()
/*
sBadFilmLines[0] = "PAP2_ALAA"
sBadFilmLines[1] = "PAP2_ALAB"
sBadFilmLines[2] = "PAP2_ALAD"
sBadFilmLines[3] = "PAP2_ALAC"
*/
ENDPROC
/// PURPOSE:
/// Passes strings in to the array of sChaseConvoLines
PROC POPULATE_CHASE_CONVO_LINES()
/*
sChaseConvoLines[0] = "PAP2_CHASE2_1"
sChaseConvoLines[1] = "PAP2_CHASE2_2"
sChaseConvoLines[2] = "PAP2_CHASE2_3"
sChaseConvoLines[3] = "PAP2_CHASE2_4"
sChaseConvoLines[4] = "PAP2_CHASE2_5"
sChaseConvoLines[5] = "PAP2_CHASE2_6"
sChaseConvoLines[6] = "PAP2_CHASE2_7"
sChaseConvoLines[7] = "PAP2_CHASE2_8"
sChaseConvoLines[8] = "PAP2_CHASE2_9"
sChaseConvoLines[9] = "PAP2_CHASE2_10"
sChaseConvoLines[10] = "PAP2_CHASE2_11"
sChaseConvoLines[11] = "PAP2_CHASE2_12"
sChaseConvoLines[12] = "PAP2_CHASE2_13"
sChaseConvoLines[13] = "PAP2_CHASE2_14"
sChaseConvoLines[14] = "PAP2_CHASE2_15"
sChaseConvoLines[15] = "PAP2_CHASE2_16"
*/
ENDPROC
#IF IS_DEBUG_BUILD
/// PURPOSE:
/// Initalises the positions of the chase route
PROC CHASE_ROUTE()
vChaseRoute[0] = << -68.7154, 295.6518, 104.9243 >>
vChaseRoute[1] = << -11.9200, 274.6289, 107.2471 >>
vChaseRoute[2] = << 15.7054, 276.2363, 108.4940 >>
vChaseRoute[3] = << 47.0992, 299.9255, 109.7315 >>
vChaseRoute[4] = << 116.9425, 349.5923, 111.5336 >>
vChaseRoute[5] = << 213.7966, 357.8576, 105.0071 >>
vChaseRoute[6] = << 306.2962, 326.7704, 104.5107 >>
vChaseRoute[7] = << 394.2304, 304.7151, 102.0353 >>
vChaseRoute[8] = << 487.9755, 273.3113, 102.0741 >>
vChaseRoute[9] = << 565.4470, 244.4710, 102.1545 >>
vChaseRoute[10] = << 668.1558, 207.8624, 93.4267 >>
vChaseRoute[11] = << 664.5176, 180.0834, 91.9847 >>
vChaseRoute[12] = << 648.3553, 131.5264, 90.0370 >>
vChaseRoute[13] = << 624.1434, 68.8094, 89.0257 >>
vChaseRoute[14] = << 624.9630, 52.6268, 88.2900 >>
vChaseRoute[15] = << 642.0527, 36.8763, 86.0646 >>
vChaseRoute[16] = << 674.7148, 1.8389, 83.0225 >>
vChaseRoute[17] = << 561.0575, -85.5142, 67.2631 >>
vChaseRoute[18] = << 493.5237, -144.0617, 56.3878 >>
vChaseRoute[19] = << 416.6940, -135.0656, 63.6700 >>
vChaseRoute[20] = << 320.6953, -103.9111, 67.6914 >>
vChaseRoute[21] = << 270.8412, -116.1302, 68.4322 >>
vChaseRoute[22] = << 241.8702, -173.7106, 56.5527 >>
vChaseRoute[23] = << 215.7430, -253.0528, 52.0439 >>
vChaseRoute[24] = << 187.6513, -317.3376, 42.8785 >>
vChaseRoute[25] = << 151.8253, -346.5048, 43.3050 >>
vChaseRoute[26] = << 121.2551, -368.7065, 41.5393 >>
vChaseRoute[27] = << 99.3367, -386.6132, 40.2811 >>
vChaseRoute[28] = << 71.2662, -386.8159, 38.9204 >>
vChaseRoute[29] = << 61.8406, -407.3744, 38.9198 >>
vChaseRoute[30] = << 35.8686, -400.7651, 38.9213 >>
vChaseRoute[31] = << -2.8669, -400.0531, 38.3989 >>
vChaseRoute[32] = << -26.6296, -418.6472, 38.6388 >>
vChaseRoute[33] = << -104.7511, -606.8694, 35.0632 >>
ENDPROC
#ENDIF
/// PURPOSE:
/// Initialises the points that beverly follows on the way to poppy
PROC BEV_ROUTE()
//Point just in front of bevs car
vBevRoute[0] = << -70.2823, 298.6007, 105.2842 >>
//Point at the bottom of the stairs
vBevRoute[1] = << -12.8842, 283.1092, 107.2567 >>
//Point in the middle of the first stair set
vBevRoute[2] = << -9.7370, 286.8741, 108.4575 >>
//Point at the top of the stairs just before the opening to the courtyard
vBevRoute[3] = << -2.8843, 291.4941, 109.9209 >>
//Point just in front of the first archways
vBevRoute[4] = << 5.6191, 309.9637, 109.9198 >>
//Point through the two arch ways by the stair that lead to the pool area
vBevRoute[5] = << -4.6429, 318.5697, 109.9198 >>
//point across the pool by the last stair set by the house poppy is at
vBevRoute[6] = << -34.2534, 332.7881, 112.1618 >> //<< -36.0161, 333.0677, 112.1623 >>
//point looking at poppy
vBevRoute[7] = << -33.4322, 319.0293, 111.6957 >>
ENDPROC
/// PURPOSE:
/// Main dialogue array filler function
/// any new dialogue filler functions are put in here
/// keeps it tidy
PROC POPULATE_ALL_CONVOS()
POPULATE_BADFILM_LINES()
POPULATE_CHASE_CONVO_LINES()
ENDPROC
/// PURPOSE:
/// Initialises a new A_PROP struct and returns it so the global script variable
/// can be initalised. stops copy and pasting and looks tidier
/// PARAMS:
/// pos - The position the prop will be created at
/// rot - The rotation the prop will be created at
/// mod - The model to create
/// RETURNS:
/// An initalised A_PROP struct
FUNC A_PROP FILL_PROP(VECTOR pos, VECTOR rot, MODEL_NAMES mod)
A_PROP mReturnProp
mReturnProp.vPos = pos
mReturnProp.vRot = rot
mReturnProp.mnModle = mod
RETURN mReturnProp
ENDFUNC
/// PURPOSE:
/// Initiialises the prop array for the sex scene setup
/// The array is an array of A_PROP structs
PROC POPULATE_PROPS()
mSexSceneProps[0] = FILL_PROP( <<-27.414112,310.126892,111.71678>>, <<0.000000,-0.000000,0.000000>>, prop_bbq_5)
mSexSceneProps[1] = FILL_PROP( <<-31.384937,313.450836,111.70890>>, <<0.000000,-0.000000,0.000000>>, prop_cs_panties)
mSexSceneProps[2] = FILL_PROP( <<-32.917381,311.863129,112.08356>>, <<0.000000,0.001641,0.006936>>, prop_cs_panties_02)
mSexSceneProps[3] = FILL_PROP( <<-33.055721,311.614716,111.71154>>, <<0.000000,-2.880545,-1.247135>>, prop_boombox_01)
ENDPROC
///PURPOSE:
/// Populate the cop car models
PROC BODYGUARD_CAR_MODELS()
mnBodyGuardChaseCar[0] = RapidGT2
mnBodyGuardChaseCar[1] = landstalker
mnBodyGuardChaseCar[2] = landstalker
vBodyGuardCarPos[0] = << -61.5802, 337.5996, 111.1479 >>
fBodyGuardCarDir[0] = 157.8698
vBodyGuardCarPos[1] = << -62.3344, 322.6908, 109.2141 >>
fBodyGuardCarDir[1] = 155.9353
vBodyGuardCarPos[2] = << -68.0634, 309.3348, 107.2594 >>
fBodyGuardCarDir[2] = 155.9353
ENDPROC
/// PURPOSE:
/// Initialises a new MAID_WORK_POINT struct and returns it so the global script variable
/// can be initalised. stops copy and pasting and looks tidier
/// PARAMS:
/// pos - position the work point is at
/// dir - the direction to face when working at this point
/// state - the state the maid should enter when arriving at this point
/// RETURNS:
/// An initialised MAID_WORK_POINT
FUNC MAID_WORK_POINT FILL_MAID_WORK_POINT(VECTOR pos, FLOAT dir, MAID_AMBIENT_STATE state)
MAID_WORK_POINT mReturnPoint
mReturnPoint.vGOTO = pos
mReturnPoint.fFaceing = dir
mReturnPoint.eStateToEnter = state
RETURN mReturnPoint
ENDFUNC
/// PURPOSE:
/// Initialises the points that the hotel staff use when they enter their
/// ambient behaviour
PROC POPULATE_STAFF_WORK_POINTS()
mMaidWorkPoint[0] = FILL_MAID_WORK_POINT(<< 17.7501, 339.8129, 114.3926 >>, 157.8568, M_AMB_SMOKEING)
mMaidWorkPoint[1] = FILL_MAID_WORK_POINT(<< 21.1623, 341.5796, 114.3926 >>, 338.0048, M_AMB_WASHING_WINDOW)
mMaidWorkPoint[2] = FILL_MAID_WORK_POINT(<< 38.4316, 340.2473, 114.3926 >>, 66.9258, M_AMB_WASHING_WINDOW)
mMaidWorkPoint[3] = FILL_MAID_WORK_POINT(<< 11.1311, 327.7826, 109.9198 >>, 110.9247, M_AMB_WASHING_WINDOW)
mMaidWorkPoint[4] = FILL_MAID_WORK_POINT(<< 22.3298, 305.7970, 109.9198 >>, 255.7478, M_AMB_SMOKEING)
vBoyWorkPoint[0] = << 1.7382, 301.8018, 109.9198 >>
vBoyWorkPoint[1] = << 19.2729, 326.7421, 109.9198 >>
vBoyWorkPoint[2] = << 12.4255, 323.3313, 109.9188 >>
ENDPROC
///PURPOSE:
/// Populate All Peds
PROC POPULATE_PEDS()
mPoppy.vPos = << -30.5144, 308.4476, 111.6949 >> //<< -49.7213, 355.3630, 112.0601 >>
mPoppy.fDir = 50.6254 //248.7763
mShagger.vPos = << -31.5840, 306.8474, 111.6949 >> //<< -48.7962, 356.5141, 112.0601 >>
mShagger.fDir = 21.4212 //113.0651
mHotelStaff[0].vPos = << 1.1046, 300.3212, 109.9190 >> //<< -48.3062, 352.5123, 112.0579 >> //<< -61.0610, 357.8770, 112.0710 >>
mHotelStaff[0].fDir = 335.6462 //63.5233 //245.6784
//mHotelStaff[0].vPos = << -4.4094, 294.3342, 109.9184 >> //<< -48.3062, 352.5123, 112.0579 >> //<< -61.0610, 357.8770, 112.0710 >>
//mHotelStaff[0].fDir = 239.4434 //63.5233 //245.6784
mHotelStaff[1].vPos = << 16.9840, 336.9486, 110.3190 >> //<< -60.4740, 339.8489, 110.7652 >> // //<< -48.2065, 347.9851, 114.7495 >>
mHotelStaff[1].fDir = 157.6965 //333.0786 // //336.7244
//mHotelStaff[1].vPos = << 12.8504, 309.3915, 109.9191 >> //<< -60.4740, 339.8489, 110.7652 >> // //<< -48.2065, 347.9851, 114.7495 >>
//mHotelStaff[1].fDir = 332.7813 //333.0786 // //336.7244
mBodyGuard.vPos = <<-46.9907, 328.4976, 111.6962>>//<<-55.2321, 316.8002, 111.6962>>//
mBodyGuard.fDir = 303.7287//319.4445//
mnHotelStaff[0] = S_F_M_Maid_01
eStaffState[0] = S_NULL
mnHotelStaff[1] = S_M_Y_Busboy_01 //S_M_Y_Valet_01 //Valet has a slight save in memory
eStaffState[1] = S_NULL
POPULATE_STAFF_WORK_POINTS()
ENDPROC
/// PURPOSE:
/// Initialises a new CHASE_SOUND struct and returns it
/// PARAMS:
/// iExecuteTime - The time during the chase that the sound should be played
/// sName - The name of the sound
/// Origin - The origin is an enum that is used in a switch to choose the entity to play the sound from
/// RETURNS:
/// An initialised CHASE_SOUND struct
FUNC CHASE_SOUND FILL_SOUNDS(INT iExecuteTime, STRING sName, CHASE_SOUND_ORIGIN Origin)
CHASE_SOUND NewSound
NewSound.iExecuteTime = iExecuteTime
NewSound.sSoundName = sName
NewSound.eOrigin = Origin
NewSound.bPlayed = FALSE
return NewSound
ENDFUNC
/// PURPOSE:
/// Initialises the array of final chase sounds
PROC POPULATE_SOUNDS()
mFinalChaseSound[0] = FILL_SOUNDS(91798, "BUILDING_SITE_CRASH", CSO_PLAYER) //player construc crash
mFinalChaseSound[1] = FILL_SOUNDS(92411, "BUILDING_SITE_CRASH", CSO_POPPY) //poppy construct crash
ENDPROC
///PURPOSE:
/// Function to group all population functions together
/// So that this function is called in the main init of the mission
PROC POPULATE_STUFF()
BODYGUARD_CAR_MODELS()
POPULATE_PEDS()
#IF IS_DEBUG_BUILD
CHASE_ROUTE()
#ENDIF
BEV_ROUTE()
//POPULATE_PROPS()
POPULATE_ALL_CONVOS()
POPULATE_SOUNDS()
ENDPROC
/// PURPOSE:
/// Jumps the mission to a specific stage
/// PARAMS:
/// stage - The state to jump to
PROC JUMP_TO_STAGE(MISSION_STAGE stage)
//STOP_CUTSCENE_IMMEDIATELY()
//WAIT_FOR_CUTSCENE_TO_STOP()
RC_START_Z_SKIP()
bJumpSkip = TRUE //Tells the mission stage setup function that we have just jumped and special setup is required
eMissionStage = stage
IF eMissionStage = MS_INIT
eMissionStage = MS_INTRO
ENDIF
iDoFixForStream = 0
bLoadingFinIntro = FALSE
bObjectiveShown = FALSE
bDebugSkipping = TRUE
eState = SS_INIT
eCutsceneState = eCutInit
CLEANUP() //delete everything
ENDPROC
///PURPOSE:
/// Initiate the mission and load the things needed
/// for the immediate gameplay
/// The skip menu is initialsed here
/// And if a replay is being done then we init and load assests for the check point
PROC INITMISSION()
//VEHICLE_INDEX viTemp
DO_FOCUS_PUSH()
SWITCH eState
CASE SS_INIT
POPULATE_STUFF()
//SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
IF SETUP_MISSION_STAGE(MS_INIT)
SERVICES_TOGGLE(FALSE)
SET_PED_NON_CREATION_AREA(vAlleyPoint1, vAlleyPoint2)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
RESET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID())
ENDIF
//GuardSpawn = ADD_SCENARIO_BLOCKING_AREA(<< -54.0, 348.0, 108.0 >>,<< -48.0, 357.0, 120.0 >>)
sbiPoppy = ADD_SCENARIO_BLOCKING_AREA(<<-66.2521, 288.0, 109.0>>,<<-14.3327, 334.0, 114.0>>) //<<-66.2521, 300.7945, 109.0>>,<<-14.3327, 313.3854, 114.0>>
sbiClipboardGuys = ADD_SCENARIO_BLOCKING_AREA(<<-67.5738, 297.3521, 105.1975>> - <<10,10,10>>,<<-67.5738, 297.3521, 105.1975>> + <<10,10,10>>)
sbiBuilders = ADD_SCENARIO_BLOCKING_AREA(<<82.1350, -391.7834, 39.8813>>-<<80,80,20>>,<<82.1350, -391.7834, 39.8813>>+<<80,80,20>>)
#IF IS_DEBUG_BUILD
s_skip_menu[0].sTxtLabel = "INTRO"
s_skip_menu[1].sTxtLabel = "FOLLOW BEVERLY"
s_skip_menu[2].sTxtLabel = "CAMERA TUTORIAL"
s_skip_menu[3].sTxtLabel = "FILM POPPY"
s_skip_menu[4].sTxtLabel = "GET IN ESCAPE CAR"
s_skip_menu[5].sTxtLabel = "CHASE"
s_skip_menu[6].sTxtLabel = "OUTRO"
s_skip_menu[7].sTxtLabel = "UBA REC"
s_skip_menu[8].sTxtLabel = "POPPY AND UBA"
s_skip_menu[9].sTxtLabel = "SET PIECE RECORDING"
s_skip_menu[10].sTxtLabel = "CHASE - Cam rotation locked to car"
s_skip_menu[11].sTxtLabel = "JUMP TO END OF CHASE"
#ENDIF
//SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
IF IS_REPLAY_IN_PROGRESS()
//bReplayUsed = TRUE
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[0])
IF NOT IS_ENTITY_DEAD(sRCLauncherDataLocal.objID[0])
DELETE_OBJECT(sRCLauncherDataLocal.objID[0])
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(objCam)
IF NOT IS_ENTITY_DEAD(objCam)
DELETE_OBJECT(objCam)
ENDIF
ENDIF
iReplayStage = GET_REPLAY_MID_MISSION_STAGE()
IF g_bShitskipAccepted = TRUE
iReplayStage++ // player is skipping this stage
ENDIF
SWITCH iReplayStage
CASE 0
//CREATE_VEHICLE_FOR_REPLAY(viTemp, <<-88.6147, 303.8292, 105.9208>>, 245.3452, FALSE, FALSE, TRUE, TRUE, FALSE) //B*1727319 - This is not needed, SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN handles it.
SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(<<0,0,0>>,0,TRUE,CHAR_FRANKLIN)
CLEAR_AREA_OF_PEDS(<< -28.7403, 303.3516, 111.6961 >>, 40.0)// Area around poppy
CLEAR_AREA_OF_PEDS(<< -17.3155, 340.0973, 110.4743 >>, 50.0)// Area around pool
CLEAR_AREA_OF_PEDS(<< 12.2397, 319.1199, 109.8446 >>, 50.0)// Area around Hotel staff
CLEAR_AREA_OF_VEHICLES(<< -12.2142, 280.2522, 107.3232 >>, 20)
CLEAR_AREA_OF_VEHICLES(<< -48.1975, 352.4658, 112.0536 >>, 5)
START_REPLAY_SETUP(<<-72.5612, 298.2493, 105.2336>>, 247.2199)
JUMP_TO_STAGE(MS_FOLLOW_BEV_ROAD)
BREAK
CASE CP_FILMING
bDumpedBank = TRUE
START_REPLAY_SETUP(<<-33.6810, 320.9442, 111.6958>>, 182.6031)
JUMP_TO_STAGE(MS_CAMERA_TUTORIAL)
BREAK
CASE CP_GET_TO_CAR
bDumpedBank = TRUE
START_REPLAY_SETUP(<<-33.1227, 318.9001, 111.6958>>, 154.1067)
JUMP_TO_STAGE(MS_GET_IN_ESCAPE_CAR)
BREAK
CASE CP_CHASE
bDumpedBank = TRUE
START_REPLAY_SETUP(<<-79.0609, 296.3315, 105.3698>>, 69.2271)
JUMP_TO_STAGE(MS_CAR_CHASE)
BREAK
CASE CP_OUTRO
bDumpedBank = TRUE
START_REPLAY_SETUP(<< -69.2061, -523.7703, 39.2051 >>, 163.9675)
JUMP_TO_STAGE(MS_OUTRO)
BREAK
ENDSWITCH
ELSE
IF SETUP_STAGE_REQUIREMENTS(RQ_CUTSCENE, vSafeVec)
eState = SS_CLEANUP
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_CLEANUP
NEXT_STAGE()
BREAK
ENDSWITCH
ENDPROC
//*************************************************************************************************************************************************
// : MISSION FUNCS :
//*************************************************************************************************************************************************
/// PURPOSE:
/// Checks to see if a ped has seen a hated player
/// PARAMS:
/// ped - The ped checking to see if they have seen a hated player
/// RETURNS:
/// TRUE if the ped has seen the player and hates him
FUNC BOOL HAS_PLAYER_TOUCHED_PED(PED_INDEX ped)
IF IS_PED_UNINJURED(ped)
IF IS_ENTITY_TOUCHING_ENTITY(ped, PLAYER_PED_ID())
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Gives a ped an attack order after the player has been spotted
/// Only called when the player fails the mission for getting spotted or attacking a ped
/// and possibly when the player has completed the sex scene section
/// PARAMS:
/// ped - The ped to give the order to
PROC GIVE_ATTACK_ORDER(PED_INDEX ped)
IF IS_PED_UNINJURED(ped)
CLEAR_PED_TASKS(ped)
TASK_COMBAT_HATED_TARGETS_AROUND_PED(ped, 100)
SET_PED_KEEP_TASK(ped, TRUE)
ENDIF
ENDPROC
/// PURPOSE:
/// Gives a ped a flee order after the player has been spotted
/// Only called when the player fails the mission for getting spotted or attacking a ped
/// PARAMS:
/// ped - The ped to give the order to
PROC GIVE_FLEE_ORDER(PED_INDEX ped)
IF IS_PED_UNINJURED(ped)
IF IS_PED_IN_ANY_VEHICLE(ped, TRUE)
IF IS_VEHICLE_OK(GET_VEHICLE_PED_IS_IN(ped, TRUE))
TASK_VEHICLE_MISSION_PED_TARGET(ped, GET_VEHICLE_PED_IS_IN(ped, TRUE), PLAYER_PED_ID(), MISSION_FLEE, 100, DRIVINGMODE_AVOIDCARS_RECKLESS,100, 100)
ENDIF
ELSE
SET_PED_FLEE_ATTRIBUTES(ped, FA_CAN_SCREAM, TRUE)
IF GET_SCRIPT_TASK_STATUS(ped, SCRIPT_TASK_SMART_FLEE_PED) <> PERFORMING_TASK
CLEAR_PED_TASKS(ped)
TASK_SMART_FLEE_PED(ped, PLAYER_PED_ID(),100,-1, FALSE,TRUE)
ENDIF
ENDIF
SET_PED_KEEP_TASK(ped, TRUE)
ENDIF
ENDPROC
/// PURPOSE:
/// Controls when the player can fail for being spotted by mission peds
/// and makes the peds respond in the appropriate manner
PROC MONITER_PEDS_PERCEPTION()
IF NOT bSpotted
AND NOT bBudThreat
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF eMissionStage <> MS_FAILED
IF IS_PED_UNINJURED(mBodyGuard.piPed)
IF HAS_PLAYER_THREATENED_PED(mBodyGuard.piPed)
IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
//GIVE_FLEE_ORDER(mBodyGuard.piPed)
TASK_SMART_FLEE_PED(mBodyGuard.piPed,PLAYER_PED_ID(),300,-1)
ELSE
//GIVE_ATTACK_ORDER(mBodyGuard.piPed)
TASK_COMBAT_PED(mBodyGuard.piPed,PLAYER_PED_ID())
ENDIF
bSpotted = TRUE
ENDIF
ENDIF
IF IS_PED_UNINJURED(mPoppy.piPed)
IF IS_PED_UNINJURED(mShagger.piPed)
IF HAS_PLAYER_THREATENED_PED(mPoppy.piPed)
//IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
//GIVE_ATTACK_ORDER(mPoppy.piPed)
//GIVE_ATTACK_ORDER(mShagger.piPed)
//TASK_COMBAT_PED(mPoppy.piPed,PLAYER_PED_ID())
//TASK_GO_TO_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),-1,12)
//TASK_COMBAT_PED(mShagger.piPed,PLAYER_PED_ID())
//ELSE
//GIVE_FLEE_ORDER(mPoppy.piPed)
//GIVE_FLEE_ORDER(mShagger.piPed)
//TASK_SMART_FLEE_PED(mPoppy.piPed,PLAYER_PED_ID(),300,-1)
//TASK_SMART_FLEE_PED(mShagger.piPed,PLAYER_PED_ID(),300,-1)
//ENDIF
bSpotted = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mPoppy.piPed)
IF IS_PLAYER_AT_ENTITY(mPoppy.piPed, <<10,10,1.5>>)
AND eMissionStage <> MS_FAILED
AND NOT bCloseTooWarning
CLEAR_PRINTS()
//PRINT_NOW("PAP2_03", 5000,0)
bCloseTooWarning = TRUE
ENDIF
ENDIF
IF IS_PED_UNINJURED(mPoppy.piPed)
IF IS_PED_UNINJURED(mShagger.piPed)
IF IS_PLAYER_AT_ENTITY(mPoppy.piPed, <<6,6,2.5>>)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), << -42.5662, 301.8173, 111.6957 >>, << -37.5690, 313.1216, 111.6957 >>, 5, FALSE, FALSE)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), << -44.4977, 296.7267, 111.5461 >>, << -23.9906, 291.6258, 111.5461 >>, 9.5, FALSE, FALSE)
FREEZE_ENTITY_POSITION(mPoppy.piPed, FALSE)
FREEZE_ENTITY_POSITION(mShagger.piPed, FALSE)
/*
IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
//GIVE_ATTACK_ORDER(mPoppy.piPed)
//GIVE_ATTACK_ORDER(mShagger.piPed)
TASK_COMBAT_PED(mPoppy.piPed,PLAYER_PED_ID())
//TASK_GO_TO_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),-1,12)
TASK_COMBAT_PED(mShagger.piPed,PLAYER_PED_ID())
ELSE
//GIVE_FLEE_ORDER(mPoppy.piPed)
//GIVE_FLEE_ORDER(mShagger.piPed)
TASK_SMART_FLEE_PED(mPoppy.piPed,PLAYER_PED_ID(),300,-1)
TASK_SMART_FLEE_PED(mShagger.piPed,PLAYER_PED_ID(),300,-1)
ENDIF
*/
bSpotted = TRUE
ENDIF
//IF iCoverSeq = 0
IF bBevSentToCover = FALSE
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-33.333542,324.251465,111.674744>>, <<-36.291592,317.228241,115.445808>>, 7.750000, FALSE, FALSE)
bSpotted = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF bSpotted
OR bBudThreat
KILL_ANY_CONVERSATION()
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// If the player is running around inside the angled area that the hotel staff are in
/// then we increment a timer. if the timer is greater than MAX_RUNNING_TIME_BEFORE_ATTENTION
/// then the player has been spotted (bSpotted = true).
PROC MONITER_PLAYER_RUNNING_AROUND()
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_PED_RUNNING(PLAYER_PED_ID())
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), << 20.4540, 334.6303, 109.9198 >>, << -1.6518, 292.0331, 109.9198 >>, 20, FALSE, FALSE)
iRunningTime++
SK_PRINT_INT("RUNNING ========== " , iRunningTime)
IF iRunningTime > MAX_RUNNING_TIME_BEFORE_ATTENTION
KILL_ANY_CONVERSATION()
CLEAR_PRINTS()
bSpotted = TRUE
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Increase beverly's speed if the player is too close to him
/// -- Needs testing to see if this is still needed [TODO]
PROC MONITER_RUBBER_BANDING()
IF IS_PED_UNINJURED(mBuddy.piPed)
AND IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_PLAYER_AT_ENTITY(mBuddy.piPed, <<11,11,5>>)
SET_PED_MOVE_RATE_OVERRIDE(mBuddy.piPed, 1.15)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// If the player shoots in the area or enters the area in a vehicle
/// fail him
PROC MONITER_PLAYER_FAILING()
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_PED_SHOOTING_IN_AREA(PLAYER_PED_ID(), vAlleyPoint1, vAlleyPoint2, FALSE)
MISSION_FAILED(FR_SPOTTED)
ENDIF
ENDIF
IF PLAYER_ENTERED_AREA_IN_VEHICLE(vAlleyPoint1,vAlleyPoint2)
MISSION_FAILED(FR_SPOTTED)
ENDIF
ENDPROC
/// PURPOSE:
/// Used while beverly is traveling along his route through the hotel grounds
/// Depending on what position he is traveling to (iBevRoute) we return a PEDMOVEBLENDRATIO
/// RETURNS:
/// A FLOAT set uning one of the PEDMOVEBLENDRATIO defines
FUNC FLOAT SET_SPEED_FOR_ROUTE()
FLOAT fSpeed = PEDMOVEBLENDRATIO_WALK
IF iBevRoute = ROUTE_POOL_STAIRS
fSpeed = PEDMOVEBLENDRATIO_RUN
ELIF iBevRoute = ROUTE_STAIRS_1_BOTTOM
fSpeed = PEDMOVE_SPRINT
ENDIF
RETURN fSpeed
ENDFUNC
/// PURPOSE:
/// If beverly is waiting for the player at a point and the inactivity timer has reached its limit
/// then we play a wave anim - "gestures@male", "come_here"
PROC PLAY_WAVE_TO_ANIM()
IF NOT bWaving
IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
OR GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> WAITING_TO_START_TASK
SEQUENCE_INDEX Seq
OPEN_SEQUENCE_TASK(Seq)
TASK_LOOK_AT_ENTITY(NULL, PLAYER_PED_ID(), -1)
IF NOT IS_PLAYER_AT_ENTITY(mBuddy.piPed, <<10,10,10>>)
TASK_TURN_PED_TO_FACE_ENTITY(NULL, PLAYER_PED_ID())
//TASK_PLAY_ANIM(NULL, "gestures@male", "come_here", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_UPPERBODY)
ENDIF
IF iBevRoute = ROUTE_POPPY
TASK_TURN_PED_TO_FACE_COORD(NULL, vSexScene)
ENDIF
CLOSE_SEQUENCE_TASK(Seq)
TASK_PERFORM_SEQUENCE(mBuddy.piPed, Seq)
CLEAR_SEQUENCE_TASK(Seq)
ENDIF
bWaving = TRUE
ENDIF
ENDPROC
/// PURPOSE:
/// Monitors where in the route through the hotel grounds beverly is.
/// If he has reached the current point then we increment iBevRoute and give him a FOLLOW_NAV_MESH task
/// to the new point. The arguments are used to have beverly wait for the player at a
/// specific point.
/// -- There is a bug in this function, the relationship between bWaitAtPoint and iPointToWaitAt
/// needs defining better [TODO]
/// PARAMS:
/// bWaitAtPoint - If true bev will wait at a point
/// iPointToWaitAt - The point bev should wait at
PROC PROGRESS_BEV_ROUTE(BOOL bWaitAtPoint = FALSE, INT iPointToWaitAt = -1)
VECTOR vBevWaitRadius
IF IS_PED_UNINJURED(mBuddy.piPed)
AND NOT bBudThreat
AND NOT bBevSentToCover
IF iBevRoute < MAX_BEV_WAYPOINTS
IF bOkForBevToTurn = TRUE
//IF GET_ENTITY_SPEED(mBuddy.piPed) < 0.2
//IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY) <> PERFORMING_TASK
//OR GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY) <> WAITING_TO_START_TASK
//IF NOT IS_PED_FACING_PED(mBuddy.piPed,PLAYER_PED_ID(),90) //30
// TASK_TURN_PED_TO_FACE_ENTITY(mBuddy.piPed, PLAYER_PED_ID(),-1)
//ENDIF
//IF IS_PED_FACING_PED(mBuddy.piPed,PLAYER_PED_ID(),30) //30
// CLEAR_PED_TASKS(mBuddy.piPed)
//ENDIF
//ENDIF
ENDIF
IF iBevRoute < ROUTE_STAIRS_1_MIDDLE
vBevWaitRadius = <<4,4,2.5>>
ELSE
vBevWaitRadius = <<2,2,2.5>>
ENDIF
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(mBuddy.piPed)
IF GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) >= 105
AND GET_GAME_TIMER() > iTimerBevSetOffWalking + 1200
IF bBevStealth = FALSE
//ALTER_STEALTH(mBuddy.piPed, TRUE)
ENDIF
IF NOT GET_PED_STEALTH_MOVEMENT(mBuddy.piPed)
bSwapCamPos = TRUE
SET_PED_STEALTH_MOVEMENT(mBuddy.piPed,TRUE,"DEFAULT_ACTION")
TASK_FOLLOW_WAYPOINT_RECORDING(mBuddy.piPed,sBeverlyPedRecording2,0,EWAYPOINT_START_FROM_CLOSEST_POINT | EWAYPOINT_ALLOW_STEERING_AROUND_PEDS)
SK_PRINT("MAKE BEV STEALTH")
ELSE
IF bSwapCamPos
//DETACH_ENTITY(objCam) //COMMENT IN FOR OLD
//ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) //COMMENT IN FOR OLD
bSwapCamPos = FALSE
ENDIF
ENDIF
ENDIF
IF GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) >= 107
//RESET_PED_WEAPON_MOVEMENT_CLIPSET(mBuddy.piPed) //COMMENT IN FOR OLD
ENDIF
IF GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) < 100
SET_PED_RESET_FLAG(mBuddy.piPed,PRF_UseProbeSlopeStairsDetection,TRUE)
ENDIF
ENDIF
IF NOT IS_ENTITY_AT_COORD(mBuddy.piPed, vBevRoute[iBevRoute], vBevWaitRadius)
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(mBuddy.piPed)
AND NOT WAYPOINT_PLAYBACK_GET_IS_PAUSED(mBuddy.piPed)
/*
IF iBevRoute = ROUTE_POPPY
IF GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) >= 107 //105
ALTER_STEALTH(mBuddy.piPed, TRUE)
ENDIF
ENDIF
*/
IF iBevRoute < ROUTE_STAIRS_1_MIDDLE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
AND GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) < 41
WAYPOINT_PLAYBACK_USE_DEFAULT_SPEED(mBuddy.piPed)
ELSE
IF GET_ENTITY_SPEED(PLAYER_PED_ID()) > 1.9
IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,5.0)
AND GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) < 35
AND NOT IS_PED_FACING_PED(mBuddy.piPed,PLAYER_PED_ID(),90) //120
WAYPOINT_PLAYBACK_OVERRIDE_SPEED(mBuddy.piPed,2.0)
ELSE
WAYPOINT_PLAYBACK_USE_DEFAULT_SPEED(mBuddy.piPed)
ENDIF
ELSE
IF GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) < 35//7
WAYPOINT_PLAYBACK_OVERRIDE_SPEED(mBuddy.piPed,1.0)
ENDIF
/*
IF NOT IS_PED_FACING_PED(mBuddy.piPed,PLAYER_PED_ID(),90) //120
OR GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) < 35//7
WAYPOINT_PLAYBACK_OVERRIDE_SPEED(mBuddy.piPed,1.0)
ELSE
WAYPOINT_PLAYBACK_USE_DEFAULT_SPEED(mBuddy.piPed)
ENDIF
*/
ENDIF
ENDIF
ELSE
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
IF IS_ENTITY_IN_RANGE_ENTITY(mBuddy.piPed,mHotelStaff[0].piPed,25)
TASK_LOOK_AT_ENTITY(mBuddy.piPed,mHotelStaff[0].piPed,8000)
ENDIF
IF WAYPOINT_RECORDING_GET_CLOSEST_WAYPOINT(sBeverlyPedRecording2,GET_ENTITY_COORDS(PLAYER_PED_ID()),iClosestWaypointToPlayer)
IF GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) < iClosestWaypointToPlayer
AND NOT IS_ENTITY_IN_RANGE_ENTITY(mBuddy.piPed,mHotelStaff[0].piPed,8)
WAYPOINT_PLAYBACK_OVERRIDE_SPEED(mBuddy.piPed,2.0)
ELSE
WAYPOINT_PLAYBACK_USE_DEFAULT_SPEED(mBuddy.piPed)
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF IS_ENTITY_IN_RANGE_ENTITY(mBuddy.piPed,PLAYER_PED_ID(),7)
//IF HAS_CLIP_SET_LOADED("move_m@casual@f")
IF HAS_CLIP_SET_LOADED(sWeaponMoveClipset)
IF NOT IS_ENTITY_IN_ANGLED_AREA(mBuddy.piPed, <<-38.226002,320.318573,111.051186>>, <<-36.413120,323.970398,113.695358>>, 4.750000)
TASK_CLEAR_LOOK_AT(mBuddy.piPed)
//SET_PED_MOVEMENT_CLIPSET(mBuddy.piPed,"move_m@casual@f")
SET_PED_WEAPON_MOVEMENT_CLIPSET(mBuddy.piPed,sWeaponMoveClipset)
TASK_FOLLOW_WAYPOINT_RECORDING(mBuddy.piPed,sBeverlyPedRecording2,0,EWAYPOINT_START_FROM_CLOSEST_POINT)
iTimerBevSetOffWalking = GET_GAME_TIMER()
bOkForBevToTurn = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF NOT bWaitAtPoint
IF iBevRoute < MAX_BEV_WAYPOINTS
iBevRoute++
ENDIF
ELSE
IF iPointToWaitAt > -1
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(mBuddy.piPed)
AND GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) >= 112
/*
IF NOT IS_PED_IN_COVER(mBuddy.piPed)
IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_SEEK_COVER_FROM_POS) <> PERFORMING_TASK
//TASK_SEEK_COVER_TO_COORDS(mBuddy.piPed,<< -32.3128, 320.5045, 111.6957 >>,<< -24.1590, 312.4199, 111.5455 >>,-1,TRUE)
TASK_SEEK_COVER_FROM_POS(mBuddy.piPed,<< -24.1173, 304.6172, 111.6957 >>,-1,TRUE)
ENDIF
ENDIF
*/
/*
IF NOT IS_PED_IN_COVER(mBuddy.piPed)
IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER) <> PERFORMING_TASK
//TASK_SEEK_COVER_TO_COORDS(mBuddy.piPed,<< -33.1418, 318.9297, 111.6957 >>,<< -24.1590, 312.4199, 111.5455 >>,-1,TRUE)
TASK_PUT_PED_DIRECTLY_INTO_COVER(mBuddy.piPed,<<-37.24, 321.48, 112.31>>,-1,TRUE,0,TRUE,FALSE,NULL)
//TASK_SEEK_COVER_FROM_POS(mBuddy.piPed,<< -24.1173, 304.6172, 111.6957 >>,-1,TRUE)
ENDIF
ENDIF
*/
ELSE
IF NOT IS_PLAYER_AT_ENTITY(mBuddy.piPed, <<7.0,7.0,3.5>>)
OR NOT IS_PLAYER_AT_COORDS(vBevRoute[iBevRoute], <<13,13,5>>)
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-41.702267,336.294037,111.171974>>, <<-17.278280,324.682190,115.137947>>, 12.500000)
IF NOT IS_ENTITY_IN_ARC_2D(mBuddy.piPed, PLAYER_PED_ID(), 40)
AND iBevRoute <= ROUTE_POOL_STAIRS
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(mBuddy.piPed)
TASK_LOOK_AT_ENTITY(mBuddy.piPed,PLAYER_PED_ID(),-1)
//WAYPOINT_PLAYBACK_PAUSE(mBuddy.piPed,FALSE)
WAYPOINT_PLAYBACK_PAUSE(mBuddy.piPed,TRUE)
ENDIF
bOkForBevToTurn = TRUE
ENDIF
ENDIF
//Beverly is waiting for the player so we add
//time to the Inactivity timer
IF bExpireInactive
iInactivityTimer++
IF iInactivityTimer > 125
bExpireInactive = FALSE //re-enabled
iInactivityTimer = 0
//PLAY_WAVE_TO_ANIM()
ENDIF
ELSE
IF bWaving
iWaveInactivityTimer++
IF iWaveInactivityTimer > 220
bWaving = FALSE
iWaveInactivityTimer = 0
//PLAY_WAVE_TO_ANIM()
ENDIF
ENDIF
ENDIF
ELSE
iInactivityTimer = 0
IF iBevRoute < MAX_BEV_WAYPOINTS
iBevRoute++
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Monitors whether the current MS_FOLLOW_BEV_... state should clean up.
/// This is defined as whether beverly or the player is within a radius of a
/// specified point. We can also specify that the state shouldn't continue unless
/// Bev and the player are together at the specific point.
/// If beverly is waiting for the player (bCheckPlayerAndBevTogether) then we moniter inactivity
/// this is where the Wave animation is triggered from
/// PARAMS:
/// iPointIndex - The index of the point to check
/// vRadius - The size of the check to perform
/// bCheckPlayerAndBevTogether - Should we check for the player and bev being together at the point
/// RETURNS:
/// TRUE if the player or beverly are at the specified point
/// TRUE if the player and beverly are at the specified point but only if bCheckPlayerAndBevTogether
FUNC BOOL SHOULD_PROGRESS_FOLLOW_STATE(INT iPointIndex, VECTOR vRadius, BOOL bCheckPlayerAndBevTogether = FALSE)
IF NOT bCheckPlayerAndBevTogether
IF IS_ENTITY_AT_COORD(mBuddy.piPed, vBevRoute[iPointIndex], vRadius)
OR IS_PLAYER_AT_COORDS(vBevRoute[iPointIndex], vRadius)
RETURN TRUE
ENDIF
ELSE
IF IS_ENTITY_AT_COORD(mBuddy.piPed, vBevRoute[iPointIndex], <<2.5,2.5,2.5>> ) //<<3.0,2.0,2.5>>
IF IS_PLAYER_AT_ENTITY(mBuddy.piPed, <<2.5,2.5,2.5>>) //<<5,2,2.5>>
iInactivityTimer = 0
RETURN TRUE
ELSE
//Beverly is waiting for the player so we add
//time to the Inactivity timer
IF bExpireInactive
AND bObjectiveShown
iInactivityTimer++
IF iInactivityTimer > 100
bExpireInactive = FALSE //re-enabled
iInactivityTimer = 0
ENDIF
ENDIF
IF NOT bWaving
iWaveInactivityTimer++
IF iWaveInactivityTimer > 175
PLAY_WAVE_TO_ANIM()
ENDIF
ELSE
IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_PERFORM_SEQUENCE) = FINISHED_TASK
bWaving = FALSE
iWaveInactivityTimer = 0
ENDIF
ENDIF
IF bPlayerSentToCover = FALSE
PRINT_OBJ("PAP2_08") //Go over to ~b~Beverly.
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Triggers a conversation, shows objective and then plays another conversation.
/// The first conversation in this function is displayed with out subtitles
/// Then the objective is printed
/// Then the next convo is started after the objective is finished this has subtitles
///
/// PARAMS:
/// &bExpire - A global bool is passed to the func which we write back to when the first conversation has been triggered
/// &bExpireAfterConv - A global bool is passed to the func which we write back to when the second conversation has been triggered
/// sConvo - The Root of the first conversation to play
/// sConvToPlayAfterObj - The Root of the second conversation to play
/// sObj - The objective to print
PROC DO_BEV_CONVO( BOOL &bExpire, BOOL &bExpireAfterConv, STRING sConvo, STRING sConvToPlayAfterObj, STRING sObj )
IF NOT bObjectiveShown
IF NOT bExpire
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND IS_SCREEN_FADED_IN()
bExpire = CREATE_CONVERSATION(s_conversation_peds, sTextBlock, sConvo, CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
ENDIF
ELSE
PRINT_OBJ(sObj)
ENDIF
ELSE
IF NOT IS_THIS_PRINT_BEING_DISPLAYED(sObj)
IF NOT bExpireAfterConv
IF IS_PLAYER_AT_ENTITY(mBuddy.piPed, <<10,10,10>>)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
bExpireAfterConv = CREATE_CONVERSATION(s_conversation_peds, sTextBlock, sConvToPlayAfterObj, CONV_PRIORITY_MEDIUM)
ENDIF
ELIF IS_PLAYER_AT_COORDS(vBevRoute[ROUTE_STAIRS_1_MIDDLE], <<10,10,10>>)
bExpireAfterConv = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// if the player is further away then a set distance and the staff conversation is
/// still playing then we kill that convo with out finishing the last line
PROC STOP_STAFF_CONV_CHECK()
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[0].piPed, PLAYER_PED_ID()) > 28 //23
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-4.814245,316.417358,109.398376>>, <<2.642797,313.337494,113.155197>>, 5.500000)
TEXT_LABEL_23 root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF NOT IS_STRING_NULL_OR_EMPTY(root)
IF ARE_STRINGS_EQUAL(root, "PAP2_STAFF")
KILL_FACE_TO_FACE_CONVERSATION()
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Controls playing the staff conversation and includes the convo where bev tells the player to
/// pipe down because he can hear someone. This also starts the maid using her phone
/// PARAMS:
/// &bExpire - A global script bool is passed to the function which we write back too when the first conversation is triggered
/// &bExpireSecondConv - A global script bool is passed to the function which we write back too when the second conversation is triggered
PROC DO_STAFF_CONVO(BOOL &bExpire, BOOL &bExpireSecondConv)
IF NOT bExpire
IF iBevRoute = ROUTE_STAIRS_1_TOP
OR IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mHotelStaff[0].piPed,12)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mHotelStaff[0].piPed,12)
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_STAIRS", CONV_PRIORITY_MEDIUM)
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
//TASK_USE_MOBILE_PHONE_TIMED(mHotelStaff[0].piPed, 19000) //14000
//TASK_USE_MOBILE_PHONE(mHotelStaff[0].piPed,TRUE)
iTimerMaidUsingPhone = GET_GAME_TIMER()
eStaffState[0] = S_WAIT_ACTIVE
eStaffState[1] = S_WAIT_ACTIVE
bExpire = TRUE
ENDIF
ENDIF
ELSE
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
//TASK_USE_MOBILE_PHONE_TIMED(mHotelStaff[0].piPed, 14000) //MAID -- this needs to be triggerd from dialogue not timed
//TASK_USE_MOBILE_PHONE(mHotelStaff[0].piPed,TRUE) //MAID -- this needs to be triggerd from dialogue not timed
iTimerMaidUsingPhone = GET_GAME_TIMER()
eStaffState[0] = S_WAIT_ACTIVE
eStaffState[1] = S_WAIT_ACTIVE
bExpire = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF NOT bExpireSecondConv
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[0].piPed, PLAYER_PED_ID()) < 23
bExpireSecondConv = CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_STAFF", CONV_PRIORITY_MEDIUM)
ENDIF
ENDIF
ELSE
STOP_STAFF_CONV_CHECK()
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// This plays the conversations needed for when the player and bev are
/// on the last straight to poppy. The first line is said just before running
/// across the pool area. And then the second is as they round the final set of
/// stairs. Contains distance checks
/// PARAMS:
/// &bExpire - A global script bool is passed to the function which we write back too when the first conversation is triggered
/// &bExpireSecondConv - A global script bool is passed to the function which we write back too when the second conversation is triggered
PROC DO_POPPY_CONVO(BOOL &bExpire, BOOL &bExpireSecondConv)
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(mBuddy.piPed)
IF GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) >= 99
IF NOT bExpire
bExpire = TRUE
ENDIF
ENDIF
ENDIF
IF NOT bExpire
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF GET_DISTANCE_BETWEEN_ENTITIES(mBuddy.piPed, PLAYER_PED_ID()) <= 16
AND NOT IS_PED_FACING_PED(mBuddy.piPed, PLAYER_PED_ID(),90)
bExpire = CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_GO", CONV_PRIORITY_HIGH)
ENDIF
ELSE
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[0].piPed, PLAYER_PED_ID()) >= 23
TEXT_LABEL_23 lable = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
IF NOT IS_STRING_NULL_OR_EMPTY(lable)
IF ARE_STRINGS_EQUAL(lable, "PAP2_STAFF")
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF iBevRoute = ROUTE_POPPY
IF NOT bExpireSecondConv
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
bExpireSecondConv = CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_PREFILM", CONV_PRIORITY_VERY_HIGH)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Plays chatter for Poppy and her crew
PROC DO_ESCAPE_CHATTER_CONV()
//IF GET_DISTANCE_BETWEEN_ENTITIES(mBuddy.piPed, viPlayerCar) > 15
//AND NOT IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
IF iSeqBevRagdoll < 3
IF bEscapeConvExpired1
IF GET_GAME_TIMER() > iTimerStartStage + 5000
AND GET_GAME_TIMER() > iTimerEscapeChatter + 5000
IF iCurrentLine < MAX_ESCAPE_CHATTER_LINES
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
AND NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_00")
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_ESCCHAT", CONV_PRIORITY_LOW)
iCurrentLine++
iTimerEscapeChatter = GET_GAME_TIMER()
ENDIF
ENDIF
ELSE
//Possibly set a flag here if this needs turning off
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC DO_BEV_SHOUTING()
IF iBevShoutLines < 3
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF GET_DISTANCE_BETWEEN_ENTITIES(mBuddy.piPed, viPlayerCar) >= 15
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BSH", CONV_PRIORITY_MEDIUM) //Fucking run!
++iBevShoutLines
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
PROC DO_BEV_IDLE_AT_FILM_POS_LINES()
IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_08")
AND NOT bPlayerSentToCover
IF iBevIdleLines < 4
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF GET_GAME_TIMER() > iTimerBevIdleLines + 10000
IF GET_DISTANCE_BETWEEN_ENTITIES(mBuddy.piPed, PLAYER_PED_ID()) < 30
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_INACT2", CONV_PRIORITY_MEDIUM) //Quick, we need to get this on film!
iTimerBevIdleLines = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(0,2000)
++iBevIdleLines
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF GET_GAME_TIMER() > iTimerBevIdleLines + 10000
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_FAILCAM", CONV_PRIORITY_MEDIUM)
ENDIF
MISSION_FAILED(FR_BADCAM)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// plays lines for beverly shouting at the player to get in the car.
PROC DO_BEV_GET_IN_CAR_LINES()
INT iSubs
IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_00")
AND NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_06")
//AND bExpireGetInCarText = TRUE
iSubs = ENUM_TO_INT(DISPLAY_SUBTITLES)
ELSE
iSubs = ENUM_TO_INT(DO_NOT_DISPLAY_SUBTITLES)
ENDIF
IF bExpireGetInCarText = FALSE
AND GET_DISTANCE_BETWEEN_ENTITIES(mBuddy.piPed, viPlayerCar) < 4
iSubs = ENUM_TO_INT(DO_NOT_DISPLAY_SUBTITLES)
ENDIF
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar, TRUE)
INT iTime = GET_GAME_TIMER()
IF IS_PED_UNINJURED(mBuddy.piPed)
IF bPlayerGettingInCar = FALSE
IF iTime > iGetInCarTimer + 6000
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-50.615166,329.184814,111.507881>>, <<-65.104324,297.998444,115.673424>>, 11.350000)
IF GET_DISTANCE_BETWEEN_ENTITIES(mBuddy.piPed, viPlayerCar) < 15
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
TEXT_LABEL_23 sRoot
sRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF NOT IS_STRING_NULL_OR_EMPTY(sRoot)
IF ARE_STRINGS_EQUAL(sRoot, "PAP2_ESCCHAT")
KILL_FACE_TO_FACE_CONVERSATION()
ENDIF
ENDIF
ENDIF
//IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_00")
//AND NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_06")
IF GET_DISTANCE_BETWEEN_ENTITIES(mBuddy.piPed, PLAYER_PED_ID()) <= 60//12
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_ESCCAR", CONV_PRIORITY_MEDIUM,INT_TO_ENUM(enumSubtitlesState,iSubs))
iGetInCarTimer = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// If the player doesnt keep up with beverly for a period of time then
/// bev will say a line when the player is with in a distance. The distance and the
/// dialogue change when the pair are about to see poppy
PROC DO_INACTIVE_CONV()
INT iDistance = 12
STRING sLabel = "PAP2_INACT"
IF iBevRoute = ROUTE_POPPY
sLabel = "PAP2_INACT2"
iDistance = 5
ENDIF
IF NOT bExpireInactive
IF GET_DISTANCE_BETWEEN_ENTITIES(mBuddy.piPed, PLAYER_PED_ID()) < iDistance
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF iBevRoute > ROUTE_STAIRS_1_TOP
bExpireInactive = CREATE_CONVERSATION(s_conversation_peds, sTextBlock, sLabel, CONV_PRIORITY_VERY_HIGH)
ELSE
bExpireInactive = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Loads and creates the props needed for the sexscene
PROC LOAD_AND_CREATE_PROPS()
INT iCounter = 0
IF NOT bCreatedProps
AND bCanCreateProps
FOR iCount = 0 TO (MAX_SEX_SCENE_PROPS - 1)
IF SPAWN_OBJECT(mSexSceneProps[iCount].oiProp, mSexSceneProps[iCount].mnModle, mSexSceneProps[iCount].vPos, mSexSceneProps[iCount].vRot.z)
iCounter++
IF iCounter = MAX_SEX_SCENE_PROPS
bCreatedProps = TRUE
bCanCreateProps = FALSE
ENDIF
ENDIF
ENDFOR
ENDIF
ENDPROC
/// PURPOSE:
/// loads and creates poppy and the lover and starts their animations going
/// This happens here instead of the main stage setup function so it can be
/// started when the player is close to when the pair are (memory management)
PROC LOAD_AND_CREATE_POP()
IF bCanCreatePoppy
IF SETUP_STAGE_REQUIREMENTS(RQ_ANIMS, vSafeVec)
IF SETUP_STAGE_REQUIREMENTS(RQ_POPPY, mPoppy.vPos, mPoppy.fDir)
AND SETUP_STAGE_REQUIREMENTS(RQ_SHAGGER, mShagger.vPos, mShagger.fDir)
//IF bPlayerSentToCover = FALSE
// PLAY_POPPY_SHAGGER_ANIM(0)
//ENDIF
bCanCreatePoppy = FALSE
bPoppyCreated = TRUE
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Plays a line telling the player off for bad filming during the sexscene
/// Every time a fail line is said we increase iNumFilmFails if this hits
/// above MAX_FILM_FAILS then the player has failed.
/// The failing stuff is tracked else where (probably in the FILM_POPPY state)
PROC DO_BAD_FILM_CONV()
#IF NOT IS_JAPANESE_BUILD
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
AND GET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene2) > 0.108
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
//IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_07")
IF iNumFilmFails < MAX_FILM_FAILS
IF IS_PED_UNINJURED(mBuddy.piPed)
IF IS_ENTITY_ON_SCREEN(mBuddy.piPed)
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_NOTME", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
//SK_PRINT("TK************BEV SHOULD BE SPEAKING************")
iNumFilmFails++ //increase the number of fails
iTimerBadFilmConvo = GET_GAME_TIMER()
iTimerBevTut = GET_GAME_TIMER()
ENDIF
ELSE
IF iBadFilmNoBev = 3
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BADCAM1", "PAP2_BADCAM1_4", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)//What are you filming? They're over there.
iBadFilmNoBev = 4
ENDIF
ELIF iBadFilmNoBev = 2
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BADCAM1", "PAP2_BADCAM1_3", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)//Please, don't let me down. I need this.
iBadFilmNoBev = 3
ENDIF
ELIF iBadFilmNoBev = 1
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BADCAM1", "PAP2_BADCAM1_2", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)//Come on, man! Are you getting any of this?
iBadFilmNoBev = 2
ENDIF
ELIF iBadFilmNoBev = 0
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BADCAM1", "PAP2_BADCAM1_1", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)//Try pointing the camera towards the celebrity.
iBadFilmNoBev = 1
ENDIF
ENDIF
//SK_PRINT("TK************BEV SHOULD BE SPEAKING************")
iNumFilmFails++ //increase the number of fails
iTimerBadFilmConvo = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
//ENDIF
ENDIF
ENDIF
#ENDIF
ENDPROC
/// PURPOSE:
/// Plays a line telling the player off for bad filming during the tutorial
/// Every time a fail line is said we increase iNumFilmFails if this hits
/// above MAX_FILM_FAILS then the we force the turorial to finish, bForceTutFin = TRUE.
PROC DO_BAD_FILM_CONV_TUT()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
//AND NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_07")
AND NOT bForceTutFin
IF iNumFilmFails < MAX_FILM_FAILS
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BADCAM", CONV_PRIORITY_MEDIUM)
//PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BADCAM1", sBadFilmLines[iNumFilmFails], CONV_PRIORITY_MEDIUM)
iNumFilmFails++ //increase the number of fails
iTimerBadFilmConvo = GET_GAME_TIMER()
iTimerBevTut = GET_GAME_TIMER()
ENDIF
ELSE
IF iNumFilmFails >= MAX_FILM_FAILS
bForceTutFin = TRUE
iNumFilmFails = 0
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// If the player points a gun at bev (and he sees) then this proc plays a line of dialogue and then fails the mission after
/// the line has finished
/// -- This might be incorrect behaviour for the failing mission standards! Needs looking at [TODO]
PROC DO_BEV_THRETENED_CONV()
IF NOT bExpireBudThreatSpeech
bExpireBudThreatSpeech = CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_FLEE", CONV_PRIORITY_VERY_HIGH)
ELSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(),0)
MISSION_FAILED(FR_ATTENTION)
ELSE
MISSION_FAILED(FR_BUDDY_THREAT)
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// container function for switching between the tutorial bad lines and
/// the sex scene
/// bUseFAce is a RAG bool that can be used so that the mission wont use the face tag stuff
/// -- This should probably not have the bUseFace tag bool and the bool should be removed [TODO]
PROC MONITER_FOR_BAD_FILMING()
IF bUseFace
IF mBoxCol.G < 200
IF GET_GAME_TIMER() > iTimerBadFilmConvo + GET_RANDOM_INT_IN_RANGE(6000,7000)
IF eMissionStage <> MS_CAMERA_TUTORIAL
DO_BAD_FILM_CONV()
ELSE
DO_BAD_FILM_CONV()
ENDIF
ENDIF
ENDIF
ELSE
IF iFilmTime > 20
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT bExpireWarning
//PRINT_NOW("PAP2_07",7500, 0) //Keep Poppy in shot.
bExpireWarning = TRUE
ENDIF
IF iNumFilmFails < MAX_FILM_FAILS
iNumFilmFails++ //increase the number of fails
iTimerBadFilmConvo = GET_GAME_TIMER()
ENDIF
DO_BAD_FILM_CONV()
ENDIF
ENDIF
IF iNumFilmFails >= MAX_FILM_FAILS
bPlayerFailed = TRUE
ENDIF
ENDPROC
/// PURPOSE:
/// Checks to see if the player is zoomed in to poppy during the sex scene filming
/// Triggers a line of dialogue when the camera has not been zoomed in for 10s
/// PARAMS:
/// bZoomed - The bool to write back too
PROC MONITER_FOR_NO_ZOOM(BOOL &bZoomed)
IF DOES_CAM_EXIST(camMain)
IF GET_CAM_FOV(camMain) > 13
IF GET_GAME_TIMER() > iTimerStartStage + 10000
AND GET_GAME_TIMER() > iTimerBevTut + 10000
#IF NOT IS_JAPANESE_BUILD
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BADCAMA", CONV_PRIORITY_MEDIUM, DO_NOT_DISPLAY_SUBTITLES)
//SK_PRINT("TK************BEV SHOULD BE SPEAKING ZOOM************")
iTimerBevTut = GET_GAME_TIMER()
ENDIF
#ENDIF
ENDIF
bZoomed = FALSE
ELSE
bZoomed = TRUE
iTimerBevTut = GET_GAME_TIMER()
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// increment iFilmTime
PROC UPDATE_FILMING_TIME()
IF bUseFace
IF mBoxCol.G > 200
iFilmTime += 1
ENDIF
ELSE
iFilmTime += 1
ENDIF
ENDPROC
/// PURPOSE:
/// Checks to see if bev is near his car
/// if he is he's told to get in as the driver. We also clear his waypoint task
PROC CHECK_BUDDY_NEAR_CAR()
IF NOT IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
IF IS_PED_UNINJURED(mBuddy.piPed)
AND IS_ENTITY_ALIVE(viPlayerCar)
IF iSeqBevRagdoll <> 3
SET_PED_CAN_RAGDOLL(mBuddy.piPed,FALSE)
ENDIF
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(mBuddy.piPed)
IF iSeqBevRagdoll = 0
IF GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) > 31
iTimerBevRagdoll = GET_GAME_TIMER()
iSeqBevRagdoll = 1
ENDIF
ELIF iSeqBevRagdoll = 1
IF GET_GAME_TIMER() > iTimerBevRagdoll + 2000
AND IS_ENTITY_IN_ANGLED_AREA(mBuddy.piPed, <<-67.827629,304.866913,104.543030>>, <<-76.682930,308.606079,115.562187>>, 14.750000) //jumped into alley
//SET_PED_TO_RAGDOLL(mBuddy.piPed,3000,3000,TASK_RELAX)
SET_AUDIO_FLAG("DisableAbortConversationForRagdoll", TRUE)
iSeqBevRagdoll = 2
ENDIF
ELIF iSeqBevRagdoll = 2
IF NOT IS_PED_RAGDOLL(mBuddy.piPed)
iSeqBevRagdoll = 3
ENDIF
ELIF iSeqBevRagdoll = 3
IF IS_PED_GETTING_UP(mBuddy.piPed)
OR HAS_ENTITY_COLLIDED_WITH_ANYTHING(mBuddy.piPed)
IF bBevHitHisHead = FALSE
//IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_FACE", CONV_PRIORITY_MEDIUM)
bBevHitHisHead = TRUE
//ENDIF
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_AT_ENTITY(mBuddy.piPed, viPlayerCar, <<20,20,2>>)
IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_ENTER_VEHICLE) <> WAITING_TO_START_TASK
//IF iSeqBevRagdoll = 2
IF NOT IS_PED_RAGDOLL(mBuddy.piPed)
AND NOT IS_PED_GETTING_UP(mBuddy.piPed)
WAYPOINT_PLAYBACK_PAUSE(mBuddy.piPed, FALSE)
//CLEAR_PED_TASKS(mBuddy.piPed)
TASK_ENTER_VEHICLE(mBuddy.piPed, viPlayerCar, DEFAULT_TIME_BEFORE_WARP)
SET_AUDIO_FLAG("DisableAbortConversationForRagdoll", FALSE)
SET_PED_CAN_RAGDOLL(mBuddy.piPed,TRUE)
iSeqBevRagdoll = 3
ENDIF
ENDIF
ELSE
IF iSeqBevRagdoll = 0
IF GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) = 29
//AND GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) < 31
AND NOT IS_ENTITY_IN_RANGE_ENTITY(mBuddy.piPed,PLAYER_PED_ID(),17)
AND iCounterBevWaiting < 150
++iCounterBevWaiting
IF IS_PED_UNINJURED(mBodyGuard.piPed)
IF IS_ENTITY_IN_RANGE_ENTITY(mBodyGuard.piPed,mBuddy.piPed,10)
iCounterBevWaiting = 600
ENDIF
ENDIF
IF NOT WAYPOINT_PLAYBACK_GET_IS_PAUSED(mBuddy.piPed)
WAYPOINT_PLAYBACK_PAUSE(mBuddy.piPed,TRUE)
ENDIF
ELSE
IF WAYPOINT_PLAYBACK_GET_IS_PAUSED(mBuddy.piPed)
WAYPOINT_PLAYBACK_RESUME(mBuddy.piPed,FALSE,31)
WAYPOINT_PLAYBACK_OVERRIDE_SPEED(mBuddy.piPed,3)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF GET_GAME_TIMER() > iTimerGetInCarStage + 30000
SET_PED_CAN_RAGDOLL(mBuddy.piPed,TRUE)
SET_PED_INTO_VEHICLE(mBuddy.piPed, viPlayerCar)
ENDIF
ENDIF
ENDIF
ENDPROC
FUNC BOOL IS_PLAYER_AND_NOT_JUSTIN_IN_ALLEY()
IF IS_PED_UNINJURED(mShagger.piPed)
AND NOT IS_ENTITY_IN_ANGLED_AREA(mShagger.piPed, <<-67.827629,304.866913,104.543030>>, <<-76.682930,308.606079,115.562187>>, 14.750000) //jumped into alley
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-67.827629,304.866913,104.543030>>, <<-76.682930,308.606079,115.562187>>, 14.750000) //jumped into alley
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_PLAYER_AND_NOT_BODYGUARD_IN_ALLEY()
IF IS_PED_UNINJURED(mBodyGuard.piPed)
AND NOT IS_ENTITY_IN_ANGLED_AREA(mBodyGuard.piPed, <<-67.827629,304.866913,104.543030>>, <<-76.682930,308.606079,115.562187>>, 14.750000) //jumped into alley
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-67.827629,304.866913,104.543030>>, <<-76.682930,308.606079,115.562187>>, 14.750000) //jumped into alley
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Checks to see if Justin is near his car
/// if he is he's told to get in as the driver
PROC CHECK_SHAGGER_NEAR_CAR()
IF NOT IS_SAFE_PED_IN_VEHICLE(mShagger.piPed, viChaseCars[SHAGGER_CAR] )
IF IS_PED_UNINJURED(mShagger.piPed)
AND IS_ENTITY_ALIVE(viChaseCars[SHAGGER_CAR])
//IF IS_ENTITY_AT_ENTITY(mShagger.piPed, viChaseCars[SHAGGER_CAR], <<5,5,2.5>>)
//OR IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), viPlayerCar, <<20,20,2>>)
//OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-67.827629,304.866913,104.543030>>, <<-76.682930,308.606079,115.562187>>, 14.750000) //jumped into alley
//OR IS_PLAYER_AND_NOT_JUSTIN_IN_ALLEY()
IF bPlayerGettingInCar
/*
IF GET_SCRIPT_TASK_STATUS(mShagger.piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
SEQUENCE_INDEX seq
OPEN_SEQUENCE_TASK(seq)
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<<-47.9138, 332.5389, 112.4607>>,3,-1)
TASK_ENTER_VEHICLE(NULL, viChaseCars[SHAGGER_CAR], -1, VS_FRONT_RIGHT)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mShagger.piPed,seq)
CLEAR_SEQUENCE_TASK(seq)
ENDIF
*/
IF bPlayerGettingInCar
AND NOT IS_ENTITY_AT_COORD(mShagger.piPed,<<-63.2851, 327.3911, 109.5810>>,<<7,7,7>>)
SAFE_TELEPORT_ENTITY(mShagger.piPed,<<-63.2851, 327.3911, 109.5810>>)
ENDIF
ELSE
IF GET_SCRIPT_TASK_STATUS(mShagger.piPed, SCRIPT_TASK_COMBAT) <> PERFORMING_TASK
TASK_COMBAT_PED(mShagger.piPed,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mShagger.piPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks to see if Poppy is near her car
/// if she is she's told to get in as the driver
PROC CHECK_POPPY_NEAR_CAR()
IF NOT IS_SAFE_PED_IN_VEHICLE(mPoppy.piPed, viChaseCars[POPPY_CAR] )
IF IS_PED_UNINJURED(mPoppy.piPed)
AND IS_ENTITY_ALIVE(viChaseCars[POPPY_CAR])
IF NOT bPoppyGettingInCar
IF IS_ENTITY_AT_ENTITY(mPoppy.piPed, viChaseCars[POPPY_CAR], <<5,5,2.5>>)
OR IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), viPlayerCar, <<20,20,2>>)
bPoppyGettingInCar = TRUE
ENDIF
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(mBuddy.piPed)
AND GET_PED_WAYPOINT_PROGRESS(mBuddy.piPed) > 24 //11
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-43.129189,298.264679,111.394432>>, <<-67.070282,306.125580,114.898727>>, 9.250000)
bPoppyGettingInCar = TRUE
ENDIF
ELSE
IF IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"RANDOM@CAR_THIEF@waiting_ig_4","waiting")
STOP_ANIM_TASK(mPoppy.piPed,"RANDOM@CAR_THIEF@waiting_ig_4","waiting",SLOW_BLEND_OUT)
ENDIF
IF GET_SCRIPT_TASK_STATUS(mPoppy.piPed, SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK
TASK_ENTER_VEHICLE(mPoppy.piPed, viChaseCars[POPPY_CAR],-1)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks to see if Bodyguard is near his car
/// if he is he's told to get in as the driver
PROC CHECK_BODYGUARD_NEAR_CAR()
IF NOT IS_SAFE_PED_IN_VEHICLE(mBodyGuard.piPed, viChaseCars[BODYGUARD_CAR] )
IF IS_PED_UNINJURED(mBodyGuard.piPed) AND IS_ENTITY_ALIVE(viChaseCars[BODYGUARD_CAR])
//IF IS_ENTITY_AT_ENTITY(mBodyGuard.piPed, viChaseCars[BODYGUARD_CAR], <<5,5,2>>)
//OR IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), viPlayerCar, <<20,20,2>>)
//OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-67.827629,304.866913,104.543030>>, <<-76.682930,308.606079,115.562187>>, 14.750000) //jumped into alley
//OR IS_PLAYER_AND_NOT_BODYGUARD_IN_ALLEY()
IF bPlayerGettingInCar
/*
IF GET_SCRIPT_TASK_STATUS(mBodyGuard.piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
SEQUENCE_INDEX seq
OPEN_SEQUENCE_TASK(seq)
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<<-47.9138, 332.5389, 112.4607>>,3,-1)
TASK_ENTER_VEHICLE(NULL, viChaseCars[BODYGUARD_CAR], -1, VS_FRONT_RIGHT)
CLOSE_SEQUENCE_TASK(seq)
TASK_PERFORM_SEQUENCE(mBodyGuard.piPed,seq)
CLEAR_SEQUENCE_TASK(seq)
ENDIF
*/
IF bPlayerGettingInCar
AND NOT IS_ENTITY_AT_COORD(mBodyGuard.piPed,<<-68.9113, 314.4095, 107.8141>>,<<7,7,7>>)
SAFE_TELEPORT_ENTITY(mBodyGuard.piPed,<<-68.9113, 314.4095, 107.8141>>)
ENDIF
ELSE
IF GET_SCRIPT_TASK_STATUS(mBodyGuard.piPed, SCRIPT_TASK_COMBAT) <> PERFORMING_TASK
TASK_COMBAT_PED(mBodyGuard.piPed,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mBodyGuard.piPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks to see if the player is near the getaway car and if he has pressed enter car input
/// hes then given a task to get in the car as a passenger
PROC CHECK_PLAYER_AT_CAR_GET_IN()
IF IS_PED_UNINJURED(PLAYER_PED_ID()) AND IS_ENTITY_ALIVE(viPlayerCar)
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), viPlayerCar, 12)
AND GET_SCRIPT_TASK_STATUS( PLAYER_PED_ID(), SCRIPT_TASK_ENTER_VEHICLE ) <> PERFORMING_TASK
IF SETUP_STAGE_REQUIREMENTS(RQ_CAMERA_CUTSCENE, <<-81.454941,296.807617,107.028061>>, -49.934269)
IF DOES_CAM_EXIST(camMain)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
//SET_CAM_PARAMS(CamMain,<<-81.454941,296.807617,107.028061>>,<<0.257009,0.000000,-49.934269>>,50.000000) //setup camera at offset from car and make it point oiut the back of the car
ENDIF
ENDIF
ENDIF
ENDIF
IF bPlayerGettingInCar
AND GET_SCRIPT_TASK_STATUS( PLAYER_PED_ID(), SCRIPT_TASK_ENTER_VEHICLE ) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS( PLAYER_PED_ID(), SCRIPT_TASK_ENTER_VEHICLE ) <> WAITING_TO_START_TASK
TASK_ENTER_VEHICLE(PLAYER_PED_ID(), viPlayerCar, DEFAULT_TIME_BEFORE_WARP, VS_BACK_LEFT, PEDMOVEBLENDRATIO_RUN) //ECF_USE_LEFT_ENTRY
ENDIF
IF IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), viPlayerCar, <<10,10,3>>)
IF GET_SCRIPT_TASK_STATUS( PLAYER_PED_ID(), SCRIPT_TASK_ENTER_VEHICLE ) <> PERFORMING_TASK
IF IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_ENTER)
HIDE_HUD_AND_RADAR_THIS_FRAME()
THEFEED_HIDE_THIS_FRAME()
IF iSeqMusic <> 3
IF TRIGGER_MUSIC_EVENT("PAP2_CAR")
iSeqMusic = 3
ENDIF
ENDIF
bPlayerGettingInCar = TRUE
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-78.247871,299.375580,109.261192>>, <<-81.985039,289.756134,103.689636>>, 26.250000)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
RESET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID())
ENDIF
IF DOES_ENTITY_EXIST(objCam)
IF IS_ENTITY_ATTACHED(objCam)
DETACH_ENTITY(objCam)
ENDIF
DELETE_OBJECT(objCam)
ENDIF
ENDIF
IF DOES_CAM_EXIST(camMain)
STOP_CAM_POINTING(camMain)
IF NOT DOES_CAM_EXIST(camInterp)
camInterp = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA",FALSE)
ELSE
STOP_CAM_POINTING(camInterp)
ENDIF
camMainCS = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA",FALSE)
//SET_CAM_PARAMS(camMain,<< -81.7540, 296.0858, 106.8197 >>, << -4.5487, 0.0000, -31.5931 >>,49.9623)
//SET_CAM_PARAMS(camInterp,<< -81.7540, 296.0858, 106.8197 >>, << -9.0737, 0.0000, -35.4270 >>,43.5051)
SET_CAM_PARAMS(camMainCS,<< -74.7, 297.0, 106.0 >>, <<8.7, 0.0, 52.9>>,34.5)
SET_CAM_PARAMS(camInterp,<< -76.2, 295.9, 106.1 >>, <<6.3, 0.0, 38.8>>,34.5)
//SHAKE_CAM(camMainCS,"VIBRATE_SHAKE",2.5)
//SHAKE_CAM(camInterp,"VIBRATE_SHAKE",2.5)
//SHAKE_CAM(camMainCS,"HAND_SHAKE",1)
//SHAKE_CAM(camInterp,"HAND_SHAKE",1)
SET_CAM_ACTIVE_WITH_INTERP(camInterp,camMainCS,8000,GRAPH_TYPE_LINEAR)
SET_CAM_ACTIVE(camMainCS,TRUE)
SET_CAM_ACTIVE(camInterp,TRUE)
RENDER_SCRIPT_CAMS(TRUE,FALSE)
IF DOES_CAM_EXIST(camMainCS)
SHAKE_CAM(camMainCS,"HAND_SHAKE",1.0)
ENDIF
IF DOES_CAM_EXIST(camInterp)
SHAKE_CAM(camInterp,"HAND_SHAKE",1.0)
ENDIF
CLEAR_AREA_OF_VEHICLES(vPlayerCarStartPos, 200) //Clear the cars that might be around so when the uba starts you dont see all the cars get cleared.
CLEAR_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()),200,TRUE)
iTimerCheckPlayerInRightCar = GET_GAME_TIMER()
IF NOT IS_SAFE_PED_IN_VEHICLE(mPoppy.piPed, viChaseCars[POPPY_CAR] )
SAFE_TELEPORT_ENTITY(mPoppy.piPed,<<-46.3393, 351.7322, 112.5621>>, 62.2187)
IF GET_SCRIPT_TASK_STATUS(mPoppy.piPed, SCRIPT_TASK_ENTER_VEHICLE) <> PERFORMING_TASK
TASK_ENTER_VEHICLE(mPoppy.piPed, viChaseCars[POPPY_CAR],-1)
ENDIF
ENDIF
//<<-46.3393, 351.7322, 112.5621>>, 62.2187 teleport poppy
TASK_ENTER_VEHICLE(PLAYER_PED_ID(), viPlayerCar, DEFAULT_TIME_BEFORE_WARP, VS_BACK_LEFT, PEDMOVEBLENDRATIO_RUN)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
REPLAY_RECORD_BACK_FOR_TIME(3.0, 7.5, REPLAY_IMPORTANCE_LOW)
ENDIF
ENDIF
ENDIF
ENDIF
IF bPlayerGettingInCar = TRUE
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),WEAPONTYPE_UNARMED,TRUE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_UP)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LEFT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_RIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_MOVE_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_MOVE_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_NEXT_RADIO)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_PREV_RADIO)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks to see if the player and the buddy are in the car
/// RETURNS:
/// TRUE if they are in the car together
FUNC BOOL ARE_PLAYER_AND_BUDDY_IN_CAR()
//IF IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
//AND IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
AND IS_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// If the player takes too long to get in the car
/// we play some dialogue and bev drives off
PROC CHECK_FAIL_GET_IN_CAR()
IF NOT bExpireGetInCarFail
//IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-50.615166,329.184814,111.507881>>, <<-65.104324,297.998444,115.673424>>, 11.350000)
IF GET_DISTANCE_BETWEEN_ENTITIES(mBuddy.piPed, PLAYER_PED_ID()) <= 40
AND bPlayerGettingInCar = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF PLAY_SINGLE_LINE_FROM_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_GETCAR", "PAP2_GETCAR_2",CONV_PRIORITY_MEDIUM)
bExpireGetInCarFail = TRUE
IF IS_PED_UNINJURED(mBuddy.piPed)
TASK_VEHICLE_DRIVE_WANDER(mBuddy.piPed, viPlayerCar, 150, DRIVINGMODE_PLOUGHTHROUGH)
bBevDrivingOff = TRUE
ENDIF
ENDIF
ENDIF
ELSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF bPlayerGettingInCar = FALSE
bExpireGetInCarFail = TRUE
IF IS_PED_UNINJURED(mBuddy.piPed)
TASK_VEHICLE_DRIVE_WANDER(mBuddy.piPed, viPlayerCar, 150, DRIVINGMODE_PLOUGHTHROUGH)
bBevDrivingOff = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Checks the player getting in a different car to the escape car
PROC CHECK_PLAYER_DICKING_AROUND()
IF NOT bWrongCarTimerActivate
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) <> viPlayerCar
iTimerCheckPlayerInRightCar = GET_GAME_TIMER()
bWrongCarTimerActivate = TRUE
ENDIF
ENDIF
ENDIF
ELSE
IF GET_GAME_TIMER() > iTimerCheckPlayerInRightCar + 10000
CHECK_FAIL_GET_IN_CAR()
ENDIF
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) = viPlayerCar
bWrongCarTimerActivate = FALSE
iTimerCheckPlayerInRightCar = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
ENDIF
IF bExpireGetInCarFail
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
MISSION_FAILED(FR_TOOK_TOO_LONG)
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// This moniters the player not getting in the escape car when he should of
PROC CHECK_BUDDY_IN_CAR_BEFORE_PLAYER()
IF NOT bIsBuddyInCarBeforePlayer
IF IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
AND NOT IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
SAFE_REMOVE_BLIP(biBuddyBlip)
IF NOT DOES_BLIP_EXIST(biBuddyBlip)
biGOTO = CREATE_VEHICLE_BLIP(viPlayerCar,TRUE,BLIPPRIORITY_HIGH)
ENDIF
SET_BLIP_AS_FRIENDLY(biGOTO, TRUE)
TASK_LOOK_AT_ENTITY(mBuddy.piPed, PLAYER_PED_ID(),-1)
IF NOT bExpireGetInCarText
PRINT_NOW("PAP2_00", DEFAULT_GOD_TEXT_TIME, 0) //Get in to Beverly's ~b~car.
bExpireGetInCarText = TRUE
ENDIF
bIsBuddyInCarBeforePlayer = TRUE
iTimerBevInCar = GET_GAME_TIMER()
ENDIF
ELSE
IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_00")
IF GET_GAME_TIMER() > iTimerBevInCar + 12000
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
AND bPlayerGettingInCar = FALSE
AND NOT IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
CHECK_FAIL_GET_IN_CAR()
ENDIF
ENDIF
ENDIF
ENDIF
/*
IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_00")
IF GET_GAME_TIMER() > iTimerBevInCar + 12000
CHECK_FAIL_GET_IN_CAR()
IF IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
AND NOT IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
//KILL_FACE_TO_FACE_CONVERSATION()
bIsBuddyInCarBeforePlayer = FALSE
iTimerBevInCar = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
*/
ENDIF
ENDPROC
/// PURPOSE:
/// updates the camera for the mini cutscene and plays the conversation
/// It also warps everyone in to thier cars after the camera changes position
/// RETURNS:
/// TRUE when the conversation has reached its third line
FUNC BOOL DO_MINI_CAR_CUTSCENE()
IF IS_ENTITY_ALIVE(viPlayerCar)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
SET_ENTITY_VISIBLE(viPlayerCar,FALSE)
IF DOES_CAM_EXIST(camInterp)
DESTROY_CAM(camInterp)
ENDIF
/*
IF DOES_CAM_EXIST(camMain)
DESTROY_CAM(camMain)
ENDIF
camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA",FALSE)
*/
SETUP_CAMERA(FALSE)
bUseFace = FALSE
IF DOES_CAM_EXIST(camMain)
SET_CAM_COORD(CamMain,GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viPlayerCar, vCameraOffset))
//<< -81.4549, 296.808, 107.028 >>
//<< -80.9626, 299.923, 106.761 >>
//SET_CAM_COORD(CamMain,<< -80.9626, 299.923, 106.761 >>)
POINT_CAM_AT_COORD(CamMain,GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viPlayerCar,<<0,-5,0.6>>))
//<< -0, 0, -49.9343 >>
//<< 1.6265, -1.74941e-008, 75.5606 >>
//SET_CAM_ROT(CamMain,<< 1.6265, -1.74941e-008, 75.5606 >>)
SET_CAM_FOV(camMain,45)
//SHAKE_CAM(camMain, "HAND_SHAKE", 0.1)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
ENDIF
IF IS_VEHICLE_OK(viChaseCars[POPPY_CAR])
LOWER_CONVERTIBLE_ROOF(viChaseCars[POPPY_CAR], TRUE)
ENDIF
MANAGE_CAMERA()
SET_ENTITY_VISIBLE(PLAYER_PED_ID(),FALSE)
bStartChaseCam = TRUE
RETURN TRUE
IF bCamInterp
ENDIF
ENDIF
ENDIF
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),WEAPONTYPE_UNARMED,TRUE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_UP)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_LEFT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_RIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_MOVE_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_MOVE_DOWN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_NEXT_RADIO)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_PREV_RADIO)
MANAGE_CHASE_CONVO()
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Uber recording management
PROC MANAGE_UBER_RECORDING_FOR_CHASE()
SWITCH iPlaybackProgress
// **** INITIALISE UBER PLAYBACK ****
CASE 0
INITIALISE_UBER_PLAYBACK("PAP2UBA", 1)
// paste array of data here
UBER_TRAFFIC_DATA()
POPPY_SETPIECE_CAR()
//bTrafficForceDefaultPedModel = TRUE
iPlaybackProgress++
BREAK
// **** START PLAYBACK OF MAIN CAR ****
CASE 1
/*
IF IS_ENTITY_ALIVE(viChaseCars[POPPY_CAR]) //101
AND IS_ENTITY_ALIVE(mPoppy.piPed)
IF NOT IS_PED_IN_VEHICLE(mPoppy.piPed, viChaseCars[POPPY_CAR])
SET_PED_INTO_VEHICLE(mPoppy.piPed, viChaseCars[POPPY_CAR])
ENDIF
START_PLAYBACK_RECORDED_VEHICLE(viChaseCars[POPPY_CAR], 101,"PAP2UBA")
SET_VEHICLE_ENGINE_ON(viChaseCars[POPPY_CAR],TRUE,TRUE)
ENDIF
IF IS_ENTITY_ALIVE(viChaseCars[SHAGGER_CAR]) //102
AND IS_ENTITY_ALIVE(mShagger.piPed)
IF NOT IS_PED_IN_VEHICLE(mShagger.piPed, viChaseCars[SHAGGER_CAR])
SET_PED_INTO_VEHICLE(mShagger.piPed, viChaseCars[SHAGGER_CAR])
ENDIF
START_PLAYBACK_RECORDED_VEHICLE(viChaseCars[SHAGGER_CAR], 102,"PAP2UBA")
SET_VEHICLE_ENGINE_ON(viChaseCars[SHAGGER_CAR],TRUE,TRUE)
ENDIF
IF IS_ENTITY_ALIVE(viChaseCars[BODYGUARD_CAR]) //103
AND IS_ENTITY_ALIVE(mBodyGuard.piPed)
IF NOT IS_PED_IN_VEHICLE(mBodyGuard.piPed, viChaseCars[BODYGUARD_CAR])
SET_PED_INTO_VEHICLE(mBodyGuard.piPed, viChaseCars[BODYGUARD_CAR])
ENDIF
START_PLAYBACK_RECORDED_VEHICLE(viChaseCars[BODYGUARD_CAR], 103,"PAP2UBA")
SET_VEHICLE_ENGINE_ON(viChaseCars[BODYGUARD_CAR],TRUE,TRUE)
ENDIF
*/
IF IS_VEHICLE_DRIVEABLE(viPlayerCar)
START_PLAYBACK_RECORDED_VEHICLE(viPlayerCar, 1,"PAP2UBA")
SET_PLAYBACK_SPEED(viPlayerCar, fPlaybackSpeed)
DO_MINI_CAR_CUTSCENE()
iPlaybackProgress++
ENDIF
BREAK
// **** UPDATE UBER PLAYBACK ****
CASE 2
WARP_EVERYONE_TO_CARS_SKIP()
IF eMissionStage = MS_POPPY_AND_UBA
OR eMissionStage = MS_SET_PIECE_RECORDING
UPDATE_UBER_PLAYBACK(viPlayerCar, fPlaybackSpeed)
ELSE
IF NOT bPlayerFailed
IF IS_VEHICLE_DRIVEABLE(viPlayerCar) AND IS_ENTITY_ALIVE(viChaseCars[POPPY_CAR]) AND IS_ENTITY_ALIVE(viChaseCars[SHAGGER_CAR])
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
IF eMissionStage = MS_CAR_CHASE
//MONITER_SOUNDS(CEIL( GET_TIME_POSITION_IN_RECORDING(viPlayerCar)))
UPDATE_UBER_PLAYBACK(viPlayerCar, fPlaybackSpeed)
ELIF eMissionStage = MS_POPPY_AND_UBA
OR eMissionStage = MS_SET_PIECE_RECORDING
UPDATE_UBER_PLAYBACK(viPlayerCar, fPlaybackSpeed)
ENDIF
ELSE
// finish
eState = SS_CLEANUP
CLEANUP_UBER_PLAYBACK(TRUE)
ENDIF
ENDIF
ELSE
IF IS_ENTITY_ALIVE(viChaseCars[POPPY_CAR])
AND IS_PED_UNINJURED(mPoppy.piPed)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viChaseCars[POPPY_CAR])
//STOP_PLAYBACK_RECORDED_VEHICLE(viChaseCars[POPPY_CAR])
//TASK_VEHICLE_DRIVE_WANDER(mPoppy.piPed, viChaseCars[POPPY_CAR], 150, DRIVINGMODE_AVOIDCARS_RECKLESS)
ENDIF
ENDIF
IF IS_ENTITY_ALIVE(viChaseCars[SHAGGER_CAR])
AND IS_PED_UNINJURED(mShagger.piPed)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viChaseCars[SHAGGER_CAR])
//STOP_PLAYBACK_RECORDED_VEHICLE(viChaseCars[SHAGGER_CAR])
//TASK_VEHICLE_DRIVE_WANDER(mShagger.piPed, viChaseCars[SHAGGER_CAR], 150, DRIVINGMODE_AVOIDCARS_RECKLESS)
ENDIF
ENDIF
IF IS_ENTITY_ALIVE(viChaseCars[BODYGUARD_CAR])
AND IS_PED_UNINJURED(mBodyGuard.piPed)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viChaseCars[BODYGUARD_CAR])
//STOP_PLAYBACK_RECORDED_VEHICLE(viChaseCars[BODYGUARD_CAR])
//TASK_VEHICLE_DRIVE_WANDER(mBodyGuard.piPed, viChaseCars[BODYGUARD_CAR], 150, DRIVINGMODE_AVOIDCARS_RECKLESS)
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Moniters the player not keeping poppy in shot
/// If the box colours are at a certain level then the we kill any chase line that is playing
/// then play a fail line aslong as the last fail line was over 8seconds ago
/// We then increment iNumFilmFails if the number of fails is greater than MAX_FILM_FAILS_CHASE
/// Then the player has failed so we play a line and set bPlayerFailed = true
PROC MONITER_FOR_BAD_FILMING_CHASE()
IF mBoxCol.R > 200.0
AND mBoxCol.G < 100.0
AND mBoxCol.B < 100.0
//IF iCounterNotOnScreen > iFramesBeforeFilmingFail/2
TEXT_LABEL_23 test = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF ARE_STRINGS_EQUAL( test, "PAP2_CHASE2")
KILL_FACE_TO_FACE_CONVERSATION()
bLineSet = FALSE
ENDIF
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF iNumFilmFails < MAX_FILM_FAILS_CHASE
IF GET_GAME_TIMER() > iTimerBadCam + 8000
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BADCAM2", CONV_PRIORITY_MEDIUM)
iNumFilmFails++
bLineSet = TRUE
iTimerBadCam = GET_GAME_TIMER()
ENDIF
ENDIF
ELIF iNumFilmFails >= MAX_FILM_FAILS_CHASE
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_FAILCAM", CONV_PRIORITY_MEDIUM)
IF iNumFilmFails >= MAX_FILM_FAILS_CHASE
bPlayerFailed = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Maintains the Scripted camera that follows the players car
/// at the end of the chase
PROC DO_SCRIPTED_CINE_CAM()
IF bStartScriptCineCam
//IF DOES_CAM_EXIST(camMain)
IF IS_ENTITY_ALIVE(viPlayerCar)
SET_USE_HI_DOF()
SWITCH eScriptCamState
CASE SCC_START
//IF IS_ENTITY_IN_ANGLED_AREA(viPlayerCar,<<66.603821,-390.643799,33.920174>>, <<45.938286,-450.393372,43.919422>>, 15.750000, FALSE, FALSE )
bUseFace = FALSE
bPlayerFailed = FALSE
bDisableFail = TRUE
//REQUEST_CUTSCENE("pap_2_mcs_1")
bDoingEndCut = TRUE
IF IS_PED_UNINJURED(mBuddy.piPed)
TASK_CLEAR_LOOK_AT(mBuddy.piPed)
ENDIF
iTimerCamSwitch = GET_GAME_TIMER()
eScriptCamState = SCC_CONSTRUCTION_FOOR_CAM
//ENDIF
BREAK
CASE SCC_CONSTRUCTION_FOOR_CAM
IF bDialogueEndCut = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_ENDCUT", CONV_PRIORITY_VERY_HIGH) //I think I'm gonna throw up. This better be worth it.
bDialogueEndCut = TRUE
ENDIF
ENDIF
ENDIF
IF IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
IF IS_VEHICLE_SEAT_FREE(viPlayerCar, VS_BACK_RIGHT)
TASK_SHUFFLE_TO_NEXT_VEHICLE_SEAT(PLAYER_PED_ID(), viPlayerCar)
ENDIF
ENDIF
IF GET_GAME_TIMER() > iTimerCamSwitch + 2000
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
OR GET_TIME_POSITION_IN_RECORDING(viPlayerCar) > 101275.632813 //99874.835938 //100622.875000 //101636.492188
CLEAR_TIMECYCLE_MODIFIER()
IF DOES_CAM_EXIST(camMain)
DESTROY_CAM(camMain)
ENDIF
IF NOT DOES_CAM_EXIST(camMain)
camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA",FALSE)
ENDIF
//SET_CAM_PARAMS(camMain,<< -74.2735, -532.8775, 39.9423 >>, << 2.1752, 0.0075, -32.3615 >>,21.0179)
SET_CAM_PARAMS(camMain,<< -66.1, -515.3, 42.3 >>, << 1.3, 0.0, -27.0 >>,22.5)
SET_CAM_NEAR_DOF(camMain,0)
SET_CAM_FAR_DOF(camMain,200)
SET_CAM_DOF_STRENGTH(camMain,0.5)
STOP_SOUND(iZoomSound)
IF IS_AUDIO_SCENE_ACTIVE("PAPARAZZO_02_CHASE")
STOP_AUDIO_SCENE("PAPARAZZO_02_CHASE")
ENDIF
IF IS_VEHICLE_OK(viPlayerCar)
SET_VEHICLE_FIXED(viPlayerCar)
ENDIF
IF DOES_CAM_EXIST(camInterp)
DESTROY_CAM(camInterp)
ENDIF
IF NOT DOES_CAM_EXIST(camInterp)
camInterp = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA",FALSE)
ENDIF
//SET_CAM_PARAMS(camInterp,<< -74.2635, -532.8675, 39.9413 >>, << 2.1762, 0.0074, -32.3605 >>,21.0279)
SET_CAM_PARAMS(camInterp,<< -71.4, -529.0, 39.8 >>, << 0.8, 0.0, -25.9 >>,22.5)
SET_CAM_NEAR_DOF(camInterp,0)
SET_CAM_FAR_DOF(camInterp,200)
SET_CAM_DOF_STRENGTH(camInterp,0.5)
//SHAKE_CAM(camMain,"VIBRATE_SHAKE",1.0)
//SHAKE_CAM(camInterp,"VIBRATE_SHAKE",1.0)
/*
SET_CAM_NEAR_DOF(camMain,0)
SET_CAM_FAR_DOF(camMain,100)
SET_CAM_DOF_STRENGTH(camMain,0.5)
SET_CAM_NEAR_DOF(camInterp,0)
SET_CAM_FAR_DOF(camInterp,100)
SET_CAM_DOF_STRENGTH(camInterp,0.5)
SET_USE_HI_DOF()
OVERRIDE_LODSCALE_THIS_FRAME(0.8)
*/
SET_CAM_ACTIVE(camMain,TRUE)
SET_CAM_ACTIVE(camInterp,TRUE)
SET_CAM_ACTIVE_WITH_INTERP(camInterp,camMain,7000,GRAPH_TYPE_DECEL)
RENDER_SCRIPT_CAMS(TRUE,FALSE)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(),TRUE)
IF DOES_CAM_EXIST(camMain)
SHAKE_CAM(camMain,"HAND_SHAKE",0.6)
ENDIF
IF DOES_CAM_EXIST(camInterp)
SHAKE_CAM(camInterp,"HAND_SHAKE",0.6)
ENDIF
eScriptCamState = SCC_PAVEMENT_CAM
ELSE
IF DOES_CAM_EXIST(camMain)
STOP_CAM_POINTING(camMain)
ENDIF
IF DOES_CAM_EXIST(camInterp)
DESTROY_CAM(camInterp)
ENDIF
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
MANAGE_CAMERA()
ENDIF
ELSE
IF DOES_CAM_EXIST(camMain)
STOP_CAM_POINTING(camMain)
ENDIF
IF DOES_CAM_EXIST(camInterp)
DESTROY_CAM(camInterp)
ENDIF
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
MANAGE_CAMERA()
ENDIF
BREAK
CASE SCC_PAVEMENT_CAM
/*
SET_CAM_NEAR_DOF(camMain,0)
SET_CAM_FAR_DOF(camMain,100)
SET_CAM_DOF_STRENGTH(camMain,0.5)
SET_CAM_NEAR_DOF(camInterp,0)
SET_CAM_FAR_DOF(camInterp,100)
SET_CAM_DOF_STRENGTH(camInterp,0.5)
SET_USE_HI_DOF()
OVERRIDE_LODSCALE_THIS_FRAME(0.8)
*/
//PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(viPlayerCar))
//PRINTNL()
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
OR GET_TIME_POSITION_IN_RECORDING(viPlayerCar) > 108426.351563
WHILE NOT BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(viPlayerCar,3)
AND iFailsafe < 500
WAIT(0)
++iFailsafe
HIDE_HUD_AND_RADAR_THIS_FRAME()
THEFEED_HIDE_THIS_FRAME()
ENDWHILE
IF IS_VEHICLE_STOPPED(viPlayerCar)
AND HAS_CUTSCENE_LOADED()
eMissionStage = MS_OUTRO
EXIT
ENDIF
ENDIF
BREAK
CASE SCC_CONSTRUCTION_CAM
IF IS_ENTITY_IN_ANGLED_AREA(viPlayerCar,<< -25.8393, -481.6992, 39.4160 >>, << -58.2834, -470.9109, 39.4160 >>, 5, FALSE, FALSE )
eScriptCamState = SCC_HOTEL_CAM
ENDIF
BREAK
CASE SCC_HOTEL_CAM
IF IS_ENTITY_IN_ANGLED_AREA(viPlayerCar,<< -62.2864, -491.9415, 39.4151 >>, << -30.9310, -504.4111, 39.4160 >>, 5, FALSE, FALSE )
eScriptCamState = SCC_CAM_PAN
ENDIF
BREAK
CASE SCC_CAM_PAN
BREAK
ENDSWITCH
ENDIF
//ELSE
//camMain = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA",FALSE)
//ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Plays random anims on poppy in her car, this is just first pass. Should make these not random and trigger dialogue with them at appropriate times
PROC MANAGE_POPPY_IN_CAR_ANIMS()
INT iRand
IF HAS_ANIM_DICT_LOADED("rcmpaparazzo_2ig_3")
IF IS_PED_UNINJURED(mPoppy.piPed)
IF IS_PED_IN_ANY_VEHICLE(mPoppy.piPed)
IF GET_SCRIPT_TASK_STATUS(mPoppy.piPed,SCRIPT_TASK_DRIVE_BY) <> PERFORMING_TASK
IF NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_fuckinlosers")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_gimmethtcam")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_ih8u")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_illsueyou")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_imavirgin")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_itwasyoga")
AND NOT IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"rcmpaparazzo_2ig_3","pm_incar_notdoinanythin")
iRand = GET_RANDOM_INT_IN_RANGE(0,800)
IF iRand = 1
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_fuckinlosers", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,AF_SECONDARY | AF_UPPERBODY)
ENDIF
IF iRand = 2
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_gimmethtcam", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,AF_SECONDARY | AF_UPPERBODY)
ENDIF
IF iRand = 3
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_ih8u", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,AF_SECONDARY | AF_UPPERBODY)
ENDIF
IF iRand = 4
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_illsueyou", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,AF_SECONDARY | AF_UPPERBODY)
ENDIF
IF iRand = 5
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_imavirgin", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,AF_SECONDARY | AF_UPPERBODY)
ENDIF
IF iRand = 6
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_itwasyoga", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,AF_SECONDARY | AF_UPPERBODY)
ENDIF
IF iRand = 7
TASK_PLAY_ANIM(mPoppy.piPed, "rcmpaparazzo_2ig_3", "pm_incar_notdoinanythin", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1,AF_SECONDARY | AF_UPPERBODY)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Controls the maids reactions to the player, if the player is doing something to draw attention to
/// themselves ie holding a gun, thretening behaviour, bumping the maid
PROC MAID_PRECEPTION()
// IF eMissionStage <> MS_FAILED
IF eStaffState[0] <= S_AMBIENT_BEHAVIOUR
AND eStaffState[1] <= S_AMBIENT_BEHAVIOUR
IF HAS_PLAYER_TOUCHED_PED(mHotelStaff[0].piPed)
IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
eStaffState[0] = S_SEEN_GUN
ELSE
eStaffState[0] = S_BUMPED
ENDIF
TASK_LOOK_AT_ENTITY(mHotelStaff[0].piPed,PLAYER_PED_ID(),-1)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ELSE
IF IS_PED_FACING_PED(mHotelStaff[0].piPed,PLAYER_PED_ID(),90)
AND IS_ENTITY_IN_RANGE_ENTITY(mHotelStaff[0].piPed,PLAYER_PED_ID(),15)
IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
eStaffState[0] = S_SEEN_GUN
ELSE
eStaffState[0] = S_BUMPED
ENDIF
TASK_LOOK_AT_ENTITY(mHotelStaff[0].piPed,PLAYER_PED_ID(),-1)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
/*
IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
IF IS_ENTITY_IN_ARC_2D(mHotelStaff[0].piPed, PLAYER_PED_ID(), 45)
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
eStaffState[0] = S_SEEN_GUN
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
*/
IF HAS_PLAYER_THREATENED_PED(mHotelStaff[0].piPed)
IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
eStaffState[0] = S_THREATENED_WITH_GUN
ELSE
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
GIVE_ATTACK_ORDER(mHotelStaff[1].piPed)
eStaffState[0] = S_THREATENED
ENDIF
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// When the maid is stood talking to the bus boy this function makes her play different
/// anims based on which line in the convo we are up to
/// PARAMS:
/// _root - we pas in the currently playing conversation root and its checked that it matches the staff root
PROC MANAGE_MAID_ANIMS_CONV(TEXT_LABEL_23 _root)
IF ARE_STRINGS_EQUAL(_root, "PAP2_STAFF")
INT i = GET_CURRENT_SCRIPTED_CONVERSATION_LINE()
IF GET_SCRIPT_TASK_STATUS(mHotelStaff[0].piPed, SCRIPT_TASK_PLAY_ANIM) <> PERFORMING_TASK
SWITCH i
CASE 5 //Hi Hector.
BREAK
// CASE 7 //No, was it bad?
//
// BREAK
CASE 9 //Porridge?
BREAK
CASE 11 //Well at least someone is getting some.
BREAK
ENDSWITCH
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// used in the maids state machine to tell her to walk to a position using the
/// navmesh. Then sets her state to M_AMB_WALKING_TO_POINT which moniters for her arrivel at the point
/// PARAMS:
/// vPos - the position to walk to
PROC GIVE_MAID_GOTO(VECTOR vPos)
TASK_FOLLOW_NAV_MESH_TO_COORD(mHotelStaff[0].piPed, vPos, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_NEVER_WARP)
eMaidAMBState = M_AMB_WALKING_TO_POINT
ENDPROC
/// PURPOSE:
/// State Machine for the maid
PROC MAID_STATES() //the maid
MAID_PRECEPTION()
//MANAGE_WINDOW_RAG()
TEXT_LABEL_23 sRoot
TEXT_LABEL_23 sLabel
sRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
sLabel = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
SWITCH eStaffState[0]
CASE S_NULL
//HOLDING AREA
BREAK
/// Stripted movment so the maid walk out infront of the player
CASE S_WAIT_ACTIVE
IF iBevRoute = ROUTE_ARCH_1
OR IS_PLAYER_AT_COORDS(vBevRoute[ROUTE_STAIRS_1_TOP], <<5,2,2.5>>)
//ADD_FOLLOW_NAVMESH_TO_PHONE_TASK(mHotelStaff[0].piPed, << 15.7815, 333.5496, 109.9190 >>)//MAID
//eStaffState[0] = S_WALK_TALK
ENDIF
BREAK
CASE S_WALK_TALK
MONITER_MAID_PHONE()
IF NOT IS_STRING_NULL_OR_EMPTY(sRoot)
MANAGE_MAID_ANIMS_CONV(sRoot)
ENDIF
IF IS_ENTITY_AT_COORD(mHotelStaff[0].piPed, << 15.7815, 333.5496, 109.9190 >>, <<4,4,2>>)
TASK_LOOK_AT_ENTITY(mHotelStaff[0].piPed, mHotelStaff[1].piPed, -1)
eStaffState[0] = S_STAND_TALK
ENDIF
BREAK
CASE S_STAND_TALK
IF NOT IS_STRING_NULL_OR_EMPTY(sRoot)
AND NOT IS_STRING_NULL_OR_EMPTY(sLabel)
MANAGE_MAID_ANIMS_CONV(sRoot)
IF ARE_STRINGS_EQUAL(sLabel, "PAP2_STAFF_11")
OR NOT ARE_STRINGS_EQUAL(sRoot, "PAP2_STAFF")
IF GET_SCRIPT_TASK_STATUS(mHotelStaff[0].piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
TASK_CLEAR_LOOK_AT(mHotelStaff[0].piPed)
SEQUENCE_INDEX Seq
OPEN_SEQUENCE_TASK(Seq)
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<< 12.7280, 346.7623, 114.3918 >>,1.0,DEFAULT_TIME_NEVER_WARP)
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<< -25.5226, 367.3178, 113.7493 >>,1.0,DEFAULT_TIME_NEVER_WARP)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<< 18.6864, 334.4601, 109.9186 >>,1.0,DEFAULT_TIME_NEVER_WARP,1.0,ENAV_NO_STOPPING)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<< 22.6585, 333.7577, 109.9186 >>,1.0,DEFAULT_TIME_NEVER_WARP,1.0,ENAV_NO_STOPPING)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<< 24.7426, 334.8422, 110.4900 >>,1.0,DEFAULT_TIME_NEVER_WARP,1.0,ENAV_NO_STOPPING)
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<< 4.3274, 356.6412, 112.5507 >>,1.0,DEFAULT_TIME_NEVER_WARP,1.0,ENAV_NO_STOPPING)
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<< -1.3367, 360.2300, 113.7494 >>,1.0,DEFAULT_TIME_NEVER_WARP,1.0,ENAV_NO_STOPPING)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<< 31.3388, 335.7056, 114.3914 >>,1.0,DEFAULT_TIME_NEVER_WARP,1.0,ENAV_NO_STOPPING)
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<< 11.6968, 345.9524, 114.3914 >>,1.0,DEFAULT_TIME_NEVER_WARP,1.0,ENAV_NO_STOPPING)
CLOSE_SEQUENCE_TASK(Seq)
TASK_PERFORM_SEQUENCE(mHotelStaff[0].piPed,seq)
CLEAR_SEQUENCE_TASK(seq)
ENDIF
ENDIF
ENDIF
BREAK
///S_AMBIENT_BEHAVIOUR has its own state machine so that the maid can be kicked in to this state
/// and then it can be left to run only 3 behaviours atm goto smoke and wash windows
CASE S_AMBIENT_BEHAVIOUR
SWITCH eMaidAMBState
CASE M_AMB_WALKING_TO_POINT
IF IS_ENTITY_AT_COORD(mHotelStaff[0].piPed, mMaidWorkPoint[iMaidActiveWorkPoint].vGOTO,<<1,1,1.5>>)
SWITCH mMaidWorkPoint[iMaidActiveWorkPoint].eStateToEnter
CASE M_AMB_WASHING_WINDOW
BREAK
CASE M_AMB_SMOKEING
BREAK
ENDSWITCH
ELIF GET_SCRIPT_TASK_STATUS(mHotelStaff[0].piPed, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mHotelStaff[0].piPed, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> WAITING_TO_START_TASK
//GIVE_MAID_GOTO(mMaidWorkPoint[iMaidActiveWorkPoint].vGOTO)
ENDIF
BREAK
CASE M_AMB_SMOKEING
IF GET_SCRIPT_TASK_STATUS(mHotelStaff[0].piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mHotelStaff[0].piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> WAITING_TO_START_TASK
iMaidActiveWorkPoint = GET_RANDOM_INT_IN_RANGE(0, MAX_MAID_WORK_POINTS)
//GIVE_MAID_GOTO(mMaidWorkPoint[iMaidActiveWorkPoint].vGOTO)
ENDIF
BREAK
CASE M_AMB_WASHING_WINDOW
IF GET_SCRIPT_TASK_STATUS(mHotelStaff[0].piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mHotelStaff[0].piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> WAITING_TO_START_TASK
iMaidActiveWorkPoint = GET_RANDOM_INT_IN_RANGE(0, MAX_MAID_WORK_POINTS)
//GIVE_MAID_GOTO(mMaidWorkPoint[iMaidActiveWorkPoint].vGOTO)
ENDIF
BREAK
ENDSWITCH
BREAK
/// Maid reaction states
CASE S_BUMPED
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[0].piPed, PLAYER_PED_ID()) < 12
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_MDFLEEB", CONV_PRIORITY_VERY_HIGH)
eStaffState[0] = S_AMBIENT_BEHAVIOUR
eStaffState[1] = S_AMBIENT_BEHAVIOUR
bSpotted = TRUE
ENDIF
ELSE
eStaffState[0] = S_AMBIENT_BEHAVIOUR
eStaffState[1] = S_AMBIENT_BEHAVIOUR
bSpotted = TRUE
ENDIF
BREAK
CASE S_SEEN_GUN
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[0].piPed, PLAYER_PED_ID()) < 12
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_MDFLEE1", CONV_PRIORITY_VERY_HIGH)
GIVE_FLEE_ORDER(mHotelStaff[1].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
ELSE
GIVE_FLEE_ORDER(mHotelStaff[1].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
BREAK
CASE S_THREATENED_WITH_GUN
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[0].piPed, PLAYER_PED_ID()) < 12
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_MDFLEE2", CONV_PRIORITY_VERY_HIGH)
GIVE_FLEE_ORDER(mHotelStaff[1].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
ELSE
GIVE_FLEE_ORDER(mHotelStaff[1].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
BREAK
CASE S_THREATENED
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[0].piPed, PLAYER_PED_ID()) < 12
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_MDFLEE3", CONV_PRIORITY_VERY_HIGH)
GIVE_ATTACK_ORDER(mHotelStaff[1].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
ELSE
GIVE_ATTACK_ORDER(mHotelStaff[1].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
BREAK
CASE S_RUN
bSpotted = TRUE
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// When the bus boy is stood talking to the maid this function makes her play different
/// anims based on which line in the convo we are up to
/// PARAMS:
/// _root - we pas in the currently playing conversation root and its checked that it matches the staff root
PROC MANAGE_BUSBOY_ANIMS_CONV(TEXT_LABEL_23 _root)
IF ARE_STRINGS_EQUAL(_root, "PAP2_STAFF")
INT i = GET_CURRENT_SCRIPTED_CONVERSATION_LINE()
IF GET_SCRIPT_TASK_STATUS(mHotelStaff[1].piPed, SCRIPT_TASK_PLAY_ANIM) <> PERFORMING_TASK
SWITCH i
// CASE 4 //Hey there Maria.
//
// BREAK
CASE 6 //Did you see the state of bungalow 3, before Mandy had to clean it?
BREAK
CASE 8 //Bad? It was horrific! Porridge everywhere!
BREAK
// CASE 10 //Yer loads of the stuff, Mandy seemed to think they had been using it for sex play!
//
// BREAK
ENDSWITCH
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// Controls the bus boy reactions to the player, if the player is doing something to draw attention to
/// themselves ie holding a gun, thretening behaviour, bumping the bus boy
PROC BUSBOY_PERCEPTION()
// IF eMissionStage <> MS_FAILED
IF eStaffState[0] <= S_AMBIENT_BEHAVIOUR
AND eStaffState[1] <= S_AMBIENT_BEHAVIOUR
IF HAS_PLAYER_TOUCHED_PED(mHotelStaff[1].piPed)
OR IS_ENTITY_IN_RANGE_ENTITY(mHotelStaff[1].piPed,PLAYER_PED_ID(),12.0)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<14.255188,335.391235,109.130768>>, <<24.290331,330.667023,113.985596>>, 3.500000)
IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
eStaffState[1] = S_SEEN_GUN
ELSE
eStaffState[1] = S_BUMPED
ENDIF
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
/*
IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
IF IS_ENTITY_IN_ARC_2D(mHotelStaff[1].piPed, PLAYER_PED_ID(), 45)
GIVE_FLEE_ORDER(mHotelStaff[1].piPed)
eStaffState[1] = S_SEEN_GUN
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
*/
IF HAS_PLAYER_THREATENED_PED(mHotelStaff[1].piPed)
IF IS_PED_ARMED(PLAYER_PED_ID(), WF_INCLUDE_GUN|WF_INCLUDE_PROJECTILE)
GIVE_FLEE_ORDER(mHotelStaff[1].piPed)
eStaffState[1] = S_THREATENED_WITH_GUN
ELSE
GIVE_ATTACK_ORDER(mHotelStaff[1].piPed)
eStaffState[1] = S_THREATENED
ENDIF
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
ENDIF
ENDPROC
/// PURPOSE:
/// used in the bus boy state machine to tell him to walk to a position using the
/// navmesh. Then sets his state to B_AMB_WALKING_TO_POINT which moniters for his arrival at the point
/// PARAMS:
/// vPos - the position to walk to
PROC GIVE_BUSBOY_GOTO(VECTOR vPos)
TASK_FOLLOW_NAV_MESH_TO_COORD(mHotelStaff[1].piPed, vPos, PEDMOVEBLENDRATIO_WALK, DEFAULT_TIME_NEVER_WARP)
eBoyAMBState = B_AMB_WALKING_TO_POINT
ENDPROC
/// PURPOSE:
/// State Machine for the bus boy
PROC BUSBOY_STATES()
BUSBOY_PERCEPTION()
TEXT_LABEL_23 sRoot
sRoot = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
SWITCH eStaffState[1]
CASE S_NULL
//HOLDING AREA
BREAK
/// Stripted movment so the bus boy and maid meet up
CASE S_WAIT_ACTIVE
//SK_PRINT("WAIT BUSBOY")
//TASK_START_SCENARIO_AT_POSITION(mHotelStaff[1].piPed,"WORLD_HUMAN_SEAT_STEPS",<< 16.9840, 336.9486, 110.3190 >>, 157.6965)
//SET_PED_CAN_RAGDOLL_FROM_PLAYER_IMPACT(mHotelStaff[1].piPed,FALSE)
//eStaffState[1] = S_WALK_TALK
BREAK
CASE S_WALK_TALK
IF NOT IS_STRING_NULL_OR_EMPTY(sRoot)
MANAGE_BUSBOY_ANIMS_CONV(sRoot)
ENDIF
IF IS_ENTITY_AT_COORD(mHotelStaff[1].piPed, << 15.7815, 333.5496, 109.9190 >>, <<4,4,2>>)
//eStaffState[1] = S_STAND_TALK
ENDIF
BREAK
CASE S_STAND_TALK
IF NOT IS_STRING_NULL_OR_EMPTY(sRoot)
MANAGE_BUSBOY_ANIMS_CONV(sRoot)
IF NOT ARE_STRINGS_EQUAL(sRoot, "PAP2_")
IF SETUP_STAGE_REQUIREMENTS(RQ_BROOM, vSafeVec)
CLEAR_PED_TASKS(mHotelStaff[1].piPed)
GIVE_BUSBOY_GOTO(vBoyWorkPoint[iBoyActiveWorkPoint])
eStaffState[1] = S_AMBIENT_BEHAVIOUR
ENDIF
ENDIF
ENDIF
BREAK
///S_AMBIENT_BEHAVIOUR has its own state machine so that the bus boy can be kicked in to this state
/// and then it can be left to run only 2 behaviours atm goto and sweep
CASE S_AMBIENT_BEHAVIOUR
SWITCH eBoyAMBState
CASE B_AMB_WALKING_TO_POINT
IF IS_ENTITY_AT_COORD(mHotelStaff[1].piPed, vBoyWorkPoint[iBoyActiveWorkPoint],<<1,1,1.5>>)
//TELL_BOY_SWEEP()
ELIF GET_SCRIPT_TASK_STATUS(mHotelStaff[1].piPed, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mHotelStaff[1].piPed, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> WAITING_TO_START_TASK
GIVE_BUSBOY_GOTO(vBoyWorkPoint[iBoyActiveWorkPoint])
ENDIF
BREAK
CASE B_AMB_SWEEPING
IF GET_SCRIPT_TASK_STATUS(mHotelStaff[1].piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mHotelStaff[1].piPed, SCRIPT_TASK_PERFORM_SEQUENCE) <> WAITING_TO_START_TASK
iBoyActiveWorkPoint = GET_RANDOM_INT_IN_RANGE(0, MAX_BOY_WORK_POINTS)
GIVE_BUSBOY_GOTO(vBoyWorkPoint[iBoyActiveWorkPoint])
ENDIF
BREAK
ENDSWITCH
BREAK
/// bus boy reaction states
CASE S_BUMPED
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[1].piPed, PLAYER_PED_ID()) < 20//12
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BSFLEEB", CONV_PRIORITY_VERY_HIGH)
eStaffState[0] = S_AMBIENT_BEHAVIOUR
eStaffState[1] = S_AMBIENT_BEHAVIOUR
bSpotted = TRUE
ENDIF
ELSE
eStaffState[0] = S_AMBIENT_BEHAVIOUR
eStaffState[1] = S_AMBIENT_BEHAVIOUR
bSpotted = TRUE
ENDIF
BREAK
CASE S_SEEN_GUN
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[1].piPed, PLAYER_PED_ID()) < 12
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BSFLEE1", CONV_PRIORITY_VERY_HIGH)
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
bStaffThreatened = TRUE
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
ELSE
bStaffThreatened = TRUE
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
BREAK
CASE S_THREATENED_WITH_GUN
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[1].piPed, PLAYER_PED_ID()) < 12
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BSFLEE2", CONV_PRIORITY_VERY_HIGH)
bStaffThreatened = TRUE
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
ELSE
bStaffThreatened = TRUE
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
BREAK
CASE S_THREATENED
IF GET_DISTANCE_BETWEEN_ENTITIES(mHotelStaff[1].piPed, PLAYER_PED_ID()) < 12
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_BSFLEE3", CONV_PRIORITY_VERY_HIGH)
bStaffThreatened = TRUE
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
ELSE
bStaffThreatened = TRUE
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
eStaffState[0] = S_RUN
eStaffState[1] = S_RUN
ENDIF
BREAK
CASE S_RUN
bSpotted = TRUE
BREAK
ENDSWITCH
ENDPROC
//------------------------------------------------------------------------------------
// MISSION STATES
//------------------------------------------------------------------------------------
FUNC BOOL IS_ANIM_PHASE_OK_FOR_CUTSCENE()
//PRINTFLOAT(GET_ENTITY_ANIM_CURRENT_TIME(sRCLauncherDataLocal.pedID[0],"rcmpaparazzo_2", "pap_2_rcm_base"))
//PRINTNL()
//OR GET_SYNCHRONIZED_SCENE_PHASE(iSynchScene) > 0.819200
//OR GET_SYNCHRONIZED_SCENE_PHASE(iSynchScene) < 0.305006 //0.02
//IF NOT IS_ENTITY_PLAYING_ANIM(sRCLauncherDataLocal.pedID[0],"rcmpaparazzo_2", "pap_2_rcm_base")
//OR GET_ENTITY_ANIM_CURRENT_TIME(sRCLauncherDataLocal.pedID[0],"rcmpaparazzo_2", "pap_2_rcm_base") > 0.819200
//OR GET_ENTITY_ANIM_CURRENT_TIME(sRCLauncherDataLocal.pedID[0],"rcmpaparazzo_2", "pap_2_rcm_base") < 0.305006 //0.02
//FLOAT fStartTagOut
//FLOAT fEndTagOut
IF NOT DOES_ENTITY_EXIST(sRCLauncherDataLocal.pedID[0])
RETURN TRUE
ELSE
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[0])
//IF FIND_ANIM_EVENT_PHASE("rcmpaparazzo_2", "pap_2_rcm_base","START_CUTSCENE",fStartTagOut,fEndTagOut)
IF IS_SYNCHRONIZED_SCENE_RUNNING(iSynchScene)
IF GET_SYNCHRONIZED_SCENE_PHASE(iSynchScene) >= 0.21//fStartTagOut
AND GET_SYNCHRONIZED_SCENE_PHASE(iSynchScene) <= 0.91//fEndTagOut
//IF GET_SYNCHRONIZED_SCENE_PHASE(iSynchScene) <= 0.21//fStartTagOut
//OR GET_SYNCHRONIZED_SCENE_PHASE(iSynchScene) >= 0.91//fEndTagOut
RETURN TRUE
ENDIF
ELSE
RETURN TRUE
ENDIF
//ELSE
// RETURN TRUE
//ENDIF
ENDIF
ENDIF
RC_DISABLE_CONTROL_ACTIONS_FOR_LEAD_IN()
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-69.110252,302.947449,105.334381>>, <<-77.485947,306.753998,110.556976>>, 7.000000)
OR IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],3)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// State function that runs the mocap scene
PROC INTRO()
REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME()
DO_FOCUS_PUSH()
HIDE_HUD_AND_RADAR_THIS_FRAME()
THEFEED_HIDE_THIS_FRAME()
IF NOT IS_ANIM_PHASE_OK_FOR_CUTSCENE()
EXIT
ENDIF
MODEL_NAMES mnVehPlayer
VECTOR vMovePosVehPlayer
FLOAT fMoveHeadingVehPlayer
/*
//Cant skip the cutscene until the stage is active and the loading has finished
IF eState = SS_ACTIVE
IF IS_CUTSCENE_SKIP_BUTTON_JUST_PRESSED_WITH_DELAY() AND bLoadingFinIntro
eState = SS_SKIPPED
ENDIF
ENDIF
*/
//Load everything for the next stage while the cutscene is playing
IF NOT bLoadingFinIntro
IF SETUP_MISSION_STAGE(MS_INTRO, bJumpSkip)
bLoadingFinIntro = TRUE //loading done
ENDIF
ENDIF
IF WAS_CUTSCENE_SKIPPED()
OR IS_SCREEN_FADED_OUT()
OR IS_SCREEN_FADING_OUT()
bCSSkipped = TRUE
ENDIF
SWITCH eState
CASE SS_INIT
IF CAN_PLAYER_START_CUTSCENE(TRUE)
IF RC_IS_CUTSCENE_OK_TO_START()
IF NOT bDoingFocusPush
OR GET_GAME_TIMER() > iTimerFocusPush + 3000
IF bDebugSkipping = FALSE
mBuddy.piPed = sRCLauncherDataLocal.pedID[0]
sRCLauncherDataLocal.pedID[0] = NULL
IF IS_PED_UNINJURED(mBuddy.piPed)
SET_PED_LEG_IK_MODE(mBuddy.piPed, LEG_IK_FULL)
ENDIF
ENDIF
bCSSetExitCam = FALSE
bCSSetExitBev = FALSE
bCSSetExitFranklin = FALSE
IF DOES_ENTITY_EXIST(mBuddy.piPed)
IF NOT IS_ENTITY_DEAD(mBuddy.piPed)
REGISTER_ENTITY_FOR_CUTSCENE(mBuddy.piPed, "Beverley", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
ENDIF
/*
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[0])
IF NOT IS_ENTITY_DEAD(sRCLauncherDataLocal.objID[0])
DELETE_OBJECT(sRCLauncherDataLocal.objID[0])
ENDIF
ENDIF
*/
IF NOT DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[0])
sRCLauncherDataLocal.objID[0] = CREATE_OBJECT_NO_OFFSET(Prop_Pap_Camera_01, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mBuddy.piPed,<<0.0,0.0,20.0>>))
ENDIF
IF IS_ENTITY_ATTACHED(sRCLauncherDataLocal.objID[0])
DETACH_ENTITY(sRCLauncherDataLocal.objID[0])
ENDIF
REGISTER_ENTITY_FOR_CUTSCENE(sRCLauncherDataLocal.objID[0], "Beverlys_camera", CU_ANIMATE_EXISTING_SCRIPT_ENTITY, PROP_PAP_CAMERA_01)
// Cleanup launcher to remove lead-in blip
RC_CLEANUP_LAUNCHER()
// Showtime!
START_CUTSCENE()
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW)
/*
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[0])
IF NOT IS_ENTITY_DEAD(sRCLauncherDataLocal.objID[0])
DELETE_OBJECT(sRCLauncherDataLocal.objID[0])
ENDIF
ENDIF
*/
WAIT(0)
/*
IF DOES_ENTITY_EXIST(objCam)
IF NOT IS_ENTITY_DEAD(objCam)
DELETE_OBJECT(objCam)
ENDIF
ENDIF
*/
//SETUP_STAGE_REQUIREMENTS(RQ_BODYGUARD_CARS, vSafeVec)
//SETUP_STAGE_REQUIREMENTS(RQ_PLAYER_CAR, vPlayerCarStartPos, fPlayerCarDir)
//viPassCar = GET_PLAYERS_LAST_VEHICLE()
//IF NOT IS_ENTITY_A_MISSION_ENTITY(viPassCar)
// SET_ENTITY_AS_MISSION_ENTITY(viPassCar, TRUE)
//ENDIF
CLEAR_BLOCKED_PLAYER_FOR_LEAD_IN()
STOP_GAMEPLAY_HINT()
IF IS_ENTITY_ALIVE(viPlayerCar)
SAFE_TELEPORT_ENTITY(viPlayerCar,<<-78.101295,298.967560,106.047028>>, -109.118706)
SET_VEHICLE_ON_GROUND_PROPERLY(viPlayerCar)
ENDIF
mnVehPlayer = GET_ENTITY_MODEL(GET_PLAYERS_LAST_VEHICLE())
IF IS_THIS_MODEL_A_HELI(mnVehPlayer)
OR IS_THIS_MODEL_A_PLANE(mnVehPlayer)
vMovePosVehPlayer = <<-201.52, 307.55, 96.84>> //Move to car park
fMoveHeadingVehPlayer = 261.18
ELIF (mnVehPlayer = BLIMP OR mnVehPlayer = BLIMP2)
vMovePosVehPlayer = <<-211.02, 474.41, 133.36>>
fMoveHeadingVehPlayer = 281.42
ELSE
vMovePosVehPlayer = <<-88.6147, 303.8292, 105.9208>>
fMoveHeadingVehPlayer = 245.3452
ENDIF
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-10.662442,283.070343,110.237289>>, <<-76.664360,301.181580,104.585754>>, 6.000000, vMovePosVehPlayer, fMoveHeadingVehPlayer)
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-86.616211,297.277191,102.943222>>, <<-55.158104,286.539825,109.669701>>, 16.750000,vMovePosVehPlayer, fMoveHeadingVehPlayer)
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-55.969414,318.223999,109.394379>>, <<14.169346,300.160767,117.998123>>, 41.750000, vMovePosVehPlayer, fMoveHeadingVehPlayer) //To fix B*1965914
SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(<<0,0,0>>,0,TRUE,CHAR_FRANKLIN)
RC_START_CUTSCENE_MODE(m_vCharPos,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE,TRUE)
CLEAR_AREA_OF_PEDS(<< -28.7403, 303.3516, 111.6961 >>, 40.0)// Area around poppy
CLEAR_AREA_OF_PEDS(<< -17.3155, 340.0973, 110.4743 >>, 50.0)// Area around pool
CLEAR_AREA_OF_PEDS(<< 12.2397, 319.1199, 109.8446 >>, 50.0)// Area around Hotel staff
CLEAR_AREA_OF_VEHICLES(<< -12.2142, 280.2522, 107.3232 >>, 20)
CLEAR_AREA_OF_VEHICLES(<< -48.1975, 352.4658, 112.0536 >>, 5)
CLEAR_ANGLED_AREA_OF_VEHICLES(<<-55.969414,318.223999,109.394379>>, <<14.169346,300.160767,117.998123>>, 41.750000) //To fix B*1965914
IF IS_SCREEN_FADED_OUT()
IF NOT IS_SCREEN_FADING_IN()
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME,FALSE)
ENDIF
ENDIF
eState = SS_ACTIVE
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_ACTIVE
//IF bCSSetExitBev = FALSE
IF NOT DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[0])
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
sRCLauncherDataLocal.objID[0] = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
SK_PRINT("BEVERLYS CAMERA - GOT HANDLE FROM CS")
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(mBuddy.piPed)
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverley"))
mBuddy.piPed = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverley"))
ENDIF
ELSE
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverley")
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[0])
//SET_ENTITY_VISIBLE_IN_CUTSCENE(sRCLauncherDataLocal.objID[0],FALSE)
DETACH_ENTITY(sRCLauncherDataLocal.objID[0])
DELETE_OBJECT(sRCLauncherDataLocal.objID[0])
ELSE
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
sRCLauncherDataLocal.objID[0] = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
//SET_ENTITY_VISIBLE_IN_CUTSCENE(sRCLauncherDataLocal.objID[0],FALSE)
DETACH_ENTITY(sRCLauncherDataLocal.objID[0])
DELETE_OBJECT(sRCLauncherDataLocal.objID[0])
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(objCam)
objCam = CREATE_OBJECT_NO_OFFSET(Prop_Pap_Camera_01, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mBuddy.piPed,<<0.0,0.0,20.0>>))
ENDIF
IF IS_ENTITY_ALIVE(mBuddy.piPed)
IF IS_ENTITY_ALIVE(objCam)
//ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) // <<0.06,0,-0.06>>, <<0,0,90>>
ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
ENDIF
//IF HAS_CLIP_SET_LOADED("move_m@casual@f")
//SET_PED_MOVEMENT_CLIPSET(mBuddy.piPed,"move_m@casual@f")
//ENDIF
IF HAS_CLIP_SET_LOADED(sWeaponMoveClipset)
SET_PED_WEAPON_MOVEMENT_CLIPSET(mBuddy.piPed,sWeaponMoveClipset)
ENDIF
FORCE_PED_AI_AND_ANIMATION_UPDATE(mBuddy.piPed)
TASK_LOOK_AT_ENTITY(mBuddy.piPed,PLAYER_PED_ID(),-1)
TASK_FOLLOW_NAV_MESH_TO_COORD(mBuddy.piPed,<<-60.9116, 295.3501, 105.0975>>,1)
bCSSetExitBev = TRUE
//IF IS_SCREEN_FADED_OUT()
//ENDIF
ENDIF
ENDIF
ENDIF
//ENDIF
/*
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverlys_camera")
SK_PRINT("BEVERLYS CAMERA - CAN SET EXIT STATE")
ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) // <<0.06,0,-0.06>>, <<0,0,90>>
ENDIF
*/
//IF GET_CUTSCENE_TIME() < 5000
/*
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
objCam = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
SET_ENTITY_COLLISION(objCam,FALSE)
ENDIF
*/
//ENDIF
IF bCSSetExitCam = FALSE
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
REPLAY_STOP_EVENT()
REPLAY_RECORD_BACK_FOR_TIME(0.0, 10.0, REPLAY_IMPORTANCE_LOWEST)
//SET_ENTITY_HEADING(PLAYER_PED_ID(),247.7034)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(16.1556)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-6.6252)
bCSSetExitCam = TRUE
ENDIF
ENDIF
/*
IF bCSSetExitBev = FALSE
IF IS_PED_UNINJURED(mBuddy.piPed)
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverley")
//FORCE_PED_AI_AND_ANIMATION_UPDATE(mBuddy.piPed)
TASK_FOLLOW_NAV_MESH_TO_COORD(mBuddy.piPed,<<-60.9116, 295.3501, 105.0975>>,1)
//TASK_PLAY_ANIM(mBuddy.piPed,"RCMPaparazzo1IG_1","idle",NORMAL_BLEND_IN,SLOW_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY)
//SET_PED_WEAPON_MOVEMENT_CLIPSET(mBuddy.piPed,sWeaponMoveClipset)
//TASK_PLAY_ANIM(mBuddy.piPed,"rcmpaparazzo_2","pap_base",INSTANT_BLEND_IN,SLOW_BLEND_OUT,500,AF_SECONDARY | AF_UPPERBODY)
IF NOT DOES_ENTITY_EXIST(objCam)
objCam = CREATE_OBJECT_NO_OFFSET(Prop_Pap_Camera_01, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mBuddy.piPed,<<0.0,0.0,20.0>>))
SET_ENTITY_COLLISION(objCam,FALSE)
ENDIF
IF DOES_ENTITY_EXIST(objCam)
IF NOT IS_ENTITY_ATTACHED_TO_ENTITY(objCam, mBuddy.piPed)
ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) // <<0.06,0,-0.06>>, <<0,0,90>>
ENDIF
ENDIF
bCSSetExitBev = TRUE
ENDIF
ENDIF
ENDIF
*/
IF bCSSetExitFranklin = FALSE
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin")
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(),MS_ON_FOOT_WALK,FALSE,FAUS_CUTSCENE_EXIT)
SET_PED_MIN_MOVE_BLEND_RATIO(PLAYER_PED_ID(),PEDMOVE_WALK)
TASK_FOLLOW_NAV_MESH_TO_COORD(PLAYER_PED_ID(),<<-63.1068, 294.9655, 105.0442>>,PEDMOVEBLENDRATIO_WALK,-1,1,ENAV_NO_STOPPING | ENAV_DONT_AVOID_PEDS | ENAV_DONT_AVOID_OBJECTS)
//TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(),<<-63.1068, 294.9655, 105.0442>>,0.7,-1)
bCSSetExitFranklin = TRUE
ENDIF
ENDIF
IF bCSSetExitCam = TRUE
AND bCSSetExitBev = TRUE
AND bCSSetExitFranklin = TRUE
AND NOT IS_SCREEN_FADING_OUT()
//AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverlys_camera")
eState = SS_CLEANUP
ENDIF
/*
IF IS_CUTSCENE_PLAYING()
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
//SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_ENTITY_HEADING(PLAYER_PED_ID()) - 247.6827)
SET_ENTITY_HEADING(PLAYER_PED_ID(),247.7034)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-12)
eState = SS_CLEANUP
ENDIF
ELSE
eState = SS_CLEANUP
ENDIF
IF IS_PED_UNINJURED(mBuddy.piPed)
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverley")
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
objCam = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
ENDIF
IF NOT DOES_ENTITY_EXIST(objCam)
objCam = CREATE_OBJECT_NO_OFFSET(Prop_Pap_Camera_01, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mBuddy.piPed,<<0.0,0.0,10.0>>))
ENDIF
IF DOES_ENTITY_EXIST(objCam)
IF NOT IS_ENTITY_ATTACHED_TO_ENTITY(objCam, mBuddy.piPed)
ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) // <<0.06,0,-0.06>>, <<0,0,90>>
ENDIF
ENDIF
ENDIF
ENDIF
*/
BREAK
CASE SS_CLEANUP
/*
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
objCam = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
ENDIF
*/
/*
IF bCSSetExitBev = FALSE
IF IS_PED_UNINJURED(mBuddy.piPed)
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverley")
FORCE_PED_AI_AND_ANIMATION_UPDATE(mBuddy.piPed)
//SET_PED_WEAPON_MOVEMENT_CLIPSET(mBuddy.piPed,sWeaponMoveClipset)
//TASK_PLAY_ANIM(mBuddy.piPed,"rcmpaparazzo_2","pap_base",INSTANT_BLEND_IN,SLOW_BLEND_OUT,500,AF_SECONDARY | AF_UPPERBODY)
IF NOT DOES_ENTITY_EXIST(objCam)
objCam = CREATE_OBJECT_NO_OFFSET(Prop_Pap_Camera_01, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mBuddy.piPed,<<0.0,0.0,10.0>>))
ENDIF
IF DOES_ENTITY_EXIST(objCam)
IF NOT IS_ENTITY_ATTACHED_TO_ENTITY(objCam, mBuddy.piPed)
ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) // <<0.06,0,-0.06>>, <<0,0,90>>
ENDIF
ENDIF
bCSSetExitBev = TRUE
ENDIF
ENDIF
ENDIF
*/
/*
IF bCSSetExitBev = FALSE
IF IS_PED_UNINJURED(mBuddy.piPed)
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverley")
//FORCE_PED_AI_AND_ANIMATION_UPDATE(mBuddy.piPed)
TASK_FOLLOW_NAV_MESH_TO_COORD(mBuddy.piPed,<<-60.9116, 295.3501, 105.0975>>,1)
//TASK_PLAY_ANIM(mBuddy.piPed,"RCMPaparazzo1IG_1","idle",NORMAL_BLEND_IN,SLOW_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY)
//SET_PED_WEAPON_MOVEMENT_CLIPSET(mBuddy.piPed,sWeaponMoveClipset)
//TASK_PLAY_ANIM(mBuddy.piPed,"rcmpaparazzo_2","pap_base",INSTANT_BLEND_IN,SLOW_BLEND_OUT,500,AF_SECONDARY | AF_UPPERBODY)
IF NOT DOES_ENTITY_EXIST(objCam)
objCam = CREATE_OBJECT_NO_OFFSET(Prop_Pap_Camera_01, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mBuddy.piPed,<<0.0,0.0,10.0>>))
SET_ENTITY_COLLISION(objCam,FALSE)
ENDIF
IF DOES_ENTITY_EXIST(objCam)
IF NOT IS_ENTITY_ATTACHED_TO_ENTITY(objCam, mBuddy.piPed)
ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) // <<0.06,0,-0.06>>, <<0,0,90>>
ENDIF
ENDIF
bCSSetExitBev = TRUE
ENDIF
ENDIF
ENDIF
*/
//STOP_CUTSCENE()
/*
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
objCam = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverlys_camera"))
ENDIF
IF WAS_CUTSCENE_SKIPPED()
//SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(),<<-74.6184, 299.8621, 105.4468>>, 247.7034)
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
//SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_ENTITY_HEADING(PLAYER_PED_ID()) - 247.6827)
SET_ENTITY_HEADING(PLAYER_PED_ID(),247.7034)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-12)
ENDIF
IF IS_PED_UNINJURED(mBuddy.piPed)
AND IS_PED_UNINJURED(PLAYER_PED_ID())
//TASK_ACHIEVE_HEADING(mBuddy.piPed, 161.8124)
TASK_ACHIEVE_HEADING(PLAYER_PED_ID(), 247.7034)
ENDIF
*/
//IF WAS_CUTSCENE_SKIPPED()
//OR IS_SCREEN_FADED_OUT()
//WAIT_FOR_CUTSCENE_TO_STOP()
//IF WAS_CUTSCENE_SKIPPED()
RC_END_CUTSCENE_MODE()
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
iTimerCutsceneFinished = GET_GAME_TIMER()
/*
IF IS_PED_UNINJURED(mBuddy.piPed)
IF NOT DOES_ENTITY_EXIST(objCam)
objCam = CREATE_OBJECT_NO_OFFSET(Prop_Pap_Camera_01, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mBuddy.piPed,<<0.0,0.0,10.0>>))
ENDIF
IF DOES_ENTITY_EXIST(objCam)
IF NOT IS_ENTITY_ATTACHED_TO_ENTITY(objCam, mBuddy.piPed)
ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) // <<0.06,0,-0.06>>, <<0,0,90>>
ENDIF
ENDIF
ENDIF
*/
IF bCSSkipped = TRUE
/*
IF NOT DOES_ENTITY_EXIST(objCam)
objCam = CREATE_OBJECT_NO_OFFSET(Prop_Pap_Camera_01, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mBuddy.piPed,<<0.0,0.0,20.0>>))
ENDIF
IF NOT DOES_ENTITY_EXIST(mBuddy.piPed)
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverley"))
mBuddy.piPed = GET_PED_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY("Beverley"))
ENDIF
ELSE
//IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverley")
IF IS_ENTITY_ALIVE(mBuddy.piPed)
IF IS_ENTITY_ALIVE(objCam)
//IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverlys_camera")
ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) // <<0.06,0,-0.06>>, <<0,0,90>>
//ENDIF
ENDIF
SAFE_TELEPORT_ENTITY(mBuddy.piPed,<<-68.5685, 298.0157, 105.2401>>, 247.9095)
IF HAS_CLIP_SET_LOADED("move_m@casual@f")
SET_PED_MOVEMENT_CLIPSET(mBuddy.piPed,"move_m@casual@f")
ENDIF
FORCE_PED_MOTION_STATE(mBuddy.piPed,MS_ON_FOOT_WALK,FALSE,FAUS_CUTSCENE_EXIT)
SET_PED_MIN_MOVE_BLEND_RATIO(mBuddy.piPed,PEDMOVE_WALK)
TASK_FOLLOW_NAV_MESH_TO_COORD(mBuddy.piPed,<<-60.9116, 295.3501, 105.0975>>,1)
bCSSetExitBev = TRUE
ENDIF
ENDIF
*/
ENDIF
NEXT_STAGE() //advance stage
BREAK
CASE SS_SKIPPED
eState = SS_CLEANUP
BREAK
ENDSWITCH
ENDPROC
#IF NOT IS_JAPANESE_BUILD
FUNC BOOL IS_JUSTIN_THRUSTIN()
FLOAT fPhaseForSound
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene)
fPhaseForSound = GET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene)
IF fPhaseForSound >= 0.069
AND fPhaseForSound < 0.069 + 0.05
RETURN TRUE
ENDIF
IF fPhaseForSound >= 0.249
AND fPhaseForSound < 0.249 + 0.05
RETURN TRUE
ENDIF
IF fPhaseForSound >= 0.486
AND fPhaseForSound < 0.486 + 0.05
RETURN TRUE
ENDIF
IF fPhaseForSound >= 0.668
AND fPhaseForSound < 0.668 + 0.05
RETURN TRUE
ENDIF
IF fPhaseForSound >= 0.881
AND fPhaseForSound < 0.881 + 0.05
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
#ENDIF
/// PURPOSE:
/// Flowing bev around hotel grounds update
/// Performs update based on the current mission stage
/// Checks for failing and objective completion
/// PARAMS:
/// stage - The stage to update
PROC UPDATE_SPECIFIC_FOLLOW(MISSION_STAGE stage)
MONITER_PLAYER_FAILING()
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
AND IS_PED_UNINJURED(mHotelStaff[1].piPed)
MAID_STATES()
BUSBOY_STATES()
ENDIF
VECTOR vCurrentPos
VECTOR vCorrectPos
TEXT_LABEL_23 root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
SWITCH stage
CASE MS_FOLLOW_BEV_ROAD
IF NOT IS_POSITION_OCCUPIED(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mBuddy.piPed,<<0,3,0>>),0.1,FALSE,TRUE,FALSE,FALSE,FALSE)
bBentleyGotBevStuck = FALSE
IF SHOULD_PROGRESS_FOLLOW_STATE(ROUTE_STAIRS_1_MIDDLE, <<2.5,2.5,2.5>>) //<<2.5,2.5,2.5>>
eState = SS_CLEANUP
ENDIF
IF bConvoNowDude = FALSE
AND IS_ENTITY_IN_ANGLED_AREA( mBuddy.piPed, <<-70.084908,298.558319,104.780319>>, <<-62.144356,295.838318,108.372864>>, 5.500000)
IF IS_SCREEN_FADED_IN()
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_WALKA", CONV_PRIORITY_MEDIUM)
bConvoNowDude = TRUE
ENDIF
ENDIF
ELSE
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,25)
AND NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mHotelStaff[0].piPed,15)
IF bConvoDontInterfere = FALSE
bConvoDontInterfere = TRUE
ELSE
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mHotelStaff[0].piPed,15)
IF NOT IS_STRING_NULL_OR_EMPTY(root)
IF ARE_STRINGS_EQUAL(root, "PAP2_WALKB")
KILL_ANY_CONVERSATION()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
PROGRESS_BEV_ROUTE(TRUE, ROUTE_STAIRS_1_BOTTOM)
ELSE
bBentleyGotBevStuck = TRUE
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(mBuddy.piPed)
WAYPOINT_PLAYBACK_OVERRIDE_SPEED(mBuddy.piPed,0)
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-2.997917,292.149750,109.163933>>, <<7.916159,316.194916,116.919395>>, 40.750000)
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
TASK_LOOK_AT_ENTITY(mHotelStaff[0].piPed,PLAYER_PED_ID(),-1)
TASK_USE_MOBILE_PHONE(mHotelStaff[0].piPed,FALSE)
TASK_TURN_PED_TO_FACE_ENTITY(mHotelStaff[0].piPed,PLAYER_PED_ID())
MISSION_FAILED(FR_ATTENTION)
ENDIF
ENDIF
ENDIF
BREAK
CASE MS_FOLLOW_BEV_GUARDS
IF SHOULD_PROGRESS_FOLLOW_STATE(ROUTE_STAIRS_2_BOTTOM, <<2.5,2.5,2.5>>)
SK_PRINT("CLEANUP FOLLOW BEV GUARDS")
eState = SS_CLEANUP
ENDIF
DO_STAFF_CONVO(bExpireBevSpeech1, bExpireStaffSpeech)
PROGRESS_BEV_ROUTE()
BREAK
CASE MS_FOLLOW_TO_POPPY
REQUEST_ANIM_DICT("cover@move@base@core") // preload cover anims B*1441589
IF fLodScale < 1.0
fLodScale = 0
ELIF fLodScale < 1.8
fLodScale += 0.005
ENDIF
IF fLodScale > 1.8
fLodScale = 1.8
ENDIF
OVERRIDE_LODSCALE_THIS_FRAME(fLodScale)
STOP_STAFF_CONV_CHECK()
IF bPlayerSentToCover = TRUE
#IF NOT IS_JAPANESE_BUILD
IF IS_JUSTIN_THRUSTIN()
IF HAS_SOUND_FINISHED(iGruntSounds)
PLAY_SOUND_FROM_ENTITY(iGruntSounds,"AMBIENT_SEX",mPoppy.piPed,"PAPARAZZO_02_SOUNDSETS")
ENDIF
ENDIF
fGruntVol += 0.005
IF fGruntVol > 0.6
fGruntVol = 0.6
ENDIF
//#IF IS_DEBUG_BUILD
//PRINTFLOAT(fGruntVol)
//PRINTNL()
//#ENDIF
SET_VARIABLE_ON_SOUND(iGruntSounds,"ONESHOT_VOLUME",fGruntVol)
#ENDIF
DO_PLAYER_HOLDING_CAMERA()
IF HAS_CLIP_SET_LOADED(sWeaponMoveClipsetFrank)
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(),sWeaponMoveClipsetFrank)
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-32.757969,319.505890,111.495361>>, <<-33.262951,318.437958,113.495361>>, 1.000000)
SK_PRINT("TK~~~~Player in cover spot~~~~")
++iFramesPlayerInCoverSpot
ENDIF
IF GET_GAME_TIMER() > iTimerPlayerSentToCover + 200
iFramesPlayerInCoverSpot = iFramesPlayerInCoverSpot
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(),"rcmpaparazzo_2","idle_d")
AND GET_ENTITY_ANIM_CURRENT_TIME(PLAYER_PED_ID(),"rcmpaparazzo_2","idle_d") >= 0.4
#IF NOT IS_JAPANESE_BUILD
IF bSetAudioPos = FALSE
//INIT_SYNCH_SCENE_AUDIO_WITH_POSITION("PAP2_IG1_POPPYSEX",<<-30.990408,301.092346,112.681885>>)
INIT_SYNCH_SCENE_AUDIO_WITH_ENTITY("PAP2_IG1_POPPYSEX",mPoppy.piPed)
SK_PRINT("TK************ SETTING SYNCH SCENE AUDIO POSITION THIS FRAME ************TK")
bSetAudioPos = TRUE
ENDIF
#ENDIF
#IF NOT IS_JAPANESE_BUILD
IF PREPARE_SYNCHRONIZED_AUDIO_EVENT("PAP2_IG1_POPPYSEX",0) = TRUE
//IF LOAD_STREAM("CUTSCENES_PAP2_IG1_POPPYSEX_CENTER")
SET_PED_CAN_ARM_IK(PLAYER_PED_ID(),TRUE)
SET_PED_CAN_TORSO_IK(PLAYER_PED_ID(),TRUE)
SET_PED_CAN_TORSO_REACT_IK(PLAYER_PED_ID(),TRUE)
eState = SS_CLEANUP
ENDIF
#ENDIF
#IF IS_JAPANESE_BUILD
SET_PED_CAN_ARM_IK(PLAYER_PED_ID(),TRUE)
SET_PED_CAN_TORSO_IK(PLAYER_PED_ID(),TRUE)
SET_PED_CAN_TORSO_REACT_IK(PLAYER_PED_ID(),TRUE)
eState = SS_CLEANUP
#ENDIF
ENDIF
IF GET_GAME_TIMER() > iTimerPlayerSentToCover + 10000
#IF NOT IS_JAPANESE_BUILD
IF bSetAudioPos = FALSE
//INIT_SYNCH_SCENE_AUDIO_WITH_POSITION("PAP2_IG1_POPPYSEX",<<-30.990408,301.092346,112.681885>>)
INIT_SYNCH_SCENE_AUDIO_WITH_ENTITY("PAP2_IG1_POPPYSEX",mPoppy.piPed)
SK_PRINT("TK************ SETTING SYNCH SCENE AUDIO POSITION THIS FRAME ************TK")
bSetAudioPos = TRUE
ENDIF
#ENDIF
#IF NOT IS_JAPANESE_BUILD
IF PREPARE_SYNCHRONIZED_AUDIO_EVENT("PAP2_IG1_POPPYSEX",0) = TRUE
//IF LOAD_STREAM("CUTSCENES_PAP2_IG1_POPPYSEX_CENTER")
SET_PED_CAN_ARM_IK(PLAYER_PED_ID(),TRUE)
SET_PED_CAN_TORSO_IK(PLAYER_PED_ID(),TRUE)
SET_PED_CAN_TORSO_REACT_IK(PLAYER_PED_ID(),TRUE)
eState = SS_CLEANUP
ENDIF
#ENDIF
#IF IS_JAPANESE_BUILD
SET_PED_CAN_ARM_IK(PLAYER_PED_ID(),TRUE)
SET_PED_CAN_TORSO_IK(PLAYER_PED_ID(),TRUE)
SET_PED_CAN_TORSO_REACT_IK(PLAYER_PED_ID(),TRUE)
eState = SS_CLEANUP
#ENDIF
ENDIF
ENDIF
ENDIF
IF NOT bOkToPassCam
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-35.765366,324.991486,111.696045>>, <<-37.292095,327.326324,113.446045>>, 1.000000) //player went ahead
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-38.161537,326.245728,111.696045>>, <<-36.300270,325.416077,113.446045>>, 1.250000)
//IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(),<<-37.256691,325.465210,112.696281>>,<<0.1,0.1,0.1>>)
//AND IS_POSITION_OCCUPIED(<<-37.256691,325.465210,112.696281>>,0.1,FALSE,FALSE,TRUE,FALSE,FALSE,mBuddy.piPed)
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,2) //6
//MISSION_FAILED(FR_POPPY_SCARED)
TASK_STAND_STILL(mBuddy.piPed,-1)
IF bPassCamConvo = FALSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF NOT bPlayerSentToCover
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_PASS", CONV_PRIORITY_HIGH) //Take my camera and film this shit, I'll keep a look out.
bPassCamConvo = TRUE
ENDIF
ELSE
bPassCamConvo = TRUE
ENDIF
ENDIF
ENDIF
bBevSentToCover = TRUE
bOkToPassCam = TRUE
ENDIF
ENDIF
ENDIF
// For B*2029356
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-36.526478,324.284668,111.445259>>, <<-38.700287,327.491364,114.195259>>, 3.000000)
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
ENDIF
IF bPoppyCreated = TRUE
//IF iCoverSeq > 0
//IF bBevSentToCover
IF bOkToPassCam
IF IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), <<-37.842674,323.426697,100.180809>>, <<-31.976759,320.666077,113.695953>>, 5.250000)
OR IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(), <<-35.976223,326.202057,111.196075>>, <<-37.204895,325.147552,113.495361>>, 1.000000)
OR IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,1.8)
IF bPlayerSentToCover = FALSE
//SET_PLAYER_CAN_USE_COVER(PLAYER_ID(),TRUE)
SET_PLAYER_CONTROL(PLAYER_ID(),FALSE,SPC_REENABLE_CONTROL_ON_DEATH)
CLEAR_PRINTS()
SET_PED_CAN_ARM_IK(PLAYER_PED_ID(),FALSE)
SET_PED_CAN_TORSO_IK(PLAYER_PED_ID(),FALSE)
SET_PED_CAN_TORSO_REACT_IK(PLAYER_PED_ID(),FALSE)
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(),FALSE)
IF HAS_CLIP_SET_LOADED(sWeaponMoveClipsetFrank)
SET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID(),sWeaponMoveClipsetFrank)
ELSE
REQUEST_CLIP_SET(sWeaponMoveClipsetFrank)
ENDIF
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),WEAPONTYPE_UNARMED,TRUE)
DO_PLAYER_HOLDING_CAMERA()
//CLEAR_PED_TASKS(PLAYER_PED_ID())
IF DOES_ENTITY_EXIST(objCam)
//ATTACH_ENTITY_TO_ENTITY(objCam, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE)
ATTACH_ENTITY_TO_ENTITY(objCam, PLAYER_PED_ID(), GET_PED_BONE_INDEX(PLAYER_PED_ID(), BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
ENDIF
IF NOT GET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID())
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(),TRUE,"DEFAULT_ACTION")
ENDIF
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-35.552845,324.443054,111.696045>>, <<-37.763191,327.745605,113.696045>>, 1.000000)
OR IS_PED_RUNNING(PLAYER_PED_ID())
OR IS_PED_SPRINTING(PLAYER_PED_ID())
OR IS_PED_JUMPING(PLAYER_PED_ID())
OR IS_PED_RAGDOLL(PLAYER_PED_ID())
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(),<<-37.0561, 326.6470, 111.6960>>, 203.1247)
//FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(),MS_ON_FOOT_WALK,FALSE,FAUS_CUTSCENE_EXIT)
ENDIF
vCurrentPos = GET_ENTITY_COORDS(mBuddy.piPed)
vCorrectPos = <<-37.224827,325.531250,112.696030>>
IF vCurrentPos.x < vCorrectPos.x - 0.2
OR vCurrentPos.x > vCorrectPos.x + 0.2
OR vCurrentPos.y < vCorrectPos.y - 0.2
OR vCurrentPos.y > vCorrectPos.y + 0.2
SAFE_TELEPORT_ENTITY(mBuddy.piPed,<<-39.2954, 328.3034, 111.6960>>, 218.8305) //warp him back a bit, something got fucked
ENDIF
//SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(),<<-36.1845, 325.5363, 111.6960>>, 195.2352)
//FORCE_PED_MOTION_STATE(PLAYER_PED_ID(),MS_ON_FOOT_RUN,FALSE,FAUS_CUTSCENE_EXIT)
SEQUENCE_INDEX seqFrankFilm
OPEN_SEQUENCE_TASK(seqFrankFilm)
//TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<<-33.8491, 319.3350, 111.6960>>,2,-1,1,ENAV_ACCURATE_WALKRUN_START,184.4715) //184.4715
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<<-33.8491, 319.3350, 111.6960>>,1.4,-1,1,ENAV_ACCURATE_WALKRUN_START,184.4715) //184.4715
TASK_PLAY_ANIM(NULL,"rcmpaparazzo_2","idle_d",2,INSTANT_BLEND_OUT,-1,AF_LOOPING)
CLOSE_SEQUENCE_TASK(seqFrankFilm)
TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(),seqFrankFilm)
CLEAR_SEQUENCE_TASK(seqFrankFilm)
IF DOES_CAM_EXIST(camFrankFilm)
DESTROY_CAM(camFrankFilm)
ENDIF
IF DOES_CAM_EXIST(camFrankFilm2)
DESTROY_CAM(camFrankFilm2)
ENDIF
camFrankFilm = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA",FALSE)
camFrankFilm2 = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA",FALSE)
//SET_CAM_PARAMS(camFrankFilm,<<-37.9019, 327.7973, 113.3252>>, <<-1.8838, -0.0000, -147.4014>>,34.0)
SET_CAM_PARAMS(camFrankFilm,<<-37.8130, 328.5478, 113.3867>>, <<-5.9528, 0.0001, -163.8669>>,23.8)
SET_CAM_PARAMS(camFrankFilm2,<<-34.8325, 320.8304, 113.3748>>, <<-6.6594, -0.0146, -161.6700>>,34.0)
SET_CAM_NEAR_DOF(camFrankFilm,2)
SET_CAM_FAR_DOF(camFrankFilm,40)
SET_CAM_DOF_STRENGTH(camFrankFilm,0.5)
SET_CAM_NEAR_DOF(camFrankFilm2,2)
SET_CAM_FAR_DOF(camFrankFilm2,40)
SET_CAM_DOF_STRENGTH(camFrankFilm2,0.5)
SET_CAM_ACTIVE(camFrankFilm2,TRUE)
SET_CAM_ACTIVE(camFrankFilm,TRUE)
//SET_CAM_ACTIVE_WITH_INTERP(camFrankFilm2,camFrankFilm,3600,GRAPH_TYPE_SIN_ACCEL_DECEL)
SET_CAM_ACTIVE_WITH_INTERP(camFrankFilm2,camFrankFilm,7000,GRAPH_TYPE_SIN_ACCEL_DECEL)
RENDER_SCRIPT_CAMS(TRUE,FALSE)
IF DOES_CAM_EXIST(camFrankFilm)
SHAKE_CAM(camFrankFilm,"HAND_SHAKE",1.0)
ENDIF
IF DOES_CAM_EXIST(camFrankFilm2)
SHAKE_CAM(camFrankFilm2,"HAND_SHAKE",1.0)
ENDIF
//TASK_SEEK_COVER_TO_COORDS(PLAYER_PED_ID(),<< -33.1418, 318.9297, 111.6957 >>,<< -24.1590, 312.4199, 111.5455 >>,-1,TRUE)
iTimerPlayerSentToCover = GET_GAME_TIMER()
bPlayerSentToCover = TRUE
#IF NOT IS_JAPANESE_BUILD
fGruntVol = 0.1
#ENDIF
PLAY_SOUND_FROM_ENTITY(-1,"CAMERA_FOLEY",PLAYER_PED_ID(),"PAPARAZZO_02_SOUNDSETS")
HIDE_HUD_AND_RADAR_THIS_FRAME()
THEFEED_HIDE_THIS_FRAME()
//OVERRIDE_LODSCALE_THIS_FRAME(1)
ENDIF
ENDIF
ENDIF
ENDIF
IF bExpireInactive
DO_POPPY_CONVO(bExpireBevSpeech1, bExpireBevSpeech2)
ENDIF
PROGRESS_BEV_ROUTE(TRUE, ROUTE_POOL_STAIRS)
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Skip a specific follow stage
/// PARAMS:
/// stage - Stage to skip
PROC SKIP_SPECIFIC_FOLLOW(MISSION_STAGE stage)
SWITCH stage
CASE MS_FOLLOW_BEV_ROAD
IF IS_PED_UNINJURED(mBuddy.piPed)
CLEAR_PED_TASKS(mBuddy.piPed)
ENDIF
iBevRoute = ROUTE_STAIRS_1_TOP
SAFE_TELEPORT_ENTITY(mBuddy.piPed, vBevRoute[ROUTE_STAIRS_1_MIDDLE], 338.4024) //<<-11.4650, 283.2339, 107.3171>>
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), << -14.1493, 280.7966, 107.2078 >>, 317.7051)
bExpireBevSpeech2 = TRUE
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
eState = SS_ACTIVE
BREAK
CASE MS_FOLLOW_BEV_GUARDS
IF IS_PED_UNINJURED(mBuddy.piPed)
CLEAR_PED_TASKS(mBuddy.piPed)
ENDIF
INT i
FOR i = 0 TO (MAX_STAFF-1)
IF IS_PED_UNINJURED(mHotelStaff[i].piPed)
CLEAR_PED_TASKS(mHotelStaff[i].piPed)
ENDIF
ENDFOR
SAFE_TELEPORT_ENTITY(mBuddy.piPed, vBevRoute[ROUTE_STAIRS_2_BOTTOM], 63.3365)
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), << -2.2002, 317.2632, 109.9189 >>, 60.7242)
iBevRoute = ROUTE_POOL_STAIRS
bExpireStaffSpeech = TRUE
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
eState = SS_ACTIVE
BREAK
CASE MS_FOLLOW_TO_POPPY
IF IS_PED_UNINJURED(mBuddy.piPed)
CLEAR_PED_TASKS(mBuddy.piPed)
ENDIF
bCanCreatePoppy = TRUE
LOAD_AND_CREATE_POP()
iBevRoute = ROUTE_POPPY
SAFE_TELEPORT_ENTITY(mBuddy.piPed, << -36.7532, 323.5341, 111.6957 >>, 165.7917)
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), << -35.1361, 320.0255, 111.6955 >>, 199.6725)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0)
eState = SS_ACTIVE
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Cleanup function for follow states
PROC SKIP_SPECIFIC_CLEANUP()
IF eMissionStage = MS_FOLLOW_TO_POPPY
INT i
FOR i=0 TO (MAX_STAFF-1)
SAFE_DELETE_PED(mHotelStaff[i].piPed)
ENDFOR
ENDIF
bExpireBevSpeech1 = FALSE
bExpireBevSpeech2 = FALSE
NEXT_STAGE()
ENDPROC
/// PURPOSE:
/// This function contains all the common checks and updates
/// that are used for the follow to poppy mission stages
/// something goes wrong in those stages check here first
PROC FOLLOWING_BEV()
REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME()
IF IS_REPLAY_IN_PROGRESS()
AND bDoDelayedfade
AND GET_GAME_TIMER() > iTimerStartStage + 900
AND IS_SCREEN_FADED_OUT()
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME,FALSE)
ENDIF
IF iSeqMusic = 0
TRIGGER_MUSIC_EVENT("PAP2_START")
iSeqMusic = 1
ENDIF
IF (eMissionStage = MS_FOLLOW_BEV_ROAD AND IS_PED_RAGDOLL(mBuddy.piPed))
MISSION_FAILED(FR_BUDDY_HARMED)
ENDIF
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<26.145760,302.110504,109.463455>>, <<-51.901978,337.526123,124.382706>>, 40.750000)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-6.873048,293.624451,111.962662>>, <<-11.449873,283.594482,107.314468>>, 2.000000) //Steps B*1935724
MISSION_FAILED(FR_ATTENTION)
ENDIF
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-6.007325,363.131378,112.006630>>, <<-24.759676,322.220612,115.753799>>, 27.500000)
IF HAS_PLAYER_KILLED_SOMEONE()
OR HAS_PLAYER_INJURED_SOMEONE()
IF IS_PED_UNINJURED(pedHotel[5])
SET_PED_SHOULD_PLAY_IMMEDIATE_SCENARIO_EXIT(pedHotel[5])
TASK_REACT_AND_FLEE_PED(pedHotel[5],PLAYER_PED_ID())
ENDIF
MISSION_FAILED(FR_ATTENTION)
ENDIF
ENDIF
IF iBevRoute < 2
IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) = PERFORMING_TASK
IF IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_MOVE_LR)
OR IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_MOVE_UD)
OR IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_ENTER)
OR IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_SPRINT)
OR IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_JUMP)
OR (IS_PLAYER_IN_FIRST_PERSON_CAMERA() AND IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_LOOK_LR))
OR (IS_PLAYER_IN_FIRST_PERSON_CAMERA() AND IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_LOOK_UD))
OR (IS_PLAYER_IN_FIRST_PERSON_CAMERA() AND IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_MOVE_UP_ONLY))
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ENDIF
ENDIF
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
IF IS_PED_UNINJURED(pedHotel[1])
UPDATE_AI_PED_BLIP(pedHotel[1],bsHotelPed1)
ENDIF
IF IS_PED_UNINJURED(pedHotel[2])
UPDATE_AI_PED_BLIP(pedHotel[2],bsHotelPed2)
ENDIF
IF IS_PED_UNINJURED(pedHotel[3])
UPDATE_AI_PED_BLIP(pedHotel[3],bsHotelPed3)
ENDIF
IF IS_PED_UNINJURED(pedHotel[4])
UPDATE_AI_PED_BLIP(pedHotel[4],bsHotelPed4)
ENDIF
/*
IF IS_PED_UNINJURED(pedHotel[5])
UPDATE_AI_PED_BLIP(pedHotel[5],bsHotelPed5)
ENDIF
*/
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
UPDATE_AI_PED_BLIP(mHotelStaff[0].piPed,bsStaff1)
ENDIF
IF IS_PED_UNINJURED(mHotelStaff[1].piPed)
UPDATE_AI_PED_BLIP(mHotelStaff[1].piPed,bsStaff2)
ENDIF
IF IS_PED_UNINJURED(mPoppy.piPed)
IF IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(),mPoppy.piPed,<<18,18,2>>)
AND IS_PED_FACING_PED(mPoppy.piPed,PLAYER_PED_ID(),60)
MISSION_FAILED(FR_POPPY_SCARED)
ELSE
IF IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(),mPoppy.piPed,<<7,7,2>>)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-20.678993,298.966248,111.262657>>, <<-35.815018,306.085938,115.481369>>, 24.000000) //Garden
MISSION_FAILED(FR_POPPY_SCARED)
ENDIF
ENDIF
UPDATE_AI_PED_BLIP(mPoppy.piPed,bsPoppy)
ENDIF
IF IS_PED_UNINJURED(mShagger.piPed)
UPDATE_AI_PED_BLIP(mShagger.piPed,bsJustin)
ENDIF
IF IS_PED_UNINJURED(mBodyGuard.piPed)
UPDATE_AI_PED_BLIP(mBodyGuard.piPed,bsSecurity)
ENDIF
IF IS_PED_UNINJURED(mBuddy.piPed)
SET_PED_INCREASED_AVOIDANCE_RADIUS(mBuddy.piPed)
SET_PED_TO_LOAD_COVER(mBuddy.piPed,TRUE)
IF IS_ENTITY_IN_ANGLED_AREA( mBuddy.piPed, <<-7.914861,290.702606,106.425247>>, <<-13.110273,279.689789,112.533493>>, 5.500000)
TEXT_LABEL_23 root = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF NOT IS_STRING_NULL_OR_EMPTY(root)
IF ARE_STRINGS_EQUAL(root,"PAP2_WALKA")
KILL_ANY_CONVERSATION()
ENDIF
ENDIF
ENDIF
IF eMissionStage = MS_FOLLOW_BEV_ROAD
IF NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,20)
TEXT_LABEL_23 rootWalk = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
IF NOT IS_STRING_NULL_OR_EMPTY(rootWalk)
IF ARE_STRINGS_EQUAL(rootWalk,"PAP2_WALKA")
KILL_FACE_TO_FACE_CONVERSATION()
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
TEXT_LABEL_23 labelMaid = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
IF NOT IS_STRING_NULL_OR_EMPTY(labelMaid)
IF ARE_STRINGS_EQUAL(labelMaid,"PAP2_STAFF_7") //4
IF IS_PED_RUNNING_MOBILE_PHONE_TASK(mHotelStaff[0].piPed)
TASK_USE_MOBILE_PHONE(mHotelStaff[0].piPed,FALSE)
//CLEAR_PED_SECONDARY_TASK(mHotelStaff[0].piPed)
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,30)
AND IS_PED_FACING_PED(PLAYER_PED_ID(),mBuddy.piPed,70)
AND NOT IS_PED_HEADTRACKING_PED(mBuddy.piPed,mHotelStaff[0].piPed)
IF NOT IS_PED_HEADTRACKING_PED(PLAYER_PED_ID(),mBuddy.piPed)
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,-1)
ENDIF
ELSE
IF IS_PED_HEADTRACKING_PED(mBuddy.piPed,mHotelStaff[0].piPed)
IF NOT IS_PED_HEADTRACKING_PED(PLAYER_PED_ID(),mHotelStaff[0].piPed)
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(),mHotelStaff[0].piPed,-1)
ENDIF
ELSE
IF IS_PED_HEADTRACKING_PED(PLAYER_PED_ID(),mBuddy.piPed)
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
ENDIF
ENDIF
ENDIF
ENDIF
DO_BEV_COVER_ANIMS() //COMMENT IN FOR OLD
IF bBevSentToCover
IF GET_GAME_TIMER() > iTimerBevSentToCover + 1000
bOkToPassCam = TRUE
ENDIF
ENDIF
IF IS_ENTITY_IN_RANGE_COORDS(mBuddy.piPed,<<-37.2030, 325.4259, 112.31>>,2)
AND bSpotted = FALSE
IF bPassCamConvo = FALSE
IF NOT bPlayerSentToCover
AND NOT IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(),<<-37.2030, 325.4259, 112.31>>,2)
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_PASS", CONV_PRIORITY_HIGH) //Take my camera and film this shit, I'll keep a look out.
REPLAY_RECORD_BACK_FOR_TIME(9.0, 4.0, REPLAY_IMPORTANCE_LOW)
bPassCamConvo = TRUE
//bBevSentToCover = TRUE
iTimerBevIdleLines = GET_GAME_TIMER()
ENDIF
ELSE
bPassCamConvo = TRUE
iTimerBevIdleLines = GET_GAME_TIMER()
ENDIF
ENDIF
//IF GET_GAME_TIMER() > iTimerBevSentToCover + 1600
//IF bPlayerSentToCover = FALSE
//SET_PED_CAN_ARM_IK(mBuddy.piPed,TRUE)
//SET_IK_TARGET(mBuddy.piPed,IK_PART_ARM_RIGHT,NULL,-1,<<-36.85, 325.78, 112.21>>,ITF_ARM_TARGET_WRT_IKHELPER,-1,-1) //<<-36.83, 325.88, 112.50>>
/*
IF IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(),<<-37.2030, 325.4259, 112.31>>,4)
AND IS_PED_FACING_PED(PLAYER_PED_ID(),mBuddy.piPed,30)
SET_PED_CAN_ARM_IK(PLAYER_PED_ID(),TRUE)
SET_IK_TARGET(PLAYER_PED_ID(),IK_PART_ARM_RIGHT,mBuddy.piPed,GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND),<<0,0,-0.25>>,ITF_ARM_TARGET_WRT_IKHELPER,-1,-1)
ENDIF
*/
//ENDIF
//ENDIF
//IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,12)
IF NOT IS_PED_IN_COVER(mBuddy.piPed)
IF NOT IS_ENTITY_PLAYING_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_a")
AND NOT IS_ENTITY_PLAYING_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_b")
AND NOT IS_ENTITY_PLAYING_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_c")
//IF IS_POSITION_OCCUPIED(<<-37.256691,325.465210,112.696281>>,0.1,FALSE,FALSE,TRUE,FALSE,FALSE,mBuddy.piPed)
IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(),<<-37.256691,325.465210,112.696281>>,<<0.05,0.05,0.05>>)
/*
IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> WAITING_TO_START_TASK
TASK_FOLLOW_NAV_MESH_TO_COORD(mBuddy.piPed,<<-37.6480, 326.9788, 111.6960>>,1,-1,0.5,ENAV_DEFAULT,207.8044)
ENDIF
*/
ELSE
/*
IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) <> WAITING_TO_START_TASK
AND NOT IS_ENTITY_AT_COORD(mBuddy.piPed,<<-37.5661, 325.8084, 111.6960>>,<<0.5,0.5,0.5>>)
TASK_FOLLOW_NAV_MESH_TO_COORD(mBuddy.piPed,<<-37.5661, 325.8084, 111.6960>>,1,-1,0.5,ENAV_DEFAULT,333.9539)
iTimerBevCoverTask = GET_GAME_TIMER()
iTimerBevCoverTask = iTimerBevCoverTask
IF bBevSentToCover = FALSE
iTimerBevSentToCover = GET_GAME_TIMER()
ENDIF
bBevSentToCover = TRUE
ENDIF
*/
//COMMENT IN FOR OLD
IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER) <> WAITING_TO_START_TASK
//TASK_PUT_PED_DIRECTLY_INTO_COVER(mBuddy.piPed,<<-37.24, 321.48, 112.31>>,-1,TRUE,0,TRUE,TRUE,NULL)
IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<-37.2396, 325.3983, 111.6961>>) //For B*1819613 - making sure Bev gets into cover
m_ciPap2 = ADD_COVER_POINT(<<-37.2396, 325.3983, 111.6961>>, 156.6960,COVUSE_WALLTOLEFT,COVHEIGHT_TOOHIGH,COVARC_90)
ENDIF
TASK_PUT_PED_DIRECTLY_INTO_COVER(mBuddy.piPed,<<-37.2022, 325.4253, 111.6954>>,-1,TRUE,0,TRUE,TRUE,m_ciPap2) //<<-37.2030, 325.4259, 112.31>>
IF IS_ENTITY_ALIVE(objCam)
DETACH_ENTITY(objCam) //COMMENT IN FOR OLD
ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) //COMMENT IN FOR OLD
ENDIF
RESET_PED_WEAPON_MOVEMENT_CLIPSET(mBuddy.piPed) //COMMENT IN FOR OLD
iTimerBevCoverTask = GET_GAME_TIMER()
IF bBevSentToCover = FALSE
iTimerBevSentToCover = GET_GAME_TIMER()
ENDIF
bBevSentToCover = TRUE
ELSE
IF GET_GAME_TIMER() > iTimerBevCoverTask + 2000
CLEAR_PED_TASKS(mBuddy.piPed)
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
//IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,5)
IF IS_ENTITY_AT_COORD(mBuddy.piPed,<<-37.256691,325.465210,112.696281>>,<<0.1,0.1,0.1>>)
FREEZE_ENTITY_POSITION(mBuddy.piPed,TRUE)
ENDIF
ENDIF
//ELSE
//IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_STAND_STILL) <> PERFORMING_TASK
// TASK_STAND_STILL(mBuddy.piPed,-1)
//ENDIF
//ENDIF
ENDIF
ENDIF
IF bPlayerSentToCover = FALSE
IF NOT DOES_ENTITY_EXIST(objCam)
objCam = CREATE_OBJECT_NO_OFFSET(Prop_Pap_Camera_01, GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(mBuddy.piPed,<<0.0,0.0,10.0>>))
ENDIF
IF DOES_ENTITY_EXIST(objCam)
IF NOT IS_ENTITY_ATTACHED_TO_ENTITY(objCam, mBuddy.piPed)
//ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0.06,0,-0.06>>, <<0,0,90>>, TRUE, TRUE) // <<0.06,0,-0.06>>, <<0,0,90>>
ATTACH_ENTITY_TO_ENTITY(objCam, mBuddy.piPed, GET_PED_BONE_INDEX(mBuddy.piPed, BONETAG_PH_R_HAND), <<0,0,0>>, <<0,0,0>>, TRUE, TRUE)
ENDIF
ENDIF
ENDIF
#IF NOT IS_JAPANESE_BUILD
SETUP_SYNC_SCENES()
/*
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene)
IF HAS_SOUND_FINISHED(iSexSound)
PLAY_SOUND_FROM_ENTITY(iSexSound,"AMBIENT_SEX",mPoppy.piPed,"PAPARAZZO_02_SOUNDSETS")
SK_PRINT("TK************ SEX SOUNDS ************")
ENDIF
ENDIF
*/
#ENDIF
#IF IS_JAPANESE_BUILD
PLAY_POPPY_SHAGGER_ANIM(0)
#ENDIF
IF bBevSentToCover
DO_BEV_IDLE_AT_FILM_POS_LINES()
ENDIF
//CLEAR_AREA_OF_PEDS(<< -17.3155, 340.0973, 110.4743 >>, 200.0)// Area around pool
IF bPlayerSentToCover = TRUE
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),WEAPONTYPE_UNARMED,TRUE)
ENDIF
SWITCH eState
CASE SS_INIT
bCanCreatePoppy = TRUE
IF SETUP_MISSION_STAGE(eMissionStage, bJumpSkip)
FREEZE_ENTITY_POSITION(mBuddy.piPed,FALSE)
eState = SS_ACTIVE
ENDIF
BREAK
CASE SS_ACTIVE
REQUEST_HOTEL_MODELS()
IF bHotelPedsSpawned = FALSE
SPAWN_HOTEL_PEDS()
ELSE
MONITOR_HOTEL_PEDS()
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-11.128758,354.317535,109.160736>>, <<-24.442318,326.814362,114.161804>>, 18.750000)
AND IS_ENTITY_IN_WATER(PLAYER_PED_ID())
IF NOT bJumpedInPool
INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(PAP2_POOL_JUMP)
bJumpedInPool = TRUE
ENDIF
ENDIF
DO_MAID_STUFF()
LOAD_AND_CREATE_POP()
IF NOT bSpotted
AND NOT bBudThreat
DO_INACTIVE_CONV()
MONITER_PEDS_PERCEPTION()
IF GET_GAME_TIMER() > iTimerCutsceneFinished + 0
UPDATE_SPECIFIC_FOLLOW(eMissionStage)
ENDIF
SET_PED_MAX_MOVE_BLEND_RATIO(mBuddy.piPed,2)
REPOSITION_SHAG_TABLE()
//IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-35.244846,323.518188,108.756752>>, <<-36.760059,326.002686,113.542892>>, 1.550000)
IF NOT bPlayerSentToCover
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-36.275143,328.586426,110.583931>>, <<-37.693676,325.320251,113.739784>>, 3.250000)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-37.621841,328.434387,109.445808>>, <<-41.964497,330.402069,113.445808>>, 5.750000)
//SET_PLAYER_CAN_USE_COVER(PLAYER_ID(),FALSE)
/*
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_COVER)
IF IS_PED_IN_COVER(PLAYER_PED_ID())
TASK_EXIT_COVER(PLAYER_PED_ID(),IDLE_COVER_EXIT,GET_ENTITY_COORDS(PLAYER_PED_ID()))
ENDIF
*/
ELSE
SET_PLAYER_CAN_USE_COVER(PLAYER_ID(),TRUE)
ENDIF
ELSE
SET_PLAYER_CAN_USE_COVER(PLAYER_ID(),TRUE)
ENDIF
ELSE
IF bBudThreat
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mHotelStaff[0].piPed, FALSE)
ENDIF
IF IS_PED_UNINJURED(mHotelStaff[1].piPed)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mHotelStaff[1].piPed, FALSE)
ENDIF
DO_BEV_THRETENED_CONV()
ELIF bSpotted
IF IS_PED_UNINJURED(mHotelStaff[0].piPed)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mHotelStaff[0].piPed, FALSE)
IF bStaffThreatened
IF GET_SCRIPT_TASK_STATUS(mHotelStaff[0].piPed,SCRIPT_TASK_REACT_AND_FLEE_PED) <> PERFORMING_TASK
TASK_REACT_AND_FLEE_PED(mHotelStaff[0].piPed,PLAYER_PED_ID())
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mHotelStaff[1].piPed)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(mHotelStaff[1].piPed, FALSE)
IF bStaffThreatened
IF GET_SCRIPT_TASK_STATUS(mHotelStaff[1].piPed,SCRIPT_TASK_REACT_AND_FLEE_PED) <> PERFORMING_TASK
TASK_REACT_AND_FLEE_PED(mHotelStaff[1].piPed,PLAYER_PED_ID())
ENDIF
ENDIF
ENDIF
IF bStaffThreatened
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
IF NOT bOkToPassCam
IF NOT bExpireSpottedSpeech
IF GET_DISTANCE_BETWEEN_ENTITIES(mBuddy.piPed, PLAYER_PED_ID()) < 12
bExpireSpottedSpeech = CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_SPOT", CONV_PRIORITY_HIGH)
ELSE
bExpireSpottedSpeech = TRUE
ENDIF
ELSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-21.921995,295.476227,111.571716>>, <<-62.670685,314.495544,113.836311>>, 33.750000)
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-31.052395,322.647614,111.402245>>, <<-53.921097,333.265991,114.377518>>, 17.750000)
MISSION_FAILED(FR_POPPY_SCARED)
ELSE
MISSION_FAILED(FR_ATTENTION)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF DOES_BLIP_EXIST(biBuddyBlip)
IF IS_THIS_PRINT_BEING_DISPLAYED("PAP2_06")
OR NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,70)
SET_BLIP_FLASHES(biBuddyBlip,TRUE)
ELSE
IF IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,70)
SET_BLIP_FLASHES(biBuddyBlip,FALSE)
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_CLEANUP
SKIP_SPECIFIC_CLEANUP()
BREAK
CASE SS_SKIPPED
SKIP_SPECIFIC_FOLLOW(eMissionStage)
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Beverly explains the face recog system and the player can get used to the camera
PROC CAMERA_TUTORIAL()
//PRINTINT(iBadFilming)
//PRINTNL()
REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME()
OVERRIDE_LODSCALE_THIS_FRAME(1.8)
REPOSITION_SHAG_TABLE()
IF iBadFilming > 500
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF iNumFilmFails <> MAX_FILM_FAILS
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_FAILFIL", CONV_PRIORITY_HIGH, DO_NOT_DISPLAY_SUBTITLES) //Give me back that camera! You were meant to film the people fucking!
bPutCamInFranksHand = TRUE
iNumFilmFails = MAX_FILM_FAILS
ENDIF
ENDIF
ENDIF
ENDIF
ALLOW_ALTERNATIVE_SCRIPT_CONTROLS_LAYOUT(FRONTEND_CONTROL)
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
#IF NOT IS_JAPANESE_BUILD
IF NOT HAS_SOUND_FINISHED(iSexSound)
STOP_SOUND(iSexSound)
SK_PRINT("TK************ STOP SEX SOUNDS ************")
ENDIF
#ENDIF
HIDE_HUD_AND_RADAR_THIS_FRAME()
THEFEED_HIDE_THIS_FRAME()
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
IF eState > SS_INIT
AND eCamTutStage > CTS_INIT_EXPLAIN
IF DOES_CAM_EXIST(camMain)
STOP_CAM_POINTING(camMain)
ENDIF
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
MANAGE_CAMERA(TRUE)
ENDIF
SWITCH eState
CASE SS_INIT
IF SETUP_MISSION_STAGE(MS_CAMERA_TUTORIAL, bJumpSkip)
DISABLE_SELECTOR()
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(CP_FILMING, "FILM POPPY") //Filming started, set checkpoint
CLEAR_PRINTS()
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED_ID(),TRUE)
IF DOES_CAM_EXIST(camMain)
AND IS_PED_UNINJURED(mPoppy.piPed)
SET_CAM_ROT(camMain,<<-1.6576, 0.0000, -170.9825>>)
ENDIF
#IF NOT IS_JAPANESE_BUILD
STOP_SOUND(iGruntSounds)
#ENDIF
RELEASE_SCRIPT_AUDIO_BANK()
bDumpedBank = TRUE
PLAY_POPPY_SHAGGER_ANIM(1)
RESET_BOX_COL()
bForceTutFin = FALSE
#IF NOT IS_JAPANESE_BUILD
iBadFilmNoBev = 0
#ENDIF
fFaceOffset = -0.05
fFaceOffsetz = -0.03
iTimerStartStage = GET_GAME_TIMER()
iTimerStartedFilming = GET_GAME_TIMER()
IF IS_PED_UNINJURED(mBuddy.piPed)
SAFE_TELEPORT_ENTITY(mBuddy.piPed,<<-37.2184, 325.3970, 111.6958>>, 242.3437)
ENDIF
eState = SS_ACTIVE
ENDIF
BREAK
CASE SS_ACTIVE
SWITCH eCamTutStage
CASE CTS_INIT_EXPLAIN
IF DOES_CAM_EXIST(camMain)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
ENDIF
IF IS_PED_UNINJURED(mBuddy.piPed)
AND IS_PED_UNINJURED(PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mBuddy.piPed, mPoppy.piPed,-1)
ENDIF
bObjectiveShown = FALSE
eCamTutStage = CTS_EXPLAINING
BREAK
CASE CTS_EXPLAINING
eCamTutStage = CTS_WAIT_DONE
BREAK
CASE CTS_WAIT_DONE
eState = SS_CLEANUP
BREAK
ENDSWITCH
BREAK
CASE SS_CLEANUP
bLineSet = FALSE
bPictureTaken = FALSE
iFilmTime = 0
NEXT_STAGE()
BREAK
CASE SS_SKIPPED
eState = SS_CLEANUP
KILL_ANY_CONVERSATION()
bPictureTaken = TRUE
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Player films sexscene
/// --The camera tutorial and film poppy states are quite
/// similar could maybe functionise them like the
/// follow states
PROC FILM_POPPY()
REPLAY_PREVENT_RECORDING_AND_UI_THIS_FRAME()
OVERRIDE_LODSCALE_THIS_FRAME(1.8)
ALLOW_ALTERNATIVE_SCRIPT_CONTROLS_LAYOUT(FRONTEND_CONTROL)
#IF NOT IS_JAPANESE_BUILD
//PRINTINT(iBadFilming)
//PRINTNL()
DO_PLAYER_HOLDING_CAMERA()
//OVERRIDE_LODSCALE_THIS_FRAME(1.4)
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
fSSPhase = GET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene2)
//PRINTNL()
//PRINTFLOAT(fSSPhase)
IF NOT bDone1stPersonFlash
IF IS_PLAYER_IN_FIRST_PERSON_CAMERA()
IF fSSPhase > 0.872
ANIMPOSTFX_PLAY("CamPushInNeutral", 0, FALSE)
PLAY_SOUND_FRONTEND(-1, "1st_Person_Transition", "PLAYER_SWITCH_CUSTOM_SOUNDSET")
bDone1stPersonFlash = TRUE
ENDIF
ENDIF
ENDIF
IF fSSPhase > 0.835512
IF iSeqMusic <> 2
TRIGGER_MUSIC_EVENT("PAP2_SPOTTED")
iSeqMusic = 2
ENDIF
bPlayerFailed = FALSE
ENDIF
IF fSSPhase >= 0.97
IF IS_PED_UNINJURED(mShagger.piPed)
IF GET_SCRIPT_TASK_STATUS(mShagger.piPed, SCRIPT_TASK_COMBAT) <> PERFORMING_TASK
TASK_COMBAT_PED(mShagger.piPed,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mShagger.piPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
bPictureTaken = TRUE
ENDIF
IF fSSPhase >= 0.972620
bPictureTaken = TRUE
ENDIF
IF fSSPhase > fBreakoutPhase //0.888042//0.835512//0.947229 //0.989654
eState = SS_CLEANUP
ENDIF
ELSE
// The synced scene has stopped playing before reaching the breakout point
// Something probably went wrong with the audio stream eg: B*2217471 - need to cleanup
IF eState > SS_INIT
IF GET_GAME_TIMER() > iTimerStartStage + 6000
SK_PRINT(" IS_SYNCHRONIZED_SCENE_RUNNING = FALSE! Something went wrong, probably the audio stream ")
eState = SS_CLEANUP
ENDIF
ENDIF
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene_breakout)
IF GET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene_breakout) > fBreakoutPhase//0.947229
REPLAY_RECORD_BACK_FOR_TIME(8.0, 3.0, REPLAY_IMPORTANCE_LOW)
eState = SS_CLEANUP
ENDIF
ENDIF
//0.960587 - justin come out
//0.989654 - poppy come out
REPOSITION_SHAG_TABLE()
IF iBadFilming > 500
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF iNumFilmFails <> MAX_FILM_FAILS
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_FAILFIL", CONV_PRIORITY_HIGH) //Give me back that camera! You were meant to film the people fucking!
bPutCamInFranksHand = TRUE
iNumFilmFails = MAX_FILM_FAILS
ENDIF
ENDIF
ENDIF
ENDIF
#ENDIF
#IF IS_JAPANESE_BUILD
//UNUSED_PARAMETER(bDone1stPersonFlash)
IF NOT bConvoJapaneseVersion
IF CREATE_CONVERSATION_FROM_SPECIFIC_LINE(s_conversation_peds, sTextBlock, "PAP2_SEX", "PAP2_SEX_19", CONV_PRIORITY_VERY_HIGH) //I'm not releasing a sex tape for at least three years, unless my agent tells me to.
bConvoJapaneseVersion = TRUE
iSeqJapaneseVersionConvo = 0
SK_PRINT("TK************ JAPANESE VERSION - TRIGGER CONVO FILM POPPY ************TK")
ELSE
SK_PRINT("TK************ CONVO WONT TRIGGER? FILM POPPY ************TK")
ENDIF
ELSE
TEXT_LABEL_23 labelJapaneseVersion = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
IF iSeqJapaneseVersionConvo = 0
IF ARE_STRINGS_EQUAL(labelJapaneseVersion, "PAP2_SEX_26")
OR NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
KILL_FACE_TO_FACE_CONVERSATION()
iSeqJapaneseVersionConvo = 1
ENDIF
ELIF iSeqJapaneseVersionConvo = 1
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_ESCAPE2", CONV_PRIORITY_VERY_HIGH) //There's someone watching! Creepy! Creepy!
iTimerJapaneseVersionNoticePlayer = GET_GAME_TIMER()
TASK_LOOK_AT_ENTITY(mShagger.piPed,PLAYER_PED_ID(),-1)
iSeqJapaneseVersionConvo = 2
SK_PRINT("TK************ JAPANESE VERSION - TRIGGER CONVO2 FILM POPPY ************TK")
ELSE
SK_PRINT("TK************ CONVO2 WONT TRIGGER? FILM POPPY ************TK")
ENDIF
ENDIF
ELIF iSeqJapaneseVersionConvo = 2
IF GET_GAME_TIMER() > iTimerJapaneseVersionNoticePlayer + 600
IF NOT IS_PED_HEADTRACKING_PED(mPoppy.piPed,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
IF GET_GAME_TIMER() > iTimerJapaneseVersionNoticePlayer + 2800
IF NOT IS_PED_FACING_PED(mShagger.piPed,PLAYER_PED_ID(),40)
IF GET_SCRIPT_TASK_STATUS(mShagger.piPed,SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY) <> PERFORMING_TASK
TASK_TURN_PED_TO_FACE_ENTITY(mShagger.piPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
ENDIF
IF GET_GAME_TIMER() > iTimerJapaneseVersionNoticePlayer + 2500
IF NOT IS_PED_FACING_PED(mPoppy.piPed,PLAYER_PED_ID(),40)
IF GET_SCRIPT_TASK_STATUS(mPoppy.piPed,SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY) <> PERFORMING_TASK
TASK_TURN_PED_TO_FACE_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),-1)
ENDIF
ENDIF
ENDIF
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
eState = SS_CLEANUP
ENDIF
ENDIF
ENDIF
#ENDIF
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
#IF NOT IS_JAPANESE_BUILD
IF NOT HAS_SOUND_FINISHED(iSexSound)
STOP_SOUND(iSexSound)
SK_PRINT("TK************ STOP SEX SOUNDS ************")
ENDIF
#ENDIF
HIDE_HUD_AND_RADAR_THIS_FRAME()
THEFEED_HIDE_THIS_FRAME()
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
IF eState <> SS_CLEANUP
MANAGE_CAMERA(TRUE)
ENDIF
SWITCH eState
CASE SS_INIT
IF SETUP_MISSION_STAGE(MS_FILM_POPPY, bJumpSkip)
DISABLE_SELECTOR()
IF DOES_CAM_EXIST(camMain)
STOP_CAM_POINTING(camMain)
ENDIF
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED_ID(),TRUE)
#IF NOT IS_JAPANESE_BUILD
STOP_SOUND(iGruntSounds)
#ENDIF
RELEASE_SCRIPT_AUDIO_BANK()
bDumpedBank = TRUE
RELEASE_HOTEL_PEDS()
iTimerStartStage = GET_GAME_TIMER()
iTimerStartedFilming = GET_GAME_TIMER()
#IF NOT IS_JAPANESE_BUILD
fFaceOffset = -0.05
fFaceOffsetz = -0.03
iBadFilmNoBev = 0
iSeqPoppySubs = 0
#ENDIF
#IF IS_JAPANESE_BUILD
fFaceOffset = 0
fFaceOffsetz = 0
#ENDIF
SK_PRINT("TK************ INIT FILM POPPY ************TK")
iCounterHelp = 0
IF IS_PED_UNINJURED(mBuddy.piPed)
SAFE_TELEPORT_ENTITY(mBuddy.piPed,<<-37.2184, 325.3970, 111.6958>>, 242.3437)
ENDIF
#IF NOT IS_JAPANESE_BUILD
bDone1stPersonFlash = FALSE
#ENDIF
eState = SS_ACTIVE
ENDIF
BREAK
CASE SS_ACTIVE
#IF NOT IS_JAPANESE_BUILD
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
IF IS_SUBTITLE_PREFERENCE_SWITCHED_ON()
IF iSeqPoppySubs = 0
IF fSSPhase > 0.029383
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //Is that good, babe? //0.029383
PRINT_NOW("PAP2_SEX1", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 1
IF fSSPhase > 0.051792 //0.052274
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //Ooh, ooh, it's fantastic. //0.052274
PRINT_NOW("PAP2_SEX2", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 2
IF fSSPhase > 0.095256 //0.097741
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //Really? //0.097741
PRINT_NOW("PAP2_SEX3", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 3
IF fSSPhase > 0.111642
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //Yes... ooh, you're so big. //0.111642
PRINT_NOW("PAP2_SEX4", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 4
IF fSSPhase > 0.160527 //0.168825
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //I know... I must say, for a virgin, you're not really that into this. //0.168825
PRINT_NOW("PAP2_SEX5", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 5
IF fSSPhase > 0.250271
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //I'm only a virgin for TV. //0.250271
PRINT_NOW("PAP2_SEX6", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 6
IF fSSPhase > 0.296955 //0.302319
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //Really? //0.302319
PRINT_NOW("PAP2_SEX7", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 7
IF fSSPhase > 0.320319
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //I mean, I always wash afterward and jump up and down so it doesn't count. //0.302319
PRINT_NOW("PAP2_SEX8", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 8
IF fSSPhase > 0.376536
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //What? //0.376536
PRINT_NOW("PAP2_SEX9", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 9
IF fSSPhase > 0.397816
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //I'm not releasing a sex tape for at least three years, unless my agent tells me to. //0.397816
PRINT_NOW("PAP2_SEX10", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 10
IF fSSPhase > 0.477816
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //What? I thought this... I love you Poppy. //0.477816
PRINT_NOW("PAP2_SEX11", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 11
IF fSSPhase > 0.549232
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //I really want us to go places... I thought we could be the cutest teen couple. //0.549232
PRINT_NOW("PAP2_SEX12", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 12
IF fSSPhase > 0.608102
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //But Justin, you're 21 and I'm 24. //0.608102
PRINT_NOW("PAP2_SEX13", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 13
IF fSSPhase > 0.650271 //0.641114
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //We only say we're teens for marketing purposes. //0.641114
PRINT_NOW("PAP2_SEX14", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 14
IF fSSPhase > 0.685452
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //That's not true. //0.685452
PRINT_NOW("PAP2_SEX15", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 15
IF fSSPhase > 0.707621
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //Okay... just get on with it will you? I'm hungry. //0.707621
PRINT_NOW("PAP2_SEX16", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ELIF iSeqPoppySubs = 16
IF fSSPhase > 0.860467
FORCE_NEXT_MESSAGE_TO_PREVIOUS_BRIEFS_LIST(PREVIOUS_BRIEF_FORCE_DIALOGUE) //There's someone watching! //0.860467
PRINT_NOW("PAP2_SEX17", DEFAULT_GOD_TEXT_TIME,0)
++iSeqPoppySubs
ENDIF
ENDIF
ENDIF
IF fSSPhase > 0.6
SETUP_MISSION_STAGE(MS_GET_IN_ESCAPE_CAR, FALSE)
ENDIF
ENDIF
//SUBS
//Is that good, babe? //0.029383
//Ooh, ooh, it's fantastic. //0.052274
//Really? //0.097741
//Yes... ooh, you're so big. //0.111642
//I know... I must say, for a virgin, you're not really that into this. //0.168825
//I'm only a virgin for TV. //0.250271
//Really? //0.302319
//I mean, I always wash afterward and jump up and down so it doesn't count. //0.302319
//What? //0.376536
//I'm not releasing a sex tape for at least three years, unless my agent tells me to. //0.397816
//What? I thought this... I love you Poppy. //0.477816
//I really want us to go places... I thought we could be the cutest teen couple. //0.549232
//But Justin, you're 21 and I'm 24. //0.608102
//We only say we're teens for marketing purposes. //0.641114
//That's not true. //0.685452
//Okay... just get on with it will you? I'm hungry. //0.707621
//There's someone watching! //0.860467
//Creepy! Creepy!
//They've got a camera! //
//You're fucking dead motherfuckers! //
#ENDIF
IF NOT bPlayerFailed
IF IS_PLAYER_AT_ENTITY(mPoppy.piPed, <<5,5,1.5>>)
AND eMissionStage <> MS_FAILED
MISSION_FAILED(FR_POPPY_SCARED)
ENDIF
IF GET_GAME_TIMER() > iTimerStartedFilming + 0
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME,FALSE)
ENDIF
ENDIF
IF iCounterHelp = 0
PRINT_HELP("PAP2_HELP1")//Zoom in and out with.
iTimerHelp = GET_GAME_TIMER()
iCounterHelp = 1
ELIF iCounterHelp = 1
IF GET_GAME_TIMER() > iTimerHelp + 7000
PRINT_HELP("PAP2_HELP2")//Use to point the camera.
iTimerHelp = GET_GAME_TIMER()
iCounterHelp = 2
ENDIF
ELIF iCounterHelp = 2
IF GET_GAME_TIMER() > iTimerHelp + 7000
IF mBoxCol.G <> 255 //If mBoxCol.G is 255 they already did it
PRINT_HELP("PAP2_HELP3")//Zoom in on Poppy's face until the facial recognition box turns green.
iCounterHelp = 3
ELSE
iCounterHelp = 3
ENDIF
ENDIF
ENDIF
IF IS_PED_UNINJURED(mBuddy.piPed)
DO_BEV_COVER_ANIMS()
IF NOT IS_PED_IN_COVER(mBuddy.piPed)
IF NOT IS_ENTITY_PLAYING_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_a")
AND NOT IS_ENTITY_PLAYING_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_b")
AND NOT IS_ENTITY_PLAYING_ANIM(mBuddy.piPed,"rcmpaparazzo_2","idle_l_corner_c")
IF GET_SCRIPT_TASK_STATUS(mBuddy.piPed, SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_COVER) <> PERFORMING_TASK
SET_PED_TO_LOAD_COVER(mBuddy.piPed,TRUE)
IF NOT DOES_SCRIPTED_COVER_POINT_EXIST_AT_COORDS(<<-37.2396, 325.3983, 111.6961>>) //For B*1819613 - making sure Bev gets into cover
m_ciPap2 = ADD_COVER_POINT(<<-37.2396, 325.3983, 111.6961>>, 156.6960,COVUSE_WALLTOLEFT,COVHEIGHT_TOOHIGH,COVARC_90)
ENDIF
TASK_PUT_PED_DIRECTLY_INTO_COVER(mBuddy.piPed,<<-37.2022, 325.4253, 111.6954>>,-1,TRUE,0,TRUE,TRUE,m_ciPap2)
SET_PED_CAN_PEEK_IN_COVER(mBuddy.piPed,TRUE)
SET_PED_COMBAT_ATTRIBUTES(mBuddy.piPed,CA_CAN_USE_PEEKING_VARIATIONS,TRUE)
ENDIF
ENDIF
ENDIF
IF IS_PED_IN_COVER(PLAYER_PED_ID())
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-32.757969,319.505890,111.495361>>, <<-33.262951,318.437958,113.495361>>, 1.500000)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(32.2338)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-13.3076)
ENDIF
ENDIF
IF NOT bPictureTaken
BOOL bOnScreen, bZoomed
MONITER_PED_ON_SCREEN(mPoppy.piPed,bOnScreen, FALSE)
IF bOnScreen
MONITER_FOR_NO_ZOOM(bZoomed)
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
AND GET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene2) > 0.85 //0.82
POPPY_SHAGGER_CHASE_PLAYER()
bPictureTaken = TRUE
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
AND GET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene2) > 0.82
fFaceOffset = fFaceOffset + 0.00067
IF fFaceOffset > 0
fFaceOffset = 0
ENDIF
fFaceOffsetZ = fFaceOffsetZ + 0.00067
IF fFaceOffsetZ > 0
fFaceOffsetZ = 0
ENDIF
ENDIF
IF bZoomed
UPDATE_FILMING_TIME()
ENDIF
ELSE
MONITER_FOR_BAD_FILMING()
ENDIF
ELSE
IF IS_PED_UNINJURED(mBuddy.piPed)
ALTER_STEALTH(mBuddy.piPed, FALSE)
ENDIF
IF GET_GAME_TIMER() > iTimerPoppyNoticePlayer + 8000 //7500
ENDIF
BOOL bOnScreen
MONITER_PED_ON_SCREEN(mPoppy.piPed,bOnScreen, FALSE)
fFaceOffset = fFaceOffset + 0.00067
IF fFaceOffset > 0
fFaceOffset = 0
ENDIF
fFaceOffsetZ = fFaceOffsetZ + 0.00067
IF fFaceOffsetZ > 0
fFaceOffsetZ = 0
ENDIF
IF GET_CURRENT_SCRIPTED_CONVERSATION_LINE() > 0
IF DOES_ENTITY_EXIST(ObjPhone)
IF IS_ENTITY_ATTACHED_TO_ANY_PED(ObjPhone)
DETACH_ENTITY(ObjPhone)
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
MISSION_FAILED(FR_BADCAM)
ENDIF
ENDIF
BREAK
CASE SS_CLEANUP
IF IS_PED_UNINJURED(mPoppy.piPed)
SET_PED_COMPONENT_VARIATION(mPoppy.piPed, INT_TO_ENUM(PED_COMPONENT,4), 1, 0, 0) //(lowr)
ENDIF
IF IS_PED_UNINJURED(mShagger.piPed)
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,4), 1, 0, 0) //(lowr)
SET_PED_COMPONENT_VARIATION(mShagger.piPed, INT_TO_ENUM(PED_COMPONENT,6), 0, 0, 0) //(feet)
ENDIF
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
TASK_PLAY_ANIM(PLAYER_PED_ID(),"rcmpaparazzo_2","idle_d",INSTANT_BLEND_IN,SLOW_BLEND_OUT,-1,AF_DEFAULT,0.739)
CLEANUP_CAMERA(TRUE)
CLEAR_PRINTS()
//SET_GAMEPLAY_CAM_RELATIVE_HEADING(32.2338)
//SET_GAMEPLAY_CAM_RELATIVE_PITCH(-13.3076)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(10.7485)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-9.8457)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
bLineSet = FALSE
CLEAR_HELP(TRUE)
IF DOES_ENTITY_EXIST(ObjPhone)
IF IS_ENTITY_ATTACHED_TO_ANY_PED(ObjPhone)
DETACH_ENTITY(ObjPhone)
ENDIF
ENDIF
NEXT_STAGE()
BREAK
CASE SS_SKIPPED
eState = SS_CLEANUP
KILL_ANY_CONVERSATION()
POPPY_SHAGGER_CHASE_PLAYER()
bPictureTaken = TRUE
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Player and beverly run away from poppy and get in to bev's car
PROC GET_IN_ESCAPE_CAR()
IF bPlayerGettingInCar = TRUE
HIDE_HUD_AND_RADAR_THIS_FRAME()
THEFEED_HIDE_THIS_FRAME()
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
ENDIF
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(),WEAPONTYPE_UNARMED,TRUE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON_UNARMED)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON_MELEE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON_HANDGUN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON_SHOTGUN)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON_SMG)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON_AUTO_RIFLE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON_SNIPER)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON_HEAVY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON_SPECIAL)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_NEXT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_WEAPON_WHEEL_PREV)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_ALTERNATE)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_HEAVY)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK_LIGHT)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK1)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_MELEE_ATTACK2)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_AIM)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_COVER)
IF NOT IS_SPHERE_VISIBLE(<<-75.6080, 300.6798, 105.5206>>,30)
CLEAR_AREA_OF_PEDS(<<-75.6080, 300.6798, 105.5206>>,30)
ENDIF
SET_LOCKED_UNSTREAMED_IN_DOOR_OF_TYPE(prop_ss1_14_garage_door,<<-62.22, 352.75, 113.01>>,TRUE)
UPDATE_AI_PED_BLIP(mPoppy.piPed,bsPoppy,-1,NULL,TRUE)
UPDATE_AI_PED_BLIP(mShagger.piPed,bsJustin)
UPDATE_AI_PED_BLIP(mBodyGuard.piPed,bsSecurity)
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(0.3)
FREEZE_ENTITY_POSITION(mBuddy.piPed,FALSE)
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
IF bClearCoverTasks = FALSE
IF IS_PED_IN_MELEE_COMBAT(PLAYER_PED_ID())
OR IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_MOVE_LR)
OR IS_CONTROL_PRESSED(PLAYER_CONTROL,INPUT_MOVE_UD)
CLEAR_PED_TASKS(PLAYER_PED_ID())
bClearCoverTasks = TRUE
ENDIF
ENDIF
IF bPlayerGettingInCar = FALSE
DO_PLAYER_HOLDING_CAMERA()
ENDIF
IF bPlayerGettingInCar = FALSE
ENABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_COVER)
IF NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
ENDIF
ELSE
DISABLE_CONTROL_ACTION(PLAYER_CONTROL,INPUT_COVER)
IF NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
SET_PLAYER_CONTROL(PLAYER_ID(),FALSE)
ENDIF
ENDIF
IF NOT HAS_SOUND_FINISHED(iZoomSound)
STOP_SOUND(iZoomSound)
ENDIF
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, relPoppyGroup, GET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID()))
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, GET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID()), relPoppyGroup)
CLEAR_AREA_OF_PEDS(<< -47.8788, 353.6657, 112.0601 >>, 20.0)
IF DOES_ENTITY_EXIST(ObjPhone)
IF IS_ENTITY_ATTACHED_TO_ANY_PED(ObjPhone)
DETACH_ENTITY(ObjPhone)
ENDIF
ENDIF
SET_PED_RESET_FLAG(PLAYER_PED_ID(),PRF_DontRaiseFistsWhenLockedOn,TRUE)
IF IS_ENTITY_ALIVE(viPlayerCar)
REQUEST_VEHICLE_HIGH_DETAIL_MODEL(viPlayerCar)
/*
SET_ENTITY_LOD_DIST(viPlayerCar,200)
SET_VEHICLE_LOD_MULTIPLIER(viPlayerCar,2.0)
IF NOT IS_VEHICLE_HIGH_DETAIL(viPlayerCar)
REQUEST_VEHICLE_HIGH_DETAIL_MODEL(viPlayerCar)
ENDIF
*/
ENDIF
//INT iRand2
SWITCH eState
CASE SS_INIT
IF SETUP_MISSION_STAGE(MS_GET_IN_ESCAPE_CAR, bJumpSkip)
IF IS_PED_UNINJURED(mBuddy.piPed)
IF PLAY_PED_RECORDING_ON_PED(mBuddy.piPed, sBeverlyPedRecording)
IF IS_WAYPOINT_PLAYBACK_GOING_ON_FOR_PED(mBuddy.piPed)
SET_PED_TO_LOAD_COVER(mBuddy.piPed,FALSE)
SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(),FALSE,"DEFAULT_ACTION")
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(CP_GET_TO_CAR, "GET TO THE CAR") // Running to escape car, set checkpoint
REQUEST_VEHICLE_ASSET(FQ2)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(),FALSE)
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(PLAYER_PED_ID(),FALSE)
DISPLAY_HUD(TRUE)
DISPLAY_RADAR(TRUE)
RESET_PED_WEAPON_MOVEMENT_CLIPSET(mBuddy.piPed)
SAFE_RELEASE_OBJECT(objShagTable)
SAFE_RELEASE_OBJECT(objShagParasol)
SAFE_RELEASE_OBJECT(ObjPhone)
ENABLE_SELECTOR()
TASK_CLEAR_LOOK_AT(mBuddy.piPed)
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(),mBuddy.piPed,-1)
iTimerGetInCarStage = GET_GAME_TIMER()
iCounterBevWaiting = 0
bPoppyGettingInCar = FALSE
bPoppyCombatTask = FALSE
bShaggerCombatTask = FALSE
bBevDrivingOff = FALSE
iBadFilming = 0
iSeqBevRagdoll = 0
iPoppyAnimSeq = 0
CLEAR_AREA_OF_VEHICLES(<<-64.1056, 325.3524, 109.3568>>, 100)
SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(),TRUE,-1)
//SET_PED_CONFIG_FLAG(PLAYER_PED_ID(),PCF_DisableMelee,TRUE)
REPLAY_RECORD_BACK_FOR_TIME(8.0, 5, REPLAY_IMPORTANCE_LOWEST) //Poppy notices Franklin filming her having sex with Justin.
eState = SS_ACTIVE
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE SS_ACTIVE
/*
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_low_kick_close"), TRUE)
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_low_kick_far"), TRUE)
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_low_kick_far_quad"), TRUE)
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_ground_close"), TRUE)
ACTION_MANAGER_ENABLE_ACTION(GET_HASH_KEY("ACT_ground_far"), TRUE)
*/
/*
IF GET_GAME_TIMER() > iTimerGetInCarStage + 2000
IF IS_PED_UNINJURED(mBodyGuard.piPed)
//STOP_PED_SPEAKING(mBodyGuard.piPed,FALSE)
IF NOT IS_ANY_SPEECH_PLAYING(mBodyGuard.piPed)
AND IS_PED_IN_MELEE_COMBAT(mBodyGuard.piPed)
iRand2 = GET_RANDOM_INT_IN_RANGE(0,300)
IF iRand2 = 0
PLAY_PED_AMBIENT_SPEECH(mBodyGuard.piPed, "FIGHT")
ELIF iRand2 = 1
//PLAY_PED_AMBIENT_SPEECH(mBodyGuard.piPed, "GENERIC_INSULT_HIGH")
ELIF iRand2 = 2
//PLAY_PED_AMBIENT_SPEECH(mBodyGuard.piPed, "PROVOKE_GENERIC")
ELIF iRand2 = 3
//PLAY_PED_AMBIENT_SPEECH(mBodyGuard.piPed, "CHALLENGE_THREATEN")
ELSE
ENDIF
ENDIF
ENDIF
ENDIF
*/
//IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(),"random@escape_paparazzi@standing@","idle_d")
// STOP_ANIM_TASK(PLAYER_PED_ID(),"random@escape_paparazzi@standing@","idle_d",-2)
//ENDIF
IF IS_VEHICLE_OK(viChaseCars[POPPY_CAR])
IF NOT IS_ENTITY_AT_ENTITY(mPoppy.piPed, viChaseCars[POPPY_CAR], <<5,5,2.5>>)
IF bPoppyCombatTask = FALSE
IF IS_PED_UNINJURED(mPoppy.piPed)
IF IS_ENTITY_IN_RANGE_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),2.0)
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
OR IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene_breakout) //To fix B*1753125 - clear Poppy's tasks if synced scene still running.
CLEAR_PED_TASKS(mPoppy.piPed)
ENDIF
SET_ENTITY_COLLISION(mPoppy.piPed,TRUE)
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
IF GET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene2) >= 0.99//0.989654
bPoppyCombatTask = TRUE
ENDIF
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene_breakout)
IF GET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene_breakout) >= 0.99//0.989654
bPoppyCombatTask = TRUE
ENDIF
ENDIF
//0.960587 - justin come out
//0.989654 - poppy come out
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
AND NOT IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene_breakout)
TASK_COMBAT_PED(mShagger.piPed,PLAYER_PED_ID())
bShaggerCombatTask = TRUE
bPoppyCombatTask = TRUE
ENDIF
ENDIF
ELSE
IF NOT bPoppyGettingInCar
IF IS_PED_UNINJURED(mPoppy.piPed)
IF NOT IS_ENTITY_IN_RANGE_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),20)
IF GET_SCRIPT_TASK_STATUS(mPoppy.piPed,SCRIPT_TASK_GO_TO_ENTITY) <> PERFORMING_TASK
IF IS_ENTITY_PLAYING_ANIM(mPoppy.piPed,"RANDOM@CAR_THIEF@waiting_ig_4","waiting")
STOP_ANIM_TASK(mPoppy.piPed,"RANDOM@CAR_THIEF@waiting_ig_4","waiting",SLOW_BLEND_OUT)
ENDIF
TASK_GO_TO_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),-1,8)
ENDIF
ELSE
IF NOT IS_PED_HEADTRACKING_PED(mPoppy.piPed,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),-1)
ENDIF
IF NOT IS_PED_FACING_PED(mPoppy.piPed,PLAYER_PED_ID(),30)
TASK_TURN_PED_TO_FACE_ENTITY(mPoppy.piPed,PLAYER_PED_ID())
ELSE
POPPY_ANGRY_ANIMS()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF bShaggerCombatTask = FALSE
IF IS_PED_UNINJURED(mShagger.piPed)
IF IS_ENTITY_IN_RANGE_ENTITY(mShagger.piPed,PLAYER_PED_ID(),3.0)
TASK_COMBAT_PED(mShagger.piPed,PLAYER_PED_ID())
bShaggerCombatTask = TRUE
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
IF GET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene2) >= 0.97//0.960587
TASK_COMBAT_PED(mShagger.piPed,PLAYER_PED_ID())
bShaggerCombatTask = TRUE
ENDIF
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene_breakout)
IF GET_SYNCHRONIZED_SCENE_PHASE(poppy_shagging_scene_breakout) >= 0.97//0.960587
TASK_COMBAT_PED(mShagger.piPed,PLAYER_PED_ID())
bShaggerCombatTask = TRUE
ENDIF
ENDIF
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
AND NOT IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene_breakout)
TASK_COMBAT_PED(mShagger.piPed,PLAYER_PED_ID())
bShaggerCombatTask = TRUE
ENDIF
ENDIF
ENDIF
IF bBudThreat
DO_BEV_THRETENED_CONV()
ELSE
IF bBevDrivingOff = FALSE
CHECK_PLAYER_AT_CAR_GET_IN()
ENDIF
CHECK_POPPY_NEAR_CAR()
IF bShaggerCombatTask = TRUE
CHECK_SHAGGER_NEAR_CAR()
ENDIF
CHECK_BODYGUARD_NEAR_CAR()
CHECK_BUDDY_NEAR_CAR()
IF ARE_PLAYER_AND_BUDDY_IN_CAR()
SET_VEHICLE_DOORS_LOCKED(viPlayerCar, VEHICLELOCK_LOCKED_PLAYER_INSIDE)
bIsBuddyInCarBeforePlayer = FALSE
IF DOES_ENTITY_EXIST(objCam)
IF IS_ENTITY_ATTACHED(objCam)
DETACH_ENTITY(objCam)
ENDIF
DELETE_OBJECT(objCam)
ENDIF
eState = SS_CLEANUP
ENDIF
CHECK_BUDDY_IN_CAR_BEFORE_PLAYER()
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-50.615166,329.184814,111.507881>>, <<-65.104324,297.998444,115.673424>>, 11.350000)
IF bLegIt = FALSE
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_ESCAPE", CONV_PRIORITY_MEDIUM)
bLegIt = TRUE
ENDIF
ELSE
IF bComeOn = FALSE
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_ESCAPEA", CONV_PRIORITY_MEDIUM)
bComeOn = TRUE
bEscapeConvExpired1 = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF bEscapeConvExpired = FALSE
ENDIF
IF iSeqBevRagdoll < 2
DO_ESCAPE_CHATTER_CONV()
ENDIF
IF NOT IS_PED_RAGDOLL(mBuddy.piPed)
AND NOT IS_PED_GETTING_UP(mBuddy.piPed)
AND NOT bBevDrivingOff
IF iSeqBevRagdoll > 2
DO_BEV_GET_IN_CAR_LINES()
ENDIF
IF iSeqBevRagdoll < 2
DO_BEV_SHOUTING()
ENDIF
ENDIF
ENDIF
IF bBevDrivingOff
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
MISSION_FAILED(FR_TOOK_TOO_LONG)
ENDIF
ENDIF
IF IS_ENTITY_IN_WATER(PLAYER_PED_ID())
MISSION_FAILED(FR_FOOTAGE_RUINED)
ENDIF
BREAK
CASE SS_CLEANUP
IF IS_ENTITY_DEAD(mBodyGuard.piPed)
bDeckedGuard = TRUE
ELSE
IF HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mBodyGuard.piPed,PLAYER_PED_ID(),FALSE)
bDeckedGuard = TRUE
ENDIF
ENDIF
NEXT_STAGE()
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
REMOVE_WAYPOINT_RECORDING(sBeverlyPedRecording)
REMOVE_ANIM_DICT("rcmpaparazzo_2")
INT i
FOR i=0 TO (MAX_SEX_SCENE_PROPS-1)
SAFE_DELETE_OBJECT(mSexSceneProps[i].oiProp)
ENDFOR
BREAK
CASE SS_SKIPPED
KILL_ANY_CONVERSATION()
CLEAR_PRINTS()
WARP_EVERYONE_TO_CARS_SKIP()
TASK_CLEAR_LOOK_AT(mBuddy.piPed)
IF SETUP_STAGE_REQUIREMENTS(RQ_CAMERA_CUTSCENE, <<-81.454941,296.807617,107.028061>>, -49.934269)
IF DOES_CAM_EXIST(camMain)
IF IS_PED_UNINJURED(PLAYER_PED_ID())
iTimerPlayerInEscapeCar = GET_GAME_TIMER()
ENDIF
ENDIF
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
REPLAY_RECORD_BACK_FOR_TIME(10.0, 3.0, REPLAY_IMPORTANCE_LOW) //getting into car
eState = SS_CLEANUP
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Player films poppy out the back of the car
PROC CAR_CHASE()
ALLOW_ALTERNATIVE_SCRIPT_CONTROLS_LAYOUT(FRONTEND_CONTROL)
/*
IF IS_VEHICLE_OK(viPlayerCar)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
PRINTFLOAT(GET_TIME_POSITION_IN_RECORDING(viPlayerCar))
PRINTNL()
ENDIF
ENDIF
*/
//PRINTVECTOR(GET_CAM_ROT(camMain))
//PRINTNL()
TEXT_LABEL_23 label = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
IF ARE_STRINGS_EQUAL( label, "PAP2_CHASE1_3")
KILL_FACE_TO_FACE_CONVERSATION()
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(poppy_shagging_scene2)
STOP_SYNCHRONIZED_AUDIO_EVENT(poppy_shagging_scene2)
ENDIF
//SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(1)
HIDE_HUD_AND_RADAR_THIS_FRAME()
THEFEED_HIDE_THIS_FRAME()
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
IF IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(),<<-60.2805, -493.5712, 39.2610>>,DEFAULT_CUTSCENE_LOAD_DIST)
REQUEST_CUTSCENE("pap_2_mcs_1")
ENDIF
IF NOT bStartScriptCineCam
AND IS_ENTITY_VISIBLE(PLAYER_PED_ID())
SET_ENTITY_VISIBLE(PLAYER_PED_ID(),FALSE)
ENDIF
SWITCH eState
CASE SS_INIT
IF SETUP_MISSION_STAGE(MS_CAR_CHASE, bJumpSkip)
CLEAR_PRINTS()
STOP_CUTSCENE_IMMEDIATELY()
IF IS_PED_UNINJURED(mBuddy.piPed)
//RESET_PED_MOVEMENT_CLIPSET(mBuddy.piPed)
RESET_PED_WEAPON_MOVEMENT_CLIPSET(mBuddy.piPed)
ENDIF
IF IS_PED_UNINJURED(PLAYER_PED_ID())
RESET_PED_WEAPON_MOVEMENT_CLIPSET(PLAYER_PED_ID())
ENDIF
IF IS_AUDIO_SCENE_ACTIVE("PAPARAZZO_02_INTRO")
STOP_AUDIO_SCENE("PAPARAZZO_02_INTRO")
ENDIF
IF DOES_ENTITY_EXIST(objCam)
IF IS_ENTITY_ATTACHED(objCam)
DETACH_ENTITY(objCam)
ENDIF
DELETE_OBJECT(objCam)
ENDIF
SET_INSTANCE_PRIORITY_HINT(INSTANCE_HINT_DRIVING)
SAFE_RELEASE_OBJECT(ObjPhone)
SET_MODEL_AS_NO_LONGER_NEEDED(PROP_PAP_CAMERA_01)
#IF NOT IS_JAPANESE_BUILD
SET_MODEL_AS_NO_LONGER_NEEDED(Prop_NPC_Phone)
#ENDIF
SET_MODEL_AS_NO_LONGER_NEEDED(prop_table_06)
SET_MODEL_AS_NO_LONGER_NEEDED(prop_parasol_03)
//REMOVE_CLIP_SET("move_m@casual@f")
REMOVE_CLIP_SET("move_f@sexy@a")
REMOVE_CLIP_SET(sWeaponMoveClipset)
REMOVE_CLIP_SET(sWeaponMoveClipsetFrank)
REMOVE_ANIM_DICT("RANDOM@CAR_THIEF@waiting_ig_4")
REMOVE_ANIM_DICT("cover@move@base@core")
SET_PED_USING_ACTION_MODE(PLAYER_PED_ID(),FALSE,-1)
DISABLE_SELECTOR()
SET_REPLAY_MID_MISSION_STAGE_WITH_NAME(CP_CHASE, "CHASE",TRUE) // Chase started, set checkpoint
IF IS_PED_UNINJURED(mPoppy.piPed)
TASK_LOOK_AT_ENTITY(mPoppy.piPed,PLAYER_PED_ID(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT)
ENDIF
IF IS_VEHICLE_OK(viPlayerCar)
SET_ENTITY_INVINCIBLE(viPlayerCar,TRUE)
REQUEST_VEHICLE_HIGH_DETAIL_MODEL(viPlayerCar)
ENDIF
REQUEST_ANIM_DICT("rcmpaparazzo_2ig_3")
eScriptCamState = SCC_START
bReachedChase = TRUE
eState = SS_ACTIVE
eChaseConvo = CC_STAGE_1
CLEANUP_HOTEL_PEDS()
iCurrentLine = 0
fFaceOffset = 0
fFaceOffsetz = 0
iMaxRecogPercent = 0
iSeqTraffic = 0
iBadFilming = 0
iNumFilmFails = 0
iCounterNotOnScreen = 0
fZOffest = 0.0
fXOffest = 0.0
fXOffestPoppy = 0.0
iFailsafe = 0
bLineSet = FALSE
bCamInterp = FALSE
bDoingEndCut = FALSE
bStreamvolCreated = FALSE
bSetCarVisible = FALSE
bLockBootOpen = FALSE
bPoppyBigCrash = FALSE
RESET_BOX_COL()
SETUP_DYNAMIC_MIXING()
bTrafficDontSwitchToAI = TRUE
bSetPieceCarsDontSwitchToAI = TRUE
bDStraight = FALSE
bDTrunk = FALSE
bDWorse = FALSE
bDWhoa = FALSE
bDMFer = FALSE
bDRight = FALSE
bDLeft = FALSE
bDFuckU = FALSE
bDMove = FALSE
bDCrazy = FALSE
bDTraffic = FALSE
bDSteady = FALSE
bDClose = FALSE
bDJesus = FALSE
bDConst = FALSE
bDoneFirstPoppyCarOffset = FALSE
iShockBG = 0
iShockPoppy = 0
iShockBev = 0
iShockJustin = 0
bMovePlayerCar = FALSE
//fCrashShockRange = 10.0
MANAGE_UBER_RECORDING_FOR_CHASE()
SET_PED_NON_CREATION_AREA(<<252.7712, -160.2005, 60.0327>>-<<100,100,50>>,<<252.7712, -160.2005, 60.0327>>+<<100,100,50>>)
ENDIF
BREAK
CASE SS_ACTIVE
/*
PRINTINT(iBadFilming)
PRINTNL()
IF iBadFilming > 500
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
iNumFilmFails = MAX_FILM_FAILS
ENDIF
ENDIF
*/
/*
104057.679688
104591.445313 //start slide
104848.835938 //end slide
*/
IF IS_ENTITY_ALIVE(viPlayerCar)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
IF IS_REPLAY_IN_PROGRESS()
IF NOT bMovePlayerCar
IF fTimePosInRec < 8847.923828
//SET_MUST_LEAVE_AREA_VEHICLE_GEN_FLAG()
//DISABLE_VEHICLE_GEN_ON_MISSION(TRUE)
//bMovePlayerCar = TRUE
ELSE
//DISABLE_VEHICLE_GEN_ON_MISSION(FALSE)
bMovePlayerCar = TRUE
ENDIF
ENDIF
ENDIF
/*
IF bStartScriptCineCam
PRINTFLOAT(fXOffestBev)
PRINTNL()
IF fTimePosInRec >= 104591.445313
AND fTimePosInRec < 104848.835938
IF fXOffestBev > -2.0
fXOffestBev = fXOffestBev - 0.2
ENDIF
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
SET_POSITION_OFFSET_FOR_RECORDED_VEHICLE_PLAYBACK(viPlayerCar,<<0,fXOffestBev,0>>)
ENDIF
ELSE
IF fXOffestBev <> 0.0
IF fXOffestBev >= 104848.835938
IF fXOffestBev < 0.0
fXOffestBev = fXOffestBev + 0.1
ENDIF
IF fXOffestBev > 0.0
fXOffestBev = 0.0
ENDIF
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
SET_POSITION_OFFSET_FOR_RECORDED_VEHICLE_PLAYBACK(viPlayerCar,<<0,fXOffestBev,0>>)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
*/
fXOffestBev = fXOffestBev
IF iShockBev = 0
iShockBev = ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_DRIVING_ON_PAVEMENT,viPlayerCar)
ENDIF
IF fTimePosInRec > 10000
AND NOT bStartScriptCineCam
pedTempBev = GET_RANDOM_PED_AT_COORD(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viPlayerCar,<<0,10,0>>),<<4,4,4>>,PEDTYPE_MISSION)
IF IS_PED_UNINJURED(pedTempBev)
AND GET_SCRIPT_TASK_STATUS(pedTempBev,SCRIPT_TASK_REACT_AND_FLEE_PED) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(pedTempBev,SCRIPT_TASK_SMART_FLEE_PED) <> PERFORMING_TASK
CLEAR_PED_TASKS(pedTempBev)
SET_PED_KEEP_TASK(pedTempBev,TRUE)
IF IS_ENTITY_ALIVE(mBuddy.piPed)
IF GET_RANDOM_INT_IN_RANGE(0,2) = 0
TASK_REACT_AND_FLEE_PED(pedTempBev,mBuddy.piPed)
SK_PRINT("PED REACT AND FLEE FROM BEVERLY")
ELSE
TASK_SMART_FLEE_PED(pedTempBev,mBuddy.piPed,50,-1,TRUE)
SK_PRINT("PED SMART FLEE FROM BEVERLY")
ENDIF
ENDIF
SET_PED_AS_NO_LONGER_NEEDED(pedTempBev)
ENDIF
ENDIF
IF IS_ENTITY_ALIVE(viChaseCars[BODYGUARD_CAR])
IF iShockBG = 0
iShockBG = ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_DRIVING_ON_PAVEMENT,viChaseCars[BODYGUARD_CAR])
ENDIF
ENDIF
fTimePosInRec = GET_TIME_POSITION_IN_RECORDING(viPlayerCar)
IF IS_VEHICLE_OK(viChaseCars[SHAGGER_CAR])
IF iShockJustin = 0
iShockJustin = ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_DRIVING_ON_PAVEMENT,viChaseCars[SHAGGER_CAR])
ENDIF
pedTempJustin = GET_RANDOM_PED_AT_COORD(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viChaseCars[SHAGGER_CAR],<<0,10,0>>),<<4,4,4>>,PEDTYPE_MISSION)
IF IS_PED_UNINJURED(pedTempJustin)
AND GET_SCRIPT_TASK_STATUS(pedTempJustin,SCRIPT_TASK_REACT_AND_FLEE_PED) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(pedTempJustin,SCRIPT_TASK_SMART_FLEE_PED) <> PERFORMING_TASK
CLEAR_PED_TASKS(pedTempJustin)
SET_PED_KEEP_TASK(pedTempJustin,TRUE)
IF IS_ENTITY_ALIVE(mShagger.piPed)
IF GET_RANDOM_INT_IN_RANGE(0,2) = 0
TASK_REACT_AND_FLEE_PED(pedTempJustin,mShagger.piPed)
SK_PRINT("PED REACT AND FLEE FROM JUSTIN")
ELSE
TASK_SMART_FLEE_PED(pedTempJustin,mShagger.piPed,50,-1,TRUE)
SK_PRINT("PED SMART FLEE FROM JUSTIN")
ENDIF
ENDIF
SET_PED_AS_NO_LONGER_NEEDED(pedTempJustin)
ENDIF
IF bSmallCrash = FALSE
IF fTimePosInRec >= 28753.052734
SET_VEHICLE_DAMAGE(viChaseCars[SHAGGER_CAR],<<431.10, 295.63, 102.80>>,150, 110, FALSE)
IF NOT IS_ENTITY_DEAD(viCrashFuto)
SET_VEHICLE_DAMAGE(viCrashFuto,<<431.10, 295.63, 103.00>>,200, 200, FALSE)
SMASH_VEHICLE_WINDOW(viCrashFuto,SC_WINDOW_FRONT_LEFT)
ENDIF
PLAY_SOUND_FROM_COORD(-1,"SMALL_CRASH",<<431.10, 295.63, 102.80>>,"PAPARAZZO_02_SOUNDSETS")
bSmallCrash = TRUE
ENDIF
ENDIF
ENDIF
IF IS_ENTITY_ALIVE(viChaseCars[POPPY_CAR])
IF iShockPoppy = 0
iShockPoppy = ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_DRIVING_ON_PAVEMENT,viChaseCars[POPPY_CAR])
ENDIF
IF bPoppySmallCrash = FALSE
IF fTimePosInRec >= 49422.613281
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_LOW)
SET_VEHICLE_DAMAGE(viChaseCars[POPPY_CAR],<<643.32, 33.03, 86.0>>,200, 200, FALSE)
bPoppySmallCrash = TRUE
ENDIF
ENDIF
IF bPoppyBigCrash = FALSE
IF HAS_SOUND_FINISHED(iSoundPoppyRevs)
PLAY_SOUND_FROM_ENTITY(iSoundPoppyRevs, "LOOP_REV", viChaseCars[POPPY_CAR], "PAPARAZZO_02_SOUNDSETS")
ENDIF
IF iShockPoppy = 0
iShockPoppy = ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_DRIVING_ON_PAVEMENT,viChaseCars[POPPY_CAR])
ENDIF
pedTemp = GET_RANDOM_PED_AT_COORD(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viChaseCars[POPPY_CAR],<<0,10,0>>),<<4,4,4>>,PEDTYPE_MISSION)
IF IS_PED_UNINJURED(pedTemp)
AND GET_SCRIPT_TASK_STATUS(pedTemp,SCRIPT_TASK_REACT_AND_FLEE_PED) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(pedTemp,SCRIPT_TASK_SMART_FLEE_PED) <> PERFORMING_TASK
CLEAR_PED_TASKS(pedTemp)
SET_PED_KEEP_TASK(pedTemp,TRUE)
IF IS_ENTITY_ALIVE(mPoppy.piPed)
IF GET_RANDOM_INT_IN_RANGE(0,2) = 0
TASK_REACT_AND_FLEE_PED(pedTemp,mPoppy.piPed)
SK_PRINT("PED REACT AND FLEE FROM POPPY")
ELSE
TASK_SMART_FLEE_PED(pedTemp,mPoppy.piPed,50,-1,TRUE)
SK_PRINT("PED SMART FLEE FROM POPPY")
ENDIF
ENDIF
SET_PED_AS_NO_LONGER_NEEDED(pedTemp)
ENDIF
IF fTimePosInRec >= 92227.953125
REPLAY_RECORD_BACK_FOR_TIME(5.0, 5.0, REPLAY_IMPORTANCE_LOWEST)
SMASH_VEHICLE_WINDOW(viChaseCars[POPPY_CAR],SC_WINDSCREEN_FRONT)
SET_VEHICLE_DAMAGE(viChaseCars[POPPY_CAR],<<99.92, -396.72, 40.74>>,200, 200, FALSE)
SET_VEHICLE_TYRE_BURST(viChaseCars[POPPY_CAR],SC_WHEEL_CAR_FRONT_LEFT)
SET_VEHICLE_TYRE_BURST(viChaseCars[POPPY_CAR],SC_WHEEL_CAR_FRONT_RIGHT)
PLAY_SOUND_FROM_ENTITY(-1,"BUILDING_SITE_CRASH",viChaseCars[POPPY_CAR],"PAPARAZZO_02_SOUNDSETS")
TRIGGER_MUSIC_EVENT("PAP2_STOP")
IF IS_PED_UNINJURED(pedBuilder[0])
TASK_GO_TO_ENTITY(pedBuilder[0],viChaseCars[POPPY_CAR],-1,10)
ENDIF
IF IS_PED_UNINJURED(pedBuilder[1])
TASK_GO_TO_ENTITY(pedBuilder[1],viChaseCars[POPPY_CAR],-1,5)
ENDIF
IF IS_PED_UNINJURED(pedBuilder[2])
TASK_GO_TO_ENTITY(pedBuilder[2],viChaseCars[POPPY_CAR],-1,15)
ENDIF
IF IS_PED_UNINJURED(pedBuilder[3])
TASK_GO_TO_ENTITY(pedBuilder[3],viChaseCars[POPPY_CAR],-1,10)
ENDIF
IF IS_PED_UNINJURED(pedBuilder[4])
TASK_START_SCENARIO_IN_PLACE(pedBuilder[4],"WORLD_HUMAN_MOBILE_FILM_SHOCKING",-1,TRUE)
ENDIF
iShockPoppy = 0
SAFE_RELEASE_PED(pedTemp)
REPLAY_RECORD_BACK_FOR_TIME(3.0, 0, REPLAY_IMPORTANCE_LOWEST) //Poppy crashes her car.
bPoppyBigCrash = TRUE
ENDIF
ELSE
IF NOT HAS_SOUND_FINISHED(iSoundPoppyRevs)
STOP_SOUND(iSoundPoppyRevs)
ENDIF
IF iShockPoppyCrash = 0
iShockPoppyCrash = ADD_SHOCKING_EVENT_FOR_ENTITY(EVENT_SHOCKING_CAR_CRASH,viChaseCars[POPPY_CAR])
ENDIF
/*
fCrashShockRange += 20
IF fCrashShockRange > 100
fCrashShockRange = 100
ENDIF
pedTemp = GET_RANDOM_PED_AT_COORD(<<99.92, -396.72, 40.74>>,<<fCrashShockRange,fCrashShockRange,fCrashShockRange>>,PEDTYPE_MISSION)
IF IS_PED_UNINJURED(pedTemp)
AND GET_SCRIPT_TASK_STATUS(pedTemp,SCRIPT_TASK_GO_TO_ENTITY) <> PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(pedTemp,SCRIPT_TASK_GO_TO_ENTITY) <> WAITING_TO_START_TASK
CLEAR_PED_TASKS(pedTemp)
SET_PED_KEEP_TASK(pedTemp,TRUE)
TASK_GO_TO_ENTITY(pedTemp,viChaseCars[POPPY_CAR],-1,5)
SK_PRINT("PED TASKED TO RUN TOWARDS POPPY")
SET_PED_AS_NO_LONGER_NEEDED(pedTemp)
ENDIF
*/
ENDIF
ENDIF
IF fTimePosInRec >= 40577.410156//41177.410156
AND fTimePosInRec < 42025.582031 //42525.582031
IF fXOffest < 2.5
fXOffest = fXOffest + 0.1
ENDIF
IF IS_ENTITY_ALIVE(viChaseCars[BODYGUARD_CAR])
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viChaseCars[BODYGUARD_CAR])
SET_POSITION_OFFSET_FOR_RECORDED_VEHICLE_PLAYBACK(viChaseCars[BODYGUARD_CAR],<<fXOffest,0,0>>)
ENDIF
ENDIF
ELSE
IF fXOffest <> 0.0
IF fTimePosInRec >= 42025.582031//42525.582031
IF fXOffest > 0.0
fXOffest = fXOffest - 0.1
ENDIF
IF fXOffest < 0.0
fXOffest = 0.0
ENDIF
IF IS_ENTITY_ALIVE(viChaseCars[BODYGUARD_CAR])
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viChaseCars[BODYGUARD_CAR])
SET_POSITION_OFFSET_FOR_RECORDED_VEHICLE_PLAYBACK(viChaseCars[BODYGUARD_CAR],<<fXOffest,0,0>>)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT bDoneFirstPoppyCarOffset
IF fTimePosInRec >= 39807.453125
AND fTimePosInRec < 41084.421875
IF fZOffest < 0.1
fZOffest = fZOffest + 0.01
ENDIF
IF fXOffestPoppy > -0.3
fXOffestPoppy = fXOffestPoppy - 0.01
ENDIF
SET_POSITION_OFFSET_FOR_RECORDED_VEHICLE_PLAYBACK(viChaseCars[POPPY_CAR],<<fXOffestPoppy,0,fZOffest>>)
ELSE
IF fTimePosInRec >= 41084.421875
bDoneFirstPoppyCarOffset = TRUE
ENDIF
ENDIF
ELSE
IF fTimePosInRec >= 45980.902344
AND fTimePosInRec < 48093.191406
IF fZOffest < 0.1
fZOffest = fZOffest + 0.02
ENDIF
SET_POSITION_OFFSET_FOR_RECORDED_VEHICLE_PLAYBACK(viChaseCars[POPPY_CAR],<<fXOffestPoppy,0,fZOffest>>)
ELSE
IF fZOffest <> 0.0
IF fZOffest > 0.0
fZOffest = fZOffest - 0.02
ENDIF
IF fZOffest < 0.0
fZOffest = 0.0
ENDIF
ENDIF
IF fXOffestPoppy <> 0.0
IF fXOffestPoppy < 0.0
fXOffestPoppy = fXOffestPoppy + 0.01
ENDIF
IF fXOffestPoppy > 0.0
fXOffestPoppy = 0.0
ENDIF
ENDIF
IF fZOffest <> 0.0
OR fXOffestPoppy <> 0.0
SET_POSITION_OFFSET_FOR_RECORDED_VEHICLE_PLAYBACK(viChaseCars[POPPY_CAR],<<fXOffestPoppy,0,fZOffest>>)
ENDIF
ENDIF
ENDIF
IF fTimePosInRec >= 3472.197510
AND fTimePosInRec < 94887.289063
bUseFace = TRUE
ELSE
bUseFace = FALSE
ENDIF
//IF fTimePosInRec >= 16500.0
//AND fTimePosInRec < 20020.544922
//OVERRIDE_LODSCALE_THIS_FRAME(0.95)
//ENDIF
IF IS_VEHICLE_OK(viChaseCars[POPPY_CAR])
IF fTimePosInRec >= 48117.371094
AND fTimePosInRec < 50493.308594
ACTIVATE_PHYSICS(viChaseCars[POPPY_CAR])
ENDIF
IF fTimePosInRec >= 87079.421875
ACTIVATE_PHYSICS(viChaseCars[POPPY_CAR])
ENDIF
ENDIF
IF IS_VEHICLE_OK(viChaseCars[SHAGGER_CAR])
IF fTimePosInRec >= 27450.808594
AND fTimePosInRec < 30024.781250
IF IS_VEHICLE_OK(viCrashFuto)
ACTIVATE_PHYSICS(viCrashFuto)
ENDIF
ACTIVATE_PHYSICS(viChaseCars[SHAGGER_CAR])
ENDIF
IF fTimePosInRec >= 87079.421875
ACTIVATE_PHYSICS(viChaseCars[SHAGGER_CAR])
ENDIF
IF bHighRevSound = FALSE
IF fTimePosInRec > 88060.507813
AND fTimePosInRec < 89076.585938
PLAY_SOUND_FROM_ENTITY(-1,"HIGHREV",viChaseCars[SHAGGER_CAR],"PAPARAZZO_02_SOUNDSETS")
SK_PRINT("HIGH REV SOUND")
bHighRevSound = TRUE
ENDIF
ENDIF
ENDIF
IF IS_VEHICLE_OK(viChaseCars[BODYGUARD_CAR])
IF fTimePosInRec >= 52142.996094
AND fTimePosInRec < 56000.0
ACTIVATE_PHYSICS(viChaseCars[BODYGUARD_CAR])
ENDIF
IF fTimePosInRec >= 64722.496094
AND fTimePosInRec < 67652.062500
ACTIVATE_PHYSICS(viChaseCars[BODYGUARD_CAR])
ENDIF
IF fTimePosInRec >= 87079.421875
ACTIVATE_PHYSICS(viChaseCars[BODYGUARD_CAR])
ENDIF
ENDIF
IF fTimePosInRec >= 500
AND iSeqTraffic <> 7
DO_SCRIPTED_TRAFFIC()
ENDIF
/*
IF fTimePosInRec > 53000
AND fTimePosInRec < 68000
bTrafficForceDefaultPedModel = TRUE
ELSE
bTrafficForceDefaultPedModel = FALSE
ENDIF
*/
IF iSeqBadCamMissionFail = 0
IF fTimePosInRec >= 91365.810
bPlayerFailed = FALSE
bDisableFail = TRUE
ENDIF
ENDIF
IF fTimePosInRec > 0
IF bOpenBoot = FALSE
SET_VEHICLE_DOOR_BROKEN(viPlayerCar,SC_DOOR_BOOT,TRUE)
SET_ENTITY_VISIBLE(viPlayerCar,TRUE)
//SET_CAR_BOOT_OPEN(viPlayerCar)
//SET_VEHICLE_DOOR_OPEN(viPlayerCar,SC_DOOR_BOOT,FALSE,TRUE)
//#IF IS_DEBUG_BUILD
// CPRINTLN(DEBUG_MISSION, "<><> SET CAR BOOT OPEN <><>")
//#ENDIF
bOpenBoot = TRUE
ELSE
IF bSetCarVisible = FALSE
//IF GET_VEHICLE_DOOR_ANGLE_RATIO(viPlayerCar,SC_DOOR_BOOT) >= 0.7
//SET_ENTITY_VISIBLE(viPlayerCar,TRUE)
//SET_ENTITY_VISIBLE(PLAYER_PED_ID(),FALSE)
bSetCarVisible = TRUE
//ENDIF
ELSE
IF bLockBootOpen = FALSE
//IF GET_VEHICLE_DOOR_ANGLE_RATIO(viPlayerCar,SC_DOOR_BOOT) >= 0.99
// SET_VEHICLE_DOOR_OPEN(viPlayerCar,SC_DOOR_BOOT,FALSE,TRUE)
// CPRINTLN(DEBUG_MISSION, "CAR BOOT LOCKED OPEN")
bLockBootOpen = TRUE
//ENDIF
ENDIF
/*
IF NOT bStartScriptCineCam
IF GET_VEHICLE_DOOR_ANGLE_RATIO(viPlayerCar,SC_DOOR_BOOT) < 0.2
SET_VEHICLE_DOOR_BROKEN(viPlayerCar,SC_DOOR_BOOT,FALSE)
CPRINTLN(DEBUG_MISSION, "CAR BOOT SHUT ITSELF! KNOCKING IT OFF")
ENDIF
ENDIF
*/
ENDIF
ENDIF
ENDIF
IF bPoppyCrashDialogue = FALSE
IF fTimePosInRec >= 91715.726563
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(s_conversation_peds, sTextBlock, "PAP2_PIPES", CONV_PRIORITY_HIGH) //Oh shit! Noooooooo!
bPoppyCrashDialogue = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF bStreamvolCreated = FALSE
IF fTimePosInRec >= 85000.0
//StreamVol = STREAMVOL_CREATE_FRUSTUM(<< -74.2735, -532.8775, 39.9423 >>,<< 2.1752, 0.0075, -32.3615 >>,200,FLAG_COLLISIONS_MOVER | FLAG_MAPDATA, STREAMVOL_LOD_FLAG_ALL)
StreamVol = STREAMVOL_CREATE_FRUSTUM(<<-71.5438, -549.9070, 40.5579>>, <<2.4313, 1.2491, -20.7899>>,200,FLAG_COLLISIONS_MOVER | FLAG_MAPDATA, STREAMVOL_LOD_FLAG_ALL)
//NEW_LOAD_SCENE_START(<< -74.2735, -532.8775, 39.9423 >>,<< 2.1752, 0.0075, -32.3615 >>,100)
REQUEST_MODEL(prop_pipes_02b)
REQUEST_MODEL(prop_cablespool_02)
REQUEST_MODEL(prop_barrier_wat_04c)
REQUEST_MODEL(prop_consign_01a)
REQUEST_MODEL(prop_barrier_work06a)
REQUEST_MODEL(prop_sign_road_03g)
REQUEST_MODEL(prop_sign_road_03m)
SET_PED_NON_CREATION_AREA(<<1.9758, -403.4291, 38.4052>>-<<30,30,10>>,<<1.9758, -403.4291, 38.4052>>+<<30,30,10>>)
bStreamvolCreated = TRUE
ENDIF
ENDIF
IF fTimePosInRec >= 80000.0
CREATE_BUILDER_PEDS()
ENDIF
/*
IF fTimePosInRec < 90000.0
IF iSeqMusic <> 3
IF TRIGGER_MUSIC_EVENT("PAP2_CAR")
iSeqMusic = 3
ENDIF
ENDIF
ENDIF
*/
IF fTimePosInRec < 15000.0
IF IS_SCREEN_FADED_OUT()
IF NOT IS_SCREEN_FADING_IN()
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME,FALSE)
ENDIF
ENDIF
ENDIF
CLEAR_PED_AREAS()
IF IS_PED_UNINJURED(mPoppy.piPed)
SET_PED_LOD_MULTIPLIER(mPoppy.piPed,2.0)
IF fTimePosInRec >= 47849.195313
AND fTimePosInRec < 49546.554688
IF NOT IS_PED_DOING_DRIVEBY(mPoppy.piPed)
TASK_DRIVE_BY(mPoppy.piPed,PLAYER_PED_ID(),NULL,<<0,0,0>>,7,100)
ENDIF
ENDIF
ENDIF
IF bSkipToEndOfChase = TRUE
IF GET_TIME_POSITION_IN_RECORDING(viPlayerCar) < 80000
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(viPlayerCar,80000) //!!!!!!!!!!!! USE TO SKIP
ENDIF
ENDIF
ENDIF
IF GET_VEHICLE_DOOR_ANGLE_RATIO(viPlayerCar,SC_DOOR_REAR_LEFT) > 0
SET_VEHICLE_DOOR_CONTROL(viPlayerCar,SC_DOOR_REAR_LEFT,DT_DOOR_INTACT,GET_VEHICLE_DOOR_ANGLE_RATIO(viPlayerCar,SC_DOOR_REAR_LEFT) - 0.08)
ENDIF
IF GET_VEHICLE_DOOR_ANGLE_RATIO(viPlayerCar,SC_DOOR_REAR_RIGHT) > 0
SET_VEHICLE_DOOR_CONTROL(viPlayerCar,SC_DOOR_REAR_RIGHT,DT_DOOR_INTACT,GET_VEHICLE_DOOR_ANGLE_RATIO(viPlayerCar,SC_DOOR_REAR_RIGHT) - 0.08)
ENDIF
ENDIF
IF NOT bPlayerFailed
IF NOT bMiniCutDone
//IF DO_MINI_CAR_CUTSCENE()
bMiniCutDone = TRUE
//ENDIF
ELSE
//IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_BADCAM")
IF bStartChaseCam
IF DOES_CAM_EXIST(camMain)
STOP_CAM_POINTING(camMain)
ENDIF
IF NOT bStartScriptCineCam
IF DOES_CAM_EXIST(camInterp)
DESTROY_CAM(camInterp)
ENDIF
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
IF NOT bDoingEndCut
MANAGE_CAMERA()
ENDIF
ENDIF
ELSE
IF bOpenBoot = TRUE
IF bStartChaseCam = FALSE
IF SETUP_STAGE_REQUIREMENTS(RQ_CAMERA, vSafeVec)
IF DOES_CAM_EXIST(camMain)
//POINT_CAM_AT_COORD(CamMain,GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(viPlayerCar,<<0,-5,0.6>>))
SHAKE_CAM(camMain, "HAND_SHAKE", 0.1)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
ENDIF
MANAGE_CAMERA()
SET_ENTITY_VISIBLE(PLAYER_PED_ID(),FALSE)
bStartChaseCam = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
//IF NOT IS_THIS_PRINT_BEING_DISPLAYED("PAP2_05")
MANAGE_CHASE_CONVO()
IF bStartChaseCam
IF IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
IF GET_TIME_POSITION_IN_RECORDING(viPlayerCar) <= 86982.210938 //95365.810 //96333.600
IF GET_TIME_POSITION_IN_RECORDING(viPlayerCar) >= 1000
BOOL bOnScreen
MONITER_PED_ON_SCREEN(mPoppy.piPed, bOnScreen)
IF NOT bOnScreen
IF NOT bDisableFail
MONITER_FOR_BAD_FILMING_CHASE()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
//ENDIF
DO_SCRIPTED_CINE_CAM()
//ENDIF
ENDIF
ELSE
IF DOES_CAM_EXIST(camMain)
fCamFov = GET_CAM_FOV(camMain)
ENDIF
MANAGE_CAMERA()
IF PULLOVER_PLAYER_FAILED()
MISSION_FAILED(FR_BADCAM)
ENDIF
ENDIF
HANDLE_POPPY_CHASE_DIALOGUE()
MANAGE_UBER_RECORDING_FOR_CHASE()
BREAK
CASE SS_CLEANUP
NEXT_STAGE()
SET_ENTITY_VISIBLE(PLAYER_PED_ID(),TRUE)
SAFE_REMOVE_BLIP(biGOTO)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
BREAK
CASE SS_SKIPPED
#IF IS_DEBUG_BUILD
iCurrentChasePos = MAX_CHASE_POINTS - 1
#ENDIF
IF IS_SAFE_PED_IN_VEHICLE(PLAYER_PED_ID(), viPlayerCar)
IF IS_PLAYBACK_GOING_ON_FOR_VEHICLE(viPlayerCar)
SKIP_TO_END_AND_STOP_PLAYBACK_RECORDED_VEHICLE(viPlayerCar)
IF IS_VEHICLE_SEAT_FREE(viPlayerCar, VS_BACK_RIGHT)
TASK_SHUFFLE_TO_NEXT_VEHICLE_SEAT(PLAYER_PED_ID(), viPlayerCar)
ENDIF
REQUEST_CUTSCENE("pap_2_mcs_1")
eState = SS_CLEANUP
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Player and bev exchange brief words then player gets out of the car
/// and bev drives off
PROC OUTRO_NEW()
HIDE_HUD_AND_RADAR_THIS_FRAME()
THEFEED_HIDE_THIS_FRAME()
SET_USE_HI_DOF()
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
ENDIF
SWITCH eCutsceneState
CASE eCutInit
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_MISSION, "**** Init Outro ****")
#ENDIF
IF SETUP_MISSION_STAGE(MS_OUTRO, bJumpSkip)
IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE()
bCSSetExitCam = FALSE
bCSSetExitBev = FALSE
bCSSetExitCar = FALSE
bCSSetExitFranklin = FALSE
IF IS_PED_UNINJURED(mBuddy.piPed)
REGISTER_ENTITY_FOR_CUTSCENE(mBuddy.piPed,"Beverly",CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
ENDIF
IF IS_VEHICLE_OK(viPlayerCar)
REGISTER_ENTITY_FOR_CUTSCENE(viPlayerCar,"Beverlys_Car",CU_ANIMATE_EXISTING_SCRIPT_ENTITY,FQ2)
ENDIF
REPLAY_RECORD_BACK_FOR_TIME(10.0, 0.0, REPLAY_IMPORTANCE_LOWEST)
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW)
START_CUTSCENE()
WAIT(0)
IF bStreamvolCreated = TRUE
STREAMVOL_DELETE(StreamVol)
ENDIF
SAFE_FADE_SCREEN_IN_FROM_BLACK(DEFAULT_FADE_TIME,FALSE)
eCutsceneState = eCutUpdate
ENDIF
ENDIF
BREAK
CASE eCutUpdate
IF bCSSetExitFranklin = FALSE
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Franklin")
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
bCSSetExitFranklin = TRUE
ENDIF
ENDIF
IF bCSSetExitCam = FALSE
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
REPLAY_STOP_EVENT()
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
bCSSetExitCam = TRUE
ENDIF
ENDIF
IF bCSSetExitCar = FALSE
AND bCSSetExitBev = FALSE
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverly")
AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Beverlys_Car")
IF NOT IS_SAFE_PED_IN_VEHICLE(mBuddy.piPed, viPlayerCar)
SET_PED_INTO_VEHICLE(mBuddy.piPed, viPlayerCar)
ENDIF
FORCE_PED_AI_AND_ANIMATION_UPDATE(mBuddy.piPed)
SET_DISABLE_PRETEND_OCCUPANTS(viPlayerCar,TRUE)
SET_VEHICLE_FIXED(viPlayerCar)
SET_VEHICLE_DOOR_LATCHED(viPlayerCar,SC_DOOR_REAR_RIGHT,TRUE,TRUE)
OPEN_SEQUENCE_TASK(SeqMain)
TASK_VEHICLE_DRIVE_WANDER(NULL, viPlayerCar,100, DRIVINGMODE_AVOIDCARS_RECKLESS)
CLOSE_SEQUENCE_TASK(SeqMain)
SET_PED_KEEP_TASK(mBuddy.piPed, TRUE)
TASK_PERFORM_SEQUENCE(mBuddy.piPed, SeqMain)
CLEAR_SEQUENCE_TASK(SeqMain)
bCSSetExitCar = TRUE
bCSSetExitBev = TRUE
ENDIF
ENDIF
IF bCSSetExitCar = TRUE
AND bCSSetExitBev = TRUE
AND bCSSetExitCam = TRUE
AND bCSSetExitFranklin = TRUE
eCutsceneState = eCutCleanup
ELSE
#IF IS_DEBUG_BUILD
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
STOP_CUTSCENE_IMMEDIATELY()
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)
STOP_CUTSCENE_IMMEDIATELY()
JUMP_TO_STAGE(MS_CAR_CHASE)
ENDIF
#ENDIF
IF DOES_CAM_EXIST(camMain)
DESTROY_CAM(camMain)
ENDIF
IF DOES_CAM_EXIST(camInterp)
DESTROY_CAM(camInterp)
ENDIF
RENDER_SCRIPT_CAMS(FALSE,FALSE)
DISABLE_FIRST_PERSON_FLASH_EFFECT_THIS_UPDATE()
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
ENDIF
BREAK
CASE eCutCleanup
eMissionStage = MS_PASSED
RC_END_CUTSCENE_MODE()
BREAK
ENDSWITCH
ENDPROC
//PURPOSE: RECORD UBER CAR REC
PROC RECORD_UBER_CAR()
SWITCH eState
CASE SS_INIT
IF SETUP_MISSION_STAGE(MS_UBER_RECORD, bJumpSkip)
eState = SS_ACTIVE
ENDIF
BREAK
CASE SS_ACTIVE
#IF IS_DEBUG_BUILD
IF iRecordingProgress > 0
UPDATE_UBER_RECORDING()
ENDIF
#ENDIF
BREAK
CASE SS_CLEANUP
BREAK
CASE SS_SKIPPED
eMissionStage = MS_PASSED
BREAK
ENDSWITCH
ENDPROC
PROC POPPY_AND_UBA()
SWITCH eState
CASE SS_INIT
IF SETUP_MISSION_STAGE(MS_POPPY_AND_UBA, bJumpSkip)
eState = SS_ACTIVE
ENDIF
BREAK
CASE SS_ACTIVE
MANAGE_UBER_RECORDING_FOR_CHASE()
BREAK
CASE SS_CLEANUP
BREAK
CASE SS_SKIPPED
bObjectiveShown = FALSE
eMissionStage = MS_PASSED
BREAK
ENDSWITCH
ENDPROC
PROC SET_PIECE_RECORDING()
SWITCH eState
CASE SS_INIT
IF SETUP_MISSION_STAGE(MS_SET_PIECE_RECORDING, bJumpSkip)
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
eState = SS_ACTIVE
ENDIF
BREAK
CASE SS_ACTIVE
MANAGE_UBER_RECORDING_FOR_CHASE()
BREAK
CASE SS_CLEANUP
BREAK
CASE SS_SKIPPED
bObjectiveShown = FALSE
eMissionStage = MS_PASSED
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// Checks to make sure the player hasn't killed any of the peds in the mission
PROC MONITER_PLAYER_KILLED()
SWITCH eMissionStage
CASE MS_FOLLOW_BEV_ROAD
FALLTHRU
CASE MS_FOLLOW_BEV_GUARDS
FALLTHRU
CASE MS_FOLLOW_TO_POPPY
FALLTHRU
CASE MS_FILM_POPPY
FALLTHRU
CASE MS_GET_IN_ESCAPE_CAR
IF SAFE_MONITER_PED(mBuddy.piPed)
IF IS_ENTITY_DEAD(mBuddy.piPed)
MISSION_FAILED(FR_BUDDY_DEAD)
ELSE
GIVE_FLEE_ORDER(mBuddy.piPed)
MISSION_FAILED(FR_BUDDY_HARMED)
ENDIF
ENDIF
IF SAFE_MONITER_PED(mPoppy.piPed)
IF IS_ENTITY_DEAD(mPoppy.piPed)
MISSION_FAILED(FR_KILLED_POP)
IF IS_PED_UNINJURED(mShagger.piPed)
GIVE_FLEE_ORDER(mShagger.piPed)
ENDIF
ELSE
IF IS_PED_UNINJURED(mPoppy.piPed)
GIVE_FLEE_ORDER(mPoppy.piPed)
ENDIF
IF IS_PED_UNINJURED(mShagger.piPed)
GIVE_FLEE_ORDER(mShagger.piPed)
ENDIF
MISSION_FAILED(FR_HARMED_POP)
ENDIF
ENDIF
IF SAFE_MONITER_PED(mShagger.piPed)
IF IS_ENTITY_DEAD(mShagger.piPed)
MISSION_FAILED(FR_KILLED_SHAG)
IF IS_PED_UNINJURED(mShagger.piPed)
GIVE_FLEE_ORDER(mShagger.piPed)
ENDIF
ENDIF
ENDIF
IF SAFE_MONITER_CAR(viPlayerCar)
MISSION_FAILED(FR_CAR_DEAD)
ENDIF
IF SAFE_MONITER_CAR(viChaseCars[POPPY_CAR])
OR SAFE_MONITER_CAR(viChaseCars[SHAGGER_CAR])
OR SAFE_MONITER_CAR(viChaseCars[BODYGUARD_CAR])
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 1)
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
MISSION_FAILED(FR_WANTED)
ENDIF
FOR iCount = 0 TO (MAX_STAFF - 1)
IF SAFE_MONITER_PED(mHotelStaff[iCount].piPed)
MISSION_FAILED(FR_KILLED_INOCC)
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
GIVE_FLEE_ORDER(mHotelStaff[1].piPed)
BREAK
ENDIF
ENDFOR
BREAK
CASE MS_CAR_CHASE
IF SAFE_MONITER_PED(mPoppy.piPed)
IF IS_ENTITY_DEAD(mPoppy.piPed)
MISSION_FAILED(FR_KILLED_POP)
ELSE
MISSION_FAILED(FR_HARMED_POP)
ENDIF
ENDIF
IF SAFE_MONITER_PED(mShagger.piPed)
IF IS_ENTITY_DEAD(mShagger.piPed)
MISSION_FAILED(FR_KILLED_SHAG)
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE:
/// checks that the player is in the area and/or near beverly
PROC MONITER_PLAYER_IN_AREA()
IF NOT bJumpSkip
SWITCH eMissionStage
CASE MS_FOLLOW_BEV_ROAD
IF IS_PED_UNINJURED(mBuddy.piPed)
IF IS_PLAYER_AT_COORDS(<< -46.2972, 351.4437, 112.5526 >>, <<3,3,5>>)
OR NOT IS_ENTITY_IN_RANGE_ENTITY(mBuddy.piPed,PLAYER_PED_ID(),120)
MISSION_FAILED(FR_LEFT_BUDDY)
ENDIF
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA( PLAYER_PED_ID(),<< -51.9864, 340.5381, 111.0746 >>, << -62.1780, 344.6878, 114.3459 >>, 20)
IF NOT bExpireWarning
CLEAR_PRINTS()
KILL_ANY_CONVERSATION()
PRINT_NOW("PAP2_06", DEFAULT_GOD_TEXT_TIME,0)
bExpireWarning = TRUE
ENDIF
ENDIF
FALLTHRU
CASE MS_FOLLOW_BEV_GUARDS
FALLTHRU
CASE MS_FOLLOW_TO_POPPY
FALLTHRU
CASE MS_FILM_POPPY
FALLTHRU
CASE MS_GET_IN_ESCAPE_CAR
IF eMissionStage >= MS_FOLLOW_BEV_GUARDS
IF NOT IS_PLAYER_AT_ENTITY(mBuddy.piPed, <<25,25,40>>)
IF iFailInactivityTimer > 300
IF eMissionStage = MS_GET_IN_ESCAPE_CAR
//MISSION_FAILED(FR_TOOK_TOO_LONG)
ELSE
MISSION_FAILED(FR_BEV_LEFT_YOU)
ENDIF
ELSE
iFailInactivityTimer++
ENDIF
IF eMissionStage <> MS_GET_IN_ESCAPE_CAR
IF NOT bExpireWarning
PRINT_NOW("PAP2_06", DEFAULT_GOD_TEXT_TIME,0)
bExpireWarning = TRUE
ENDIF
ENDIF
ELSE
iFailInactivityTimer = 0
ENDIF
ENDIF
BREAK
ENDSWITCH
ENDIF
ENDPROC
/// PURPOSE:
/// Checks for fail conditions
PROC CHECK_FOR_FAIL()
IF eMissionStage < MS_PASSED
MONITER_PLAYER_KILLED()
MONITER_PLAYER_IN_AREA()
IF NOT bBudThreat
IF HAS_PLAYER_THREATENED_PED(mBuddy.piPed)
OR (IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(),0) AND eMissionStage < MS_CAMERA_TUTORIAL)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
GIVE_FLEE_ORDER(mBuddy.piPed)
//IF IS_ANYONE_SHOOTING_NEAR_PED(mBuddy.piPed)
GIVE_FLEE_ORDER(mHotelStaff[0].piPed)
GIVE_FLEE_ORDER(mHotelStaff[1].piPed)
GIVE_FLEE_ORDER(mPoppy.piPed)
GIVE_FLEE_ORDER(mShagger.piPed)
GIVE_FLEE_ORDER(mBodyGuard.piPed)
//ENDIF
bBudThreat = TRUE
ENDIF
ENDIF
ENDIF
ENDPROC
// ===========================================================================================================
// DEBUG FUNCTIONS
// ===========================================================================================================
#IF IS_DEBUG_BUILD
/// PURPOSE: Check for Forced Pass or Fail
PROC DEBUG_Check_Debug_Keys()
IF eState = SS_ACTIVE
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
WAIT_FOR_CUTSCENE_TO_STOP()
TRIGGER_MUSIC_EVENT("PAP2_FAIL")
//IF eMissionStage = MS_CAR_CHASE
IF NOT IS_SCREEN_FADED_OUT()
AND NOT IS_SCREEN_FADING_OUT()
SAFE_FADE_SCREEN_OUT_TO_BLACK(0,FALSE)
bSkipPassMission = TRUE
ENDIF
//ENDIF
eMissionStage = MS_PASSED
ENDIF
// Check for Fail
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
WAIT_FOR_CUTSCENE_TO_STOP()
TRIGGER_MUSIC_EVENT("PAP2_FAIL")
IF eMissionStage <> MS_CAR_CHASE
MISSION_FAILED(FR_NONE)
ELSE
bPlayerFailed = TRUE
ENDIF
ENDIF
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)) AND eMissionStage <> MS_INIT
CLEAR_PRINTS()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
IF eMissionStage = MS_FOLLOW_TO_POPPY
JUMP_TO_STAGE(MS_CAMERA_TUTORIAL)
ELSE
eState = SS_SKIPPED
ENDIF
ENDIF
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P))
AND eMissionStage <> MS_INIT
AND eMissionStage <> MS_INTRO //AND eMissionStage <> MS_CAR_CHASE
CLEAR_PRINTS()
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
//Work out which stage we want to reach based on the current stage
iMissionState = ENUM_TO_INT(eMissionStage)
IF eMissionStage = MS_FILM_POPPY
MISSION_STAGE e_stage = INT_TO_ENUM(MISSION_STAGE, iMissionState - 2)
JUMP_TO_STAGE(e_stage)
ELSE
IF iMissionState > 0
MISSION_STAGE e_stage = INT_TO_ENUM(MISSION_STAGE, iMissionState - 1)
JUMP_TO_STAGE(e_stage)
ENDIF
ENDIF
ENDIF
IF LAUNCH_MISSION_STAGE_MENU(s_skip_menu, i_debug_jump_stage)
SWITCH i_debug_jump_stage
CASE 0
i_debug_jump_stage = 1
BREAK
CASE 1
i_debug_jump_stage = 2
BREAK
CASE 2
i_debug_jump_stage = 5
BREAK
CASE 3
i_debug_jump_stage = 6
BREAK
CASE 4
i_debug_jump_stage = 7
BREAK
CASE 5
bUseLockedCam = FALSE
i_debug_jump_stage = 8
BREAK
CASE 6
i_debug_jump_stage = 9
BREAK
CASE 7
i_debug_jump_stage = 12
SK_PRINT("JUMP to UBA REC")
BREAK
CASE 8
i_debug_jump_stage = 13
SK_PRINT("JUMP to POPPY AND UBA")
BREAK
CASE 9
i_debug_jump_stage = 14
SK_PRINT("JUMP to SET PIECE RECORDING")
BREAK
CASE 10
bUseLockedCam = TRUE
i_debug_jump_stage = 8
BREAK
CASE 11
bSkipToEndOfChase = TRUE
i_debug_jump_stage = 8
BREAK
ENDSWITCH
MISSION_STAGE e_stage = INT_TO_ENUM(MISSION_STAGE, i_debug_jump_stage)
//STOP_CUTSCENE()
//WAIT_FOR_CUTSCENE_TO_STOP()
JUMP_TO_STAGE(e_stage)
ENDIF
ENDIF
ENDPROC
PROC WRITE_BOOL_TO_DEBUG(STRING name, BOOL bOn)
SAVE_STRING_TO_DEBUG_FILE(name)
SAVE_BOOL_TO_DEBUG_FILE(bOn)
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDPROC
PROC WRITE_FLOAT_TO_DEBUG(STRING name, FLOAT thing)
SAVE_STRING_TO_DEBUG_FILE(name)
SAVE_FLOAT_TO_DEBUG_FILE(thing)
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDPROC
PROC WRITE_INT_TO_DEBUG(STRING name, INT thing)
SAVE_STRING_TO_DEBUG_FILE(name)
SAVE_INT_TO_DEBUG_FILE(thing)
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDPROC
PROC UPDATE_WIDGETS()
IF bPrintWidgetValuesToDebug
OPEN_DEBUG_FILE()
WRITE_FLOAT_TO_DEBUG("FLOAT fCursorX1 = ", fCursorX1)
WRITE_FLOAT_TO_DEBUG("FLOAT fCursorY1 = ", fCursorY1)
WRITE_FLOAT_TO_DEBUG("FLOAT fCursorX2 = ", fCursorX2)
WRITE_FLOAT_TO_DEBUG("FLOAT fCursorY2 = ", fCursorY2)
WRITE_FLOAT_TO_DEBUG("FLOAT fCursorX3 = ", fCursorX3)
WRITE_FLOAT_TO_DEBUG("FLOAT fCursorY3 = ", fCursorY3)
WRITE_FLOAT_TO_DEBUG("FLOAT fCursorX4 = ", fCursorX4)
WRITE_FLOAT_TO_DEBUG("FLOAT fCursorY4 = ", fCursorY4)
SAVE_NEWLINE_TO_DEBUG_FILE()
CLOSE_DEBUG_FILE()
bPrintWidgetValuesToDebug = FALSE
ENDIF
ENDPROC
#ENDIF
// ===========================================================================================================
// Script Loop
// ===========================================================================================================
SCRIPT(g_structRCScriptArgs sRCLauncherDataIn)
sRCLauncherDataLocal = sRCLauncherDataIn
RC_TakeEntityOwnership(sRCLauncherDataLocal)
mScenarioBlocker = Pap2_Scenario_Blocker()
SET_MISSION_FLAG(TRUE)
DISABLE_TAXI_HAILING(TRUE) //For B*1860244 - Blocking taxis during mission.
REQUEST_ANIM_DICT("rcmpaparazzo_2")
IF IS_REPEAT_PLAY_ACTIVE()
WHILE NOT HAS_ANIM_DICT_LOADED("rcmpaparazzo_2")
WAIT(0)
ENDWHILE
ENDIF
// Setup callback when player is killed, arrested or goes to multiplayer
IF (HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU))
PRINT_LAUNCHER_DEBUG("Force cleanup [TERMINATING]")
Random_Character_Failed()
Script_Cleanup()
TERMINATE_THIS_THREAD()
ENDIF
IF Is_Replay_In_Progress() // Set up the initial scene for replays
g_bSceneAutoTrigger = TRUE
eInitialSceneStage = IS_REQUEST_SCENE
WHILE NOT SetupScene_PAPARAZZO_2(sRCLauncherDataLocal)
WAIT(0)
ENDWHILE
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
g_bSceneAutoTrigger = FALSE
ENDIF
IF IS_SYNCHRONIZED_SCENE_RUNNING(iSynchScene)
TAKE_OWNERSHIP_OF_SYNCHRONIZED_SCENE(iSynchScene)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_MISSION, "PAP2 TAKE_OWNERSHIP_OF_SYNCHRONIZED_SCENE(iSynchScene)")
#ENDIF
ENDIF
viPlayerCar = sRCLauncherDataLocal.vehID[0]
sRCLauncherDataLocal.vehID[0] = NULL
REQUEST_MODEL(Prop_Pap_Camera_01)
REQUEST_CLIP_SET(sWeaponMoveClipset)
REGISTER_SCRIPT_WITH_AUDIO(TRUE)
SET_AMBIENT_ZONE_STATE("AZ_PAPARAZZO_02_AMBIENCE",TRUE,TRUE)
CLEAR_AREA_OF_OBJECTS(<<-30.860102,301.191986,112.116371>>,10)
IF IS_REPLAY_IN_PROGRESS()
AND bDebugSkipping = FALSE
mBuddy.piPed = sRCLauncherDataLocal.pedID[0]
sRCLauncherDataLocal.pedID[0] = NULL
IF IS_PED_UNINJURED(mBuddy.piPed)
SET_PED_LEG_IK_MODE(mBuddy.piPed, LEG_IK_PARTIAL)
ENDIF
ELSE
IF NOT IS_REPLAY_IN_PROGRESS()
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[0])
AND IS_PED_UNINJURED(PLAYER_PED_ID())
AND NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[0],4)
//AND GET_ENTITY_SPEED(PLAYER_PED_ID()) < 3
bDoingFocusPush = TRUE
ENDIF
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
SETUP_FOR_RAGE_WIDGETS()
#ENDIF
ADD_RELATIONSHIP_GROUP("POPPY_GROUP", relPoppyGroup)
IF IS_REPLAY_IN_PROGRESS()
SET_WEATHER_TYPE_NOW_PERSIST("EXTRASUNNY")
ELSE
SET_WEATHER_TYPE_OVERTIME_PERSIST("EXTRASUNNY",10)
ENDIF
ADD_CONTACT_TO_PHONEBOOK(CHAR_BEVERLY, FRANKLIN_BOOK, FALSE)
WHILE(TRUE)
WAIT(0)
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_TST")
MAKE_CLOUDY_IF_NIGHT()
IF DOES_CAM_EXIST(camFrankFilm)
HIDE_HUD_AND_RADAR_THIS_FRAME()
THEFEED_HIDE_THIS_FRAME()
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
SET_USE_HI_DOF()
ENDIF
UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene)
#IF IS_DEBUG_BUILD
UPDATE_WIDGETS()
IF eMissionStage <> MS_FAILED
DEBUG_Check_Debug_Keys()
ENDIF
#ENDIF
IF IS_PED_UNINJURED(PLAYER_PED_ID())
IF eMissionStage <> MS_FAILED
AND eMissionStage <> MS_INIT
AND eMissionStage <> MS_INTRO
CHECK_FOR_FAIL()
ENDIF
SWITCH eMissionStage
CASE MS_INIT //0
INITMISSION()
BREAK
CASE MS_INTRO //1
INTRO()
BREAK
CASE MS_FOLLOW_BEV_ROAD //2
FOLLOWING_BEV()
BREAK
CASE MS_FOLLOW_BEV_GUARDS //3
FOLLOWING_BEV()
BREAK
CASE MS_FOLLOW_TO_POPPY //4
FOLLOWING_BEV()
BREAK
CASE MS_CAMERA_TUTORIAL//5
CAMERA_TUTORIAL()
BREAK
CASE MS_FILM_POPPY //6
FILM_POPPY()
BREAK
CASE MS_GET_IN_ESCAPE_CAR //7
GET_IN_ESCAPE_CAR()
BREAK
CASE MS_CAR_CHASE//8
CAR_CHASE()
BREAK
CASE MS_OUTRO //9
OUTRO_NEW()
BREAK
CASE MS_PASSED //10
Script_Passed()
BREAK
CASE MS_FAILED //11
FAILED_WAIT_FOR_FADE()
BREAK
CASE MS_UBER_RECORD //12
#IF IS_DEBUG_BUILD
RECORD_UBER_CAR()
#ENDIF
BREAK
CASE MS_POPPY_AND_UBA //13
#IF IS_DEBUG_BUILD
POPPY_AND_UBA()
#ENDIF
BREAK
CASE MS_SET_PIECE_RECORDING //14
#IF IS_DEBUG_BUILD
SET_PIECE_RECORDING()
#ENDIF
BREAK
ENDSWITCH
ENDIF
ENDWHILE
// Script should never reach here. Always terminate with cleanup function.
ENDSCRIPT