summaryrefslogtreecommitdiff
path: root/src/uqm/comm/slyhome
diff options
context:
space:
mode:
Diffstat (limited to 'src/uqm/comm/slyhome')
-rw-r--r--src/uqm/comm/slyhome/Makeinfo2
-rw-r--r--src/uqm/comm/slyhome/resinst.h9
-rw-r--r--src/uqm/comm/slyhome/slyhome.c921
-rw-r--r--src/uqm/comm/slyhome/strings.h143
4 files changed, 1075 insertions, 0 deletions
diff --git a/src/uqm/comm/slyhome/Makeinfo b/src/uqm/comm/slyhome/Makeinfo
new file mode 100644
index 0000000..a09471e
--- /dev/null
+++ b/src/uqm/comm/slyhome/Makeinfo
@@ -0,0 +1,2 @@
+uqm_CFILES="slyhome.c"
+uqm_HFILES="resinst.h strings.h"
diff --git a/src/uqm/comm/slyhome/resinst.h b/src/uqm/comm/slyhome/resinst.h
new file mode 100644
index 0000000..1bbf162
--- /dev/null
+++ b/src/uqm/comm/slyhome/resinst.h
@@ -0,0 +1,9 @@
+/* This file was auto-generated by the gen_resfiles utility and
+ should not be edited directly. Modify the master resource list
+ instead and regenerate. */
+
+#define SLYLANDRO_COLOR_MAP "comm.slylandro.colortable"
+#define SLYLANDRO_CONVERSATION_PHRASES "comm.slylandro.dialogue"
+#define SLYLANDRO_FONT "comm.slylandro.font"
+#define SLYLANDRO_MUSIC "comm.slylandro.music"
+#define SLYLANDRO_PMAP_ANIM "comm.slylandro.graphics"
diff --git a/src/uqm/comm/slyhome/slyhome.c b/src/uqm/comm/slyhome/slyhome.c
new file mode 100644
index 0000000..80cb839
--- /dev/null
+++ b/src/uqm/comm/slyhome/slyhome.c
@@ -0,0 +1,921 @@
+//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/gameev.h"
+
+
+static LOCDATA slylandro_desc =
+{
+ NULL, /* init_encounter_func */
+ NULL, /* post_encounter_func */
+ NULL, /* uninit_encounter_func */
+ SLYLANDRO_PMAP_ANIM, /* AlienFrame */
+ SLYLANDRO_FONT, /* AlienFont */
+ WHITE_COLOR_INIT, /* AlienTextFColor */
+ BLACK_COLOR_INIT, /* AlienTextBColor */
+ {0, 0}, /* AlienTextBaseline */
+ 0, /* SIS_TEXT_WIDTH, */ /* AlienTextWidth */
+ ALIGN_CENTER, /* AlienTextAlign */
+ VALIGN_TOP, /* AlienTextValign */
+ SLYLANDRO_COLOR_MAP, /* AlienColorMap */
+ SLYLANDRO_MUSIC, /* AlienSong */
+ NULL_RESOURCE, /* AlienAltSong */
+ 0, /* AlienSongFlags */
+ SLYLANDRO_CONVERSATION_PHRASES, /* PlayerPhrases */
+ 13, /* NumAnimations */
+ { /* AlienAmbientArray (ambient animations) */
+ {
+ 0, /* StartIndex */
+ 5, /* NumFrames */
+ RANDOM_ANIM | COLORXFORM_ANIM, /* AnimFlags */
+ ONE_SECOND / 8, ONE_SECOND * 5 / 8, /* FrameRate */
+ ONE_SECOND / 8, ONE_SECOND * 5 / 8, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 1, /* StartIndex */
+ 5, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 6, /* StartIndex */
+ 5, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 11, /* StartIndex */
+ 5, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 16, /* StartIndex */
+ 6, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 22, /* StartIndex */
+ 8, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, 0, /* FrameRate */
+ ONE_SECOND / 15, 0, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 30, /* StartIndex */
+ 9, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, ONE_SECOND / 15, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 8) | (1 << 9), /* BlockMask */
+ },
+ {
+ 39, /* StartIndex */
+ 4, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 43, /* StartIndex */
+ 5, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 6), /* BlockMask */
+ },
+ {
+ 48, /* StartIndex */
+ 6, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 6), /* BlockMask */
+ },
+ {
+ 54, /* StartIndex */
+ 6, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 12), /* BlockMask */
+ },
+ {
+ 60, /* StartIndex */
+ 7, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 12), /* BlockMask */
+ },
+ {
+ 67, /* StartIndex */
+ 8, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 15, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 10) | (1 << 11), /* 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)
+{
+ (void) R; // ignored
+ setSegue (Segue_peace);
+
+ switch (GET_GAME_STATE (SLYLANDRO_HOME_VISITS))
+ {
+ case 1:
+ NPCPhrase (GOODBYE_1);
+ break;
+ default:
+ NPCPhrase (GOODBYE_2);
+ break;
+ }
+}
+
+static void HomeWorld (RESPONSE_REF R);
+
+static void
+HumanInfo (RESPONSE_REF R)
+{
+ BYTE InfoLeft;
+
+ if (PLAYER_SAID (R, happy_to_tell_more))
+ {
+ NPCPhrase (TELL_MORE);
+
+ SET_GAME_STATE (SLYLANDRO_STACK4, 1);
+ }
+ else if (PLAYER_SAID (R, would_you_like_to_know_more))
+ {
+ NPCPhrase (YES_TELL_MORE);
+ }
+ else if (PLAYER_SAID (R, we_come_from_earth))
+ {
+ NPCPhrase (OK_EARTH);
+
+ SET_GAME_STATE (SLYLANDRO_KNOW_EARTH, 1);
+ }
+ else if (PLAYER_SAID (R, we_explore))
+ {
+ NPCPhrase (OK_EXPLORE);
+
+ SET_GAME_STATE (SLYLANDRO_KNOW_EXPLORE, 1);
+ }
+ else if (PLAYER_SAID (R, we_fight_urquan))
+ {
+ NPCPhrase (URQUAN_NICE_GUYS);
+
+ SET_GAME_STATE (SLYLANDRO_KNOW_URQUAN, 1);
+ }
+ else if (PLAYER_SAID (R, not_same_urquan))
+ {
+ NPCPhrase (PERSONALITY_CHANGE);
+
+ SET_GAME_STATE (SLYLANDRO_KNOW_URQUAN, 2);
+ }
+ else if (PLAYER_SAID (R, we_gather))
+ {
+ NPCPhrase (MAYBE_INTERESTED);
+
+ SET_GAME_STATE (SLYLANDRO_KNOW_GATHER, 1);
+ }
+
+ InfoLeft = FALSE;
+ if (GET_GAME_STATE (SLYLANDRO_KNOW_URQUAN) == 1)
+ {
+ InfoLeft = TRUE;
+ Response (not_same_urquan, HumanInfo);
+ }
+ if (!GET_GAME_STATE (SLYLANDRO_KNOW_EARTH))
+ {
+ InfoLeft = TRUE;
+ Response (we_come_from_earth, HumanInfo);
+ }
+ if (!GET_GAME_STATE (SLYLANDRO_KNOW_EXPLORE))
+ {
+ InfoLeft = TRUE;
+ Response (we_explore, HumanInfo);
+ }
+ if (!GET_GAME_STATE (SLYLANDRO_KNOW_URQUAN))
+ {
+ InfoLeft = TRUE;
+ Response (we_fight_urquan, HumanInfo);
+ }
+ if (!GET_GAME_STATE (SLYLANDRO_KNOW_GATHER))
+ {
+ InfoLeft = TRUE;
+ Response (we_gather, HumanInfo);
+ }
+
+ Response (enough_about_me, HomeWorld);
+ if (!InfoLeft)
+ {
+ SET_GAME_STATE (SLYLANDRO_STACK4, 2);
+ }
+}
+
+static void
+SlylandroInfo (RESPONSE_REF R)
+{
+ BYTE InfoLeft;
+
+ if (PLAYER_SAID (R, like_more_about_you))
+ {
+ NPCPhrase (SURE_KNOW_WHAT);
+ }
+ else if (PLAYER_SAID (R, what_about_home))
+ {
+ NPCPhrase (ABOUT_HOME);
+
+ DISABLE_PHRASE (what_about_home);
+ }
+ else if (PLAYER_SAID (R, what_about_culture))
+ {
+ NPCPhrase (ABOUT_CULTURE);
+
+ DISABLE_PHRASE (what_about_culture);
+ }
+ else if (PLAYER_SAID (R, what_about_history))
+ {
+ NPCPhrase (ABOUT_HISTORY);
+
+ DISABLE_PHRASE (what_about_history);
+ }
+ else if (PLAYER_SAID (R, what_about_biology))
+ {
+ NPCPhrase (ABOUT_BIOLOGY);
+
+ DISABLE_PHRASE (what_about_biology);
+ }
+
+ InfoLeft = FALSE;
+ if (PHRASE_ENABLED (what_about_home))
+ {
+ InfoLeft = TRUE;
+ Response (what_about_home, SlylandroInfo);
+ }
+ if (PHRASE_ENABLED (what_about_culture))
+ {
+ InfoLeft = TRUE;
+ Response (what_about_culture, SlylandroInfo);
+ }
+ if (PHRASE_ENABLED (what_about_history))
+ {
+ InfoLeft = TRUE;
+ Response (what_about_history, SlylandroInfo);
+ }
+ if (PHRASE_ENABLED (what_about_biology))
+ {
+ InfoLeft = TRUE;
+ Response (what_about_biology, SlylandroInfo);
+ }
+
+ Response (enough_info, HomeWorld);
+ if (!InfoLeft)
+ {
+ DISABLE_PHRASE (like_more_about_you);
+ }
+}
+
+static void
+FixBug (RESPONSE_REF R)
+{
+ if (PLAYER_SAID (R, think_about_rep_priorities))
+ NPCPhrase (UH_OH);
+ else if (PLAYER_SAID (R, hunt_them_down))
+ {
+ NPCPhrase (GROW_TOO_FAST);
+
+ DISABLE_PHRASE (hunt_them_down);
+ }
+ else if (PLAYER_SAID (R, sue_melnorme))
+ {
+ NPCPhrase (SIGNED_WAIVER);
+
+ DISABLE_PHRASE (sue_melnorme);
+ }
+ else if (PLAYER_SAID (R, recall_signal))
+ {
+ NPCPhrase (NOT_THIS_MODEL);
+
+ DISABLE_PHRASE (recall_signal);
+ }
+
+ if (PHRASE_ENABLED (hunt_them_down))
+ Response (hunt_them_down, FixBug);
+ if (PHRASE_ENABLED (sue_melnorme))
+ Response (sue_melnorme, FixBug);
+ if (PHRASE_ENABLED (recall_signal))
+ Response (recall_signal, FixBug);
+ Response (mega_self_destruct, HomeWorld);
+}
+
+static void
+ProbeBug (RESPONSE_REF R)
+{
+ if (PLAYER_SAID (R, probe_has_bug))
+ NPCPhrase (NO_IT_DOESNT);
+ else if (PLAYER_SAID (R, tell_me_about_rep_2))
+ {
+ NPCPhrase (REP_NO_PROBLEM);
+
+ DISABLE_PHRASE (tell_me_about_rep_2);
+ }
+ else if (PLAYER_SAID (R, what_about_rep_priorities))
+ {
+ NPCPhrase (MAXIMUM_SO_WHAT);
+
+ DISABLE_PHRASE (what_about_rep_priorities);
+ }
+ else if (PLAYER_SAID (R, tell_me_about_attack))
+ {
+ NPCPhrase (ATTACK_NO_PROBLEM);
+
+ DISABLE_PHRASE (tell_me_about_attack);
+ }
+
+ if (PHRASE_ENABLED (tell_me_about_rep_2))
+ Response (tell_me_about_rep_2, ProbeBug);
+ else if (PHRASE_ENABLED (what_about_rep_priorities))
+ Response (what_about_rep_priorities, ProbeBug);
+ else
+ {
+ Response (think_about_rep_priorities, FixBug);
+ }
+ if (PHRASE_ENABLED (tell_me_about_attack))
+ Response (tell_me_about_attack, ProbeBug);
+}
+
+static void ProbeInfo (RESPONSE_REF R);
+
+static void
+ProbeFunction (RESPONSE_REF R)
+{
+ BYTE LastStack;
+ RESPONSE_REF pStr[2];
+
+ LastStack = 0;
+ pStr[0] = pStr[1] = 0;
+ if (PLAYER_SAID (R, talk_more_probe_attack))
+ {
+ NPCPhrase (NO_PROBLEM_BUT_SURE);
+ }
+ else if (PLAYER_SAID (R, tell_me_about_basics))
+ {
+ NPCPhrase (BASIC_COMMANDS);
+
+ SET_GAME_STATE (PLAYER_KNOWS_PROGRAM, 1);
+ DISABLE_PHRASE (tell_basics_again);
+ }
+ else if (PLAYER_SAID (R, tell_basics_again))
+ {
+ NPCPhrase (OK_BASICS_AGAIN);
+
+ DISABLE_PHRASE (tell_basics_again);
+ }
+ else if (PLAYER_SAID (R, what_effect))
+ {
+ NPCPhrase (AFFECTS_BEHAVIOR);
+
+ SET_GAME_STATE (PLAYER_KNOWS_EFFECTS, 1);
+ DISABLE_PHRASE (what_effect);
+ }
+ else if (PLAYER_SAID (R, tell_me_about_rep_1))
+ {
+ NPCPhrase (ABOUT_REP);
+
+ LastStack = 2;
+ SET_GAME_STATE (SLYLANDRO_STACK8, 3);
+ }
+ else if (PLAYER_SAID (R, what_set_priority))
+ {
+ NPCPhrase (MAXIMUM);
+
+ SET_GAME_STATE (PLAYER_KNOWS_PRIORITY, 1);
+ DISABLE_PHRASE (what_set_priority);
+ }
+ else if (PLAYER_SAID (R, how_does_probe_defend))
+ {
+ NPCPhrase (ONLY_SELF_DEFENSE);
+
+ LastStack = 1;
+ SET_GAME_STATE (SLYLANDRO_STACK9, 1);
+ }
+ else if (PLAYER_SAID (R, combat_behavior))
+ {
+ NPCPhrase (MISSILE_BATTERIES);
+
+ LastStack = 1;
+ SET_GAME_STATE (SLYLANDRO_STACK9, 2);
+ }
+ else if (PLAYER_SAID (R, what_missile_batteries))
+ {
+ NPCPhrase (LIGHTNING_ONLY_FOR_HARVESTING);
+
+ SET_GAME_STATE (SLYLANDRO_STACK9, 3);
+ }
+
+ switch (GET_GAME_STATE (SLYLANDRO_STACK9))
+ {
+ case 0:
+ pStr[0] = how_does_probe_defend;
+ break;
+ case 1:
+ pStr[0] = combat_behavior;
+ break;
+ case 2:
+ pStr[0] = what_missile_batteries;
+ break;
+ }
+ switch (GET_GAME_STATE (SLYLANDRO_STACK8))
+ {
+ case 2:
+ pStr[1] = tell_me_about_rep_1;
+ break;
+ case 3:
+ if (PHRASE_ENABLED (what_set_priority))
+ pStr[1] = what_set_priority;
+ break;
+ }
+
+ if (LastStack && pStr[LastStack - 1])
+ Response (pStr[LastStack - 1], ProbeFunction);
+ if (!GET_GAME_STATE (PLAYER_KNOWS_PROGRAM))
+ Response (tell_me_about_basics, ProbeFunction);
+ else
+ {
+ if (GET_GAME_STATE (PLAYER_KNOWS_PRIORITY))
+ {
+ if (GET_GAME_STATE (PLAYER_KNOWS_EFFECTS))
+ {
+ Response (probe_has_bug, ProbeBug);
+ }
+ if (PHRASE_ENABLED (what_effect))
+ Response (what_effect, ProbeFunction);
+ }
+ if (PHRASE_ENABLED (tell_basics_again))
+ Response (tell_basics_again, ProbeFunction);
+ }
+ if (LastStack == 0)
+ {
+ do
+ {
+ if (pStr[LastStack])
+ Response (pStr[LastStack], ProbeFunction);
+ } while (++LastStack < 2);
+ }
+ else
+ {
+ LastStack = (LastStack - 1) ^ 1;
+ if (pStr[LastStack])
+ Response (pStr[LastStack], ProbeFunction);
+ }
+
+ Response (enough_problem, ProbeInfo);
+}
+
+static void
+ProbeInfo (RESPONSE_REF R)
+{
+ BYTE i, LastStack, InfoLeft;
+ RESPONSE_REF pStr[3];
+
+ LastStack = 0;
+ pStr[0] = pStr[1] = pStr[2] = 0;
+ if (PLAYER_SAID (R, what_are_probes))
+ {
+ NPCPhrase (PROBES_ARE);
+
+ SET_GAME_STATE (SLYLANDRO_STACK5, 1);
+ }
+ else if (PLAYER_SAID (R, know_more_probe))
+ NPCPhrase (OK_WHAT_MORE_PROBE);
+ else if (PLAYER_SAID (R, why_probe_always_attack))
+ {
+ NPCPhrase (ONLY_DEFEND);
+
+ SET_GAME_STATE (SLYLANDRO_STACK6, 1);
+ }
+ else if (PLAYER_SAID (R, talk_more_probe_attack))
+ {
+ ProbeFunction (R);
+ return;
+ }
+ else if (PLAYER_SAID (R, where_probes_from))
+ {
+ NPCPhrase (PROBES_FROM_MELNORME);
+
+ LastStack = 1;
+ SET_GAME_STATE (SLYLANDRO_STACK7, 1);
+ }
+ else if (PLAYER_SAID (R, why_sell))
+ {
+ NPCPhrase (SELL_FOR_INFO);
+
+ LastStack = 1;
+ SET_GAME_STATE (SLYLANDRO_STACK7, 2);
+ }
+ else if (PLAYER_SAID (R, how_long_ago))
+ {
+ NPCPhrase (FIFTY_THOUSAND_ROTATIONS);
+
+ SET_GAME_STATE (SLYLANDRO_STACK7, 3);
+ }
+ else if (PLAYER_SAID (R, whats_probes_mission))
+ {
+ NPCPhrase (SEEK_OUT_NEW_LIFE);
+
+ LastStack = 2;
+ SET_GAME_STATE (SLYLANDRO_STACK8, 1);
+ }
+ else if (PLAYER_SAID (R, if_only_one))
+ {
+ NPCPhrase (THEY_REPLICATE);
+
+ SET_GAME_STATE (SLYLANDRO_STACK8, 2);
+ }
+ else if (PLAYER_SAID (R, enough_problem))
+ NPCPhrase (OK_ENOUGH_PROBLEM);
+
+ if (!GET_GAME_STATE (SLYLANDRO_KNOW_BROKEN)
+ && GET_GAME_STATE (PROBE_EXHIBITED_BUG))
+ {
+ switch (GET_GAME_STATE (SLYLANDRO_STACK6))
+ {
+ case 0:
+ pStr[0] = why_probe_always_attack;
+ break;
+ case 1:
+ pStr[0] = talk_more_probe_attack;
+ break;
+ }
+ }
+ switch (GET_GAME_STATE (SLYLANDRO_STACK7))
+ {
+ case 0:
+ pStr[1] = where_probes_from;
+ break;
+ case 1:
+ pStr[1] = why_sell;
+ break;
+ case 2:
+ pStr[1] = how_long_ago;
+ break;
+ }
+ switch (GET_GAME_STATE (SLYLANDRO_STACK8))
+ {
+ case 0:
+ pStr[2] = whats_probes_mission;
+ break;
+ case 1:
+ pStr[2] = if_only_one;
+ break;
+ }
+
+ InfoLeft = FALSE;
+ if (pStr[LastStack])
+ {
+ InfoLeft = TRUE;
+ Response (pStr[LastStack], ProbeInfo);
+ }
+ for (i = 0; i < 3; ++i)
+ {
+ if (i != LastStack && pStr[i])
+ {
+ InfoLeft = TRUE;
+ Response (pStr[i], ProbeInfo);
+ }
+ }
+
+ Response (enough_probe, HomeWorld);
+ if (!InfoLeft)
+ {
+ DISABLE_PHRASE (know_more_probe);
+ }
+}
+
+static void
+HomeWorld (RESPONSE_REF R)
+{
+ BYTE i, LastStack;
+ RESPONSE_REF pStr[3];
+
+ LastStack = 0;
+ pStr[0] = pStr[1] = pStr[2] = 0;
+ if (PLAYER_SAID (R, we_are_us0))
+ {
+ NPCPhrase (TERRIBLY_EXCITING);
+
+ SET_GAME_STATE (SLYLANDRO_STACK1, 1);
+ DISABLE_PHRASE (we_are_us0);
+ }
+ else if (PLAYER_SAID (R, what_other_visitors))
+ {
+ NPCPhrase (VISITORS);
+
+ SET_GAME_STATE (PLAYER_KNOWS_PROBE, 1);
+ SET_GAME_STATE (SLYLANDRO_STACK1, 2);
+ }
+ else if (PLAYER_SAID (R, any_other_visitors))
+ {
+ NPCPhrase (LONG_AGO);
+
+ SET_GAME_STATE (SLYLANDRO_STACK1, 3);
+ }
+ else if (PLAYER_SAID (R, what_about_sentient_milieu))
+ {
+ NPCPhrase (MET_TAALO_THEY_ARE_FROM);
+
+ SET_GAME_STATE (SLYLANDRO_STACK1, 4);
+ }
+ else if (PLAYER_SAID (R, who_else))
+ {
+ NPCPhrase (PRECURSORS);
+
+ SET_GAME_STATE (SLYLANDRO_STACK1, 5);
+ }
+ else if (PLAYER_SAID (R, precursors_yow))
+ {
+ NPCPhrase (ABOUT_PRECURSORS);
+
+ SET_GAME_STATE (SLYLANDRO_STACK1, 6);
+ }
+ else if (PLAYER_SAID (R, must_know_more))
+ {
+ NPCPhrase (ALL_WE_KNOW);
+
+ SET_GAME_STATE (SLYLANDRO_STACK1, 7);
+ }
+ else if (PLAYER_SAID (R, who_are_you))
+ {
+ NPCPhrase (WE_ARE_SLY);
+
+ LastStack = 1;
+ SET_GAME_STATE (SLYLANDRO_STACK2, 1);
+ }
+ else if (PLAYER_SAID (R, where_are_you))
+ {
+ NPCPhrase (DOWN_HERE);
+
+ LastStack = 2;
+ SET_GAME_STATE (SLYLANDRO_STACK3, 1);
+ }
+ else if (PLAYER_SAID (R, thats_impossible_1))
+ {
+ NPCPhrase (NO_ITS_NOT_1);
+
+ LastStack = 2;
+ SET_GAME_STATE (SLYLANDRO_STACK3, 2);
+ }
+ else if (PLAYER_SAID (R, thats_impossible_2))
+ {
+ NPCPhrase (NO_ITS_NOT_2);
+
+ LastStack = 2;
+ SET_GAME_STATE (SLYLANDRO_STACK3, 3);
+ }
+ else if (PLAYER_SAID (R, like_more_about_you))
+ {
+ SlylandroInfo (R);
+ return;
+ }
+ else if (PLAYER_SAID (R, enough_about_me))
+ NPCPhrase (OK_ENOUGH_YOU);
+ else if (PLAYER_SAID (R, enough_info))
+ NPCPhrase (OK_ENOUGH_INFO);
+ else if (PLAYER_SAID (R, enough_probe))
+ NPCPhrase (OK_ENOUGH_PROBE);
+ else if (PLAYER_SAID (R, mega_self_destruct))
+ {
+ NPCPhrase (WHY_YES_THERE_IS);
+
+ SET_GAME_STATE (SLYLANDRO_KNOW_BROKEN, 1);
+ SET_GAME_STATE (DESTRUCT_CODE_ON_SHIP, 1);
+ i = GET_GAME_STATE (SLYLANDRO_MULTIPLIER) + 1;
+ SET_GAME_STATE (SLYLANDRO_MULTIPLIER, i);
+ AddEvent (RELATIVE_EVENT, 0, 0, 0, SLYLANDRO_RAMP_DOWN);
+ }
+
+ switch (GET_GAME_STATE (SLYLANDRO_STACK1))
+ {
+ case 0:
+ construct_response (shared_phrase_buf,
+ we_are_us0,
+ GLOBAL_SIS (CommanderName),
+ we_are_us1,
+ GLOBAL_SIS (ShipName),
+ we_are_us2,
+ (UNICODE*)NULL);
+ pStr[0] = we_are_us0;
+ break;
+ case 1:
+ pStr[0] = what_other_visitors;
+ break;
+ case 2:
+ pStr[0] = any_other_visitors;
+ break;
+ case 3:
+ pStr[0] = what_about_sentient_milieu;
+ break;
+ case 4:
+ pStr[0] = who_else;
+ break;
+ case 5:
+ pStr[0] = precursors_yow;
+ break;
+ case 6:
+ pStr[0] = must_know_more;
+ break;
+ }
+ switch (GET_GAME_STATE (SLYLANDRO_STACK2))
+ {
+ case 0:
+ pStr[1] = who_are_you;
+ break;
+ case 1:
+ if (PHRASE_ENABLED (like_more_about_you))
+ pStr[1] = like_more_about_you;
+ break;
+ }
+ switch (GET_GAME_STATE (SLYLANDRO_STACK3))
+ {
+ case 0:
+ pStr[2] = where_are_you;
+ break;
+ case 1:
+ pStr[2] = thats_impossible_1;
+ break;
+ case 2:
+ pStr[2] = thats_impossible_2;
+ break;
+ }
+
+ if (pStr[LastStack])
+ {
+ if (pStr[LastStack] != we_are_us0)
+ Response (pStr[LastStack], HomeWorld);
+ else
+ DoResponsePhrase (pStr[LastStack], HomeWorld, shared_phrase_buf);
+ }
+ for (i = 0; i < 3; ++i)
+ {
+ if (i != LastStack && pStr[i])
+ {
+ if (pStr[i] != we_are_us0)
+ Response (pStr[i], HomeWorld);
+ else
+ DoResponsePhrase (pStr[i], HomeWorld, shared_phrase_buf);
+ }
+ }
+ if (GET_GAME_STATE (SLYLANDRO_STACK1))
+ {
+ switch (GET_GAME_STATE (SLYLANDRO_STACK4))
+ {
+ case 0:
+ Response (happy_to_tell_more, HumanInfo);
+ break;
+ case 1:
+ Response (would_you_like_to_know_more, HumanInfo);
+ break;
+ }
+ }
+ if (GET_GAME_STATE (PLAYER_KNOWS_PROBE)
+ && !GET_GAME_STATE (SLYLANDRO_KNOW_BROKEN))
+ {
+ switch (GET_GAME_STATE (SLYLANDRO_STACK5))
+ {
+ case 0:
+ Response (what_are_probes, ProbeInfo);
+ break;
+ case 1:
+ if (PHRASE_ENABLED (know_more_probe))
+ Response (know_more_probe, ProbeInfo);
+ break;
+ }
+ }
+ Response (bye, ExitConversation);
+}
+
+static void
+Intro (void)
+{
+ BYTE NumVisits;
+
+ if (GET_GAME_STATE (SLYLANDRO_KNOW_BROKEN)
+ && (NumVisits = GET_GAME_STATE (RECALL_VISITS)) == 0)
+ {
+ NPCPhrase (RECALL_PROGRAM_1);
+ ++NumVisits;
+ SET_GAME_STATE (RECALL_VISITS, NumVisits);
+ }
+ else
+ {
+ NumVisits = GET_GAME_STATE (SLYLANDRO_HOME_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (HELLO_1);
+ break;
+ case 1:
+ NPCPhrase (HELLO_2);
+ break;
+ case 2:
+ NPCPhrase (HELLO_3);
+ break;
+ case 3:
+ NPCPhrase (HELLO_4);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (SLYLANDRO_HOME_VISITS, NumVisits);
+ }
+
+ HomeWorld ((RESPONSE_REF)0);
+}
+
+static COUNT
+uninit_slylandro (void)
+{
+ return (0);
+}
+
+static void
+post_slylandro_enc (void)
+{
+ // nothing defined so far
+}
+
+LOCDATA*
+init_slylandro_comm (void)
+{
+ LOCDATA *retval;
+
+ slylandro_desc.init_encounter_func = Intro;
+ slylandro_desc.post_encounter_func = post_slylandro_enc;
+ slylandro_desc.uninit_encounter_func = uninit_slylandro;
+
+ slylandro_desc.AlienTextBaseline.x = TEXT_X_OFFS + (SIS_TEXT_WIDTH >> 1);
+ slylandro_desc.AlienTextBaseline.y = 0;
+ slylandro_desc.AlienTextWidth = SIS_TEXT_WIDTH;
+
+ setSegue (Segue_peace);
+ retval = &slylandro_desc;
+
+ return (retval);
+}
diff --git a/src/uqm/comm/slyhome/strings.h b/src/uqm/comm/slyhome/strings.h
new file mode 100644
index 0000000..bedac27
--- /dev/null
+++ b/src/uqm/comm/slyhome/strings.h
@@ -0,0 +1,143 @@
+//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 SLYHOME_STRINGS_H
+#define SLYHOME_STRINGS_H
+
+enum
+{
+ NULL_PHRASE,
+ HELLO_1,
+ HELLO_2,
+ HELLO_3,
+ HELLO_4,
+ RECALL_PROGRAM_1,
+ we_are_us0,
+ we_are_us1,
+ we_are_us2,
+ TERRIBLY_EXCITING,
+ happy_to_tell_more,
+ TELL_MORE,
+ would_you_like_to_know_more,
+ YES_TELL_MORE,
+ we_come_from_earth,
+ OK_EARTH,
+ we_explore,
+ OK_EXPLORE,
+ we_fight_urquan,
+ URQUAN_NICE_GUYS,
+ not_same_urquan,
+ PERSONALITY_CHANGE,
+ we_gather,
+ MAYBE_INTERESTED,
+ enough_about_me,
+ OK_ENOUGH_YOU,
+ what_other_visitors,
+ VISITORS,
+ any_other_visitors,
+ LONG_AGO,
+ what_about_sentient_milieu,
+ MET_TAALO_THEY_ARE_FROM,
+ who_else,
+ PRECURSORS,
+ precursors_yow,
+ ABOUT_PRECURSORS,
+ must_know_more,
+ ALL_WE_KNOW,
+ who_are_you,
+ WE_ARE_SLY,
+ like_more_about_you,
+ SURE_KNOW_WHAT,
+ what_about_home,
+ ABOUT_HOME,
+ what_about_culture,
+ ABOUT_CULTURE,
+ what_about_history,
+ ABOUT_HISTORY,
+ what_about_biology,
+ ABOUT_BIOLOGY,
+ enough_info,
+ OK_ENOUGH_INFO,
+ where_are_you,
+ DOWN_HERE,
+ thats_impossible_1,
+ NO_ITS_NOT_1,
+ thats_impossible_2,
+ NO_ITS_NOT_2,
+ bye,
+ GOODBYE_1,
+ GOODBYE_2,
+ what_are_probes,
+ PROBES_ARE,
+ know_more_probe,
+ OK_WHAT_MORE_PROBE,
+ where_probes_from,
+ PROBES_FROM_MELNORME,
+ why_sell,
+ SELL_FOR_INFO,
+ how_long_ago,
+ FIFTY_THOUSAND_ROTATIONS,
+ whats_probes_mission,
+ SEEK_OUT_NEW_LIFE,
+ if_only_one,
+ THEY_REPLICATE,
+ enough_probe,
+ OK_ENOUGH_PROBE,
+ why_probe_always_attack,
+ ONLY_DEFEND,
+ talk_more_probe_attack,
+ NO_PROBLEM_BUT_SURE,
+ tell_me_about_basics,
+ BASIC_COMMANDS,
+ tell_basics_again,
+ OK_BASICS_AGAIN,
+ what_effect,
+ AFFECTS_BEHAVIOR,
+ how_does_probe_defend,
+ ONLY_SELF_DEFENSE,
+ combat_behavior,
+ MISSILE_BATTERIES,
+ what_missile_batteries,
+ LIGHTNING_ONLY_FOR_HARVESTING,
+ tell_me_about_rep_1,
+ ABOUT_REP,
+ what_set_priority,
+ MAXIMUM,
+ enough_problem,
+ OK_ENOUGH_PROBLEM,
+ probe_has_bug,
+ NO_IT_DOESNT,
+ tell_me_about_attack,
+ ATTACK_NO_PROBLEM,
+ tell_me_about_rep_2,
+ REP_NO_PROBLEM,
+ what_about_rep_priorities,
+ MAXIMUM_SO_WHAT,
+ think_about_rep_priorities,
+ UH_OH,
+ hunt_them_down,
+ GROW_TOO_FAST,
+ sue_melnorme,
+ SIGNED_WAIVER,
+ recall_signal,
+ NOT_THIS_MODEL,
+ mega_self_destruct,
+ WHY_YES_THERE_IS,
+};
+
+#endif /* _STRINGS_H */