Files
gtav-src/script/dev_ng/singleplayer/include/private/player_ped_scenes.sch
T
2025-09-29 00:52:08 +02:00

6805 lines
286 KiB
Scheme
Executable File

//////////////////////////////////////////////////////////////////////////////////////////
// //
// SCRIPT NAME : player_ped_scenes.sch //
// AUTHOR : Kenneth Ross & Alwyn Roberts //
// DESCRIPTION : Contains the players timetable and procs to set up the //
// scenes for each slot in the timetable. //
// //
//////////////////////////////////////////////////////////////////////////////////////////
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_clock.sch"
USING "player_ped_public.sch"
USING "blip_control_public.sch"
USING "selector_public.sch"
USING "cellphone_public.sch"
USING "flow_public_core_override.sch"
#IF IS_DEBUG_BUILD
USING "player_ped_debug.sch"
#ENDIF
#if USE_CLF_DLC
USING "player_scene_scheduleCLF.sch"
#endif
#if USE_NRM_DLC
USING "player_scene_scheduleNRM.sch"
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
USING "player_scene_schedule.sch"
#endif
#endif
USING "player_scene_coords.sch"
USING "player_scene_vehicle.sch"
USING "player_scene_camera.sch"
USING "player_scene_objects.sch"
#if USE_CLF_DLC
USING "player_scene_compCLF.sch"
#endif
#if USE_NRM_DLC
USING "player_scene_compNRM.sch"
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
USING "player_scene_component.sch"
#endif
#endif
USING "familySpeech_private.sch"
USING "TimeLapse.sch"
USING "commands_streaming.sch"
USING "code_control_public.sch"
USING "building_control_public.sch"
// *******************************************************************************************
// SCENE TIMETABLE
// *******************************************************************************************
FUNC BOOL get_NOT_PlayerHasStartedNewScene()
IF NOT IS_PLAYER_SWITCH_IN_PROGRESS()
OR GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_SHORT
RETURN FALSE
ENDIF
IF (GET_PLAYER_SWITCH_STATE() > SWITCH_STATE_JUMPCUT_DESCENT)
IF (GET_PLAYER_SWITCH_STATE() <> SWITCH_STATE_ESTABLISHING_SHOT)
RETURN FALSE
ENDIF
IF (GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_ESTABLISHING_SHOT)
IF (GET_PLAYER_SWITCH_INTERP_OUT_DURATION() > 0)
IF (GET_PLAYER_SWITCH_INTERP_OUT_CURRENT_TIME() > 0100)
RETURN FALSE
ENDIF
ENDIF
ENDIF
ENDIF
RETURN TRUE
ENDFUNC
TYPEDEF FUNC BOOL SceneGlobalFunc(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene, INT iSwitchFlags)
TYPEDEF FUNC PED_SCENE_STRUCT SceneGlobalFuncIndex(PED_SCENE_STRUCT &sPedScene)
FUNC BOOL GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(PED_REQUEST_SCENE_ENUM eScene, enumCharacterList &ePed)
SWITCH eScene
CASE PR_SCENE_DEAD
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sDead
sDead = "Dead eScene for player char: "
sDead += Get_String_From_Ped_Request_Scene_Enum(eScene)
CPRINTLN(DEBUG_SWITCH, GET_THIS_SCRIPT_NAME(), ": ", sDead)
CASSERTLN(DEBUG_SWITCH, sDead)
#ENDIF
ePed = g_sPlayerPedRequest.ePed
RETURN FALSE
BREAK
CASE PR_SCENE_HOSPITAL
ePed = CHAR_MULTIPLAYER
RETURN TRUE
BREAK
//url:bugstar:1015706
CASE PR_SCENE_FTa_FRANKLIN1a FALLTHRU
// CASE PR_SCENE_FTa_FRANKLIN1b FALLTHRU
CASE PR_SCENE_FTa_FRANKLIN1c FALLTHRU
CASE PR_SCENE_FTa_FRANKLIN1d FALLTHRU
CASE PR_SCENE_FTa_FRANKLIN1e
ePed = CHAR_MULTIPLAYER
RETURN TRUE
BREAK
CASE PR_SCENE_M_DEFAULT FALLTHRU
CASE PR_SCENE_M_OVERRIDE FALLTHRU
// CASE PR_SCENE_Ma_ARM3 FALLTHRU
CASE PR_SCENE_Ma_FAMILY1 FALLTHRU
CASE PR_SCENE_Ma_RURAL1 FALLTHRU
CASE PR_SCENE_M4_WASHFACE FALLTHRU
CASE PR_SCENE_Ma_EXILE2 FALLTHRU
CASE PR_SCENE_Ma_EXILE3 FALLTHRU
// CASE PR_SCENE_Ma_FRANKLIN2 FALLTHRU
CASE PR_SCENE_Ma_DOCKS2A FALLTHRU
CASE PR_SCENE_Ma_DOCKS2B FALLTHRU
CASE PR_SCENE_Ma_FINALE1 FALLTHRU
CASE PR_SCENE_Ma_FINALE2A FALLTHRU
CASE PR_SCENE_Ma_FINALEC FALLTHRU
CASE PR_SCENE_Ma_FINALE2B FALLTHRU
// CASE PR_SCENE_Ma_SOLOMON4 FALLTHRU
CASE PR_SCENE_Ma_FRANKLIN2 FALLTHRU
CASE PR_SCENE_Ma_FBI1end FALLTHRU
CASE PR_SCENE_Ma_TREVOR3 FALLTHRU
CASE PR_SCENE_Ma_FBI3 FALLTHRU
CASE PR_SCENE_Ma_FBI4intro FALLTHRU
CASE PR_SCENE_Ma_FBI5 FALLTHRU
// CASE PR_SCENE_Ma_MARTIN1 FALLTHRU
CASE PR_SCENE_M_MD_FBI2 FALLTHRU
CASE PR_SCENE_M2_BEDROOM FALLTHRU
CASE PR_SCENE_M2_SAVEHOUSE0_b FALLTHRU
CASE PR_SCENE_M2_SAVEHOUSE1_a FALLTHRU
CASE PR_SCENE_M2_SAVEHOUSE1_b FALLTHRU
CASE PR_SCENE_M2_SMOKINGGOLF FALLTHRU
CASE PR_SCENE_M4_WAKEUPSCREAM FALLTHRU
CASE PR_SCENE_M4_WAKESUPSCARED FALLTHRU
// CASE PR_SCENE_M4_HOUSEBED_b FALLTHRU
CASE PR_SCENE_M6_HOUSEBED FALLTHRU
CASE PR_SCENE_M4_WATCHINGTV FALLTHRU
// CASE PR_SCENE_M6_HOUSETV_b FALLTHRU
CASE PR_SCENE_M2_KIDS_TV FALLTHRU
CASE PR_SCENE_M_POOLSIDE_a FALLTHRU
CASE PR_SCENE_M_POOLSIDE_b FALLTHRU
CASE PR_SCENE_M_PIER_a FALLTHRU
CASE PR_SCENE_M_PIER_b FALLTHRU
CASE PR_SCENE_M2_WIFEEXITSCAR FALLTHRU
CASE PR_SCENE_M2_DROPOFFDAU_a FALLTHRU
CASE PR_SCENE_M2_DROPOFFDAU_b FALLTHRU
CASE PR_SCENE_M2_DROPOFFSON_a FALLTHRU
CASE PR_SCENE_M2_DROPOFFSON_b FALLTHRU
CASE PR_SCENE_M2_DRIVING_a FALLTHRU
CASE PR_SCENE_M2_DRIVING_b FALLTHRU
CASE PR_SCENE_M2_LUNCH_a FALLTHRU
// CASE PR_SCENE_M7_LUNCH_b FALLTHRU
CASE PR_SCENE_M4_EXITRESTAURANT FALLTHRU
CASE PR_SCENE_M4_LUNCH_b FALLTHRU
CASE PR_SCENE_M4_CINEMA FALLTHRU
CASE PR_SCENE_M_BENCHCALL_a FALLTHRU
CASE PR_SCENE_M_BENCHCALL_b FALLTHRU
CASE PR_SCENE_M2_CARSLEEP_a FALLTHRU
CASE PR_SCENE_M2_CARSLEEP_b FALLTHRU
CASE PR_SCENE_M_CANAL_a FALLTHRU
CASE PR_SCENE_M_CANAL_b FALLTHRU
CASE PR_SCENE_M_CANAL_c FALLTHRU
// CASE PR_SCENE_M_BAR_a FALLTHRU
// CASE PR_SCENE_M_BAR_b FALLTHRU
CASE PR_SCENE_M_VWOODPARK_a FALLTHRU
CASE PR_SCENE_M_VWOODPARK_b FALLTHRU
CASE PR_SCENE_M_PARKEDHILLS_a FALLTHRU
CASE PR_SCENE_M_PARKEDHILLS_b FALLTHRU
CASE PR_SCENE_M6_PARKEDHILLS_a FALLTHRU
CASE PR_SCENE_M6_PARKEDHILLS_b FALLTHRU
CASE PR_SCENE_M6_PARKEDHILLS_c FALLTHRU
CASE PR_SCENE_M6_PARKEDHILLS_d FALLTHRU
CASE PR_SCENE_M6_PARKEDHILLS_e FALLTHRU
CASE PR_SCENE_M6_DRIVING_a FALLTHRU
CASE PR_SCENE_M6_DRIVING_b FALLTHRU
CASE PR_SCENE_M6_DRIVING_c FALLTHRU
CASE PR_SCENE_M6_DRIVING_d FALLTHRU
CASE PR_SCENE_M6_DRIVING_e FALLTHRU
CASE PR_SCENE_M6_DRIVING_f FALLTHRU
CASE PR_SCENE_M6_DRIVING_g FALLTHRU
CASE PR_SCENE_M6_DRIVING_h FALLTHRU
CASE PR_SCENE_M6_RONBORING FALLTHRU
CASE PR_SCENE_M2_CYCLING_a FALLTHRU
CASE PR_SCENE_M2_CYCLING_b FALLTHRU
CASE PR_SCENE_M2_CYCLING_c FALLTHRU
CASE PR_SCENE_M2_MARINA FALLTHRU
CASE PR_SCENE_M2_ARGUEWITHWIFE FALLTHRU
CASE PR_SCENE_M4_PARKEDBEACH FALLTHRU
CASE PR_SCENE_M_HOOKERMOTEL FALLTHRU
// CASE PR_SCENE_M_HOOKERCAR FALLTHRU
CASE PR_SCENE_M_COFFEE_a FALLTHRU
CASE PR_SCENE_M_COFFEE_b FALLTHRU
CASE PR_SCENE_M_COFFEE_c FALLTHRU
CASE PR_SCENE_M2_PHARMACY FALLTHRU
// CASE PR_SCENE_M4_DOORSTUMBLE FALLTHRU
CASE PR_SCENE_M_TRAFFIC_a FALLTHRU
CASE PR_SCENE_M_TRAFFIC_b FALLTHRU
CASE PR_SCENE_M_TRAFFIC_c FALLTHRU
CASE PR_SCENE_M6_MORNING_a FALLTHRU
// CASE PR_SCENE_M6_MORNING_b FALLTHRU
CASE PR_SCENE_M6_CARSLEEP FALLTHRU
CASE PR_SCENE_M6_HOUSETV_a FALLTHRU
CASE PR_SCENE_M6_SUNBATHING FALLTHRU
CASE PR_SCENE_M6_DRINKINGBEER FALLTHRU
CASE PR_SCENE_M6_ONPHONE FALLTHRU
CASE PR_SCENE_M6_DEPRESSED FALLTHRU
CASE PR_SCENE_M6_BOATING FALLTHRU
CASE PR_SCENE_M6_LIQUORSTORE FALLTHRU
CASE PR_SCENE_M7_RESTAURANT FALLTHRU
CASE PR_SCENE_M7_LOUNGECHAIRS FALLTHRU
CASE PR_SCENE_M7_BYESOLOMON_a FALLTHRU
CASE PR_SCENE_M7_BYESOLOMON_b FALLTHRU
CASE PR_SCENE_M7_WIFETENNIS FALLTHRU
CASE PR_SCENE_M7_ROUNDTABLE FALLTHRU
CASE PR_SCENE_M7_REJECTENTRY FALLTHRU
CASE PR_SCENE_M7_HOOKERS FALLTHRU
CASE PR_SCENE_M7_EXITBARBER FALLTHRU
CASE PR_SCENE_M7_EXITFANCYSHOP FALLTHRU
CASE PR_SCENE_M7_FAKEYOGA FALLTHRU
CASE PR_SCENE_M7_COFFEE FALLTHRU
CASE PR_SCENE_M7_GETSREADY FALLTHRU
// CASE PR_SCENE_M7_PARKEDHILLS FALLTHRU
CASE PR_SCENE_M7_READSCRIPT FALLTHRU
CASE PR_SCENE_M7_EMPLOYEECONVO FALLTHRU
CASE PR_SCENE_M7_TALKTOGUARD FALLTHRU
CASE PR_SCENE_M7_LOT_JIMMY FALLTHRU
CASE PR_SCENE_M7_KIDS_TV FALLTHRU
CASE PR_SCENE_M7_KIDS_GAMING FALLTHRU
CASE PR_SCENE_M7_OPENDOORFORAMA FALLTHRU
CASE PR_SCENE_M7_DROPPINGOFFJMY FALLTHRU
CASE PR_SCENE_M7_BIKINGJIMMY FALLTHRU
CASE PR_SCENE_M_S_FAMILY4 FALLTHRU
CASE PR_SCENE_M7_TRACEYEXITSCAR
ePed = CHAR_MICHAEL
RETURN TRUE
BREAK
ENDSWITCH
SWITCH eScene
CASE PR_SCENE_F_DEFAULT FALLTHRU
CASE PR_SCENE_F_OVERRIDE FALLTHRU
CASE PR_SCENE_Fa_PHONECALL_ARM3 FALLTHRU
CASE PR_SCENE_Fa_PHONECALL_FAM1 FALLTHRU
CASE PR_SCENE_Fa_PHONECALL_FAM3 FALLTHRU
CASE PR_SCENE_Fa_STRIPCLUB_ARM3 FALLTHRU
// CASE PR_SCENE_Fa_STRIPCLUB_FAM1 FALLTHRU
// CASE PR_SCENE_Fa_STRIPCLUB_FAM3 FALLTHRU
CASE PR_SCENE_Fa_EXILE2 FALLTHRU
CASE PR_SCENE_Fa_EXILE3 FALLTHRU
CASE PR_SCENE_Fa_FAMILY3 FALLTHRU
CASE PR_SCENE_Fa_CARSTEAL1 FALLTHRU
CASE PR_SCENE_Fa_FBI1 FALLTHRU
CASE PR_SCENE_Fa_FBI4intro FALLTHRU
CASE PR_SCENE_Fa_FBI4 FALLTHRU
CASE PR_SCENE_Fa_FBI5 FALLTHRU
CASE PR_SCENE_Fa_AGENCY1 FALLTHRU
CASE PR_SCENE_Fa_AGENCYprep1 FALLTHRU
CASE PR_SCENE_Fa_MARTIN1 FALLTHRU
CASE PR_SCENE_Fa_AGENCY3B FALLTHRU
CASE PR_SCENE_Fa_FINALE2intro FALLTHRU
CASE PR_SCENE_Fa_RURAL2A FALLTHRU
CASE PR_SCENE_Fa_MICHAEL3 FALLTHRU
CASE PR_SCENE_Fa_DOCKS2A FALLTHRU
CASE PR_SCENE_Fa_FINALE1 FALLTHRU
CASE PR_SCENE_Fa_TREVOR3 FALLTHRU
CASE PR_SCENE_Fa_AGENCY3A FALLTHRU
CASE PR_SCENE_Fa_AGENCY2 FALLTHRU
CASE PR_SCENE_Fa_FINALEA FALLTHRU
CASE PR_SCENE_Fa_FINALEB FALLTHRU
CASE PR_SCENE_Fa_FINALEC FALLTHRU
CASE PR_SCENE_F_MD_FRANKLIN2 FALLTHRU
CASE PR_SCENE_F0_SH_ASLEEP FALLTHRU
CASE PR_SCENE_F1_SH_ASLEEP FALLTHRU
CASE PR_SCENE_F1_NAPPING FALLTHRU
CASE PR_SCENE_F1_GETTINGREADY FALLTHRU
CASE PR_SCENE_F0_SH_READING FALLTHRU
CASE PR_SCENE_F1_SH_READING FALLTHRU
CASE PR_SCENE_F0_SH_PUSHUP_a FALLTHRU
CASE PR_SCENE_F0_SH_PUSHUP_b FALLTHRU
CASE PR_SCENE_F1_SH_PUSHUP FALLTHRU
CASE PR_SCENE_F_KUSH_DOC_a FALLTHRU
CASE PR_SCENE_F_MD_KUSH_DOC FALLTHRU
CASE PR_SCENE_F_KUSH_DOC_b FALLTHRU
CASE PR_SCENE_F_KUSH_DOC_c FALLTHRU
CASE PR_SCENE_F0_GARBAGE FALLTHRU
CASE PR_SCENE_F1_GARBAGE FALLTHRU
CASE PR_SCENE_F_THROW_CUP FALLTHRU
CASE PR_SCENE_F_HIT_CUP_HAND FALLTHRU
CASE PR_SCENE_F_GYM FALLTHRU
CASE PR_SCENE_F0_WALKCHOP FALLTHRU
CASE PR_SCENE_F0_PLAYCHOP FALLTHRU
// CASE PR_SCENE_F1_WALKCHOP FALLTHRU
CASE PR_SCENE_F0_TANISHAFIGHT FALLTHRU
CASE PR_SCENE_F1_NEWHOUSE FALLTHRU
CASE PR_SCENE_F_WALKCHOP_a FALLTHRU
CASE PR_SCENE_F_WALKCHOP_b FALLTHRU
CASE PR_SCENE_F1_PLAYCHOP FALLTHRU
CASE PR_SCENE_F_TRAFFIC_a FALLTHRU
CASE PR_SCENE_F_TRAFFIC_b FALLTHRU
CASE PR_SCENE_F_TRAFFIC_c FALLTHRU
CASE PR_SCENE_F0_BIKE FALLTHRU
CASE PR_SCENE_F0_CLEANCAR FALLTHRU
CASE PR_SCENE_F1_BIKE FALLTHRU
CASE PR_SCENE_F1_CLEANCAR FALLTHRU
CASE PR_SCENE_F1_BYETAXI FALLTHRU
CASE PR_SCENE_F_BIKE_c FALLTHRU
CASE PR_SCENE_F_BIKE_d FALLTHRU
CASE PR_SCENE_F_CLUB FALLTHRU
CASE PR_SCENE_F_CS_CHECKSHOE FALLTHRU
CASE PR_SCENE_F_CS_WIPEHANDS FALLTHRU
CASE PR_SCENE_F_CS_WIPERIGHT FALLTHRU
CASE PR_SCENE_F_BAR_a_01 FALLTHRU
CASE PR_SCENE_F_BAR_b_01 FALLTHRU
CASE PR_SCENE_F_BAR_c_02 FALLTHRU
CASE PR_SCENE_F_BAR_d_02 FALLTHRU
CASE PR_SCENE_F_BAR_e_01 FALLTHRU
CASE PR_SCENE_F_LAMTAUNT_P1 FALLTHRU
CASE PR_SCENE_F_LAMTAUNT_P3 FALLTHRU
CASE PR_SCENE_F_LAMTAUNT_P5 FALLTHRU
CASE PR_SCENE_F_LAMTAUNT_NIGHT FALLTHRU
CASE PR_SCENE_F1_POOLSIDE_a FALLTHRU
CASE PR_SCENE_F1_POOLSIDE_b FALLTHRU
CASE PR_SCENE_F1_CLEANINGAPT FALLTHRU
CASE PR_SCENE_F1_ONCELL FALLTHRU
CASE PR_SCENE_F1_SNACKING FALLTHRU
CASE PR_SCENE_F1_ONLAPTOP FALLTHRU
CASE PR_SCENE_F1_IRONING FALLTHRU
// CASE PR_SCENE_F0_WATCHINGTV FALLTHRU
CASE PR_SCENE_F1_WATCHINGTV FALLTHRU
CASE PR_SCENE_F_S_AGENCY_2A_a FALLTHRU
CASE PR_SCENE_F_S_AGENCY_2A_b FALLTHRU
// CASE PR_SCENE_F_S_FBI1end FALLTHRU
CASE PR_SCENE_F_S_EXILE2 //FALLTHRU
ePed = CHAR_FRANKLIN
RETURN TRUE
BREAK
CASE PR_SCENE_T_DEFAULT FALLTHRU
CASE PR_SCENE_T_OVERRIDE FALLTHRU
CASE PR_SCENE_Ta_CARSTEAL1 FALLTHRU
CASE PR_SCENE_Ta_CARSTEAL2 FALLTHRU
CASE PR_SCENE_Ta_FAMILY4 FALLTHRU
CASE PR_SCENE_Ta_FINALEC FALLTHRU
CASE PR_SCENE_Ta_FBI2 FALLTHRU
CASE PR_SCENE_Ta_RURAL2A FALLTHRU
CASE PR_SCENE_Ta_RC_MRSP2 FALLTHRU
CASE PR_SCENE_Ta_FINALE1 FALLTHRU
CASE PR_SCENE_Ta_CARSTEAL4 FALLTHRU
CASE PR_SCENE_Ta_FINALE2intro FALLTHRU
CASE PR_SCENE_Ta_MICHAEL3 FALLTHRU
// CASE PR_SCENE_Ta_MARTIN1 FALLTHRU
CASE PR_SCENE_Ta_FRANKLIN2 FALLTHRU
CASE PR_SCENE_Ta_FINALE2A FALLTHRU
CASE PR_SCENE_Ta_FINALE2B FALLTHRU
CASE PR_SCENE_T_SC_MOCKLAPDANCE FALLTHRU
CASE PR_SCENE_T_SC_BAR FALLTHRU
CASE PR_SCENE_T_SC_CHASE FALLTHRU
CASE PR_SCENE_T_STRIPCLUB_out FALLTHRU
CASE PR_SCENE_T_ESCORTED_OUT FALLTHRU
CASE PR_SCENE_T_CN_CHATEAU_b FALLTHRU
CASE PR_SCENE_T_CN_CHATEAU_c FALLTHRU
CASE PR_SCENE_T_CR_CHATEAU_d FALLTHRU
CASE PR_SCENE_T_GARBAGE_FOOD FALLTHRU
CASE PR_SCENE_T_THROW_FOOD FALLTHRU
#IF NOT IS_JAPANESE_BUILD
CASE PR_SCENE_T_SHIT FALLTHRU
CASE PR_SCENE_T_JERKOFF FALLTHRU
#ENDIF
CASE PR_SCENE_T_HEADINSINK FALLTHRU
CASE PR_SCENE_T_SMOKEMETH FALLTHRU
CASE PR_SCENE_T_FIGHTBBUILD FALLTHRU
CASE PR_SCENE_T_ANNOYSUNBATHERS FALLTHRU
CASE PR_SCENE_T_CR_BLOCK_CAMERA FALLTHRU
CASE PR_SCENE_T_GUITARBEATDOWN FALLTHRU
CASE PR_SCENE_T_DOCKS_a FALLTHRU
CASE PR_SCENE_T_DOCKS_b FALLTHRU
CASE PR_SCENE_T_DOCKS_c FALLTHRU
CASE PR_SCENE_T_DOCKS_d FALLTHRU
CASE PR_SCENE_T_CR_LINGERIE FALLTHRU
CASE PR_SCENE_T_CR_FUNERAL FALLTHRU
CASE PR_SCENE_T_CR_DUMPSTER FALLTHRU
CASE PR_SCENE_T_CN_WAKETRASH_b FALLTHRU
CASE PR_SCENE_T_CR_WAKEBEACH FALLTHRU
CASE PR_SCENE_T_CN_WAKEBARN FALLTHRU
CASE PR_SCENE_T_CN_WAKETRAIN FALLTHRU
CASE PR_SCENE_T_CR_WAKEROOFTOP FALLTHRU
CASE PR_SCENE_T_CN_WAKEMOUNTAIN FALLTHRU
CASE PR_SCENE_T_CR_ALLEYDRUNK FALLTHRU
CASE PR_SCENE_T_SC_ALLEYDRUNK FALLTHRU
CASE PR_SCENE_T_PUKEINTOFOUNT FALLTHRU
CASE PR_SCENE_T_CN_PARK_b FALLTHRU
// CASE PR_SCENE_T_CN_PARK_c FALLTHRU
CASE PR_SCENE_T_CR_POLICE_a FALLTHRU
CASE PR_SCENE_T_CN_POLICE_b FALLTHRU
CASE PR_SCENE_T_CN_POLICE_c FALLTHRU
CASE PR_SCENE_T_NAKED_BRIDGE FALLTHRU
CASE PR_SCENE_T_NAKED_GARDEN FALLTHRU
CASE PR_SCENE_T_NAKED_ISLAND FALLTHRU
CASE PR_SCENE_T_CR_CHASECAR_a FALLTHRU
CASE PR_SCENE_T_CN_CHASECAR_b FALLTHRU
CASE PR_SCENE_T_CR_CHASEBIKE FALLTHRU
CASE PR_SCENE_T_CR_CHASESCOOTER FALLTHRU
CASE PR_SCENE_T_CR_BRIDGEDROP FALLTHRU
CASE PR_SCENE_T_FIGHTBAR_a FALLTHRU
CASE PR_SCENE_T_FIGHTBAR_b FALLTHRU
CASE PR_SCENE_T_FIGHTBAR_c FALLTHRU
CASE PR_SCENE_T_YELLATDOORMAN FALLTHRU
CASE PR_SCENE_T_FIGHTYAUCLUB_b FALLTHRU
CASE PR_SCENE_T_FIGHTCASINO FALLTHRU
CASE PR_SCENE_T_CR_RUDEATCAFE FALLTHRU
CASE PR_SCENE_T_CR_RAND_TEMPLE FALLTHRU
CASE PR_SCENE_T_UNDERPIER FALLTHRU
CASE PR_SCENE_T_KONEIGHBOUR FALLTHRU
CASE PR_SCENE_T_SCARETRAMP FALLTHRU
CASE PR_SCENE_T_DRUNKHOWLING FALLTHRU
CASE PR_SCENE_T_SC_DRUNKHOWLING FALLTHRU
CASE PR_SCENE_T_FLOYDSAVEHOUSE FALLTHRU
CASE PR_SCENE_T_FLOYDSPOON_A FALLTHRU
CASE PR_SCENE_T_FLOYDSPOON_B FALLTHRU
CASE PR_SCENE_T_FLOYDSPOON_B2 FALLTHRU
CASE PR_SCENE_T_FLOYDSPOON_A2 FALLTHRU
CASE PR_SCENE_T_FLOYDCRYING_A FALLTHRU
CASE PR_SCENE_T_FLOYDCRYING_E0 FALLTHRU
CASE PR_SCENE_T_FLOYDCRYING_E1 FALLTHRU
CASE PR_SCENE_T_FLOYDCRYING_E2 FALLTHRU
CASE PR_SCENE_T_FLOYDCRYING_E3 FALLTHRU
CASE PR_SCENE_T_FLOYD_BEAR FALLTHRU
CASE PR_SCENE_T_FLOYD_DOLL FALLTHRU
CASE PR_SCENE_T_FLOYDPINEAPPLE FALLTHRU
CASE PR_SCENE_T6_SMOKECRYSTAL FALLTHRU
// CASE PR_SCENE_T6_BLOWSHITUP FALLTHRU
// CASE PR_SCENE_T6_EVENING FALLTHRU
CASE PR_SCENE_T6_METHLAB FALLTHRU
CASE PR_SCENE_T6_HUNTING1 FALLTHRU
CASE PR_SCENE_T6_HUNTING2 FALLTHRU
CASE PR_SCENE_T6_HUNTING3 FALLTHRU
CASE PR_SCENE_T6_TRAF_AIR FALLTHRU
// CASE PR_SCENE_T6_DISPOSEBODY_A FALLTHRU
CASE PR_SCENE_T6_DIGGING FALLTHRU
CASE PR_SCENE_T6_FLUSHESFOOT FALLTHRU
CASE PR_SCENE_T_CN_PIER FALLTHRU
CASE PR_SCENE_T6_LAKE FALLTHRU
CASE PR_SCENE_T_FLYING_PLANE
ePed = CHAR_TREVOR
RETURN TRUE
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sInvalid
sInvalid = "invalid eScene for player char: "
sInvalid += Get_String_From_Ped_Request_Scene_Enum(eScene)
CPRINTLN(DEBUG_SWITCH, GET_THIS_SCRIPT_NAME(), ": ", sInvalid)
CASSERTLN(DEBUG_SWITCH, sInvalid)
#ENDIF
ePed = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(g_sPlayerPedRequest.sSelectorPeds.eNewSelectorPed)
RETURN FALSE
ENDFUNC
// *******************************************************************************************
// SCENE PROCESS FUNCS
// *******************************************************************************************
FUNC BOOL SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PED_REQUEST_SCENE_ENUM eScene, TEXT_LABEL_31 &sPlayerTimetableAdditional_script)
SWITCH eScene
// CASE PR_SCENE_Fa_STRIPCLUB_ARM3 sPlayerTimetableAdditional_script = "player_scene_f_stripclub" RETURN TRUE BREAK
// CASE PR_SCENE_Fa_STRIPCLUB_FAM1 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_Fa_STRIPCLUB_ARM3, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_Fa_STRIPCLUB_FAM3 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_Fa_STRIPCLUB_ARM3, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_Fa_FAMILY1 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_Fa_FAMILY3 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_Fa_FBI1 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_Fa_FBI4 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_Fa_AGENCY1 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_Ma_FAMILY4 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_Ma_CARSTEAL1 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_Fa_RURAL2A RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_Ta_RURAL2A RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_POLICE_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_FTa_FRANKLIN1a sPlayerTimetableAdditional_script = "player_scene_ft_franklin1" RETURN TRUE BREAK
// CASE PR_SCENE_FTa_FRANKLIN1b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_FTa_FRANKLIN1a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_FTa_FRANKLIN1c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_FTa_FRANKLIN1a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_FTa_FRANKLIN1d RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_FTa_FRANKLIN1a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_FTa_FRANKLIN1e RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_FTa_FRANKLIN1a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M_MD_FBI2 sPlayerTimetableAdditional_script = "player_scene_m_fbi2" RETURN TRUE BREAK
CASE PR_SCENE_F_MD_FRANKLIN2 sPlayerTimetableAdditional_script = "player_scene_m_fbi2" RETURN TRUE BREAK
CASE PR_SCENE_M_TRAFFIC_a sPlayerTimetableAdditional_script = "player_scene_mf_traffic" RETURN TRUE BREAK
CASE PR_SCENE_M_TRAFFIC_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M_TRAFFIC_c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M2_WIFEEXITSCAR sPlayerTimetableAdditional_script = "player_scene_m_shopping" RETURN TRUE BREAK
CASE PR_SCENE_M2_DROPOFFDAU_a RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M2_DROPOFFDAU_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M2_DROPOFFSON_a RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M2_DROPOFFSON_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M7_OPENDOORFORAMA RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M7_DROPPINGOFFJMY RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M7_TRACEYEXITSCAR RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M2_WIFEEXITSCAR, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M_VWOODPARK_a sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK
CASE PR_SCENE_M_VWOODPARK_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M_VWOODPARK_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M7_REJECTENTRY sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK
CASE PR_SCENE_M7_TALKTOGUARD sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK
CASE PR_SCENE_M7_EMPLOYEECONVO sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK
CASE PR_SCENE_M4_CINEMA sPlayerTimetableAdditional_script = "player_scene_m_cinema" RETURN TRUE BREAK
CASE PR_SCENE_M7_HOOKERS RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_M4_CINEMA, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_M2_KIDS_TV sPlayerTimetableAdditional_script = "player_scene_m_kids" RETURN TRUE BREAK
CASE PR_SCENE_M7_KIDS_TV sPlayerTimetableAdditional_script = "player_scene_m_kids" RETURN TRUE BREAK
CASE PR_SCENE_M7_BIKINGJIMMY sPlayerTimetableAdditional_script = "player_scene_m_kids" RETURN TRUE BREAK
CASE PR_SCENE_M7_ROUNDTABLE sPlayerTimetableAdditional_script = "player_scene_m_kids" RETURN TRUE BREAK
CASE PR_SCENE_M2_LUNCH_a sPlayerTimetableAdditional_script = "player_scene_m_shopping" RETURN TRUE BREAK
CASE PR_SCENE_M7_RESTAURANT sPlayerTimetableAdditional_script = "player_scene_m_shopping" RETURN TRUE BREAK
CASE PR_SCENE_M7_LOUNGECHAIRS sPlayerTimetableAdditional_script = "player_scene_m_shopping" RETURN TRUE BREAK
CASE PR_SCENE_M4_WASHFACE sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK
// CASE PR_SCENE_F_GYM sPlayerTimetableAdditional_script = "player_scene_f_gym" RETURN TRUE BREAK
CASE PR_SCENE_F_TRAFFIC_a sPlayerTimetableAdditional_script = "player_scene_mf_traffic" RETURN TRUE BREAK
CASE PR_SCENE_F_TRAFFIC_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_F_TRAFFIC_c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_F_LAMGRAFF sPlayerTimetableAdditional_script = "player_scene_f_lamgraff" RETURN TRUE BREAK
// CASE PR_SCENE_F_CLUB sPlayerTimetableAdditional_script = "player_scene_f_club" RETURN TRUE BREAK
// CASE PR_SCENE_F_TAUNT RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_LAMTAUNT_P1, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_F_LAMTAUNT_P1 sPlayerTimetableAdditional_script = "player_scene_f_lamtaunt" RETURN TRUE BREAK
// CASE PR_SCENE_F_LAMTAUNT_P2 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_LAMTAUNT_P1, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_F_LAMTAUNT_P3 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_LAMTAUNT_P1, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_F_LAMTAUNT_P5 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_LAMTAUNT_P1, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_F_LAMTAUNT_NIGHT RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_F_LAMTAUNT_P1, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_F1_BYETAXI sPlayerTimetableAdditional_script = "player_scene_f_taxi" RETURN TRUE BREAK
CASE PR_SCENE_F0_TANISHAFIGHT sPlayerTimetableAdditional_script = "player_scene_f_taxi" RETURN TRUE BREAK
CASE PR_SCENE_T_SC_MOCKLAPDANCE sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK
CASE PR_SCENE_T_ESCORTED_OUT sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK
CASE PR_SCENE_T_ANNOYSUNBATHERS sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK
// CASE PR_SCENE_T_CR_FUNERAL sPlayerTimetableAdditional_script = "player_scene_t_funeral" RETURN TRUE BREAK
// CASE PR_SCENE_T_CR_THEATRE sPlayerTimetableAdditional_script = "player_scene_t_theatre" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_CHASECAR_a sPlayerTimetableAdditional_script = "player_scene_t_chasecar" RETURN TRUE BREAK
CASE PR_SCENE_T_CN_CHASECAR_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_CHASECAR_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T_CR_CHASEBIKE RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_CHASECAR_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T_CR_CHASESCOOTER RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_CHASECAR_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T_CR_POLICE_a RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_CHASECAR_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T_CN_POLICE_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_POLICE_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T_CN_POLICE_c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_CR_POLICE_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T_PUKEINTOFOUNT sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK
CASE PR_SCENE_T_SMOKEMETH sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK
CASE PR_SCENE_Ta_RC_MRSP2 RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_SMOKEMETH, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T6_DIGGING sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK
CASE PR_SCENE_T6_FLUSHESFOOT sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK
CASE PR_SCENE_T_HEADINSINK sPlayerTimetableAdditional_script = "player_scene_t_park" RETURN TRUE BREAK
CASE PR_SCENE_T_CN_PARK_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_PUKEINTOFOUNT, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_T_CN_PARK_c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_PUKEINTOFOUNT, sPlayerTimetableAdditional_script) BREAK
// CASE PR_SCENE_T_CR_BRIDGEDROP sPlayerTimetableAdditional_script = "player_scene_t_bridrop" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_RUDEATCAFE sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK
CASE PR_SCENE_T_UNDERPIER sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK
CASE PR_SCENE_T_NAKED_ISLAND sPlayerTimetableAdditional_script = "player_scene_t_tie" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_BRIDGEDROP sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK
CASE PR_SCENE_T_FIGHTBBUILD sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK
CASE PR_SCENE_T_FIGHTBAR_a sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK
CASE PR_SCENE_T_FIGHTBAR_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_FIGHTBAR_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T_FIGHTBAR_c RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_FIGHTBAR_a, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T_YELLATDOORMAN sPlayerTimetableAdditional_script = "player_scene_t_bbfight" RETURN TRUE BREAK
CASE PR_SCENE_T_FIGHTYAUCLUB_b RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_YELLATDOORMAN, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T_FIGHTCASINO RETURN SETUP_TIMETABLE_SCRIPT_FOR_SCENE(PR_SCENE_T_YELLATDOORMAN, sPlayerTimetableAdditional_script) BREAK
CASE PR_SCENE_T_SCARETRAMP sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK
CASE PR_SCENE_T_THROW_FOOD sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK
CASE PR_SCENE_T_SC_CHASE sPlayerTimetableAdditional_script = "player_scene_t_insult" RETURN TRUE BREAK
CASE PR_SCENE_T_CN_WAKETRAIN sPlayerTimetableAdditional_script = "player_scene_ft_franklin1" RETURN TRUE BREAK
// CASE PR_SCENE_F_S_FBI1end sPlayerTimetableAdditional_script = "player_scene_ft_franklin1" RETURN TRUE BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC TEXT_LABEL CreateRandomSpeechLabel(STRING sSceneSpeechLabel, INT iRANGE = 3)
TEXT_LABEL tSceneSpeechLabel = sSceneSpeechLabel
SWITCH GET_RANDOM_INT_IN_RANGE(0,iRANGE)
CASE 0 tSceneSpeechLabel += "a" BREAK
CASE 1 tSceneSpeechLabel += "b" BREAK
CASE 2 tSceneSpeechLabel += "c" BREAK
DEFAULT tSceneSpeechLabel += "X" BREAK
ENDSWITCH
RETURN tSceneSpeechLabel
ENDFUNC
FUNC BOOL SETUP_TIMETABLE_SPEECH_FOR_SCENE(PED_REQUEST_SCENE_ENUM eScene,
TEXT_LABEL &tVoiceID,
TEXT_LABEL &tBuddyVoiceID,
TEXT_LABEL &tSceneSpeechBlock,
TEXT_LABEL &tSceneSpeechLabel,
FLOAT &fSceneSpeechPhase)
tSceneSpeechBlock = "PRSAUD"
tBuddyVoiceID = ""
fSceneSpeechPhase = 0.0
SWITCH eScene
CASE PR_SCENE_Fa_STRIPCLUB_ARM3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_D" tBuddyVoiceID = "TANISHA" RETURN TRUE BREAK
CASE PR_SCENE_Fa_PHONECALL_ARM3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_A" tBuddyVoiceID = "LAMAR" RETURN TRUE BREAK
// CASE PR_SCENE_Ma_ARM3 tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS_ARM3" RETURN TRUE BREAK
// CASE PR_SCENE_Fa_STRIPCLUB_FAM1 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_D" tBuddyVoiceID = "TANISHA" RETURN TRUE BREAK
CASE PR_SCENE_Fa_PHONECALL_FAM1 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_B" tBuddyVoiceID = "LAMAR" RETURN TRUE BREAK
// CASE PR_SCENE_Fa_STRIPCLUB_FAM3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_D" tBuddyVoiceID = "TANISHA" RETURN TRUE BREAK
CASE PR_SCENE_Fa_PHONECALL_FAM3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_ARM3_C" tBuddyVoiceID = "LAMAR" RETURN TRUE BREAK
CASE PR_SCENE_Fa_FAMILY3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FAM3" RETURN TRUE BREAK
CASE PR_SCENE_Ta_FBI2 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FBI2" RETURN TRUE BREAK
CASE PR_SCENE_Ma_FAMILY1 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FAM1" RETURN TRUE BREAK
CASE PR_SCENE_Fa_FBI4intro tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FBI4_0" RETURN TRUE BREAK
CASE PR_SCENE_Ma_FBI4intro tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FBI4_0" RETURN TRUE BREAK
// CASE PR_SCENE_Ma_FBI5 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FBI5" RETURN TRUE BREAK
CASE PR_SCENE_Ma_FBI3 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FBI3" RETURN TRUE BREAK
CASE PR_SCENE_Fa_FBI4 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FBI4" RETURN TRUE BREAK
CASE PR_SCENE_Fa_FBI5 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FBI5" RETURN TRUE BREAK
CASE PR_SCENE_Ta_FAMILY4 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FAM4" RETURN TRUE BREAK
// CASE PR_SCENE_Ta_FINALEC tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FINC" RETURN TRUE BREAK
CASE PR_SCENE_Fa_AGENCY1 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_AGE1" RETURN TRUE BREAK
CASE PR_SCENE_Fa_AGENCYprep1 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_AGEp" RETURN TRUE BREAK
// CASE PR_SCENE_Fa_AGENCY3B tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_AGE3b" RETURN TRUE BREAK
CASE PR_SCENE_Ma_FRANKLIN2 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FRA2" RETURN TRUE BREAK
CASE PR_SCENE_Ta_FRANKLIN2 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FRA2" RETURN TRUE BREAK
CASE PR_SCENE_Ma_FBI1end tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FBIend" RETURN TRUE BREAK
// CASE PR_SCENE_Ma_MARTIN1 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_MAR1" RETURN TRUE BREAK
// CASE PR_SCENE_Ta_MARTIN1 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_MAR1" RETURN TRUE BREAK
CASE PR_SCENE_Fa_CARSTEAL1 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_CARST1" RETURN TRUE BREAK
CASE PR_SCENE_Ta_CARSTEAL1 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CARST1" RETURN TRUE BREAK
CASE PR_SCENE_Fa_AGENCY2 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_AGE2" RETURN TRUE BREAK
CASE PR_SCENE_Ta_CARSTEAL2 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CARST2" RETURN TRUE BREAK
CASE PR_SCENE_Fa_RURAL2A tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_RUR2A" RETURN TRUE BREAK
// CASE PR_SCENE_Ta_RURAL2A tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_RUR2A" fSceneSpeechPhase = 0.60 RETURN TRUE BREAK
CASE PR_SCENE_Ma_RURAL1 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_RUR1" RETURN TRUE BREAK
// CASE PR_SCENE_Ma_EXILE2 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_EXILE2" RETURN TRUE BREAK
CASE PR_SCENE_Fa_EXILE2 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_EXILE2" RETURN TRUE BREAK
CASE PR_SCENE_Fa_EXILE3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FBI5b" RETURN TRUE BREAK
CASE PR_SCENE_Ma_EXILE3 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_EXILE3" RETURN TRUE BREAK
CASE PR_SCENE_M4_WASHFACE tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_MIC2" RETURN TRUE BREAK
// CASE PR_SCENE_Fa_MICHAEL3 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_MIC3" RETURN TRUE BREAK
CASE PR_SCENE_Ta_MICHAEL3 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_MIC3b" RETURN TRUE BREAK
CASE PR_SCENE_Ma_DOCKS2A tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_DOC2A" RETURN TRUE BREAK
CASE PR_SCENE_Fa_DOCKS2A tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_DOC2A" RETURN TRUE BREAK
CASE PR_SCENE_Ma_DOCKS2B tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_DOC2B" RETURN TRUE BREAK
CASE PR_SCENE_Ma_FINALE1 tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FIN1" RETURN TRUE BREAK
// CASE PR_SCENE_Fa_AGENCY3A tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_AGE3A" RETURN TRUE BREAK
CASE PR_SCENE_Ta_FINALE2A tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIN2A" RETURN TRUE BREAK
CASE PR_SCENE_Ma_FINALE2B tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_FIN2B" RETURN TRUE BREAK
CASE PR_SCENE_Ta_FINALE2B tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIN2B" RETURN TRUE BREAK
CASE PR_SCENE_Ta_RC_MRSP2 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_MRSP" RETURN TRUE BREAK
CASE PR_SCENE_Ta_FINALE1 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIN1" RETURN TRUE BREAK
CASE PR_SCENE_Ta_CARSTEAL4
tSceneSpeechBlock = "MIFLAUD"
tSceneSpeechLabel = "MIFL_CALL3"
tVoiceID = "TREVOR"
tBuddyVoiceID = "LESTER"
RETURN TRUE BREAK
CASE PR_SCENE_Fa_FINALE2intro tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_FIN2i" RETURN TRUE BREAK
CASE PR_SCENE_Ta_FINALE2intro tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIN2i" RETURN TRUE BREAK
CASE PR_SCENE_M2_LUNCH_a
tVoiceID = "MICHAEL"
tBuddyVoiceID = "AMANDA"
tSceneSpeechLabel = CreateRandomSpeechLabel("MICS1_IG_4")
RETURN TRUE
BREAK
CASE PR_SCENE_M2_WIFEEXITSCAR tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_5" RETURN TRUE BREAK
CASE PR_SCENE_M_BENCHCALL_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_9a" RETURN TRUE BREAK
CASE PR_SCENE_M_BENCHCALL_b tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_9b" RETURN TRUE BREAK
CASE PR_SCENE_M_PIER_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS_BEACH" RETURN TRUE BREAK
CASE PR_SCENE_M_TRAFFIC_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_7" RETURN TRUE BREAK
CASE PR_SCENE_M_TRAFFIC_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_M_TRAFFIC_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_M_TRAFFIC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_M_VWOODPARK_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_8" fSceneSpeechPhase = 0.20 RETURN TRUE BREAK
CASE PR_SCENE_M_VWOODPARK_b tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_8b" fSceneSpeechPhase = 0.20 RETURN TRUE BREAK
CASE PR_SCENE_M2_PHARMACY tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_11" fSceneSpeechPhase = 0.15 tBuddyVoiceID = "AMANDA" RETURN TRUE BREAK
CASE PR_SCENE_M2_MARINA tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS1_IG_16" fSceneSpeechPhase = 0.20 RETURN TRUE BREAK
CASE PR_SCENE_M2_ARGUEWITHWIFE tVoiceID = "MICHAEL"
tBuddyVoiceID = "AMANDA"
tSceneSpeechLabel = CreateRandomSpeechLabel("MICS1_IG_18")
fSceneSpeechPhase = 0.0
IF ARE_STRINGS_EQUAL(tSceneSpeechLabel, "MICS1_IG_18a")
//You are really pathetic, Michael. Pathetic.
fSceneSpeechPhase = 0.05
ENDIF
IF ARE_STRINGS_EQUAL(tSceneSpeechLabel, "MICS1_IG_18b")
//I'm tired of your bullshit, Michael. Tired.
fSceneSpeechPhase = 0.05
ENDIF
IF ARE_STRINGS_EQUAL(tSceneSpeechLabel, "MICS1_IG_18c")
//Just leave us all alone, Michael. Please.
fSceneSpeechPhase = 0.05
ENDIF
RETURN TRUE
BREAK
// CASE PR_SCENE_F0_TANISHAFIGHT tVoiceID = "FRANKLIN"
// tBuddyVoiceID = "TANISHA"
// tSceneSpeechLabel = "PSF_TANISHA"
// RETURN TRUE
// BREAK
CASE PR_SCENE_F1_NEWHOUSE tVoiceID = "FRANKLIN"
tBuddyVoiceID = "LESTER"
tSceneSpeechLabel = "FRAS2_IG_12"
RETURN TRUE
BREAK
CASE PR_SCENE_M4_EXITRESTAURANT
IF NOT g_bMagDemoActive
tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_4REST"
fSceneSpeechPhase = 0.20 RETURN TRUE
ENDIF
BREAK
CASE PR_SCENE_M4_LUNCH_b tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_4LUNCHb" RETURN TRUE BREAK
CASE PR_SCENE_M4_CINEMA tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_4LUNCHc" fSceneSpeechPhase = 0.45 RETURN TRUE BREAK
CASE PR_SCENE_M_HOOKERMOTEL
tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_HOOKM"
fSceneSpeechPhase = 0.25 RETURN TRUE BREAK
CASE PR_SCENE_M6_HOUSEBED
tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS_DESERT"
fSceneSpeechPhase = 0.5 RETURN TRUE BREAK
CASE PR_SCENE_M7_RESTAURANT tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_7LUNCHa" tBuddyVoiceID = "AMANDA" RETURN TRUE BREAK
CASE PR_SCENE_M7_LOUNGECHAIRS tVoiceID = "MICHAEL"
tBuddyVoiceID = "AMANDA"
tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_9")
RETURN TRUE
CASE PR_SCENE_M7_BYESOLOMON_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_5a" fSceneSpeechPhase = 0.20 RETURN TRUE BREAK
CASE PR_SCENE_M7_BYESOLOMON_b tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_5b" RETURN TRUE BREAK
CASE PR_SCENE_M7_WIFETENNIS tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_18" tBuddyVoiceID = "AMANDA" RETURN TRUE BREAK
// CASE PR_SCENE_M7_ROUNDTABLE_DOUCH tVoiceID = "MICHAEL"
// tBuddyVoiceID = "TRACEY"
// tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_12")
// RETURN TRUE BREAK
// CASE PR_SCENE_M7_ROUNDTABLE tVoiceID = "MICHAEL"
// tBuddyVoiceID = "TRACEY"
// tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_12")
// RETURN TRUE BREAK
CASE PR_SCENE_M7_REJECTENTRY tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_6" RETURN TRUE BREAK
CASE PR_SCENE_M7_HOOKERS tVoiceID = "MICHAEL"
// tSceneSpeechLabel = "PSM_7HOOKER" fSceneSpeechPhase = 0.20
tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_7HOOKER") tBuddyVoiceID = "HOOKER"
RETURN TRUE BREAK
// CASE PR_SCENE_M7_EXITBARBER tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_7HAIR" RETURN TRUE BREAK
CASE PR_SCENE_M7_FAKEYOGA tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_13" RETURN TRUE BREAK
CASE PR_SCENE_M_COFFEE_a tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM2_COFFEE" RETURN TRUE BREAK
CASE PR_SCENE_M_COFFEE_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_M_COFFEE_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_M_COFFEE_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_M_COFFEE_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_M7_COFFEE tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM7_COFFEE" RETURN TRUE BREAK
CASE PR_SCENE_M7_GETSREADY tVoiceID = "MICHAEL" tSceneSpeechLabel = "PSM_7SVHOUSE" fSceneSpeechPhase = 0.50 RETURN TRUE BREAK
// CASE PR_SCENE_M7_EMPLOYEECONVO
// tVoiceID = "MICHAEL"
// tBuddyVoiceID = "PREMPLOYEE"
// tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_2")
// fSceneSpeechPhase = 0.20 RETURN TRUE BREAK
CASE PR_SCENE_M7_TALKTOGUARD tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_3" RETURN TRUE BREAK
CASE PR_SCENE_M7_LOT_JIMMY tVoiceID = "MICHAEL"
tBuddyVoiceID = "JIMMY"
tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_7LOT_C")
RETURN TRUE BREAK
CASE PR_SCENE_M4_WATCHINGTV tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS2_IG_2" RETURN TRUE BREAK
CASE PR_SCENE_M7_KIDS_TV
tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS3_IG_15"
RETURN TRUE BREAK
CASE PR_SCENE_M7_KIDS_GAMING tVoiceID = "MICHAEL"
tBuddyVoiceID = "JIMMY"
tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_11")
fSceneSpeechPhase = 0.20 RETURN TRUE
CASE PR_SCENE_M7_OPENDOORFORAMA tVoiceID = "MICHAEL"
tBuddyVoiceID = "AMANDA"
tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_17")
RETURN TRUE
CASE PR_SCENE_M7_DROPPINGOFFJMY tVoiceID = "MICHAEL" tBuddyVoiceID = "JIMMY"
tSceneSpeechLabel = "PSM_7SHOPb" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK
// CASE PR_SCENE_M7_BIKINGJIMMY tVoiceID = "MICHAEL"
// tBuddyVoiceID = "JIMMY"
// tSceneSpeechLabel = "MICS3_IG_10" fSceneSpeechPhase = 0.20 RETURN TRUE BREAK
CASE PR_SCENE_M7_TRACEYEXITSCAR tVoiceID = "MICHAEL"
tBuddyVoiceID = "TRACEY"
tSceneSpeechLabel = CreateRandomSpeechLabel("MICS3_IG_21")
fSceneSpeechPhase = 0.25
RETURN TRUE BREAK
CASE PR_SCENE_F0_SH_ASLEEP tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_1" RETURN TRUE BREAK
CASE PR_SCENE_F1_SH_ASLEEP RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_SH_ASLEEP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F0_SH_PUSHUP_a tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_1c" RETURN TRUE BREAK
CASE PR_SCENE_F0_SH_PUSHUP_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_SH_PUSHUP_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F1_SH_PUSHUP RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_SH_PUSHUP_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F0_SH_READING tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_1b" RETURN TRUE BREAK
CASE PR_SCENE_F1_SH_READING RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_SH_READING, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_LAMTAUNT_P5
tVoiceID = "FRANKLIN"
tBuddyVoiceID = "LAMAR"
tSceneSpeechLabel = "FRAS_IG_6_P5" RETURN TRUE BREAK
CASE PR_SCENE_F_KUSH_DOC_a tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_2" RETURN TRUE BREAK
CASE PR_SCENE_F_KUSH_DOC_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_KUSH_DOC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_KUSH_DOC_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_KUSH_DOC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F0_BIKE tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSF_BIKEa" RETURN TRUE BREAK
CASE PR_SCENE_F1_BIKE RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_BIKE, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_BIKE_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_BIKE, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_BIKE_d RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_BIKE, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F0_GARBAGE tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_3" RETURN TRUE BREAK
CASE PR_SCENE_F1_GARBAGE tVoiceID = "FRANKLIN" tSceneSpeechLabel = "PSM_TRASH" RETURN TRUE BREAK
CASE PR_SCENE_F_CLUB tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_8" fSceneSpeechPhase = 0.35 RETURN TRUE BREAK
// CASE PR_SCENE_F_CLUB tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_IG_8" fSceneSpeechPhase = 0.35 RETURN TRUE BREAK
CASE PR_SCENE_F_TRAFFIC_a tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_TRAFF" RETURN TRUE BREAK
CASE PR_SCENE_F_TRAFFIC_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_TRAFFIC_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_TRAFFIC_a, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F0_WALKCHOP tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS2_IG_9" RETURN TRUE BREAK
CASE PR_SCENE_F0_PLAYCHOP RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_WALKCHOP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
// CASE PR_SCENE_F1_WALKCHOP RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_WALKCHOP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_WALKCHOP_a RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_WALKCHOP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_WALKCHOP_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_WALKCHOP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F1_PLAYCHOP RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F0_WALKCHOP, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_BAR_a_01 tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_BAR" RETURN TRUE BREAK
CASE PR_SCENE_F_BAR_b_01 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_BAR_a_01, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_BAR_c_02 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_BAR_a_01, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_BAR_d_02 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_BAR_a_01, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_F_BAR_e_01 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_F_BAR_a_01, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
// CASE PR_SCENE_T_STRIPCLUB_a tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_28a" RETURN TRUE BREAK
CASE PR_SCENE_T_SC_MOCKLAPDANCE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_28b" RETURN TRUE BREAK
CASE PR_SCENE_T_ESCORTED_OUT tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_12a" RETURN TRUE BREAK
CASE PR_SCENE_T_CN_CHATEAU_b tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_12b" fSceneSpeechPhase = 0.25 RETURN TRUE BREAK
CASE PR_SCENE_T_CN_CHATEAU_c tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_12c" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_CHATEAU_d tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_12d" RETURN TRUE BREAK
CASE PR_SCENE_T_FIGHTBBUILD
tVoiceID = "TREVOR"
tSceneSpeechLabel = CreateRandomSpeechLabel("TRVS_IG_5")
RETURN TRUE BREAK
CASE PR_SCENE_T_ANNOYSUNBATHERS tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_6" fSceneSpeechPhase = 0.45 RETURN TRUE BREAK
CASE PR_SCENE_T_CR_BRIDGEDROP tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_29" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK
CASE PR_SCENE_T_NAKED_BRIDGE tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_BRDGEWKa" fSceneSpeechPhase = 0.25 RETURN TRUE BREAK
CASE PR_SCENE_T_NAKED_GARDEN tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_BRDGEWKb" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK
CASE PR_SCENE_T_NAKED_ISLAND
tVoiceID = "TREVOR"
IF NOT g_bMagDemoActive
tSceneSpeechLabel = "PST_BRDGEWKc"
ELSE
tSceneSpeechLabel = "PST_MAGDEMO"
ENDIF
fSceneSpeechPhase = 0.39
RETURN TRUE BREAK
CASE PR_SCENE_T_SC_ALLEYDRUNK tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WSTRIP" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK
CASE PR_SCENE_T_CN_WAKETRASH_b tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHb" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK
CASE PR_SCENE_T_CR_WAKEBEACH tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHc" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK
CASE PR_SCENE_T_CN_WAKEBARN tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHd" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK
CASE PR_SCENE_T_CN_WAKETRAIN tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHe" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK
CASE PR_SCENE_T_CR_WAKEROOFTOP tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHf" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK
CASE PR_SCENE_T_CN_WAKEMOUNTAIN tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_WTRASHg" fSceneSpeechPhase = 0.39 RETURN TRUE BREAK
// CASE PR_SCENE_T_SC_CHASE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_35" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_FUNERAL tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_11" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK
CASE PR_SCENE_T_CN_CHASECAR_b tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CHSCRb" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_BLOCK_CAMERA tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_7" fSceneSpeechPhase = 0.25 RETURN TRUE BREAK
CASE PR_SCENE_T_GUITARBEATDOWN tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_8" fSceneSpeechPhase = 0.25 RETURN TRUE BREAK
CASE PR_SCENE_T_CR_CHASECAR_a tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CHSCRa" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_CHASEBIKE tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CHSCRc" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_CHASESCOOTER tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_CHSCRd" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_POLICE_a tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_POLa" RETURN TRUE BREAK
CASE PR_SCENE_T_CN_POLICE_b tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_POLb" RETURN TRUE BREAK
CASE PR_SCENE_T_CN_POLICE_c tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_POLc" RETURN TRUE BREAK
CASE PR_SCENE_T_PUKEINTOFOUNT tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_PARK" fSceneSpeechPhase = 0.50 RETURN TRUE BREAK
CASE PR_SCENE_T_CN_PARK_b RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_T_PUKEINTOFOUNT, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
// CASE PR_SCENE_T_CN_PARK_c RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_T_PUKEINTOFOUNT, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_T_CR_LINGERIE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_9" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK
// CASE PR_SCENE_T_CR_MACHINE tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_MACHINE" RETURN TRUE BREAK
CASE PR_SCENE_T_FIGHTBAR_a tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIBARa" RETURN TRUE BREAK
CASE PR_SCENE_T_FIGHTBAR_b tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIBARb" RETURN TRUE BREAK
CASE PR_SCENE_T_FIGHTBAR_c tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIBARc" RETURN TRUE BREAK
CASE PR_SCENE_T_YELLATDOORMAN tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_21" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK
CASE PR_SCENE_T_FIGHTYAUCLUB_b tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIYAUGHb" RETURN TRUE BREAK
CASE PR_SCENE_T_FIGHTCASINO tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FIYAUGHc" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_RUDEATCAFE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_23" RETURN TRUE BREAK
CASE PR_SCENE_T_UNDERPIER tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_22" fSceneSpeechPhase = 0.30 RETURN TRUE BREAK
CASE PR_SCENE_T_KONEIGHBOUR tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_19" RETURN TRUE BREAK
CASE PR_SCENE_T_SCARETRAMP tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_20" RETURN TRUE BREAK
CASE PR_SCENE_T_DRUNKHOWLING tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_18" fSceneSpeechPhase = 0.2140 RETURN TRUE BREAK
CASE PR_SCENE_T_SC_DRUNKHOWLING tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_HSTRIP" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDSPOON_A tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_30a" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDSPOON_B tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_30b" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDSPOON_B2 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_30c" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDSPOON_A2 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_30d" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDCRYING_A tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_34a" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDCRYING_E0 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_34b" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDCRYING_E1 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_34c" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDCRYING_E2 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_34d" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDCRYING_E3 tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_34e" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYD_BEAR tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_31" tBuddyVoiceID = "FLOYD" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYD_DOLL tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_32" tBuddyVoiceID = "FLOYD" RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDPINEAPPLE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_33" tBuddyVoiceID = "FLOYD" RETURN TRUE BREAK
// CASE PR_SCENE_T6_SMOKECRYSTAL tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_MORN" RETURN TRUE BREAK
CASE PR_SCENE_T6_METHLAB tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_METH" RETURN TRUE BREAK
CASE PR_SCENE_T6_HUNTING1 tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_HUNT" RETURN TRUE BREAK
CASE PR_SCENE_T6_HUNTING2 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_T6_HUNTING1, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_T6_HUNTING3 RETURN SETUP_TIMETABLE_SPEECH_FOR_SCENE(PR_SCENE_T6_HUNTING1, tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel, fSceneSpeechPhase) BREAK
CASE PR_SCENE_T6_TRAF_AIR tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_ARMS" RETURN TRUE BREAK
CASE PR_SCENE_T_CN_PIER tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_PIER" RETURN TRUE BREAK
CASE PR_SCENE_T_FLYING_PLANE tVoiceID = "TREVOR" tSceneSpeechLabel = "PST_FLY" RETURN TRUE BREAK
CASE PR_SCENE_M4_WAKEUPSCREAM tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS2_IG_1" fSceneSpeechPhase = 0.15 RETURN TRUE BREAK
CASE PR_SCENE_M4_WAKESUPSCARED tVoiceID = "MICHAEL" tSceneSpeechLabel = "MICS2_IG_1" RETURN TRUE BREAK
CASE PR_SCENE_F1_ONCELL tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS2_IG_2" RETURN TRUE BREAK
CASE PR_SCENE_T_CR_RAND_TEMPLE tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_24" RETURN TRUE BREAK
#IF NOT IS_JAPANESE_BUILD
CASE PR_SCENE_T_JERKOFF tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_2c" RETURN TRUE BREAK
#ENDIF
CASE PR_SCENE_T6_FLUSHESFOOT tVoiceID = "TREVOR" tSceneSpeechLabel = "TRVS_IG_27" RETURN TRUE BREAK
CASE PR_SCENE_F1_BYETAXI tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS2_IG_7" tBuddyVoiceID = "PRLADY" RETURN TRUE BREAK
CASE PR_SCENE_F1_SNACKING tVoiceID = "FRANKLIN" tSceneSpeechLabel = "FRAS_CRISP" fSceneSpeechPhase = 0.75 RETURN TRUE BREAK
ENDSWITCH
SWITCH eScene
CASE PR_SCENE_M2_DROPOFFDAU_a tVoiceID = "MICHAEL"
tBuddyVoiceID = "TRACEY"
tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_SHOPb_")
RETURN TRUE BREAK
CASE PR_SCENE_M2_DROPOFFDAU_b tVoiceID = "MICHAEL"
tBuddyVoiceID = "TRACEY"
tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_SHOPc_")
RETURN TRUE BREAK
CASE PR_SCENE_M2_DROPOFFSON_a tVoiceID = "MICHAEL"
tBuddyVoiceID = "JIMMY"
tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_SHOPd_")
RETURN TRUE BREAK
CASE PR_SCENE_M2_DROPOFFSON_b tVoiceID = "MICHAEL"
tBuddyVoiceID = "JIMMY"
tSceneSpeechLabel = CreateRandomSpeechLabel("PSM_SHOPe_")
RETURN TRUE BREAK
CASE PR_SCENE_M6_ONPHONE
tVoiceID = "MICHAEL"
tBuddyVoiceID = ""
tSceneSpeechBlock = "FMTAUD" //Family Member - Trevors events!
// INT iPhoneSpeechBit
tSceneSpeechLabel = "MIC_IG_4" //Get_SpeechLabel_From_FamilyEvent(FE_T0_MICHAEL_on_phone_to_therapist, iPhoneSpeechBit)
tSceneSpeechLabel = CreateRandomSpeechLabel(tSceneSpeechLabel)
RETURN TRUE BREAK
CASE PR_SCENE_M6_DEPRESSED
tVoiceID = "MICHAEL"
tBuddyVoiceID = ""
tSceneSpeechBlock = "FMTAUD" //Family Member - Trevors events!
// INT iPhoneSpeechBit
tSceneSpeechLabel = "MIC_IG_4" //Get_SpeechLabel_From_FamilyEvent(FE_T0_MICHAEL_on_phone_to_therapist, iPhoneSpeechBit)
tSceneSpeechLabel = CreateRandomSpeechLabel(tSceneSpeechLabel)
RETURN TRUE BREAK
CASE PR_SCENE_M6_SUNBATHING
tVoiceID = "MICHAEL"
tBuddyVoiceID = ""
tSceneSpeechBlock = "FMTAUD" //Family Member - Trevors events!
INT iPhoneSpeechCount, iPhoneSpeechBit, iPlayerBitset
tSceneSpeechLabel = Get_SpeechLabel_From_FamilyEvent(FE_T0_MICHAEL_sunbathing, iPhoneSpeechCount, iPhoneSpeechBit, iPlayerBitset)
RETURN TRUE BREAK
CASE PR_SCENE_F_S_AGENCY_2A_b tVoiceID = "FRANKLIN"
tSceneSpeechBlock = "FB3aAUD"
tSceneSpeechLabel = "F3A_INTRO"
RETURN TRUE BREAK
BREAK
CASE PR_SCENE_M6_RONBORING tVoiceID = "MICHAEL"
tBuddyVoiceID = Get_VoiceID_From_FamilyMember(FM_TREVOR_0_RON)
tSceneSpeechBlock = "FMTAUD" //Family Member - Trevors events!
// INT iPhoneSpeechBit
tSceneSpeechLabel = "RONEX_IG_5" //Get_SpeechLabel_From_FamilyEvent(FE_T0_MICHAEL_on_phone_to_therapist, iPhoneSpeechBit)
tSceneSpeechLabel = CreateRandomSpeechLabel(tSceneSpeechLabel, 2)
RETURN TRUE BREAK
BREAK
#IF NOT IS_JAPANESE_BUILD
CASE PR_SCENE_T_SHIT tVoiceID = "TREVOR"
tSceneSpeechBlock = "FMTAUD" //Family Member - Trevors events!
// INT iPhoneSpeechBit
tSceneSpeechLabel = "TRV_IG_4" //Get_SpeechLabel_From_FamilyEvent(FE_T0_MICHAEL_on_phone_to_therapist, iPhoneSpeechBit)
RETURN TRUE BREAK
BREAK
#ENDIF
ENDSWITCH
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sMissing
sMissing = "no speech for eScene: "
sMissing += Get_String_From_Ped_Request_Scene_Enum(eScene)
CDEBUG3LN(DEBUG_SWITCH, GET_THIS_SCRIPT_NAME(), ": ", sMissing)
/* CASSERTLN(DEBUG_SWITCH, sMissing) */
#ENDIF
tVoiceID = "null"
tSceneSpeechBlock = "null"
tSceneSpeechLabel = "null"
fSceneSpeechPhase = -1.0
RETURN FALSE
ENDFUNC
FUNC BOOL SETUP_TIMETABLE_CONTEXT_FOR_SCENE(PED_REQUEST_SCENE_ENUM eScene,
TEXT_LABEL_31 &tContext,
FLOAT &fSceneSpeechPhase,
BOOL &bPlayerSpeaks)
bPlayerSpeaks = TRUE
SWITCH eScene
// CASE PR_SCENE_F1_SNACKING tContext = "GENERIC_EAT" fSceneSpeechPhase = 0.75 RETURN TRUE BREAK
CASE PR_SCENE_T_KONEIGHBOUR tContext = "GENERIC_INSULT_HIGH" fSceneSpeechPhase = 0.9 RETURN TRUE BREAK
CASE PR_SCENE_M7_HOOKERS tContext = "HOOKER_DECLINED" fSceneSpeechPhase = 0.9 bPlayerSpeaks = FALSE RETURN TRUE BREAK
CASE PR_SCENE_T_CR_BLOCK_CAMERA tContext = "GENERIC_INSULT_MED" fSceneSpeechPhase = 0.9 bPlayerSpeaks = FALSE RETURN TRUE BREAK
CASE PR_SCENE_F_GYM tContext = "WORKOUT_FINISHED" fSceneSpeechPhase = 0.9 RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDSPOON_A tContext = "MURMERING" fSceneSpeechPhase = 0.9 bPlayerSpeaks = FALSE RETURN TRUE BREAK
CASE PR_SCENE_T_FLOYDSPOON_A2 RETURN SETUP_TIMETABLE_CONTEXT_FOR_SCENE(PR_SCENE_T_FLOYDSPOON_A, tContext, fSceneSpeechPhase, bPlayerSpeaks) BREAK
CASE PR_SCENE_T_FLOYDSPOON_B RETURN SETUP_TIMETABLE_CONTEXT_FOR_SCENE(PR_SCENE_T_FLOYDSPOON_A, tContext, fSceneSpeechPhase, bPlayerSpeaks) BREAK
CASE PR_SCENE_T_FLOYDSPOON_B2 RETURN SETUP_TIMETABLE_CONTEXT_FOR_SCENE(PR_SCENE_T_FLOYDSPOON_A, tContext, fSceneSpeechPhase, bPlayerSpeaks) BREAK
CASE PR_SCENE_M2_KIDS_TV tContext = "AIMED_AT_BY_PLAYER" fSceneSpeechPhase = 0.9 bPlayerSpeaks = FALSE RETURN TRUE BREAK
CASE PR_SCENE_M7_TALKTOGUARD tContext = "GENERIC_BYE" fSceneSpeechPhase = 0.9 bPlayerSpeaks = FALSE RETURN TRUE BREAK
ENDSWITCH
tContext = "null"
fSceneSpeechPhase = -1.0
RETURN FALSE
ENDFUNC
FUNC BOOL SHAKE_PLAYER_TIMETABLE_DRUNK_CAM(PED_REQUEST_SCENE_ENUM eScene,
FLOAT &paramStrength, FLOAT &amplitudeScalar, BOOL &bCountsForPubClubVisit)
SWITCH eScene
CASE PR_SCENE_M6_LIQUORSTORE
paramStrength = 1.0 //0.05
amplitudeScalar = 1.0 //0.05
RETURN TRUE
BREAK
CASE PR_SCENE_T_SC_BAR FALLTHRU
CASE PR_SCENE_T_DRUNKHOWLING FALLTHRU
CASE PR_SCENE_T_SC_DRUNKHOWLING FALLTHRU
CASE PR_SCENE_T_CR_ALLEYDRUNK FALLTHRU
CASE PR_SCENE_T_SC_ALLEYDRUNK FALLTHRU
CASE PR_SCENE_T_NAKED_BRIDGE FALLTHRU
CASE PR_SCENE_T_NAKED_GARDEN FALLTHRU
CASE PR_SCENE_T_NAKED_ISLAND FALLTHRU
CASE PR_SCENE_T_CN_CHATEAU_b FALLTHRU
CASE PR_SCENE_T_CN_CHATEAU_c FALLTHRU
CASE PR_SCENE_T_CR_CHATEAU_d FALLTHRU
CASE PR_SCENE_T_CN_WAKETRASH_b FALLTHRU
CASE PR_SCENE_T_CR_WAKEBEACH FALLTHRU
CASE PR_SCENE_T_CN_WAKEBARN FALLTHRU
CASE PR_SCENE_T_CN_WAKETRAIN FALLTHRU
// CASE PR_SCENE_T_CN_WAKEMOUNTAIN FALLTHRU //1463185
CASE PR_SCENE_T_CR_WAKEROOFTOP
IF g_bMagDemoActive
RETURN FALSE
ENDIF
paramStrength = 0.5 //0.05
amplitudeScalar = 0.5 //0.05
IF (eScene = PR_SCENE_T_NAKED_BRIDGE)
OR (eScene = PR_SCENE_T_NAKED_GARDEN)
OR (eScene = PR_SCENE_T_NAKED_ISLAND)
OR (eScene = PR_SCENE_T_CR_ALLEYDRUNK)
bCountsForPubClubVisit = FALSE
ENDIF
RETURN TRUE
BREAK
CASE PR_SCENE_T_SMOKEMETH FALLTHRU
CASE PR_SCENE_Ta_RC_MRSP2
paramStrength = 0.1
amplitudeScalar = 0.1
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL CONTROL_PLAYER_HAVING_A_LIE_IN(PED_REQUEST_SCENE_ENUM eScene)
eScene = eScene
// SWITCH eScene
// CASE PR_SCENE_M2_BEDROOM FALLTHRU
// CASE PR_SCENE_M2_SAVEHOUSE0_b FALLTHRU
// CASE PR_SCENE_M2_SAVEHOUSE1_a FALLTHRU
// CASE PR_SCENE_M4_WAKEUPSCREAM FALLTHRU
// CASE PR_SCENE_M4_WAKESUPSCARED FALLTHRU
// CASE PR_SCENE_M4_HOUSEBED_b FALLTHRU
// CASE PR_SCENE_M6_HOUSEBED FALLTHRU
// CASE PR_SCENE_M_POOLSIDE_a FALLTHRU
// CASE PR_SCENE_M_POOLSIDE_b FALLTHRU
// CASE PR_SCENE_M_PARKEDHILLS_a FALLTHRU
// CASE PR_SCENE_M_PARKEDHILLS_b FALLTHRU
// CASE PR_SCENE_M6_PARKEDHILLS_a FALLTHRU
// CASE PR_SCENE_M6_PARKEDHILLS_b FALLTHRU
// CASE PR_SCENE_M6_PARKEDHILLS_c FALLTHRU
// CASE PR_SCENE_M6_PARKEDHILLS_d FALLTHRU
// CASE PR_SCENE_M6_PARKEDHILLS_e FALLTHRU
// CASE PR_SCENE_M2_CARSLEEP_a FALLTHRU
// CASE PR_SCENE_M2_CARSLEEP_b FALLTHRU
// CASE PR_SCENE_M6_CARSLEEP FALLTHRU
// CASE PR_SCENE_F0_SH_ASLEEP FALLTHRU
// CASE PR_SCENE_F1_SH_ASLEEP FALLTHRU
// CASE PR_SCENE_F1_POOLSIDE_a FALLTHRU
// CASE PR_SCENE_F1_POOLSIDE_b FALLTHRU
// CASE PR_SCENE_T_SMOKEMETH FALLTHRU
// CASE PR_SCENE_T_CR_DUMPSTER FALLTHRU
// CASE PR_SCENE_T_FLOYDSAVEHOUSE FALLTHRU
// CASE PR_SCENE_T_FLOYDSPOON_A FALLTHRU
// CASE PR_SCENE_T_FLOYDSPOON_B FALLTHRU
// CASE PR_SCENE_T_FLOYDSPOON_C FALLTHRU
// CASE PR_SCENE_T_FLOYDSPOON_D FALLTHRU
// CASE PR_SCENE_T_CN_WAKETRASH_b FALLTHRU
// CASE PR_SCENE_T_CR_WAKEBEACH FALLTHRU
// CASE PR_SCENE_T_CN_WAKEBARN FALLTHRU
// CASE PR_SCENE_T_CN_WAKETRAIN FALLTHRU
// CASE PR_SCENE_T_CR_WAKEROOFTOP FALLTHRU
// CASE PR_SCENE_T_CN_WAKEMOUNTAIN
//
// #IF IS_DEBUG_BUILD
// TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix
// IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix)
// TEXT_LABEL_63 tScene, tAssert
// tScene = Get_String_From_Ped_Request_Scene_Enum(eScene)
// tAssert = GET_STRING_FROM_STRING(tScene,
// GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
// GET_LENGTH_OF_LITERAL_STRING(tScene))
// tAssert += " uses synch scene cam, cannot use lie in"
// CASSERTLN(DEBUG_SWITCH, tAssert)
//
// RETURN FALSE
// ENDIF
// #ENDIF
//
// RETURN TRUE
// BREAK
//
// ENDSWITCH
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Michael's House SE_MICHAELS_HOUSE_RADIO -806.3952 177.7196 72.6604
/// Franklin's Auntie House SE_FRANKLIN_AUNT_HOUSE_RADIO_01 -17.4724 -1441.13 31.8273
/// Franklin Hills Safehouse SE_FRANKLIN_HILLS_HOUSE_RADIO_01 3.5171 527.6619 175.6338
/// Trevor Trailer SE_TREVOR_TRAILER_RADIO_01 1976.3448 3820.95 33.5331
/// Trevor's Apartment TREVOR_APARTMENT_RADIO -1156.3032 -1522.38 11.9615
FUNC BOOL SET_SCENE_RADIO_EMITTER_ENABLED(PED_REQUEST_SCENE_ENUM eScene, TEXT_LABEL_63 &EmitterName, FLOAT &fTurnOffRadioPhase)
SWITCH eScene
CASE PR_SCENE_F0_SH_ASLEEP
CASE PR_SCENE_F0_TANISHAFIGHT
IF SET_SCENE_RADIO_EMITTER_ENABLED(PR_SCENE_F1_SH_ASLEEP, EmitterName, fTurnOffRadioPhase)
EmitterName = "SE_FRANKLIN_AUNT_HOUSE_RADIO_01"
RETURN TRUE BREAK
ENDIF
BREAK
CASE PR_SCENE_F1_SH_ASLEEP
EmitterName = "SE_FRANKLIN_HILLS_HOUSE_RADIO_01"
fTurnOffRadioPhase = 0.0
RETURN TRUE BREAK
ENDSWITCH
EmitterName = ""
fTurnOffRadioPhase = -1
RETURN FALSE
ENDFUNC
FUNC BOOL CONTROL_PLAYER_IS_ON_THE_PHONE(PED_REQUEST_SCENE_ENUM eScene)
SWITCH eScene
CASE PR_SCENE_M_BENCHCALL_a FALLTHRU
CASE PR_SCENE_M_BENCHCALL_b FALLTHRU
CASE PR_SCENE_M6_ONPHONE FALLTHRU
CASE PR_SCENE_M6_DEPRESSED
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
FUNC BOOL CONTROL_PLAYER_PROCEDURAL_CONV_INSTANT(PED_REQUEST_SCENE_ENUM eScene)
SWITCH eScene
CASE PR_SCENE_M2_DROPOFFDAU_a FALLTHRU
CASE PR_SCENE_M2_DROPOFFDAU_b FALLTHRU
CASE PR_SCENE_M2_DROPOFFSON_a FALLTHRU
CASE PR_SCENE_M2_DROPOFFSON_b FALLTHRU
CASE PR_SCENE_M_BENCHCALL_a FALLTHRU
CASE PR_SCENE_M_BENCHCALL_b FALLTHRU
CASE PR_SCENE_M6_ONPHONE FALLTHRU
CASE PR_SCENE_M6_DEPRESSED
RETURN TRUE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
PROC PRIVATE_SetDefaultPlayerPedAttributes(SELECTOR_PED_STRUCT &selectorPeds)
IF NOT IS_PED_INJURED(selectorPeds.pedID[selectorPeds.ePreviousSelectorPed])
SET_PED_CAN_BE_TARGETTED(selectorPeds.pedID[selectorPeds.ePreviousSelectorPed], FALSE)
SET_PED_RELATIONSHIP_GROUP_HASH(selectorPeds.pedID[selectorPeds.ePreviousSelectorPed], RELGROUPHASH_PLAYER)
ENDIF
ENDPROC
FUNC BOOL FORCE_ROOM_FOR_SCENE_SELECTOR_PED(PED_SCENE_STRUCT &sPedScene)
IF sPedScene.roomInterior <> NULL
STRING RoomKeyHash
SWITCH sPedScene.eScene
// CASE PR_SCENE_F1_SH_ASLEEP RoomKeyHash = "BedRoom" BREAK // #593993
CASE PR_SCENE_F1_ONCELL FALLTHRU
DEFAULT
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "FORCE_ROOM_FOR_SCENE_SELECTOR_PED(", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), ") - no defined RoomKeyHash")
#ENDIF
RoomKeyHash = ""
RETURN FALSE
BREAK
ENDSWITCH
FORCE_ROOM_FOR_ENTITY(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed],
sPedScene.roomInterior,
GET_HASH_KEY(RoomKeyHash))
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "FORCE_ROOM_FOR_SCENE_SELECTOR_PED(", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), ") - defined RoomKeyHash: \"", RoomKeyHash, "\"")
#ENDIF
RETURN TRUE
ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "FORCE_ROOM_FOR_SCENE_SELECTOR_PED(", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), ") - roomInterior is null??")
#ENDIF
RETURN FALSE
ENDFUNC
PROC GetSplineCamFromPlayerToPedParams(PED_SCENE_STRUCT &sPedScene, BOOL &bCreateReplacementForPlayer, BOOL &bKeepTasks, SWITCH_TYPE &eSwitchType,
FLOAT &gameplayCamPitch, FLOAT &gameplayCamHeading, BOOL &bPauseBeforePan, BOOL &bPauseBeforeOutro, INT &iSwitchFlags)
bCreateReplacementForPlayer = TRUE
bKeepTasks = FALSE
eSwitchType = SWITCH_TYPE_AUTO
IF (sPedScene.sSelectorPeds.ePreviousSelectorPed < SELECTOR_PED_MULTIPLAYER)
AND (sPedScene.sSelectorPeds.eCurrentSelectorPed < SELECTOR_PED_MULTIPLAYER)
IF (sPedScene.sSelectorPeds.ePreviousSelectorPed <> sPedScene.sSelectorPeds.eCurrentSelectorPed)
enumCharacterList ePreviousChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.sSelectorPeds.ePreviousSelectorPed)
enumCharacterList eCurrentChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.sSelectorPeds.eCurrentSelectorPed)
#if USE_CLF_DLC
VECTOR vPreviousChar = g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[ePreviousChar]
VECTOR vCurrentChar = g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[eCurrentChar]
#endif
#if USE_NRM_DLC
VECTOR vPreviousChar = g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[ePreviousChar]
VECTOR vCurrentChar = g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[eCurrentChar]
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
VECTOR vPreviousChar = g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[ePreviousChar]
VECTOR vCurrentChar = g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[eCurrentChar]
#endif
#endif
IF (VDIST2(vPreviousChar, vCurrentChar) < (150.0*150.0))
// bCreateReplacementForPlayer = TRUE
bKeepTasks = TRUE
ENDIF
ENDIF
ENDIF
// Fix for bug #329674 - Copy of MP character left in singleplayer.
IF GET_CURRENT_PLAYER_PED_ENUM() = NO_CHARACTER
bCreateReplacementForPlayer = FALSE
ENDIF
#IF IS_DEBUG_BUILD
//Fix for bug #688176 - Copy of old player char left after debug menu switch
IF g_bWarpDebugPlayerCharScene
bCreateReplacementForPlayer = FALSE
ENDIF
#ENDIF
//No need to create replacement copy for long-rane ambient switches during the magdemo
IF g_bMagDemoActive
bCreateReplacementForPlayer = FALSE
ENDIF
//delete if descent only (switching to the same ped!)
IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_DESCENT_ONLY)
IF NOT IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_PAUSE_BEFORE_DESCENT)
SET_BITMASK_AS_ENUM(iSwitchFlags, SWITCH_FLAG_PAUSE_BEFORE_DESCENT)
ENDIF
eSwitchType = SWITCH_TYPE_MEDIUM
bCreateReplacementForPlayer = FALSE
ENDIF
IF (sPedScene.eScene = PR_SCENE_M_S_FAMILY4) //1436271
OR (sPedScene.eScene = PR_SCENE_F_S_AGENCY_2A_a) //1033625
OR (sPedScene.eScene = PR_SCENE_F_S_AGENCY_2A_b) //1033625
OR (sPedScene.eScene = PR_SCENE_F_S_EXILE2) //1271904
IF (eSwitchType = SWITCH_TYPE_AUTO) //1373010
eSwitchType = SWITCH_TYPE_LONG
ENDIF
bCreateReplacementForPlayer = FALSE
ENDIF
IF g_bSPInitialisedThroughSwitch
bCreateReplacementForPlayer = FALSE
ENDIF
IF NOT ((sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT))
//#1249706
#IF IS_DEBUG_BUILD
IF g_bWarpDebugPlayerCharScene
IF (eSwitchType = SWITCH_TYPE_AUTO)
eSwitchType = SWITCH_TYPE_LONG
ENDIF
ENDIF
#ENDIF
IF (eSwitchType = SWITCH_TYPE_AUTO) //#1544164 & 1589279
eSwitchType = SWITCH_TYPE_LONG
ENDIF
ELSE
IF (eSwitchType = SWITCH_TYPE_AUTO)
PED_INDEX pedFrom = sPedScene.sSelectorCam.pedFrom
IF NOT DOES_ENTITY_EXIST(pedFrom)
pedFrom = PLAYER_PED_ID()
ENDIF
IF GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) = SWITCH_TYPE_SHORT
//#1587763
IF (eSwitchType = SWITCH_TYPE_AUTO)
IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorCam.pedTo)
IF NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorCam.pedTo)
eSwitchType = SWITCH_TYPE_MEDIUM
CASSERTLN(DEBUG_SWITCH, "#1587763 - force medium range switch for peds waiting on preload")
ENDIF
ENDIF
ENDIF
//#1587145
IF (eSwitchType = SWITCH_TYPE_AUTO)
INT interiorGroupID1 = 0, interiorGroupID2 = 0
INTERIOR_INSTANCE_INDEX interiorID1 = GET_INTERIOR_FROM_ENTITY(pedFrom)
IF IS_VALID_INTERIOR(interiorID1)
interiorGroupID1 = GET_INTERIOR_GROUP_ID(interiorID1)
ENDIF
IF IS_VALID_INTERIOR(sPedScene.roomInterior)
interiorGroupID2 = GET_INTERIOR_GROUP_ID(sPedScene.roomInterior)
ENDIF
IF (interiorGroupID1 <> interiorGroupID2)
eSwitchType = SWITCH_TYPE_MEDIUM
ELSE
IF (interiorGroupID1 <> 0)
CPRINTLN(DEBUG_SWITCH, "interiorGroupID1 is non-null ", interiorGroupID1)
ENDIF
IF (interiorGroupID2 <> 0)
CPRINTLN(DEBUG_SWITCH, "interiorGroupID2 is non-null ", interiorGroupID2)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
FLOAT gameplayCamSmoothRate
IF NOT SETUP_RELATIVE_GAMEPLAY_CAM_PITCH_SCENE(sPedScene.eScene,
gameplayCamPitch, gameplayCamSmoothRate, gameplayCamHeading)
ENDIF
bPauseBeforePan = FALSE
bPauseBeforeOutro = FALSE
IF g_iPauseOnOutro > 0
bPauseBeforeOutro = TRUE
ENDIF
ENDPROC
USING "player_scene_assets.sch"
USING "player_scene_anim.sch"
PROC SAFE_STORE_PLAYER_PED_INFOCLF(PED_INDEX pedIndex, BOOL bOnlyOnPavement)
STORE_PLAYER_PED_INFO(pedIndex)
STORE_PLAYER_PED_VARIATIONS(pedIndex)
// Grab the ped enum
enumCharacterList ePed = GET_PLAYER_PED_ENUMCLF(pedIndex)
IF IS_PLAYER_PED_PLAYABLE(ePed)
AND NOT IS_PED_INJURED(pedIndex)
IF NOT IS_PED_IN_ANY_VEHICLE(pedIndex)
VECTOR vSafePedCoord
IF GET_SAFE_COORD_FOR_PED(g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[ePed], bOnlyOnPavement, vSafePedCoord, GSC_FLAG_ONLY_NETWORK_SPAWN)
g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[ePed] = vSafePedCoord
ENDIF
ENDIF
ENDIF
ENDPROC
PROC SAFE_STORE_PLAYER_PED_INFONRM(PED_INDEX pedIndex, BOOL bOnlyOnPavement)
STORE_PLAYER_PED_INFO(pedIndex)
STORE_PLAYER_PED_VARIATIONS(pedIndex)
// Grab the ped enum
enumCharacterList ePed = GET_PLAYER_PED_ENUMNRM(pedIndex)
IF IS_PLAYER_PED_PLAYABLE(ePed)
AND NOT IS_PED_INJURED(pedIndex)
IF NOT IS_PED_IN_ANY_VEHICLE(pedIndex)
VECTOR vSafePedCoord
IF GET_SAFE_COORD_FOR_PED(g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[ePed], bOnlyOnPavement, vSafePedCoord, GSC_FLAG_ONLY_NETWORK_SPAWN)
g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[ePed] = vSafePedCoord
ENDIF
ENDIF
ENDIF
ENDPROC
PROC SAFE_STORE_PLAYER_PED_INFO(PED_INDEX pedIndex, BOOL bOnlyOnPavement)
#if USE_CLF_DLC
if g_bLoadedClifford
SAFE_STORE_PLAYER_PED_INFOCLF(pedIndex,bOnlyOnPavement)
exit
endif
#endif
#if USE_NRM_DLC
if g_bLoadedNorman
SAFE_STORE_PLAYER_PED_INFONRM(pedIndex,bOnlyOnPavement)
exit
endif
#endif
STORE_PLAYER_PED_INFO(pedIndex)
STORE_PLAYER_PED_VARIATIONS(pedIndex)
// Grab the ped enum
enumCharacterList ePed = GET_PLAYER_PED_ENUM(pedIndex)
IF IS_PLAYER_PED_PLAYABLE(ePed)
AND NOT IS_PED_INJURED(pedIndex)
IF NOT IS_PED_IN_ANY_VEHICLE(pedIndex)
VECTOR vSafePedCoord
IF GET_SAFE_COORD_FOR_PED(g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[ePed], bOnlyOnPavement, vSafePedCoord, GSC_FLAG_ONLY_NETWORK_SPAWN)
g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[ePed] = vSafePedCoord
ENDIF
ENDIF
ENDIF
ENDPROC
ENUM enumBlockedPedCoordZone
BPCZ_0_DJBooth,
BPCZ_1_Bar,
BPCZ_2_impound,
BPCZ_3_mineshaft,
BPCZ_4_hospital,
BPCZ_5_janitor,
BPCZ_6_arena_a,
BPCZ_7_arena_b,
BPCZ_8_omegagarage,
BPCZ_NULL = -1
ENDENUM
FUNC BOOL Is_Ped_Last_Known_Coords_In_Blocked_Zone(VECTOR vLastKnownCoords, VECTOR &vCreateCoords, FLOAT &fCreateHead, enumBlockedPedCoordZone &eZone)
IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-254.8389, -2026.9094, 29.0359>>, <<-394.2681, -1909.8342, 48.9460>>, 122.5000)
VECTOR vTestDefaultPedToCoors1 = <<-254.8389, -2026.9094, 29.0359>>
VECTOR vTestDefaultPedToCoors2 = <<-394.2681, -1909.8342, 48.9460>>
FLOAT fTestDefaultPedToDistance = 122.5000
VECTOR vBuyMidPos = ((vTestDefaultPedToCoors1*1.0)+(vTestDefaultPedToCoors2*1.0))/2.0
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(),
vTestDefaultPedToCoors1,
<<vBuyMidPos.x, vBuyMidPos.y, vTestDefaultPedToCoors2.z>>,
fTestDefaultPedToDistance)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //arena - A")
vCreateCoords = <<-231.1906, -1995.7928, 28.9460>>
fCreateHead = 256.7039
eZone = BPCZ_6_arena_a
RETURN TRUE
ENDIF
IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(),
<<vBuyMidPos.x, vBuyMidPos.y, vTestDefaultPedToCoors1.z>>,
vTestDefaultPedToCoors2,
fTestDefaultPedToDistance)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //arena - B")
vCreateCoords = <<-342.9800, -1879.6520, 28.9463>>
fCreateHead = 353.8719
eZone = BPCZ_7_arena_b
RETURN TRUE
ENDIF
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //arena - ourside?")
vCreateCoords = <<-342.9800, -1879.6520, 28.9463>>
fCreateHead = 353.8719
eZone = BPCZ_6_arena_a
RETURN TRUE
ENDIF
INT iPlayerHashKey = GET_ROOM_KEY_FROM_ENTITY(PLAYER_PED_ID())
SWITCH iPlayerHashKey
CASE HASH("strp3mainrm") //stripclub
IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<127.180801,-1277.321533,28.330606>>, <<120.222549,-1281.544556,31.230530>>, 4.000000)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"strp3mainrm\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //DJ Booth")
vCreateCoords = <<118.3254, -1284.7686, 27.2739>>
fCreateHead = 16.7668
eZone = BPCZ_0_DJBooth
RETURN TRUE
ElIF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<132.836960,-1287.936401,28.269539>>, <<127.832428,-1279.579102,31.019539>>, 4.000000)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"strp3mainrm\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //Bar")
vCreateCoords = <<127.1327, -1283.6587, 28.2788>>
fCreateHead = 255.9372
eZone = BPCZ_1_Bar
RETURN TRUE
ELSE
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"strp3mainrm\"): vLastKnownCoords ", vLastKnownCoords, " not inside any zone...")
ENDIF
BREAK
// mine shaft
CASE HASH("GtaMloRoom001")
CASE HASH("GtaMloRoom002")
CASE HASH("GtaMloRoom003")
CASE HASH("GtaMloRoom004")
CASE HASH("GtaMloRoom005")
CASE HASH("GtaMloRoom006")
CASE HASH("GtaMloRoom007")
CASE HASH("GtaMloRoom008")
IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-415.436462, 2068.288574, 113.300171>>, <<-564.951599, 1884.702515, 134.040344>>, 258.750000)
OR IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-596.470581, 2089.920898, 125.412750>>, <<-581.213440, 2036.256104, 136.283630>>, 9.500000)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //mine shaft")
vCreateCoords = <<-598.9213, 2096.5286, 129.8140>>
fCreateHead = 25.7278
eZone = BPCZ_3_mineshaft
RETURN TRUE
ENDIF
BREAK
CASE 262728566
CASE HASH("JanitorRoom")
CASE HASH("v_janitor")
IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-112.713043,-14.207236,69.519592>>, <<-109.529243,-5.697598,72.421684>>, 6.000000)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"v_janitor\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //janitor")
vCreateCoords = <<-105.0006, -8.0130, 69.5234>>
fCreateHead = 247.4701
eZone = BPCZ_5_janitor
RETURN TRUE
ELSE
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"v_janitor\"): vLastKnownCoords ", vLastKnownCoords, " not inside any zone...")
ENDIF
BREAK
CASE -696774531
CASE HASH("v_hospital")
CASE HASH("V_40_Room1")
IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<357.031708,-590.516602,27.898069>>, <<300.431946,-569.354431,51.659721>>, 28.500000)
OR IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<299.740100,-584.831900,27.898069>>, <<328.305800,-595.862100,51.659721>>, 28.500000)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"v_hospital\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //hospital")
vCreateCoords = <<360.4663, -585.1340, 27.8231>>
fCreateHead = 254.2763
eZone = BPCZ_4_hospital
RETURN TRUE
ELSE
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"v_hospital\"): vLastKnownCoords ", vLastKnownCoords, " not inside any zone...")
ENDIF
BREAK
CASE 0
CASE HASH("") //non-interior
IF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<428.292847,-996.683411,24.488642>>, <<439.543823,-996.711365,28.103334>>, 8.687500)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //impound")
vCreateCoords = <<433.8454, -1011.9464, 27.7057>>
fCreateHead = 196.3176
eZone = BPCZ_2_impound
RETURN TRUE
ELIF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<2331.647461,2575.777100,45.667671>>, <<2326.452148,2564.805908,49.703575>>, 5.000000)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //omega garage")
vCreateCoords = <<2332.6953, 2577.6816, 45.6677>>
fCreateHead = 321.4395
eZone = BPCZ_8_omegagarage
RETURN TRUE
// mine shaft in case the interior hasn't loaded in
ELIF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-415.436462, 2068.288574, 113.300171>>, <<-564.951599, 1884.702515, 134.040344>>, 258.750000)
OR IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-596.470581, 2089.920898, 125.412750>>, <<-581.213440, 2036.256104, 136.283630>>, 9.500000)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //mine shaft")
vCreateCoords = <<-598.9213, 2096.5286, 129.8140>>
fCreateHead = 25.7278
eZone = BPCZ_3_mineshaft
RETURN TRUE
ELIF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<357.031708,-590.516602,27.898069>>, <<300.431946,-569.354431,51.659721>>, 28.500000)
OR IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<299.740100,-584.831900,27.898069>>, <<328.305800,-595.862100,51.659721>>, 28.500000)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //hospital")
vCreateCoords = <<360.4663, -585.1340, 27.8231>>
fCreateHead = 254.2763
eZone = BPCZ_4_hospital
RETURN TRUE
ELIF IS_POINT_IN_ANGLED_AREA(vLastKnownCoords, <<-112.713043,-14.207236,69.519592>>, <<-109.529243,-5.697598,72.421684>>, 6.000000)
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " inside blocked zone //janitor")
vCreateCoords = <<-105.0006, -8.0130, 69.5234>>
fCreateHead = 247.4701
eZone = BPCZ_5_janitor
RETURN TRUE
ELSE
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"\"): vLastKnownCoords ", vLastKnownCoords, " not inside any zone...")
eZone = BPCZ_NULL
RETURN FALSE
ENDIF
BREAK
DEFAULT
PRINTLN("Is_Ped_Last_Known_Coords_In_Blocked_Zone(\"", DEBUG_get_string_room_hash_key(iPlayerHashKey), "\"): vLastKnownCoords ", vLastKnownCoords, " not inside a specified zone...")
eZone = BPCZ_NULL
RETURN FALSE
BREAK
ENDSWITCH
eZone = BPCZ_NULL
RETURN FALSE
ENDFUNC
FUNC BOOL PRIVATE_Should_Default_PedTo_Coord_Move(PED_SCENE_STRUCT &sPedScene, VECTOR &vCreateCoords, FLOAT &fCreateHead)
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
enumCharacterList eSelectorChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.eSelectorPed)
IF DOES_ENTITY_EXIST(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
//
ELSE
#if USE_CLF_DLC
VECTOR vLastKnownCoords = g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[eSelectorChar]
TIMEOFDAY sLastTimeActive = g_savedGlobalsClifford.sPlayerData.sInfo.sLastTimeActive[eSelectorChar]
#endif
#if USE_NRM_DLC
VECTOR vLastKnownCoords = g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[eSelectorChar]
TIMEOFDAY sLastTimeActive = g_savedGlobalsnorman.sPlayerData.sInfo.sLastTimeActive[eSelectorChar]
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
VECTOR vLastKnownCoords = g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[eSelectorChar]
TIMEOFDAY sLastTimeActive = g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[eSelectorChar]
#endif
#endif
VECTOR vTestCreateCoords
FLOAT fTestCreateHead
enumBlockedPedCoordZone eTestCreateZone
IF Is_Ped_Last_Known_Coords_In_Blocked_Zone(vLastKnownCoords, vTestCreateCoords, fTestCreateHead, eTestCreateZone)
#IF NOT IS_NEXTGEN_BUILD
PRINTLN("PRIVATE_Should_Default_PedTo_Coord_Move: vLastKnownCoords ", vLastKnownCoords, " inside invalid zone \"", eTestCreateZone, "\", move to ", vTestCreateCoords, ", dist: ", VDIST(vCreateCoords, vTestCreateCoords), "m")
#ENDIF
#IF IS_NEXTGEN_BUILD
CPRINTLN(DEBUG_SWITCH, "PRIVATE_Should_Default_PedTo_Coord_Move: vLastKnownCoords ", vLastKnownCoords, " inside invalid \"", eTestCreateZone, "\", move to ", vTestCreateCoords, ", dist: ", VDIST(vCreateCoords, vTestCreateCoords), "m")
#ENDIF
vCreateCoords = vTestCreateCoords
fCreateHead = fTestCreateHead
RETURN TRUE
ENDIF
IF Is_TIMEOFDAY_Valid(sLastTimeActive)
FLOAT fCreateDistMultiplier
SWITCH PRIVATE_GetRoamingLastKnownSwitchStage(eSelectorChar, sLastTimeActive, fCreateDistMultiplier)
CASE 0
//
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 0.1 - as was (phase:")
SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier)
SAVE_STRING_TO_DEBUG_FILE(")")
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 0.1 - as was (phase:", fCreateDistMultiplier, ")")
RETURN FALSE
BREAK
CASE 1
IF g_ePlayerLastVehState[eSelectorChar] = PTVS_0_noVehicle
OR g_ePlayerLastVehState[eSelectorChar] = PTVS_1_playerWithVehicle
IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_a, <<0,0,0>>, 1.5)
vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_a
fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fWalkHead_a
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 0.33 - walk A (phase:")
SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier)
SAVE_STRING_TO_DEBUG_FILE(")")
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 0.33 - walk A (phase:", fCreateDistMultiplier, ")")
RETURN TRUE
ENDIF
ELSE
IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_a, <<0,0,0>>, 1.5)
vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_a
fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fVehicleHead_a
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 0.33 - vehicle A (phase:")
SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier)
SAVE_STRING_TO_DEBUG_FILE(")")
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 0.33 - vehicle A (phase:", fCreateDistMultiplier, ")")
RETURN TRUE
ENDIF
ENDIF
BREAK
CASE 2
IF g_ePlayerLastVehState[eSelectorChar] = PTVS_0_noVehicle
OR g_ePlayerLastVehState[eSelectorChar] = PTVS_1_playerWithVehicle
IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_b, <<0,0,0>>, 1.5)
vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_b
fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fWalkHead_b
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 0.66 - walk B (phase:")
SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier)
SAVE_STRING_TO_DEBUG_FILE(")")
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 0.66 - walk B (phase:", fCreateDistMultiplier, ")")
RETURN TRUE
ENDIF
ELSE
IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_b, <<0,0,0>>, 1.5)
vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_b
fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fVehicleHead_b
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 0.66 - vehicle B (phase:")
SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier)
SAVE_STRING_TO_DEBUG_FILE(")")
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 0.66 - vehicle B (phase:", fCreateDistMultiplier, ")")
RETURN TRUE
ENDIF
ENDIF
BREAK
CASE 3
IF g_ePlayerLastVehState[eSelectorChar] = PTVS_0_noVehicle
OR g_ePlayerLastVehState[eSelectorChar] = PTVS_1_playerWithVehicle
IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_c, <<0,0,0>>, 1.5)
vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vWalkCoord_c
fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fWalkHead_c
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 1.0 - walk C (phase:")
SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier)
SAVE_STRING_TO_DEBUG_FILE(")")
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 1.0 - walk C (phase:", fCreateDistMultiplier, ")")
RETURN TRUE
ENDIF
ELSE
IF NOT ARE_VECTORS_ALMOST_EQUAL(g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_c, <<0,0,0>>, 1.5)
vCreateCoords = g_sDefaultPlayerSwitchState[eSelectorChar].vVehicleCoord_c
fCreateHead = g_sDefaultPlayerSwitchState[eSelectorChar].fVehicleHead_c
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("fCreateDistMultiplier < 1.0 - vehicle C (phase:")
SAVE_FLOAT_TO_DEBUG_FILE(fCreateDistMultiplier)
SAVE_STRING_TO_DEBUG_FILE(")")
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
CPRINTLN(DEBUG_SWITCH, "fCreateDistMultiplier < 1.0 - vehicle C (phase:", fCreateDistMultiplier, ")")
RETURN TRUE
ENDIF
ENDIF
BREAK
DEFAULT
CASSERTLN(DEBUG_SWITCH, "unknown PRIVATE_GetRoamingLastKnownSwitchStage")
BREAK
ENDSWITCH
CPRINTLN(DEBUG_SWITCH, "fallen through PRIVATE_Should_Default_PedTo_Coord_Move(phase:", fCreateDistMultiplier, ", PTVS_", ENUM_TO_INT(g_ePlayerLastVehState[eSelectorChar]), "_something)???")
RETURN FALSE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL PRIVATE_Should_PedTo_Be_Created(PED_SCENE_STRUCT &sPedScene, BOOL InHereAsNoCHARACTER = FALSE)
enumCharacterList eSelectorChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.eSelectorPed)
IF IS_PED_INJURED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
#IF IS_DEBUG_BUILD
IF DOES_ENTITY_EXIST(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
CPRINTLN(DEBUG_SWITCH, "Should_PedTo_Be_Created [SELECTOR_", GET_PLAYER_PED_STRING(eSelectorChar), "] ", "- exists")
ELSE
MODEL_NAMES model = GET_PLAYER_PED_MODEL(sPedScene.ePed)
IF HAS_MODEL_LOADED(model)
CPRINTLN(DEBUG_SWITCH, "Should_PedTo_Be_Created [SELECTOR_", GET_PLAYER_PED_STRING(eSelectorChar), "] ", "- doesnt exist [", sPedScene.vCreateCoords, "] model \"", GET_MODEL_NAME_FOR_DEBUG(model), "\" loaded")
ELSE
CPRINTLN(DEBUG_SWITCH, "Should_PedTo_Be_Created [SELECTOR_", GET_PLAYER_PED_STRING(eSelectorChar), "] ", "- doesnt exist [", sPedScene.vCreateCoords, "] model \"", GET_MODEL_NAME_FOR_DEBUG(model), "\" NOT loaded!!!")
ENDIF
ENDIF
#ENDIF
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
IF DOES_ENTITY_EXIST(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
//
ELSE
#if USE_CLF_DLC
TIMEOFDAY sLastTimeActive = g_savedGlobalsClifford.sPlayerData.sInfo.sLastTimeActive[sPedScene.eSelectorPed]
#endif
#if USE_NRM_DLC
TIMEOFDAY sLastTimeActive = g_savedGlobalsnorman.sPlayerData.sInfo.sLastTimeActive[sPedScene.eSelectorPed]
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
TIMEOFDAY sLastTimeActive = g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[sPedScene.eSelectorPed]
#endif
#endif
IF NOT IS_SPHERE_VISIBLE(sPedScene.vCreateCoords, 3.0)
ELSE
CPRINTLN(DEBUG_SWITCH, "vCreateCoords [", sPedScene.vCreateCoords)
IF Is_TIMEOFDAY_Valid(sLastTimeActive)
INT iSeconds, iMinutes, iHours, iDays, iMonths, iYears
GET_DIFFERENCE_BETWEEN_NOW_AND_TIMEOFDAY(sLastTimeActive, iSeconds, iMinutes, iHours, iDays, iMonths, iYears)
FLOAT fCreateDistMultiplier = -1
IF HasNumOfHoursPassedSincePedTimeStruct(sLastTimeActive, g_iCONST_GAME_HOURS_FOR_DEFAULT_SWITCH)
CPRINTLN(DEBUG_SWITCH, " HasNumOfHoursPassedSincePedTimeStruct (", iHours, "hr ", iMinutes, "min ", iSeconds, "sec ", iDays, "/", iMonths, "/", iYears, ")")
fCreateDistMultiplier = 1.0
ELSE
CPRINTLN(DEBUG_SWITCH, " NOT HasNumOfHoursPassedSincePedTimeStruct (", iHours, "hr ", iMinutes, "min ", iSeconds, "sec ", iDays, "/", iMonths, "/", iYears, ")")
fCreateDistMultiplier = TO_FLOAT(iSeconds+(iMinutes*60)+(iHours*60*60)) / 3600.0
IF (fCreateDistMultiplier < 0.0) fCreateDistMultiplier = 0.0 ENDIF
IF (fCreateDistMultiplier > 1.0) fCreateDistMultiplier = 1.0 ENDIF
ENDIF
CPRINTLN(DEBUG_SWITCH, " fMult: ", fCreateDistMultiplier)
CONST_FLOAT fMinDist 10.0
CONST_FLOAT fMaxDist 100.0
FLOAT fCreateDistRadius =((fMaxDist-fMinDist)*fCreateDistMultiplier)+fMinDist
CPRINTLN(DEBUG_SWITCH, " fRadius: ", fCreateDistRadius)
INT iSafeCoordCount = 0
WHILE iSafeCoordCount < 5
DRAW_DEBUG_SPHERE(sPedScene.vCreateCoords, fCreateDistRadius, 255, 0, 0, 064)
VECTOR vRandomCreateCoords = GET_RANDOM_POINT_IN_DISC(sPedScene.vCreateCoords, fCreateDistRadius, 0)
VECTOR vSafeCreateCoords = vRandomCreateCoords
IF GET_SAFE_COORD_FOR_PED(vRandomCreateCoords, FALSE, vSafeCreateCoords, GSC_FLAG_ONLY_NETWORK_SPAWN)
IF NOT IS_SPHERE_VISIBLE(vSafeCreateCoords, 3.0)
FLOAT fSafeCreateCoord_groundZ = 0.0
IF GET_GROUND_Z_FOR_3D_COORD(vSafeCreateCoords, fSafeCreateCoord_groundZ)
DRAW_DEBUG_SPHERE(vSafeCreateCoords, 0.5, 255, 0, 255, 255)
vSafeCreateCoords.z = fSafeCreateCoord_groundZ
VECTOR vCreateCoordDiff = sPedScene.vCreateCoords - vSafeCreateCoords
sPedScene.vCreateCoords = vSafeCreateCoords
sPedScene.fCreateHead = GET_HEADING_FROM_VECTOR_2D(vCreateCoordDiff.x, vCreateCoordDiff.y)
iSafeCoordCount = 99
CPRINTLN(DEBUG_SWITCH, "vCreateCoords = vSafeCreateCoords??")
ENDIF
ELSE
DRAW_DEBUG_SPHERE(vSafeCreateCoords, 0.5, 255, 0, 255, 255)
ENDIF
ELSE
DRAW_DEBUG_SPHERE(vRandomCreateCoords, 0.5, 0, 255, 255, 255)
ENDIF
CPRINTLN(DEBUG_SWITCH, "iSafeCoordCount: ", iSafeCoordCount)
iSafeCoordCount++
ENDWHILE
ELSE
CPRINTLN(DEBUG_SWITCH, " NOT Is_TIMEOFDAY_Valid")
ENDIF
ENDIF
ENDIF
CPRINTLN(DEBUG_SWITCH, "")
ENDIF
IF InHereAsNoCHARACTER = TRUE
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), sPedScene.vCreateCoords, FALSE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "[SCENEWARP] PRIVATE_Should_PedTo_Be_Created - InHereAsNoCHARACTER = TRUE Player is still the NO_CHARACTER ped. Moving the player to be close to the scene. ", sPedScene.vCreateCoords, " ")
#ENDIF
ENDIF
ELSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "[SCENEWARP] PRIVATE_Should_PedTo_Be_Created - InHereAsNoCHARACTER = FALSE ", sPedScene.vCreateCoords, " ")
#ENDIF
ENDIF
RETURN TRUE
ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "NOT Should_PedTo_Be_Created [SELECTOR_", GET_PLAYER_PED_STRING(eSelectorChar), "]")
#ENDIF
STORE_VEH_DATA_FROM_PED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed],
g_sPlayerLastVeh[eSelectorChar],
g_vPlayerLastVehCoord[eSelectorChar],
g_fPlayerLastVehHead[eSelectorChar],
g_ePlayerLastVehState[eSelectorChar]
#IF USE_TU_CHANGES , g_ePlayerLastVehGen[eSelectorChar] #ENDIF )
RETURN FALSE
ENDFUNC
FUNC BOOL PRIVATE_Should_straightInterp_Be_Used(PED_SCENE_STRUCT &sPedScene)
VECTOR vPedPos = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo)
VECTOR vPlayerPos = GET_ENTITY_COORDS(PLAYER_PED_ID())
FLOAT fPedDist2D = GET_DISTANCE_BETWEEN_COORDS(vPlayerPos, vPedPos, FALSE)
FLOAT fPedDist3D = GET_DISTANCE_BETWEEN_COORDS(vPlayerPos, vPedPos, TRUE)
// // Determine what type of cam we will use
// IF eInterpType = SELECTOR_CAM_DEFAULT
IF fPedDist3D < 8.0
RETURN TRUE //sPedScene.sSelectorCam.camType = SELECTOR_CAM_STRAIGHT_INTERP
ELIF fPedDist2D < 30.0
RETURN FALSE //sPedScene.sSelectorCam.camType = SELECTOR_CAM_SHORT_SPLINE
ELSE
RETURN FALSE //sPedScene.sSelectorCam.camType = SELECTOR_CAM_LONG_SPLINE
ENDIF
// ELSE
// sPedScene.sSelectorCam.camType = eInterpType
// ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL PRIVATE_SetPlayerPedWanted(PED_SCENE_STRUCT &sPedScene)
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
RETURN FALSE
ENDIF
UPDATE_WANTED_POSITION_THIS_FRAME(PLAYER_ID())
SWITCH sPedScene.eScene
CASE PR_SCENE_M_DEFAULT
CASE PR_SCENE_F_DEFAULT
CASE PR_SCENE_T_DEFAULT
RESTORE_PLAYER_PED_WANTED(PLAYER_PED_ID())
RETURN TRUE
BREAK
CASE PR_SCENE_T_CR_POLICE_a
CASE PR_SCENE_T_CN_POLICE_b
CASE PR_SCENE_T_CN_POLICE_c
CONST_INT iSCENE_WANTED_LEVEL 2 //3
SET_PLAYER_WANTED_LEVEL_NO_DROP(PLAYER_ID(), iSCENE_WANTED_LEVEL)
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
CPRINTLN(DEBUG_SWITCH, "<player_ped_scenes> * set wanted level on players vehicle")
RETURN TRUE
BREAK
DEFAULT
#IF IS_DEBUG_BUILD
IF IS_PED_INJURED(PLAYER_PED_ID())
TEXT_LABEL_63 sDead
sDead = "PRIVATE_SetPlayerPedWanted: "
sDead += Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)
sDead += " health: "
sDead += GET_ENTITY_HEALTH(PLAYER_PED_ID())
CASSERTLN(DEBUG_SWITCH, sDead)
ENDIF
#ENDIF
CLEAR_PLAYER_WANTED_LEVEL(PLAYER_ID())
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
RETURN FALSE
BREAK
ENDSWITCH
RETURN FALSE
ENDFUNC
VECTOR vTOD_cam_from = <<0,0,0>>, vTOD_cam_to = <<0,0,0>>
INT iTOD_cam_gametime = -1
FUNC BOOL PRIVATE_SetPhaseTimeForNewSwitchCam(PED_SCENE_STRUCT &sPedScene, FLOAT &fSwitchPhase)
VECTOR vPedFrom_coord = vTOD_cam_from
VECTOR vPedTo_coord = vTOD_cam_to
IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorCam.pedFrom)
vTOD_cam_from = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom)
vPedFrom_coord = vTOD_cam_from
ENDIF
IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorCam.pedTo)
vTOD_cam_to = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo)
vPedTo_coord = vTOD_cam_to
ENDIF
VECTOR vRendering_coord = GET_FINAL_RENDERED_CAM_COORD() //GET_CAM_COORD(GET_RENDERING_CAM())
FLOAT fFromTo_dist = GET_DISTANCE_BETWEEN_COORDS(vPedFrom_coord, vPedTo_coord, FALSE)
FLOAT fFromRend_dist = GET_DISTANCE_BETWEEN_COORDS(vPedFrom_coord, vRendering_coord, FALSE)
fSwitchPhase = fFromRend_dist / fFromTo_dist
IF fSwitchPhase < 0
fSwitchPhase = 0
ENDIF
IF fSwitchPhase > 1
fSwitchPhase = 1
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL PRIVATE_SetPhaseTimeForMpSwitchCam(FLOAT &fSwitchPhase, FLOAT time = 5.0)
INT iGameTime = GET_GAME_TIMER()
IF iTOD_cam_gametime = -1
iTOD_cam_gametime = iGameTime
ENDIF
INT iGameTimeDiff = iGameTime - iTOD_cam_gametime
fSwitchPhase = TO_FLOAT(iGameTimeDiff) / (time*1000.0)
IF fSwitchPhase < 0
fSwitchPhase = 0
ENDIF
IF fSwitchPhase > 1
fSwitchPhase = 1
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL PRIVATE_SetClockTimeForSwitchScene(PED_SCENE_STRUCT &sPedScene)
#if USE_CLF_DLC
UNUSED_PARAMETER(sPedScene)
#endif
#if USE_NRM_DLC
UNUSED_PARAMETER(sPedScene)
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
PED_REQUEST_SCENE_ENUM eScene = sPedScene.eScene
sPedScene.sTimelapse.splineCamera = sPedScene.sSelectorCam.camID
FLOAT fForceCameraPhase
SWITCH eScene
#IF NOT IS_JAPANESE_BUILD
CASE PR_SCENE_T_SHIT
IF g_bMagDemoActive
IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase)
RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(19, 0, "EXTRASUNNY", "Cirrus", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0)
ENDIF
ENDIF
BREAK
#ENDIF
CASE PR_SCENE_F_MD_KUSH_DOC
IF g_bMagDemoActive
IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase)
RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(9, 0, "Overcast", "RAIN", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0)
ENDIF
ENDIF
BREAK
CASE PR_SCENE_M_MD_FBI2
IF g_bMagDemoActive
IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase)
RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(19, 45, "SMOG", "Wispy", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0)
ENDIF
ENDIF
BREAK
CASE PR_SCENE_M4_EXITRESTAURANT
IF g_bMagDemoActive
IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase)
RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(22, 0, "SMOG", "", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0)
ENDIF
ENDIF
BREAK
CASE PR_SCENE_T_NAKED_ISLAND
IF g_bMagDemoActive
IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase)
RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(18, 0, "SMOG", "", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0)
ENDIF
ENDIF
BREAK
CASE PR_SCENE_F_MD_FRANKLIN2
IF g_bMagDemoActive
IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase)
RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(22, 0, "SMOG", "", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0)
ENDIF
ENDIF
BREAK
CASE PR_SCENE_M_S_FAMILY4
IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase)
INT iLapseStartHour, iLapseEndHour
GET_SP_MISSION_TOD_WINDOW_TIME(SP_MISSION_FAMILY_4, iLapseEndHour, iLapseStartHour)
RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(iLapseStartHour, 0, "", "", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0)
ENDIF
BREAK
CASE PR_SCENE_F_S_EXILE2
IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase)
INT iLapseStartHour, iLapseEndHour
GET_SP_MISSION_TOD_WINDOW_TIME(SP_MISSION_EXILE_2, iLapseEndHour, iLapseStartHour)
RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(iLapseStartHour, 0, "", "", sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0)
ENDIF
BREAK
// CASE PR_SCENE_F_S_AGENCY_2A
// IF PRIVATE_SetPhaseTimeForNewSwitchCam(sPedScene, fForceCameraPhase)
// RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(9, 0, "", "", sPedScene.sTimelapse.iTimelapseCut)
// ENDIF
// BREAK
ENDSWITCH
IF IS_TIMEOFDAY_VALID(g_sMultiplayerTransitionTOD)
INT iHour = GET_TIMEOFDAY_HOUR(g_sMultiplayerTransitionTOD)
INT iMinute = GET_TIMEOFDAY_MINUTE(g_sMultiplayerTransitionTOD)
STRING tWeatherType = ""
STRING tCloudHat = ""
IF NOT IS_WEATHER_SAFE_FOR_SP()
CASSERTLN(DEBUG_SWITCH, "PRIVATE_SetClockTimeForSwitchScene - unsafe weather for MP transition!!!")
tWeatherType = "SMOG"
ENDIF
IF PRIVATE_SetPhaseTimeForMpSwitchCam(fForceCameraPhase, 5.0)
RETURN SKIP_TO_TIME_DURING_SPLINE_CAMERA(iHour, iMinute, tWeatherType, tCloudHat, sPedScene.sTimelapse, fForceCameraPhase, DEFAULT, DEFAULT, 5.0)
ENDIF
ELSE
IF NOT IS_WEATHER_SAFE_FOR_SP()
CASSERTLN(DEBUG_SWITCH, "PRIVATE_SetClockTimeForSwitchScene - unsafe weather for SP transition???")
ENDIF
ENDIF
#endif
#endif
RETURN FALSE
ENDFUNC
FUNC BOOL PRIVATE_UpdateDrunkenPeds()
Make_Ped_Sober(PLAYER_PED_ID())
Quit_Drunk_Camera_Immediately()
RETURN TRUE
ENDFUNC
FUNC BOOL PRIVATE_UpdateLastSceneQueueCLF(enumCharacterList ePed, PED_REQUEST_SCENE_ENUM eScene)
INT iRevQueue = g_iCOUNT_OF_LAST_SCENE_QUEUE-1
WHILE (iRevQueue > 0)
g_savedGlobalsClifford.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue] = g_savedGlobalsClifford.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue-1]
iRevQueue--
ENDWHILE
g_savedGlobalsClifford.sPlayerSceneData.g_eLastSceneQueue[ePed][0] = eScene
INT iOneOffBit
IF GET_ONE_OFF_BIT_FOR_PED_REQUEST_SCENE(eScene, iOneOffBit)
SET_BIT(g_savedGlobalsClifford.sPlayerSceneData.g_iSeenOneOffSceneBit, iOneOffBit)
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL PRIVATE_UpdateLastSceneQueueNRM(enumCharacterList ePed, PED_REQUEST_SCENE_ENUM eScene)
INT iRevQueue = g_iCOUNT_OF_LAST_SCENE_QUEUE-1
WHILE (iRevQueue > 0)
g_savedGlobalsnorman.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue] = g_savedGlobalsnorman.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue-1]
iRevQueue--
ENDWHILE
g_savedGlobalsnorman.sPlayerSceneData.g_eLastSceneQueue[ePed][0] = eScene
INT iOneOffBit
IF GET_ONE_OFF_BIT_FOR_PED_REQUEST_SCENE(eScene, iOneOffBit)
SET_BIT(g_savedGlobalsnorman.sPlayerSceneData.g_iSeenOneOffSceneBit, iOneOffBit)
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL PRIVATE_UpdateLastSceneQueue(enumCharacterList ePed, PED_REQUEST_SCENE_ENUM eScene)
#if USE_CLF_DLC
if g_bLoadedClifford
return PRIVATE_UpdateLastSceneQueueCLF(ePed,eScene)
endif
#endif
#if USE_NRM_DLC
if g_bLoadedNorman
return PRIVATE_UpdateLastSceneQueueNRM(ePed,eScene)
endif
#endif
INT iRevQueue = g_iCOUNT_OF_LAST_SCENE_QUEUE-1
WHILE (iRevQueue > 0)
g_SavedGlobals.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue] = g_SavedGlobals.sPlayerSceneData.g_eLastSceneQueue[ePed][iRevQueue-1]
iRevQueue--
ENDWHILE
g_SavedGlobals.sPlayerSceneData.g_eLastSceneQueue[ePed][0] = eScene
INT iOneOffBit
IF GET_ONE_OFF_BIT_FOR_PED_REQUEST_SCENE(eScene, iOneOffBit)
SET_BIT(g_SavedGlobals.sPlayerSceneData.g_iSeenOneOffSceneBit, iOneOffBit)
ENDIF
RETURN TRUE
ENDFUNC
FUNC BOOL PRIVATE_UpdateChainedPostMissionSwitch(enumCharacterList ePed)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FAMILY6)
UpdatePostMissionInfo(g_savedGlobals.sPlayerData.sInfo, CHAR_MICHAEL, PR_SCENE_Ma_FAMILY6)
RETURN TRUE
ENDIF
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALEC)
UpdatePostMissionInfo(g_savedGlobals.sPlayerData.sInfo, CHAR_MICHAEL, PR_SCENE_Ma_FINALEC)
UpdatePostMissionInfo(g_savedGlobals.sPlayerData.sInfo, CHAR_FRANKLIN, PR_SCENE_Fa_FINALEC)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL PRIVATE_UpdatePostMissionSwitch(enumCharacterList ePed)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_STRIPCLUB_ARM3)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_PHONECALL_ARM3)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_ARM3)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_STRIPCLUB_FAM1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_PHONECALL_FAM1)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_STRIPCLUB_FAM3)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_PHONECALL_FAM3)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FAMILY1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FAMILY3)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI1)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FBI2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FAMILY1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI4intro)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FBI4intro)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI4)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FBI4)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FBI5)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FBI3)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI4)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI5)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FBI5)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FAMILY4_a)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FAMILY4_b)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FAMILY4)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_NICE1B)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_AGENCY1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_AGENCYprep1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_AGENCY3B)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_AGENCY2A)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_AGENCY3A)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_CARSTEAL1)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_CARSTEAL1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_CARSTEAL1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_CARSTEAL1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_AGENCY2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_CARSTEAL2)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_CARSTEAL4)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FBI2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FBI4)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_DOCKS2B)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FAMILY6)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALEprepD)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FAMILY6)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_MARTIN1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_TREVOR3)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_TREVOR3)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FRANKLIN2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FRANKLIN2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FBI1end)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_MARTIN1)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_MARTIN1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_RURAL2A)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_RURAL2A)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_RC_MRSP2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_RURAL1)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_NICE2B)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_NICE2B)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_FTa_FRANKLIN1a)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_FTa_FRANKLIN1b)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_FTa_FRANKLIN1c)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_FTa_FRANKLIN1d)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_FTa_FRANKLIN1e)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FRANKLIN2)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FRANKLIN2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_EXILE2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_EXILE2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_EXILE3)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_EXILE3)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_MICHAEL2)
// OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_MICHAEL2)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_MICHAEL3)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_MICHAEL3)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_DOCKS2A)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_DOCKS2A)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FINALE1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALE1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_CARSTEAL4)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FINALE2intro)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALE2intro)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_DOCKS2B)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FINALE1)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_AGENCY3A)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FINALE2A)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALE2A)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FINALE2B)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALE2B)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FINALEA)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FINALEB)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ma_FINALEC)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Fa_FINALEC)
OR (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_Ta_FINALEC)
// TREVOR 3
IF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_TREVOR3)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_TREVOR3)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_TREVOR3)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_TREVOR3)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
ENDIF
// FRANKLIN 2
IF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FRANKLIN2)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FRANKLIN2)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FRANKLIN2)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FRANKLIN2)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
ENDIF
// EXILE 2
IF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_EXILE2)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_EXILE2)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_EXILE2)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_EXILE2)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
ENDIF
// CAR STEAL 1
IF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_CARSTEAL1)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_CARSTEAL1)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_CARSTEAL1)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_CARSTEAL1)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ENDIF
// FRANKLIN 1
IF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1a
// OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1b
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1c
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1d
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1e)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1a
// OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1b
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1c
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1d
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1e)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1a
// OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1b
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1c
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1d
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_FTa_FRANKLIN1e)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1a
// OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1b
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1c
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1d
OR g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_FTa_FRANKLIN1e)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ENDIF
// FBI 4 intro
IF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI4intro)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FBI4intro)
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FBI4intro)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI4intro)
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ENDIF
// FBI 4
IF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FBI4)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI4)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI4)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FBI4)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ENDIF
// FBI 5
IF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FBI5)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI5)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI5)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FBI5)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
ENDIF
// RURAL HEIST 2A
IF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_RURAL2A)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_RURAL2A)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_RURAL2A)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_RURAL2A)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ENDIF
// FBI 2
IF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI2)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FBI2)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FBI2)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FBI2)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ENDIF
// FINALE HEIST 2 intro
IF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALE2intro)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2intro)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2intro)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALE2intro)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ENDIF
// FINALE HEIST 2A
IF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALE2A)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2A)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2A)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALE2A)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
ENDIF
// FINALE HEIST 2B
IF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALE2B)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2B)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE2B)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALE2B)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
ENDIF
// FINALE C
IF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALEC)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALEC)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALEC)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_FINALEC)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
ENDIF
// MICHAEL 3
IF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_MICHAEL3)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_MICHAEL3)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_MICHAEL3)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_MICHAEL3)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ENDIF
// DOCKS 2a
IF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_DOCKS2A)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_DOCKS2A)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_DOCKS2A)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_DOCKS2A)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
ENDIF
// DOCKS 2b
IF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_DOCKS2B)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_DOCKS2B)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_DOCKS2B)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_DOCKS2B)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
ENDIF
// FINALE 1
IF (ePed = CHAR_MICHAEL)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_MA_FINALE1)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALE1)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE1)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_FRANKLIN)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALE1)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_MA_FINALE1)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE1)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_TREVOR])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_INVALID
ENDIF
ElIF (ePed = CHAR_TREVOR)
AND (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_TREVOR] = PR_SCENE_Ta_FINALE1)
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_MA_FINALE1)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_MICHAEL])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_INVALID
ENDIF
IF (g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_Fa_FINALE1)
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[CHAR_FRANKLIN])
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_FRANKLIN] = PR_SCENE_INVALID
ENDIF
ENDIF
g_ePostFranklin1Switch = POST_FRANKLIN1_NULL
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[ePed] = PR_SCENE_INVALID
RETURN TRUE
ENDIF
g_ePostFranklin1Switch = POST_FRANKLIN1_NULL
RETURN FALSE
ENDFUNC
FUNC BOOL RequestAnimDictForTimetableExitSceneCam(PED_REQUEST_SCENE_ENUM ePedScene)
TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix
IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(ePedScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix)
TEXT_LABEL_63 tPlayerAnimDict, tPlayerAnimLoop, tPlayerAnimOut
ANIMATION_FLAGS playerAnimLoopFlag, playerAnimOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(ePedScene,
tPlayerAnimDict, tPlayerAnimLoop, tPlayerAnimOut,
playerAnimLoopFlag, playerAnimOutFlag)// , ePlayerSceneAnimProgress)
REQUEST_ANIM_DICT(tPlayerAnimDict)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL RemoveAnimDictForTimetableExitSceneCam(PED_REQUEST_SCENE_ENUM ePedScene)
TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix
IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(ePedScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix)
TEXT_LABEL_63 tPlayerAnimDict, tPlayerAnimLoop, tPlayerAnimOut
ANIMATION_FLAGS playerAnimLoopFlag, playerAnimOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(ePedScene,
tPlayerAnimDict, tPlayerAnimLoop, tPlayerAnimOut,
playerAnimLoopFlag, playerAnimOutFlag) //, ePlayerSceneAnimProgress)
REMOVE_ANIM_DICT(tPlayerAnimDict)
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL PRIVATE_UpdateSwitchFriendTimer(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene)
IF SETUP_PLAYER_TIMETABLE_FOR_SCENE(sPedScene, sPassedScene)
enumCharacterList ePlayerPed = sPedScene.ePed
enumCharacterList eFriendPed = sPassedScene.eSceneBuddy
IF eFriendPed < CHAR_BLANK_ENTRY
IF ARE_CHARS_FRIENDS(ePlayerPed, eFriendPed)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "reset switch friend face timer(", GetLabel_enumFriend(GET_FRIEND_FROM_CHAR(ePlayerPed)), ", ", GetLabel_enumFriend(GET_FRIEND_FROM_CHAR(eFriendPed)), ")")
#ENDIF
enumFriendContactType contactType = FRIEND_CONTACT_FACE
RESET_FRIEND_LAST_CONTACT_TIMER(ePlayerPed, eFriendPed, contactType)
RETURN TRUE
ENDIF
ELSE
TEXT_LABEL tVoiceID
TEXT_LABEL tBuddyVoiceID
TEXT_LABEL tSceneSpeechBlock
TEXT_LABEL tSceneSpeechLabel
FLOAT fSceneSpeechPhase
IF SETUP_TIMETABLE_SPEECH_FOR_SCENE(sPedScene.eScene,
tVoiceID, tBuddyVoiceID, tSceneSpeechBlock, tSceneSpeechLabel,
fSceneSpeechPhase)
SWITCH GET_HASH_KEY(tBuddyVoiceID)
CASE HASH("AMANDA") eFriendPed = CHAR_AMANDA BREAK
CASE HASH("LAMAR") eFriendPed = CHAR_LAMAR BREAK
DEFAULT
RETURN FALSE
BREAK
ENDSWITCH
IF ARE_CHARS_FRIENDS(ePlayerPed, eFriendPed)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "reset switch friend phone timer(", GetLabel_enumFriend(GET_FRIEND_FROM_CHAR(ePlayerPed)), ", ", GetLabel_enumFriend(GET_FRIEND_FROM_CHAR(eFriendPed)), ")")
#ENDIF
enumFriendContactType contactType = FRIEND_CONTACT_PHONE
RESET_FRIEND_LAST_CONTACT_TIMER(ePlayerPed, eFriendPed, contactType)
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL PRIVATE_PlayerHasStartedNewScene(PED_SCENE_STRUCT &sPedScene)
IF NOT get_NOT_PlayerHasStartedNewScene()
//
ELSE
RETURN TRUE
ENDIF
FLOAT fSelectorCamSplinePhase = -1
IF (GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT)
#IF NOT USE_TU_CHANGES
fSelectorCamSplinePhase = GET_CAM_SPLINE_PHASE(sPedScene.sSelectorCam.camID)
#ENDIF
#IF USE_TU_CHANGES
fSelectorCamSplinePhase = TO_FLOAT(ENUM_TO_INT(GET_PLAYER_SWITCH_STATE())) / TO_FLOAT(ENUM_TO_INT(SWITCH_STATE_OUTRO))
#ENDIF
ENDIF
//
TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix
IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE: ", tPlayerSceneSyncAnimCam, ", camID phase: ", fSelectorCamSplinePhase)
#ENDIF
IF fSelectorCamSplinePhase >= 1.0
RETURN TRUE
ENDIF
RETURN FALSE
ENDIF
//
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "sPedScene.sSelectorCam.camID phase: ", fSelectorCamSplinePhase)
#ENDIF
IF fSelectorCamSplinePhase >= 0.95
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC PRIVATE_SET_Pause_Outro_Count(INT iNewPauseOnOutro)
CPRINTLN(DEBUG_SWITCH, "PRIVATE_SET_Pause_Outro_Count: ", iNewPauseOnOutro, " (current:", g_iPauseOnOutro, ")")
g_iPauseOnOutro = iNewPauseOnOutro
ENDPROC
PROC INCRAMENT_Pause_Outro_Count()
PRIVATE_SET_Pause_Outro_Count(g_iPauseOnOutro+1)
ENDPROC
PROC DECRAMENT_Pause_Outro_Count()
PRIVATE_SET_Pause_Outro_Count(g_iPauseOnOutro-1)
ENDPROC
PROC CLEAR_Pause_Outro_Count()
PRIVATE_SET_Pause_Outro_Count(0)
ENDPROC
INT iRequestSwitchInterior_count = 0
/// PURPOSE: Processes the basic ped scene.
/// This involves setting up a ped at the scene and then hotswapping to this ped.
FUNC BOOL GENERIC_PED_SCENECLF(PED_SCENE_STRUCT &sPedScene,
SceneGlobalFuncIndex customSetupSelectorCam,
SceneGlobalFunc customSetupScript, INT iSwitchFlags = 0)
IF NOT sPedScene.sSelectorCam.bPedSwitched
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT) //#582163
ENDIF
//Is the global wait timer at 0?
INT iGameTime = GET_GAME_TIMER()
IF iGameTime >= g_iGlobalWaitTime - 1000
ADD_GLOBAL_COMMUNICATION_DELAY(CC_DELAY_POST_AMBIENT_SWITCH / 3)
ENDIF
CONST_INT CONST_SWITCH_0_requestSwitch 0
CONST_INT CONST_SWITCH_1_initialiseSwitch 1
CONST_INT CONST_SWITCH_2_waitForInterior 2
CONST_INT CONST_SWITCH_3_setupPedTo 3
CONST_INT CONST_SWITCH_4_runCodeCam 4
CONST_INT CONST_TEST_SWITCH_5 5
CONST_INT CONST_TEST_SWITCH_6 6
PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene
VECTOR vPedAreaOffset = <<5,5,4>>
// // // // //
// stage 0: Request Switch
//
IF (sPedScene.iStage = CONST_SWITCH_0_requestSwitch)
m_enumMissionCandidateReturnValue eLaunchRequest
eLaunchRequest = Request_Mission_Launch(sPedScene.iMissionID,
MCTID_MUST_LAUNCH,
MISSION_TYPE_SWITCH, TRUE)
#IF IS_DEBUG_BUILD
SWITCH eLaunchRequest
CASE MCRET_DENIED
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "DENIED", "\" //", sPedScene.iMissionID)
BREAK
CASE MCRET_ACCEPTED
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "ACCEPTED", "\" //", sPedScene.iMissionID)
BREAK
CASE MCRET_PROCESSING
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "PROCESSING", "\" //", sPedScene.iMissionID)
BREAK
DEFAULT
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", ENUM_TO_INT(eLaunchRequest), "_unknown", "\" //", sPedScene.iMissionID)
BREAK
ENDSWITCH
#ENDIF
IF (eLaunchRequest = MCRET_ACCEPTED)
STAT_INCREMENT(SP_AMBIENT_SWITCH_COUNT, 1)
sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch
ENDIF
IF NOT (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch)
IF NOT (g_eRunningMission = SP_MISSION_NONE)
IF ARE_STRINGS_EQUAL(g_sMissionStaticData[g_eRunningMission].scriptName, GET_THIS_SCRIPT_NAME())
CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName = GET_THIS_SCRIPT_NAME()")
sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch
ELSE
CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName <> GET_THIS_SCRIPT_NAME()")
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "g_eRunningMission = SP_MISSION_NONE")
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch")
ENDIF
ENDIF
// // // // //
// stage 1: Request Switch
//
IF (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch)
sPedScene.sTimelapse.iTimelapseCut = 0
sPedScene.sTimelapse.iTimeSkipStage = 0
CLEAR_Pause_Outro_Count()
sPedScene.eSelectorPed = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(sPedScene.ePed)
IF GET_PLAYER_PED_POSITION_FOR_SCENE(sPedScene.eScene, sPedScene.vCreateCoords, sPedScene.fCreateHead, sPedScene.tCreateRoom)
DISABLE_CELLPHONE(TRUE)
VECTOR vCreateCoords
FLOAT fCreateHead
IF PRIVATE_Should_Default_PedTo_Coord_Move(sPedScene, vCreateCoords, fCreateHead)
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("updated sPedScene.vCreateCoords: ")
SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords)
SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(fCreateHead)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" old sPedScene.vCreateCoords: ")
SAVE_VECTOR_TO_DEBUG_FILE(sPedScene.vCreateCoords)
SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(sPedScene.fCreateHead)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" older vLastKnownCoords: ")
SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed])
SAVE_STRING_TO_DEBUG_FILE(", fLastKnownHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed])
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
#IF IS_DEBUG_BUILD
VECTOR vVehCoordsOffset
vVehCoordsOffset = g_vPlayerLastVehCoord[sPedScene.ePed] - g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]
#ENDIF
sPedScene.vCreateCoords = vCreateCoords
sPedScene.fCreateHead = fCreateHead
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE(" OLD g_vPlayerLastVehCoord: ")
SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed])
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" OLD vVehCoordsOffset: ")
SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed])
SAVE_STRING_TO_DEBUG_FILE(" - ")
SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed])
SAVE_STRING_TO_DEBUG_FILE(" = ")
SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset)
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = vCreateCoords
g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = fCreateHead
IF g_ePlayerLastVehState[sPedScene.ePed] = PTVS_2_playerInVehicle
g_vPlayerLastVehCoord[sPedScene.ePed] = vCreateCoords
g_fPlayerLastVehHead[sPedScene.ePed] = fCreateHead
ENDIF
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE(" NEWER vVehCoordsOffset: ")
SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset)
SAVE_STRING_TO_DEBUG_FILE(" + ")
SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords)
SAVE_STRING_TO_DEBUG_FILE(" = ")
SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed])
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
ENDIF
g_eSelectedPlayerCharScene = (sPedScene.eScene)
// Pin the interior into memory so the ped doesnt fall through the ground
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom)
ELSE
IF NOT IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords)
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords)
ELSE
sPedScene.roomInterior = NULL
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"")
ELSE
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", NONE")
ENDIF
#ENDIF
IF (sPedScene.roomInterior <> NULL)
IF NOT IS_INTERIOR_READY(sPedScene.roomInterior)
PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior)
ENDIF
ENDIF
IF (sPedScene.eScene = PR_SCENE_F_CS_CHECKSHOE)
OR (sPedScene.eScene = PR_SCENE_F_CS_WIPEHANDS)
OR (sPedScene.eScene = PR_SCENE_F_CS_WIPERIGHT)
SET_INTERIOR_CAPPED(INTERIOR_V_CHOPSHOP, FALSE)
ENDIF
RequestAnimDictForTimetableExitSceneCam(sPedScene.eScene)
VECTOR vecCamEndPos, vecCamEndRot
FLOAT vecCamEndFov
IF SETUP_PLAYER_CAMERA_FOR_SCENE(sPedScene.eScene, vecCamEndPos, vecCamEndRot, vecCamEndFov)
TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix
TEXT_LABEL tRecording_name
INT iRecording_num
FLOAT fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix)
OR GET_PLAYER_VEH_RECORDING_FOR_SCENE(sPedScene.eScene, tRecording_name, iRecording_num,
fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit)
OR SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam)
sPedScene.sSelectorCam.camTo = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE)
SET_CAM_COORD(sPedScene.sSelectorCam.camTo, vecCamEndPos)
SET_CAM_ROT(sPedScene.sSelectorCam.camTo, vecCamEndRot)
SET_CAM_FOV(sPedScene.sSelectorCam.camTo, vecCamEndFov)
// SET_CAM_FAR_CLIP(sPedScene.sSelectorCam.camTo, 800.0)
SET_PED_NON_CREATION_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset)
sPedScene.scenarioBlockID = ADD_SCENARIO_BLOCKING_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset)
CLEAR_AREA(vecCamEndPos, VMAG(vPedAreaOffset), TRUE)
ENDIF
ENDIF
INCRAMENT_Pause_Outro_Count() //for "player_timetable_scene"
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENECLF - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"")
#ENDIF
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script)
INCRAMENT_Pause_Outro_Count() //for sPlayerTimetableAdditional_script
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENECLF - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" addition")
#ENDIF
ENDIF
// Found a suitable scene
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "\n GENERIC_PED_SCENECLF - Scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is suitable")
SaveSuitablePedSceneStructToSwitchLog(sPedScene)
#ENDIF
g_eRecentlySelectedScene = sPedScene.eScene
enumCharacterList eCurrentPlayerPedEnum
eCurrentPlayerPedEnum = GET_CURRENT_PLAYER_PED_ENUMCLF()
IF eCurrentPlayerPedEnum != NO_CHARACTER
IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPlayerPedEnum])
FLOAT fPlayerLastVehEngineHealth, fPlayerLastVehPetrolTankHealth
fPlayerLastVehEngineHealth = GET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum])
fPlayerLastVehPetrolTankHealth = GET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum])
CONST_FLOAT fCONST_VEH_EXPLODE_HEALTH -1000.0
IF fPlayerLastVehEngineHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75)
SET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25)
ENDIF
IF fPlayerLastVehPetrolTankHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75)
SET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25)
ENDIF
ENDIF
STORE_VEH_DATA_FROM_PEDCLF(PLAYER_PED_ID(),
g_sPlayerLastVeh[eCurrentPlayerPedEnum],
g_vPlayerLastVehCoord[eCurrentPlayerPedEnum],
g_fPlayerLastVehHead[eCurrentPlayerPedEnum],
g_ePlayerLastVehState[eCurrentPlayerPedEnum] #IF USE_TU_CHANGES , g_ePlayerLastVehGen[eCurrentPlayerPedEnum] #ENDIF )
SAFE_STORE_PLAYER_PED_INFOCLF(PLAYER_PED_ID(), FALSE)
STORE_DEFAULT_PLAYER_SWITCH_STATE(PLAYER_PED_ID())
ENDIF
PRIVATE_ClearPrioritySwitchFlag(sPedScene.ePed, sPedScene.eScene)
iRequestSwitchInterior_count = 0
g_iLastSuccessfulAmbientLaunchTime = GET_GAME_TIMER()
SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 10.0)
REQUEST_MODEL(GET_PLAYER_PED_MODELCLF(sPedScene.ePed))
#IF IS_DEBUG_BUILD
IF PRIVATE_Should_PedTo_Be_Created(sPedScene)
WAIT(0)
ENDIF
#ENDIF
sPedScene.iStage = CONST_SWITCH_3_setupPedTo
ELSE
// Can't find suitable scene so bail out
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is not suitable")
#ENDIF
RETURN TRUE
ENDIF
ENDIF
// // // // //
// stage 2: Wait For Interior
//
IF (sPedScene.iStage = CONST_SWITCH_2_waitForInterior)
sPedScene.iStage = CONST_SWITCH_3_setupPedTo
iRequestSwitchInterior_count++
REQUEST_MODEL(GET_PLAYER_PED_MODELCLF(sPedScene.ePed))
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" isn't using new load scene [", iRequestSwitchInterior_count, "]...")
#ENDIF
// Make sure any interior is pinned before we proceed
IF sPedScene.roomInterior <> NULL
IF NOT IS_INTERIOR_READY(sPedScene.roomInterior)
PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior)
sPedScene.iStage = CONST_SWITCH_2_waitForInterior
IF iRequestSwitchInterior_count > 150
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" timeout waiting for a non-null interior to be ready", " //roomInterior:", NATIVE_TO_INT(sPedScene.roomInterior), ", iWaitCount:", iRequestSwitchInterior_count)
TEXT_LABEL_63 tScene, tAssert
tScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)
tAssert = GET_STRING_FROM_STRING(tScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(tScene))
tAssert += " - timeout waiting for a non-null interior to be ready"
CASSERTLN(DEBUG_SWITCH, tAssert)
#ENDIF
iRequestSwitchInterior_count = 0
// Pin the interior into memory so the ped doesnt fall through the ground
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom)
ELSE
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords)
ENDIF
#IF IS_DEBUG_BUILD
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"")
ELSE
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", NONE")
ENDIF
#ENDIF
sPedScene.iStage = CONST_SWITCH_3_setupPedTo
ENDIF
ENDIF
ENDIF
ENDIF
// // // // //
// stage 3: Setup Ped To
//
IF (sPedScene.iStage = CONST_SWITCH_3_setupPedTo)
IF sPedScene.eScene = PR_SCENE_HOSPITAL
enumCharacterList eSelectorChar
eSelectorChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.eSelectorPed)
#IF USE_TU_CHANGES
IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorPeds.pedID[eSelectorChar])
#ENDIF
IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar])
SET_PED_AS_NO_LONGER_NEEDED(sPedScene.sSelectorPeds.pedID[eSelectorChar])
ELSE
#IF IS_DEBUG_BUILD
STRING InstanceScript
INT InstanceId
InstanceScript = GET_ENTITY_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar], InstanceId)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]")
#ENDIF
ENDIF
#IF USE_TU_CHANGES
#IF IS_DEBUG_BUILD
ELSE
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] is dead??? #1816254")
#ENDIF
ENDIF
#ENDIF
sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] = NULL
sPedScene.eScene = PR_SCENE_HOSPITAL
ENDIF
IF PRIVATE_Should_PedTo_Be_Created(sPedScene)
// IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
// CPRINTLN(DEBUG_SWITCH, "MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 25.0)")
//
// MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 25.0)
// ENDIF
// Make a dummy ped so we can run cam spline to them
PED_VARIATION_STRUCT SVARIATIONS = g_savedGlobalsClifford.SPLAYERDATA.SINFO.SVARIATIONS[SPEDSCENE.ESELECTORPED]
IF CREATE_PLAYER_PED_ON_FOOTCLF(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], sPedScene.ePed, sPedScene.vCreateCoords, sPedScene.fCreateHead)
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom)
AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo)
AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) != SWITCH_TYPE_SHORT
g_savedGlobalsClifford.sPlayerData.sInfo.sVariations[sPedScene.eSelectorPed] = sVariations
ENDIF
ENDIF
PRELOAD_STORED_PLAYER_PED_VARIATIONCLF(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// Set invisible to avoid any popping issues
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
#IF IS_DEBUG_BUILD
enumCreateState eCreateState
IF SafeToCreatePlayerAmbientPedAtLastKnownLocation(sPedScene.ePed, eCreateState)
CPRINTLN(DEBUG_SWITCH, "safe to create")
ELSE
SWITCH eCreateState
CASE eCS_3_SWITCH_IN_PROGRESS CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_3_SWITCH_IN_PROGRESS") BREAK
CASE eCS_5_TOO_MANY_HOURS_PASSED CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_5_TOO_MANY_HOURS_PASSED") BREAK
CASE eCS_7_TOO_FAR_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_7_TOO_FAR_TO_CREATE") BREAK
CASE eCS_8_TOO_CLOSE_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_8_TOO_CLOSE_TO_CREATE") BREAK
CASE eCS_9_SPHERE_VISIBLE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_9_SPHERE_VISIBLE") BREAK
// CASE eCS_4_INVALID_LAST_TIME_ACTIVE FALLTHRU
// CASE eCS_6_INVALID_LAST_KNOWN_COORDS
// EXIT
// BREAK
CASE eCS_10_POST_MISSION_SWITCH CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_10_POST_MISSION_SWITCH") BREAK
CASE eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY") BREAK
CASE eCS_12_NEAR_MISSION_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_12_NEAR_MISSION_TRIGGER") BREAK
CASE eCS_13_LEADIN_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_13_LEADIN_TRIGGER") BREAK
CASE eCS_14_DIRECTOR_MODE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_14_DIRECTOR_MODE") BREAK
DEFAULT
CPRINTLN(DEBUG_SWITCH, "DON'T create ", ENUM_TO_INT(eCreateState))
BREAK
ENDSWITCH
ENDIF
#ENDIF
ELSE
SET_ENTITY_VISIBLE(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], FALSE)
ENDIF
// Freeze to avoid falling through the world
FREEZE_ENTITY_POSITION(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], TRUE)
// IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// ENDIF
FORCE_ROOM_FOR_SCENE_SELECTOR_PED(sPedScene)
sPedScene.sSelectorPeds.bInitialised = TRUE
sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed
sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - created player ped on foot for scene \"")
CPRINTLN(DEBUG_SWITCH, Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" ", sPedScene.vCreateCoords)
#ENDIF
g_iPausedOnOutroGametime = -1
Preload_SpecialMissionAssets(sPedScene.eScene)
IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom)
AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo)
AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) = SWITCH_TYPE_SHORT
INT iPreloadGametime
IF NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
iPreloadGametime = GET_GAME_TIMER()
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - start waiting for preload var")
WHILE (iPreloadGametime+0500) < GET_GAME_TIMER()
AND iPreloadGametime > 0
IF HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
iPreloadGametime = -1
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - gave up waiting for preload var")
ENDIF
WAIT(0)
ENDWHILE
IF NOT (iPreloadGametime = -1)
CASSERTLN(DEBUG_SWITCH, "wait for ped var preload")
ENDIF
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - finished waiting for preload var (", iPreloadGametime, ", ", GET_GAME_TIMER(), ")")
ENDIF
ENDIF
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE)
RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
sPedScene = CALL customSetupSelectorCam(sPedScene)
sPedScene.iStage = CONST_SWITCH_4_runCodeCam
ENDIF
ELSE
sPedScene.sSelectorPeds.bInitialised = TRUE
sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed
sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]
IF sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID() //#1565907
SET_ENTITY_AS_MISSION_ENTITY(sPedScene.sSelectorCam.pedTo, TRUE, TRUE)
ENDIF
// IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// ENDIF
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE)
CLEAR_AREA_OF_PROJECTILES(sPedScene.vCreateCoords, 10.0)
#IF IS_DEBUG_BUILD
VECTOR vPedToCoord = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - use global ped for scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"", vPedToCoord)
#ENDIF
IF NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo), 5.0)
AND NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, <<0,0,0>>, 5.0)
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
//
ELSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, " pedTo(", vPedToCoord, ") nowhere near vCreateCoords(", sPedScene.vCreateCoords, "): dist:", VDIST(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo)))
CPRINTLN(DEBUG_SWITCH, "\n\n\n pedTo nowhere near vCreateCoords??\n\n\n")
SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, sPedScene.vCreateCoords)
SET_ENTITY_HEADING(sPedScene.sSelectorCam.pedTo, sPedScene.fCreateHead)
#ENDIF
ENDIF
ENDIF
g_iPausedOnOutroGametime = -1
Preload_SpecialMissionAssets(sPedScene.eScene)
RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
sPedScene = CALL customSetupSelectorCam(sPedScene)
sPedScene.iStage = CONST_SWITCH_4_runCodeCam
ENDIF
ENDIF
// // // // //
// stage 4: Run Code Cam
//
IF (sPedScene.iStage = CONST_SWITCH_4_runCodeCam)
BOOL bCreateReplacementForPlayer, bKeepTasks
bCreateReplacementForPlayer = FALSE
bKeepTasks = FALSE
SWITCH_TYPE eSwitchType
eSwitchType = SWITCH_TYPE_AUTO
FLOAT fGameplayCamPitch, fGameplayCamHeading
fGameplayCamPitch = 0.0
fGameplayCamHeading = 0.0
BOOL bPauseBeforePan, bPauseBeforeOutro
bPauseBeforePan = FALSE
bPauseBeforeOutro = FALSE
GetSplineCamFromPlayerToPedParams(sPedScene,
bCreateReplacementForPlayer, bKeepTasks, eSwitchType,
fGameplayCamPitch, fGameplayCamHeading,
bPauseBeforePan, bPauseBeforeOutro, iSwitchFlags)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sLiteral
sLiteral = ""
STRING sScene
sScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)
HUD_COLOURS eHudColour
eHudColour = HUD_COLOUR_PURE_WHITE
#ENDIF
IF IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam)
sPedScene.tCreateRoom = tPlayerSceneProceduralCam
ENDIF
ENDIF
IF (sPedScene.eScene = PR_SCENE_F_S_EXILE2)
IF NOT bPauseBeforePan
CPRINTLN(DEBUG_SWITCH, "force pause on pan for exile2")
bPauseBeforePan = TRUE
ENDIF
ENDIF
// Use a long spline so we can delete the current character and dont see the new character pop into place
BOOL bRunning_switch_cam_from_player
bRunning_switch_cam_from_player = FALSE
IF NOT DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo)
IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED(sPedScene.sSelectorCam,
eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading,
bPauseBeforePan, bPauseBeforeOutro, sPedScene.tCreateRoom)
#IF IS_DEBUG_BUILD
sLiteral += ("switch cam \"")
sLiteral += GET_STRING_FROM_STRING(sScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(sScene))
sLiteral += ("\" from player to ped [g_iOutro:")
sLiteral += (g_iPauseOnOutro)
sLiteral += ("]")
#ENDIF
bRunning_switch_cam_from_player = TRUE
ENDIF
ELSE
// IF (g_fCamToPhase < 0)
// g_fCamToPhase = 0
// ENDIF
TEXT_LABEL_63 tEstabShot
tEstabShot = sPedScene.tCreateRoom
IF NOT IS_STRING_NULL_OR_EMPTY(tEstabShot)
TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix
GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix)
IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerSceneEstabShotSuffix)
tEstabShot += tPlayerSceneEstabShotSuffix
ENDIF
ENDIF
IF RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM(sPedScene.sSelectorCam,
sPedScene.sSelectorCam.camTo,
eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading,
bPauseBeforePan, bPauseBeforeOutro, tEstabShot)
#IF IS_DEBUG_BUILD
sLiteral += ("switch cam \"")
sLiteral += GET_STRING_FROM_STRING(sScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(sScene))
sLiteral += ("\" from player to cam [g_iOutro:")
sLiteral += (g_iPauseOnOutro)
sLiteral += ("]")
#ENDIF
bRunning_switch_cam_from_player = TRUE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF g_bDrawLiteralSceneString
SET_TEXT_SCALE(0.4, 0.4)
SET_TEXT_HUD_COLOUR(eHudColour, 127)
SET_TEXT_JUSTIFICATION(FONT_CENTRE)
SET_TEXT_OUTLINE()
DISPLAY_TEXT_WITH_LITERAL_STRING(0.5, 0.925 - 0.03, "STRING", sLiteral)
ENDIF
#ENDIF
IF bRunning_switch_cam_from_player
SWITCH_STATE eSwitchState, eSETUP_SCRIPT_SWITCH_STATE, eTAKE_CONTROL_SCRIPT_SWITCH_STATE
eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_ASCENT //SWITCH_STATE_JUMPCUT_DESCENT
eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_DESCENT
IF g_bMagDemoActive
eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN
eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN
ENDIF
IF (GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT)
eSwitchState = GET_PLAYER_SWITCH_STATE()
IF (eSwitchState = SWITCH_STATE_JUMPCUT_DESCENT) OR (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT)
#IF USE_TU_CHANGES
OR (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT
AND NOT (sPedScene.eScene = PR_SCENE_M_DEFAULT OR sPedScene.eScene = PR_SCENE_F_DEFAULT OR sPedScene.eScene = PR_SCENE_T_DEFAULT))
#ENDIF
IF (GET_PLAYER_SWITCH_JUMP_CUT_INDEX() = 0)
IF (g_iPauseOnOutro > 0)
IF (g_iPausedOnOutroGametime < 0)
g_iPausedOnOutroGametime = GET_GAME_TIMER()
ELSE
CPRINTLN(DEBUG_SWITCH, "<CLF> g_iPausedOnOutroGametime: ", GET_GAME_TIMER() - g_iPausedOnOutroGametime, " [g_iPauseOnOutro: ", g_iPauseOnOutro, "] ", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
INT iMAX_PAUSED_ON_OUTRO_WAIT
#IF NOT IS_NEXTGEN_BUILD
iMAX_PAUSED_ON_OUTRO_WAIT = 10000
#ENDIF
#IF IS_NEXTGEN_BUILD
iMAX_PAUSED_ON_OUTRO_WAIT = 15000
#ENDIF
IF (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT)
iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.5)
ENDIF
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script)
iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.5)
ENDIF
IF GET_GAME_TIMER() > (g_iPausedOnOutroGametime+iMAX_PAUSED_ON_OUTRO_WAIT)
DECRAMENT_Pause_Outro_Count()
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> ar_ALLOW_PLAYER_SWITCH_OUTRO(", Get_String_From_Ped_Request_Scene_Enum(g_eRecentlySelectedScene), ") //g_iPauseOnOutro:", g_iPauseOnOutro)
IF (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT)
//CASSERTLN(DEBUG_SWITCH, "fix for bug #1817876")
ELSE
TEXT_LABEL_63 sBroke
sBroke = GET_STRING_FROM_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene),
GET_LENGTH_OF_LITERAL_STRING("PS_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)))
sBroke += " broke - held on jumpcut descent for "
sBroke += iMAX_PAUSED_ON_OUTRO_WAIT/1000
sBroke += "sec!"
CASSERTLN(DEBUG_SWITCH, sBroke)
ENDIF
#ENDIF
ALLOW_PLAYER_SWITCH_OUTRO()
g_iPausedOnOutroGametime = -1
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
//short range,
eSwitchState = eSETUP_SCRIPT_SWITCH_STATE
eTAKE_CONTROL_SCRIPT_SWITCH_STATE = eSETUP_SCRIPT_SWITCH_STATE
ENDIF
PRIVATE_SetClockTimeForSwitchScene(sPedScene)
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
IF (eSwitchState <> SWITCH_STATE_PREP_DESCENT)
CPRINTLN(DEBUG_SWITCH, DEBUG_INIT, "player_controller.sc is fading in the screen as we are starting a descent switch scene after a load.")
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
ENDIF
IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_PAUSE_BEFORE_DESCENT)
IF (eSwitchState = SWITCH_STATE_PREP_DESCENT)
CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags)
ENDIF
ENDIF
IF (eSwitchState >= eSETUP_SCRIPT_SWITCH_STATE)
IF CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags)
IF NOT sPedScene.sSelectorCam.bPedSwitched
IF sPedScene.sSelectorCam.bOKToSwitchPed
AND (eSwitchState >= eTAKE_CONTROL_SCRIPT_SWITCH_STATE)
BOOL bTakenControl = FALSE
// IF IS_BIT_SET(g_iSwitchTriggerStateBitset, SWITCH_TRIG_BLOCK_CHAR_SWITCH)
// AND ((sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT))
//
// CPRINTLN(DEBUG_SWITCH, "<")
// CPRINTLN(DEBUG_SWITCH, GET_THIS_SCRIPT_NAME())
// CPRINTLN(DEBUG_SWITCH, "> dont take control, SWITCH_TRIG_BLOCK_CHAR_SWITCH is set.")
//
// CPRINTLN(DEBUG_SWITCH, DEBUG_TRIGGER, "<SWITCH-TRIG> Skipping character switch and warping player to lead-in instead.")
// SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, sPedScene.vCreateCoords)
//
// bTakenControl = TRUE
// ELSE
IF TAKE_CONTROL_OF_SELECTOR_PED(sPedScene.sSelectorPeds, bCreateReplacementForPlayer, bKeepTasks)
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> take control, switch trigger null")
bTakenControl = TRUE
ENDIF
// ENDIF
IF bTakenControl
IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, TRUE)
ENDIF
PRIVATE_SetDefaultPlayerPedAttributes(sPedScene.sSelectorPeds)
PRIVATE_SetClockTimeForSwitchScene(sPedScene)
PRIVATE_UpdateDrunkenPeds()
/* //#1189748
Set_Leave_Area_Flag_For_All_Blipped_Missions() //#1176160
*/
SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0)
g_sPlayerPedRequest.sSelectorPeds = sPedScene.sSelectorPeds
sPedScene.sSelectorCam.bPedSwitched = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF (eSwitchState >= SWITCH_STATE_JUMPCUT_ASCENT)
SET_PLAYERPAD_SHAKES_WHEN_CONTROLLER_DISABLED(FALSE)
ENDIF
IF g_b_NOT_PlayerHasStartedNewScene
IF sPedScene.sSelectorCam.bPedSwitched
IF PRIVATE_PlayerHasStartedNewScene(sPedScene)
g_b_NOT_PlayerHasStartedNewScene = FALSE
ENDIF
ENDIF
ENDIF
ELSE
//
sPedScene.iStage = CONST_TEST_SWITCH_5
ENDIF
ENDIF
// // // // //
// stage xx: Request Switch
//
IF (sPedScene.iStage = CONST_TEST_SWITCH_5)
IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo)
IF IS_CAM_ACTIVE(sPedScene.sSelectorCam.camTo)
IF IS_CAM_INTERPOLATING(sPedScene.sSelectorCam.camTo)
//g_fCamToPhase = GET_CAM_SPLINE_PHASE(sPedScene.sSelectorCam.camTo)
ELSE
// //
SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE)
DESTROY_CAM(sPedScene.sSelectorCam.camTo)
ENDIF
ELSE
// //
SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE)
DESTROY_CAM(sPedScene.sSelectorCam.camTo)
ENDIF
REMOVE_SCENARIO_BLOCKING_AREA(sPedScene.scenarioBlockID)
CLEAR_PED_NON_CREATION_AREA()
ELSE
IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camID)
DESTROY_CAM(sPedScene.sSelectorCam.camID)
ENDIF
IF sPedScene.sSelectorCam.iInterpCams > 0
INT iCamCount
FOR iCamCount = 0 TO sPedScene.sSelectorCam.iInterpCams-1
IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camInterpIDs[iCamCount])
DESTROY_CAM(sPedScene.sSelectorCam.camInterpIDs[iCamCount])
ENDIF
ENDFOR
ENDIF
IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3)
AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4)
DISABLE_CELLPHONE(sPedScene.sSelectorCam.bIsPhoneDisabled)
ENDIF
// Reset all the camera values incase they have to be used again
sPedScene.sSelectorCam.bSplineCreated = FALSE
sPedScene.sSelectorCam.bSplineActive = FALSE
sPedScene.sSelectorCam.bSplineComplete = FALSE
sPedScene.sSelectorCam.bOKToSwitchPed = FALSE
sPedScene.sSelectorCam.bPedSwitched = FALSE
sPedScene.sSelectorCam.bRun = FALSE
sPedScene.sSelectorCam.iInterpCams = 0
// Set the relative heading/pitch if the calling scipt used a custom camera
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(gameplayCamHeading)
// SET_GAMEPLAY_CAM_RELATIVE_PITCH(gameplayCamPitch)
IF NOT (g_drunkCameraActive)
STOP_GAMEPLAY_CAM_SHAKING(TRUE)
SET_GAMEPLAY_CAM_MOTION_BLUR_SCALING_THIS_UPDATE(0)
SET_GAMEPLAY_CAM_MAX_MOTION_BLUR_STRENGTH_THIS_UPDATE(0)
ENDIF
RENDER_SCRIPT_CAMS(FALSE, TRUE, 1000)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
SET_PLAYER_INVINCIBLE(PLAYER_ID(), FALSE)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
SET_PED_CAN_BE_TARGETTED(PLAYER_PED_ID(), TRUE)
SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0)
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
SET_ENTITY_COLLISION(PLAYER_PED_ID(), TRUE)
ENDIF
ENDIF
SET_SKYSWOOP_STAGE(SKYSWOOP_NONE)
// If we didnt switch players then reset the proofs
IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedFrom)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, FALSE)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedFrom, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedFrom, TRUE)
ENDIF
IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedTo)
SET_ENTITY_INVINCIBLE(sPedScene.sSelectorCam.pedTo, FALSE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, TRUE)
IF (sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID())
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, FALSE)
ENDIF
ENDIF
sPedScene.iStage = CONST_TEST_SWITCH_6
ENDIF
ENDIF
// // // // //
// stage xx: Request Switch
//
IF (sPedScene.iStage = CONST_TEST_SWITCH_6)
IF sPedScene.roomInterior <> NULL
UNPIN_INTERIOR(sPedScene.roomInterior)
ENDIF
// FADE_UP_PED_LIGHT(4.0)
CLEAR_FOCUS()
SET_MODEL_AS_NO_LONGER_NEEDED(GET_PLAYER_PED_MODELCLF(sPedScene.ePed))
enumCharacterList eCurrentPed
eCurrentPed = GET_CURRENT_PLAYER_PED_ENUMCLF()
IF eCurrentPed != NO_CHARACTER
IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPed])
IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(g_vPlayerVeh[eCurrentPed])
SET_VEHICLE_AS_NO_LONGER_NEEDED(g_vPlayerVeh[eCurrentPed])
ELSE
#IF IS_DEBUG_BUILD
STRING InstanceScript
INT InstanceId
InstanceScript = GET_ENTITY_SCRIPT(g_vPlayerVeh[eCurrentPed], InstanceId)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - g_vPlayerVeh[", GET_PLAYER_PED_STRING(eCurrentPed), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]")
#ENDIF
ENDIF
ENDIF
MODEL_NAMES ePlayerLastVehModel
ePlayerLastVehModel = g_sPlayerLastVeh[eCurrentPed].model
IF (ePlayerLastVehModel <> DUMMY_MODEL_FOR_SCRIPT)
SET_MODEL_AS_NO_LONGER_NEEDED(ePlayerLastVehModel)
ENDIF
ENDIF
PRIVATE_UpdateChainedPostMissionSwitch(sPedScene.ePed)
IF (sPedScene.eScene <> PR_SCENE_M_DEFAULT)
AND (sPedScene.eScene <> PR_SCENE_F_DEFAULT)
AND (sPedScene.eScene <> PR_SCENE_T_DEFAULT)
AND (sPedScene.eScene <> PR_SCENE_M_OVERRIDE)
AND (sPedScene.eScene <> PR_SCENE_F_OVERRIDE)
AND (sPedScene.eScene <> PR_SCENE_T_OVERRIDE)
AND (sPedScene.eScene <> PR_SCENE_HOSPITAL)
#IF IS_DEBUG_BUILD
g_iSelectedDebugPlayerCharScene = ENUM_TO_INT(sPedScene.eScene)
#ENDIF
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[sPedScene.ePed] = sPedScene.eScene
PRIVATE_UpdateLastSceneQueue(sPedScene.ePed, sPedScene.eScene)
ENDIF
IF sPedScene.eScene = PR_SCENE_HOSPITAL
ResetLastKnownPedInfo(g_savedGlobalsClifford.sPlayerData.sInfo, SP_MISSION_NONE)
ENDIF
PRIVATE_UpdatePostMissionSwitch(sPedScene.ePed)
PRIVATE_UpdateSwitchFriendTimer(sPedScene, sPassedScene)
PRIVATE_SetPlayerPedWanted(sPedScene)
RemoveAnimDictForTimetableExitSceneCam(sPedScene.eScene)
CLEAR_TIMEOFDAY(g_sMultiplayerTransitionTOD)
CLEAR_TIMEOFDAY(g_savedGlobalsClifford.sPlayerData.sInfo.sLastTimeActive[sPedScene.ePed])
IF IS_AUDIO_SCENE_ACTIVE("TOD_SHIFT_SCENE")
STOP_SOUND(sPedScene.sTimelapse.iSplineStageSound)
RELEASE_NAMED_SCRIPT_AUDIO_BANK("TIME_LAPSE")
STOP_AUDIO_SCENE("TOD_SHIFT_SCENE")
CPRINTLN(DEBUG_SWITCH, DEBUG_SYSTEM, "<TOD> Audio scene \"TOD_SHIFT_SCENE\" active in ", GET_THIS_SCRIPT_NAME(), ".")
// CASSERTLN(DEBUG_SWITCH, "Audio scene \"TOD_SHIFT_SCENE\" active")
ENDIF
g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = <<0,0,0>>
g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = 0.0
g_savedGlobalsClifford.sPlayerData.sInfo.iLastKnownRoomKey[sPedScene.ePed] = 0
g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownVelocity[sPedScene.ePed] = <<0,0,0>>
#IF IS_DEBUG_BUILD
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
IF IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>)
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene,
tPlayerSceneProceduralCam)
//
ELSE
SAVE_STRING_TO_DEBUG_FILE(" ! scene ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"")
SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom)
SAVE_STRING_TO_DEBUG_FILE("\" outside and non-null")
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
ENDIF
ELSE
IF NOT IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>)
SAVE_STRING_TO_DEBUG_FILE(" ! scene ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"")
SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom)
SAVE_STRING_TO_DEBUG_FILE("\" inside and null")
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
ENDIF
#ENDIF
// PRIVATE_ResetLeaveAreaForPreMissionSwitch(sPedScene)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENECLF - reset g_iLastSuccessfulAmbientLaunchTime \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"")
#ENDIF
//g_fCamToPhase = -1
//g_bSwitchSplineCamInProgress = FALSE //play final stage of anim
g_b_NOT_PlayerHasStartedNewScene = FALSE
g_iPausedOnOutroGametime = -1
Mission_Over(sPedScene.iMissionID)
IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3)
AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4)
DISABLE_CELLPHONE(FALSE)
ENDIF
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL GENERIC_PED_SCENENRM(PED_SCENE_STRUCT &sPedScene, SceneGlobalFuncIndex customSetupSelectorCam,SceneGlobalFunc customSetupScript, INT iSwitchFlags = 0)
IF NOT sPedScene.sSelectorCam.bPedSwitched
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT) //#582163
ENDIF
//Is the global wait timer at 0?
INT iGameTime = GET_GAME_TIMER()
IF iGameTime >= g_iGlobalWaitTime - 1000
ADD_GLOBAL_COMMUNICATION_DELAY(CC_DELAY_POST_AMBIENT_SWITCH / 3)
ENDIF
CONST_INT CONST_SWITCH_0_requestSwitch 0
CONST_INT CONST_SWITCH_1_initialiseSwitch 1
CONST_INT CONST_SWITCH_2_waitForInterior 2
CONST_INT CONST_SWITCH_3_setupPedTo 3
CONST_INT CONST_SWITCH_4_runCodeCam 4
CONST_INT CONST_TEST_SWITCH_5 5
CONST_INT CONST_TEST_SWITCH_6 6
PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene
VECTOR vPedAreaOffset = <<5,5,4>>
// // // // //
// stage 0: Request Switch
//
IF (sPedScene.iStage = CONST_SWITCH_0_requestSwitch)
m_enumMissionCandidateReturnValue eLaunchRequest
eLaunchRequest = Request_Mission_Launch(sPedScene.iMissionID,
MCTID_MUST_LAUNCH,
MISSION_TYPE_SWITCH, TRUE)
#IF IS_DEBUG_BUILD
SWITCH eLaunchRequest
CASE MCRET_DENIED
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "DENIED", "\" //", sPedScene.iMissionID)
BREAK
CASE MCRET_ACCEPTED
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "ACCEPTED", "\" //", sPedScene.iMissionID)
BREAK
CASE MCRET_PROCESSING
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "PROCESSING", "\" //", sPedScene.iMissionID)
BREAK
DEFAULT
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", ENUM_TO_INT(eLaunchRequest), "_unknown", "\" //", sPedScene.iMissionID)
BREAK
ENDSWITCH
#ENDIF
IF (eLaunchRequest = MCRET_ACCEPTED)
STAT_INCREMENT(SP_AMBIENT_SWITCH_COUNT, 1)
sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch
ENDIF
IF NOT (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch)
IF NOT (g_eRunningMission = SP_MISSION_NONE)
IF ARE_STRINGS_EQUAL(g_sMissionStaticData[g_eRunningMission].scriptName, GET_THIS_SCRIPT_NAME())
CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName = GET_THIS_SCRIPT_NAME()")
sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch
ELSE
CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName <> GET_THIS_SCRIPT_NAME()")
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "g_eRunningMission = SP_MISSION_NONE")
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch")
ENDIF
ENDIF
// // // // //
// stage 1: Request Switch
//
IF (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch)
sPedScene.sTimelapse.iTimelapseCut = 0
sPedScene.sTimelapse.iTimeSkipStage = 0
CLEAR_Pause_Outro_Count()
sPedScene.eSelectorPed = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(sPedScene.ePed)
IF GET_PLAYER_PED_POSITION_FOR_SCENE(sPedScene.eScene, sPedScene.vCreateCoords, sPedScene.fCreateHead, sPedScene.tCreateRoom)
DISABLE_CELLPHONE(TRUE)
VECTOR vCreateCoords
FLOAT fCreateHead
IF PRIVATE_Should_Default_PedTo_Coord_Move(sPedScene, vCreateCoords, fCreateHead)
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("updated sPedScene.vCreateCoords: ")
SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords)
SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(fCreateHead)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" old sPedScene.vCreateCoords: ")
SAVE_VECTOR_TO_DEBUG_FILE(sPedScene.vCreateCoords)
SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(sPedScene.fCreateHead)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" older vLastKnownCoords: ")
SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed])
SAVE_STRING_TO_DEBUG_FILE(", fLastKnownHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed])
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
#IF IS_DEBUG_BUILD
VECTOR vVehCoordsOffset
vVehCoordsOffset = g_vPlayerLastVehCoord[sPedScene.ePed] - g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]
#ENDIF
sPedScene.vCreateCoords = vCreateCoords
sPedScene.fCreateHead = fCreateHead
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE(" OLD g_vPlayerLastVehCoord: ")
SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed])
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" OLD vVehCoordsOffset: ")
SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed])
SAVE_STRING_TO_DEBUG_FILE(" - ")
SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed])
SAVE_STRING_TO_DEBUG_FILE(" = ")
SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset)
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = vCreateCoords
g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = fCreateHead
IF g_ePlayerLastVehState[sPedScene.ePed] = PTVS_2_playerInVehicle
g_vPlayerLastVehCoord[sPedScene.ePed] = vCreateCoords
g_fPlayerLastVehHead[sPedScene.ePed] = fCreateHead
ENDIF
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE(" NEWER vVehCoordsOffset: ")
SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset)
SAVE_STRING_TO_DEBUG_FILE(" + ")
SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords)
SAVE_STRING_TO_DEBUG_FILE(" = ")
SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed])
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
ENDIF
g_eSelectedPlayerCharScene = (sPedScene.eScene)
// Pin the interior into memory so the ped doesnt fall through the ground
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom)
ELSE
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords)
ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"")
#ENDIF
IF (sPedScene.roomInterior <> NULL)
IF NOT IS_INTERIOR_READY(sPedScene.roomInterior)
PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior)
ENDIF
ENDIF
IF (sPedScene.eScene = PR_SCENE_F_CS_CHECKSHOE)
OR (sPedScene.eScene = PR_SCENE_F_CS_WIPEHANDS)
OR (sPedScene.eScene = PR_SCENE_F_CS_WIPERIGHT)
SET_INTERIOR_CAPPED(INTERIOR_V_CHOPSHOP, FALSE)
ENDIF
RequestAnimDictForTimetableExitSceneCam(sPedScene.eScene)
VECTOR vecCamEndPos, vecCamEndRot
FLOAT vecCamEndFov
IF SETUP_PLAYER_CAMERA_FOR_SCENE(sPedScene.eScene, vecCamEndPos, vecCamEndRot, vecCamEndFov)
TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix
TEXT_LABEL tRecording_name
INT iRecording_num
FLOAT fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix)
OR GET_PLAYER_VEH_RECORDING_FOR_SCENE(sPedScene.eScene, tRecording_name, iRecording_num,
fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit)
OR SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam)
sPedScene.sSelectorCam.camTo = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE)
SET_CAM_COORD(sPedScene.sSelectorCam.camTo, vecCamEndPos)
SET_CAM_ROT(sPedScene.sSelectorCam.camTo, vecCamEndRot)
SET_CAM_FOV(sPedScene.sSelectorCam.camTo, vecCamEndFov)
// SET_CAM_FAR_CLIP(sPedScene.sSelectorCam.camTo, 800.0)
SET_PED_NON_CREATION_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset)
sPedScene.scenarioBlockID = ADD_SCENARIO_BLOCKING_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset)
CLEAR_AREA(vecCamEndPos, VMAG(vPedAreaOffset), TRUE)
ENDIF
ENDIF
INCRAMENT_Pause_Outro_Count() //for "player_timetable_scene"
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENENRM - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"")
#ENDIF
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script)
INCRAMENT_Pause_Outro_Count() //for sPlayerTimetableAdditional_script
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENENRM - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" addition")
#ENDIF
ENDIF
// Found a suitable scene
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "\n GENERIC_PED_SCENENRM - Scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is suitable")
SaveSuitablePedSceneStructToSwitchLog(sPedScene)
#ENDIF
g_eRecentlySelectedScene = sPedScene.eScene
enumCharacterList eCurrentPlayerPedEnum
eCurrentPlayerPedEnum = GET_CURRENT_PLAYER_PED_ENUMNRM()
IF eCurrentPlayerPedEnum != NO_CHARACTER
IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPlayerPedEnum])
FLOAT fPlayerLastVehEngineHealth, fPlayerLastVehPetrolTankHealth
fPlayerLastVehEngineHealth = GET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum])
fPlayerLastVehPetrolTankHealth = GET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum])
CONST_FLOAT fCONST_VEH_EXPLODE_HEALTH -1000.0
IF fPlayerLastVehEngineHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75)
SET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25)
ENDIF
IF fPlayerLastVehPetrolTankHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75)
SET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25)
ENDIF
ENDIF
STORE_VEH_DATA_FROM_PEDNRM(PLAYER_PED_ID(),
g_sPlayerLastVeh[eCurrentPlayerPedEnum],
g_vPlayerLastVehCoord[eCurrentPlayerPedEnum],
g_fPlayerLastVehHead[eCurrentPlayerPedEnum],
g_ePlayerLastVehState[eCurrentPlayerPedEnum] #IF USE_TU_CHANGES , g_ePlayerLastVehGen[eCurrentPlayerPedEnum] #ENDIF )
SAFE_STORE_PLAYER_PED_INFONRM(PLAYER_PED_ID(), FALSE)
STORE_DEFAULT_PLAYER_SWITCH_STATE(PLAYER_PED_ID())
ENDIF
PRIVATE_ClearPrioritySwitchFlag(sPedScene.ePed, sPedScene.eScene)
iRequestSwitchInterior_count = 0
g_iLastSuccessfulAmbientLaunchTime = GET_GAME_TIMER()
SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 10.0)
REQUEST_MODEL(GET_PLAYER_PED_MODELNRM(sPedScene.ePed))
#IF IS_DEBUG_BUILD
IF PRIVATE_Should_PedTo_Be_Created(sPedScene)
WAIT(0)
ENDIF
#ENDIF
sPedScene.iStage = CONST_SWITCH_3_setupPedTo
ELSE
// Can't find suitable scene so bail out
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is not suitable")
#ENDIF
RETURN TRUE
ENDIF
ENDIF
// // // // //
// stage 2: Wait For Interior
//
IF (sPedScene.iStage = CONST_SWITCH_2_waitForInterior)
sPedScene.iStage = CONST_SWITCH_3_setupPedTo
iRequestSwitchInterior_count++
REQUEST_MODEL(GET_PLAYER_PED_MODELNRM(sPedScene.ePed))
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" isn't using new load scene [", iRequestSwitchInterior_count, "]...")
#ENDIF
// Make sure any interior is pinned before we proceed
IF sPedScene.roomInterior <> NULL
IF NOT IS_INTERIOR_READY(sPedScene.roomInterior)
PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior)
sPedScene.iStage = CONST_SWITCH_2_waitForInterior
IF iRequestSwitchInterior_count > 150
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" timeout waiting for a non-null interior to be ready", NATIVE_TO_INT(sPedScene.roomInterior), ", iWaitCount:", iRequestSwitchInterior_count)
TEXT_LABEL_63 tScene, tAssert
tScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)
tAssert = GET_STRING_FROM_STRING(tScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(tScene))
tAssert += " - timeout waiting for a non-null interior to be ready"
CASSERTLN(DEBUG_SWITCH, tAssert)
#ENDIF
iRequestSwitchInterior_count = 0
// Pin the interior into memory so the ped doesnt fall through the ground
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom)
ELSE
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords)
ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"")
#ENDIF
sPedScene.iStage = CONST_SWITCH_3_setupPedTo
ENDIF
ENDIF
ENDIF
ENDIF
// // // // //
// stage 3: Setup Ped To
//
IF (sPedScene.iStage = CONST_SWITCH_3_setupPedTo)
IF sPedScene.eScene = PR_SCENE_HOSPITAL
enumCharacterList eSelectorChar
eSelectorChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.eSelectorPed)
#IF USE_TU_CHANGES
IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorPeds.pedID[eSelectorChar])
#ENDIF
IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar])
SET_PED_AS_NO_LONGER_NEEDED(sPedScene.sSelectorPeds.pedID[eSelectorChar])
ELSE
#IF IS_DEBUG_BUILD
STRING InstanceScript
INT InstanceId
InstanceScript = GET_ENTITY_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar], InstanceId)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]")
#ENDIF
ENDIF
#IF USE_TU_CHANGES
#IF IS_DEBUG_BUILD
ELSE
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] is dead??? #1816254")
#ENDIF
ENDIF
#ENDIF
sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] = NULL
sPedScene.eScene = PR_SCENE_HOSPITAL
ENDIF
IF PRIVATE_Should_PedTo_Be_Created(sPedScene)
PED_VARIATION_STRUCT SVARIATIONS = g_savedglobalsnorman.splayerdata.sinfo.svariations[spedscene.eselectorped]
IF CREATE_PLAYER_PED_ON_FOOTNRM(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], sPedScene.ePed, sPedScene.vCreateCoords, sPedScene.fCreateHead)
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom)
AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo)
AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) != SWITCH_TYPE_SHORT
g_savedGlobalsnorman.sPlayerData.sInfo.sVariations[sPedScene.eSelectorPed] = sVariations
ENDIF
ENDIF
PRELOAD_STORED_PLAYER_PED_VARIATIONNRM(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// Set invisible to avoid any popping issues
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
#IF IS_DEBUG_BUILD
enumCreateState eCreateState
IF SafeToCreatePlayerAmbientPedAtLastKnownLocation(sPedScene.ePed, eCreateState)
CPRINTLN(DEBUG_SWITCH, "safe to create")
ELSE
SWITCH eCreateState
CASE eCS_3_SWITCH_IN_PROGRESS CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_3_SWITCH_IN_PROGRESS") BREAK
CASE eCS_5_TOO_MANY_HOURS_PASSED CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_5_TOO_MANY_HOURS_PASSED") BREAK
CASE eCS_7_TOO_FAR_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_7_TOO_FAR_TO_CREATE") BREAK
CASE eCS_8_TOO_CLOSE_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_8_TOO_CLOSE_TO_CREATE") BREAK
CASE eCS_9_SPHERE_VISIBLE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_9_SPHERE_VISIBLE") BREAK
// CASE eCS_4_INVALID_LAST_TIME_ACTIVE FALLTHRU
// CASE eCS_6_INVALID_LAST_KNOWN_COORDS
// EXIT
// BREAK
CASE eCS_10_POST_MISSION_SWITCH CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_10_POST_MISSION_SWITCH") BREAK
CASE eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY") BREAK
CASE eCS_12_NEAR_MISSION_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_12_NEAR_MISSION_TRIGGER") BREAK
CASE eCS_13_LEADIN_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_13_LEADIN_TRIGGER") BREAK
CASE eCS_14_DIRECTOR_MODE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_14_DIRECTOR_MODE") BREAK
DEFAULT
CPRINTLN(DEBUG_SWITCH, "DON'T create ")
CPRINTLN(DEBUG_SWITCH, ENUM_TO_INT(eCreateState))
BREAK
ENDSWITCH
ENDIF
#ENDIF
ELSE
SET_ENTITY_VISIBLE(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], FALSE)
ENDIF
// IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
// CPRINTLN(DEBUG_SWITCH, "MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 100.0)")
//
// MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 100.0)
// ENDIF
// Freeze to avoid falling through the world
FREEZE_ENTITY_POSITION(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], TRUE)
// IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// ENDIF
FORCE_ROOM_FOR_SCENE_SELECTOR_PED(sPedScene)
sPedScene.sSelectorPeds.bInitialised = TRUE
sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed
sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - created player ped on foot for scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" ", sPedScene.vCreateCoords)
#ENDIF
g_iPausedOnOutroGametime = -1
Preload_SpecialMissionAssets(sPedScene.eScene)
IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom)
AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo)
AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) = SWITCH_TYPE_SHORT
INT iPreloadGametime
IF NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
iPreloadGametime = GET_GAME_TIMER()
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - start waiting for preload var")
WHILE (iPreloadGametime+0500) < GET_GAME_TIMER()
AND iPreloadGametime > 0
IF HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
iPreloadGametime = -1
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - gave up waiting for preload var")
ENDIF
WAIT(0)
ENDWHILE
IF NOT (iPreloadGametime = -1)
CASSERTLN(DEBUG_SWITCH, "wait for ped var preload")
ENDIF
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - finished waiting for preload var (", iPreloadGametime, ", ", GET_GAME_TIMER(), ")")
ENDIF
ENDIF
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE)
RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
sPedScene = CALL customSetupSelectorCam(sPedScene)
sPedScene.iStage = CONST_SWITCH_4_runCodeCam
ENDIF
ELSE
sPedScene.sSelectorPeds.bInitialised = TRUE
sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed
sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]
IF sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID() //#1565907
SET_ENTITY_AS_MISSION_ENTITY(sPedScene.sSelectorCam.pedTo, TRUE, TRUE)
ENDIF
// IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// ENDIF
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE)
CLEAR_AREA_OF_PROJECTILES(sPedScene.vCreateCoords, 10.0)
#IF IS_DEBUG_BUILD
VECTOR vpedToCoords = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - use global ped for scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"", vpedToCoords)
#ENDIF
IF NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo), 5.0)
AND NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, <<0,0,0>>, 5.0)
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
//
ELSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, " pedTo(", vpedToCoords, ") nowhere near vCreateCoords(", "): dist:", VDIST(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo)))
CPRINTLN(DEBUG_SWITCH, "\n\n\n pedTo nowhere near vCreateCoords??\n\n\n")
SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, sPedScene.vCreateCoords)
SET_ENTITY_HEADING(sPedScene.sSelectorCam.pedTo, sPedScene.fCreateHead)
#ENDIF
ENDIF
ENDIF
g_iPausedOnOutroGametime = -1
Preload_SpecialMissionAssets(sPedScene.eScene)
RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
sPedScene = CALL customSetupSelectorCam(sPedScene)
sPedScene.iStage = CONST_SWITCH_4_runCodeCam
ENDIF
ENDIF
// // // // //
// stage 4: Run Code Cam
//
IF (sPedScene.iStage = CONST_SWITCH_4_runCodeCam)
BOOL bCreateReplacementForPlayer, bKeepTasks
bCreateReplacementForPlayer = FALSE
bKeepTasks = FALSE
SWITCH_TYPE eSwitchType
eSwitchType = SWITCH_TYPE_AUTO
FLOAT fGameplayCamPitch, fGameplayCamHeading
fGameplayCamPitch = 0.0
fGameplayCamHeading = 0.0
BOOL bPauseBeforePan, bPauseBeforeOutro
bPauseBeforePan = FALSE
bPauseBeforeOutro = FALSE
GetSplineCamFromPlayerToPedParams(sPedScene,
bCreateReplacementForPlayer, bKeepTasks, eSwitchType,
fGameplayCamPitch, fGameplayCamHeading,
bPauseBeforePan, bPauseBeforeOutro, iSwitchFlags)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sLiteral
sLiteral = ""
STRING sScene
sScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)
HUD_COLOURS eHudColour
eHudColour = HUD_COLOUR_PURE_WHITE
#ENDIF
IF IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam)
sPedScene.tCreateRoom = tPlayerSceneProceduralCam
ENDIF
ENDIF
IF (sPedScene.eScene = PR_SCENE_F_S_EXILE2)
IF NOT bPauseBeforePan
CPRINTLN(DEBUG_SWITCH, "force pause on pan for exile2")
bPauseBeforePan = TRUE
ENDIF
ENDIF
// Use a long spline so we can delete the current character and dont see the new character pop into place
BOOL bRunning_switch_cam_from_player
bRunning_switch_cam_from_player = FALSE
IF NOT DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo)
IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED(sPedScene.sSelectorCam,
eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading,
bPauseBeforePan, bPauseBeforeOutro, sPedScene.tCreateRoom)
#IF IS_DEBUG_BUILD
sLiteral += ("switch cam \"")
sLiteral += GET_STRING_FROM_STRING(sScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(sScene))
sLiteral += ("\" from player to ped [g_iOutro:")
sLiteral += (g_iPauseOnOutro)
sLiteral += ("]")
#ENDIF
bRunning_switch_cam_from_player = TRUE
ENDIF
ELSE
// IF (g_fCamToPhase < 0)
// g_fCamToPhase = 0
// ENDIF
TEXT_LABEL_63 tEstabShot
tEstabShot = sPedScene.tCreateRoom
IF NOT IS_STRING_NULL_OR_EMPTY(tEstabShot)
TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix
GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix)
IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerSceneEstabShotSuffix)
tEstabShot += tPlayerSceneEstabShotSuffix
ENDIF
ENDIF
IF RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM(sPedScene.sSelectorCam,
sPedScene.sSelectorCam.camTo,
eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading,
bPauseBeforePan, bPauseBeforeOutro, tEstabShot)
#IF IS_DEBUG_BUILD
sLiteral += ("switch cam \"")
sLiteral += GET_STRING_FROM_STRING(sScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(sScene))
sLiteral += ("\" from player to cam [g_iOutro:")
sLiteral += (g_iPauseOnOutro)
sLiteral += ("]")
#ENDIF
bRunning_switch_cam_from_player = TRUE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF g_bDrawLiteralSceneString
SET_TEXT_SCALE(0.4, 0.4)
SET_TEXT_HUD_COLOUR(eHudColour, 127)
SET_TEXT_JUSTIFICATION(FONT_CENTRE)
SET_TEXT_OUTLINE()
DISPLAY_TEXT_WITH_LITERAL_STRING(0.5, 0.925 - 0.03, "STRING", sLiteral)
ENDIF
#ENDIF
IF bRunning_switch_cam_from_player
SWITCH_STATE eSwitchState, eSETUP_SCRIPT_SWITCH_STATE, eTAKE_CONTROL_SCRIPT_SWITCH_STATE
eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_ASCENT //SWITCH_STATE_JUMPCUT_DESCENT
eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_DESCENT
IF g_bMagDemoActive
eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN
eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN
ENDIF
IF (GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT)
eSwitchState = GET_PLAYER_SWITCH_STATE()
IF (eSwitchState = SWITCH_STATE_JUMPCUT_DESCENT) OR (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT)
#IF USE_TU_CHANGES
OR (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT
AND NOT (sPedScene.eScene = PR_SCENE_M_DEFAULT OR sPedScene.eScene = PR_SCENE_F_DEFAULT OR sPedScene.eScene = PR_SCENE_T_DEFAULT))
#ENDIF
IF (GET_PLAYER_SWITCH_JUMP_CUT_INDEX() = 0)
IF (g_iPauseOnOutro > 0)
IF (g_iPausedOnOutroGametime < 0)
g_iPausedOnOutroGametime = GET_GAME_TIMER()
ELSE
CPRINTLN(DEBUG_SWITCH, "<NRM> g_iPausedOnOutroGametime: ", GET_GAME_TIMER() - g_iPausedOnOutroGametime, " [g_iPauseOnOutro: ", g_iPauseOnOutro, "]", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
INT iMAX_PAUSED_ON_OUTRO_WAIT
#IF NOT IS_NEXTGEN_BUILD
iMAX_PAUSED_ON_OUTRO_WAIT = 10000
#ENDIF
#IF IS_NEXTGEN_BUILD
iMAX_PAUSED_ON_OUTRO_WAIT = 12500
#ENDIF
IF (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT)
iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.5)
ENDIF
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script)
iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.5)
ENDIF
IF GET_GAME_TIMER() > (g_iPausedOnOutroGametime+iMAX_PAUSED_ON_OUTRO_WAIT)
DECRAMENT_Pause_Outro_Count()
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> ar_ALLOW_PLAYER_SWITCH_OUTRO(", Get_String_From_Ped_Request_Scene_Enum(g_eRecentlySelectedScene), ") //g_iPauseOnOutro:", g_iPauseOnOutro)
IF (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT)
//CASSERTLN(DEBUG_SWITCH, "fix for bug #1817876")
ELSE
TEXT_LABEL_63 sBroke
sBroke = GET_STRING_FROM_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene),
GET_LENGTH_OF_LITERAL_STRING("PS_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)))
sBroke += " broke - held on jumpcut descent for "
sBroke += iMAX_PAUSED_ON_OUTRO_WAIT/1000
sBroke += "sec!"
CASSERTLN(DEBUG_SWITCH, sBroke)
ENDIF
#ENDIF
ALLOW_PLAYER_SWITCH_OUTRO()
g_iPausedOnOutroGametime = -1
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
//short range,
eSwitchState = eSETUP_SCRIPT_SWITCH_STATE
eTAKE_CONTROL_SCRIPT_SWITCH_STATE = eSETUP_SCRIPT_SWITCH_STATE
ENDIF
PRIVATE_SetClockTimeForSwitchScene(sPedScene)
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
IF (eSwitchState <> SWITCH_STATE_PREP_DESCENT)
CPRINTLN(DEBUG_SWITCH, DEBUG_INIT, "player_controller.sc is fading in the screen as we are starting a descent switch scene after a load.")
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
ENDIF
IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_PAUSE_BEFORE_DESCENT)
IF (eSwitchState = SWITCH_STATE_PREP_DESCENT)
CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags)
ENDIF
ENDIF
IF (eSwitchState >= eSETUP_SCRIPT_SWITCH_STATE)
IF CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags)
IF NOT sPedScene.sSelectorCam.bPedSwitched
IF sPedScene.sSelectorCam.bOKToSwitchPed
AND (eSwitchState >= eTAKE_CONTROL_SCRIPT_SWITCH_STATE)
BOOL bTakenControl = FALSE
// IF IS_BIT_SET(g_iSwitchTriggerStateBitset, SWITCH_TRIG_BLOCK_CHAR_SWITCH)
// AND ((sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT))
//
// CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> dont take control, SWITCH_TRIG_BLOCK_CHAR_SWITCH is set.")
//
// CPRINTLN(DEBUG_SWITCH, DEBUG_TRIGGER, "<SWITCH-TRIG> Skipping character switch and warping player to lead-in instead.")
// SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, sPedScene.vCreateCoords)
//
// bTakenControl = TRUE
// ELSE
IF TAKE_CONTROL_OF_SELECTOR_PED(sPedScene.sSelectorPeds, bCreateReplacementForPlayer, bKeepTasks)
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> take control, switch trigger null")
bTakenControl = TRUE
ENDIF
// ENDIF
IF bTakenControl
IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, TRUE)
ENDIF
PRIVATE_SetDefaultPlayerPedAttributes(sPedScene.sSelectorPeds)
PRIVATE_SetClockTimeForSwitchScene(sPedScene)
PRIVATE_UpdateDrunkenPeds()
/* //#1189748
Set_Leave_Area_Flag_For_All_Blipped_Missions() //#1176160
*/
SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0)
g_sPlayerPedRequest.sSelectorPeds = sPedScene.sSelectorPeds
sPedScene.sSelectorCam.bPedSwitched = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF (eSwitchState >= SWITCH_STATE_JUMPCUT_ASCENT)
SET_PLAYERPAD_SHAKES_WHEN_CONTROLLER_DISABLED(FALSE)
ENDIF
IF g_b_NOT_PlayerHasStartedNewScene
IF sPedScene.sSelectorCam.bPedSwitched
IF PRIVATE_PlayerHasStartedNewScene(sPedScene)
g_b_NOT_PlayerHasStartedNewScene = FALSE
ENDIF
ENDIF
ENDIF
ELSE
//
sPedScene.iStage = CONST_TEST_SWITCH_5
ENDIF
ENDIF
// // // // //
// stage xx: Request Switch
//
IF (sPedScene.iStage = CONST_TEST_SWITCH_5)
IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo)
IF IS_CAM_ACTIVE(sPedScene.sSelectorCam.camTo)
IF IS_CAM_INTERPOLATING(sPedScene.sSelectorCam.camTo)
//g_fCamToPhase = GET_CAM_SPLINE_PHASE(sPedScene.sSelectorCam.camTo)
ELSE
// //
SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE)
DESTROY_CAM(sPedScene.sSelectorCam.camTo)
ENDIF
ELSE
// //
SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE)
DESTROY_CAM(sPedScene.sSelectorCam.camTo)
ENDIF
REMOVE_SCENARIO_BLOCKING_AREA(sPedScene.scenarioBlockID)
CLEAR_PED_NON_CREATION_AREA()
ELSE
IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camID)
DESTROY_CAM(sPedScene.sSelectorCam.camID)
ENDIF
IF sPedScene.sSelectorCam.iInterpCams > 0
INT iCamCount
FOR iCamCount = 0 TO sPedScene.sSelectorCam.iInterpCams-1
IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camInterpIDs[iCamCount])
DESTROY_CAM(sPedScene.sSelectorCam.camInterpIDs[iCamCount])
ENDIF
ENDFOR
ENDIF
IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3)
AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4)
DISABLE_CELLPHONE(sPedScene.sSelectorCam.bIsPhoneDisabled)
ENDIF
// Reset all the camera values incase they have to be used again
sPedScene.sSelectorCam.bSplineCreated = FALSE
sPedScene.sSelectorCam.bSplineActive = FALSE
sPedScene.sSelectorCam.bSplineComplete = FALSE
sPedScene.sSelectorCam.bOKToSwitchPed = FALSE
sPedScene.sSelectorCam.bPedSwitched = FALSE
sPedScene.sSelectorCam.bRun = FALSE
sPedScene.sSelectorCam.iInterpCams = 0
// Set the relative heading/pitch if the calling scipt used a custom camera
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(gameplayCamHeading)
// SET_GAMEPLAY_CAM_RELATIVE_PITCH(gameplayCamPitch)
IF NOT (g_drunkCameraActive)
STOP_GAMEPLAY_CAM_SHAKING(TRUE)
SET_GAMEPLAY_CAM_MOTION_BLUR_SCALING_THIS_UPDATE(0)
SET_GAMEPLAY_CAM_MAX_MOTION_BLUR_STRENGTH_THIS_UPDATE(0)
ENDIF
RENDER_SCRIPT_CAMS(FALSE, TRUE, 1000)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
SET_PLAYER_INVINCIBLE(PLAYER_ID(), FALSE)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
SET_PED_CAN_BE_TARGETTED(PLAYER_PED_ID(), TRUE)
SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0)
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
SET_ENTITY_COLLISION(PLAYER_PED_ID(), TRUE)
ENDIF
ENDIF
SET_SKYSWOOP_STAGE(SKYSWOOP_NONE)
// If we didnt switch players then reset the proofs
IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedFrom)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, FALSE)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedFrom, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedFrom, TRUE)
ENDIF
IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedTo)
SET_ENTITY_INVINCIBLE(sPedScene.sSelectorCam.pedTo, FALSE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, TRUE)
IF (sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID())
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, FALSE)
ENDIF
ENDIF
sPedScene.iStage = CONST_TEST_SWITCH_6
ENDIF
ENDIF
// // // // //
// stage xx: Request Switch
//
IF (sPedScene.iStage = CONST_TEST_SWITCH_6)
IF sPedScene.roomInterior <> NULL
UNPIN_INTERIOR(sPedScene.roomInterior)
ENDIF
// FADE_UP_PED_LIGHT(4.0)
CLEAR_FOCUS()
SET_MODEL_AS_NO_LONGER_NEEDED(GET_PLAYER_PED_MODELNRM(sPedScene.ePed))
enumCharacterList eCurrentPed
eCurrentPed = GET_CURRENT_PLAYER_PED_ENUMNRM()
IF eCurrentPed != NO_CHARACTER
IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPed])
IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(g_vPlayerVeh[eCurrentPed])
SET_VEHICLE_AS_NO_LONGER_NEEDED(g_vPlayerVeh[eCurrentPed])
ELSE
#IF IS_DEBUG_BUILD
STRING InstanceScript
INT InstanceId
InstanceScript = GET_ENTITY_SCRIPT(g_vPlayerVeh[eCurrentPed], InstanceId)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - g_vPlayerVeh[", GET_PLAYER_PED_STRING(eCurrentPed), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]")
#ENDIF
ENDIF
ENDIF
MODEL_NAMES ePlayerLastVehModel
ePlayerLastVehModel = g_sPlayerLastVeh[eCurrentPed].model
IF (ePlayerLastVehModel <> DUMMY_MODEL_FOR_SCRIPT)
SET_MODEL_AS_NO_LONGER_NEEDED(ePlayerLastVehModel)
ENDIF
ENDIF
PRIVATE_UpdateChainedPostMissionSwitch(sPedScene.ePed)
IF (sPedScene.eScene <> PR_SCENE_M_DEFAULT)
AND (sPedScene.eScene <> PR_SCENE_F_DEFAULT)
AND (sPedScene.eScene <> PR_SCENE_T_DEFAULT)
AND (sPedScene.eScene <> PR_SCENE_M_OVERRIDE)
AND (sPedScene.eScene <> PR_SCENE_F_OVERRIDE)
AND (sPedScene.eScene <> PR_SCENE_T_OVERRIDE)
AND (sPedScene.eScene <> PR_SCENE_HOSPITAL)
#IF IS_DEBUG_BUILD
g_iSelectedDebugPlayerCharScene = ENUM_TO_INT(sPedScene.eScene)
#ENDIF
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[sPedScene.ePed] = sPedScene.eScene
PRIVATE_UpdateLastSceneQueue(sPedScene.ePed, sPedScene.eScene)
ENDIF
IF sPedScene.eScene = PR_SCENE_HOSPITAL
ResetLastKnownPedInfo(g_savedGlobalsnorman.sPlayerData.sInfo, SP_MISSION_NONE)
ENDIF
PRIVATE_UpdatePostMissionSwitch(sPedScene.ePed)
PRIVATE_UpdateSwitchFriendTimer(sPedScene, sPassedScene)
PRIVATE_SetPlayerPedWanted(sPedScene)
RemoveAnimDictForTimetableExitSceneCam(sPedScene.eScene)
CLEAR_TIMEOFDAY(g_sMultiplayerTransitionTOD)
CLEAR_TIMEOFDAY(g_savedGlobalsnorman.sPlayerData.sInfo.sLastTimeActive[sPedScene.ePed])
IF IS_AUDIO_SCENE_ACTIVE("TOD_SHIFT_SCENE")
STOP_SOUND(sPedScene.sTimelapse.iSplineStageSound)
RELEASE_NAMED_SCRIPT_AUDIO_BANK("TIME_LAPSE")
STOP_AUDIO_SCENE("TOD_SHIFT_SCENE")
CPRINTLN(DEBUG_SWITCH, DEBUG_SYSTEM, "<TOD> Audio scene \"TOD_SHIFT_SCENE\" active in ", GET_THIS_SCRIPT_NAME(), ".")
// CASSERTLN(DEBUG_SWITCH, "Audio scene \"TOD_SHIFT_SCENE\" active")
ENDIF
g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = <<0,0,0>>
g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = 0.0
g_savedGlobalsnorman.sPlayerData.sInfo.iLastKnownRoomKey[sPedScene.ePed] = 0
g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownVelocity[sPedScene.ePed] = <<0,0,0>>
#IF IS_DEBUG_BUILD
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
IF IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>)
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene,
tPlayerSceneProceduralCam)
//
ELSE
SAVE_STRING_TO_DEBUG_FILE(" ! scene ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"")
SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom)
SAVE_STRING_TO_DEBUG_FILE("\" outside and non-null")
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
ENDIF
ELSE
IF NOT IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>)
SAVE_STRING_TO_DEBUG_FILE(" ! scene ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"")
SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom)
SAVE_STRING_TO_DEBUG_FILE("\" inside and null")
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
ENDIF
#ENDIF
// PRIVATE_ResetLeaveAreaForPreMissionSwitch(sPedScene)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENENRM - reset g_iLastSuccessfulAmbientLaunchTime \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"")
#ENDIF
//g_fCamToPhase = -1
//g_bSwitchSplineCamInProgress = FALSE //play final stage of anim
g_b_NOT_PlayerHasStartedNewScene = FALSE
g_iPausedOnOutroGametime = -1
Mission_Over(sPedScene.iMissionID)
IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3)
AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4)
DISABLE_CELLPHONE(FALSE)
ENDIF
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC STRING GET_GENERIC_PED_SCENE_STAGE_STRING(INT iStage)
STRING sStage = "NULL"
SWITCH iStage
CASE 0 sStage = "CONST_SWITCH_0_requestSwitch" BREAK
CASE 1 sStage = "CONST_SWITCH_1_initialiseSwitch" BREAK
CASE 2 sStage = "CONST_SWITCH_2_waitForInterior" BREAK
CASE 3 sStage = "CONST_SWITCH_3_setupPedTo" BREAK
CASE 4 sStage = "CONST_SWITCH_4_runCodeCam" BREAK
CASE 5 sStage = "CONST_TEST_SWITCH_5" BREAK
CASE 6 sStage = "CONST_TEST_SWITCH_6" BREAK
ENDSWITCH
RETURN sStage
ENDFUNC
PROC SET_GENERIC_PED_SCENE_STAGE(PED_SCENE_STRUCT &sPedScene, INT iStage)
IF (sPedScene.iStage != iStage)
sPedScene.iStage = iStage
PRINTLN("GENERIC_PED_SCENE - SET_GENERIC_PED_SCENE_STAGE - Setting sPedScene.iStage: ", GET_GENERIC_PED_SCENE_STAGE_STRING(iStage))
ENDIF
ENDPROC
FUNC BOOL GENERIC_PED_SCENE(PED_SCENE_STRUCT &sPedScene,
SceneGlobalFuncIndex customSetupSelectorCam,
SceneGlobalFunc customSetupScript, INT iSwitchFlags = 0)
IF NOT sPedScene.sSelectorCam.bPedSwitched
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_VEH_EXIT) //#582163
ENDIF
//Is the global wait timer at 0?
INT iGameTime = GET_GAME_TIMER()
IF iGameTime >= g_iGlobalWaitTime - 1000
ADD_GLOBAL_COMMUNICATION_DELAY(CC_DELAY_POST_AMBIENT_SWITCH / 3)
ENDIF
// Update GET_GENERIC_PED_SCENE_STAGE_STRING if changed
CONST_INT CONST_SWITCH_0_requestSwitch 0
CONST_INT CONST_SWITCH_1_initialiseSwitch 1
CONST_INT CONST_SWITCH_2_waitForInterior 2
CONST_INT CONST_SWITCH_3_setupPedTo 3
CONST_INT CONST_SWITCH_4_runCodeCam 4
CONST_INT CONST_TEST_SWITCH_5 5
CONST_INT CONST_TEST_SWITCH_6 6
PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene
VECTOR vPedAreaOffset = <<5,5,4>>
// // // // //
// stage 0: Request Switch
//
IF (sPedScene.iStage = CONST_SWITCH_0_requestSwitch)
m_enumMissionCandidateReturnValue eLaunchRequest
eLaunchRequest = Request_Mission_Launch(sPedScene.iMissionID,
MCTID_MUST_LAUNCH,
MISSION_TYPE_SWITCH, TRUE)
#IF IS_DEBUG_BUILD
SWITCH eLaunchRequest
CASE MCRET_DENIED
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "DENIED", "\" //", sPedScene.iMissionID)
BREAK
CASE MCRET_ACCEPTED
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "ACCEPTED", "\" //", sPedScene.iMissionID)
BREAK
CASE MCRET_PROCESSING
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", "PROCESSING", "\" //", sPedScene.iMissionID)
BREAK
DEFAULT
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" eLaunchRequest MCRET_", ENUM_TO_INT(eLaunchRequest), "_unknown", "\" //", sPedScene.iMissionID)
BREAK
ENDSWITCH
#ENDIF
IF (eLaunchRequest = MCRET_ACCEPTED)
STAT_INCREMENT(SP_AMBIENT_SWITCH_COUNT, 1)
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_1_initialiseSwitch)
ENDIF
IF NOT (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch)
IF NOT (g_eRunningMission = SP_MISSION_NONE)
IF ARE_STRINGS_EQUAL(g_sMissionStaticData[g_eRunningMission].scriptName, GET_THIS_SCRIPT_NAME())
CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName = GET_THIS_SCRIPT_NAME()")
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_1_initialiseSwitch)
ELSE
CPRINTLN(DEBUG_SWITCH, "g_sMissionStaticData[g_eRunningMission].scriptName <> GET_THIS_SCRIPT_NAME()")
ENDIF
#if not USE_CLF_DLC
#if not USE_NRM_DLC
ELIF Get_RC_MissionID_For_This_Script() = RC_MRS_PHILIPS_2
CPRINTLN(DEBUG_SWITCH, "Get_RC_MissionID_For_This_Script() = RC_MRS_PHILIPS_2")
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_1_initialiseSwitch)
#endif
#endif
ELSE
CPRINTLN(DEBUG_SWITCH, "g_eRunningMission = SP_MISSION_NONE")
ENDIF
ELSE
CPRINTLN(DEBUG_SWITCH, "sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch")
ENDIF
ENDIF
// // // // //
// stage 1: Request Switch
//
IF (sPedScene.iStage = CONST_SWITCH_1_initialiseSwitch)
sPedScene.sTimelapse.iTimelapseCut = 0
sPedScene.sTimelapse.iTimeSkipStage = 0
CLEAR_Pause_Outro_Count()
sPedScene.eSelectorPed = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(sPedScene.ePed)
IF GET_PLAYER_PED_POSITION_FOR_SCENE(sPedScene.eScene, sPedScene.vCreateCoords, sPedScene.fCreateHead, sPedScene.tCreateRoom)
DISABLE_CELLPHONE(TRUE)
VECTOR vCreateCoords
FLOAT fCreateHead
IF PRIVATE_Should_Default_PedTo_Coord_Move(sPedScene, vCreateCoords, fCreateHead)
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE("updated sPedScene.vCreateCoords: ")
SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords)
SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(fCreateHead)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" old sPedScene.vCreateCoords: ")
SAVE_VECTOR_TO_DEBUG_FILE(sPedScene.vCreateCoords)
SAVE_STRING_TO_DEBUG_FILE(", fCreateHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(sPedScene.fCreateHead)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" older vLastKnownCoords: ")
#if USE_CLF_DLC
SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed])
SAVE_STRING_TO_DEBUG_FILE(", fLastKnownHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed])
#endif
#if USE_NRM_DLC
SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed])
SAVE_STRING_TO_DEBUG_FILE(", fLastKnownHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed])
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed])
SAVE_STRING_TO_DEBUG_FILE(", fLastKnownHead: ")
SAVE_FLOAT_TO_DEBUG_FILE(g_savedGlobals.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed])
#endif
#endif
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
#IF IS_DEBUG_BUILD
VECTOR vVehCoordsOffset
#if USE_CLF_DLC
vVehCoordsOffset = g_vPlayerLastVehCoord[sPedScene.ePed] - g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]
#endif
#if USE_NRM_DLC
vVehCoordsOffset = g_vPlayerLastVehCoord[sPedScene.ePed] - g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
vVehCoordsOffset = g_vPlayerLastVehCoord[sPedScene.ePed] - g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed]
#endif
#endif
#ENDIF
sPedScene.vCreateCoords = vCreateCoords
sPedScene.fCreateHead = fCreateHead
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE(" OLD g_vPlayerLastVehCoord: ")
SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed])
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" OLD vVehCoordsOffset: ")
SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed])
SAVE_STRING_TO_DEBUG_FILE(" - ")
#if USE_CLF_DLC
SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed])
#endif
#if USE_NRM_DLC
SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed])
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
SAVE_VECTOR_TO_DEBUG_FILE(g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed])
#endif
#endif
SAVE_STRING_TO_DEBUG_FILE(" = ")
SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset)
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
#if USE_CLF_DLC
g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = vCreateCoords
g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = fCreateHead
#endif
#if USE_NRM_DLC
g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = vCreateCoords
g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = fCreateHead
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = vCreateCoords
g_savedGlobals.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = fCreateHead
#endif
#endif
IF g_ePlayerLastVehState[sPedScene.ePed] = PTVS_2_playerInVehicle
g_vPlayerLastVehCoord[sPedScene.ePed] = vCreateCoords
g_fPlayerLastVehHead[sPedScene.ePed] = fCreateHead
ENDIF
#IF IS_DEBUG_BUILD
SAVE_STRING_TO_DEBUG_FILE(" NEWER vVehCoordsOffset: ")
SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset)
SAVE_STRING_TO_DEBUG_FILE(" + ")
SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords)
SAVE_STRING_TO_DEBUG_FILE(" = ")
SAVE_VECTOR_TO_DEBUG_FILE(g_vPlayerLastVehCoord[sPedScene.ePed])
SAVE_NEWLINE_TO_DEBUG_FILE()
#ENDIF
//CASSERTLN(DEBUG_SWITCH, "Should_Default_PedTo_Coord_Move")
ENDIF
g_eSelectedPlayerCharScene = (sPedScene.eScene)
// Pin the interior into memory so the ped doesnt fall through the ground
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom)
ELSE
IF NOT IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords)
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords)
ELSE
sPedScene.roomInterior = NULL
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"")
ELSE
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", NONE")
ENDIF
#ENDIF
IF (sPedScene.roomInterior <> NULL)
IF NOT IS_INTERIOR_READY(sPedScene.roomInterior)
PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior)
ENDIF
ENDIF
IF (sPedScene.eScene = PR_SCENE_F_CS_CHECKSHOE)
OR (sPedScene.eScene = PR_SCENE_F_CS_WIPEHANDS)
OR (sPedScene.eScene = PR_SCENE_F_CS_WIPERIGHT)
SET_INTERIOR_CAPPED(INTERIOR_V_CHOPSHOP, FALSE)
ENDIF
RequestAnimDictForTimetableExitSceneCam(sPedScene.eScene)
VECTOR vecCamEndPos, vecCamEndRot
FLOAT vecCamEndFov
IF SETUP_PLAYER_CAMERA_FOR_SCENE(sPedScene.eScene, vecCamEndPos, vecCamEndRot, vecCamEndFov)
TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix
TEXT_LABEL tRecording_name
INT iRecording_num
FLOAT fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix)
OR GET_PLAYER_VEH_RECORDING_FOR_SCENE(sPedScene.eScene, tRecording_name, iRecording_num,
fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit)
OR SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam)
sPedScene.sSelectorCam.camTo = CREATE_CAM("DEFAULT_SCRIPTED_CAMERA", FALSE)
SET_CAM_COORD(sPedScene.sSelectorCam.camTo, vecCamEndPos)
SET_CAM_ROT(sPedScene.sSelectorCam.camTo, vecCamEndRot)
SET_CAM_FOV(sPedScene.sSelectorCam.camTo, vecCamEndFov)
// SET_CAM_FAR_CLIP(sPedScene.sSelectorCam.camTo, 800.0)
SET_PED_NON_CREATION_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset)
sPedScene.scenarioBlockID = ADD_SCENARIO_BLOCKING_AREA(vecCamEndPos-vPedAreaOffset, vecCamEndPos+vPedAreaOffset)
CLEAR_AREA(vecCamEndPos, VMAG(vPedAreaOffset), TRUE)
ENDIF
ENDIF
INCRAMENT_Pause_Outro_Count() //for "player_timetable_scene"
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENE - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"")
#ENDIF
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script)
INCRAMENT_Pause_Outro_Count() //for sPlayerTimetableAdditional_script
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> GENERIC_PED_SCENE - g_iPauseOnOutro: \"", g_iPauseOnOutro, " for \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" addition")
#ENDIF
ENDIF
// Found a suitable scene
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "\n GENERIC_PED_SCENE - Scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is suitable")
SaveSuitablePedSceneStructToSwitchLog(sPedScene)
#ENDIF
g_eRecentlySelectedScene = sPedScene.eScene
#IF IS_DEBUG_BUILD
BOOL WasNoCharacterBefore = FALSE
#ENDIF
enumCharacterList eCurrentPlayerPedEnum
eCurrentPlayerPedEnum = GET_CURRENT_PLAYER_PED_ENUM()
IF eCurrentPlayerPedEnum != NO_CHARACTER
IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPlayerPedEnum])
FLOAT fPlayerLastVehEngineHealth, fPlayerLastVehPetrolTankHealth
fPlayerLastVehEngineHealth = GET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum])
fPlayerLastVehPetrolTankHealth = GET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum])
CONST_FLOAT fCONST_VEH_EXPLODE_HEALTH -1000.0
IF fPlayerLastVehEngineHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75)
SET_VEHICLE_ENGINE_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25)
ENDIF
IF fPlayerLastVehPetrolTankHealth < (fCONST_VEH_EXPLODE_HEALTH*0.75)
SET_VEHICLE_PETROL_TANK_HEALTH(g_vPlayerVeh[eCurrentPlayerPedEnum], fCONST_VEH_EXPLODE_HEALTH*0.25)
ENDIF
ENDIF
STORE_VEH_DATA_FROM_PED(PLAYER_PED_ID(),
g_sPlayerLastVeh[eCurrentPlayerPedEnum],
g_vPlayerLastVehCoord[eCurrentPlayerPedEnum],
g_fPlayerLastVehHead[eCurrentPlayerPedEnum],
g_ePlayerLastVehState[eCurrentPlayerPedEnum] #IF USE_TU_CHANGES , g_ePlayerLastVehGen[eCurrentPlayerPedEnum] #ENDIF )
SAFE_STORE_PLAYER_PED_INFO(PLAYER_PED_ID(), FALSE)
STORE_DEFAULT_PLAYER_SWITCH_STATE(PLAYER_PED_ID())
ELSE
//2496918: BC: player is still MP character. Move them to the scene's location roughly. So when the failsafe comes in it won't move the player miles away.
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
SET_ENTITY_COORDS(PLAYER_PED_ID(), vecCamEndPos, FALSE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
#IF IS_DEBUG_BUILD
WasNoCharacterBefore = TRUE
#ENDIF
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "[SCENEWARP] GENERIC_PED_SCENE - Player is still the NO_CHARACTER ped. Moving the player to be close to the scene. ", vecCamEndPos, " ")
#ENDIF
ENDIF
ENDIF
PRIVATE_ClearPrioritySwitchFlag(sPedScene.ePed, sPedScene.eScene)
iRequestSwitchInterior_count = 0
g_iLastSuccessfulAmbientLaunchTime = GET_GAME_TIMER()
SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 10.0)
REQUEST_MODEL(GET_PLAYER_PED_MODEL(sPedScene.ePed))
#IF IS_DEBUG_BUILD
IF PRIVATE_Should_PedTo_Be_Created(sPedScene, WasNoCharacterBefore)
WAIT(0)
ENDIF
#ENDIF
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_3_setupPedTo)
ELSE
// Can't find suitable scene so bail out
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" is not suitable")
#ENDIF
RETURN TRUE
ENDIF
ENDIF
// // // // //
// stage 2: Wait For Interior
//
IF (sPedScene.iStage = CONST_SWITCH_2_waitForInterior)
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_3_setupPedTo)
iRequestSwitchInterior_count++
REQUEST_MODEL(GET_PLAYER_PED_MODEL(sPedScene.ePed))
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" isn't using new load scene [", iRequestSwitchInterior_count, "]...")
#ENDIF
// Make sure any interior is pinned before we proceed
IF sPedScene.roomInterior <> NULL
IF NOT IS_INTERIOR_READY(sPedScene.roomInterior)
PIN_INTERIOR_IN_MEMORY(sPedScene.roomInterior)
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_2_waitForInterior)
IF iRequestSwitchInterior_count > 150
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" timeout waiting for a non-null interior to be ready", " //roomInterior:", NATIVE_TO_INT(sPedScene.roomInterior), ", iWaitCount:", iRequestSwitchInterior_count)
TEXT_LABEL_63 tScene, tAssert
tScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)
tAssert = GET_STRING_FROM_STRING(tScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(tScene))
tAssert += " - timeout waiting for a non-null interior to be ready"
CASSERTLN(DEBUG_SWITCH, tAssert)
#ENDIF
iRequestSwitchInterior_count = 0
// Pin the interior into memory so the ped doesnt fall through the ground
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS_WITH_TYPE(sPedScene.vCreateCoords, sPedScene.tCreateRoom)
ELSE
sPedScene.roomInterior = GET_INTERIOR_AT_COORDS(sPedScene.vCreateCoords)
ENDIF
#IF IS_DEBUG_BUILD
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", \"", sPedScene.tCreateRoom, "\"")
ELSE
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" has room interior ", NATIVE_TO_INT(sPedScene.roomInterior), " //", sPedScene.vCreateCoords, ", NONE")
ENDIF
#ENDIF
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_3_setupPedTo)
ENDIF
ENDIF
ENDIF
ENDIF
// // // // //
// stage 3: Setup Ped To
//
IF (sPedScene.iStage = CONST_SWITCH_3_setupPedTo)
IF sPedScene.eScene = PR_SCENE_HOSPITAL
enumCharacterList eSelectorChar
eSelectorChar = GET_PLAYER_PED_ENUM_FROM_SELECTOR_SLOT(sPedScene.eSelectorPed)
#IF USE_TU_CHANGES
IF NOT IS_ENTITY_DEAD(sPedScene.sSelectorPeds.pedID[eSelectorChar])
#ENDIF
IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar])
SET_PED_AS_NO_LONGER_NEEDED(sPedScene.sSelectorPeds.pedID[eSelectorChar])
ELSE
#IF IS_DEBUG_BUILD
STRING InstanceScript
INT InstanceId
InstanceScript = GET_ENTITY_SCRIPT(sPedScene.sSelectorPeds.pedID[eSelectorChar], InstanceId)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]")
#ENDIF
ENDIF
#IF USE_TU_CHANGES
#IF IS_DEBUG_BUILD
ELSE
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - pedID[", GET_PLAYER_PED_STRING(eSelectorChar), "] is dead??? #1816254")
#ENDIF
ENDIF
#ENDIF
sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed] = NULL
sPedScene.eScene = PR_SCENE_HOSPITAL
ENDIF
IF PRIVATE_Should_PedTo_Be_Created(sPedScene)
// IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
// CPRINTLN(DEBUG_SWITCH, "MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 25.0)")
//
// MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 25.0)
// ENDIF
// Make a dummy ped so we can run cam spline to them
#IF USE_CLF_DLC
PED_VARIATION_STRUCT SVARIATIONS = g_savedGlobalsClifford.SPLAYERDATA.SINFO.SVARIATIONS[SPEDSCENE.ESELECTORPED]
#ENDIF
#IF USE_NRM_DLC
PED_VARIATION_STRUCT SVARIATIONS = G_SAVEDGLOBALSnorman.SPLAYERDATA.SINFO.SVARIATIONS[SPEDSCENE.ESELECTORPED]
#ENDIF
#IF NOT USE_CLF_DLC
#IF NOT USE_NRM_DLC
PED_VARIATION_STRUCT SVARIATIONS = G_SAVEDGLOBALS.SPLAYERDATA.SINFO.SVARIATIONS[SPEDSCENE.ESELECTORPED]
#ENDIF
#endif
BOOL bIgnoreUnderwearcheck = FALSE
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
bIgnoreUnderwearcheck = TRUE
ENDIF
IF CREATE_PLAYER_PED_ON_FOOT(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], sPedScene.ePed, sPedScene.vCreateCoords, sPedScene.fCreateHead, DEFAULT, DEFAULT, bIgnoreUnderwearcheck)
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom)
AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo)
AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) != SWITCH_TYPE_SHORT
g_savedGlobals.sPlayerData.sInfo.sVariations[sPedScene.eSelectorPed] = sVariations
ENDIF
ENDIF
PRELOAD_STORED_PLAYER_PED_VARIATION(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// Set invisible to avoid any popping issues
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
#IF IS_DEBUG_BUILD
enumCreateState eCreateState
IF SafeToCreatePlayerAmbientPedAtLastKnownLocation(sPedScene.ePed, eCreateState)
CPRINTLN(DEBUG_SWITCH, "safe to create")
ELSE
SWITCH eCreateState
CASE eCS_3_SWITCH_IN_PROGRESS CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_3_SWITCH_IN_PROGRESS") BREAK
CASE eCS_5_TOO_MANY_HOURS_PASSED CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_5_TOO_MANY_HOURS_PASSED") BREAK
CASE eCS_7_TOO_FAR_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_7_TOO_FAR_TO_CREATE") BREAK
CASE eCS_8_TOO_CLOSE_TO_CREATE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_8_TOO_CLOSE_TO_CREATE") BREAK
CASE eCS_9_SPHERE_VISIBLE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_9_SPHERE_VISIBLE") BREAK
// CASE eCS_4_INVALID_LAST_TIME_ACTIVE FALLTHRU
// CASE eCS_6_INVALID_LAST_KNOWN_COORDS
// EXIT
// BREAK
CASE eCS_10_POST_MISSION_SWITCH CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_10_POST_MISSION_SWITCH") BREAK
CASE eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_11_SUPRESSED_FOR_FRIEND_ACTIVITY") BREAK
CASE eCS_12_NEAR_MISSION_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_12_NEAR_MISSION_TRIGGER") BREAK
CASE eCS_13_LEADIN_TRIGGER CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_13_LEADIN_TRIGGER") BREAK
CASE eCS_14_DIRECTOR_MODE CPRINTLN(DEBUG_SWITCH, "DON'T create - eCS_14_DIRECTOR_MODE") BREAK
DEFAULT
CPRINTLN(DEBUG_SWITCH, "DON'T create ", ENUM_TO_INT(eCreateState))
BREAK
ENDSWITCH
ENDIF
#ENDIF
ELSE
SET_ENTITY_VISIBLE(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], FALSE)
ENDIF
// IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
// CPRINTLN(DEBUG_SWITCH, "MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 100.0)")
//
// MODIFY_VEHICLE_TOP_SPEED(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()), 100.0)
// ENDIF
// Freeze to avoid falling through the world
FREEZE_ENTITY_POSITION(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed], TRUE)
// IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// ENDIF
FORCE_ROOM_FOR_SCENE_SELECTOR_PED(sPedScene)
sPedScene.sSelectorPeds.bInitialised = TRUE
sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed
sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - created player ped on foot for scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\" ", sPedScene.vCreateCoords)
#ENDIF
g_iPausedOnOutroGametime = -1
Preload_SpecialMissionAssets(sPedScene.eScene)
IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom)
AND DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedTo)
AND GET_IDEAL_PLAYER_SWITCH_TYPE(GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, FALSE), GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, FALSE)) = SWITCH_TYPE_SHORT
INT iPreloadGametime
IF NOT HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
iPreloadGametime = GET_GAME_TIMER()
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - start waiting for preload var")
WHILE (iPreloadGametime+0500) < GET_GAME_TIMER()
AND iPreloadGametime > 0
IF HAS_PED_PRELOAD_VARIATION_DATA_FINISHED(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
iPreloadGametime = -1
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - gave up waiting for preload var")
ENDIF
WAIT(0)
ENDWHILE
IF NOT (iPreloadGametime = -1)
CASSERTLN(DEBUG_SWITCH, "wait for ped var preload")
ENDIF
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - finished waiting for preload var (", iPreloadGametime, ", ", GET_GAME_TIMER(), ")")
ENDIF
ENDIF
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE)
RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
sPedScene = CALL customSetupSelectorCam(sPedScene)
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_4_runCodeCam)
ENDIF
ELSE
sPedScene.sSelectorPeds.bInitialised = TRUE
sPedScene.sSelectorPeds.eNewSelectorPed = sPedScene.eSelectorPed
sPedScene.sSelectorCam.pedTo = sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed]
IF sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID() //#1565907
SET_ENTITY_AS_MISSION_ENTITY(sPedScene.sSelectorCam.pedTo, TRUE, TRUE)
ENDIF
// IF SET_PED_VARIATIONS_FOR_SCENE(sPedScene.eScene, sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// STORE_PLAYER_PED_VARIATIONS(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
// ENDIF
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedTo, TRUE)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, FALSE)
CLEAR_AREA_OF_PROJECTILES(sPedScene.vCreateCoords, 10.0)
#IF IS_DEBUG_BUILD
VECTOR vPedToCoord = GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - use global ped for scene \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"", vPedToCoord)
#ENDIF
IF NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo), 5.0)
AND NOT ARE_VECTORS_ALMOST_EQUAL(sPedScene.vCreateCoords, <<0,0,0>>, 5.0)
IF (sPedScene.eScene = PR_SCENE_M_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_F_DEFAULT)
OR (sPedScene.eScene = PR_SCENE_T_DEFAULT)
//
ELSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, " pedTo(", vPedToCoord, ") nowhere near vCreateCoords(", sPedScene.vCreateCoords, "): dist:", VDIST(sPedScene.vCreateCoords, GET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo)))
CPRINTLN(DEBUG_SWITCH, "\n\n\n pedTo nowhere near vCreateCoords??\n\n\n")
SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedTo, sPedScene.vCreateCoords)
SET_ENTITY_HEADING(sPedScene.sSelectorCam.pedTo, sPedScene.fCreateHead)
#ENDIF
ENDIF
ENDIF
g_iPausedOnOutroGametime = -1
Preload_SpecialMissionAssets(sPedScene.eScene)
RELEASE_PED_PRELOAD_VARIATION_DATA(sPedScene.sSelectorPeds.pedID[sPedScene.eSelectorPed])
sPedScene = CALL customSetupSelectorCam(sPedScene)
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_SWITCH_4_runCodeCam)
ENDIF
ENDIF
// // // // //
// stage 4: Run Code Cam
//
IF (sPedScene.iStage = CONST_SWITCH_4_runCodeCam)
BOOL bCreateReplacementForPlayer, bKeepTasks
bCreateReplacementForPlayer = FALSE
bKeepTasks = FALSE
SWITCH_TYPE eSwitchType
eSwitchType = SWITCH_TYPE_AUTO
FLOAT fGameplayCamPitch, fGameplayCamHeading
fGameplayCamPitch = 0.0
fGameplayCamHeading = 0.0
BOOL bPauseBeforePan, bPauseBeforeOutro
bPauseBeforePan = FALSE
bPauseBeforeOutro = FALSE
GetSplineCamFromPlayerToPedParams(sPedScene,
bCreateReplacementForPlayer, bKeepTasks, eSwitchType,
fGameplayCamPitch, fGameplayCamHeading,
bPauseBeforePan, bPauseBeforeOutro, iSwitchFlags)
#IF IS_DEBUG_BUILD
TEXT_LABEL_63 sLiteral
sLiteral = ""
STRING sScene
sScene = Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)
HUD_COLOURS eHudColour
eHudColour = HUD_COLOUR_PURE_WHITE
#ENDIF
IF IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene, tPlayerSceneProceduralCam)
sPedScene.tCreateRoom = tPlayerSceneProceduralCam
ENDIF
ENDIF
IF (sPedScene.eScene = PR_SCENE_F_S_EXILE2)
IF NOT bPauseBeforePan
CPRINTLN(DEBUG_SWITCH, "force pause on pan for exile2")
bPauseBeforePan = TRUE
ENDIF
ENDIF
PRINTLN("GENERIC_PED_SCENE ")
// Use a long spline so we can delete the current character and dont see the new character pop into place
BOOL bRunning_switch_cam_from_player
bRunning_switch_cam_from_player = FALSE
IF NOT DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo)
PRINTLN("GENERIC_PED_SCENE - Querying RUN_SWITCH_CAM_FROM_PLAYER_TO_PED... (1)")
IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED(sPedScene.sSelectorCam,
eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading,
bPauseBeforePan, bPauseBeforeOutro, sPedScene.tCreateRoom)
#IF IS_DEBUG_BUILD
sLiteral += ("switch cam \"")
sLiteral += GET_STRING_FROM_STRING(sScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(sScene))
sLiteral += ("\" from player to ped [g_iOutro:")
sLiteral += (g_iPauseOnOutro)
sLiteral += ("]")
#ENDIF
PRINTLN("GENERIC_PED_SCENE - Setting bRunning_switch_cam_from_player to TRUE (1)")
bRunning_switch_cam_from_player = TRUE
ENDIF
ELSE
// IF (g_fCamToPhase < 0)
// g_fCamToPhase = 0
// ENDIF
TEXT_LABEL_63 tEstabShot
tEstabShot = sPedScene.tCreateRoom
IF NOT IS_STRING_NULL_OR_EMPTY(tEstabShot)
TEXT_LABEL_63 tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix
GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPedScene.eScene, tPlayerSceneSyncAnimCam, tPlayerSceneEstabShotSuffix)
IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerSceneEstabShotSuffix)
tEstabShot += tPlayerSceneEstabShotSuffix
ENDIF
ENDIF
PRINTLN("GENERIC_PED_SCENE - Querying RUN_SWITCH_CAM_FROM_PLAYER_TO_PED... (2)")
IF RUN_SWITCH_CAM_FROM_PLAYER_TO_CAM(sPedScene.sSelectorCam,
sPedScene.sSelectorCam.camTo,
eSwitchType, iSwitchFlags, fGameplayCamPitch, fGameplayCamHeading,
bPauseBeforePan, bPauseBeforeOutro, tEstabShot)
#IF IS_DEBUG_BUILD
sLiteral += ("switch cam \"")
sLiteral += GET_STRING_FROM_STRING(sScene,
GET_LENGTH_OF_LITERAL_STRING("PR_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(sScene))
sLiteral += ("\" from player to cam [g_iOutro:")
sLiteral += (g_iPauseOnOutro)
sLiteral += ("]")
#ENDIF
PRINTLN("GENERIC_PED_SCENE - Setting bRunning_switch_cam_from_player to TRUE (2)")
bRunning_switch_cam_from_player = TRUE
ENDIF
ENDIF
#IF IS_DEBUG_BUILD
IF g_bDrawLiteralSceneString
SET_TEXT_SCALE(0.4, 0.4)
SET_TEXT_HUD_COLOUR(eHudColour, 127)
SET_TEXT_JUSTIFICATION(FONT_CENTRE)
SET_TEXT_OUTLINE()
DISPLAY_TEXT_WITH_LITERAL_STRING(0.5, 0.925 - 0.03, "STRING", sLiteral)
ENDIF
#ENDIF
IF bRunning_switch_cam_from_player
PRINTLN("GENERIC_PED_SCENE - bRunning_switch_cam_from_player is TRUE")
SWITCH_STATE eSwitchState, eSETUP_SCRIPT_SWITCH_STATE, eTAKE_CONTROL_SCRIPT_SWITCH_STATE
eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_ASCENT //SWITCH_STATE_JUMPCUT_DESCENT
eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_JUMPCUT_DESCENT
IF g_bMagDemoActive
eSETUP_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN
eTAKE_CONTROL_SCRIPT_SWITCH_STATE = SWITCH_STATE_PAN
ENDIF
IF (GET_PLAYER_SWITCH_TYPE() <> SWITCH_TYPE_SHORT)
eSwitchState = GET_PLAYER_SWITCH_STATE()
PRINTLN("GENERIC_PED_SCENE - (1) eSwitchState: ", Get_String_From_Switch_State(eSwitchState))
PRINTLN("GENERIC_PED_SCENE - GET_PLAYER_SWITCH_TYPE(): ", Get_String_From_Switch_Type(GET_PLAYER_SWITCH_TYPE()))
PRINTLN("GENERIC_PED_SCENE - sPedScene.eScene: ", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
IF (eSwitchState = SWITCH_STATE_JUMPCUT_DESCENT) OR (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT)
#IF USE_TU_CHANGES
OR (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT
AND NOT (sPedScene.eScene = PR_SCENE_M_DEFAULT OR sPedScene.eScene = PR_SCENE_F_DEFAULT OR sPedScene.eScene = PR_SCENE_T_DEFAULT))
#ENDIF
PRINTLN("GENERIC_PED_SCENE - GET_PLAYER_SWITCH_JUMP_CUT_INDEX(): ", GET_PLAYER_SWITCH_JUMP_CUT_INDEX())
PRINTLN("GENERIC_PED_SCENE - g_iPauseOnOutro: ", g_iPauseOnOutro)
IF (GET_PLAYER_SWITCH_JUMP_CUT_INDEX() = 0)
IF (g_iPauseOnOutro > 0)
PRINTLN("GENERIC_PED_SCENE - (1) g_iPausedOnOutroGametime: ", g_iPausedOnOutroGametime)
IF (g_iPausedOnOutroGametime < 0)
PRINTLN("GENERIC_PED_SCENE - (2) g_iPausedOnOutroGametime: ", g_iPausedOnOutroGametime)
g_iPausedOnOutroGametime = GET_GAME_TIMER()
ELSE
CPRINTLN(DEBUG_SWITCH, "g_iPausedOnOutroGametime: ", GET_GAME_TIMER() - g_iPausedOnOutroGametime, " [g_iPauseOnOutro: ", g_iPauseOnOutro, "]", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
INT iMAX_PAUSED_ON_OUTRO_WAIT
#IF NOT IS_NEXTGEN_BUILD
iMAX_PAUSED_ON_OUTRO_WAIT = 10000
#ENDIF
#IF IS_NEXTGEN_BUILD
iMAX_PAUSED_ON_OUTRO_WAIT = 12500
#ENDIF
IF (eSwitchState = SWITCH_STATE_ESTABLISHING_SHOT)
iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.75)
ENDIF
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script)
iMAX_PAUSED_ON_OUTRO_WAIT = ROUND(TO_FLOAT(iMAX_PAUSED_ON_OUTRO_WAIT)*1.75)
ENDIF
IF GET_GAME_TIMER() > (g_iPausedOnOutroGametime+iMAX_PAUSED_ON_OUTRO_WAIT)
PRINTLN("GENERIC_PED_SCENE - GET_GAME_TIMER(): ", GET_GAME_TIMER(), " > g_iPausedOnOutroGametime+iMAX_PAUSED_ON_OUTRO_WAIT: ", g_iPausedOnOutroGametime+iMAX_PAUSED_ON_OUTRO_WAIT)
DECRAMENT_Pause_Outro_Count()
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> ar_ALLOW_PLAYER_SWITCH_OUTRO(", Get_String_From_Ped_Request_Scene_Enum(g_eRecentlySelectedScene), ") //g_iPauseOnOutro:", g_iPauseOnOutro)
IF (GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_MEDIUM AND eSwitchState = SWITCH_STATE_JUMPCUT_ASCENT)
//CASSERTLN(DEBUG_SWITCH, "fix for bug #1817876")
ELSE
TEXT_LABEL_63 sBroke
sBroke = GET_STRING_FROM_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene),
GET_LENGTH_OF_LITERAL_STRING("PS_SCENE_"),
GET_LENGTH_OF_LITERAL_STRING(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene)))
sBroke += " broke - held on jumpcut descent for "
sBroke += iMAX_PAUSED_ON_OUTRO_WAIT/1000
sBroke += "sec!"
CASSERTLN(DEBUG_SWITCH, sBroke)
ENDIF
#ENDIF
ALLOW_PLAYER_SWITCH_OUTRO()
g_iPausedOnOutroGametime = -1
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
PRINTLN("GENERIC_PED_SCENE - GET_PLAYER_SWITCH_TYPE() = SWITCH_TYPE_SHORT")
//short range,
eSwitchState = eSETUP_SCRIPT_SWITCH_STATE
eTAKE_CONTROL_SCRIPT_SWITCH_STATE = eSETUP_SCRIPT_SWITCH_STATE
ENDIF
PRIVATE_SetClockTimeForSwitchScene(sPedScene)
IF NOT IS_SCREEN_FADED_IN()
AND NOT IS_SCREEN_FADING_IN()
IF (eSwitchState <> SWITCH_STATE_PREP_DESCENT)
CPRINTLN(DEBUG_SWITCH, DEBUG_INIT, "player_controller.sc is fading in the screen as we are starting a descent switch scene after a load.")
DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME)
ENDIF
ENDIF
IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_PAUSE_BEFORE_DESCENT)
IF (eSwitchState = SWITCH_STATE_PREP_DESCENT)
CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags)
ENDIF
ENDIF
PRINTLN("GENERIC_PED_SCENE - (2) eSwitchState: ", Get_String_From_Switch_State(eSwitchState))
PRINTLN("GENERIC_PED_SCENE - (2) eSETUP_SCRIPT_SWITCH_STATE: ", Get_String_From_Switch_State(eSETUP_SCRIPT_SWITCH_STATE))
PRINTLN("GENERIC_PED_SCENE - (2) eTAKE_CONTROL_SCRIPT_SWITCH_STATE: ", Get_String_From_Switch_State(eTAKE_CONTROL_SCRIPT_SWITCH_STATE))
IF (eSwitchState >= eSETUP_SCRIPT_SWITCH_STATE)
PRINTLN("GENERIC_PED_SCENE - Progress 1")
IF CALL customSetupScript(sPedScene, sPassedScene, iSwitchFlags)
PRINTLN("GENERIC_PED_SCENE - Progress 2")
#IF IS_DEBUG_BUILD
DEBUG_PRINTCALLSTACK()
#ENDIF
IF NOT sPedScene.sSelectorCam.bPedSwitched
PRINTLN("GENERIC_PED_SCENE - Progress 3")
PRINTLN("GENERIC_PED_SCENE - sPedScene.sSelectorCam.bOKToSwitchPed: ", sPedScene.sSelectorCam.bOKToSwitchPed)
IF sPedScene.sSelectorCam.bOKToSwitchPed
AND (eSwitchState >= eTAKE_CONTROL_SCRIPT_SWITCH_STATE)
PRINTLN("GENERIC_PED_SCENE - Progress 4")
BOOL bTakenControl = FALSE
// IF IS_BIT_SET(g_iSwitchTriggerStateBitset, SWITCH_TRIG_BLOCK_CHAR_SWITCH)
// AND ((sPedScene.eScene = PR_SCENE_M_DEFAULT) OR (sPedScene.eScene = PR_SCENE_F_DEFAULT) OR (sPedScene.eScene = PR_SCENE_T_DEFAULT))
//
// CPRINTLN(DEBUG_SWITCH, "<")
// CPRINTLN(DEBUG_SWITCH, GET_THIS_SCRIPT_NAME())
// CPRINTLN(DEBUG_SWITCH, "> dont take control, SWITCH_TRIG_BLOCK_CHAR_SWITCH is set.")
//
// CPRINTLN(DEBUG_SWITCH, DEBUG_TRIGGER, "<SWITCH-TRIG> Skipping character switch and warping player to lead-in instead.")
// SET_ENTITY_COORDS(sPedScene.sSelectorCam.pedFrom, sPedScene.vCreateCoords)
//
// bTakenControl = TRUE
// ELSE
PRINTLN("GENERIC_PED_SCENE - Calling: TAKE_CONTROL_OF_SELECTOR_PED")
IF TAKE_CONTROL_OF_SELECTOR_PED(sPedScene.sSelectorPeds, bCreateReplacementForPlayer, bKeepTasks)
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> take control, switch trigger null")
PRINTLN("GENERIC_PED_SCENE - Setting bTakenControl to TRUE")
bTakenControl = TRUE
ENDIF
// ENDIF
IF bTakenControl
PRINTLN("GENERIC_PED_SCENE - bTakenControl is TRUE")
IF DOES_ENTITY_EXIST(sPedScene.sSelectorCam.pedFrom)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, TRUE)
ENDIF
PRIVATE_SetDefaultPlayerPedAttributes(sPedScene.sSelectorPeds)
PRIVATE_SetClockTimeForSwitchScene(sPedScene)
PRIVATE_UpdateDrunkenPeds()
/* //#1189748
Set_Leave_Area_Flag_For_All_Blipped_Missions() //#1176160
*/
SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0)
g_sPlayerPedRequest.sSelectorPeds = sPedScene.sSelectorPeds
sPedScene.sSelectorCam.bPedSwitched = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF (eSwitchState >= SWITCH_STATE_JUMPCUT_ASCENT)
SET_PLAYERPAD_SHAKES_WHEN_CONTROLLER_DISABLED(FALSE)
ENDIF
IF g_b_NOT_PlayerHasStartedNewScene
PRINTLN("GENERIC_PED_SCENE - g_b_NOT_PlayerHasStartedNewScene is TRUE")
IF sPedScene.sSelectorCam.bPedSwitched
PRINTLN("GENERIC_PED_SCENE - sPedScene.sSelectorCam.bPedSwitched is TRUE")
IF PRIVATE_PlayerHasStartedNewScene(sPedScene)
PRINTLN("GENERIC_PED_SCENE - Setting g_b_NOT_PlayerHasStartedNewScene to FALSE")
g_b_NOT_PlayerHasStartedNewScene = FALSE
ENDIF
ENDIF
ENDIF
ELSE
//
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_TEST_SWITCH_5)
ENDIF
ENDIF
// // // // //
// stage xx: Request Switch
//
IF (sPedScene.iStage = CONST_TEST_SWITCH_5)
IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camTo)
IF IS_CAM_ACTIVE(sPedScene.sSelectorCam.camTo)
IF IS_CAM_INTERPOLATING(sPedScene.sSelectorCam.camTo)
//g_fCamToPhase = GET_CAM_SPLINE_PHASE(sPedScene.sSelectorCam.camTo)
ELSE
// //
SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE)
DESTROY_CAM(sPedScene.sSelectorCam.camTo)
ENDIF
ELSE
// //
SET_CAM_ACTIVE(sPedScene.sSelectorCam.camTo, FALSE)
DESTROY_CAM(sPedScene.sSelectorCam.camTo)
ENDIF
REMOVE_SCENARIO_BLOCKING_AREA(sPedScene.scenarioBlockID)
CLEAR_PED_NON_CREATION_AREA()
ELSE
IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camID)
DESTROY_CAM(sPedScene.sSelectorCam.camID)
ENDIF
IF sPedScene.sSelectorCam.iInterpCams > 0
INT iCamCount
FOR iCamCount = 0 TO sPedScene.sSelectorCam.iInterpCams-1
IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camInterpIDs[iCamCount])
DESTROY_CAM(sPedScene.sSelectorCam.camInterpIDs[iCamCount])
ENDIF
ENDFOR
ENDIF
IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3)
AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4)
DISABLE_CELLPHONE(sPedScene.sSelectorCam.bIsPhoneDisabled)
ENDIF
// Reset all the camera values incase they have to be used again
sPedScene.sSelectorCam.bSplineCreated = FALSE
sPedScene.sSelectorCam.bSplineActive = FALSE
sPedScene.sSelectorCam.bSplineComplete = FALSE
sPedScene.sSelectorCam.bOKToSwitchPed = FALSE
sPedScene.sSelectorCam.bPedSwitched = FALSE
sPedScene.sSelectorCam.bRun = FALSE
sPedScene.sSelectorCam.iInterpCams = 0
// Set the relative heading/pitch if the calling scipt used a custom camera
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(gameplayCamHeading)
// SET_GAMEPLAY_CAM_RELATIVE_PITCH(gameplayCamPitch)
IF NOT (g_drunkCameraActive)
STOP_GAMEPLAY_CAM_SHAKING(TRUE)
SET_GAMEPLAY_CAM_MOTION_BLUR_SCALING_THIS_UPDATE(0)
SET_GAMEPLAY_CAM_MAX_MOTION_BLUR_STRENGTH_THIS_UPDATE(0)
ENDIF
RENDER_SCRIPT_CAMS(FALSE, TRUE, 1000)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
SET_PLAYER_INVINCIBLE(PLAYER_ID(), FALSE)
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
SET_PED_CAN_BE_TARGETTED(PLAYER_PED_ID(), TRUE)
SET_AIR_DRAG_MULTIPLIER_FOR_PLAYERS_VEHICLE(PLAYER_ID(), 1.0)
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
SET_ENTITY_COLLISION(PLAYER_PED_ID(), TRUE)
ENDIF
ENDIF
SET_SKYSWOOP_STAGE(SKYSWOOP_NONE)
// If we didnt switch players then reset the proofs
IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedFrom)
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedFrom, FALSE)
SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(sPedScene.sSelectorCam.pedFrom, TRUE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, TRUE)
ENDIF
IF NOT IS_PED_INJURED(sPedScene.sSelectorCam.pedTo)
SET_ENTITY_INVINCIBLE(sPedScene.sSelectorCam.pedTo, FALSE)
SET_PED_GET_OUT_UPSIDE_DOWN_VEHICLE(sPedScene.sSelectorCam.pedTo, TRUE)
IF (sPedScene.sSelectorCam.pedTo != PLAYER_PED_ID())
SET_ENTITY_LOAD_COLLISION_FLAG(sPedScene.sSelectorCam.pedTo, FALSE)
ENDIF
ENDIF
SET_GENERIC_PED_SCENE_STAGE(sPedScene, CONST_TEST_SWITCH_6)
ENDIF
ENDIF
// // // // //
// stage xx: Request Switch
//
IF (sPedScene.iStage = CONST_TEST_SWITCH_6)
IF sPedScene.roomInterior <> NULL
UNPIN_INTERIOR(sPedScene.roomInterior)
ENDIF
// FADE_UP_PED_LIGHT(4.0)
CLEAR_FOCUS()
SET_MODEL_AS_NO_LONGER_NEEDED(GET_PLAYER_PED_MODEL(sPedScene.ePed))
enumCharacterList eCurrentPed
eCurrentPed = GET_CURRENT_PLAYER_PED_ENUM()
IF eCurrentPed != NO_CHARACTER
IF NOT IS_ENTITY_DEAD(g_vPlayerVeh[eCurrentPed])
IF DOES_ENTITY_BELONG_TO_THIS_SCRIPT(g_vPlayerVeh[eCurrentPed])
SET_VEHICLE_AS_NO_LONGER_NEEDED(g_vPlayerVeh[eCurrentPed])
ELSE
#IF IS_DEBUG_BUILD
STRING InstanceScript
INT InstanceId
InstanceScript = GET_ENTITY_SCRIPT(g_vPlayerVeh[eCurrentPed], InstanceId)
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - g_vPlayerVeh[", GET_PLAYER_PED_STRING(eCurrentPed), "] belongs to \"", InstanceScript, "\" [", InstanceId, "]")
#ENDIF
ENDIF
ENDIF
MODEL_NAMES ePlayerLastVehModel
ePlayerLastVehModel = g_sPlayerLastVeh[eCurrentPed].model
IF (ePlayerLastVehModel <> DUMMY_MODEL_FOR_SCRIPT)
SET_MODEL_AS_NO_LONGER_NEEDED(ePlayerLastVehModel)
ENDIF
ENDIF
PRIVATE_UpdateChainedPostMissionSwitch(sPedScene.ePed)
IF (sPedScene.eScene <> PR_SCENE_M_DEFAULT)
AND (sPedScene.eScene <> PR_SCENE_F_DEFAULT)
AND (sPedScene.eScene <> PR_SCENE_T_DEFAULT)
AND (sPedScene.eScene <> PR_SCENE_M_OVERRIDE)
AND (sPedScene.eScene <> PR_SCENE_F_OVERRIDE)
AND (sPedScene.eScene <> PR_SCENE_T_OVERRIDE)
AND (sPedScene.eScene <> PR_SCENE_HOSPITAL)
#IF IS_DEBUG_BUILD
g_iSelectedDebugPlayerCharScene = ENUM_TO_INT(sPedScene.eScene)
#ENDIF
g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[sPedScene.ePed] = sPedScene.eScene
PRIVATE_UpdateLastSceneQueue(sPedScene.ePed, sPedScene.eScene)
ENDIF
IF sPedScene.eScene = PR_SCENE_HOSPITAL
#if USE_CLF_DLC
ResetLastKnownPedInfo(g_savedGlobalsClifford.sPlayerData.sInfo, SP_MISSION_NONE)
#endif
#if USE_NRM_DLC
ResetLastKnownPedInfo(g_savedGlobalsnorman.sPlayerData.sInfo, SP_MISSION_NONE)
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
ResetLastKnownPedInfo(g_savedGlobals.sPlayerData.sInfo, SP_MISSION_NONE)
#endif
#endif
ENDIF
PRIVATE_UpdatePostMissionSwitch(sPedScene.ePed)
PRIVATE_UpdateSwitchFriendTimer(sPedScene, sPassedScene)
PRIVATE_SetPlayerPedWanted(sPedScene)
RemoveAnimDictForTimetableExitSceneCam(sPedScene.eScene)
CLEAR_TIMEOFDAY(g_sMultiplayerTransitionTOD)
#if USE_CLF_DLC
CLEAR_TIMEOFDAY(g_savedGlobalsClifford.sPlayerData.sInfo.sLastTimeActive[sPedScene.ePed])
#endif
#if USE_NRM_DLC
CLEAR_TIMEOFDAY(g_savedGlobalsnorman.sPlayerData.sInfo.sLastTimeActive[sPedScene.ePed])
#endif
#if not USE_CLF_DLC
#if not use_NRM_DLC
CLEAR_TIMEOFDAY(g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[sPedScene.ePed])
#endif
#endif
IF IS_AUDIO_SCENE_ACTIVE("TOD_SHIFT_SCENE")
STOP_SOUND(sPedScene.sTimelapse.iSplineStageSound)
RELEASE_NAMED_SCRIPT_AUDIO_BANK("TIME_LAPSE")
STOP_AUDIO_SCENE("TOD_SHIFT_SCENE")
CPRINTLN(DEBUG_SWITCH, DEBUG_SYSTEM, "<TOD> Audio scene \"TOD_SHIFT_SCENE\" active in ", GET_THIS_SCRIPT_NAME(), ".")
// CASSERTLN(DEBUG_SWITCH, "Audio scene \"TOD_SHIFT_SCENE\" active")
ENDIF
#if USE_CLF_DLC
g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = <<0,0,0>>
g_savedGlobalsClifford.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = 0.0
g_savedGlobalsClifford.sPlayerData.sInfo.iLastKnownRoomKey[sPedScene.ePed] = 0
g_savedGlobalsClifford.sPlayerData.sInfo.vLastKnownVelocity[sPedScene.ePed] = <<0,0,0>>
#endif
#if USE_NRM_DLC
g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = <<0,0,0>>
g_savedGlobalsnorman.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = 0.0
g_savedGlobalsnorman.sPlayerData.sInfo.iLastKnownRoomKey[sPedScene.ePed] = 0
g_savedGlobalsnorman.sPlayerData.sInfo.vLastKnownVelocity[sPedScene.ePed] = <<0,0,0>>
#endif
#if not USE_CLF_DLC
#if not USE_NRM_DLC
g_savedGlobals.sPlayerData.sInfo.vLastKnownCoords[sPedScene.ePed] = <<0,0,0>>
g_savedGlobals.sPlayerData.sInfo.fLastKnownHead[sPedScene.ePed] = 0.0
g_savedGlobals.sPlayerData.sInfo.iLastKnownRoomKey[sPedScene.ePed] = 0
g_savedGlobals.sPlayerData.sInfo.vLastKnownVelocity[sPedScene.ePed] = <<0,0,0>>
#endif
#endif
#IF IS_DEBUG_BUILD
IF NOT IS_STRING_NULL_OR_EMPTY(sPedScene.tCreateRoom)
IF IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>)
TEXT_LABEL_23 tPlayerSceneProceduralCam
IF SETUP_PROCEDURAL_CAMERA_FOR_SCENE(sPedScene.eScene,
tPlayerSceneProceduralCam)
//
ELSE
SAVE_STRING_TO_DEBUG_FILE(" ! scene ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"")
SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom)
SAVE_STRING_TO_DEBUG_FILE("\" outside and non-null")
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
ENDIF
ELSE
IF NOT IS_COLLISION_MARKED_OUTSIDE(sPedScene.vCreateCoords+<<0,0,0.5>>)
SAVE_STRING_TO_DEBUG_FILE(" ! scene ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(".tCreateRoom = \"")
SAVE_STRING_TO_DEBUG_FILE(sPedScene.tCreateRoom)
SAVE_STRING_TO_DEBUG_FILE("\" inside and null")
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
ENDIF
#ENDIF
// PRIVATE_ResetLeaveAreaForPreMissionSwitch(sPedScene)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "GENERIC_PED_SCENE - reset g_iLastSuccessfulAmbientLaunchTime \"", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene), "\"")
#ENDIF
//g_fCamToPhase = -1
//g_bSwitchSplineCamInProgress = FALSE //play final stage of anim
g_b_NOT_PlayerHasStartedNewScene = FALSE
g_iPausedOnOutroGametime = -1
Mission_Over(sPedScene.iMissionID)
IF (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_ARM3)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM1)
AND (sPedScene.eScene <> PR_SCENE_Fa_PHONECALL_FAM3)
AND (sPedScene.eScene <> PR_SCENE_Ta_CARSTEAL4)
DISABLE_CELLPHONE(FALSE)
ENDIF
PRINTLN("GENERIC_PED_SCENE - Returning TRUE")
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC PED_SCENE_STRUCT SceneSetupSelectorCam_DEFAULT(PED_SCENE_STRUCT &sPedScene)
RETURN sPedScene
ENDFUNC
FUNC PED_SCENE_STRUCT SCENE_CUSTOM_SCRIPT_REQUEST(PED_SCENE_STRUCT &sPedScene)
TEXT_LABEL_31 sPlayerTimetableScene_script = "player_timetable_scene"
REQUEST_SCRIPT(sPlayerTimetableScene_script)
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script)
REQUEST_SCRIPT(sPlayerTimetableAdditional_script)
ENDIF
//g_bSwitchSplineCamInProgress = TRUE
g_b_NOT_PlayerHasStartedNewScene = TRUE
RETURN sPedScene
ENDFUNC
FUNC PED_SCENE_STRUCT SCENE_CUSTOM_SELECTOR_CAM_SETUP(PED_SCENE_STRUCT &sPedScene)
sPedScene = SCENE_CUSTOM_SCRIPT_REQUEST(sPedScene)
// IF NOT SETUP_PED_SCENE_SELECTOR_CAM(sPedScene, SELECTOR_CAM_LONG_SPLINE) // Returns FALSE when the camera spline is complete
// Destory previous cam spline
IF DOES_CAM_EXIST(sPedScene.sSelectorCam.camID)
DESTROY_CAM(sPedScene.sSelectorCam.camID)
ENDIF
sPedScene.sSelectorCam.iInterpCams = 0
sPedScene.sSelectorCam.bSplineCreated = FALSE
// ENDIF
RETURN sPedScene
ENDFUNC
FUNC BOOL SceneSetupScript_DEFAULT(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene)
IF (sPedScene.iStage = 0)
ENDIF
sPassedScene.eSceneBuddy = sPassedScene.eSceneBuddy
RETURN TRUE
ENDFUNC
FUNC BOOL SCENE_CUSTOM_SCRIPT_SETUPCLF(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene, INT iSwitchFlags)
BOOL bHaveSetupSceneCustomScript = TRUE
TEXT_LABEL_31 sPlayerTimetableScene_script = "player_timetableCLF"
CONST_INT iSCENE_STACK_SIZE MULTIPLAYER_MISSION_STACK_SIZE //SHOP_STACK_SIZE //FRIEND_STACK_SIZE //bug 381398
CONST_INT iADSCENE_STACK_SIZE FRIEND_STACK_SIZE //bug 381398
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableScene_script)) <= 0
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "waiting for player timetable scene script \"", sPlayerTimetableScene_script, "\" //", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
#ENDIF
bHaveSetupSceneCustomScript = FALSE
IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableScene_script)
REQUEST_SCRIPT(sPlayerTimetableScene_script)
ELSE
SETUP_PLAYER_TIMETABLE_FOR_SCENE(sPedScene, sPassedScene)
IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_DESCENT_ONLY)
sPassedScene.bDescentOnly = TRUE
ENDIF
START_NEW_SCRIPT_WITH_ARGS(sPlayerTimetableScene_script,
sPassedScene, SIZE_OF(PLAYER_TIMETABLE_SCENE_STRUCT),
iSCENE_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableScene_script)
ENDIF
ENDIF
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script)
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableAdditional_script)) <= 0
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "waiting for player timetable additional script \"", sPlayerTimetableAdditional_script, "\"...")
#ENDIF
bHaveSetupSceneCustomScript = FALSE
IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableAdditional_script)
REQUEST_SCRIPT(sPlayerTimetableAdditional_script)
ELSE
START_NEW_SCRIPT(sPlayerTimetableAdditional_script,
iADSCENE_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableAdditional_script)
ENDIF
ENDIF
ENDIF
RETURN bHaveSetupSceneCustomScript
ENDFUNC
FUNC BOOL SCENE_CUSTOM_SCRIPT_SETUPNRM(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene, INT iSwitchFlags)
BOOL bHaveSetupSceneCustomScript = TRUE
TEXT_LABEL_31 sPlayerTimetableScene_script = "player_timetableNRM"
CONST_INT iSCENE_STACK_SIZE MULTIPLAYER_MISSION_STACK_SIZE //SHOP_STACK_SIZE //FRIEND_STACK_SIZE //bug 381398
CONST_INT iADSCENE_STACK_SIZE FRIEND_STACK_SIZE //bug 381398
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableScene_script)) <= 0
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "waiting for player timetable scene script \"", sPlayerTimetableScene_script, "\" //", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
#ENDIF
bHaveSetupSceneCustomScript = FALSE
IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableScene_script)
REQUEST_SCRIPT(sPlayerTimetableScene_script)
ELSE
SETUP_PLAYER_TIMETABLE_FOR_SCENE(sPedScene, sPassedScene)
IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_DESCENT_ONLY)
sPassedScene.bDescentOnly = TRUE
ENDIF
START_NEW_SCRIPT_WITH_ARGS(sPlayerTimetableScene_script,
sPassedScene, SIZE_OF(PLAYER_TIMETABLE_SCENE_STRUCT),
iSCENE_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableScene_script)
ENDIF
ENDIF
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script)
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableAdditional_script)) <= 0
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "waiting for player timetable additional script \"", sPlayerTimetableAdditional_script, "\"...")
#ENDIF
bHaveSetupSceneCustomScript = FALSE
IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableAdditional_script)
REQUEST_SCRIPT(sPlayerTimetableAdditional_script)
ELSE
START_NEW_SCRIPT(sPlayerTimetableAdditional_script,
iADSCENE_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableAdditional_script)
ENDIF
ENDIF
ENDIF
RETURN bHaveSetupSceneCustomScript
ENDFUNC
FUNC BOOL SCENE_CUSTOM_SCRIPT_SETUP(PED_SCENE_STRUCT &sPedScene, PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene, INT iSwitchFlags)
#IF USE_CLF_DLC
IF g_bLoadedClifford
RETURN SCENE_CUSTOM_SCRIPT_SETUPCLF(sPedScene,sPassedScene,iSwitchFlags)
ENDIF
#ENDIF
#IF USE_NRM_DLC
IF g_bLoadedNorman
RETURN SCENE_CUSTOM_SCRIPT_SETUPNRM(sPedScene,sPassedScene,iSwitchFlags)
ENDIF
#ENDIF
BOOL bHaveSetupSceneCustomScript = TRUE
TEXT_LABEL_31 sPlayerTimetableScene_script = "player_timetable_scene"
CONST_INT iSCENE_STACK_SIZE MULTIPLAYER_MISSION_STACK_SIZE //SHOP_STACK_SIZE //FRIEND_STACK_SIZE //bug 381398
CONST_INT iADSCENE_STACK_SIZE FRIEND_STACK_SIZE //bug 381398
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableScene_script)) <= 0
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "waiting for player timetable scene script \"", sPlayerTimetableScene_script, "\" //", Get_String_From_Ped_Request_Scene_Enum(sPedScene.eScene))
#ENDIF
bHaveSetupSceneCustomScript = FALSE
IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableScene_script)
REQUEST_SCRIPT(sPlayerTimetableScene_script)
ELSE
SETUP_PLAYER_TIMETABLE_FOR_SCENE(sPedScene, sPassedScene)
IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_DESCENT_ONLY)
sPassedScene.bDescentOnly = TRUE
ENDIF
START_NEW_SCRIPT_WITH_ARGS(sPlayerTimetableScene_script,
sPassedScene, SIZE_OF(PLAYER_TIMETABLE_SCENE_STRUCT),
iSCENE_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableScene_script)
ENDIF
ENDIF
TEXT_LABEL_31 sPlayerTimetableAdditional_script
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPedScene.eScene, sPlayerTimetableAdditional_script)
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableAdditional_script)) <= 0
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "waiting for player timetable additional script \"", sPlayerTimetableAdditional_script, "\"...")
#ENDIF
bHaveSetupSceneCustomScript = FALSE
IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableAdditional_script)
REQUEST_SCRIPT(sPlayerTimetableAdditional_script)
ELSE
START_NEW_SCRIPT(sPlayerTimetableAdditional_script,
iADSCENE_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableAdditional_script)
ENDIF
ENDIF
ENDIF
RETURN bHaveSetupSceneCustomScript
ENDFUNC
/// PURPOSE: Calls the approproate func to process the stored scene ID
/// NOTE: Returns TRUE when the scene is complete.
FUNC BOOL PROCESS_PLAYER_PED_SCENECLF(PED_SCENE_STRUCT &sPedScene, INT iSwitchFlags = 0)
RETURN GENERIC_PED_SCENECLF(sPedScene,
&SCENE_CUSTOM_SCRIPT_REQUEST,
&SCENE_CUSTOM_SCRIPT_SETUPCLF, iSwitchFlags)
ENDFUNC
FUNC BOOL PROCESS_PLAYER_PED_SCENENRM(PED_SCENE_STRUCT &sPedScene, INT iSwitchFlags = 0)
RETURN GENERIC_PED_SCENENRM(sPedScene,
&SCENE_CUSTOM_SCRIPT_REQUEST,
&SCENE_CUSTOM_SCRIPT_SETUPNRM, iSwitchFlags)
ENDFUNC
FUNC BOOL PROCESS_PLAYER_PED_SCENE(PED_SCENE_STRUCT &sPedScene, INT iSwitchFlags = 0)
#if USE_CLF_DLC
return PROCESS_PLAYER_PED_SCENECLF(sPedScene,iSwitchFlags)
#endif
#if USE_NRM_DLC
return PROCESS_PLAYER_PED_SCENENRM(sPedScene,iSwitchFlags)
#endif
RETURN GENERIC_PED_SCENE(sPedScene,
&SCENE_CUSTOM_SCRIPT_REQUEST,
&SCENE_CUSTOM_SCRIPT_SETUP, iSwitchFlags)
ENDFUNC
/// PURPOSE: Calls the approproate func to process the stored scene ID
/// NOTE: Returns TRUE when the scene is complete.
PROC Trigger_Specific_Switch_And_Wait(PED_REQUEST_SCENE_ENUM eReqScene, INT iSwitchFlags = 0)
//for bug 884228
PED_SCENE_STRUCT sSceneData
sSceneData.sSelectorPeds.ePreviousSelectorPed = SELECTOR_PED_MICHAEL
sSceneData.sSelectorPeds.eCurrentSelectorPed = SELECTOR_PED_MICHAEL
sSceneData.iStage = 0
sSceneData.eScene = eReqScene //INT_TO_ENUM(PED_REQUEST_SCENE_ENUM, g_iSelectedDebugPlayerCharScene)
sSceneData.sSelectorCam.bSplineCreated = FALSE
GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(sSceneData.eScene, sSceneData.ePed)
IF IS_SCREEN_FADED_OUT()
IF IS_BITMASK_AS_ENUM_SET(iSwitchFlags, SWITCH_FLAG_DESCENT_ONLY)
DO_PLAYER_WARP_WITH_LOAD_AND_PAUSE(g_sPedSceneData[eReqScene].vCreateCoords)
//#1567006
IF NOT IS_PED_THE_CURRENT_PLAYER_PED(sSceneData.ePed)
SELECTOR_SLOTS_ENUM eSlot = GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(sSceneData.ePed)
WHILE NOT SET_CURRENT_SELECTOR_PED(eSlot)
WAIT(0)
ENDWHILE
ENDIF
ENDIF
ENDIF
BOOL bPerformingGenericPedScene = TRUE
WHILE IS_PLAYER_PLAYING(PLAYER_ID())
AND bPerformingGenericPedScene
IF NOT PROCESS_PLAYER_PED_SCENE(sSceneData, iSwitchFlags)
// iTempRecentlySelectedScene = ENUM_TO_INT(g_eRecentlySelectedScene)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_SWITCH, "<", GET_THIS_SCRIPT_NAME(), "> sSceneData.iStage: ", sSceneData.iStage)
#ENDIF
ELSE
bPerformingGenericPedScene = FALSE
ENDIF
WAIT(0)
ENDWHILE
ENDPROC
/// PURPOSE:
///
/// RETURNS:
/// RETURN FALSE //No, I need the trigger to start right away
/// RETURN TRUE //yeah its cool to prevent the start after switch
FUNC BOOL PREVENT_MISSION_TRIGGER_DUE_TO_SWITCH_COOLDOWN(enumCharacterList ePed)
PED_REQUEST_SCENE_ENUM eReqScene
FLOAT fScenePercent
PED_SCENE_STRUCT sPedScene
PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene
IF GET_PLAYER_PED_SCENE_FOR_CURRENT_TIME(ePed, eReqScene, fScenePercent, sPedScene, sPassedScene)
IF (eReqScene = PR_SCENE_F_S_EXILE2)
OR (eReqScene = PR_SCENE_M_S_FAMILY4)
OR (eReqScene = PR_SCENE_F_S_AGENCY_2A_a)
OR (eReqScene = PR_SCENE_F_S_AGENCY_2A_b)
// OR (eReqScene = PR_SCENE_F_S_AGENCY_2B)
// OR (eReqScene = PR_SCENE_F_S_AGENCY_2C)
// OR (eReqScene = PR_SCENE_F_S_FBI1end)
RETURN FALSE //No, I need the trigger to start right away
ENDIF
ENDIF
RETURN TRUE //yeah its cool to prevent the start after switch
ENDFUNC