static void Intro (void) { BYTE NumVisits; if (GET_GAME_STATE (PROBE_ILWRATH_ENCOUNTER)) { NPCPhrase (SEND_MESSAGE); Response (where_you_come_from, CombatIsInevitable); Response (it_will_be_a_pleasure, CombatIsInevitable); Response (surrender, CombatIsInevitable); Response (be_reasonable, CombatIsInevitable); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { IlwrathHome ((RESPONSE_REF)0); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6)) { NumVisits = GET_GAME_STATE (ILWRATH_CHMMR_VISITS); switch (NumVisits++) { case 0: NPCPhrase (INIT_CHMMR_HELLO); break; case 1: NPCPhrase (SUBSEQUENT_CHMMR_HELLO); --NumVisits; break; } SET_GAME_STATE (ILWRATH_CHMMR_VISITS, NumVisits); Response (whats_up, CombatIsInevitable); Response (bye, CombatIsInevitable); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 5)) { // Communicating with an Ilwrath ship using a HyperWave Broadcaster. if (GET_GAME_STATE (ILWRATH_FIGHT_THRADDASH)) NPCPhrase (BIG_FUN); else if (GET_GAME_STATE (ILWRATH_DECEIVED)) NPCPhrase (FAST_AS_CAN); else NPCPhrase (JUST_GRUNTS); setSegue (Segue_peace); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 4)) { // Communicating with the Ilwrath homeworld using a // Hyperwave Broadcaster. GodsSpeak ((RESPONSE_REF)0); } else { setSegue (Segue_peace); if (GET_GAME_STATE (ILWRATH_FIGHT_THRADDASH)) NPCPhrase (HAPPY_FIGHTING_THRADDASH); else if (GET_GAME_STATE (ILWRATH_DECEIVED)) NPCPhrase (ON_WAY_TO_THRADDASH); else IlwrathSpace ((RESPONSE_REF)0); } }
static void OrzNeutral (RESPONSE_REF R) { BYTE i, LastStack; RESPONSE_REF pStr[3]; LastStack = 0; pStr[0] = pStr[1] = pStr[2] = 0; if (PLAYER_SAID (R, hostile_1)) { NPCPhrase (HOSTILITY_IS_BAD_1); DISABLE_PHRASE (hostile_1); LastStack = 2; } else if (PLAYER_SAID (R, we_are_vindicator0)) { NPCPhrase (NICE_TO_MEET_YOU); SET_GAME_STATE (ORZ_STACK0, 1); LastStack = 1; } else if (PLAYER_SAID (R, who_you)) { NPCPhrase (WE_ARE_ORZ); SET_GAME_STATE (ORZ_ANDRO_STATE, 1); } else if (PLAYER_SAID (R, why_here)) { NPCPhrase (HERE_BECAUSE); SET_GAME_STATE (ORZ_ANDRO_STATE, 2); } else if (PLAYER_SAID (R, no_alliance)) { NPCPhrase (MAYBE_LATER); DISABLE_PHRASE (talk_about_alliance); SET_GAME_STATE (REFUSED_ORZ_ALLIANCE, 1); } else if (PLAYER_SAID (R, decide_later)) { NPCPhrase (OK_LATER); DISABLE_PHRASE (talk_about_alliance); SET_GAME_STATE (REFUSED_ORZ_ALLIANCE, 1); } else if (PLAYER_SAID (R, dont_really_care)) NPCPhrase (YOU_ARE_OUR_FRIENDS); else if (PLAYER_SAID (R, where_androsyn)) { WhereAndrosyn (R); return; } else if (PLAYER_SAID (R, talk_about_alliance) || PLAYER_SAID (R, seem_like_nice_guys)) { OfferAlliance (R); return; } else if (PLAYER_SAID (R, hostile_2)) { ExitConversation (R); return; } if (GET_GAME_STATE (ORZ_ANDRO_STATE) == 0) pStr[0] = who_you; else if (GET_GAME_STATE (ORZ_ANDRO_STATE) == 1) pStr[0] = why_here; else if (PHRASE_ENABLED (where_androsyn) && GET_GAME_STATE (ORZ_ANDRO_STATE) == 2) pStr[0] = where_androsyn; if (GET_GAME_STATE (REFUSED_ORZ_ALLIANCE)) { if (PHRASE_ENABLED (talk_about_alliance)) pStr[1] = talk_about_alliance; } else if (GET_GAME_STATE (ORZ_STACK0) == 0) { construct_response (shared_phrase_buf, we_are_vindicator0, GLOBAL_SIS (CommanderName), we_are_vindicator1, GLOBAL_SIS (ShipName), we_are_vindicator2, (UNICODE*)NULL); pStr[1] = we_are_vindicator0; } else pStr[1] = seem_like_nice_guys; if (PHRASE_ENABLED (hostile_1)) pStr[2] = hostile_1; else pStr[2] = hostile_2; if (pStr[LastStack]) { if (pStr[LastStack] != we_are_vindicator0) Response (pStr[LastStack], OrzNeutral); else DoResponsePhrase (pStr[LastStack], OrzNeutral, shared_phrase_buf); } for (i = 0; i < 3; ++i) { if (i != LastStack && pStr[i]) { if (pStr[i] != we_are_vindicator0) Response (pStr[i], OrzNeutral); else DoResponsePhrase (pStr[i], OrzNeutral, shared_phrase_buf); } } Response (bye_neutral, ExitConversation); }
// Returns TRUE if the broadcaster has been successfully activated, // and FALSE otherwise. static BOOLEAN UseCaster (void) { if (inHQSpace ()) { if (GET_GAME_STATE (ARILOU_SPACE_SIDE) <= 1) { SET_GAME_STATE (USED_BROADCASTER, 1); return TRUE; } return FALSE; } if (LOBYTE (GLOBAL (CurrentActivity)) != IN_INTERPLANETARY || !playerInSolarSystem ()) return FALSE; if (playerInPlanetOrbit () && matchWorld (pSolarSysState, pSolarSysState->pOrbitalDesc, 1, MATCH_PLANET) && CurStarDescPtr->Index == CHMMR_DEFINED && !GET_GAME_STATE (CHMMR_UNLEASHED)) { // In orbit around the Chenjesu/Mmrnmhrm home planet. NextActivity |= CHECK_LOAD; /* fake a load game */ GLOBAL (CurrentActivity) |= START_ENCOUNTER; EncounterGroup = 0; PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7); SaveSolarSysLocation (); return TRUE; } { BOOLEAN FoundIlwrath; HIPGROUP hGroup; FoundIlwrath = (CurStarDescPtr->Index == ILWRATH_DEFINED) && StartSphereTracking (ILWRATH_SHIP); // In the Ilwrath home system and they are alive? if (!FoundIlwrath && (hGroup = GetHeadLink (&GLOBAL (ip_group_q)))) { // Is an Ilwrath ship in the system? IP_GROUP *GroupPtr; GroupPtr = LockIpGroup (&GLOBAL (ip_group_q), hGroup); FoundIlwrath = (GroupPtr->race_id == ILWRATH_SHIP); UnlockIpGroup (&GLOBAL (ip_group_q), hGroup); } if (FoundIlwrath) { NextActivity |= CHECK_LOAD; /* fake a load game */ GLOBAL (CurrentActivity) |= START_ENCOUNTER; EncounterGroup = 0; PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); if (CurStarDescPtr->Index == ILWRATH_DEFINED) { // Ilwrath home system. SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 4); } else { // Ilwrath ship. SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 5); } if (playerInPlanetOrbit ()) SaveSolarSysLocation (); return TRUE; } } return FALSE; }
static void Intro (void) { DWORD GrpOffs; if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { NPCPhrase (OUT_TAKES); SET_GAME_STATE (BATTLE_SEGUE, 0); return; } GrpOffs = GET_GAME_STATE_32 (URQUAN_PROBE_GRPOFFS0); if (LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY && GLOBAL (BattleGroupRef) && GLOBAL (BattleGroupRef) == GrpOffs) { NPCPhrase (SEND_MESSAGE); SET_GAME_STATE (PROBE_MESSAGE_DELIVERED, 1); } else if (GET_GAME_STATE (PLAYER_HYPNOTIZED)) { SetCommIntroMode (CIM_FADE_IN_SCREEN, ONE_SECOND * 5); UrquanHypno ((RESPONSE_REF)0); } else { BYTE NumVisits; if (!GET_GAME_STATE (URQUAN_SENSES_EVIL) && GET_GAME_STATE (TALKING_PET_ON_SHIP)) { NPCPhrase (SENSE_EVIL); SET_GAME_STATE (URQUAN_SENSES_EVIL, 1); } GrpOffs = GET_GAME_STATE_32 (COLONY_GRPOFFS0); if (LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY && GLOBAL (BattleGroupRef) && GLOBAL (BattleGroupRef) == GrpOffs) { NPCPhrase (CAUGHT_YA); SET_GAME_STATE (BATTLE_SEGUE, 1); return; } GrpOffs = GET_GAME_STATE_32 (SAMATRA_GRPOFFS0); if (LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY && GLOBAL (BattleGroupRef) && GLOBAL (BattleGroupRef) == GrpOffs) { NPCPhrase (HELLO_SAMATRA); SET_GAME_STATE (AWARE_OF_SAMATRA, 1); SET_GAME_STATE (BATTLE_SEGUE, 1); } else { NumVisits = GET_GAME_STATE (URQUAN_VISITS); if (!GET_GAME_STATE (KOHR_AH_FRENZY)) { switch (NumVisits++) { case 0: NPCPhrase (INIT_HELLO); break; case 1: NPCPhrase (SUBSEQUENT_HELLO_1); break; case 2: NPCPhrase (SUBSEQUENT_HELLO_2); break; case 3: NPCPhrase (SUBSEQUENT_HELLO_3); break; case 4: NPCPhrase (SUBSEQUENT_HELLO_4); --NumVisits; break; } NormalUrquan ((RESPONSE_REF)0); } else { switch (NumVisits++) { case 0: NPCPhrase (INIT_FLEE_HUMAN); LoserUrquan ((RESPONSE_REF)0); break; case 1: NPCPhrase (SUBSEQUENT_FLEE_HUMAN); SET_GAME_STATE (BATTLE_SEGUE, 0); --NumVisits; break; } } SET_GAME_STATE (URQUAN_VISITS, NumVisits); } } }
static void TaaloWorld (RESPONSE_REF R) { // We can only get here when ORZ_MANNER != HOSTILE (2) BYTE Manner; Manner = GET_GAME_STATE (ORZ_MANNER); if (PLAYER_SAID (R, demand_to_land)) { NPCPhrase (ASK_NICELY); DISABLE_PHRASE (demand_to_land); } else if (PLAYER_SAID (R, why_you_here)) { if (Manner != 1) NPCPhrase (FRIENDLY_EXPLANATION); else NPCPhrase (ANGRY_EXPLANATION); DISABLE_PHRASE (why_you_here); } else if (PLAYER_SAID (R, what_is_this_place)) { if (Manner != 1) NPCPhrase (FRIENDLY_PLACE); else NPCPhrase (ANGRY_PLACE); DISABLE_PHRASE (what_is_this_place); } else if (PLAYER_SAID (R, may_we_land)) { NPCPhrase (ALLIES_CAN_VISIT); DISABLE_PHRASE (may_we_land); } else if (PLAYER_SAID (R, make_alliance)) { NPCPhrase (CANT_ALLY_HERE); DISABLE_PHRASE (make_alliance); } else if (PLAYER_SAID (R, why_busy)) { NPCPhrase (BUSY_BECAUSE); DISABLE_PHRASE (why_busy); } if (PHRASE_ENABLED (may_we_land)) { if (Manner == 3 && ActivateStarShip (ORZ_SHIP, CHECK_ALLIANCE) == GOOD_GUY) Response (may_we_land, ExitConversation); else Response (may_we_land, TaaloWorld); } else if (PHRASE_ENABLED (make_alliance)) Response (make_alliance, TaaloWorld); else if (PHRASE_ENABLED (why_busy)) Response (why_busy, TaaloWorld); if (PHRASE_ENABLED (demand_to_land)) { if (Manner == 1) Response (demand_to_land, ExitConversation); else Response (demand_to_land, TaaloWorld); } if (PHRASE_ENABLED (why_you_here)) Response (why_you_here, TaaloWorld); if (PHRASE_ENABLED (what_is_this_place)) Response (what_is_this_place, TaaloWorld); Response (bye_taalo, ExitConversation); }
static void TellMoonBase (RESPONSE_REF R) { if (R == 0) { NPCPhrase (DEALT_WITH_BASE_YET); } else if (PLAYER_SAID (R, i_lost_my_lander)) { NPCPhrase (HERE_IS_A_NEW_LANDER); ++GLOBAL_SIS (NumLanders); LockMutex (GraphicsLock); DrawLanders (); DeltaSISGauges (4, 0, 0); UnlockMutex (GraphicsLock); SET_GAME_STATE (LANDERS_LOST, 1); } else if (PLAYER_SAID (R, i_lost_another_lander)) { NPCPhrase (HERE_IS_ANOTHER_LANDER); ++GLOBAL_SIS (NumLanders); LockMutex (GraphicsLock); DrawLanders (); DeltaSISGauges (4, 0, 0); UnlockMutex (GraphicsLock); } else if (PLAYER_SAID (R, need_fuel_mercury) || PLAYER_SAID (R, need_fuel_luna)) { NPCPhrase (GIVE_FUEL); LockMutex (GraphicsLock); DeltaSISGauges (0, 5 * FUEL_TANK_SCALE, 0); UnlockMutex (GraphicsLock); SET_GAME_STATE (GIVEN_FUEL_BEFORE, 1); } else if (PLAYER_SAID (R, need_fuel_again)) { NPCPhrase (GIVE_FUEL_AGAIN); LockMutex (GraphicsLock); DeltaSISGauges (0, 5 * FUEL_TANK_SCALE, 0); UnlockMutex (GraphicsLock); } else if (PLAYER_SAID (R, we_are_here_to_help)) { NPCPhrase (BASE_ON_MOON); } else if (GET_GAME_STATE (STARBASE_YACK_STACK1) == 0) { NPCPhrase (ABOUT_BASE); SET_GAME_STATE (STARBASE_YACK_STACK1, 1); } else { NPCPhrase (ABOUT_BASE_AGAIN); } if (GLOBAL_SIS (NumLanders) == 0 && GET_GAME_STATE (CHMMR_BOMB_STATE) < 2) { if (GET_GAME_STATE (LANDERS_LOST)) Response (i_lost_another_lander, TellMoonBase); else Response (i_lost_my_lander, TellMoonBase); } if (GLOBAL_SIS (FuelOnBoard) < 2 * FUEL_TANK_SCALE) { if (GET_GAME_STATE (GIVEN_FUEL_BEFORE)) Response (need_fuel_again, TellMoonBase); else Response (need_fuel_luna, TellMoonBase); } if (GET_GAME_STATE (WILL_DESTROY_BASE) == 0) Response (we_will_take_care_of_base, ByeBye); else Response (take_care_of_base_again, ByeBye); if (GET_GAME_STATE (STARBASE_YACK_STACK1) == 0) Response (tell_me_about_base, TellMoonBase); else Response (tell_me_again, TellMoonBase); }
static void CombatIsInevitable (RESPONSE_REF R) { SET_GAME_STATE (BATTLE_SEGUE, 1); if (PLAYER_SAID (R, you_must_surrender)) NPCPhrase (NOPE); else if (PLAYER_SAID (R, whats_up_1) || PLAYER_SAID (R, whats_up_2) || PLAYER_SAID (R, whats_up_3) || PLAYER_SAID (R, whats_up_4)) { BYTE NumVisits; NumVisits = GET_GAME_STATE (URQUAN_INFO); switch (NumVisits++) { case 0: NPCPhrase (GENERAL_INFO_1); break; case 1: NPCPhrase (GENERAL_INFO_2); break; case 2: NPCPhrase (GENERAL_INFO_3); break; case 3: NPCPhrase (GENERAL_INFO_4); --NumVisits; break; } SET_GAME_STATE (URQUAN_INFO, NumVisits); } else if (PLAYER_SAID (R, i_wont_surrender)) NPCPhrase (BAD_CHOICE); else if (PLAYER_SAID (R, i_will_surrender)) { NPCPhrase (GOOD_CHOICE); SET_GAME_STATE (BATTLE_SEGUE, 0); GLOBAL_SIS (CrewEnlisted) = (COUNT)~0; GLOBAL (CurrentActivity) |= CHECK_RESTART; } else if (PLAYER_SAID (R, like_to_leave)) NPCPhrase (INDEPENDENCE_IS_BAD); else if (PLAYER_SAID (R, bye_wars_over)) { NPCPhrase (GOODBYE_WARS_OVER); SET_GAME_STATE (BATTLE_SEGUE, 0); } else if (PLAYER_SAID (R, bye_sub_hypno)) NPCPhrase (GOODBYE_AND_DIE_SUB_HYPNO); else if (PLAYER_SAID (R, bye_init_hypno)) { NPCPhrase (GOODBYE_AND_DIE_INIT_HYPNO); SET_GAME_STATE (URQUAN_HYPNO_VISITS, 1); } else if (PLAYER_SAID (R, terran_amphibian) || PLAYER_SAID (R, talking_pet_on_steroids)) { NPCPhrase (BAD_NEWS); SET_GAME_STATE (BATTLE_SEGUE, 0); SET_GAME_STATE (URQUAN_HYPNO_VISITS, 1); } else if (PLAYER_SAID (R, falling_asleep) || PLAYER_SAID (R, someone_else_controlled)) { NPCPhrase (SOUNDS_FAMILIAR); SET_GAME_STATE (BATTLE_SEGUE, 0); SET_GAME_STATE (URQUAN_HYPNO_VISITS, 1); } }
static bool GenerateBurvixese_generateEnergy (SOLARSYS_STATE *solarSys, PLANET_DESC *world, COUNT *whichNode) { DWORD rand_val; DWORD old_rand; if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { COUNT nodeI; COUNT i; old_rand = TFB_SeedRandom ( solarSys->SysInfo.PlanetInfo.ScanSeed[ENERGY_SCAN]); nodeI = 0; i = 0; do { rand_val = TFB_Random (); solarSys->SysInfo.PlanetInfo.CurPt.x = (LOBYTE (LOWORD (rand_val)) % (MAP_WIDTH - (8 << 1))) + 8; solarSys->SysInfo.PlanetInfo.CurPt.y = (HIBYTE (LOWORD (rand_val)) % (MAP_HEIGHT - (8 << 1))) + 8; solarSys->SysInfo.PlanetInfo.CurType = 1; solarSys->SysInfo.PlanetInfo.CurDensity = 0; if (nodeI >= *whichNode && !(solarSys->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN] & (1L << i))) break; ++nodeI; } while (++i < 16); *whichNode = nodeI; TFB_SeedRandom (old_rand); return true; } if (matchWorld (solarSys, world, 0, 0) && !GET_GAME_STATE (BURVIXESE_BROADCASTERS)) { old_rand = TFB_SeedRandom ( solarSys->SysInfo.PlanetInfo.ScanSeed[ENERGY_SCAN]); rand_val = TFB_Random (); solarSys->SysInfo.PlanetInfo.CurPt.x = (LOBYTE (LOWORD (rand_val)) % (MAP_WIDTH - (8 << 1))) + 8; solarSys->SysInfo.PlanetInfo.CurPt.y = (HIBYTE (LOWORD (rand_val)) % (MAP_HEIGHT - (8 << 1))) + 8; solarSys->SysInfo.PlanetInfo.CurDensity = 0; solarSys->SysInfo.PlanetInfo.CurType = 0; if (!(solarSys->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN] & (1L << 0)) && *whichNode == (COUNT)~0) *whichNode = 1; else { *whichNode = 0; if (solarSys->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN] & (1L << 0)) { SET_GAME_STATE (BURVIXESE_BROADCASTERS, 1); SET_GAME_STATE (BURV_BROADCASTERS_ON_SHIP, 1); } } TFB_SeedRandom (old_rand); return true; } *whichNode = 0; return true; }
RACE_DESCPTR init_shofixti (void) { RACE_DESCPTR RaceDescPtr; static RACE_DESC new_shofixti_desc; shofixti_desc.postprocess_func = shofixti_postprocess; shofixti_desc.init_weapon_func = initialize_standard_missile; shofixti_desc.cyborg_control.intelligence_func = (void (*) (PVOID ShipPtr, PVOID ObjectsOfConcern, COUNT ConcernCounter)) shofixti_intelligence; new_shofixti_desc = shofixti_desc; if (LOBYTE (GLOBAL (CurrentActivity)) == IN_ENCOUNTER && !GET_GAME_STATE (SHOFIXTI_RECRUITED)) { #define NUM_LIMPETS 3 COUNT i; new_shofixti_desc.ship_data.ship[0] = (FRAME)OLDSHOF_BIG_MASK_PMAP_ANIM; new_shofixti_desc.ship_data.ship[1] = (FRAME)OLDSHOF_MED_MASK_PMAP_ANIM; new_shofixti_desc.ship_data.ship[2] = (FRAME)OLDSHOF_SML_MASK_PMAP_ANIM; new_shofixti_desc.ship_data.special[0] = new_shofixti_desc.ship_data.special[1] = new_shofixti_desc.ship_data.special[2] = (FRAME)0; new_shofixti_desc.ship_data.captain_control.background = (FRAME)OLDSHOF_CAPTAIN_MASK_PMAP_ANIM; /* weapon doesn't work as well */ new_shofixti_desc.characteristics.weapon_wait = 10; /* simulate VUX limpets */ for (i = 0; i < NUM_LIMPETS; ++i) { if (++new_shofixti_desc.characteristics.turn_wait == 0) --new_shofixti_desc.characteristics.turn_wait; if (++new_shofixti_desc.characteristics.thrust_wait == 0) --new_shofixti_desc.characteristics.thrust_wait; #define MIN_THRUST_INCREMENT DISPLAY_TO_WORLD (1) if (new_shofixti_desc.characteristics.thrust_increment <= MIN_THRUST_INCREMENT) { new_shofixti_desc.characteristics.max_thrust = new_shofixti_desc.characteristics.thrust_increment << 1; } else { COUNT num_thrusts; num_thrusts = new_shofixti_desc.characteristics.max_thrust / new_shofixti_desc.characteristics.thrust_increment; --new_shofixti_desc.characteristics.thrust_increment; new_shofixti_desc.characteristics.max_thrust = new_shofixti_desc.characteristics.thrust_increment * num_thrusts; } } } RaceDescPtr = &new_shofixti_desc; return (RaceDescPtr); }
static void BombWorld (RESPONSE_REF R) { BYTE LastStack; RESPONSE_REF pStr[2]; LastStack = 0; pStr[0] = pStr[1] = 0; if (PLAYER_SAID (R, why_you_here)) { NPCPhrase (WE_GUARD_BOMB); SET_GAME_STATE (BOMB_STACK1, 1); } else if (PLAYER_SAID (R, what_about_bomb)) { NPCPhrase (ABOUT_BOMB); SET_GAME_STATE (BOMB_STACK1, 2); } else if (PLAYER_SAID (R, give_us_bomb_or_die)) { NPCPhrase (GUARDS_WARN); SET_GAME_STATE (BOMB_STACK1, 3); } else if (PLAYER_SAID (R, demand_bomb)) { NPCPhrase (GUARDS_FIGHT); setSegue (Segue_hostile); SET_GAME_STATE (UTWIG_HOSTILE, 1); SET_GAME_STATE (UTWIG_INFO, 0); SET_GAME_STATE (UTWIG_HOME_VISITS, 0); SET_GAME_STATE (UTWIG_VISITS, 0); SET_GAME_STATE (BOMB_VISITS, 0); return; } else if (PLAYER_SAID (R, may_we_have_bomb)) { NPCPhrase (NO_BOMB); LastStack = 1; SET_GAME_STATE (BOMB_STACK2, 1); } else if (PLAYER_SAID (R, please)) { NPCPhrase (SORRY_NO_BOMB); SET_GAME_STATE (BOMB_STACK2, 2); } else if (PLAYER_SAID (R, whats_up_bomb)) { if (GET_GAME_STATE (BOMB_INFO)) NPCPhrase (GENERAL_INFO_BOMB_2); else { NPCPhrase (GENERAL_INFO_BOMB_1); SET_GAME_STATE (BOMB_INFO, 1); } DISABLE_PHRASE (whats_up_bomb); } switch (GET_GAME_STATE (BOMB_STACK2)) { case 0: pStr[1] = may_we_have_bomb; break; case 1: pStr[1] = please; break; } switch (GET_GAME_STATE (BOMB_STACK1)) { case 0: pStr[0] = why_you_here; pStr[1] = 0; break; case 1: pStr[0] = what_about_bomb; pStr[1] = 0; break; case 2: pStr[0] = give_us_bomb_or_die; break; case 3: pStr[0] = demand_bomb; break; } if (pStr[LastStack]) Response (pStr[LastStack], BombWorld); LastStack ^= 1; if (pStr[LastStack]) Response (pStr[LastStack], BombWorld); if (PHRASE_ENABLED (whats_up_bomb) && (GET_GAME_STATE (BOMB_STACK1) > 1)) Response (whats_up_bomb, BombWorld); if (GET_GAME_STATE (ULTRON_CONDITION) && !GET_GAME_STATE (REFUSED_ULTRON_AT_BOMB)) Response (got_ultron, ExitConversation); if (GET_GAME_STATE (BOMB_INFO)) { Response (bye_bomb, ExitConversation); } else { Response (bye_neutral, 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 (UTWIG_HOSTILE)) { if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6)) { NumVisits = GET_GAME_STATE (BOMB_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HOSTILE_BOMB_HELLO_1); break; case 1: NPCPhrase (HOSTILE_BOMB_HELLO_2); --NumVisits; break; } SET_GAME_STATE (BOMB_VISITS, NumVisits); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { NumVisits = GET_GAME_STATE (UTWIG_HOME_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HOSTILE_HOMEWORLD_HELLO_1); break; case 1: NPCPhrase (HOSTILE_HOMEWORLD_HELLO_2); --NumVisits; break; } SET_GAME_STATE (UTWIG_HOME_VISITS, NumVisits); } else { NumVisits = GET_GAME_STATE (UTWIG_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HOSTILE_SPACE_HELLO_1); break; case 1: NPCPhrase (HOSTILE_SPACE_HELLO_2); --NumVisits; break; } SET_GAME_STATE (UTWIG_VISITS, NumVisits); } if (!GET_GAME_STATE (ULTRON_CONDITION) || (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6))) { setSegue (Segue_hostile); } else { Response (hey_wait_got_ultron, ExitConversation); } } else if (CheckAlliance (UTWIG_SHIP) == GOOD_GUY) { if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { NumVisits = GET_GAME_STATE (UTWIG_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 (UTWIG_HOME_VISITS, NumVisits); AlliedHome ((RESPONSE_REF)0); } else { NumVisits = GET_GAME_STATE (UTWIG_SUPOX_MISSION); if (NumVisits == 1) { NumVisits = GET_GAME_STATE (UTWIG_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HELLO_BEFORE_KOHRAH_SPACE_1); break; case 1: NPCPhrase (HELLO_BEFORE_KOHRAH_SPACE_2); --NumVisits; break; } SET_GAME_STATE (UTWIG_VISITS, NumVisits); BeforeKohrAh ((RESPONSE_REF)0); } else if (NumVisits < 5) { NumVisits = GET_GAME_STATE (UTWIG_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HELLO_DURING_KOHRAH_SPACE_1); break; case 1: NPCPhrase (HELLO_DURING_KOHRAH_SPACE_2); --NumVisits; break; } SET_GAME_STATE (UTWIG_VISITS, NumVisits); } else { NumVisits = GET_GAME_STATE (UTWIG_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HELLO_AFTER_KOHRAH_SPACE_1); break; case 1: NPCPhrase (HELLO_AFTER_KOHRAH_SPACE_2); --NumVisits; break; } SET_GAME_STATE (UTWIG_VISITS, NumVisits); AfterKohrAh ((RESPONSE_REF)0); } } } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6)) { NumVisits = GET_GAME_STATE (BOMB_VISITS); switch (NumVisits++) { case 0: NPCPhrase (BOMB_WORLD_HELLO_1); break; case 1: NPCPhrase (BOMB_WORLD_HELLO_2); --NumVisits; break; } SET_GAME_STATE (BOMB_VISITS, NumVisits); BombWorld ((RESPONSE_REF)0); } else { if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { NumVisits = GET_GAME_STATE (UTWIG_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 (UTWIG_HOME_VISITS, NumVisits); } else { NumVisits = GET_GAME_STATE (UTWIG_VISITS); switch (NumVisits++) { case 0: NPCPhrase (NEUTRAL_SPACE_HELLO_1); break; case 1: NPCPhrase (NEUTRAL_SPACE_HELLO_2); --NumVisits; break; } SET_GAME_STATE (UTWIG_VISITS, NumVisits); } NeutralUtwig ((RESPONSE_REF)0); } }
static void NeutralUtwig (RESPONSE_REF R) { BYTE i, LastStack; RESPONSE_REF pStr[4]; LastStack = 0; pStr[0] = pStr[1] = pStr[2] = pStr[3] = 0; if (PLAYER_SAID (R, we_are_vindicator0)) { NPCPhrase (WOULD_BE_HAPPY_BUT); SET_GAME_STATE (UTWIG_STACK1, 1); } else if (PLAYER_SAID (R, why_sad)) { NPCPhrase (ULTRON_BROKE); SET_GAME_STATE (UTWIG_STACK1, 2); } else if (PLAYER_SAID (R, what_ultron)) { NPCPhrase (GLORIOUS_ULTRON); SET_GAME_STATE (UTWIG_STACK1, 3); } else if (PLAYER_SAID (R, dont_be_babies)) { NPCPhrase (MOCK_OUR_PAIN); setSegue (Segue_hostile); SET_GAME_STATE (UTWIG_STACK1, 4); SET_GAME_STATE (UTWIG_HOSTILE, 1); SET_GAME_STATE (UTWIG_INFO, 0); SET_GAME_STATE (UTWIG_HOME_VISITS, 0); SET_GAME_STATE (UTWIG_VISITS, 0); SET_GAME_STATE (BOMB_VISITS, 0); return; } else if (PLAYER_SAID (R, real_sorry_about_ultron)) { NPCPhrase (APPRECIATE_SYMPATHY); SET_GAME_STATE (UTWIG_STACK1, 4); return; } else if (PLAYER_SAID (R, what_about_you_1)) { NPCPhrase (ABOUT_US_1); LastStack = 2; SET_GAME_STATE (UTWIG_WAR_NEWS, 1); } else if (PLAYER_SAID (R, what_about_you_2)) { NPCPhrase (ABOUT_US_2); LastStack = 2; StartSphereTracking (SUPOX_SHIP); SET_GAME_STATE (UTWIG_WAR_NEWS, 2); } else if (PLAYER_SAID (R, what_about_you_3)) { NPCPhrase (ABOUT_US_3); SET_GAME_STATE (UTWIG_WAR_NEWS, 3); } else if (PLAYER_SAID (R, what_about_urquan_1)) { NPCPhrase (ABOUT_URQUAN_1); LastStack = 3; SET_GAME_STATE (UTWIG_STACK2, 1); } else if (PLAYER_SAID (R, what_about_urquan_2)) { NPCPhrase (ABOUT_URQUAN_2); SET_GAME_STATE (UTWIG_STACK2, 2); } switch (GET_GAME_STATE (UTWIG_STACK1)) { case 0: { UNICODE buf[ALLIANCE_NAME_BUFSIZE]; GetAllianceName (buf, name_1); construct_response ( shared_phrase_buf, we_are_vindicator0, GLOBAL_SIS (CommanderName), we_are_vindicator1, buf, we_are_vindicator2, (UNICODE*)NULL); } pStr[0] = we_are_vindicator0; break; case 1: pStr[0] = why_sad; break; case 2: pStr[0] = what_ultron; break; case 3: pStr[0] = dont_be_babies; pStr[1] = real_sorry_about_ultron; break; } switch (GET_GAME_STATE (UTWIG_WAR_NEWS)) { case 0: pStr[2] = what_about_you_1; break; case 1: pStr[2] = what_about_you_2; break; case 2: pStr[2] = what_about_you_3; break; } switch (GET_GAME_STATE (UTWIG_STACK2)) { case 0: pStr[2] = what_about_urquan_1; break; case 1: pStr[2] = what_about_urquan_2; break; } if (pStr[LastStack]) { if (pStr[LastStack] != we_are_vindicator0) Response (pStr[LastStack], NeutralUtwig); else DoResponsePhrase (pStr[LastStack], NeutralUtwig, shared_phrase_buf); } for (i = 0; i < 4; ++i) { if (i != LastStack && pStr[i]) { if (pStr[i] != we_are_vindicator0) Response (pStr[i], NeutralUtwig); else DoResponsePhrase (pStr[i], NeutralUtwig, shared_phrase_buf); } } if (GET_GAME_STATE (ULTRON_CONDITION)) Response (got_ultron, ExitConversation); Response (bye_neutral, ExitConversation); }
static void AlliedHome (RESPONSE_REF R) { BYTE NumVisits, News; News = GET_GAME_STATE (UTWIG_WAR_NEWS); NumVisits = GET_GAME_STATE (UTWIG_SUPOX_MISSION); if (PLAYER_SAID (R, how_went_war)) { NPCPhrase (ABOUT_BATTLE); News |= (1 << 0); } else if (PLAYER_SAID (R, how_goes_war)) { if (NumVisits == 1) { NPCPhrase (FLEET_ON_WAY); SET_GAME_STATE (UTWIG_WAR_NEWS, 1); } else switch (GET_GAME_STATE (UTWIG_WAR_NEWS)) { case 0: NPCPhrase (BATTLE_HAPPENS_1); News = 1; break; case 1: NPCPhrase (BATTLE_HAPPENS_2); News = 2; break; } DISABLE_PHRASE (how_goes_war); } else if (PLAYER_SAID (R, learn_new_info)) { if (NumVisits < 5) NPCPhrase (NO_NEW_INFO); else { NPCPhrase (SAMATRA); News |= (1 << 1); } DISABLE_PHRASE (learn_new_info); } else if (PLAYER_SAID (R, what_now_homeworld)) { if (NumVisits < 5) NPCPhrase (UP_TO_YOU); else NPCPhrase (HOPE_KILL_EACH_OTHER); DISABLE_PHRASE (what_now_homeworld); } else if (PLAYER_SAID (R, how_is_ultron)) { NPCPhrase (ULTRON_IS_GREAT); DISABLE_PHRASE (how_is_ultron); } SET_GAME_STATE (UTWIG_WAR_NEWS, News); if (NumVisits >= 5) { if (!(News & (1 << 0))) Response (how_went_war, AlliedHome); } else if (PHRASE_ENABLED (how_goes_war) && ((NumVisits == 1 && News == 0) || (NumVisits && News < 2))) Response (how_goes_war, AlliedHome); if (PHRASE_ENABLED (learn_new_info)) Response (learn_new_info, AlliedHome); if (PHRASE_ENABLED (what_now_homeworld)) Response (what_now_homeworld, AlliedHome); if (PHRASE_ENABLED (how_is_ultron)) Response (how_is_ultron, AlliedHome); if (NumVisits == 0 && EscortFeasibilityStudy (UTWIG_SHIP) != 0) Response (can_you_help, ExitConversation); Response (bye_allied_homeworld, ExitConversation); }
static void ExitConversation (RESPONSE_REF R) { setSegue (Segue_peace); if (PLAYER_SAID (R, bye_neutral)) NPCPhrase (GOODBYE_NEUTRAL); else if (PLAYER_SAID (R, bye_after_space)) NPCPhrase (GOODBYE_AFTER_SPACE); else if (PLAYER_SAID (R, bye_before_space)) NPCPhrase (GOODBYE_BEFORE_SPACE); else if (PLAYER_SAID (R, bye_allied_homeworld)) NPCPhrase (GOODBYE_ALLIED_HOMEWORLD); else if (PLAYER_SAID (R, bye_bomb)) NPCPhrase (GOODBYE_BOMB); else if (PLAYER_SAID (R, demand_bomb)) { NPCPhrase (GUARDS_FIGHT); setSegue (Segue_hostile); } else if (PLAYER_SAID (R, got_ultron) || PLAYER_SAID (R, hey_wait_got_ultron)) { if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6)) { NPCPhrase (NO_ULTRON_AT_BOMB); SET_GAME_STATE (REFUSED_ULTRON_AT_BOMB, 1); } else { if (PLAYER_SAID (R, got_ultron)) NPCPhrase (DONT_WANT_TO_LOOK); else NPCPhrase (TAUNT_US_BUT_WE_LOOK); if (GET_GAME_STATE (ULTRON_CONDITION) < 4) { switch (GET_GAME_STATE (UTWIG_INFO)) { case 0: if (PLAYER_SAID (R, got_ultron)) NPCPhrase (SICK_TRICK_1); else { NPCPhrase (TRICKED_US_1); setSegue (Segue_hostile); } break; case 1: if (PLAYER_SAID (R, got_ultron)) NPCPhrase (SICK_TRICK_2); else { NPCPhrase (TRICKED_US_2); setSegue (Segue_hostile); } break; } SET_GAME_STATE (UTWIG_INFO, 1); } else { NPCPhrase (HAPPY_DAYS); if (GET_GAME_STATE (KOHR_AH_FRENZY)) NPCPhrase (TOO_LATE); else { NPCPhrase (OK_ATTACK_KOHRAH); AddEvent (RELATIVE_EVENT, 0, 0, 0, ADVANCE_UTWIG_SUPOX_MISSION); } SET_GAME_STATE (UTWIG_HAVE_ULTRON, 1); SET_GAME_STATE (ULTRON_CONDITION, 5); SET_GAME_STATE (UTWIG_VISITS, 0); SET_GAME_STATE (SUPOX_VISITS, 0); SET_GAME_STATE (UTWIG_HOME_VISITS, 0); SET_GAME_STATE (SUPOX_HOME_VISITS, 0); SET_GAME_STATE (BOMB_VISITS, 0); SET_GAME_STATE (SUPOX_INFO, 0); SET_GAME_STATE (UTWIG_INFO, 0); SET_GAME_STATE (SUPOX_WAR_NEWS, 0); SET_GAME_STATE (UTWIG_WAR_NEWS, 0); SET_GAME_STATE (SUPOX_HOSTILE, 0); SET_GAME_STATE (UTWIG_HOSTILE, 0); SetRaceAllied (UTWIG_SHIP, TRUE); SetRaceAllied (SUPOX_SHIP, TRUE); } } } else if (PLAYER_SAID (R, can_you_help)) { NPCPhrase (HOW_HELP); if (EscortFeasibilityStudy (UTWIG_SHIP) == 0) NPCPhrase (DONT_NEED); else { NPCPhrase (HAVE_4_SHIPS); AlienTalkSegue ((COUNT)~0); AddEscortShips (UTWIG_SHIP, 4); } } }
static void NoRadioactives (RESPONSE_REF R) { if (PLAYER_SAID (R, yes_this_is_supply_ship)) { NPCPhrase (ABOUT_TIME); if (GLOBAL_SIS (ElementAmounts[RADIOACTIVE])) GiveRadios (0); else { Response (i_lied, NoRadioactives); Response (plumb_out, NoRadioactives); } } else { if (PLAYER_SAID (R, where_can_i_get_radios)) { NPCPhrase (RADIOS_ON_MERCURY); DISABLE_PHRASE (where_can_i_get_radios); } else if (PLAYER_SAID (R, no_but_well_help0)) NPCPhrase (THE_WHAT_FROM_WHERE); else if (PLAYER_SAID (R, what_slave_planet) || PLAYER_SAID (R, i_lied)) NPCPhrase (DONT_KNOW_WHO_YOU_ARE); else if (PLAYER_SAID (R, plumb_out)) NPCPhrase (WHAT_KIND_OF_IDIOT); else if (PLAYER_SAID (R, i_lost_my_lander)) { NPCPhrase (HERE_IS_A_NEW_LANDER); ++GLOBAL_SIS (NumLanders); LockMutex (GraphicsLock); DrawLanders (); DeltaSISGauges (4, 0, 0); UnlockMutex (GraphicsLock); SET_GAME_STATE (LANDERS_LOST, 1); } else if (PLAYER_SAID (R, i_lost_another_lander)) { NPCPhrase (HERE_IS_ANOTHER_LANDER); ++GLOBAL_SIS (NumLanders); LockMutex (GraphicsLock); DrawLanders (); DeltaSISGauges (4, 0, 0); UnlockMutex (GraphicsLock); } else if (PLAYER_SAID (R, need_fuel_mercury) || PLAYER_SAID (R, need_fuel_luna)) { NPCPhrase (GIVE_FUEL); LockMutex (GraphicsLock); DeltaSISGauges (0, 5 * FUEL_TANK_SCALE, 0); UnlockMutex (GraphicsLock); SET_GAME_STATE (GIVEN_FUEL_BEFORE, 1); } else if (PLAYER_SAID (R, need_fuel_again)) { NPCPhrase (GIVE_FUEL_AGAIN); LockMutex (GraphicsLock); DeltaSISGauges (0, 5 * FUEL_TANK_SCALE, 0); UnlockMutex (GraphicsLock); } if (GLOBAL_SIS (ElementAmounts[RADIOACTIVE])) GiveRadios (0); else { if (GLOBAL_SIS (NumLanders) == 0 && GET_GAME_STATE (CHMMR_BOMB_STATE) < 2) { if (GET_GAME_STATE (LANDERS_LOST)) Response (i_lost_another_lander, NoRadioactives); else Response (i_lost_my_lander, NoRadioactives); } if (GLOBAL_SIS (FuelOnBoard) < 2 * FUEL_TANK_SCALE) { if (GET_GAME_STATE (GIVEN_FUEL_BEFORE)) Response (need_fuel_again, NoRadioactives); else Response (need_fuel_mercury, NoRadioactives); } Response (ok_i_will_get_radios, ByeBye); if (PHRASE_ENABLED (where_can_i_get_radios)) { Response (where_can_i_get_radios, NoRadioactives); } } } }
// NB: Ship maximum speed and turning rate aren't updated in // HyperSpace/QuasiSpace or in melee. void equipShip (void) { int i; // Don't do anything unless in the full game. if (LOBYTE (GLOBAL (CurrentActivity)) == SUPER_MELEE) return; // Thrusters: for (i = 0; i < NUM_DRIVE_SLOTS; i++) GLOBAL_SIS (DriveSlots[i]) = FUSION_THRUSTER; // Turning jets: for (i = 0; i < NUM_JET_SLOTS; i++) GLOBAL_SIS (JetSlots[i]) = TURNING_JETS; // Shields: SET_GAME_STATE (LANDER_SHIELDS, (1 << EARTHQUAKE_DISASTER) | (1 << BIOLOGICAL_DISASTER) | (1 << LIGHTNING_DISASTER) | (1 << LAVASPOT_DISASTER)); // Lander upgrades: SET_GAME_STATE (IMPROVED_LANDER_SPEED, 1); SET_GAME_STATE (IMPROVED_LANDER_CARGO, 1); SET_GAME_STATE (IMPROVED_LANDER_SHOT, 1); // Modules: if (GET_GAME_STATE (CHMMR_BOMB_STATE) < 2) { // The Precursor bomb has not been installed. // This is the original TFB testing layout. i = 0; GLOBAL_SIS (ModuleSlots[i++]) = HIGHEFF_FUELSYS; GLOBAL_SIS (ModuleSlots[i++]) = HIGHEFF_FUELSYS; GLOBAL_SIS (ModuleSlots[i++]) = CREW_POD; GLOBAL_SIS (ModuleSlots[i++]) = CREW_POD; GLOBAL_SIS (ModuleSlots[i++]) = CREW_POD; GLOBAL_SIS (ModuleSlots[i++]) = CREW_POD; GLOBAL_SIS (ModuleSlots[i++]) = CREW_POD; GLOBAL_SIS (ModuleSlots[i++]) = STORAGE_BAY; GLOBAL_SIS (ModuleSlots[i++]) = SHIVA_FURNACE; GLOBAL_SIS (ModuleSlots[i++]) = SHIVA_FURNACE; GLOBAL_SIS (ModuleSlots[i++]) = DYNAMO_UNIT; GLOBAL_SIS (ModuleSlots[i++]) = TRACKING_SYSTEM; GLOBAL_SIS (ModuleSlots[i++]) = TRACKING_SYSTEM; GLOBAL_SIS (ModuleSlots[i++]) = SHIVA_FURNACE; GLOBAL_SIS (ModuleSlots[i++]) = CANNON_WEAPON; GLOBAL_SIS (ModuleSlots[i++]) = CANNON_WEAPON; // Landers: GLOBAL_SIS (NumLanders) = MAX_LANDERS; } else { // The Precursor bomb has been installed. i = NUM_BOMB_MODULES; GLOBAL_SIS (ModuleSlots[i++]) = HIGHEFF_FUELSYS; GLOBAL_SIS (ModuleSlots[i++]) = CREW_POD; GLOBAL_SIS (ModuleSlots[i++]) = SHIVA_FURNACE; GLOBAL_SIS (ModuleSlots[i++]) = SHIVA_FURNACE; GLOBAL_SIS (ModuleSlots[i++]) = CANNON_WEAPON; GLOBAL_SIS (ModuleSlots[i++]) = SHIVA_FURNACE; } assert (i <= NUM_MODULE_SLOTS); // Fill the fuel and crew compartments to the maximum. GLOBAL_SIS (FuelOnBoard) = FUEL_RESERVE; GLOBAL_SIS (CrewEnlisted) = 0; for (i = 0; i < NUM_MODULE_SLOTS; i++) { switch (GLOBAL_SIS (ModuleSlots[i])) { case CREW_POD: GLOBAL_SIS (CrewEnlisted) += CREW_POD_CAPACITY; break; case FUEL_TANK: GLOBAL_SIS (FuelOnBoard) += FUEL_TANK_CAPACITY; break; case HIGHEFF_FUELSYS: GLOBAL_SIS (FuelOnBoard) += HEFUEL_TANK_CAPACITY; break; } } // Update the maximum speed and turning rate when in interplanetary. if (pSolarSysState != NULL) { // Thrusters: pSolarSysState->max_ship_speed = 5 * IP_SHIP_THRUST_INCREMENT; for (i = 0; i < NUM_DRIVE_SLOTS; i++) if (GLOBAL_SIS (DriveSlots[i] == FUSION_THRUSTER)) pSolarSysState->max_ship_speed += IP_SHIP_THRUST_INCREMENT; // Turning jets: pSolarSysState->turn_wait = IP_SHIP_TURN_WAIT; for (i = 0; i < NUM_JET_SLOTS; i++) if (GLOBAL_SIS (JetSlots[i]) == TURNING_JETS) pSolarSysState->turn_wait -= IP_SHIP_TURN_DECREMENT; } // Make sure everything is redrawn: if (inHQSpace () || LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY) { DeltaSISGauges (UNDEFINED_DELTA, UNDEFINED_DELTA, UNDEFINED_DELTA); } }
static void AskAfterRadios (RESPONSE_REF R) { if (PLAYER_SAID (R, i_lost_my_lander)) { NPCPhrase (HERE_IS_A_NEW_LANDER); ++GLOBAL_SIS (NumLanders); LockMutex (GraphicsLock); DrawLanders (); DeltaSISGauges (4, 0, 0); UnlockMutex (GraphicsLock); SET_GAME_STATE (LANDERS_LOST, 1); } else if (PLAYER_SAID (R, i_lost_another_lander)) { NPCPhrase (HERE_IS_ANOTHER_LANDER); ++GLOBAL_SIS (NumLanders); LockMutex (GraphicsLock); DrawLanders (); DeltaSISGauges (4, 0, 0); UnlockMutex (GraphicsLock); } else if (PLAYER_SAID (R, need_fuel_mercury) || PLAYER_SAID (R, need_fuel_luna)) { NPCPhrase (GIVE_FUEL); LockMutex (GraphicsLock); DeltaSISGauges (0, 5 * FUEL_TANK_SCALE, 0); UnlockMutex (GraphicsLock); SET_GAME_STATE (GIVEN_FUEL_BEFORE, 1); } else if (PLAYER_SAID (R, need_fuel_again)) { NPCPhrase (GIVE_FUEL_AGAIN); LockMutex (GraphicsLock); DeltaSISGauges (0, 5 * FUEL_TANK_SCALE, 0); UnlockMutex (GraphicsLock); } else if (PLAYER_SAID (R, where_get_radios)) { NPCPhrase (RADIOS_ON_MERCURY); DISABLE_PHRASE (where_get_radios); } { if (GLOBAL_SIS (NumLanders) == 0 && GET_GAME_STATE (CHMMR_BOMB_STATE) < 2) { if (GET_GAME_STATE (LANDERS_LOST)) Response (i_lost_another_lander, AskAfterRadios); else Response (i_lost_my_lander, AskAfterRadios); } if (GLOBAL_SIS (FuelOnBoard) < 2 * FUEL_TANK_SCALE) { if (GET_GAME_STATE (GIVEN_FUEL_BEFORE)) Response (need_fuel_again, AskAfterRadios); else Response (need_fuel_mercury, AskAfterRadios); } Response (well_go_get_them_now, ByeBye); if (PHRASE_ENABLED (where_get_radios)) { Response (where_get_radios, AskAfterRadios); } } }
static void Buy (RESPONSE_REF R) { if (PLAYER_SAID (R, want_to_buy) || PLAYER_SAID (R, im_ready_to_buy)) { NPCPhrase (READY_TO_SELL); if (!GET_GAME_STATE (ROSY_SPHERE)) NPCPhrase (HAVE_SPHERE); if (!GET_GAME_STATE (ARTIFACT_2_ON_SHIP)) NPCPhrase (HAVE_ART_1); if (!GET_GAME_STATE (ARTIFACT_3_ON_SHIP)) NPCPhrase (HAVE_ART_2); NPCPhrase (SHIPS_AND_FUEL); SET_GAME_STATE (KNOW_DRUUGE_SLAVERS, 3); } else if (PLAYER_SAID (R, buy_druuge_ship)) { #define SHIP_CREW_COST 100 if (GLOBAL_SIS (CrewEnlisted) < SHIP_CREW_COST) NPCPhrase (NOT_ENOUGH_CREW); else if (ActivateStarShip (DRUUGE_SHIP, FEASIBILITY_STUDY) == 0) NPCPhrase (NOT_ENOUGH_ROOM); else { LockMutex (GraphicsLock); DeltaSISGauges (-SHIP_CREW_COST, 0, 0); UnlockMutex (GraphicsLock); SlaveryCount += SHIP_CREW_COST; ActivateStarShip (DRUUGE_SHIP, 1); NPCPhrase (BOUGHT_SHIP); } } #define ARTIFACT_CREW_COST 100 else if (PLAYER_SAID (R, buy_rosy_sphere)) { if (GLOBAL_SIS (CrewEnlisted) < ARTIFACT_CREW_COST) NPCPhrase (NOT_ENOUGH_CREW); else { LockMutex (GraphicsLock); DeltaSISGauges (-ARTIFACT_CREW_COST, 0, 0); UnlockMutex (GraphicsLock); SlaveryCount += ARTIFACT_CREW_COST; SET_GAME_STATE (ROSY_SPHERE_ON_SHIP, 1); SET_GAME_STATE (ROSY_SPHERE, 1); NPCPhrase (BOUGHT_SPHERE); } } else if (PLAYER_SAID (R, buy_art_1)) { if (GLOBAL_SIS (CrewEnlisted) < ARTIFACT_CREW_COST) NPCPhrase (NOT_ENOUGH_CREW); else { LockMutex (GraphicsLock); DeltaSISGauges (-ARTIFACT_CREW_COST, 0, 0); UnlockMutex (GraphicsLock); SlaveryCount += ARTIFACT_CREW_COST; SET_GAME_STATE (ARTIFACT_2_ON_SHIP, 1); NPCPhrase (BOUGHT_ART_1); } } else if (PLAYER_SAID (R, buy_art_2)) { if (GLOBAL_SIS (CrewEnlisted) < ARTIFACT_CREW_COST) NPCPhrase (NOT_ENOUGH_CREW); else { LockMutex (GraphicsLock); DeltaSISGauges (-ARTIFACT_CREW_COST, 0, 0); UnlockMutex (GraphicsLock); SlaveryCount += ARTIFACT_CREW_COST; SET_GAME_STATE (ARTIFACT_3_ON_SHIP, 1); NPCPhrase (BOUGHT_ART_2); } } else if (PLAYER_SAID (R, buy_fuel)) { #define FUEL_CREW_COST 10 if (GLOBAL_SIS (CrewEnlisted) < FUEL_CREW_COST) NPCPhrase (NOT_ENOUGH_CREW); else { LockMutex (GraphicsLock); DeltaSISGauges (-FUEL_CREW_COST, FUEL_CREW_COST * FUEL_TANK_SCALE, 0); UnlockMutex (GraphicsLock); SlaveryCount += FUEL_CREW_COST; NPCPhrase (BOUGHT_FUEL); } } Response (buy_druuge_ship, Buy); if (!GET_GAME_STATE (ROSY_SPHERE)) Response (buy_rosy_sphere, Buy); if (!GET_GAME_STATE (ARTIFACT_2_ON_SHIP)) Response (buy_art_1, Buy); if (!GET_GAME_STATE (ARTIFACT_3_ON_SHIP)) Response (buy_art_2, Buy); Response (buy_fuel, Buy); Response (done_buying, TradeWorld); }
static void RevealSelf (RESPONSE_REF R) { BYTE i, stack; stack = 0; if (PLAYER_SAID (R, we_are_vindicator0)) { NPCPhrase (THATS_IMPOSSIBLE); DISABLE_PHRASE (we_are_vindicator0); } else if (PLAYER_SAID (R, our_mission_was_secret)) { NPCPhrase (ACKNOWLEDGE_SECRET); DISABLE_PHRASE (our_mission_was_secret); } else if (PLAYER_SAID (R, first_give_info)) { NPCPhrase (ASK_AWAY); stack = 1; DISABLE_PHRASE (first_give_info); } else if (PLAYER_SAID (R, whats_this_starbase)) { NPCPhrase (STARBASE_IS); stack = 1; DISABLE_PHRASE (whats_this_starbase); } else if (PLAYER_SAID (R, what_about_earth)) { NPCPhrase (HAPPENED_TO_EARTH); stack = 1; DISABLE_PHRASE (what_about_earth); } else if (PLAYER_SAID (R, where_are_urquan)) { NPCPhrase (URQUAN_LEFT); stack = 1; DISABLE_PHRASE (where_are_urquan); } else if (PLAYER_SAID (R, it_went_away)) NPCPhrase (DEEP_TROUBLE); else if (PLAYER_SAID (R, we_destroyed_it)) NPCPhrase (GOOD_NEWS); else if (PLAYER_SAID (R, what_probe)) NPCPhrase (SURE_HOPE); for (i = 0; i < 2; ++i, stack ^= 1) { if (stack == 1) { if (PHRASE_ENABLED (first_give_info)) Response (first_give_info, RevealSelf); else if (PHRASE_ENABLED (whats_this_starbase)) Response (whats_this_starbase, RevealSelf); else if (PHRASE_ENABLED (what_about_earth)) Response (what_about_earth, RevealSelf); else if (PHRASE_ENABLED (where_are_urquan)) Response (where_are_urquan, RevealSelf); else if (PHRASE_ENABLED (what_was_red_thing)) { Response (what_was_red_thing, TellProbe); } } else { if (PHRASE_ENABLED (we_are_vindicator0)) { construct_response (shared_phrase_buf, we_are_vindicator0, GLOBAL_SIS (CommanderName), we_are_vindicator1, GLOBAL_SIS (ShipName), we_are_vindicator2, (UNICODE*)NULL); DoResponsePhrase (we_are_vindicator0, RevealSelf, shared_phrase_buf); } else if (PHRASE_ENABLED (our_mission_was_secret)) Response (our_mission_was_secret, RevealSelf); else { if (GET_GAME_STATE (MOONBASE_DESTROYED) == 0) Response (we_are_here_to_help, TellMoonBase); else Response (we_are_here_to_help, BaseDestroyed); } } } }
static void DoTransaction (RESPONSE_REF R) { if (PLAYER_SAID (R, sell_maidens)) { SET_GAME_STATE (MAIDENS_ON_SHIP, 0); } else if (PLAYER_SAID (R, sell_fragments)) { BYTE num_frags; if (GET_GAME_STATE (EGG_CASE0_ON_SHIP)) { SET_GAME_STATE (EGG_CASE0_ON_SHIP, 0); } else if (GET_GAME_STATE (EGG_CASE1_ON_SHIP)) { SET_GAME_STATE (EGG_CASE1_ON_SHIP, 0); } else if (GET_GAME_STATE (EGG_CASE2_ON_SHIP)) { SET_GAME_STATE (EGG_CASE2_ON_SHIP, 0); } num_frags = GET_GAME_STATE (FRAGMENTS_BOUGHT) + 1; SET_GAME_STATE (FRAGMENTS_BOUGHT, num_frags); } else if (PLAYER_SAID (R, sell_caster)) { SET_GAME_STATE (BURV_BROADCASTERS_ON_SHIP, 0); } else if (PLAYER_SAID (R, sell_spawner)) { SET_GAME_STATE (PORTAL_SPAWNER_ON_SHIP, 0); } if (!GET_GAME_STATE (ROSY_SPHERE) && GET_GAME_STATE (ROSY_SPHERE_ON_SHIP)) { SET_GAME_STATE (ROSY_SPHERE, 1); } else { BYTE trade_gas; BYTE ship_slots, ships_to_trade; trade_gas = 0; ships_to_trade = 0; ship_slots = ActivateStarShip (DRUUGE_SHIP, FEASIBILITY_STUDY); if (PLAYER_SAID (R, sell_maidens)) { NPCPhrase (BOUGHT_MAIDENS); ships_to_trade = 6; } else if (PLAYER_SAID (R, sell_fragments)) { NPCPhrase (BOUGHT_FRAGMENTS); ships_to_trade = 1; } else if (PLAYER_SAID (R, sell_caster)) { NPCPhrase (BOUGHT_CASTER); ships_to_trade = 0; trade_gas = 1; } else if (PLAYER_SAID (R, sell_spawner)) { NPCPhrase (BOUGHT_SPAWNER); ships_to_trade = 3; trade_gas = 1; } NPCPhrase (YOU_GET); if (ships_to_trade) { ActivateStarShip (DRUUGE_SHIP, ships_to_trade); if (ship_slots >= ships_to_trade) NPCPhrase (DEAL_FOR_STATED_SHIPS); else if (ship_slots == 0) NPCPhrase (DEAL_FOR_NO_SHIPS); else NPCPhrase (DEAL_FOR_LESS_SHIPS); if (trade_gas) NPCPhrase (YOU_ALSO_GET); } if (trade_gas) { BYTE slot; COUNT f; DWORD capacity; capacity = FUEL_RESERVE; slot = NUM_MODULE_SLOTS - 1; do { if (GLOBAL_SIS (ModuleSlots[slot]) == FUEL_TANK || GLOBAL_SIS (ModuleSlots[slot]) == HIGHEFF_FUELSYS) { COUNT volume; volume = GLOBAL_SIS (ModuleSlots[slot]) == FUEL_TANK ? FUEL_TANK_CAPACITY : HEFUEL_TANK_CAPACITY; capacity += volume; } } while (slot--); capacity -= GLOBAL_SIS (FuelOnBoard); f = (COUNT)((capacity + (FUEL_TANK_SCALE >> 1)) / FUEL_TANK_SCALE); LockMutex (GraphicsLock); while (capacity > 0x3FFFL) { DeltaSISGauges (0, 0x3FFF, 0); capacity -= 0x3FFF; } DeltaSISGauges (0, (SIZE)capacity, 0); UnlockMutex (GraphicsLock); NPCPhrase (FUEL0); NPCPhrase (-(int)f); NPCPhrase (FUEL1); if (f >= 250) NPCPhrase (HIDEOUS_DEAL); else if (f >= 100) NPCPhrase (BAD_DEAL); else if (f >= 50) NPCPhrase (FAIR_DEAL); else if (f >= 10) NPCPhrase (GOOD_DEAL); else NPCPhrase (FINE_DEAL); } } }
static void UrquanHypno (RESPONSE_REF R) { if (GET_GAME_STATE (URQUAN_HYPNO_VISITS) == 0) { if (R == 0) NPCPhrase (INIT_URQUAN_WAKE_UP); else if (PLAYER_SAID (R, where_am_i)) { NPCPhrase (YOU_ARE_HERE); DISABLE_PHRASE (where_am_i); } else if (PLAYER_SAID (R, why_does_my_head_hurt)) { NPCPhrase (HURTS_BECAUSE); DISABLE_PHRASE (why_does_my_head_hurt); } else if (PLAYER_SAID (R, what_about_2_weeks)) { NPCPhrase (ABOUT_2_WEEKS); DISABLE_PHRASE (what_about_2_weeks); } if (PHRASE_ENABLED (where_am_i)) Response (where_am_i, UrquanHypno); if (PHRASE_ENABLED (why_does_my_head_hurt)) Response (why_does_my_head_hurt, UrquanHypno); if (PHRASE_ENABLED (what_about_2_weeks)) Response (what_about_2_weeks, UrquanHypno); Response (compulsion, MentionCompulsion); Response (bye_init_hypno, CombatIsInevitable); } else { if (R == 0) NPCPhrase (SUBSEQUENT_URQUAN_WAKE_UP); else if (PLAYER_SAID (R, uh_oh)) { NPCPhrase (NO_UH_OH); DISABLE_PHRASE (uh_oh); } else if (PLAYER_SAID (R, stop_meeting)) { NPCPhrase (NO_STOP_MEETING); DISABLE_PHRASE (stop_meeting); } if (PHRASE_ENABLED (uh_oh)) Response (uh_oh, UrquanHypno); if (PHRASE_ENABLED (stop_meeting)) Response (stop_meeting, UrquanHypno); if (!GET_GAME_STATE (MENTIONED_PET_COMPULSION)) { Response (compulsion, MentionCompulsion); } Response (bye_sub_hypno, CombatIsInevitable); } }
static void Intro (void) { BYTE NumVisits; if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { NPCPhrase (OUT_TAKES); SET_GAME_STATE (BATTLE_SEGUE, 0); return; } if (GET_GAME_STATE (DRUUGE_MANNER)) { if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { NumVisits = GET_GAME_STATE (DRUUGE_HOME_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HSTL_TRADE_WORLD_HELLO_1); break; case 1: NPCPhrase (HSTL_TRADE_WORLD_HELLO_2); --NumVisits; break; } SET_GAME_STATE (DRUUGE_HOME_VISITS, NumVisits); } else { NumVisits = GET_GAME_STATE (DRUUGE_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HOSTILE_SPACE_HELLO_1); break; case 1: NPCPhrase (HOSTILE_SPACE_HELLO_2); --NumVisits; break; } SET_GAME_STATE (DRUUGE_VISITS, NumVisits); } SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { { NumVisits = GET_GAME_STATE (DRUUGE_HOME_VISITS); switch (NumVisits++) { case 0: NPCPhrase (INITIAL_TRADE_WORLD_HELLO); break; case 1: NPCPhrase (SSQ_TRADE_WORLD_HELLO_1); break; case 2: NPCPhrase (SSQ_TRADE_WORLD_HELLO_2); break; case 3: NPCPhrase (SSQ_TRADE_WORLD_HELLO_3); break; case 4: NPCPhrase (SSQ_TRADE_WORLD_HELLO_4); --NumVisits; break; } SET_GAME_STATE (DRUUGE_HOME_VISITS, NumVisits); } if (GET_GAME_STATE (ATTACKED_DRUUGE) && !GET_GAME_STATE (DRUUGE_DISCLAIMER)) { // There is no HOSTILE_TRADE voice track that we know of // so this is currently disabled //NPCPhrase (HOSTILE_TRADE); SET_GAME_STATE (DRUUGE_DISCLAIMER, 1); } if (GET_GAME_STATE (MAIDENS_ON_SHIP) && !GET_GAME_STATE (SCANNED_MAIDENS)) { NPCPhrase (SCAN_MAIDENS); SET_GAME_STATE (SCANNED_MAIDENS, 1); } if ((GET_GAME_STATE (EGG_CASE0_ON_SHIP) || GET_GAME_STATE (EGG_CASE1_ON_SHIP) || GET_GAME_STATE (EGG_CASE2_ON_SHIP)) && !GET_GAME_STATE (SCANNED_FRAGMENTS)) { if (GET_GAME_STATE (FRAGMENTS_BOUGHT) < 2) NPCPhrase (SCAN_FRAGMENTS); else NPCPhrase (ENOUGH_FRAGMENTS); SET_GAME_STATE (SCANNED_FRAGMENTS, 1); } if (GET_GAME_STATE (BURV_BROADCASTERS_ON_SHIP) && !GET_GAME_STATE (SCANNED_CASTER)) { NPCPhrase (SCAN_DRUUGE_CASTER); SET_GAME_STATE (SCANNED_CASTER, 1); } if (GET_GAME_STATE (PORTAL_SPAWNER_ON_SHIP) && !GET_GAME_STATE (SCANNED_SPAWNER)) { NPCPhrase (SCAN_ARILOU_SPAWNER); SET_GAME_STATE (SCANNED_SPAWNER, 1); } TradeWorld ((RESPONSE_REF)0); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 6)) { if (GET_GAME_STATE (BOMB_VISITS)) NPCPhrase (SUBSEQ_BOMB_WORLD_HELLO); else { NPCPhrase (INIT_BOMB_WORLD_HELLO); SET_GAME_STATE (BOMB_VISITS, 1); } BombAmbush ((RESPONSE_REF)0); } else if (GET_GAME_STATE (ATTACKED_DRUUGE)) { NumVisits = GET_GAME_STATE (DRUUGE_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HOSTILE_SPACE_HELLO_1); break; case 1: NPCPhrase (HOSTILE_SPACE_HELLO_2); --NumVisits; break; } SET_GAME_STATE (DRUUGE_VISITS, NumVisits); SET_GAME_STATE (BATTLE_SEGUE, 1); } else { NumVisits = 0; if (GetHeadLink (&GLOBAL (built_ship_q)) == 0) { for (NumVisits = 0; NumVisits < NUM_MODULE_SLOTS; ++NumVisits) { BYTE which_module; which_module = GLOBAL_SIS (ModuleSlots[NumVisits]); if (which_module >= GUN_WEAPON && which_module <= CANNON_WEAPON) { NumVisits = 0; break; } } } if (NumVisits) { NumVisits = GET_GAME_STATE (DRUUGE_SALVAGE); switch (NumVisits++) { case 0: NPCPhrase (SALVAGE_YOUR_SHIP_1); break; case 1: NPCPhrase (SALVAGE_YOUR_SHIP_2); --NumVisits; break; } SET_GAME_STATE (DRUUGE_SALVAGE, NumVisits); SET_GAME_STATE (BATTLE_SEGUE, 1); AttemptedSalvage = TRUE; } else { NumVisits = GET_GAME_STATE (DRUUGE_VISITS); switch (NumVisits++) { case 0: NPCPhrase (INIT_SPACE_HELLO); break; case 1: NPCPhrase (SUBSEQUENT_SPACE_HELLO); --NumVisits; break; } SET_GAME_STATE (DRUUGE_VISITS, NumVisits); Space ((RESPONSE_REF)0); } } }
static void ExitConversation (RESPONSE_REF R) { SET_GAME_STATE (BATTLE_SEGUE, 0); 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); SET_GAME_STATE (BATTLE_SEGUE, 1); } 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); ActivateStarShip (ORZ_SHIP, SET_ALLIED); } else if (PLAYER_SAID (R, demand_to_land)) { NPCPhrase (NO_DEMAND); SET_GAME_STATE (BATTLE_SEGUE, 1); } 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); SET_GAME_STATE (BATTLE_SEGUE, 1); if (PLAYER_SAID (R, about_andro_3)) { ActivateStarShip (ORZ_SHIP, SET_NOT_ALLIED); ActivateStarShip (ORZ_SHIP, REMOVE_BUILT); } 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); SET_GAME_STATE (BATTLE_SEGUE, 1); break; case 7: --NumVisits; default: NPCPhrase (INSULTED_4); SET_GAME_STATE (BATTLE_SEGUE, 1); break; } SET_GAME_STATE (ORZ_PERSONAL_INFO, NumVisits); } }
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); SET_GAME_STATE (BATTLE_SEGUE, 1); return; } else if (PLAYER_SAID (R, arilou_told_us)) { NPCPhrase (THEN_DIE); SET_GAME_STATE (BATTLE_SEGUE, 1); 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 OrzAllied (RESPONSE_REF R) { BYTE NumVisits; if (PLAYER_SAID (R, whats_up_ally)) { NumVisits = GET_GAME_STATE (ORZ_GENERAL_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 (ORZ_GENERAL_INFO, NumVisits); DISABLE_PHRASE (whats_up_ally); } else if (PLAYER_SAID (R, more_about_you)) { NumVisits = GET_GAME_STATE (ORZ_PERSONAL_INFO); switch (NumVisits++) { case 0: NPCPhrase (ABOUT_US_1); break; case 1: NPCPhrase (ABOUT_US_2); break; case 2: NPCPhrase (ABOUT_US_3); break; case 3: NPCPhrase (ABOUT_US_4); --NumVisits; break; } SET_GAME_STATE (ORZ_PERSONAL_INFO, NumVisits); DISABLE_PHRASE (more_about_you); } else if (PLAYER_SAID (R, about_andro_1)) { NPCPhrase (FORGET_ANDRO_1); SET_GAME_STATE (ORZ_ANDRO_STATE, 1); } else if (PLAYER_SAID (R, about_andro_2)) { NPCPhrase (FORGET_ANDRO_2); SET_GAME_STATE (ORZ_ANDRO_STATE, 2); } if (GET_GAME_STATE (ORZ_ANDRO_STATE) == 0) Response (about_andro_1, OrzAllied); else if (GET_GAME_STATE (ORZ_ANDRO_STATE) == 1) Response (about_andro_2, OrzAllied); else { Response (about_andro_3, ExitConversation); } if (PHRASE_ENABLED (whats_up_ally)) Response (whats_up_ally, OrzAllied); if (PHRASE_ENABLED (more_about_you)) Response (more_about_you, OrzAllied); Response (bye_ally, ExitConversation); }
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, Manner; if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { NPCPhrase (OUT_TAKES); SET_GAME_STATE (BATTLE_SEGUE, 0); 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); SET_GAME_STATE (BATTLE_SEGUE, 1); } 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 && ActivateStarShip (ORZ_SHIP, CHECK_ALLIANCE) == 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 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); SET_GAME_STATE (BATTLE_SEGUE, 1); } 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; } SET_GAME_STATE (BATTLE_SEGUE, 1); } 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; } SET_GAME_STATE (BATTLE_SEGUE, 1); } 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); SET_GAME_STATE (BATTLE_SEGUE, 0); } } }
static DeviceStatus InvokeDevice (BYTE which_device) { BYTE val; switch (which_device) { case ROSY_SPHERE_DEVICE: val = GET_GAME_STATE (ULTRON_CONDITION); if (val) { SET_GAME_STATE (ULTRON_CONDITION, val + 1); SET_GAME_STATE (ROSY_SPHERE_ON_SHIP, 0); SET_GAME_STATE (DISCUSSED_ULTRON, 0); SET_GAME_STATE (SUPOX_ULTRON_HELP, 0); return DEVICE_SUCCESS; } break; case ARTIFACT_2_DEVICE: break; case ARTIFACT_3_DEVICE: break; case SUN_EFFICIENCY_DEVICE: if (LOBYTE (GLOBAL (CurrentActivity)) == IN_INTERPLANETARY && playerInPlanetOrbit ()) { PlayMenuSound (MENU_SOUND_INVOKED); SleepThreadUntil (FadeScreen (FadeAllToWhite, ONE_SECOND * 1) + (ONE_SECOND * 2)); if (CurStarDescPtr->Index != CHMMR_DEFINED || !matchWorld (pSolarSysState, pSolarSysState->pOrbitalDesc, 1, MATCH_PLANET)) { FadeScreen (FadeAllToColor, ONE_SECOND * 2); } else { SET_GAME_STATE (CHMMR_EMERGING, 1); EncounterGroup = 0; GLOBAL (CurrentActivity) |= START_ENCOUNTER; PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); CloneShipFragment (CHMMR_SHIP, &GLOBAL (npc_built_ship_q), 0); } return DEVICE_SUCCESS_NO_SOUND; } break; case UTWIG_BOMB_DEVICE: SET_GAME_STATE (UTWIG_BOMB, 0); GLOBAL (CurrentActivity) &= ~IN_BATTLE; GLOBAL_SIS (CrewEnlisted) = (COUNT)~0; return DEVICE_SUCCESS; case ULTRON_0_DEVICE: break; case ULTRON_1_DEVICE: break; case ULTRON_2_DEVICE: break; case ULTRON_3_DEVICE: break; case MAIDENS_DEVICE: break; case TALKING_PET_DEVICE: NextActivity |= CHECK_LOAD; /* fake a load game */ GLOBAL (CurrentActivity) |= START_ENCOUNTER; SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 0); if (inHQSpace ()) { if (GetHeadEncounter ()) { SET_GAME_STATE (SHIP_TO_COMPEL, 1); } GLOBAL (CurrentActivity) &= ~IN_BATTLE; SaveSisHyperState (); } else { EncounterGroup = 0; if (GetHeadLink (&GLOBAL (ip_group_q))) { SET_GAME_STATE (SHIP_TO_COMPEL, 1); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); } if (CurStarDescPtr->Index == SAMATRA_DEFINED) { SET_GAME_STATE (READY_TO_CONFUSE_URQUAN, 1); } if (playerInPlanetOrbit ()) SaveSolarSysLocation (); } return DEVICE_SUCCESS; case AQUA_HELIX_DEVICE: val = GET_GAME_STATE (ULTRON_CONDITION); if (val) { SET_GAME_STATE (ULTRON_CONDITION, val + 1); SET_GAME_STATE (AQUA_HELIX_ON_SHIP, 0); SET_GAME_STATE (DISCUSSED_ULTRON, 0); SET_GAME_STATE (SUPOX_ULTRON_HELP, 0); return DEVICE_SUCCESS; } break; case CLEAR_SPINDLE_DEVICE: val = GET_GAME_STATE (ULTRON_CONDITION); if (val) { SET_GAME_STATE (ULTRON_CONDITION, val + 1); SET_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 0); SET_GAME_STATE (DISCUSSED_ULTRON, 0); SET_GAME_STATE (SUPOX_ULTRON_HELP, 0); return DEVICE_SUCCESS; } break; case UMGAH_HYPERWAVE_DEVICE: case BURVIX_HYPERWAVE_DEVICE: if (UseCaster ()) return DEVICE_SUCCESS; break; case TAALO_PROTECTOR_DEVICE: break; case EGG_CASING0_DEVICE: case EGG_CASING1_DEVICE: case EGG_CASING2_DEVICE: break; case SYREEN_SHUTTLE_DEVICE: break; case VUX_BEAST_DEVICE: break; case DESTRUCT_CODE_DEVICE: break; case PORTAL_SPAWNER_DEVICE: #define PORTAL_FUEL_COST (10 * FUEL_TANK_SCALE) if (inHyperSpace () && GLOBAL_SIS (FuelOnBoard) >= PORTAL_FUEL_COST) { /* No DeltaSISGauges because the flagship picture * is currently obscured. */ if (!optInfiniteFuel) GLOBAL_SIS (FuelOnBoard) -= PORTAL_FUEL_COST; SET_GAME_STATE (PORTAL_COUNTER, 1); return DEVICE_SUCCESS; } break; case URQUAN_WARP_DEVICE: break; case LUNAR_BASE_DEVICE: break; } return DEVICE_FAILURE; }
static void GodsSpeak (RESPONSE_REF R) { BYTE NumVisits; if (R == 0) { if (GET_GAME_STATE (ILWRATH_FIGHT_THRADDASH)) NPCPhrase (GLORIOUS_WORSHIP); else if (GET_GAME_STATE (ILWRATH_DECEIVED)) NPCPhrase (ON_WAY); else { NumVisits = GET_GAME_STATE (ILWRATH_GODS_SPOKEN); switch (NumVisits++) { case 0: NPCPhrase (ILWRATH_BELIEVE); break; case 1: NPCPhrase (GODS_RETURN_1); break; case 2: NPCPhrase (GODS_RETURN_2); break; case 3: NPCPhrase (GODS_RETURN_3); --NumVisits; break; } SET_GAME_STATE (ILWRATH_GODS_SPOKEN, NumVisits); } } else if (PLAYER_SAID (R, go_kill_thraddash)) { NPCPhrase (OK_KILL_THRADDASH); SET_GAME_STATE (ILWRATH_DECEIVED, 1); AddEvent (RELATIVE_EVENT, 0, 0, 0, ADVANCE_ILWRATH_MISSION); } else if (PLAYER_SAID (R, worship_us)) { NumVisits = GET_GAME_STATE (ILWRATH_WORSHIP); switch (NumVisits++) { case 0: NPCPhrase (WE_WORSHIP_1); break; case 1: NPCPhrase (WE_WORSHIP_2); break; case 2: NPCPhrase (WE_WORSHIP_3); --NumVisits; break; } SET_GAME_STATE (ILWRATH_WORSHIP, NumVisits); DISABLE_PHRASE (worship_us); } else if (PLAYER_SAID (R, enough_orders)) NPCPhrase (NEVER_ENOUGH); if (!GET_GAME_STATE (ILWRATH_DECEIVED)) Response (go_kill_thraddash, GodsSpeak); if (PHRASE_ENABLED (worship_us)) Response (worship_us, GodsSpeak); if (PHRASE_ENABLED (other_divine_orders)) { Response (other_divine_orders, GodsOrder); } Response (bye_gods, CombatIsInevitable); }