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

635 lines
20 KiB
XML
Executable File

USING "globals.sch"
USING "commands_script.sch"
USING "cellphone_public.sch"
USING "selector_public.sch"
CONST_INT NEW_CONTEXT_INTENTION -1 //used directly as -1 in BOUNTY_STRUCT in x:\gta5\script\dev\multiplayer\globals\mp_globals_ambience.sch
FUNC BOOL CONTEXT_CONTROLLER_SUPPRESSION_CONDITIONS()
IF g_bBrowserVisible
RETURN TRUE
ENDIF
IF NOT IS_PLAYER_PLAYING(GET_PLAYER_INDEX())
//////PRINTLN("CONTEXT_CONTROLLER_SUPPRESSION_CONDITIONS : playing")
RETURN TRUE
ENDIF
IF (IS_PHONE_ONSCREEN())
//PRINTLN("CONTEXT_CONTROLLER_SUPPRESSION_CONDITIONS : phone")
RETURN TRUE
ENDIF
IF (IS_CUTSCENE_PLAYING())
//PRINTLN("CONTEXT_CONTROLLER_SUPPRESSION_CONDITIONS : cutscene")
RETURN TRUE
ENDIF
IF (g_bSuppressContextActionsThisFrame)
//PRINTLN("CONTEXT_CONTROLLER_SUPPRESSION_CONDITIONS : external")
RETURN TRUE
ENDIF
/*//Removed after discussion about specific uses of the MP cutscene condition
IF NETWORK_IS_GAME_IN_PROGRESS()
IF NETWORK_IS_PLAYER_IN_MP_CUTSCENE(GET_PLAYER_INDEX())
RETURN TRUE
ENDIF
ENDIF
*/
IF IS_HUD_COMPONENT_ACTIVE(NEW_HUD_WEAPON_WHEEL)//weapon wheel
//PRINTLN("CONTEXT_CONTROLLER_SUPPRESSION_CONDITIONS : wheel suppress")
RETURN TRUE
ENDIF
IF IS_SELECTOR_ONSCREEN()
//PRINTLN("CONTEXT_CONTROLLER_SUPPRESSION_CONDITIONS : char select suppress")
//PRINTLN("CONTEXT_CONTROLLER_SUPPRESSION_CONDITIONS : selector")
RETURN TRUE
ENDIF
IF IS_PLAYER_SWITCH_IN_PROGRESS()
//PRINTLN("CONTEXT_CONTROLLER_SUPPRESSION_CONDITIONS : switch")
RETURN TRUE
ENDIF
IF IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONhUD)
//PRINTLN("CONTEXT_CONTROLLER_SUPPRESSION_CONDITIONS : transition")
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC INT GET_CONTEXT_INTENTION_ARRAY_INDEX(INT intention_index)
IF intention_index < 0
RETURN -1
ENDIF
INT i = 0
REPEAT MAX_CONTEXT_INTENTION i
IF g_IntentionList[i].iID = intention_index
RETURN i
ENDIF
ENDREPEAT
RETURN -1
ENDFUNC
/// PURPOSE:
/// Allows scripts to release thier intention to use the context button
/// PARAMS:
/// intention_index - a valid index returned from REGISTER_NEW_CONTEXT_INTENTION
PROC RELEASE_CONTEXT_INTENTION(INT &intention_index)
//PRINTSTRING("RELEASE_CONTEXT_INTENTION:Attempting to release context")
//PRINTNL()
IF intention_index = NEW_CONTEXT_INTENTION
EXIT
ENDIF
INT arraypos = GET_CONTEXT_INTENTION_ARRAY_INDEX(intention_index)
IF arraypos = -1
PRINTLN("RELEASE_CONTEXT_INTENTION: passed an index that does not exist, value was : ",intention_index)
intention_index = NEW_CONTEXT_INTENTION
EXIT
ENDIF
//is it a valid index?
IF arraypos > NEW_CONTEXT_INTENTION AND arraypos < MAX_CONTEXT_INTENTION
PRINTSTRING("RELEASE_CONTEXT_INTENTION:Index valid")
PRINTNL()
//is it used?
IF g_IntentionList[arraypos].bUsed
PRINTSTRING("RELEASE_CONTEXT_INTENTION:Used valid")
PRINTNL()
//clean up the state
//IF g_IntentionList[intention_index].bActive
PRINTSTRING("RELEASE_CONTEXT_INTENTION: registering context for deletion")
PRINTNL()
//release the index
//g_IntentionList[intention_index].bUsed = FALSE
//g_IntentionList[intention_index].bActive = FALSE
//g_IntentionList[intention_index].bAccepted = FALSE
//g_IntentionList[intention_index].iPriority = 0
//if it was active then clear help, and deactivate
/*
IF g_IntentionList[intention_index].bActive
IF IS_CONTEXT_INTENTION_HELP_DISPLAYING(intention_index)
CLEAR_HELP(FALSE)
ENDIF
ENDIF*/
//g_IntentionList[intention_index].bNoString = TRUE
//g_IntentionList[intention_index].bActive = FALSE
g_IntentionList[arraypos].bToBeDeleted = TRUE
//g_IntentionList[arraypos].iID = -1
//g_IntentionList[intention_index].bUsed = FALSE
intention_index = NEW_CONTEXT_INTENTION
EXIT
//ENDIF
ENDIF
#IF IS_DEBUG_BUILD
//log string
PRINTLN("RELEASE_CONTEXT_INTENTION complete: if this is spamming continuously then script:'",GET_THIS_SCRIPT_NAME(),"' is creating and destroying a context request every frame, this is an indication that it is being used badly.")
#ENDIF
ENDIF
//PRINTSTRING("RELEASE_CONTEXT_INTENTION: Overwriting passed index value to NEW_CONTEXT_INTENTION")
//PRINTNL()
//otherwise!
intention_index = NEW_CONTEXT_INTENTION
//SCRIPT_ASSERT("RELEASE_CONTEXT_INTENTION: release failed")
//PRINTSTRING("RELEASE_CONTEXT_INTENTION: release failed, context may have already been released or never exsisted")
//PRINTNL()
ENDPROC
//CONTEXT_INTENTION g_IntentionList[MAX_CONTEXT_INTENTION]
/// PURPOSE:
/// Used by a script to register it's intention to use the context button
/// PARAMS:
/// intention_index An int to return an ID for subsequent context actions
/// priority An int value use to compare priority in the case of a deadlock
/// helptext The help text to display if top of the priority queue. NB. Leave a ~a~ in this help where the context button icon should appear.
/// noHelp Don't display any help text for this intention.
PROC REGISTER_CONTEXT_INTENTION(INT &intention_index,
CONTEXT_PRIORITY_ENUM priority,
STRING helptext,
BOOL noHelp = FALSE,STRING additionalSubStr = NULL, CONTEXT_STYLE_ENUM contextStyle = CS_DEFAULT,
BOOL subStringIsPlayerName = FALSE)
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("context_controller")) < 1
PRINTLN("REGISTER_CONTEXT_INTENTION: Context controller not running, skipping, should only see this if triggering a repeat ")
ENDIF
//contexts may not be asked for during a switch
IF IS_PLAYER_SWITCH_IN_PROGRESS()
IF NOT (intention_index = NEW_CONTEXT_INTENTION)
RELEASE_CONTEXT_INTENTION(intention_index)
ENDIF
EXIT
ENDIF
IF NOT (intention_index = NEW_CONTEXT_INTENTION)
#IF IS_DEBUG_BUILD
PRINTLN("REGISTER_CONTEXT_INTENTION: intention_index != NEW_CONTEXT_INTENTION, checking index:")
INT arraypos = GET_CONTEXT_INTENTION_ARRAY_INDEX(intention_index)
IF arraypos = -1
PRINTLN("REGISTER_CONTEXT_INTENTION: intention_index was not an existing intention")
ELSE
//PRINTLN("REGISTER_CONTEXT_INTENTION: intention_index was an already registered ID ", intention_index)
//SCRIPT_ASSERT("REGISTER_CONTEXT_INTENTION: Script passing an already registered ID, implies missed cleanup/release")
RELEASE_CONTEXT_INTENTION(intention_index)
EXIT
ENDIF
//intention_index = NEW_CONTEXT_INTENTION
#ENDIF
EXIT
ENDIF
#IF IS_DEBUG_BUILD
PRINTLN("REGISTER_CONTEXT_INTENTION: New context intention registered by script ", GET_THIS_SCRIPT_NAME())
IF noHelp
PRINTLN(" with no help label.")
ELSE
PRINTLN(" with help label [", helpText, "].")
ENDIF
#ENDIF
INT i = 0
//find a free index
REPEAT MAX_CONTEXT_INTENTION i
IF NOT g_IntentionList[i].bUsed
//register it
g_IntentionList[i].bUsed = TRUE
g_IntentionList[i].iID = g_iContextIntentionIDGenerator
++g_iContextIntentionIDGenerator
g_IntentionList[i].bActive = FALSE
g_IntentionList[i].bPickedUp = FALSE
g_IntentionList[i].bAccepted = FALSE
g_IntentionList[i].iPriority = ENUM_TO_INT(priority)
g_IntentionList[i].helpLabel = helptext
g_IntentionList[i].bNoString = noHelp
g_IntentionList[i].RegisteredBy = GET_ID_OF_THIS_THREAD()
g_IntentionList[i].bToBeDeleted = FALSE
g_IntentionList[i].iStyle = ENUM_TO_INT(contextStyle)
IF NOT IS_STRING_NULL_OR_EMPTY(additionalSubStr)
g_IntentionList[i].bAdditionalHelp = TRUE
g_IntentionList[i].additionalHelpLabel = additionalSubStr
g_IntentionList[i].subStringIsPlayerName = subStringIsPlayerName
ELSE
g_IntentionList[i].bAdditionalHelp = FALSE
g_IntentionList[i].subStringIsPlayerName = FALSE
ENDIF
#IF IS_DEBUG_BUILD
//log string
g_IntentionList[i].DEBUG_sname = GET_THIS_SCRIPT_NAME()
//log string
//dump log
PRINTSTRING("Dumping context system current state:")
PRINTNL()
INT j = 0
REPEAT MAX_CONTEXT_INTENTION j
IF g_IntentionList[j].bUsed
PRINTINT(j)
PRINTSTRING(" : ")
PRINTSTRING(g_IntentionList[j].DEBUG_sname)
PRINTSTRING(" : Prio - ")
PRINTINT(g_IntentionList[j].iPriority)
PRINTSTRING(" : Help stored - ")
PRINTSTRING(g_IntentionList[j].helpLabel)
IF g_IntentionList[j].bAdditionalHelp
PRINTSTRING(" : Additional help substring - ")
PRINTSTRING(g_IntentionList[j].additionalHelpLabel)
ENDIF
PRINTNL()
ENDIF
ENDREPEAT
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("context_controller")) < 1
SCRIPT_ASSERT("Context controller request was triggered while script was not running!")
ENDIF
#ENDIF
//TODO handle help string
//RETURN i
intention_index = g_IntentionList[i].iID
EXIT
ENDIF
ENDREPEAT
//
#IF IS_DEBUG_BUILD
//log string
//dump log
PRINTSTRING("Context system has no space left, listing potential culprits.")
PRINTNL()
PRINTSTRING("Multiple entries from the same script or scripts that are no longer running will indicate potential failure to clean up:")
PRINTNL()
PRINTNL()
i = 0
REPEAT MAX_CONTEXT_INTENTION i
IF g_IntentionList[i].bUsed
PRINTINT(i)
PRINTSTRING(" : ")
PRINTSTRING(g_IntentionList[i].DEBUG_sname)
PRINTSTRING(" : ID ")
PRINTINT(g_IntentionList[i].iID)
PRINTNL()
ENDIF
ENDREPEAT
#ENDIF
#IF IS_DEBUG_BUILD
SCRIPT_ASSERT("REGISTER_CONTEXT_INTENTION: failed, check the log for potential culprits")
#ENDIF
#IF IS_FINAL_BUILD
SCRIPT_ASSERT("REGISTER_CONTEXT_INTENTION: failed, duplicate this assert in debug mode to see list of potential culprits")
#ENDIF
//otherwise return fail
//RETURN -1
ENDPROC
FUNC BOOL IS_CONTEXT_INTENTION_TOP(INT intention_ID)
IF intention_ID = -1
RETURN FALSE
ENDIF
//g_IntentionList[MAX_CONTEXT_INTENTION]
//find if this is top
INT arraypos = GET_CONTEXT_INTENTION_ARRAY_INDEX(intention_ID)
IF arraypos = -1
PRINTLN("IS_CONTEXT_INTENTION_TOP intention_ID not in buffers")
RETURN FALSE
ENDIF
INT i = 0
INT iTopPrio = -1
INT iTopPrioIndex = -1
REPEAT MAX_CONTEXT_INTENTION i
IF g_IntentionList[i].bUsed
//IF (NOT g_IntentionList[i].bToBeDeleted) AND (NOT g_IntentionList[i].)
IF g_IntentionList[i].iPriority > iTopPrio
iTopPrioIndex = i
ENDIF
//ENDIF
ENDIF
ENDREPEAT
IF(iTopPrioIndex = arraypos)
RETURN TRUE
ENDIF
/*
IF(g_iCurrentlyDisplayingContextINDEX = -1)
PRINTLN("IS_CONTEXT_INTENTION_TOP nothing on top")
RETURN FALSE
ENDIF
INT arraypos = GET_CONTEXT_INTENTION_ARRAY_INDEX(intention_ID)
IF arraypos = -1
PRINTLN("IS_CONTEXT_INTENTION_TOP not in buffers")
RETURN FALSE
ENDIF
IF g_iCurrentlyDisplayingContextINDEX = arraypos
RETURN TRUE
ENDIF
PRINTLN("IS_CONTEXT_INTENTION_TOP Default fallthrough")
RETURN FALSE
*/
RETURN FALSE
ENDFUNC
/// PURPOSE:
/// Allows registered scripts to check for the context button being activated for them.
/// PARAMS:
/// intention_index - an index returned from REGISTER_CONTEXT_INTENTION
/// justMode - perform a "just pressed check on the button?"
/// RETURNS:
///
FUNC BOOL HAS_CONTEXT_BUTTON_TRIGGERED(INT intention_index, BOOL justMode = TRUE)
INT arraypos = GET_CONTEXT_INTENTION_ARRAY_INDEX(intention_index)
IF arraypos = -1
CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, ") arraypos = -1")
RETURN FALSE
ENDIF
//these may not be safe for multiplayer
IF NOT IS_PLAYER_PLAYING(GET_PLAYER_INDEX())
CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "):Acceptance prevented due to (NOT IS_PLAYER_PLAYING(GET_PLAYER_INDEX())")
RETURN FALSE
ENDIF
IF (IS_PHONE_ONSCREEN())
CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "):Acceptance prevented due to IS_PHONE_ONSCREEN()")
RETURN FALSE
ENDIF
IF (IS_CUTSCENE_PLAYING())
CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "):Acceptance prevented due to IS_CUTSCENE_PLAYING()")
RETURN FALSE
ENDIF
//CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "):Checking for triggered")
//is this index valid
IF (arraypos > NEW_CONTEXT_INTENTION) AND (arraypos < MAX_CONTEXT_INTENTION)
//is it registered
IF (g_IntentionList[arraypos].bUsed = TRUE) AND (g_IntentionList[arraypos].bActive = TRUE)
IF justMode
/*//suspect this creates a problem if the script checking is before the context controller
IF NOT IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_CONTEXT)
CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "):Acceptance failed due to just mode check")
RETURN FALSE
ENDIF
*/
IF g_IntentionList[arraypos].bPickedUp
//true has already been returned on this index
CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "): 'just' mode return suppressed")
RETURN FALSE
ENDIF
ENDIF
//has it been triggered?
g_IntentionList[arraypos].bAccepted = TRUE
g_IntentionList[arraypos].bPickedUp = TRUE
CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "):Acceptance complete")
RETURN TRUE
ELSE
IF (g_IntentionList[arraypos].bUsed = FALSE)
CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "): Checked context ", intention_index, " not used ")
ENDIF
/*
IF (g_IntentionList[arraypos].bActive = FALSE)
CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "): Checked context ", intention_index, " not active, this simply means the button hasn't been pressed yet ")
ENDIF
*/
IF g_IntentionList[arraypos].bToBeDeleted
CDEBUG1LN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "): Checked context ", intention_index, " is also pending delete!")
ENDIF
ENDIF
//its not registered, fail
ELSE
CPRINTLN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "): index being checked that is not valid!")
CASSERTLN(DEBUG_SHOPS, "HAS_CONTEXT_BUTTON_TRIGGERED(", GET_THIS_SCRIPT_NAME(), ", ", intention_index, "): index being checked that is not valid!")
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_ANY_CONTEXT_SHOWING()
INT i = 0
REPEAT MAX_CONTEXT_INTENTION i
IF g_IntentionList[i].bUsed AND g_IntentionList[i].bActive
IF g_IntentionList[i].RegisteredBy != NULL
CDEBUG1LN(DEBUG_SAFEHOUSE, "IS_ANY_CONTEXT_SHOWING: TRUE: ", g_IntentionList[i].helpLabel)
RETURN TRUE
ENDIF
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL IS_CONTEXT_INTENTION_HELP_DISPLAYING(INT intention_index,BOOL rawarray = FALSE)
INT arraypos = GET_CONTEXT_INTENTION_ARRAY_INDEX(intention_index)
IF rawarray = FALSE
IF arraypos = -1
RETURN FALSE
ENDIF
ELSE
arraypos = intention_index
ENDIF
IF arraypos < 0// OR arraypos > (MAX_CONTEXT_INTENTION-1)
PRINTLN("Context can't display; not in valid range from script ", GET_THIS_SCRIPT_NAME()," index ", intention_index)
RETURN FALSE
ENDIF
IF g_IntentionList[arraypos].bNoString
PRINTLN("Context doesn't have help")
RETURN FALSE
ENDIF
BOOL retval = FALSE
IF NOT g_IntentionList[arraypos].bAdditionalHelp
BEGIN_TEXT_COMMAND_IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(g_IntentionList[arraypos].helpLabel)
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_strContextButton)
retval = END_TEXT_COMMAND_IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(HELP_TEXT_SLOT_STANDARD)
ELSE
BEGIN_TEXT_COMMAND_IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(g_IntentionList[arraypos].helpLabel)
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_strContextButton)
IF g_IntentionList[arraypos].subStringIsPlayerName
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_IntentionList[arraypos].additionalHelpLabel)
ELSE
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_IntentionList[arraypos].additionalHelpLabel)
ENDIF
retval = END_TEXT_COMMAND_IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(HELP_TEXT_SLOT_STANDARD)
ENDIF
RETURN retval
ENDFUNC
FUNC STRING GET_CONTEXT_INTENTION_HELP(INT intention_index,BOOL rawarray = FALSE)
INT arraypos = GET_CONTEXT_INTENTION_ARRAY_INDEX(intention_index)
STRING sReturnString
IF rawarray = FALSE
IF arraypos = -1
sReturnString = ""
ENDIF
ELSE
arraypos = intention_index
ENDIF
IF arraypos < 0// OR arraypos > (MAX_CONTEXT_INTENTION-1)
PRINTLN("Context can't display; not in valid range from script ", GET_THIS_SCRIPT_NAME()," index ", intention_index)
sReturnString = ""
ENDIF
IF g_IntentionList[arraypos].bNoString
PRINTLN("Context doesn't have help")
sReturnString = ""
ENDIF
IF NOT g_IntentionList[arraypos].bAdditionalHelp
BEGIN_TEXT_COMMAND_IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(g_IntentionList[arraypos].helpLabel)
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_strContextButton)
IF END_TEXT_COMMAND_IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(HELP_TEXT_SLOT_STANDARD)
sReturnString = Get_String_From_TextLabel(g_IntentionList[arraypos].helpLabel)
ENDIF
ELSE
BEGIN_TEXT_COMMAND_IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(g_IntentionList[arraypos].helpLabel)
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_strContextButton)
IF g_IntentionList[arraypos].subStringIsPlayerName
ADD_TEXT_COMPONENT_SUBSTRING_PLAYER_NAME(g_IntentionList[arraypos].additionalHelpLabel)
ELSE
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(g_IntentionList[arraypos].additionalHelpLabel)
ENDIF
IF END_TEXT_COMMAND_IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(HELP_TEXT_SLOT_STANDARD)
sReturnString = Get_String_From_TextLabel(g_IntentionList[arraypos].helpLabel)
ENDIF
ENDIF
RETURN sReturnString
ENDFUNC
PROC HIDE_ALL_CONTEXT_HELP_NEXT_UPDATE()
// #IF IS_DEBUG_BUILD
// IF !b_SuppressContextHelpNextUpdate
//PRINTLN("HIDE_ALL_CONTEXT_HELP_NEXT_UPDATE has set context help to suppress, this by script: ", GET_THIS_SCRIPT_NAME())
// ENDIF
// #ENDIF
b_SuppressContextHelpNextUpdate = TRUE
ENDPROC
/// PURPOSE:
/// Does what it says on the tin, used to reset the system on mission skips or debug menu transitions
PROC FORCE_CONTEXT_SYSTEM_RESET()
/*
STRUCT CONTEXT_INTENTION
BOOL bUsed
INT iPriority
BOOL bActive
BOOL bAccepted
BOOL bToBeDeleted
TEXT_LABEL helpLabel
ENDSTRUCT
CONST_INT MAX_CONTEXT_INTENTION 6
CONTEXT_INTENTION g_IntentionList[MAX_CONTEXT_INTENTION]
*/
g_ContextResetForced = TRUE
INT i
REPEAT MAX_CONTEXT_INTENTION i
g_IntentionList[i].bUsed = FALSE
g_IntentionList[i].iPriority = 0
g_IntentionList[i].bActive = FALSE
g_IntentionList[i].bAccepted = FALSE
g_IntentionList[i].bToBeDeleted = FALSE
g_IntentionList[i].iID = -1
g_IntentionList[i].iStyle = 0
ENDREPEAT
ENDPROC
PROC SUPPRESS_CONTEXT_BUTTON_ACTIONS_THIS_FRAME()
g_bSuppressContextActionsThisFrame = TRUE
ENDPROC