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

631 lines
29 KiB
XML
Executable File

//╒═════════════════════════════════════════════════════════════════════════════╕
//│ Author: Ben Rollinson Date: 09/02/12 │
//╞═════════════════════════════════════════════════════════════════════════════╡
//│ │
//│ Flow Help Text Public Header │
//│ │
//│ The public interface for the flow help text controller. │
//│ │
//╘═════════════════════════════════════════════════════════════════════════════╛
USING "rage_builtins.sch"
USING "globals.sch"
USING "flow_help_private.sch"
//╒═════════════════════════════════════════════════════════════════════════════╕
//╞════════════════════════╡ Help Queue Management ╞═══════════════════════════╡
//╘═════════════════════════════════════════════════════════════════════════════╛
ENUM FlowHelpStatus
FHS_QUEUED,
FHS_DISPLAYED,
FHS_EXPIRED
ENDENUM
PROC ADD_HELP_TO_FLOW_QUEUE( STRING paramHelpLabel,
FlowHelpPriority paramPriority = FHP_LOW,
INT paramDelay = 0,
INT paramExpiration =
FLOW_HELP_NEVER_EXPIRES,
INT paramDuration = DEFAULT_HELP_TEXT_TIME,
INT paramCharBitset = 7,
CC_CodeID paramCodeIDStart = CID_BLANK,
CC_CodeID paramCodeIDDisplayed = CID_BLANK,
INT paramSettings = FHF_NONE)
PRIVATE_Add_Help_To_Flow_Queue(paramHelpLabel, "", paramPriority, paramDelay, paramExpiration, paramDuration, paramCharBitset, paramCodeIDStart, paramCodeIDDisplayed, paramSettings)
ENDPROC
PROC ADD_HELP_WITH_SUBSTRING_TO_FLOW_QUEUE( STRING paramHelpLabel,
STRING paramSubstringLabel,
FlowHelpPriority paramPriority = FHP_LOW,
INT paramDelay = 0,
INT paramExpiration = FLOW_HELP_NEVER_EXPIRES,
INT paramDuration = DEFAULT_HELP_TEXT_TIME,
INT paramCharBitset = 7,
CC_CodeID paramCodeIDStart = CID_BLANK,
CC_CodeID paramCodeIDDisplayed = CID_BLANK,
INT paramSettings = FHF_NONE)
PRIVATE_Add_Help_To_Flow_Queue(paramHelpLabel, paramSubstringLabel, paramPriority, paramDelay, paramExpiration, paramDuration, paramCharBitset, paramCodeIDStart, paramCodeIDDisplayed, paramSettings)
ENDPROC
PROC REMOVE_HELP_FROM_FLOW_QUEUE(STRING paramHelpLabel, BOOL paramIfDisplayedClear = TRUE)
CPRINTLN(DEBUG_FLOW_HELP, "Script [", GET_THIS_SCRIPT_NAME(), "] attempting to remove ", paramHelpLabel, " from the help queue...")
IF g_bFlowHelpDisplaying
AND paramIfDisplayedClear
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(paramHelpLabel)
and not IS_HELP_MESSAGE_FADING_OUT()
CPRINTLN(DEBUG_FLOW_HELP, "Help being removed is displayed. Clearing it. ")
CLEAR_HELP(FALSE)
ENDIF
ENDIF
INT i, j
#if USE_CLF_DLC
REPEAT g_savedGlobalsClifford.sFlowHelp.iFlowHelpCount i
//displayed are no longer in a queue
IF ARE_STRINGS_EQUAL(paramHelpLabel, g_savedGlobalsClifford.sFlowHelp.sHelpQueue[i].tHelpText)
CPRINTLN(DEBUG_FLOW_HELP, "removing Help: ",paramHelpLabel," from queue.")
//Shift all queue entries above this down one position.
FOR j = i TO (g_savedGlobalsClifford.sFlowHelp.iFlowHelpCount-2)
PRIVATE_Copy_Queued_Help_From_Index_To_Index(j, j+1)
ENDFOR
PRIVATE_Clear_Queued_Help_At_Index(g_savedGlobalsClifford.sFlowHelp.iFlowHelpCount-1)
g_savedGlobalsClifford.sFlowHelp.iFlowHelpCount--
//Check if queue priority has changed after removing an item.
PRIVATE_Update_Flow_Help_Queue_Priority_Level()
EXIT
ENDIF
ENDREPEAT
#endif
#if USE_NRM_DLC
REPEAT g_savedGlobalsnorman.sFlowHelp.iFlowHelpCount i
//displayed are no longer in a queue
IF ARE_STRINGS_EQUAL(paramHelpLabel, g_savedGlobalsnorman.sFlowHelp.sHelpQueue[i].tHelpText)
CPRINTLN(DEBUG_FLOW_HELP, "removing Help: ",paramHelpLabel," from queue.")
//Shift all queue entries above this down one position.
FOR j = i TO (g_savedGlobalsnorman.sFlowHelp.iFlowHelpCount-2)
PRIVATE_Copy_Queued_Help_From_Index_To_Index(j, j+1)
ENDFOR
PRIVATE_Clear_Queued_Help_At_Index(g_savedGlobalsnorman.sFlowHelp.iFlowHelpCount-1)
g_savedGlobalsnorman.sFlowHelp.iFlowHelpCount--
//Check if queue priority has changed after removing an item.
PRIVATE_Update_Flow_Help_Queue_Priority_Level()
EXIT
ENDIF
ENDREPEAT
#endif
#if NOT USE_SP_DLC
REPEAT g_savedGlobals.sFlowHelp.iFlowHelpCount i
//displayed are no longer in a queue
IF ARE_STRINGS_EQUAL(paramHelpLabel, g_savedGlobals.sFlowHelp.sHelpQueue[i].tHelpText)
CPRINTLN(DEBUG_FLOW_HELP, "removing Help: ",paramHelpLabel," from queue.")
//Shift all queue entries above this down one position.
FOR j = i TO (g_savedGlobals.sFlowHelp.iFlowHelpCount-2)
PRIVATE_Copy_Queued_Help_From_Index_To_Index(j, j+1)
ENDFOR
PRIVATE_Clear_Queued_Help_At_Index(g_savedGlobals.sFlowHelp.iFlowHelpCount-1)
g_savedGlobals.sFlowHelp.iFlowHelpCount--
//Check if queue priority has changed after removing an item.
PRIVATE_Update_Flow_Help_Queue_Priority_Level()
EXIT
ENDIF
ENDREPEAT
#endif
CPRINTLN(DEBUG_FLOW_HELP, " Failed. No matching help was queued.")
ENDPROC
FUNC BOOL IS_FLOW_HELP_QUEUE_EMPTY()
#if USE_CLF_DLC
IF g_savedGlobalsClifford.sFlowHelp.iFlowHelpCount > 0
RETURN FALSE
ELSE
RETURN TRUE
ENDIF
#endif
#if USE_NRM_DLC
IF g_savedGlobalsnorman.sFlowHelp.iFlowHelpCount > 0
RETURN FALSE
ELSE
RETURN TRUE
ENDIF
#endif
#if NOT USE_SP_DLC
IF g_savedGlobals.sFlowHelp.iFlowHelpCount > 0
RETURN FALSE
ELSE
RETURN TRUE
ENDIF
#endif
ENDFUNC
FUNC BOOL IS_FLOW_HELP_MESSAGE_QUEUED(STRING paramHelpLabel)
INT index
#if USE_CLF_DLC
REPEAT g_savedGlobalsClifford.sFlowHelp.iFlowHelpCount index
IF ARE_STRINGS_EQUAL(paramHelpLabel, g_savedGlobalsClifford.sFlowHelp.sHelpQueue[index].tHelpText)
RETURN TRUE
ENDIF
ENDREPEAT
RETURN FALSE
#endif
#if USE_NRM_DLC
REPEAT g_savedGlobalsnorman.sFlowHelp.iFlowHelpCount index
IF ARE_STRINGS_EQUAL(paramHelpLabel, g_savedGlobalsnorman.sFlowHelp.sHelpQueue[index].tHelpText)
RETURN TRUE
ENDIF
ENDREPEAT
RETURN FALSE
#endif
#if NOT USE_SP_DLC
REPEAT g_savedGlobals.sFlowHelp.iFlowHelpCount index
IF ARE_STRINGS_EQUAL(paramHelpLabel, g_savedGlobals.sFlowHelp.sHelpQueue[index].tHelpText)
RETURN TRUE
ENDIF
ENDREPEAT
RETURN FALSE
#endif
ENDFUNC
FUNC FlowHelpStatus GET_FLOW_HELP_MESSAGE_STATUS(STRING paramHelpLabel)
//Is the help message registered as the last displayed?
IF ARE_STRINGS_EQUAL(paramHelpLabel, g_txtFlowHelpLastDisplayed)
RETURN FHS_DISPLAYED
ENDIF
//Is the help message still waiting in the queue?
IF IS_FLOW_HELP_MESSAGE_QUEUED(paramHelpLabel)
RETURN FHS_QUEUED
ENDIF
//The help messaged either expired or was never queued.
RETURN FHS_EXPIRED
ENDFUNC
PROC PAUSE_FLOW_HELP_QUEUE(BOOL paramPause)
#IF IS_DEBUG_BUILD
IF paramPause
CPRINTLN(DEBUG_FLOW_HELP, "Help text queue paused by script [", GET_THIS_SCRIPT_NAME(), "].")
ELSE
CPRINTLN(DEBUG_FLOW_HELP, "Help text queue unpaused by script [", GET_THIS_SCRIPT_NAME(), "].")
IF g_OnMissionState != MISSION_TYPE_OFF_MISSION
CWARNINGLN(DEBUG_FLOW_HELP, "Flow help queue unpaused while on mission.")
ENDIF
ENDIF
#ENDIF
//Add a short delay after unpausing to improve pacing.
IF NOT paramPause
g_iFlowHelpDelayTime = GET_GAME_TIMER() + FLOW_HELP_DELAY_BETWEEN_MESSAGES
ENDIF
g_bFlowHelpPaused = paramPause
ENDPROC
PROC CLEAR_FLOW_HELP_MESSAGE_DELAY()
g_iFlowHelpDelayTime = GET_GAME_TIMER()
ENDPROC
//╒═════════════════════════════════════════════════════════════════════════════╕
//╞════════════════════════╡ Flow Help Messages - GTAV ╞════════════════════════╡
//╘═════════════════════════════════════════════════════════════════════════════╛
#IF NOT USE_SP_DLC
ENUM FlowHelpMessage
FHM_FIRST_MISSION_PASS,
FHM_FIRST_STAT_INVALIDATED,
FHM_FIRST_CALL_RINGING,
FHM_FIRST_CALL_ONGOING,
FHM_FIRST_TEXT_RECEIVED,
FHM_FIRST_RC_BLIP,
FHM_FIRST_PROPERTY_MISSION,
FHM_SELECTOR_MISSIONS_A,
FHM_SELECTOR_MISSIONS_B,
FHM_SELECTOR_NO_SWAP_A,
FHM_SELECTOR_NO_SWAP_B,
FHM_SELECTOR_NO_SWAP_C,
FHM_SELECTOR_NO_SWAP_EXILE,
FHM_SELECTOR_WANTED_SWAP,
FHM_BAILBOND_HELP_FIRST_MESSAGE,
FHM_SONAR_COLLECT_LOAD_TRACKIFY,
FHM_MOVING_MISSION_BLIPS,
FHM_DOWNLOAD_CHOP_APP,
FHM_RURAL_PREP1_BLIP,
FHM_TAXI_PHONE_INTRODUCED,
FHM_SAVE_ANYWHERE_ON_MISSION,
FHM_STEALTH_TAKEDOWN,
FHM_TATTOO_SHOPS_UNLOCKED,
FHM_CLIMB_HELP,
FHM_LADDER_HELP,
FHM_RC_MRS_PHILIPS_FIND_VAN, // To fix B*1218064
FHM_FIRST_CALL_DECISION,
FHM_CONVERTIBLE_ROOF,
FHM_HEADLIGHTS,
FHM_NO_STAMINA,
FHM_MULTI_WEAPONS_IN_SLOT,
FHM_VEHICLE_RADIO_A,
FHM_VEHICLE_RADIO_B,
FHM_LETTER_INFO_DISPLAYED,
FHM_EPSILON_WEBSITE,
FHM_NEAR_FIRST_RCM_AS_WRONG_CHAR,
FHM_FIRST_TRACT_CLUE,
FHM_FIRST_EMAIL_WITH_LINK,
FHM_FIRST_EMAIL_SCROLL,
FHM_JOSH1_FOR_SALE,
FHM_RAMPAGES_UNLOCKED,
FHM_DINGHY_HELP1,
FHM_DINGHY_HELP2,
FHM_DINGHY_HELP3,
FHM_DINGHY_HELP4,
FHM_HEIST_CREW_UNLOCKED,
FHM_VEHICLE_ROLLED,
FHM_OBTAINED_AUTO_PARACHUTE,
FHM_FRIEND_ACTIVITY_HELP,
FHM_ENTERED_TRAIN_IN_GROUP,
FHM_FIRST_RE_ENCOUNTER,
FHM_RE_STAT_BOOSTS,
FHM_PROG_AR,
FHM_SOCIAL_CLUB_LINK,
FHM_AFFECT_STOCKS,
FHM_BARRY3_REMINDER_HELP,
FHM_HEIST_CREW_SKILLUP,
FHM_BLIMP_UNLOCK,
FHM_RC_TONYA1_REMINDER,
FHM_PIMENU_ACTIVATE,
FHM_SNIPER_ZOOMED_MOVEMENT,
FHM_DRIVEBY_CONTROL,
FHM_TRI_3_UNLOCKED_IN_EXILE,
FHM_PLAYER_LOGGED_FOR_STOCKS,
FHM_FIRST_PERSON_HELP_REMINDER_A,
FHM_FIRST_PERSON_HELP_REMINDER_B,
FHM_ROCKSTAR_EDITOR_INTRO1,
FHM_ROCKSTAR_EDITOR_INTRO2,
FHM_DIRECTOR_MODE_STORY,
FHM_DIRECTOR_MODE_HEISTS,
FHM_DIRECTOR_MODE_SPECIAL,
FHM_DIRECTOR_MODE_ANIMALS,
FHM_ROCKSTAR_EDITOR_REC,
FHM_ROCKSTAR_EDITOR_ACTION_MODE//,
//FHM_HYDRAULICS_HELP
ENDENUM
#IF IS_DEBUG_BUILD
FUNC STRING GET_FLOW_HELP_MESSAGE_DISPLAY_STRING(FlowHelpMessage paramHelp)
SWITCH paramHelp
CASE FHM_FIRST_MISSION_PASS RETURN "FIRST_MISSION_PASS" BREAK
CASE FHM_FIRST_STAT_INVALIDATED RETURN "FIRST_STAT_INVALIDATED" BREAK
CASE FHM_FIRST_CALL_RINGING RETURN "FIRST_CALL_RINGING" BREAK
CASE FHM_FIRST_CALL_ONGOING RETURN "FIRST_CALL_ONGOING" BREAK
CASE FHM_FIRST_TEXT_RECEIVED RETURN "FIRST_TEXT_RECEIVED" BREAK
CASE FHM_FIRST_RC_BLIP RETURN "FIRST_RC_BLIP" BREAK
CASE FHM_FIRST_PROPERTY_MISSION RETURN "FIRST_PROPERTY_MISSION" BREAK
CASE FHM_SELECTOR_MISSIONS_A RETURN "SELECTOR_MISSIONS_A" BREAK
CASE FHM_SELECTOR_MISSIONS_B RETURN "SELECTOR_MISSIONS_B" BREAK
CASE FHM_SELECTOR_NO_SWAP_A RETURN "SELECTOR_NO_SWAP_A" BREAK
CASE FHM_SELECTOR_NO_SWAP_B RETURN "SELECTOR_NO_SWAP_B" BREAK
CASE FHM_SELECTOR_NO_SWAP_C RETURN "SELECTOR_NO_SWAP_C" BREAK
CASE FHM_SELECTOR_NO_SWAP_EXILE RETURN "FHM_SELECTOR_NO_SWAP_EXILE" BREAK
CASE FHM_SELECTOR_WANTED_SWAP RETURN "SELECTOR_WANTED_SWAP" BREAK
CASE FHM_BAILBOND_HELP_FIRST_MESSAGE RETURN "BAILBOND_HELP_FIRST_MESSAGE" BREAK
CASE FHM_SONAR_COLLECT_LOAD_TRACKIFY RETURN "SUBM_HELP1" BREAK
CASE FHM_MOVING_MISSION_BLIPS RETURN "AH_H_JHP2A_ASS" BREAK
CASE FHM_DOWNLOAD_CHOP_APP RETURN "FC_APPHLP" BREAK
CASE FHM_RURAL_PREP1_BLIP RETURN "AM_H_PREP4" BREAK
CASE FHM_TAXI_PHONE_INTRODUCED RETURN "TAXI_PHONE_INTRODUCED" BREAK
CASE FHM_SAVE_ANYWHERE_ON_MISSION RETURN "SAVE_ANYWHERE_ON_MISSION" BREAK
CASE FHM_STEALTH_TAKEDOWN RETURN "AH_H_TAKEDOWN" BREAK
CASE FHM_TATTOO_SHOPS_UNLOCKED RETURN "TATTOO_SHOPS_UNLOCKED" BREAK
CASE FHM_CLIMB_HELP RETURN "CLIMB_HELP" BREAK
CASE FHM_LADDER_HELP RETURN "LADDER_HELP" BREAK
CASE FHM_RC_MRS_PHILIPS_FIND_VAN RETURN "MRSP_01_HELP" BREAK
CASE FHM_FIRST_CALL_DECISION RETURN "FIRST_CALL_DECISION" BREAK
CASE FHM_CONVERTIBLE_ROOF RETURN "CONVERTIBLE_ROOF" BREAK
CASE FHM_HEADLIGHTS RETURN "HEADLIGHTS" BREAK
CASE FHM_NO_STAMINA RETURN "NO_STAMINA" BREAK
CASE FHM_MULTI_WEAPONS_IN_SLOT RETURN "MULTI_WEAPONS_IN_SLOT" BREAK
CASE FHM_VEHICLE_RADIO_A RETURN "VEHICLE_RADIO_A" BREAK
CASE FHM_VEHICLE_RADIO_B RETURN "VEHICLE_RADIO_B" BREAK
CASE FHM_LETTER_INFO_DISPLAYED RETURN "LETTERS_FIRST" BREAK
CASE FHM_EPSILON_WEBSITE RETURN "EPSILON_WEBSITE" BREAK
CASE FHM_NEAR_FIRST_RCM_AS_WRONG_CHAR RETURN "NEAR_FIRST_RCM_AS_WRONG_CHAR" BREAK
CASE FHM_FIRST_TRACT_CLUE RETURN "FIRST_TRACT_CLUE" BREAK
CASE FHM_FIRST_EMAIL_WITH_LINK RETURN "FIRST_EMAIL_WITH_LINK" BREAK
CASE FHM_FIRST_EMAIL_SCROLL RETURN "FIRST_EMAIL_SCROLL" BREAK
CASE FHM_JOSH1_FOR_SALE RETURN "JOSH1_FOR_SALE" BREAK
CASE FHM_RAMPAGES_UNLOCKED RETURN "RAMPAGES_UNLOCKED" BREAK
CASE FHM_DINGHY_HELP1 RETURN "DINGHY_HELP1" BREAK
CASE FHM_DINGHY_HELP2 RETURN "DINGHY_HELP2" BREAK
CASE FHM_DINGHY_HELP3 RETURN "DINGHY_HELP3" BREAK
CASE FHM_DINGHY_HELP4 RETURN "DINGHY_HELP4" BREAK
CASE FHM_HEIST_CREW_UNLOCKED RETURN "HEIST_CREW_UNLOCKED" BREAK
CASE FHM_VEHICLE_ROLLED RETURN "VEHICLE_ROLLED" BREAK
CASE FHM_FRIEND_ACTIVITY_HELP RETURN "FHM_FRIEND_ACTIVITY_HELP" BREAK
CASE FHM_OBTAINED_AUTO_PARACHUTE RETURN "FHM_OBTAINED_AUTO_PARACHUTE" BREAK
CASE FHM_ENTERED_TRAIN_IN_GROUP RETURN "ENTERED_TRAIN_IN_GROUP" BREAK
CASE FHM_FIRST_RE_ENCOUNTER RETURN "FIRST_RE_ENCOUNTER" BREAK
CASE FHM_RE_STAT_BOOSTS RETURN "RE_STAT_BOOSTS" BREAK
CASE FHM_PROG_AR RETURN "PROG_AR" BREAK
CASE FHM_SOCIAL_CLUB_LINK RETURN "SOCIAL_CLUB_LINK" BREAK
CASE FHM_AFFECT_STOCKS RETURN "AFFECT_STOCKS" BREAK
CASE FHM_BARRY3_REMINDER_HELP RETURN "BARRY3_REMINDER_HELP" BREAK
CASE FHM_HEIST_CREW_SKILLUP RETURN "HEIST_CREW_SKILLUP" BREAK
CASE FHM_BLIMP_UNLOCK RETURN "BLIMP_UNLOCK" BREAK
CASE FHM_RC_TONYA1_REMINDER RETURN "RC_TONYA1_REMINDER" BREAK
CASE FHM_PIMENU_ACTIVATE RETURN "PI_MENU_ACTIVATE" BREAK
CASE FHM_SNIPER_ZOOMED_MOVEMENT RETURN "FHM_SNIPER_ZOOMED_MOVEMENT" BREAK
CASE FHM_DRIVEBY_CONTROL RETURN "FHM_DRIVEBY_CONTROL" BREAK
CASE FHM_TRI_3_UNLOCKED_IN_EXILE RETURN "TRI_3_UNLOCKED_IN_EXILE" BREAK
CASE FHM_PLAYER_LOGGED_FOR_STOCKS RETURN "PLAYER_NOT_LOGGED_FOR_STOCKS" BREAK
CASE FHM_FIRST_PERSON_HELP_REMINDER_A RETURN "FIRST_PERSON_HELP_REMINDER_A" BREAK
CASE FHM_FIRST_PERSON_HELP_REMINDER_B RETURN "FIRST_PERSON_HELP_REMINDER_B" BREAK
CASE FHM_ROCKSTAR_EDITOR_INTRO1 RETURN "ROCKSTAR_EDITOR_INTRO1" BREAK
CASE FHM_ROCKSTAR_EDITOR_INTRO2 RETURN "ROCKSTAR_EDITOR_INTRO2" BREAK
CASE FHM_DIRECTOR_MODE_STORY RETURN "DIRECTOR_MODE_STORY" BREAK
CASE FHM_DIRECTOR_MODE_HEISTS RETURN "DIRECTOR_MODE_HEISTS" BREAK
CASE FHM_DIRECTOR_MODE_SPECIAL RETURN "DIRECTOR_MODE_SPECIAL" BREAK
CASE FHM_DIRECTOR_MODE_ANIMALS RETURN "DIRECTOR_MODE_ANIMALS" BREAK
CASE FHM_ROCKSTAR_EDITOR_REC RETURN "ROCKSTAR_EDITOR_REC" BREAK
CASE FHM_ROCKSTAR_EDITOR_ACTION_MODE RETURN "ROCKSTAR_EDITOR_ACTION_MODE" BREAK
//CASE FHM_HYDRAULICS_HELP RETURN "HYDRAULICS_HELP" BREAK
ENDSWITCH
SCRIPT_ASSERT("GET_FLOW_HELP_MESSAGE_DISPLAY_STRING: FlowHelpMessage passed did not have a display string defined. Bug BenR.")
RETURN "ERROR"
ENDFUNC
#ENDIF
#ENDIF
//╒═════════════════════════════════════════════════════════════════════════════╕
//╞════════════════════════╡ Flow Help Messages - CLF ╞════════════════════════╡
//╘═════════════════════════════════════════════════════════════════════════════╛
#IF USE_CLF_DLC
ENUM FlowHelpMessage
FHM_VEHICLE_ROLLED,
FHM_ENTERED_TRAIN_IN_GROUP,
FHM_SOCIAL_CLUB_LINK,
FHM_JP_ACTIVATED,
FHM_JP_TOGGLE
ENDENUM
#IF IS_DEBUG_BUILD
FUNC STRING GET_FLOW_HELP_MESSAGE_DISPLAY_STRING(FlowHelpMessage paramHelp)
SWITCH paramHelp
CASE FHM_VEHICLE_ROLLED RETURN "VEHICLE_ROLLED" BREAK
CASE FHM_ENTERED_TRAIN_IN_GROUP RETURN "ENTERED_TRAIN_IN_GROUP" BREAK
CASE FHM_SOCIAL_CLUB_LINK RETURN "SOCIAL_CLUB_LINK" BREAK
CASE FHM_JP_ACTIVATED RETURN "FHM_JP_ACTIVATED" BREAK
CASE FHM_JP_TOGGLE RETURN "FHM_JP_TOGGLE" BREAK
ENDSWITCH
SCRIPT_ASSERT("GET_FLOW_HELP_MESSAGE_DISPLAY_STRING: FlowHelpMessage passed did not have a display string defined. Bug BenR.")
RETURN "ERROR"
ENDFUNC
#ENDIF
#ENDIF
//╒═════════════════════════════════════════════════════════════════════════════╕
//╞════════════════════════╡ Flow Help Messages - NRM ╞═════════════════════════╡
//╘═════════════════════════════════════════════════════════════════════════════╛
#IF USE_NRM_DLC
ENUM FlowHelpMessage
FHM_VEHICLE_ROLLED,
FHM_ENTERED_TRAIN_IN_GROUP,
FHM_SOCIAL_CLUB_LINK
ENDENUM
#IF IS_DEBUG_BUILD
FUNC STRING GET_FLOW_HELP_MESSAGE_DISPLAY_STRING(FlowHelpMessage paramHelp)
SWITCH paramHelp
CASE FHM_VEHICLE_ROLLED RETURN "VEHICLE_ROLLED" BREAK
CASE FHM_ENTERED_TRAIN_IN_GROUP RETURN "ENTERED_TRAIN_IN_GROUP" BREAK
CASE FHM_SOCIAL_CLUB_LINK RETURN "SOCIAL_CLUB_LINK" BREAK
ENDSWITCH
SCRIPT_ASSERT("GET_FLOW_HELP_MESSAGE_DISPLAY_STRING: FlowHelpMessage passed did not have a display string defined. Bug BenR.")
RETURN "ERROR"
ENDFUNC
#ENDIF
#ENDIF
//╒═════════════════════════════════════════════════════════════════════════════╕
//╞═══════════════════╡ One Time Help Message Management ╞═════════════════════╡
//╘═════════════════════════════════════════════════════════════════════════════╛
PROC SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(FlowHelpMessage paramHelp)
INT iBitIndex = ENUM_TO_INT(paramHelp)
INT iBitsetIndex = 0
WHILE iBitIndex > 31
iBitIndex -= 32
iBitsetIndex++
ENDWHILE
IF iBitsetIndex < FLOW_HELP_BITSET_COUNT
#if USE_CLF_DLC
SET_BIT(g_savedGlobalsClifford.sFlowHelp.iHelpDisplayedBitset[iBitsetIndex], iBitIndex)
#endif
#if USE_NRM_DLC
SET_BIT(g_savedGlobalsnorman.sFlowHelp.iHelpDisplayedBitset[iBitsetIndex], iBitIndex)
#endif
#if NOT USE_SP_DLC
SET_BIT(g_savedGlobals.sFlowHelp.iHelpDisplayedBitset[iBitsetIndex], iBitIndex)
#endif
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_FLOW,"One time help message ",
GET_FLOW_HELP_MESSAGE_DISPLAY_STRING(paramHelp),
" flagged as displayed by ",
GET_THIS_SCRIPT_NAME(), ".")
#ENDIF
ELSE
SCRIPT_ASSERT("SET_ONE_TIME_HELP_MESSAGE_DISPLAYED: Too many help messages registered to fit in saved bitsets. Increase FLOW_HELP_BITSET_COUNT?")
ENDIF
ENDPROC
PROC CLEAR_ONE_TIME_HELP_MESSAGE_DISPLAYED(FlowHelpMessage paramHelp)
INT iBitIndex = ENUM_TO_INT(paramHelp)
INT iBitsetIndex = 0
WHILE iBitIndex > 31
iBitIndex -= 32
iBitsetIndex++
ENDWHILE
IF iBitsetIndex < FLOW_HELP_BITSET_COUNT
#if USE_CLF_DLC
CLEAR_BIT(g_savedGlobalsClifford.sFlowHelp.iHelpDisplayedBitset[iBitsetIndex], iBitIndex)
#endif
#if USE_NRM_DLC
CLEAR_BIT(g_savedGlobalsnorman.sFlowHelp.iHelpDisplayedBitset[iBitsetIndex], iBitIndex)
#endif
#if NOT USE_SP_DLC
CLEAR_BIT(g_savedGlobals.sFlowHelp.iHelpDisplayedBitset[iBitsetIndex], iBitIndex)
#endif
CLEAR_BIT(g_savedGlobals.sFlowHelp.iHelpDisplayedBitset[iBitsetIndex], iBitIndex)
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_FLOW,"One time help message ",
GET_FLOW_HELP_MESSAGE_DISPLAY_STRING(paramHelp),
" cleared as displayed by ",
GET_THIS_SCRIPT_NAME(), ".")
#ENDIF
ELSE
#IF IS_DEBUG_BUILD
CPRINTLN(DEBUG_FLOW,"Tried to set one time help message ",
GET_FLOW_HELP_MESSAGE_DISPLAY_STRING(paramHelp),
" as displayed but there wasn't enough saved bitsets.")
#ENDIF
SCRIPT_ASSERT("CLEAR_ONE_TIME_HELP_MESSAGE_DISPLAYED: Too many help messages registered to fit in saved bitsets. Increase FLOW_HELP_BITSET_COUNT?")
ENDIF
ENDPROC
FUNC BOOL HAS_ONE_TIME_HELP_DISPLAYED(FlowHelpMessage paramHelp)
INT iBitIndex = ENUM_TO_INT(paramHelp)
INT iBitsetIndex = 0
WHILE iBitIndex > 31
iBitIndex -= 32
iBitsetIndex++
ENDWHILE
IF iBitsetIndex < FLOW_HELP_BITSET_COUNT
#IF USE_CLF_DLC
IF g_bLoadedClifford
RETURN IS_BIT_SET(g_savedGlobalsClifford.sFlowHelp.iHelpDisplayedBitset[iBitsetIndex], iBitIndex)
ENDIF
#ENDIF
#IF USE_NRM_DLC
IF g_bLoadedNorman
RETURN IS_BIT_SET(g_savedGlobalsnorman.sFlowHelp.iHelpDisplayedBitset[iBitsetIndex], iBitIndex)
ENDIF
#ENDIF
RETURN IS_BIT_SET(g_savedGlobals.sFlowHelp.iHelpDisplayedBitset[iBitsetIndex], iBitIndex)
ENDIF
SCRIPT_ASSERT("HAS_ONE_TIME_HELP_DISPLAYED: Too many help messages registered to fit in saved bitsets. Increase FLOW_HELP_BITSET_COUNT?")
RETURN FALSE
ENDFUNC
// Keep requeueing a help message in the flow help queue until it displays. Once sucessful flag an FlowHelpMessage
// enum as being displayed so the help won't display again for this player.
PROC QUEUE_ONE_TIME_HELP_UNTIL_DISPLAYED(FlowHelpMessage paramMessage, STRING paramHelpLabel, INT paramCharBitset = 7)
IF NOT HAS_ONE_TIME_HELP_DISPLAYED(paramMessage)
SWITCH GET_FLOW_HELP_MESSAGE_STATUS(paramHelpLabel)
CASE FHS_EXPIRED
ADD_HELP_TO_FLOW_QUEUE(paramHelpLabel, FHP_MEDIUM, 0, 2000, DEFAULT_HELP_TEXT_TIME, paramCharBitset)
BREAK
CASE FHS_DISPLAYED
SET_ONE_TIME_HELP_MESSAGE_DISPLAYED(paramMessage)
BREAK
ENDSWITCH
ENDIF
ENDPROC
PROC Clean_Non_Save_Help_Text_On_Startup()
CPRINTLN(DEBUG_FLOW_HELP, "Checking for none save help to clear on SP startup.")
INT index
#if USE_CLF_DLC
REPEAT g_savedGlobalsClifford.sFlowHelp.iFlowHelpCount index
IF NOT IS_BIT_SET(g_savedGlobalsClifford.sFlowHelp.sHelpQueue[index].iSettingsFlags, FHF_INDEX_SAVED)
CPRINTLN(DEBUG_FLOW_HELP, "Removing none save help text ", g_savedGlobalsClifford.sFlowHelp.sHelpQueue[index].tHelpText, " from the help queue.")
REMOVE_HELP_FROM_FLOW_QUEUE(g_savedGlobalsClifford.sFlowHelp.sHelpQueue[index].tHelpText)
ENDIF
ENDREPEAT
#endif
#if USE_NRM_DLC
REPEAT g_savedGlobalsnorman.sFlowHelp.iFlowHelpCount index
IF NOT IS_BIT_SET(g_savedGlobalsnorman.sFlowHelp.sHelpQueue[index].iSettingsFlags, FHF_INDEX_SAVED)
CPRINTLN(DEBUG_FLOW_HELP, "Removing none save help text ", g_savedGlobalsnorman.sFlowHelp.sHelpQueue[index].tHelpText, " from the help queue.")
REMOVE_HELP_FROM_FLOW_QUEUE(g_savedGlobalsnorman.sFlowHelp.sHelpQueue[index].tHelpText)
ENDIF
ENDREPEAT
#endif
#if NOT USE_SP_DLC
REPEAT g_savedGlobals.sFlowHelp.iFlowHelpCount index
IF NOT IS_BIT_SET(g_savedGlobals.sFlowHelp.sHelpQueue[index].iSettingsFlags, FHF_INDEX_SAVED)
CPRINTLN(DEBUG_FLOW_HELP, "Removing none save help text ", g_savedGlobals.sFlowHelp.sHelpQueue[index].tHelpText, " from the help queue.")
REMOVE_HELP_FROM_FLOW_QUEUE(g_savedGlobals.sFlowHelp.sHelpQueue[index].tHelpText)
ENDIF
ENDREPEAT
#endif
ENDPROC