883 lines
32 KiB
Python
Executable File
883 lines
32 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 "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "CompletionPercentage_public.sch"
|
|
USING "commands_entity.sch"
|
|
USING "commands_script.sch"
|
|
USING "cutscene_public.sch"
|
|
USING "script_player.sch"
|
|
USING "randomChar_public.sch"
|
|
USING "RC_Helper_Functions.sch"
|
|
USING "initial_scenes_Paparazzo.sch"
|
|
USING "commands_recording.sch"
|
|
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : Paparazzo3.sc
|
|
// AUTHOR : Ben.Hinchliffe
|
|
// DESCRIPTION : Player meets Beverly in a bin.
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
|
|
//*************************************************************************************************************************************************
|
|
// :ENUMS:
|
|
//*************************************************************************************************************************************************
|
|
// Mission stages
|
|
ENUM eRC_SubState
|
|
SS_SETUP = 0,
|
|
SS_UPDATE,
|
|
SS_CLEANUP
|
|
ENDENUM
|
|
|
|
// Mission state
|
|
ENUM MISSION_STAGE
|
|
MS_INIT = -2,
|
|
MS_LEAD_IN = -1,
|
|
MS_INTRO = 0,
|
|
MS_LEADOUT,
|
|
MS_FAIL
|
|
ENDENUM
|
|
|
|
//*************************************************************************************************************************************************
|
|
// :CONSTANTS:
|
|
//*************************************************************************************************************************************************
|
|
CONST_INT BEV 0
|
|
CONST_INT CP_AFTER_MOCAP 0 // Checkpoint
|
|
CONST_INT OBJ_DUMPSTER 0
|
|
CONST_INT OBJ_LIDL 0 // Changed to be index in this script's object array not launcher's
|
|
CONST_INT OBJ_LIDR 1 // Changed to be index in this script's object array not launcher's
|
|
CONST_INT OBJ_CAM 3 // Bev's camera
|
|
|
|
//*************************************************************************************************************************************************
|
|
// :VARIABLES:
|
|
//*************************************************************************************************************************************************
|
|
MISSION_STAGE missionStage = MS_INIT
|
|
eRC_SubState m_eSubState = SS_SETUP
|
|
|
|
g_structRCScriptArgs sRCLauncherDataLocal
|
|
REL_GROUP_HASH relGroupPlayer
|
|
|
|
OBJECT_INDEX dumpsterBlue
|
|
OBJECT_INDEX dumpsterGreen
|
|
OBJECT_INDEX dumpsterLids[2]
|
|
MODEL_NAMES modDumpL = PROP_CS_DUMPSTER_LIDL
|
|
MODEL_NAMES modDumpR = PROP_CS_DUMPSTER_LIDR
|
|
MODEL_NAMES modDumpGreen = PROP_CS_DUMPSTER_01A
|
|
MODEL_NAMES modDumpBlue = PROP_DUMPSTER_02A
|
|
|
|
STRING dumpLidLSceneHandle = "Dumpster_Lid_L"
|
|
STRING dumpLidRSceneHandle = "Dumpster_Lid_R"
|
|
STRING dumpGreenSceneHandle = "PAP_Dumpster"
|
|
STRING dumpBlueSceneHandle = "PAP_Dumpster_blue"
|
|
STRING sSceneHandle_Franklin = "Franklin"
|
|
STRING leadInOutAnimDict = "rcmpaparazzo_3leadinoutpap_3_rcm"
|
|
STRING sSceneHandleBev = "Beverley"
|
|
|
|
structPedsForConversation conversation
|
|
|
|
BOOL bLeadInConv = FALSE
|
|
BOOL bLeadOutConv = FALSE
|
|
INT iSyncSceneLeadIn
|
|
INT iSyncSceneLeadInIdle
|
|
INT iSyncSceneLeadOut
|
|
// Use fixed coordinates for the sync scene
|
|
VECTOR vecSyncSceneCoords = << -260.614014, 292.105988, 91.126999 >>
|
|
VECTOR vecSyncSceneRotation = << 0.000072,-2.500116,89.639977 >>
|
|
|
|
INT iSoundId_CameraFlash
|
|
VECTOR vCameraFlashFX_Offset = << 0.070, -0.130, 0.070 >>
|
|
STRING sAudioBank_CameraFlashSoundFX = "Distant_Camera_Flash"
|
|
STRING sCamSoundSetName = "PAPARAZZO_01_SOUNDSET"
|
|
BOOL bFlashDone
|
|
|
|
STRING sFailReason = "DEFAULT"
|
|
|
|
// ===========================================================================================================
|
|
// Termination
|
|
// ===========================================================================================================
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Cleanup
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Safely cleans up the script
|
|
PROC Script_Cleanup()
|
|
|
|
// Ensure launcher is terminated
|
|
RC_CLEANUP_LAUNCHER()
|
|
|
|
IF (Random_Character_Cleanup_If_Triggered())
|
|
CPRINTLN(DEBUG_MISSION, "...Random Character Script was triggered so additional cleanup required")
|
|
ENDIF
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("PAPARAZZO_03_SCENE")
|
|
STOP_AUDIO_SCENE("PAPARAZZO_03_SCENE")
|
|
ENDIF
|
|
|
|
RELEASE_SOUND_ID(iSoundId_CameraFlash)
|
|
|
|
IF DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDL])
|
|
FREEZE_ENTITY_POSITION(dumpsterLids[OBJ_LIDL], TRUE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDR])
|
|
FREEZE_ENTITY_POSITION(dumpsterLids[OBJ_LIDR], TRUE)
|
|
ENDIF
|
|
|
|
SAFE_RELEASE_OBJECT(dumpsterLids[OBJ_LIDL])
|
|
SAFE_RELEASE_OBJECT(dumpsterLids[OBJ_LIDR])
|
|
SAFE_RELEASE_OBJECT(dumpsterBlue)
|
|
SAFE_RELEASE_OBJECT(dumpsterGreen)
|
|
|
|
REMOVE_ANIM_DICT(leadInOutAnimDict)
|
|
REMOVE_PTFX_ASSET()
|
|
|
|
REMOVE_PED_FOR_DIALOGUE(conversation, ENUM_TO_INT(CHAR_FRANKLIN))
|
|
REMOVE_PED_FOR_DIALOGUE(conversation, 3)
|
|
|
|
CLEAR_ADDITIONAL_TEXT(MISSION_TEXT_SLOT, TRUE)
|
|
CLEAR_PRINTS()
|
|
|
|
SAFE_RELEASE_PED(sRCLauncherDataLocal.pedID[BEV])
|
|
RC_CleanupSceneEntities(sRCLauncherDataLocal, TRUE)
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets the mission stage, and reset the sub state
|
|
/// PARAMS:
|
|
/// MISSION_STAGE eNewStage = new main stage
|
|
PROC SET_STAGE(MISSION_STAGE eNewStage)
|
|
missionstage = eNewStage
|
|
m_eSubState = SS_SETUP
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Pass
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
/// PURPOSE:
|
|
/// Adds needed contacts, completion %, cleans up and passes script.
|
|
PROC Script_Passed()
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: Mission passed")
|
|
ADD_CONTACT_TO_PHONEBOOK(CHAR_BEVERLY, FRANKLIN_BOOK, FALSE)
|
|
SAFE_DELETE_PED(sRCLauncherDataLocal.pedID[BEV]) //Bev will be inside the closed dumpster now, so delete him
|
|
Random_Character_Passed()
|
|
Script_Cleanup()
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Fail
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
/// PURPOSE:
|
|
/// Sets the fail reason, and goes to the fail stage
|
|
/// PARAMS:
|
|
/// sFail - the fail reason
|
|
PROC SET_MISSION_FAILED(STRING sFail)
|
|
STOP_SCRIPTED_CONVERSATION(FALSE)
|
|
CLEAR_PRINTS()
|
|
|
|
IF missionStage <> MS_FAIL
|
|
sFailReason = sFail
|
|
SET_STAGE(MS_FAIL)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Safely fails and cleans up the script
|
|
PROC Script_Failed()
|
|
Random_Character_Failed()
|
|
Script_Cleanup()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks if conditions are met that will fail the mission, for example if Barry is scared away
|
|
/// Plays a fail conversation if needed
|
|
/// RETURNS:
|
|
/// TRUE if mission has failed, else return FALSE
|
|
FUNC BOOL FAIL_CHECKS()
|
|
|
|
IF NOT IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
RETURN TRUE
|
|
|
|
ELIF DOES_ENTITY_EXIST(sRCLauncherDataLocal.pedID[BEV])
|
|
|
|
IF IS_ENTITY_DEAD(sRCLauncherDataLocal.pedID[BEV])
|
|
SET_MISSION_FAILED("P3BEVDEAD") // Bev died.
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: FAIL HURT BEV")
|
|
RETURN TRUE
|
|
ELIF (GET_PED_MAX_HEALTH(sRCLauncherDataLocal.pedID[BEV]) > GET_ENTITY_HEALTH(sRCLauncherDataLocal.pedID[BEV]))
|
|
SET_MISSION_FAILED("P3BEVHURT") // Bev was injured
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: FAIL HURT BEV")
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Fails and cleans up the mission correctly
|
|
PROC STAGE_FAIL()
|
|
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
IF ARE_STRINGS_EQUAL(sFailReason,"DEFAULT")
|
|
Random_Character_Failed()
|
|
ELSE
|
|
Random_Character_Failed_With_Reason(sFailReason, TRUE)
|
|
ENDIF
|
|
m_eSubState = SS_UPDATE
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
|
|
Script_Cleanup()
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// MISSION FUNCTIONS & PROCEDURES
|
|
// ===========================================================================================================
|
|
|
|
/// PURPOSE:
|
|
/// Do we need to resolve the mission start vehicle to a location that is further away?
|
|
/// RETURNS:
|
|
/// TRUE if the vehicle is not a concern (small enough or doesn't exist)
|
|
FUNC BOOL IS_RC_PLAYER_VEHICLE_UNDER_SIZE_LIMIT()
|
|
VECTOR vecVehicleSizes[2], vecMaxVehicleSize
|
|
VEHICLE_INDEX vehTmp = GET_PLAYERS_LAST_VEHICLE()
|
|
IF DOES_ENTITY_EXIST(vehTmp)
|
|
GET_MODEL_DIMENSIONS(GET_ENTITY_MODEL(vehTmp), vecVehicleSizes[0], vecVehicleSizes[1])
|
|
vecMaxVehicleSize = GET_DEFAULT_ALLOWABLE_VEHICLE_SIZE_VECTOR()
|
|
IF vecVehicleSizes[1].x - vecVehicleSizes[0].x > vecMaxVehicleSize.x
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF vecVehicleSizes[1].y - vecVehicleSizes[0].y > vecMaxVehicleSize.y
|
|
RETURN FALSE
|
|
ENDIF
|
|
IF vecVehicleSizes[1].z - vecVehicleSizes[0].z > vecMaxVehicleSize.z
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Create leadout as soon as cutscene has finished, or on checkpoint
|
|
PROC CREATE_LEADOUT()
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[BEV]) AND DOES_ENTITY_EXIST(dumpsterGreen)
|
|
|
|
iSyncSceneLeadOut = CREATE_SYNCHRONIZED_SCENE(vecSyncSceneCoords, vecSyncSceneRotation)
|
|
|
|
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[BEV], iSyncSceneLeadOut, leadInOutAnimDict, "leadout_pap_3_rcm_beverly", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, RBF_EXPLOSION)
|
|
|
|
// Dumpster
|
|
IF DOES_ENTITY_EXIST(dumpsterGreen)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterGreen, iSyncSceneLeadOut, "leadout_pap_3_rcm_dumpster", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
ENDIF
|
|
|
|
// Dumpster lid (left)
|
|
IF DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDL])
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterLids[OBJ_LIDL], iSyncSceneLeadOut, "leadout_pap_3_rcm_lid_l", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS))
|
|
ENDIF
|
|
|
|
// Dumpster lid (right)
|
|
IF DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDR])
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterLids[OBJ_LIDR], iSyncSceneLeadOut, "leadout_pap_3_rcm_lid_r", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS))
|
|
ENDIF
|
|
|
|
// Skip a few frames so lids don't pop
|
|
SET_SYNCHRONIZED_SCENE_PHASE(iSyncSceneLeadOut, 0.02)
|
|
|
|
ENDIF
|
|
|
|
bLeadOutConv = FALSE
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Triggers the visual and sound effect for taking a picture
|
|
PROC BevTakePhoto()
|
|
|
|
IF DOES_ENTITY_EXIST(sRCLauncherDataLocal.objID[OBJ_CAM])
|
|
AND NOT bFlashDone
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: Camera exists")
|
|
START_PARTICLE_FX_NON_LOOPED_AT_COORD("scr_rcpap1_camera", GET_PED_BONE_COORDS(sRCLauncherDataLocal.pedID[BEV], BONETAG_PH_R_HAND, vCameraFlashFX_Offset), GET_ENTITY_ROTATION(sRCLauncherDataLocal.objID[OBJ_CAM]))
|
|
|
|
IF NOT HAS_SOUND_FINISHED(iSoundId_CameraFlash)
|
|
STOP_SOUND(iSoundId_CameraFlash)
|
|
ENDIF
|
|
|
|
IF REQUEST_SCRIPT_AUDIO_BANK(sAudioBank_CameraFlashSoundFX)
|
|
PLAY_SOUND_FROM_COORD(iSoundId_CameraFlash, "CAMERA", GET_PED_BONE_COORDS(sRCLauncherDataLocal.pedID[BEV], BONETAG_PH_R_HAND, vCameraFlashFX_Offset), sCamSoundSetName)
|
|
bFlashDone = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Resets certain locations etc
|
|
PROC RestartCheckpoint()
|
|
RC_START_Z_SKIP()
|
|
CREATE_LEADOUT()
|
|
SET_STAGE(MS_LEADOUT)
|
|
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-258.8661, 292.7882, 90.5764>>, 153.0393)
|
|
RC_END_Z_SKIP()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Sets up important initial parts of mission
|
|
PROC INIT()
|
|
|
|
bLeadInConv = FALSE
|
|
|
|
// Get the PLAYER relationship group
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
relGroupPlayer = GET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(sRCLauncherDataLocal.pedID[BEV], relGroupPlayer)
|
|
SET_PED_CONFIG_FLAG(sRCLauncherDataLocal.pedID[BEV], PCF_KeepRelationshipGroupAfterCleanUp, TRUE)
|
|
SET_PED_KEEP_TASK(sRCLauncherDataLocal.pedID[BEV], TRUE)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sRCLauncherDataLocal.pedID[BEV], TRUE)
|
|
ENDIF
|
|
|
|
// Grab the entities
|
|
IF NOT DOES_ENTITY_EXIST(dumpsterBlue)
|
|
dumpsterBlue = GET_CLOSEST_OBJECT_OF_TYPE(<< -261.19, 292.22, 90.79 >>, 10.0, modDumpBlue)
|
|
SET_CAN_CLIMB_ON_ENTITY(dumpsterBlue, FALSE)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(dumpsterGreen)
|
|
ASSIGN_OBJECT_INDEX(dumpsterGreen, sRCLauncherDataLocal.objID[OBJ_DUMPSTER])
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDL])
|
|
ASSIGN_OBJECT_INDEX(dumpsterLids[OBJ_LIDL], sRCLauncherDataLocal.objID[1])
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDR])
|
|
ASSIGN_OBJECT_INDEX(dumpsterLids[OBJ_LIDR], sRCLauncherDataLocal.objID[2])
|
|
ENDIF
|
|
|
|
ADD_PED_FOR_DIALOGUE(conversation, ENUM_TO_INT(CHAR_FRANKLIN), PLAYER_PED_ID(), "FRANKLIN")
|
|
ADD_PED_FOR_DIALOGUE(conversation, 3, sRCLauncherDataLocal.pedID[BEV], "BEVERLY")
|
|
|
|
// Request text
|
|
REQUEST_ADDITIONAL_TEXT("PAP3", MISSION_TEXT_SLOT)
|
|
|
|
// Animation dictionary
|
|
REQUEST_ANIM_DICT(leadInOutAnimDict)
|
|
|
|
// Particles
|
|
REQUEST_PTFX_ASSET()
|
|
|
|
WHILE NOT HAS_ANIM_DICT_LOADED(leadInOutAnimDict)
|
|
OR NOT HAS_PTFX_ASSET_LOADED()
|
|
RC_PLAYER_TRIGGER_SCENE_LOCK_IN()
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
iSoundId_CameraFlash = GET_SOUND_ID()
|
|
|
|
IF IS_REPLAY_IN_PROGRESS()
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: Replay in progress")
|
|
|
|
SWITCH GET_REPLAY_MID_MISSION_STAGE()
|
|
|
|
CASE CP_AFTER_MOCAP
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: CP_AFTER_MOCAP replay")
|
|
RestartCheckpoint()
|
|
BREAK
|
|
|
|
DEFAULT
|
|
SCRIPT_ASSERT("Replay in progress: Unknown checkpoint selected")
|
|
BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE(sSceneHandle_Franklin, PLAYER_PED_ID())
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: STAGE_END_CUTSCENE_MOCAP - SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE player")
|
|
ENDIF
|
|
ENDIF
|
|
SET_STAGE(MS_LEAD_IN)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Handles head tracking between Franklin and Beverly
|
|
PROC UPDATE_HEAD_TRACKING()
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
AND IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[BEV])
|
|
SET_IK_TARGET(sRCLauncherDataLocal.pedID[BEV], IK_PART_HEAD, PLAYER_PED_ID(), ENUM_TO_INT(BONETAG_HEAD), <<0,0,0>>, ITF_DEFAULT)
|
|
SET_IK_TARGET(PLAYER_PED_ID(), IK_PART_HEAD, sRCLauncherDataLocal.pedID[BEV], ENUM_TO_INT(BONETAG_HEAD), <<0,0,0>>, ITF_DEFAULT)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Do focus push in first person only
|
|
PROC DO_FOCUS_PUSH()
|
|
IF IS_PLAYER_IN_FIRST_PERSON_CAMERA()
|
|
SET_GAMEPLAY_ENTITY_HINT(sRCLauncherDataLocal.pedID[BEV], (<<0, 0, 0>>), TRUE, -1, 1500, DEFAULT_INTERP_OUT_TIME)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Plays the lead in then triggers the mocap
|
|
PROC LEAD_IN()
|
|
|
|
RC_PLAYER_TRIGGER_SCENE_LOCK_IN()
|
|
|
|
UPDATE_HEAD_TRACKING()
|
|
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: Start - SETUP LEAD_IN")
|
|
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE("PAPARAZZO_03_SCENE")
|
|
START_AUDIO_SCENE("PAPARAZZO_03_SCENE")
|
|
ENDIF
|
|
|
|
bFlashDone = FALSE
|
|
RC_REQUEST_CUTSCENE("PAP_3_RCM")
|
|
|
|
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND DOES_ENTITY_EXIST(dumpsterGreen)
|
|
|
|
// Create synchronised scene
|
|
iSyncSceneLeadIn = CREATE_SYNCHRONIZED_SCENE(GET_ENTITY_COORDS(dumpsterGreen), GET_ENTITY_ROTATION(dumpsterGreen))
|
|
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[BEV], iSyncSceneLeadIn, leadInOutAnimDict, "leadin_pap_3_rcm_beverly", NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
|
|
|
|
// Dumpster
|
|
IF DOES_ENTITY_EXIST(dumpsterGreen)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterGreen, iSyncSceneLeadIn, "leadin_pap_3_rcm_dumpster", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
ENDIF
|
|
|
|
// Dumpster lid (left)
|
|
IF DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDL])
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterLids[OBJ_LIDL], iSyncSceneLeadIn, "leadin_pap_3_rcm_lid_l", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
ENDIF
|
|
|
|
// Dumpster lid (right)
|
|
IF DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDR])
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterLids[OBJ_LIDR], iSyncSceneLeadIn, "leadin_pap_3_rcm_lid_r", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: Done lead-in animation")
|
|
RC_END_CUTSCENE_MODE()
|
|
m_eSubState = SS_UPDATE
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: End - SETUP LEAD_IN")
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
|
|
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV]) AND DOES_ENTITY_EXIST(dumpsterGreen)
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iSyncSceneLeadIn)
|
|
IF (GET_SYNCHRONIZED_SCENE_PHASE(iSyncSceneLeadIn) > 0.99)
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(iSyncSceneLeadInIdle)
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Setting up the idle synch scene")
|
|
iSyncSceneLeadInIdle = CREATE_SYNCHRONIZED_SCENE(GET_ENTITY_COORDS(dumpsterGreen), GET_ENTITY_ROTATION(dumpsterGreen))
|
|
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[BEV], iSyncSceneLeadInIdle, leadInOutAnimDict, "idle_01_pap_3_rcm_beverly", NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(sRCLauncherDataLocal.pedID[BEV])
|
|
|
|
// Dumpster
|
|
IF DOES_ENTITY_EXIST(dumpsterGreen)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterGreen, iSyncSceneLeadInIdle, "idle_01_pap_3_rcm_dumpster", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(dumpsterGreen)
|
|
ENDIF
|
|
|
|
// Dumpster lid (left)
|
|
IF DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDL])
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterLids[OBJ_LIDL], iSyncSceneLeadInIdle, "idle_01_pap_3_rcm_lid_l", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(dumpsterLids[OBJ_LIDL])
|
|
ENDIF
|
|
|
|
// Dumpster lid (right)
|
|
IF DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDR])
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterLids[OBJ_LIDR], iSyncSceneLeadInIdle, "idle_01_pap_3_rcm_lid_r", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(dumpsterLids[OBJ_LIDR])
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (GET_SYNCHRONIZED_SCENE_PHASE(iSyncSceneLeadIn) > 0.3)
|
|
IF NOT bLeadInConv
|
|
bLeadInConv = CREATE_CONVERSATION(conversation, "PAP3AU", "PAP3_RCM_LI", CONV_PRIORITY_HIGH)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF(GET_SYNCHRONIZED_SCENE_PHASE(iSyncSceneLeadIn) > 0.3)
|
|
BevTakePhoto()
|
|
ENDIF
|
|
|
|
IF (GET_SYNCHRONIZED_SCENE_PHASE(iSyncSceneLeadIn) > 0.05)
|
|
DO_FOCUS_PUSH()
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: Beverly not playing leadin anim anymore - skip to cutscene for safety")
|
|
DO_FOCUS_PUSH()
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
|
|
IF bLeadInConv
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: Beverly not conversing anymore - skip to cutscene")
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: CLEANUP LEAD_IN")
|
|
DO_FOCUS_PUSH()
|
|
SET_STAGE(MS_INTRO)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Plays the intro mocap and then passes the mission
|
|
PROC INTRO()
|
|
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: Init MS_INTRO")
|
|
|
|
DO_FOCUS_PUSH()
|
|
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE(sSceneHandle_Franklin, PLAYER_PED_ID())
|
|
CPRINTLN(DEBUG_MISSION, "STAGE_END_CUTSCENE_MOCAP - SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED_SAFE player")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF RC_IS_CUTSCENE_OK_TO_START()
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: MS_INTRO cutscene ok to start")
|
|
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[BEV])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sRCLauncherDataLocal.pedID[BEV], sSceneHandleBev, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), sSceneHandle_Franklin, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDL])
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: lidl exists")
|
|
REGISTER_ENTITY_FOR_CUTSCENE(dumpsterLids[OBJ_LIDL], dumpLidLSceneHandle, CU_ANIMATE_EXISTING_SCRIPT_ENTITY, modDumpL)
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: lidl doesn't exist")
|
|
REGISTER_ENTITY_FOR_CUTSCENE(dumpsterLids[OBJ_LIDL], dumpLidLSceneHandle, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, modDumpL)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDR])
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: lidr exists")
|
|
REGISTER_ENTITY_FOR_CUTSCENE(dumpsterLids[OBJ_LIDR], dumpLidRSceneHandle, CU_ANIMATE_EXISTING_SCRIPT_ENTITY, modDumpR)
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: lidr doesn't exist")
|
|
REGISTER_ENTITY_FOR_CUTSCENE(dumpsterLids[OBJ_LIDR], dumpLidRSceneHandle, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, modDumpR)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(dumpsterBlue)
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: dumpsterBlue exists")
|
|
REGISTER_ENTITY_FOR_CUTSCENE(dumpsterBlue, dumpBlueSceneHandle, CU_ANIMATE_EXISTING_SCRIPT_ENTITY, modDumpBlue)
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: dumpsterBlue doesn't exist")
|
|
REGISTER_ENTITY_FOR_CUTSCENE(dumpsterBlue, dumpBlueSceneHandle, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, modDumpBlue)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(dumpsterGreen)
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: dumpsterGreen exists")
|
|
REGISTER_ENTITY_FOR_CUTSCENE(dumpsterGreen, dumpGreenSceneHandle, CU_ANIMATE_EXISTING_SCRIPT_ENTITY, modDumpGreen)
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: dumpsterBlue doesn't exist")
|
|
REGISTER_ENTITY_FOR_CUTSCENE(dumpsterGreen, dumpGreenSceneHandle, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, modDumpGreen)
|
|
ENDIF
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(5.0, 0.0, REPLAY_IMPORTANCE_LOWEST)
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW)
|
|
|
|
// Cleanup launcher to remove lead-in blip
|
|
RC_CLEANUP_LAUNCHER()
|
|
|
|
// Start mocap scene
|
|
START_CUTSCENE()
|
|
WAIT(0)
|
|
|
|
// B*1988959 - handle unusually large vehicles
|
|
IF IS_RC_PLAYER_VEHICLE_UNDER_SIZE_LIMIT()
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-262.08163,292.330,90.000>>, <<-254.652,292.335,93.500>>, 5.0, <<-257.08, 285.27, 90.43>>, 12.52)
|
|
ELSE
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<< -254.8715, 316.4631, 88.6055 >>, << -255.2926, 270.6087, 103.2327 >>, 30.0, <<-239.7607, 267.4757, 91.0999>>, 86.5)
|
|
ENDIF
|
|
RC_START_CUTSCENE_MODE(<< -259.3334, 291.8268, 90.5229 >>)
|
|
|
|
SAFE_DELETE_OBJECT(sRCLauncherDataLocal.objID[OBJ_CAM])
|
|
m_eSubState = SS_UPDATE// Monitor cutscene
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
|
|
IF IS_PLAYER_IN_FIRST_PERSON_CAMERA()
|
|
IF IS_GAMEPLAY_HINT_ACTIVE()
|
|
STOP_GAMEPLAY_HINT(TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandleBev)
|
|
iSyncSceneLeadOut = CREATE_SYNCHRONIZED_SCENE(vecSyncSceneCoords, vecSyncSceneRotation)
|
|
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[BEV], iSyncSceneLeadOut, leadInOutAnimDict, "leadout_pap_3_rcm_beverly", INSTANT_BLEND_IN, NORMAL_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, RBF_EXPLOSION)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(sRCLauncherDataLocal.pedID[BEV])
|
|
CPRINTLN(DEBUG_MISSION, "Set exit state on beverley")
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sSceneHandle_Franklin)
|
|
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-258.8661, 292.7882, 90.5764>>)
|
|
SET_ENTITY_HEADING(PLAYER_PED_ID(), 153.0417)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(dumpsterGreen)
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(dumpGreenSceneHandle, modDumpGreen))
|
|
dumpsterGreen = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(dumpGreenSceneHandle, modDumpGreen))
|
|
ENDIF
|
|
ELIF IS_SYNCHRONIZED_SCENE_RUNNING(iSyncSceneLeadOut)
|
|
AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(dumpGreenSceneHandle)
|
|
SET_ENTITY_COORDS(dumpsterGreen, vecSyncSceneCoords, FALSE)
|
|
SET_ENTITY_ROTATION(dumpsterGreen, vecSyncSceneRotation, EULER_YXZ, FALSE)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterGreen, iSyncSceneLeadOut, "leadout_pap_3_rcm_dumpster", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT)
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(dumpsterGreen)
|
|
CPRINTLN(DEBUG_MISSION, "Set exit state on dumpsterGreen")
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDL])
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(dumpLidLSceneHandle))
|
|
dumpsterLids[OBJ_LIDL] = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(dumpLidLSceneHandle, modDumpL))
|
|
ENDIF
|
|
ELIF IS_SYNCHRONIZED_SCENE_RUNNING(iSyncSceneLeadOut)
|
|
AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(dumpLidLSceneHandle)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterLids[OBJ_LIDL], iSyncSceneLeadOut, "leadout_pap_3_rcm_lid_l", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS))
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(dumpsterLids[OBJ_LIDL])
|
|
CPRINTLN(DEBUG_MISSION, "Set exit state on dumpLidLSceneHandle")
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(dumpsterLids[OBJ_LIDR])
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(dumpLidRSceneHandle))
|
|
dumpsterLids[OBJ_LIDR] = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(dumpLidRSceneHandle, modDumpR))
|
|
ENDIF
|
|
ELIF IS_SYNCHRONIZED_SCENE_RUNNING(iSyncSceneLeadOut)
|
|
AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(dumpLidRSceneHandle)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(dumpsterLids[OBJ_LIDR], iSyncSceneLeadOut, "leadout_pap_3_rcm_lid_r", leadInOutAnimDict, INSTANT_BLEND_IN, NORMAL_BLEND_OUT, ENUM_TO_INT(SYNCED_SCENE_USE_PHYSICS))
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(dumpsterLids[OBJ_LIDR])
|
|
CPRINTLN(DEBUG_MISSION, "Set exit state on dumpLidRSceneHandle")
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(dumpsterBlue)
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(dumpBlueSceneHandle))
|
|
dumpsterBlue = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(dumpBlueSceneHandle, modDumpBlue))
|
|
ENDIF
|
|
ELIF IS_SYNCHRONIZED_SCENE_RUNNING(iSyncSceneLeadOut)
|
|
AND CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(dumpBlueSceneHandle)
|
|
SET_ENTITY_COORDS(dumpsterBlue, <<-261.113159,294.195557,90.686119>>, FALSE)
|
|
SET_ENTITY_ROTATION(dumpsterBlue, <<-0.604164,-2.332095,89.8831>>, EULER_YXZ, FALSE)
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(dumpsterBlue)
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
REPLAY_STOP_EVENT()
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 5.0, REPLAY_IMPORTANCE_LOWEST)
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
DISPLAY_RADAR(TRUE)
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: Cutscene finished")
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Need to create leadout RIGHT NOW - previous flow allowed a two frame gap
|
|
IF m_eSubState = SS_CLEANUP
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: Cleaning up MS_INTRO")
|
|
RC_END_CUTSCENE_MODE()
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
|
|
SET_STAGE(MS_LEADOUT)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// plays lead out
|
|
PROC LEADOUT()
|
|
|
|
UPDATE_HEAD_TRACKING()
|
|
|
|
IF NOT HAS_PLAYER_THREATENED_PED(sRCLauncherDataLocal.pedID[BEV])
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
CPRINTLN(DEBUG_MISSION, "Paparazzo 3: LEADOUT - setup")
|
|
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[BEV])
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sRCLauncherDataLocal.pedID[BEV], TRUE)
|
|
ENDIF
|
|
m_eSubState = SS_UPDATE
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
IF NOT bLeadOutConv
|
|
bLeadOutConv = CREATE_CONVERSATION(conversation, "PAP3AU", "PAP3_RCM_LO", CONV_PRIORITY_HIGH)
|
|
ELSE
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iSyncSceneLeadOut)
|
|
IF(GET_SYNCHRONIZED_SCENE_PHASE(iSyncSceneLeadOut) >= 1.0)
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
ELSE
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
CPRINTLN(DEBUG_MISSION, "LEADOUT - cleanup")
|
|
Script_Passed()
|
|
BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
missionStage = MS_FAIL
|
|
m_eSubState = SS_SETUP
|
|
sFailReason = "P3BEVSCARED"
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
/// PURPOSE:
|
|
/// Check for Forced Pass or Fail
|
|
PROC DEBUG_Check_Debug_Keys()
|
|
|
|
// check for P skip- restart intro
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P))
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
RC_START_Z_SKIP()
|
|
SAFE_DELETE_PED(sRCLauncherDataLocal.pedID[BEV]) // Delete Beverly
|
|
SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[BEV]) // Delete Initial Scene car
|
|
SAFE_DELETE_OBJECT(sRCLauncherDataLocal.objID[OBJ_CAM])
|
|
eInitialSceneStage = IS_REQUEST_SCENE
|
|
WHILE NOT SetupScene_PAPARAZZO_3(sRCLauncherDataLocal)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
SET_STAGE(MS_INIT)
|
|
RC_END_Z_SKIP()
|
|
ENDIF
|
|
|
|
// Check for Pass (j skip passes as mission is just a cut-scene)
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)) OR (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J))
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
Script_Passed()
|
|
ENDIF
|
|
|
|
// Check for Fail
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
Random_Character_Failed()
|
|
Script_Cleanup()
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
// ===========================================================================================================
|
|
// Script Loop
|
|
// ===========================================================================================================
|
|
|
|
SCRIPT(g_structRCScriptArgs sRCLauncherDataIn)
|
|
|
|
sRCLauncherDataLocal = sRCLauncherDataIn
|
|
RC_TakeEntityOwnership(sRCLauncherDataLocal)
|
|
|
|
SET_MISSION_FLAG(TRUE)
|
|
|
|
// 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()
|
|
ENDIF
|
|
|
|
IF Is_Replay_In_Progress() // Set up the initial scene for replays
|
|
eInitialSceneStage = IS_REQUEST_SCENE
|
|
g_bSceneAutoTrigger = TRUE
|
|
WHILE NOT SetupScene_PAPARAZZO_3(sRCLauncherDataLocal)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
VEHICLE_INDEX vTmp
|
|
CREATE_VEHICLE_FOR_REPLAY(vTmp, <<-257.08, 285.27, 90.43>>, 12.52, FALSE, FALSE, FALSE, FALSE, FALSE)
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
|
|
g_bSceneAutoTrigger = FALSE
|
|
ENDIF
|
|
|
|
// Loop within here until the mission passes or fails
|
|
WHILE(TRUE)
|
|
WAIT(0)
|
|
|
|
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_PTP")
|
|
UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene)
|
|
IF missionStage = MS_FAIL
|
|
STAGE_FAIL()
|
|
ELSE
|
|
IF NOT FAIL_CHECKS() //if not failed mission
|
|
SWITCH missionStage
|
|
CASE MS_INIT
|
|
INIT()
|
|
BREAK
|
|
|
|
CASE MS_LEAD_IN
|
|
LEAD_IN()
|
|
BREAK
|
|
|
|
CASE MS_INTRO
|
|
INTRO()
|
|
BREAK
|
|
|
|
CASE MS_LEADOUT
|
|
LEADOUT()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Check debug keys
|
|
#IF IS_DEBUG_BUILD
|
|
DEBUG_Check_Debug_Keys()
|
|
#ENDIF
|
|
ENDWHILE
|
|
// Script should never reach here. Always terminate with cleanup function.
|
|
ENDSCRIPT
|