#ifndef _DIALOG_CONTROL_H #define _DIALOG_CONTROL_H #include "faces.h" #include "gamescreen.h" #include "soldier profile type.h" #include // 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 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