static void ExitConversation (RESPONSE_REF Response) { SET_GAME_STATE (BATTLE_SEGUE, 0); if (PLAYER_SAID (Response, bye_ally_space)) NPCPhrase (GOODBYE_ALLY_SPACE); else if (PLAYER_SAID (Response, bye_friendly_space)) NPCPhrase (GOODBYE_FRIENDLY_SPACE); else if (PLAYER_SAID (Response, part_in_peace)) NPCPhrase (KEEP_IT_SECRET); else if (PLAYER_SAID (Response, we_sorry_space)) NPCPhrase (APOLOGIZE_AT_HOMEWORLD); else if (PLAYER_SAID (Response, give_info_space)) NPCPhrase (HERES_SOME_INFO); else if (PLAYER_SAID (Response, bye_angry_space)) NPCPhrase (GOODBYE_ANGRY_SPACE); else if (PLAYER_SAID (Response, attack_you_now)) { NPCPhrase (YIPES); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (PLAYER_SAID (Response, we_fight_again_space)) { NPCPhrase (OK_FIGHT_AGAIN_SPACE); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (PLAYER_SAID (Response, die_slugboy) || PLAYER_SAID (Response, we_fight_1) || PLAYER_SAID (Response, we_fight_2) || PLAYER_SAID (Response, pay_for_crimes) || PLAYER_SAID (Response, tell_me_coordinates) || PLAYER_SAID (Response, changed_mind)) { if (PLAYER_SAID (Response, tell_me_coordinates)) NPCPhrase (FAKE_COORDINATES); NPCPhrase (OK_WE_FIGHT_AT_PLUTO); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (PLAYER_SAID (Response, join_us)) { if (ActivateStarShip (SPATHI_SHIP, FEASIBILITY_STUDY) == 0) NPCPhrase (TOO_SCARY); else { NPCPhrase (WILL_JOIN); AlienTalkSegue ((COUNT)~0); ActivateStarShip (SPATHI_SHIP, 1); /* Make the Eluder escort captained by Fwiffo alone */ SetEscortCrewComplement (SPATHI_SHIP, 1, NAME_OFFSET + NUM_CAPTAINS_NAMES); } } }
static bool GenerateZoqFotPik_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { if (ActivateStarShip (ZOQFOTPIK_SHIP, SPHERE_TRACKING)) { PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); if (GET_GAME_STATE (ZOQFOT_DISTRESS)) { CloneShipFragment (BLACK_URQUAN_SHIP, &GLOBAL (npc_built_ship_q), 0); GLOBAL (CurrentActivity) |= START_INTERPLANETARY; SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7); InitCommunication (BLACKURQ_CONVERSATION); if (GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD)) return true; if (GetHeadLink (&GLOBAL (npc_built_ship_q))) { GLOBAL (CurrentActivity) &= ~START_INTERPLANETARY; ReinitQueue (&GLOBAL (npc_built_ship_q)); GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); return true; } } CloneShipFragment (ZOQFOTPIK_SHIP, &GLOBAL (npc_built_ship_q), INFINITE_FLEET); GLOBAL (CurrentActivity) |= START_INTERPLANETARY; SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7); InitCommunication (ZOQFOTPIK_CONVERSATION); if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) { GLOBAL (CurrentActivity) &= ~START_INTERPLANETARY; ReinitQueue (&GLOBAL (npc_built_ship_q)); GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); } return true; } LoadStdLanderFont (&solarSys->SysInfo.PlanetInfo); solarSys->PlanetSideFrame[1] = CaptureDrawable (LoadGraphic (RUINS_MASK_PMAP_ANIM)); solarSys->SysInfo.PlanetInfo.DiscoveryString = CaptureStringTable (LoadStringTable (RUINS_STRTAB)); } GenerateDefault_generateOrbital (solarSys, world); return true; }
static void CombatIsInevitable (RESPONSE_REF R) { SET_GAME_STATE (BATTLE_SEGUE, 1); if (PLAYER_SAID (R, bye_zombie)) { NPCPhrase (GOODBYE_ZOMBIE); SET_GAME_STATE (BATTLE_SEGUE, 0); } else if (PLAYER_SAID (R, bye_pre_zombie)) NPCPhrase (GOODBYE_PRE_ZOMBIE); else if (PLAYER_SAID (R, can_we_be_friends)) { NPCPhrase (SURE_FRIENDS); SET_GAME_STATE (UMGAH_MENTIONED_TRICKS, 1); } else if (PLAYER_SAID (R, evil_blobbies_give_up)) { NPCPhrase (NOT_EVIL_BLOBBIES); SET_GAME_STATE (UMGAH_EVIL_BLOBBIES, 1); } else if (PLAYER_SAID (R, evil_blobbies_must_die)) NPCPhrase (OH_NO_WE_WONT); else if (PLAYER_SAID (R, threat)) NPCPhrase (NO_THREAT); else if (PLAYER_SAID (R, dont_believe)) { NPCPhrase (THEN_DIE); SET_GAME_STATE (KNOW_UMGAH_ZOMBIES, 1); SET_GAME_STATE (UMGAH_VISITS, 0); } else if (PLAYER_SAID (R, bye_unknown)) { NPCPhrase (GOODBYE_UNKNOWN); SET_GAME_STATE (BATTLE_SEGUE, 0); } else if (PLAYER_SAID (R, bye_post_zombie)) { NPCPhrase (FUNNY_IDEA); AlienTalkSegue ((COUNT)~0); ActivateStarShip (UMGAH_SHIP, 4); SET_GAME_STATE (UMGAH_HOSTILE, 1); } }
static void ExitConversation (RESPONSE_REF R) { SET_GAME_STATE (BATTLE_SEGUE, 0); if (PLAYER_SAID (R, bye_neutral)) NPCPhrase (GOODBYE_NEUTRAL); else if (PLAYER_SAID (R, what_do_i_do_now)) NPCPhrase (FIX_IT); else if (PLAYER_SAID (R, thanks_now_we_eat_you)) { NPCPhrase (HIDEOUS_MONSTERS); SET_GAME_STATE (SUPOX_HOSTILE, 1); SET_GAME_STATE (SUPOX_HOME_VISITS, 0); SET_GAME_STATE (SUPOX_VISITS, 0); } 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, can_you_help)) { NPCPhrase (HOW_HELP); if (ActivateStarShip (SUPOX_SHIP, FEASIBILITY_STUDY) == 0) NPCPhrase (DONT_NEED); else { NPCPhrase (HAVE_4_SHIPS); AlienTalkSegue ((COUNT)~0); ActivateStarShip (SUPOX_SHIP, 4); } } }
static bool GenerateIlwrath_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) { if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { if (ActivateStarShip (ILWRATH_SHIP, SPHERE_TRACKING)) { NotifyOthers (ILWRATH_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); CloneShipFragment (ILWRATH_SHIP, &GLOBAL (npc_built_ship_q), INFINITE_FLEET); GLOBAL (CurrentActivity) |= START_INTERPLANETARY; SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7); InitCommunication (ILWRATH_CONVERSATION); if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) { GLOBAL (CurrentActivity) &= ~START_INTERPLANETARY; ReinitQueue (&GLOBAL (npc_built_ship_q)); GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); } return true; } else { LoadStdLanderFont (&solarSys->SysInfo.PlanetInfo); solarSys->PlanetSideFrame[1] = CaptureDrawable ( LoadGraphic (RUINS_MASK_PMAP_ANIM)); solarSys->SysInfo.PlanetInfo.DiscoveryString = CaptureStringTable (LoadStringTable (RUINS_STRTAB)); } } GenerateDefault_generateOrbital (solarSys, world); if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { solarSys->SysInfo.PlanetInfo.Weather = 2; solarSys->SysInfo.PlanetInfo.Tectonics = 3; } return true; }
static void PrepareShip (void) { #define MAX_PKUNK_SHIPS 4 if (ActivateStarShip (PKUNK_SHIP, MAX_PKUNK_SHIPS)) { BYTE mi, di, yi; mi = GLOBAL (GameClock.month_index); SET_GAME_STATE (PKUNK_SHIP_MONTH, mi); if ((di = GLOBAL (GameClock.day_index)) > 28) di = 28; SET_GAME_STATE (PKUNK_SHIP_DAY, di); yi = (BYTE)(GLOBAL (GameClock.year_index) - START_YEAR) + 1; SET_GAME_STATE (PKUNK_SHIP_YEAR, yi); } }
static void StartRevolt (RESPONSE_REF R) { if (PLAYER_SAID (R, shofixti_alive_1)) { NPCPhrase (SEND_HIM_OVER_1); SET_GAME_STATE (YEHAT_REBEL_TOLD_PKUNK, 1); } else if (PLAYER_SAID (R, shofixti_alive_2)) NPCPhrase (SEND_HIM_OVER_2); if (ActivateStarShip (SHOFIXTI_SHIP, ESCORTING_FLAGSHIP)) Response (ok_send, ExitConversation); else Response (not_here, ExitConversation); Response (not_send, ExitConversation); }
static void ExitConversation (RESPONSE_REF R) { SET_GAME_STATE (BATTLE_SEGUE, 0); 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); SET_GAME_STATE (BATTLE_SEGUE, 1); } 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); SET_GAME_STATE (BATTLE_SEGUE, 1); } break; case 1: if (PLAYER_SAID (R, got_ultron)) NPCPhrase (SICK_TRICK_2); else { NPCPhrase (TRICKED_US_2); SET_GAME_STATE (BATTLE_SEGUE, 1); } 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); ActivateStarShip (UTWIG_SHIP, SET_ALLIED); ActivateStarShip (SUPOX_SHIP, SET_ALLIED); } } } else if (PLAYER_SAID (R, can_you_help)) { NPCPhrase (HOW_HELP); if (ActivateStarShip (UTWIG_SHIP, FEASIBILITY_STUDY) == 0) NPCPhrase (DONT_NEED); else { NPCPhrase (HAVE_4_SHIPS); AlienTalkSegue ((COUNT)~0); ActivateStarShip (UTWIG_SHIP, 4); } } }
static bool GenerateUtwig_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) { if ((CurStarDescPtr->Index == UTWIG_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) || (CurStarDescPtr->Index == BOMB_DEFINED && matchWorld (solarSys, world, 5, 1) && !GET_GAME_STATE (UTWIG_BOMB))) { if ((CurStarDescPtr->Index == UTWIG_DEFINED || !GET_GAME_STATE (UTWIG_HAVE_ULTRON)) && ActivateStarShip (UTWIG_SHIP, SPHERE_TRACKING)) { NotifyOthers (UTWIG_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); CloneShipFragment (UTWIG_SHIP, &GLOBAL (npc_built_ship_q), INFINITE_FLEET); GLOBAL (CurrentActivity) |= START_INTERPLANETARY; if (CurStarDescPtr->Index == UTWIG_DEFINED) { SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7); } else { SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 6); } InitCommunication (UTWIG_CONVERSATION); if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) { GLOBAL (CurrentActivity) &= ~START_INTERPLANETARY; ReinitQueue (&GLOBAL (npc_built_ship_q)); GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); } return true; } if (CurStarDescPtr->Index == BOMB_DEFINED && !GET_GAME_STATE (BOMB_UNPROTECTED) && ActivateStarShip (DRUUGE_SHIP, SPHERE_TRACKING)) { COUNT i; PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); for (i = 0; i < 5; ++i) { CloneShipFragment (DRUUGE_SHIP, &GLOBAL (npc_built_ship_q), 0); } GLOBAL (CurrentActivity) |= START_INTERPLANETARY; SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 6); InitCommunication (DRUUGE_CONVERSATION); if (GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD)) return true; { BOOLEAN DruugeSurvivors; DruugeSurvivors = GetHeadLink (&GLOBAL (npc_built_ship_q)) != 0; GLOBAL (CurrentActivity) &= ~START_INTERPLANETARY; ReinitQueue (&GLOBAL (npc_built_ship_q)); GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); if (DruugeSurvivors) return true; LockMutex (GraphicsLock); RepairSISBorder (); UnlockMutex (GraphicsLock); SET_GAME_STATE (BOMB_UNPROTECTED, 1); } } if (CurStarDescPtr->Index == BOMB_DEFINED) { LoadStdLanderFont (&solarSys->SysInfo.PlanetInfo); solarSys->PlanetSideFrame[1] = CaptureDrawable (LoadGraphic (BOMB_MASK_PMAP_ANIM)); solarSys->SysInfo.PlanetInfo.DiscoveryString = CaptureStringTable (LoadStringTable (BOMB_STRTAB)); } else { LoadStdLanderFont (&solarSys->SysInfo.PlanetInfo); solarSys->PlanetSideFrame[1] = CaptureDrawable (LoadGraphic (RUINS_MASK_PMAP_ANIM)); solarSys->SysInfo.PlanetInfo.DiscoveryString = CaptureStringTable (LoadStringTable (RUINS_STRTAB)); } } GenerateDefault_generateOrbital (solarSys, world); if (CurStarDescPtr->Index == UTWIG_DEFINED && matchWorld (solarSys, world, 0, MATCH_PLANET)) { solarSys->SysInfo.PlanetInfo.Weather = 1; solarSys->SysInfo.PlanetInfo.Tectonics = 1; } return true; }
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 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 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 (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))) { SET_GAME_STATE (BATTLE_SEGUE, 1); } else { Response (hey_wait_got_ultron, ExitConversation); } } else if (ActivateStarShip (UTWIG_SHIP, CHECK_ALLIANCE) == 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 bool GenerateChmmr_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) { if (matchWorld (solarSys, world, 1, MATCH_PLANET)) { if (GET_GAME_STATE (CHMMR_UNLEASHED)) { SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7); InitCommunication (CHMMR_CONVERSATION); if (GET_GAME_STATE (CHMMR_BOMB_STATE) == 2) { GLOBAL (CurrentActivity) |= END_INTERPLANETARY; } return true; } else if (GET_GAME_STATE (SUN_DEVICE_ON_SHIP) && !GET_GAME_STATE (ILWRATH_DECEIVED) && ActivateStarShip (ILWRATH_SHIP, SPHERE_TRACKING)) { PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); CloneShipFragment (ILWRATH_SHIP, &GLOBAL (npc_built_ship_q), INFINITE_FLEET); SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 6); GLOBAL (CurrentActivity) |= START_INTERPLANETARY; InitCommunication (ILWRATH_CONVERSATION); if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) { GLOBAL (CurrentActivity) &= ~START_INTERPLANETARY; ReinitQueue (&GLOBAL (npc_built_ship_q)); GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); } return true; } } else if (matchWorld (solarSys, world, 1, 0)) { /* Starbase */ LockMutex (GraphicsLock); LoadStdLanderFont (&solarSys->SysInfo.PlanetInfo); solarSys->SysInfo.PlanetInfo.DiscoveryString = CaptureStringTable (LoadStringTable (CHMMR_BASE_STRTAB)); DoDiscoveryReport (MenuSounds); DestroyStringTable (ReleaseStringTable ( solarSys->SysInfo.PlanetInfo.DiscoveryString)); solarSys->SysInfo.PlanetInfo.DiscoveryString = 0; FreeLanderFont (&solarSys->SysInfo.PlanetInfo); UnlockMutex (GraphicsLock); return true; } GenerateDefault_generateOrbital (solarSys, world); return true; }
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 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 Manner; Manner = GET_GAME_STATE (SPATHI_MANNER); if (GET_GAME_STATE (FOUND_PLUTO_SPATHI) == 1) { join_us_refusals = 0; NPCPhrase (SORRY_ABOUT_THAT); /* if already know password from Melnorme, * but haven't visited Spathiwa yet . . . */ if (GET_GAME_STATE (SPATHI_HOME_VISITS) == 7) { SET_GAME_STATE (KNOW_SPATHI_PASSWORD, 0); SET_GAME_STATE (SPATHI_HOME_VISITS, 0); } Response (identify, SpathiMustGrovel); Response (hi_there, SpathiOnPluto); Response (dont_kill, SpathiOnPluto); Response (we_fight_1, ExitConversation); } else if (Manner == 2) { NPCPhrase (HATE_YOU_FOREVER_SPACE); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (Manner == 1) { BYTE NumVisits; NumVisits = GET_GAME_STATE (SPATHI_VISITS); switch (NumVisits++) { case 0: NPCPhrase (INIT_ANGRY_HELLO_SPACE); break; case 1: NPCPhrase (SUBSEQUENT_ANGRY_HELLO_SPACE); --NumVisits; break; } SET_GAME_STATE (SPATHI_VISITS, NumVisits); Response (give_info_space, ExitConversation); Response (we_sorry_space,ExitConversation); Response (we_fight_again_space, ExitConversation); Response (bye_angry_space, ExitConversation); } else if (ActivateStarShip (SPATHI_SHIP, CHECK_ALLIANCE) == GOOD_GUY) { SpathiAllies ((RESPONSE_REF)0); } else if (GET_GAME_STATE (SPATHI_QUEST)) { SpathiFriendly ((RESPONSE_REF)0); } else { SpathiNeutral ((RESPONSE_REF)0); } }
void GeneratePkunk (BYTE control) { switch (control) { case GENERATE_ENERGY: if (pSolarSysState->pOrbitalDesc == &pSolarSysState->PlanetDesc[0]) { COUNT i, which_node; DWORD rand_val, old_rand; old_rand = TFB_SeedRandom ( pSolarSysState->SysInfo.PlanetInfo.ScanSeed[ENERGY_SCAN] ); which_node = i = 0; do { rand_val = TFB_Random (); pSolarSysState->SysInfo.PlanetInfo.CurPt.x = (LOBYTE (LOWORD (rand_val)) % (MAP_WIDTH - (8 << 1))) + 8; pSolarSysState->SysInfo.PlanetInfo.CurPt.y = (HIBYTE (LOWORD (rand_val)) % (MAP_HEIGHT - (8 << 1))) + 8; if (!GET_GAME_STATE (CLEAR_SPINDLE)) pSolarSysState->SysInfo.PlanetInfo.CurType = 0; else pSolarSysState->SysInfo.PlanetInfo.CurType = 1; pSolarSysState->SysInfo.PlanetInfo.CurDensity = 0; if (pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN] & (1L << i)) { pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN] &= ~(1L << i); if (!GET_GAME_STATE (CLEAR_SPINDLE)) { ((PPLANETSIDE_DESC)pMenuState->ModuleFrame)->InTransit = TRUE; SET_GAME_STATE (CLEAR_SPINDLE, 1); SET_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 1); } } if (which_node >= pSolarSysState->CurNode && !(pSolarSysState->SysInfo.PlanetInfo.ScanRetrieveMask[ENERGY_SCAN] & (1L << i))) break; ++which_node; } while (++i < 16); pSolarSysState->CurNode = which_node; TFB_SeedRandom (old_rand); break; } pSolarSysState->CurNode = 0; break; case GENERATE_PLANETS: { COUNT angle; GenerateRandomIP (GENERATE_PLANETS); pSolarSysState->PlanetDesc[0].data_index = WATER_WORLD; pSolarSysState->PlanetDesc[0].NumPlanets = 1; pSolarSysState->PlanetDesc[0].radius = EARTH_RADIUS * 104L / 100; angle = ARCTAN ( pSolarSysState->PlanetDesc[0].location.x, pSolarSysState->PlanetDesc[0].location.y ); pSolarSysState->PlanetDesc[0].location.x = COSINE (angle, pSolarSysState->PlanetDesc[0].radius); pSolarSysState->PlanetDesc[0].location.y = SINE (angle, pSolarSysState->PlanetDesc[0].radius); break; } case GENERATE_ORBITAL: if (pSolarSysState->pOrbitalDesc == &pSolarSysState->PlanetDesc[0]) { if (ActivateStarShip (PKUNK_SHIP, SPHERE_TRACKING)) { NotifyOthers (PKUNK_SHIP, (BYTE)~0); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (npc_built_ship_q)); CloneShipFragment (PKUNK_SHIP, &GLOBAL (npc_built_ship_q), INFINITE_FLEET); pSolarSysState->MenuState.Initialized += 2; GLOBAL (CurrentActivity) |= START_INTERPLANETARY; SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7); InitCommunication (PKUNK_CONVERSATION); pSolarSysState->MenuState.Initialized -= 2; if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) { GLOBAL (CurrentActivity) &= ~START_INTERPLANETARY; ReinitQueue (&GLOBAL (npc_built_ship_q)); GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); } break; } else { LoadStdLanderFont (&pSolarSysState->SysInfo.PlanetInfo); pSolarSysState->PlanetSideFrame[1] = CaptureDrawable ( LoadGraphic (RUINS_MASK_PMAP_ANIM) ); pSolarSysState->SysInfo.PlanetInfo.DiscoveryString = CaptureStringTable ( LoadStringTable (PKUNK_RUINS_STRTAB) ); if (GET_GAME_STATE (CLEAR_SPINDLE)) pSolarSysState->SysInfo.PlanetInfo.DiscoveryString = SetAbsStringTableIndex ( pSolarSysState->SysInfo.PlanetInfo.DiscoveryString, 1 ); } } default: GenerateRandomIP (control); break; } }
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); SET_GAME_STATE (BATTLE_SEGUE, 1); 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; ActivateStarShip (SUPOX_SHIP, SPHERE_TRACKING); 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 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 (SUPOX_HOSTILE)) { NumVisits = GET_GAME_STATE (SUPOX_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HOSTILE_SPACE_HELLO_1); break; case 1: NPCPhrase (HOSTILE_SPACE_HELLO_2); --NumVisits; break; } SET_GAME_STATE (SUPOX_VISITS, NumVisits); SET_GAME_STATE (BATTLE_SEGUE, 0); } else if (ActivateStarShip (SUPOX_SHIP, CHECK_ALLIANCE) & GOOD_GUY) { if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { NumVisits = GET_GAME_STATE (SUPOX_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 (SUPOX_HOME_VISITS, NumVisits); AlliedHome ((RESPONSE_REF)0); } else { NumVisits = GET_GAME_STATE (UTWIG_SUPOX_MISSION); if (NumVisits == 1) { NumVisits = GET_GAME_STATE (SUPOX_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 (SUPOX_VISITS, NumVisits); BeforeKohrAh ((RESPONSE_REF)0); } else if (NumVisits < 5) { NumVisits = GET_GAME_STATE (SUPOX_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 (SUPOX_VISITS, NumVisits); } else { NumVisits = GET_GAME_STATE (SUPOX_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 (SUPOX_VISITS, NumVisits); AfterKohrAh ((RESPONSE_REF)0); } } } else { if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { NumVisits = GET_GAME_STATE (SUPOX_HOME_VISITS); switch (NumVisits++) { case 0: NPCPhrase (NEUTRAL_HOMEWORLD_HELLO_1); break; case 1: NPCPhrase (NEUTRAL_HOMEWORLD_HELLO_2); --NumVisits; break; } SET_GAME_STATE (SUPOX_HOME_VISITS, NumVisits); } else { NumVisits = GET_GAME_STATE (SUPOX_VISITS); switch (NumVisits++) { case 0: NPCPhrase (NEUTRAL_SPACE_HELLO_1); break; case 1: NPCPhrase (NEUTRAL_SPACE_HELLO_2); --NumVisits; break; } SET_GAME_STATE (SUPOX_VISITS, NumVisits); } NeutralSupox ((RESPONSE_REF)0); } }
static void NeutralSupox (RESPONSE_REF R) { BYTE i, LastStack, NumVisits; RESPONSE_REF pStr[3]; LastStack = 0; pStr[0] = pStr[1] = pStr[2] = 0; if (PLAYER_SAID (R, i_am0)) { NPCPhrase (WE_ARE_SUPOX); SET_GAME_STATE (SUPOX_STACK1, 1); DISABLE_PHRASE (i_am0); } else if (PLAYER_SAID (R, my_ship0)) { NPCPhrase (OUR_SHIP); SET_GAME_STATE (SUPOX_STACK1, 2); DISABLE_PHRASE (my_ship0); } else if (PLAYER_SAID (R, from_alliance0)) { NPCPhrase (FROM_SUPOX); SET_GAME_STATE (SUPOX_STACK1, 3); DISABLE_PHRASE (from_alliance0); } else if (PLAYER_SAID (R, are_you_copying)) { NPCPhrase (YEAH_SORRY); SET_GAME_STATE (SUPOX_STACK1, 4); } else if (PLAYER_SAID (R, why_copy)) { NPCPhrase (SYMBIOTS); SET_GAME_STATE (SUPOX_STACK1, 5); } else if (PLAYER_SAID (R, tell_us_of_your_species)) { NPCPhrase (OUR_SPECIES); LastStack = 1; SET_GAME_STATE (SUPOX_STACK2, 1); } else if (PLAYER_SAID (R, plants_arent_intelligent)) { NPCPhrase (PROVES_WERE_SPECIAL); SET_GAME_STATE (SUPOX_STACK2, 2); } else if (PLAYER_SAID (R, anyone_around_here)) { NPCPhrase (UTWIG_NEARBY); LastStack = 2; SET_GAME_STATE (SUPOX_WAR_NEWS, 1); ActivateStarShip (UTWIG_SHIP, SPHERE_TRACKING); } else if (PLAYER_SAID (R, what_relation_to_utwig)) { NPCPhrase (UTWIG_ALLIES); LastStack = 2; SET_GAME_STATE (SUPOX_WAR_NEWS, 1); } else if (PLAYER_SAID (R, whats_wrong_with_utwig)) { NPCPhrase (BROKE_ULTRON); LastStack = 2; SET_GAME_STATE (SUPOX_WAR_NEWS, 2); } else if (PLAYER_SAID (R, whats_ultron)) { NPCPhrase (TAKE_ULTRON); SET_GAME_STATE (SUPOX_WAR_NEWS, 0); SET_GAME_STATE (ULTRON_CONDITION, 1); Response (what_do_i_do_now, ExitConversation); Response (thanks_now_we_eat_you, ExitConversation); return; } else if (PLAYER_SAID (R, got_fixed_ultron)) { NPCPhrase (GOOD_GIVE_TO_UTWIG); SET_GAME_STATE (SUPOX_ULTRON_HELP, 1); } else if (PLAYER_SAID (R, look_i_repaired_lots)) { NPCPhrase (ALMOST_THERE); SET_GAME_STATE (SUPOX_ULTRON_HELP, 1); } else if (PLAYER_SAID (R, look_i_slightly_repaired)) { NPCPhrase (GREAT_DO_MORE); SET_GAME_STATE (SUPOX_ULTRON_HELP, 1); } else if (PLAYER_SAID (R, where_get_repairs)) { NPCPhrase (ANCIENT_RHYME); SET_GAME_STATE (SUPOX_ULTRON_HELP, 1); } switch (GET_GAME_STATE (SUPOX_STACK2)) { case 0: pStr[1] = tell_us_of_your_species; break; case 1: pStr[1] = plants_arent_intelligent; break; } switch (GET_GAME_STATE (SUPOX_STACK1)) { case 0: construct_response (shared_phrase_buf, i_am0, GLOBAL_SIS (CommanderName), i_am1, (UNICODE*)NULL); pStr[0] = i_am0; pStr[1] = 0; break; case 1: construct_response (shared_phrase_buf, my_ship0, GLOBAL_SIS (ShipName), my_ship1, (UNICODE*)NULL); pStr[0] = my_ship0; pStr[1] = 0; break; case 2: { UNICODE buf[ALLIANCE_NAME_BUFSIZE]; GetAllianceName (buf, name_1); construct_response ( shared_phrase_buf, from_alliance0, buf, from_alliance1, (UNICODE*)NULL); } pStr[0] = from_alliance0; pStr[1] = 0; break; case 3: pStr[0] = are_you_copying; pStr[1] = 0; break; case 4: pStr[0] = why_copy; pStr[1] = 0; break; } NumVisits = GET_GAME_STATE (ULTRON_CONDITION); if (NumVisits == 0) { switch (GET_GAME_STATE (SUPOX_WAR_NEWS)) { case 0: if (GET_GAME_STATE (UTWIG_VISITS) || GET_GAME_STATE (UTWIG_HOME_VISITS) || GET_GAME_STATE (BOMB_VISITS)) pStr[2] = what_relation_to_utwig; else pStr[2] = anyone_around_here; break; case 1: pStr[2] = whats_wrong_with_utwig; break; case 2: pStr[2] = whats_ultron; break; } } if (pStr[LastStack]) { if (LastStack != 0 || GET_GAME_STATE (SUPOX_STACK1) > 2) Response (pStr[LastStack], NeutralSupox); else DoResponsePhrase (pStr[LastStack], NeutralSupox, shared_phrase_buf); } for (i = 0; i < 3; ++i) { if (i != LastStack && pStr[i]) { if (i != 0 || GET_GAME_STATE (SUPOX_STACK1) > 2) Response (pStr[i], NeutralSupox); else DoResponsePhrase (pStr[i], NeutralSupox, shared_phrase_buf); } } if (!GET_GAME_STATE (SUPOX_ULTRON_HELP)) { switch (NumVisits) { case 1: Response (where_get_repairs, NeutralSupox); break; case 2: Response (look_i_slightly_repaired, NeutralSupox); break; case 3: Response (look_i_repaired_lots, NeutralSupox); break; case 4: Response (got_fixed_ultron, NeutralSupox); break; } } Response (bye_neutral, ExitConversation); }
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 Intro (void) { BYTE NumVisits; if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { NPCPhrase (OUT_TAKES); SET_GAME_STATE (BATTLE_SEGUE, 0); return; } NumVisits = GET_GAME_STATE (SYREEN_HOME_VISITS); if (GET_GAME_STATE (MYCON_KNOW_AMBUSH)) { switch (NumVisits++) { case 0: NPCPhrase (HELLO_AFTER_AMBUSH_1); ActivateStarShip (SYREEN_SHIP, SET_ALLIED); break; case 1: NPCPhrase (HELLO_AFTER_AMBUSH_2); break; case 2: NPCPhrase (HELLO_AFTER_AMBUSH_3); break; case 3: NPCPhrase (HELLO_AFTER_AMBUSH_3); --NumVisits; break; } AfterAmbush ((RESPONSE_REF)0); } else if (GET_GAME_STATE (MYCON_AMBUSH)) { switch (NumVisits++) { case 0: NPCPhrase (READY_FOR_AMBUSH); --NumVisits; break; } AmbushReady ((RESPONSE_REF)0); } else if (!GET_GAME_STATE (SYREEN_KNOW_ABOUT_MYCON)) { switch (NumVisits++) { case 0: NPCPhrase (HELLO_BEFORE_AMBUSH_1); break; case 1: NPCPhrase (HELLO_BEFORE_AMBUSH_2); break; case 2: NPCPhrase (HELLO_BEFORE_AMBUSH_3); break; case 3: NPCPhrase (HELLO_BEFORE_AMBUSH_4); --NumVisits; break; } if (NumVisits > 1) NormalSyreen ((RESPONSE_REF)0); else { construct_response (shared_phrase_buf, we_are_vindicator0, GLOBAL_SIS (CommanderName), we_are_vindicator1, GLOBAL_SIS (ShipName), we_are_vindicator2, (UNICODE*)NULL); Response (we_are_vice_squad, InitialSyreen); Response (we_are_the_one_for_you_baby, InitialSyreen); DoResponsePhrase (we_are_vindicator0, InitialSyreen, shared_phrase_buf); Response (we_are_impressed, InitialSyreen); } } #ifdef NEVER else if (!GET_GAME_STATE (SYREEN_SHUTTLE)) { switch (NumVisits++) { case 0: NPCPhrase (MUST_ACT); --NumVisits; break; } SyreenShuttle ((RESPONSE_REF)0); } #endif /* NEVER */ else if (GET_GAME_STATE (SHIP_VAULT_UNLOCKED)) { PlanAmbush ((RESPONSE_REF)0); // XXX: PlanAmbush() sets SYREEN_HOME_VISITS=0, but then this value // is immediately reset to NumVisits just below. The intent was to // reset the HELLO stack so that is what we will do here as well. // Note that it is completely redundant because genvault.c resets // SYREEN_HOME_VISITS when it sets SHIP_VAULT_UNLOCKED=1. NumVisits = 0; } else { switch (NumVisits++) { case 0: NPCPhrase (FOUND_VAULT_YET_1); break; case 1: NPCPhrase (FOUND_VAULT_YET_2); --NumVisits; break; } SyreenVault ((RESPONSE_REF)0); } SET_GAME_STATE (SYREEN_HOME_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 bool GenerateVux_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) { if ((matchWorld (solarSys, world, 0, MATCH_PLANET) && (CurStarDescPtr->Index == VUX_DEFINED || (CurStarDescPtr->Index == MAIDENS_DEFINED && !GET_GAME_STATE (ZEX_IS_DEAD)))) && ActivateStarShip (VUX_SHIP, SPHERE_TRACKING)) { NotifyOthers (VUX_SHIP, IPNL_ALL_CLEAR); PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); CloneShipFragment (VUX_SHIP, &GLOBAL (npc_built_ship_q), INFINITE_FLEET); if (CurStarDescPtr->Index == VUX_DEFINED) { SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7); } else { SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 6); } GLOBAL (CurrentActivity) |= START_INTERPLANETARY; InitCommunication (VUX_CONVERSATION); if (GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD)) return true; { GLOBAL (CurrentActivity) &= ~START_INTERPLANETARY; ReinitQueue (&GLOBAL (npc_built_ship_q)); GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); if (CurStarDescPtr->Index == VUX_DEFINED || !GET_GAME_STATE (ZEX_IS_DEAD)) return true; LockMutex (GraphicsLock); RepairSISBorder (); UnlockMutex (GraphicsLock); } } if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { if (CurStarDescPtr->Index == MAIDENS_DEFINED) { if (!GET_GAME_STATE (SHOFIXTI_MAIDENS)) { LoadStdLanderFont (&solarSys->SysInfo.PlanetInfo); solarSys->PlanetSideFrame[1] = CaptureDrawable ( LoadGraphic (MAIDENS_MASK_PMAP_ANIM)); solarSys->SysInfo.PlanetInfo.DiscoveryString = CaptureStringTable ( LoadStringTable (MAIDENS_STRTAB)); } } else if (CurStarDescPtr->Index == VUX_BEAST_DEFINED) { if (!GET_GAME_STATE (VUX_BEAST)) { LoadStdLanderFont (&solarSys->SysInfo.PlanetInfo); solarSys->PlanetSideFrame[1] = 0; solarSys->SysInfo.PlanetInfo.DiscoveryString = CaptureStringTable ( LoadStringTable (BEAST_STRTAB)); } } else { LoadStdLanderFont (&solarSys->SysInfo.PlanetInfo); solarSys->PlanetSideFrame[1] = CaptureDrawable (LoadGraphic (RUINS_MASK_PMAP_ANIM)); solarSys->SysInfo.PlanetInfo.DiscoveryString = CaptureStringTable (LoadStringTable (RUINS_STRTAB)); } } GenerateDefault_generateOrbital (solarSys, world); if (matchWorld (solarSys, world, 0, MATCH_PLANET)) { solarSys->SysInfo.PlanetInfo.Weather = 2; solarSys->SysInfo.PlanetInfo.Tectonics = 0; } return true; }
// Returns TRUE if the broadcaster has been successfully activated, // and FALSE otherwise. static BOOLEAN UseCaster (void) { if (LOBYTE (GLOBAL (CurrentActivity)) == IN_HYPERSPACE) { 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) && ActivateStarShip (ILWRATH_SHIP, SPHERE_TRACKING); // 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 bool GenerateSaMatra_generateOrbital (SOLARSYS_STATE *solarSys, PLANET_DESC *world) { /* Samatra */ if (matchWorld (solarSys, world, 4, 0)) { PutGroupInfo (GROUPS_RANDOM, GROUP_SAVE_IP); ReinitQueue (&GLOBAL (ip_group_q)); assert (CountLinks (&GLOBAL (npc_built_ship_q)) == 0); if (!GET_GAME_STATE (URQUAN_MESSED_UP)) { CloneShipFragment (!GET_GAME_STATE (KOHR_AH_FRENZY) ? URQUAN_SHIP : BLACK_URQUAN_SHIP, &GLOBAL (npc_built_ship_q), INFINITE_FLEET); } else { #define URQUAN_REMNANTS 3 BYTE i; for (i = 0; i < URQUAN_REMNANTS; ++i) { CloneShipFragment (URQUAN_SHIP, &GLOBAL (npc_built_ship_q), 0); CloneShipFragment (BLACK_URQUAN_SHIP, &GLOBAL (npc_built_ship_q), 0); } } GLOBAL (CurrentActivity) |= START_INTERPLANETARY; SET_GAME_STATE (GLOBAL_FLAGS_AND_DATA, 1 << 7); SET_GAME_STATE (URQUAN_PROTECTING_SAMATRA, 1); InitCommunication (URQUAN_CONVERSATION); if (!(GLOBAL (CurrentActivity) & (CHECK_ABORT | CHECK_LOAD))) { BOOLEAN UrquanSurvivors; UrquanSurvivors = GetHeadLink (&GLOBAL (npc_built_ship_q)) != 0; GLOBAL (CurrentActivity) &= ~START_INTERPLANETARY; ReinitQueue (&GLOBAL (npc_built_ship_q)); GetGroupInfo (GROUPS_RANDOM, GROUP_LOAD_IP); if (UrquanSurvivors) { SET_GAME_STATE (URQUAN_PROTECTING_SAMATRA, 0); } else { EncounterGroup = 0; EncounterRace = -1; GLOBAL (CurrentActivity) = IN_LAST_BATTLE | START_ENCOUNTER; if (GET_GAME_STATE (YEHAT_CIVIL_WAR) && ActivateStarShip (YEHAT_SHIP, SPHERE_TRACKING) && ActivateStarShip (YEHAT_REBEL_SHIP, FEASIBILITY_STUDY)) InitCommunication (YEHAT_REBEL_CONVERSATION); } } return true; } GenerateDefault_generateOrbital (solarSys, world); return true; }
static void ExitConversation (RESPONSE_REF R) { SET_GAME_STATE (BATTLE_SEGUE, 0); if (PLAYER_SAID (R, we_attack_again)) { NPCPhrase (WE_FIGHT_AGAIN); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (PLAYER_SAID (R, surrender_or_die)) { NPCPhrase (DEFEND_OURSELVES); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (PLAYER_SAID (R, we_are_vindicator0)) { NPCPhrase (NO_PASSWORD); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (PLAYER_SAID (R, gort_merenga) || PLAYER_SAID (R, guph_florp) || PLAYER_SAID (R, wagngl_fthagn) || PLAYER_SAID (R, pleeese)) { NPCPhrase (WRONG_PASSWORD); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (PLAYER_SAID (R, screw_password)) { NPCPhrase (NO_PASSWORD); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (PLAYER_SAID (R, bye_no_ally_offer)) NPCPhrase (GOODBYE_NO_ALLY_OFFER); else if (PLAYER_SAID (R, bye_angry_spathi)) NPCPhrase (GOODBYE_ANGRY_SPATHI); else if (PLAYER_SAID (R, bye_ally)) NPCPhrase (GOODBYE_ALLY); else if (PLAYER_SAID (R, already_got_them)) { NPCPhrase (EARLY_BIRD_CHECK); SET_GAME_STATE (SPATHI_HOME_VISITS, 0); SET_GAME_STATE (SPATHI_VISITS, 0); SET_GAME_STATE (SPATHI_PARTY, 1); SET_GAME_STATE (SPATHI_MANNER, 3); } else if (PLAYER_SAID (R, too_dangerous)) NPCPhrase (WE_AGREE); else if (PLAYER_SAID (R, think_more)) NPCPhrase (COWARD); else if (PLAYER_SAID (R, i_accept)) { NPCPhrase (AWAIT_RETURN); SET_GAME_STATE (SPATHI_QUEST, 1); SET_GAME_STATE (SPATHI_MANNER, 3); SET_GAME_STATE (SPATHI_VISITS, 0); } else if (PLAYER_SAID (R, do_as_we_say)) { NPCPhrase (DEPART_FOR_EARTH); ActivateStarShip (SPATHI_SHIP, SET_ALLIED); AddEvent (RELATIVE_EVENT, 6, 0, 0, SPATHI_SHIELD_EVENT); SET_GAME_STATE (SPATHI_HOME_VISITS, 0); SET_GAME_STATE (SPATHI_VISITS, 0); } else if (PLAYER_SAID (R, killed_them_all_1)) { NPCPhrase (WILL_CHECK_1); if (!GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED)) { SET_GAME_STATE (LIED_ABOUT_CREATURES, 1); } else { SET_GAME_STATE (SPATHI_HOME_VISITS, 0); SET_GAME_STATE (SPATHI_VISITS, 0); SET_GAME_STATE (SPATHI_PARTY, 1); SET_GAME_STATE (SPATHI_MANNER, 3); } } else if (PLAYER_SAID (R, killed_them_all_2)) { NPCPhrase (WILL_CHECK_2); if (!GET_GAME_STATE (SPATHI_CREATURES_ELIMINATED)) { SET_GAME_STATE (LIED_ABOUT_CREATURES, 2); } else { SET_GAME_STATE (SPATHI_HOME_VISITS, 0); SET_GAME_STATE (SPATHI_VISITS, 0); SET_GAME_STATE (SPATHI_PARTY, 1); SET_GAME_STATE (SPATHI_MANNER, 3); } } else if (PLAYER_SAID (R, bye_before_party)) { NPCPhrase (GOODBYE_BEFORE_PARTY); } else if (PLAYER_SAID (R, bye_from_party_1) || PLAYER_SAID (R, bye_from_party_2) || PLAYER_SAID (R, bye_from_party_3)) { NPCPhrase (GOODBYE_FROM_PARTY); } }
static void ExitConversation (RESPONSE_REF R) { SET_GAME_STATE (BATTLE_SEGUE, 0); if (PLAYER_SAID (R, friendly_bye_space)) NPCPhrase (FRIENDLY_GOODBYE_SPACE); else if (PLAYER_SAID (R, neutral_bye_space)) NPCPhrase (NEUTRAL_GOODBYE_SPACE); else if (PLAYER_SAID (R, bye_angry)) NPCPhrase (GOODBYE_ANGRY); else if (PLAYER_SAID (R, bye_friendly)) NPCPhrase (GOODBYE_FRIENDLY); else if (PLAYER_SAID (R, we_here_to_help) || PLAYER_SAID (R, we_need_help)) { if (PLAYER_SAID (R, we_here_to_help)) NPCPhrase (NEED_HELP); else NPCPhrase (GIVE_HELP); NPCPhrase (ALMOST_ALLIANCE); SET_GAME_STATE (PKUNK_MANNER, 3); SET_GAME_STATE (PKUNK_VISITS, 0); SET_GAME_STATE (PKUNK_HOME_VISITS, 0); SET_GAME_STATE (PKUNK_INFO, 0); AddEvent (RELATIVE_EVENT, 6, 0, 0, ADVANCE_PKUNK_MISSION); if (ActivateStarShip (PKUNK_SHIP, FEASIBILITY_STUDY) == 0) NPCPhrase (INIT_NO_ROOM); else { NPCPhrase (INIT_SHIP_GIFT); AlienTalkSegue ((COUNT)~0); PrepareShip (); } } else if (PLAYER_SAID (R, try_to_be_nicer)) { NPCPhrase (CANT_ASK_FOR_MORE); NPCPhrase (VISIT_OUR_HOMEWORLD); SET_GAME_STATE (PKUNK_MANNER, 3); SET_GAME_STATE (PKUNK_VISITS, 0); SET_GAME_STATE (PKUNK_HOME_VISITS, 0); SET_GAME_STATE (PKUNK_INFO, 0); } else if (PLAYER_SAID (R, must_conquer) || PLAYER_SAID (R, obey)) { if (PLAYER_SAID (R, obey)) NPCPhrase (NO_OBEY); else { NPCPhrase (BAD_IDEA); SET_GAME_STATE (PKUNK_MANNER, 2); } SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (PLAYER_SAID (R, die_idiot_fools)) { NPCPhrase (VERY_WELL); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (PLAYER_SAID (R, suit_yourself)) NPCPhrase (GOODBYE_MIGRATION); else { BYTE ReasonMask; ReasonMask = GET_GAME_STATE (PKUNK_REASONS); if (PLAYER_SAID (R, good_reason_1)) { NPCPhrase (WE_GO_HOME_1); ReasonMask |= GOOD_REASON_1; AddEvent (RELATIVE_EVENT, 0, 0, 0, ADVANCE_PKUNK_MISSION); } else if (PLAYER_SAID (R, good_reason_2)) { NPCPhrase (WE_GO_HOME_2); ReasonMask |= GOOD_REASON_2; AddEvent (RELATIVE_EVENT, 0, 0, 0, ADVANCE_PKUNK_MISSION); } else if (PLAYER_SAID (R, bad_reason_1)) { NPCPhrase (NO_GO_HOME_1); ReasonMask |= BAD_REASON_1; } else if (PLAYER_SAID (R, bad_reason_2)) { NPCPhrase (NO_GO_HOME_2); ReasonMask |= BAD_REASON_2; } SET_GAME_STATE (PKUNK_REASONS, ReasonMask); } }
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 Intro (void) { BYTE NumVisits, Manner; if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { NPCPhrase (OUT_TAKES); SET_GAME_STATE (BATTLE_SEGUE, 0); return; } Manner = GET_GAME_STATE (PKUNK_MANNER); if (Manner == 2) { // Irreparably Pissed off the Pkunk. NumVisits = GET_GAME_STATE (PKUNK_VISITS); switch (NumVisits++) { case 0: NPCPhrase (HATE_YOU_FOREVER_1); break; case 1: NPCPhrase (HATE_YOU_FOREVER_2); break; case 2: NPCPhrase (HATE_YOU_FOREVER_3); break; case 3: NPCPhrase (HATE_YOU_FOREVER_4); --NumVisits; break; } SET_GAME_STATE (PKUNK_VISITS, NumVisits); SET_GAME_STATE (BATTLE_SEGUE, 1); } else if (Manner == 1) { // Bad relations with the Pkunk, but not irreparably. NumVisits = GET_GAME_STATE (PKUNK_VISITS); switch (NumVisits++) { case 0: NPCPhrase (SPIRITUAL_PROBLEMS_1); break; case 1: NPCPhrase (SPIRITUAL_PROBLEMS_2); break; case 2: NPCPhrase (SPIRITUAL_PROBLEMS_3); break; case 3: NPCPhrase (SPIRITUAL_PROBLEMS_4); --NumVisits; break; } SET_GAME_STATE (PKUNK_VISITS, NumVisits); PkunkAngry ((RESPONSE_REF)0); } else if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { // Encountering the Pkunk at their home world. if (!GET_GAME_STATE (CLEAR_SPINDLE)) { NPCPhrase (GIVE_SPINDLE); SET_GAME_STATE (CLEAR_SPINDLE, 1); SET_GAME_STATE (CLEAR_SPINDLE_ON_SHIP, 1); } else if (!GET_GAME_STATE (PKUNK_SENSE_VICTOR) && GLOBAL (GameClock.year_index) > START_YEAR && !GET_GAME_STATE (KOHR_AH_FRENZY)) { NPCPhrase (SENSE_KOHRAH_VICTORY); SET_GAME_STATE (PKUNK_SENSE_VICTOR, 1); } NumVisits = GET_GAME_STATE (PKUNK_HOME_VISITS); if (Manner == 0) { 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; } } else { if (NumVisits && ShipsReady ()) { if (ActivateStarShip (PKUNK_SHIP, FEASIBILITY_STUDY) == 0) NPCPhrase (NO_ROOM); else { NPCPhrase (SHIP_GIFT); PrepareShip (); } } else switch (NumVisits++) { case 0: NPCPhrase (FRIENDLY_HOMEWORLD_HELLO_1); break; case 1: NPCPhrase (FRIENDLY_HOMEWORLD_HELLO_2); break; case 2: NPCPhrase (FRIENDLY_HOMEWORLD_HELLO_3); break; case 3: NPCPhrase (FRIENDLY_HOMEWORLD_HELLO_4); break; case 4: NPCPhrase (FRIENDLY_HOMEWORLD_HELLO_5); break; case 5: NPCPhrase (FRIENDLY_HOMEWORLD_HELLO_6); break; case 6: NPCPhrase (FRIENDLY_HOMEWORLD_HELLO_7); break; case 7: NPCPhrase (FRIENDLY_HOMEWORLD_HELLO_8); --NumVisits; break; } } SET_GAME_STATE (PKUNK_HOME_VISITS, NumVisits); PkunkHome ((RESPONSE_REF)0); } else if ((NumVisits = GET_GAME_STATE (PKUNK_MISSION)) == 0 || !(NumVisits & 1)) { // Encountering a Pkunk ship in space, while they are not // migrating. NumVisits = GET_GAME_STATE (PKUNK_VISITS); if (Manner == 3) { switch (NumVisits++) { case 0: NPCPhrase (FRIENDLY_SPACE_HELLO_1); break; case 1: NPCPhrase (FRIENDLY_SPACE_HELLO_2); break; case 2: NPCPhrase (FRIENDLY_SPACE_HELLO_3); break; case 3: NPCPhrase (FRIENDLY_SPACE_HELLO_4); break; case 4: NPCPhrase (FRIENDLY_SPACE_HELLO_5); break; case 5: NPCPhrase (FRIENDLY_SPACE_HELLO_6); break; case 6: NPCPhrase (FRIENDLY_SPACE_HELLO_7); break; case 7: NPCPhrase (FRIENDLY_SPACE_HELLO_8); --NumVisits; break; } PkunkFriendlySpace ((RESPONSE_REF)0); } else { 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; } PkunkNeutralSpace ((RESPONSE_REF)0); } SET_GAME_STATE (PKUNK_VISITS, NumVisits); } else { // Encountering a Pkunk ship in space, while they are // migrating. NumVisits = GET_GAME_STATE (PKUNK_MIGRATE_VISITS); switch (NumVisits++) { case 0: NPCPhrase (MIGRATING_SPACE_1); break; case 1: NPCPhrase (MIGRATING_SPACE_2); break; case 2: NPCPhrase (MIGRATING_SPACE_3); break; case 3: NPCPhrase (MIGRATING_SPACE_4); break; case 4: NPCPhrase (MIGRATING_SPACE_5); break; case 5: NPCPhrase (MIGRATING_SPACE_6); break; case 6: NPCPhrase (MIGRATING_SPACE_7); break; case 7: NPCPhrase (MIGRATING_SPACE_8); --NumVisits; break; } SET_GAME_STATE (PKUNK_MIGRATE_VISITS, NumVisits); PkunkMigrate ((RESPONSE_REF)0); } }