summaryrefslogtreecommitdiff
path: root/src/uqm/comm/spahome
diff options
context:
space:
mode:
Diffstat (limited to 'src/uqm/comm/spahome')
-rw-r--r--src/uqm/comm/spahome/Makeinfo2
-rw-r--r--src/uqm/comm/spahome/spahome.c1018
-rw-r--r--src/uqm/comm/spahome/strings.h174
3 files changed, 1194 insertions, 0 deletions
diff --git a/src/uqm/comm/spahome/Makeinfo b/src/uqm/comm/spahome/Makeinfo
new file mode 100644
index 0000000..6972013
--- /dev/null
+++ b/src/uqm/comm/spahome/Makeinfo
@@ -0,0 +1,2 @@
+uqm_CFILES="spahome.c"
+uqm_HFILES="strings.h"
diff --git a/src/uqm/comm/spahome/spahome.c b/src/uqm/comm/spahome/spahome.c
new file mode 100644
index 0000000..190e3bb
--- /dev/null
+++ b/src/uqm/comm/spahome/spahome.c
@@ -0,0 +1,1018 @@
+//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 "../spathi/resinst.h"
+#include "strings.h"
+
+#include "uqm/build.h"
+#include "uqm/gameev.h"
+
+
+static LOCDATA spahome_desc =
+{
+ NULL, /* init_encounter_func */
+ NULL, /* post_encounter_func */
+ NULL, /* uninit_encounter_func */
+ SPATHI_HOME_PMAP_ANIM, /* AlienFrame */
+ SPATHI_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 */
+ SPATHI_HOME_COLOR_MAP, /* AlienColorMap */
+ SPATHI_MUSIC, /* AlienSong */
+ NULL_RESOURCE, /* AlienAltSong */
+ 0, /* AlienSongFlags */
+ SPATHI_HOME_CONVERSATION_PHRASES, /* PlayerPhrases */
+ 14, /* NumAnimations */
+ { /* AlienAmbientArray (ambient animations) */
+ {
+ 1, /* StartIndex */
+ 3, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 4, /* StartIndex */
+ 5, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 9, /* StartIndex */
+ 4, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 10) | (1 << 11), /* BlockMask */
+ },
+ {
+ 13, /* StartIndex */
+ 6, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND / 20, 0, /* RestartRate */
+ (1 << 4) | (1 << 5) /* BlockMask */
+ },
+ {
+ 19, /* StartIndex */
+ 3, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 3) | (1 << 5), /* BlockMask */
+ },
+ {
+ 22, /* StartIndex */
+ 4, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, ONE_SECOND / 30, /* FrameRate */
+ ONE_SECOND / 10, ONE_SECOND / 30, /* RestartRate */
+ (1 << 3) | (1 << 4)
+ | (1 << 10), /* BlockMask */
+ },
+ {
+ 26, /* StartIndex */
+ 3, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, ONE_SECOND / 30, /* FrameRate */
+ ONE_SECOND * 10, ONE_SECOND * 3, /* RestartRate */
+ (1 << 10), /* BlockMask */
+ },
+ {
+ 29, /* StartIndex */
+ 3, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, ONE_SECOND / 30, /* FrameRate */
+ ONE_SECOND * 10, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 32, /* StartIndex */
+ 7, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND / 20, 0, /* RestartRate */
+ (1 << 9) | (1 << 10), /* BlockMask */
+ },
+ {
+ 39, /* StartIndex */
+ 3, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 8) | (1 << 10), /* BlockMask */
+ },
+ {
+ 42, /* StartIndex */
+ 4, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, ONE_SECOND / 30, /* FrameRate */
+ ONE_SECOND / 30, 0, /* RestartRate */
+ (1 << 8) | (1 << 9)
+ | (1 << 6) | (1 << 2)
+ | (1 << 11) | (1 << 5), /* BlockMask */
+ },
+ {
+ 46, /* StartIndex */
+ 4, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, ONE_SECOND / 30, /* FrameRate */
+ ONE_SECOND / 10, ONE_SECOND / 30, /* RestartRate */
+ (1 << 2) | (1 << 10), /* BlockMask */
+ },
+ {
+ 50, /* StartIndex */
+ 6, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND / 20, 0, /* RestartRate */
+ (1 << 13), /* BlockMask */
+ },
+ {
+ 56, /* StartIndex */
+ 3, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 12), /* BlockMask */
+ },
+ },
+ { /* AlienTransitionDesc - empty */
+ 0, /* StartIndex */
+ 0, /* NumFrames */
+ 0, /* AnimFlags */
+ 0, 0, /* FrameRate */
+ 0, 0, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ { /* AlienTalkDesc - empty */
+ 0, /* StartIndex */
+ 0, /* NumFrames */
+ 0, /* AnimFlags */
+ 0, 0, /* FrameRate */
+ 0, 0, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ NULL, /* AlienNumberSpeech - none */
+ /* Filler for loaded resources */
+ NULL, NULL, NULL,
+ NULL,
+ NULL,
+};
+
+static void
+ExitConversation (RESPONSE_REF R)
+{
+ setSegue (Segue_peace);
+ if (PLAYER_SAID (R, we_attack_again))
+ {
+ NPCPhrase (WE_FIGHT_AGAIN);
+
+ setSegue (Segue_hostile);
+ }
+ else if (PLAYER_SAID (R, surrender_or_die))
+ {
+ NPCPhrase (DEFEND_OURSELVES);
+
+ setSegue (Segue_hostile);
+ }
+ else if (PLAYER_SAID (R, we_are_vindicator0))
+ {
+ NPCPhrase (NO_PASSWORD);
+
+ setSegue (Segue_hostile);
+ }
+ else if (PLAYER_SAID (R, gort_merenga)
+ || PLAYER_SAID (R, guph_florp)
+ || PLAYER_SAID (R, wagngl_fthagn)
+ || PLAYER_SAID (R, pleeese))
+ {
+ NPCPhrase (WRONG_PASSWORD);
+
+ setSegue (Segue_hostile);
+ }
+ else if (PLAYER_SAID (R, screw_password))
+ {
+ NPCPhrase (NO_PASSWORD);
+
+ setSegue (Segue_hostile);
+ }
+ else if (PLAYER_SAID (R, bye_no_ally_offer))
+ NPCPhrase (GOODBYE_NO_ALLY_OFFER);
+ else if (PLAYER_SAID (R, bye_angry_spathi))
+ NPCPhrase (GOODBYE_ANGRY_SPATHI);
+ else if (PLAYER_SAID (R, bye_ally))
+ NPCPhrase (GOODBYE_ALLY);
+ else if (PLAYER_SAID (R, already_got_them))
+ {
+ NPCPhrase (EARLY_BIRD_CHECK);
+
+ SET_GAME_STATE (SPATHI_HOME_VISITS, 0);
+ SET_GAME_STATE (SPATHI_VISITS, 0);
+ SET_GAME_STATE (SPATHI_PARTY, 1);
+ SET_GAME_STATE (SPATHI_MANNER, 3);
+ }
+ else if (PLAYER_SAID (R, too_dangerous))
+ NPCPhrase (WE_AGREE);
+ else if (PLAYER_SAID (R, think_more))
+ NPCPhrase (COWARD);
+ else if (PLAYER_SAID (R, i_accept))
+ {
+ NPCPhrase (AWAIT_RETURN);
+
+ SET_GAME_STATE (SPATHI_QUEST, 1);
+ SET_GAME_STATE (SPATHI_MANNER, 3);
+ SET_GAME_STATE (SPATHI_VISITS, 0);
+ }
+ else if (PLAYER_SAID (R, do_as_we_say))
+ {
+ NPCPhrase (DEPART_FOR_EARTH);
+
+ SetRaceAllied (SPATHI_SHIP, TRUE);
+ AddEvent (RELATIVE_EVENT, 6, 0, 0, SPATHI_SHIELD_EVENT);
+ SET_GAME_STATE (SPATHI_HOME_VISITS, 0);
+ SET_GAME_STATE (SPATHI_VISITS, 0);
+ }
+ else if (PLAYER_SAID (R, killed_them_all_1))
+ {
+ NPCPhrase (WILL_CHECK_1);
+
+ if (!GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED))
+ {
+ SET_GAME_STATE (LIED_ABOUT_CREATURES, 1);
+ }
+ else
+ {
+ SET_GAME_STATE (SPATHI_HOME_VISITS, 0);
+ SET_GAME_STATE (SPATHI_VISITS, 0);
+ SET_GAME_STATE (SPATHI_PARTY, 1);
+ SET_GAME_STATE (SPATHI_MANNER, 3);
+ }
+ }
+ else if (PLAYER_SAID (R, killed_them_all_2))
+ {
+ NPCPhrase (WILL_CHECK_2);
+
+ if (!GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED))
+ {
+ SET_GAME_STATE (LIED_ABOUT_CREATURES, 2);
+ }
+ else
+ {
+ SET_GAME_STATE (SPATHI_HOME_VISITS, 0);
+ SET_GAME_STATE (SPATHI_VISITS, 0);
+ SET_GAME_STATE (SPATHI_PARTY, 1);
+ SET_GAME_STATE (SPATHI_MANNER, 3);
+ }
+ }
+ else if (PLAYER_SAID (R, bye_before_party))
+ {
+ NPCPhrase (GOODBYE_BEFORE_PARTY);
+ }
+ else if (PLAYER_SAID (R, bye_from_party_1)
+ || PLAYER_SAID (R, bye_from_party_2)
+ || PLAYER_SAID (R, bye_from_party_3))
+ {
+ NPCPhrase (GOODBYE_FROM_PARTY);
+ }
+}
+
+static void SpathiAllies (RESPONSE_REF R);
+
+static void
+SpathiInfo (RESPONSE_REF R)
+{
+ BYTE InfoLeft;
+
+ InfoLeft = FALSE;
+ if (PLAYER_SAID (R, like_some_info))
+ NPCPhrase (WHAT_ABOUT);
+ else if (PLAYER_SAID (R, what_about_hierarchy))
+ {
+ NPCPhrase (ABOUT_HIERARCHY);
+
+ DISABLE_PHRASE (what_about_hierarchy);
+ }
+ else if (PLAYER_SAID (R, what_about_history))
+ {
+ NPCPhrase (ABOUT_HISTORY);
+
+ DISABLE_PHRASE (what_about_history);
+ }
+ else if (PLAYER_SAID (R, what_about_alliance))
+ {
+ NPCPhrase (ABOUT_ALLIANCE);
+
+ DISABLE_PHRASE (what_about_alliance);
+ }
+ else if (PLAYER_SAID (R, what_about_other))
+ {
+ NPCPhrase (ABOUT_OTHER);
+
+ DISABLE_PHRASE (what_about_other);
+ }
+ else if (PLAYER_SAID (R, what_about_precursors))
+ {
+ NPCPhrase (ABOUT_PRECURSORS);
+
+ DISABLE_PHRASE (what_about_precursors);
+ }
+
+ if (PHRASE_ENABLED (what_about_hierarchy))
+ {
+ InfoLeft = TRUE;
+ Response (what_about_hierarchy, SpathiInfo);
+ }
+ if (PHRASE_ENABLED (what_about_history))
+ {
+ InfoLeft = TRUE;
+ Response (what_about_history, SpathiInfo);
+ }
+ if (PHRASE_ENABLED (what_about_alliance))
+ {
+ InfoLeft = TRUE;
+ Response (what_about_alliance, SpathiInfo);
+ }
+ if (PHRASE_ENABLED (what_about_other))
+ {
+ InfoLeft = TRUE;
+ Response (what_about_other, SpathiInfo);
+ }
+ if (PHRASE_ENABLED (what_about_precursors))
+ {
+ InfoLeft = TRUE;
+ Response (what_about_precursors, SpathiInfo);
+ }
+ Response (enough_info, SpathiAllies);
+
+ if (!InfoLeft)
+ {
+ DISABLE_PHRASE (like_some_info);
+ }
+}
+
+static void
+SpathiAllies (RESPONSE_REF R)
+{
+ BYTE NumVisits;
+
+ if (R == 0)
+ {
+ NumVisits = GET_GAME_STATE (SPATHI_HOME_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (HELLO_ALLIES_1);
+ break;
+ case 1:
+ NPCPhrase (HELLO_ALLIES_2);
+ break;
+ case 2:
+ NPCPhrase (HELLO_ALLIES_3);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (SPATHI_HOME_VISITS, NumVisits);
+ }
+ else if (PLAYER_SAID (R, whats_up))
+ {
+ NumVisits = GET_GAME_STATE (SPATHI_INFO);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (GENERAL_INFO_1);
+ break;
+ case 1:
+ NPCPhrase (GENERAL_INFO_2);
+ break;
+ case 2:
+ NPCPhrase (GENERAL_INFO_3);
+ SET_GAME_STATE (KNOW_URQUAN_STORY, 1);
+ SET_GAME_STATE (KNOW_KOHR_AH_STORY, 1);
+ break;
+ case 3:
+ NPCPhrase (GENERAL_INFO_4);
+ break;
+ case 4:
+ NPCPhrase (GENERAL_INFO_5);
+ --NumVisits;
+ break;
+ case 5:
+ NPCPhrase (GENERAL_INFO_5);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (SPATHI_INFO, NumVisits);
+
+ DISABLE_PHRASE (whats_up);
+ }
+ else if (PLAYER_SAID (R, resources_please))
+ {
+ NPCPhrase (SORRY_NO_RESOURCES);
+
+ DISABLE_PHRASE (resources_please);
+ }
+ else if (PLAYER_SAID (R, something_fishy))
+ {
+ NPCPhrase (NOTHING_FISHY);
+
+ SET_GAME_STATE (SPATHI_INFO, 5);
+ }
+ else if (PLAYER_SAID (R, enough_info))
+ NPCPhrase (OK_ENOUGH_INFO);
+
+ if (GET_GAME_STATE (SPATHI_INFO) == 4)
+ Response (something_fishy, SpathiAllies);
+ if (PHRASE_ENABLED (whats_up))
+ Response (whats_up, SpathiAllies);
+ if (PHRASE_ENABLED (resources_please))
+ Response (resources_please, SpathiAllies);
+ if (PHRASE_ENABLED (like_some_info))
+ Response (like_some_info, SpathiInfo);
+ Response (bye_ally, ExitConversation);
+}
+
+static void
+SpathiQuest (RESPONSE_REF R)
+{
+ if (R == 0)
+ {
+ if (!GET_GAME_STATE (LIED_ABOUT_CREATURES))
+ NPCPhrase (HOW_GO_EFFORTS);
+ else
+ NPCPhrase (YOU_LIED_1);
+ }
+ else if (PLAYER_SAID (R, little_mistake))
+ {
+ NPCPhrase (BIG_MISTAKE);
+
+ DISABLE_PHRASE (little_mistake);
+ }
+ else if (PLAYER_SAID (R, talk_test))
+ {
+ NPCPhrase (TEST_AGAIN);
+
+ DISABLE_PHRASE (talk_test);
+ }
+ else if (PLAYER_SAID (R, zapped_a_few))
+ {
+ NPCPhrase (YOU_FORTUNATE);
+
+ DISABLE_PHRASE (zapped_a_few);
+ }
+
+ if (!GET_GAME_STATE (LIED_ABOUT_CREATURES))
+ Response (killed_them_all_1, ExitConversation);
+ else
+ {
+ if (PHRASE_ENABLED (little_mistake))
+ {
+ Response (little_mistake, SpathiQuest);
+ }
+ Response (killed_them_all_2, ExitConversation);
+ }
+ if (!GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED))
+ {
+ if (PHRASE_ENABLED (talk_test))
+ {
+ Response (talk_test, SpathiQuest);
+ }
+ if (PHRASE_ENABLED (zapped_a_few)
+ && GET_GAME_STATE (SPATHI_CREATURES_EXAMINED))
+ {
+ Response (zapped_a_few, SpathiQuest);
+ }
+ Response (bye_before_party, ExitConversation);
+ }
+}
+
+static void
+LearnQuest (RESPONSE_REF R)
+{
+ if (R == 0)
+ {
+ NPCPhrase (QUEST_AGAIN);
+
+ DISABLE_PHRASE (what_test);
+ if (GET_GAME_STATE (KNOW_SPATHI_EVIL))
+ {
+ DISABLE_PHRASE (tell_evil);
+ }
+ }
+ else if (PLAYER_SAID (R, how_prove))
+ NPCPhrase (BETTER_IDEA);
+ else if (PLAYER_SAID (R, what_test))
+ {
+ NPCPhrase (WIPE_EVIL);
+
+ SET_GAME_STATE (KNOW_SPATHI_QUEST, 1);
+ DISABLE_PHRASE (what_test);
+ }
+ else if (PLAYER_SAID (R, tell_evil))
+ {
+ NPCPhrase (BEFORE_ACCEPT);
+
+ SET_GAME_STATE (KNOW_SPATHI_EVIL, 1);
+ DISABLE_PHRASE (tell_evil);
+ DISABLE_PHRASE (prove_strength);
+ }
+ else if (PLAYER_SAID (R, prove_strength))
+ {
+ NPCPhrase (YOUR_BEHAVIOR);
+
+ DISABLE_PHRASE (prove_strength);
+ }
+ else if (PLAYER_SAID (R, why_dont_you_do_it))
+ {
+ NPCPhrase (WE_WONT_BECAUSE);
+
+ DISABLE_PHRASE (why_dont_you_do_it);
+ }
+
+ if (PHRASE_ENABLED (what_test))
+ Response (what_test, LearnQuest);
+ else if (GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED))
+ {
+ Response (already_got_them, ExitConversation);
+ }
+ else if (PHRASE_ENABLED (tell_evil))
+ {
+ Response (too_dangerous, ExitConversation);
+ Response (tell_evil, LearnQuest);
+ }
+ else
+ {
+ Response (too_dangerous, ExitConversation);
+ Response (think_more, ExitConversation);
+ Response (i_accept, ExitConversation);
+ }
+ if (PHRASE_ENABLED (prove_strength) && !GET_GAME_STATE (KNOW_SPATHI_QUEST))
+ Response (prove_strength, LearnQuest);
+ if (PHRASE_ENABLED (why_dont_you_do_it))
+ Response (why_dont_you_do_it, LearnQuest);
+}
+
+static void
+AllianceOffer (RESPONSE_REF R)
+{
+ if (PLAYER_SAID (R, misunderstanding))
+ {
+ NPCPhrase (JUST_MISUNDERSTANDING);
+ XFormColorMap (GetColorMapAddress (
+ SetAbsColorMapIndex (CommData.AlienColorMap, 1)
+ ), ONE_SECOND / 4);
+
+ SET_GAME_STATE (SPATHI_MANNER, 3);
+ SET_GAME_STATE (SPATHI_VISITS, 0);
+ }
+ else if (PLAYER_SAID (R, we_come_in_peace))
+ NPCPhrase (OF_COURSE);
+ else if (PLAYER_SAID (R, hand_in_friendship))
+ {
+ NPCPhrase (TOO_AFRAID);
+
+ DISABLE_PHRASE (hand_in_friendship);
+ }
+ else if (PLAYER_SAID (R, stronger))
+ {
+ NPCPhrase (YOURE_NOT);
+
+ DISABLE_PHRASE (stronger);
+ }
+ else if (PLAYER_SAID (R, yes_we_are))
+ {
+ NPCPhrase (NO_YOURE_NOT);
+
+ DISABLE_PHRASE (yes_we_are);
+ }
+ else if (PLAYER_SAID (R, share_info))
+ {
+ NPCPhrase (NO_INFO);
+
+ DISABLE_PHRASE (share_info);
+ }
+ else if (PLAYER_SAID (R, give_us_resources))
+ {
+ NPCPhrase (NO_RESOURCES);
+
+ DISABLE_PHRASE (give_us_resources);
+ }
+
+ if (PHRASE_ENABLED (hand_in_friendship))
+ Response (hand_in_friendship, AllianceOffer);
+ else if (PHRASE_ENABLED (stronger))
+ Response (stronger, AllianceOffer);
+ else if (PHRASE_ENABLED (yes_we_are))
+ Response (yes_we_are, AllianceOffer);
+ else
+ {
+ Response (how_prove, LearnQuest);
+ }
+ if (PHRASE_ENABLED (share_info))
+ Response (share_info, AllianceOffer);
+ if (PHRASE_ENABLED (give_us_resources))
+ Response (give_us_resources, AllianceOffer);
+}
+
+static void
+SpathiAngry (RESPONSE_REF R)
+{
+ if (R == 0)
+ {
+ NPCPhrase (MEAN_GUYS_RETURN);
+
+ Response (we_apologize, SpathiAngry);
+ }
+ else /* if (R == we_apologize) */
+ {
+ NPCPhrase (DONT_BELIEVE);
+
+ Response (misunderstanding, AllianceOffer);
+ }
+
+ Response (we_attack_again, ExitConversation);
+ Response (bye_angry_spathi, ExitConversation);
+}
+
+static void
+SpathiParty (RESPONSE_REF R)
+{
+ if (R == 0)
+ {
+ BYTE NumVisits;
+
+ NumVisits = GET_GAME_STATE (SPATHI_HOME_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (MUST_PARTY_1);
+ break;
+ case 1:
+ NPCPhrase (MUST_PARTY_2);
+ break;
+ case 2:
+ NPCPhrase (MUST_PARTY_3);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (SPATHI_HOME_VISITS, NumVisits);
+ }
+ else if (PLAYER_SAID (R, deals_a_deal))
+ {
+ NPCPhrase (WAIT_A_WHILE);
+
+ DISABLE_PHRASE (deals_a_deal);
+ }
+ else if (PLAYER_SAID (R, how_long))
+ {
+ NPCPhrase (TEN_YEARS);
+
+ DISABLE_PHRASE (how_long);
+ }
+ else if (PLAYER_SAID (R, reneging))
+ {
+ NPCPhrase (ADULT_VIEW);
+
+ DISABLE_PHRASE (reneging);
+ }
+ else if (PLAYER_SAID (R, return_beasts))
+ {
+ NPCPhrase (WHAT_RELATIONSHIP);
+
+ DISABLE_PHRASE (return_beasts);
+ }
+ else if (PLAYER_SAID (R, minds_and_might))
+ {
+ NPCPhrase (HUH);
+
+ DISABLE_PHRASE (minds_and_might);
+ }
+ else if (PLAYER_SAID (R, fellowship))
+ {
+ NPCPhrase (WHAT);
+
+ DISABLE_PHRASE (fellowship);
+ }
+
+ if (PHRASE_ENABLED (deals_a_deal))
+ Response (deals_a_deal, SpathiParty);
+ else if (PHRASE_ENABLED (how_long))
+ Response (how_long, SpathiParty);
+ else if (PHRASE_ENABLED (reneging))
+ Response (reneging, SpathiParty);
+ else if (PHRASE_ENABLED (return_beasts))
+ Response (return_beasts, SpathiParty);
+ else
+ {
+ if (PHRASE_ENABLED (minds_and_might))
+ Response (minds_and_might, SpathiParty);
+ if (PHRASE_ENABLED (fellowship))
+ Response (fellowship, SpathiParty);
+ Response (do_as_we_say, ExitConversation);
+
+ return;
+ }
+ switch (GET_GAME_STATE (SPATHI_HOME_VISITS) - 1)
+ {
+ case 0:
+ Response (bye_from_party_1, ExitConversation);
+ break;
+ case 1:
+ Response (bye_from_party_2, ExitConversation);
+ break;
+ default:
+ Response (bye_from_party_3, ExitConversation);
+ break;
+ }
+}
+
+static void
+SpathiCouncil (RESPONSE_REF R)
+{
+ if (R == 0)
+ NPCPhrase (HELLO_AGAIN);
+ else if (PLAYER_SAID (R, good_password))
+ {
+ NPCPhrase (YES_GOOD_PASSWORD);
+ XFormColorMap (GetColorMapAddress (
+ SetAbsColorMapIndex (CommData.AlienColorMap, 1)
+ ), ONE_SECOND / 4);
+
+ SET_GAME_STATE (KNOW_SPATHI_PASSWORD, 1);
+ SET_GAME_STATE (SPATHI_HOME_VISITS, 0);
+ }
+ else if (PLAYER_SAID (R, we_come_in_peace))
+ {
+ NPCPhrase (KILLED_SPATHI);
+
+ DISABLE_PHRASE (we_come_in_peace);
+ }
+ else if (PLAYER_SAID (R, spathi_on_pluto))
+ {
+ NPCPhrase (WHERE_SPATHI);
+
+ DISABLE_PHRASE (spathi_on_pluto);
+ }
+ else if (PLAYER_SAID (R, hostage))
+ {
+ NPCPhrase (GUN_TO_HEAD);
+
+ SET_GAME_STATE (FOUND_PLUTO_SPATHI, 3);
+ DISABLE_PHRASE (hostage);
+ }
+ else if (PLAYER_SAID (R, killed_fwiffo))
+ {
+ NPCPhrase (POOR_FWIFFO);
+
+ SET_GAME_STATE (FOUND_PLUTO_SPATHI, 3);
+ DISABLE_PHRASE (killed_fwiffo);
+ }
+ else if (PLAYER_SAID (R, fwiffo_fine))
+ {
+ NPCPhrase (NOT_LIKELY);
+
+ R = killed_fwiffo;
+ DISABLE_PHRASE (fwiffo_fine);
+ }
+ else if (PLAYER_SAID (R, surrender))
+ {
+ NPCPhrase (NO_SURRENDER);
+
+ DISABLE_PHRASE (surrender);
+ }
+
+ if (GET_GAME_STATE (SPATHI_MANNER) == 0)
+ {
+ Response (we_come_in_peace, AllianceOffer);
+ }
+ else if (PHRASE_ENABLED (we_come_in_peace))
+ {
+ Response (we_come_in_peace, SpathiCouncil);
+ }
+ else
+ {
+ Response (misunderstanding, AllianceOffer);
+ }
+ if (GET_GAME_STATE (FOUND_PLUTO_SPATHI)
+ && GET_GAME_STATE (FOUND_PLUTO_SPATHI) < 3)
+ {
+ if (PHRASE_ENABLED (spathi_on_pluto))
+ Response (spathi_on_pluto, SpathiCouncil);
+ else if (HaveEscortShip (SPATHI_SHIP))
+ {
+ if (PHRASE_ENABLED (hostage))
+ Response (hostage, SpathiCouncil);
+ }
+ else if (PHRASE_ENABLED (killed_fwiffo))
+ {
+ Response (killed_fwiffo, SpathiCouncil);
+ if (PHRASE_ENABLED (fwiffo_fine))
+ Response (fwiffo_fine, SpathiCouncil);
+ }
+ }
+ if (PHRASE_ENABLED (surrender))
+ Response (surrender, SpathiCouncil);
+ else
+ {
+ Response (surrender_or_die, ExitConversation);
+ }
+ Response (bye_no_ally_offer, ExitConversation);
+}
+
+static void
+SpathiPassword (RESPONSE_REF R)
+{
+ if (R == 0)
+ {
+ BYTE NumVisits;
+
+ NumVisits = GET_GAME_STATE (SPATHI_HOME_VISITS);
+ switch (NumVisits++)
+ {
+ default:
+ NPCPhrase (WHAT_IS_PASSWORD);
+ NumVisits = 1;
+ break;
+ case 1:
+ NPCPhrase (WHAT_IS_PASSWORD_AGAIN);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (SPATHI_HOME_VISITS, NumVisits);
+ }
+ else if (PLAYER_SAID (R, what_do_i_get))
+ {
+ NPCPhrase (YOU_GET_TO_LIVE);
+
+ DISABLE_PHRASE (what_do_i_get);
+ }
+
+ if (GET_GAME_STATE (FOUND_PLUTO_SPATHI)
+ || GET_GAME_STATE (KNOW_SPATHI_PASSWORD))
+ {
+ Response (good_password, SpathiCouncil);
+ if (PHRASE_ENABLED (what_do_i_get))
+ {
+ Response (what_do_i_get, SpathiPassword);
+ }
+ }
+ else
+ {
+ construct_response (shared_phrase_buf,
+ we_are_vindicator0,
+ GLOBAL_SIS (CommanderName),
+ we_are_vindicator1,
+ GLOBAL_SIS (ShipName),
+ we_are_vindicator2,
+ (UNICODE*)NULL);
+ DoResponsePhrase (we_are_vindicator0, ExitConversation, shared_phrase_buf);
+ Response (gort_merenga, ExitConversation);
+ Response (guph_florp, ExitConversation);
+ Response (wagngl_fthagn, ExitConversation);
+ Response (pleeese, ExitConversation);
+ Response (screw_password, ExitConversation);
+ }
+}
+
+static void
+Intro (void)
+{
+ BYTE Manner;
+
+ Manner = GET_GAME_STATE (SPATHI_MANNER);
+ if (Manner == 2)
+ {
+ NPCPhrase (HATE_YOU_FOREVER);
+ setSegue (Segue_hostile);
+ }
+ else if (Manner == 1
+ && GET_GAME_STATE (KNOW_SPATHI_PASSWORD)
+ && (GET_GAME_STATE (FOUND_PLUTO_SPATHI)
+ || GET_GAME_STATE (SPATHI_HOME_VISITS) != 7))
+ {
+ SpathiAngry ((RESPONSE_REF)0);
+ }
+ else if (CheckAlliance (SPATHI_SHIP) == GOOD_GUY)
+ {
+ CommData.AlienColorMap =
+ SetAbsColorMapIndex (CommData.AlienColorMap, 1);
+ SpathiAllies ((RESPONSE_REF)0);
+ }
+ else if (GET_GAME_STATE (SPATHI_PARTY))
+ {
+ CommData.AlienColorMap =
+ SetAbsColorMapIndex (CommData.AlienColorMap, 1);
+ SpathiParty ((RESPONSE_REF)0);
+ }
+ else if (GET_GAME_STATE (SPATHI_QUEST))
+ {
+ if (GET_GAME_STATE (LIED_ABOUT_CREATURES) < 2)
+ {
+ CommData.AlienColorMap =
+ SetAbsColorMapIndex (CommData.AlienColorMap, 1);
+ SpathiQuest ((RESPONSE_REF)0);
+ }
+ else
+ {
+ NPCPhrase (YOU_LIED_2);
+
+ SET_GAME_STATE (SPATHI_MANNER, 2);
+ setSegue (Segue_hostile);
+ }
+ }
+ else if (GET_GAME_STATE (KNOW_SPATHI_QUEST))
+ {
+ CommData.AlienColorMap =
+ SetAbsColorMapIndex (CommData.AlienColorMap, 1);
+ LearnQuest ((RESPONSE_REF)0);
+ }
+ else if (GET_GAME_STATE (KNOW_SPATHI_PASSWORD)
+ && (GET_GAME_STATE (FOUND_PLUTO_SPATHI)
+ || GET_GAME_STATE (SPATHI_HOME_VISITS) != 7))
+ {
+ CommData.AlienColorMap =
+ SetAbsColorMapIndex (CommData.AlienColorMap, 1);
+ SpathiCouncil ((RESPONSE_REF)0);
+ }
+ else
+ {
+ SpathiPassword ((RESPONSE_REF)0);
+ }
+}
+
+static COUNT
+uninit_spahome (void)
+{
+ return (0);
+}
+
+static void
+post_spahome_enc (void)
+{
+ BYTE Manner;
+
+ if (getSegue () == Segue_hostile
+ && (Manner = GET_GAME_STATE (SPATHI_MANNER)) != 2)
+ {
+ SET_GAME_STATE (SPATHI_MANNER, 1);
+ if (Manner != 1)
+ {
+ SET_GAME_STATE (SPATHI_VISITS, 0);
+ SET_GAME_STATE (SPATHI_HOME_VISITS, 0);
+ }
+ }
+}
+
+LOCDATA*
+init_spahome_comm ()
+{
+ LOCDATA *retval;
+
+ spahome_desc.init_encounter_func = Intro;
+ spahome_desc.post_encounter_func = post_spahome_enc;
+ spahome_desc.uninit_encounter_func = uninit_spahome;
+
+ spahome_desc.AlienTextBaseline.x = TEXT_X_OFFS + (SIS_TEXT_WIDTH >> 1);
+ spahome_desc.AlienTextBaseline.y = 0;
+ spahome_desc.AlienTextWidth = SIS_TEXT_WIDTH - 16;
+
+ // use alternate "Safe Ones" track if available
+ spahome_desc.AlienAltSongRes = SPAHOME_MUSIC;
+ spahome_desc.AlienSongFlags |= LDASF_USE_ALTERNATE;
+
+ if (GET_GAME_STATE (SPATHI_MANNER) == 3)
+ {
+ setSegue (Segue_peace);
+ }
+ else
+ {
+ setSegue (Segue_hostile);
+ }
+
+ retval = &spahome_desc;
+
+ return (retval);
+}
diff --git a/src/uqm/comm/spahome/strings.h b/src/uqm/comm/spahome/strings.h
new file mode 100644
index 0000000..6df9560
--- /dev/null
+++ b/src/uqm/comm/spahome/strings.h
@@ -0,0 +1,174 @@
+//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.
+ */
+
+#ifndef SPAHOME_STRINGS_H
+#define SPAHOME_STRINGS_H
+
+enum
+{
+ NULL_PHRASE,
+ killed_fwiffo,
+ POOR_FWIFFO,
+ fwiffo_fine,
+ NOT_LIKELY,
+ we_attack_again,
+ WE_FIGHT_AGAIN,
+ bye_no_ally_offer,
+ GOODBYE_NO_ALLY_OFFER,
+ bye_angry_spathi,
+ GOODBYE_ANGRY_SPATHI,
+ why_dont_you_do_it,
+ WE_WONT_BECAUSE,
+ MEAN_GUYS_RETURN,
+ we_apologize,
+ DONT_BELIEVE,
+ HELLO_AGAIN,
+ HATE_YOU_FOREVER,
+ WHAT_IS_PASSWORD,
+ WHAT_IS_PASSWORD_AGAIN,
+ we_are_vindicator0,
+ we_are_vindicator1,
+ we_are_vindicator2,
+ gort_merenga,
+ guph_florp,
+ pleeese,
+ wagngl_fthagn,
+ screw_password,
+ good_password,
+ WRONG_PASSWORD,
+ NO_PASSWORD,
+ what_do_i_get,
+ YOU_GET_TO_LIVE,
+ YES_GOOD_PASSWORD,
+ spathi_on_pluto,
+ WHERE_SPATHI,
+ hostage,
+ GUN_TO_HEAD,
+ we_come_in_peace,
+ OF_COURSE,
+ KILLED_SPATHI,
+ misunderstanding,
+ JUST_MISUNDERSTANDING,
+// JUST_MISUNDERSTANDING0,
+// JUST_MISUNDERSTANDING1,
+ give_us_resources,
+ NO_RESOURCES,
+ resources_please,
+ SORRY_NO_RESOURCES,
+ bye_ally,
+ GOODBYE_ALLY,
+ what_about_hierarchy,
+ what_about_history,
+ what_about_alliance,
+ what_about_other,
+ what_about_precursors,
+ enough_info,
+ OK_ENOUGH_INFO,
+ ABOUT_HIERARCHY,
+ ABOUT_HISTORY,
+ ABOUT_ALLIANCE,
+ ABOUT_OTHER,
+ ABOUT_PRECURSORS,
+ little_mistake,
+ BIG_MISTAKE,
+ bye_before_party,
+ QUEST_AGAIN,
+ GOODBYE_BEFORE_PARTY,
+ GOOD_START,
+ something_fishy,
+ NOTHING_FISHY,
+ surrender,
+ NO_SURRENDER,
+ surrender_or_die,
+ DEFEND_OURSELVES,
+ hand_in_friendship,
+ TOO_AFRAID,
+ stronger,
+ YOURE_NOT,
+ yes_we_are,
+ NO_YOURE_NOT,
+ how_prove,
+ BETTER_IDEA,
+ share_info,
+ NO_INFO,
+ WE_UNDERSTAND,
+ prove_strength,
+ YOUR_BEHAVIOR,
+ what_test,
+ BEFORE_ACCEPT,
+ WIPE_EVIL,
+ think_more,
+ COWARD,
+ tell_evil,
+ i_accept,
+ AWAIT_RETURN,
+ talk_test,
+ already_got_them,
+ EARLY_BIRD_CHECK,
+ NOT_SURPRISED,
+ TEST_AGAIN,
+ too_dangerous,
+ WE_AGREE,
+ HOW_GO_EFFORTS,
+ killed_them_all_1,
+ killed_them_all_2,
+ WILL_CHECK_1,
+ WILL_CHECK_2,
+ zapped_a_few,
+ RETURN_COMPLETE,
+ MUST_DESTROY_ALL,
+ no_landing,
+ saw_creatures,
+ YOU_FORTUNATE,
+ YOU_LIED_1,
+ YOU_LIED_2,
+ bye_from_party_1,
+ bye_from_party_2,
+ bye_from_party_3,
+ GOODBYE_FROM_PARTY,
+ MUST_PARTY_1,
+ MUST_PARTY_2,
+ MUST_PARTY_3,
+ deals_a_deal,
+ WAIT_A_WHILE,
+ how_long,
+ TEN_YEARS,
+ reneging,
+ ADULT_VIEW,
+ return_beasts,
+ WHAT_RELATIONSHIP,
+ minds_and_might,
+ HUH,
+ fellowship,
+ WHAT,
+ do_as_we_say,
+ DEPART_FOR_EARTH,
+ HELLO_ALLIES_1,
+ HELLO_ALLIES_2,
+ HELLO_ALLIES_3,
+ whats_up,
+ GENERAL_INFO_1,
+ GENERAL_INFO_2,
+ GENERAL_INFO_3,
+ GENERAL_INFO_4,
+ GENERAL_INFO_5,
+ like_some_info,
+ WHAT_ABOUT
+};
+
+#endif /* _STRINGS_H */