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