Files
source/Tactical/Dialogue Control.h
T
Marco Antonio J. Costaandmajcosta 86ad401186 add newline at end of file where it's lacking
.editorconfig already enforces it but it's getting changed piecemeal in
every commit. just get it done with.

the script:
```

find . -type f -not -path "./.git/*" -not -path "./.vs/*" | while read -r file; do
	isFile=$(file -0 "$file" | cut -d $'\0' -f2)
	case "$isFile" in
		(*text*)
			echo "$file is text"
			if [[ $(tail -c 1 "$file" | wc -l) -ne 1 ]]; then
				echo "" >> "$file"
			fi
			;;
		(*)
			echo "file isn't text"
			;;
	esac
done
```
2024-12-14 19:05:48 -03:00

493 lines
27 KiB
C++

#ifndef _DIALOG_CONTROL_H
#define _DIALOG_CONTROL_H
#include "faces.h"
#include "gamescreen.h"
#include "soldier profile type.h"
#include <vector>
// An enumeration for dialog quotes
enum DialogQuoteIDs
{
// 0
QUOTE_SEE_ENEMY = 0, // used when we spot an enemy
QUOTE_SEE_ENEMY_VARIATION, // used when we spot an enemy in this sector for the first time
QUOTE_IN_TROUBLE_SLASH_IN_BATTLE, // used when we spot an enemy and they significantly outnumber us
QUOTE_SEE_CREATURE, // used when we spot a bug
QUOTE_FIRSTTIME_GAME_SEE_CREATURE, // used when we spot a bug for the first time
QUOTE_TRACES_OF_CREATURE_ATTACK, // randomly played during the bug quest in the tunnels
QUOTE_HEARD_SOMETHING, // we heard a suspicious sound
QUOTE_SMELLED_CREATURE, // randomly played during the bug quest in the tunnels
QUOTE_WEARY_SLASH_SUSPUCIOUS, // we are weary, because some non-militia NPC has a rocketlauncher or cannon
QUOTE_WORRIED_ABOUT_CREATURE_PRESENCE, // randomly played during the bug quest in the tunnels
//10
QUOTE_ATTACKED_BY_MULTIPLE_CREATURES, // used when we spot several bugs
QUOTE_SPOTTED_SOMETHING_ONE, // spotted an item
QUOTE_SPOTTED_SOMETHING_TWO, // spotted an item
QUOTE_OUT_OF_AMMO, // gun is empty
QUOTE_SERIOUSLY_WOUNDED, // lose life from bleeding below 15 HP
QUOTE_BUDDY_1_KILLED, // buddy 1 died
QUOTE_BUDDY_2_KILLED, // buddy 2 died
QUOTE_LEARNED_TO_LIKE_MERC_KILLED, // learn to like died
QUOTE_FORGETFULL_SLASH_CONFUSED, // currently not used
QUOTE_JAMMED_GUN, // gun is jammed
//20
QUOTE_UNDER_HEAVY_FIRE, // heavily suppressed
QUOTE_TAKEN_A_BREATING, // took a lot of hits this turn
QUOTE_CLOSE_CALL, // almost hit by a projectile
QUOTE_NO_LINE_OF_FIRE, // really bad chance to hit target
QUOTE_STARTING_TO_BLEED, // we are bleeding
QUOTE_NEED_SLEEP, // going to sleep
QUOTE_OUT_OF_BREATH, // very low on breath points
QUOTE_KILLED_AN_ENEMY, // killed an enemy
QUOTE_KILLED_A_CREATURE, // killed an bug
QUOTE_HATED_1, // complain about hated 1
//30
QUOTE_HATED_2, // complain about hated 2
QUOTE_LEARNED_TO_HATE_MERC, // complain about learn to hate
QUOTE_AIM_KILLED_MIKE, // AIM: killed Mike
QUOTE_MERC_QUIT_LEARN_TO_HATE = QUOTE_AIM_KILLED_MIKE, // MERC: quit because of guy we learned to hate
QUOTE_HEADSHOT, // complain about head explosion/corpse being disgusting
QUOTE_PERSONALITY_TRAIT, // disability kicks in (forgetfulness, afraid of heights etc.)
QUOTE_ASSIGNMENT_COMPLETE, // assignment is complete, so we tell the player
QUOTE_REFUSING_ORDER, // refuse to do action to target
QUOTE_KILLING_DEIDRANNA, // killed (or witnessed death of) Deidranna
QUOTE_KILLING_QUEEN, // killed (or witnessed death of) bug queen
QUOTE_ANNOYING_PC, // we dislike the NPC we just talked to
//40
QUOTE_STARTING_TO_WHINE, // complain: low morale
QUOTE_NEGATIVE_COMPANY, // randomly played when we talk to a merc
QUOTE_AIR_RAID, // notify player of air raid / enemy helicopter spotted
QUOTE_WHINE_EQUIPMENT, // complain about quality of equipment
QUOTE_SOCIAL_TRAIT, // randomly played when we talk to a merc
QUOTE_PASSING_DISLIKE, // randomly played when we talk to a merc
QUOTE_EXPERIENCE_GAIN, // gained stats
QUOTE_REFUSE_TO_EATFOOD, // refuse to eat food
QUOTE_REFUSE_TO_SMOKE, // refuse to smoke
QUOTE_HATED_1_ARRIVES, // AIM: hated 1 arrives
QUOTE_MERC_QUIT_HATED_1 = QUOTE_HATED_1_ARRIVES, // MERC/NPC: quit because of hated 1
//50
QUOTE_HATED_2_ARRIVES, // AIM: hated 2 arrives
QUOTE_MERC_QUIT_HATED_2 = QUOTE_HATED_2_ARRIVES, // MERC/NPC: quit because of hated 2
QUOTE_BUDDY_1_GOOD, // compliment buddy 1
QUOTE_BUDDY_2_GOOD, // compliment buddy 2
QUOTE_LEARNED_TO_LIKE_WITNESSED, // compliment learn to like
QUOTE_DELAY_CONTRACT_RENEWAL, // currently unused
QUOTE_NOT_GETTING_PAID = QUOTE_DELAY_CONTRACT_RENEWAL, // MERC: complain about not being paid
QUOTE_AIM_SEEN_MIKE, // AIM/MERC: see Mike
QUOTE_PC_DROPPED_OMERTA = QUOTE_AIM_SEEN_MIKE, // IMP: airdop in Omerta
QUOTE_NOT_GETTING_PAID_RPC = QUOTE_PC_DROPPED_OMERTA, // RPC: complain about not being paid
QUOTE_BLINDED, // an attack has blinded us
QUOTE_DEFINITE_CANT_DO, // we are hopeless at this skill check
QUOTE_LISTEN_LIKABLE_PERSON, // we like the NPC we just talked to
QUOTE_ENEMY_PRESENCE, // prior to combat, notify us of enemy presence
//60
QUOTE_WARNING_OUTSTANDING_ENEMY_AFTER_RT, // realtime has begun, but hostiles are still around
QUOTE_FOUND_SOMETHING_SPECIAL, // we picked up an item we think is cool (once per day)
QUOTE_SATISFACTION_WITH_GUN_AFTER_KILL, // we are happy with the gun we are currently using (once per day)
QUOTE_SPOTTED_JOEY, // we spotted Joey during his quest
QUOTE_RESPONSE_TO_MIGUEL_SLASH_QUOTE_MERC_OR_RPC_LETGO, // AIM: answer to Miguel speech, MERC/RPC: departing comment upon contract end
QUOTE_SECTOR_SAFE, // we won the battle
QUOTE_STUFF_MISSING_DRASSEN, // notice shipment in Drassen was stolen
QUOTE_KILLED_FACTORY_MANAGER, // killed Doreen
QUOTE_SPOTTED_BLOODCAT, // used when we spot a bloodcat
QUOTE_END_GAME_COMMENT, // end speech after game is won
//70
QUOTE_ENEMY_RETREATED, // we won the battle due to enemy retreat
QUOTE_GOING_TO_AUTO_SLEEP, // currently not used
QUOTE_WORK_UP_AND_RETURNING_TO_ASSIGNMENT, // woke up from auto sleep, going back to work
QUOTE_ME_TOO, // me too quote, in agreement with whatever the merc previous said
QUOTE_USELESS_ITEM, // tried working the item in hand, and it's broken
QUOTE_BOOBYTRAP_ITEM, // item/door/etc. is boobytrapped
QUOTE_SUSPICIOUS_GROUND, // found mine etc. on floor tile
QUOTE_DROWNING, // currently not used, intended upon drowning
QUOTE_MERC_REACHED_DESTINATION, // strategic travel: arrived at destination
QUOTE_JA2UB_LAPTOP_FIXED, // JA2UB: played when the laptop is fixed
//80
QUOTE_REPUTATION_REFUSAL, //80 // AIM: refuse to be hired due to bad player reputation
QUOTE_NON_AIM_BUDDY_3_KILLED = QUOTE_REPUTATION_REFUSAL, // not AIM: buddy 3 died
QUOTE_DEATH_RATE_REFUSAL, //= 81, // AIM: refuse to be hired due to high death rate
QUOTE_NON_AIM_BUDDY_4_KILLED = QUOTE_DEATH_RATE_REFUSAL, // not AIM: buddy 4 died
QUOTE_LAME_REFUSAL, //= 82, // AIM: refuse to be hired due not being in the mood (hangover etc.)
QUOTE_NON_AIM_BUDDY_5_KILLED = QUOTE_LAME_REFUSAL, // not AIM: buddy 5 died
QUOTE_WONT_RENEW_CONTRACT_LAME_REFUSAL, //=83, // AIM: refuse to be renew contract due to already having signed elsewhere
QUOTE_NON_AIM_HATED_3 = QUOTE_WONT_RENEW_CONTRACT_LAME_REFUSAL, // not AIM: complain about hated 3
QUOTE_ANSWERING_MACHINE_MSG, //= 84, // AIM: message that plays on the answering machine
QUOTE_NON_AIM_HATED_4 = QUOTE_ANSWERING_MACHINE_MSG, // not AIM: complain about hated 4
QUOTE_DEPARTING_COMMENT_CONTRACT_NOT_RENEWED_OR_48_OR_MORE, //=85, // AIM: warn that contract is >= 48 hours, would like to renew
QUOTE_NON_AIM_HATED_5 = QUOTE_DEPARTING_COMMENT_CONTRACT_NOT_RENEWED_OR_48_OR_MORE, // not AIM: complain about hated 5
QUOTE_HATED_1_ON_TEAM,// = 86, // AIM: played when we refuse to be hired because hated 1 is present and bHatedTime < 24 (else play QUOTE_HATED_1_ON_TEAM_LONGTIMETOHATE)
QUOTE_NON_AIM_BUDDY_3_GOOD = QUOTE_HATED_1_ON_TEAM, // not AIM: compliment buddy 3
QUOTE_HATED_2_ON_TEAM,// = 87, // AIM: played when we refuse to be hired because hated 2 is present and bHatedTime < 24 (else play QUOTE_HATED_2_ON_TEAM_LONGTIMETOHATE)
QUOTE_NON_AIM_BUDDY_4_GOOD = QUOTE_HATED_2_ON_TEAM, // not AIM: compliment buddy 4
QUOTE_LEARNED_TO_HATE_MERC_ON_TEAM,// = 88, // AIM: played when we refuse to be hired because learn to hate is present
QUOTE_NON_AIM_BUDDY_5_GOOD = QUOTE_LEARNED_TO_HATE_MERC_ON_TEAM, // not AIM: compliment buddy 5
QUOTE_CONTRACTS_OVER,// = 89, // tell player that contract is over
QUOTE_MERC_QUIT_HATED_3 = QUOTE_CONTRACTS_OVER, // MERC/RPC: quit because of hated 3
//90
QUOTE_ACCEPT_CONTRACT_RENEWAL, // =90, // AIM: renew contract
QUOTE_MERC_QUIT_HATED_4 = QUOTE_ACCEPT_CONTRACT_RENEWAL, // MERC/RPC: quit because of hated 4
QUOTE_CONTRACT_ACCEPTANCE,// =91, // AIM: agree to contract
QUOTE_MERC_QUIT_HATED_5 = QUOTE_CONTRACT_ACCEPTANCE, // MERC/RPC: quit because of hated 5
QUOTE_JOINING_CAUSE_BUDDY_1_ON_TEAM,// = 92, // agree to contract because buddy 1 is here
QUOTE_JOINING_CAUSE_BUDDY_2_ON_TEAM,// = 93, // agree to contract because buddy 2 is here
QUOTE_JOINING_CAUSE_LEARNED_TO_LIKE_BUDDY_ON_TEAM,// = 94, // agree to contract because learn to like is here
QUOTE_REFUSAL_RENEW_DUE_TO_MORALE,// = 95, // AIM: refuse to be renew due to bad player reputation or morale
QUOTE_PRECEDENT_TO_REPEATING_ONESELF,// = 96, // say that you're repeating yourself
QUOTE_REFUSAL_TO_JOIN_LACK_OF_FUNDS,// = 97, // player can't afford hiring us
QUOTE_DEPART_COMMET_CONTRACT_NOT_RENEWED_OR_TERMINATED_UNDER_48,// = 98, // AIM: warn that contract is < 48 hours, would like to renew
QUOTE_DEATH_RATE_RENEWAL, // AIM: refuse to be renew due to high death rate
//100
QUOTE_HATED_1_ON_TEAM_WONT_RENEW, // AIM: refuse to renew contract because hated 1 is here
QUOTE_HATED_2_ON_TEAM_WONT_RENEW, // AIM: refuse to renew contract because hated 2 is here
QUOTE_LEARNED_TO_HATE_ON_TEAM_WONT_RENEW, // AIM: refuse to renew contract because learn to hate is here
QUOTE_RENEWING_CAUSE_BUDDY_1_ON_TEAM, // renew contract only because buddy 1 is around
QUOTE_RENEWING_CAUSE_BUDDY_2_ON_TEAM, // renew contract only because buddy 2 is around
QUOTE_RENEWING_CAUSE_LEARNED_TO_LIKE_BUDDY_ON_TEAM, // renew contract only because learn to like is around
QUOTE_PRECEDENT_TO_REPEATING_ONESELF_RENEW, // repeat yourself during renewal process
QUOTE_UB_HANDLE_BLOODCATDEATHS, // JA2UB: kill bloodcat quest fulfilled
QUOTE_GREETING, // AIM hiring screen: greet the player
QUOTE_SMALL_TALK, // AIM hiring screen: player says nothing, so do a bit of small talk
//110
QUOTE_IMPATIENT_QUOTE, // AIM hiring screen: player says nothing, so get impatient / easter egg: female mercs complain about player trying to abuse the 'strip' command
QUOTE_LENGTH_OF_CONTRACT, // AIM hiring screen: ask player what contract terms they want
QUOTE_COMMENT_BEFORE_HANG_UP, // AIM hiring screen: player says nothing, we are fed up so end the call
QUOTE_HATED_1_ON_TEAM_LONGTIMETOHATE, // AIM: played when we refuse to be hired because hated 1 is present and bHatedTime >= 24 (else play QUOTE_HATED_1_ON_TEAM)
QUOTE_HATED_2_ON_TEAM_LONGTIMETOHATE, // AIM: played when we refuse to be hired because hated 2 is present and bHatedTime >= 24 (else play QUOTE_HATED_2_ON_TEAM)
QUOTE_MERC_LEAVING_ALSUCO_SOON, // tell player that contract will be over soon and we don't want to renew
QUOTE_MERC_GONE_UP_IN_PRICE, // during contract renegotiation, inform the player of increased salary
#ifdef JA2UB
QUOTE_ENTER_SECTOR_WITH_FAN_1, // special JA2UB dialogue about fan
QUOTE_ENTER_SECTOR_WITH_FAN_2, // special JA2UB dialogue about fan
#endif
QUOTE_AIM_BUDDY_3_KILLED = 119, // AIM: buddy 3 died
//120
QUOTE_AIM_BUDDY_4_KILLED, // AIM: buddy 4 died
QUOTE_AIM_BUDDY_5_KILLED, // AIM: buddy 5 died
QUOTE_AIM_HATED_3, // AIM: complain about hated 3
QUOTE_AIM_HATED_4, // AIM: complain about hated 4
QUOTE_AIM_HATED_5, // AIM: complain about hated 5
QUOTE_HATED_3_ARRIVES, // AIM: hated 3 arrives
QUOTE_HATED_4_ARRIVES, // AIM: hated 4 arrives
QUOTE_HATED_5_ARRIVES, // AIM: hated 5 arrives
QUOTE_AIM_BUDDY_3_GOOD, // AIM: compliment buddy 3
QUOTE_AIM_BUDDY_4_GOOD, // AIM: compliment buddy 4
//130
QUOTE_AIM_BUDDY_5_GOOD, // AIM: compliment buddy 5
QUOTE_HATED_3_ON_TEAM, // AIM: played when we refuse to be hired because hated 3 is present and bHatedTime < 24 ( else play QUOTE_HATED_3_ON_TEAM_LONGTIMETOHATE )
QUOTE_HATED_4_ON_TEAM, // AIM: played when we refuse to be hired because hated 4 is present and bHatedTime < 24 ( else play QUOTE_HATED_4_ON_TEAM_LONGTIMETOHATE )
QUOTE_HATED_5_ON_TEAM, // AIM: played when we refuse to be hired because hated 5 is present and bHatedTime < 24 ( else play QUOTE_HATED_5_ON_TEAM_LONGTIMETOHATE )
QUOTE_JOINING_CAUSE_BUDDY_3_ON_TEAM, // agree to contract because buddy 3 is here
QUOTE_JOINING_CAUSE_BUDDY_4_ON_TEAM, // agree to contract because buddy 4 is here
QUOTE_JOINING_CAUSE_BUDDY_5_ON_TEAM, // agree to contract because buddy 5 is here
QUOTE_HATED_3_ON_TEAM_WONT_RENEW, // AIM: refuse to renew contract because hated 3 is here
QUOTE_HATED_4_ON_TEAM_WONT_RENEW, // AIM: refuse to renew contract because hated 4 is here
QUOTE_HATED_5_ON_TEAM_WONT_RENEW, // AIM: refuse to renew contract because hated 5 is here
//140
QUOTE_RENEWING_CAUSE_BUDDY_3_ON_TEAM, // renew contract only because buddy 3 is around
QUOTE_RENEWING_CAUSE_BUDDY_4_ON_TEAM, // renew contract only because buddy 4 is around
QUOTE_RENEWING_CAUSE_BUDDY_5_ON_TEAM, // renew contract only because buddy 5 is around
QUOTE_HATED_3_ON_TEAM_LONGTIMETOHATE, // AIM: played when we refuse to be hired because hated 3 is present and bHatedTime >= 24 (else play QUOTE_HATED_3_ON_TEAM)
QUOTE_HATED_4_ON_TEAM_LONGTIMETOHATE, // AIM: played when we refuse to be hired because hated 4 is present and bHatedTime >= 24 (else play QUOTE_HATED_4_ON_TEAM)
QUOTE_HATED_5_ON_TEAM_LONGTIMETOHATE, // AIM: played when we refuse to be hired because hated 5 is present and bHatedTime >= 24 (else play QUOTE_HATED_5_ON_TEAM)
};
#define DEFAULT_EXTERN_PANEL_X_POS 320
#define DEFAULT_EXTERN_PANEL_Y_POS 40
#define DIALOGUE_TACTICAL_UI 1
#define DIALOGUE_CONTACTPAGE_UI 2
#define DIALOGUE_NPC_UI 3
#define DIALOGUE_SPECK_CONTACT_PAGE_UI 4
#define DIALOGUE_EXTERNAL_NPC_UI 5
#define DIALOGUE_SHOPKEEPER_UI 6
#define DIALOGUE_SNITCH_UI 7 // anv: special handle for snitch dialogue
#define DIALOGUE_SPECIAL_EVENT_GIVE_ITEM 0x00000001
#define DIALOGUE_SPECIAL_EVENT_TRIGGER_NPC 0x00000002
#define DIALOGUE_SPECIAL_EVENT_GOTO_GRIDNO 0x00000004
#define DIALOGUE_SPECIAL_EVENT_DO_ACTION 0x00000008
#define DIALOGUE_SPECIAL_EVENT_CLOSE_PANEL 0x00000010
#define DIALOGUE_SPECIAL_EVENT_PCTRIGGERNPC 0x00000020
#define DIALOGUE_SPECIAL_EVENT_BEGINPREBATTLEINTERFACE 0x00000040
#define DIALOGUE_SPECIAL_EVENT_SKYRIDERMAPSCREENEVENT 0x00000080
#define DIALOGUE_SPECIAL_EVENT_SHOW_CONTRACT_MENU 0x00000100
#define DIALOGUE_SPECIAL_EVENT_MINESECTOREVENT 0x00000200
#define DIALOGUE_SPECIAL_EVENT_SHOW_UPDATE_MENU 0x00000400
#define DIALOGUE_SPECIAL_EVENT_ENABLE_AI 0x00000800
#define DIALOGUE_SPECIAL_EVENT_USE_ALTERNATE_FILES 0x00001000
#ifdef JA2UB
#define DIALOGUE_SPECIAL_EVENT_JERRY_MILO 0x00002000
#else
#define DIALOGUE_SPECIAL_EVENT_CONTINUE_TRAINING_MILITIA 0x00002000
#endif
#define DIALOGUE_SPECIAL_EVENT_CONTRACT_ENDING 0x00004000
#define DIALOGUE_SPECIAL_EVENT_MULTIPURPOSE 0x00008000
#define DIALOGUE_SPECIAL_EVENT_SLEEP 0x00010000
#define DIALOGUE_SPECIAL_EVENT_DO_BATTLE_SND 0x00020000
#define DIALOGUE_SPECIAL_EVENT_SIGNAL_ITEM_LOCATOR_START 0x00040000
#define DIALOGUE_SPECIAL_EVENT_SHOPKEEPER 0x00080000
#define DIALOGUE_SPECIAL_EVENT_SKIP_A_FRAME 0x00100000
#define DIALOGUE_SPECIAL_EVENT_EXIT_MAP_SCREEN 0x00200000
#define DIALOGUE_SPECIAL_EVENT_DISPLAY_STAT_CHANGE 0x00400000
#define DIALOGUE_SPECIAL_EVENT_UNSET_ARRIVES_FLAG 0x00800000
#define DIALOGUE_SPECIAL_EVENT_TRIGGERPREBATTLEINTERFACE 0x01000000
#define DIALOGUE_ADD_EVENT_FOR_SOLDIER_UPDATE_BOX 0x02000000
#define DIALOGUE_SPECIAL_EVENT_ENTER_MAPSCREEN 0x04000000
#define DIALOGUE_SPECIAL_EVENT_LOCK_INTERFACE 0x08000000
#define DIALOGUE_SPECIAL_EVENT_REMOVE_EPC 0x10000000
#define DIALOGUE_SPECIAL_EVENT_CONTRACT_WANTS_TO_RENEW 0x20000000
#define DIALOGUE_SPECIAL_EVENT_CONTRACT_NOGO_TO_RENEW 0x40000000
#define DIALOGUE_SPECIAL_EVENT_CONTRACT_ENDING_NO_ASK_EQUIP 0x80000000
#ifdef JA2UB
#define MULTIPURPOSE_SPECIAL_EVENT_TEAM_MEMBERS_DONE_TALKING 0x20000000
#define MULTIPURPOSE_SPECIAL_EVENT_DONE_KILLING_DEIDRANNA 0x10000000
#else
#define MULTIPURPOSE_SPECIAL_EVENT_DONE_KILLING_DEIDRANNA 0x00000001
#define MULTIPURPOSE_SPECIAL_EVENT_TEAM_MEMBERS_DONE_TALKING 0x00000002
#endif
#define MULTIPURPOSE_SPECIAL_EVENT_SNITCH_DIALOGUE 0x00000004
#define MULTIPURPOSE_SPECIAL_EVENT_ADDITIONAL_DIALOGUE 0x00000008
#ifdef JA2UB
enum{
JERRY_MELO_FACE = 6,
NUMBER_OF_EXTERNAL_NPC_FACES,
};
#endif
enum{
SKYRIDER_EXTERNAL_FACE =0,
WALDO_EXTERNAL_FACE,
//MINER_FRED_EXTERNAL_FACE,
//MINER_MATT_EXTERNAL_FACE,
//MINER_OSWALD_EXTERNAL_FACE,
//MINER_CALVIN_EXTERNAL_FACE,
//MINER_CARL_EXTERNAL_FACE,
//NUMBER_OF_EXTERNAL_NPC_FACES,
};
// soldier up-date box reasons
enum{
UPDATE_BOX_REASON_ADDSOLDIER =0,
UPDATE_BOX_REASON_SET_REASON,
UPDATE_BOX_REASON_SHOW_BOX,
};
#ifdef JA2UB
extern UINT32 uiExternalStaticNPCFacesUB[ ];
extern UINT32 uiExternalFaceProfileIdsUB[ ];
#endif
//extern UINT32 uiExternalStaticNPCFaces[ ];
extern std::vector<UINT32> uiExternalStaticNPCFaces;
//extern UINT32 uiExternalFaceProfileIds[ ];
// Functions for handling dialogue Q
BOOLEAN InitalizeDialogueControl();
void ShutdownDialogueControl();
void EmptyDialogueQueue( );
void HandleDialogue( );
void HandleImportantMercQuote( SOLDIERTYPE * pSoldier, UINT16 usQuoteNumber );
// Send in a profile number to see if text dialog exists for this guy....
BOOLEAN DialogueDataFileExistsForProfile( UINT8 ubCharacterNum, UINT16 usQuoteNum, BOOLEAN fWavFile, STR8 *ppStr );
// Do special event as well as dialogue!
BOOLEAN CharacterDialogueWithSpecialEvent( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 iFaceIndex, UINT8 bUIHandlerID, BOOLEAN fFromSoldier, BOOLEAN fDelayed, UINT32 uiFlag, UINT32 uiData1, UINT32 uiData2 );
// Do special event as well as dialogue!
BOOLEAN CharacterDialogueWithSpecialEventEx( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 iFaceIndex, UINT8 bUIHandlerID, BOOLEAN fFromSoldier, BOOLEAN fDelayed, UINT32 uiFlag, UINT32 uiData1, UINT32 uiData2, UINT32 uiData3 );
// A higher level function used for tactical quotes
BOOLEAN TacticalCharacterDialogueWithSpecialEvent( SOLDIERTYPE *pSoldier, UINT16 usQuoteNum, UINT32 uiFlag, UINT32 uiData1, UINT32 uiData2 );
// A higher level function used for tactical quotes
BOOLEAN TacticalCharacterDialogueWithSpecialEventEx( SOLDIERTYPE *pSoldier, UINT16 usQuoteNum, UINT32 uiFlag, UINT32 uiData1, UINT32 uiData2, UINT32 uiData3 );
// A higher level function used for tactical quotes
BOOLEAN TacticalCharacterDialogue( SOLDIERTYPE *pSoldier, UINT16 usQuoteNum );
BOOLEAN SnitchTacticalCharacterDialogue( SOLDIERTYPE *pSoldier, UINT16 usQuoteNum, UINT8 ubEventType, UINT8 ubTargetProfile, UINT8 ubSecondaryTargetProfile );
// Flugente: additional dialogue
enum AdditionalDialogEvents
{
ADE_DISCOVER_ROOM = 0, // merc is the 1st one to explore this room
ADE_DIALOGUE_REACTION, // someone else used a line, and we might answer to that
ADE_MERC_ARRIVES, // a mercenary arrives in Arulco. aData1 is the profile of the arriving merc, aData2 is 1 if the player hasn't made contact with the rebels yet
ADE_SECTOR_COMMENTARY, // similar to the rebel's quotes, this is called upon visiting a sector for the first time
ADE_MERCHANT_CHAT, // we greet a merchant (used with non-profile merchants, in order to be a bit more lively)
ADE_DIALOGUE_NPC_FRIENDLY, // in a conversation, we can say something when clicking on a button
ADE_DIALOGUE_NPC_DIRECT,
ADE_DIALOGUE_NPC_THREATEN,
ADE_DIALOGUE_NPC_RECRUIT,
ADE_DIALOGUE_NPC_REPEAT,
ADE_DIALOGUE_RPC_RECRUIT_SUCCESS, // we've successfully recruited an RPC, and might comment on that
ADE_SEX, // does exactly what you think it does
ADE_WEATHERCHANGE, // the weather has changed, and we can warn the player about that
ADE_SKILL_RESULT, // we used a skill, and comment on the result, aData1 is of Skill, aData2 indicates whether it was a success (1) or failure (0)
ADE_GRENADEWARNING, // a delayed enemy grenade was dropped nearby
ADE_CONSUMEITEM, // we consumed an item, aData1 is the item index
ADE_NPC_DEATH, // someone died
ADE_WITNESS_GOOD, // similar to comment upon buddy doing good.
ADE_BANDAGE_PERFORM_BEGIN, // we bandage someone, aData1 is the profile of person
ADE_BANDAGE_PERFORM_END, // we finished bandaging someone, aData1 is the profile of person
ADE_BANDAGE_RECEIVE_BEGIN, // someone bandages us, aData1 is the profile of person
ADE_BANDAGE_RECEIVE_END, // someone finished bandaging us, aData1 is the profile of person
ADE_ZOMBIESRISE, // a new wave of zombies is spawned from corpses
ADE_SEXUALHARASSMENT, // the player wants to take the 'strip' command further than we are comfortable with
ADE_LOCKBOMB, // merc uses a shaped charge to blow the locks of a door, aData1 indicates whether it was a success (1) or failure (0)
ADE_SNIPERWARNING, // merc warns of sniper presence in this sector
ADE_BOMB_HAS_BEEN_PLANTED, // we planted a bomb/mine/etc., aData1 is the item index, aData2 indicates whether it was a success (1) or failure (0)
};
// We call this function from several places. It uses the dialogue functions, but calls a Lua script to know whether something, and what, should be said
// This allows us to call a lot of very specific dialogue for individual mercs without the need to define what exactly should be said in the code -
// a modder can simply control in Lua what should happen
BOOLEAN AdditionalTacticalCharacterDialogue_CallsLua( SOLDIERTYPE *pSoldier, UINT16 usEventNr, UINT32 aData1 = 0, UINT32 aData2 = 0, UINT32 aData3 = 0 );
// call event for all mercs in a sector
void AdditionalTacticalCharacterDialogue_AllInCurrentSector( UINT8 ausIgnoreProfile,
UINT16 usEventNr, UINT32 aData1 = 0, UINT32 aData2 = 0, UINT32 aData3 = 0, INT32 aAroundGridno = -1, INT32 aRadius = 0 );
void AdditionalTacticalCharacterDialogue_AllInSector( INT16 aSectorX, INT16 aSectorY, INT8 aSectorZ, UINT8 ausIgnoreProfile,
UINT16 usEventNr, UINT32 aData1 = 0, UINT32 aData2 = 0, UINT32 aData3 = 0, INT32 aAroundGridno = -1, INT32 aRadius = 0 );
void AdditionalTacticalCharacterDialogue_AllInSectorRadiusCall( UINT8 ausIgnoreProfile, UINT16 usEventNr,
UINT32 aData1 = 0, UINT32 aData2 = 0, UINT32 aData3 = 0, INT32 aAroundGridno = -1, INT32 aRadius = 0 );
// Flugente: play sound file like normal dialogue or, if someone else is already talking, just play the sound
void SpecialDialogue( SOLDIERTYPE* pSoldier, STR8 azSoundString, STR16 azTextString );
// Flugente: replace text with other text
BOOLEAN ReplaceTextWithOtherText( CHAR16 *pFinishedString, CHAR16 compare[32], CHAR16 replace[32] );
// A higher level function used for tactical quotes
BOOLEAN DelayedTacticalCharacterDialogue( SOLDIERTYPE *pSoldier, UINT16 usQuoteNum );
// A more general purpose function for processing quotes
BOOLEAN CharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 iFaceIndex, UINT8 bUIHandlerID, BOOLEAN fFromSoldier, BOOLEAN fDelayed );
BOOLEAN SnitchCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 iFaceIndex,
UINT32 uiSpecialEventFlag, UINT32 uiSpecialEventData1, UINT32 uiSpecialEventData2,
UINT32 uiSpecialEventData3, UINT32 uiSpecialEventData4,
UINT8 bUIHandlerID, BOOLEAN fFromSoldier, BOOLEAN fDelayed );
// A special event can be setup which can be queued with other speech
BOOLEAN SpecialCharacterDialogueEvent( UINT32 uiSpecialEventFlag, UINT32 uiSpecialEventData1, UINT32 uiSpecialEventData2, UINT32 uiSpecialEventData3, INT32 iFaceIndex, UINT8 bUIHandlerID );
// Same as above, for triggers, with extra param to hold approach value
BOOLEAN SpecialCharacterDialogueEventWithExtraParam( UINT32 uiSpecialEventFlag, UINT32 uiSpecialEventData1, UINT32 uiSpecialEventData2, UINT32 uiSpecialEventData3, UINT32 uiSpecialEventData4, INT32 iFaceIndex, UINT8 bUIHandlerID );
// execute specific character dialogue
BOOLEAN ExecuteCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 iFaceIndex, UINT8 bUIHandlerID, BOOLEAN fSoldier );
BOOLEAN ExecuteSnitchCharacterDialogue( UINT8 ubCharacterNum, UINT16 usQuoteNum, INT32 iFaceIndex, UINT8 bUIHandlerID, UINT8 ubSnitchEventType, UINT8 ubSnitchTargetID, UINT8 ubSecondarySnitchTargetID );
// Called when a face stops talking...
void HandleDialogueEnd( FACETYPE *pFace );
// shut down last quotetext box
void ShutDownLastQuoteTacticalTextBox( void );
// Called to advance speech
// Used for option when no speech sound file
void DialogueAdvanceSpeech( );
BOOLEAN DialogueQueueIsEmpty( );
BOOLEAN DialogueQueueIsEmptyOrSomebodyTalkingNow( );
// Adjust the face, etc when switching from panel to extern panel...
void HandleDialogueUIAdjustments( );
// pause game time during
void PauseTimeDuringNextQuote( );
void UnPauseGameDuringNextQuote( void );
// set up and shutdown static external NPC faces
void InitalizeStaticExternalNPCFaces( void );
void ShutdownStaticExternalNPCFaces( void );
void SayQuoteFromAnyBodyInSector( UINT16 usQuoteNum );
void SayQuoteFromAnyBodyInThisSector( INT16 sSectorX, INT16 sSectorY, INT8 bSectorZ, UINT16 usQuoteNum );
void SayQuoteFromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuoteNum );
void SayQuote58FromNearbyMercInSector( INT32 sGridNo, INT8 bDistance, UINT16 usQuoteNum, INT8 bSex );
void ExecuteTacticalTextBox( INT16 sLeftPosition, STR16 pString );
void ExecuteTacticalTextBoxForLastQuote( INT16 sLeftPosition, STR16 pString );
UINT32 FindDelayForString( STR16 sString );
void BeginLoggingForBleedMeToos( BOOLEAN fStart );
void UnSetEngagedInConvFromPCAction( SOLDIERTYPE *pSoldier );
void SetEngagedInConvFromPCAction( SOLDIERTYPE *pSoldier );
extern UINT32 guiDialogueLastQuoteTime;
extern UINT32 guiDialogueLastQuoteDelay;
void SetStopTimeQuoteCallback( MODAL_HOOK pCallBack );
BOOLEAN DialogueActive( );
extern INT32 giNPCReferenceCount;
extern INT32 giNPCSpecialReferenceCount;
#define NUMBER_VALID_MERC_PRECEDENT_QUOTES 13
extern UINT8 gubMercValidPrecedentQuoteID[ NUMBER_VALID_MERC_PRECEDENT_QUOTES ];
BOOLEAN ShouldMercSayPrecedentToRepeatOneSelf( UINT8 ubMercID, UINT32 uiQuoteID );
BOOLEAN GetMercPrecedentQuoteBitStatus( UINT8 ubMercID, UINT8 ubQuoteBit );
BOOLEAN SetMercPrecedentQuoteBitStatus( UINT8 ubMercID, UINT8 ubBitToSet );
BOOLEAN IsQuoteInPrecedentArray( UINT32 uiQuoteID );
UINT8 GetQuoteBitNumberFromQuoteID( UINT32 uiQuoteID );
void HandleShutDownOfMapScreenWhileExternfaceIsTalking( void );
void StopAnyCurrentlyTalkingSpeech( );
// handle pausing of the dialogue queue
void PauseDialogueQueue( void );
// unpause the dialogue queue
void UnPauseDialogueQueue( void );
void SetExternMapscreenSpeechPanelXY( INT16 sXPos, INT16 sYPos );
#ifdef JA2UB
void RemoveJerryMiloBrokenLaptopOverlay();
#endif
#endif