4833 lines
141 KiB
XML
Executable File
4833 lines
141 KiB
XML
Executable File
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "dialogue_private.sch"
|
|
|
|
|
|
//PLEASE READ!
|
|
|
|
|
|
//Dialogue and Phonecall public functions for use by other scripts to automatically play phone conversations and, soon, normal dialogue.
|
|
|
|
//Please read the comments before each function and check the GTA5 scripting wiki for more detailed information. Any ambiguity, don't hesitate to ask.
|
|
|
|
//The main phonecall creation publics have been created as functions as they were in GTA IV. This is handy as it allows anyone using them
|
|
//to check if the phonecall has actually launched or not. Whilst you don't have to check the return value, it is much safer to check if a
|
|
//phonecall creation function returns TRUE so that you know your phonecall has launched successfully. The creation functions will return
|
|
//FALSE if a phonecall of the same or higher priority is currently ongoing at the same time you try to launch yours.
|
|
|
|
//An assert will fire if you have too many labels in your conversation. This can be easily remedied. See me if it happens.
|
|
|
|
// AUTHOR: Steve Taylor
|
|
|
|
|
|
|
|
//DO NOT CALL! This procedure is used by some public functions and is here for convenience of reference.
|
|
PROC Assign_Standard_Dialogue_Holder_Parameters (structPedsForConversation &AssignPedStruct, enumCharacterList AssignWhichChar, STRING AssignWhichBlockOfTextToLoad, enumSubtitlesState AssignDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState AssignAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN, BOOL cloneConversation = FALSE)
|
|
|
|
|
|
PRINTLN("Stack size before copying ped for convo struct ", GET_CURRENT_STACK_SIZE() ," max ", GET_ALLOCATED_STACK_SIZE())
|
|
g_ConversationPedsHolderStruct = AssignPedStruct //This might need to be locked to prevent the holder getting overwritten on very, very rare occasions.
|
|
//It would mean dialogue requests are polling the system at exactly the same time.
|
|
//CheckCurrentConversationStatus would need to unlock before every true/false return.
|
|
//If found to be locked here, then any request of CREATE_CONVERSATION and similar would need to return FALSE.
|
|
|
|
|
|
g_TheContactInvolvedinCallHolder = AssignWhichChar
|
|
g_BlockToLoadHolder = AssignWhichBlockOfTextToLoad
|
|
|
|
g_CloneConversationHolder = cloneConversation
|
|
|
|
IF AssignDisplaySubtitles = DISPLAY_SUBTITLES
|
|
|
|
g_DisplaySubtitlesHolder = TRUE
|
|
|
|
g_AssignDisplaySubtitlesBuffer = DISPLAY_SUBTITLES
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Not displaying subtitles!")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
g_DisplaySubtitlesHolder = FALSE
|
|
|
|
|
|
g_AssignDisplaySubtitlesBuffer = DO_NOT_DISPLAY_SUBTITLES
|
|
|
|
ENDIF
|
|
|
|
|
|
IF AssignAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN
|
|
|
|
g_AddToBriefScreenHolder = TRUE
|
|
|
|
g_AssignAddtoBriefScreenBuffer = DO_ADD_TO_BRIEF_SCREEN
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Not adding subs to brief screen!")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
g_AddToBriefScreenHolder = FALSE
|
|
|
|
g_AssignAddtoBriefScreenBuffer = DO_NOT_ADD_TO_BRIEF_SCREEN
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
//DO NOT CALL!
|
|
PROC Passed_Priority_Cap_Warning()
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Passed priority for face-to-face conversation was higher than MEDIUM, but hard cap is in force.")
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Setting conversation priority to MEDIUM. Use lower priorities if you need to interrupt a conversation")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
//DO NOT CALL! This procedure is used by some public functions and is here for convenience of reference.
|
|
PROC Construct_Multipart_Conversation_Roots_and_Specifics (INT Passed_Num_of_Multiparts, STRING &ConstructSegmentLabel[], STRING &ConstructSpecificLabel[],
|
|
STRING FirstPassedRoot = NULL, STRING FirstPassedSpecific = NULL,
|
|
STRING SecondPassedRoot = NULL, STRING SecondPassedSpecific = NULL,
|
|
STRING ThirdPassedRoot = NULL, STRING ThirdPassedSpecific = NULL,
|
|
STRING FourthPassedRoot = NULL, STRING FourthPassedSpecific = NULL,
|
|
STRING FifthPassedRoot = NULL, STRING FifthPassedSpecific = NULL,
|
|
STRING SixthPassedRoot = NULL, STRING SixthPassedSpecific = NULL,
|
|
STRING SeventhPassedRoot = NULL, STRING SeventhPassedSpecific = NULL)
|
|
|
|
|
|
g_TotalMultiPartsHolder = Passed_Num_of_Multiparts
|
|
|
|
|
|
g_IsThisConversationForPhoneHolder = FALSE //this conversation is not a phonecall.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
|
|
ConstructSegmentLabel[0] = FirstPassedRoot
|
|
ConstructSpecificLabel[0] = FirstPassedSpecific
|
|
|
|
ConstructSegmentLabel[1] = SecondPassedRoot
|
|
ConstructSpecificLabel[1] = SecondPassedSpecific
|
|
|
|
ConstructSegmentLabel[2] = ThirdPassedRoot
|
|
ConstructSpecificLabel[2] = ThirdPassedSpecific
|
|
|
|
ConstructSegmentLabel[3] = FourthPassedRoot
|
|
ConstructSpecificLabel[3] = FourthPassedSpecific
|
|
|
|
ConstructSegmentLabel[4] = FifthPassedRoot
|
|
ConstructSpecificLabel[4] = FifthPassedSpecific
|
|
|
|
ConstructSegmentLabel[5] = SixthPassedRoot
|
|
ConstructSpecificLabel[5] = SixthPassedSpecific
|
|
|
|
ConstructSegmentLabel[6] = SeventhPassedRoot
|
|
ConstructSpecificLabel[6] = SeventhPassedSpecific
|
|
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//If you have an alphanumeric speaker or listener designation in dstar, use this to convert it to an int when assigning a ped for dialogue
|
|
//e.g ADD_PED_FOR_DIALOGUE (myscripted_speech, ConvertSingleCharacter("D"), My_ped_index, "That_Ped_Voice")
|
|
|
|
FUNC INT ConvertSingleCharacter (STRING passedSingleCharacter)
|
|
|
|
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "0")
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "1")
|
|
RETURN 1
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "2")
|
|
RETURN 2
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "3")
|
|
RETURN 3
|
|
ENDIF
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "4")
|
|
RETURN 4
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "5")
|
|
RETURN 5
|
|
ENDIF
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "6")
|
|
RETURN 6
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "7")
|
|
RETURN 7
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "8")
|
|
RETURN 8
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "9")
|
|
RETURN 9
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "A")
|
|
RETURN 10
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "B")
|
|
RETURN 11
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "C")
|
|
RETURN 12
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "D")
|
|
RETURN 13
|
|
ENDIF
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "E")
|
|
RETURN 14
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "F")
|
|
RETURN 15
|
|
ENDIF
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "G")
|
|
RETURN 16
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "H")
|
|
RETURN 17
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "I")
|
|
RETURN 18
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "J")
|
|
RETURN 19
|
|
ENDIF
|
|
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "K")
|
|
RETURN 20
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "L")
|
|
RETURN 21
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "M")
|
|
RETURN 22
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "N")
|
|
RETURN 23
|
|
ENDIF
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "O")
|
|
RETURN 24
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "P")
|
|
RETURN 25
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "Q")
|
|
RETURN 26
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "R")
|
|
RETURN 27
|
|
ENDIF
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "S")
|
|
RETURN 28
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "T")
|
|
RETURN 29
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "U")
|
|
RETURN 30
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "V")
|
|
RETURN 31
|
|
ENDIF
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "W")
|
|
RETURN 32
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "X")
|
|
RETURN 33
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "Y")
|
|
RETURN 34
|
|
ENDIF
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "Z")
|
|
RETURN 35
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
IF ARE_STRINGS_EQUAL (passedSingleCharacter, "z") //error character
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
SCRIPT_ASSERT ("SL assert 1. A missing or invalid speaker listener value has been detected. Use 0-9 and A-Z only.")
|
|
|
|
#endif
|
|
|
|
RETURN -1
|
|
|
|
ELSE
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
SCRIPT_ASSERT ("SL assert 2. A missing or invalid speaker listener value has been detected. Use 0-9 and A-Z only.")
|
|
|
|
#endif
|
|
|
|
RETURN -1
|
|
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Steve Taylor: Ok.
|
|
// DJ Jones 19 Mar 2012
|
|
// Pulled these globals out of Construct_Multipart_Phonecall_Roots_and_Specifics so that
|
|
// PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_N_LINES can set them without modifying strings.
|
|
PROC Set_Multipart_Phonecall_Globals(INT Passed_Num_of_Multiparts)
|
|
|
|
g_TotalMultiPartsHolder = Passed_Num_of_Multiparts
|
|
g_IsThisConversationForPhoneHolder = TRUE //this conversation is a phonecall.
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
g_PlayingSingleLineHolder = FALSE
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PROC Construct_Multipart_Phonecall_Roots_and_Specifics(INT Passed_Num_of_Multiparts, STRING &ConstructSegmentLabel[], STRING &ConstructSpecificLabel[],
|
|
STRING FirstPassedRoot = NULL, STRING FirstPassedSpecific = NULL,
|
|
STRING SecondPassedRoot = NULL, STRING SecondPassedSpecific = NULL,
|
|
STRING ThirdPassedRoot = NULL, STRING ThirdPassedSpecific = NULL,
|
|
STRING FourthPassedRoot = NULL, STRING FourthPassedSpecific = NULL,
|
|
STRING FifthPassedRoot = NULL, STRING FifthPassedSpecific = NULL,
|
|
STRING SixthPassedRoot = NULL, STRING SixthPassedSpecific = NULL,
|
|
STRING SeventhPassedRoot = NULL, STRING SeventhPassedSpecific = NULL)
|
|
|
|
|
|
Set_Multipart_Phonecall_Globals(Passed_Num_of_Multiparts)
|
|
|
|
ConstructSegmentLabel[0] = FirstPassedRoot
|
|
ConstructSpecificLabel[0] = FirstPassedSpecific
|
|
|
|
ConstructSegmentLabel[1] = SecondPassedRoot
|
|
ConstructSpecificLabel[1] = SecondPassedSpecific
|
|
|
|
ConstructSegmentLabel[2] = ThirdPassedRoot
|
|
ConstructSpecificLabel[2] = ThirdPassedSpecific
|
|
|
|
ConstructSegmentLabel[3] = FourthPassedRoot
|
|
ConstructSpecificLabel[3] = FourthPassedSpecific
|
|
|
|
ConstructSegmentLabel[4] = FifthPassedRoot
|
|
ConstructSpecificLabel[4] = FifthPassedSpecific
|
|
|
|
ConstructSegmentLabel[5] = SixthPassedRoot
|
|
ConstructSpecificLabel[5] = SixthPassedSpecific
|
|
|
|
ConstructSegmentLabel[6] = SeventhPassedRoot
|
|
ConstructSpecificLabel[6] = SeventhPassedSpecific
|
|
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//After declaring a local instance of the peds speech struct, e.g structPedsForConversation MyLocalPedStruct, use this procedure to add a ped for dialogue.
|
|
//The native script conversation commands require an int identifier, a ped index and a voice id. Passing these in here will automate the process for multiple lines.
|
|
|
|
//Parameter list is as follows:
|
|
|
|
//YourLocalPedStruct - the name of the struct instance you initially declared. MyLocalPedStruct for example.
|
|
|
|
//YourNumberID - an int which is currently between 0 and 9 which directly corresponds to the speaker listener columns in DialogueStar / the old dialogue sheets.
|
|
//The current player should always be assigned to 0. You should check which character is currently being controlled as the player before adding the ped for dialogue so the voices match up.
|
|
|
|
//N.B I might be able to put in failsafe stuff in the future to make sure that the player's voice matches the current controlled character.
|
|
|
|
|
|
//YourPedIndex - the ped index of the character that you created. IMPORTANT! If your ped physically exists in the gameworld, i.e for an in-car conversation, then make sure you add the ped for
|
|
//dialogue AFTER you have created the ped in your script, not just after you declare the index. Similarly, if your ped does not physically exist, i.e for a phonecall, then pass in NULL
|
|
//as the ped_index and make sure the AudioType is set to FRONTEND for that speaker's lines.
|
|
|
|
//YourVoiceID - a string that refers to the audio voice id of that particular ped.
|
|
|
|
//PedPlayAmbientAnims - defines, if necessary, whether this ped can play ambient anims. By default this is set to FALSE.
|
|
|
|
|
|
|
|
|
|
|
|
PROC ADD_PED_FOR_DIALOGUE (structPedsForConversation &YourLocalPedStruct, INT YourNumberID, PED_INDEX YourPedIndex,
|
|
STRING YourVoiceID, BOOL PedPlayAmbientAnims = FALSE, BOOL PedCanUseAutoLookAt = TRUE)
|
|
|
|
|
|
|
|
IF YourLocalPedStruct.PedInfo[YourNumberID].ActiveInConversation = TRUE
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
cdPrintstring("DIALOG_PUB - Overwriting ped at position ")
|
|
cdPrintint(YourNumberID)
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
ENDIF
|
|
|
|
|
|
YourLocalPedStruct.PedInfo[YourNumberID].Index = YourPedIndex
|
|
YourLocalPedStruct.PedInfo[YourNumberID].VoiceId = YourVoiceID
|
|
|
|
|
|
YourLocalPedStruct.PedInfo[YourNumberID].ActiveInConversation = TRUE
|
|
YourLocalPedStruct.PedInfo[YourNumberID].PlayAmbientAnims = PedPlayAmbientAnims
|
|
|
|
YourLocalPedStruct.PedInfo[YourNumberID].CanUseAutoLookAt = PedCanUseAutoLookAt
|
|
|
|
|
|
|
|
|
|
//Disable these for multiplayer 225450 , 1135424
|
|
IF NOT g_bInMultiplayer
|
|
|
|
IF NOT IS_PED_INJURED (YourPedIndex)
|
|
IF YourLocalPedStruct.PedInfo[YourNumberID].PlayAmbientAnims = FALSE
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS (YourPedIndex, FALSE)
|
|
ELSE
|
|
SET_PED_CAN_PLAY_AMBIENT_ANIMS (YourPedIndex, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
IF NOT IS_PED_INJURED (YourPedIndex)
|
|
IF YourLocalPedStruct.PedInfo[YourNumberID].CanUseAutoLookAt = FALSE
|
|
SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT (YourPedIndex, FALSE)
|
|
ELSE
|
|
SET_PED_CAN_USE_AUTO_CONVERSATION_LOOKAT (YourPedIndex, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintstring("DIALOG_PUB - ADD_PED_FOR_DIALOGUE called. Adding ped at position ")
|
|
cdPrintint(YourNumberID)
|
|
cdPrintstring(" with voice ")
|
|
cdPrintstring(YourVoiceID)
|
|
cdPrintstring(" who has a PED INDEX native int of ")
|
|
cdPrintint (NATIVE_TO_INT (YourLocalPedStruct.PedInfo[YourNumberID].Index))
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
//If you've created a speaker who is a NULL ped, usually that will just play FRONTEND. However you may wish to have the voice emanate from a specific locations in the game world.
|
|
//Pass in the speakernumber of the ped and a vector to do this. Currently only supporting one per conversation but can add others on request.
|
|
//Once you call this on a ped, it will be embedded within your local dialogue struct and apply to every subsequent conversation until you forcibly remove it with the
|
|
//REMOVE_VOICE_LOCATION_FOR_NULL_PED command.
|
|
|
|
PROC SET_VOICE_LOCATION_FOR_NULL_PED (structPedsForConversation &YourLocalPedStruct, INT YourSpeakerNumberID, VECTOR YourVoiceLocation)
|
|
|
|
YourLocalPedStruct.NullPed_Number_for_VoicePlacement = YourSpeakerNumberID
|
|
YourLocalPedStruct.NullPed_Vector_for_VoicePlacement = YourVoiceLocation
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - SET_VOICE_LOCATION_FOR_NULL_PED called. SpeakerNumber passed was ")
|
|
cdPrintint(YourSpeakerNumberID)
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
PROC REMOVE_VOICE_LOCATION_FOR_NULL_PED (structPedsForConversation &YourLocalPedStruct, INT YourSpeakerNumberID)
|
|
|
|
YourLocalPedStruct.NullPed_Number_for_VoicePlacement = -99
|
|
YourLocalPedStruct.NullPed_Vector_for_VoicePlacement = <<0.0, 0.0, 0.0>>
|
|
|
|
//Need this in case of expansion
|
|
IF YourSpeakerNumberID < 0
|
|
SCRIPT_ASSERT ("Passed in invalid speaker number for REMOVE_VOICE_LOCATION...")
|
|
ENDIF
|
|
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - REMOVE_VOICE_LOCATION_FOR_NULL_PED called. SpeakerNumber passed was ")
|
|
cdPrintint(YourSpeakerNumberID)
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//This will remove a ped from your dialogue struct. If your ped did exist in the gameworld they may perhaps be killed during the course of the mission.
|
|
//If a you try to add a gameworld ped, i.e not just a disembodied voice, who no longer exists the game will throw up an assert.
|
|
|
|
PROC REMOVE_PED_FOR_DIALOGUE (structPedsForConversation &YourLocalPedStruct, INT YourNumberID)
|
|
|
|
|
|
IF YourLocalPedStruct.PedInfo[YourNumberID].ActiveInConversation = TRUE
|
|
|
|
|
|
|
|
YourLocalPedStruct.PedInfo[YourNumberID].ActiveInConversation = FALSE
|
|
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
cdPrintstring("DIALOG_PUB - REMOVE_PED_FOR_DIALOGUE called. Ped at position ")
|
|
cdPrintint(YourNumberID)
|
|
cdPrintstring(" has been removed from your dialogue struct.")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
|
|
ELSE
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
cdPrintstring("DIALOG_PUB - REMOVE_PED_FOR_DIALOGUE called but this ped is already inactive in conversation ")
|
|
cdPrintint(YourNumberID)
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//This function forces a character to call the player's cellphone and wait for him to answer before playing an automated phonecall conversation.
|
|
|
|
//USER INFO:
|
|
|
|
//WhichChar should be a character listed in the character sheet - check charsheet_globals.sch or your script editor for the latest list of characters.
|
|
//The name of the character is cross referenced and this is displayed on the phone.
|
|
|
|
//WhichBlockOfTextToLoad is the text block you'd normally load into the game's additional text slot for dialogue. It's in the top left of the XLS.
|
|
//The text is loaded automatically by this function so you don't have to worry about it.
|
|
|
|
|
|
//WhichRootlabel is the name of the text segment / conversation root you wish to play from Dialogue Star. It can be a group of one or many lines. The lines are manipulated
|
|
//by me to produce a conversation from one initial Root label. Think of it as the root of a conversation.
|
|
|
|
//Priority is self-explanatory. Lower priority calls can be interrupted. Please use CONV_PRIORITY_VERY_HIGH for just now...
|
|
|
|
|
|
//BOOL ShouldDisplaySubtitles and BOOL ShouldAddToBriefScreen are self-explanatory. Forget about these unless you want to specifically alter the default behaviour.
|
|
|
|
|
|
//The BOOL IsThisInboundForCellphone can be safely left out of your function call. It defaults to TRUE and should only be set to FALSE in exceptional circumstances as this
|
|
//prevents the "waiting on you to answer" screen from displaying.
|
|
|
|
|
|
//Example usage: CHAR_CALL_PLAYER_CELLPHONE(CHAR_LESTER, "HST1_CALL3A", CONV_PRIORITY_VERY_HIGH)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL CHAR_CALL_PLAYER_CELLPHONE (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = TRUE)
|
|
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = FALSE //necessary so that any higher priority call doesn't set itself up as requiring a response if the interrupted call did.
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Human to Human Chat Calls - These functions specifically go through the dialogue handling system.
|
|
|
|
|
|
|
|
//This will launch an incoming call from the chosen player name, specified in the first string parameter.
|
|
FUNC BOOL INITIATE_INCOMING_CHAT_CALL (STRING WhichChatCallerString, enumConversationPriority PassedConversationPriority = CONV_PRIORITY_NON_CRITICAL_CALL,
|
|
BOOL IsThisInboundForCellphone = TRUE)
|
|
|
|
|
|
|
|
|
|
g_ChatCallerStringHolder = WhichChatCallerString
|
|
|
|
|
|
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = TRUE
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
cdPrintString ("CHAT_CALL assignment 21 - HOLDER has been set to TRUE")
|
|
cdPrintnl()
|
|
cdPrintnl()
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = FALSE //necessary so that any higher priority call doesn't set itself up as requiring a response if the interrupted call did.
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus ("DUMMY", PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//This will safely terminate any incoming chat call once it has been accepted. Prior to this Hang_up_and_put_away_phone() should be used.
|
|
PROC SET_INCOMING_CHAT_CALL_SETUP_AS_FINISHED()
|
|
|
|
IF g_IsThisAnMPChatCall
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
cdPrintstring ("DIALOG_PUB - Request to SET_INCOMING_CHAT_CALL_SETUP_AS_FINISHED. Will remove phone and free dialogue system. ")
|
|
cdPrintnl()
|
|
|
|
cdPrintString ("g_IsThisAnMPChatCall assigned to false from SET_INCOMING_CHAT_CALL_SETUP_AS_FINISHED()... 2111525")
|
|
cdPrintnl()
|
|
|
|
#endif
|
|
|
|
g_IsThisAnMPChatCall = FALSE
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
cdPrintstring ("DIALOG_PUB - Request to SET__INCOMING_CHAT_CALL_SETUP_AS_FINISHED but no chat call is currently set up.")
|
|
cdPrintnl()
|
|
|
|
#endif
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//The same as above but forces the player to answer the call.
|
|
|
|
FUNC BOOL CHAR_CALL_PLAYER_CELLPHONE_FORCE_ANSWER (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = TRUE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = TRUE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = FALSE //necessary so that any higher priority call doesn't set itself up as requiring a response if the interrupted call did.
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//Create an outbound phonecall - the phone can be forced onscreen by default which brings up the appropriate calling / talking screens for that contact.
|
|
|
|
//By not forcing the phone onscreen, this function can be used in conjunction with IS_CALLING_CONTACT to play an appropriate answerphone message or
|
|
//flow phonecall by any checking script. If the player is pro-actively calling a contact, the phone must already be in hand and onscreen
|
|
|
|
FUNC BOOL PLAYER_CALL_CHAR_CELLPHONE (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = FALSE //necessary so that any higher priority call doesn't set itself up as requiring a response if the interrupted call did.
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL PLAYER_INITIATE_CHAT_CALL (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
|
|
//Critical! This must be specified as a chat call.
|
|
g_IsThisAnMPChatCallHolder = TRUE
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
cdPrintString ("CHAT_CALL assignment 23 - HOLDER has been set to TRUE")
|
|
cdPrintnl()
|
|
cdPrintnl()
|
|
|
|
#endif
|
|
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = FALSE //necessary so that any higher priority call doesn't set itself up as requiring a response if the interrupted call did.
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// Shouldn't be used by other scripts. Here for the convenience of the PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_N_LINES public functions.
|
|
|
|
PROC Player_Call_Char_Multipart_Setup()
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = FALSE //necessary so that any higher priority call doesn't set itself up as requiring a response if the interrupted call did.
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
//Create an outbound phonecall - the phone can be forced onscreen by default which brings up the appropriate calling / talking screens for that contact.
|
|
//This allows the phonecall to be constructed from single lines from different conversation blocks from the same dstar page. They must share the same AUD block!
|
|
FUNC BOOL PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_2_LINES (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad,
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
Player_Call_Char_Multipart_Setup()
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Phonecall_Roots_and_Specifics (2, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel)
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
//RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Special case for friend activity phonecalls.
|
|
|
|
FUNC BOOL CHAR_CALL_PLAYER_CELLPHONE_MULTIPART_WITH_2_LINES_WITH_2_LINE_REPLIES (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad,
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
STRING QuestionGodTextLabel,
|
|
STRING FirstRootYesReplyLabel, STRING FirstSpecificYesReplyLabel,
|
|
STRING SecondRootYesReplyLabel, STRING SecondSpecificYesReplyLabel,
|
|
STRING FirstRootNoReplyLabel, STRING FirstSpecificNoReplyLabel,
|
|
STRING SecondRootNoReplyLabel, STRING SecondSpecificNoReplyLabel,
|
|
|
|
enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = TRUE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
Player_Call_Char_Multipart_Setup()
|
|
|
|
|
|
//Overwrite certain parts of Player_Call_Char_Multipart_Setup for this special case.
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Phonecall_Roots_and_Specifics (2, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel)
|
|
|
|
|
|
|
|
|
|
|
|
g_TotalReplyMultipartsHolder = 2
|
|
|
|
//May optimise this by re-using parts of existing Multipart[30] array near end of development. Here for proof of concept in the interim.
|
|
g_Multipart_YesSegmentLabelHolder[0] = FirstRootYesReplyLabel
|
|
g_Multipart_YesSpecificLabelHolder[0] = FirstSpecificYesReplyLabel
|
|
|
|
|
|
g_Multipart_YesSegmentLabelHolder[1] = SecondRootYesReplyLabel
|
|
g_Multipart_YesSpecificLabelHolder[1] = SecondSpecificYesReplyLabel
|
|
|
|
|
|
|
|
|
|
g_Multipart_NoSegmentLabelHolder [0] = FirstRootNoReplyLabel
|
|
g_Multipart_NoSpecificLabelHolder[0] = FirstSpecificNoReplyLabel
|
|
|
|
|
|
g_Multipart_NoSegmentLabelHolder [1] = SecondRootNoReplyLabel
|
|
g_Multipart_NoSpecificLabelHolder[1] = SecondSpecificNoReplyLabel
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
//RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_3_LINES (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad,
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
STRING ThirdRootLabel, STRING ThirdSpecificLabel,
|
|
enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
Player_Call_Char_Multipart_Setup()
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Phonecall_Roots_and_Specifics (3, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel,
|
|
ThirdRootLabel, ThirdSpecificLabel )
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
//RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_4_LINES (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad,
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
STRING ThirdRootLabel, STRING ThirdSpecificLabel,
|
|
STRING FourthRootLabel, STRING FourthSpecificLabel,
|
|
enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
Player_Call_Char_Multipart_Setup()
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Phonecall_Roots_and_Specifics (4, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel,
|
|
ThirdRootLabel, ThirdSpecificLabel, FourthRootLabel, FourthSpecificLabel)
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
//RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
// Need to set up the roots and specifics as string arrays, but globals are modified as in other multipart cellphone calls.
|
|
FUNC BOOL PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_N_LINES (INT iLines, structPedsForConversation &YourPedStruct, enumCharacterList WhichChar,
|
|
STRING WhichBlockOfTextToLoad, STRING& RootLabels[], STRING& SpecificLabels[],
|
|
enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES,
|
|
enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
Player_Call_Char_Multipart_Setup()
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
ELSE
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
ENDIF
|
|
|
|
Set_Multipart_Phonecall_Globals(iLines)
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart(RootLabels, SpecificLabels, PassedConversationPriority, IsThisInboundForCellphone)
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//This allows an outgoing call of N number of lines to wait for a response once the initial N batch of lines have concluded. See bug 685516.
|
|
//You must specify the QuestionGodTextLabel so that a question will appear on the phone prompting a response. This can be loaded as part of your mission text block.
|
|
//This function should be used in conjunction with SET_UP_MULTIPART_WITH_N_LINES_YES_NO_BRANCHES.
|
|
//Example usage of a 10 line multipart call that waits for a response to CELL_291's question and plays a 6 line YES or a 7 line NO branch:
|
|
|
|
//IF PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_N_LINES_REQUIRES_RESPONSE (10, MyLocalPedStruct, CHAR_DR_FRIEDLANDER, "RECREAU", TestRoots, TestLabels, "CELL_291", CONV_PRIORITY_VERY_HIGH, TRUE, DISPLAY_SUBTITLES, DO_ADD_TO_BRIEF_SCREEN, FALSE)
|
|
//
|
|
// SET_UP_MULTIPART_WITH_N_LINES_YES_NO_BRANCHES (6, 7, TestYesRoots, TestYesSpecifics, TestNoRoots, TestNoSpecifics)
|
|
//
|
|
//ENDIF
|
|
|
|
FUNC BOOL PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_N_LINES_REQUIRES_RESPONSE (INT iLines, structPedsForConversation &YourPedStruct, enumCharacterList WhichChar,
|
|
STRING WhichBlockOfTextToLoad, STRING& RootLabels[], STRING& SpecificLabels[], STRING QuestionGodTextLabel,
|
|
enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES,
|
|
enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
Player_Call_Char_Multipart_Setup()
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
ELSE
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
ENDIF
|
|
|
|
Set_Multipart_Phonecall_Globals(iLines)
|
|
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
|
|
g_TotalReplyMultipartsHolder = 3 //Makes sure dialogue handler is primed to expect a multipart reply that is not a two-line friend activity special case.
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart(RootLabels, SpecificLabels, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Used in conjunction with PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_N_LINES_REQUIRES_RESPONSE.
|
|
//Example usage of a 10 line multipart call that waits for a response to CELL_291's question and plays a 6 line YES or a 7 line NO branch:
|
|
//IF PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_N_LINES_REQUIRES_RESPONSE (10, MyLocalPedStruct, CHAR_DR_FRIEDLANDER, "RECREAU", TestRoots, TestLabels, "CELL_291", CONV_PRIORITY_VERY_HIGH, TRUE, DISPLAY_SUBTITLES, DO_ADD_TO_BRIEF_SCREEN, FALSE)
|
|
//
|
|
// SET_UP_MULTIPART_WITH_N_LINES_YES_NO_BRANCHES (6, 7, TestYesRoots, TestYesSpecifics, TestNoRoots, TestNoSpecifics)
|
|
//
|
|
//ENDIF
|
|
|
|
|
|
FUNC BOOL SET_UP_MULTIPART_WITH_N_LINES_YES_NO_BRANCHES (INT iYesLines, INT iNoLines, STRING& RootYesLabels[], STRING& SpecificYesLabels[], STRING& RootNoLabels[], STRING& SpecificNoLabels[])
|
|
|
|
|
|
|
|
|
|
IF IS_BIT_SET (BitSet_CellphoneDisplay_Continued, g_BSC_UNIVERSAL_REPLIES_FOR_N_LINES_HAS_BEEN_SET)
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
cdPrintstring ("DIALOG_PUB g_BS_UNIVERSAL_REPLIES_FOR_N_LINES has already been set for this conversation phase.")
|
|
cdPrintnl()
|
|
|
|
#endif
|
|
|
|
RETURN FALSE
|
|
|
|
|
|
ELSE
|
|
|
|
|
|
//Set critical bit. This is cleared in dialogue_private's common cleanup.
|
|
SET_BIT (BitSet_CellphoneDisplay_Continued, g_BSC_UNIVERSAL_REPLIES_FOR_N_LINES_HAS_BEEN_SET)
|
|
|
|
|
|
|
|
|
|
g_i_Total_UniversalYesReplies = iYesLines
|
|
|
|
INT tempYIndex = 0
|
|
|
|
|
|
WHILE tempYIndex < (iYesLines + 1)
|
|
|
|
g_Multipart_Universal_YesRoots[tempYIndex] = RootYesLabels[tempYindex]
|
|
g_Multipart_Universal_YesSpecifics[tempYIndex] = SpecificYesLabels[tempYindex]
|
|
|
|
tempYIndex ++
|
|
|
|
ENDWHILE
|
|
|
|
|
|
|
|
g_i_Total_UniversalNoReplies = iNoLines
|
|
|
|
INT tempNIndex = 0
|
|
|
|
|
|
WHILE tempNIndex < (iNoLines + 1)
|
|
|
|
g_Multipart_Universal_NoRoots[tempNIndex] = RootNoLabels[tempNindex]
|
|
g_Multipart_Universal_NoSpecifics[tempNIndex] = SpecificNoLabels[tempNindex]
|
|
|
|
tempNIndex ++
|
|
|
|
ENDWHILE
|
|
|
|
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
cdPrintstring ("DIALOG_PUB g_BS_UNIVERSAL_REPLIES_FOR_N_LINES yes and no branches have been set.")
|
|
cdPrintnl()
|
|
|
|
PRINTLN("\nDIALOG_PUB [", GET_THIS_SCRIPT_NAME(), "] has set universal yes no branch replies.")
|
|
|
|
#endif
|
|
|
|
RETURN TRUE
|
|
|
|
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
/*
|
|
PROC SET_UP_MULTIPARTS_WITH_N_LINES_NO_BRANCH (INT iLines, STRING& RootYesLabels[], STRING& SpecificYesLabels)
|
|
|
|
|
|
//Change to function and check for universal bit here
|
|
|
|
|
|
//Would set universal bit here - it would then be cleaned up in dialogue common cleanup.
|
|
|
|
|
|
g_i_Total_UniversalNoReplies = iNoLines
|
|
|
|
INT tempNIndex = 0
|
|
|
|
|
|
WHILE tempNIndex < (iLines + 1)
|
|
|
|
g_Multipart_Universal_NoRoots[tempNIndex] = RootNoLabels[tempNindex]
|
|
g_Multipart_Universal_NoSpecifics[tempNIndex] = RootNoLabels[tempNindex]
|
|
|
|
tempInt ++
|
|
|
|
ENDWHILE
|
|
|
|
|
|
ENDPROC
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//TEXT_LABEL_23 g_Multipart_UniversalYes[30]
|
|
//TEXT_LABEL_23 g_Multipart_UniversalNo[30]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wkik-ed
|
|
|
|
//Allows the user to pass in all the details required for a call to the 911 operator. Note the default behaviour of this function has changed slightly, the phone is not forced in hand.
|
|
|
|
//WhichRootLabel refers to the text from the dialogue sheet that describes "The operator answering your call and asking what service you require"
|
|
|
|
//STRING QuestionGodTextLabel should be a god text label from the .gxt file which poses a short question to be displayed on the phone. It is not part of the conversation or dialogue.
|
|
//e.g "Which service?"
|
|
|
|
//The phone system then offers a onscreen choice of Ambulance ( Paramedics ), Fire or Police. The appropriate label is then used to select the correct response call from the dialogue sheet.
|
|
|
|
|
|
FUNC BOOL PLAYER_CALL_EMERGENCY_SERVICES (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
STRING QuestionGodTextLabel, STRING AmbRootLabel, STRING FireRootLabel, STRING PoliceRootLabel,
|
|
BOOL ShouldPhoneBeForcedOnScreen = FALSE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
|
|
g_IsEmergencyServicesCallHolder = TRUE
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
g_AmbulanceSegmentLabelHolder = AmbRootLabel
|
|
|
|
g_FireSegmentLabelHolder = FireRootLabel
|
|
|
|
g_PoliceSegmentLabelHolder = PoliceRootLabel
|
|
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
|
|
//Creates a conference call with two contacts involved, the second parameter should also be taken from the charsheet. Both these names will appear on the phone's "calling" screen during a phonecall.
|
|
|
|
FUNC BOOL PLAYER_MAKE_CONFERENCE_CALL (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, enumCharacterList WhichSecondChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_AdditionalContactInvolvedinCallHolder = WhichSecondChar
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = TRUE //this is a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = FALSE //necessary so that any higher priority call doesn't set itself up as requiring a response if the interrupted call did.
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
|
|
//Same as CHAR_CALL_PLAYER_CELLPHONE but the call will wait on a yes / no response from the player after the first conversation Root
|
|
//before playing the next appropriate segment based on the player's choice
|
|
|
|
//STRING WhichBlockOfTextToLoad is the text block you'd normally load into the game's additional text slot for dialogue. It's in the top left of the XLS.
|
|
//The text is loaded automatically by this function so you don't have to worry about it.
|
|
|
|
|
|
//STRING WhichRootLabel STRING YesRootLabel, STRING NoRootLabel are all Root labels from the XLS sheet. These are manipulated by me to
|
|
//produce the conversation. WhichRoot label is the first conversation which ends on a question. The YesRootLabel is the conversation branch
|
|
//that would be followed if the player selects "YES" on the phone, and NoRootLabel is the negative answer branch.
|
|
|
|
//STRING QuestionGodTextLabel should be a god text label from the .gxt file which poses a short question to be displayed on the phone. It is not part
|
|
//of the conversation and is not dialogue.
|
|
|
|
//e.g If you have a branching YES / NO conversation that finished the initial Root with something like:
|
|
|
|
//"Hey Boss, do you want me to get pics and put the screws on this guy?"
|
|
|
|
//then you should have a god text label kept in the same block and text file as your other mission god text which says something like:
|
|
|
|
//"Blackmail architect?"
|
|
|
|
//As this is intended to be displayed on the phone, please keep the question very concise ( two to three words max ) and remember the question mark.
|
|
|
|
|
|
|
|
FUNC BOOL CHAR_CALL_PLAYER_CELLPHONE_WITH_REPLIES (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority, STRING QuestionGodTextLabel, STRING YesRootLabel, STRING NoRootLabel,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = TRUE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
g_YesSegmentLabelHolder = YesRootLabel
|
|
|
|
g_NoSegmentLabelHolder = NoRootLabel
|
|
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//The same as above but forces the player to answer the call.
|
|
|
|
FUNC BOOL CHAR_CALL_PLAYER_CELLPHONE_WITH_REPLIES_FORCE_ANSWER (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority, STRING QuestionGodTextLabel, STRING YesRootLabel, STRING NoRootLabel,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = TRUE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = TRUE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
g_YesSegmentLabelHolder = YesRootLabel
|
|
|
|
g_NoSegmentLabelHolder = NoRootLabel
|
|
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Legacy. Please use CHAR_CALL_PLAYER_CELLPHONE_WITH_MP_JOB_OFFER_AUTO_PICKUP
|
|
/*
|
|
FUNC BOOL CHAR_CALL_PLAYER_CELLPHONE_WITH_MP_JOB_OFFER_FORCE_ANSWER (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority, STRING QuestionGodTextLabel,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = TRUE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMpJobOfferHolder = TRUE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
FUNC BOOL CHAR_CALL_PLAYER_CELLPHONE_WITH_MP_JOB_OFFER_AUTO_PICKUP (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority, STRING QuestionGodTextLabel,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = TRUE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = TRUE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL CHAR_CALL_PLAYER_CELLPHONE_WITH_MP_JOB_OFFER (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority, STRING QuestionGodTextLabel,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = TRUE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = TRUE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
FUNC BOOL CHAR_CALL_PLAYER_CELLPHONE_WITH_MP_JOB_OFFER_FORCE_ANSWER (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority, STRING QuestionGodTextLabel,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = TRUE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = TRUE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = TRUE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
|
|
//Same as PLAYER_CALL_CHAR_CELLPHONE but the call will wait on a yes / no response from the player after the first conversation segment before playing
|
|
//the next appropriate segment.
|
|
|
|
//STRING WhichRootLabel STRING YesRootLabel, STRING NoRootLabel are all Root labels from the XLS sheet. These are manipulated by me to produce the conversation.
|
|
|
|
//STRING QuestionGodTextLabel should be a god text label from the .gxt file which poses a short question to be displayed on the phone. It is not part of the conversation or dialogue.
|
|
//e.g Blackmail Architect? See the above function for more info.
|
|
|
|
FUNC BOOL PLAYER_CALL_CHAR_CELLPHONE_WITH_REPLIES (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority, STRING QuestionGodTextLabel, STRING YesRootLabel, STRING NoRootLabel,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
g_YesSegmentLabelHolder = YesRootLabel
|
|
|
|
g_NoSegmentLabelHolder = NoRootLabel
|
|
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PROC SET_DYNAMIC_BRANCH_FOR_ONGOING_CALL (STRING WhichBlockOfTextToLoad, STRING WhichRootLabel)
|
|
|
|
|
|
IF IS_MOBILE_PHONE_CALL_ONGOING()
|
|
|
|
g_PrepareCallForDynamicBranch = TRUE
|
|
g_DynamicBlockToLoad = WhichBlockOfTextToLoad
|
|
g_DynamicBranch_Root = WhichRootLabel
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Dynamic branch has been set via public script function with root ")
|
|
cdPrintstring(g_DynamicBranch_Root)
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - WARNING! Dynamic branch can only be set during an ongoing call.")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
PROC PLAY_DYNAMIC_BRANCH (bool b_FinishCurrentLine = TRUE)
|
|
|
|
|
|
|
|
STOP_SCRIPTED_CONVERSATION (b_FinishCurrentLine)
|
|
|
|
|
|
IF b_FinishCurrentLine
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Dynamic branch will play after current line concludes. ")
|
|
cdPrintstring(g_DynamicBranch_Root)
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Dynamic branch will play immediately. Not finishing current line.")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
PROC CANCEL_DYNAMIC_BRANCH_FOR_ONGOING_CALL()
|
|
|
|
|
|
IF g_PrepareCallForDynamicBranch = TRUE
|
|
|
|
g_PrepareCallForDynamicBranch = FALSE
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Dynamic branch cancelled!")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Dynamic branch not currently set, no cancel action required.")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
FUNC BOOL HAS_DYNAMIC_BRANCH_BEEN_SET()
|
|
|
|
|
|
IF g_PrepareCallForDynamicBranch = TRUE
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
|
|
//Returns TRUE if a cellphone call has finished. You can call this in your scripts after successfully launching a phonecall, i.e any "create phonecall" function returns TRUE,
|
|
//in order to tell whether or not your call has concluded or not.
|
|
FUNC BOOL HAS_CELLPHONE_CALL_FINISHED()
|
|
|
|
IF g_ConversationStatus = CONV_STATE_FREE
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//"Interrupted" function This will return TRUE in the following circumstances for the immediately preceding call that has gotten through to the phone:
|
|
// - if an incoming call is rejected, i.e you choose not to answer.
|
|
// - if any call, outgoing or incoming, has connected, i.e you are in conversation and then you hang up before the conversation concludes naturally.
|
|
// - if an incoming call is waiting for an answer or in connected conversation and the player enters water or is damaged in any way.*
|
|
// - if an outgoing call is in connected conversation and the player enters water or is damaged in any way*
|
|
///* it's proposed that Franklin has a waterproof phone so the water clause may not apply to him when he's under player control.
|
|
|
|
//Important! WAS_LAST_CELLPHONE_CALL_INTERRUPTED will return FALSE again when the following happens.
|
|
// - Any other incoming call gets through to the cellphone. As soon as the phone rings at the player's end, it will revert to FALSE.
|
|
// - An outgoing call reaches connected conversation. Simply dialling a number on the phone and waiting for connection will not clear a TRUE state. This prevents the player
|
|
// from quickly wiping the interrupted flag.
|
|
|
|
|
|
|
|
FUNC BOOL WAS_LAST_CELLPHONE_CALL_INTERRUPTED()
|
|
|
|
IF g_LastCellphoneCallInterrupted = TRUE
|
|
OR g_LastInboundCallRejected = TRUE //classing a call that has been actively or automatically rejected as interrupted also.
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed.
|
|
//Check this after an inbound cellphone call has been successfully launched i.e returns true and the player phone is ringing.
|
|
//If you just want to make sure the phone call is answered you can use this.
|
|
//Alternatively you may want to use the FORCE_ANSWER variants.
|
|
FUNC BOOL CHECK_CELLPHONE_LAST_CALL_REJECTED()
|
|
|
|
IF g_LastInboundCallRejected
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
//This specifically checks for the phonecall being hung up by the joypad during the dialogue portion of a phonecall. It's not the same as rejected.
|
|
//"Rejected" means the player has chosen not to answer at all. So you may want to use a combination of both these functions to make sure the call is answered
|
|
//and not deliberately hung up during it. Accidental interruptions will not make this return true!
|
|
|
|
FUNC BOOL WAS_LAST_PHONECALL_HUNG_UP_BY_JOYPAD()
|
|
|
|
IF g_LastCallHungupDuringCallViaJoypad
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
//This will specifically check for the phone being in ATTEMPTING or ONGOING call states but script has called HANG_UP_AND_PUT_AWAY_PHONE().
|
|
//The bit is cleared the next time a phonecall occurs.
|
|
FUNC BOOL WAS_LAST_PHONECALL_ABORTED_BY_SCRIPT_HANG_UP()
|
|
|
|
IF IS_BIT_SET (BitSet_CellphoneDisplay_Continued, g_BSC_LAST_CALL_ABORTED_DUE_TO_SCRIPT_HANGUP)
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//This will disable the user's ability to hang up a call. For safety's sake you must call this with TRUE after your CHAR_CALL... or PLAYER_CALL... returns true.
|
|
//The hangup is re-enabled internally by me just before any requested phonecall signals to the asking script that it can play. ( via CheckCurrentConversationStatus )
|
|
PROC DISABLE_HANGUP_FOR_THIS_CALL (BOOL bDisableHangup = FALSE)
|
|
|
|
|
|
IF bDisableHangup = TRUE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Disabled hangup for this call!")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
SET_BIT (BitSet_CellphoneDisplay, g_BS_DISABLE_INCOMING_OR_OUTGOING_CALL_HANGUP)
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Enabled hangup for this call.")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
CLEAR_BIT (BitSet_CellphoneDisplay, g_BS_DISABLE_INCOMING_OR_OUTGOING_CALL_HANGUP)
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//This will disable the user's ability to hang up a call. For safety's sake you must call this with TRUE after your CHAR_CALL... or PLAYER_CALL... returns true.
|
|
//The hangup is re-enabled internally by me just before any requested phonecall signals to the asking script that it can play. ( via CheckCurrentConversationStatus )
|
|
PROC KEEP_MP_CALL_ACTIVE_ON_PAUSE_MENU(BOOL bKeepActiveOnPause = FALSE)
|
|
|
|
|
|
IF bKeepActiveOnPause = TRUE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Set KEEP_MP_CALL_ACTIVE_ON_PAUSE_MENU for this call.")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
SET_BIT (BitSet_CellphoneDisplay_Third, g_BSTHIRD_KEEP_MP_CALL_ACTIVE_ON_PAUSE_MENU)
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Removed KEEP_MP_CALL_ACTIVE_ON_PAUSE_MENU bit flag.")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
CLEAR_BIT (BitSet_CellphoneDisplay_Third, g_BSTHIRD_KEEP_MP_CALL_ACTIVE_ON_PAUSE_MENU)
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//If a WITH_REPLIES phone call is in the question state where it is waiting on a positive or negative response from the player, this will return TRUE.
|
|
//This can be used in conjunction with FORCE_NEGATIVE_RESPONSE to allow you to determine when the "wait for response" period started and allow you to timeout.
|
|
|
|
FUNC BOOL IS_CELLPHONE_CALL_WITH_REPLIES_WAITING_ON_USER_INPUT()
|
|
|
|
IF IS_BIT_SET (BitSet_CellphoneDisplay_Continued, g_BSC_CELLPHONE_WITH_REPLIES_WAITING_ON_USER_INPUT)
|
|
|
|
IF g_CallRequiringPlayerResponse = TRUE
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
//This will force a negative reply to any CALL_WITH_REPLIES. Should be used only as a timeout feature for when the user has not actively responded.
|
|
|
|
PROC FORCE_NEGATIVE_RESPONSE_TO_CALL_WITH_REPLIES (BOOL bForceNegative = FALSE)
|
|
|
|
|
|
IF bForceNegative = TRUE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Forced negative reply for this call!")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
SET_BIT (BitSet_CellphoneDisplay, g_BS_FORCE_CALL_WITH_REPLIES_NEGATIVE)
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Cleared negative reply for this call.")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
CLEAR_BIT (BitSet_CellphoneDisplay, g_BS_FORCE_CALL_WITH_REPLIES_NEGATIVE)
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Useful function to return the text label of the currently playing line of a conversation or phonecall. You can use this to tell when a certain line is playing by
|
|
//comparing the result with your chosen label via native command ARE_STRINGS_EQUAL. Won't work with multipart conversations.
|
|
|
|
FUNC TEXT_LABEL_23 GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL()
|
|
|
|
|
|
TEXT_LABEL_23 ReturnNull = "NULL"
|
|
|
|
|
|
IF g_ConversationStatus = CONV_STATE_PLAYING
|
|
|
|
INT ReturnInt
|
|
|
|
ReturnInt = GET_CURRENT_SCRIPTED_CONVERSATION_LINE()
|
|
|
|
|
|
//Temp!
|
|
// #if IS_DEBUG_BUILD
|
|
// IF ReturnInt > -1
|
|
//
|
|
// cdPrintstring("GCSCL is ")
|
|
// cdPrintInt(ReturnInt)
|
|
// cdPrintnl()
|
|
//
|
|
// DISPLAY_TEXT_WITH_LITERAL_STRING (0.3, 0.20, "STRING", g_ConversationLabels[ReturnInt])
|
|
//
|
|
// ENDIF
|
|
// #endif
|
|
|
|
|
|
ReturnInt = ReturnInt + g_DialogueAdjustment
|
|
|
|
|
|
//Temp!
|
|
// #if IS_DEBUG_BUILD
|
|
// IF ReturnInt > -1
|
|
//
|
|
// cdPrintstring("Adjusted int is ")
|
|
// cdPrintInt(ReturnInt)
|
|
// cdPrintnl()
|
|
//
|
|
// DISPLAY_TEXT_WITH_LITERAL_STRING (0.3, 0.25, "STRING", g_ConversationLabels[ReturnInt])
|
|
//
|
|
// ENDIF
|
|
// #endif
|
|
|
|
|
|
|
|
|
|
IF ReturnInt > -1 //need to check this to prevent potential array overrun if any delay takes place.
|
|
//DISPLAY_TEXT_WITH_LITERAL_STRING (0.4, 0.20, "STRING", g_ConversationLabels[ReturnInt])
|
|
|
|
|
|
RETURN g_ConversationLabels[ReturnInt]
|
|
|
|
ELSE
|
|
|
|
RETURN ReturnNull
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
RETURN ReturnNull
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
//Very similar to the above, but takes into account procedural speech line numbering (such as SFX_LOCATION and SFX_CODENAME used in MP Cop despatch )
|
|
|
|
FUNC TEXT_LABEL_23 GET_CURRENTLY_PLAYING_STANDARD_PROCEDURAL_CONVERSATION_LABEL()
|
|
|
|
|
|
TEXT_LABEL_23 ReturnNull = "NULL"
|
|
|
|
|
|
IF g_ConversationStatus = CONV_STATE_PLAYING
|
|
|
|
INT ReturnInt
|
|
|
|
ReturnInt = GET_CURRENT_UNRESOLVED_SCRIPTED_CONVERSATION_LINE()
|
|
|
|
|
|
//Temp!
|
|
// #if IS_DEBUG_BUILD
|
|
// IF ReturnInt > -1
|
|
//
|
|
// cdPrintstring("GCSCL is ")
|
|
// cdPrintInt(ReturnInt)
|
|
// cdPrintnl()
|
|
//
|
|
// DISPLAY_TEXT_WITH_LITERAL_STRING (0.3, 0.20, "STRING", g_ConversationLabels[ReturnInt])
|
|
//
|
|
// ENDIF
|
|
// #endif
|
|
|
|
|
|
ReturnInt = ReturnInt + g_DialogueAdjustment
|
|
|
|
|
|
//Temp!
|
|
// #if IS_DEBUG_BUILD
|
|
// IF ReturnInt > -1
|
|
//
|
|
// cdPrintstring("Adjusted int is ")
|
|
// cdPrintInt(ReturnInt)
|
|
// cdPrintnl()
|
|
//
|
|
// DISPLAY_TEXT_WITH_LITERAL_STRING (0.3, 0.25, "STRING", g_ConversationLabels[ReturnInt])
|
|
//
|
|
// ENDIF
|
|
// #endif
|
|
|
|
|
|
|
|
|
|
IF ReturnInt > -1 //need to check this to prevent potential array overrun if any delay takes place.
|
|
//DISPLAY_TEXT_WITH_LITERAL_STRING (0.4, 0.20, "STRING", g_ConversationLabels[ReturnInt])
|
|
|
|
|
|
RETURN g_ConversationLabels[ReturnInt]
|
|
|
|
ELSE
|
|
|
|
RETURN ReturnNull
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
RETURN ReturnNull
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Similar to GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_LABEL except it will return the NEXT valid subtitle label. So if a conversation has reached label 4, this will pass back label 5.
|
|
//If the next label should happen to be a audio sfx pause, then the next label will be checked. This is handy for interrupting a conversation, then resuming at a later point via
|
|
//fellow public function CREATE_CONVERSATION_FROM_SPECIFIC_LINE
|
|
|
|
FUNC TEXT_LABEL_23 GET_STANDARD_CONVERSATION_LABEL_FOR_FUTURE_RESUMPTION()
|
|
|
|
|
|
TEXT_LABEL_23 ReturnNull = "NULL"
|
|
|
|
|
|
IF g_ConversationStatus = CONV_STATE_PLAYING
|
|
|
|
INT ReturnInt, AdjustedInt
|
|
|
|
ReturnInt = GET_CURRENT_SCRIPTED_CONVERSATION_LINE()
|
|
|
|
|
|
/* Comment in to debug...
|
|
#if IS_DEBUG_BUILD
|
|
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB_TEST... Resumption Label Return Int is:")
|
|
cdPrintint (ReturnInt)
|
|
cdPrintstring(" g_DialogueAdjustment is:")
|
|
cdPrintint (g_DialogueAdjustment)
|
|
cdPrintnl()
|
|
|
|
#endif
|
|
*/
|
|
|
|
|
|
|
|
ReturnInt = ReturnInt + g_DialogueAdjustment
|
|
|
|
|
|
AdjustedInt = (ReturnInt + 1) //Get the next line label...
|
|
|
|
|
|
|
|
|
|
IF AdjustedInt > -1 AND ReturnInt > -1 //need to check this to prevent potential array overrun if any delay takes place.
|
|
//DISPLAY_TEXT_WITH_LITERAL_STRING (0.4, 0.20, "STRING", g_ConversationLabels[ReturnInt])
|
|
|
|
IF DOES_TEXT_LABEL_EXIST (g_ConversationLabels[AdjustedInt])
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintstring("DIALOG_PUB... Resumption Label is:")
|
|
cdPrintstring(g_ConversationLabels[AdjustedInt])
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
|
|
RETURN g_ConversationLabels[AdjustedInt] //Next subtitle label must exist, so can't be last line and can't be SFX pause. Safe to return.
|
|
|
|
ELSE
|
|
|
|
INT tempIndex = AdjustedInt
|
|
|
|
WHILE tempIndex < constConversationLabels
|
|
|
|
IF DOES_TEXT_LABEL_EXIST (g_ConversationLabels[tempIndex])
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB... Checked resumption label was audio SFX or pause, validated next actual subtitle label at ")
|
|
cdPrintint (tempIndex)
|
|
cdPrintstring(" which is:")
|
|
cdPrintstring(g_ConversationLabels[tempIndex])
|
|
cdPrintnl()
|
|
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
|
|
RETURN g_ConversationLabels[tempIndex]
|
|
|
|
tempIndex = constConversationLabels
|
|
|
|
ENDIF
|
|
|
|
tempIndex ++
|
|
|
|
ENDWHILE
|
|
|
|
|
|
|
|
//If we haven't found and returned another valid subtitle label by this point we can assume the conversation was already on the last line...
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintstring("DIALOG_PUB... Warning! Was already playing last line of current conversation when future resumption label was grabbed.")
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB... Returned null label. Empty conversation will cue if resumed.")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
|
|
//RETURN g_ConversationLabels[ReturnInt] //Just return the last played line with a warning, probably have a null check in the future. Want to see how often it happens.
|
|
|
|
RETURN ReturnNull
|
|
|
|
|
|
ENDIF
|
|
|
|
|
|
RETURN g_ConversationLabels[ReturnInt]
|
|
|
|
ELSE
|
|
|
|
RETURN ReturnNull
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
RETURN ReturnNull
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//This will return the speaker value for any standard conversation line that is currently playing. Will not work for multipart conversations as they do not use a single SL label.
|
|
//If the currently playing line is an audio or SFX pause, then this will return -1. The speaker value is returned as the corresponding int of any alphanumeric speaker designation.
|
|
//"A" will return 10, "B" returns 11. Please see ConvertSingleCharacter for full list.
|
|
|
|
FUNC INT GET_SPEAKER_INT_FOR_CURRENT_STANDARD_CONVERSATION_LINE()
|
|
|
|
|
|
|
|
|
|
IF g_ConversationStatus = CONV_STATE_PLAYING
|
|
|
|
INT ReturnInt
|
|
|
|
ReturnInt = GET_CURRENT_SCRIPTED_CONVERSATION_LINE()
|
|
|
|
|
|
|
|
|
|
ReturnInt = ReturnInt + g_DialogueAdjustment
|
|
|
|
|
|
|
|
|
|
|
|
IF ReturnInt > -1 //need to check this to prevent potential array overrun if any delay takes place.
|
|
|
|
|
|
IF DOES_TEXT_LABEL_EXIST (g_ConversationLabels[ReturnInt])
|
|
|
|
|
|
|
|
//Subtitle label must exist, so can't be SFX pause. Safe to extrapolate speaker int from SL string
|
|
|
|
|
|
|
|
TEXT_LABEL_23 ThisSpeakListenLabel
|
|
|
|
STRING componentCharacter
|
|
|
|
|
|
ThisSpeakListenLabel = g_ConversationData.ConversationSegmentToGrab //Grab from global.
|
|
ThisSpeakListenLabel += "SL"
|
|
|
|
|
|
componentCharacter = GET_CHARACTER_FROM_AUDIO_CONVERSATION_FILENAME (GET_FILENAME_FOR_AUDIO_CONVERSATION (ThisSpeakListenLabel), (ReturnInt * 3), ((ReturnInt * 3)+ 1))
|
|
|
|
/*
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintstring("DIALOG_PUB... Current subtitle label is:")
|
|
cdPrintstring(g_ConversationLabels[ReturnInt])
|
|
cdPrintstring(" and speaker component is ")
|
|
cdPrintstring(componentCharacter)
|
|
cdPrintnl()
|
|
#endif
|
|
*/
|
|
|
|
|
|
RETURN ConvertSingleCharacter (componentCharacter) //Returned character from string extraction may be alphanumeric. e.g "A". Easier to make this into an int.
|
|
|
|
|
|
ELSE
|
|
|
|
|
|
|
|
//If we haven't found a subtitle label, we can assume the line was an sfx pause.
|
|
/*
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintstring("DIALOG_PUB... Warning! Tried to grab speaker int of currently playing line but line playing is audio sfx or pause.")
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB... Returned -1 as a result.")
|
|
cdPrintnl()
|
|
#endif
|
|
*/
|
|
|
|
|
|
|
|
RETURN -1
|
|
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
ELSE
|
|
|
|
RETURN -2 //GET_CURRENT_SCRIPTED_CONVERSATION_LINE failsafe. Deliberately not -1, so that differentiation of return results can take place. - 1 best used for SFX pause.
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
ELSE
|
|
|
|
RETURN -3 //Wasn't playing a conversation when function was called!
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Can be used to get the root of a standard conversation that is currently playing. Handy for detecting when a random conversation is playing.
|
|
//Will not work with multipart conversations, as there is no singled defined root for those complex conversations.
|
|
FUNC TEXT_LABEL_23 GET_CURRENTLY_PLAYING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
|
|
TEXT_LABEL_23 ReturnNull = "NULL"
|
|
|
|
|
|
IF g_ConversationStatus = CONV_STATE_PLAYING
|
|
|
|
RETURN g_ConversationData.ConversationSegmentToGrab
|
|
|
|
ELSE
|
|
|
|
RETURN ReturnNull
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
//Can be used to get the root of a standard conversation that is currently playing or building. Handy for detecting when a random conversation is playing.
|
|
//Will not work with multipart conversations, as there is no singled defined root for those complex conversations.
|
|
FUNC TEXT_LABEL_23 GET_CURRENTLY_PLAYING_OR_BUILDING_STANDARD_CONVERSATION_ROOT()
|
|
|
|
|
|
TEXT_LABEL_23 ReturnNull = "NULL"
|
|
|
|
|
|
IF g_ConversationStatus = CONV_STATE_PLAYING
|
|
OR g_ConversationStatus = CONV_STATE_BUILDING
|
|
|
|
RETURN g_ConversationData.ConversationSegmentToGrab
|
|
|
|
ELSE
|
|
|
|
RETURN ReturnNull
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
//Can be used to get the root of a standard conversation that is at any stage of being used. Handy for detecting when a random conversation is playing.
|
|
//Will not work with multipart conversations, as there is no singled defined root for those complex conversations.
|
|
FUNC TEXT_LABEL_23 GET_CURRENTLY_IN_USE_STANDARD_CONVERSATION_ROOT()
|
|
|
|
|
|
TEXT_LABEL_23 ReturnNull = "NULL"
|
|
|
|
|
|
IF g_ConversationStatus != CONV_STATE_FREE
|
|
|
|
RETURN g_ConversationData.ConversationSegmentToGrab
|
|
|
|
ELSE
|
|
|
|
RETURN ReturnNull
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
//This will get the root of a standard conversation that is playing OR is waiting to play, i.e the conversation is building, paused or a phonecall is waiting to commence.
|
|
FUNC TEXT_LABEL_23 GET_LAST_PASSED_STANDARD_CONVERSATION_ROOT()
|
|
|
|
|
|
RETURN g_ConversationData.ConversationSegmentToGrab
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//Returns true if a normal face to face conversation can be started and then plays that conversation. Use for in-car conversations etc.
|
|
|
|
//WhichBlockOfTextToLoad is the text block you'd normally load into the game's additional text slot for dialogue. It's in the top left of the XLS.
|
|
//The text is loaded automatically by this function so you don't have to worry about it.
|
|
//Which Rootlabel is the name of the text Root you wish to play from the XLS. It can be a group of one or many lines. The lines are manipulated
|
|
//by me to produce a conversation from one initial Root label.
|
|
//Priority is self-explanatory. Lower priority calls can be interrupted. For conversations, use one of the following priorities:
|
|
/*
|
|
CONV_PRIORITY_AMBIENT_LOW,
|
|
CONV_PRIORITY_AMBIENT_MEDIUM,
|
|
CONV_PRIORITY_AMBIENT_HIGH,
|
|
|
|
CONV_PRIORITY_VERY_LOW,
|
|
CONV_PRIORITY_LOW,
|
|
CONV_PRIORITY_MEDIUM
|
|
*/
|
|
|
|
|
|
|
|
FUNC BOOL CREATE_CONVERSATION (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN, BOOL cloneConversation = FALSE)
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen, cloneConversation)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
g_IsThisConversationForPhoneHolder = FALSE //this conversation is not a phonecall.
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL PRELOAD_CONVERSATION (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN, BOOL cloneConversation = FALSE, INT PassedAutoPlayTime = 0)
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen, cloneConversation)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
g_IsThisConversationForPhoneHolder = FALSE //this conversation is not a phonecall.
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = TRUE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_i_PreloadAutoPlayTimeHolder = PassedAutoPlayTime
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
PROC BEGIN_PRELOADED_CONVERSATION()
|
|
|
|
|
|
START_PRELOADED_CONVERSATION()
|
|
|
|
g_IsThisFaceToFacePreloaded = FALSE //Make sure dialogue handler will now allow the conversation to be paused.
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
//Make sure this always displays regardless of phone debug text widget toggle.
|
|
PRINTLN("\nCELLPHONE_PUB - Preloaded conversation begun from [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
#endif
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//This should only be used for non-critical conversation lines. The dialogue handler now has a buffer for one conversation which it will repeatedly try to play if no subsequent
|
|
//conversations are queued or a kill_conversation is called. This command adds a standard CREATE_CONVERSATION request only. See Steve T if you need something else.
|
|
//Notes:
|
|
//Dialogue Handler will stop trying to play the buffered conversation after a few seconds have lapsed, any further KILL command has been received or any other conversation successfully plays.
|
|
PROC ADD_NON_CRITICAL_STANDARD_CONVERSATION_TO_BUFFER (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Conversation added to buffer.")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
SET_BIT (BitSet_DialogueHandler, g_BS_STANDARD_CONVERSATION_BUFFER_ACTIVE)
|
|
|
|
g_BufferConvPriority = PassedConversationPriority
|
|
g_BufferSegmentToGrab = WhichRootLabel
|
|
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//To play a single line you must also pass in the full text label of your specific line as a fourth parameter.
|
|
//e.g PLAY_SINGLE_LINE_FROM_CONVERSATION(MyLocalPedStruct, "H3AUD", "HEIST3_VA", "HEIST3_VA_1", CONV_PRIORITY_AMBIENT_HIGH)
|
|
|
|
FUNC BOOL PLAY_SINGLE_LINE_FROM_CONVERSATION (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, STRING WhichSpecificLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
g_IsThisConversationForPhoneHolder = FALSE //this conversation is not a phonecall.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = TRUE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
|
|
|
|
g_SpecificLabelHolder = WhichSpecificLabel
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Allows a conversation to be cued from a specific label, rather that starting at _1.
|
|
//e.g CREATE_CONVERSATION_FROM_SPECIFIC_LINE (MyLocalPedStruct, "RBS1AUD", "RBS1_DRV2", "RBS1_DRV2_6", CONV_PRIORITY_MEDIUM)
|
|
|
|
//This would start the conversation RBS1_DRV2 from label RBS1_DRV2_6 and then continue to play each subsequent line as
|
|
//normal until the end of the conversation or it is killed by any other means.
|
|
|
|
|
|
FUNC BOOL CREATE_CONVERSATION_FROM_SPECIFIC_LINE (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, STRING WhichSpecificLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
g_IsThisConversationForPhoneHolder = FALSE //this conversation is not a phonecall.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = TRUE
|
|
|
|
|
|
|
|
|
|
g_SpecificLabelHolder = WhichSpecificLabel
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = FALSE
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Lets you know if a conversation is currently playing or in the building state. Handy for knowing when the conversation system is completely free.
|
|
//The native command IS_SCRIPTED_CONVERSATION_ONGOING can be a little late in returning true when precision timings are required.
|
|
//This will return true for a phonecall or face-to-face conversation
|
|
|
|
|
|
FUNC BOOL IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
|
|
IF g_ConversationStatus <> CONV_STATE_FREE
|
|
OR IS_SCRIPTED_CONVERSATION_ONGOING() //caters for last line being finished by audio after a kill even if conv_state if free.
|
|
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki_ed
|
|
//Let's script pause any ongoing face-to-face conversation only. This is not to be used for phonecalls.
|
|
//Pass in TRUE to pause any anygoing conversation, FALSE to restart any previously paused conversation.
|
|
//NB: Be aware that any high priority conversation, e.g a phonecall, will take precedence over any paused conversation. Higher priority calls to the system will result
|
|
//in the paused conversation being cleaned up.
|
|
|
|
PROC PAUSE_FACE_TO_FACE_CONVERSATION (BOOL ShouldConversationBePaused)
|
|
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
IF ShouldConversationBePaused
|
|
|
|
cdPrintnl()
|
|
PRINTSTRING ("DIALOG_PUB - Pause face to face conversation called with TRUE")
|
|
PRINTNL()
|
|
|
|
//Make sure this always displays regardless of phone debug text widget toggle.
|
|
PRINTLN ("\nDIALOG_PUB - Conversation paused from [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
|
|
ELSE
|
|
|
|
cdPrintnl()
|
|
PRINTSTRING ("DIALOG_PUB - Pause face to face conversation called with FALSE")
|
|
PRINTNL()
|
|
|
|
//Make sure this always displays regardless of phone debug text widget toggle.
|
|
PRINTLN ("\nDIALOG_PUB - Conversation restarted from [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
|
|
ENDIF
|
|
|
|
#endif
|
|
|
|
|
|
g_ConversationPaused = ShouldConversationBePaused
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL IS_FACE_TO_FACE_CONVERSATION_PAUSED()
|
|
|
|
|
|
IF g_ConversationPaused = TRUE
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
//This will return TRUE when a cellphone conversation is actually playing, not just in preloaded state. The native command IS_MOBILE_PHONE_CALL_ONGOING will
|
|
//return TRUE when a phone call is preloaded or playing.
|
|
|
|
FUNC BOOL IS_CELLPHONE_CONVERSATION_PLAYING()
|
|
|
|
|
|
IF g_ConversationStatus = CONV_STATE_PLAYING
|
|
IF IS_MOBILE_PHONE_CALL_ONGOING()
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
PROC PAUSE_CELLPHONE_CONVERSATION (BOOL ShouldConversationBePaused)
|
|
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
IF ShouldConversationBePaused
|
|
|
|
cdPrintnl()
|
|
PRINTSTRING ("DIALOG_PUB - Pause cellphone conversation called with TRUE")
|
|
PRINTNL()
|
|
|
|
//Make sure this always displays regardless of phone debug text widget toggle.
|
|
PRINTLN ("\nDIALOG_PUB - Cellphone conversation paused from [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
|
|
ELSE
|
|
|
|
cdPrintnl()
|
|
PRINTSTRING ("DIALOG_PUB - Pause cellphone conversation called with FALSE")
|
|
PRINTNL()
|
|
|
|
//Make sure this always displays regardless of phone debug text widget toggle.
|
|
PRINTLN ("\nDIALOG_PUB - Cellphone conversation restarted from [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
|
|
ENDIF
|
|
|
|
#endif
|
|
|
|
|
|
|
|
IF IS_MOBILE_PHONE_CALL_ONGOING()
|
|
|
|
g_ConversationPaused = ShouldConversationBePaused
|
|
|
|
g_PauseRestartHasComeFromDedicatedCellphoneFunction = TRUE
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
PRINTSTRING ("DIALOG_PUB - PAUSE_CELLPHONE_CONVERSATION called, but no cellphone call ongoing. No action taken.")
|
|
PRINTNL()
|
|
|
|
#endif
|
|
|
|
ENDIF
|
|
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL IS_CELLPHONE_CONVERSATION_PAUSED()
|
|
|
|
|
|
IF IS_MOBILE_PHONE_CALL_ONGOING()
|
|
|
|
IF g_ConversationPaused = TRUE
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
PRINTSTRING ("DIALOG_PUB - IS_CELLPHONE_CONVERSATION_PAUSED check called, but no cellphone call ongoing.")
|
|
PRINTNL()
|
|
|
|
#endif
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//This will return TRUE if no face-to-face or cellphone conversation is taking place or has recently finished.
|
|
|
|
FUNC BOOL IS_CONVERSATION_STATUS_FREE()
|
|
|
|
|
|
INT CurrentTimer
|
|
|
|
CurrentTimer = GET_GAME_TIMER()
|
|
|
|
|
|
IF g_ConversationStatus = CONV_STATE_FREE
|
|
|
|
IF CurrentTimer - g_Timestamp_of_last_ConvStateFree > 3000 //Three seconds
|
|
|
|
IF IS_SCRIPTED_CONVERSATION_ONGOING() = FALSE
|
|
|
|
RETURN TRUE
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
RETURN FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
//Tbis will prevent dialogue handler from blocking or killing any dialogue should the player enter or become submerged in water.
|
|
//WARNING! Please remember to call this with false when required AND in your cleanup. A bool widget within Script \ Cellphone_Debug acts as a signifier of usage.
|
|
PROC ALLOW_DIALOGUE_IN_WATER (BOOL AllowDialogue)
|
|
|
|
|
|
IF AllowDialogue
|
|
|
|
g_AllowUnderwaterDialogue = TRUE
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
//Make sure this always displays regardless of phone debug text widget toggle.
|
|
PRINTLN("\nDIALOGUE_PUB - Underwater dialogue switched ON [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Allowing underwater dialogue. g_AllowUnderwaterDialogue set to TRUE")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
ELSE
|
|
|
|
g_AllowUnderwaterDialogue = FALSE
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
//Make sure this always displays regardless of phone debug text widget toggle.
|
|
PRINTLN("\nDIALOGUE_PUB - Underwater dialogue switched OFF [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
|
|
cdPrintnl()
|
|
cdPrintstring("DIALOG_PUB - Preventing underwater dialogue. g_AllowUnderwaterDialogue set to FALSE")
|
|
cdPrintnl()
|
|
#endif
|
|
|
|
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//The next three procs will allow you to terminate any ongoing phonecall, face to face conversation or both at once. USE WITH CAUTION AND DON'T CALL EVERY FRAME!
|
|
|
|
|
|
//Wiki-ed
|
|
//This will terminate any phonecall or face-to-face conversation currently ongoing. Will finish last line of a face-to-face, but instantly terminate and disconnect a phone call.
|
|
PROC KILL_ANY_CONVERSATION()
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
PRINTLN("\nDIALOGUE_PUB - KILL_ANY_CONVERSATION called by [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
#endif
|
|
|
|
|
|
BitSet_DialogueHandler = 0
|
|
KillAllConversations()
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//This will terminate any phonecall conversation currently ongoing
|
|
PROC KILL_PHONE_CONVERSATION()
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
PRINTLN("\nDIALOGUE_PUB - KILL_PHONE_CONVERSATION called by [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
#endif
|
|
|
|
|
|
BitSet_DialogueHandler = 0
|
|
KillPhoneConversation()
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//This will terminate any face-to-face conversation currently ongoing, will finish the current line.
|
|
PROC KILL_FACE_TO_FACE_CONVERSATION()
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
PRINTLN("\nDIALOGUE_PUB - KILL_FACE_TO_FACE_CONVERSATION called by [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
#endif
|
|
|
|
|
|
BitSet_DialogueHandler = 0
|
|
KillFaceToFaceConversation()
|
|
|
|
ENDPROC
|
|
|
|
|
|
//Only use in special circumstances. It will look and sound weird otherwise!
|
|
PROC KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
PRINTLN("\nDIALOGUE_PUB - KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE called by [", GET_THIS_SCRIPT_NAME(), "] through public function.")
|
|
|
|
#endif
|
|
|
|
BitSet_DialogueHandler = 0
|
|
KillFaceToFaceConversationImmediately()
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//Returns the answer stored for the user's response to a cellphone prompt. The enum state is reset to NO_ANSWER_STORED when a new phonecall is
|
|
//successfully cued. Example use:
|
|
// IF CHECK_RESPONSE_TO_CELLPHONE_PROMPT() = RESPONDED_YES
|
|
// Do your stuff...
|
|
// ENDIF
|
|
|
|
//Make sure you do this every frame after you cue your phonecall, as the response store will be reset to EMPTY when the phonecall naturally finishes or is hung up.
|
|
|
|
/*
|
|
|
|
ENUM enumCellphonePromptResponse
|
|
|
|
RESPONSE_STORE_EMPTY,
|
|
RESPONDED_YES,
|
|
RESPONDED_NO
|
|
|
|
ENDENUM
|
|
|
|
*/
|
|
|
|
|
|
FUNC enumCellphonePromptResponse CHECK_RESPONSE_TO_CELLPHONE_PROMPT()
|
|
|
|
RETURN g_CellphonePromptResponse
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//This will clear the response held to any cellphone YES / NO prompt. You are unlikely to need this but the functionality is provided if need be.
|
|
|
|
PROC CLEAR_RESPONSE_TO_CELLPHONE_PROMPT()
|
|
|
|
g_CellphonePromptResponse = RESPONSE_STORE_EMPTY
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FUNC enumCellphonePromptResponse CHECK_RESPONSE_TO_MP_JOB_OFFER_PROMPT()
|
|
|
|
RETURN g_CellphoneJobOfferResponse
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
//Wiki-ed
|
|
//This will clear the response held to any cellphone YES / NO prompt. You are unlikely to need this but the functionality is provided if need be.
|
|
|
|
PROC CLEAR_RESPONSE_TO_MP_JOB_OFFER_PROMPT()
|
|
|
|
g_CellphoneJobOfferResponse = RESPONSE_STORE_EMPTY
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Multipart conversations.
|
|
|
|
//Multipart conversations allow you to pick and choose specific lines from different conversation roots and compile them into one seamless conversation.
|
|
//The conversations must share the same subtitle block however and speaker / listener values. Essentially, if all your conversations are on the same page in dialoguestar,
|
|
//then you will be able to create a multipart conversation.
|
|
//
|
|
//For example:
|
|
|
|
//CREATE_MULTIPART_CONVERSATION_WITH_3_LINES (MyLocalPedStruct, "ARM1AUD", "ARM1_HAIL", "ARM1_HAIL_1", "ARM1_HOME", "ARM1_HOME_3", "ARM1_RACE", "ARM1_RACE_2", CONV_PRIORITY_VERY_HIGH)
|
|
|
|
|
|
|
|
//Build a multipart conversation that consists of two lines.
|
|
FUNC BOOL CREATE_MULTIPART_CONVERSATION_WITH_2_LINES (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad,
|
|
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
|
|
enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Conversation_Roots_and_Specifics (2, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel)
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Build a multipart conversation that consists of three lines.
|
|
FUNC BOOL CREATE_MULTIPART_CONVERSATION_WITH_3_LINES (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad,
|
|
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
STRING ThirdRootLabel, STRING ThirdSpecificLabel,
|
|
|
|
enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Conversation_Roots_and_Specifics (3, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel,
|
|
ThirdRootLabel, ThirdSpecificLabel)
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Build a multipart conversation that consists of four lines.
|
|
FUNC BOOL CREATE_MULTIPART_CONVERSATION_WITH_4_LINES (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad,
|
|
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
STRING ThirdRootLabel, STRING ThirdSpecificLabel,
|
|
STRING FourthRootLabel, STRING FourthSpecificLabel,
|
|
|
|
enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Conversation_Roots_and_Specifics (4, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel,
|
|
ThirdRootLabel, ThirdSpecificLabel, FourthRootLabel, FourthSpecificLabel)
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Build a multipart conversation that consists of five lines.
|
|
FUNC BOOL CREATE_MULTIPART_CONVERSATION_WITH_5_LINES (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad,
|
|
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
STRING ThirdRootLabel, STRING ThirdSpecificLabel,
|
|
STRING FourthRootLabel, STRING FourthSpecificLabel,
|
|
STRING FifthRootLabel, STRING FifthSpecificLabel,
|
|
|
|
enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Conversation_Roots_and_Specifics (5, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel,
|
|
ThirdRootLabel, ThirdSpecificLabel, FourthRootLabel, FourthSpecificLabel,
|
|
FifthRootLabel, FifthSpecificLabel)
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
//____________________________________________________________________________________________________________________________________________________________________________
|
|
//
|
|
//
|
|
// New public functions to allow legacy Dialogue from V work in DLC missions.
|
|
//
|
|
// These force the system to look at whatever_language.rpf rather than whatever_languageDLC.rpf even when a DLC mission is running.
|
|
//
|
|
//____________________________________________________________________________________________________________________________________________________________________________
|
|
|
|
|
|
|
|
// Plan for new functions to allow legacy GTAV dialogue to play in SP ( and eventually MP ) DLC missions that are tagged as such by the flow:
|
|
// Will need to have g_Holder_ForceDLC_DialogueRequest_to_use_Legacy_Source and g_ForceDLC_DialogueRequest_to_use_Legacy_Source
|
|
// Each new Force function will need to set the holder flag to TRUE, all legacy functions will need to set this to false using USE_TU_CHANGES.
|
|
// FUNC BOOL CheckCurrentConversationStatus will copy the holder into the main var when the other stuff goes in, again using TU changes.
|
|
// Common Dialogue Cleanup will need to set the holder and the main var back to false.
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL CREATE_CONVERSATION_USING_V_CONTENT_IN_DLC (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN, BOOL cloneConversation = FALSE)
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen, cloneConversation)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
|
|
g_IsThisConversationForPhoneHolder = FALSE //this conversation is not a phonecall.
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = TRUE //Critical!
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL PLAYER_CALL_CHAR_CELLPHONE_USING_V_CONTENT_IN_DLC (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = FALSE //necessary so that any higher priority call doesn't set itself up as requiring a response if the interrupted call did.
|
|
|
|
g_IsEmergencyServicesCallHolder = FALSE
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = TRUE //Critical
|
|
#endif
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Create an outbound phonecall - the phone can be forced onscreen by default which brings up the appropriate calling / talking screens for that contact.
|
|
//This allows the phonecall to be constructed from single lines from different conversation blocks from the same dstar page. They must share the same AUD block!
|
|
FUNC BOOL PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_2_LINES_USING_V_CONTENT_IN_DLC (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad,
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
Player_Call_Char_Multipart_Setup()
|
|
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Phonecall_Roots_and_Specifics (2, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel)
|
|
|
|
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
|
|
g_Holder_ForceDLC_DialogueRequest = TRUE //Critical! Player_Call_Char_Multipart_Setup and Construct_Multipart_Phonecall_Roots
|
|
//defaults g_Holder_ForceDLC_DialogueRequest to FALSE, we need to make this TRUE.
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
//RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Same as 2 line variant above but supports an extra line.
|
|
FUNC BOOL PLAYER_CALL_CHAR_CELLPHONE_MULTIPART_WITH_3_LINES_USING_V_CONTENT_IN_DLC (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad,
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
STRING ThirdRootLabel, STRING ThirdSpecificLabel,
|
|
enumConversationPriority PassedConversationPriority,
|
|
BOOL ShouldPhoneBeForcedOnScreen = TRUE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
Player_Call_Char_Multipart_Setup()
|
|
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Phonecall_Roots_and_Specifics (3, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel,
|
|
ThirdRootLabel, ThirdSpecificLabel )
|
|
|
|
|
|
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
|
|
g_Holder_ForceDLC_DialogueRequest = TRUE //Critical! Player_Call_Char_Multipart_Setup and Construct_Multipart_Phonecall_Roots
|
|
//defaults g_Holder_ForceDLC_DialogueRequest to FALSE, we need to make this TRUE.
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
//RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FUNC BOOL PLAYER_CALL_EMERGENCY_SERVICES_USING_V_CONTENT_IN_DLC (structPedsForConversation &YourPedStruct, enumCharacterList WhichChar, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, enumConversationPriority PassedConversationPriority,
|
|
STRING QuestionGodTextLabel, STRING AmbRootLabel, STRING FireRootLabel, STRING PoliceRootLabel,
|
|
BOOL ShouldPhoneBeForcedOnScreen = FALSE,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN,
|
|
BOOL IsThisInboundForCellphone = FALSE)
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, WhichChar, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
g_ForcePlayerAnswerHolder = FALSE
|
|
|
|
g_IsThisConversationForPhoneHolder = TRUE //yes, this is a phonecall conversation.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = FALSE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
g_IsConferenceCallHolder = FALSE //this is not a conference call.
|
|
|
|
g_CallRequiringPlayerResponseHolder = TRUE
|
|
|
|
g_IsEmergencyServicesCallHolder = TRUE
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
|
|
IF ShouldPhoneBeForcedOnScreen = TRUE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = TRUE
|
|
|
|
ELSE
|
|
|
|
g_ShouldPhoneBeForcedOnScreenHolder = FALSE
|
|
|
|
ENDIF
|
|
|
|
|
|
g_AmbulanceSegmentLabelHolder = AmbRootLabel
|
|
|
|
g_FireSegmentLabelHolder = FireRootLabel
|
|
|
|
g_PoliceSegmentLabelHolder = PoliceRootLabel
|
|
|
|
g_QuestionGodLabelHolder = QuestionGodTextLabel
|
|
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = TRUE //Critical!
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, IsThisInboundForCellphone)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
FUNC BOOL PLAY_SINGLE_LINE_FROM_CONVERSATION_USING_V_CONTENT_IN_DLC (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad, STRING WhichRootLabel, STRING WhichSpecificLabel, enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
g_IsThisConversationForPhoneHolder = FALSE //this conversation is not a phonecall.
|
|
|
|
g_IsThisAnMPChatCallHolder = FALSE
|
|
|
|
g_IsThisAnMpJobOfferHolder = FALSE
|
|
|
|
g_PlayingSingleLineHolder = TRUE
|
|
|
|
g_IsThisFaceToFacePreloadedHolder = FALSE
|
|
|
|
g_PlayingFromLineHolder = FALSE
|
|
|
|
|
|
|
|
g_SpecificLabelHolder = WhichSpecificLabel
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = TRUE //Critical!
|
|
#endif
|
|
|
|
|
|
RETURN CheckCurrentConversationStatus (WhichRootLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
ENDFUNC
|
|
|
|
//Build a multipart conversation that consists of two lines.
|
|
FUNC BOOL CREATE_MULTIPART_CONVERSATION_WITH_2_LINES_USING_V_CONTENT_IN_DLC (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad,
|
|
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
|
|
enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Conversation_Roots_and_Specifics (2, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel)
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = TRUE //Critical!
|
|
#endif
|
|
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Build a multipart conversation that consists of three lines.
|
|
FUNC BOOL CREATE_MULTIPART_CONVERSATION_WITH_3_LINES_USING_V_CONTENT_IN_DLC (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad,
|
|
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
STRING ThirdRootLabel, STRING ThirdSpecificLabel,
|
|
|
|
enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Conversation_Roots_and_Specifics (3, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel,
|
|
ThirdRootLabel, ThirdSpecificLabel)
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = TRUE //Critical!
|
|
#endif
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//Build a multipart conversation that consists of four lines.
|
|
FUNC BOOL CREATE_MULTIPART_CONVERSATION_WITH_4_LINES_USING_V_CONTENT_IN_DLC (structPedsForConversation &YourPedStruct, STRING WhichBlockOfTextToLoad,
|
|
|
|
STRING FirstRootLabel, STRING FirstSpecificLabel,
|
|
STRING SecondRootLabel, STRING SecondSpecificLabel,
|
|
STRING ThirdRootLabel, STRING ThirdSpecificLabel,
|
|
STRING FourthRootLabel, STRING FourthSpecificLabel,
|
|
|
|
enumConversationPriority PassedConversationPriority,
|
|
enumSubtitlesState ShouldDisplaySubtitles = DISPLAY_SUBTITLES, enumBriefScreenState ShouldAddToBriefScreen = DO_ADD_TO_BRIEF_SCREEN)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Assign_Standard_Dialogue_Holder_Parameters (YourPedStruct, NO_CHARACTER, WhichBlockOfTextToLoad, ShouldDisplaySubtitles, ShouldAddToBriefScreen)
|
|
|
|
|
|
|
|
//Force priority to be no higher than medium so that critical phonecalls take precedence over this face to face conversation.
|
|
IF PassedConversationPriority > CONV_PRIORITY_MEDIUM
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF PassedConversationPriority < CONV_PRIORITY_FLOW_ONLY_USE_AMBIENT_SLOT //Need to allow certain MP face to face conversations use this.
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
PassedConversationPriority = CONV_PRIORITY_MEDIUM
|
|
|
|
#if IS_DEBUG_BUILD
|
|
|
|
Passed_Priority_Cap_Warning()
|
|
|
|
#endif
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF // USE_TU_CHANGES
|
|
|
|
ENDIF
|
|
|
|
|
|
|
|
STRING ConstructSegmentLabel[10]
|
|
STRING ConstructSpecificLabel[10]
|
|
|
|
|
|
Construct_Multipart_Conversation_Roots_and_Specifics (4, ConstructSegmentLabel, ConstructSpecificLabel,
|
|
FirstRootLabel, FirstSpecificLabel, SecondRootLabel, SecondSpecificLabel,
|
|
ThirdRootLabel, ThirdSpecificLabel, FourthRootLabel, FourthSpecificLabel)
|
|
|
|
|
|
#if USE_TU_CHANGES
|
|
g_Holder_ForceDLC_DialogueRequest = TRUE //Critical!
|
|
#endif
|
|
|
|
|
|
|
|
RETURN CheckCurrentConversationStatusForMultipart (ConstructSegmentLabel, ConstructSpecificLabel, PassedConversationPriority, FALSE)
|
|
|
|
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|