diff options
Diffstat (limited to 'src/uqm/comm/zoqfot')
-rw-r--r-- | src/uqm/comm/zoqfot/Makeinfo | 2 | ||||
-rw-r--r-- | src/uqm/comm/zoqfot/resinst.h | 9 | ||||
-rw-r--r-- | src/uqm/comm/zoqfot/strings.h | 365 | ||||
-rw-r--r-- | src/uqm/comm/zoqfot/zoqfotc.c | 975 |
4 files changed, 1351 insertions, 0 deletions
diff --git a/src/uqm/comm/zoqfot/Makeinfo b/src/uqm/comm/zoqfot/Makeinfo new file mode 100644 index 0000000..6e1a268 --- /dev/null +++ b/src/uqm/comm/zoqfot/Makeinfo @@ -0,0 +1,2 @@ +uqm_CFILES="zoqfotc.c" +uqm_HFILES="resinst.h strings.h" diff --git a/src/uqm/comm/zoqfot/resinst.h b/src/uqm/comm/zoqfot/resinst.h new file mode 100644 index 0000000..a9430d9 --- /dev/null +++ b/src/uqm/comm/zoqfot/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 ZOQFOTPIK_COLOR_MAP "comm.zoqfotpik.colortable" +#define ZOQFOTPIK_CONVERSATION_PHRASES "comm.zoqfotpik.dialogue" +#define ZOQFOTPIK_FONT "comm.zoqfotpik.font" +#define ZOQFOTPIK_MUSIC "comm.zoqfotpik.music" +#define ZOQFOTPIK_PMAP_ANIM "comm.zoqfotpik.graphics" diff --git a/src/uqm/comm/zoqfot/strings.h b/src/uqm/comm/zoqfot/strings.h new file mode 100644 index 0000000..3278082 --- /dev/null +++ b/src/uqm/comm/zoqfot/strings.h @@ -0,0 +1,365 @@ +//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 ZOQFOT_STRINGS_H +#define ZOQFOT_STRINGS_H + +enum +{ + NULL_PHRASE, + WE_ARE0, + WE_ARE1, + WE_ARE2, + WE_ARE3, + WE_ARE4, + WE_ARE5, + WE_ARE6, + WE_ARE7, + SCOUT_HELLO0, + SCOUT_HELLO1, + SCOUT_HELLO2, + SCOUT_HELLO3, + INIT_HOME_HELLO0, + INIT_HOME_HELLO1, + INIT_HOME_HELLO2, + INIT_HOME_HELLO3, + which_fot, + HE_IS0, + HE_IS1, + HE_IS2, + HE_IS3, + HE_IS4, + HE_IS5, + HE_IS6, + HE_IS7, + we_are_vindicator0, + we_are_vindicator1, + we_are_vindicator2, + WE_GLAD0, + WE_GLAD1, + WE_GLAD2, + WE_GLAD3, + WE_GLAD4, + WE_GLAD5, + quiet_toadies, + TOLD_YOU0, + TOLD_YOU1, + TOLD_YOU2, + TOLD_YOU3, + TOLD_YOU4, + TOLD_YOU5, + TOLD_YOU6, + TOLD_YOU7, + your_race, + YEARS_AGO0, + YEARS_AGO1, + YEARS_AGO2, + YEARS_AGO3, + YEARS_AGO4, + YEARS_AGO5, + YEARS_AGO6, + YEARS_AGO7, + YEARS_AGO8, + YEARS_AGO9, + YEARS_AGO10, + YEARS_AGO11, + YEARS_AGO12, + YEARS_AGO13, + where_from, + TRAVELED_FAR0, + TRAVELED_FAR1, + TRAVELED_FAR2, + TRAVELED_FAR3, + TRAVELED_FAR4, + TRAVELED_FAR5, + what_emergency, + UNDER_ATTACK0, + UNDER_ATTACK1, + UNDER_ATTACK2, + UNDER_ATTACK3, + UNDER_ATTACK4, + UNDER_ATTACK5, + UNDER_ATTACK6, + UNDER_ATTACK7, + UNDER_ATTACK8, + UNDER_ATTACK9, + UNDER_ATTACK10, + UNDER_ATTACK11, + tough_luck, + NOT_HELPFUL0, + NOT_HELPFUL1, + NOT_HELPFUL2, + NOT_HELPFUL3, + NOT_HELPFUL4, + NOT_HELPFUL5, + what_look_like, + LOOK_LIKE0, + LOOK_LIKE1, + LOOK_LIKE2, + LOOK_LIKE3, + valuable_info, + GOODBYE0, + GOODBYE1, + GOODBYE2, + GOODBYE3, + all_very_interesting, + SEE_TOLD_YOU0, + SEE_TOLD_YOU1, + SEE_TOLD_YOU2, + SEE_TOLD_YOU3, + how_can_i_help, + ALLY_WITH_US0, + ALLY_WITH_US1, + ALLY_WITH_US2, + ALLY_WITH_US3, + ALLY_WITH_US4, + ALLY_WITH_US5, + decide_later, + PLEASE_HURRY0, + PLEASE_HURRY1, + EMMISSARIES0, + EMMISSARIES1, + EMMISSARIES2, + EMMISSARIES3, + EMMISSARIES4, + EMMISSARIES5, + EMMISSARIES6, + EMMISSARIES7, + sure, + WE_ALLY0, + WE_ALLY1, + WE_ALLY2, + WE_ALLY3, + WE_ALLY4, + WE_ALLY5, + never, + WE_ENEMIES0, + WE_ENEMIES1, + HOSTILE_HELLO_10, + HOSTILE_HELLO_11, + HOSTILE_HELLO_20, + HOSTILE_HELLO_21, + HOSTILE_HELLO_22, + HOSTILE_HELLO_23, + HOSTILE_HELLO_24, + HOSTILE_HELLO_25, + HOSTILE_HELLO_30, + HOSTILE_HELLO_31, + HOSTILE_HELLO_40, + HOSTILE_HELLO_41, + NEUTRAL_HOME_HELLO_10, + NEUTRAL_HOME_HELLO_11, + NEUTRAL_HOME_HELLO_12, + NEUTRAL_HOME_HELLO_13, + NEUTRAL_HOME_HELLO_20, + NEUTRAL_HOME_HELLO_21, + NEUTRAL_HOME_HELLO_22, + NEUTRAL_HOME_HELLO_23, + ALLIED_HOME_HELLO_10, + ALLIED_HOME_HELLO_11, + ALLIED_HOME_HELLO_12, + ALLIED_HOME_HELLO_13, + ALLIED_HOME_HELLO_20, + ALLIED_HOME_HELLO_21, + ALLIED_HOME_HELLO_22, + ALLIED_HOME_HELLO_23, + ALLIED_HOME_HELLO_24, + ALLIED_HOME_HELLO_25, + ALLIED_HOME_HELLO_26, + ALLIED_HOME_HELLO_27, + ALLIED_HOME_HELLO_30, + ALLIED_HOME_HELLO_31, + ALLIED_HOME_HELLO_40, + ALLIED_HOME_HELLO_41, + THANKS_FOR_RESCUE0, + THANKS_FOR_RESCUE1, + THANKS_FOR_RESCUE2, + THANKS_FOR_RESCUE3, + THANKS_FOR_RESCUE4, + THANKS_FOR_RESCUE5, + THANKS_FOR_RESCUE6, + THANKS_FOR_RESCUE7, + THANKS_FOR_RESCUE8, + THANKS_FOR_RESCUE9, + THANKS_FOR_RESCUE10, + THANKS_FOR_RESCUE11, + bye_homeworld, + GOODBYE_HOME0, + GOODBYE_HOME1, + whats_up_homeworld, + GENERAL_INFO_10, + GENERAL_INFO_11, + GENERAL_INFO_12, + GENERAL_INFO_13, + GENERAL_INFO_20, + GENERAL_INFO_21, + GENERAL_INFO_22, + GENERAL_INFO_23, + GENERAL_INFO_24, + GENERAL_INFO_25, + GENERAL_INFO_26, + GENERAL_INFO_27, + GENERAL_INFO_30, + GENERAL_INFO_31, + GENERAL_INFO_32, + GENERAL_INFO_33, + GENERAL_INFO_34, + GENERAL_INFO_35, + GENERAL_INFO_40, + GENERAL_INFO_41, + GENERAL_INFO_42, + GENERAL_INFO_43, + GENERAL_INFO_44, + GENERAL_INFO_45, + GENERAL_INFO_46, + GENERAL_INFO_47, + GENERAL_INFO_48, + GENERAL_INFO_49, + GENERAL_INFO_410, + GENERAL_INFO_411, + any_war_news, + UTWIG_DELAY0, + UTWIG_DELAY1, + UTWIG_DELAY2, + UTWIG_DELAY3, + UTWIG_DELAY4, + UTWIG_DELAY5, + UTWIG_DELAY6, + UTWIG_DELAY7, + UTWIG_DELAY8, + UTWIG_DELAY9, + UTWIG_DELAY10, + UTWIG_DELAY11, + UTWIG_DELAY12, + UTWIG_DELAY13, + KOHRAH_WINNING0, + KOHRAH_WINNING1, + KOHRAH_WINNING2, + KOHRAH_WINNING3, + KOHRAH_WINNING4, + KOHRAH_WINNING5, + KOHRAH_WINNING6, + KOHRAH_WINNING7, + KOHRAH_WINNING8, + KOHRAH_WINNING9, + URQUAN_NEARLY_GONE0, + URQUAN_NEARLY_GONE1, + URQUAN_NEARLY_GONE2, + URQUAN_NEARLY_GONE3, + URQUAN_NEARLY_GONE4, + URQUAN_NEARLY_GONE5, + KOHRAH_FRENZY0, + KOHRAH_FRENZY1, + KOHRAH_FRENZY2, + KOHRAH_FRENZY3, + KOHRAH_FRENZY4, + KOHRAH_FRENZY5, + KOHRAH_FRENZY6, + KOHRAH_FRENZY7, + KOHRAH_FRENZY8, + KOHRAH_FRENZY9, + KOHRAH_FRENZY10, + KOHRAH_FRENZY11, + NO_WAR_NEWS0, + NO_WAR_NEWS1, + i_want_alliance, + GOOD0, + GOOD1, + GOOD2, + GOOD3, + GOOD4, + GOOD5, + GOOD6, + GOOD7, + GOOD8, + GOOD9, + want_specific_info, + WHAT_SPECIFIC_INFO0, + WHAT_SPECIFIC_INFO1, + enough_info, + OK_ENOUGH_INFO, + what_about_others, + ABOUT_OTHERS0, + ABOUT_OTHERS1, + ABOUT_OTHERS2, + ABOUT_OTHERS3, + ABOUT_OTHERS4, + ABOUT_OTHERS5, + ABOUT_OTHERS6, + ABOUT_OTHERS7, + ABOUT_OTHERS8, + ABOUT_OTHERS9, + ABOUT_OTHERS10, + ABOUT_OTHERS11, + ABOUT_OTHERS12, + ABOUT_OTHERS13, + what_about_zebranky, + ABOUT_ZEBRANKY0, + ABOUT_ZEBRANKY1, + ABOUT_ZEBRANKY2, + ABOUT_ZEBRANKY3, + ABOUT_ZEBRANKY4, + ABOUT_ZEBRANKY5, + ABOUT_ZEBRANKY6, + ABOUT_ZEBRANKY7, + what_about_past, + ABOUT_PAST0, + ABOUT_PAST1, + ABOUT_PAST2, + ABOUT_PAST3, + ABOUT_PAST4, + ABOUT_PAST5, + ABOUT_PAST6, + ABOUT_PAST7, + ABOUT_PAST8, + ABOUT_PAST9, + ABOUT_PAST10, + ABOUT_PAST11, + what_about_stinger, + ABOUT_STINGER0, + ABOUT_STINGER1, + ABOUT_STINGER2, + ABOUT_STINGER3, + ABOUT_STINGER4, + ABOUT_STINGER5, + what_about_guy_in_back, + ABOUT_GUY0, + ABOUT_GUY1, + name_1, + name_2, + name_3, + name_40, + name_41, + OUT_TAKES0, + OUT_TAKES1, + OUT_TAKES2, + OUT_TAKES3, + OUT_TAKES4, + OUT_TAKES5, + OUT_TAKES6, + OUT_TAKES7, + OUT_TAKES8, + OUT_TAKES9, + OUT_TAKES10, + OUT_TAKES11, + OUT_TAKES12, + OUT_TAKES13, +}; + +#endif /* _STRINGS_H */ + diff --git a/src/uqm/comm/zoqfot/zoqfotc.c b/src/uqm/comm/zoqfot/zoqfotc.c new file mode 100644 index 0000000..d09a7f7 --- /dev/null +++ b/src/uqm/comm/zoqfot/zoqfotc.c @@ -0,0 +1,975 @@ +//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" + + +#define ZOQ_FG_COLOR WHITE_COLOR +#define ZOQ_BG_COLOR BLACK_COLOR +#define ZOQ_BASE_X (TEXT_X_OFFS + ((SIS_TEXT_WIDTH >> 1) >> 1)) +#define ZOQ_BASE_Y 24 +#define ZOQ_TALK_INDEX 18 +#define ZOQ_TALK_FRAMES 5 +#define FOT_TO_ZOQ 23 + +#define PIK_FG_COLOR WHITE_COLOR +#define PIK_BG_COLOR BLACK_COLOR +#define PIK_BASE_X (SIS_SCREEN_WIDTH - (TEXT_X_OFFS + ((SIS_TEXT_WIDTH >> 1) >> 1))) +#define PIK_BASE_Y 24 +#define PIK_TALK_INDEX 29 +#define PIK_TALK_FRAMES 2 +#define FOT_TO_PIK 26 + +static LOCDATA zoqfot_desc = +{ + NULL, /* init_encounter_func */ + NULL, /* post_encounter_func */ + NULL, /* uninit_encounter_func */ + ZOQFOTPIK_PMAP_ANIM, /* AlienFrame */ + ZOQFOTPIK_FONT, /* AlienFont */ + UNDEFINED_COLOR_INIT, /* AlienTextFColor */ + UNDEFINED_COLOR_INIT, /* AlienTextBColor */ + {0, 0}, /* AlienTextBaseline */ + 0, /* AlienTextWidth */ + ALIGN_CENTER, /* AlienTextAlign */ + VALIGN_MIDDLE, /* AlienTextValign */ + ZOQFOTPIK_COLOR_MAP, /* AlienColorMap */ + ZOQFOTPIK_MUSIC, /* AlienSong */ + NULL_RESOURCE, /* AlienAltSong */ + 0, /* AlienSongFlags */ + ZOQFOTPIK_CONVERSATION_PHRASES, /* PlayerPhrases */ + 3, /* NumAnimations */ + { /* AlienAmbientArray (ambient animations) */ + { /* Eye blink */ + 1, /* StartIndex */ + 4, /* NumFrames */ + YOYO_ANIM /* AnimFlags */ + | WAIT_TALKING, + ONE_SECOND / 24, 0, /* FrameRate */ + 0, ONE_SECOND * 10, /* RestartRate */ + 0, /* BlockMask */ + }, + { /* Blow smoke */ + 5, /* StartIndex */ + 5, /* NumFrames */ + CIRCULAR_ANIM, /* AnimFlags */ + ONE_SECOND * 7 / 120, 0, /* FrameRate */ + ONE_SECOND * 2, 0, /* RestartRate */ + 0, /* BlockMask */ + }, + { /* Gulp */ + 10, /* StartIndex */ + 8, /* NumFrames */ + CIRCULAR_ANIM, /* AnimFlags */ + ONE_SECOND / 15, 0, /* FrameRate */ + 0, ONE_SECOND * 10, /* RestartRate */ + 0, /* BlockMask */ + }, + }, + { /* AlienTransitionDesc - Move Eye */ + FOT_TO_ZOQ, /* StartIndex */ + 3, /* NumFrames */ + 0, /* AnimFlags */ + ONE_SECOND / 30, 0, /* FrameRate */ + 0, 0, /* RestartRate */ + 0, /* BlockMask */ + }, + { /* AlienTalkDesc */ + ZOQ_TALK_INDEX, /* StartIndex */ + ZOQ_TALK_FRAMES, /* 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, +}; + +enum +{ + ZOQ_ALIEN, + FOT_ALIEN, + PIK_ALIEN +}; + +static int LastAlien; + +// Queued and executes synchronously on the Starcon2Main thread +static void +SelectAlienZOQ (CallbackArg arg) +{ + if (LastAlien != ZOQ_ALIEN) + { + // Transition to neutral state first if Pik was talking + if (LastAlien != FOT_ALIEN) + CommData.AlienTransitionDesc.AnimFlags |= TALK_DONE; + LastAlien = ZOQ_ALIEN; + CommData.AlienTransitionDesc.AnimFlags |= TALK_INTRO; + CommData.AlienTransitionDesc.StartIndex = FOT_TO_ZOQ; + CommData.AlienTalkDesc.StartIndex = ZOQ_TALK_INDEX; + CommData.AlienTalkDesc.NumFrames = ZOQ_TALK_FRAMES; + CommData.AlienAmbientArray[1].AnimFlags &= ~WAIT_TALKING; + + CommData.AlienTextBaseline.x = (SWORD)ZOQ_BASE_X; + CommData.AlienTextBaseline.y = ZOQ_BASE_Y; + CommData.AlienTextFColor = ZOQ_FG_COLOR; + CommData.AlienTextBColor = ZOQ_BG_COLOR; + } + + (void)arg; // ignored +} + +// Queued and executes synchronously on the Starcon2Main thread +static void +SelectAlienPIK (CallbackArg arg) +{ + if (LastAlien != PIK_ALIEN) + { + // Transition to neutral state first if Zoq was talking + if (LastAlien != FOT_ALIEN) + CommData.AlienTransitionDesc.AnimFlags |= TALK_DONE; + LastAlien = PIK_ALIEN; + CommData.AlienTransitionDesc.AnimFlags |= TALK_INTRO; + CommData.AlienTransitionDesc.StartIndex = FOT_TO_PIK; + CommData.AlienTalkDesc.StartIndex = PIK_TALK_INDEX; + CommData.AlienTalkDesc.NumFrames = PIK_TALK_FRAMES; + CommData.AlienAmbientArray[1].AnimFlags |= WAIT_TALKING; + + CommData.AlienTextBaseline.x = (SWORD)PIK_BASE_X; + CommData.AlienTextBaseline.y = PIK_BASE_Y; + CommData.AlienTextFColor = PIK_FG_COLOR; + CommData.AlienTextBColor = PIK_BG_COLOR; + } + + (void)arg; // ignored +} + +static void +ZFPTalkSegue (COUNT wait_track) +{ + LastAlien = FOT_ALIEN; + SelectAlienZOQ (0); + AlienTalkSegue (wait_track); +} + +static void +ExitConversation (RESPONSE_REF R) +{ + setSegue (Segue_peace); + + if (PLAYER_SAID (R, bye_homeworld)) + { + NPCPhrase_cb (GOODBYE_HOME0, &SelectAlienZOQ); + NPCPhrase_cb (GOODBYE_HOME1, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + } + else if (PLAYER_SAID (R, decide_later)) + { + NPCPhrase_cb (PLEASE_HURRY0, &SelectAlienZOQ); + NPCPhrase_cb (PLEASE_HURRY1, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + } + else if (PLAYER_SAID (R, valuable_info)) + { + NPCPhrase_cb (GOODBYE0, &SelectAlienZOQ); + NPCPhrase_cb (GOODBYE1, &SelectAlienPIK); + NPCPhrase_cb (GOODBYE2, &SelectAlienZOQ); + NPCPhrase_cb (GOODBYE3, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + } + else if (PLAYER_SAID (R, how_can_i_help)) + { + NPCPhrase_cb (EMMISSARIES0, &SelectAlienZOQ); + NPCPhrase_cb (EMMISSARIES1, &SelectAlienPIK); + NPCPhrase_cb (EMMISSARIES2, &SelectAlienZOQ); + NPCPhrase_cb (EMMISSARIES3, &SelectAlienPIK); + NPCPhrase_cb (EMMISSARIES4, &SelectAlienZOQ); + NPCPhrase_cb (EMMISSARIES5, &SelectAlienPIK); + NPCPhrase_cb (EMMISSARIES6, &SelectAlienZOQ); + NPCPhrase_cb (EMMISSARIES7, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + } + else if (PLAYER_SAID (R, sure)) + { + NPCPhrase_cb (WE_ALLY0, &SelectAlienZOQ); + NPCPhrase_cb (WE_ALLY1, &SelectAlienPIK); + NPCPhrase_cb (WE_ALLY2, &SelectAlienZOQ); + NPCPhrase_cb (WE_ALLY3, &SelectAlienPIK); + NPCPhrase_cb (WE_ALLY4, &SelectAlienZOQ); + NPCPhrase_cb (WE_ALLY5, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + SetRaceAllied (ZOQFOTPIK_SHIP, TRUE); + AddEvent (RELATIVE_EVENT, 3, 0, 0, ZOQFOT_DISTRESS_EVENT); + SET_GAME_STATE (ZOQFOT_HOME_VISITS, 0); + } + else if (PLAYER_SAID (R, all_very_interesting)) + { + NPCPhrase_cb (SEE_TOLD_YOU0, &SelectAlienZOQ); + NPCPhrase_cb (SEE_TOLD_YOU1, &SelectAlienPIK); + NPCPhrase_cb (SEE_TOLD_YOU2, &SelectAlienZOQ); + NPCPhrase_cb (SEE_TOLD_YOU3, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + SET_GAME_STATE (ZOQFOT_HOSTILE, 1); + SET_GAME_STATE (ZOQFOT_HOME_VISITS, 0); + setSegue (Segue_hostile); + } + else if (PLAYER_SAID (R, never)) + { + NPCPhrase_cb (WE_ENEMIES0, &SelectAlienZOQ); + NPCPhrase_cb (WE_ENEMIES1, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + SET_GAME_STATE (ZOQFOT_HOME_VISITS, 0); + SET_GAME_STATE (ZOQFOT_HOSTILE, 1); + setSegue (Segue_hostile); + } +} + +static void +FormAlliance (RESPONSE_REF R) +{ + (void) R; // ignored + NPCPhrase_cb (ALLY_WITH_US0, &SelectAlienZOQ); + NPCPhrase_cb (ALLY_WITH_US1, &SelectAlienPIK); + NPCPhrase_cb (ALLY_WITH_US2, &SelectAlienZOQ); + NPCPhrase_cb (ALLY_WITH_US3, &SelectAlienPIK); + NPCPhrase_cb (ALLY_WITH_US4, &SelectAlienZOQ); + NPCPhrase_cb (ALLY_WITH_US5, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + Response (sure, ExitConversation); + Response (never, ExitConversation); + Response (decide_later, ExitConversation); +} + +static void +ZoqFotIntro (RESPONSE_REF R) +{ + if (PLAYER_SAID (R, we_are_vindicator0)) + { + NPCPhrase_cb (WE_GLAD0, &SelectAlienZOQ); + NPCPhrase_cb (WE_GLAD1, &SelectAlienPIK); + NPCPhrase_cb (WE_GLAD2, &SelectAlienZOQ); + NPCPhrase_cb (WE_GLAD3, &SelectAlienPIK); + NPCPhrase_cb (WE_GLAD4, &SelectAlienZOQ); + NPCPhrase_cb (WE_GLAD5, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (we_are_vindicator0); + } + else if (PLAYER_SAID (R, your_race)) + { + NPCPhrase_cb (YEARS_AGO0, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO1, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO2, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO3, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO4, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO5, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO6, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO7, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO8, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO9, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO10, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO11, &SelectAlienPIK); + NPCPhrase_cb (YEARS_AGO12, &SelectAlienZOQ); + NPCPhrase_cb (YEARS_AGO13, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (your_race); + } + else if (PLAYER_SAID (R, where_from)) + { + NPCPhrase_cb (TRAVELED_FAR0, &SelectAlienZOQ); + NPCPhrase_cb (TRAVELED_FAR1, &SelectAlienPIK); + NPCPhrase_cb (TRAVELED_FAR2, &SelectAlienZOQ); + NPCPhrase_cb (TRAVELED_FAR3, &SelectAlienPIK); + NPCPhrase_cb (TRAVELED_FAR4, &SelectAlienZOQ); + NPCPhrase_cb (TRAVELED_FAR5, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (where_from); + } + else if (PLAYER_SAID (R, what_emergency)) + { + NPCPhrase_cb (UNDER_ATTACK0, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK1, &SelectAlienPIK); + NPCPhrase_cb (UNDER_ATTACK2, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK3, &SelectAlienPIK); + NPCPhrase_cb (UNDER_ATTACK4, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK5, &SelectAlienPIK); + NPCPhrase_cb (UNDER_ATTACK6, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK7, &SelectAlienPIK); + NPCPhrase_cb (UNDER_ATTACK8, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK9, &SelectAlienPIK); + NPCPhrase_cb (UNDER_ATTACK10, &SelectAlienZOQ); + NPCPhrase_cb (UNDER_ATTACK11, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (what_emergency); + } + else if (PLAYER_SAID (R, tough_luck)) + { + NPCPhrase_cb (NOT_HELPFUL0, &SelectAlienZOQ); + NPCPhrase_cb (NOT_HELPFUL1, &SelectAlienPIK); + NPCPhrase_cb (NOT_HELPFUL2, &SelectAlienZOQ); + NPCPhrase_cb (NOT_HELPFUL3, &SelectAlienPIK); + NPCPhrase_cb (NOT_HELPFUL4, &SelectAlienZOQ); + NPCPhrase_cb (NOT_HELPFUL5, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (tough_luck); + } + else if (PLAYER_SAID (R, what_look_like)) + { + NPCPhrase_cb (LOOK_LIKE0, &SelectAlienZOQ); + NPCPhrase_cb (LOOK_LIKE1, &SelectAlienPIK); + NPCPhrase_cb (LOOK_LIKE2, &SelectAlienZOQ); + NPCPhrase_cb (LOOK_LIKE3, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (what_look_like); + } + + if (PHRASE_ENABLED (your_race) + || PHRASE_ENABLED (where_from) + || PHRASE_ENABLED (what_emergency)) + { + if (PHRASE_ENABLED (your_race)) + Response (your_race, ZoqFotIntro); + if (PHRASE_ENABLED (where_from)) + Response (where_from, ZoqFotIntro); + if (PHRASE_ENABLED (what_emergency)) + Response (what_emergency, ZoqFotIntro); + } + else + { + if (PHRASE_ENABLED (tough_luck)) + Response (tough_luck, ZoqFotIntro); + if (PHRASE_ENABLED (what_look_like)) + Response (what_look_like, ZoqFotIntro); + Response (all_very_interesting, ExitConversation); + if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) + { + Response (how_can_i_help, FormAlliance); + } + else + { + Response (how_can_i_help, ExitConversation); + } + Response (valuable_info, ExitConversation); + } +} + +static void +AquaintZoqFot (RESPONSE_REF R) +{ + if (PLAYER_SAID (R, which_fot)) + { + NPCPhrase_cb (HE_IS0, &SelectAlienZOQ); + NPCPhrase_cb (HE_IS1, &SelectAlienPIK); + NPCPhrase_cb (HE_IS2, &SelectAlienZOQ); + NPCPhrase_cb (HE_IS3, &SelectAlienPIK); + NPCPhrase_cb (HE_IS4, &SelectAlienZOQ); + NPCPhrase_cb (HE_IS5, &SelectAlienPIK); + NPCPhrase_cb (HE_IS6, &SelectAlienZOQ); + NPCPhrase_cb (HE_IS7, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (which_fot); + } + else if (PLAYER_SAID (R, quiet_toadies)) + { + NPCPhrase_cb (TOLD_YOU0, &SelectAlienZOQ); + NPCPhrase_cb (TOLD_YOU1, &SelectAlienPIK); + NPCPhrase_cb (TOLD_YOU2, &SelectAlienZOQ); + NPCPhrase_cb (TOLD_YOU3, &SelectAlienPIK); + NPCPhrase_cb (TOLD_YOU4, &SelectAlienZOQ); + NPCPhrase_cb (TOLD_YOU5, &SelectAlienPIK); + NPCPhrase_cb (TOLD_YOU6, &SelectAlienZOQ); + NPCPhrase_cb (TOLD_YOU7, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (quiet_toadies); + } + + if (PHRASE_ENABLED (we_are_vindicator0)) + { + UNICODE buf[ALLIANCE_NAME_BUFSIZE]; + + GetAllianceName (buf, name_1); + construct_response ( + shared_phrase_buf, + we_are_vindicator0, + buf, + we_are_vindicator1, + GLOBAL_SIS (ShipName), + we_are_vindicator2, + (UNICODE*)NULL); + } + + if (PHRASE_ENABLED (which_fot)) + Response (which_fot, AquaintZoqFot); + if (PHRASE_ENABLED (we_are_vindicator0)) + DoResponsePhrase (we_are_vindicator0, ZoqFotIntro, shared_phrase_buf); + if (PHRASE_ENABLED (quiet_toadies)) + Response (quiet_toadies, AquaintZoqFot); + Response (all_very_interesting, ExitConversation); + Response (valuable_info, ExitConversation); +} + +static void ZoqFotHome (RESPONSE_REF R); + +static void +ZoqFotInfo (RESPONSE_REF R) +{ + BYTE InfoLeft; + + if (PLAYER_SAID (R, want_specific_info)) + { + NPCPhrase_cb (WHAT_SPECIFIC_INFO0, &SelectAlienZOQ); + NPCPhrase_cb (WHAT_SPECIFIC_INFO1, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + } + else if (PLAYER_SAID (R, what_about_others)) + { + NPCPhrase_cb (ABOUT_OTHERS0, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS1, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS2, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS3, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS4, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS5, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS6, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS7, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS8, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS9, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS10, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS11, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_OTHERS12, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_OTHERS13, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (what_about_others); + } + else if (PLAYER_SAID (R, what_about_zebranky)) + { + NPCPhrase_cb (ABOUT_ZEBRANKY0, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_ZEBRANKY1, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_ZEBRANKY2, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_ZEBRANKY3, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_ZEBRANKY4, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_ZEBRANKY5, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_ZEBRANKY6, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_ZEBRANKY7, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (what_about_zebranky); + } + else if (PLAYER_SAID (R, what_about_stinger)) + { + NPCPhrase_cb (ABOUT_STINGER0, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_STINGER1, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_STINGER2, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_STINGER3, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_STINGER4, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_STINGER5, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (what_about_stinger); + } + else if (PLAYER_SAID (R, what_about_guy_in_back)) + { + NPCPhrase_cb (ABOUT_GUY0, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_GUY1, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (what_about_guy_in_back); + } + else if (PLAYER_SAID (R, what_about_past)) + { + NPCPhrase_cb (ABOUT_PAST0, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST1, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_PAST2, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST3, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_PAST4, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST5, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_PAST6, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST7, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_PAST8, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST9, &SelectAlienPIK); + NPCPhrase_cb (ABOUT_PAST10, &SelectAlienZOQ); + NPCPhrase_cb (ABOUT_PAST11, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + DISABLE_PHRASE (what_about_past); + } + + InfoLeft = FALSE; + if (PHRASE_ENABLED (what_about_others)) + { + Response (what_about_others, ZoqFotInfo); + InfoLeft = TRUE; + } + if (PHRASE_ENABLED (what_about_zebranky)) + { + Response (what_about_zebranky, ZoqFotInfo); + InfoLeft = TRUE; + } + if (PHRASE_ENABLED (what_about_stinger)) + { + Response (what_about_stinger, ZoqFotInfo); + InfoLeft = TRUE; + } + if (PHRASE_ENABLED (what_about_guy_in_back)) + { + Response (what_about_guy_in_back, ZoqFotInfo); + InfoLeft = TRUE; + } + if (PHRASE_ENABLED (what_about_past)) + { + Response (what_about_past, ZoqFotInfo); + InfoLeft = TRUE; + } + Response (enough_info, ZoqFotHome); + + if (!InfoLeft) + { + DISABLE_PHRASE (want_specific_info); + } +} + +static void +ZoqFotHome (RESPONSE_REF R) +{ + BYTE NumVisits; + + if (PLAYER_SAID (R, whats_up_homeworld)) + { + NumVisits = GET_GAME_STATE (ZOQFOT_INFO); + switch (NumVisits++) + { + case 0: + NPCPhrase_cb (GENERAL_INFO_10, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_11, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_12, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_13, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + break; + case 1: + NPCPhrase_cb (GENERAL_INFO_20, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_21, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_22, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_23, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_24, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_25, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_26, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_27, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + break; + case 2: + NPCPhrase_cb (GENERAL_INFO_30, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_31, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_32, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_33, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_34, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_35, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + break; + case 3: + NPCPhrase_cb (GENERAL_INFO_40, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_41, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_42, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_43, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_44, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_45, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_46, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_47, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_48, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_49, &SelectAlienPIK); + NPCPhrase_cb (GENERAL_INFO_410, &SelectAlienZOQ); + NPCPhrase_cb (GENERAL_INFO_411, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + --NumVisits; + break; + } + SET_GAME_STATE (ZOQFOT_INFO, NumVisits); + + DISABLE_PHRASE (whats_up_homeworld); + } + else if (PLAYER_SAID (R, any_war_news)) + { +#define UTWIG_BUY_TIME (1 << 0) +#define KOHR_AH_WIN (1 << 1) +#define URQUAN_LOSE (1 << 2) +#define KOHR_AH_KILL (1 << 3) +#define KNOW_ALL (UTWIG_BUY_TIME | KOHR_AH_WIN | URQUAN_LOSE | KOHR_AH_KILL) + BYTE KnowMask; + + NumVisits = GET_GAME_STATE (UTWIG_SUPOX_MISSION); + KnowMask = GET_GAME_STATE (ZOQFOT_KNOW_MASK); + if (!(KnowMask & KOHR_AH_KILL) && GET_GAME_STATE (KOHR_AH_FRENZY)) + { + NPCPhrase_cb (KOHRAH_FRENZY0, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY1, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_FRENZY2, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY3, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_FRENZY4, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY5, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_FRENZY6, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY7, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_FRENZY8, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY9, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_FRENZY10, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_FRENZY11, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + KnowMask = KNOW_ALL; + } + else if (!(KnowMask & UTWIG_BUY_TIME) + && NumVisits > 0 && NumVisits < 5) + { + NPCPhrase_cb (UTWIG_DELAY0, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY1, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY2, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY3, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY4, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY5, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY6, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY7, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY8, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY9, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY10, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY11, &SelectAlienPIK); + NPCPhrase_cb (UTWIG_DELAY12, &SelectAlienZOQ); + NPCPhrase_cb (UTWIG_DELAY13, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + KnowMask |= UTWIG_BUY_TIME; + } + else + { + SIZE i; + + i = START_YEAR + YEARS_TO_KOHRAH_VICTORY; + if (NumVisits) + ++i; + if ((i -= GLOBAL (GameClock.year_index)) == 1 + && GLOBAL (GameClock.month_index) > 2) + i = 0; + if (!(KnowMask & URQUAN_LOSE) && i <= 0) + { + NPCPhrase_cb (URQUAN_NEARLY_GONE0, &SelectAlienZOQ); + NPCPhrase_cb (URQUAN_NEARLY_GONE1, &SelectAlienPIK); + NPCPhrase_cb (URQUAN_NEARLY_GONE2, &SelectAlienZOQ); + NPCPhrase_cb (URQUAN_NEARLY_GONE3, &SelectAlienPIK); + NPCPhrase_cb (URQUAN_NEARLY_GONE4, &SelectAlienZOQ); + NPCPhrase_cb (URQUAN_NEARLY_GONE5, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + KnowMask |= KOHR_AH_WIN | URQUAN_LOSE; + } + else if (!(KnowMask & KOHR_AH_WIN) && i == 1) + { + NPCPhrase_cb (KOHRAH_WINNING0, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_WINNING1, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_WINNING2, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_WINNING3, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_WINNING4, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_WINNING5, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_WINNING6, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_WINNING7, &SelectAlienPIK); + NPCPhrase_cb (KOHRAH_WINNING8, &SelectAlienZOQ); + NPCPhrase_cb (KOHRAH_WINNING9, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + KnowMask |= KOHR_AH_WIN; + } + else + { + NPCPhrase_cb (NO_WAR_NEWS0, &SelectAlienZOQ); + NPCPhrase_cb (NO_WAR_NEWS1, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + } + } + SET_GAME_STATE (ZOQFOT_KNOW_MASK, KnowMask); + + DISABLE_PHRASE (any_war_news); + } + else if (PLAYER_SAID (R, i_want_alliance)) + { + NPCPhrase_cb (GOOD0, &SelectAlienZOQ); + NPCPhrase_cb (GOOD1, &SelectAlienPIK); + NPCPhrase_cb (GOOD2, &SelectAlienZOQ); + NPCPhrase_cb (GOOD3, &SelectAlienPIK); + NPCPhrase_cb (GOOD4, &SelectAlienZOQ); + NPCPhrase_cb (GOOD5, &SelectAlienPIK); + NPCPhrase_cb (GOOD6, &SelectAlienZOQ); + NPCPhrase_cb (GOOD7, &SelectAlienPIK); + NPCPhrase_cb (GOOD8, &SelectAlienZOQ); + NPCPhrase_cb (GOOD9, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + SetRaceAllied (ZOQFOTPIK_SHIP, TRUE); + AddEvent (RELATIVE_EVENT, 3, 0, 0, ZOQFOT_DISTRESS_EVENT); + } + else if (PLAYER_SAID (R, enough_info)) + { + NPCPhrase_cb (OK_ENOUGH_INFO, &SelectAlienZOQ); + ZFPTalkSegue ((COUNT)~0); + } + + if (PHRASE_ENABLED (whats_up_homeworld)) + Response (whats_up_homeworld, ZoqFotHome); + if (PHRASE_ENABLED (any_war_news)) + Response (any_war_news, ZoqFotHome); + if (CheckAlliance (ZOQFOTPIK_SHIP) != GOOD_GUY) + Response (i_want_alliance, ZoqFotHome); + else if (PHRASE_ENABLED (want_specific_info)) + { + Response (want_specific_info, ZoqFotInfo); + } + Response (bye_homeworld, ExitConversation); +} + +static void +Intro (void) +{ + BYTE NumVisits; + + if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) + { + NPCPhrase_cb (OUT_TAKES0, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES1, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES2, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES3, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES4, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES5, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES6, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES7, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES8, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES9, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES10, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES11, &SelectAlienPIK); + NPCPhrase_cb (OUT_TAKES12, &SelectAlienZOQ); + NPCPhrase_cb (OUT_TAKES13, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + setSegue (Segue_peace); + return; + } + + if (GET_GAME_STATE (ZOQFOT_HOSTILE)) + { + NumVisits = GET_GAME_STATE (ZOQFOT_HOME_VISITS); + switch (NumVisits++) + { + case 0: + NPCPhrase_cb (HOSTILE_HELLO_10, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_11, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + break; + case 1: + NPCPhrase_cb (HOSTILE_HELLO_20, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_21, &SelectAlienPIK); + NPCPhrase_cb (HOSTILE_HELLO_22, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_23, &SelectAlienPIK); + NPCPhrase_cb (HOSTILE_HELLO_24, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_25, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + break; + case 2: + NPCPhrase_cb (HOSTILE_HELLO_30, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_31, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + break; + case 3: + NPCPhrase_cb (HOSTILE_HELLO_40, &SelectAlienZOQ); + NPCPhrase_cb (HOSTILE_HELLO_41, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + --NumVisits; + break; + } + SET_GAME_STATE (ZOQFOT_HOME_VISITS, NumVisits); + + setSegue (Segue_hostile); + } + else if (!GET_GAME_STATE (MET_ZOQFOT)) + { + SET_GAME_STATE (MET_ZOQFOT, 1); + + NPCPhrase_cb (WE_ARE0, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE1, &SelectAlienPIK); + NPCPhrase_cb (WE_ARE2, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE3, &SelectAlienPIK); + NPCPhrase_cb (WE_ARE4, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE5, &SelectAlienPIK); + NPCPhrase_cb (WE_ARE6, &SelectAlienZOQ); + NPCPhrase_cb (WE_ARE7, &SelectAlienPIK); + + if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) + { + NPCPhrase_cb (INIT_HOME_HELLO0, &SelectAlienZOQ); + NPCPhrase_cb (INIT_HOME_HELLO1, &SelectAlienPIK); + NPCPhrase_cb (INIT_HOME_HELLO2, &SelectAlienZOQ); + NPCPhrase_cb (INIT_HOME_HELLO3, &SelectAlienPIK); + } + else + { + NPCPhrase_cb (SCOUT_HELLO0, &SelectAlienZOQ); + NPCPhrase_cb (SCOUT_HELLO1, &SelectAlienPIK); + NPCPhrase_cb (SCOUT_HELLO2, &SelectAlienZOQ); + NPCPhrase_cb (SCOUT_HELLO3, &SelectAlienPIK); + } + + ZFPTalkSegue ((COUNT)~0); + + AquaintZoqFot (0); + } + else + { + if (GET_GAME_STATE (ZOQFOT_DISTRESS)) + { +#define MAX_ZFP_SHIPS 4 + NPCPhrase_cb (THANKS_FOR_RESCUE0, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE1, &SelectAlienPIK); + NPCPhrase_cb (THANKS_FOR_RESCUE2, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE3, &SelectAlienPIK); + NPCPhrase_cb (THANKS_FOR_RESCUE4, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE5, &SelectAlienPIK); + NPCPhrase_cb (THANKS_FOR_RESCUE6, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE7, &SelectAlienPIK); + NPCPhrase_cb (THANKS_FOR_RESCUE8, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE9, &SelectAlienPIK); + NPCPhrase_cb (THANKS_FOR_RESCUE10, &SelectAlienZOQ); + NPCPhrase_cb (THANKS_FOR_RESCUE11, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + + SET_GAME_STATE (ZOQFOT_DISTRESS, 0); + AddEscortShips (ZOQFOTPIK_SHIP, MAX_ZFP_SHIPS); + } + else + { + NumVisits = GET_GAME_STATE (ZOQFOT_HOME_VISITS); + if (CheckAlliance (ZOQFOTPIK_SHIP) != GOOD_GUY) + { + switch (NumVisits++) + { + case 0: + NPCPhrase_cb (NEUTRAL_HOME_HELLO_10, &SelectAlienZOQ); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_11, &SelectAlienPIK); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_12, &SelectAlienZOQ); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_13, &SelectAlienPIK); + break; + case 1: + NPCPhrase_cb (NEUTRAL_HOME_HELLO_20, &SelectAlienZOQ); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_21, &SelectAlienPIK); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_22, &SelectAlienZOQ); + NPCPhrase_cb (NEUTRAL_HOME_HELLO_23, &SelectAlienPIK); + --NumVisits; + break; + } + ZFPTalkSegue ((COUNT)~0); + } + else + { + switch (NumVisits++) + { + case 0: + NPCPhrase_cb (ALLIED_HOME_HELLO_10, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_11, &SelectAlienPIK); + NPCPhrase_cb (ALLIED_HOME_HELLO_12, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_13, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + break; + case 1: + NPCPhrase_cb (ALLIED_HOME_HELLO_20, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_21, &SelectAlienPIK); + NPCPhrase_cb (ALLIED_HOME_HELLO_22, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_23, &SelectAlienPIK); + NPCPhrase_cb (ALLIED_HOME_HELLO_24, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_25, &SelectAlienPIK); + NPCPhrase_cb (ALLIED_HOME_HELLO_26, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_27, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + break; + case 2: + NPCPhrase_cb (ALLIED_HOME_HELLO_30, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_31, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + break; + case 3: + NPCPhrase_cb (ALLIED_HOME_HELLO_40, &SelectAlienZOQ); + NPCPhrase_cb (ALLIED_HOME_HELLO_41, &SelectAlienPIK); + ZFPTalkSegue ((COUNT)~0); + --NumVisits; + break; + } + } + SET_GAME_STATE (ZOQFOT_HOME_VISITS, NumVisits); + } + + ZoqFotHome (0); + } +} + +static COUNT +uninit_zoqfot (void) +{ + return (0); +} + +static void +post_zoqfot_enc (void) +{ + // nothing defined so far +} + +LOCDATA* +init_zoqfot_comm (void) +{ + LOCDATA *retval; + + zoqfot_desc.init_encounter_func = Intro; + zoqfot_desc.post_encounter_func = post_zoqfot_enc; + zoqfot_desc.uninit_encounter_func = uninit_zoqfot; + + zoqfot_desc.AlienTextWidth = (SIS_TEXT_WIDTH >> 1) - TEXT_X_OFFS; + + if (CheckAlliance (ZOQFOTPIK_SHIP) == GOOD_GUY + || LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) + { + setSegue (Segue_peace); + } + else + { + setSegue (Segue_hostile); + } + + retval = &zoqfot_desc; + + return (retval); +} + |