1549 lines
46 KiB
Python
Executable File
1549 lines
46 KiB
Python
Executable File
// SteveR 8.4.13 - Rewrite to support multiple TVs.
|
|
// ChrisM 19.8.8
|
|
// Adapted from Dave Bruce's original TV script
|
|
|
|
USING "rage_builtins.sch"
|
|
USING "commands_brains.sch"
|
|
USING "brains.sch"
|
|
USING "types.sch"
|
|
USING "commands_vehicle.sch"
|
|
USING "commands_ped.sch"
|
|
USING "commands_streaming.sch"
|
|
USING "commands_hud.sch"
|
|
USING "commands_task.sch"
|
|
USING "globals.sch"
|
|
USING "commands_misc.sch"
|
|
USING "commands_debug.sch"
|
|
USING "commands_player.sch"
|
|
USING "commands_pad.sch"
|
|
USING "commands_camera.sch"
|
|
USING "commands_graphics.sch"
|
|
USING "commands_object.sch"
|
|
USING "commands_script.sch"
|
|
USING "commands_clock.sch"
|
|
USING "commands_path.sch"
|
|
USING "commands_audio.sch"
|
|
USING "commands_entity.sch"
|
|
USING "context_control_public.sch"
|
|
|
|
USING "cellphone_public.sch"
|
|
|
|
USING "script_player.sch"
|
|
USING "LineActivation.sch"
|
|
USING "cutscene_public.sch"
|
|
|
|
USING "tv_control_public.sch"
|
|
|
|
USING "finance_modifiers_public.sch"
|
|
|
|
structTimer tmrContextButtonDelay
|
|
|
|
CONST_FLOAT DEFAULT_TV_VOLUME -4.0
|
|
|
|
ENUM MAIN_STAGES
|
|
TV_STATE_INITIALISE = 0,
|
|
TV_STATE_OFF,
|
|
TV_STATE_SETUP,
|
|
TV_STATE_ON,
|
|
TV_STATE_ON_CONTROLS,
|
|
TV_STATE_SUSPEND,
|
|
TV_STATE_CLEANUP
|
|
ENDENUM
|
|
MAIN_STAGES main_TV_stages = TV_STATE_INITIALISE
|
|
|
|
CONST_FLOAT TRIGGER_ANGLE 90.0
|
|
|
|
FLOAT fCurrentVolume
|
|
VECTOR TV_position
|
|
FLOAT fHeading
|
|
INT iRenderTarget = -1
|
|
BOOL bTVScriptTurnedPlayerControlOff = FALSE
|
|
//INT iChannelForThisTV = 0
|
|
|
|
OBJECT_INDEX objectTV
|
|
OBJECT_INDEX objectOverlay
|
|
OBJECT_INDEX objectProjector
|
|
OBJECT_INDEX objectOrigTV
|
|
|
|
RAYFIRE_INDEX iTVObject // For setting Jimmy's TV destroyed.
|
|
|
|
//VIEWPORT_INDEX GameViewport
|
|
INT iContextButtonIntention = NEW_CONTEXT_INTENTION
|
|
|
|
TV_LOCATION eTVLocation = TV_LOC_NONE
|
|
TVCHANNELTYPE eTVChannelType = TVCHANNELTYPE_CHANNEL_NONE
|
|
TV_CHANNEL_PLAYLIST eTVChannelPlaylist = TV_PLAYLIST_NONE
|
|
//BOOL bMovieStarted = FALSE
|
|
|
|
TEXT_LABEL_63 radioEmitter = "NULL"
|
|
TEXT_LABEL_63 audioScene = "NULL"
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 locationName= "NONE"
|
|
#ENDIF
|
|
|
|
CAMERA_INDEX cameraTV
|
|
VECTOR vCamPos
|
|
VECTOR vCamRot
|
|
|
|
BOOL bCamerasAreActive = FALSE
|
|
|
|
// TURNS ON LOTS OF TV DEBUG SPEW.
|
|
#IF IS_DEBUG_BUILD
|
|
BOOL bShowDebug = FALSE
|
|
#ENDIF
|
|
|
|
BOOL bIsTVCurrentlyIndestructible = FALSE
|
|
|
|
BOOL bIsCustomControlSchemeActive = FALSE
|
|
|
|
// =======================================================================
|
|
|
|
|
|
PROC ACTIVATE_CUSTOM_CONTROLS()
|
|
|
|
IF IS_PC_VERSION()
|
|
|
|
IF bIsCustomControlSchemeActive = FALSE
|
|
INIT_PC_SCRIPTED_CONTROLS("TV_Controls")
|
|
bIsCustomControlSchemeActive = TRUE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC SHUTDOWN_CUSTOM_CONTROLS()
|
|
|
|
IF IS_PC_VERSION()
|
|
|
|
IF bIsCustomControlSchemeActive = TRUE
|
|
SHUTDOWN_PC_SCRIPTED_CONTROLS()
|
|
bIsCustomControlSchemeActive = FALSE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
///
|
|
///
|
|
///
|
|
PROC RELEASE_TV_RENDER_TARGET()
|
|
|
|
WAIT(0)
|
|
IF IS_NAMED_RENDERTARGET_REGISTERED("tvscreen")
|
|
RELEASE_NAMED_RENDERTARGET("tvscreen")
|
|
iRenderTarget = -1
|
|
SET_TEXT_RENDER_ID(GET_DEFAULT_SCRIPT_RENDERTARGET_RENDER_ID())
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - RELEASE_TV_RENDER_TARGET() - RENDER TARGET RELEASED" )
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC START_TV_CAMERA()
|
|
FLOAT FOV = 50
|
|
IF bCamerasAreActive = FALSE
|
|
|
|
cameraTV = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", vCamPos, vCamRot, FOV)
|
|
SET_CAM_FAR_CLIP(cameraTV, 100)
|
|
SET_CAM_ACTIVE(cameraTV, TRUE)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
|
|
IF DOES_ENTITY_EXIST( objectProjector )
|
|
SET_ENTITY_VISIBLE(objectProjector,FALSE)
|
|
ENDIF
|
|
|
|
// Freeze the player
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE)
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
bTVScriptTurnedPlayerControlOff = TRUE
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - START_TV_CAMERA() -TURNED OFF PLAYER CONTROL" )
|
|
ENDIF
|
|
|
|
TASK_LOOK_AT_COORD(PLAYER_PED_ID(), TV_position, -1)
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
|
|
IF NOT ARE_STRINGS_EQUAL(audioScene, "NULL")
|
|
IF NOT IS_AUDIO_SCENE_ACTIVE( audioScene )
|
|
START_AUDIO_SCENE( audioScene )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE, DEFAULT, FALSE)
|
|
|
|
ENABLE_MOVIE_SUBTITLES(TRUE)
|
|
|
|
bCamerasAreActive = TRUE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC STOP_TV_CAMERA()
|
|
|
|
IF bCamerasAreActive
|
|
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
IF IS_CAM_ACTIVE(cameraTV)
|
|
SET_CAM_ACTIVE(cameraTV,FALSE)
|
|
ENDIF
|
|
|
|
DESTROY_CAM(cameraTV)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING()
|
|
|
|
// Unfreeze the player
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), FALSE)
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
TASK_LOOK_AT_COORD(PLAYER_PED_ID(), TV_position, 1)
|
|
|
|
IF NOT IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
IF bTVScriptTurnedPlayerControlOff = TRUE
|
|
bTVScriptTurnedPlayerControlOff = FALSE
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - START_TV_CAMERA() -TURNED ON PLAYER CONTROL" )
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - START_TV_CAMERA() -PLAYER CONTROL WEAS TURNED OFF BY ANOTHER SCRIPT, NOT TURNING IT ON." )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), TRUE)
|
|
ENDIF
|
|
|
|
IF NOT ARE_STRINGS_EQUAL(audioScene,"NULL")
|
|
IF IS_AUDIO_SCENE_ACTIVE( audioScene )
|
|
STOP_AUDIO_SCENE( audioScene )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST( objectProjector )
|
|
SET_ENTITY_VISIBLE(objectProjector,TRUE)
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE, DEFAULT, FALSE)
|
|
|
|
ENABLE_MOVIE_SUBTITLES(FALSE)
|
|
|
|
bCamerasAreActive = FALSE
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC HANDLE_TV_CONTROLS()
|
|
|
|
IF bCamerasAreActive = FALSE
|
|
|
|
SET_INPUT_EXCLUSIVE( FRONTEND_CONTROL, INPUT_SCRIPT_RUP )
|
|
|
|
IF IS_CONTROL_JUST_PRESSED( FRONTEND_CONTROL, INPUT_SCRIPT_RUP)
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
REGISTER_CONTEXT_INTENTION(iContextButtonIntention, CP_MEDIUM_PRIORITY, "TV_HLP6")
|
|
START_TV_CAMERA()
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
DISABLE_CONTROL_ACTION( FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) // Disable alternate pause so Esc quits.
|
|
|
|
// Force the player invisible if for some reason he gets made visible again.
|
|
IF IS_ENTITY_VISIBLE(PLAYER_PED_ID())
|
|
SET_ENTITY_VISIBLE(PLAYER_PED_ID(), FALSE)
|
|
ENDIF
|
|
|
|
// Turn back off Player control if another script turns it on, but only if we have already turned if off.
|
|
IF bTVScriptTurnedPlayerControlOff
|
|
IF IS_PLAYER_CONTROL_ON(PLAYER_ID())
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HANDLE_TV_CONTROLS() - WARNING! Another script turned player control on! Turning it back off." )
|
|
SET_PLAYER_CONTROL(PLAYER_ID(),FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
|
|
SET_TV_PLAYER_WATCHING_THIS_FRAME(PLAYER_PED_ID())
|
|
|
|
RUN_TV_TRANSPORT_CONTROLS()
|
|
|
|
SET_INPUT_EXCLUSIVE( FRONTEND_CONTROL, INPUT_SCRIPT_RUP )
|
|
|
|
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
|
|
|
|
IF IS_CONTROL_JUST_PRESSED( FRONTEND_CONTROL, INPUT_SCRIPT_RUP)
|
|
OR (IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) AND IS_DISABLED_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE))
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
|
|
STOP_TV_CAMERA()
|
|
|
|
// Re-print help message
|
|
//IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP5")
|
|
// CLEAR_HELP(TRUE)
|
|
// PRINT_HELP("TV_HLP5")
|
|
//ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC CLEAR_SCREEN()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF IS_NAMED_RENDERTARGET_REGISTERED("tvscreen")
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - CLEAR_SCREEN() - RENDER TARGET IS REGISTERED" )
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectTV)
|
|
IF IS_NAMED_RENDERTARGET_LINKED(GET_ENTITY_MODEL(objectTV))
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - CLEAR_SCREEN() - RENDER TARGET IS LINKED!")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#ENDIF
|
|
|
|
IF NOT (iRenderTarget = -1)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - CLEAR_SCREEN() - RENDER TARGET VALID" )
|
|
SET_TEXT_RENDER_ID(iRenderTarget)
|
|
IF DOES_ENTITY_EXIST(objectTV)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - CLEAR_SCREEN() - ENTITY_EXISTS" )
|
|
IF GET_ENTITY_MODEL(objectTV) = V_ILev_MM_Screen2
|
|
OR GET_ENTITY_MODEL(objectTV) = V_ILev_MM_Scre_Off
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - CLEAR_SCREEN() - ENTITY IS MICHAEL PROJECTOR" )
|
|
SET_ENTITY_VISIBLE(objectTV, FALSE)
|
|
|
|
IF GET_ENTITY_MODEL(objectTV) = V_ILev_MM_Scre_Off
|
|
DRAW_RECT(0.5, 0.5, 1.0, 1.0, 255, 255, 255, 255) // Clears the projector render target to white.
|
|
ENDIF
|
|
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - CLEAR_SCREEN() - ENTITY IS GENERIC TV" )
|
|
DRAW_RECT(0.5, 0.5, 1.0, 1.0, 0, 0, 0, 255) // Clears the render target to black.
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectProjector)
|
|
SET_ENTITY_VISIBLE(objectProjector, FALSE)
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC DELETE_SCREEN()
|
|
|
|
RELEASE_TV_RENDER_TARGET()
|
|
|
|
IF DOES_ENTITY_EXIST(objectTV)
|
|
IF GET_ENTITY_MODEL(objectTV) = V_ILEV_MM_SCREEN2
|
|
DELETE_OBJECT(objectTV)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(V_ILEV_MM_SCREEN2)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - DELETE_SCREEN() - PROJECTOR SCREEN OBJECT DELETED AND MODEL RELEASED" )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST( objectProjector )
|
|
DELETE_OBJECT(objectProjector)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(V_ILev_MM_Screen2_VL)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - DELETE_SCREEN() - PROJECTOR LIGHT OBJECT DELETED AND MODEL RELEASED" )
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectOverlay)
|
|
DELETE_OBJECT(objectOverlay)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(Prop_TT_screenstatic)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - DELETE_SCREEN() - TV STATIC OBJECT DELETED AND MODEL RELEASED" )
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
PROC NORMALISE_TV_SCALEFORM_DIMENSIONS(FLOAT &width)
|
|
FLOAT fAspectRatio = GET_ASPECT_RATIO( FALSE )
|
|
IF fAspectRatio <= ( 16.0 / 9.0 )
|
|
FLOAT fAspectMultiplier = fAspectRatio / ( 16.0 / 9.0 )
|
|
FLOAT tempW = width
|
|
width = tempW * fAspectMultiplier
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC DRAW_TV_TEXTURE_TO_RENDERTARGET()
|
|
FLOAT fWidth = 1.0
|
|
NORMALISE_TV_SCALEFORM_DIMENSIONS( fWidth )
|
|
|
|
SET_TEXT_RENDER_ID(iRenderTarget)
|
|
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_AFTER_HUD)
|
|
SET_SCRIPT_GFX_DRAW_BEHIND_PAUSEMENU(TRUE)
|
|
DRAW_TV_CHANNEL( 0.5, 0.5, fWidth, 1.0, 0.0, 255, 255, 255, 255 )
|
|
SET_TEXT_RENDER_ID(GET_DEFAULT_SCRIPT_RENDERTARGET_RENDER_ID())
|
|
ENDPROC
|
|
|
|
VECTOR triggerPos
|
|
|
|
//BOOL first_damage_done = FALSE
|
|
|
|
PROC CREATE_NEW_SCREEN()
|
|
|
|
IF DOES_ENTITY_EXIST(objectTV)
|
|
IF GET_ENTITY_MODEL(objectTV) = V_ILev_MM_Screen2
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - CREATE_NEW_SCREEN() - PROJECTOR ALREADY EXITS... EXITING" )
|
|
EXIT
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - CREATE_NEW_SCREEN() - objectTV DOESN'T EXIST!" )
|
|
ENDIF
|
|
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - CREATE_NEW_SCREEN() - CREATING PROJECTOR SCREEN" )
|
|
|
|
// Projector
|
|
objectTV = NULL
|
|
objectTV = CREATE_OBJECT_NO_OFFSET(V_ILev_MM_Screen2, TV_position)//V_ILev_MM_Screen
|
|
SET_ENTITY_HEADING(objectTV, fHeading)
|
|
FREEZE_ENTITY_POSITION(objectTV, TRUE)
|
|
SET_ENTITY_VISIBLE(objectTV, FALSE)
|
|
|
|
// Volume light
|
|
objectProjector = NULL
|
|
objectProjector = CREATE_OBJECT_NO_OFFSET(V_ILev_MM_Screen2_VL, TV_position)
|
|
SET_ENTITY_HEADING(objectProjector, fHeading)
|
|
FREEZE_ENTITY_POSITION(objectProjector, TRUE)
|
|
SET_ENTITY_VISIBLE(objectProjector, FALSE)
|
|
|
|
ENDPROC
|
|
|
|
PROC CREATE_FUZZ_OVERLAY()
|
|
objectOverlay = CREATE_OBJECT_NO_OFFSET(Prop_TT_screenstatic, TV_position)
|
|
SET_ENTITY_HEADING(objectOverlay, fHeading)
|
|
SET_ENTITY_VISIBLE(objectOverlay, TRUE)
|
|
FREEZE_ENTITY_POSITION(objectOverlay, TRUE)
|
|
ENDPROC
|
|
|
|
PROC GET_TV_INFO()
|
|
|
|
PRINTNL()
|
|
PRINTSTRING("TV script launched at ")
|
|
TV_position = GET_ENTITY_COORDS(objectTV)
|
|
fHeading = GET_ENTITY_HEADING(objectTV)
|
|
|
|
RESTORE_STANDARD_CHANNELS()
|
|
PRINTVECTOR(TV_position)
|
|
|
|
// TV_LOC_FRANKLIN_LIVING
|
|
|
|
IF GET_ENTITY_MODEL(objectTV) = PROP_TV_03
|
|
PRINTSTRING(" using model PROP_TV_03")
|
|
IF VDIST(TV_position, <<-9.541955,-1440.916626,31.346916>>) < 3
|
|
PRINTSTRING(" in location TV_LOC_FRANKLIN_LIVING.")
|
|
eTVLocation = TV_LOC_FRANKLIN_LIVING
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
locationName = "TV_LOC_FRANKLIN_LIVING"
|
|
#ENDIF
|
|
|
|
vCamPos = <<-9.8135, -1440.9128, 31.3654>>
|
|
vCamRot = <<-0.0000, 0.0000, -134.3211>>
|
|
|
|
triggerPos = << -9.3078, -1440.9310, 30.1015 >>
|
|
|
|
radioEmitter = "SE_FRANKLIN_AUNT_HOUSE_RADIO_01"
|
|
|
|
audioScene = "TV_FRANKLINS_HOUSE_SOCEN"
|
|
|
|
ELSE
|
|
PRINTSTRING(" but prop is ")
|
|
PRINTFLOAT(VDIST(TV_position, <<-9.541955,-1440.916626,31.346916>>))
|
|
PRINTSTRING(" from a chosen location.")
|
|
ENDIF
|
|
|
|
// TV_LOC_TREVOR_TRAILER
|
|
|
|
ELIF GET_ENTITY_MODEL(objectTV) = prop_trev_tv_01
|
|
PRINTSTRING(" using model prop_trev_tv_01")
|
|
IF VDIST(TV_position, <<1978.425049,3819.657227,34.267632>>) < 3
|
|
PRINTSTRING(" in location TV_LOC_TREVOR_TRAILER.")
|
|
|
|
eTVLocation = TV_LOC_TREVOR_TRAILER
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
locationName = "TV_LOC_TREVOR_TRAILER"
|
|
#ENDIF
|
|
|
|
vCamPos = <<1978.2303, 3819.6504, 34.2724>>
|
|
vCamRot = <<-0.0000, 0.0000, -105.1500>>
|
|
|
|
triggerPos = << 1978.3303, 3819.7170, 32.4501 >>
|
|
|
|
CREATE_FUZZ_OVERLAY()
|
|
|
|
radioEmitter = "SE_TREVOR_TRAILER_RADIO_01"
|
|
|
|
audioScene = "TV_TREVORS_TRAILER"
|
|
|
|
ELSE
|
|
PRINTSTRING(" but prop is ")
|
|
PRINTFLOAT(VDIST(TV_position, <<1978.425049,3819.657227,34.267632>>))
|
|
PRINTSTRING(" from a chosen location.")
|
|
ENDIF
|
|
|
|
// TV_LOC_FRANKLIN_VINEWOOD
|
|
|
|
ELIF GET_ENTITY_MODEL(objectTV) = PROP_TV_FLAT_01
|
|
PRINTSTRING(" using model PROP_TV_FLAT_01")
|
|
IF VDIST(TV_position, << 3.6654, 529.8486, 173.6281 >>) < 3
|
|
PRINTSTRING(" in location TV_LOC_FRANKLIN_VINEWOOD.")
|
|
eTVLocation = TV_LOC_FRANKLIN_VINEWOOD
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
locationName = "TV_LOC_FRANKLIN_VINEWOOD"
|
|
#ENDIF
|
|
|
|
vCamPos = <<2.5724, 527.9989, 176.1619>>
|
|
vCamRot = <<-0.0000, 0.0000, -29.9488>>
|
|
|
|
triggerPos = << 3.6654, 529.8486, 173.6281 >>
|
|
radioEmitter = "SE_FRANKLIN_HILLS_HOUSE_RADIO_01"
|
|
audioScene = "TV_FRANKLINS_HOUSE_VINEWOOD"
|
|
|
|
ELSE
|
|
PRINTSTRING(" but prop is ")
|
|
PRINTFLOAT(VDIST(TV_position, << 3.6654, 529.8486, 173.6281 >>))
|
|
PRINTSTRING(" from a chosen location.")
|
|
ENDIF
|
|
|
|
// TV_LOC_TREVOR_VENICE
|
|
|
|
ELIF GET_ENTITY_MODEL(objectTV) = PROP_TV_FLAT_02
|
|
PRINTSTRING(" using model PROP_TV_FLAT_02")
|
|
IF VDIST(TV_position, <<-1160.694702,-1520.744751,10.491680>>) < 3
|
|
PRINTSTRING(" in location TV_LOC_TREVOR_VENICE.")
|
|
eTVLocation = TV_LOC_TREVOR_VENICE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
locationName = "TV_LOC_TREVOR_VENICE"
|
|
#ENDIF
|
|
|
|
vCamPos = <<-1160.5024, -1520.7598, 10.7393>>
|
|
vCamRot = <<0.0000, 0.0000, 60.0610>>
|
|
|
|
triggerPos = <<-1160.1429, -1520.4946, 9.6555>>
|
|
radioEmitter = "TREVOR_APARTMENT_RADIO"
|
|
audioScene = "TV_FLOYDS_APARTMENT"
|
|
|
|
ELSE
|
|
PRINTSTRING(" but prop is ")
|
|
PRINTFLOAT(VDIST(TV_position, <<-1160.694702,-1520.744751,10.491680>>))
|
|
PRINTSTRING(" from a chosen location.")
|
|
ENDIF
|
|
|
|
// TV_LOC_MICHAEL_PROJECTOR
|
|
|
|
ELIF (GET_ENTITY_MODEL(objectTV) = V_ILEV_MM_SCREEN2 OR GET_ENTITY_MODEL(objectTV) = V_ILev_MM_Scre_Off)
|
|
|
|
PRINTSTRING(" using model V_ILEV_MM_SCREEN2")
|
|
IF VDIST(TV_position, <<-802.252747,173.037430,74.357079>>) < 3
|
|
PRINTSTRING(" in location TV_LOC_MICHAEL_PROJECTOR.")
|
|
eTVLocation = TV_LOC_MICHAEL_PROJECTOR
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
locationName = "TV_LOC_MICHAEL_PROJECTOR"
|
|
#ENDIF
|
|
|
|
vCamPos = <<-802.8972, 172.5370, 74.5801>>
|
|
vCamRot = <<-0.0000, 0.0000, -69.0273>>
|
|
|
|
triggerPos = << -800.7292, 173.2194, 71.8348 >>
|
|
radioEmitter = "SE_MICHAELS_HOUSE_RADIO"
|
|
audioScene = "TV_MICHAELS_HOUSE"
|
|
|
|
|
|
ELSE
|
|
PRINTSTRING(" but prop is ")
|
|
PRINTFLOAT(VDIST(TV_position, <<-802.252747,173.037430,74.357079>>))
|
|
PRINTSTRING(" from a chosen location.")
|
|
ENDIF
|
|
|
|
// DES_TVSMASH_START (Jimmy's)
|
|
|
|
ELIF (GET_ENTITY_MODEL(objectTV) = DES_TVSMASH_START)
|
|
PRINTSTRING(" using model DES_TVSMASH_START")
|
|
IF VDIST (TV_position, <<-809.9620, 170.9190, 75.7407>>) < 3
|
|
PRINTSTRING(" in location TV_LOC_JIMMY_BEDROOM.")
|
|
eTVLocation = TV_LOC_JIMMY_BEDROOM
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
locationName = "TV_LOC_JIMMY_BEDROOM"
|
|
#ENDIF
|
|
|
|
vCamPos = <<-808.3051, 171.2623, 77.2822>>
|
|
vCamRot = <<1.8886, 0.0000, 110.9232>>
|
|
|
|
triggerPos = <<-809.9620, 170.9190, 75.7407>>
|
|
radioEmitter = "SE_MICHAELS_HOUSE_RADIO"
|
|
audioScene = "TV_MICHAELS_HOUSE"
|
|
|
|
ELSE
|
|
PRINTSTRING(" but prop is ")
|
|
PRINTFLOAT(VDIST(TV_position, <<-802.252747,173.037430,74.357079>>))
|
|
PRINTSTRING(" from a chosen location.")
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
PRINTNL()
|
|
ENDPROC
|
|
|
|
|
|
FUNC BOOL HAS_THE_TV_BEEN_SWITCHED_OFF_BY_PLAYER()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_OFF_BY_PLAYER()" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF NOT IS_THIS_TV_FORCED_ON(eTVLocation)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_OFF_BY_PLAYER() - NOT FORCED ON" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF GET_TIMER_IN_SECONDS(tmrContextButtonDelay) >= 1.0 // Slight delay to prevent the tv turning off when you turn it on.
|
|
AND IS_ENTITY_AT_COORD(PLAYER_PED_ID(), triggerPos, <<1.0, 1.0, 1.5>>, FALSE)
|
|
AND GET_INTERIOR_FROM_ENTITY(objectTV) = GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID())
|
|
AND NOT IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
AND IS_PED_HEADING_TOWARDS_POSITION(PLAYER_PED_ID(), TV_position, TRIGGER_ANGLE)
|
|
AND NOT IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
AND NOT IS_PLAYER_SWITCH_IN_PROGRESS()
|
|
|
|
|
|
//AND g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled = TRUE
|
|
|
|
IF iContextButtonIntention = NEW_CONTEXT_INTENTION
|
|
ACTIVATE_CUSTOM_CONTROLS()
|
|
REGISTER_CONTEXT_INTENTION(iContextButtonIntention, CP_MEDIUM_PRIORITY, "TV_HLP5")
|
|
ELSE
|
|
IF HAS_CONTEXT_BUTTON_TRIGGERED(iContextButtonIntention)
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
RESTART_TIMER_NOW(tmrContextButtonDelay)
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled = FALSE
|
|
IF REQUEST_AMBIENT_AUDIO_BANK( "SAFEHOUSE_MICHAEL_SIT_SOFA" )
|
|
PLAY_SOUND_FRONTEND(-1, "MICHAEL_SOFA_TV_ON_MASTER" )
|
|
ENDIF
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
HANDLE_TV_CONTROLS()
|
|
|
|
ELSE
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP5")
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
SHUTDOWN_CUSTOM_CONTROLS()
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL HAS_THE_TV_BEEN_SWITCHED_ON_BY_PLAYER()
|
|
|
|
IF GET_TIMER_IN_SECONDS(tmrContextButtonDelay) < 1.0 // Slight delay to prevent the tv turning off when you turn it on.
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_ON_BY_PLAYER() - TIMER DELAY" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), triggerPos, <<1.0, 1.0, 1.5>>, FALSE)
|
|
OR NOT IS_PED_HEADING_TOWARDS_POSITION(PLAYER_PED_ID(), TV_position, TRIGGER_ANGLE)
|
|
OR IS_PED_RAGDOLL(PLAYER_PED_ID())
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_ON_BY_PLAYER() - PLAYER NOT AT COORD, OR WRONG ANGLE" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
IF GET_INTERIOR_FROM_ENTITY(objectTV) != GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_ON_BY_PLAYER() - PLAYER NOT IN TV INTERIOR" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_ON_BY_PLAYER() - TRANSITION HUD DISPLAYING" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_ON_BY_PLAYER() - PED IS IN A VEHICLE" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
IF g_bTriggerSceneActive
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_ON_BY_PLAYER() - TRIGGER SCENE IS ACTIVE" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
IF g_TVStruct[ENUM_TO_INT(eTVLocation)].bTVControlsDisabled
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_ON_BY_PLAYER() - TV CONTROLS DISABLED" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
IF iContextButtonIntention = NEW_CONTEXT_INTENTION
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_ON_BY_PLAYER() - NEW CONTEXT INTENTION" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
REGISTER_CONTEXT_INTENTION(iContextButtonIntention, CP_MEDIUM_PRIORITY, "TV_HLP1")
|
|
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - HAS_TV_BEEN_SWITCHED_ON_BY_PLAYER() - CHECKING CONTEXT BUTTON" )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF HAS_CONTEXT_BUTTON_TRIGGERED(iContextButtonIntention)
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
RESTART_TIMER_NOW(tmrContextButtonDelay)
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled = TRUE
|
|
|
|
IF REQUEST_AMBIENT_AUDIO_BANK( "SAFEHOUSE_MICHAEL_SIT_SOFA" )
|
|
PLAY_SOUND_FRONTEND(-1, "MICHAEL_SOFA_TV_ON_MASTER" )
|
|
ENDIF
|
|
|
|
REGISTER_SCRIPT_IN_COMPLETION_PERCENTAGE_TOTAL (CP_WTCHTV)
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
|
|
PROC END_WATCHING_TV()
|
|
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - END_WATCHING_TV()" )
|
|
|
|
IF eTVLocation != TV_LOC_NONE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType = ENUM_TO_INT(GET_TV_CHANNEL())
|
|
//g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelPlaylist = ENUM_TO_INT(TV_PLAYLIST_NONE)
|
|
ENDIF
|
|
|
|
fCurrentVolume = GET_TV_VOLUME()
|
|
|
|
SET_TV_CHANNEL(TVCHANNELTYPE_CHANNEL_NONE)
|
|
|
|
STOP_TV_CAMERA()
|
|
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("family5")) = 0
|
|
IF NOT ARE_STRINGS_EQUAL(radioEmitter, "NULL")
|
|
SET_STATIC_EMITTER_ENABLED(radioEmitter, TRUE)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - END_WATCHING_TV() TURNED ON RADIO EMITTER ",radioEmitter )
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("family5")) > 0
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - END_WATCHING_TV() FAMILY 5 RUNNING - RADIO EMITTER NOT ENABLED ",radioEmitter )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP1")
|
|
OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP2")
|
|
OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP5")
|
|
OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP6")
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
|
|
CLEAR_SCREEN()
|
|
|
|
RELEASE_TV_RENDER_TARGET()
|
|
|
|
IF DOES_ENTITY_EXIST(objectOverlay)
|
|
IF NOT IS_ENTITY_VISIBLE(objectOverlay)
|
|
SET_ENTITY_VISIBLE(objectOverlay, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENABLE_MOVIE_SUBTITLES(FALSE)
|
|
SHUTDOWN_CUSTOM_CONTROLS()
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC SUSPEND_TV()
|
|
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - SUSPEND_TV()" )
|
|
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled = FALSE
|
|
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType = ENUM_TO_INT(GET_TV_CHANNEL())
|
|
|
|
fCurrentVolume = GET_TV_VOLUME()
|
|
|
|
//IF NOT ARE_STRINGS_EQUAL(radioEmitter, "NULL")
|
|
// SET_STATIC_EMITTER_ENABLED(radioEmitter, TRUE)
|
|
//ENDIF
|
|
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE( audioScene )
|
|
STOP_AUDIO_SCENE( audioScene )
|
|
ENDIF
|
|
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP1")
|
|
OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP2")
|
|
OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP5")
|
|
OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP6")
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
|
|
SET_TV_CHANNEL(TVCHANNELTYPE_CHANNEL_NONE)
|
|
|
|
WAIT (0)
|
|
|
|
CLEAR_SCREEN()
|
|
|
|
RELEASE_TV_RENDER_TARGET()
|
|
|
|
ENDPROC
|
|
|
|
|
|
FUNC BOOL IS_PLAYER_IN_TV_LOCATION( TV_LOCATION eTVloc )
|
|
|
|
//INTERIOR_INSTANCE_INDEX playerInteriorIndex = GET_INTERIOR_FROM_ENTITY( PLAYER_PED_ID())
|
|
|
|
VECTOR vPlayerCoords = GET_PLAYER_COORDS( PLAYER_ID())
|
|
|
|
|
|
|
|
SWITCH eTVloc
|
|
|
|
CASE TV_LOC_FRANKLIN_LIVING
|
|
CASE TV_LOC_FRANKLIN_VINEWOOD
|
|
CASE TV_LOC_TREVOR_TRAILER
|
|
CASE TV_LOC_TREVOR_VENICE
|
|
CASE TV_LOC_GUN_CLUB
|
|
RETURN TRUE
|
|
BREAK
|
|
|
|
|
|
CASE TV_LOC_MICHAEL_PROJECTOR
|
|
|
|
IF vPlayerCoords.z < 74.0
|
|
|
|
//IF playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-813.4175, 179.7046, 71.1592>>) // Front Hallway
|
|
//IF playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-807.0659, 175.2585, 71.8447>>) // Lounge
|
|
//OR playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-797.3823, 178.7603, 71.8453>>) // Dining Room
|
|
//OR playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-801.8658, 181.6975, 71.6055>>) // Kitchen
|
|
//OR playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-805.0380, 181.5118, 71.3578>>) // Back Hall
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
|
|
CASE TV_LOC_JIMMY_BEDROOM
|
|
|
|
IF vPlayerCoords.z > 75.0
|
|
//IF playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-807.7032, 171.5911, 75.7504>>) // Son's bedroom
|
|
//OR playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-801.6771, 173.7775, 75.7407>>) // Daughter's bedroom
|
|
//OR playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-812.8871, 179.7412, 75.7504>>) // Master bedroom
|
|
//OR playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-811.3488, 175.4640, 75.7504>>) // Wardrobe
|
|
//OR playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-804.5829, 177.8812, 75.7483>>) // Upper Hall
|
|
//OR playerInteriorIndex = GET_INTERIOR_AT_COORDS(<<-802.9606, 168.0437, 75.7407>>) // Bathroom
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
PROC SCRIPT_CLEANUP()
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - SCRIPT CLEANUP()" )
|
|
|
|
IF eTVLocation = TV_LOC_NONE
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - SCRIPT CLEANUP() - NO CLEANUP NEEDED AS TV NOT SUPPORTED" )
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
|
|
IF eTVLocation != TV_LOC_NONE
|
|
|
|
END_WATCHING_TV()
|
|
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bAvailableForUse = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bTVControlsDisabled = FALSE
|
|
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStopTV = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStartAmbientTV = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsTVOn = FALSE
|
|
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType = ENUM_TO_INT(TVCHANNELTYPE_CHANNEL_NONE)
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelPlaylist = ENUM_TO_INT(TV_PLAYLIST_NONE)
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsIndestructible = FALSE
|
|
|
|
ENDIF
|
|
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP1")
|
|
OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP5")
|
|
OR IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP6")
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
|
|
WAIT (0) // This is necessary to allow the TV screen to be cleared properly before the screen is deleted and the script terminated.
|
|
|
|
DELETE_SCREEN()
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE( audioScene )
|
|
STOP_AUDIO_SCENE( audioScene )
|
|
ENDIF
|
|
|
|
UNHINT_AMBIENT_AUDIO_BANK()
|
|
|
|
SHUTDOWN_CUSTOM_CONTROLS()
|
|
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
|
|
PROC SETUP_SCREEN()
|
|
|
|
MODEL_NAMES TVModel
|
|
|
|
IF eTVLocation = TV_LOC_MICHAEL_PROJECTOR
|
|
CREATE_NEW_SCREEN()
|
|
ENDIF
|
|
|
|
// Release the rendertarget if already registered.
|
|
IF IS_NAMED_RENDERTARGET_REGISTERED("tvscreen")
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - SETUP_SCREEN() - RENDER TARGET ALREADY REGISTERED - RELEASING" )
|
|
RELEASE_NAMED_RENDERTARGET("tvscreen")
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
|
|
IF NOT DOES_ENTITY_EXIST(objectTV)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - SETUP_SCREEN() - objectTV DOES NOT EXIST!" )
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
TVModel = GET_ENTITY_MODEL(objectTV)
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - SETUP_SCREEN() - REGISTERING RENDER TARGET" )
|
|
|
|
REGISTER_NAMED_RENDERTARGET("tvscreen")
|
|
LINK_NAMED_RENDERTARGET(TVModel)
|
|
|
|
WAIT(0)
|
|
|
|
IF eTVLocation <> TV_LOC_MICHAEL_PROJECTOR
|
|
|
|
// New loop to continuously try to get and link a render target if the first attempt fails.
|
|
WHILE NOT IS_NAMED_RENDERTARGET_LINKED(TVModel)
|
|
|
|
// Cleanup if the TV object isn't valid any more.
|
|
IF NOT DOES_ENTITY_EXIST(objectTV)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
// Cleanup if the player is out of range.
|
|
IF NOT IS_OBJECT_WITHIN_BRAIN_ACTIVATION_RANGE(objectTV)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
// Try to get a new rendertarget and link it.
|
|
IF NOT IS_NAMED_RENDERTARGET_REGISTERED("tvscreen")
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - SETUP_SCREEN() - RENDER TARGET NOT REGISTERED - RETRYING" )
|
|
REGISTER_NAMED_RENDERTARGET("tvscreen")
|
|
ENDIF
|
|
|
|
IF NOT IS_NAMED_RENDERTARGET_LINKED(TVModel)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - SETUP_SCREEN() - RENDER TARGET NOT LINKED - RETRYING" )
|
|
LINK_NAMED_RENDERTARGET(TVModel)
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
|
|
ENDWHILE
|
|
|
|
ENDIF
|
|
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - SETUP_SCREEN() - RENDER TARGET LINKED - " )
|
|
|
|
iRenderTarget = GET_NAMED_RENDERTARGET_RENDER_ID("tvscreen")
|
|
|
|
CLEAR_SCREEN()
|
|
|
|
ENDPROC
|
|
|
|
PROC SETUP_DEBUG()
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 TVDebugString = ""
|
|
TVDebugString += "ob_TV debug "
|
|
TVDebugString += locationName
|
|
START_WIDGET_GROUP( TVDebugString )
|
|
ADD_WIDGET_BOOL("Turn on TV debug spew", bShowDebug)
|
|
STOP_WIDGET_GROUP()
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
PROC RUN_DEBUG()
|
|
//debug shit for testing purposes
|
|
#IF IS_DEBUG_BUILD
|
|
// IF NOT g_bForceStartAmbientTV
|
|
// IF bPlayInvader
|
|
// PLAY_TV_CHANNEL_WITH_PLAYLIST(TVCHANNELTYPE_CHANNEL_1, TV_PLAYLIST_SPECIAL_INVADER, TRUE)
|
|
// bPlayInvader = FALSE
|
|
// ENDIF
|
|
// IF bPlayInvaderExp
|
|
// PLAY_TV_CHANNEL_WITH_PLAYLIST(TVCHANNELTYPE_CHANNEL_SCRIPT, TV_PLAYLIST_SPECIAL_INVADER_EXP, TRUE)
|
|
// bPlayInvaderExp = FALSE
|
|
// ENDIF
|
|
// ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
|
|
PROC HANDLE_TV_INDESTRUCTIBILITY()
|
|
|
|
IF eTVLocation = TV_LOC_NONE
|
|
EXIT
|
|
ENDIF
|
|
|
|
|
|
IF g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsIndestructible = FALSE
|
|
|
|
IF bIsTVCurrentlyIndestructible = TRUE
|
|
|
|
PRINTLN("OB_TV: ",locationName," IS NOW DESTRUCTIBLE")
|
|
|
|
|
|
IF DOES_ENTITY_EXIST(objectOrigTV)
|
|
SET_ENTITY_INVINCIBLE(objectOrigTV, FALSE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectTV)
|
|
SET_ENTITY_INVINCIBLE(objectTV, FALSE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectProjector)
|
|
SET_ENTITY_INVINCIBLE(objectProjector, FALSE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectOverlay)
|
|
SET_ENTITY_INVINCIBLE(objectOverlay, FALSE)
|
|
ENDIF
|
|
|
|
bIsTVCurrentlyIndestructible = FALSE
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
IF bIsTVCurrentlyIndestructible = FALSE
|
|
|
|
PRINTLN("OB_TV: ",locationName," IS NOW INDESTRUCTIBLE")
|
|
|
|
IF DOES_ENTITY_EXIST(objectOrigTV)
|
|
SET_ENTITY_INVINCIBLE(objectOrigTV, TRUE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectTV)
|
|
SET_ENTITY_INVINCIBLE(objectTV, TRUE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectProjector)
|
|
SET_ENTITY_INVINCIBLE(objectProjector, TRUE)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectOverlay)
|
|
SET_ENTITY_INVINCIBLE(objectOverlay, TRUE)
|
|
ENDIF
|
|
|
|
bIsTVCurrentlyIndestructible = TRUE
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
SCRIPT (OBJECT_INDEX TV)
|
|
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP)
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: FORCED CLEANUP! ", locationName )
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(TV)
|
|
objectTV = TV
|
|
objectOrigTV = TV
|
|
ENDIF
|
|
|
|
//CPRINTLN( DEBUG_AMBIENT, "OB_TV: TEMPORARILY DISABLED!", locationName )
|
|
|
|
//TERMINATE_THIS_THREAD()
|
|
|
|
//=================================
|
|
WHILE TRUE
|
|
WAIT(0)
|
|
RUN_DEBUG()
|
|
|
|
|
|
|
|
IF DOES_ENTITY_EXIST(TV)
|
|
|
|
// Fix for B* 1335636 - cleanup script if TV is lead-in is active.
|
|
|
|
IF eTVLocation != TV_LOC_NONE
|
|
AND (IS_MISSION_LEADIN_WITH_HIGH_MEMORY_ACTIVE() AND NOT IS_HIGH_MEMORY_PC())
|
|
AND NOT IS_THIS_TV_FORCED_ON(eTVLocation)
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: TV FORCE SHUT DOWN DUE TO MISSION LEADIN BEING ACTIVE ", locationName )
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
// Fix for B* 1766471 - cleanup script if switch is in progress.
|
|
|
|
IF IS_PLAYER_SWITCH_IN_PROGRESS()
|
|
AND GET_PLAYER_SWITCH_TYPE() != SWITCH_TYPE_SHORT
|
|
AND GET_PLAYER_SWITCH_STATE() = SWITCH_STATE_JUMPCUT_ASCENT
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: TV FORCE SHUT DOWN DUE TO PLAYER SWITCH BEING IN PROGRESS ", locationName )
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_ANIMAL)
|
|
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: TV FORCE SHUT DOWN DUE TO PLAYER IN ANIMAL FORM ", locationName )
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
//CPRINTLN( DEBUG_AMBIENT, "OB_TV: ", locationName, "HEALTH: ", GET_ENTITY_HEALTH(TV) )
|
|
|
|
IF HAS_OBJECT_BEEN_BROKEN(TV)
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: TV FORCE SHUT DOWN DUE TO BROKEN TV ", locationName )
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
IF IS_OBJECT_WITHIN_BRAIN_ACTIVATION_RANGE (TV)
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
HANDLE_TV_INDESTRUCTIBILITY()
|
|
|
|
IF GET_ENTITY_HEALTH(TV) < 950
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: TV BROKEN! ", locationName )
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
SWITCH main_TV_stages
|
|
|
|
CASE TV_STATE_INITIALISE
|
|
|
|
// Initialise some basic vars
|
|
|
|
GET_TV_INFO()
|
|
|
|
// Smash TV after Family 2, and mend after Family 4
|
|
IF eTVLocation = TV_LOC_JIMMY_BEDROOM
|
|
|
|
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_2) = TRUE
|
|
AND GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4) = FALSE
|
|
|
|
iTVObject = GET_RAYFIRE_MAP_OBJECT( <<-809.9620, 170.9190, 75.7407>>, 3, "des_tvsmash" )
|
|
IF DOES_RAYFIRE_MAP_OBJECT_EXIST(iTVObject)
|
|
SET_STATE_OF_RAYFIRE_MAP_OBJECT(iTVObject, RFMO_STATE_ENDING)
|
|
ENDIF
|
|
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: JIMMY'S TV SMASHED, SO SHUTTING DOWN.")
|
|
|
|
TERMINATE_THIS_THREAD()
|
|
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
IF eTVLocation = TV_LOC_NONE
|
|
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: NO LOCATION! MODEL: ", GET_MODEL_NAME_FOR_DEBUG( GET_ENTITY_MODEL(TV) ))
|
|
|
|
SCRIPT_CLEANUP()
|
|
|
|
ELSE
|
|
|
|
SETUP_DEBUG()
|
|
|
|
HINT_AMBIENT_AUDIO_BANK( "SAFEHOUSE_MICHAEL_SIT_SOFA" )
|
|
REGISTER_SCRIPT_WITH_AUDIO()
|
|
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsTVOn = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bAvailableForUse = TRUE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType = GET_RANDOM_INT_IN_RANGE(0, 2)
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelPlaylist = ENUM_TO_INT(TV_PLAYLIST_NONE)
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStopTV = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bTVControlsDisabled = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsIndestructible = FALSE
|
|
|
|
fCurrentVolume = DEFAULT_TV_VOLUME
|
|
|
|
RESTART_TIMER_NOW(tmrContextButtonDelay)
|
|
|
|
SETUP_SCREEN()
|
|
|
|
// This allows the screen to be cleared, but prevents anything from
|
|
// rendering to the TV when it's not in use.
|
|
RELEASE_TV_RENDER_TARGET()
|
|
|
|
WAIT(0)
|
|
|
|
main_TV_stages = TV_STATE_OFF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TV_STATE_OFF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - TV_STATE_OFF - ForceStartAmbient = ",g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStartAmbientTV )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - TV_STATE_OFF - WANTED LEVEL DETECTED!" )
|
|
ENDIF
|
|
#ENDIF
|
|
WAIT(0)
|
|
ELSE
|
|
|
|
IF IS_ENTITY_STATIC(objectTV)
|
|
AND IS_ENTITY_UPRIGHT(objectTV)
|
|
|
|
IF HAS_THE_TV_BEEN_SWITCHED_ON_BY_PLAYER()
|
|
OR g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStartAmbientTV
|
|
main_TV_stages = TV_STATE_SETUP
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - TV_STATE_OFF - TV IS NOT STATIC OR NOT UPRIGHT" )
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
BREAK
|
|
|
|
|
|
CASE TV_STATE_SETUP
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - TV_STATE_SETUP - Stored channel = ", g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType )
|
|
|
|
SETUP_SCREEN()
|
|
|
|
IF NOT IS_THIS_TV_FORCED_ON(eTVLocation)
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TV_HLP1")
|
|
CLEAR_HELP()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectTV)
|
|
IF NOT IS_ENTITY_VISIBLE(objectTV)
|
|
SET_ENTITY_VISIBLE(objectTV, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectProjector)
|
|
IF NOT IS_ENTITY_VISIBLE(objectProjector)
|
|
SET_ENTITY_VISIBLE(objectProjector, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(objectOverlay)
|
|
IF IS_ENTITY_VISIBLE(objectOverlay)
|
|
SET_ENTITY_VISIBLE(objectOverlay, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT ARE_STRINGS_EQUAL(radioEmitter, "NULL")
|
|
SET_STATIC_EMITTER_ENABLED(radioEmitter, FALSE)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - TV_STATE_SETUP() TURNED OFF RADIO EMITTER ",radioEmitter )
|
|
ENDIF
|
|
|
|
SET_TV_AUDIO_FRONTEND(FALSE)
|
|
|
|
WAIT(0)
|
|
|
|
// Attach to original object, not the new object (e.g. the projector) to prevent audio attaching issues.
|
|
IF DOES_ENTITY_EXIST(objectOrigTV)
|
|
ATTACH_TV_AUDIO_TO_ENTITY(objectOrigTV)
|
|
ENDIF
|
|
|
|
// Player controlled TV
|
|
IF NOT IS_THIS_TV_FORCED_ON(eTVLocation)
|
|
//OR g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelPlaylist = ENUM_TO_INT( TV_PLAYLIST_NONE )
|
|
|
|
//RESTORE_STANDARD_CHANNELS()
|
|
|
|
// If we're still on the script or special channel, then randomise the starting channel.
|
|
IF g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType = ENUM_TO_INT(TVCHANNELTYPE_CHANNEL_SCRIPT)
|
|
OR g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType = ENUM_TO_INT(TVCHANNELTYPE_CHANNEL_SPECIAL)
|
|
OR g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType = ENUM_TO_INT(TVCHANNELTYPE_CHANNEL_NONE)
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType = GET_RANDOM_INT_IN_RANGE(0, 2)
|
|
ENDIF
|
|
|
|
SET_TV_CHANNEL(INT_TO_ENUM(TVCHANNELTYPE,g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType))
|
|
SET_TV_VOLUME(fCurrentVolume)
|
|
|
|
ELSE
|
|
|
|
// TV forced on by a script
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - TV_STATE_SETUP - FORCED ON " )
|
|
|
|
//g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStartTV = FALSE
|
|
|
|
eTVChannelType = INT_TO_ENUM( TVCHANNELTYPE, g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType)
|
|
eTVChannelPlaylist = INT_TO_ENUM( TV_CHANNEL_PLAYLIST, g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelPlaylist)
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " PLAYLIST ", g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelPlaylist )
|
|
|
|
//IF eTVChannelType = GET_TV_CHANNEL()
|
|
SET_TV_CHANNEL_PLAYLIST( eTVChannelType, GET_XML_PLAYLIST_FOR_TV_PLAYLIST(eTVChannelPlaylist), g_TVStruct[ENUM_TO_INT(eTVLocation)].bStartPlaylistFromBeginning )
|
|
SET_TV_CHANNEL(eTVChannelType)
|
|
//ENDIF
|
|
|
|
// If the TV has been forced on, but also set as player controlled, then turn off the FORCED ON flag.
|
|
// This allows the player to turn off the tv, and manipulate its controls, even if a script has forced it on.
|
|
IF g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStartAmbientTV = FALSE
|
|
//g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStartTV = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled = FALSE
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsTVOn = TRUE
|
|
|
|
BAWSAQ_INCREMENT_MODIFIER(BSMF_SM_TVTICK_FOR_RIM)
|
|
BAWSAQ_INCREMENT_MODIFIER(BSMF_SM_TVTICK_FOR_WAP)
|
|
BAWSAQ_INCREMENT_MODIFIER(BSMF_SM_TVTICK_FOR_WIW)
|
|
main_TV_stages = TV_STATE_ON
|
|
|
|
BREAK
|
|
|
|
CASE TV_STATE_ON
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - TV_STATE_ON, CHANNEL = ", GET_TV_CHANNEL() )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
|
|
IF g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStopTV
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " TV_STATE_ON - FORCED STOPPED" )
|
|
main_TV_stages = TV_STATE_CLEANUP
|
|
ENDIF
|
|
|
|
// Restart the TV if a script wants to make use of it whilst the player is using it.
|
|
IF g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled AND IS_THIS_TV_FORCED_ON(eTVLocation)
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " TV_STATE_ON - FORCED START AMBIENT" )
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled = FALSE
|
|
main_TV_stages = TV_STATE_CLEANUP
|
|
ENDIF
|
|
|
|
|
|
IF NOT IS_PLAYER_IN_TV_LOCATION( eTVLocation )
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: PLAYER OUT OF RANGE OF ", locationName )
|
|
SUSPEND_TV()
|
|
main_TV_stages = TV_STATE_SUSPEND
|
|
ELSE
|
|
|
|
DRAW_TV_TEXTURE_TO_RENDERTARGET()
|
|
|
|
// Restore the channel if it gets turned off. This can happen if a nearby TV suspends.
|
|
IF GET_TV_CHANNEL() = TVCHANNELTYPE_CHANNEL_NONE
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: TV_STATE_ON - RESTORING TV CHANNEL" )
|
|
SET_TV_CHANNEL(INT_TO_ENUM(TVCHANNELTYPE,g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType))
|
|
ENDIF
|
|
|
|
IF HAS_THE_TV_BEEN_SWITCHED_OFF_BY_PLAYER()
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: TV HAS BEEN TOLD TO STOP! ", locationName )
|
|
main_TV_stages = TV_STATE_CLEANUP
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE TV_STATE_SUSPEND
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF bShowDebug
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - TV_STATE_SUSPEND - Stored channel = ", g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelType )
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF IS_PLAYER_IN_TV_LOCATION( eTVLocation )
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: PLAYER BACK IN RANGE OF ", locationName )
|
|
main_TV_stages = TV_STATE_SETUP
|
|
ENDIF
|
|
|
|
IF g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStopTV
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - TV_STATE_SUSPEND FORCED STOPPED" )
|
|
main_TV_stages = TV_STATE_CLEANUP
|
|
ENDIF
|
|
|
|
|
|
BREAK
|
|
|
|
CASE TV_STATE_CLEANUP
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "OB_TV: ", locationName, " - TV_STATE_CLEANUP" )
|
|
|
|
END_WATCHING_TV()
|
|
|
|
IF iContextButtonIntention != NEW_CONTEXT_INTENTION
|
|
RELEASE_CONTEXT_INTENTION(iContextButtonIntention)
|
|
ENDIF
|
|
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStartAmbientTV = FALSE
|
|
//g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStartTV = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bForceStopTV = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].iTVChannelPlaylist = ENUM_TO_INT(TV_PLAYLIST_NONE)
|
|
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsTVOn = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsPlayerControlled = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bTVControlsDisabled = FALSE
|
|
g_TVStruct[ENUM_TO_INT(eTVLocation)].bIsIndestructible = FALSE
|
|
|
|
main_TV_stages = TV_STATE_OFF
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: TV DOESN'T EXIST! ", locationName )
|
|
SCRIPT_CLEANUP()
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
|
|
ENDWHILE
|
|
CPRINTLN( DEBUG_AMBIENT, "OB_TV: END OF SCRIPT! ", locationName )
|
|
SCRIPT_CLEANUP()
|
|
TERMINATE_THIS_THREAD()
|
|
ENDSCRIPT
|
|
|