summaryrefslogtreecommitdiff
path: root/src/uqm/comm/umgah/umgahc.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/uqm/comm/umgah/umgahc.c')
-rw-r--r--src/uqm/comm/umgah/umgahc.c729
1 files changed, 729 insertions, 0 deletions
diff --git a/src/uqm/comm/umgah/umgahc.c b/src/uqm/comm/umgah/umgahc.c
new file mode 100644
index 0000000..d9debd5
--- /dev/null
+++ b/src/uqm/comm/umgah/umgahc.c
@@ -0,0 +1,729 @@
+//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"
+
+
+static LOCDATA umgah_desc =
+{
+ NULL, /* init_encounter_func */
+ NULL, /* post_encounter_func */
+ NULL, /* uninit_encounter_func */
+ UMGAH_PMAP_ANIM, /* AlienFrame */
+ UMGAH_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 */
+ UMGAH_COLOR_MAP, /* AlienColorMap */
+ UMGAH_MUSIC, /* AlienSong */
+ NULL_RESOURCE, /* AlienAltSong */
+ 0, /* AlienSongFlags */
+ UMGAH_CONVERSATION_PHRASES, /* PlayerPhrases */
+ 16, /* NumAnimations */
+ { /* AlienAmbientArray (ambient animations) */
+ {
+ 5, /* StartIndex */
+ 3, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 5),
+ },
+ {
+ 8, /* StartIndex */
+ 3, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 6),
+ },
+ {
+ 11, /* StartIndex */
+ 2, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 7),
+ },
+ {
+ 13, /* StartIndex */
+ 2, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 8),
+ },
+ {
+ 15, /* StartIndex */
+ 2, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 20, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 9),
+ },
+ {
+ 17, /* StartIndex */
+ 3, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND * 7 / 60, 0, /* FrameRate */
+ ONE_SECOND * 3, ONE_SECOND * 3, /* RestartRate */
+ (1 << 0),
+ },
+ {
+ 20, /* StartIndex */
+ 3, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND * 7 / 60, 0, /* FrameRate */
+ ONE_SECOND * 3, ONE_SECOND * 3, /* RestartRate */
+ (1 << 1),
+ },
+ {
+ 23, /* StartIndex */
+ 2, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND * 7 / 60, 0, /* FrameRate */
+ ONE_SECOND * 3, ONE_SECOND * 3, /* RestartRate */
+ (1 << 2),
+ },
+ {
+ 25, /* StartIndex */
+ 2, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND * 7 / 60, 0, /* FrameRate */
+ ONE_SECOND * 3, ONE_SECOND * 3, /* RestartRate */
+ (1 << 3),
+ },
+ {
+ 27, /* StartIndex */
+ 2, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND * 7 / 60, 0, /* FrameRate */
+ ONE_SECOND * 3, ONE_SECOND * 3, /* RestartRate */
+ (1 << 4),
+ },
+ {
+ 29, /* StartIndex */
+ 3, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 32, /* StartIndex */
+ 3, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 35, /* StartIndex */
+ 5, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 40, /* StartIndex */
+ 6, /* NumFrames */
+ YOYO_ANIM, /* AnimFlags */
+ ONE_SECOND / 10, 0, /* FrameRate */
+ ONE_SECOND / 10, 0, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ {
+ 46, /* StartIndex */
+ 2, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 5, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 15), /* BlockMask */
+ },
+ {
+ 48, /* StartIndex */
+ 2, /* NumFrames */
+ CIRCULAR_ANIM, /* AnimFlags */
+ ONE_SECOND / 5, 0, /* FrameRate */
+ ONE_SECOND, ONE_SECOND * 3, /* RestartRate */
+ (1 << 14), /* BlockMask */
+ },
+ },
+ { /* AlienTransitionDesc */
+ 0, /* StartIndex */
+ 0, /* NumFrames */
+ 0, /* AnimFlags */
+ 0, 0, /* FrameRate */
+ 0, 0, /* RestartRate */
+ 0, /* BlockMask */
+ },
+ { /* AlienTalkDesc */
+ 1, /* StartIndex */
+ 4, /* 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 void
+CombatIsInevitable (RESPONSE_REF R)
+{
+ setSegue (Segue_hostile);
+
+ if (PLAYER_SAID (R, bye_zombie))
+ {
+ NPCPhrase (GOODBYE_ZOMBIE);
+
+ setSegue (Segue_peace);
+ }
+ else if (PLAYER_SAID (R, bye_pre_zombie))
+ NPCPhrase (GOODBYE_PRE_ZOMBIE);
+ else if (PLAYER_SAID (R, can_we_be_friends))
+ {
+ NPCPhrase (SURE_FRIENDS);
+
+ SET_GAME_STATE (UMGAH_MENTIONED_TRICKS, 1);
+ }
+ else if (PLAYER_SAID (R, evil_blobbies_give_up))
+ {
+ NPCPhrase (NOT_EVIL_BLOBBIES);
+
+ SET_GAME_STATE (UMGAH_EVIL_BLOBBIES, 1);
+ }
+ else if (PLAYER_SAID (R, evil_blobbies_must_die))
+ NPCPhrase (OH_NO_WE_WONT);
+ else if (PLAYER_SAID (R, threat))
+ NPCPhrase (NO_THREAT);
+ else if (PLAYER_SAID (R, dont_believe))
+ {
+ NPCPhrase (THEN_DIE);
+
+ SET_GAME_STATE (KNOW_UMGAH_ZOMBIES, 1);
+ SET_GAME_STATE (UMGAH_VISITS, 0);
+ }
+ else if (PLAYER_SAID (R, bye_unknown))
+ {
+ NPCPhrase (GOODBYE_UNKNOWN);
+
+ setSegue (Segue_peace);
+ }
+ else if (PLAYER_SAID (R, bye_post_zombie))
+ {
+ NPCPhrase (FUNNY_IDEA);
+
+ AlienTalkSegue ((COUNT)~0);
+ AddEscortShips (UMGAH_SHIP, 4);
+ SET_GAME_STATE (UMGAH_HOSTILE, 1);
+ }
+}
+
+static void
+Zombies (RESPONSE_REF R)
+{
+ if (GET_GAME_STATE (MET_NORMAL_UMGAH))
+ {
+ if (PLAYER_SAID (R, whats_up_zombies))
+ {
+ NPCPhrase (GENERAL_INFO_ZOMBIE);
+
+ DISABLE_PHRASE (whats_up_zombies);
+ }
+ else if (PLAYER_SAID (R, how_goes_tpet))
+ {
+ NPCPhrase (WHAT_TPET);
+
+ DISABLE_PHRASE (how_goes_tpet);
+ }
+ else if (PLAYER_SAID (R, you_told_us))
+ {
+ NPCPhrase (SADLY_IT_DIED);
+
+ DISABLE_PHRASE (you_told_us);
+ }
+
+ if (PHRASE_ENABLED (whats_up_zombies) && PHRASE_ENABLED (how_goes_tpet))
+ Response (whats_up_zombies, Zombies);
+ if (PHRASE_ENABLED (how_goes_tpet))
+ Response (how_goes_tpet, Zombies);
+ else if (PHRASE_ENABLED (you_told_us))
+ Response (you_told_us, Zombies);
+ else
+ {
+ Response (dont_believe, CombatIsInevitable);
+ }
+ if (PHRASE_ENABLED (whats_up_zombies) && !PHRASE_ENABLED (how_goes_tpet))
+ Response (whats_up_zombies, Zombies);
+ Response (threat, CombatIsInevitable);
+ Response (bye_unknown, CombatIsInevitable);
+ }
+ else
+ {
+ BYTE i, LastStack;
+ RESPONSE_REF pStr[4];
+
+ LastStack = 0;
+ pStr[0] = pStr[1] = pStr[2] = pStr[3] = 0;
+ if (PLAYER_SAID (R, evil_blobbies))
+ {
+ NPCPhrase (YES_VERY_EVIL);
+
+ DISABLE_PHRASE (evil_blobbies);
+ LastStack = 0;
+ }
+ else if (PLAYER_SAID (R, we_vindicator0))
+ {
+ NPCPhrase (GOOD_FOR_YOU_1);
+
+ DISABLE_PHRASE (we_vindicator0);
+ LastStack = 1;
+ }
+ else if (PLAYER_SAID (R, come_in_peace))
+ {
+ NPCPhrase (GOOD_FOR_YOU_2);
+
+ DISABLE_PHRASE (come_in_peace);
+ LastStack = 1;
+ }
+ else if (PLAYER_SAID (R, know_any_jokes))
+ {
+ NPCPhrase (JOKE_1);
+
+ DISABLE_PHRASE (know_any_jokes);
+ LastStack = 2;
+ }
+ else if (PLAYER_SAID (R, better_joke))
+ {
+ NPCPhrase (JOKE_2);
+
+ DISABLE_PHRASE (better_joke);
+ LastStack = 2;
+ }
+ else if (PLAYER_SAID (R, not_very_funny))
+ {
+ NPCPhrase (YES_WE_ARE);
+
+ DISABLE_PHRASE (not_very_funny);
+ LastStack = 2;
+ }
+ else if (PLAYER_SAID (R, what_about_tpet))
+ {
+ NPCPhrase (WHAT_TPET);
+
+ DISABLE_PHRASE (what_about_tpet);
+ LastStack = 3;
+ }
+ else if (PLAYER_SAID (R, give_up_or_die))
+ {
+ NPCPhrase (NOT_GIVE_UP);
+
+ setSegue (Segue_hostile);
+ return;
+ }
+ else if (PLAYER_SAID (R, arilou_told_us))
+ {
+ NPCPhrase (THEN_DIE);
+
+ setSegue (Segue_hostile);
+ SET_GAME_STATE (KNOW_UMGAH_ZOMBIES, 1);
+ SET_GAME_STATE (UMGAH_VISITS, 0);
+ return;
+ }
+
+ if (PHRASE_ENABLED (evil_blobbies))
+ pStr[0] = evil_blobbies;
+ else
+ pStr[0] = give_up_or_die;
+
+ if (PHRASE_ENABLED (we_vindicator0))
+ {
+ construct_response (shared_phrase_buf,
+ we_vindicator0,
+ GLOBAL_SIS (CommanderName),
+ we_vindicator1,
+ GLOBAL_SIS (ShipName),
+ we_vindicator2,
+ (UNICODE*)NULL);
+ pStr[1] = we_vindicator0;
+ }
+ else if (PHRASE_ENABLED (come_in_peace))
+ pStr[1] = come_in_peace;
+
+ if (PHRASE_ENABLED (know_any_jokes))
+ pStr[2] = know_any_jokes;
+ else if (PHRASE_ENABLED (better_joke))
+ pStr[2] = better_joke;
+ else if (PHRASE_ENABLED (not_very_funny))
+ pStr[2] = not_very_funny;
+
+ if (PHRASE_ENABLED (what_about_tpet))
+ pStr[3] = what_about_tpet;
+ else
+ pStr[3] = arilou_told_us;
+
+ if (pStr[LastStack])
+ {
+ if (pStr[LastStack] != we_vindicator0)
+ Response (pStr[LastStack], Zombies);
+ else
+ DoResponsePhrase (pStr[LastStack], Zombies, shared_phrase_buf);
+ }
+ for (i = 0; i < 4; ++i)
+ {
+ if (i != LastStack && pStr[i])
+ {
+ if (pStr[i] != we_vindicator0)
+ Response (pStr[i], Zombies);
+ else
+ DoResponsePhrase (pStr[i], Zombies, shared_phrase_buf);
+ }
+ }
+ Response (bye_zombie, CombatIsInevitable);
+ }
+}
+
+static void
+NormalUmgah (RESPONSE_REF R)
+{
+ if (PLAYER_SAID (R, whats_up_pre_zombie))
+ {
+ NPCPhrase (GENERAL_INFO_PRE_ZOMBIE);
+
+ DISABLE_PHRASE (whats_up_pre_zombie);
+ }
+ else if (PLAYER_SAID (R, want_to_defeat_urquan))
+ {
+ NPCPhrase (FINE_BY_US);
+
+ DISABLE_PHRASE (want_to_defeat_urquan);
+ }
+
+ if (!GET_GAME_STATE (UMGAH_EVIL_BLOBBIES))
+ Response (evil_blobbies_give_up, CombatIsInevitable);
+ else
+ Response (evil_blobbies_must_die, CombatIsInevitable);
+ if (PHRASE_ENABLED (whats_up_pre_zombie))
+ Response (whats_up_pre_zombie, NormalUmgah);
+ if (PHRASE_ENABLED (want_to_defeat_urquan))
+ Response (want_to_defeat_urquan, NormalUmgah);
+ switch (GET_GAME_STATE (UMGAH_MENTIONED_TRICKS))
+ {
+ case 0:
+ Response (can_we_be_friends, CombatIsInevitable);
+ break;
+ }
+ Response (bye_pre_zombie, CombatIsInevitable);
+}
+
+static void
+UmgahReward (RESPONSE_REF R)
+{
+ if (PLAYER_SAID (R, what_before_tpet))
+ {
+ NPCPhrase (TRKD_SPATHI_AND_ILWRATH);
+
+ DISABLE_PHRASE (what_before_tpet);
+ }
+ else if (PLAYER_SAID (R, where_caster))
+ {
+ NPCPhrase (SPATHI_TOOK_THEM);
+
+ DISABLE_PHRASE (where_caster);
+ }
+ else if (PLAYER_SAID (R, owe_me_big_time))
+ {
+ NPCPhrase (THANKS);
+
+ GLOBAL_SIS (TotalBioMass) += 1000 / BIO_CREDIT_VALUE;
+ DISABLE_PHRASE (owe_me_big_time);
+ DISABLE_PHRASE (our_largesse);
+ }
+ else if (PLAYER_SAID (R, our_largesse))
+ {
+ NPCPhrase (GIVE_LIFEDATA);
+
+ GLOBAL_SIS (TotalBioMass) += 1000 / BIO_CREDIT_VALUE;
+ DISABLE_PHRASE (our_largesse);
+ DISABLE_PHRASE (owe_me_big_time);
+ }
+ else if (PLAYER_SAID (R, what_do_with_tpet))
+ {
+ NPCPhrase (TRICK_URQUAN);
+
+ DISABLE_PHRASE (what_do_with_tpet);
+ }
+ else if (PLAYER_SAID (R, any_jokes))
+ {
+ NPCPhrase (SURE);
+
+ DISABLE_PHRASE (any_jokes);
+ }
+ else if (PLAYER_SAID (R, so_what_for_now))
+ {
+ NPCPhrase (DO_THIS_NOW);
+
+ DISABLE_PHRASE (so_what_for_now);
+ }
+
+ if (!GET_GAME_STATE (MET_NORMAL_UMGAH))
+ {
+ if (PHRASE_ENABLED (what_before_tpet))
+ Response (what_before_tpet, UmgahReward);
+ else if (PHRASE_ENABLED (where_caster))
+ Response (where_caster, UmgahReward);
+ }
+ if (PHRASE_ENABLED (owe_me_big_time))
+ {
+ Response (owe_me_big_time, UmgahReward);
+ Response (our_largesse, UmgahReward);
+ }
+ if (PHRASE_ENABLED (what_do_with_tpet))
+ Response (what_do_with_tpet, UmgahReward);
+ else if (PHRASE_ENABLED (any_jokes) && GET_GAME_STATE (UMGAH_MENTIONED_TRICKS) < 2)
+ Response (any_jokes, UmgahReward);
+ if (PHRASE_ENABLED (so_what_for_now))
+ Response (so_what_for_now, UmgahReward);
+ Response (bye_post_zombie, CombatIsInevitable);
+}
+
+static void
+Intro (void)
+{
+ BYTE NumVisits;
+
+ if (GET_GAME_STATE (UMGAH_HOSTILE))
+ {
+ NumVisits = GET_GAME_STATE (UMGAH_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (HOSTILE_HELLO_1);
+ break;
+ case 1:
+ NPCPhrase (HOSTILE_HELLO_2);
+ break;
+ case 2:
+ NPCPhrase (HOSTILE_HELLO_3);
+ break;
+ case 3:
+ NPCPhrase (HOSTILE_HELLO_4);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (UMGAH_VISITS, NumVisits);
+
+ setSegue (Segue_hostile);
+ }
+ else if (GET_GAME_STATE (UMGAH_ZOMBIE_BLOBBIES))
+ {
+ NumVisits = GET_GAME_STATE (UMGAH_VISITS);
+ if (GET_GAME_STATE (TALKING_PET_VISITS))
+ {
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (DESTROY_INTERFERER_1);
+ break;
+ case 1:
+ NPCPhrase (DESTROY_INTERFERER_2);
+ break;
+ case 2:
+ NPCPhrase (DESTROY_INTERFERER_3);
+ break;
+ case 3:
+ NPCPhrase (DESTROY_INTERFERER_4);
+ --NumVisits;
+ break;
+ }
+
+ setSegue (Segue_hostile);
+ }
+ else if (GET_GAME_STATE (KNOW_UMGAH_ZOMBIES))
+ {
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (REVEALED_ZOMBIE_HELLO_1);
+ break;
+ case 1:
+ NPCPhrase (REVEALED_ZOMBIE_HELLO_2);
+ break;
+ case 2:
+ NPCPhrase (REVEALED_ZOMBIE_HELLO_3);
+ break;
+ case 3:
+ NPCPhrase (REVEALED_ZOMBIE_HELLO_4);
+ --NumVisits;
+ break;
+ }
+
+ setSegue (Segue_hostile);
+ }
+ else
+ {
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (UNKNOWN_ZOMBIE_HELLO_1);
+ break;
+ case 1:
+ NPCPhrase (UNKNOWN_ZOMBIE_HELLO_2);
+ break;
+ case 2:
+ NPCPhrase (UNKNOWN_ZOMBIE_HELLO_3);
+ break;
+ case 3:
+ NPCPhrase (UNKNOWN_ZOMBIE_HELLO_4);
+ --NumVisits;
+ break;
+ }
+
+ Zombies ((RESPONSE_REF)0);
+ }
+ SET_GAME_STATE (UMGAH_VISITS, NumVisits);
+ }
+ else if (!GET_GAME_STATE (TALKING_PET))
+ {
+ if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7))
+ {
+ NumVisits = GET_GAME_STATE (UMGAH_HOME_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (HWLD_PRE_ZOMBIE_HELLO_1);
+ break;
+ case 1:
+ NPCPhrase (HWLD_PRE_ZOMBIE_HELLO_2);
+ break;
+ case 2:
+ NPCPhrase (HWLD_PRE_ZOMBIE_HELLO_3);
+ break;
+ case 3:
+ NPCPhrase (HWLD_PRE_ZOMBIE_HELLO_4);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (UMGAH_HOME_VISITS, NumVisits);
+ }
+ else
+ {
+ NumVisits = GET_GAME_STATE (UMGAH_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (SPACE_PRE_ZOMBIE_HELLO_1);
+ break;
+ case 1:
+ NPCPhrase (SPACE_PRE_ZOMBIE_HELLO_2);
+ break;
+ case 2:
+ NPCPhrase (SPACE_PRE_ZOMBIE_HELLO_3);
+ break;
+ case 3:
+ NPCPhrase (SPACE_PRE_ZOMBIE_HELLO_4);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (UMGAH_VISITS, NumVisits);
+ }
+
+ NormalUmgah ((RESPONSE_REF)0);
+ }
+ else
+ {
+ if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7))
+ {
+ NPCPhrase (POST_ZOMBIE_HWLD_HELLO);
+
+ UmgahReward ((RESPONSE_REF)0);
+ }
+ else
+ {
+ NumVisits = GET_GAME_STATE (UMGAH_VISITS);
+ switch (NumVisits++)
+ {
+ case 0:
+ NPCPhrase (REWARD_AT_HOMEWORLD_1);
+ break;
+ case 1:
+ NPCPhrase (REWARD_AT_HOMEWORLD_2);
+ --NumVisits;
+ break;
+ }
+ SET_GAME_STATE (UMGAH_VISITS, NumVisits);
+
+ setSegue (Segue_peace);
+ }
+ }
+}
+
+static COUNT
+uninit_umgah (void)
+{
+ return (0);
+}
+
+static void
+post_umgah_enc (void)
+{
+ if (!GET_GAME_STATE (UMGAH_ZOMBIE_BLOBBIES))
+ {
+ SET_GAME_STATE (MET_NORMAL_UMGAH, 1);
+ }
+}
+
+LOCDATA*
+init_umgah_comm (void)
+{
+ LOCDATA *retval;
+
+ umgah_desc.init_encounter_func = Intro;
+ umgah_desc.post_encounter_func = post_umgah_enc;
+ umgah_desc.uninit_encounter_func = uninit_umgah;
+
+ umgah_desc.AlienTextBaseline.x = TEXT_X_OFFS + (SIS_TEXT_WIDTH >> 1);
+ umgah_desc.AlienTextBaseline.y = 0;
+ umgah_desc.AlienTextWidth = SIS_TEXT_WIDTH - 16;
+
+ if ((GET_GAME_STATE (TALKING_PET) && !GET_GAME_STATE (UMGAH_HOSTILE))
+ || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE)
+ {
+ setSegue (Segue_peace);
+ }
+ else
+ {
+ setSegue (Segue_hostile);
+ }
+ retval = &umgah_desc;
+
+ return (retval);
+}