762 lines
31 KiB
Python
Executable File
762 lines
31 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 "cutscene_public.sch"
|
|
USING "commands_cutscene.sch"
|
|
USING "commands_entity.sch"
|
|
USING "commands_script.sch"
|
|
USING "script_player.sch"
|
|
USING "randomChar_public.sch"
|
|
USING "RC_helper_functions.sch"
|
|
USING "initial_scenes_Josh.sch"
|
|
USING "commands_recording.sch"
|
|
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : Josh1.sc
|
|
// AUTHOR : David Roberts/Ian Gander
|
|
// DESCRIPTION : Trevor meets Josh outside his house
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
g_structRCScriptArgs sRCLauncherDataLocal
|
|
|
|
ENUM eRC_MainState
|
|
RC_LEADIN = 0,
|
|
RC_MEET_JOSH,
|
|
RC_LEADOUT
|
|
ENDENUM
|
|
|
|
ENUM eRC_SubState
|
|
SS_SETUP = 0,
|
|
SS_UPDATE,
|
|
SS_CLEANUP
|
|
ENDENUM
|
|
|
|
CONST_INT HELP_TIMER 8000
|
|
CONST_INT JOSH 0
|
|
|
|
// Mission state
|
|
eRC_MainState m_eState = RC_LEADIN
|
|
eRC_SubState m_eSubState = SS_SETUP
|
|
|
|
SEQUENCE_INDEX seq
|
|
OBJECT_INDEX oLeftGate
|
|
|
|
//OBJECT_INDEX oiPhone
|
|
|
|
INT iLeadInSynchSceneID
|
|
INT iLeadOutSynchSceneID
|
|
|
|
|
|
VECTOR vPos_SynchScene = <<-1106.999, 288.96, 63.40>>
|
|
VECTOR vHeading_SynchScene = <<0, 0, 12.060>>
|
|
|
|
BOOL bLeadInPlayed = FALSE
|
|
BOOL bLeadInConvo = FALSE
|
|
|
|
BOOL bSkipped = FALSE
|
|
INT iSkipTimer
|
|
|
|
BOOL bLeadOutPlayed = FALSE
|
|
BOOL bLeadOutConvo = FALSE
|
|
BOOL bLeadOutCancelled = FALSE
|
|
|
|
//FLOAT fHintFov = 25.0
|
|
//FLOAT fHintFollow = 0.35
|
|
//FLOAT fHintPitchOrbit = 0.000
|
|
//FLOAT fHintSide = -0.01
|
|
//FLOAT fHintVert = 0.050
|
|
|
|
structPedsForConversation pedsForConversation
|
|
REL_GROUP_HASH RelGroupBuddy
|
|
|
|
|
|
// ===========================================================================================================
|
|
// Debug prints
|
|
// ===========================================================================================================
|
|
|
|
/// PURPOSE: Print a string to the console
|
|
PROC DEBUG_PRINTSTRING(STRING s)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_MISSION, s)
|
|
#ENDIF
|
|
|
|
// Stop release compile error
|
|
s = s
|
|
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// Termination
|
|
// ===========================================================================================================
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Cleanup
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
PROC Script_Cleanup()
|
|
|
|
// Ensure launcher is terminated
|
|
RC_CLEANUP_LAUNCHER()
|
|
|
|
// If the mission was triggered then additional mission cleanup will be required.
|
|
IF (Random_Character_Cleanup_If_Triggered())
|
|
DEBUG_PRINTSTRING("...Random Character Script was triggered so additional cleanup required")
|
|
ENDIF
|
|
|
|
SAFE_RELEASE_PED(sRCLauncherDataLocal.pedID[JOSH], TRUE, TRUE)
|
|
|
|
//Cleanup the scene created by the launcher
|
|
RC_CleanupSceneEntities(sRCLauncherDataLocal,TRUE)
|
|
|
|
// Reenable the paths and navmesh we disabled in the initial scene
|
|
SET_PED_PATHS_IN_AREA(<<-1112.67, 287.38, 62.85>>, <<-1096.41, 297.50, 65.59>>, TRUE)
|
|
DISABLE_NAVMESH_IN_AREA(<<-1112.67, 287.38, 62.85>>, <<-1096.41, 297.50, 65.59>>, FALSE)
|
|
|
|
// NEW_LOAD_SCENE_STOP()
|
|
DESTROY_ALL_CAMS()
|
|
|
|
TASK_CLEAR_LOOK_AT(PLAYER_PED_ID())
|
|
|
|
TERMINATE_THIS_THREAD()
|
|
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Pass
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
PROC Script_Passed()
|
|
|
|
//For Sale sign help now displayed by the RC controller to ensure poll the
|
|
//flow queue in a safe way. See Do_Josh1_For_Sale_Signs_Help() - BenR
|
|
|
|
// Add contact and register text message
|
|
ADD_CONTACT_TO_PHONEBOOK(CHAR_JOSH, TREVOR_BOOK)
|
|
WHILE NOT REGISTER_TEXT_MESSAGE_FROM_CHARACTER_TO_PLAYER(TEXT_JOSH_1, CT_END_OF_MISSION, BIT_TREVOR, CHAR_JOSH, CC_END_OF_MISSION_QUEUE_TIME, CC_END_OF_MISSION_QUEUE_TIME, VID_RC_JOSH_HOUSE, DEFAULT, DEFAULT, COMM_BIT_TXTMSG_LOCKED|COMM_BIT_TXTMSG_NOT_CRITICAL)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
// Passed!
|
|
Random_Character_Passed()
|
|
Script_Cleanup()
|
|
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// DEBUG FUNCTIONS
|
|
// ===========================================================================================================
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
// PURPOSE: Check for Forced Pass or Fail
|
|
PROC DEBUG_Check_Debug_Keys()
|
|
|
|
// Check for Pass
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
|
|
IF IS_CUTSCENE_ACTIVE()
|
|
STOP_CUTSCENE()
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE)
|
|
|
|
DISPLAY_RADAR(TRUE)
|
|
DISPLAY_HUD(TRUE)
|
|
CLEAR_HELP()
|
|
|
|
SET_WIDESCREEN_BORDERS(FALSE, 0)
|
|
ENDIF
|
|
CLEAR_PRINTS()
|
|
Script_Passed()
|
|
ENDIF
|
|
|
|
// Check for Fail
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
|
|
CLEAR_HELP()
|
|
CLEAR_PRINTS()
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
Random_Character_Failed()
|
|
Script_Cleanup()
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
// ===========================================================================================================
|
|
// MISSION FUNCTIONS & PROCEDURES
|
|
// ===========================================================================================================
|
|
|
|
/// PURPOSE: Sets the new mission state and initialises the substate.
|
|
PROC SetState(eRC_MainState in)
|
|
|
|
// Setup new mission state
|
|
m_eState = in
|
|
m_eSubState = SS_SETUP
|
|
ENDPROC
|
|
|
|
PROC STATE_LeadIn()
|
|
|
|
// Disable controls and exit current vehicle
|
|
RC_PLAYER_TRIGGER_SCENE_LOCK_IN()
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
DEBUG_PRINTSTRING("Trying to set Josh component variation")
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOSH])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Josh", sRCLauncherDataLocal.pedID[JOSH])
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
AND IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1115.070679,279.658112,62.421844>>, <<-1092.428467,284.139832,67.316521>>, 15.75)
|
|
DEBUG_PRINTSTRING("Doing setup for leadin")
|
|
ADD_PED_FOR_DIALOGUE(pedsForConversation, 2, PLAYER_PED_ID(), "Trevor")
|
|
ADD_PED_FOR_DIALOGUE(pedsForConversation, 5, sRCLauncherDataLocal.pedID[JOSH], "Josh")
|
|
|
|
REQUEST_ANIM_DICT("rcmjosh1leadinout")
|
|
|
|
IF HAS_ANIM_DICT_LOADED("rcmjosh1leadinout") // Loops here until anims are loaded
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1107.01, 289.38, 64.76>>, 5.0, PROP_LRGGATE_01c_L)
|
|
SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(PROP_LRGGATE_01c_L, <<-1107.01, 289.38, 64.76>>, FALSE, 0.0)
|
|
ENDIF
|
|
oLeftGate = GET_CLOSEST_OBJECT_OF_TYPE(<<-1107.01, 289.38, 64.76>>, 5.0, PROP_LRGGATE_01c_L)
|
|
//RC_REQUEST_CUTSCENE("josh_1_int", TRUE)
|
|
RC_PRE_REQUEST_CUTSCENE(TRUE)
|
|
REQUEST_CUTSCENE_WITH_PLAYBACK_LIST("JOSH_1_INT_CONCAT", CS_SECTION_2|CS_SECTION_3|CS_SECTION_4)
|
|
m_eSubState = SS_UPDATE
|
|
ENDIF
|
|
ELSE
|
|
DEBUG_PRINTSTRING("Skipping setup for leadin (wrong area)")
|
|
REQUEST_ANIM_DICT("rcmjosh1leadinout")
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1107.01, 289.38, 64.76>>, 5.0, PROP_LRGGATE_01c_L)
|
|
SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(PROP_LRGGATE_01c_L, <<-1107.01, 289.38, 64.76>>, FALSE, 0.0)
|
|
ENDIF
|
|
oLeftGate = GET_CLOSEST_OBJECT_OF_TYPE(<<-1107.01, 289.38, 64.76>>, 5.0, PROP_LRGGATE_01c_L)
|
|
m_eSubState = SS_UPDATE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE() // Don't do the leadin if we're on a repeat-play, just go into the cutscene
|
|
|
|
// IF NOT IS_GAMEPLAY_HINT_ACTIVE()
|
|
// AND IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOSH])
|
|
// SET_GAMEPLAY_ENTITY_HINT(sRCLauncherDataLocal.pedID[JOSH], <<-1.0,0,0>>, FALSE, 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)
|
|
// IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
// AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[JOSH])
|
|
// OPEN_SEQUENCE_TASK(seq)
|
|
// TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1104.6227, 289.0283, 63.2468>>, PEDMOVEBLENDRATIO_WALK)
|
|
// TASK_TURN_PED_TO_FACE_ENTITY(NULL, sRCLauncherDataLocal.pedID[JOSH])
|
|
// CLOSE_SEQUENCE_TASK(seq)
|
|
// TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seq)
|
|
// CLEAR_SEQUENCE_TASK(seq)
|
|
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
// ENDIF
|
|
// ELSE
|
|
// STOP_GAMEPLAY_HINT_BEING_CANCELLED_THIS_UPDATE(TRUE)
|
|
// ENDIF
|
|
IF NOT bLeadInPlayed
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1115.070679,279.658112,62.421844>>, <<-1092.428467,284.139832,67.316521>>, 15.75)
|
|
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[JOSH])
|
|
AND DOES_ENTITY_EXIST(oLeftGate)
|
|
iLeadInSynchSceneID = CREATE_SYNCHRONIZED_SCENE(vPos_SynchScene, vHeading_SynchScene)
|
|
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[JOSH], iLeadInSynchSceneID, "rcmjosh1leadinout", "leadin_josh", NORMAL_BLEND_IN, NORMAL_BLEND_OUT,
|
|
SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_ON_ABORT_STOP_SCENE|SYNCED_SCENE_ABORT_ON_WEAPON_DAMAGE)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(oLeftGate, iLeadInSynchSceneID, "leadin_gate", "rcmjosh1leadinout", NORMAL_BLEND_IN)
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(),sRCLauncherDataLocal.pedID[JOSH], -1)
|
|
TASK_LOOK_AT_ENTITY(sRCLauncherDataLocal.pedID[JOSH], PLAYER_PED_ID(), 4000, SLF_WHILE_NOT_IN_FOV|SLF_EXTEND_PITCH_LIMIT|SLF_EXTEND_YAW_LIMIT)
|
|
DEBUG_PRINTSTRING("Done Josh leadin anim")
|
|
bLeadInPlayed = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
AND NOT bLeadInPlayed
|
|
DEBUG_PRINTSTRING("Cannot play lead-in, re-requesting cutscene with new sections")
|
|
REMOVE_CUTSCENE()
|
|
REQUEST_CUTSCENE_WITH_PLAYBACK_LIST("JOSH_1_INT_CONCAT", CS_SECTION_1|CS_SECTION_3|CS_SECTION_4)
|
|
ENDIF
|
|
DEBUG_PRINTSTRING("Replay in progress, skipping leadin")
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
ELSE
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iLeadInSynchSceneID)
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(iLeadInSynchSceneID) > 0.15
|
|
IF NOT bLeadInConvo
|
|
IF CREATE_CONVERSATION(pedsForConversation, "JOSH1AU", "JOSH1_LEADIN", CONV_PRIORITY_HIGH)
|
|
DEBUG_PRINTSTRING("Leadin convo done")
|
|
bLeadInConvo = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(iLeadInSynchSceneID) > 0.9
|
|
DEBUG_PRINTSTRING("Leadin anim done, launch cutscene")
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[JOSH]) <= 2.5
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
|
|
ENDIF
|
|
ELSE
|
|
DEBUG_PRINTSTRING("Leadin not playing, launch cutscene")
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
AND NOT bLeadInPlayed
|
|
DEBUG_PRINTSTRING("Cannot play lead-in, re-requesting cutscene with new sections")
|
|
REMOVE_CUTSCENE()
|
|
REQUEST_CUTSCENE_WITH_PLAYBACK_LIST("JOSH_1_INT_CONCAT", CS_SECTION_1|CS_SECTION_3|CS_SECTION_4)
|
|
ENDIF
|
|
DEBUG_PRINTSTRING("Replay in progress, skipping leadin")
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
m_eState = RC_MEET_JOSH
|
|
m_eSubState = SS_SETUP
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE: Triggers the mocap cutscene, then the scripted cutscene showing the For Sale sign example, and completes mission once finished
|
|
PROC STATE_MeetJosh()
|
|
|
|
IF CAN_REQUEST_ASSETS_FOR_CUTSCENE_ENTITY()
|
|
DEBUG_PRINTSTRING("Trying to set Josh component variation")
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOSH])
|
|
SET_CUTSCENE_PED_COMPONENT_VARIATION_FROM_PED("Josh", sRCLauncherDataLocal.pedID[JOSH])
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
|
|
IF RC_IS_CUTSCENE_OK_TO_START()
|
|
|
|
REQUEST_ANIM_DICT("rcmjosh1@impatient")
|
|
REQUEST_VEHICLE_RECORDING(500, "Josh1Driveaway")
|
|
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOSH])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sRCLauncherDataLocal.pedID[JOSH], "Josh", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Trevor", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
|
|
SET_ROADS_IN_ANGLED_AREA(<<-1140.850098,263.471375,63.357758>>, <<-1205.440308,412.157379,78.258896>>, 43.750000, FALSE, FALSE)
|
|
CLEAR_AREA_OF_VEHICLES(<<-1146.306030,295.983124,66.136116>>, 9.0)
|
|
CLEAR_AREA_OF_VEHICLES(<<-1143.244385,280.276215,65.418922>>, 12.0)
|
|
CLEAR_AREA_OF_VEHICLES(<<-1152.426025,313.615723,67.104294>> , 12.0)
|
|
CLEAR_AREA_OF_VEHICLES(<<-1165.965576,332.678589,68.809998>> , 12.0)
|
|
CLEAR_AREA_OF_VEHICLES(<<-1178.728760,346.457245,70.046745>>, 12.0)
|
|
CLEAR_ANGLED_AREA_OF_VEHICLES(<<-1140.850098,263.471375,63.357758>>, <<-1205.440308,412.157379,78.258896>>, 43.750000)
|
|
|
|
VEHICLE_INDEX veh
|
|
veh = GET_PLAYERS_LAST_VEHICLE()
|
|
VECTOR vMoveToLoc
|
|
FLOAT fHead
|
|
IF IS_VEHICLE_OK(veh)
|
|
IF IS_ENTITY_IN_ANGLED_AREA(veh, <<-1115.984375,285.592438,61.942406>>, <<-1097.599243,285.134613,66.346695>>, 33.000000)
|
|
vMoveToLoc = <<-1098.87, 280.88, 63.47>>
|
|
fHead = 85.98
|
|
ELSE
|
|
vMoveToLoc = << -1095.2307, 279.3389, 62.7919 >>
|
|
fHead = 84.67
|
|
ENDIF
|
|
ELSE
|
|
// Default coords/heading if the vehicle is fucked, just do whatever start cutscene mode does by default
|
|
vMoveToLoc = << -1095.2307, 279.3389, 62.7919 >>
|
|
fHead = 84.67
|
|
ENDIF
|
|
|
|
// Cleanup launcher which will remove lead-in blip
|
|
RC_CLEANUP_LAUNCHER()
|
|
|
|
REPLAY_RECORD_BACK_FOR_TIME(8.0, 0.0, REPLAY_IMPORTANCE_LOWEST)
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW)
|
|
|
|
// Start mocap scene
|
|
START_CUTSCENE()
|
|
WAIT(0)
|
|
STOP_GAMEPLAY_HINT()
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1107.01, 289.38, 64.76>>, 5.0, PROP_LRGGATE_01c_L)
|
|
DEBUG_PRINTSTRING("Locked left gate open?")
|
|
SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(PROP_LRGGATE_01c_L, <<-1107.01, 289.38, 64.76>>, TRUE, 90)
|
|
ENDIF
|
|
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA_WITH_SIZE_LIMIT(<<-1115.984375,285.592438,61.942406>>, <<-1097.599243,285.134613,66.346695>>, 33.0,
|
|
vMoveToLoc, fHead, <<3, 6, 3>>)
|
|
RC_START_CUTSCENE_MODE(<< -1104.93, 291.25, 64.30 >>, TRUE, DEFAULT, DEFAULT, DEFAULT, DEFAULT, DEFAULT, TRUE)
|
|
|
|
// Monitor cutscene
|
|
m_eSubState = SS_UPDATE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor")
|
|
REPLAY_STOP_EVENT()
|
|
REPLAY_RECORD_BACK_FOR_TIME(0.0, 8.0, REPLAY_IMPORTANCE_LOWEST)
|
|
DEBUG_PRINTSTRING("Done Trevor exit")
|
|
// Ideally I shouldn't need this - but the cutscene leaves Trevor inside the garden so I need to teleport him
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Josh")
|
|
DEBUG_PRINTSTRING("Exit state for Josh...")
|
|
IF NOT bLeadOutPlayed
|
|
DEBUG_PRINTSTRING("Played lead-out on Josh exit state")
|
|
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-1104.65, 289.02, 63.25>>, 16.6717)
|
|
|
|
// Reset camera behind player
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[JOSH])
|
|
AND DOES_ENTITY_EXIST(oLeftGate)
|
|
iLeadOutSynchSceneID = CREATE_SYNCHRONIZED_SCENE(vPos_SynchScene, vHeading_SynchScene)
|
|
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[JOSH], iLeadOutSynchSceneID, "rcmjosh1leadinout", "leadout_josh", INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
|
|
SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_ON_ABORT_STOP_SCENE|SYNCED_SCENE_ABORT_ON_WEAPON_DAMAGE, RBF_NONE, INSTANT_BLEND_IN, AIK_DISABLE_TORSO_REACT_IK)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(oLeftGate, iLeadOutSynchSceneID, "leadout_gate", "rcmjosh1leadinout", NORMAL_BLEND_IN)
|
|
DEBUG_PRINTSTRING("Done Josh leadout anim on Josh exit state")
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(oLeftGate)
|
|
FORCE_PED_MOTION_STATE(sRCLauncherDataLocal.pedID[JOSH], MS_ON_FOOT_IDLE, FALSE, FAUS_CUTSCENE_EXIT, TRUE)
|
|
//FORCE_PED_AI_AND_ANIMATION_UPDATE(sRCLauncherDataLocal.pedID[JOSH],)
|
|
bLeadOutPlayed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA(TRUE)
|
|
DEBUG_PRINTSTRING("Exit state for camera...")
|
|
IF NOT bLeadOutPlayed
|
|
DEBUG_PRINTSTRING("Played lead-out on camera exit state")
|
|
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-1104.65, 289.02, 63.25>>, 16.6717)
|
|
|
|
// Reset camera behind player
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[JOSH])
|
|
AND DOES_ENTITY_EXIST(oLeftGate)
|
|
iLeadOutSynchSceneID = CREATE_SYNCHRONIZED_SCENE(vPos_SynchScene, vHeading_SynchScene)
|
|
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[JOSH], iLeadOutSynchSceneID, "rcmjosh1leadinout", "leadout_josh", INSTANT_BLEND_IN, NORMAL_BLEND_OUT,
|
|
SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_ON_ABORT_STOP_SCENE|SYNCED_SCENE_ABORT_ON_WEAPON_DAMAGE, RBF_NONE, INSTANT_BLEND_IN, AIK_DISABLE_TORSO_REACT_IK)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(oLeftGate, iLeadOutSynchSceneID, "leadout_gate", "rcmjosh1leadinout", NORMAL_BLEND_IN)
|
|
DEBUG_PRINTSTRING("Done Josh leadout anim on cam exit state cutscene")
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(oLeftGate)
|
|
FORCE_PED_MOTION_STATE(sRCLauncherDataLocal.pedID[JOSH], MS_ON_FOOT_IDLE, FALSE, FAUS_CUTSCENE_EXIT, TRUE)
|
|
//FORCE_PED_AI_AND_ANIMATION_UPDATE(sRCLauncherDataLocal.pedID[JOSH],)
|
|
bLeadOutPlayed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// it doesn't let you go the exit state frame if you skip, so do that stuff here...
|
|
IF WAS_CUTSCENE_SKIPPED()
|
|
bSkipped = TRUE
|
|
SET_CUTSCENE_FADE_VALUES(FALSE, FALSE, TRUE, FALSE)
|
|
iSkipTimer = GET_GAME_TIMER()
|
|
//RC_START_Z_SKIP()
|
|
|
|
//SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-1104.8643, 286.5974, 63.1910>>, 16.6717)
|
|
|
|
// Reset camera behind player
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1107.01, 289.38, 64.76>>, 5.0, PROP_LRGGATE_01c_L)
|
|
REMOVE_MODEL_HIDE(<<-1107.01, 289.38, 64.76>>, 5.0, PROP_LRGGATE_01c_L)
|
|
SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(PROP_LRGGATE_01c_L, <<-1107.01, 289.38, 64.76>>, TRUE, 0)
|
|
ENDIF
|
|
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1101.62, 290.36, 64.76>>, 5.0, PROP_LRGGATE_01c_R)
|
|
REMOVE_MODEL_HIDE(<<-1101.62, 290.36, 64.76>>, 5.0, PROP_LRGGATE_01c_R)
|
|
SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(PROP_LRGGATE_01c_R, <<-1101.62, 290.36, 64.76>>, TRUE, 0)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF NOT IS_CUTSCENE_ACTIVE()
|
|
DEBUG_PRINTSTRING("cutscene not active...")
|
|
IF NOT bLeadOutPlayed
|
|
DEBUG_PRINTSTRING("Played lead-out on not cutscene active")
|
|
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<-1104.65, 289.02, 63.25>>, 16.6717)
|
|
|
|
// Reset camera behind player
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
|
|
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[JOSH])
|
|
AND DOES_ENTITY_EXIST(oLeftGate)
|
|
iLeadOutSynchSceneID = CREATE_SYNCHRONIZED_SCENE(vPos_SynchScene, vHeading_SynchScene)
|
|
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[JOSH], iLeadOutSynchSceneID, "rcmjosh1leadinout", "leadout_josh", NORMAL_BLEND_IN, NORMAL_BLEND_OUT,
|
|
SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_ON_ABORT_STOP_SCENE|SYNCED_SCENE_ABORT_ON_WEAPON_DAMAGE, RBF_NONE, INSTANT_BLEND_IN, AIK_DISABLE_TORSO_REACT_IK)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(oLeftGate, iLeadOutSynchSceneID, "leadout_gate", "rcmjosh1leadinout", NORMAL_BLEND_IN)
|
|
DEBUG_PRINTSTRING("Done Josh leadout anim on non active cutscene")
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(oLeftGate)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(sRCLauncherDataLocal.pedID[JOSH])
|
|
bLeadOutPlayed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
|
|
RC_END_CUTSCENE_MODE()
|
|
|
|
m_eState = RC_LEADOUT
|
|
m_eSubState = SS_SETUP
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
PROC STATE_LeadOut()
|
|
|
|
SWITCH m_eSubState
|
|
CASE SS_SETUP
|
|
|
|
DEBUG_PRINTSTRING("Doing setup for leadout")
|
|
|
|
//ADD_PED_FOR_DIALOGUE(pedsForConversation, 2, PLAYER_PED_ID(), "Trevor")
|
|
//ADD_PED_FOR_DIALOGUE(pedsForConversation, 3, sRCLauncherDataLocal.pedID[JOSH], "Josh")
|
|
|
|
REQUEST_ANIM_DICT("rcmjosh1leadinout")
|
|
REQUEST_MODEL(p_amb_phone_01)
|
|
|
|
IF HAS_ANIM_DICT_LOADED("rcmjosh1leadinout") // Loops here until anims are loaded
|
|
AND HAS_MODEL_LOADED(p_amb_phone_01)
|
|
IF NOT DOES_ENTITY_EXIST(oLeftGate)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1107.01, 289.38, 64.76>>, 5.0, PROP_LRGGATE_01c_L)
|
|
SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(PROP_LRGGATE_01c_L, <<-1107.01, 289.38, 64.76>>, FALSE, 0.0)
|
|
ENDIF
|
|
oLeftGate = GET_CLOSEST_OBJECT_OF_TYPE(<<-1107.01, 289.38, 64.76>>, 5.0, PROP_LRGGATE_01c_L)
|
|
ENDIF
|
|
m_eSubState = SS_UPDATE
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
IF bSkipped = TRUE
|
|
// If we skipped the cutscene, wait half a second so we don't see Josh and the gate pop and then end the Z skip
|
|
DEBUG_PRINTSTRING("Skip detected, waiting 500ms...")
|
|
IF (GET_GAME_TIMER() - iSkipTimer) >=500
|
|
RC_END_Z_SKIP()
|
|
bSkipped = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
IF NOT bLeadOutPlayed
|
|
IF IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[JOSH])
|
|
AND DOES_ENTITY_EXIST(oLeftGate)
|
|
|
|
// Play sync scene
|
|
iLeadOutSynchSceneID = CREATE_SYNCHRONIZED_SCENE(vPos_SynchScene, vHeading_SynchScene)
|
|
TASK_SYNCHRONIZED_SCENE(sRCLauncherDataLocal.pedID[JOSH], iLeadOutSynchSceneID, "rcmjosh1leadinout", "leadout_josh", NORMAL_BLEND_IN, SLOW_BLEND_OUT,
|
|
SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_ON_ABORT_STOP_SCENE|SYNCED_SCENE_ABORT_ON_WEAPON_DAMAGE|SYNCED_SCENE_TAG_SYNC_OUT, RBF_NONE, INSTANT_BLEND_IN, AIK_DISABLE_TORSO_REACT_IK)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(oLeftGate, iLeadOutSynchSceneID, "leadout_gate", "rcmjosh1leadinout", NORMAL_BLEND_IN)
|
|
FORCE_ENTITY_AI_AND_ANIMATION_UPDATE(oLeftGate)
|
|
FORCE_PED_AI_AND_ANIMATION_UPDATE(sRCLauncherDataLocal.pedID[JOSH], TRUE)
|
|
DEBUG_PRINTSTRING("Done Josh leadout anim")
|
|
bLeadOutPlayed = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(iLeadOutSynchSceneID)
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(iLeadOutSynchSceneID) > 0.29
|
|
IF NOT bLeadOutConvo
|
|
ADD_PED_FOR_DIALOGUE(pedsForConversation, 2, PLAYER_PED_ID(), "Trevor")
|
|
ADD_PED_FOR_DIALOGUE(pedsForConversation, 5, sRCLauncherDataLocal.pedID[JOSH], "Josh")
|
|
IF CREATE_CONVERSATION(pedsForConversation, "JOSH1AU", "JOSH1_OUT", CONV_PRIORITY_HIGH)
|
|
DEBUG_PRINTSTRING("Leadout convo done")
|
|
bLeadOutConvo = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(iLeadOutSynchSceneID) > 0.98
|
|
DEBUG_PRINTSTRING("Leadout done, end mission")
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-1107.106812,290.427490,62.948700>>, <<-1102.037964,291.342072,66.278946>>, 2.0)
|
|
DEBUG_PRINTSTRING("Too close, stopping scene")
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOSH])
|
|
CLEAR_PED_TASKS(sRCLauncherDataLocal.pedID[JOSH]) // CLEAR_PED_TASKS is the better option here, I'm told
|
|
//STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[JOSH], REALLY_SLOW_BLEND_OUT, TRUE)
|
|
DEBUG_PRINTSTRING("Stopping Josh?")
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(oLeftGate)
|
|
STOP_SYNCHRONIZED_ENTITY_ANIM(oLeftGate, NORMAL_BLEND_OUT, TRUE)
|
|
ENDIF
|
|
bLeadOutCancelled = TRUE
|
|
ENDIF
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(sRCLauncherDataLocal.pedID[JOSH], PLAYER_PED_ID()) > 17.5
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOSH])
|
|
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[JOSH], NORMAL_BLEND_OUT, TRUE)
|
|
CLEAR_PED_TASKS(sRCLauncherDataLocal.pedID[JOSH])
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(oLeftGate)
|
|
STOP_SYNCHRONIZED_ENTITY_ANIM(oLeftGate, NORMAL_BLEND_OUT, TRUE)
|
|
ENDIF
|
|
bLeadOutCancelled = TRUE
|
|
ENDIF
|
|
IF IS_PED_INJURED(sRCLauncherDataLocal.pedID[JOSH])
|
|
OR IS_ENTITY_ON_FIRE(sRCLauncherDataLocal.pedID[JOSH])
|
|
OR IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, GET_ENTITY_COORDS(sRCLauncherDataLocal.pedID[JOSH]), 5.0)
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOSH])
|
|
STOP_SYNCHRONIZED_ENTITY_ANIM(sRCLauncherDataLocal.pedID[JOSH], NORMAL_BLEND_OUT, TRUE)
|
|
CLEAR_PED_TASKS(sRCLauncherDataLocal.pedID[JOSH])
|
|
ENDIF
|
|
IF DOES_ENTITY_EXIST(oLeftGate)
|
|
STOP_SYNCHRONIZED_ENTITY_ANIM(oLeftGate, NORMAL_BLEND_OUT, TRUE)
|
|
ENDIF
|
|
bLeadOutCancelled = TRUE
|
|
ENDIF
|
|
ELSE
|
|
DEBUG_PRINTSTRING("Leadout ended early, end mission")
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE, FALSE)
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOSH])
|
|
//oiPhone = CREATE_OBJECT(p_amb_phone_01, GET_ENTITY_COORDS(sRCLauncherDataLocal.pedID[JOSH]))
|
|
//ATTACH_ENTITY_TO_ENTITY(oiPhone, sRCLauncherDataLocal.pedID[JOSH], GET_PED_BONE_INDEX(sRCLauncherDataLocal.pedID[JOSH], BONETAG_PH_R_HAND), <<0.06,0,-0.005>>, <<110,190,-40>>, TRUE)
|
|
IF bLeadOutCancelled = TRUE
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1115.44, 317.46, 65.98>>, PEDMOVEBLENDRATIO_WALK, 30000)
|
|
TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "enter")
|
|
TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "idle_b", DEFAULT, DEFAULT, DEFAULT, AF_LOOPING)
|
|
// TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "exit")
|
|
// TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1117.77, 299.27, 65.00>>, PEDMOVEBLENDRATIO_WALK, 30000)
|
|
// TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "enter")
|
|
// TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "idle_b")
|
|
// TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "exit")
|
|
// SET_SEQUENCE_TO_REPEAT(seq, REPEAT_FOREVER)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
ELSE
|
|
OPEN_SEQUENCE_TASK(seq)
|
|
// TASK_GO_STRAIGHT_TO_COORD(NULL, <<-1106.86, 297.68, 64.23>>, PEDMOVEBLENDRATIO_WALK)
|
|
// TASK_GO_STRAIGHT_TO_COORD(NULL, <<-1105.03, 304.15, 65.18>>, PEDMOVEBLENDRATIO_WALK)
|
|
// TASK_GO_STRAIGHT_TO_COORD(NULL, <<-1103.71, 312.59, 65.98>>, PEDMOVEBLENDRATIO_WALK)
|
|
// TASK_GO_STRAIGHT_TO_COORD(NULL, <<-1105.14, 316.27, 65.98>>, PEDMOVEBLENDRATIO_WALK)
|
|
// TASK_GO_STRAIGHT_TO_COORD(NULL, <<-1115.44, 317.46, 65.98>>, PEDMOVEBLENDRATIO_WALK)
|
|
TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1115.44, 317.46, 65.98>>, PEDMOVEBLENDRATIO_WALK, 30000, DEFAULT_NAVMESH_RADIUS, ENAV_NO_STOPPING)
|
|
TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "enter")
|
|
TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "idle_b", DEFAULT, DEFAULT, DEFAULT, AF_LOOPING)
|
|
// TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "exit")
|
|
// TASK_FOLLOW_NAV_MESH_TO_COORD(NULL, <<-1117.77, 299.27, 65.00>>, PEDMOVEBLENDRATIO_WALK, 30000)
|
|
// TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "enter")
|
|
// TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "idle_b")
|
|
// TASK_PLAY_ANIM(NULL, "rcmjosh1@impatient", "exit")
|
|
// SET_SEQUENCE_TO_REPEAT(seq, REPEAT_FOREVER)
|
|
CLOSE_SEQUENCE_TASK(seq)
|
|
ENDIF
|
|
|
|
TASK_PERFORM_SEQUENCE(sRCLauncherDataLocal.pedID[JOSH], seq)
|
|
CLEAR_SEQUENCE_TASK(seq)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sRCLauncherDataLocal.pedID[JOSH], FALSE)
|
|
IF bLeadOutCancelled = FALSE
|
|
FORCE_PED_MOTION_STATE(sRCLauncherDataLocal.pedID[JOSH], MS_ON_FOOT_WALK, FALSE, FAUS_DEFAULT, TRUE)
|
|
ENDIF
|
|
//FORCE_PED_AI_AND_ANIMATION_UPDATE(sRCLauncherDataLocal.pedID[JOSH], TRUE)
|
|
ENDIF
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<-1107.01, 289.38, 64.76>>, 5.0, PROP_LRGGATE_01c_L)
|
|
SET_STATE_OF_CLOSEST_DOOR_OF_TYPE(PROP_LRGGATE_01c_L, <<-1107.01, 289.38, 64.76>>, FALSE, 0)
|
|
ENDIF
|
|
IF bLeadOutCancelled = FALSE
|
|
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_JOSH_GATE_F_L), 0.0, TRUE, TRUE)
|
|
DEBUG_PRINTSTRING("Josh 4: PROP_LRGGATE_01c_L - Closed")
|
|
ENDIF
|
|
Script_Passed()
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// 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
|
|
g_bSceneAutoTrigger = TRUE
|
|
eInitialSceneStage = IS_REQUEST_SCENE
|
|
WHILE NOT SetupScene_JOSH_1(sRCLauncherDataLocal)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
|
|
g_bSceneAutoTrigger = FALSE
|
|
ENDIF
|
|
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
RelGroupBuddy = GET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID())
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[JOSH])
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(sRCLauncherDataLocal.pedID[JOSH], RelGroupBuddy)
|
|
SET_PED_CONFIG_FLAG(sRCLauncherDataLocal.pedID[JOSH], PCF_KeepRelationshipGroupAfterCleanUp, TRUE)
|
|
ENDIF
|
|
|
|
// Loop within here until the mission passes or fails
|
|
WHILE(TRUE)
|
|
|
|
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_EC")
|
|
|
|
WAIT(0)
|
|
|
|
UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene)
|
|
|
|
SWITCH(m_eState)
|
|
CASE RC_LEADIN
|
|
STATE_LeadIn()
|
|
BREAK
|
|
CASE RC_MEET_JOSH
|
|
STATE_MeetJosh()
|
|
BREAK
|
|
CASE RC_LEADOUT
|
|
STATE_LeadOut()
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// Check debug completion/failure
|
|
#IF IS_DEBUG_BUILD
|
|
DEBUG_Check_Debug_Keys()
|
|
#ENDIF
|
|
ENDWHILE
|
|
|
|
// Script should never reach here. Always terminate with cleanup function.
|
|
ENDSCRIPT
|
|
|