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

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