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

239 lines
8.1 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_MrsPhilips.sch"
USING "commands_recording.sch"
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : MrsPhilips1.sc
// AUTHOR : David Roberts
// DESCRIPTION : Trevor encounters his mother at his trailer
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
g_structRCScriptArgs sRCLauncherDataLocal
ENUM eRC_MainState
RC_MEET_MRS_PHILIPS
ENDENUM
ENUM eRC_SubState
SS_SETUP = 0,
SS_UPDATE,
SS_CLEANUP
ENDENUM
// Mission state
eRC_MainState m_eState = RC_MEET_MRS_PHILIPS
eRC_SubState m_eSubState = SS_SETUP
INT iCutsceneStage
BOOL bCutsceneSkipped
// ===========================================================================================================
// 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
// Cleanup the scene created by the launcher
RC_CleanupSceneEntities(sRCLauncherDataLocal, TRUE)
TERMINATE_THIS_THREAD()
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// Script Pass
// -----------------------------------------------------------------------------------------------------------
PROC Script_Passed()
IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_T_TRAILER_CS))
ADD_DOOR_TO_SYSTEM(ENUM_TO_INT(DOORHASH_T_TRAILER_CS), v_ilev_trevtraildr, <<1972.77, 3815.37, 33.66>>)
ENDIF
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_T_TRAILER_CS))
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_T_TRAILER_CS), 0.0)
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_T_TRAILER_CS), DOORSTATE_LOCKED) // B*1292771
CPRINTLN(DEBUG_MISSION, "Locked door into Trevor's trailer")
ENDIF
Random_Character_Passed(CP_RAND_C_MRS1)
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))
OR (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J))
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:
/// Triggers the mocap cutscene, places Trevor outside the trailer, locks the door and completes mission
PROC STATE_MeetMrsPhilips()
SWITCH m_eSubState
CASE SS_SETUP
RC_REQUEST_CUTSCENE("TMOM_1_RCM")
iCutsceneStage = 0
bCutsceneSkipped = FALSE
m_eSubState = SS_UPDATE
BREAK
CASE SS_UPDATE
SWITCH iCutsceneStage
CASE 0
IF RC_IS_CUTSCENE_OK_TO_START()
RC_CLEANUP_LAUNCHER()
IF NOT IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_T_TRAILER_CS))
ADD_DOOR_TO_SYSTEM(ENUM_TO_INT(DOORHASH_T_TRAILER_CS), v_ilev_trevtraildr, <<1972.77, 3815.37, 33.66>>)
ENDIF
IF IS_DOOR_REGISTERED_WITH_SYSTEM(ENUM_TO_INT(DOORHASH_T_TRAILER_CS))
DOOR_SYSTEM_SET_OPEN_RATIO(ENUM_TO_INT(DOORHASH_T_TRAILER_CS), 0.0)
DOOR_SYSTEM_SET_DOOR_STATE(ENUM_TO_INT(DOORHASH_T_TRAILER_CS), DOORSTATE_UNLOCKED) // B*1556640
CPRINTLN(DEBUG_MISSION, "Unlocked door into Trevor's trailer")
ENDIF
START_CUTSCENE()
REPLAY_START_EVENT(REPLAY_IMPORTANCE_LOW)
SAFE_FADE_SCREEN_IN_FROM_BLACK(500, FALSE) // Just in case screen is faded out
iCutsceneStage++
ENDIF
BREAK
CASE 1
IF IS_CUTSCENE_PLAYING()
RC_START_CUTSCENE_MODE(<< 1974.5129, 3814.5791, 32.4266 >>, TRUE, TRUE, TRUE, TRUE, FALSE) // B*1901880 - don't clear objects in order to prevent broken fences being immediately respawned
iCutsceneStage++
ENDIF
BREAK
CASE 2
IF IS_CUTSCENE_PLAYING()
IF CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Trevor")
SAFE_TELEPORT_ENTITY(PLAYER_PED_ID(), <<1974.5129, 3814.5791, 32.4266>>, 270) // Teleport Trevor back outside the trailer
FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_WALK, FALSE, FAUS_CUTSCENE_EXIT)
SIMULATE_PLAYER_INPUT_GAIT(PLAYER_ID(), PEDMOVEBLENDRATIO_WALK, 4000)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
CPRINTLN(DEBUG_MISSION, "Making Trevor walk forwards after intro")
ENDIF
IF WAS_CUTSCENE_SKIPPED()
bCutsceneSkipped = TRUE
ENDIF
ELSE
IF bCutsceneSkipped = TRUE
SET_GAMEPLAY_CAM_RELATIVE_PITCH(0.0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
ENDIF
REPLAY_STOP_EVENT()
RC_END_CUTSCENE_MODE()
RC_SET_ENTITY_PROOFS_FOR_CUTSCENE(sRCLauncherDataLocal, FALSE)
Script_Passed()
ENDIF
BREAK
ENDSWITCH
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
// Loop within here until the mission passes or fails
WHILE(TRUE)
WAIT(0)
REPLAY_CHECK_FOR_EVENT_THIS_FRAME("SF_MrsPhilips")
UPDATE_MISSION_NAME_DISPLAYING(sRCLauncherDataLocal.sIntroCutscene)
REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2197988
SWITCH(m_eState)
CASE RC_MEET_MRS_PHILIPS
STATE_MeetMrsPhilips()
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