Files
gtav-src/script/dev_ng/singleplayer/scripts/debug/debug.sc
T
2025-09-29 00:52:08 +02:00

2120 lines
78 KiB
Python
Executable File

USING "rage_builtins.sch"
USING "globals.sch"
USING "wardrobe_private.sch"
USING "socialclub_leaderboard.sch"
// Do nothing in release mode
#IF IS_FINAL_BUILD
SCRIPT
ENDSCRIPT
#ENDIF
// Only include in debug mode
#IF IS_DEBUG_BUILD
USING "commands_misc.sch"
USING "commands_debug.sch"
USING "shared_debug.sch"
USING "debug_menu_core.sch"
USING "flow_info_core.sch"
USING "flow_diagram_core.sch"
USING "SP_Mission_Flow_OffSkip.sch"
USING "SP_Family_Control_F8_Screen.sch"
USING "SP_Friends_Control_F10_Screen.sch"
USING "SP_Random_EVENT_Control_F7_Screen.sch"
USING "Mission_Control_Public.sch"
USING "flow_public_core_override.sch"
USING "script_heist.sch"
USING "flow_launcher_main_core.sch"
USING "batch_mission_launcher.sch"
USING "net_debug_F9.sch"
USING "vehicle_chase_debug.sch"
USING "debug_channels_structs.sch"
USING "script_launch_control.sch"
USING "photographyWildlife.sch"
DEBUG_MENU_DATA_STRUCT sDebugMenuData
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
//
// MISSION NAME : debug.sc
// AUTHOR : Keith
// DESCRIPTION : Debug control system that runs alongside Main.
//
// *****************************************************************************************
// *****************************************************************************************
// *****************************************************************************************
// Instance of Shared Debug struct
structSharedDebugVars m_sharedDebugVars
// Instance of a visual flow diagram.
FLOW_DIAGRAM sDebugFlowDiagram
FLOW_LAUNCHER_VARS m_flowLauncher
// Instance of the batch launcher.
BATCH_MISSION_LAUNCHER_STRUCT m_batchLauncher
// Ambient Debug Variables
BOOL m_createRandomPedAtNearestCarNode = FALSE
BOOL m_createProstituteAtNearestCarNode = FALSE
// Metrics Zone system control variables.
CONST_INT TIME_DISPLAY_METRICS_REPORT 15000
BOOL m_bShowCurrentMetricsZoneResults = FALSE
BOOL m_bClearCurrentMetricsZoneResults = FALSE
BOOL m_bHideCurrentMetricsZoneResults = FALSE
// Q Key Character Swap variables.
FLOAT m_fQSkipClearTimeCycleStage = 0
// Vehicle Debug Menu
//TIME_DATATYPE tdRelaunchInMPTimer
INT tdRelaunchInMPTimer
BOOL bRelaunchTimerSet
//population debug variables
bool bDebugPopulationToolsEnabled = false
float veh_DensityMulti = 1
float veh_randDensityMulti = 1
float veh_parkedDensityMulti = 1
int veh_pop_budget = 1
float ped_scenarioMulti = 1
float ped_densityMulti = 1
int ped_pop_budget = 1
int iPopTextTimer
int iPropPriorityLevel = 3
//debug start positions widget
//WIDGET_ID m_StartPositionDebugWidgets[iTOTAL_DEBUG_START_LOCATIONS]
BOOL m_bClickedStartPos[iTOTAL_DEBUG_START_LOCATIONS]
//Vehicle chase debug data
STRUCT_Vehicle_Chase_Debug m_VehicleChaseDebugData
PED_SCENE_STRUCT sPedScene
PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene
SCRIPT_TIMER stF9SpaceTimer
WIDGET_GROUP_ID widgetDebug
//Money debug helpers
INT iF6InitialDelay = 1000
INT iF6Tick = 30
INT iF6NextTick = 0
DEBUG_MOVERS_STRUCT sDebugMoversStruct
//SC leaderboard debug
STRUCT SCLB_LEADERBOARD_DEBUG_TEST
BOOL bRead
INT iRaceID
INT iReadProgress
INT iOverallProgress
BOOL bReadResult
INT iGlobalBest
INT iPersonalBest
ENDSTRUCT
SCLB_LEADERBOARD_DEBUG_TEST sclb_Debug
BOOL m_bKillScript
BOOL m_bRestartScript
PROC Intialise_Debug_Start_Positions_Widget()
INT i = 0
START_WIDGET_GROUP("Start positions")
REPEAT iTOTAL_DEBUG_START_LOCATIONS i
ADD_WIDGET_BOOL(g_DebugStartPositionStrings[i],m_bClickedStartPos[i])
ENDREPEAT
STOP_WIDGET_GROUP()
ENDPROC
PROC Update_Start_Pos_Widget_Response()
INT i = 0
INT selected = -1
REPEAT iTOTAL_DEBUG_START_LOCATIONS i
IF m_bClickedStartPos[i] = TRUE
selected = i
ENDIF
ENDREPEAT
IF selected > -1
REPEAT iTOTAL_DEBUG_START_LOCATIONS i
m_bClickedStartPos[i] = FALSE
ENDREPEAT
//try to load the coordinate area
LOAD_SCENE(g_vDebugStartPositions[selected])
SET_PED_COORDS_KEEP_VEHICLE(PLAYER_PED_ID(), g_vDebugStartPositions[selected])
SET_ENTITY_HEADING(PLAYER_PED_ID(),g_vDebugStartOrientations[selected])
// Set Gameplay Camera before and after a wait - sometimes it works without the WAIT
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
WAIT(0)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(0.0)
ENDIF
ENDPROC
/// PURPOSE:
/// To run the smoketest fullmap_test_flow in game flow mode but with all missions complete
PROC Maintain_end_of_game_skip()
IF g_end_of_game_flow
LAUNCHER_LAUNCH_FLOW_TO_LABEL(m_flowLauncher, LABEL_GAME_END)
g_end_of_game_flow = FALSE
ENDIF
ENDPROC
/// PURPOSE:
/// Draws a time of day script variable to screen as debug text.
PROC Draw_Time_Of_Day_To_Screen(TIMEOFDAY paramTimeOfDay, FLOAT paramPosX, FLOAT paramPosY, INT paramRed = 255, INT paramGreen = 255, INT paramBlue = 255)
TEXT_LABEL_7 txtHour = ""
TEXT_LABEL_7 txtMin = ""
TEXT_LABEL_7 txtSec = ""
INT iTempInt
//Get hour as a text label.
iTempInt = GET_TIMEOFDAY_HOUR(paramTimeOfDay)
IF iTempInt < 10
txtHour += 0
ENDIF
txtHour += iTempInt
//Get minute as a text label.
iTempInt = GET_TIMEOFDAY_MINUTE(paramTimeOfDay)
IF iTempInt < 10
txtMin += 0
ENDIF
txtMin += iTempInt
//Get second as a text label.
iTempInt = GET_TIMEOFDAY_SECOND(paramTimeOfDay)
IF iTempInt < 10
txtSec += 0
ENDIF
txtSec += iTempInt
//Setup text params.
SET_SCRIPT_GFX_ALIGN(UI_ALIGN_LEFT, UI_ALIGN_BOTTOM)
SET_TEXT_FONT(FONT_STANDARD)
SET_TEXT_JUSTIFICATION(FONT_LEFT)
SET_TEXT_COLOUR(paramRed, paramGreen, paramBlue, 255)
SET_TEXT_DROP_SHADOW()
SET_SCRIPT_GFX_ALIGN_PARAMS(paramPosX, paramPosY, FLOW_MISSION_NAME_SIZE_X, FLOW_MISSION_NAME_SIZE_Y)
SET_TEXT_SCALE(0.55, 0.55)
SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_AFTER_FADE)
//Draw the time/date.
BEGIN_TEXT_COMMAND_DISPLAY_TEXT("DBG_TIMEDATE")
ADD_TEXT_COMPONENT_INTEGER(GET_TIMEOFDAY_DAY(paramTimeOfDay))
ADD_TEXT_COMPONENT_SUBSTRING_LITERAL_STRING(GET_MONTH_STRING_FROM_MONTH_OF_YEAR(GET_TIMEOFDAY_MONTH(paramTimeOfDay)))
ADD_TEXT_COMPONENT_INTEGER(GET_TIMEOFDAY_YEAR(paramTimeOfDay))
ADD_TEXT_COMPONENT_SUBSTRING_LITERAL_STRING(txtHour)
ADD_TEXT_COMPONENT_SUBSTRING_LITERAL_STRING(txtMin)
ADD_TEXT_COMPONENT_SUBSTRING_LITERAL_STRING(txtSec)
END_TEXT_COMMAND_DISPLAY_TEXT(paramPosX, paramPosY)
RESET_SCRIPT_GFX_ALIGN()
ENDPROC
/// PURPOSE:
/// Draws script's interpretation of the current time/date and an additional custom time/date to the screen.
PROC Maintain_Game_Time_Date_Displaying()
IF m_sharedDebugVars.bDrawGameTimeDate
//Draw the current time of day.
Draw_Time_Of_Day_To_Screen( GET_CURRENT_TIMEOFDAY(),
m_sharedDebugVars.fCurrentTimeDateX,
m_sharedDebugVars.fCurrentTimeDateY,
255, 255, 255)
//If a script has set a debug time of day draw it here as well.
IF g_debugTOD != INVALID_TIMEOFDAY
Draw_Time_Of_Day_To_Screen( g_debugTOD,
m_sharedDebugVars.fDebugTimeDateX,
m_sharedDebugVars.fDebugTimeDateY,
255, 100, 100)
ENDIF
ENDIF
//Set current TOD
IF m_sharedDebugVars.bSetTOD
m_sharedDebugVars.bSetTOD = FALSE
SET_CLOCK_TIME(m_sharedDebugVars.fDebugDate1.Hour, m_sharedDebugVars.fDebugDate1.minute, m_sharedDebugVars.fDebugDate1.Seconds)
SET_CLOCK_DATE(m_sharedDebugVars.fDebugDate1.Day,INT_TO_ENUM(MONTH_OF_YEAR, m_sharedDebugVars.fDebugDate1.Month), m_sharedDebugVars.fDebugDate1.Year)
ENDIF
//Perform TOD calculation
IF m_sharedDebugVars.bAddTODs
m_sharedDebugVars.bAddTODs = FALSE
TIMEOFDAY v1 = CONVERT_STATDATE_TO_TIMEOFDAY(m_sharedDebugVars.fDebugDate1)
ADD_TIME_TO_TIMEOFDAY(v1,m_sharedDebugVars.fDebugDate2.Seconds,m_sharedDebugVars.fDebugDate2.Minute,m_sharedDebugVars.fDebugDate2.Hour,
m_sharedDebugVars.fDebugDate2.Day,m_sharedDebugVars.fDebugDate2.Month, m_sharedDebugVars.fDebugDate2.Year)
m_sharedDebugVars.fDebugDateRes = CONVERT_TIMEOFDAY_TO_STATDATE(v1)
ENDIF
ENDPROC
// *****************************************************************************************
// Savehouse warp
// *****************************************************************************************
/// PURPOSE:
/// KEY M: Toggles Mission menu on/off
PROC Maintain_KeyH_Warp_To_Savehouse()
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_H, KEYBOARD_MODIFIER_SHIFT, "Warp To Savehouse")
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SWITCH GET_CURRENT_PLAYER_PED_ENUM()
CASE CHAR_MICHAEL
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-821.5895, 176.8634, 70.5457>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 289.0280)
BREAK
CASE CHAR_FRANKLIN
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-13.9896, -1447.2451, 29.6045>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 108.5263)
BREAK
CASE CHAR_TREVOR
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<1983.2773, 3817.2107, 31.3619>>)
SET_ENTITY_HEADING(PLAYER_PED_ID(), 163.2128)
BREAK
ENDSWITCH
ENDIF
ENDIF
ENDPROC
// *****************************************************************************************
// Player cash
// *****************************************************************************************
/// PURPOSE:
/// KEY CTRL+F6: Gives the player a lump sum of cash
PROC Maintain_KeyF6_Cash()
// Note, pressing F6 key on its own will give the player 100 bucks from code.
//Increase / Decrease Cash
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_F6, KEYBOARD_MODIFIER_SHIFT, "Decrease Cash")
enumCharacterList ePed = GET_CURRENT_PLAYER_PED_ENUM()
IF IS_PLAYER_PED_PLAYABLE(ePed)
DEBIT_BANK_ACCOUNT(ePed, BAAC_DEFAULT_DEBUG, 1000)
iF6NextTick = GET_GAME_TIMER() + iF6InitialDelay
ENDIF
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F6)
enumCharacterList ePed = GET_CURRENT_PLAYER_PED_ENUM()
IF IS_PLAYER_PED_PLAYABLE(ePed)
CREDIT_BANK_ACCOUNT(ePed, BAAC_DEFAULT_DEBUG, 5000)
iF6NextTick = GET_GAME_TIMER() + iF6InitialDelay
ENDIF
ENDIF
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_F6, KEYBOARD_MODIFIER_CTRL, "Lump Cash Increase")
enumCharacterList ePed = GET_CURRENT_PLAYER_PED_ENUM()
IF IS_PLAYER_PED_PLAYABLE(ePed)
CREDIT_BANK_ACCOUNT(ePed, BAAC_DEFAULT_DEBUG, 100000)
iF6NextTick = GET_GAME_TIMER() + iF6InitialDelay
ENDIF
ENDIF
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_F6, KEYBOARD_MODIFIER_CTRL_SHIFT, "MASSIVE Lump Cash Increase")
enumCharacterList ePed = GET_CURRENT_PLAYER_PED_ENUM()
IF IS_PLAYER_PED_PLAYABLE(ePed)
CREDIT_BANK_ACCOUNT(ePed, BAAC_DEFAULT_DEBUG, 100000000)
iF6NextTick = GET_GAME_TIMER() + iF6InitialDelay
ENDIF
ENDIF
//Quick increase/decrease cash
IF IS_DEBUG_KEY_PRESSED(KEY_F6, KEYBOARD_MODIFIER_CTRL,"Quick lump cash increase")
IF GET_GAME_TIMER() > iF6NextTick
enumCharacterList ePed = GET_CURRENT_PLAYER_PED_ENUM()
IF IS_PLAYER_PED_PLAYABLE(ePed)
CREDIT_BANK_ACCOUNT(ePed, BAAC_DEFAULT_DEBUG, 100000)
iF6NextTick = GET_GAME_TIMER() + iF6Tick
ENDIF
ENDIF
ENDIF
IF IS_DEBUG_KEY_PRESSED(KEY_F6, KEYBOARD_MODIFIER_NONE,"Quick cash increase")
IF GET_GAME_TIMER() > iF6NextTick
enumCharacterList ePed = GET_CURRENT_PLAYER_PED_ENUM()
IF IS_PLAYER_PED_PLAYABLE(ePed)
CREDIT_BANK_ACCOUNT(ePed, BAAC_DEFAULT_DEBUG, 5000)
iF6NextTick = GET_GAME_TIMER() + iF6Tick
ENDIF
ENDIF
ENDIF
IF IS_DEBUG_KEY_PRESSED(KEY_F6, KEYBOARD_MODIFIER_SHIFT,"Quick cash decrease")
IF GET_GAME_TIMER() > iF6NextTick
enumCharacterList ePed = GET_CURRENT_PLAYER_PED_ENUM()
IF IS_PLAYER_PED_PLAYABLE(ePed)
DEBIT_BANK_ACCOUNT(ePed, BAAC_DEFAULT_DEBUG, 1000)
iF6NextTick = GET_GAME_TIMER() + iF6Tick
ENDIF
ENDIF
ENDIF
ENDPROC
// *****************************************************************************************
// Player swap
// *****************************************************************************************
/// PURPOSE:
/// KEY Q: Swaps the player character and tests timecycle modifiers.
PROC Maintain_KeyQ_Swap_Player()
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_Q)
//C//PRINTLN(DEBUG_PED_COMP, "doing Q skip")
INT iCurrentPlayerPed = GET_CURRENT_PLAYER_PED_INT()
INT iNewPlayerPed = iCurrentPlayerPed
WHILE TRUE
//Step to the next playable ped index.
iNewPlayerPed++
IF iNewPlayerPed > 2
iNewPlayerPed = 0
ENDIF
//Have we looped back to the current player ped and failed to find a new available ped to switch to?
IF iNewPlayerPed = iCurrentPlayerPed
EXIT
ENDIF
m_fQSkipClearTimeCycleStage++
IF m_fQSkipClearTimeCycleStage > 3
IF NOT g_bUseCharacterFilters
g_bUseCharacterFilters = TRUE
//PRINTLN("<QSKIP> Turning on character timecycle modifier.")
UPDATE_PLAYER_PED_TIMECYCLE_MODIFIER()
ELSE
//PRINTLN("<QSKIP> Clearing character timecycle modifier.")
SET_NEXT_PLAYER_TCMODIFIER("")
ENDIF
m_fQSkipClearTimeCycleStage = 0
EXIT
ENDIF
//Is this new playable ped index available to be swapped to?
IF IS_PLAYER_PED_AVAILABLE(INT_TO_ENUM(enumCharacterList, iNewPlayerPed))
//PRINTLN("<QSKIP> Performing swapping of player character.")
STORE_DEFAULT_PLAYER_SWITCH_STATE(PLAYER_PED_ID())
WHILE NOT SET_CURRENT_SELECTOR_PED(GET_SELECTOR_SLOT_FROM_PLAYER_PED_ENUM(INT_TO_ENUM(enumCharacterList, iNewPlayerPed)))
WAIT(0)
ENDWHILE
// set a random combination of clothes on the ped
SET_RANDOM_CLOTHES_COMBO(PLAYER_PED_ID(), TRUE)
IF NOT IS_KEYBOARD_KEY_PRESSED(KEY_W)
//PRINTLN("<QSKIP> KEY_W NOT pressed - reset last known ped info.")
ResetLastKnownPedInfo(g_savedGlobals.sPlayerData.sInfo, SP_MISSION_NONE)
ELSE
//PRINTLN("<QSKIP> KEY_W pressed.")
ENDIF
EXIT
ENDIF
ENDWHILE
ENDIF
ENDPROC
/// PURPOSE:
/// KEY K: Kills the player character.
PROC Maintain_KeyK_Kill_PLayer()
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_K, KEYBOARD_MODIFIER_SHIFT, "Kill local player")
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
SET_ENTITY_HEALTH(PLAYER_PED_ID(), 0)
ENDIF
ENDIF
ENDPROC
// *****************************************************************************************
// Mission Menu - toggle on/off
// *****************************************************************************************
SCRIPT_TIMER buttonHoldTimer
/// PURPOSE:
/// KEY M: Toggles Mission menu on/off
PROC Maintain_KeyM_Toggle_Mission_Menu()
IF GET_COMMANDLINE_PARAM_EXISTS("mp_DisableDebugMenu")
EXIT
ENDIF
// Activate?
BOOL bJoypadKeysPressed = FALSE
IF (IS_BUTTON_PRESSED(PAD1, SELECT)
AND IS_BUTTON_PRESSED(PAD1, RIGHTSHOCK)
AND IS_BUTTON_PRESSED(PAD1, RIGHTSHOULDER1))
IF NOT IS_DEBUG_MENU_PROCESS_FLAG_SET(sDebugMenuData.iProcessFlags, DM_PROCESS_KEYS_PRESSED)
SET_DEBUG_MENU_PROCESS_FLAG(sDebugMenuData.iProcessFlags, DM_PROCESS_KEYS_PRESSED)
ENDIF
ELSE
IF IS_DEBUG_MENU_PROCESS_FLAG_SET(sDebugMenuData.iProcessFlags, DM_PROCESS_KEYS_PRESSED)
CLEAR_DEBUG_MENU_PROCESS_FLAG(sDebugMenuData.iProcessFlags, DM_PROCESS_KEYS_PRESSED)
bJoypadKeysPressed = TRUE
ENDIF
ENDIF
IF GET_COMMANDLINE_PARAM_EXISTS("mp_EnableDebugMenuButtonPress")
IF IS_BUTTON_PRESSED(PAD1, DPADLEFT)
IF HAS_NET_TIMER_EXPIRED(buttonHoldTimer, 1500)
bJoypadKeysPressed = TRUE
RESET_NET_TIMER(buttonHoldTimer)
ENDIF
ELSE
RESET_NET_TIMER(buttonHoldTimer)
ENDIF
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_M)
OR (bJoypadKeysPressed)
OR (IS_DEBUG_MENU_PROCESS_FLAG_SET(sDebugMenuData.iProcessFlags, DM_PROCESS_LAUNCH) AND IS_BUTTON_JUST_PRESSED(PAD1, CIRCLE) AND NOT sDebugMenuData.bDrawAltWindow)
DM_Toggle_Menu_Launch_State(sDebugMenuData)
ENDIF
ENDPROC
// *****************************************************************************************
// Random Event Debug Screen - toggle on/off
// *****************************************************************************************
/// PURPOSE:
/// KEY F11: Toggles Random Event debug screen on/off
PROC Maintain_KeyF11_Toggle_Random_Event_Debug_Screen()
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F11))
WHILE (IS_KEYBOARD_KEY_PRESSED(KEY_F11))
WAIT (0)
ENDWHILE
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F11_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F11_SCREEN_ON)
WAIT(0)
//PRINTSTRING("...F11 SCREEN OFF")
//PRINTNL()
ELSE
SET_BIT(m_sharedDebugFlags, DBG_F11_SCREEN_ON)
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F8_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F8_SCREEN_ON)
//PRINTSTRING("...F8 SCREEN OFF")//PRINTNL()
ENDIF
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F9_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F9_SCREEN_ON)
//PRINTSTRING("...F9 SCREEN OFF")//PRINTNL()
ENDIF
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F10_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F10_SCREEN_ON)
//PRINTSTRING("...F10 SCREEN OFF")//PRINTNL()
ENDIF
//PRINTSTRING("...F11 SCREEN ON")
//PRINTNL()
ENDIF
ENDIF
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F11_SCREEN_ON))
Display_Random_Event_F11_Screen()
ELSE
IF (IS_DEBUG_KEY_PRESSED(KEY_F11, KEYBOARD_MODIFIER_CTRL, "toggle F11 screen off"))
g_bDrawLiteralSceneString = FALSE
ENDIF
ENDIF
ENDPROC
// *****************************************************************************************
// Family Controller Debug Screen - toggle on/off
// *****************************************************************************************
/// PURPOSE:
/// KEY F8: Toggles Family Controller debug screen on/off
PROC Maintain_KeyF8_Toggle_Family_Control_Debug_Screen()
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F8))
WHILE (IS_KEYBOARD_KEY_PRESSED(KEY_F8))
WAIT (0)
ENDWHILE
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F8_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F8_SCREEN_ON)
WAIT(0)
Cleanup_F8_Switch_Details()
//PRINTSTRING("...F8 SCREEN OFF")
//PRINTNL()
ELSE
SET_BIT(m_sharedDebugFlags, DBG_F8_SCREEN_ON)
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F11_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F11_SCREEN_ON)
//PRINTSTRING("...F9 SCREEN OFF")//PRINTNL()
ENDIF
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F9_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F9_SCREEN_ON)
//PRINTSTRING("...F9 SCREEN OFF")//PRINTNL()
ENDIF
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F10_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F10_SCREEN_ON)
//PRINTSTRING("...F10 SCREEN OFF")//PRINTNL()
ENDIF
//PRINTSTRING("...F8 SCREEN ON")
//PRINTNL()
ENDIF
ENDIF
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F8_SCREEN_ON))
Display_Family_Controller_F8_Screen( sPedScene, sPassedScene)
ELSE
IF (IS_DEBUG_KEY_PRESSED(KEY_F8, KEYBOARD_MODIFIER_CTRL, "toggle F8 screen off"))
g_bDrawLiteralSceneString = FALSE
ENDIF
ENDIF
ENDPROC
// *****************************************************************************************
// Friends Controller Debug Screen - toggle on/off
// *****************************************************************************************
/// PURPOSE:
/// KEY F10: Toggles Friends Controller debug screen on/off
PROC Maintain_KeyF10_Toggle_Friends_Control_Debug_Screen()
IF (IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F10))
WHILE (IS_KEYBOARD_KEY_PRESSED(KEY_F10))
WAIT (0)
ENDWHILE
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F10_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F10_SCREEN_ON)
WAIT(0)
Cleanup_F10_Switch_Details()
//PRINTSTRING("...F10 SCREEN OFF")
//PRINTNL()
ELSE
SET_BIT(m_sharedDebugFlags, DBG_F10_SCREEN_ON)
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F8_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F8_SCREEN_ON)
//PRINTSTRING("...F8 SCREEN OFF")//PRINTNL()
ENDIF
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F9_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F9_SCREEN_ON)
//PRINTSTRING("...F9 SCREEN OFF")//PRINTNL()
ENDIF
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F11_SCREEN_ON))
CLEAR_BIT(m_sharedDebugFlags, DBG_F11_SCREEN_ON)
//PRINTSTRING("...F11 SCREEN OFF")//PRINTNL()
ENDIF
//PRINTSTRING("...F10 SCREEN ON")
//PRINTNL()
ENDIF
ENDIF
IF (IS_BIT_SET(m_sharedDebugFlags, DBG_F10_SCREEN_ON))
Display_Friends_Controller_F10_Screen()
ENDIF
ENDPROC
proc MaintainPopulationDebug()
//if population command line is used.
if bDebugPopulationToolsEnabled
// vehicle population debug
if IS_DEBUG_KEY_JUST_PRESSED(KEY_PERIOD,KEYBOARD_MODIFIER_NONE,"veh_DensityMulti increase")
veh_DensityMulti += 0.1
//PRINTLN("veh_DensityMulti increased to: ", veh_DensityMulti)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_COMMA,KEYBOARD_MODIFIER_NONE,"veh_DensityMulti decrease")
veh_DensityMulti -= 0.1
if veh_DensityMulti <= 0
veh_DensityMulti = 0
endif
//PRINTLN("veh_DensityMulti decreased to: ", veh_DensityMulti)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_PERIOD,KEYBOARD_MODIFIER_SHIFT,"veh_randDensityMulti increase")
veh_randDensityMulti += 0.1
//PRINTLN("veh_randDensityMulti increased to: ",veh_randDensityMulti)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_COMMA,KEYBOARD_MODIFIER_SHIFT,"veh_randDensityMulti decrease")
veh_randDensityMulti -= 0.1
if veh_randDensityMulti <= 0
veh_randDensityMulti = 0
endif
//PRINTLN("veh_randDensityMulti decreased to: ",veh_randDensityMulti)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_PERIOD,KEYBOARD_MODIFIER_CTRL,"veh_parkedDensityMulti increase")
veh_parkedDensityMulti += 0.1
//PRINTLN("veh_parkedDensityMulti increased to: ",veh_parkedDensityMulti)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_COMMA,KEYBOARD_MODIFIER_CTRL,"veh_ParkedDensityMulti decrease")
veh_parkedDensityMulti -= 0.1
if veh_parkedDensityMulti <= 0
veh_parkedDensityMulti = 0
endif
//PRINTLN("veh_ParkedDensityMulti decreased to: ",veh_parkedDensityMulti)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_PERIOD,KEYBOARD_MODIFIER_ALT,"VEHICLE_POPULATION_BUDGET increase")
veh_pop_budget = CLAMP_INT(veh_pop_budget+1,0,3)
SET_VEHICLE_POPULATION_BUDGET(veh_pop_budget)
//PRINTLN("VEHICLE_POPULATION_BUDGET: ",veh_pop_budget)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_COMMA,KEYBOARD_MODIFIER_ALT,"VEHICLE_POPULATION_BUDGET decrease")
veh_pop_budget = CLAMP_INT(veh_pop_budget -1,0,3)
SET_VEHICLE_POPULATION_BUDGET(veh_pop_budget)
//PRINTLN("VEHICLE_POPULATION_BUDGET: ",veh_pop_budget)
iPopTextTimer = GET_GAME_TIMER()
endif
SET_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(veh_DensityMulti)
SET_RANDOM_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(veh_randDensityMulti)
SET_PARKED_VEHICLE_DENSITY_MULTIPLIER_THIS_FRAME(veh_parkedDensityMulti)
//ped population debug
if IS_DEBUG_KEY_JUST_PRESSED(KEY_RIGHT,KEYBOARD_MODIFIER_CTRL,"ped_scenarioMulti increase")
ped_scenarioMulti += 0.1
//PRINTLN("ped_scenarioMulti increased to: ",ped_scenarioMulti)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_LEFT,KEYBOARD_MODIFIER_CTRL,"ped_scenarioMulti decrease")
ped_scenarioMulti -= 0.1
if ped_scenarioMulti <= 0
ped_scenarioMulti = 0
endif
//PRINTLN("ped_scenarioMulti decreased to: ",ped_scenarioMulti)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_UP,KEYBOARD_MODIFIER_CTRL,"ped_densityMulti increase")
ped_densityMulti += 0.1
//PRINTLN("ped_densityMulti increased to: ",ped_densityMulti)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_DOWN,KEYBOARD_MODIFIER_CTRL,"ped_densityMulti decrease")
ped_densityMulti -= 0.1
if ped_densityMulti <= 0
ped_densityMulti = 0
endif
//PRINTLN("ped_densityMulti decreased to: ",ped_densityMulti)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_UP,KEYBOARD_MODIFIER_SHIFT,"ped_pop increase")
ped_pop_budget = CLAMP_INT(ped_pop_budget + 1,0,3)
SET_PED_POPULATION_BUDGET(ped_pop_budget)
//PRINTLN("PED_POPULATION_BUDGET: ",ped_pop_budget)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_DOWN,KEYBOARD_MODIFIER_SHIFT,"ped_pop decrease")
ped_pop_budget = CLAMP_INT(ped_pop_budget - 1,0,3)
SET_PED_POPULATION_BUDGET(ped_pop_budget)
//PRINTLN("PED_POPULATION_BUDGET: ",ped_pop_budget)
iPopTextTimer = GET_GAME_TIMER()
endif
SET_SCENARIO_PED_DENSITY_MULTIPLIER_THIS_FRAME(ped_scenarioMulti,ped_scenarioMulti)
SET_PED_DENSITY_MULTIPLIER_THIS_FRAME(ped_densityMulti)
if IS_DEBUG_KEY_JUST_PRESSED(KEY_LEFT,KEYBOARD_MODIFIER_SHIFT,"prop priority increase")
iPropPriorityLevel = CLAMP_INT(iPropPriorityLevel - 1,0,3)
SET_GLOBAL_INSTANCE_PRIORITY(iPropPriorityLevel)
//PRINTLN("Prop priority level: ",iPropPriorityLevel)
iPopTextTimer = GET_GAME_TIMER()
endif
if IS_DEBUG_KEY_JUST_PRESSED(KEY_RIGHT,KEYBOARD_MODIFIER_SHIFT,"prop priority decrease")
iPropPriorityLevel = CLAMP_INT(iPropPriorityLevel + 1,0,3)
SET_GLOBAL_INSTANCE_PRIORITY(iPropPriorityLevel)
//PRINTLN("Prop priority level: ",iPropPriorityLevel)
iPopTextTimer = GET_GAME_TIMER()
endif
if get_game_timer() - iPopTextTimer < 4000
float Xoffset = 0.6
Configure_On_Screen_Text()
DISPLAY_TEXT_WITH_FLOAT(Xoffset,0.1,"DPOP_VEHDENSMULT",veh_DensityMulti,2)
Configure_On_Screen_Text()
DISPLAY_TEXT_WITH_FLOAT(Xoffset,0.15,"DPOP_VEHRANDMULT",veh_randDensityMulti,2)
Configure_On_Screen_Text()
DISPLAY_TEXT_WITH_FLOAT(Xoffset,0.2,"DPOP_VEHPARKMULT",veh_parkedDensityMulti,2)
Configure_On_Screen_Text()
DISPLAY_TEXT_WITH_NUMBER(Xoffset,0.25,"DPOP_VEHPOPBUDG",veh_pop_budget)
Configure_On_Screen_Text()
DISPLAY_TEXT_WITH_FLOAT(Xoffset,0.3,"DPOP_PEDSCENMULT",ped_scenarioMulti,2)
Configure_On_Screen_Text()
DISPLAY_TEXT_WITH_FLOAT(Xoffset,0.35,"DPOP_PEDDENSMULT",ped_densityMulti,2)
Configure_On_Screen_Text()
DISPLAY_TEXT_WITH_NUMBER(Xoffset,0.4,"DPOP_PEDPOPBUDG",ped_pop_budget)
Configure_On_Screen_Text()
DISPLAY_TEXT_WITH_NUMBER(Xoffset,0.45,"DPOP_PROPLEVEL",iPropPriorityLevel)
endif
endif
endproc
// *****************************************************************************************
// AMBIENT DEBUG
// *****************************************************************************************
/// PURPOSE: Creates the widget that enable a couple of Ambient debug functions
PROC Create_Ambient_Widgets()
START_WIDGET_GROUP("Ambient Script Debug")
ADD_WIDGET_BOOL("Tick to allow debug script launches to count towards 100%", g_bDontResetCompletionOnDebugLaunch)
ADD_WIDGET_BOOL("Tick to hold Random Events", g_bHoldRandomEventForSelection)
ADD_WIDGET_BOOL("Create random ped at nearest car node", m_createRandomPedAtNearestCarNode)
ADD_WIDGET_BOOL("Create hooker at nearest car node", m_createProstituteAtNearestCarNode)
STOP_WIDGET_GROUP()
ENDPROC
/// PURPOSE: Maintains the widget that allows a couple of Ambient debug functions
PROC Maintain_Ambient_Widgets()
PED_INDEX randomPed
PED_INDEX prostPed
VECTOR creationPos
IF m_createRandomPedAtNearestCarNode
IF CAN_CREATE_RANDOM_PED(RPM_DONT_CARE)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF GET_CLOSEST_VEHICLE_NODE(GET_ENTITY_COORDS(PLAYER_PED_ID()), creationPos)
randomPed = CREATE_RANDOM_PED(creationPos)
SET_PED_AS_NO_LONGER_NEEDED(randomPed)
m_createRandomPedAtNearestCarNode = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
IF m_createProstituteAtNearestCarNode
REQUEST_MODEL(S_F_Y_HOOKER_01)
IF HAS_MODEL_LOADED(S_F_Y_HOOKER_01)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF GET_CLOSEST_VEHICLE_NODE(GET_ENTITY_COORDS(PLAYER_PED_ID()), creationPos)
//randomPed = CREATE_RANDOM_PED(creationPos)
prostPed = CREATE_PED(PEDTYPE_PROSTITUTE,S_F_Y_HOOKER_01, creationPos, 0.0)
WAIT(1000)
SET_PED_AS_NO_LONGER_NEEDED(prostPed)
m_createProstituteAtNearestCarNode = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
// *****************************************************************************************
// Currently Playing Dialogue Information
// Note: Had to be placed in the main script file for debug due to cylic dependencies with Dialogue_public.sch
// *****************************************************************************************
#IF IS_DEBUG_BUILD
PROC DEBUG_SHOW_DIALOGUE_ROOT_PLAYING()
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_SUBTRACT, KEYBOARD_MODIFIER_NONE, "ConversationDebug")
OR g_bEnableConversationDebugFromWidget
g_bEnableConversationDebugFromWidget = FALSE
IF g_bEnableConversationDebug
g_bEnableConversationDebug = FALSE
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(FALSE)
ELSE
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
g_bEnableConversationDebug = TRUE
ENDIF
ENDIF
IF NOT g_bEnableConversationDebug
EXIT
ENDIF
BOOL bLoadingBlock
INT iPrint
TEXT_LABEL_63 tl63 = ""
TEXT_LABEL_23 tl23 = ""
FLOAT fX, fY, fSpacing
VECTOR vPos = <<0.0, 0.0, 0.0>>
// Could use widget.
fX = 0.55
fY = 0.25
fSpacing = 0.0275
PROCESS_DEBUG_MOVER_FOR_TYPE(sDebugMoversStruct, ciDEBUG_ON_SCREEN_MOVERS_CONVERSATION, fX, fY, 0.25, 0.025, TRUE, FALSE, TRUE)
vPos = <<fX, fY+(0.03*iPrint), fY+(0.015*iPrint)>>
tl63 = "------- Conversation Debug -------"
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_DIVIDE, KEYBOARD_MODIFIER_NONE, "ConversationDebugKeyboard")
g_bEnableConversationDebugCustomPlaying = TRUE
ENDIF
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_MULTIPLY, KEYBOARD_MODIFIER_NONE, "ConversationDebugKeyboard")
g_bEnableConversationDebugCustomPlayingLine = TRUE
ENDIF
IF g_bEnableConversationDebugCustomPlaying
OR g_bEnableConversationDebugCustomPlayingLine
OR g_bEnableConversationDebugCustomPlayingAmbientLinePos
PRINTLN("[ConversationDebug] - Processing Debug Conversation.")
REQUEST_ADDITIONAL_TEXT_FOR_DLC(g_tl31_Block_DiagDebug, DLC_MISSION_DIALOGUE_TEXT_SLOT)
IF HAS_THIS_ADDITIONAL_TEXT_LOADED(g_tl31_Block_DiagDebug, DLC_MISSION_DIALOGUE_TEXT_SLOT)
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
PRINTLN("[ConversationDebug] - g_tl31_Block_DiagDebug: ", g_tl31_Block_DiagDebug, " g_tl31_Root_DiagDebug: ", g_tl31_Root_DiagDebug, " g_tl31_Label_DiagDebug: ", g_tl31_Label_DiagDebug)
IF NOT IS_STRING_NULL_OR_EMPTY(g_ConversationDebugVoiceNamePed1)
AND g_ConversationDebugVoiceNumberPed1 != -1
PRINTLN("[ConversationDebug] - Adding ped 1, Name: ", g_ConversationDebugVoiceNamePed1, " Speaker: ", g_ConversationDebugVoiceNumberPed1)
ADD_PED_FOR_DIALOGUE(g_ConversationDebugCustom_speechPedStruct, g_ConversationDebugVoiceNumberPed1, NULL, g_ConversationDebugVoiceNamePed1)
ENDIF
IF NOT IS_STRING_NULL_OR_EMPTY(g_ConversationDebugVoiceNamePed2)
AND g_ConversationDebugVoiceNumberPed2 != -1
PRINTLN("[ConversationDebug] - Adding ped 2, Name: ", g_ConversationDebugVoiceNamePed2, " Speaker: ", g_ConversationDebugVoiceNumberPed2)
ADD_PED_FOR_DIALOGUE(g_ConversationDebugCustom_speechPedStruct, g_ConversationDebugVoiceNumberPed2, NULL, g_ConversationDebugVoiceNamePed2)
ENDIF
IF NOT IS_STRING_NULL_OR_EMPTY(g_ConversationDebugVoiceNamePed3)
AND g_ConversationDebugVoiceNumberPed3 != -1
PRINTLN("[ConversationDebug] - Adding ped 3, Name: ", g_ConversationDebugVoiceNumberPed3, " Speaker: ", g_ConversationDebugVoiceNumberPed3)
ADD_PED_FOR_DIALOGUE(g_ConversationDebugCustom_speechPedStruct, g_ConversationDebugVoiceNumberPed3, NULL, g_ConversationDebugVoiceNamePed3)
ENDIF
IF g_bEnableConversationDebugCustomPlaying
PRINTLN("[ConversationDebug] - Playing Conversation")
IF CREATE_CONVERSATION(g_ConversationDebugCustom_speechPedStruct, g_tl31_Block_DiagDebug, g_tl31_Root_DiagDebug, CONV_PRIORITY_VERY_HIGH)
g_bEnableConversationDebugCustomPlaying = FALSE
ENDIF
ELIF g_bEnableConversationDebugCustomPlayingLine
PRINTLN("[ConversationDebug] - Playing Single Line using label.")
PLAY_SINGLE_LINE_FROM_CONVERSATION(g_ConversationDebugCustom_speechPedStruct, g_tl31_Block_DiagDebug, g_tl31_Root_DiagDebug, g_tl31_Label_DiagDebug, CONV_PRIORITY_VERY_HIGH)
g_bEnableConversationDebugCustomPlayingLine = FALSE
ELIF g_bEnableConversationDebugCustomPlayingAmbientLinePos
VECTOR vPosSpeech
vPosSpeech = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)
PRINTLN("[ConversationDebug] - Playing Single Context using Label as Context at position: ", vPosSpeech)
IF NOT IS_VECTOR_ZERO(vPosSpeech)
PLAY_AMBIENT_SPEECH_FROM_POSITION_NATIVE(g_tl31_Label_DiagDebug, g_ConversationDebugVoiceNamePed1, vPosSpeech, AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE_NORMAL_CRITICAL))
ENDIF
/*
TEXT_LABEL_31 tl31 = ""
tl31 = GET_FILENAME_FOR_AUDIO_CONVERSATION(g_tl31_Root_DiagDebug)
tl31 += "A"
PRINTLN("[ConversationDebug] - Playing Single Context using Root at position. g_tl31_Root_DiagDebug: ", g_tl31_Root_DiagDebug, " tl31: ", tl31, " Voice: ", g_ConversationDebugVoiceNamePed1)
VECTOR vPosSpeech
vPosSpeech = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)
PLAY_AMBIENT_SPEECH_FROM_POSITION_NATIVE(tl31, g_ConversationDebugVoiceNamePed1, vPosSpeech, AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE_NORMAL_CRITICAL))*/
g_bEnableConversationDebugCustomPlayingAmbientLinePos = FALSE
ENDIF
ELSE
PRINTLN("[ConversationDebug] - Loading block: ", g_tl31_Block_DiagDebug)
bLoadingBlock = TRUE
ENDIF
ENDIF
IF g_bEnableConversationDebugCustomKillConvo
g_bEnableConversationDebugCustomKillConvo = FALSE
g_bEnableConversationDebugCustomPlaying = FALSE
g_bEnableConversationDebugCustomPlayingLine = FALSE
g_bEnableConversationDebugCustomPlayingAmbientLinePos = FALSE
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
ENDIF
IF IS_SCRIPTED_CONVERSATION_ONGOING()
OR NOT IS_CONVERSATION_STATUS_FREE()
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Conversation is Loading/Playing"
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Block: "
tl63 += g_BlockToLoadHolder
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Root: "
tl23 = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
tl63 += tl23
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Label/Context: "
tl23 = GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
tl63 += tl23
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Line: "
tl63 += GET_CURRENT_SCRIPTED_CONVERSATION_LINE()
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Speaker Int: "
tl23 = GET_SPEAKER_INT_FOR_CURRENT_STANDARD_CONVERSATION_LINE()
tl63 += tl23
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
IF g_iDialogueProgressLastPlayed > -1
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Dialogue Trigger: "
tl63 += g_iDialogueProgressLastPlayed
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
ENDIF
ELSE
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Conversation is not Playing"
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Custom Block: "
tl63 += g_tl31_Block_DiagDebug
IF bLoadingBlock
tl63 += " IS LOADING ! "
ENDIF
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Custom Root: "
tl63 += g_tl31_Root_DiagDebug
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Custom Label: "
tl63 += g_tl31_Label_DiagDebug
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Ped Voice Name 1: "
tl63 += g_ConversationDebugVoiceNamePed1
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Ped Voice Number 1: "
tl63 += g_ConversationDebugVoiceNumberPed1
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Ped Voice Name 2: "
tl63 += g_ConversationDebugVoiceNamePed2
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Ped Voice Number 2: "
tl63 += g_ConversationDebugVoiceNumberPed2
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Ped Voice Name 3: "
tl63 += g_ConversationDebugVoiceNamePed3
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "Ped Voice Number 3: "
tl63 += g_ConversationDebugVoiceNumberPed3
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
ENDIF
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "---------------------------------"
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "To close press [Numpad Minus]"
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
vPos = <<fX, fY+(fSpacing*iPrint), fY+(fSpacing*iPrint)>>
tl63 = "RAG Path: Script/Debug/Conversation and Dialogue Testing"
DRAW_DEBUG_TEXT_2D(tl63, vPos, 255, 255, 255, 255)
iPrint++
ENDPROC
PROC PROCESS_MUTING_MUSIC()
IF g_bEnableMusicMute
IF NOT IS_AUDIO_SCENE_ACTIVE("MUTES_MUSIC_SCENE")
START_AUDIO_SCENE("MUTES_MUSIC_SCENE")
ELIF IS_AUDIO_SCENE_ACTIVE("MUTES_MUSIC_SCENE")
STOP_AUDIO_SCENE("MUTES_MUSIC_SCENE")
ENDIF
g_bEnableMusicMute = FALSE
ENDIF
ENDPROC
// 0 = Start
// 1 = End
FUNC VECTOR GET_LAST_MOUSE_TO_WORLD_COORD_SHAPETEST_RESULT(INT iResult)
IF iResult < 0
OR iResult > 1
RETURN <<0.0, 0.0, 0.0>>
ENDIF
RETURN vMouseToWorldCoordResult[iResult]
ENDFUNC
PROC PROCESS_MOUSE_TO_WORLD_COORD_SHAPETEST()
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_7, KEYBOARD_MODIFIER_CTRL, "Display mouse to world coord.")
IF NOT g_bEnableMouseToWorldDebug
g_bEnableMouseToWorldDebug = TRUE
ELSE
g_bEnableMouseToWorldDebug = FALSE
ENDIF
ENDIF
IF NOT g_bEnableMouseToWorldDebug
EXIT
ENDIF
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
ENTITY_INDEX eiEntityTemp
INT iHitSomethingTemp
VECTOR vTempA, vTempB
TEXT_LABEL_63 tl63
IF IS_MOUSE_BUTTON_PRESSED(MB_LEFT_BTN)
AND IS_KEYBOARD_KEY_PRESSED(KEY_7)
IF GET_SHAPE_TEST_RESULT(stiMouseToWorldCoordTest, iHitSomethingTemp, vTempA, vTempB, eiEntityTemp) = SHAPETEST_STATUS_RESULTS_READY
stiMouseToWorldCoordTest = NULL
vMouseToWorldCoordResult[1] = GET_ENTITY_COORDS(eiEntityTemp)
ENDIF
IF GET_SHAPE_TEST_RESULT(stiMouseToWorldCoordTest, iHitSomethingTemp, vTempA, vTempB, eiEntityTemp) = SHAPETEST_STATUS_NONEXISTENT
stiMouseToWorldCoordTest = START_SHAPE_TEST_MOUSE_CURSOR_LOS_PROBE(vTempA, vTempB, SCRIPT_INCLUDE_ALL, NULL, 0)
ENDIF
VECTOR vPosTemp
GET_MOUSE_POSITION(vPosTemp.x, vPosTemp.y)
DRAW_DEBUG_TEXT_2D("Grabbing Entity.", vPosTemp)
EXIT
ELIF IS_MOUSE_BUTTON_PRESSED(MB_LEFT_BTN)
IF GET_SHAPE_TEST_RESULT(stiMouseToWorldCoordTest, iHitSomethingTemp, vTempA, vTempB, eiEntityTemp) = SHAPETEST_STATUS_RESULTS_READY
stiMouseToWorldCoordTest = NULL
vMouseToWorldCoordResult[1] = vTempA
ENDIF
IF GET_SHAPE_TEST_RESULT(stiMouseToWorldCoordTest, iHitSomethingTemp, vTempA, vTempB, eiEntityTemp) = SHAPETEST_STATUS_NONEXISTENT
stiMouseToWorldCoordTest = START_SHAPE_TEST_MOUSE_CURSOR_LOS_PROBE(vTempA, vTempB, SCRIPT_INCLUDE_ALL, NULL, SCRIPT_SHAPETEST_OPTION_DEFAULT)
ENDIF
VECTOR vPosTemp
GET_MOUSE_POSITION(vPosTemp.x, vPosTemp.y)
DRAW_DEBUG_TEXT_2D("Grabbing Location.", vPosTemp)
EXIT
ELIF IS_MOUSE_BUTTON_PRESSED(MB_RIGHT_BTN)
IF GET_SHAPE_TEST_RESULT(stiMouseToWorldCoordTest, iHitSomethingTemp, vTempA, vTempB, eiEntityTemp) = SHAPETEST_STATUS_RESULTS_READY
stiMouseToWorldCoordTest = NULL
IF DOES_ENTITY_EXIST(eiEntityTemp)
eiMouseToWorldCoordCompareTarget = eiEntityTemp
ENDIF
ELIF GET_SHAPE_TEST_RESULT(stiMouseToWorldCoordTest, iHitSomethingTemp, vTempA, vTempB, eiEntityTemp) = SHAPETEST_STATUS_NONEXISTENT
stiMouseToWorldCoordTest = START_SHAPE_TEST_MOUSE_CURSOR_LOS_PROBE(vTempA, vTempB, SCRIPT_INCLUDE_ALL, NULL, 0)
ENDIF
VECTOR vPosTemp
GET_MOUSE_POSITION(vPosTemp.x, vPosTemp.y)
DRAW_DEBUG_TEXT_2D("Grabbing Entity.", vPosTemp)
EXIT
ENDIF
stiMouseToWorldCoordTest = NULL
VECTOR vPos
FLOAT fDist = GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(eiMouseToWorldCoordCompareTarget), GET_LAST_MOUSE_TO_WORLD_COORD_SHAPETEST_RESULT(1))
VECTOR vOffset = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(eiMouseToWorldCoordCompareTarget, vMouseToWorldCoordResult[1])
// --- Mouse
GET_SCREEN_COORD_FROM_WORLD_COORD(vMouseToWorldCoordResult[1], vPos.x, vPos.y)
tl63 = "Mouse Pos In World: <<"
tl63 += FLOAT_TO_STRING(vMouseToWorldCoordResult[1].x)
tl63 += ", "
tl63 += FLOAT_TO_STRING(vMouseToWorldCoordResult[1].y)
tl63 += ", "
tl63 += FLOAT_TO_STRING(vMouseToWorldCoordResult[1].z)
tl63 += ">>"
DRAW_DEBUG_TEXT_2D(tl63, vPos)
DRAW_MARKER(MARKER_SPHERE, vMouseToWorldCoordResult[1], (<<0.0, 0.0, 0.0>>), (<<0.0, 0.0, 0.0>>), (<<0.3, 0.3, 0.3>>))
IF DOES_ENTITY_EXIST(eiMouseToWorldCoordCompareTarget)
AND NOT IS_VECTOR_ZERO(GET_ENTITY_COORDS(eiMouseToWorldCoordCompareTarget))
tl63 = "Local Offset From Target: <<"
tl63 += FLOAT_TO_STRING(vOffset.x)
tl63 += ", "
tl63 += FLOAT_TO_STRING(vOffset.y)
tl63 += ", "
tl63 += FLOAT_TO_STRING(vOffset.z)
tl63 += ">>"
vPos.y += 0.05
DRAW_DEBUG_TEXT_2D(tl63, vPos)
tl63 = "Distance Target: "
tl63 += FLOAT_TO_STRING(fDist)
vPos.y += 0.05
DRAW_DEBUG_TEXT_2D(tl63, vPos)
// --- Target
VECTOR vTempPos = GET_ENTITY_COORDS(eiMouseToWorldCoordCompareTarget)
GET_SCREEN_COORD_FROM_WORLD_COORD(vTempPos, vPos.x, vPos.y)
tl63 = "Target Coord: <<"
tl63 += FLOAT_TO_STRING(vTempPos.x)
tl63 += ", "
tl63 += FLOAT_TO_STRING(vTempPos.y)
tl63 += ", "
tl63 += FLOAT_TO_STRING(vTempPos.z)
tl63 += ">>"
DRAW_DEBUG_TEXT_2D(tl63, vPos)
vPos.y += 0.05
tl63 = "Target Heading: "
tl63 += FLOAT_TO_STRING(GET_ENTITY_HEADING(eiMouseToWorldCoordCompareTarget))
DRAW_DEBUG_TEXT_2D(tl63, vPos)
DRAW_MARKER(MARKER_SPHERE, GET_ENTITY_COORDS(eiMouseToWorldCoordCompareTarget), (<<0.0, 0.0, 0.0>>), (<<0.0, 0.0, 0.0>>), (<<0.3, 0.3, 0.3>>), 100, 255, 100)
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_C)
PRINTLN("--- PROCESS_MOUSE_TO_WORLD_COORD_SHAPETEST ---")
VECTOR vTargetCoord = GET_ENTITY_COORDS(eiMouseToWorldCoordCompareTarget)
FLOAT fTargetHeading = GET_ENTITY_HEADING(eiMouseToWorldCoordCompareTarget)
PRINTLN("Mouse Pos In World: <<", vMouseToWorldCoordResult[1].x, ",", vMouseToWorldCoordResult[1].y, ",",vMouseToWorldCoordResult[1].z, ">>")
PRINTLN("Distance Target: ", fDist)
PRINTLN("Local Offset From Target: <<", vOffset.x, ",", vOffset.y, ",",vOffset.z, ">>")
PRINTLN("---")
PRINTLN("Target Coord: <<", vTargetCoord.x, ",", vTargetCoord.y, ",",vTargetCoord.z, ">>")
PRINTLN("Target Heading: ", fTargetHeading)
PRINTLN("---")
ENDIF
ENDPROC
PROC CREATE_TUNER_INTRO_CAM_WIDGETS()
START_WIDGET_GROUP("Temp Intro Cam - Tuner Overrides")
ADD_WIDGET_VECTOR_SLIDER("Intro Cam Pos 1", g_vTempIntroCamTuner_IntroCamPos1, -20.0, 20.0, 0.01)
ADD_WIDGET_VECTOR_SLIDER("Intro Cam Point 1", g_vTempIntroCamTuner_IntroCamPoint1, -20.0, 20.0, 0.01)
ADD_WIDGET_VECTOR_SLIDER("Intro Cam Pos 2", g_vTempIntroCamTuner_IntroCamPos2, -20.0, 20.0, 0.01)
ADD_WIDGET_VECTOR_SLIDER("Intro Cam Point 2", g_vTempIntroCamTuner_IntroCamPoint2, -20.0, 20.0, 0.01)
ADD_WIDGET_VECTOR_SLIDER("Outro Cam Pos 1", g_vTempIntroCamTuner_OutroCamPos1, -20.0, 20.0, 0.01)
ADD_WIDGET_VECTOR_SLIDER("Outro Cam Point 1", g_vTempIntroCamTuner_OutroCamPoint1, -20.0, 20.0, 0.01)
STOP_WIDGET_GROUP()
ENDPROC
PROC CREATE_CONVERSATION_AND_DIALOGUE_WIDGETS()
START_WIDGET_GROUP("Conversation and Dialogue Testing")
ADD_WIDGET_BOOL("Toggle On Screen conversation Debug", g_bEnableConversationDebugFromWidget)
g_ConversationDebugCustomBlock = ADD_TEXT_WIDGET("Block")
SET_CONTENTS_OF_TEXT_WIDGET(g_ConversationDebugCustomBlock, "null")
g_ConversationDebugCustomRoot = ADD_TEXT_WIDGET("Root")
SET_CONTENTS_OF_TEXT_WIDGET(g_ConversationDebugCustomRoot, "null")
g_ConversationDebugCustomLabel = ADD_TEXT_WIDGET("Label")
SET_CONTENTS_OF_TEXT_WIDGET(g_ConversationDebugCustomLabel, "null")
g_widConversationDebugVoiceNamePed1 = ADD_TEXT_WIDGET("Ped Voice Name 1")
SET_CONTENTS_OF_TEXT_WIDGET(g_widConversationDebugVoiceNamePed1, "null")
ADD_WIDGET_INT_SLIDER("Ped Voice Number 1:", g_ConversationDebugVoiceNumberPed1, -1, 16, 1)
g_widConversationDebugVoiceNamePed2 = ADD_TEXT_WIDGET("Ped Voice Name 2")
SET_CONTENTS_OF_TEXT_WIDGET(g_widConversationDebugVoiceNamePed2, "null")
ADD_WIDGET_INT_SLIDER("Ped Voice Number 2:", g_ConversationDebugVoiceNumberPed2, -1, 16, 1)
g_widConversationDebugVoiceNamePed3 = ADD_TEXT_WIDGET("Ped Voice Name 3")
SET_CONTENTS_OF_TEXT_WIDGET(g_widConversationDebugVoiceNamePed3, "null")
ADD_WIDGET_INT_SLIDER("Ped Voice Number 3:", g_ConversationDebugVoiceNumberPed3, -1, 16, 1)
ADD_WIDGET_BOOL("Play Conversation From Root", g_bEnableConversationDebugCustomPlaying)
ADD_WIDGET_BOOL("Play Single Line (Label with with Ped Voice 1)", g_bEnableConversationDebugCustomPlayingLine)
ADD_WIDGET_BOOL("Play Single Context Ambiently (Label with with Ped Voice 1)", g_bEnableConversationDebugCustomPlayingAmbientLinePos)
ADD_WIDGET_BOOL("Immediately Kill Convo/Line", g_bEnableConversationDebugCustomKillConvo)
STOP_WIDGET_GROUP()
ENDPROC
PROC MAINTAIN_CONVERSATION_AND_DIALOGUE_WIDGETS()
IF DOES_TEXT_WIDGET_EXIST(g_ConversationDebugCustomBlock)
g_tl31_Block_DiagDebug = GET_CONTENTS_OF_TEXT_WIDGET(g_ConversationDebugCustomBlock)
ENDIF
IF DOES_TEXT_WIDGET_EXIST(g_ConversationDebugCustomRoot)
g_tl31_Root_DiagDebug = GET_CONTENTS_OF_TEXT_WIDGET(g_ConversationDebugCustomRoot)
ENDIF
IF DOES_TEXT_WIDGET_EXIST(g_ConversationDebugCustomLabel)
g_tl31_Label_DiagDebug = GET_CONTENTS_OF_TEXT_WIDGET(g_ConversationDebugCustomLabel)
ENDIF
IF DOES_TEXT_WIDGET_EXIST(g_widConversationDebugVoiceNamePed1)
g_ConversationDebugVoiceNamePed1 = GET_CONTENTS_OF_TEXT_WIDGET(g_widConversationDebugVoiceNamePed1)
ENDIF
IF DOES_TEXT_WIDGET_EXIST(g_widConversationDebugVoiceNamePed2)
g_ConversationDebugVoiceNamePed2 = GET_CONTENTS_OF_TEXT_WIDGET(g_widConversationDebugVoiceNamePed2)
ENDIF
IF DOES_TEXT_WIDGET_EXIST(g_widConversationDebugVoiceNamePed3)
g_ConversationDebugVoiceNamePed3 = GET_CONTENTS_OF_TEXT_WIDGET(g_widConversationDebugVoiceNamePed3)
ENDIF
ENDPROC
#ENDIF
// *****************************************************************************************
// SYSTEMS DEBUG
// *****************************************************************************************
/// PURPOSE: Creates the widget that enable a couple of systems to work in debug mode
PROC Create_Systems_Widgets()
START_WIDGET_GROUP("Misc Systems Debug")
ADD_WIDGET_BOOL("Allow shop systems in debug", g_bShopsAvailableInDebug)
ADD_WIDGET_BOOL("Allow savegame bed in debug", g_bSavegameBedAvailableInDebug)
ADD_WIDGET_BOOL("Allow vehicle gen in debug", g_bVehicleGenAvailableInDebug)
ADD_WIDGET_BOOL("Allow random characters in debug", g_bRandomCharsAvailableInDebug)
ADD_BIT_FIELD_WIDGET("Debug Timestamp Bitset", g_iDebugTimestampBitset)
STOP_WIDGET_GROUP()
ENDPROC
PROC Create_transition_test_widget()
START_WIDGET_GROUP("Automated Leave/Join Test")
ADD_WIDGET_BOOL("Start Automated Join/Leave Sessions Test. PRESS: 'SHIFT + M' after click", g_binitiatejoinleavetest)
STOP_WIDGET_GROUP()
ENDPROC
/// PURPOSE: Creates the debug menu widgets
PROC Create_Debug_Menu_Widgets()
START_WIDGET_GROUP("Debug Menu")
ADD_WIDGET_BOOL("Use Bugstar Query", g_debugMenuControl.bUseBugstarQuery)
ADD_WIDGET_BOOL("Bugstar Queries Disabled", g_bugstarQuery.bQueriesDisabled)
ADD_WIDGET_BOOL("Bugstar Query Started", g_bugstarQuery.bQueryStarted)
ADD_WIDGET_INT_READ_ONLY("Bugstar Query ID", g_bugstarQuery.iQueryID)
//ADD_BIT_FIELD_WIDGET("Process Flags", sDebugMenuData.iProcessFlags)
ADD_WIDGET_BOOL("Display Bugs", sDebugMenuData.sBugData.bDisplay)
ADD_WIDGET_FLOAT_SLIDER("fTempPos[0]", g_debugMenuControl.fTempPos[0], -10000.0, 10000.0, 0.01)
ADD_WIDGET_FLOAT_SLIDER("fTempPos[1]", g_debugMenuControl.fTempPos[1], -10000.0, 10000.0, 0.01)
ADD_WIDGET_FLOAT_SLIDER("fTempPos[2]", g_debugMenuControl.fTempPos[2], -10000.0, 10000.0, 0.01)
ADD_WIDGET_FLOAT_SLIDER("fTempPos[3]", g_debugMenuControl.fTempPos[3], -10000.0, 10000.0, 0.01)
ADD_WIDGET_FLOAT_SLIDER("fTempPos[4]", g_debugMenuControl.fTempPos[4], -10000.0, 10000.0, 0.01)
STOP_WIDGET_GROUP()
ENDPROC
/// PURPOSE: Creates the Metrics Zone system widget.
PROC Create_Metrics_Zone_Widgets()
START_WIDGET_GROUP("Metrics Zones")
ADD_WIDGET_BOOL("Enable Mission Metrics Zones", g_bFlowMetricZonesEnabled)
ADD_WIDGET_BOOL("Show Current Metrics Zone Results", m_bShowCurrentMetricsZoneResults)
ADD_WIDGET_BOOL("Hide Current Metrics Zone Results", m_bHideCurrentMetricsZoneResults)
ADD_WIDGET_BOOL("Clear Current Metrics Zone Results", m_bClearCurrentMetricsZoneResults)
STOP_WIDGET_GROUP()
ENDPROC
PROC Maintain_Metrics_Zone_Widgets()
IF m_bShowCurrentMetricsZoneResults
METRICS_ZONES_SHOW()
// KGM 28/3/12: Modified to be used in MP also
// NOTE: This will have to change again when we use the new wrap-safe network time functions
g_iTimeDisplayedMetricsReport = GET_GAME_TIMER()
IF (NETWORK_IS_GAME_IN_PROGRESS())
g_iTimeDisplayedMetricsReport_NETWORK = GET_NETWORK_TIME()
ENDIF
g_bDisplayingMetricsZoneResults = TRUE
m_bShowCurrentMetricsZoneResults = FALSE
ENDIF
IF m_bHideCurrentMetricsZoneResults
METRICS_ZONES_HIDE()
g_bDisplayingMetricsZoneResults = FALSE
m_bHideCurrentMetricsZoneResults = FALSE
ENDIF
IF m_bClearCurrentMetricsZoneResults
METRICS_ZONES_CLEAR()
m_bClearCurrentMetricsZoneResults = FALSE
ENDIF
IF g_bDisplayingMetricsZoneResults
// KGM 28/3/12: Modified to be used in MP also
// NOTE: This will have to change again when we use the new wrap-safe network time functions
IF (NETWORK_IS_GAME_IN_PROGRESS())
TIME_DATATYPE netTimer = GET_NETWORK_TIME()
IF IS_TIME_MORE_THAN(netTimer , GET_TIME_OFFSET(g_iTimeDisplayedMetricsReport_NETWORK , TIME_DISPLAY_METRICS_REPORT))
//C//PRINTLN(DEBUG_METRICS, "Metric zone report cleaning up after displaying for ", TIME_DISPLAY_METRICS_REPORT, "ms.")
METRICS_ZONES_HIDE()
g_bDisplayingMetricsZoneResults = FALSE
ENDIF
ELSE
INT theTimer = GET_GAME_TIMER()
IF theTimer > g_iTimeDisplayedMetricsReport + TIME_DISPLAY_METRICS_REPORT
//C//PRINTLN(DEBUG_METRICS, "Metric zone report cleaning up after displaying for ", TIME_DISPLAY_METRICS_REPORT, "ms.")
METRICS_ZONES_HIDE()
g_bDisplayingMetricsZoneResults = FALSE
ENDIF
ENDIF
ENDIF
ENDPROC
///Purpose: Gives player all weapons or removes them (Shift pressed)
PROC Maintain_KeyE_Weapon_Controls()
if IS_DEBUG_KEY_JUST_PRESSED(KEY_E,KEYBOARD_MODIFIER_SHIFT,"Remove all player weapons")
REMOVE_ALL_PED_WEAPONS(PLAYER_PED_ID())
ELIF IS_DEBUG_KEY_JUST_PRESSED(KEY_E,KEYBOARD_MODIFIER_CTRL,"Halve player ammo")
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_GRENADE_LAUNCHER,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_GRENADE_LAUNCHER)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_MG,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_MG)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_MINIGUN,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_MINIGUN)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_MOLOTOV,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_MOLOTOV)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_PETROL_CAN,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_PETROL_CAN)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_PISTOL,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_PISTOL)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_REMOTE,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_REMOTE)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_RIFLE,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_RIFLE)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_RPG,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_RPG)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_SHOTGUN,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_SHOTGUN)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_SMG,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_SMG)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_SNIPER,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_SNIPER)/2)
SET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_STICKY_BOMB,GET_PED_AMMO_BY_TYPE(PLAYER_PED_ID(),AMMOTYPE_STICKY_BOMB)/2)
ENDIF
ENDPROC
/// PURPOSE:
/// Prints the camera and player position to the console log when pressing shift-c
PROC Maintain_KeyC_Camera_Print()
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_C,KEYBOARD_MODIFIER_SHIFT,"Print camera/player positions")
Vector p1,p2
p1 = GET_FINAL_RENDERED_CAM_COORD()
p2 = GET_ENTITY_COORDS(PLAYER_PED_ID())
CPRINTLN(DEBUG_AMBIENT,"Cam: ",p1, " Player: ",p2)
ENDIF
ENDPROC
/// PURPOSE: Start transition test. Automatically switches game modes repeatedly.
/*
/// PURPOSE: Create a prostitute ped brain for testing
PROC Maintain_Ambient_Widgets()
PED_INDEX randomPed
VECTOR creationPos
REQUEST_MODEL(S_F_Y_HOOKER_01)
IF m_createProstituteAtNearestCarNode
AND HAS_MODEL_LOADED(S_F_Y_HOOKER_01)
IF CAN_CREATE_RANDOM_PED(RPM_DONT_CARE)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
IF GET_CLOSEST_VEHICLE_NODE(GET_ENTITY_COORDS(PLAYER_PED_ID()), creationPos)
//randomPed = CREATE_RANDOM_PED(creationPos)
randomPed = CREATE_PED(PEDTYPE_PROSTITUTE,S_F_Y_HOOKER_01, creationPos, 0.0)
SET_PED_AS_NO_LONGER_NEEDED(randomPed)
m_createRandomPedAtNearestCarNode = FALSE
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
*/
// ===========================================================================================================
/// Little test of a Social Club leaderboard read for SP races.
PROC CREATE_SC_LB_READ_WIDGET()
START_WIDGET_GROUP("SC Leaderboard Read")
ADD_WIDGET_BOOL("Read SP race board", sclb_Debug.bRead)
ADD_WIDGET_INT_SLIDER("SP race ID", sclb_Debug.iRaceID,0,8,1)
STOP_WIDGET_GROUP()
ENDPROC
PROC MAINTAIN_SC_LB_READ_WIDGET()
IF sclb_Debug.bRead
IF GET_SP_RACE_PERSONAL_GLOBAL_BEST(sclb_Debug.iReadProgress,sclb_Debug.iOverallProgress,sclb_Debug.bReadResult,sclb_Debug.iRaceID,sclb_Debug.iGlobalBest,sclb_Debug.iPersonalBest)
//PRINTLN("MAINTAIN_SC_LB_READ_WIDGET: Global best for SP race ID:",sclb_Debug.iRaceID," = ",sclb_Debug.iGlobalBest)
//PRINTLN("MAINTAIN_SC_LB_READ_WIDGET: Personal best for SP race ID:",sclb_Debug.iRaceID," = ",sclb_Debug.iPersonalBest)
CLEANUP_SP_RACE_PERSONAL_GLOBAL_BEST(sclb_Debug.iReadProgress,sclb_Debug.iOverallProgress,sclb_Debug.bReadResult,sclb_Debug.iGlobalBest,sclb_Debug.iPersonalBest)
sclb_Debug.bRead = FALSE
ENDIF
ENDIF
ENDPROC
#IF IS_DEBUG_BUILD
/// PURPOSE:
/// Persistent MP heist planning board debugging options.
PROC CREATE_HEIST_DEBUG_WIDGETS()
START_WIDGET_GROUP("MP Heist Planning Board")
START_WIDGET_GROUP("Help-text Sequence Timing")
ADD_WIDGET_INT_SLIDER("OVERVIEW DUR(ms): ", ci_HEIST_HELP_TEXT_OVERVIEW_DURATION,1000,60000,500)
ADD_WIDGET_INT_SLIDER("OVERVIEW 2 DUR(ms): ", ci_HEIST_HELP_TEXT_OVERVIEW_2_DURATION,1000,60000,500)
ADD_WIDGET_INT_SLIDER("PIE CHART DURATION(ms): ", ci_HEIST_HELP_TEXT_PIE_CHART_DURATION,1000,60000,500)
ADD_WIDGET_INT_SLIDER("CENTRE TABLE DURATION(ms): ", ci_HEIST_HELP_TEXT_TABLE_DURATION,1000,60000,500)
ADD_WIDGET_INT_SLIDER("STATS CARD DURATION(ms): ", ci_HEIST_HELP_TEXT_PLAYER_CARD_DURATION,1000,60000,500)
ADD_WIDGET_INT_SLIDER("TODO LIST DURATION(ms): ", ci_HEIST_HELP_TEXT_TODO_LIST_DURATION,1000,60000,500)
ADD_WIDGET_INT_SLIDER("MAP DURATION(ms): ", ci_HEIST_HELP_TEXT_MAP_DURATION,1000,60000,500)
ADD_WIDGET_INT_SLIDER("STOAGE LOCKER DUR(ms): ", ci_HEIST_HELP_TEXT_STORAGE_DURATION,1000,60000,500)
ADD_WIDGET_INT_SLIDER("STORAGE LOCKER 2 DUR(ms): ", ci_HEIST_HELP_TEXT_STORAGE_2_DURATION,1000,60000,500)
ADD_WIDGET_INT_SLIDER("FINAL DURATION(ms): ", ci_HEIST_HELP_TEXT_FINAL_DURATION,1000,60000,500)
STOP_WIDGET_GROUP()
STOP_WIDGET_GROUP()
ENDPROC
#ENDIF
// ===========================================================================================================
/// PURPOSE:
/// Checks for any keyboard-activated debug commands specific to singleplayer.
PROC Maintain_SP_Debug_Keypresses()
Maintain_KeyF6_Cash()
Maintain_KeyQ_Swap_Player()
Maintain_KeyH_Warp_To_Savehouse()
Maintain_KeyM_Toggle_Mission_Menu()
Maintain_KeyJ_Skips()
Maintain_KeyK_Kill_Player()
Maintain_KeyE_Weapon_Controls()
Maintain_KeyC_Camera_Print()
Maintain_KeyF8_Toggle_Family_Control_Debug_Screen()
Maintain_KeyF10_Toggle_Friends_Control_Debug_Screen()
Maintain_KeyF11_Toggle_Random_Event_Debug_Screen()
ENDPROC
// ===========================================================================================================
/// PURPOSE:
/// Checks for any Widget-activated debug commands specific to singleplayer.
PROC Maintain_SP_Debug_Widgets()
Maintain_Ambient_Widgets()
ENDPROC
// ===========================================================================================================
/// PURPOSE: Runs the update procedure for the visual flow diagram while the diagram is flagged as being active.
PROC Maintain_SP_Visual_Flow_Diagram(FLOW_LAUNCHER_VARS &flowLauncher)
IF g_flowDiagram.bFlowDiagramActive
UPDATE_FLOW_DIAGRAM(sDebugFlowDiagram, flowLauncher)
ENDIF
ENDPROC
// ===========================================================================================================
/// PURPOSE:
/// Gets a debug timestamp using a bugstar query
PROC Matintain_Debug_Timestamp()
////PRINTLN("Current time: ", GET_DEBUG_TIMESTAMP(), ".")
IF NOT HAS_BUGSTAR_QUERY_STARTED()
CLEAR_BIT(g_iDebugTimestampBitset, 1)
CLEAR_BIT(g_iDebugTimestampBitset, 2)
ENDIF
IF IS_BIT_SET(g_iDebugTimestampBitset, 0)
IF NOT IS_BIT_SET(g_iDebugTimestampBitset, 1)
// Start the query if we havent done so already
IF IS_BUGSTAR_QUERY_SAFE_TO_START(FALSE)
TEXT_LABEL_63 sQuery = "MissionsV2/1/Bugs?fields=Id"
START_BUGSTAR_QUERY(sQuery)
//CDEBUG1LN(DEBUG_SYSTEM, "...starting new query: ", sQuery)
SET_BUGSTAR_QUERY_STARTED()
SET_BIT(g_iDebugTimestampBitset, 1)
ENDIF
ELSE
// Wait for the query to finish
IF NOT (IS_BUGSTAR_QUERY_PENDING())
SET_BIT(g_iDebugTimestampBitset, 2)
ENDIF
ENDIF
IF IS_BIT_SET(g_iDebugTimestampBitset, 2)
// If the query was successful, create the xml and parse
IF NOT IS_BUGSTAR_QUERY_SUCCESSFUL()
//C//PRINTLN(DEBUG_SYSTEM, "Matintain_Debug_Timestamp: query not successful")
// CLEAN UP QUERY
END_BUGSTAR_QUERY()
SET_BUGSTAR_QUERY_FINISHED()
g_iDebugTimestampBitset = 0
ELSE
//CDEBUG1LN(DEBUG_SYSTEM, "...query successful")
IF NOT CREATE_XML_FROM_BUGSTAR_QUERY()
//C//PRINTLN(DEBUG_SYSTEM, "Matintain_Debug_Timestamp: could not create XML from query")
// CLEAN UP QUERY
END_BUGSTAR_QUERY()
SET_BUGSTAR_QUERY_FINISHED()
g_iDebugTimestampBitset = 0
ELSE
INT iNodeCount = GET_NUMBER_OF_XML_NODES()
// Check that the xml contains some nodes
IF iNodeCount = 0
//C//PRINTLN(DEBUG_SYSTEM, "Matintain_Debug_Timestamp: no nodes in XML from query")
DELETE_XML_FILE()
// CLEAN UP QUERY
END_BUGSTAR_QUERY()
SET_BUGSTAR_QUERY_FINISHED()
g_iDebugTimestampBitset = 0
ELSE
//CDEBUG1LN(DEBUG_SYSTEM, "Matintain_Debug_Timestamp: Loaded XML/query successful - grabbing data")
// Integers used for the FOR loops going through all the nodes and attributes
INT eachNode
TEXT_LABEL_31 tlCurrentDate
// Loop through all the nodes
FOR eachNode = 0 TO (iNodeCount-1)
SWITCH GET_HASH_KEY(GET_XML_NODE_NAME())
// 'currentDate'
CASE DM_HASH_CURRENT_DATE
tlCurrentDate = GET_STRING_FROM_XML_NODE()
// Compress, 2012-04-27T17:02:48.898+01:00 to 270412_170248
g_tlDebugTimestamp = GET_STRING_FROM_STRING(tlCurrentDate, 8, 10)
g_tlDebugTimestamp += GET_STRING_FROM_STRING(tlCurrentDate, 5, 7)
g_tlDebugTimestamp += GET_STRING_FROM_STRING(tlCurrentDate, 2, 4)
g_tlDebugTimestamp += "_"
g_tlDebugTimestamp += GET_STRING_FROM_STRING(tlCurrentDate, 11, 13)
g_tlDebugTimestamp += GET_STRING_FROM_STRING(tlCurrentDate, 14, 16)
g_tlDebugTimestamp += GET_STRING_FROM_STRING(tlCurrentDate, 17, 19)
//CDEBUG1LN(DEBUG_SYSTEM, "Matintain_Debug_Timestamp: Current date is ", g_tlDebugTimestamp)
eachNode = iNodeCount // Bail
BREAK
ENDSWITCH
// Tell the script to goto the next node in the xml file
GET_NEXT_XML_NODE()
ENDFOR
DELETE_XML_FILE()
// CLEAN UP QUERY
END_BUGSTAR_QUERY()
SET_BUGSTAR_QUERY_FINISHED()
g_iDebugTimestampBitset = 0
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDPROC
// *****************************************************************************************
// Debug General Housekeeping
// *****************************************************************************************
// PURPOSE: Maintains any regular debug housekeeping
//
PROC Maintain_Launch_And_Forget_Debug_Display_Array()
INT tempLoop = 0
// Check all launch and forget missions to see if they are still active
REPEAT DEBUG_MAX_LAUNCH_AND_FORGET_SCRIPTS tempLoop
IF NOT (g_debugLaunchAndForgetScripts[tempLoop].theThreadID = NULL)
IF NOT (IS_THREAD_ACTIVE(g_debugLaunchAndForgetScripts[tempLoop].theThreadID))
g_debugLaunchAndForgetScripts[tempLoop].theThreadID = NULL
g_debugLaunchAndForgetScripts[tempLoop].filename = ""
ENDIF
ENDIF
ENDREPEAT
ENDPROC
// -----------------------------------------------------------------------------------------------------------
// PURPOSE: Maintains any regular debug housekeeping
//
PROC SP_Debug_General_Housekeeping()
Maintain_Launch_And_Forget_Debug_Display_Array()
ENDPROC
PROC SCRIPT_CLEANUP()
TERMINATE_THIS_THREAD()
ENDPROC
// ===========================================================================================================
PROC CREATE_WILDLIFE_PHOTOGRAPHY_WIDGETS()
START_WIDGET_GROUP("Photography Wildlife")
ADD_WIDGET_BOOL("Launch photographyWildlife Script", g_bLanchPhotographyWildlifeScript)
ADD_WIDGET_BOOL("Terminate photographyWildlife Script", g_bTerminatePhotographyWildlifeScript)
ADD_WIDGET_BOOL("Block photographyWildlife Auto Restart", g_bBlockPhotographyWildlifeRelaunch)
ADD_WIDGET_BOOL("Clear photographyWildlife Save Data", g_bClearAllPhotographyWildlifeSaveData)
STOP_WIDGET_GROUP()
ENDPROC
PROC MAINTAIN_WILDLIFE_PHOTOGRAPHY_WIDGETS()
IF g_bLanchPhotographyWildlifeScript
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("photographyWildlife")) = 0
//CLEAR_BIT(g_SavedGlobals.sAmbient.iWildlifePhotographsFlags, BIT_SET_ALL_PHOTOGRAPHS_COLLECTED)
//CLEAR_BIT(g_SavedGlobals.sAmbient.iWildlifePhotographsFlags, BIT_SET_COLLECT_WILDLIFE_PHOTOGRAPHS_FINISHED)
REQUEST_AND_LAUNCH_SCRIPT_WITH_NAME_HASH( HASH("photographyWildlife") #IF IS_DEBUG_BUILD ,"photographyWildlife" #ENDIF )
ENDIF
g_bLanchPhotographyWildlifeScript = FALSE
ENDIF
IF g_bTerminatePhotographyWildlifeScript
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME("photographyWildlife")
CLEAR_ALL_WILDLIFE_PHOTOGRAPHY_DATA()
CLEAR_ALL_WILDLIFE_PHOTOGRAPHY_TEXT_DATA()
g_bTerminatePhotographyWildlifeScript = FALSE
ENDIF
IF g_bClearAllPhotographyWildlifeSaveData
CLEAR_ALL_WILDLIFE_PHOTOGRAPHY_DATA()
g_bClearAllPhotographyWildlifeSaveData = FALSE
ENDIF
ENDPROC
SCRIPT
// Set the XML paths, since we can't do default values for text labels
m_flowLauncher.txtLauncherXMLPath = "X:/gta5/titleupdate/dev_ng/common/data/script/xml/"
m_flowLauncher.txtLauncherDiagramXMLFile = "debug/SP_flow_diagram.xml"
m_flowLauncher.txtLauncherPlaythroughXMLFile = "SPPlaythrough/SP_playthrough_order.xml"
// Default time/date debug text screen positions.
m_sharedDebugVars.fCurrentTimeDateX = 0.140
m_sharedDebugVars.fCurrentTimeDateY = -0.430
m_sharedDebugVars.fDebugTimeDateX = 0.140
m_sharedDebugVars.fDebugTimeDateY = -0.410
g_flowUnsaved.bShowMissionFlowDebugScreen = TRUE
Initialise_Batch_Mission_Launcher(m_batchLauncher)
#IF IS_FINAL_BUILD
SCRIPT_ASSERT("debug.sc should not be active in RELEASE SCRIPT MODE")
EXIT
#ENDIF
// We have one common debug script that runs in both sp and mp.
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
//**************************
//
// DEBUG LOOP
//
//**************************
//PRINTSTRING("GTA5 - Starting Debug Loop")
//PRINTNL()
//Initialise the systems.
Initialise_Vehicle_Chase_Debug(m_VehicleChaseDebugData)
//create the start widgets
widgetDebug = START_WIDGET_GROUP("Debug")
// ADD_BIT_FIELD_WIDGET("Process Flags", sDebugMenuData.iProcessFlags)
ADD_WIDGET_BOOL("Kill script", m_bKillScript)
ADD_WIDGET_BOOL("Restart script", m_bRestartScript)
Intialise_Debug_Start_Positions_Widget()
Create_Shared_Debug_Widgets(m_sharedDebugVars)
Create_Ambient_Widgets()
Create_Systems_Widgets()
CREATE_F9_WIDGET() // mp
Create_debug_Menu_Widgets()
Create_Metrics_Zone_Widgets()
Create_Vehicle_Chase_Debug_Widgets(m_VehicleChaseDebugData)
Create_transition_test_widget()
CREATE_SC_LB_READ_WIDGET()
CREATE_HEIST_DEBUG_WIDGETS()
CREATE_WILDLIFE_PHOTOGRAPHY_WIDGETS()
CREATE_CONVERSATION_AND_DIALOGUE_WIDGETS()
CREATE_TUNER_INTRO_CAM_WIDGETS()
STOP_WIDGET_GROUP()
sDebugFlowDiagram.strFlowDiagramXML = "X:/gta5/titleupdate/dev_ng/common/data/script/xml/debug/SP_flow_diagram.xml"
sDebugFlowDiagram.sBugstarData.sBugstarFile = "X:/gta5/build/dev_ng/common/data/script/xml/SPDebug/bugstar.xml"
sDebugFlowDiagram.bDrawCursor = TRUE
// Allow bugstar integration with the debug menu?
g_bugstarQuery.bQueriesDisabled = TRUE
IF GET_COMMANDLINE_PARAM_EXISTS("sc_integration")
g_bugstarQuery.bQueriesDisabled = FALSE
ENDIF
IF GET_COMMANDLINE_PARAM_EXISTS("populationTools")
bDebugPopulationToolsEnabled = TRUE
ENDIF
// IF GET_COMMANDLINE_PARAM_EXISTS("sc_UseCodeAIBlipSystem")
// g_bUseCodeAIBlipSystem = TRUE
// //PRINTSTRING("setting g_bUseCodeAIBlipSystem = TRUE")
// //PRINTNL()
// ELSE
// //PRINTSTRING("no sc_UseCodeAIBlipSystem found")
// //PRINTNL()
// ENDIF
IF GET_COMMANDLINE_PARAM_EXISTS("allInteriorsOn")//SPCID_TURN_ON_ALL_INTERIORS
CPRINTLN(DEBUG_INIT, "WARNING! all mission ineriors were enabled from the command line.")
SET_INTERIOR_CAPPED(INTERIOR_V_COMEDY, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_PSYCHEOFFICE, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_RANCH, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_RECYCLE, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_ROCKCLUB, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_JANITOR, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_LESTERS, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_TORTURE, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_CINEMA_VINEWOOD, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_CINEMA_MORNINGWOOD, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_CINEMA_DOWNTOWN, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_EPSILONISM, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_GARAGES, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_GARAGEM, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_GARAGEL, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_SHERIFF, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_SHERIFF2, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_LAB, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_FARMHOUSE, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_CHOPSHOP, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_FOUNDRY, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_ABATTOIR, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_58_SOL_OFFICE, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_1, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_2, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_3, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_4, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_5, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_6, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_7, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_8, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_9, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_10, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_11, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_12, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_13, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_14, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_15, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_16, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_17, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_18, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_19, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APARTMENT_HIGH_20, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_APART_MIDSPAZ, FALSE)
SET_INTERIOR_CAPPED(INTERIOR_V_GARAGEM_SP, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_COMEDY, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_PSYCHEOFFICE, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_RANCH, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_RECYCLE, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_ROCKCLUB, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_JANITOR, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_LESTERS, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_TORTURE, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_CINEMA_VINEWOOD, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_CINEMA_MORNINGWOOD, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_CINEMA_DOWNTOWN, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_EPSILONISM, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_GARAGES, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_GARAGEM, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_GARAGEL, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_SHERIFF, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_SHERIFF2, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_LAB, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_FARMHOUSE, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_CHOPSHOP, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_FOUNDRY, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_ABATTOIR, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_58_SOL_OFFICE, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_1, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_2, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_3, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_4, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_5, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_6, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_7, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_8, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_9, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_10, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_11, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_12, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_13, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_14, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_15, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_16, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_17, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_18, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_19, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APARTMENT_HIGH_20, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_APART_MIDSPAZ, FALSE)
SET_INTERIOR_DISABLED(INTERIOR_V_GARAGEM_SP, FALSE)
ENDIF
WHILE (TRUE)
WAIT(0)
//PRINTLN(DEBUG_SYSTEM, "debug runnign")
Maintain_end_of_game_skip()
Maintain_Shared_Debug_Keypresses(stF9SpaceTimer)
Maintain_Shared_Debug_Widgets(m_sharedDebugVars)
Matintain_Debug_Timestamp()
Maintain_Metrics_Zone_Widgets() // Metrics functions are now SP and MP compatible
Maintain_Vehicle_Chase_Debug(m_VehicleChaseDebugData)
MaintainPopulationDebug()
Maintain_Game_Time_Date_Displaying()
MAINTAIN_WILDLIFE_PHOTOGRAPHY_WIDGETS()
MAINTAIN_CONVERSATION_AND_DIALOGUE_WIDGETS()
MAINTAIN_SC_LB_READ_WIDGET()
// To run in SP only once the main script has been initialised.
IF NOT (NETWORK_IS_GAME_IN_PROGRESS())
IF (g_isSPMainInitialised)
Maintain_SP_Debug_Keypresses()
Maintain_SP_Debug_Widgets()
Maintain_SP_Visual_Flow_Diagram(m_flowLauncher)
SP_Debug_General_Housekeeping()
Run_Batch_Mission_Launch_Routines(m_batchLauncher, m_flowLauncher)
PROCESS_DEBUG_MENU(sDebugMenuData)
PROCESS_DEBUG_MENU_PRELAUNCH_CODE_ID_EXECUTION(sDebugMenuData) // Must come before flow activation.
PROCESS_DEBUG_MENU_FLOW_ACTIVATION(sDebugMenuData, sDebugFlowDiagram, m_flowLauncher)
PROCESS_DEBUG_MENU_GAME_TIME_MANAGEMENT(sDebugMenuData) // Must come after flow activation.
PROCESS_DEBUG_MENU_CODE_ID_EXECUTION(sDebugMenuData) // Must come after flow activation.
Update_Start_Pos_Widget_Response()
IF NOT m_flowLauncher.bLauncherWidgetSetup
SET_CURRENT_WIDGET_GROUP(widgetDebug)
LAUNCHER_CREATE_LAUNCH_TO_MULTIPLE_LABELS_WIDGET(m_flowLauncher)
CLEAR_CURRENT_WIDGET_GROUP(widgetDebug)
m_flowLauncher.bLauncherWidgetSetup = TRUE
ELSE
LAUNCHER_UPDATE_ACTIVATE_TO_MULTIPLE_LABELS_WIDGET(m_flowLauncher)
ENDIF
IF IS_BIT_SET(m_sharedDebugFlags, DBG_F9_SCREEN_ON)
DISPLAY_FLOW_INFO_SCREEN()
ENDIF
ENDIF
bRelaunchTimerSet = FALSE
ENDIF
//Draw transition session debug
DRAW_PLAYERS_IN_MY_TRANSITION_SESSION()
// To run in MP only
IF (NETWORK_IS_GAME_IN_PROGRESS())
Maintain_KeyM_Toggle_Mission_Menu()
// Requires updated every frame
PROCESS_DEBUG_MENU(sDebugMenuData)
// f9 screen
UPDATE_MP_F9_SCREEN()
// Relaunch the xml_menus script when we jump to MP
IF IS_NET_PLAYER_OK(PLAYER_ID(), FALSE, TRUE)
AND GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("xml_menus")) = 0
AND NOT NETWORK_IS_SCRIPT_ACTIVE("xml_menus", DEFAULT_MISSION_INSTANCE, TRUE)
AND GET_CURRENT_GAMEMODE() = GAMEMODE_FM
AND NOT IS_TRANSITION_SESSION_LAUNCHING()
IF NOT bRelaunchTimerSet
tdRelaunchInMPTimer = GET_GAME_TIMER() // used to be 'get_network_timer'. Changed to fix 1493461 KW
bRelaunchTimerSet = TRUE
ELIF GET_GAME_TIMER()> (tdRelaunchInMPTimer+ 1500)
IF NETWORK_IS_IN_SESSION()
AND IS_FAKE_MULTIPLAYER_MODE_SET() = FALSE
// Do not launch when in the transition proecss.
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("MainTransition")) = 0
REQUEST_SCRIPT("xml_menus")
IF HAS_SCRIPT_LOADED("xml_menus")
START_NEW_SCRIPT("xml_menus", DEFAULT_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED("xml_menus")
ENDIF
ENDIF
ENDIF
ENDIF
ELSE
bRelaunchTimerSet = FALSE
ENDIF
DEBUG_SHOW_DIALOGUE_ROOT_PLAYING()
PROCESS_MOUSE_TO_WORLD_COORD_SHAPETEST()
PROCESS_MUTING_MUSIC()
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_F1,KEYBOARD_MODIFIER_SHIFT,"terminate debug")
OR m_bKillScript
PRINT_HELP_WITH_PLAYER_NAME("STRING", "Debug.sc Terminated", HUD_COLOUR_WHITE)
SCRIPT_CLEANUP()
ENDIF
IF IS_DEBUG_KEY_JUST_PRESSED(KEY_F3,KEYBOARD_MODIFIER_SHIFT,"restart debug")
OR m_bRestartScript
PRINT_HELP_WITH_PLAYER_NAME("STRING", "Debug.sc Will Restart", HUD_COLOUR_WHITE)
g_dRestartDebugSc = TRUE
SCRIPT_CLEANUP()
ENDIF
ENDIF
// If the SP Main script does not exist then clear the 'sp main initialised' flag
// NOTE: This gets set to TRUE in 'main' just before the main loop starts
IF (g_isSPMainInitialised)
IF (!g_bLoadedClifford and !g_bLoadedNorman and (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("main")) = 0))
OR (g_bLoadedClifford and (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("main_CLF")) = 0))
OR (g_bLoadedNorman and (GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("main_NRM")) = 0))
g_isSPMainInitialised = FALSE
ENDIF
ENDIF
ENDWHILE
ENDSCRIPT
#ENDIF // IS_DEBUG_BUILD