603 lines
19 KiB
Python
Executable File
603 lines
19 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 "commands_cutscene.sch"
|
|
USING "commands_entity.sch"
|
|
USING "commands_script.sch"
|
|
|
|
USING "CompletionPercentage_public.sch"
|
|
USING "cutscene_public.sch"
|
|
USING "randomChar_public.sch"
|
|
USING "RC_helper_functions.sch"
|
|
USING "script_player.sch"
|
|
USING "initial_scenes_Omega.sch"
|
|
USING "achievement_public.sch"
|
|
USING "commands_recording.sch"
|
|
USING "cheat_controller_public.sch"
|
|
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : Omega2.sc
|
|
// AUTHOR : Joanna Wright
|
|
// DESCRIPTION :
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
g_structRCScriptArgs sRCLauncherDataLocal
|
|
|
|
ENUM eRC_MainState
|
|
RC_INIT = 0,
|
|
RC_FOCUS_PUSH,
|
|
RC_MEET_OMEGA,
|
|
RC_WAIT_FOR_PLAYER_TO_EXIT,
|
|
RC_FAILED
|
|
ENDENUM
|
|
|
|
ENUM eRC_SubState
|
|
SS_SETUP = 0,
|
|
SS_UPDATE,
|
|
SS_CLEANUP
|
|
ENDENUM
|
|
|
|
ENUM eRC_FailReason
|
|
FAILED_GENERIC,
|
|
FAILED_OMEGA_DIED,
|
|
FAILED_OMEGA_HURT,
|
|
FAILED_OMEGA_SCARED
|
|
ENDENUM
|
|
|
|
// Mission state
|
|
eRC_MainState m_eState = RC_INIT
|
|
eRC_SubState m_eSubState = SS_SETUP
|
|
eRC_FailReason m_eFailReason= FAILED_GENERIC
|
|
|
|
REL_GROUP_HASH relGroupPlayer
|
|
INT iFocusTimeOut
|
|
|
|
CONST_INT OMEGA 0
|
|
CONST_INT FOCUS_STAGE_TIME 3500
|
|
STRING sSceneHandleOmega = "Omega"
|
|
STRING sFranklin = "FRANKLIN"
|
|
|
|
CONST_INT OMEGA_DOOR_LEFT 0
|
|
CONST_INT OMEGA_DOOR_RIGHT 1
|
|
CONST_INT OMEGA_DOOR_LATCH 2
|
|
STRING sDoors[3] // Cutscene labels
|
|
OBJECT_INDEX oiDoors[3]
|
|
STRING sTinySpaceShip = "Flying_Saucer"
|
|
OBJECT_INDEX oiTinySpaceShip
|
|
//STRING sPowerCell = "Scrap_Power_Cell"
|
|
OBJECT_INDEX oiPowerCell
|
|
VECTOR vPowerCellCoord = << 2328.6005, 2570.3369, 46.8080 >>
|
|
VECTOR vPowerCellAngles = << 90.0, 0.0, -45.3580 >>
|
|
MODEL_NAMES mnPowerCell = PROP_CS_POWER_CELL
|
|
|
|
// Vehicle setup
|
|
BOOL bGotID = FALSE
|
|
BOOL bInteriorReady = FALSE
|
|
BOOL bInsertedCar = FALSE
|
|
INTERIOR_INSTANCE_INDEX iiiGarageInterior
|
|
VEHICLE_INDEX vehDocker
|
|
structPedsForConversation conversation
|
|
BOOL bDocked
|
|
INT iOldCheatStateVariable = 0
|
|
|
|
/// PURPOSE:
|
|
/// Sets the new mission state and initialises the substate.
|
|
/// PARAMS:
|
|
/// eRC_MainState in = new mission state
|
|
PROC SetState(eRC_MainState in)
|
|
// Setup new mission state
|
|
m_eState = in
|
|
m_eSubState = SS_SETUP
|
|
ENDPROC
|
|
|
|
///// PURPOSE:
|
|
///// grab and keep open the doors
|
|
//PROC SORT_DOORS()
|
|
//// SET_DOOR_STATE(DOORNAME_OMEGA_SHED_L, DOORSTATE_UNLOCKED)
|
|
//// SET_DOOR_STATE(DOORNAME_OMEGA_SHED_R, DOORSTATE_UNLOCKED)
|
|
// DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_OMEGA_SHED_L), -1.0, FALSE, FALSE)
|
|
// DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_OMEGA_SHED_L), DOORSTATE_FORCE_LOCKED_THIS_FRAME, FALSE, TRUE)
|
|
// DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_OMEGA_SHED_R), 1.0, FALSE, FALSE)
|
|
// DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_OMEGA_SHED_R), DOORSTATE_FORCE_LOCKED_THIS_FRAME, FALSE, TRUE)
|
|
//ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Grab the doors and set up the labels
|
|
PROC GRAB_DOOR_ENTITIES()
|
|
|
|
oiDoors[OMEGA_DOOR_LEFT] = GET_CLOSEST_OBJECT_OF_TYPE(<< 2333.23, 2574.97, 47.03 >>, 5.0, Prop_CH3_01_trlrDoor_L)
|
|
oiDoors[OMEGA_DOOR_RIGHT] = GET_CLOSEST_OBJECT_OF_TYPE(<< 2329.65, 2576.64, 47.03 >>, 5.0, Prop_CH3_01_trlrDoor_R)
|
|
sDoors[OMEGA_DOOR_LEFT] = "Scrap_Door_L"
|
|
sDoors[OMEGA_DOOR_RIGHT] = "Scrap_Door_R"
|
|
sDoors[OMEGA_DOOR_LATCH] = "Scrap_Latch"
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Checks for Omega being killed - returns FALSE when mission has failed
|
|
FUNC BOOL HANDLE_FAIL_CHECKS()
|
|
|
|
// Omega killed
|
|
IF NOT IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[OMEGA])
|
|
m_eFailReason = FAILED_OMEGA_DIED
|
|
SetState(RC_FAILED)
|
|
RETURN FALSE
|
|
ELSE
|
|
// Omega injured
|
|
IF IS_PED_INJURED(sRCLauncherDataLocal.pedID[OMEGA])
|
|
OR IS_PED_RAGDOLL(sRCLauncherDataLocal.pedID[OMEGA])
|
|
m_eFailReason = FAILED_OMEGA_HURT
|
|
SetState(RC_FAILED)
|
|
RETURN FALSE
|
|
ELSE
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
IF HAS_PLAYER_THREATENED_PED(sRCLauncherDataLocal.pedID[OMEGA])
|
|
OR HAS_PED_BUMPED_PED_WITH_VEHICLE(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[OMEGA], TRUE)
|
|
TASK_SMART_FLEE_PED(sRCLauncherDataLocal.pedID[OMEGA], PLAYER_PED_ID(), 500, -1)
|
|
m_eFailReason = FAILED_OMEGA_SCARED
|
|
SetState(RC_FAILED)
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Grab the garage interior so we can stick the car to it
|
|
PROC PIN_GARAGE_INTERIOR()
|
|
|
|
IF NOT bGotID
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.vehID[0])
|
|
iiiGarageInterior = GET_INTERIOR_AT_COORDS(GET_ENTITY_COORDS(sRCLauncherDataLocal.vehID[0]))
|
|
IF IS_VALID_INTERIOR(iiiGarageInterior)
|
|
CPRINTLN(DEBUG_MISSION, "... Grabbed the garage interior")
|
|
PIN_INTERIOR_IN_MEMORY(iiiGarageInterior)
|
|
bGotID = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELIF NOT bInteriorReady
|
|
|
|
IF IS_INTERIOR_READY(iiiGarageInterior)
|
|
CPRINTLN(DEBUG_MISSION, "... Garage interior is ready")
|
|
bInteriorReady = TRUE
|
|
ENDIF
|
|
|
|
ELIF NOT bInsertedCar
|
|
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.vehID[0])
|
|
CPRINTLN(DEBUG_MISSION, "... Sticking car to garage interior")
|
|
VECTOR vTmp = GET_ENTITY_COORDS(sRCLauncherDataLocal.vehID[0])
|
|
FLOAT fTmp = GET_ENTITY_HEADING(sRCLauncherDataLocal.vehID[0])
|
|
SAFE_DELETE_VEHICLE(sRCLauncherDataLocal.vehID[0])
|
|
sRCLauncherDataLocal.vehID[0] = CREATE_VEHICLE(DUNE2, vTmp, fTmp)
|
|
UNPIN_INTERIOR(iiiGarageInterior)
|
|
bInsertedCar = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// Termination
|
|
// ===========================================================================================================
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Cleanup
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
PROC Script_Cleanup()
|
|
|
|
// Ensure launcher is cleaned up
|
|
RC_CLEANUP_LAUNCHER()
|
|
|
|
// If the mission was triggered then additional mission cleanup will be required.
|
|
IF (Random_Character_Cleanup_If_Triggered())
|
|
CPRINTLN(DEBUG_MISSION, "...Random Character Script was triggered so additional cleanup required")
|
|
ENDIF
|
|
|
|
INT iCount
|
|
FOR iCount = 0 TO 2
|
|
SAFE_RELEASE_OBJECT(oiDoors[iCount])
|
|
ENDFOR
|
|
SAFE_RELEASE_OBJECT(oiTinySpaceShip)
|
|
SAFE_RELEASE_OBJECT(oiPowerCell)
|
|
SAFE_RELEASE_VEHICLE(vehDocker)
|
|
|
|
SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<2314.5459, 2576.3296, 44.7>>, <<2326.4463, 2579.6082, 47.6645>>, TRUE)
|
|
RC_CleanupSceneEntities(sRCLauncherDataLocal, FALSE)
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Pass
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Adds needed contacts, completion %, cleans up and passes script.
|
|
PROC Script_Passed()
|
|
CPRINTLN(DEBUG_MISSION, "Script_Passed called")
|
|
Random_Character_Passed(CP_RAND_C_OMG2)
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// DEBUG FUNCTIONS
|
|
// ===========================================================================================================
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
/// PURPOSE:
|
|
/// Check debug skip functionality
|
|
PROC DEBUG_Check_Debug_Keys()
|
|
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S))
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
RC_CleanupSceneEntities(sRCLauncherDataLocal)
|
|
Script_Passed()
|
|
ENDIF
|
|
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
RC_CleanupSceneEntities(sRCLauncherDataLocal)
|
|
Script_Passed()
|
|
ENDIF
|
|
|
|
// Check for Fail
|
|
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F))
|
|
WAIT_FOR_CUTSCENE_TO_STOP()
|
|
IF m_eState <> RC_WAIT_FOR_PLAYER_TO_EXIT // player has passed the mission once he gets to this state
|
|
Random_Character_Failed()
|
|
ENDIF
|
|
Script_Cleanup()
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
// ===========================================================================================================
|
|
// MISSION FUNCTIONS & PROCEDURES
|
|
// ===========================================================================================================
|
|
|
|
/// PURPOSE:
|
|
/// Sets up variables etc
|
|
PROC STATE_Init()
|
|
|
|
RC_PLAYER_TRIGGER_SCENE_LOCK_IN()
|
|
PIN_GARAGE_INTERIOR()
|
|
REQUEST_ADDITIONAL_TEXT("OMEGA2", MISSION_TEXT_SLOT)
|
|
REQUEST_MODEL(mnPowerCell)
|
|
|
|
IF HANDLE_FAIL_CHECKS()
|
|
IF HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[OMEGA])
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sRCLauncherDataLocal.pedID[OMEGA], TRUE)
|
|
SET_PED_KEEP_TASK(sRCLauncherDataLocal.pedID[OMEGA], TRUE)
|
|
ENDIF
|
|
|
|
// Get the PLAYER relationship group, turn Franklin to face him
|
|
IF IS_PED_UNINJURED(PLAYER_PED_ID())
|
|
AND IS_PED_UNINJURED(sRCLauncherDataLocal.pedID[OMEGA])
|
|
relGroupPlayer = GET_PED_RELATIONSHIP_GROUP_HASH(PLAYER_PED_ID())
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(sRCLauncherDataLocal.pedID[OMEGA], relGroupPlayer)
|
|
ENDIF
|
|
|
|
// Set the focus push timer
|
|
iFocusTimeOut = GET_GAME_TIMER() + FOCUS_STAGE_TIME
|
|
|
|
GRAB_DOOR_ENTITIES()
|
|
|
|
SetState(RC_FOCUS_PUSH)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Watch Omega for a few seconds
|
|
PROC STATE_FocusPush()
|
|
|
|
RC_PLAYER_TRIGGER_SCENE_LOCK_IN()
|
|
PIN_GARAGE_INTERIOR()
|
|
|
|
IF HANDLE_FAIL_CHECKS()
|
|
IF GET_GAME_TIMER() < iFocusTimeOut
|
|
AND NOT IS_ENTITY_IN_RANGE_ENTITY(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[OMEGA], 5.0)
|
|
SET_GAMEPLAY_ENTITY_HINT(sRCLauncherDataLocal.pedID[OMEGA], (<<0, 0, 0>>), TRUE, 2000, 2500, DEFAULT_INTERP_OUT_TIME)
|
|
SET_GAMEPLAY_HINT_FOV(35.0)
|
|
SET_GAMEPLAY_HINT_BASE_ORBIT_PITCH_OFFSET(0.0)
|
|
SET_GAMEPLAY_HINT_FOLLOW_DISTANCE_SCALAR(0.30)
|
|
SET_GAMEPLAY_HINT_CAMERA_RELATIVE_SIDE_OFFSET(0.02)
|
|
SET_GAMEPLAY_HINT_CAMERA_RELATIVE_VERTICAL_OFFSET(0.05)
|
|
SET_GAMEPLAY_HINT_CAMERA_BLEND_TO_FOLLOW_PED_MEDIUM_VIEW_MODE(TRUE)
|
|
TASK_LOOK_AT_ENTITY(PLAYER_PED_ID(), sRCLauncherDataLocal.pedID[OMEGA], 2000)
|
|
ELSE
|
|
SetState(RC_MEET_OMEGA)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// sort and play the intro cutscene stage
|
|
PROC STATE_MeetOmega()
|
|
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Init RC_MEET_OMEGA")
|
|
|
|
// B*1918285 - Trophy needs to unlock even with cheats on as we can't replay this mission and it's only a cutscene
|
|
CPRINTLN(DEBUG_MISSION, "Disabling all Cheats - Current Cheat Variable:", g_iBitsetCheatsUsedThisSession)
|
|
DISABLE_CHEAT(CHEAT_TYPE_ALL, TRUE)
|
|
iOldCheatStateVariable = g_iBitsetCheatsUsedThisSession
|
|
g_iBitsetCheatsUsedThisSession = 0
|
|
|
|
RC_REQUEST_CUTSCENE("SCRAP_2_RCM")
|
|
IF RC_IS_CUTSCENE_OK_TO_START()
|
|
|
|
IF IS_ENTITY_ALIVE(sRCLauncherDataLocal.pedID[OMEGA])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(sRCLauncherDataLocal.pedID[OMEGA], sSceneHandleOmega, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), "Franklin", CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(oiDoors[OMEGA_DOOR_LATCH])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(oiDoors[OMEGA_DOOR_LATCH], sDoors[OMEGA_DOOR_LATCH], CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(oiDoors[OMEGA_DOOR_LEFT])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(oiDoors[OMEGA_DOOR_LEFT], sDoors[OMEGA_DOOR_LEFT], CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(oiDoors[OMEGA_DOOR_RIGHT])
|
|
REGISTER_ENTITY_FOR_CUTSCENE(oiDoors[OMEGA_DOOR_RIGHT], sDoors[OMEGA_DOOR_RIGHT], CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
REGISTER_ENTITY_FOR_CUTSCENE(PLAYER_PED_ID(), sFranklin, CU_ANIMATE_EXISTING_SCRIPT_ENTITY)
|
|
ENDIF
|
|
REGISTER_ENTITY_FOR_CUTSCENE(oiTinySpaceShip, sTinySpaceShip, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, P_CS_Saucer_01_S)
|
|
// REGISTER_ENTITY_FOR_CUTSCENE(oiPowerCell, sPowerCell, CU_CREATE_AND_ANIMATE_NEW_SCRIPT_ENTITY, Prop_CS_Power_Cell)
|
|
|
|
// Start mocap scene
|
|
RC_CLEANUP_LAUNCHER()
|
|
START_CUTSCENE()
|
|
|
|
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW)
|
|
|
|
WAIT(0)
|
|
|
|
RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<2314.60059, 2592.44189, 43.64770>>, <<2331.97607, 2571.05786, 50.62959>>, 19.0,
|
|
<<2313.3340, 2600.8425, 45.8162>>, 352.0448)
|
|
RC_START_CUTSCENE_MODE(<<2486.81, 3433.98, 50.09>>)
|
|
|
|
CLEAR_AREA_OF_OBJECTS(<<2333.8325, 2576.7463, 45.6678>>, 3.0)
|
|
m_eSubState = SS_UPDATE // Monitor cutscene
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_CAMERA()
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH()
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
ENDIF
|
|
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sDoors[OMEGA_DOOR_LEFT])
|
|
FREEZE_ENTITY_POSITION(oiDoors[OMEGA_DOOR_LEFT], TRUE)
|
|
ENDIF
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sDoors[OMEGA_DOOR_RIGHT])
|
|
FREEZE_ENTITY_POSITION(oiDoors[OMEGA_DOOR_RIGHT], TRUE)
|
|
ENDIF
|
|
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sFranklin)
|
|
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_IDLE, TRUE, FAUS_DEFAULT, TRUE)
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(oiTinySpaceShip)
|
|
IF DOES_ENTITY_EXIST(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sTinySpaceShip))
|
|
oiTinySpaceShip = GET_OBJECT_INDEX_FROM_ENTITY_INDEX(GET_ENTITY_INDEX_OF_REGISTERED_ENTITY(sTinySpaceShip))
|
|
ENDIF
|
|
ELIF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY(sTinySpaceShip)
|
|
FREEZE_ENTITY_POSITION(oiTinySpaceShip, TRUE)
|
|
ENDIF
|
|
|
|
IF HAS_CUTSCENE_FINISHED()
|
|
|
|
RC_END_CUTSCENE_MODE()
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
|
|
|
|
IF IS_GAMEPLAY_HINT_ACTIVE()
|
|
STOP_GAMEPLAY_HINT(TRUE)
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(oiPowerCell)
|
|
AND HAS_MODEL_LOADED(mnPowerCell)
|
|
oiPowerCell = CREATE_OBJECT_NO_OFFSET(mnPowerCell, vPowerCellCoord)
|
|
SET_ENTITY_ROTATION(oiPowerCell, vPowerCellAngles, EULER_YXZ, FALSE)
|
|
ENDIF
|
|
|
|
// [AG]: Achievement Unlocked
|
|
// From Beyond The Stars
|
|
AWARD_ACHIEVEMENT_FOR_MISSION(ACH15)
|
|
|
|
// B*1918285 - Trophy needs to unlock even with cheats on as we can't replay this mission and it's only a cutscene
|
|
CPRINTLN(DEBUG_MISSION, " RESTORING CHEAT VARIABLE:", iOldCheatStateVariable)
|
|
DISABLE_CHEAT(CHEAT_TYPE_ALL, FALSE)
|
|
g_iBitsetCheatsUsedThisSession = iOldCheatStateVariable
|
|
|
|
m_eSubState = SS_CLEANUP
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
REPLAY_STOP_EVENT()
|
|
CPRINTLN(DEBUG_MISSION, "Cleaning up RC_MEET_OMEGA")
|
|
SetState(RC_WAIT_FOR_PLAYER_TO_EXIT)
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Pass mission but wait for Player to exit the shop door before completely closing the mission
|
|
PROC STATE_WaitForPlayerToExit()
|
|
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Init RC_WAIT_FOR_PLAYER_TO_EXIT")
|
|
ADD_PED_FOR_DIALOGUE(conversation, 1, PLAYER_PED_ID(), "FRANKLIN")
|
|
ASSIGN_VEHICLE_INDEX(vehDocker, sRCLauncherDataLocal.vehID[0])
|
|
bDocked = FALSE
|
|
RC_CleanupSceneEntities(sRCLauncherDataLocal)
|
|
m_eSubState = SS_UPDATE
|
|
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<2326.2996, 2564.4453, 40.6678>>, <<2333.7081, 2581.9390, 65.6678>>, 9.000000)
|
|
Script_Passed()
|
|
m_eSubState = SS_CLEANUP
|
|
|
|
ELIF NOT bDocked
|
|
IF IS_ENTITY_ALIVE(vehDocker)
|
|
AND IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehDocker, TRUE)
|
|
bDocked = CREATE_CONVERSATION(conversation, "SCRAPAU", "SCRAP_DOCK", CONV_PRIORITY_MEDIUM)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SS_CLEANUP
|
|
CPRINTLN(DEBUG_MISSION, "Clean up RC_WAIT_FOR_PLAYER_TO_EXIT")
|
|
Script_Cleanup()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Main mission failed fade state
|
|
PROC STATE_Failed()
|
|
|
|
SWITCH m_eSubState
|
|
|
|
CASE SS_SETUP
|
|
|
|
CLEAR_PRINTS()
|
|
|
|
STRING sFailReason
|
|
|
|
SWITCH m_eFailReason
|
|
|
|
CASE FAILED_GENERIC
|
|
CPRINTLN(DEBUG_MISSION,"MISSION_FAILED: Reason=FAILED_GENERIC")
|
|
BREAK
|
|
CASE FAILED_OMEGA_DIED
|
|
sFailReason = "O2_FAILKILL" // Omega died.
|
|
CPRINTLN(DEBUG_MISSION,"MISSION_FAILED: Reason=FAILED_OMEGA_DIED")
|
|
BREAK
|
|
CASE FAILED_OMEGA_HURT
|
|
sFailReason = "O2_FAILHURT" // Omega was hurt.
|
|
CPRINTLN(DEBUG_MISSION,"MISSION_FAILED: Reason=FAILED_OMEGA_HURT")
|
|
BREAK
|
|
CASE FAILED_OMEGA_SCARED
|
|
sFailReason = "O2_FAILSCARE" // Omega was scared.
|
|
CPRINTLN(DEBUG_MISSION,"MISSION_FAILED: Reason=FAILED_OMEGA_SCARED")
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF m_eFailReason = FAILED_GENERIC
|
|
Random_Character_Failed()
|
|
ELSE
|
|
Random_Character_Failed_With_Reason(sFailReason)
|
|
ENDIF
|
|
|
|
m_eSubState = SS_UPDATE
|
|
BREAK
|
|
|
|
CASE SS_UPDATE
|
|
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
|
|
Script_Cleanup()
|
|
ENDIF
|
|
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]")
|
|
IF m_eState <> RC_WAIT_FOR_PLAYER_TO_EXIT
|
|
Random_Character_Failed()
|
|
ELSE
|
|
Script_Passed()
|
|
ENDIF
|
|
Script_Cleanup()
|
|
ENDIF
|
|
|
|
IF Is_Replay_In_Progress()
|
|
g_bSceneAutoTrigger = TRUE
|
|
eInitialSceneStage = IS_REQUEST_SCENE
|
|
WHILE NOT SetupScene_OMEGA_2(sRCLauncherDataLocal)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
|
|
g_bSceneAutoTrigger = FALSE
|
|
ENDIF
|
|
|
|
RC_END_CUTSCENE_MODE()
|
|
|
|
WHILE (TRUE)
|
|
WAIT(0)
|
|
|
|
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_Omega2")
|
|
UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene)
|
|
|
|
SWITCH(m_eState)
|
|
|
|
CASE RC_INIT
|
|
STATE_Init()
|
|
BREAK
|
|
|
|
CASE RC_FOCUS_PUSH
|
|
STATE_FocusPush()
|
|
BREAK
|
|
|
|
CASE RC_MEET_OMEGA
|
|
STATE_MeetOmega()
|
|
BREAK
|
|
|
|
CASE RC_WAIT_FOR_PLAYER_TO_EXIT
|
|
STATE_WaitForPlayerToExit()
|
|
BREAK
|
|
|
|
CASE RC_FAILED
|
|
STATE_Failed()
|
|
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
|