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); }
// Must be called on the Starcon2Main thread. // This function is called synchronously wrt the game logic thread. void debugKeyPressedSynchronous (void) { // State modifying: equipShip (); giveDevices (); // Give the player the ships you can't ally with under normal // conditions. clearEscorts (); AddEscortShips (ARILOU_SHIP, 1); AddEscortShips (PKUNK_SHIP, 1); AddEscortShips (VUX_SHIP, 1); AddEscortShips (YEHAT_SHIP, 1); AddEscortShips (MELNORME_SHIP, 1); AddEscortShips (DRUUGE_SHIP, 1); AddEscortShips (ILWRATH_SHIP, 1); AddEscortShips (MYCON_SHIP, 1); AddEscortShips (SLYLANDRO_SHIP, 1); AddEscortShips (UMGAH_SHIP, 1); AddEscortShips (URQUAN_SHIP, 1); AddEscortShips (BLACK_URQUAN_SHIP, 1); resetCrewBattle (); resetEnergyBattle (); instantMove = !instantMove; showSpheres (); activateAllShips (); // forwardToNextEvent (TRUE); // SET_GAME_STATE (MELNORME_CREDIT1, 100); // GLOBAL_SIS (ResUnits) = 100000; // Informational: // dumpEvents (stderr); // Graphical and textual: // debugContexts(); }
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 Intro (void) { BYTE NumVisits; if (LOBYTE (GLOBAL (CurrentActivity)) == WON_LAST_BATTLE) { NPCPhrase_cb (OUT_TAKES0, &SelectAlienZOQ); NPCPhrase_cb (OUT_TAKES1, &SelectAlienPIK); NPCPhrase_cb (OUT_TAKES2, &SelectAlienZOQ); NPCPhrase_cb (OUT_TAKES3, &SelectAlienPIK); NPCPhrase_cb (OUT_TAKES4, &SelectAlienZOQ); NPCPhrase_cb (OUT_TAKES5, &SelectAlienPIK); NPCPhrase_cb (OUT_TAKES6, &SelectAlienZOQ); NPCPhrase_cb (OUT_TAKES7, &SelectAlienPIK); NPCPhrase_cb (OUT_TAKES8, &SelectAlienZOQ); NPCPhrase_cb (OUT_TAKES9, &SelectAlienPIK); NPCPhrase_cb (OUT_TAKES10, &SelectAlienZOQ); NPCPhrase_cb (OUT_TAKES11, &SelectAlienPIK); NPCPhrase_cb (OUT_TAKES12, &SelectAlienZOQ); NPCPhrase_cb (OUT_TAKES13, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); setSegue (Segue_peace); return; } if (GET_GAME_STATE (ZOQFOT_HOSTILE)) { NumVisits = GET_GAME_STATE (ZOQFOT_HOME_VISITS); switch (NumVisits++) { case 0: NPCPhrase_cb (HOSTILE_HELLO_10, &SelectAlienZOQ); NPCPhrase_cb (HOSTILE_HELLO_11, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); break; case 1: NPCPhrase_cb (HOSTILE_HELLO_20, &SelectAlienZOQ); NPCPhrase_cb (HOSTILE_HELLO_21, &SelectAlienPIK); NPCPhrase_cb (HOSTILE_HELLO_22, &SelectAlienZOQ); NPCPhrase_cb (HOSTILE_HELLO_23, &SelectAlienPIK); NPCPhrase_cb (HOSTILE_HELLO_24, &SelectAlienZOQ); NPCPhrase_cb (HOSTILE_HELLO_25, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); break; case 2: NPCPhrase_cb (HOSTILE_HELLO_30, &SelectAlienZOQ); NPCPhrase_cb (HOSTILE_HELLO_31, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); break; case 3: NPCPhrase_cb (HOSTILE_HELLO_40, &SelectAlienZOQ); NPCPhrase_cb (HOSTILE_HELLO_41, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); --NumVisits; break; } SET_GAME_STATE (ZOQFOT_HOME_VISITS, NumVisits); setSegue (Segue_hostile); } else if (!GET_GAME_STATE (MET_ZOQFOT)) { SET_GAME_STATE (MET_ZOQFOT, 1); NPCPhrase_cb (WE_ARE0, &SelectAlienZOQ); NPCPhrase_cb (WE_ARE1, &SelectAlienPIK); NPCPhrase_cb (WE_ARE2, &SelectAlienZOQ); NPCPhrase_cb (WE_ARE3, &SelectAlienPIK); NPCPhrase_cb (WE_ARE4, &SelectAlienZOQ); NPCPhrase_cb (WE_ARE5, &SelectAlienPIK); NPCPhrase_cb (WE_ARE6, &SelectAlienZOQ); NPCPhrase_cb (WE_ARE7, &SelectAlienPIK); if (GET_GAME_STATE (GLOBAL_FLAGS_AND_DATA) & (1 << 7)) { NPCPhrase_cb (INIT_HOME_HELLO0, &SelectAlienZOQ); NPCPhrase_cb (INIT_HOME_HELLO1, &SelectAlienPIK); NPCPhrase_cb (INIT_HOME_HELLO2, &SelectAlienZOQ); NPCPhrase_cb (INIT_HOME_HELLO3, &SelectAlienPIK); } else { NPCPhrase_cb (SCOUT_HELLO0, &SelectAlienZOQ); NPCPhrase_cb (SCOUT_HELLO1, &SelectAlienPIK); NPCPhrase_cb (SCOUT_HELLO2, &SelectAlienZOQ); NPCPhrase_cb (SCOUT_HELLO3, &SelectAlienPIK); } ZFPTalkSegue ((COUNT)~0); AquaintZoqFot (0); } else { if (GET_GAME_STATE (ZOQFOT_DISTRESS)) { #define MAX_ZFP_SHIPS 4 NPCPhrase_cb (THANKS_FOR_RESCUE0, &SelectAlienZOQ); NPCPhrase_cb (THANKS_FOR_RESCUE1, &SelectAlienPIK); NPCPhrase_cb (THANKS_FOR_RESCUE2, &SelectAlienZOQ); NPCPhrase_cb (THANKS_FOR_RESCUE3, &SelectAlienPIK); NPCPhrase_cb (THANKS_FOR_RESCUE4, &SelectAlienZOQ); NPCPhrase_cb (THANKS_FOR_RESCUE5, &SelectAlienPIK); NPCPhrase_cb (THANKS_FOR_RESCUE6, &SelectAlienZOQ); NPCPhrase_cb (THANKS_FOR_RESCUE7, &SelectAlienPIK); NPCPhrase_cb (THANKS_FOR_RESCUE8, &SelectAlienZOQ); NPCPhrase_cb (THANKS_FOR_RESCUE9, &SelectAlienPIK); NPCPhrase_cb (THANKS_FOR_RESCUE10, &SelectAlienZOQ); NPCPhrase_cb (THANKS_FOR_RESCUE11, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); SET_GAME_STATE (ZOQFOT_DISTRESS, 0); AddEscortShips (ZOQFOTPIK_SHIP, MAX_ZFP_SHIPS); } else { NumVisits = GET_GAME_STATE (ZOQFOT_HOME_VISITS); if (CheckAlliance (ZOQFOTPIK_SHIP) != GOOD_GUY) { switch (NumVisits++) { case 0: NPCPhrase_cb (NEUTRAL_HOME_HELLO_10, &SelectAlienZOQ); NPCPhrase_cb (NEUTRAL_HOME_HELLO_11, &SelectAlienPIK); NPCPhrase_cb (NEUTRAL_HOME_HELLO_12, &SelectAlienZOQ); NPCPhrase_cb (NEUTRAL_HOME_HELLO_13, &SelectAlienPIK); break; case 1: NPCPhrase_cb (NEUTRAL_HOME_HELLO_20, &SelectAlienZOQ); NPCPhrase_cb (NEUTRAL_HOME_HELLO_21, &SelectAlienPIK); NPCPhrase_cb (NEUTRAL_HOME_HELLO_22, &SelectAlienZOQ); NPCPhrase_cb (NEUTRAL_HOME_HELLO_23, &SelectAlienPIK); --NumVisits; break; } ZFPTalkSegue ((COUNT)~0); } else { switch (NumVisits++) { case 0: NPCPhrase_cb (ALLIED_HOME_HELLO_10, &SelectAlienZOQ); NPCPhrase_cb (ALLIED_HOME_HELLO_11, &SelectAlienPIK); NPCPhrase_cb (ALLIED_HOME_HELLO_12, &SelectAlienZOQ); NPCPhrase_cb (ALLIED_HOME_HELLO_13, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); break; case 1: NPCPhrase_cb (ALLIED_HOME_HELLO_20, &SelectAlienZOQ); NPCPhrase_cb (ALLIED_HOME_HELLO_21, &SelectAlienPIK); NPCPhrase_cb (ALLIED_HOME_HELLO_22, &SelectAlienZOQ); NPCPhrase_cb (ALLIED_HOME_HELLO_23, &SelectAlienPIK); NPCPhrase_cb (ALLIED_HOME_HELLO_24, &SelectAlienZOQ); NPCPhrase_cb (ALLIED_HOME_HELLO_25, &SelectAlienPIK); NPCPhrase_cb (ALLIED_HOME_HELLO_26, &SelectAlienZOQ); NPCPhrase_cb (ALLIED_HOME_HELLO_27, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); break; case 2: NPCPhrase_cb (ALLIED_HOME_HELLO_30, &SelectAlienZOQ); NPCPhrase_cb (ALLIED_HOME_HELLO_31, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); break; case 3: NPCPhrase_cb (ALLIED_HOME_HELLO_40, &SelectAlienZOQ); NPCPhrase_cb (ALLIED_HOME_HELLO_41, &SelectAlienPIK); ZFPTalkSegue ((COUNT)~0); --NumVisits; break; } } SET_GAME_STATE (ZOQFOT_HOME_VISITS, NumVisits); } ZoqFotHome (0); } }