static void ExitConversation (RESPONSE_REF R) { setSegue (Segue_peace); 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 (EscortFeasibilityStudy (SUPOX_SHIP) == 0) NPCPhrase (DONT_NEED); else { NPCPhrase (HAVE_4_SHIPS); AlienTalkSegue ((COUNT)~0); AddEscortShips (SUPOX_SHIP, 4); } } }
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 = EscortFeasibilityStudy (DRUUGE_SHIP); 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) { AddEscortShips (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); while (capacity > 0x3FFFL) { DeltaSISGauges (0, 0x3FFF, 0); capacity -= 0x3FFF; } DeltaSISGauges (0, (SIZE)capacity, 0); NPCPhrase (FUEL0); NPCNumber (f, NULL); 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 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 (EscortFeasibilityStudy (DRUUGE_SHIP) == 0) NPCPhrase (NOT_ENOUGH_ROOM); else { DeltaSISGauges (-SHIP_CREW_COST, 0, 0); SlaveryCount += SHIP_CREW_COST; AddEscortShips (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 { DeltaSISGauges (-ARTIFACT_CREW_COST, 0, 0); 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 { DeltaSISGauges (-ARTIFACT_CREW_COST, 0, 0); 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 { DeltaSISGauges (-ARTIFACT_CREW_COST, 0, 0); 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 { DeltaSISGauges (-FUEL_CREW_COST, FUEL_CREW_COST * FUEL_TANK_SCALE, 0); 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 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 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) && StartSphereTracking (YEHAT_SHIP) && EscortFeasibilityStudy (YEHAT_REBEL_SHIP)) InitCommunication (YEHAT_REBEL_CONVERSATION); } } return true; } GenerateDefault_generateOrbital (solarSys, world); return true; }