summaryrefslogtreecommitdiff
path: root/src/uqm/comm/thradd/thraddc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/uqm/comm/thradd/thraddc.c')
-rw-r--r--src/uqm/comm/thradd/thraddc.c954
1 files changed, 954 insertions, 0 deletions
diff --git a/src/uqm/comm/thradd/thraddc.c b/src/uqm/comm/thradd/thraddc.c
new file mode 100644
index 0000000..1be8a1e
--- /dev/null
+++ b/src/uqm/comm/thradd/thraddc.c
@@ -0,0 +1,954 @@
+//Copyright Paul Reiche, Fred Ford. 1992-2002
+
+/*
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ */
+
+#include "../commall.h"
+#include "resinst.h"
+#include "strings.h"
+
+#include "uqm/build.h"
+#include "uqm/gameev.h"
+
+
+static LOCDATA thradd_desc =
+{
+ NULL, /* init_encounter_func */
+ NULL, /* post_encounter_func */
+ NULL, /* uninit_encounter_func */
+ THRADD_PMAP_ANIM, /* AlienFrame */
+ THRADD_FONT, /* AlienFont */
+ WHITE_COLOR_INIT, /* AlienTextFColor */
+ BLACK_COLOR_INIT, /* AlienTextBColor */
+ {0, 0}, /* AlienTextBaseline */
+ 0, /* SIS_TEXT_WIDTH - 16, */ /* AlienTextWidth */
+ ALIGN_CENTER, /* AlienTextAlign */
+ VALIGN_TOP, /* AlienTextValign */
+ THRADD_COLOR_MAP, /* AlienColorMap */
+ THRADD_MUSIC, /* AlienSong */
+ NULL_RESOURCE, /* AlienAltSong */
+ 0, /* AlienSongFlags */
+ THRADD_CONVERSATION_PHRASES, /* PlayerPhrases */
+ 8, /* NumAnimations */
+ { /* AlienAmbientArray (ambient animations) */
+ {
+ 8, /* StartIndex */
+ 4, /* NumFrames */
+ RANDOM_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
+ ONE_SECOND / 15, ONE_SECOND / 15, /* RestartRate */
+ (1 << 4), /* BlockMask */
+ },
+ {
+ 12, /* StartIndex */
+ 9, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 21, /* StartIndex */
+ 6, /* NumFrames */
+ RANDOM_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 27, /* StartIndex */
+ 3, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 4), /* BlockMask */
+ },
+ {
+ 30, /* StartIndex */
+ 12, /* NumFrames */
+ CIRCULAR_ANIM
+ | WAIT_TALKING, /* AnimFlags */
+ ONE_SECOND / 12, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND, /* RestartRate */
+ (1 << 0) | (1 << 3) | (1 << 5),
+ },
+ {
+ 42, /* StartIndex */
+ 5, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, ONE_SECOND / 30, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 4) | (1 << 6), /* BlockMask */
+ },
+ {
+ 47, /* StartIndex */
+ 5, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, ONE_SECOND / 30, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 5), /* BlockMask */
+ },
+ {
+ 52, /* StartIndex */
+ 4, /* NumFrames */
+ RANDOM_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND / 20, 0, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ },
+ { /* AlienTransitionDesc */
+ 0, /* StartIndex */
+ 0, /* NumFrames */
+ 0, /* AnimFlags */
+ 0, 0, /* FrameRate */
+ 0, 0, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ { /* AlienTalkDesc */
+ 1, /* StartIndex */
+ 7, /* NumFrames */
+ 0, /* AnimFlags */
+ ONE_SECOND / 15, 0, /* FrameRate */
+ ONE_SECOND / 12, 0, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ NULL, /* AlienNumberSpeech - none */
+ /* Filler for loaded resources */
+ NULL, NULL, NULL,
+ NULL,
+ NULL,
+};
+
+static int
+GetCultureName (void)
+{
+ int culture = 0;
+
+ switch (GET_GAME_STATE (THRADD_CULTURE))
+ {
+ case 1:
+ culture = CULTURE;
+ break;
+ case 2:
+ culture = FAT_JERKS;
+ break;
+ case 3:
+ culture = SLAVE_EMPIRE;
+ break;
+ default:
+ assert (0 && "Unknown culture");
+ }
+
+ return (culture);
+}
+
+static void
+PolitePhrase (BYTE which_phrase)
+{
+ switch (which_phrase)
+ {
+ case 0:
+ NPCPhrase (HELLO_POLITE_1);
+ break;
+ case 1:
+ NPCPhrase (HELLO_POLITE_2);
+ break;
+ case 2:
+ NPCPhrase (HELLO_POLITE_3);
+ break;
+ case 3:
+ NPCPhrase (HELLO_POLITE_4);
+ break;
+ }
+}
+
+static void
+RhymePhrase (BYTE which_phrase)
+{
+ switch (which_phrase)
+ {
+ case 0:
+ NPCPhrase (HELLO_RHYME_1);
+ break;
+ case 1:
+ NPCPhrase (HELLO_RHYME_2);
+ break;
+ case 2:
+ NPCPhrase (HELLO_RHYME_3);
+ break;
+ case 3:
+ NPCPhrase (HELLO_RHYME_4);
+ break;
+ }
+}
+
+static void
+PigLatinPhrase (BYTE which_phrase)
+{
+ switch (which_phrase)
+ {
+ case 0:
+ NPCPhrase (HELLO_PIG_LATIN_1);
+ break;
+ case 1:
+ NPCPhrase (HELLO_PIG_LATIN_2);
+ break;
+ case 2:
+ NPCPhrase (HELLO_PIG_LATIN_3);
+ break;
+ case 3:
+ NPCPhrase (HELLO_PIG_LATIN_4);
+ break;
+ }
+}
+
+static void
+LikeYouPhrase (BYTE which_phrase)
+{
+ switch (which_phrase)
+ {
+ case 0:
+ NPCPhrase (HELLO_LIKE_YOU_1);
+ break;
+ case 1:
+ NPCPhrase (HELLO_LIKE_YOU_2);
+ break;
+ case 2:
+ NPCPhrase (HELLO_LIKE_YOU_3);
+ break;
+ case 3:
+ NPCPhrase (HELLO_LIKE_YOU_4);
+ break;
+ }
+}
+
+static void
+ExitConversation (RESPONSE_REF R)
+{
+ setSegue (Segue_hostile);
+
+ if (PLAYER_SAID (R, bye_hostile_2))
+ NPCPhrase (GOODBYE_HOSTILE_2);
+ else if (PLAYER_SAID (R, bye_hostile_1))
+ {
+ NPCPhrase (GOODBYE_HOSTILE_1);
+
+ SET_GAME_STATE (THRADD_HOSTILE_STACK_5, 1);
+ }
+ else if (PLAYER_SAID (R, submit_1))
+ {
+ NPCPhrase (NO_SUBMIT_1);
+
+ SET_GAME_STATE (THRADD_HOSTILE_STACK_2, 1);
+ }
+ else if (PLAYER_SAID (R, submit_2))
+ NPCPhrase (NO_SUBMIT_2);
+ else if (PLAYER_SAID (R, got_idea))
+ {
+ NPCPhrase (GOOD_IDEA);
+
+ setSegue (Segue_peace);
+ AddEvent (RELATIVE_EVENT, 0, 0, 0, ADVANCE_THRADD_MISSION);
+ SET_GAME_STATE (THRADD_STACK_1, 5);
+ }
+ else if (PLAYER_SAID (R, bye_hostile_helix))
+ NPCPhrase (GOODBYE_HOSTILE_HELIX);
+ else if (PLAYER_SAID (R, bye_ally))
+ {
+ BYTE NumVisits;
+
+ NumVisits = GET_GAME_STATE (THRADD_STACK_1);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (GOODBYE_ALLY_1);
+ break;
+ case 1:
+ NPCPhrase (GOODBYE_ALLY_2);
+ break;
+ case 2:
+ NPCPhrase (GOODBYE_ALLY_3);
+ break;
+ case 3:
+ NPCPhrase (GOODBYE_ALLY_4);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (THRADD_STACK_1, NumVisits);
+ setSegue (Segue_peace);
+ }
+ else if (PLAYER_SAID (R, may_i_land))
+ {
+ NPCPhrase (SURE_LAND);
+
+ SET_GAME_STATE (HELIX_UNPROTECTED, 1);
+ setSegue (Segue_peace);
+ }
+ else if (PLAYER_SAID (R, demand_to_land))
+ NPCPhrase (NO_DEMAND);
+ else if (PLAYER_SAID (R, i_need_to_land_lie))
+ NPCPhrase (CAUGHT_LIE);
+ else
+ {
+ if (PLAYER_SAID (R, contemplative))
+ {
+ NPCPhrase (OK_CONTEMPLATIVE);
+
+ SET_GAME_STATE (THRADD_DEMEANOR, 0);
+ }
+ else if (PLAYER_SAID (R, friendly))
+ {
+ NPCPhrase (OK_FRIENDLY);
+
+ SET_GAME_STATE (THRADD_DEMEANOR, 1);
+ }
+ else if (PLAYER_SAID (R, wacky))
+ {
+ NPCPhrase (OK_WACKY);
+
+ SET_GAME_STATE (THRADD_DEMEANOR, 2);
+ }
+ else if (PLAYER_SAID (R, just_like_us))
+ {
+ NPCPhrase (OK_JUST_LIKE_YOU);
+
+ SET_GAME_STATE (THRADD_DEMEANOR, 3);
+ }
+ NPCPhrase (WORK_TO_DO);
+
+ setSegue (Segue_peace);
+ }
+}
+
+static void
+ThraddAllies (RESPONSE_REF R)
+{
+ BYTE NumVisits;
+
+ if (PLAYER_SAID (R, why_you_here_ally))
+ {
+ NPCPhrase (GUARDING_HELIX_ALLY);
+
+ DISABLE_PHRASE (why_you_here_ally);
+ }
+ else if (PLAYER_SAID (R, whats_helix_ally))
+ {
+ NPCPhrase (HELIX_IS_ALLY);
+
+ DISABLE_PHRASE (whats_helix_ally);
+ }
+ else if (PLAYER_SAID (R, whats_up_ally))
+ {
+ NumVisits = GET_GAME_STATE (THRADD_INFO);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (GENERAL_INFO_ALLY_1);
+ break;
+ case 1:
+ NPCPhrase (GENERAL_INFO_ALLY_2);
+ break;
+ case 2:
+ NPCPhrase (GENERAL_INFO_ALLY_3);
+ break;
+ case 3:
+ NPCPhrase (GENERAL_INFO_ALLY_4);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (THRADD_INFO, NumVisits);
+
+ DISABLE_PHRASE (whats_up_ally);
+ }
+ else if (PLAYER_SAID (R, how_goes_culture))
+ {
+ NumVisits = GET_GAME_STATE (THRADD_DEMEANOR);
+ switch (NumVisits & ((1 << 2) - 1))
+ {
+ case 0:
+ if (!(NumVisits & ~((1 << 2) - 1)))
+ NPCPhrase (CONTEMP_GOES_1);
+ else
+ NPCPhrase (CONTEMP_GOES_2);
+ break;
+ case 1:
+ if (!(NumVisits & ~((1 << 2) - 1)))
+ NPCPhrase (FRIENDLY_GOES_1);
+ else
+ NPCPhrase (FRIENDLY_GOES_2);
+ break;
+ case 2:
+ if (!(NumVisits & ~((1 << 2) - 1)))
+ NPCPhrase (WACKY_GOES_1);
+ else
+ NPCPhrase (WACKY_GOES_2);
+ break;
+ case 3:
+ if (!(NumVisits & ~((1 << 2) - 1)))
+ NPCPhrase (LIKE_YOU_GOES_1);
+ else
+ NPCPhrase (LIKE_YOU_GOES_2);
+ break;
+ }
+ NumVisits |= 1 << 2;
+ SET_GAME_STATE (THRADD_DEMEANOR, NumVisits);
+
+ DISABLE_PHRASE (how_goes_culture);
+ }
+
+ if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6))
+ {
+ if (PHRASE_ENABLED (why_you_here_ally))
+ Response (why_you_here_ally, ThraddAllies);
+ else
+ {
+ if (PHRASE_ENABLED (whats_helix_ally))
+ Response (whats_helix_ally, ThraddAllies);
+ Response (may_i_land, ExitConversation);
+ }
+ }
+ if (PHRASE_ENABLED (whats_up_ally))
+ Response (whats_up_ally, ThraddAllies);
+ if (PHRASE_ENABLED (how_goes_culture))
+ Response (how_goes_culture, ThraddAllies);
+ Response (bye_ally, ExitConversation);
+}
+
+static void
+ThraddDemeanor (RESPONSE_REF R)
+{
+ if (PLAYER_SAID (R, you_decide))
+ {
+ NPCPhrase (OK_CULTURE_20);
+
+ SET_GAME_STATE (THRADD_CULTURE, 1);
+ }
+ else if (PLAYER_SAID (R, fat))
+ {
+ NPCPhrase (OK_FAT);
+
+ SET_GAME_STATE (THRADD_CULTURE, 2);
+ }
+ else if (PLAYER_SAID (R, the_slave_empire0))
+ {
+ SET_GAME_STATE (THRADD_CULTURE, 3);
+
+ NPCPhrase (OK_SLAVE);
+ }
+
+ NPCPhrase (HOW_SHOULD_WE_ACT);
+ Response (contemplative, ExitConversation);
+ Response (friendly, ExitConversation);
+ Response (wacky, ExitConversation);
+ Response (just_like_us, ExitConversation);
+}
+
+static void
+ThraddCulture (RESPONSE_REF R)
+{
+ if (PLAYER_SAID (R, be_polite))
+ {
+ NPCPhrase (OK_POLITE);
+
+ SET_GAME_STATE (THRADD_INTRO, 0);
+ }
+ else if (PLAYER_SAID (R, use_rhymes))
+ {
+ NPCPhrase (OK_RHYMES);
+
+ SET_GAME_STATE (THRADD_INTRO, 1);
+ }
+ else if (PLAYER_SAID (R, speak_pig_latin))
+ {
+ NPCPhrase (OK_PIG_LATIN);
+
+ SET_GAME_STATE (THRADD_INTRO, 2);
+ }
+ else if (PLAYER_SAID (R, just_the_way_we_do))
+ {
+ NPCPhrase (OK_WAY_YOU_DO);
+
+ SET_GAME_STATE (THRADD_INTRO, 3);
+ }
+ NPCPhrase (WHAT_NAME_FOR_CULTURE);
+
+ construct_response (
+ shared_phrase_buf,
+ the_slave_empire0,
+ GLOBAL_SIS (CommanderName),
+ the_slave_empire1,
+ (UNICODE*)NULL);
+
+ Response (you_decide, ThraddDemeanor);
+ Response (fat, ThraddDemeanor);
+ DoResponsePhrase (the_slave_empire0, ThraddDemeanor, shared_phrase_buf);
+}
+
+static void
+ThraddWorship (RESPONSE_REF R)
+{
+ (void) R; // ignored
+ SET_GAME_STATE (THRADD_VISITS, 0);
+ SET_GAME_STATE (THRADD_MANNER, 1);
+ SET_GAME_STATE (THRADD_STACK_1, 0);
+ SetRaceAllied (THRADDASH_SHIP, TRUE);
+
+ Response (be_polite, ThraddCulture);
+ Response (speak_pig_latin, ThraddCulture);
+ Response (use_rhymes, ThraddCulture);
+ Response (just_the_way_we_do, ThraddCulture);
+}
+
+static void
+HelixWorld (RESPONSE_REF R)
+{
+ if (PLAYER_SAID (R, why_you_here_hostile))
+ {
+ NPCPhrase (NONE_OF_YOUR_CONCERN);
+
+ SET_GAME_STATE (THRADD_CULTURE, 1);
+ }
+ else if (PLAYER_SAID (R, what_about_this_world))
+ {
+ NPCPhrase (BLUE_HELIX);
+
+ SET_GAME_STATE (THRADD_INTRO, 1);
+ }
+ else if (PLAYER_SAID (R, whats_helix_hostile))
+ {
+ NPCPhrase (HELIX_IS_HOSTILE);
+
+ SET_GAME_STATE (THRADD_INTRO, 2);
+ }
+ else if (PLAYER_SAID (R, i_need_to_land_lie))
+ {
+ NPCPhrase (CAUGHT_LIE);
+
+ SET_GAME_STATE (THRADD_DEMEANOR, 1);
+ }
+
+ if (!GET_GAME_STATE (THRADD_CULTURE))
+ Response (why_you_here_hostile, HelixWorld);
+ else
+ {
+ Response (demand_to_land, ExitConversation);
+ }
+ switch (GET_GAME_STATE (THRADD_INTRO))
+ {
+ case 0:
+ Response (what_about_this_world, HelixWorld);
+ break;
+ case 1:
+ Response (whats_helix_hostile, HelixWorld);
+ break;
+ }
+ if (!GET_GAME_STATE (THRADD_DEMEANOR))
+ {
+ Response (i_need_to_land_lie, ExitConversation);
+ }
+ Response (bye_hostile_helix, ExitConversation);
+}
+
+static void
+ThraddHostile (RESPONSE_REF R)
+{
+ if (PLAYER_SAID (R, whats_up_hostile_1))
+ {
+ NPCPhrase (GENERAL_INFO_HOSTILE_1);
+
+ SET_GAME_STATE (THRADD_INFO, 1);
+ DISABLE_PHRASE (whats_up_hostile_2);
+ }
+ else if (PLAYER_SAID (R, whats_up_hostile_2))
+ {
+ BYTE NumVisits;
+
+ NumVisits = GET_GAME_STATE (THRADD_INFO);
+ switch (NumVisits++)
+ {
+ case 1:
+ NPCPhrase (GENERAL_INFO_HOSTILE_2);
+ break;
+ case 2:
+ NPCPhrase (GENERAL_INFO_HOSTILE_3);
+ break;
+ case 3:
+ NPCPhrase (GENERAL_INFO_HOSTILE_4);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (THRADD_INFO, NumVisits);
+
+ DISABLE_PHRASE (whats_up_hostile_2);
+ }
+ else if (PLAYER_SAID (R, what_about_you_1))
+ {
+ NPCPhrase (ABOUT_US_1);
+
+ SET_GAME_STATE (THRADD_STACK_1, 1);
+ }
+ else if (PLAYER_SAID (R, what_about_you_2))
+ {
+ NPCPhrase (ABOUT_US_2);
+
+ SET_GAME_STATE (THRADD_STACK_1, 2);
+ }
+ else if (PLAYER_SAID (R, what_about_urquan_1))
+ {
+ NPCPhrase (ABOUT_URQUAN_1);
+
+ SET_GAME_STATE (THRADD_STACK_1, 3);
+ }
+ else if (PLAYER_SAID (R, what_about_urquan_2))
+ {
+ NPCPhrase (ABOUT_URQUAN_2);
+
+ SET_GAME_STATE (THRADD_STACK_1, 4);
+ }
+ else if (PLAYER_SAID (R, be_friends_1))
+ {
+ NPCPhrase (NO_FRIENDS_1);
+
+ SET_GAME_STATE (THRADD_HOSTILE_STACK_3, 1);
+ }
+ else if (PLAYER_SAID (R, be_friends_2))
+ {
+ NPCPhrase (NO_FRIENDS_2);
+ DISABLE_PHRASE (be_friends_2);
+ }
+ else if (PLAYER_SAID (R, how_impressed_urquan_1))
+ {
+ NPCPhrase (IMPRESSED_LIKE_SO_1);
+
+ SET_GAME_STATE (THRADD_HOSTILE_STACK_4, 1);
+ }
+ else if (PLAYER_SAID (R, how_impressed_urquan_2))
+ {
+ NPCPhrase (IMPRESSED_LIKE_SO_2);
+
+ SET_GAME_STATE (THRADD_MISSION, 5);
+ }
+
+ if (GET_GAME_STATE (THRADD_INFO) == 0)
+ Response (whats_up_hostile_1, ThraddHostile);
+ else if (PHRASE_ENABLED (whats_up_hostile_2))
+ Response (whats_up_hostile_2, ThraddHostile);
+ switch (GET_GAME_STATE (THRADD_STACK_1))
+ {
+ case 0:
+ Response (what_about_you_1, ThraddHostile);
+ break;
+ case 1:
+ Response (what_about_you_2, ThraddHostile);
+ break;
+ case 2:
+ Response (what_about_urquan_1, ThraddHostile);
+ break;
+ case 3:
+ Response (what_about_urquan_2, ThraddHostile);
+ break;
+ case 4:
+ if (!GET_GAME_STATE (KOHR_AH_FRENZY))
+ Response (got_idea, ExitConversation);
+ else
+ {
+ SET_GAME_STATE (THRADD_STACK_1, 5);
+ }
+ break;
+ }
+ if (GET_GAME_STATE (THRADD_HOSTILE_STACK_2) == 0)
+ Response (submit_1, ExitConversation);
+ else
+ Response (submit_2, ExitConversation);
+ if (GET_GAME_STATE (THRADD_HOSTILE_STACK_3) == 0)
+ Response (be_friends_1, ThraddHostile);
+ else if (PHRASE_ENABLED (be_friends_2))
+ Response (be_friends_2, ThraddHostile);
+ if (GET_GAME_STATE (THRADD_MISSION) == 4)
+ {
+ if (GET_GAME_STATE (THRADD_HOSTILE_STACK_4) == 0)
+ Response (how_impressed_urquan_1, ThraddHostile);
+ else
+ Response (how_impressed_urquan_2, ThraddHostile);
+ }
+ if (GET_GAME_STATE (THRADD_HOSTILE_STACK_5) == 0)
+ Response (bye_hostile_1, ExitConversation);
+ else
+ Response (bye_hostile_2, ExitConversation);
+}
+
+static void
+Intro (void)
+{
+ BYTE NumVisits;
+
+ if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE)
+ {
+ NPCPhrase (OUT_TAKES);
+
+ setSegue (Segue_peace);
+ return;
+ }
+
+ if (GET_GAME_STATE (AQUA_HELIX))
+ {
+ NumVisits = GET_GAME_STATE (HELIX_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (DIE_THIEF_1);
+ break;
+ case 1:
+ NPCPhrase (DIE_THIEF_2);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (HELIX_VISITS, NumVisits);
+
+ setSegue (Segue_hostile);
+ }
+ else if (GET_GAME_STATE (ILWRATH_FIGHT_THRADDASH))
+ {
+ NumVisits = GET_GAME_STATE (THRADD_VISITS);
+ if (GET_GAME_STATE (THRADD_MANNER))
+ {
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (HAVING_FUN_WITH_ILWRATH_1);
+ break;
+ case 1:
+ NPCPhrase (HAVING_FUN_WITH_ILWRATH_2);
+ --NumVisits;
+ break;
+ }
+ }
+ else
+ {
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (GO_AWAY_FIGHTING_ILWRATH_1);
+ break;
+ case 1:
+ NPCPhrase (GO_AWAY_FIGHTING_ILWRATH_2);
+ --NumVisits;
+ break;
+ }
+ }
+ SET_GAME_STATE (THRADD_VISITS, NumVisits);
+
+ setSegue (Segue_peace);
+ }
+ else if (GET_GAME_STATE (THRADD_MANNER))
+ {
+ RESPONSE_REF pStr0, pStr1;
+
+ NumVisits = GET_GAME_STATE (THRADD_VISITS);
+ switch (GET_GAME_STATE (THRADD_INTRO))
+ {
+ case 0:
+ PolitePhrase (NumVisits);
+ break;
+ case 1:
+ RhymePhrase (NumVisits);
+ break;
+ case 2:
+ PigLatinPhrase (NumVisits);
+ break;
+ case 3:
+ LikeYouPhrase (NumVisits);
+ break;
+ }
+ if (++NumVisits < 4)
+ {
+ SET_GAME_STATE (THRADD_VISITS, NumVisits);
+ }
+
+ if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6))
+ {
+ pStr0 = WELCOME_HELIX0;
+ pStr1 = WELCOME_HELIX1;
+ }
+ else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7))
+ {
+ pStr0 = WELCOME_HOMEWORLD0;
+ pStr1 = WELCOME_HOMEWORLD1;
+ }
+ else
+ {
+ pStr0 = WELCOME_SPACE0;
+ pStr1 = WELCOME_SPACE1;
+ }
+ NPCPhrase (pStr0);
+ NPCPhrase (GetCultureName ());
+ NPCPhrase (pStr1);
+
+ ThraddAllies ((RESPONSE_REF)0);
+ }
+ else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6))
+ {
+ NumVisits = GET_GAME_STATE (HELIX_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (HOSTILE_HELIX_HELLO_1);
+ break;
+ case 1:
+ NPCPhrase (HOSTILE_HELIX_HELLO_2);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (HELIX_VISITS, NumVisits);
+
+ HelixWorld ((RESPONSE_REF)0);
+ }
+ else if (GET_GAME_STATE (THRADDASH_BODY_COUNT) >= THRADDASH_BODY_THRESHOLD)
+ {
+ NPCPhrase (AMAZING_PERFORMANCE);
+
+ ThraddWorship ((RESPONSE_REF)0);
+ }
+ else
+ {
+ NumVisits = GET_GAME_STATE (THRADDASH_BODY_COUNT);
+ if (NumVisits >= 16
+ && GET_GAME_STATE (THRADD_BODY_LEVEL) == 1)
+ {
+ SET_GAME_STATE (THRADD_BODY_LEVEL, 2);
+ NPCPhrase (IMPRESSIVE_PERFORMANCE);
+ }
+ else if (NumVisits >= 8
+ && GET_GAME_STATE (THRADD_BODY_LEVEL) == 0)
+ {
+ SET_GAME_STATE (THRADD_BODY_LEVEL, 1);
+ NPCPhrase (ADEQUATE_PERFORMANCE);
+ }
+
+ {
+ if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7))
+ {
+ NumVisits = GET_GAME_STATE (THRADD_HOME_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (HOSTILE_HOMEWORLD_HELLO_1);
+ break;
+ case 1:
+ NPCPhrase (HOSTILE_HOMEWORLD_HELLO_2);
+ break;
+ case 2:
+ NPCPhrase (HOSTILE_HOMEWORLD_HELLO_3);
+ break;
+ case 3:
+ NPCPhrase (HOSTILE_HOMEWORLD_HELLO_4);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (THRADD_HOME_VISITS, NumVisits);
+ }
+ else if ((NumVisits = GET_GAME_STATE (THRADD_MISSION)) == 0
+ || NumVisits > 3)
+ {
+ NumVisits = GET_GAME_STATE (THRADD_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (HOSTILE_SPACE_HELLO_1);
+ break;
+ case 1:
+ NPCPhrase (HOSTILE_SPACE_HELLO_2);
+ break;
+ case 2:
+ NPCPhrase (HOSTILE_SPACE_HELLO_3);
+ break;
+ case 3:
+ NPCPhrase (HOSTILE_SPACE_HELLO_4);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (THRADD_VISITS, NumVisits);
+ }
+ else
+ {
+ switch (NumVisits)
+ {
+ case 1:
+ if (GET_GAME_STATE (THRADD_MISSION_VISITS) == 0)
+ NPCPhrase (WE_GO_TO_IMPRESS_URQUAN_1);
+ else
+ NPCPhrase (WE_GO_TO_IMPRESS_URQUAN_2);
+ break;
+ case 2:
+ if (GET_GAME_STATE (THRADD_MISSION_VISITS) == 0)
+ NPCPhrase (WE_IMPRESSING_URQUAN_1);
+ else
+ NPCPhrase (WE_IMPRESSING_URQUAN_2);
+ break;
+ case 3:
+ if (GET_GAME_STATE (THRADD_MISSION_VISITS) == 0)
+ NPCPhrase (WE_IMPRESSED_URQUAN_1);
+ else
+ NPCPhrase (WE_IMPRESSED_URQUAN_2);
+ break;
+ }
+ SET_GAME_STATE (THRADD_MISSION_VISITS, 1);
+ }
+
+ ThraddHostile ((RESPONSE_REF)0);
+ }
+ }
+}
+
+static COUNT
+uninit_thradd (void)
+{
+ return (0);
+}
+
+static void
+post_thradd_enc (void)
+{
+ // nothing defined so far
+}
+
+LOCDATA*
+init_thradd_comm (void)
+{
+ LOCDATA *retval;
+
+ thradd_desc.init_encounter_func = Intro;
+ thradd_desc.post_encounter_func = post_thradd_enc;
+ thradd_desc.uninit_encounter_func = uninit_thradd;
+
+ thradd_desc.AlienTextBaseline.x = TEXT_X_OFFS + (SIS_TEXT_WIDTH >> 1);
+ thradd_desc.AlienTextBaseline.y = 0;
+ thradd_desc.AlienTextWidth = SIS_TEXT_WIDTH - 16;
+
+ if (GET_GAME_STATE (THRADD_MANNER)
+ || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE)
+ {
+ setSegue (Segue_peace);
+ }
+ else
+ {
+ setSegue (Segue_hostile);
+ }
+ retval = &thradd_desc;
+
+ return (retval);
+}