1 #ifndef __INTERFACE_DIALOGUE_H
2 #define __INTERFACE_DIALOGUE_H
3 
4 #include "Button_System.h"
5 #include "MouseSystem.h"
6 #include "NPC.h"
7 
8 #include <string_theory/string>
9 
10 
11 extern UINT8 gubSrcSoldierProfile;
12 
13 
14 // Structure used in Tactical display of NPC dialogue
15 struct NPC_DIALOGUE_TYPE
16 {
17 	FACETYPE *face;
18 	INT16    sX;
19 	INT16    sY;
20 	INT16    sPopupX;
21 	INT16    sPopupY;
22 	UINT8    ubPopupOrientation;
23 	UINT8    ubCharNum;
24 	SGPVObject*   uiPanelVO;
25 	BUTTON_PICS*  iButtonImages;
26 	GUIButtonRef  uiCancelButton;
27 	INT8     bCurSelect;
28 	INT8     bOldCurSelect;
29 	UINT16   usWidth;
30 	UINT16   usHeight;
31 	MOUSE_REGION Regions[ 6 ];
32 	MOUSE_REGION BackRegion;
33 	MOUSE_REGION NameRegion;
34 	MOUSE_REGION ScreenRegion;
35 	MOUSE_REGION TextRegion;
36 	BOOLEAN  fTextRegionOn;
37 	BOOLEAN  fOnName;
38 	SGPVSurface* uiSaveBuffer;
39 	BOOLEAN  fHandled;
40 	BOOLEAN  fHandledTalkingVal;
41 	BOOLEAN  fHandledCanDeleteVal;
42 	BOOLEAN  fRenderSubTitlesNow;
43 	BOOLEAN  fSetupSubTitles;
44 	ST::string zQuoteStr; //QIALOGUE_SIZE is in dialog control which includes this file...
45 };
46 
47 
48 // GLOBAL NPC STRUCT
49 extern NPC_DIALOGUE_TYPE gTalkPanel;
50 
51 
52 BOOLEAN InitiateConversationFull(SOLDIERTYPE* pDestSoldier, SOLDIERTYPE* pSrcSoldier, Approach bApproach, UINT8 approach_record, OBJECTTYPE* approach_object);
53 BOOLEAN InitiateConversation(SOLDIERTYPE* pDestSoldier, SOLDIERTYPE* pSrcSoldier, Approach);
54 
55 // Begins quote of NPC Dialogue
56 void TalkingMenuDialogue(UINT16 usQuoteNum);
57 
58 
59 // Removes memory allocated for structure, removes face...
60 void DeleteTalkingMenu(void);
61 
62 BOOLEAN HandleTalkingMenu(void);
63 
64 void RenderTalkingMenu(void);
65 
66 BOOLEAN HandleTalkingMenuEscape( BOOLEAN fCanDelete , BOOLEAN fFromEscKey );
67 
68 // NPC goto gridno
69 void NPCGotoGridNo(ProfileID ubTargetNPC, UINT16 usGridNo, UINT8 ubQuoteNum);
70 // NPC Do action
71 void NPCDoAction(ProfileID ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum);
72 
73 void HandleWaitTimerForNPCTrigger(void);
74 
75 
76 void HandleNPCItemGiven( UINT8 ubNPC, OBJECTTYPE *pObject, INT8 bInvPos );
77 void HandleNPCTriggerNPC(UINT8 ubTargetNPC, UINT8 ubTargetRecord, BOOLEAN fShowDialogueMenu, Approach ubTargetApproach);
78 void HandleNPCDoAction( UINT8 ubTargetNPC, UINT16 usActionCode, UINT8 ubQuoteNum );
79 
80 bool ProfileCurrentlyTalkingInDialoguePanel(UINT8 ubProfile);
81 
82 void InternalInitTalkingMenu(UINT8 ubCharacterNum, INT16 sX, INT16 sY);
83 
84 
85 enum
86 {
87 	NPC_ACTION_NONE = 0,
88 	NPC_ACTION_DONT_ACCEPT_ITEM,
89 	NPC_ACTION_FACE_CLOSEST_PLAYER,
90 	NPC_ACTION_OPEN_CLOSEST_DOOR,
91 	NPC_ACTION_RECRUIT,
92 	NPC_ACTION_THREATENINGLY_RAISE_GUN,
93 	NPC_ACTION_LOWER_GUN,
94 	NPC_ACTION_READY_GUN,
95 	NPC_ACTION_START_RUNNING,
96 	NPC_ACTION_STOP_RUNNING,
97 	NPC_ACTION_BOOST_TOWN_LOYALTY, // 10
98 	NPC_ACTION_PENALIZE_TOWN_LOYALTY,
99 	NPC_ACTION_STOP_PLAYER_GIVING_FIRST_AID,
100 	NPC_ACTION_FACE_NORTH,
101 	NPC_ACTION_FACE_NORTH_EAST,
102 	NPC_ACTION_FACE_EAST,
103 	NPC_ACTION_FACE_SOUTH_EAST,
104 	NPC_ACTION_FACE_SOUTH,
105 	NPC_ACTION_FACE_SOUTH_WEST,
106 	NPC_ACTION_FACE_WEST,
107 	NPC_ACTION_FACE_NORTH_WEST, // 20
108 	NPC_ACTION_TRIGGER_FRIEND_WITH_HOSTILE_QUOTE,
109 	NPC_ACTION_BECOME_ENEMY,
110 	NPC_ACTION_RECRUIT_WITH_SALARY,
111 	NPC_ACTION_CLOSE_DIALOGUE_PANEL,
112 	NPC_ACTION_ENTER_COMBAT, // 25
113 	NPC_ACTION_TERRORIST_REVEALS_SELF,
114 	NPC_ACTION_OPEN_CLOSEST_CABINET,
115 	NPC_ACTION_SLAP,
116 	NPC_ACTION_TRIGGER_QUEEN_BY_CITIES_CONTROLLED,
117 	NPC_ACTION_SEND_SOLDIERS_TO_DRASSEN, // 30
118 	NPC_ACTION_SEND_SOLDIERS_TO_BATTLE_LOCATION,
119 	NPC_ACTION_TRIGGER_QUEEN_BY_SAM_SITES_CONTROLLED,
120 	NPC_ACTION_PUNCH_PC_SLOT_0,
121 	NPC_ACTION_PUNCH_PC_SLOT_1,
122 	NPC_ACTION_PUNCH_PC_SLOT_2,				// 35
123 	NPC_ACTION_FRUSTRATED_SLAP,
124 	NPC_ACTION_PUNCH_FIRST_LIVING_PC,
125 	NPC_ACTION_SHOOT_ELLIOT,
126 	NPC_ACTION_PLAYER_SAYS_NICE_LATER,
127 	NPC_ACTION_GET_ITEMS_FROM_CLOSEST_CABINET, // 40
128 	NPC_ACTION_INITIATE_SHOPKEEPER_INTERFACE,
129 	NPC_ACTION_GET_OUT_OF_WHEELCHAIR,
130 	NPC_ACTION_GET_OUT_OF_WHEELCHAIR_AND_BECOME_HOSTILE,
131 	NPC_ACTION_PLAYER_SAYS_NASTY_LATER, // 44
132 
133 	NPC_ACTION_GRANT_EXPERIENCE_1 = 50,
134 	NPC_ACTION_GRANT_EXPERIENCE_2,
135 	NPC_ACTION_GRANT_EXPERIENCE_3,
136 	NPC_ACTION_GRANT_EXPERIENCE_4,
137 	NPC_ACTION_GRANT_EXPERIENCE_5,
138 
139 	NPC_ACTION_GOTO_HIDEOUT = 100,
140 	NPC_ACTION_FATIMA_GIVE_LETTER,
141 	NPC_ACTION_LEAVE_HIDEOUT,
142 	NPC_ACTION_TRAVERSE_MAP_EAST,
143 	NPC_ACTION_TRAVERSE_MAP_SOUTH,
144 	NPC_ACTION_TRAVERSE_MAP_WEST,
145 	NPC_ACTION_TRAVERSE_MAP_NORTH,
146 	NPC_ACTION_REPORT_SHIPMENT_SIZE,
147 	NPC_ACTION_RETURN_STOLEN_SHIPMENT_ITEMS,
148 	NPC_ACTION_SET_PABLO_BRIBE_DELAY,
149 	NPC_ACTION_ASK_ABOUT_ESCORTING_EPC, // 110
150 	NPC_ACTION_DRINK_DRINK_DRINK,
151 	NPC_ACTION_TRIGGER_END_OF_FOOD_QUEST,
152 	NPC_ACTION_SEND_PACOS_INTO_HIDING,
153 	NPC_ACTION_HAVE_PACOS_FOLLOW,
154 	NPC_ACTION_SET_DELAYED_PACKAGE_TIMER, // 115
155 	NPC_ACTION_SET_RANDOM_PACKAGE_DAMAGE_TIMER,
156 	NPC_ACTION_FREE_KIDS,
157 	NPC_ACTION_CHOOSE_DOCTOR,
158 	NPC_ACTION_REPORT_BALANCE,
159 	NPC_ACTION_ASK_ABOUT_PAYING_RPC,
160 	NPC_ACTION_DELAYED_MAKE_BRENDA_LEAVE,
161 	NPC_ACTION_SEX,
162 	NPC_ACTION_KYLE_GETS_MONEY,
163 	NPC_ACTION_LAYLA_GIVEN_WRONG_AMOUNT_OF_CASH, // 124
164 	NPC_ACTION_SET_GIRLS_AVAILABLE,
165 	NPC_ACTION_SET_DELAY_TILL_GIRLS_AVAILABLE,
166 	NPC_ACTION_SET_WAITED_FOR_GIRL_FALSE,
167 	NPC_ACTION_TRIGGER_LAYLA_13_14_OR_15,
168 	NPC_ACTION_OPEN_CARLAS_DOOR,
169 	NPC_ACTION_OPEN_CINDYS_DOOR, // 130
170 	NPC_ACTION_OPEN_BAMBIS_DOOR,
171 	NPC_ACTION_OPEN_MARIAS_DOOR,
172 	NPC_ACTION_POSSIBLY_ADVERTISE_CINDY,
173 	NPC_ACTION_POSSIBLY_ADVERTISE_BAMBI,
174 	NPC_ACTION_DARREN_REQUESTOR, // 135
175 	NPC_ACTION_ADD_JOEY_TO_WORLD,
176 	NPC_ACTION_MARK_KINGPIN_QUOTE_0_USED,
177 	NPC_ACTION_START_BOXING_MATCH,
178 	NPC_ACTION_ENABLE_CAMBRIA_DOCTOR_BONUS,// OBSOLETE, NO LONGER DELAYED
179 	NPC_ACTION_MARTHA_DIES, // 140
180 	NPC_ACTION_DARREN_GIVEN_CASH,
181 	NPC_ACTION_ANGEL_GIVEN_CASH,
182 	NPC_ACTION_TRIGGER_ANGEL_17_OR_18,
183 	NPC_ACTION_BUY_LEATHER_KEVLAR_VEST,
184 	NPC_ACTION_TRIGGER_MARIA, // 145
185 	NPC_ACTION_TRIGGER_ANGEL_16_OR_19,
186 	NPC_ACTION_ANGEL_LEAVES_DEED,
187 	NPC_ACTION_TRIGGER_ANGEL_21_OR_22,
188 	NPC_ACTION_UN_RECRUIT_EPC,
189 	NPC_ACTION_TELEPORT_NPC, // 150
190 	NPC_ACTION_REMOVE_DOREEN,
191 	NPC_ACTION_RESET_SHIPMENT_ARRIVAL_STUFF,
192 	// 153 Fix helicopter by next morning?
193 	NPC_ACTION_DECIDE_ACTIVE_TERRORISTS = 154,
194 	NPC_ACTION_TRIGGER_FATHER_18_20_OR_15,
195 	NPC_ACTION_CHECK_LAST_TERRORIST_HEAD,
196 	NPC_ACTION_CARMEN_LEAVES_FOR_C13,
197 	NPC_ACTION_CARMEN_LEAVES_FOR_GOOD,
198 	NPC_ACTION_CARMEN_LEAVES_ON_NEXT_SECTOR_LOAD,
199 	NPC_ACTION_TRIGGER_VINCE_BY_LOYALTY, // 160
200 	NPC_ACTION_MEDICAL_REQUESTOR,
201 	NPC_ACTION_MEDICAL_REQUESTOR_2,
202 	NPC_ACTION_CHECK_DOCTORING_MONEY_GIVEN, // handled in NPC.c
203 	NPC_ACTION_START_DOCTORING,
204 	NPC_ACTION_VINCE_UNRECRUITABLE, // 165
205 	NPC_ACTION_END_COMBAT,
206 	NPC_ACTION_BECOME_FRIENDLY_END_COMBAT,
207 	NPC_ACTION_SET_EPC_TO_NPC,
208 	NPC_ACTION_BUY_VEHICLE_REQUESTOR,
209 	NPC_ACTION_END_MEANWHILE,// 170
210 	NPC_ACTION_START_BLOODCAT_QUEST,
211 	NPC_ACTION_START_MINE,
212 	NPC_ACTION_STOP_MINE,
213 	NPC_ACTION_RESET_MINE_CAPTURED,
214 	NPC_ACTION_SET_OSWALD_RECORD_13_USED, // 175
215 	NPC_ACTION_SET_CALVIN_RECORD_13_USED,
216 	NPC_ACTION_SET_CARL_RECORD_13_USED,
217 	NPC_ACTION_SET_FRED_RECORD_13_USED,
218 	NPC_ACTION_SET_MATT_RECORD_13_USED,
219 	NPC_ACTION_TRIGGER_MATT, // 180
220 	NPC_ACTION_REDUCE_CONRAD_SALARY_CONDITIONS,
221 	NPC_ACTION_REMOVE_CONRAD,
222 	NPC_ACTION_KROTT_REQUESTOR,
223 	NPC_ACTION_KROTT_ALIVE_LOYALTY_BOOST, // Delayed loyalty effects elimininated.  Sep.12/98.  ARM
224 	NPC_ACTION_TRIGGER_YANNI, // 185
225 	NPC_ACTION_TRIGGER_MARY_OR_JOHN_RECORD_9,
226 	NPC_ACTION_TRIGGER_MARY_OR_JOHN_RECORD_10,
227 	NPC_ACTION_ADD_JOHNS_GUN_SHIPMENT,
228 	// 189 ??
229 	NPC_ACTION_TRIGGER_KROTT_11_OR_12 = 190, // 190 Trigger record 11 or 12 for Krott
230 	NPC_ACTION_MADLAB_GIVEN_GUN = 191,
231 	NPC_ACTION_MADLAB_GIVEN_CAMERA,
232 	NPC_ACTION_MADLAB_ATTACHES_GOOD_CAMERA,
233 	NPC_ACTION_READY_ROBOT,
234 	NPC_ACTION_WALTER_GIVEN_MONEY_INITIALLY,
235 	NPC_ACTION_WALTER_GIVEN_MONEY,
236 	NPC_ACTION_MAKE_NPC_FIRST_BARTENDER = 197,
237 	NPC_ACTION_MAKE_NPC_SECOND_BARTENDER,
238 	NPC_ACTION_MAKE_NPC_THIRD_BARTENDER,
239 	NPC_ACTION_MAKE_NPC_FOURTH_BARTENDER,//200
240 	NPC_ACTION_GERARD_GIVEN_CASH,
241 	NPC_ACTION_FILL_UP_CAR, // obsolete?
242 	NPC_ACTION_JOE_GIVEN_CASH,
243 	NPC_ACTION_TRIGGER_ELLIOT_9_OR_10 = 204, // obsolete?
244 	NPC_ACTION_HANDLE_END_OF_FIGHT,// 205
245 	NPC_ACTION_DARREN_PAYS_PLAYER,
246 	NPC_ACTION_FIGHT_AGAIN_REQUESTOR,
247 	NPC_ACTION_TRIGGER_SPIKE_OR_DARREN,
248 	// 209 is blank
249 	NPC_ACTION_CHANGE_MANNY_POSITION = 210,
250 	NPC_ACTION_TIMER_FOR_VEHICLE, // 211
251 	NPC_ACTION_ASK_ABOUT_PAYING_RPC_WITH_DAILY_SALARY,//212
252 	NPC_ACTION_TRIGGER_MICKY_BY_SCI_FI, // 213
253 	// 214 is blank
254 	NPC_ACTION_TRIGGER_ELLIOT_BY_BATTLE_RESULT = 215,
255 	NPC_ACTION_TRIGGER_ELLIOT_BY_SAM_DISABLED,
256 	NPC_ACTION_LAYLAS_NEXT_LINE_AFTER_CARLA,
257 	NPC_ACTION_LAYLAS_NEXT_LINE_AFTER_CINDY,
258 	NPC_ACTION_LAYLAS_NEXT_LINE_AFTER_BAMBI,
259 	NPC_ACTION_LAYLAS_NEXT_LINE_AFTER_MARIA,
260 	NPC_ACTION_PROMPT_PLAYER_TO_LIE, // 221
261 	NPC_ACTION_REMOVE_JOE_QUEEN, // 222
262 	NPC_ACTION_REMOVE_ELLIOT_END_MEANWHILE, // 223
263 	NPC_ACTION_NO_SCI_FI_END_MEANWHILE, //224
264 	// 225 is obsolete
265 	NPC_ACTION_TRIGGER_MARRY_DARYL_PROMPT = 226,
266 	NPC_ACTION_HAVE_MARRIED_NPC_LEAVE_TEAM,
267 	NPC_ACTION_KINGPIN_GIVEN_MONEY, // actually handled in item-acceptance code, NPC.c
268 	NPC_ACTION_KINGPIN_TRIGGER_25_OR_14,
269 	NPC_ACTION_SEND_ENRICO_MIGUEL_EMAIL,
270 	NPC_ACTION_END_DEMO,// 231,
271 	NPC_ACTION_INVOKE_CONVERSATION_MODE, // 232
272 	// 233 is obsolete
273 	NPC_ACTION_START_TIMER_ON_KEITH_GOING_OUT_OF_BUSINESS = 234,
274 	NPC_ACTION_KEITH_GOING_BACK_IN_BUSINESS,
275 	NPC_ACTION_MAKE_RAT_DISAPPEAR,
276 	NPC_ACTION_DOCTOR_ESCORT_PATIENTS,
277 	NPC_ACTION_ELLIOT_DECIDE_WHICH_QUOTE_FOR_PLAYER_ATTACK,
278 	NPC_ACTION_QUEEN_DECIDE_WHICH_QUOTE_FOR_PLAYER_ATTACK,
279 	NPC_ACTION_CANCEL_WAYPOINTS, // 240
280 	// 241 currently obsolete, CJC Oct 14
281 	NPC_ACTION_SHOW_TIXA = 242,
282 	NPC_ACTION_SHOW_ORTA,
283 	NPC_ACTION_DRINK_WINE,
284 	NPC_ACTION_DRINK_BOOZE,
285 	NPC_ACTION_TRIGGER_ANGEL_22_OR_24,
286 	NPC_ACTION_SET_FACT_105_FALSE, // 247
287 	NPC_ACTION_MAKE_BRENDA_STATIONARY, // 248
288 	NPC_ACTION_TRIGGER_DARREN_OR_KINGPIN_IMPRESSED = 249,
289 	NPC_ACTION_TRIGGER_KINGPIN_IMPRESSED, // 250
290 	NPC_ACTION_ADD_RAT,
291 
292 	NPC_ACTION_ENDGAME_STATE_1 = 253,
293 	NPC_ACTION_ENDGAME_STATE_2,
294 	NPC_ACTION_MAKE_MIGUEL_STATIONARY,
295 	NPC_ACTION_MAKE_ESTONI_A_FUEL_SITE, // 256
296 	NPC_ACTION_24_HOURS_SINCE_JOEY_RESCUED,// 257
297 	NPC_ACTION_24_HOURS_SINCE_DOCTORS_TALKED_TO,// 258
298 	NPC_ACTION_SEND_SOLDIERS_TO_OMERTA,// 259
299 	NPC_ACTION_ADD_MORE_ELITES,// 260
300 	NPC_ACTION_GIVE_KNOWLEDGE_OF_ALL_MERCS,// 261
301 	NPC_ACTION_REMOVE_MERC_FOR_MARRIAGE,
302 	NPC_ACTION_TRIGGER_JOE_32_OR_33,
303 	NPC_ACTION_REMOVE_NPC,
304 	NPC_ACTION_HISTORY_GOT_ROCKET_RIFLES,
305 	NPC_ACTION_HISTORY_DEIDRANNA_DEAD_BODIES,
306 	NPC_ACTION_HISTORY_BOXING_MATCHES,
307 	NPC_ACTION_HISTORY_SOMETHING_IN_MINES,
308 	NPC_ACTION_HISTORY_DEVIN,
309 	NPC_ACTION_HISTORY_MIKE,// 270
310 	NPC_ACTION_HISTORY_TONY,
311 	NPC_ACTION_HISTORY_KROTT,
312 	NPC_ACTION_HISTORY_KYLE,
313 	NPC_ACTION_HISTORY_MADLAB,
314 	NPC_ACTION_HISTORY_GABBY,
315 	NPC_ACTION_HISTORY_KEITH_OUT_OF_BUSINESS,
316 	NPC_ACTION_HISTORY_HOWARD_CYANIDE,
317 	NPC_ACTION_HISTORY_KEITH,
318 	NPC_ACTION_HISTORY_HOWARD,
319 	NPC_ACTION_HISTORY_PERKO,// 280
320 	NPC_ACTION_HISTORY_SAM,
321 	NPC_ACTION_HISTORY_FRANZ,
322 	NPC_ACTION_HISTORY_ARNOLD,
323 	NPC_ACTION_HISTORY_FREDO,
324 	NPC_ACTION_HISTORY_RICHGUY_BALIME,// 285
325 	NPC_ACTION_HISTORY_JAKE,
326 	NPC_ACTION_HISTORY_BUM_KEYCARD,
327 	NPC_ACTION_HISTORY_WALTER,
328 	NPC_ACTION_HISTORY_DAVE,
329 	NPC_ACTION_HISTORY_PABLO,// 290
330 	NPC_ACTION_HISTORY_KINGPIN_MONEY,
331 	NPC_ACTION_SEND_TROOPS_TO_SAM,
332 	NPC_ACTION_PUT_PACOS_IN_BASEMENT,
333 	NPC_ACTION_HISTORY_ASSASSIN,
334 	NPC_ACTION_TRIGGER_HANS_BY_ROOM, // 295
335 	NPC_ACTION_TRIGGER_MADLAB_31,
336 	NPC_ACTION_TRIGGER_MADLAB_32,
337 	NPC_ACTION_TRIGGER_BREWSTER_BY_WARDEN_PROXIMITY, // 298
338 
339 	NPC_ACTION_TURN_TO_FACE_NEAREST_MERC = 500,
340 	NPC_ACTION_TURN_TO_FACE_PROFILE_ID_0,
341 
342 	NPC_ACTION_LAST_TURN_TO_FACE_PROFILE = 650
343 };
344 
345 #define HOSPITAL_PATIENT_DISTANCE 9
346 
347 extern INT32 giHospitalTempBalance;
348 extern INT32 giHospitalRefund;
349 extern INT8 gbHospitalPriceModifier;
350 
351 UINT32 CalcPatientMedicalCost(const SOLDIERTYPE* s);
352 extern UINT32 CalcMedicalCost( UINT8 ubId );
353 
354 extern BOOLEAN gfInTalkPanel;
355 
356 void HandleTalkingMenuBackspace(void);
357 
358 void HandlePendingInitConv(void);
359 
360 extern BOOLEAN       gfWaitingForTriggerTimer;
361 extern MercPopUpBox* g_interface_dialogue_box;
362 
363 #endif
364