static void Intro (void) { SET_GAME_STATE (STARBASE_AVAILABLE, 1); NPCPhrase (STARBASE_WILL_BE_READY); return; if (GET_GAME_STATE (PROBE_ILWRATH_ENCOUNTER)) { NPCPhrase (VERY_IMPRESSIVE); Response (cook_their_butts, ByeBye); Response (overthrow_evil_aliens, ByeBye); Response (annihilate_those_monsters, ByeBye); } else if (GET_GAME_STATE (STARBASE_VISITED)) { if (GET_GAME_STATE (RADIOACTIVES_PROVIDED)) { if (GET_GAME_STATE (MOONBASE_DESTROYED) == 0) { TellMoonBase (0); } else { BaseDestroyed (0); } } else { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); NPCPhrase (DO_YOU_HAVE_RADIO_THIS_TIME); if (GLOBAL_SIS (ElementAmounts[RADIOACTIVE])) GiveRadios (0); else AskAfterRadios (0); } } else /* first visit */ { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); SET_GAME_STATE (STARBASE_VISITED, 1); NPCPhrase (ARE_YOU_SUPPLY_SHIP); construct_response ( shared_phrase_buf, no_but_well_help0, GLOBAL_SIS (ShipName), no_but_well_help1, (UNICODE*)NULL); DoResponsePhrase (no_but_well_help0, NoRadioactives, shared_phrase_buf); Response (yes_this_is_supply_ship, NoRadioactives); Response (what_slave_planet, NoRadioactives); } }
static void DoMelnormeHate (RESPONSE_REF R) { BYTE hate_count; (void) R; // ignored hate_count = GET_GAME_STATE (MELNORME_HATE_COUNT); switch (hate_count++) { case 0: NPCPhrase (HELLO_HATE_YOU_1); break; case 1: NPCPhrase (HELLO_HATE_YOU_2); break; default: --hate_count; NPCPhrase (HELLO_HATE_YOU_3); break; } SET_GAME_STATE (MELNORME_HATE_COUNT, hate_count); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 2) ), ONE_SECOND / 2); Response (well_if_thats_the_way_you_feel, ExitConversation); Response (you_hate_us_so_we_go_away, ExitConversation); }
static void animatePowerLines (MENU_STATE *pMS) { static STAMP s; static COLORMAP ColorMap; static TimeCount NextTime = 0; TimeCount Now = GetTimeCounter (); if (pMS) { // Init animation s.origin.x = 0; s.origin.y = 0; s.frame = SetAbsFrameIndex (pMS->ModuleFrame, 24); ColorMap = SetAbsColorMapIndex (pMS->CurString, 0); } if (Now >= NextTime || pMS) { NextTime = Now + (ONE_SECOND / HANGAR_ANIM_RATE); SetColorMap (GetColorMapAddress (ColorMap)); DrawStamp (&s); // Advance colomap cycle ColorMap = SetRelColorMapIndex (ColorMap, 1); } }
static void GiveRadios (RESPONSE_REF R) { if (PLAYER_SAID (R, we_will_transfer_now)) { SET_GAME_STATE (RADIOACTIVES_PROVIDED, 1); NPCPhrase (FUEL_UP0); NPCPhrase (FUEL_UP1); AlienTalkSegue (1); LockMutex (GraphicsLock); //CommData.AlienAmbientArray[2].AnimFlags |= ANIM_DISABLED; // JMS UnlockMutex (GraphicsLock); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 0) ), ONE_SECOND / 2); AlienTalkSegue ((COUNT)~0); RevealSelf (0); } else { if (PLAYER_SAID (R, what_will_you_give_us)) NPCPhrase (MESSAGE_GARBLED_1); else if (PLAYER_SAID (R, before_radios_we_need_info)) NPCPhrase (MESSAGE_GARBLED_2); Response (we_will_transfer_now, GiveRadios); Response (what_will_you_give_us, GiveRadios); Response (before_radios_we_need_info, GiveRadios); } }
static void DoMelnormePissed (RESPONSE_REF R) { if (R == 0) { BYTE pissed_count; pissed_count = GET_GAME_STATE (MELNORME_PISSED_COUNT); switch (pissed_count++) { case 0: NPCPhrase (HELLO_PISSED_OFF_1); break; case 1: NPCPhrase (HELLO_PISSED_OFF_2); break; default: --pissed_count; NPCPhrase (HELLO_PISSED_OFF_3); break; } SET_GAME_STATE (MELNORME_PISSED_COUNT, pissed_count); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 2) ), ONE_SECOND / 2); } else if (PLAYER_SAID (R, beg_forgiveness)) { SET_GAME_STATE (MELNORME_YACK_STACK4, 1); NPCPhrase (LOTS_TO_MAKE_UP_FOR); } else if (PLAYER_SAID (R, you_are_so_right)) { SET_GAME_STATE (MELNORME_YACK_STACK4, 2); NPCPhrase (ONE_LAST_CHANCE); } switch (GET_GAME_STATE (MELNORME_YACK_STACK4)) { case 0: Response (beg_forgiveness, DoMelnormePissed); break; case 1: Response (you_are_so_right, DoMelnormePissed); break; case 2: Response (ok_strip_me, ExitConversation); break; } Response (fight_some_more, ExitConversation); Response (bye_melnorme_pissed_off, ExitConversation); }
static int hangar_anim_func (void *data) { DWORD TimeIn; STAMP s; Task task = (Task) data; COLORMAP ColorMap; RECT ClipRect; if (!pMenuState->CurString) { FinishTask (task); return -1; } s.origin.x = s.origin.y = 0; s.frame = SetAbsFrameIndex (pMenuState->CurFrame, 24); ClipRect = pMenuState->flash_rect1; ColorMap = SetAbsColorMapIndex (pMenuState->CurString, 0); TimeIn = GetTimeCounter (); while (!Task_ReadState (task, TASK_EXIT)) { CONTEXT OldContext; RECT OldClipRect; LockMutex (GraphicsLock); OldContext = SetContext (ScreenContext); GetContextClipRect (&OldClipRect); SetContextClipRect (&ClipRect); ColorMap = SetRelColorMapIndex (ColorMap, 1); SetColorMap (GetColorMapAddress (ColorMap)); DrawStamp (&s); SetContextClipRect (&OldClipRect); SetContext (OldContext); UnlockMutex (GraphicsLock); SleepThreadUntil (TimeIn + ONE_SECOND / HANGAR_ANIM_RATE); TimeIn = GetTimeCounter (); } FinishTask (task); return 0; }
static void Foreplay (RESPONSE_REF R) { if (PLAYER_SAID (R, whats_my_reward) || PLAYER_SAID (R, what_about_us)) { if (PLAYER_SAID (R, whats_my_reward)) NPCPhrase (HERES_REWARD); else NPCPhrase (ABOUT_US); NPCPhrase (MORE_COMFORTABLE); AlienTalkSegue (1); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 1) ), ONE_SECOND); AlienTalkSegue ((COUNT)~0); SET_GAME_STATE (PLAYER_HAVING_SEX, 1); } else if (PLAYER_SAID (R, why_lights_off)) { NPCPhrase (LIGHTS_OFF_BECAUSE); DISABLE_PHRASE (why_lights_off); } else if (PLAYER_SAID (R, evil_monster)) { NPCPhrase (NOT_EVIL_MONSTER); DISABLE_PHRASE (evil_monster); } if (PHRASE_ENABLED (why_lights_off)) Response (why_lights_off, Foreplay); else if (PHRASE_ENABLED (evil_monster)) Response (evil_monster, Foreplay); else Response (disease, Sex); Response (in_the_spirit, Sex); Response (what_in_mind, Sex); Response (hands_off, FriendlyExit); }
static void GiveRadios (RESPONSE_REF R) { if (PLAYER_SAID (R, we_will_transfer_now)) { SET_GAME_STATE (RADIOACTIVES_PROVIDED, 1); NPCPhrase (FUEL_UP0); NPCPhrase (FUEL_UP1); AlienTalkSegue (1); // JMS_GFX: Disable noisy static animation in hi-res. if (RESOLUTION_FACTOR > 0) { CommData.AlienTalkDesc.AnimFlags &= ~PAUSE_TALKING; CommData.AlienAmbientArray[0].AnimFlags &= ~ANIM_DISABLED; CommData.AlienAmbientArray[1].AnimFlags &= ~ANIM_DISABLED; CommData.AlienAmbientArray[2].AnimFlags |= ANIM_DISABLED; } // End color transform anim in lo-res. else CommData.AlienAmbientArray[2].AnimFlags |= ANIM_DISABLED; XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 0) ), ONE_SECOND / 2); AlienTalkSegue ((COUNT)~0); RevealSelf (0); } else { if (PLAYER_SAID (R, what_will_you_give_us)) NPCPhrase (MESSAGE_GARBLED_1); else if (PLAYER_SAID (R, before_radios_we_need_info)) NPCPhrase (MESSAGE_GARBLED_2); Response (we_will_transfer_now, GiveRadios); Response (what_will_you_give_us, GiveRadios); Response (before_radios_we_need_info, GiveRadios); } }
static void ProcessColormapAnims (SEQUENCE *pSeq, COUNT Num) { COUNT i; for (i = 0; i < Num; ++i, ++pSeq) { ANIMATION_DESC *ADPtr = pSeq->ADPtr; if ((ADPtr->AnimFlags & ANIM_DISABLED) || pSeq->AnimType != COLOR_ANIM || !pSeq->Change) continue; XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, ADPtr->StartIndex + pSeq->CurIndex)), pSeq->Alarm - 1); pSeq->Change = FALSE; } }
static void FriendlyExit (RESPONSE_REF R) { SET_GAME_STATE (BATTLE_SEGUE, 0); if (PLAYER_SAID (R, bye)) NPCPhrase (GOODBYE); else if (PLAYER_SAID (R, im_on_my_way) || PLAYER_SAID (R, doing_this_for_you) || PLAYER_SAID (R, if_i_die)) NPCPhrase (GOOD_LUCK); else if (PLAYER_SAID (R, bye_before_vault)) NPCPhrase (GOODBYE_BEFORE_VAULT); else if (PLAYER_SAID (R, bye_after_vault)) NPCPhrase (GOODBYE_AFTER_VAULT); else if (PLAYER_SAID (R, bye_before_ambush)) NPCPhrase (GOODBYE_BEFORE_AMBUSH); else if (PLAYER_SAID (R, bye_after_ambush)) NPCPhrase (GOODBYE_AFTER_AMBUSH); else { if (PLAYER_SAID (R, hands_off)) NPCPhrase (OK_WONT_USE_HANDS); else if (PLAYER_SAID (R, not_much_more_to_say)) NPCPhrase (THEN_STOP_TALKING); NPCPhrase (LATER); NPCPhrase (SEX_GOODBYE); AlienTalkSegue (2); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 0) ), ONE_SECOND / 2); AlienTalkSegue ((COUNT)~0); SET_GAME_STATE (PLAYER_HAD_SEX, 1); SET_GAME_STATE (PLAYER_HAVING_SEX, 0); } }
static void NatureOfConversation (RESPONSE_REF R) { BYTE num_new_rainbows; UWORD rainbow_mask; COUNT Credit; if (PLAYER_SAID (R, get_on_with_business)) { SET_GAME_STATE (MELNORME_YACK_STACK2, 5); R = 0; } // Draw credits display DeltaCredit (0); Credit = GetAvailableCredits (); if (R == 0) { BYTE stack = GET_GAME_STATE (MELNORME_YACK_STACK2) - 5; NPCPhrase (GetLineSafe (hello_and_down_to_business_lines, stack)); if (stack < (NUM_HELLO_LINES - 1)) ++stack; SET_GAME_STATE (MELNORME_YACK_STACK2, stack + 5); } rainbow_mask = MAKE_WORD ( GET_GAME_STATE (RAINBOW_WORLD0), GET_GAME_STATE (RAINBOW_WORLD1) ); num_new_rainbows = (BYTE)(-GET_GAME_STATE (MELNORME_RAINBOW_COUNT)); while (rainbow_mask) { if (rainbow_mask & 1) ++num_new_rainbows; rainbow_mask >>= 1; } if (GLOBAL_SIS (FuelOnBoard) > 0 || GLOBAL_SIS (TotalBioMass) || Credit || num_new_rainbows) { if (!GET_GAME_STATE (TRADED_WITH_MELNORME)) { SET_GAME_STATE (TRADED_WITH_MELNORME, 1); NPCPhrase (TRADING_INFO); } if (R == 0) { /* Melnorme reports any news and turns purple */ NPCPhrase (BUY_OR_SELL); AlienTalkSegue (1); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 1) ), ONE_SECOND / 2); AlienTalkSegue ((COUNT)~0); } else if (PLAYER_SAID (R, why_turned_purple)) { SET_GAME_STATE (WHY_MELNORME_PURPLE, 1); NPCPhrase (TURNED_PURPLE_BECAUSE); } else if (PLAYER_SAID (R, done_selling)) { NPCPhrase (OK_DONE_SELLING); } else if (PLAYER_SAID (R, done_buying)) { NPCPhrase (OK_DONE_BUYING); } if (!GET_GAME_STATE (WHY_MELNORME_PURPLE)) { Response (why_turned_purple, NatureOfConversation); } if (!AskedToBuy) Response (buy, DoBuy); if (PHRASE_ENABLED (sell)) Response (sell, DoSell); Response (goodbye, ExitConversation); } else /* needs to be rescued */ { if (GET_GAME_STATE (MELNORME_RESCUE_REFUSED)) { NPCPhrase (CHANGED_MIND); Response (yes_changed_mind, DoRescue); Response (no_changed_mind, ExitConversation); } else { BYTE num_rescues = GET_GAME_STATE (MELNORME_RESCUE_COUNT); NPCPhrase (GetLineSafe (rescue_lines, num_rescues)); if (num_rescues < NUM_RESCUE_LINES - 1) { ++num_rescues; SET_GAME_STATE (MELNORME_RESCUE_COUNT, num_rescues); } NPCPhrase (SHOULD_WE_HELP_YOU); Response (yes_help, DoRescue); Response (no_help, ExitConversation); } } }
static void Intro (void) { BYTE Manner; Manner = GET_GAME_STATE (SPATHI_MANNER); if (Manner == 2) { NPCPhrase (HATE_YOU_FOREVER); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (Manner == 1 && GET_GAME_STATE (KNOW_SPATHI_PASSWORD) && (GET_GAME_STATE (FOUND_PLUTO_SPATHI) || GET_GAME_STATE (SPATHI_HOME_VISITS) != 7)) { SpathiAngry ((RESPONSE_REF)0); } else if (ActivateStarShip (SPATHI_SHIP, CHECK_ALLIANCE) & GOOD_GUY) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); SpathiAllies ((RESPONSE_REF)0); } else if (GET_GAME_STATE (SPATHI_PARTY)) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); SpathiParty ((RESPONSE_REF)0); } else if (GET_GAME_STATE (SPATHI_QUEST)) { if (GET_GAME_STATE (LIED_ABOUT_CREATURES) < 2) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); SpathiQuest ((RESPONSE_REF)0); } else { NPCPhrase (YOU_LIED_2); SET_GAME_STATE (SPATHI_MANNER, 2); SET_GAME_STATE (BATTLE_SEGUE, 1); } } else if (GET_GAME_STATE (KNOW_SPATHI_QUEST)) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); LearnQuest ((RESPONSE_REF)0); } else if (GET_GAME_STATE (KNOW_SPATHI_PASSWORD) && (GET_GAME_STATE (FOUND_PLUTO_SPATHI) || GET_GAME_STATE (SPATHI_HOME_VISITS) != 7)) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); SpathiCouncil ((RESPONSE_REF)0); } else { SpathiPassword ((RESPONSE_REF)0); } }
static void SpathiCouncil (RESPONSE_REF R) { if (R == 0) NPCPhrase (HELLO_AGAIN); else if (PLAYER_SAID (R, good_password)) { NPCPhrase (YES_GOOD_PASSWORD); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 1) ), ONE_SECOND / 4); SET_GAME_STATE (KNOW_SPATHI_PASSWORD, 1); SET_GAME_STATE (SPATHI_HOME_VISITS, 0); } else if (PLAYER_SAID (R, we_come_in_peace)) { NPCPhrase (KILLED_SPATHI); DISABLE_PHRASE (we_come_in_peace); } else if (PLAYER_SAID (R, spathi_on_pluto)) { NPCPhrase (WHERE_SPATHI); DISABLE_PHRASE (spathi_on_pluto); } else if (PLAYER_SAID (R, hostage)) { NPCPhrase (GUN_TO_HEAD); SET_GAME_STATE (FOUND_PLUTO_SPATHI, 3); DISABLE_PHRASE (hostage); } else if (PLAYER_SAID (R, killed_fwiffo)) { NPCPhrase (POOR_FWIFFO); SET_GAME_STATE (FOUND_PLUTO_SPATHI, 3); DISABLE_PHRASE (killed_fwiffo); } else if (PLAYER_SAID (R, fwiffo_fine)) { NPCPhrase (NOT_LIKELY); R = killed_fwiffo; DISABLE_PHRASE (fwiffo_fine); } else if (PLAYER_SAID (R, surrender)) { NPCPhrase (NO_SURRENDER); DISABLE_PHRASE (surrender); } if (GET_GAME_STATE (SPATHI_MANNER) == 0) { Response (we_come_in_peace, AllianceOffer); } else if (PHRASE_ENABLED (we_come_in_peace)) { Response (we_come_in_peace, SpathiCouncil); } else { Response (misunderstanding, AllianceOffer); } if (GET_GAME_STATE (FOUND_PLUTO_SPATHI) && GET_GAME_STATE (FOUND_PLUTO_SPATHI) < 3) { if (PHRASE_ENABLED (spathi_on_pluto)) Response (spathi_on_pluto, SpathiCouncil); else if (ActivateStarShip (SPATHI_SHIP, ESCORTING_FLAGSHIP)) { if (PHRASE_ENABLED (hostage)) Response (hostage, SpathiCouncil); } else if (PHRASE_ENABLED (killed_fwiffo)) { Response (killed_fwiffo, SpathiCouncil); if (PHRASE_ENABLED (fwiffo_fine)) Response (fwiffo_fine, SpathiCouncil); } } if (PHRASE_ENABLED (surrender)) Response (surrender, SpathiCouncil); else { Response (surrender_or_die, ExitConversation); } Response (bye_no_ally_offer, ExitConversation); }
static void AllianceOffer (RESPONSE_REF R) { if (PLAYER_SAID (R, misunderstanding)) { NPCPhrase (JUST_MISUNDERSTANDING); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 1) ), ONE_SECOND / 4); SET_GAME_STATE (SPATHI_MANNER, 3); SET_GAME_STATE (SPATHI_VISITS, 0); } else if (PLAYER_SAID (R, we_come_in_peace)) NPCPhrase (OF_COURSE); else if (PLAYER_SAID (R, hand_in_friendship)) { NPCPhrase (TOO_AFRAID); DISABLE_PHRASE (hand_in_friendship); } else if (PLAYER_SAID (R, stronger)) { NPCPhrase (YOURE_NOT); DISABLE_PHRASE (stronger); } else if (PLAYER_SAID (R, yes_we_are)) { NPCPhrase (NO_YOURE_NOT); DISABLE_PHRASE (yes_we_are); } else if (PLAYER_SAID (R, share_info)) { NPCPhrase (NO_INFO); DISABLE_PHRASE (share_info); } else if (PLAYER_SAID (R, give_us_resources)) { NPCPhrase (NO_RESOURCES); DISABLE_PHRASE (give_us_resources); } if (PHRASE_ENABLED (hand_in_friendship)) Response (hand_in_friendship, AllianceOffer); else if (PHRASE_ENABLED (stronger)) Response (stronger, AllianceOffer); else if (PHRASE_ENABLED (yes_we_are)) Response (yes_we_are, AllianceOffer); else { Response (how_prove, LearnQuest); } if (PHRASE_ENABLED (share_info)) Response (share_info, AllianceOffer); if (PHRASE_ENABLED (give_us_resources)) Response (give_us_resources, AllianceOffer); }
static void Intro (void) { BYTE NumVisits, Manner; if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { NPCPhrase (OUT_TAKES); setSegue (Segue_peace); return; } if (!GET_GAME_STATE (MET_ORZ_BEFORE)) NPCPhrase (INIT_HELLO); Manner = GET_GAME_STATE (ORZ_MANNER); if (Manner == 2) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); NumVisits = GET_GAME_STATE (ORZ_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HOSTILE_HELLO_1); break; case 1: NPCPhrase (HOSTILE_HELLO_2); --NumVisits; break; } SET_GAME_STATE (ORZ_VISITS, NumVisits); setSegue (Segue_hostile); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6)) { NumVisits = GET_GAME_STATE (TAALO_VISITS); if (Manner != 1) { switch (NumVisits++) { case 0: NPCPhrase (FRIENDLY_ALLIED_TAALO_HELLO_1); break; case 1: NPCPhrase (FRIENDLY_ALLIED_TAALO_HELLO_2); --NumVisits; break; } } else { switch (NumVisits++) { case 0: NPCPhrase (ANGRY_TAALO_HELLO_1); break; case 1: NPCPhrase (ANGRY_TAALO_HELLO_2); --NumVisits; break; } } SET_GAME_STATE (TAALO_VISITS, NumVisits); TaaloWorld ((RESPONSE_REF)0); } else if (Manner == 3 && CheckAlliance (ORZ_SHIP) == GOOD_GUY) { if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { NumVisits = GET_GAME_STATE (ORZ_HOME_VISITS); switch (NumVisits++) { case 0: NPCPhrase (ALLIED_HOMEWORLD_HELLO_1); break; case 1: NPCPhrase (ALLIED_HOMEWORLD_HELLO_2); break; case 2: NPCPhrase (ALLIED_HOMEWORLD_HELLO_3); break; case 3: NPCPhrase (ALLIED_HOMEWORLD_HELLO_4); --NumVisits; break; } SET_GAME_STATE (ORZ_HOME_VISITS, NumVisits); } else { NumVisits = GET_GAME_STATE (ORZ_VISITS); switch (NumVisits++) { case 0: NPCPhrase (ALLIED_SPACE_HELLO_1); break; case 1: NPCPhrase (ALLIED_SPACE_HELLO_2); break; case 2: NPCPhrase (ALLIED_SPACE_HELLO_3); break; case 3: NPCPhrase (ALLIED_SPACE_HELLO_4); --NumVisits; break; } SET_GAME_STATE (ORZ_VISITS, NumVisits); } OrzAllied ((RESPONSE_REF)0); } else if (Manner != 1) { if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { NumVisits = GET_GAME_STATE (ORZ_HOME_VISITS); switch (NumVisits++) { case 0: NPCPhrase (NEUTRAL_HOMEWORLD_HELLO_1); break; case 1: NPCPhrase (NEUTRAL_HOMEWORLD_HELLO_2); break; case 2: NPCPhrase (NEUTRAL_HOMEWORLD_HELLO_3); break; case 3: NPCPhrase (NEUTRAL_HOMEWORLD_HELLO_4); --NumVisits; break; } SET_GAME_STATE (ORZ_HOME_VISITS, NumVisits); } else { NumVisits = GET_GAME_STATE (ORZ_VISITS); switch (NumVisits++) { case 0: NPCPhrase (NEUTRAL_SPACE_HELLO_1); break; case 1: NPCPhrase (NEUTRAL_SPACE_HELLO_2); break; case 2: NPCPhrase (NEUTRAL_SPACE_HELLO_3); break; case 3: NPCPhrase (NEUTRAL_SPACE_HELLO_4); --NumVisits; break; } SET_GAME_STATE (ORZ_VISITS, NumVisits); } OrzNeutral ((RESPONSE_REF)0); } else { if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { NumVisits = GET_GAME_STATE (ORZ_HOME_VISITS); switch (NumVisits++) { case 0: NPCPhrase (ANGRY_HOMEWORLD_HELLO_1); break; case 1: NPCPhrase (ANGRY_HOMEWORLD_HELLO_2); --NumVisits; break; } SET_GAME_STATE (ORZ_HOME_VISITS, NumVisits); } else { NumVisits = GET_GAME_STATE (ORZ_VISITS); switch (NumVisits++) { case 0: NPCPhrase (ANGRY_SPACE_HELLO_1); break; case 1: NPCPhrase (ANGRY_SPACE_HELLO_2); --NumVisits; break; } SET_GAME_STATE (ORZ_VISITS, NumVisits); } OrzAngry ((RESPONSE_REF)0); } if (!GET_GAME_STATE (MET_ORZ_BEFORE)) { SET_GAME_STATE (MET_ORZ_BEFORE, 1); // Disable talking anim and run the computer report EnableTalkingAnim (FALSE); AlienTalkSegue (1); // Run whatever is left with talking anim EnableTalkingAnim (TRUE); } }
static void ExitConversation (RESPONSE_REF R) { setSegue (Segue_peace); if (PLAYER_SAID (R, bye_ally)) NPCPhrase (GOODBYE_ALLY); else if (PLAYER_SAID (R, bye_neutral)) NPCPhrase (GOODBYE_NEUTRAL); else if (PLAYER_SAID (R, bye_angry)) NPCPhrase (GOODBYE_ANGRY); else if (PLAYER_SAID (R, bye_taalo)) { if (GET_GAME_STATE (ORZ_MANNER) == 1) NPCPhrase (ANGRY_TAALO_GOODBYE); else NPCPhrase (FRIENDLY_TAALO_GOODBYE); } else if (PLAYER_SAID (R, hostile_2)) { NPCPhrase (HOSTILITY_IS_BAD_2); setSegue (Segue_hostile); } else if (PLAYER_SAID (R, may_we_land)) { NPCPhrase (SURE_LAND); SET_GAME_STATE (TAALO_UNPROTECTED, 1); } else if (PLAYER_SAID (R, yes_alliance) || PLAYER_SAID (R, were_sorry)) { if (PLAYER_SAID (R, yes_alliance)) NPCPhrase (GREAT); else NPCPhrase (APOLOGY_ACCEPTED); SET_GAME_STATE (ORZ_ANDRO_STATE, 0); SET_GAME_STATE (ORZ_GENERAL_INFO, 0); SET_GAME_STATE (ORZ_PERSONAL_INFO, 0); SET_GAME_STATE (ORZ_MANNER, 3); SetRaceAllied (ORZ_SHIP, TRUE); } else if (PLAYER_SAID (R, demand_to_land)) { NPCPhrase (NO_DEMAND); setSegue (Segue_hostile); } else if (PLAYER_SAID (R, about_andro_3) || PLAYER_SAID (R, must_know_about_androsyn)) { if (PLAYER_SAID (R, about_andro_3)) NPCPhrase (BLEW_IT); else NPCPhrase (KNOW_TOO_MUCH); SET_GAME_STATE (ORZ_VISITS, 0); SET_GAME_STATE (ORZ_MANNER, 2); setSegue (Segue_hostile); if (PLAYER_SAID (R, about_andro_3)) { SetRaceAllied (ORZ_SHIP, FALSE); RemoveEscortShips (ORZ_SHIP); } XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 1) ), ONE_SECOND / 2); } else /* insults */ { BYTE NumVisits; NumVisits = GET_GAME_STATE (ORZ_PERSONAL_INFO); switch (NumVisits++) { case 0: NPCPhrase (INSULTED_1); break; case 1: NPCPhrase (INSULTED_2); break; case 2: NPCPhrase (INSULTED_3); setSegue (Segue_hostile); break; case 7: --NumVisits; default: NPCPhrase (INSULTED_4); setSegue (Segue_hostile); break; } SET_GAME_STATE (ORZ_PERSONAL_INFO, NumVisits); } }
static void NatureOfConversation (RESPONSE_REF R) { BYTE num_new_rainbows; UWORD rainbow_mask; COUNT Credit; if (PLAYER_SAID (R, get_on_with_business)) { SET_GAME_STATE (MELNORME_YACK_STACK2, 5); R = 0; } Credit = DeltaCredit (0); if (R == 0) { BYTE stack; stack = (BYTE)(GET_GAME_STATE (MELNORME_YACK_STACK2) - 5); switch (stack++) { case 0: NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_1); break; case 1: NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_2); break; case 2: NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_3); break; case 3: NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_4); break; case 4: NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_5); break; case 5: NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_6); break; case 6: NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_7); break; case 7: NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_8); break; case 8: NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_9); break; default: --stack; NPCPhrase (HELLO_AND_DOWN_TO_BUSINESS_10); break; } SET_GAME_STATE (MELNORME_YACK_STACK2, stack + 5); } rainbow_mask = MAKE_WORD ( GET_GAME_STATE (RAINBOW_WORLD0), GET_GAME_STATE (RAINBOW_WORLD1) ); num_new_rainbows = (BYTE)(-GET_GAME_STATE (MELNORME_RAINBOW_COUNT)); while (rainbow_mask) { if (rainbow_mask & 1) ++num_new_rainbows; rainbow_mask >>= 1; } if (GLOBAL_SIS (FuelOnBoard) > 0 || GLOBAL_SIS (TotalBioMass) || Credit || num_new_rainbows) { if (!GET_GAME_STATE (TRADED_WITH_MELNORME)) { SET_GAME_STATE (TRADED_WITH_MELNORME, 1); NPCPhrase (TRADING_INFO); } if (R == 0) { /* Melnorme reports any news and turns purple */ NPCPhrase (BUY_OR_SELL); AlienTalkSegue(1); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 1) ), ONE_SECOND / 2); AlienTalkSegue((COUNT)~0); } else if (PLAYER_SAID (R, why_turned_purple)) { SET_GAME_STATE (WHY_MELNORME_PURPLE, 1); NPCPhrase (TURNED_PURPLE_BECAUSE); } else if (PLAYER_SAID (R, done_selling)) { NPCPhrase (OK_DONE_SELLING); } else if (PLAYER_SAID (R, done_buying)) { NPCPhrase (OK_DONE_BUYING); } if (!GET_GAME_STATE (WHY_MELNORME_PURPLE)) { Response (why_turned_purple, NatureOfConversation); } if (!AskedToBuy) Response (buy, DoBuy); if (PHRASE_ENABLED (sell)) Response (sell, DoSell); Response (goodbye, ExitConversation); } else /* needs to be rescued */ { if (GET_GAME_STATE (MELNORME_RESCUE_REFUSED)) { NPCPhrase (CHANGED_MIND); Response (yes_changed_mind, DoRescue); Response (no_changed_mind, ExitConversation); } else { BYTE num_rescues; num_rescues = GET_GAME_STATE (MELNORME_RESCUE_COUNT); switch (num_rescues) { case 0: NPCPhrase (RESCUE_EXPLANATION); break; case 1: NPCPhrase (RESCUE_AGAIN_1); break; case 2: NPCPhrase (RESCUE_AGAIN_2); break; case 3: NPCPhrase (RESCUE_AGAIN_3); break; case 4: NPCPhrase (RESCUE_AGAIN_4); break; case 5: NPCPhrase (RESCUE_AGAIN_5); break; } if (num_rescues < 5) { ++num_rescues; SET_GAME_STATE (MELNORME_RESCUE_COUNT, num_rescues); } NPCPhrase (SHOULD_WE_HELP_YOU); Response (yes_help, DoRescue); Response (no_help, ExitConversation); } } }
static void Intro (void) { BYTE Manner; Manner = GET_GAME_STATE (SPATHI_MANNER); if (Manner == 2) { NPCPhrase (HATE_YOU_FOREVER); setSegue (Segue_hostile); } else if (Manner == 1 && GET_GAME_STATE (KNOW_SPATHI_PASSWORD) && (GET_GAME_STATE (FOUND_PLUTO_SPATHI) || GET_GAME_STATE (SPATHI_HOME_VISITS) != 7)) { SpathiAngry ((RESPONSE_REF)0); } else if (CheckAlliance (SPATHI_SHIP) == GOOD_GUY) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); SpathiAllies ((RESPONSE_REF)0); } else if (GET_GAME_STATE (SPATHI_PARTY)) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); SpathiParty ((RESPONSE_REF)0); } else if (GET_GAME_STATE (SPATHI_QUEST)) { if (GET_GAME_STATE (LIED_ABOUT_CREATURES) < 2) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); SpathiQuest ((RESPONSE_REF)0); } else { NPCPhrase (YOU_LIED_2); SET_GAME_STATE (SPATHI_MANNER, 2); setSegue (Segue_hostile); } } else if (GET_GAME_STATE (KNOW_SPATHI_QUEST)) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); LearnQuest ((RESPONSE_REF)0); } else if (GET_GAME_STATE (KNOW_SPATHI_PASSWORD) && (GET_GAME_STATE (FOUND_PLUTO_SPATHI) || GET_GAME_STATE (SPATHI_HOME_VISITS) != 7)) { CommData.AlienColorMap = SetAbsColorMapIndex (CommData.AlienColorMap, 1); SpathiCouncil ((RESPONSE_REF)0); } else { SpathiPassword ((RESPONSE_REF)0); } }
static void DoBluster (RESPONSE_REF R) { if (PLAYER_SAID (R, trade_is_for_the_weak)) { XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 2) ), ONE_SECOND / 2); SET_GAME_STATE (MELNORME_YACK_STACK2, 4); NPCPhrase (WERE_NOT_AFRAID); } else if (PLAYER_SAID (R, why_blue_light)) { SET_GAME_STATE (WHY_MELNORME_BLUE, 1); NPCPhrase (BLUE_IS_MAD); } else if (PLAYER_SAID (R, we_strong_1)) { local_stack0 = 1; NPCPhrase (YOU_NOT_STRONG_1); } else if (PLAYER_SAID (R, we_strong_2)) { local_stack0 = 2; NPCPhrase (YOU_NOT_STRONG_2); } else if (PLAYER_SAID (R, we_strong_3)) { local_stack0 = 3; NPCPhrase (YOU_NOT_STRONG_3); } else if (PLAYER_SAID (R, just_testing)) { local_stack1 = 1; NPCPhrase (REALLY_TESTING); } if (!GET_GAME_STATE (WHY_MELNORME_BLUE)) Response (why_blue_light, DoBluster); switch (local_stack0) { case 0: Response (we_strong_1, DoBluster); break; case 1: Response (we_strong_2, DoBluster); break; case 2: Response (we_strong_3, DoBluster); break; } switch (local_stack1) { case 0: Response (just_testing, DoBluster); break; case 1: { Response (yes_really_testing, DoFirstMeeting); break; } } Response (youre_on, ExitConversation); }
static void DoFirstMeeting (RESPONSE_REF R) { BYTE last_stack = 0; PVOIDFUNC temp_func, stack_func[] = { yack0_respond, yack1_respond, yack2_respond, }; if (R == 0) { BYTE business_count; business_count = GET_GAME_STATE (MELNORME_BUSINESS_COUNT); switch (business_count++) { case 0: NPCPhrase (HELLO_NOW_DOWN_TO_BUSINESS_1); break; case 1: NPCPhrase (HELLO_NOW_DOWN_TO_BUSINESS_2); break; case 2: NPCPhrase (HELLO_NOW_DOWN_TO_BUSINESS_3); --business_count; break; } SET_GAME_STATE (MELNORME_BUSINESS_COUNT, business_count); } else if (PLAYER_SAID (R, we_are_from_alliance0)) { SET_GAME_STATE (MELNORME_YACK_STACK0, 1); NPCPhrase (KNOW_OF_YOU); } else if (PLAYER_SAID (R, how_know)) { SET_GAME_STATE (MELNORME_YACK_STACK0, 2); NPCPhrase (KNOW_BECAUSE); } else if (PLAYER_SAID (R, what_about_yourselves)) { last_stack = 1; SET_GAME_STATE (MELNORME_YACK_STACK1, 1); NPCPhrase (NO_TALK_ABOUT_OURSELVES); } else if (PLAYER_SAID (R, what_factors)) { last_stack = 1; SET_GAME_STATE (MELNORME_YACK_STACK1, 2); NPCPhrase (FACTORS_ARE); } else if (PLAYER_SAID (R, what_about_universe)) { last_stack = 2; SET_GAME_STATE (MELNORME_YACK_STACK2, 1); NPCPhrase (NO_FREE_LUNCH); } else if (PLAYER_SAID (R, giving_is_good_1)) { last_stack = 2; SET_GAME_STATE (MELNORME_YACK_STACK2, 2); NPCPhrase (GIVING_IS_BAD_1); } else if (PLAYER_SAID (R, giving_is_good_2)) { last_stack = 2; SET_GAME_STATE (MELNORME_YACK_STACK2, 3); NPCPhrase (GIVING_IS_BAD_2); } else if (PLAYER_SAID (R, yes_really_testing)) { XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 0) ), ONE_SECOND / 2); NPCPhrase (TEST_RESULTS); } else if (PLAYER_SAID (R, we_apologize)) { SET_GAME_STATE (MELNORME_ANGER, 0); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 0) ), ONE_SECOND / 2); NPCPhrase (APOLOGY_ACCEPTED); } temp_func = stack_func[0]; stack_func[0] = stack_func[last_stack]; stack_func[last_stack] = temp_func; (*stack_func[0]) (); (*stack_func[1]) (); (*stack_func[2]) (); Response (no_trade_now, ExitConversation); }
static void DoMelnormeMiffed (RESPONSE_REF R) { if (R == 0) { BYTE miffed_count; miffed_count = GET_GAME_STATE (MELNORME_MIFFED_COUNT); switch (miffed_count++) { case 0: NPCPhrase (HELLO_SLIGHTLY_ANGRY_1); break; case 1: NPCPhrase (HELLO_SLIGHTLY_ANGRY_2); break; default: --miffed_count; NPCPhrase (HELLO_SLIGHTLY_ANGRY_3); break; } SET_GAME_STATE (MELNORME_MIFFED_COUNT, miffed_count); XFormColorMap (GetColorMapAddress ( SetAbsColorMapIndex (CommData.AlienColorMap, 2) ), ONE_SECOND / 2); } else if (PLAYER_SAID (R, explore_relationship)) { SET_GAME_STATE (MELNORME_YACK_STACK3, 1); NPCPhrase (EXAMPLE_OF_RELATIONSHIP); } else if (PLAYER_SAID (R, excuse_1)) { SET_GAME_STATE (MELNORME_YACK_STACK3, 2); NPCPhrase (NO_EXCUSE_1); } else if (PLAYER_SAID (R, excuse_2)) { SET_GAME_STATE (MELNORME_YACK_STACK3, 3); NPCPhrase (NO_EXCUSE_2); } else if (PLAYER_SAID (R, excuse_3)) { SET_GAME_STATE (MELNORME_YACK_STACK3, 4); NPCPhrase (NO_EXCUSE_3); } switch (GET_GAME_STATE (MELNORME_YACK_STACK3)) { case 0: Response (explore_relationship, DoMelnormeMiffed); break; case 1: Response (excuse_1, DoMelnormeMiffed); break; case 2: Response (excuse_2, DoMelnormeMiffed); break; case 3: Response (excuse_3, DoMelnormeMiffed); break; } Response (we_apologize, DoFirstMeeting); Response (so_we_can_attack, ExitConversation); Response (bye_melnorme_slightly_angry, ExitConversation); }