1 //Copyright Paul Reiche, Fred Ford. 1992-2002
2
3 /*
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17 */
18
19 #include "../commall.h"
20 #include "resinst.h"
21 #include "strings.h"
22
23 #include "uqm/build.h"
24 #include "uqm/gameev.h"
25
26
27 static LOCDATA thradd_desc =
28 {
29 NULL, /* init_encounter_func */
30 NULL, /* post_encounter_func */
31 NULL, /* uninit_encounter_func */
32 THRADD_PMAP_ANIM, /* AlienFrame */
33 THRADD_FONT, /* AlienFont */
34 WHITE_COLOR_INIT, /* AlienTextFColor */
35 BLACK_COLOR_INIT, /* AlienTextBColor */
36 {0, 0}, /* AlienTextBaseline */
37 0, /* SIS_TEXT_WIDTH - 16, */ /* AlienTextWidth */
38 ALIGN_CENTER, /* AlienTextAlign */
39 VALIGN_TOP, /* AlienTextValign */
40 THRADD_COLOR_MAP, /* AlienColorMap */
41 THRADD_MUSIC, /* AlienSong */
42 NULL_RESOURCE, /* AlienAltSong */
43 0, /* AlienSongFlags */
44 THRADD_CONVERSATION_PHRASES, /* PlayerPhrases */
45 8, /* NumAnimations */
46 { /* AlienAmbientArray (ambient animations) */
47 {
48 8, /* StartIndex */
49 4, /* NumFrames */
50 RANDOM_ANIM, /* AnimFlags */
51 ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
52 ONE_SECOND / 15, ONE_SECOND / 15, /* RestartRate */
53 (1 << 4), /* BlockMask */
54 },
55 {
56 12, /* StartIndex */
57 9, /* NumFrames */
58 CIRCULAR_ANIM, /* AnimFlags */
59 ONE_SECOND / 20, 0, /* FrameRate */
60 ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
61 0, /* BlockMask */
62 },
63 {
64 21, /* StartIndex */
65 6, /* NumFrames */
66 RANDOM_ANIM, /* AnimFlags */
67 ONE_SECOND / 20, 0, /* FrameRate */
68 ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
69 0, /* BlockMask */
70 },
71 {
72 27, /* StartIndex */
73 3, /* NumFrames */
74 YOYO_ANIM, /* AnimFlags */
75 ONE_SECOND / 20, 0, /* FrameRate */
76 ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
77 (1 << 4), /* BlockMask */
78 },
79 {
80 30, /* StartIndex */
81 12, /* NumFrames */
82 CIRCULAR_ANIM
83 | WAIT_TALKING, /* AnimFlags */
84 ONE_SECOND / 12, 0, /* FrameRate */
85 ONE_SECOND, ONE_SECOND, /* RestartRate */
86 (1 << 0) | (1 << 3) | (1 << 5),
87 },
88 {
89 42, /* StartIndex */
90 5, /* NumFrames */
91 YOYO_ANIM, /* AnimFlags */
92 ONE_SECOND / 10, ONE_SECOND / 30, /* FrameRate */
93 ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
94 (1 << 4) | (1 << 6), /* BlockMask */
95 },
96 {
97 47, /* StartIndex */
98 5, /* NumFrames */
99 YOYO_ANIM, /* AnimFlags */
100 ONE_SECOND / 10, ONE_SECOND / 30, /* FrameRate */
101 ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
102 (1 << 5), /* BlockMask */
103 },
104 {
105 52, /* StartIndex */
106 4, /* NumFrames */
107 RANDOM_ANIM, /* AnimFlags */
108 ONE_SECOND / 20, 0, /* FrameRate */
109 ONE_SECOND / 20, 0, /* RestartRate */
110 0, /* BlockMask */
111 },
112 },
113 { /* AlienTransitionDesc */
114 0, /* StartIndex */
115 0, /* NumFrames */
116 0, /* AnimFlags */
117 0, 0, /* FrameRate */
118 0, 0, /* RestartRate */
119 0, /* BlockMask */
120 },
121 { /* AlienTalkDesc */
122 1, /* StartIndex */
123 7, /* NumFrames */
124 0, /* AnimFlags */
125 ONE_SECOND / 15, 0, /* FrameRate */
126 ONE_SECOND / 12, 0, /* RestartRate */
127 0, /* BlockMask */
128 },
129 NULL, /* AlienNumberSpeech - none */
130 /* Filler for loaded resources */
131 NULL, NULL, NULL,
132 NULL,
133 NULL,
134 };
135
136 static int
GetCultureName(void)137 GetCultureName (void)
138 {
139 int culture = 0;
140
141 switch (GET_GAME_STATE (THRADD_CULTURE))
142 {
143 case 1:
144 culture = CULTURE;
145 break;
146 case 2:
147 culture = FAT_JERKS;
148 break;
149 case 3:
150 culture = SLAVE_EMPIRE;
151 break;
152 default:
153 assert (0 && "Unknown culture");
154 }
155
156 return (culture);
157 }
158
159 static void
PolitePhrase(BYTE which_phrase)160 PolitePhrase (BYTE which_phrase)
161 {
162 switch (which_phrase)
163 {
164 case 0:
165 NPCPhrase (HELLO_POLITE_1);
166 break;
167 case 1:
168 NPCPhrase (HELLO_POLITE_2);
169 break;
170 case 2:
171 NPCPhrase (HELLO_POLITE_3);
172 break;
173 case 3:
174 NPCPhrase (HELLO_POLITE_4);
175 break;
176 }
177 }
178
179 static void
RhymePhrase(BYTE which_phrase)180 RhymePhrase (BYTE which_phrase)
181 {
182 switch (which_phrase)
183 {
184 case 0:
185 NPCPhrase (HELLO_RHYME_1);
186 break;
187 case 1:
188 NPCPhrase (HELLO_RHYME_2);
189 break;
190 case 2:
191 NPCPhrase (HELLO_RHYME_3);
192 break;
193 case 3:
194 NPCPhrase (HELLO_RHYME_4);
195 break;
196 }
197 }
198
199 static void
PigLatinPhrase(BYTE which_phrase)200 PigLatinPhrase (BYTE which_phrase)
201 {
202 switch (which_phrase)
203 {
204 case 0:
205 NPCPhrase (HELLO_PIG_LATIN_1);
206 break;
207 case 1:
208 NPCPhrase (HELLO_PIG_LATIN_2);
209 break;
210 case 2:
211 NPCPhrase (HELLO_PIG_LATIN_3);
212 break;
213 case 3:
214 NPCPhrase (HELLO_PIG_LATIN_4);
215 break;
216 }
217 }
218
219 static void
LikeYouPhrase(BYTE which_phrase)220 LikeYouPhrase (BYTE which_phrase)
221 {
222 switch (which_phrase)
223 {
224 case 0:
225 NPCPhrase (HELLO_LIKE_YOU_1);
226 break;
227 case 1:
228 NPCPhrase (HELLO_LIKE_YOU_2);
229 break;
230 case 2:
231 NPCPhrase (HELLO_LIKE_YOU_3);
232 break;
233 case 3:
234 NPCPhrase (HELLO_LIKE_YOU_4);
235 break;
236 }
237 }
238
239 static void
ExitConversation(RESPONSE_REF R)240 ExitConversation (RESPONSE_REF R)
241 {
242 setSegue (Segue_hostile);
243
244 if (PLAYER_SAID (R, bye_hostile_2))
245 NPCPhrase (GOODBYE_HOSTILE_2);
246 else if (PLAYER_SAID (R, bye_hostile_1))
247 {
248 NPCPhrase (GOODBYE_HOSTILE_1);
249
250 SET_GAME_STATE (THRADD_HOSTILE_STACK_5, 1);
251 }
252 else if (PLAYER_SAID (R, submit_1))
253 {
254 NPCPhrase (NO_SUBMIT_1);
255
256 SET_GAME_STATE (THRADD_HOSTILE_STACK_2, 1);
257 }
258 else if (PLAYER_SAID (R, submit_2))
259 NPCPhrase (NO_SUBMIT_2);
260 else if (PLAYER_SAID (R, got_idea))
261 {
262 NPCPhrase (GOOD_IDEA);
263
264 setSegue (Segue_peace);
265 AddEvent (RELATIVE_EVENT, 0, 0, 0, ADVANCE_THRADD_MISSION);
266 SET_GAME_STATE (THRADD_STACK_1, 5);
267 }
268 else if (PLAYER_SAID (R, bye_hostile_helix))
269 NPCPhrase (GOODBYE_HOSTILE_HELIX);
270 else if (PLAYER_SAID (R, bye_ally))
271 {
272 BYTE NumVisits;
273
274 NumVisits = GET_GAME_STATE (THRADD_STACK_1);
275 switch (NumVisits++)
276 {
277 case 0:
278 NPCPhrase (GOODBYE_ALLY_1);
279 break;
280 case 1:
281 NPCPhrase (GOODBYE_ALLY_2);
282 break;
283 case 2:
284 NPCPhrase (GOODBYE_ALLY_3);
285 break;
286 case 3:
287 NPCPhrase (GOODBYE_ALLY_4);
288 --NumVisits;
289 break;
290 }
291 SET_GAME_STATE (THRADD_STACK_1, NumVisits);
292 setSegue (Segue_peace);
293 }
294 else if (PLAYER_SAID (R, may_i_land))
295 {
296 NPCPhrase (SURE_LAND);
297
298 SET_GAME_STATE (HELIX_UNPROTECTED, 1);
299 setSegue (Segue_peace);
300 }
301 else if (PLAYER_SAID (R, demand_to_land))
302 NPCPhrase (NO_DEMAND);
303 else if (PLAYER_SAID (R, i_need_to_land_lie))
304 NPCPhrase (CAUGHT_LIE);
305 else
306 {
307 if (PLAYER_SAID (R, contemplative))
308 {
309 NPCPhrase (OK_CONTEMPLATIVE);
310
311 SET_GAME_STATE (THRADD_DEMEANOR, 0);
312 }
313 else if (PLAYER_SAID (R, friendly))
314 {
315 NPCPhrase (OK_FRIENDLY);
316
317 SET_GAME_STATE (THRADD_DEMEANOR, 1);
318 }
319 else if (PLAYER_SAID (R, wacky))
320 {
321 NPCPhrase (OK_WACKY);
322
323 SET_GAME_STATE (THRADD_DEMEANOR, 2);
324 }
325 else if (PLAYER_SAID (R, just_like_us))
326 {
327 NPCPhrase (OK_JUST_LIKE_YOU);
328
329 SET_GAME_STATE (THRADD_DEMEANOR, 3);
330 }
331 NPCPhrase (WORK_TO_DO);
332
333 setSegue (Segue_peace);
334 }
335 }
336
337 static void
ThraddAllies(RESPONSE_REF R)338 ThraddAllies (RESPONSE_REF R)
339 {
340 BYTE NumVisits;
341
342 if (PLAYER_SAID (R, why_you_here_ally))
343 {
344 NPCPhrase (GUARDING_HELIX_ALLY);
345
346 DISABLE_PHRASE (why_you_here_ally);
347 }
348 else if (PLAYER_SAID (R, whats_helix_ally))
349 {
350 NPCPhrase (HELIX_IS_ALLY);
351
352 DISABLE_PHRASE (whats_helix_ally);
353 }
354 else if (PLAYER_SAID (R, whats_up_ally))
355 {
356 NumVisits = GET_GAME_STATE (THRADD_INFO);
357 switch (NumVisits++)
358 {
359 case 0:
360 NPCPhrase (GENERAL_INFO_ALLY_1);
361 break;
362 case 1:
363 NPCPhrase (GENERAL_INFO_ALLY_2);
364 break;
365 case 2:
366 NPCPhrase (GENERAL_INFO_ALLY_3);
367 break;
368 case 3:
369 NPCPhrase (GENERAL_INFO_ALLY_4);
370 --NumVisits;
371 break;
372 }
373 SET_GAME_STATE (THRADD_INFO, NumVisits);
374
375 DISABLE_PHRASE (whats_up_ally);
376 }
377 else if (PLAYER_SAID (R, how_goes_culture))
378 {
379 NumVisits = GET_GAME_STATE (THRADD_DEMEANOR);
380 switch (NumVisits & ((1 << 2) - 1))
381 {
382 case 0:
383 if (!(NumVisits & ~((1 << 2) - 1)))
384 NPCPhrase (CONTEMP_GOES_1);
385 else
386 NPCPhrase (CONTEMP_GOES_2);
387 break;
388 case 1:
389 if (!(NumVisits & ~((1 << 2) - 1)))
390 NPCPhrase (FRIENDLY_GOES_1);
391 else
392 NPCPhrase (FRIENDLY_GOES_2);
393 break;
394 case 2:
395 if (!(NumVisits & ~((1 << 2) - 1)))
396 NPCPhrase (WACKY_GOES_1);
397 else
398 NPCPhrase (WACKY_GOES_2);
399 break;
400 case 3:
401 if (!(NumVisits & ~((1 << 2) - 1)))
402 NPCPhrase (LIKE_YOU_GOES_1);
403 else
404 NPCPhrase (LIKE_YOU_GOES_2);
405 break;
406 }
407 NumVisits |= 1 << 2;
408 SET_GAME_STATE (THRADD_DEMEANOR, NumVisits);
409
410 DISABLE_PHRASE (how_goes_culture);
411 }
412
413 if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6))
414 {
415 if (PHRASE_ENABLED (why_you_here_ally))
416 Response (why_you_here_ally, ThraddAllies);
417 else
418 {
419 if (PHRASE_ENABLED (whats_helix_ally))
420 Response (whats_helix_ally, ThraddAllies);
421 Response (may_i_land, ExitConversation);
422 }
423 }
424 if (PHRASE_ENABLED (whats_up_ally))
425 Response (whats_up_ally, ThraddAllies);
426 if (PHRASE_ENABLED (how_goes_culture))
427 Response (how_goes_culture, ThraddAllies);
428 Response (bye_ally, ExitConversation);
429 }
430
431 static void
ThraddDemeanor(RESPONSE_REF R)432 ThraddDemeanor (RESPONSE_REF R)
433 {
434 if (PLAYER_SAID (R, you_decide))
435 {
436 NPCPhrase (OK_CULTURE_20);
437
438 SET_GAME_STATE (THRADD_CULTURE, 1);
439 }
440 else if (PLAYER_SAID (R, fat))
441 {
442 NPCPhrase (OK_FAT);
443
444 SET_GAME_STATE (THRADD_CULTURE, 2);
445 }
446 else if (PLAYER_SAID (R, the_slave_empire0))
447 {
448 SET_GAME_STATE (THRADD_CULTURE, 3);
449
450 NPCPhrase (OK_SLAVE);
451 }
452
453 NPCPhrase (HOW_SHOULD_WE_ACT);
454 Response (contemplative, ExitConversation);
455 Response (friendly, ExitConversation);
456 Response (wacky, ExitConversation);
457 Response (just_like_us, ExitConversation);
458 }
459
460 static void
ThraddCulture(RESPONSE_REF R)461 ThraddCulture (RESPONSE_REF R)
462 {
463 if (PLAYER_SAID (R, be_polite))
464 {
465 NPCPhrase (OK_POLITE);
466
467 SET_GAME_STATE (THRADD_INTRO, 0);
468 }
469 else if (PLAYER_SAID (R, use_rhymes))
470 {
471 NPCPhrase (OK_RHYMES);
472
473 SET_GAME_STATE (THRADD_INTRO, 1);
474 }
475 else if (PLAYER_SAID (R, speak_pig_latin))
476 {
477 NPCPhrase (OK_PIG_LATIN);
478
479 SET_GAME_STATE (THRADD_INTRO, 2);
480 }
481 else if (PLAYER_SAID (R, just_the_way_we_do))
482 {
483 NPCPhrase (OK_WAY_YOU_DO);
484
485 SET_GAME_STATE (THRADD_INTRO, 3);
486 }
487 NPCPhrase (WHAT_NAME_FOR_CULTURE);
488
489 construct_response (
490 shared_phrase_buf,
491 the_slave_empire0,
492 GLOBAL_SIS (CommanderName),
493 the_slave_empire1,
494 (UNICODE*)NULL);
495
496 Response (you_decide, ThraddDemeanor);
497 Response (fat, ThraddDemeanor);
498 DoResponsePhrase (the_slave_empire0, ThraddDemeanor, shared_phrase_buf);
499 }
500
501 static void
ThraddWorship(RESPONSE_REF R)502 ThraddWorship (RESPONSE_REF R)
503 {
504 (void) R; // ignored
505 SET_GAME_STATE (THRADD_VISITS, 0);
506 SET_GAME_STATE (THRADD_MANNER, 1);
507 SET_GAME_STATE (THRADD_STACK_1, 0);
508 SetRaceAllied (THRADDASH_SHIP, TRUE);
509
510 Response (be_polite, ThraddCulture);
511 Response (speak_pig_latin, ThraddCulture);
512 Response (use_rhymes, ThraddCulture);
513 Response (just_the_way_we_do, ThraddCulture);
514 }
515
516 static void
HelixWorld(RESPONSE_REF R)517 HelixWorld (RESPONSE_REF R)
518 {
519 if (PLAYER_SAID (R, why_you_here_hostile))
520 {
521 NPCPhrase (NONE_OF_YOUR_CONCERN);
522
523 SET_GAME_STATE (THRADD_CULTURE, 1);
524 }
525 else if (PLAYER_SAID (R, what_about_this_world))
526 {
527 NPCPhrase (BLUE_HELIX);
528
529 SET_GAME_STATE (THRADD_INTRO, 1);
530 }
531 else if (PLAYER_SAID (R, whats_helix_hostile))
532 {
533 NPCPhrase (HELIX_IS_HOSTILE);
534
535 SET_GAME_STATE (THRADD_INTRO, 2);
536 }
537 else if (PLAYER_SAID (R, i_need_to_land_lie))
538 {
539 NPCPhrase (CAUGHT_LIE);
540
541 SET_GAME_STATE (THRADD_DEMEANOR, 1);
542 }
543
544 if (!GET_GAME_STATE (THRADD_CULTURE))
545 Response (why_you_here_hostile, HelixWorld);
546 else
547 {
548 Response (demand_to_land, ExitConversation);
549 }
550 switch (GET_GAME_STATE (THRADD_INTRO))
551 {
552 case 0:
553 Response (what_about_this_world, HelixWorld);
554 break;
555 case 1:
556 Response (whats_helix_hostile, HelixWorld);
557 break;
558 }
559 if (!GET_GAME_STATE (THRADD_DEMEANOR))
560 {
561 Response (i_need_to_land_lie, ExitConversation);
562 }
563 Response (bye_hostile_helix, ExitConversation);
564 }
565
566 static void
ThraddHostile(RESPONSE_REF R)567 ThraddHostile (RESPONSE_REF R)
568 {
569 if (PLAYER_SAID (R, whats_up_hostile_1))
570 {
571 NPCPhrase (GENERAL_INFO_HOSTILE_1);
572
573 SET_GAME_STATE (THRADD_INFO, 1);
574 DISABLE_PHRASE (whats_up_hostile_2);
575 }
576 else if (PLAYER_SAID (R, whats_up_hostile_2))
577 {
578 BYTE NumVisits;
579
580 NumVisits = GET_GAME_STATE (THRADD_INFO);
581 switch (NumVisits++)
582 {
583 case 1:
584 NPCPhrase (GENERAL_INFO_HOSTILE_2);
585 break;
586 case 2:
587 NPCPhrase (GENERAL_INFO_HOSTILE_3);
588 break;
589 case 3:
590 NPCPhrase (GENERAL_INFO_HOSTILE_4);
591 --NumVisits;
592 break;
593 }
594 SET_GAME_STATE (THRADD_INFO, NumVisits);
595
596 DISABLE_PHRASE (whats_up_hostile_2);
597 }
598 else if (PLAYER_SAID (R, what_about_you_1))
599 {
600 NPCPhrase (ABOUT_US_1);
601
602 SET_GAME_STATE (THRADD_STACK_1, 1);
603 }
604 else if (PLAYER_SAID (R, what_about_you_2))
605 {
606 NPCPhrase (ABOUT_US_2);
607
608 SET_GAME_STATE (THRADD_STACK_1, 2);
609 }
610 else if (PLAYER_SAID (R, what_about_urquan_1))
611 {
612 NPCPhrase (ABOUT_URQUAN_1);
613
614 SET_GAME_STATE (THRADD_STACK_1, 3);
615 }
616 else if (PLAYER_SAID (R, what_about_urquan_2))
617 {
618 NPCPhrase (ABOUT_URQUAN_2);
619
620 SET_GAME_STATE (THRADD_STACK_1, 4);
621 }
622 else if (PLAYER_SAID (R, be_friends_1))
623 {
624 NPCPhrase (NO_FRIENDS_1);
625
626 SET_GAME_STATE (THRADD_HOSTILE_STACK_3, 1);
627 }
628 else if (PLAYER_SAID (R, be_friends_2))
629 {
630 NPCPhrase (NO_FRIENDS_2);
631 DISABLE_PHRASE (be_friends_2);
632 }
633 else if (PLAYER_SAID (R, how_impressed_urquan_1))
634 {
635 NPCPhrase (IMPRESSED_LIKE_SO_1);
636
637 SET_GAME_STATE (THRADD_HOSTILE_STACK_4, 1);
638 }
639 else if (PLAYER_SAID (R, how_impressed_urquan_2))
640 {
641 NPCPhrase (IMPRESSED_LIKE_SO_2);
642
643 SET_GAME_STATE (THRADD_MISSION, 5);
644 }
645
646 if (GET_GAME_STATE (THRADD_INFO) == 0)
647 Response (whats_up_hostile_1, ThraddHostile);
648 else if (PHRASE_ENABLED (whats_up_hostile_2))
649 Response (whats_up_hostile_2, ThraddHostile);
650 switch (GET_GAME_STATE (THRADD_STACK_1))
651 {
652 case 0:
653 Response (what_about_you_1, ThraddHostile);
654 break;
655 case 1:
656 Response (what_about_you_2, ThraddHostile);
657 break;
658 case 2:
659 Response (what_about_urquan_1, ThraddHostile);
660 break;
661 case 3:
662 Response (what_about_urquan_2, ThraddHostile);
663 break;
664 case 4:
665 if (!GET_GAME_STATE (KOHR_AH_FRENZY))
666 Response (got_idea, ExitConversation);
667 else
668 {
669 SET_GAME_STATE (THRADD_STACK_1, 5);
670 }
671 break;
672 }
673 if (GET_GAME_STATE (THRADD_HOSTILE_STACK_2) == 0)
674 Response (submit_1, ExitConversation);
675 else
676 Response (submit_2, ExitConversation);
677 if (GET_GAME_STATE (THRADD_HOSTILE_STACK_3) == 0)
678 Response (be_friends_1, ThraddHostile);
679 else if (PHRASE_ENABLED (be_friends_2))
680 Response (be_friends_2, ThraddHostile);
681 if (GET_GAME_STATE (THRADD_MISSION) == 4)
682 {
683 if (GET_GAME_STATE (THRADD_HOSTILE_STACK_4) == 0)
684 Response (how_impressed_urquan_1, ThraddHostile);
685 else
686 Response (how_impressed_urquan_2, ThraddHostile);
687 }
688 if (GET_GAME_STATE (THRADD_HOSTILE_STACK_5) == 0)
689 Response (bye_hostile_1, ExitConversation);
690 else
691 Response (bye_hostile_2, ExitConversation);
692 }
693
694 static void
Intro(void)695 Intro (void)
696 {
697 BYTE NumVisits;
698
699 if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE)
700 {
701 NPCPhrase (OUT_TAKES);
702
703 setSegue (Segue_peace);
704 return;
705 }
706
707 if (GET_GAME_STATE (AQUA_HELIX))
708 {
709 NumVisits = GET_GAME_STATE (HELIX_VISITS);
710 switch (NumVisits++)
711 {
712 case 0:
713 NPCPhrase (DIE_THIEF_1);
714 break;
715 case 1:
716 NPCPhrase (DIE_THIEF_2);
717 --NumVisits;
718 break;
719 }
720 SET_GAME_STATE (HELIX_VISITS, NumVisits);
721
722 setSegue (Segue_hostile);
723 }
724 else if (GET_GAME_STATE (ILWRATH_FIGHT_THRADDASH))
725 {
726 NumVisits = GET_GAME_STATE (THRADD_VISITS);
727 if (GET_GAME_STATE (THRADD_MANNER))
728 {
729 switch (NumVisits++)
730 {
731 case 0:
732 NPCPhrase (HAVING_FUN_WITH_ILWRATH_1);
733 break;
734 case 1:
735 NPCPhrase (HAVING_FUN_WITH_ILWRATH_2);
736 --NumVisits;
737 break;
738 }
739 }
740 else
741 {
742 switch (NumVisits++)
743 {
744 case 0:
745 NPCPhrase (GO_AWAY_FIGHTING_ILWRATH_1);
746 break;
747 case 1:
748 NPCPhrase (GO_AWAY_FIGHTING_ILWRATH_2);
749 --NumVisits;
750 break;
751 }
752 }
753 SET_GAME_STATE (THRADD_VISITS, NumVisits);
754
755 setSegue (Segue_peace);
756 }
757 else if (GET_GAME_STATE (THRADD_MANNER))
758 {
759 RESPONSE_REF pStr0, pStr1;
760
761 NumVisits = GET_GAME_STATE (THRADD_VISITS);
762 switch (GET_GAME_STATE (THRADD_INTRO))
763 {
764 case 0:
765 PolitePhrase (NumVisits);
766 break;
767 case 1:
768 RhymePhrase (NumVisits);
769 break;
770 case 2:
771 PigLatinPhrase (NumVisits);
772 break;
773 case 3:
774 LikeYouPhrase (NumVisits);
775 break;
776 }
777 if (++NumVisits < 4)
778 {
779 SET_GAME_STATE (THRADD_VISITS, NumVisits);
780 }
781
782 if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6))
783 {
784 pStr0 = WELCOME_HELIX0;
785 pStr1 = WELCOME_HELIX1;
786 }
787 else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7))
788 {
789 pStr0 = WELCOME_HOMEWORLD0;
790 pStr1 = WELCOME_HOMEWORLD1;
791 }
792 else
793 {
794 pStr0 = WELCOME_SPACE0;
795 pStr1 = WELCOME_SPACE1;
796 }
797 NPCPhrase (pStr0);
798 NPCPhrase (GetCultureName ());
799 NPCPhrase (pStr1);
800
801 ThraddAllies ((RESPONSE_REF)0);
802 }
803 else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6))
804 {
805 NumVisits = GET_GAME_STATE (HELIX_VISITS);
806 switch (NumVisits++)
807 {
808 case 0:
809 NPCPhrase (HOSTILE_HELIX_HELLO_1);
810 break;
811 case 1:
812 NPCPhrase (HOSTILE_HELIX_HELLO_2);
813 --NumVisits;
814 break;
815 }
816 SET_GAME_STATE (HELIX_VISITS, NumVisits);
817
818 HelixWorld ((RESPONSE_REF)0);
819 }
820 else if (GET_GAME_STATE (THRADDASH_BODY_COUNT) >= THRADDASH_BODY_THRESHOLD)
821 {
822 NPCPhrase (AMAZING_PERFORMANCE);
823
824 ThraddWorship ((RESPONSE_REF)0);
825 }
826 else
827 {
828 NumVisits = GET_GAME_STATE (THRADDASH_BODY_COUNT);
829 if (NumVisits >= 16
830 && GET_GAME_STATE (THRADD_BODY_LEVEL) == 1)
831 {
832 SET_GAME_STATE (THRADD_BODY_LEVEL, 2);
833 NPCPhrase (IMPRESSIVE_PERFORMANCE);
834 }
835 else if (NumVisits >= 8
836 && GET_GAME_STATE (THRADD_BODY_LEVEL) == 0)
837 {
838 SET_GAME_STATE (THRADD_BODY_LEVEL, 1);
839 NPCPhrase (ADEQUATE_PERFORMANCE);
840 }
841
842 {
843 if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7))
844 {
845 NumVisits = GET_GAME_STATE (THRADD_HOME_VISITS);
846 switch (NumVisits++)
847 {
848 case 0:
849 NPCPhrase (HOSTILE_HOMEWORLD_HELLO_1);
850 break;
851 case 1:
852 NPCPhrase (HOSTILE_HOMEWORLD_HELLO_2);
853 break;
854 case 2:
855 NPCPhrase (HOSTILE_HOMEWORLD_HELLO_3);
856 break;
857 case 3:
858 NPCPhrase (HOSTILE_HOMEWORLD_HELLO_4);
859 --NumVisits;
860 break;
861 }
862 SET_GAME_STATE (THRADD_HOME_VISITS, NumVisits);
863 }
864 else if ((NumVisits = GET_GAME_STATE (THRADD_MISSION)) == 0
865 || NumVisits > 3)
866 {
867 NumVisits = GET_GAME_STATE (THRADD_VISITS);
868 switch (NumVisits++)
869 {
870 case 0:
871 NPCPhrase (HOSTILE_SPACE_HELLO_1);
872 break;
873 case 1:
874 NPCPhrase (HOSTILE_SPACE_HELLO_2);
875 break;
876 case 2:
877 NPCPhrase (HOSTILE_SPACE_HELLO_3);
878 break;
879 case 3:
880 NPCPhrase (HOSTILE_SPACE_HELLO_4);
881 --NumVisits;
882 break;
883 }
884 SET_GAME_STATE (THRADD_VISITS, NumVisits);
885 }
886 else
887 {
888 switch (NumVisits)
889 {
890 case 1:
891 if (GET_GAME_STATE (THRADD_MISSION_VISITS) == 0)
892 NPCPhrase (WE_GO_TO_IMPRESS_URQUAN_1);
893 else
894 NPCPhrase (WE_GO_TO_IMPRESS_URQUAN_2);
895 break;
896 case 2:
897 if (GET_GAME_STATE (THRADD_MISSION_VISITS) == 0)
898 NPCPhrase (WE_IMPRESSING_URQUAN_1);
899 else
900 NPCPhrase (WE_IMPRESSING_URQUAN_2);
901 break;
902 case 3:
903 if (GET_GAME_STATE (THRADD_MISSION_VISITS) == 0)
904 NPCPhrase (WE_IMPRESSED_URQUAN_1);
905 else
906 NPCPhrase (WE_IMPRESSED_URQUAN_2);
907 break;
908 }
909 SET_GAME_STATE (THRADD_MISSION_VISITS, 1);
910 }
911
912 ThraddHostile ((RESPONSE_REF)0);
913 }
914 }
915 }
916
917 static COUNT
uninit_thradd(void)918 uninit_thradd (void)
919 {
920 return (0);
921 }
922
923 static void
post_thradd_enc(void)924 post_thradd_enc (void)
925 {
926 // nothing defined so far
927 }
928
929 LOCDATA*
init_thradd_comm(void)930 init_thradd_comm (void)
931 {
932 LOCDATA *retval;
933
934 thradd_desc.init_encounter_func = Intro;
935 thradd_desc.post_encounter_func = post_thradd_enc;
936 thradd_desc.uninit_encounter_func = uninit_thradd;
937
938 thradd_desc.AlienTextBaseline.x = TEXT_X_OFFS + (SIS_TEXT_WIDTH >> 1);
939 thradd_desc.AlienTextBaseline.y = 0;
940 thradd_desc.AlienTextWidth = SIS_TEXT_WIDTH - 16;
941
942 if (GET_GAME_STATE (THRADD_MANNER)
943 || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE)
944 {
945 setSegue (Segue_peace);
946 }
947 else
948 {
949 setSegue (Segue_hostile);
950 }
951 retval = &thradd_desc;
952
953 return (retval);
954 }
955